{"version":3,"sources":["pages/Dashboard/components/ProjectContributions/useProjectContributions.tsx","pages/Dashboard/components/ProjectContributions/ProjectContributions.tsx","pages/Dashboard/components/ExploreSection/ExperimentsCard/ExperimentsStore.ts","pages/Dashboard/components/ExploreSection/ExperimentsCard/useExperimentsCard.tsx","pages/Dashboard/components/ExploreSection/ExperimentsCard/ExperimentsCard.tsx","pages/Dashboard/components/ExploreSection/ExperimentsCard/index.ts","components/kit/ListItem/ListItem.tsx","pages/Dashboard/components/ExploreSection/DashboardBookmarks/DashboardBookmarksStore.ts","pages/Dashboard/components/ExploreSection/DashboardBookmarks/useDashboardBookmarks.tsx","pages/Dashboard/components/ExploreSection/DashboardBookmarks/DashboardBookmarks.tsx","pages/Dashboard/components/ExploreSection/QuickLinks/QuickLinks.tsx","modules/core/api/tagsApi/index.ts","pages/Dashboard/components/ExploreSection/TagsCard/TagsStore.ts","pages/Dashboard/components/ExploreSection/TagsCard/useTagsCard.tsx","pages/Dashboard/components/ExploreSection/TagsCard/TagsCard.tsx","pages/Dashboard/components/ExploreSection/RecentSearches/RecentSearchItem.tsx","pages/Dashboard/components/ExploreSection/RecentSearches/RecentSearches.tsx","pages/Dashboard/components/ExploreSection/ExploreSection.tsx","components/ReleaseNoteItem/ReleaseNoteItem.tsx","pages/Dashboard/components/DashboardRight/GuideDocs/GuidesStore.ts","pages/Dashboard/components/DashboardRight/GuideDocs/GuideDocs.tsx","modules/core/api/releaseNotesApi/index.ts","pages/Dashboard/components/DashboardRight/ReleaseNotes/ReleasesStore.ts","pages/Dashboard/components/DashboardRight/ReleaseNotes/useReleaseNotes.ts","pages/Dashboard/components/DashboardRight/ReleaseNotes/ReleaseNotes.tsx","pages/Dashboard/components/DashboardRight/DashboardRight.tsx","pages/Dashboard/components/DashboardContributionsFeed/DashboardContributionsFeedStore.ts","pages/Dashboard/components/DashboardContributionsFeed/useDashboardContributionsFeed.ts","pages/Dashboard/components/DashboardContributionsFeed/DashboardContributionsFeed.tsx","pages/Dashboard/components/DashboardContributionsFeed/index.ts","pages/Dashboard/components/ActiveRunsTable/ActiveRunsStore.ts","pages/Dashboard/components/ActiveRunsTable/useActiveRunsTable.tsx","pages/Dashboard/components/ActiveRunsTable/ActiveRunsTable.tsx","pages/Dashboard/components/QuickStart/QuickStart.tsx","pages/Dashboard/components/QuickStart/index.ts","pages/Dashboard/components/AimIntegrations/AimIntegrations.tsx","pages/Dashboard/components/AimIntegrations/index.ts","pages/Dashboard/Dashboard.tsx","modules/core/utils/createResource.ts","modules/core/api/projectApi/index.ts","components/CodeBlock/CodeBlock.style.ts","components/CodeBlock/CodeBlock.tsx","hooks/useCodeHighlighter.ts","modules/core/api/experimentsApi/index.ts","pages/Dashboard/components/ProjectContributions/ProjectContributionsStore.ts","utils/hexToRgbA.ts","components/StatisticsCard/StatisticsCard.tsx","components/StatisticsCard/index.ts","components/StatisticsBar/StatisticsBar.tsx","components/StatisticsBar/index.ts","pages/Explorers/Bookmarks/components/BookmarkCard/BookmarkCard.style.ts","pages/Explorers/Bookmarks/components/BookmarkCard/BookmarkCard.tsx","components/HeatMap/HeatMap.tsx","components/ContributionsFeed/FeedItem/FeedItem.tsx","components/ContributionsFeed/FeedItem/index.ts","components/ContributionsFeed/ContributionsFeed.tsx","components/ContributionsFeed/index.ts","pages/Dashboard/components/ProjectStatistics/ProjectStatistics.tsx","pages/Dashboard/components/ProjectStatistics/ProjectStatisticsStore.ts","pages/Dashboard/components/ProjectStatistics/useProjectStatistics.tsx","pages/Dashboard/components/ProjectStatistics/index.tsx","modules/core/api/dashboardsApi/index.ts"],"names":["useProjectContributions","engine","React","useRef","projectContributionsEngine","current","projectContributionsStore","projectContributionsState","state","useEffect","data","fetchProjectContributions","destroy","ProjectContributions","today","Date","ErrorBoundary","className","component","size","weight","tint","HeatMap","startDate","date","numDays","newDate","setDate","getDate","shiftDate","endDate","onCellClick","trackEvent","ANALYTICS_EVENT_KEYS","dashboard","activityCellClick","Object","keys","activity_map","map","k","memo","createExperimentsEngine","createResource","getExperiments","fetchExperiments","fetchData","experimentsState","useExperimentsCard","tableRef","useState","selectedRows","setSelectedRows","experimentsEngine","createExperimentEngine","experimentsStore","tableData","useMemo","index","key","name","archived","run_count","id","onRowSelect","useCallback","rowKey","rowData","newSelectedRows","_","omit","isEmpty","reduce","acc","tableColumns","dataKey","title","Checkbox","color","icon","checkedIcon","length","fontSize","onClick","checked","width","cellRenderer","cellData","style","paddingLeft","paddingRight","ExperimentNameBox","experimentName","experimentId","flexGrow","textAlign","updateData","newColumns","newData","experimentsQuery","values","join","ExperimentsCard","DataList","isLoading","loading","height","Math","min","searchableKeys","rowHeight","illustrationConfig","showImage","toolbarItems","CompareSelectedRunsPopover","appName","query","disabled","disableMatchBar","displayName","heights","small","medium","large","Container","styled","div","ListItem","children","rest","createDashboardBookmarksEngine","fetchDashboardsList","fetchDashboardBookmarks","dashboardBookmarksState","useDashboardBookmarks","history","useHistory","dashboardBookmarksEngine","createBookmarksEngine","dashboardBookmarksStore","handleClick","e","newTab","stopPropagation","path","PathEnum","Explorers","app_type","app_id","window","open","focus","push","DashboardBookmarks","slice","Tooltip","placement","description","BookmarkIconType","to","fullWidth","variant","linkItems","label","QuickLinks","value","search","encode","moment","subtract","format","DATE_QUERY_FORMAT","toLowerCase","api","NetworkService","getAPIHost","ENDPOINTS","TAGS","BASE","fetchTagsList","a","makeAPIGetRequest","GET","body","createTagsEngine","fetchTags","tagsState","useTagsCard","tagsEngine","tagsStore","includes","filter","row","tagsQuery","uniq","val","TagsCard","RecentSearchItem","explorer","elementRef","useCodeHighlighter","advancedMode","advancedQuery","ref","data-lang","RecentSearches","recentSearches","setRecentSearches","recent","getItem","JSON","parse","item","ExploreSection","setLoading","tagsLoading","experimentsLoading","bookmarksLoading","bookmarksEngine","ReleaseNoteItem","info","tagName","target","rel","guideStore","create","set","shuffled","guideLinks","shuffle","shuffledLinks","DASHBOARD_PAGE_GUIDES","sort","random","GuideDocs","link","url","box","href","DOCUMENTATIONS","MAIN_PAGE","RELEASE_NOTES","fetchReleaseNotes","query_params","per_page","headers","fetchReleaseByTagName","GET_BY_TAG_NAME","createReleasesEngine","fetchReleases","releasesState","useReleaseNotes","mounted","setMounted","scrollShadow","setScrollShadow","currentRelease","setCurrentRelease","releaseNotesEngine","createReleaseNotesEngine","releaseNotesStore","releaseNoteRef","releaseNoteNode","release","find","tag_name","AIM_VERSION","fetchCurrentRelease","removeEventListener","onChangelogContentScroll","scrollHeight","addEventListener","throttle","hasScrollShadow","scrollTop","getLatestReleaseInfo","releaseBody","wrapper","document","createElement","innerHTML","marked","listElements","querySelectorAll","forEach","li","innerText","replace","modifyReleaseName","releaseTitle","changelogData","some","html_url","currentReleaseData","LatestReleaseData","latest","ReleaseNotes","DashboardRight","createDashboardContributionsFeedEngine","call","createSearchRunRequest","queryParams","parseStream","fetchContributionsFeed","contributionsFeedState","useDashboardContributionsFeed","setData","contributionsFeedEngine","contributionsFeedStore","contributionsState","limit","exclude_params","exclude_traces","memoizedData","feedData","run","props","month","creation_time","TIMELINE_MONTH_FORMAT","hash","day","TIMELINE_DAY_FORMAT","contribution","TIMELINE_TIME_FORMAT","active","experiment","totalRunsCount","num_runs","archivedRunsCount","num_archived_runs","fetchedCount","loadMore","offset","DashboardContributionsFeed","ContributionsFeed","createActiveRunsEngine","createActiveRunsRequest","fetchActiveRuns","activeRunsState","useActiveRunsTable","activeRunsEngine","activeRunsStore","comparisonQuery","setComparisonQuery","metricsColumns","metrics","systemMetrics","metricsValues","traces","metric","trace","metricHash","getMetricHash","context","hasOwnProperty","last_value","last_step","last","metricContext","contextToString","isSystem","isSystemMetric","col","content","monospace","topHeader","formatSystemMetricName","columns","orderBy","concat","selectKey","RunNameColumn","runHash","TABLE_DATE_FORMAT","duration","processDurationTime","end_time","now","step","formatValue","pin","actionType","selected","Array","isArray","items","decode","ActiveRunsTable","classNames","Table","custom","multiSelect","noColumnActions","hideHeaderActions","showRowClickBehaviour","showResizeContainerActionBar","RowHeightSize","sm","QuickStart","CodeBlock","code","Link","SUPPORTED_TYPES","AimIntegrations","expanded","setExpanded","integrations","docsLink","INTEGRATIONS","PYTORCH_LIGHTNING","HUGGING_FACE","KERAS","KERAS_TUNER","XGBOOST","CATBOOST","FASTAI","LIGHT_GBM","PYTORCH_IGNITE","i","Accordion","onChange","panel","event","newExpanded","AccordionSummary","aria-controls","expandIcon","AccordionDetails","Dashboard","activeRunsCount","num_active_runs","classnames","ProjectStatistics","defaultState","error","getter","args","setState","PROJECTS","getParams","GET_PARAMS","getProjectContributions","GET_ACTIVITY","CopyToClipboardButton","visibility","top","right","display","cursor","position","ai","jc","CodeBlockContainer","background","br","p","minHeight","overflow","CodeBlockPre","margin","fontStyle","lh","fontMono","language","hideCopyIcon","as","CopyToClipBoard","contentRef","monaco","useMonaco","preRef","monacoConfig","getMonacoConfig","theme","config","colors","editor","colorizeElement","defineTheme","setTheme","EXPERIMENTS","getExperimentById","updateExperimentById","reqBody","makeAPIPutRequest","getExperimentContributions","getExperimentNote","GET_NOTE","createExperimentNote","makeAPIPostRequest","CREATE_NOTE","updateExperimentNote","noteId","createSearchExperimentRunsRequest","controller","AbortController","signal","runs","cancel","abort","hexToRgbA","hex","opacity","hexCode","substring","split","tmpHex","StatisticsCard","badge","count","iconBgColor","cardBgColor","onMouseOver","onMouseLeave","navLink","highlighted","outlined","onSafeMouseOver","styles","card","borderColor","backgroundColor","iconWrapper","iconColor","StatisticsBar","barStyles","prevItemLeftPos","left","prevItemPercent","percent","toFixed","BookmarkCardContainer","Box","fd","bs","borderBottom","CodeBlockWrapper","maxHeight","fw","tooltipTitle","images","params","scatters","BookmarkCard","select","type","onBookmarkDelete","onDeleteHover","setOnDeleteHover","tags","options","flex","css","ml","fontWeight","analytics","bookmarks","view","titleIcon","IconTrash","onConfirm","trigger","onMouseEnter","mt","wordBreak","gap","overflowX","tag","cellScales","cellSize","cellSpacing","scaleRange","additionalQuery","months","getFullYear","getMonth","firstDay","getDay","lastDay","diffDays","floor","abs","maxVal","maxValue","getRunCountByDay","getMaxVal","dayIndex","indexToDate","s","orderedMonths","xAxisStyles","gridStyles","gridTemplateColumns","gridTemplateRows","gridColumnGap","gridRowGap","x","renderCell","runsCount","scale","ceil","tooltip","getTime","add","role","m","d","FeedItem","StatusLabel","status","Run_Detail","RouteLink","undefined","useProjectStatistics","projectParamsStore","statisticsBarData","runsCountingMap","hoveredState","statisticsMap","source","projectStatisticsEngine","sequence","SequenceTypesEnum","Metric","Images","Figures","Texts","Audios","Distributions","fetchProjectParams","projectParamsState","statisticsInitialMap","routes","METRICS","FIGURES_EXPLORER","IMAGE_EXPLORE","AUDIOS_EXPLORER","TEXT_EXPLORER","runsCountingInitialMap","RUNS","setHoveredState","projectStatsEngine","statistics","totalTrackedSequencesCount","entries","seqName","seqData","systemMetricsCount","sequenceItemsCount","itemKey","itemData","startsWith","archivedRuns","DASHBOARDS","deleteDashboard","makeAPIDeleteRequest"],"mappings":"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","file":"static/js/dashboard.js?version=016f408ed3048c33a25e","sourcesContent":["import React from 'react';\n\nimport { GetProjectContributionsResult } from 'modules/core/api/projectApi';\nimport { IResourceState } from 'modules/core/utils/createResource';\n\nimport projectContributionsEngine from './ProjectContributionsStore';\n\nfunction useProjectContributions() {\n const { current: engine } = React.useRef(projectContributionsEngine);\n const projectContributionsStore: IResourceState =\n engine.projectContributionsState((state) => state);\n\n React.useEffect(() => {\n if (!projectContributionsStore.data) {\n engine.fetchProjectContributions();\n }\n return () => {\n engine.destroy();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return {\n projectContributionsStore,\n };\n}\n\nexport default useProjectContributions;\n","import React from 'react';\n\nimport HeatMap from 'components/HeatMap/HeatMap';\nimport { Text } from 'components/kit';\nimport ErrorBoundary from 'components/ErrorBoundary/ErrorBoundary';\n\nimport { ANALYTICS_EVENT_KEYS } from 'config/analytics/analyticsKeysMap';\n\nimport { trackEvent } from 'services/analytics';\n\nimport useProjectContributions from './useProjectContributions';\n\nimport './ProjectContributions.scss';\n\nfunction ProjectContributions(): React.FunctionComponentElement {\n const { projectContributionsStore } = useProjectContributions();\n function shiftDate(date: any, numDays: any) {\n const newDate = new Date(date);\n newDate.setDate(newDate.getDate() + numDays);\n return newDate;\n }\n let today = new Date();\n return (\n \n
\n \n Contributions\n \n
\n {\n trackEvent(ANALYTICS_EVENT_KEYS.dashboard.activityCellClick);\n }}\n data={Object.keys(\n projectContributionsStore.data?.activity_map ?? {},\n ).map((k) => [\n new Date(k),\n projectContributionsStore.data?.activity_map[k],\n ])}\n />\n
\n
\n
\n );\n}\nexport default React.memo(ProjectContributions);\n","import {\n getExperiments,\n IExperimentData,\n} from 'modules/core/api/experimentsApi';\nimport createResource from 'modules/core/utils/createResource';\n\nfunction createExperimentsEngine() {\n const { fetchData, state, destroy } =\n createResource(getExperiments);\n return { fetchExperiments: fetchData, experimentsState: state, destroy };\n}\n\nexport default createExperimentsEngine();\n","import React from 'react';\nimport _ from 'lodash-es';\n\nimport { Checkbox } from '@material-ui/core';\n\nimport { Icon, Text } from 'components/kit';\nimport ExperimentNameBox from 'components/ExperimentNameBox';\n\nimport { IResourceState } from 'modules/core/utils/createResource';\nimport { IExperimentData } from 'modules/core/api/experimentsApi';\n\nimport createExperimentEngine from './ExperimentsStore';\n\nimport { ExperimentsCardRowDataType } from '.';\n\nfunction useExperimentsCard() {\n const tableRef = React.useRef(null);\n const [selectedRows, setSelectedRows] = React.useState<\n Record\n >({});\n const { current: experimentsEngine } = React.useRef(createExperimentEngine);\n const experimentsStore: IResourceState =\n experimentsEngine.experimentsState((state) => state);\n\n React.useEffect(() => {\n experimentsEngine.fetchExperiments();\n return () => {\n experimentsEngine.destroy();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // memoized table data\n const tableData: ExperimentsCardRowDataType[] = React.useMemo(() => {\n if (experimentsStore.data) {\n return experimentsStore.data.map(\n ({ name, archived, run_count, id }: IExperimentData, index: number) => {\n return {\n key: index,\n name,\n archived,\n run_count,\n id,\n };\n },\n );\n }\n return [];\n }, [experimentsStore.data]);\n\n // on row selection\n const onRowSelect = React.useCallback(\n (rowKey?: string, rowData?: ExperimentsCardRowDataType) => {\n if (rowKey) {\n const newSelectedRows = selectedRows[rowKey]\n ? _.omit(selectedRows, rowKey)\n : { ...selectedRows, [rowKey]: rowData };\n setSelectedRows(newSelectedRows);\n } else if (!_.isEmpty(selectedRows)) {\n setSelectedRows({});\n } else {\n const newSelectedRows = tableData.reduce(\n (\n acc: Record,\n rowData: ExperimentsCardRowDataType,\n ) => {\n acc[rowData.id] = rowData;\n return acc;\n },\n {},\n );\n setSelectedRows(newSelectedRows);\n }\n },\n [selectedRows, tableData],\n );\n\n // memoized table columns\n const tableColumns = React.useMemo(\n () => [\n {\n dataKey: 'id',\n key: 'id',\n title: (\n }\n className='selectCheckbox'\n checkedIcon={\n tableData.length === Object.keys(selectedRows)?.length ? (\n \n \n \n ) : (\n \n \n \n )\n }\n onClick={() => onRowSelect()}\n checked={!_.isEmpty(selectedRows)}\n />\n ),\n width: '20px',\n cellRenderer: ({\n cellData,\n rowData,\n }: {\n cellData: string;\n rowData: ExperimentsCardRowDataType;\n }) => {\n return (\n }\n className='selectCheckbox'\n checked={!!selectedRows[cellData]}\n checkedIcon={\n \n \n \n }\n onClick={() => onRowSelect(cellData, rowData)}\n />\n );\n },\n },\n {\n dataKey: 'name',\n key: 'name',\n title: (\n \n Name\n \n ),\n width: 'calc(100% - 50px)',\n style: { paddingLeft: 10, paddingRight: 12 },\n cellRenderer: ({\n cellData,\n rowData,\n }: {\n cellData: string;\n rowData: ExperimentsCardRowDataType;\n }) => (\n \n ),\n },\n {\n dataKey: 'run_count',\n key: 'run_count',\n title: (\n \n Runs\n \n ),\n flexGrow: 1,\n width: '46px',\n textAlign: 'right',\n style: { textAlign: 'right' },\n cellRenderer: ({ cellData }: { cellData: number }) => (\n \n {cellData}\n \n ),\n },\n ],\n [tableData?.length, onRowSelect, selectedRows],\n );\n\n // Update the table data and columns when the experiments data changes\n React.useEffect(() => {\n if (tableRef.current?.updateData) {\n tableRef.current.updateData({\n newColumns: tableColumns,\n newData: tableData,\n });\n }\n }, [tableData, tableColumns]);\n\n const experimentsQuery = React.useMemo(() => {\n return `run.experiment in [${Object.values(selectedRows)\n .map(({ name }: ExperimentsCardRowDataType) => `\"${name}\"`)\n .join(',')}]`;\n }, [selectedRows]);\n\n return {\n tableRef,\n tableColumns,\n tableData,\n experimentsStore,\n selectedRows,\n experimentsQuery,\n };\n}\nexport default useExperimentsCard;\n","import React from 'react';\nimport _ from 'lodash-es';\n\nimport DataList from 'components/kit/DataList';\nimport { Text } from 'components/kit';\n\nimport CompareSelectedRunsPopover from 'pages/Explorers/Metrics/components/Table/CompareSelectedRunsPopover';\n\nimport { AppNameEnum } from 'services/models/explorer';\n\nimport useExperimentsCard from './useExperimentsCard';\n\nimport './ExperimentsCard.scss';\n\nfunction ExperimentsCard(): React.FunctionComponentElement | null {\n const {\n tableRef,\n tableColumns,\n tableData,\n experimentsStore,\n selectedRows,\n experimentsQuery,\n } = useExperimentsCard();\n return experimentsStore.data?.length ? (\n
\n \n Experiments ({experimentsStore.data.length})\n \n ,\n ]}\n disableMatchBar={true}\n />\n
\n ) : null;\n}\n\nExperimentsCard.displayName = 'ExperimentsCard';\n\nexport default React.memo(ExperimentsCard);\n","import ExperimentsCard from './ExperimentsCard';\n\nexport * from './ExperimentsCard.d';\nexport default ExperimentsCard;\n","import React from 'react';\nimport styled from 'styled-components';\n\nimport { IListItemProps, IListITemSize } from './ListItem.d';\n\nconst heights: { small: string; medium: string; large: string } = {\n small: '24px',\n medium: '28px',\n large: '32px',\n};\n\nconst Container = styled.div`\n display: flex;\n align-items: center;\n height: ${({ size }) => heights[size as IListITemSize]};\n padding: 0 0.75rem;\n border-radius: 0.25rem;\n transition: all 0.18s ease-out;\n cursor: pointer;\n &:hover {\n background-color: #f4f4f6;\n color: #1473e6;\n .Text {\n color: #1473e6;\n }\n }\n .Text {\n max-width: 100%;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n }\n`;\n\nfunction ListItem({\n className = '',\n size = 'medium',\n children,\n onClick,\n ...rest\n}: IListItemProps) {\n return (\n null}\n className={`ListItem ${className}`}\n size={size}\n {...rest}\n >\n {children}\n \n );\n}\n\nexport default React.memo(ListItem);\n","import {\n fetchDashboardsList,\n IDashboardData,\n} from 'modules/core/api/dashboardsApi';\nimport createResource from 'modules/core/utils/createResource';\n\nfunction createDashboardBookmarksEngine() {\n const { fetchData, state, destroy } =\n createResource(fetchDashboardsList);\n return {\n fetchDashboardBookmarks: fetchData,\n dashboardBookmarksState: state,\n destroy,\n };\n}\n\nexport default createDashboardBookmarksEngine();\n","import React from 'react';\nimport { useHistory } from 'react-router-dom';\n\nimport { PathEnum } from 'config/enums/routesEnum';\n\nimport { IResourceState } from 'modules/core/utils/createResource';\nimport { IDashboardData } from 'modules/core/api/dashboardsApi';\n\nimport createBookmarksEngine from './DashboardBookmarksStore';\n\nfunction useDashboardBookmarks() {\n const history = useHistory();\n const { current: dashboardBookmarksEngine } = React.useRef(\n createBookmarksEngine,\n );\n const dashboardBookmarksStore: IResourceState =\n dashboardBookmarksEngine.dashboardBookmarksState((state) => state);\n\n React.useEffect(() => {\n dashboardBookmarksEngine.fetchDashboardBookmarks();\n return () => {\n dashboardBookmarksEngine.destroy();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleClick: (\n e: React.MouseEvent,\n dashboard: IDashboardData,\n newTab?: boolean,\n ) => void = React.useCallback(\n (\n e: React.MouseEvent,\n dashboard: IDashboardData,\n newTab = false,\n ) => {\n e.stopPropagation();\n if (dashboard) {\n const path = `${PathEnum.Explorers}/${dashboard.app_type}/${dashboard.app_id}`;\n if (newTab) {\n window.open(path, '_blank');\n window.focus();\n return;\n }\n history.push(path);\n }\n },\n [history],\n );\n\n return { handleClick, dashboardBookmarksStore };\n}\n\nexport default useDashboardBookmarks;\n","import React from 'react';\nimport { NavLink } from 'react-router-dom';\n\nimport { Tooltip } from '@material-ui/core';\n\nimport { Button, Icon, Text } from 'components/kit';\nimport ListItem from 'components/kit/ListItem/ListItem';\n\nimport { IDashboardData } from 'modules/core/api/dashboardsApi';\n\nimport { BookmarkIconType } from 'pages/Explorers/Bookmarks/components/BookmarkCard/BookmarkCard';\n\nimport useDashboardBookmarks from './useDashboardBookmarks';\n\nimport './DashboardBookmarks.scss';\n\nfunction DashboardBookmarks(): React.FunctionComponentElement | null {\n const { dashboardBookmarksStore, handleClick } = useDashboardBookmarks();\n\n return dashboardBookmarksStore.data?.length ? (\n
\n \n Bookmarks{' '}\n {dashboardBookmarksStore.data.length\n ? `(${dashboardBookmarksStore.data.length})`\n : ''}\n \n
\n {dashboardBookmarksStore.data\n .slice(0, 5)\n ?.map((dashboard: IDashboardData) => (\n \n
\n \n \n handleClick(e, dashboard)}\n size={12}\n tint={100}\n >\n {dashboard.name}\n \n
\n handleClick(e, dashboard, true)}\n name='new-tab'\n />\n
\n \n
\n \n ))}\n
\n {dashboardBookmarksStore.data.length > 5 ? (\n \n \n \n ) : null}\n
\n ) : null;\n}\n\nexport default React.memo(DashboardBookmarks);\n","import React from 'react';\nimport { useHistory } from 'react-router-dom';\nimport moment from 'moment';\n\nimport { Tooltip } from '@material-ui/core';\n\nimport { Icon, Text } from 'components/kit';\nimport ListItem from 'components/kit/ListItem/ListItem';\n\nimport { DATE_QUERY_FORMAT } from 'config/dates/dates';\n\nimport { encode } from 'utils/encoder/encoder';\n\nimport './QuickLinks.scss';\n\nconst linkItems: { path: string; label: string }[] = [\n {\n path: 'active',\n label: 'Active runs',\n },\n {\n path: 'archived',\n label: 'Archived runs',\n },\n {\n path: 'latest',\n label: \"Last week's runs\",\n },\n];\n\nfunction QuickLinks(): React.FunctionComponentElement {\n const history = useHistory();\n\n const onClick: (\n e: React.MouseEvent,\n value: string,\n newTab?: boolean,\n ) => void = React.useCallback(\n (e: React.MouseEvent, value: string, newTab = false) => {\n e.stopPropagation();\n if (value) {\n let search = {};\n if (value === 'latest') {\n search = encode({\n query: `datetime(${moment()\n .subtract(7, 'day')\n .format(\n DATE_QUERY_FORMAT,\n )}) <= run.created_at < datetime(${moment().format(\n DATE_QUERY_FORMAT,\n )})`,\n });\n } else {\n search = encode({\n query: `run.${value.toLowerCase()} == True`,\n });\n }\n const path = `/runs?select=${search}`;\n if (newTab) {\n window.open(path, '_blank');\n window.focus();\n return;\n }\n history.push(path);\n }\n },\n [history],\n );\n\n return (\n
\n \n Quick Navigation\n \n
\n {linkItems.map(({ label, path }) => (\n \n onClick(e, path)}\n size={12}\n tint={100}\n >\n {label}\n \n \n
\n onClick(e, path, true)}\n name='new-tab'\n />\n
\n
\n \n ))}\n
\n
\n );\n}\n\nexport default QuickLinks;\n","import { getAPIHost } from 'config/config';\n\nimport ENDPOINTS from 'services/api/endpoints';\nimport NetworkService from 'services/NetworkService';\n\nimport {\n ICreateTagBody,\n ICreateTagResult,\n IGetTagRunsResult,\n ITagData,\n IUpdateTagBody,\n} from './types';\n\nconst api = new NetworkService(`${getAPIHost()}${ENDPOINTS.TAGS.BASE}`);\n\n/**\n * function fetchTagsList\n * this call is used for fetching tags list.\n * @returns {Promise}\n */\nasync function fetchTagsList(): Promise {\n return (await api.makeAPIGetRequest(ENDPOINTS.TAGS.GET)).body;\n}\n\n/**\n * function getTagById\n * this call is used for getting a tag by id.\n * @param id - id of tag\n * @returns {Promise}\n */\nasync function getTagById(id: string): Promise {\n return (await api.makeAPIGetRequest(`${ENDPOINTS.TAGS.GET}/${id}`)).body;\n}\n\n/**\n * function getTagRuns\n * this call is used for fetching a runs which have a tag by id.\n * @param id - id of tag\n * @returns {Promise}\n */\nasync function getTagRuns(id: string): Promise {\n return (await api.makeAPIGetRequest(`${ENDPOINTS.TAGS.GET}/${id}/runs`)).body;\n}\n\n/**\n * function createTag\n * this call is used for creating new tag.\n * @param reqBody - query body params\n * @returns {Promise}\n */\nasync function createTag(reqBody: ICreateTagBody): Promise {\n return (\n await api.makeAPIPostRequest(ENDPOINTS.TAGS.CREATE, {\n body: reqBody,\n })\n ).body;\n}\n\n/**\n * function updateTag\n * this call is used for updating a tag by id.\n * @param reqBody - query body params\n * @param id - id of tag\n * @returns {Promise}\n */\nasync function updateTag(\n reqBody: IUpdateTagBody,\n id: string,\n): Promise {\n return (\n await api.makeAPIPutRequest(`${ENDPOINTS.TAGS.UPDATE}/${id}`, {\n body: reqBody,\n })\n ).body;\n}\n\n/**\n * function archiveTag\n * this call is used for archiving a tag by id.\n * @param id - id of tag\n * @param archived - archived status\n * @returns {Promise}\n */\nasync function archiveTag(\n id: string,\n archived: boolean,\n): Promise {\n return (\n await api.makeAPIPutRequest(`${ENDPOINTS.TAGS.UPDATE}/${id}`, {\n body: { archived },\n })\n ).body;\n}\n\n/**\n * function deleteTag\n * this call is used for deleting a tag by id.\n * @param id - id of tag\n * @returns {Promise}\n */\nasync function deleteTag(id: string): Promise {\n return (await api.makeAPIDeleteRequest(`${ENDPOINTS.TAGS.DELETE}/${id}`))\n .body;\n}\n\nexport {\n fetchTagsList,\n getTagRuns,\n createTag,\n updateTag,\n getTagById,\n archiveTag,\n deleteTag,\n};\n","import createResource from 'modules/core/utils/createResource';\nimport { fetchTagsList } from 'modules/core/api/tagsApi';\nimport { ITagData } from 'modules/core/api/tagsApi/types';\n\nfunction createTagsEngine() {\n const { fetchData, state, destroy } =\n createResource(fetchTagsList);\n return { fetchTags: fetchData, tagsState: state, destroy };\n}\n\nexport default createTagsEngine();\n","import React from 'react';\nimport _ from 'lodash-es';\n\nimport { Checkbox } from '@material-ui/core';\n\nimport { Badge, Icon, Text } from 'components/kit';\n\nimport { IResourceState } from 'modules/core/utils/createResource';\nimport { ITagData } from 'modules/core/api/tagsApi/types';\n\nimport createTagsEngine from './TagsStore';\n\nfunction useTagsCard() {\n const tableRef = React.useRef(null);\n const [selectedRows, setSelectedRows] = React.useState([]);\n const { current: tagsEngine } = React.useRef(createTagsEngine);\n const tagsStore: IResourceState = tagsEngine.tagsState(\n (state) => state,\n );\n\n React.useEffect(() => {\n tagsEngine.fetchTags();\n return () => {\n tagsEngine.destroy();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // memoized table data\n const tableData = React.useMemo(() => {\n if (tagsStore.data) {\n return tagsStore.data.map(\n ({ name, archived, run_count, color }: ITagData) => {\n return {\n key: name,\n name,\n color,\n archived,\n run_count,\n id: name,\n };\n },\n );\n }\n return [];\n }, [tagsStore.data]);\n\n // on row selection\n const onRowSelect = React.useCallback(\n (rowKey?: string) => {\n if (rowKey) {\n const newSelectedRows = selectedRows.includes(rowKey)\n ? selectedRows.filter((row: string) => row !== rowKey)\n : [...selectedRows, rowKey];\n setSelectedRows(newSelectedRows);\n } else if (selectedRows.length) {\n setSelectedRows([]);\n } else {\n setSelectedRows(tableData.map(({ name }: any) => name));\n }\n },\n [selectedRows, tableData],\n );\n\n // memoized table columns\n const tableColumns = React.useMemo(\n () => [\n {\n dataKey: 'id',\n key: 'id',\n title: (\n }\n className='selectCheckbox'\n checkedIcon={\n tableData.length === Object.keys(selectedRows)?.length ? (\n \n \n \n ) : (\n \n \n \n )\n }\n onClick={() => onRowSelect()}\n checked={!!selectedRows.length}\n />\n ),\n width: '20px',\n cellRenderer: ({ cellData }: any) => {\n return (\n }\n className='selectCheckbox'\n checked={selectedRows.includes(cellData)}\n checkedIcon={\n \n \n \n }\n onClick={() => onRowSelect(cellData)}\n />\n );\n },\n },\n {\n dataKey: 'name',\n key: 'name',\n title: (\n \n Name\n \n ),\n width: 'calc(100% - 50px)',\n style: { paddingLeft: 10, paddingRight: 12 },\n cellRenderer: ({ cellData, rowData: { color } }: any) => (\n \n ),\n },\n {\n dataKey: 'run_count',\n key: 'run_count',\n title: (\n \n Runs\n \n ),\n flexGrow: 1,\n style: { textAlign: 'right' },\n width: '46px',\n cellRenderer: ({ cellData }: any) => (\n \n {cellData}\n \n ),\n },\n ],\n [tableData?.length, onRowSelect, selectedRows],\n );\n\n // Update the table data and columns when the tags data changes\n React.useEffect(() => {\n if (tableRef.current?.updateData) {\n tableRef.current.updateData({\n newColumns: tableColumns,\n newData: tableData,\n });\n }\n }, [tableData, tableColumns]);\n\n const tagsQuery = React.useMemo(() => {\n return `any([t in [${_.uniq(selectedRows)\n .map((val: string) => `\"${val}\"`)\n .join(',')}] for t in run.tags])`;\n }, [selectedRows]);\n\n return {\n tableRef,\n tableColumns,\n tableData,\n tagsStore,\n selectedRows,\n tagsQuery,\n };\n}\nexport default useTagsCard;\n","import React from 'react';\nimport { NavLink } from 'react-router-dom';\n\nimport DataList from 'components/kit/DataList';\nimport { Button, Text } from 'components/kit';\n\nimport CompareSelectedRunsPopover from 'pages/Explorers/Metrics/components/Table/CompareSelectedRunsPopover';\n\nimport { AppNameEnum } from 'services/models/explorer';\n\nimport useTagsCard from './useTagsCard';\n\nimport './TagsCard.scss';\n\nfunction TagsCard(): React.FunctionComponentElement | null {\n const {\n tableRef,\n tableColumns,\n tableData,\n tagsStore,\n selectedRows,\n tagsQuery,\n } = useTagsCard();\n\n return (\n
\n \n Tags {tagsStore?.data?.length ? `(${tagsStore?.data?.length})` : ''}\n \n {tagsStore?.data?.length ? (\n ,\n ]}\n />\n ) : null}\n \n \n \n
\n );\n}\n\nTagsCard.displayName = 'TagsCard';\n\nexport default React.memo(TagsCard);\n","import React from 'react';\nimport { useHistory } from 'react-router-dom';\n\nimport { Tooltip } from '@material-ui/core';\n\nimport ListItem from 'components/kit/ListItem/ListItem';\nimport { Icon } from 'components/kit';\n\nimport useCodeHighlighter from 'hooks/useCodeHighlighter';\n\nimport { BookmarkIconType } from 'pages/Explorers/Bookmarks/components/BookmarkCard/BookmarkCard';\n\nimport { encode } from 'utils/encoder/encoder';\n\nfunction RecentSearchItem({\n query,\n explorer,\n}: {\n query: string;\n explorer: string;\n}) {\n const { elementRef } = useCodeHighlighter();\n const history = useHistory();\n\n const onClick: (e: React.MouseEvent, newTab?: boolean) => void =\n React.useCallback(\n (e: React.MouseEvent, newTab?: boolean) => {\n e.stopPropagation();\n const search = encode({\n query,\n advancedMode: true,\n advancedQuery: query,\n });\n const path = `/${explorer}?select=${search}`;\n if (newTab) {\n window.open(path, '_blank');\n window.focus();\n return;\n }\n history.push(path);\n },\n [explorer, history, query],\n );\n return (\n \n
\n onClick(e)}>\n \n
\n            {query}\n          
\n onClick(e, true)}\n name='new-tab'\n />\n
\n
\n
\n );\n}\nexport default React.memo(RecentSearchItem);\n","import React from 'react';\n\nimport { Text } from 'components/kit';\n\nimport { getItem } from 'utils/storage';\n\nimport RecentSearchItem from './RecentSearchItem';\n\nimport './RecentSearches.scss';\n\nfunction RecentSearches(): React.FunctionComponentElement | null {\n const [recentSearches, setRecentSearches] = React.useState<\n { explorer: string; query: string }[]\n >([]);\n\n React.useEffect(() => {\n const recent = getItem('recentSearches');\n if (recent) {\n setRecentSearches(JSON.parse(recent));\n }\n }, []);\n return recentSearches.length ? (\n
\n \n Recent Searches\n \n
\n {recentSearches.map((item, index) => (\n \n ))}\n
\n
\n ) : null;\n}\n\nexport default React.memo(RecentSearches);\n","import React from 'react';\n\nimport { Spinner, Text } from 'components/kit';\n\nimport ExperimentsCard from './ExperimentsCard';\nimport DashboardBookmarks from './DashboardBookmarks/DashboardBookmarks';\nimport QuickLinks from './QuickLinks/QuickLinks';\nimport TagsCard from './TagsCard/TagsCard';\nimport RecentSearches from './RecentSearches/RecentSearches';\nimport createTagsEngine from './TagsCard/TagsStore';\nimport createExperimentsEngine from './ExperimentsCard/ExperimentsStore';\nimport bookmarksEngine from './DashboardBookmarks/DashboardBookmarksStore';\n\nimport './ExploreSection.scss';\n\nfunction ExploreSection(): React.FunctionComponentElement {\n const [loading, setLoading] = React.useState(true);\n const { loading: tagsLoading } = React.useRef(\n createTagsEngine,\n ).current.tagsState((state) => state);\n const { loading: experimentsLoading } = React.useRef(\n createExperimentsEngine,\n ).current.experimentsState((state) => state);\n const { loading: bookmarksLoading } = React.useRef(\n bookmarksEngine,\n ).current.dashboardBookmarksState((state) => state);\n\n React.useEffect(() => {\n // if all resources are loaded\n if (!tagsLoading && !experimentsLoading && !bookmarksLoading) {\n setLoading(false);\n }\n }, [bookmarksLoading, experimentsLoading, tagsLoading]);\n\n return (\n \n );\n}\n\nexport default React.memo(ExploreSection);\n","import React from 'react';\n\nimport { Text } from 'components/kit';\n\nimport { IReleaseNoteItemProps } from './ReleaseNoteItem.d';\n\nimport './ReleaseNoteItem.scss';\n\nfunction ReleaseNoteItem({\n info,\n tagName,\n ...rest\n}: IReleaseNoteItemProps): React.FunctionComponentElement {\n return (\n \n \n {tagName} - {info}\n \n \n );\n}\n\nexport default React.memo(ReleaseNoteItem);\n","import create from 'zustand';\n\nimport { DASHBOARD_PAGE_GUIDES } from 'config/references';\n\nconst guideStore = create<{\n shuffled: boolean;\n guideLinks: any;\n shuffle: () => void;\n}>((set) => ({\n shuffled: false,\n guideLinks: [{}],\n shuffle: () => {\n const guideLinks = DASHBOARD_PAGE_GUIDES;\n const shuffledLinks = guideLinks\n .sort(() => 0.5 - Math.random())\n .slice(0, 4);\n set({ shuffled: true, guideLinks: shuffledLinks });\n },\n}));\nexport default guideStore;\n","import React from 'react';\n\nimport { Tooltip } from '@material-ui/core';\n\nimport { Button, Icon, Text } from 'components/kit';\nimport ListItem from 'components/kit/ListItem/ListItem';\n\nimport { DOCUMENTATIONS } from 'config/references';\n\nimport guideStore from './GuidesStore';\n\nimport './GuideDocs.scss';\n\nfunction GuideDocs(): React.FunctionComponentElement {\n const { shuffle, guideLinks, shuffled } = guideStore();\n\n const onClick: (\n e: React.MouseEvent,\n path: string,\n newTab?: boolean,\n ) => void = React.useCallback(\n (e: React.MouseEvent, path: string, newTab = false) => {\n e.stopPropagation();\n if (path) {\n window.open(path, newTab ? '_blank' : '_self');\n window.focus();\n return;\n }\n },\n [],\n );\n\n React.useEffect(() => {\n if (!shuffled) {\n shuffle();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n
\n \n Guides\n \n
\n {guideLinks.map(\n (link: { name: string; url: string }, index: number) => (\n \n onClick(e, link.url)}\n size={12}\n tint={100}\n >\n {link.name}\n \n \n
\n onClick(e, link.url, true)}\n name='new-tab'\n />\n
\n
\n
\n ),\n )}\n
\n \n \n \n
\n );\n}\n\nexport default React.memo(GuideDocs);\n","import ENDPOINTS from 'services/api/endpoints';\nimport NetworkService from 'services/NetworkService';\n\nimport { IReleaseNote } from './types';\n\nconst api = new NetworkService(`${ENDPOINTS.RELEASE_NOTES.BASE}`);\n\n/**\n * function fetchReleaseNotes\n * this call is used for fetching release notes list.\n * @returns {Promise}\n */\nasync function fetchReleaseNotes(): Promise {\n return (\n await api.makeAPIGetRequest(ENDPOINTS.RELEASE_NOTES.GET, {\n query_params: { per_page: 10 },\n headers: {},\n })\n ).body;\n}\n\n/**\n * function fetchLatestRelease\n * this call is used for fetching latest release note.\n * @returns {Promise}\n */\nasync function fetchLatestRelease(): Promise {\n return (\n await api.makeAPIGetRequest(`${ENDPOINTS.RELEASE_NOTES.GET}/latest}`, {\n headers: {},\n })\n ).body;\n}\n\n/**\n * function fetchLatestReleaseById\n * this call is used for fetching release note by id.\n * @returns {Promise}\n */\nasync function fetchReleaseById(id: string): Promise {\n return (\n await api.makeAPIGetRequest(`${ENDPOINTS.RELEASE_NOTES.GET}/${id}}`, {\n headers: {},\n })\n ).body;\n}\n\n/**\n * function fetchLatestReleaseByTagName\n * this call is used for fetching release note by tag name.\n * @returns {Promise}\n */\n\nasync function fetchReleaseByTagName(tagName: string): Promise {\n return (\n await api.makeAPIGetRequest(\n `${ENDPOINTS.RELEASE_NOTES.GET}${ENDPOINTS.RELEASE_NOTES.GET_BY_TAG_NAME}/${tagName}`,\n { headers: {} },\n )\n ).body;\n}\n\nexport {\n fetchReleaseNotes,\n fetchLatestRelease,\n fetchReleaseById,\n fetchReleaseByTagName,\n};\n","import { fetchReleaseNotes } from 'modules/core/api/releaseNotesApi';\nimport { IReleaseNote } from 'modules/core/api/releaseNotesApi/types';\nimport createResource from 'modules/core/utils/createResource';\n\nfunction createReleasesEngine() {\n const { fetchData, state, destroy } =\n createResource(fetchReleaseNotes);\n return { fetchReleases: fetchData, releasesState: state, destroy };\n}\n\nexport default createReleasesEngine();\n","import React from 'react';\nimport _ from 'lodash-es';\nimport { marked } from 'marked';\n\nimport { AIM_VERSION } from 'config/config';\n\nimport { IReleaseNote } from 'modules/core/api/releaseNotesApi/types';\nimport { IResourceState } from 'modules/core/utils/createResource';\nimport { fetchReleaseByTagName } from 'modules/core/api/releaseNotesApi';\n\nimport createReleaseNotesEngine from './ReleasesStore';\n\nconst CHANGELOG_CONTENT_MAX_HEIGHT = 296;\nfunction useReleaseNotes() {\n const [loading, setLoading] = React.useState(true);\n const [mounted, setMounted] = React.useState(false);\n const [scrollShadow, setScrollShadow] = React.useState(false);\n const [currentRelease, setCurrentRelease] = React.useState();\n const { current: releaseNotesEngine } = React.useRef(\n createReleaseNotesEngine,\n );\n const releaseNotesStore: IResourceState =\n releaseNotesEngine.releasesState((state) => state);\n const releaseNoteRef = React.useRef(null);\n\n React.useEffect(() => {\n const releaseNoteNode = releaseNoteRef.current;\n\n if (releaseNotesStore.data?.length) {\n // detect current release in fetched release notes\n const release: IReleaseNote | undefined = releaseNotesStore.data?.find(\n (release: IReleaseNote) => release.tag_name === `v${AIM_VERSION}`,\n );\n if (release) {\n setCurrentRelease(release);\n setLoading(false);\n } else {\n fetchCurrentRelease();\n }\n } else {\n releaseNotesEngine.fetchReleases();\n }\n return () => {\n releaseNoteNode?.removeEventListener('scroll', onChangelogContentScroll);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [releaseNotesStore.data]);\n\n React.useEffect(() => {\n if (!loading) {\n setMounted(true);\n }\n if (mounted && releaseNoteRef.current) {\n if (\n releaseNoteRef?.current?.scrollHeight > CHANGELOG_CONTENT_MAX_HEIGHT\n ) {\n setScrollShadow(true);\n }\n releaseNoteRef?.current?.addEventListener(\n 'scroll',\n onChangelogContentScroll,\n );\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [loading, mounted]);\n\n const onChangelogContentScroll = _.throttle(() => {\n const hasScrollShadow: boolean =\n releaseNoteRef!.current!.scrollTop + CHANGELOG_CONTENT_MAX_HEIGHT <=\n releaseNoteRef!.current!.scrollHeight;\n setScrollShadow(hasScrollShadow);\n }, 150);\n async function fetchCurrentRelease(): Promise {\n try {\n const data = await fetchReleaseByTagName(`v${AIM_VERSION}`);\n setCurrentRelease(data);\n setLoading(false);\n } catch (e) {\n setLoading(false);\n }\n }\n\n function getLatestReleaseInfo(releaseBody: string): RegExpMatchArray | null {\n const wrapper = document.createElement('div');\n wrapper.innerHTML = marked.parse(releaseBody);\n const listElements: string[] = [];\n wrapper.querySelectorAll('li').forEach((li, index) => {\n if (index < 4) {\n listElements.push(\n li.innerText.replace(\n // eslint-disable-next-line no-useless-escape\n /(\\sby\\s\\@[A-z\\d](?:[A-z\\d]|-(?=[A-z\\d])){0,38}\\s\\w+\\shttps\\:\\/\\/github\\.com\\/((\\w+\\/?){4}))/g,\n '',\n ),\n );\n } else {\n return;\n }\n });\n return listElements;\n }\n\n // function to modify release notes name\n function modifyReleaseName(releaseTitle: string): string {\n // eslint-disable-next-line no-useless-escape\n return releaseTitle.replace(/(^\\🚀\\s*v\\d+\\.\\d+\\.\\d+\\s*\\-\\s*)/, '');\n }\n\n const changelogData: { tagName: string; info: any; url: string }[] =\n React.useMemo(() => {\n const data: { tagName: string; info: any; url: string }[] = [];\n releaseNotesStore?.data?.some((release: IReleaseNote) => {\n if (release.tag_name === `v${AIM_VERSION}`) {\n return true;\n }\n data.push({\n tagName: release.tag_name,\n info: modifyReleaseName(release.name),\n url: release.html_url,\n });\n return false;\n });\n return data;\n }, [releaseNotesStore.data]);\n\n const currentReleaseData:\n | { tagName: string; info: any; url: string }\n | undefined = React.useMemo(() => {\n if (currentRelease) {\n return {\n tagName: currentRelease?.tag_name,\n info: modifyReleaseName(currentRelease?.name),\n url: currentRelease.html_url,\n };\n }\n }, [currentRelease]);\n\n const LatestReleaseData:\n | { tagName: string; info: any; url: string }\n | undefined = React.useMemo(() => {\n const latest = releaseNotesStore?.data?.[0];\n if (latest) {\n return {\n tagName: latest?.tag_name,\n info: getLatestReleaseInfo(latest.body),\n url: latest.html_url,\n };\n }\n }, [releaseNotesStore.data]);\n\n return {\n changelogData,\n currentReleaseData,\n LatestReleaseData,\n isLoading: loading,\n releaseNoteRef,\n scrollShadow,\n };\n}\n\nexport default useReleaseNotes;\n","import React from 'react';\n\nimport { Button, Spinner, Text } from 'components/kit';\nimport ReleaseNoteItem from 'components/ReleaseNoteItem/ReleaseNoteItem';\n\nimport { AIM_VERSION } from 'config/config';\n\nimport GuideLinks from '../GuideDocs/GuideDocs';\n\nimport useReleaseNotes from './useReleaseNotes';\n\nimport './ReleaseNotes.scss';\n\nfunction ReleaseNotes(): React.FunctionComponentElement {\n const {\n changelogData,\n LatestReleaseData,\n currentReleaseData,\n isLoading,\n releaseNoteRef,\n scrollShadow,\n } = useReleaseNotes();\n\n return (\n
\n {isLoading ? (\n
\n \n
\n ) : (\n <>\n
\n
\n \n Aim {LatestReleaseData?.tagName}\n \n {`v${AIM_VERSION}` === LatestReleaseData?.tagName ? null : (\n Latest\n )}\n
\n
\n {LatestReleaseData?.info?.map((title: string, index: number) => (\n \n {title.replace(/-/g, ' ')}\n
\n ))}\n \n \n \n
\n
\n {`v${AIM_VERSION}` === LatestReleaseData?.tagName ? null : (\n
\n \n Changelog\n \n \n {changelogData.map((item) => (\n \n ))}\n
\n {currentReleaseData ? (\n \n \n \n ) : null}\n \n )}\n \n \n )}\n \n );\n}\n\nexport default React.memo(ReleaseNotes);\n","import React from 'react';\n\nimport { Text } from 'components/kit';\n\nimport ReleaseNotes from './ReleaseNotes/ReleaseNotes';\n\nimport './DashboardRight.scss';\n\nfunction DashboardRight(): React.FunctionComponentElement {\n return (\n \n );\n}\n\nexport default React.memo(DashboardRight);\n","import { createSearchRunRequest } from 'modules/core/api/runsApi';\nimport createResource from 'modules/core/utils/createResource';\n\nimport { RequestOptions } from 'services/NetworkService';\n\nimport { IRun } from 'types/services/models/metrics/runModel';\n\nimport { parseStream } from 'utils/encoder/streamEncoding';\n\nfunction createDashboardContributionsFeedEngine() {\n let { call } = createSearchRunRequest();\n\n const { fetchData, state, destroy } = createResource[]>(\n async (queryParams: RequestOptions['query_params']) =>\n parseStream(await call(queryParams)),\n );\n return {\n fetchContributionsFeed: (queryParams: RequestOptions['query_params']) =>\n fetchData(queryParams),\n contributionsFeedState: state,\n destroy,\n };\n}\n\nexport default createDashboardContributionsFeedEngine();\n","import React from 'react';\nimport moment from 'moment';\n\nimport {\n TIMELINE_DAY_FORMAT,\n TIMELINE_MONTH_FORMAT,\n TIMELINE_TIME_FORMAT,\n} from 'config/dates/dates';\n\nimport { IResourceState } from 'modules/core/utils/createResource';\n\nimport { IRun } from 'types/services/models/metrics/runModel';\n\nimport projectContributionsEngine from '../ProjectContributions/ProjectContributionsStore';\n\nimport contributionsFeedEngine from './DashboardContributionsFeedStore';\n\nfunction useDashboardContributionsFeed() {\n const [data, setData] = React.useState([]);\n const { current: engine } = React.useRef(contributionsFeedEngine);\n const contributionsFeedStore: IResourceState =\n engine.contributionsFeedState((state) => state);\n const { current: contributionsEngine } = React.useRef(\n projectContributionsEngine,\n );\n const contributionsState = contributionsEngine.projectContributionsState(\n (state) => state,\n );\n\n React.useEffect(() => {\n engine.fetchContributionsFeed({\n limit: 25,\n exclude_params: true,\n exclude_traces: true,\n });\n return () => {\n engine.destroy();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n React.useEffect(() => {\n if (contributionsFeedStore.data?.length) {\n let newData = [...data, ...contributionsFeedStore.data];\n setData(newData);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [contributionsFeedStore.data]);\n\n const memoizedData = React.useMemo(() => {\n // get existing month list from the contributionsFeedStore data\n const feedData: { [key: string]: any } = {};\n if (data.length) {\n const monthList = data?.reduce((acc: any, run: IRun) => {\n const { props } = run;\n const month = moment(props.creation_time * 1000).format(\n TIMELINE_MONTH_FORMAT,\n );\n if (!acc.includes(month)) {\n acc.push(month);\n }\n return acc;\n }, []);\n // create a list of objects with month and contributions\n\n monthList.forEach((month: string) => {\n feedData[month] = {};\n });\n\n // add contributions to the month list\n data?.forEach((run: IRun) => {\n const { props, hash } = run;\n\n // get the month\n const month = moment(props.creation_time * 1000).format(\n TIMELINE_MONTH_FORMAT,\n );\n\n // get the day of the month\n const day = moment(props.creation_time * 1000).format(\n TIMELINE_DAY_FORMAT,\n );\n\n // create a contribution object\n const contribution = {\n name: props.name,\n date: moment(props.creation_time * 1000).format(TIMELINE_TIME_FORMAT),\n hash,\n active: props.active,\n creation_time: props.creation_time,\n experiment: props.experiment?.name,\n experimentId: props.experiment?.id,\n };\n if (feedData[month]?.[day]?.length) {\n feedData[month][day].push(contribution);\n } else {\n feedData[month][day] = [contribution];\n }\n });\n }\n return feedData;\n }, [data]);\n\n function loadMore(): void {\n if (contributionsFeedStore.data && !contributionsFeedStore.loading) {\n engine.fetchContributionsFeed({\n limit: 25,\n exclude_params: true,\n exclude_traces: true,\n offset: data[data.length - 1].hash,\n });\n }\n }\n\n return {\n isLoading: contributionsFeedStore.loading,\n data: memoizedData,\n totalRunsCount: contributionsState.data?.num_runs,\n archivedRunsCount: contributionsState.data?.num_archived_runs,\n fetchedCount: data.length,\n loadMore,\n };\n}\n\nexport default useDashboardContributionsFeed;\n","import React from 'react';\n\nimport ContributionsFeed from 'components/ContributionsFeed';\n\nimport useDashboardContributionsFeed from './useDashboardContributionsFeed';\n\nfunction DashboardContributionsFeed(): React.FunctionComponentElement | null {\n const props = useDashboardContributionsFeed();\n\n return ;\n}\n\nexport default React.memo(DashboardContributionsFeed);\n","import DashboardContributionsFeed from './DashboardContributionsFeed';\n\nexport default DashboardContributionsFeed;\n","import { createActiveRunsRequest } from 'modules/core/api/runsApi';\nimport createResource from 'modules/core/utils/createResource';\n\nimport { IRun } from 'types/services/models/metrics/runModel';\n\nimport { parseStream } from 'utils/encoder/streamEncoding';\n\nfunction createActiveRunsEngine() {\n let { call } = createActiveRunsRequest();\n\n const { fetchData, state, destroy } = createResource[]>(\n async () => parseStream(await call()),\n );\n return { fetchActiveRuns: fetchData, activeRunsState: state, destroy };\n}\n\nexport default createActiveRunsEngine();\n","import React from 'react';\nimport _ from 'lodash-es';\nimport moment from 'moment';\n\nimport RunNameColumn from 'components/Table/RunNameColumn';\nimport { Badge } from 'components/kit';\nimport ExperimentNameBox from 'components/ExperimentNameBox';\n\nimport { TABLE_DATE_FORMAT } from 'config/dates/dates';\n\nimport { IResourceState } from 'modules/core/utils/createResource';\n\nimport { IRun } from 'types/services/models/metrics/runModel';\n\nimport contextToString from 'utils/contextToString';\nimport { processDurationTime } from 'utils/processDurationTime';\nimport { getMetricHash } from 'utils/app/getMetricHash';\nimport { formatValue } from 'utils/formatValue';\nimport { isSystemMetric } from 'utils/isSystemMetric';\nimport { formatSystemMetricName } from 'utils/formatSystemMetricName';\nimport { decode, encode } from 'utils/encoder/encoder';\n\nimport createActiveRunsEngine from './ActiveRunsStore';\n\nfunction useActiveRunsTable() {\n const tableRef = React.useRef(null);\n const { current: activeRunsEngine } = React.useRef(createActiveRunsEngine);\n const activeRunsStore: IResourceState[]> =\n activeRunsEngine.activeRunsState((state) => state);\n const [selectedRows, setSelectedRows] = React.useState<\n Record\n >({});\n const [comparisonQuery, setComparisonQuery] = React.useState('');\n\n React.useEffect(() => {\n activeRunsEngine.fetchActiveRuns();\n return () => {\n activeRunsEngine.destroy();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const metricsColumns = React.useMemo(() => {\n if (activeRunsStore.data) {\n const metrics: any = [];\n const systemMetrics: any = [];\n const metricsValues: any = {};\n activeRunsStore.data.forEach(({ hash, traces }: IRun) => {\n traces.metric.forEach((trace: any) => {\n const metricHash = getMetricHash(trace.name, trace.context as any);\n\n if (metricsValues.hasOwnProperty(metricHash)) {\n metricsValues[metricHash][hash] = [\n trace.last_value.last_step,\n trace.last_value.last,\n ];\n } else {\n metricsValues[metricHash] = {\n [hash]: [trace.last_value.last_step, trace.last_value.last],\n };\n\n const metricContext = contextToString(\n trace.context as Record,\n ) as string;\n\n const isSystem = isSystemMetric(trace.name);\n const col = {\n key: metricHash,\n content: (\n \n ),\n topHeader: isSystem\n ? formatSystemMetricName(trace.name)\n : trace.name,\n name: trace.name,\n context: metricContext,\n isSystem,\n };\n\n if (isSystem) {\n systemMetrics.push(col);\n } else {\n metrics.push(col);\n }\n }\n });\n });\n\n return {\n columns: _.orderBy(metrics, ['name', 'context'], ['asc', 'asc']).concat(\n _.orderBy(systemMetrics, ['name', 'context'], ['asc', 'asc']),\n ) as any,\n values: metricsValues,\n };\n }\n\n return {\n columns: [],\n values: [],\n };\n }, [activeRunsStore.data]);\n\n // memoized table data\n const tableData = React.useMemo(() => {\n if (activeRunsStore.data) {\n return activeRunsStore.data.map(\n ({ props, hash }: IRun, index: number) => {\n const key = encode({\n hash,\n });\n let row: any = {\n key,\n selectKey: key,\n index,\n experiment: {\n content: (\n \n ),\n },\n run: {\n content: (\n \n ),\n },\n date: moment(props.creation_time * 1000).format(TABLE_DATE_FORMAT),\n duration: processDurationTime(\n props.creation_time * 1000,\n props.end_time ? props.end_time * 1000 : Date.now(),\n ),\n };\n\n metricsColumns.columns.forEach((col: any) => {\n const [step, value] = metricsColumns.values[col.key][hash] ?? [\n null,\n null,\n ];\n row[col.key] = {\n content:\n step === null\n ? '--'\n : col.isSystem\n ? formatValue(value)\n : `step: ${step} / value: ${formatValue(value)}`,\n };\n });\n return row;\n },\n );\n }\n return [];\n }, [activeRunsStore.data, metricsColumns]);\n\n // memoized table columns\n const tableColumns = React.useMemo(() => {\n const columns = [\n {\n key: 'experiment',\n content: Experiment,\n topHeader: 'Run',\n pin: 'left',\n },\n {\n key: 'run',\n content: Name,\n topHeader: 'Run',\n pin: 'left',\n },\n {\n key: 'date',\n content: Date,\n topHeader: 'Run',\n },\n {\n key: 'duration',\n content: Duration,\n topHeader: 'Run',\n },\n ];\n return columns.concat(metricsColumns.columns);\n }, [metricsColumns]);\n\n // Update the table data and columns when the activity data changes\n React.useEffect(() => {\n if (tableRef.current?.updateData) {\n tableRef.current.updateData({\n newColumns: tableColumns,\n newData: tableData,\n });\n }\n }, [tableData, tableColumns]);\n\n // Handler for row selection\n const onRowSelect = React.useCallback(\n ({ actionType, data }) => {\n let selected: Record = { ...selectedRows };\n switch (actionType) {\n case 'single':\n if (selectedRows[data.key]) {\n selected = _.omit(selectedRows, data.key);\n } else {\n selected[data.key] = true;\n }\n break;\n case 'selectAll':\n if (Array.isArray(data)) {\n data.forEach((item: any) => {\n if (!selectedRows[item.key]) {\n selected[item.key] = true;\n }\n });\n } else {\n Object.values(data)\n .reduce((acc: any[], value: any) => {\n return acc.concat(value.items);\n }, [])\n .forEach((item: any) => {\n if (!selectedRows[item.selectKey]) {\n selected[item.selectKey] = true;\n }\n });\n }\n break;\n case 'removeAll':\n if (Array.isArray(data)) {\n selected = {};\n }\n break;\n }\n\n setSelectedRows(selected);\n\n setComparisonQuery(\n `run.hash in [${Object.keys(selected)\n .map((key) => `\"${JSON.parse(decode(key)).hash}\"`)\n .join(', ')}]`,\n );\n },\n [selectedRows],\n );\n\n return {\n data: activeRunsStore.data,\n tableData,\n tableColumns,\n tableRef,\n loading: activeRunsStore.loading,\n selectedRows,\n comparisonQuery,\n onRowSelect,\n };\n}\n\nexport default useActiveRunsTable;\n","import * as React from 'react';\nimport classNames from 'classnames';\n\nimport { Spinner, Text } from 'components/kit';\nimport Table from 'components/Table/Table';\n\nimport { RowHeightSize } from 'config/table/tableConfigs';\n\nimport CompareSelectedRunsPopover from 'pages/Explorers/Metrics/components/Table/CompareSelectedRunsPopover';\n\nimport { AppNameEnum } from 'services/models/explorer';\n\nimport useActiveRunsTable from './useActiveRunsTable';\n\nimport './ActiveRunsTable.scss';\n\nfunction ActiveRunsTable() {\n const {\n tableRef,\n tableColumns,\n tableData,\n loading,\n selectedRows,\n comparisonQuery,\n onRowSelect,\n } = useActiveRunsTable();\n\n return (\n
\n
\n \n Active runs {tableData.length > 0 ? `(${tableData.length})` : ''}\n \n {tableData.length > 0 && (\n
\n \n
\n )}\n
\n \n {loading ? (\n \n ) : (\n \n )}\n
\n \n );\n}\nexport default ActiveRunsTable;\n","import * as React from 'react';\n\nimport { Link } from '@material-ui/core';\n\nimport { Text } from 'components/kit';\nimport CodeBlock from 'components/CodeBlock/CodeBlock';\n\nimport { DOCUMENTATIONS } from 'config/references';\n\nimport './QuickStart.scss';\n\nfunction QuickStart() {\n return (\n
\n \n Quick Start\n \n
\n \n Integrate Aim with your code\n \n \n \n See the full list of supported trackable objects(e.g. images, text,\n etc){' '}\n \n here\n \n .\n \n
\n
\n );\n}\n\nexport default QuickStart;\n","import QuickStart from './QuickStart';\n\nexport default QuickStart;\n","import * as React from 'react';\n\nimport {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Link,\n} from '@material-ui/core';\n\nimport { Icon, Text } from 'components/kit';\nimport CodeBlock from 'components/CodeBlock/CodeBlock';\n\nimport { DOCUMENTATIONS } from 'config/references';\n\nimport './AimIntegrations.scss';\n\nfunction AimIntegrations() {\n const [expanded, setExpanded] = React.useState(0);\n\n const handleChange =\n (panel: number) => (event: React.ChangeEvent<{}>, newExpanded: boolean) => {\n setExpanded(newExpanded ? panel : false);\n };\n\n const integrations = [\n {\n title: 'Integrate PyTorch Lightning',\n docsLink: DOCUMENTATIONS.INTEGRATIONS.PYTORCH_LIGHTNING,\n code: `from aim.pytorch_lightning import AimLogger\n\n# ...\ntrainer = pl.Trainer(logger=AimLogger(experiment='experiment_name'))\n# ...`,\n },\n {\n title: 'Integrate Hugging Face',\n docsLink: DOCUMENTATIONS.INTEGRATIONS.HUGGING_FACE,\n code: `from aim.hugging_face import AimCallback\n\n# ...\naim_callback = AimCallback(repo='/path/to/logs/dir', experiment='mnli')\ntrainer = Trainer(\n model=model,\n args=training_args,\n train_dataset=train_dataset if training_args.do_train else None,\n eval_dataset=eval_dataset if training_args.do_eval else None,\n callbacks=[aim_callback],\n # ...\n)\n# ...`,\n },\n {\n title: 'Integrate Keras & tf.keras',\n docsLink: DOCUMENTATIONS.INTEGRATIONS.KERAS,\n code: `import aim\n\n# ...\nmodel.fit(x_train, y_train, epochs=epochs, callbacks=[\n aim.keras.AimCallback(repo='/path/to/logs/dir', experiment='experiment_name')\n \n # Use aim.tensorflow.AimCallback in case of tf.keras\n aim.tensorflow.AimCallback(repo='/path/to/logs/dir', experiment='experiment_name')\n])\n# ...`,\n },\n {\n title: 'Integrate KerasTuner',\n docsLink: DOCUMENTATIONS.INTEGRATIONS.KERAS_TUNER,\n code: `from aim.keras_tuner import AimCallback\n\n# ...\ntuner.search(\n train_ds,\n validation_data=test_ds,\n callbacks=[AimCallback(tuner=tuner, repo='.', experiment='keras_tuner_test')],\n)\n# ...`,\n },\n {\n title: 'Integrate XGBoost',\n docsLink: DOCUMENTATIONS.INTEGRATIONS.XGBOOST,\n code: `from aim.xgboost import AimCallback\n\n# ...\naim_callback = AimCallback(repo='/path/to/logs/dir', experiment='experiment_name')\nbst = xgb.train(param, xg_train, num_round, watchlist, callbacks=[aim_callback])\n# ...`,\n },\n {\n title: 'Integrate CatBoost',\n docsLink: DOCUMENTATIONS.INTEGRATIONS.CATBOOST,\n code: `from aim.catboost import AimLogger\n\n# ...\nmodel.fit(train_data, train_labels, log_cout=AimLogger(loss_function='Logloss'), logging_level=\"Info\")\n# ...`,\n },\n {\n title: 'Integrate fastai',\n docsLink: DOCUMENTATIONS.INTEGRATIONS.FASTAI,\n code: `from aim.fastai import AimCallback\n\n# ...\nlearn = cnn_learner(dls, resnet18, pretrained=True,\n loss_func=CrossEntropyLossFlat(),\n metrics=accuracy, model_dir=\"/tmp/model/\",\n cbs=AimCallback(repo='.', experiment='fastai_test'))\n# ...`,\n },\n {\n title: 'Integrate LightGBM',\n docsLink: DOCUMENTATIONS.INTEGRATIONS.LIGHT_GBM,\n code: `from aim.lightgbm import AimCallback\n\n# ...\naim_callback = AimCallback(experiment='lgb_test')\naim_callback.experiment['hparams'] = params\n\ngbm = lgb.train(params,\n lgb_train,\n num_boost_round=20,\n valid_sets=lgb_eval,\n callbacks=[aim_callback, lgb.early_stopping(stopping_rounds=5)])\n# ...`,\n },\n\n {\n title: 'Integrate PyTorch Ignite',\n docsLink: DOCUMENTATIONS.INTEGRATIONS.PYTORCH_IGNITE,\n code: `from aim.pytorch_ignite import AimLogger\n\n# ...\naim_logger = AimLogger()\n\naim_logger.log_params({\n \"model\": model.__class__.__name__,\n \"pytorch_version\": str(torch.__version__),\n \"ignite_version\": str(ignite.__version__),\n})\n\naim_logger.attach_output_handler(\n trainer,\n event_name=Events.ITERATION_COMPLETED,\n tag=\"train\",\n output_transform=lambda loss: {'loss': loss}\n)\n# ...`,\n },\n ];\n\n return (\n
\n \n Integrate Aim with your favorite ML framework\n \n
\n {integrations.map((item, i) => (\n \n }\n className='AimIntegrations__section__accordion__summary'\n >\n \n {item.title}\n \n \n \n \n \n See documentation{' '}\n \n here\n \n .\n \n \n \n ))}\n
\n
\n );\n}\n\nexport default AimIntegrations;\n","import AimIntegrations from './AimIntegrations';\n\nexport default AimIntegrations;\n","import React from 'react';\nimport classnames from 'classnames';\n\nimport ErrorBoundary from 'components/ErrorBoundary/ErrorBoundary';\nimport { Spinner, Text } from 'components/kit';\n\nimport ProjectContributions from './components/ProjectContributions/ProjectContributions';\nimport ExploreSection from './components/ExploreSection/ExploreSection';\nimport DashboardRight from './components/DashboardRight/DashboardRight';\nimport DashboardContributionsFeed from './components/DashboardContributionsFeed';\nimport ProjectStatistics from './components/ProjectStatistics';\nimport useProjectContributions from './components/ProjectContributions/useProjectContributions';\nimport ActiveRunsTable from './components/ActiveRunsTable/ActiveRunsTable';\nimport QuickStart from './components/QuickStart';\nimport AimIntegrations from './components/AimIntegrations';\n\nimport './Dashboard.scss';\n\nfunction Dashboard(): React.FunctionComponentElement {\n const { projectContributionsStore } = useProjectContributions();\n\n const totalRunsCount = projectContributionsStore.data?.num_runs ?? 0;\n const activeRunsCount = projectContributionsStore.data?.num_active_runs ?? 0;\n const isLoading = projectContributionsStore.loading;\n\n return (\n \n
\n \n \n {isLoading ? (\n \n ) : totalRunsCount === 0 ? (\n \n ) : (\n <>\n \n Overview\n \n \n {activeRunsCount ? : null}\n \n \n \n )}\n {!isLoading && !totalRunsCount && }\n \n \n
\n
\n );\n}\nexport default Dashboard;\n","import { RequestOptions } from 'https';\nimport create from 'zustand';\n\nexport interface IResourceState {\n data: T | null;\n loading: boolean;\n error: any;\n}\n\nconst defaultState = {\n data: null,\n loading: true,\n error: null,\n};\n\nfunction createResource(getter: any) {\n const state = create>(() => defaultState);\n\n async function fetchData(args?: GetterArgs) {\n state.setState({ loading: true });\n const data = await getter(args);\n state.setState({ data, loading: false });\n }\n function destroy() {\n state.destroy();\n state.setState(defaultState, true);\n }\n return { fetchData, state, destroy };\n}\n\nexport default createResource;\n","import { getAPIHost } from 'config/config';\n\nimport ENDPOINTS from 'services/api/endpoints';\nimport NetworkService from 'services/NetworkService';\n\nimport {\n GetParamsQueryOptions,\n GetParamsResult,\n GetProjectContributionsResult,\n} from './types';\n\nconst api = new NetworkService(`${getAPIHost()}${ENDPOINTS.PROJECTS.BASE}`);\n\n/**\n * function getParams\n * this call is used for i.e. autosuggestions etc.\n * @param {GetParamsQueryOptions} queryParams\n */\nasync function getParams(\n queryParams: GetParamsQueryOptions,\n): Promise {\n return (\n await api.makeAPIGetRequest(ENDPOINTS.PROJECTS.GET_PARAMS, {\n query_params: queryParams,\n })\n ).body;\n}\n\n/**\n * function getProjectContributions\n * this call is used from DashboardPage page to show project contributions data\n */\nasync function getProjectContributions(): Promise {\n return (await api.makeAPIGetRequest(ENDPOINTS.PROJECTS.GET_ACTIVITY)).body;\n}\n\nexport { getParams, getProjectContributions };\nexport * from './types';\n","import { styled } from 'config/stitches';\n\nconst CopyToClipboardButton = styled('div', {\n visibility: 'hidden',\n top: '0.75rem',\n right: '1rem',\n display: 'inline-block',\n cursor: 'pointer',\n position: 'absolute',\n ai: 'center',\n jc: 'center',\n});\n\nconst CodeBlockContainer = styled('div', {\n background: '#f2f3f4',\n br: '$3',\n p: '$9 3rem $9 $9',\n position: 'relative',\n minHeight: '3.5rem',\n display: 'flex',\n ai: 'center',\n overflow: 'auto',\n '&:hover': {\n [`${CopyToClipboardButton}`]: {\n visibility: 'visible',\n },\n },\n});\n\nconst CodeBlockPre = styled('pre', {\n margin: 0,\n fontStyle: 'normal',\n fontSize: '$4',\n lh: '1.3125rem',\n overflow: 'auto',\n fontMono: 15,\n});\n\nexport { CopyToClipboardButton, CodeBlockContainer, CodeBlockPre };\n","import React from 'react';\n\nimport CopyToClipBoard from 'components/CopyToClipBoard/CopyToClipBoard';\nimport ErrorBoundary from 'components/ErrorBoundary/ErrorBoundary';\n\nimport useCodeHighlighter from 'hooks/useCodeHighlighter';\n\nimport { ICodeBlockProps } from 'types/components/CodeBlock/CodeBlock';\n\nimport {\n CodeBlockContainer,\n CodeBlockPre,\n CopyToClipboardButton,\n} from './CodeBlock.style';\n\nfunction CodeBlock({\n code = '',\n className = '',\n language = 'python',\n hideCopyIcon = false,\n}: ICodeBlockProps): React.FunctionComponentElement {\n const { elementRef } = useCodeHighlighter(language);\n\n return (\n \n \n \n {code}\n \n \n {hideCopyIcon ? null : (\n \n \n \n )}\n \n \n \n );\n}\n\nexport default React.memo(CodeBlock);\n","import React from 'react';\n\nimport { useMonaco } from '@monaco-editor/react';\n\nimport { getMonacoConfig } from 'config/monacoConfig/monacoConfig';\n\nfunction useCodeHighlighter(language: string = 'python') {\n const monaco = useMonaco();\n const preRef = React.useRef(null);\n\n const monacoConfig: Record =\n React.useMemo(() => {\n return getMonacoConfig();\n }, []);\n\n React.useEffect(() => {\n monacoConfig.theme.config.colors = {\n ...monacoConfig.theme.config.colors,\n 'editor.background': '#f2f3f4',\n };\n if (monaco && preRef.current) {\n monaco.editor.colorizeElement(preRef.current, { theme: language });\n monaco.editor.defineTheme(\n monacoConfig.theme.name,\n monacoConfig.theme.config,\n );\n monaco.editor.setTheme(monacoConfig.theme.name);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [monaco]);\n return { elementRef: preRef };\n}\n\nexport default useCodeHighlighter;\n","import { getAPIHost } from 'config/config';\n\nimport ENDPOINTS from 'services/api/endpoints';\nimport NetworkService, { RequestInstance } from 'services/NetworkService';\n\nimport {\n ExperimentRunsSearchQueryParams,\n GetExperimentContributionsResult,\n GetExperimentNoteResult,\n IExperimentData,\n UpdateExperimentByIdReqBodyType,\n} from './types';\n\nconst api = new NetworkService(`${getAPIHost()}${ENDPOINTS.EXPERIMENTS.BASE}`);\n\n/**\n * function getExperiments\n * this call is used for fetching experiments data.\n * @returns {Promise}\n */\nasync function getExperiments(): Promise {\n return (await api.makeAPIGetRequest(ENDPOINTS.EXPERIMENTS.GET)).body;\n}\n\n/**\n * function searchExperiments\n * this call is used for searching experiment data.\n * @param query - query string\n * @returns {Promise}\n */\nasync function searchExperiment(query: string): Promise {\n return (\n await api.makeAPIGetRequest(`${ENDPOINTS.EXPERIMENTS.SEARCH}=${query}`)\n ).body;\n}\n\n/**\n * function getExperimentById\n * this call is used for fetching experiment data by id.\n * @param id - experiment id\n * @returns {Promise}\n */\nasync function getExperimentById(id: string): Promise {\n return (await api.makeAPIGetRequest(`${ENDPOINTS.EXPERIMENTS.GET}${id}`))\n .body;\n}\n\n/**\n * function getExperimentById\n * this call is used for updating experiment data by id.\n * @param id - experiment id\n * @param reqBody - query body params\n * @returns {Promise}\n */\nasync function updateExperimentById(\n reqBody: UpdateExperimentByIdReqBodyType,\n id: string,\n): Promise<{ status: string; id: string }> {\n return (\n await api.makeAPIPutRequest(`${ENDPOINTS.EXPERIMENTS.GET}${id}`, {\n body: reqBody,\n })\n ).body;\n}\n\n/**\n * function createExperiment\n * this call is used for create an experiment.\n * @param reqBody - query body params\n * @returns {Promise}\n */\nasync function createExperiment(reqBody: {\n name: string;\n}): Promise<{ id: string; status: string }> {\n return (\n await api.makeAPIPostRequest(ENDPOINTS.EXPERIMENTS.CREATE, {\n body: reqBody,\n })\n ).body;\n}\n\n/**\n * function getExperimentById\n * this call is used for updating experiment data by id.\n * @param { id, params } - query params\n * @returns {Promise}\n */\nasync function getRunsOfExperiment(\n id: string,\n params: { limit: number; offset?: string } = { limit: 10 },\n) {\n return await api.makeAPIGetRequest(`${ENDPOINTS.EXPERIMENTS.GET}${id}/runs`, {\n query_params: params,\n });\n}\n\n/**\n * function getExperimentContributions\n * this call is used from Experiment page to show experiment contributions data\n */\nasync function getExperimentContributions(\n id: string,\n): Promise {\n return (\n await api.makeAPIGetRequest(`${id}/${ENDPOINTS.EXPERIMENTS.GET_ACTIVITY}`)\n ).body;\n}\n\n/**\n * function getExperimentNote\n * this call is used from Experiment page to show the experiment note\n */\nasync function getExperimentNote(id: string): Promise {\n return (\n await api.makeAPIGetRequest(`${id}/${ENDPOINTS.EXPERIMENTS.GET_NOTE}`)\n ).body;\n}\n\n/**\n * function createExperimentNote\n * this call is used for creating experiment note by experiment id.\n * @param experimentId - experiment id\n * @param reqBody - note body\n * @returns {Promise}\n */\nasync function createExperimentNote(\n experimentId: string,\n reqBody: {\n content: string;\n },\n): Promise<{ id: string; created_at: string }> {\n return (\n await api.makeAPIPostRequest(\n `${experimentId}/${ENDPOINTS.EXPERIMENTS.CREATE_NOTE}`,\n {\n body: reqBody,\n },\n )\n ).body;\n}\n\n/**\n * function updateExperimentNote\n * this call is used for updating experiment note by experiment id and note id.\n * @param experimentId - experiment id\n * @param reqBody - note body\n * @returns {Promise}\n */\nasync function updateExperimentNote(\n experimentId: string,\n noteId: string,\n reqBody: {\n content: string;\n },\n): Promise<{ id: string; created_at: string; updated_at: string }> {\n return (\n await api.makeAPIPutRequest(\n `${experimentId}/${ENDPOINTS.EXPERIMENTS.CREATE_NOTE}/${noteId}`,\n {\n body: reqBody,\n },\n )\n ).body;\n}\n\nfunction createSearchExperimentRunsRequest(): RequestInstance {\n const controller = new AbortController();\n const signal = controller.signal;\n\n async function call({\n experimentId,\n queryParams,\n }: {\n experimentId: string;\n queryParams: ExperimentRunsSearchQueryParams;\n }): Promise {\n return (\n await api.makeAPIGetRequest(\n `${ENDPOINTS.EXPERIMENTS.GET}${experimentId}/runs`,\n {\n query_params: queryParams,\n signal,\n },\n )\n ).body.runs;\n }\n\n function cancel(): void {\n controller.abort();\n }\n\n return {\n call,\n cancel,\n };\n}\n\nexport {\n getExperiments,\n searchExperiment,\n getExperimentById,\n updateExperimentById,\n createExperiment,\n getRunsOfExperiment,\n getExperimentContributions,\n getExperimentNote,\n updateExperimentNote,\n createExperimentNote,\n createSearchExperimentRunsRequest,\n};\nexport * from './types';\n","import {\n getProjectContributions,\n GetProjectContributionsResult,\n} from 'modules/core/api/projectApi';\nimport createResource from 'modules/core/utils/createResource';\n\nfunction projectContributionsEngine() {\n const { fetchData, state, destroy } =\n createResource(getProjectContributions);\n return {\n fetchProjectContributions: fetchData,\n projectContributionsState: state,\n destroy,\n };\n}\n\nexport default projectContributionsEngine();\n","function hexToRgbA(hex: string, opacity: number): string {\n let hexCode = hex?.substring(1).split('');\n if (hexCode.length === 3) {\n hexCode = [\n hexCode[0],\n hexCode[0],\n hexCode[1],\n hexCode[1],\n hexCode[2],\n hexCode[2],\n ];\n }\n const tmpHex = +('0x' + hexCode.join(''));\n return `rgba(${[(tmpHex >> 16) & 255, (tmpHex >> 8) & 255, tmpHex & 255].join(\n ',',\n )},${opacity || 1})`;\n}\n\nexport default hexToRgbA;\n","import * as React from 'react';\nimport { useHistory } from 'react-router-dom';\nimport classNames from 'classnames';\n\nimport { Icon, Text } from 'components/kit';\n\nimport hexToRgbA from 'utils/hexToRgbA';\n\nimport { IStatisticsCardProps } from './index';\n\nimport './StatisticsCard.scss';\n\nfunction StatisticsCard({\n label,\n badge = { value: '' },\n count,\n icon,\n iconBgColor = '#000000',\n cardBgColor = hexToRgbA(iconBgColor, 0.1),\n onMouseOver,\n onMouseLeave,\n navLink,\n highlighted,\n outlined = false,\n isLoading = false,\n}: IStatisticsCardProps) {\n const history = useHistory();\n const onSafeMouseOver = React.useCallback(\n (id: string) => {\n if (typeof onMouseOver === 'function') {\n onMouseOver(id, 'card');\n }\n },\n [onMouseOver],\n );\n const styles = {\n card: {\n borderColor: outlined ? iconBgColor : 'transparent',\n backgroundColor: highlighted ? iconBgColor : cardBgColor,\n },\n iconWrapper: {\n backgroundColor: highlighted ? '#fff' : iconBgColor,\n },\n iconColor: highlighted ? iconBgColor : '#fff',\n label: highlighted ? { color: '#fff' } : {},\n count: highlighted ? { color: '#fff' } : {},\n };\n return (\n navLink && history.push(navLink)}\n onMouseLeave={onMouseLeave}\n onMouseOver={() => onSafeMouseOver(label)}\n className={classNames('StatisticsCard', { highlighted })}\n style={styles.card}\n >\n {badge?.value && (\n \n {badge.value}\n \n )}\n {icon && (\n
\n \n
\n )}\n
\n \n {label}\n \n \n {isLoading ? '--' : count}\n \n
\n \n );\n}\n\nStatisticsCard.displayName = 'StatisticsCard';\n\nexport default React.memo(StatisticsCard);\n","import StatisticsCard from './StatisticsCard';\n\nexport * from './StatisticsCard.d';\n\nexport default StatisticsCard;\n","import * as React from 'react';\nimport classNames from 'classnames';\n\nimport { Tooltip } from '@material-ui/core';\n\nimport { IBarStyle, IStatisticsBarProps } from '.';\n\nimport './StatisticsBar.scss';\n\nfunction StatisticsBar({\n data = [],\n width = '100%',\n height = 8,\n onMouseOver,\n onMouseLeave,\n}: IStatisticsBarProps) {\n const onSafeMouseOver = React.useCallback(\n (id: string) => {\n if (typeof onMouseOver === 'function') {\n onMouseOver(id, 'bar');\n }\n },\n [onMouseOver],\n );\n const barStyles = React.useMemo(() => {\n const styles: IBarStyle[] = [];\n for (let i = 0; i < data.length; i++) {\n const item = data[i];\n const prevItemLeftPos = styles[i - 1]?.left || 0;\n const prevItemPercent = data[i - 1]?.percent || 0;\n const style = {\n width: `${item.percent.toFixed(2)}%`,\n left: i === 0 ? 0 : prevItemLeftPos + prevItemPercent,\n backgroundColor: item.color,\n };\n styles.push(style);\n }\n return styles;\n }, [data]);\n return (\n
\n {Object.values(data).map(\n ({ percent, color, label = '', highlighted }, i) =>\n percent ? (\n \n onSafeMouseOver(label)}\n />\n \n ) : null,\n )}\n
\n );\n}\n\nStatisticsBar.displayName = 'StatisticsBar';\n\nexport default React.memo(StatisticsBar);\n","import StatisticsBar from './StatisticsBar';\n\nexport * from './StatisticsBar.d';\n\nexport default StatisticsBar;\n","import { Box } from 'components/kit_v2';\n\nimport { styled } from 'config/stitches';\n\nconst BookmarkCardContainer = styled(Box, {\n position: 'relative',\n display: 'flex',\n fd: 'column',\n p: '$13',\n bs: 'inset 0 -1px 0 0 #B5C4D3',\n '&:last-child': { borderBottom: 'none' },\n});\n\nconst CodeBlockWrapper = styled('div', {\n '& pre': {\n maxHeight: '62px',\n '& > span': {\n display: 'inline-flex',\n fw: 'wrap',\n },\n },\n});\n\nexport { BookmarkCardContainer, CodeBlockWrapper };\n","import React from 'react';\n\nimport { IconTrash } from '@tabler/icons-react';\n\nimport CodeBlock from 'components/CodeBlock/CodeBlock';\nimport { Icon } from 'components/kit';\nimport { IconName } from 'components/kit/Icon';\nimport ErrorBoundary from 'components/ErrorBoundary/ErrorBoundary';\nimport {\n Badge,\n Box,\n Dialog,\n IconButton,\n Link,\n Text,\n Tooltip,\n} from 'components/kit_v2';\n\nimport { ANALYTICS_EVENT_KEYS } from 'config/analytics/analyticsKeysMap';\nimport { PathEnum } from 'config/enums/routesEnum';\n\nimport * as analytics from 'services/analytics';\n\nimport { IBookmarkCardProps } from './BookmarkCard.d';\nimport { BookmarkCardContainer, CodeBlockWrapper } from './BookmarkCard.style';\n\nexport const BookmarkIconType: {\n [key: string]: { name: IconName; tooltipTitle: string };\n} = {\n runs: { name: 'runs', tooltipTitle: 'Runs Explorer' },\n images: { name: 'images', tooltipTitle: 'Images Explorer' },\n params: { name: 'params', tooltipTitle: 'Params Explorer' },\n metrics: { name: 'metrics', tooltipTitle: 'Metrics Explorer' },\n scatters: { name: 'scatterplot', tooltipTitle: 'Scatters Explorer' },\n};\n\nfunction BookmarkCard({\n name,\n id,\n app_id,\n description,\n select,\n type,\n onBookmarkDelete,\n}: IBookmarkCardProps): React.FunctionComponentElement {\n const [onDeleteHover, setOnDeleteHover] = React.useState(false);\n function handleBookmarkDelete(): void {\n onBookmarkDelete(id);\n }\n const tags: { label: string }[] = React.useMemo(() => {\n return select?.options?.map((val: any) => ({ label: val.label })) || [];\n }, [select]);\n\n return (\n \n \n \n \n \n
\n \n
\n
\n \n analytics.trackEvent(ANALYTICS_EVENT_KEYS.bookmarks.view)\n }\n to={`${PathEnum.Explorers}/${type}/${app_id}`}\n >\n {name}\n \n
\n \n }\n title='Delete bookmarks'\n description='Are you sure you want to delete this bookmark?'\n onConfirm={handleBookmarkDelete}\n trigger={\n setOnDeleteHover(true)}\n onMouseLeave={() => setOnDeleteHover(false)}\n size='md'\n variant='ghost'\n color={onDeleteHover ? 'danger' : 'secondary'}\n icon={}\n />\n }\n />\n \n
\n \n {description}\n \n {(!select.advancedMode && select.query) ||\n (select.advancedMode && select.advancedQuery) ? (\n \n \n \n ) : null}\n {tags.length && !select.advancedMode ? (\n \n {tags.map((tag, index) => {\n return ;\n })}\n \n ) : null}\n
\n
\n );\n}\n\nexport default BookmarkCard;\n","import React from 'react';\nimport moment from 'moment';\nimport { useHistory } from 'react-router-dom';\n\nimport { Tooltip } from '@material-ui/core';\n\nimport { Text } from 'components/kit';\nimport ErrorBoundary from 'components/ErrorBoundary/ErrorBoundary';\n\nimport { ANALYTICS_EVENT_KEYS } from 'config/analytics/analyticsKeysMap';\nimport { DATE_QUERY_FORMAT } from 'config/dates/dates';\n\nimport * as analytics from 'services/analytics';\n\nimport { encode } from 'utils/encoder/encoder';\n\nimport './HeatMapStyle.scss';\n\nconst cellScales: number[] = [0, 1, 2, 3, 4];\nfunction HeatMap({\n data,\n startDate,\n endDate,\n cellSize = 12,\n cellSpacing = 4,\n scaleRange = 4,\n onCellClick,\n additionalQuery = '',\n}: any) {\n const oneDay = 24 * 60 * 60 * 1000;\n const weekDays = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];\n const months = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n ];\n const history = useHistory();\n startDate = new Date(\n startDate.getFullYear(),\n startDate.getMonth(),\n startDate.getDate(),\n );\n endDate = new Date(\n endDate.getFullYear(),\n endDate.getMonth(),\n endDate.getDate(),\n );\n\n let firstDay = startDate;\n while (firstDay.getDay() !== 0) {\n firstDay = shiftDate(firstDay, -1);\n }\n\n let lastDay = endDate;\n\n while (lastDay.getDay() !== 0) {\n lastDay = shiftDate(lastDay, 1);\n }\n\n if (lastDay.getDay() === 0) {\n lastDay = shiftDate(lastDay, 7);\n }\n\n const diffDays = Math.floor(Math.abs((firstDay - lastDay) / oneDay));\n\n const maxVal = getMaxVal();\n\n // get max run count in data\n function getMaxVal() {\n let maxValue = 0;\n [...Array(diffDays).keys()].forEach((index) => {\n let count = getRunCountByDay(index);\n maxValue = count > maxValue ? count : maxValue;\n });\n return maxValue;\n }\n\n // get runs count by day index\n function getRunCountByDay(dayIndex: number): number {\n const date = indexToDate(dayIndex);\n let count = 0;\n for (let s = 0; s < data.length; s++) {\n if (\n data[s]?.[0].getFullYear() === date.getFullYear() &&\n data[s]?.[0].getMonth() === date.getMonth() &&\n data[s]?.[0].getDate() === date.getDate()\n ) {\n count += data[s][1];\n }\n }\n return count;\n }\n\n const orderedMonths = [\n ...months.slice(firstDay.getMonth()),\n ...months.slice(0, firstDay.getMonth()),\n ];\n\n const xAxisStyles = {\n width: `${\n (diffDays / 7) * cellSize + (diffDays / 7 - 1) * cellSpacing - 50\n }px`,\n };\n\n const gridStyles = {\n gridTemplateColumns: `repeat(${diffDays / 7}, 1fr)`,\n gridTemplateRows: 'repeat(7, 1fr)',\n width: `${(diffDays / 7) * cellSize + (diffDays / 7 - 1) * cellSpacing}px`,\n height: `${7 * cellSize + 6 * cellSpacing}px`,\n gridColumnGap: `${cellSpacing}px`,\n gridRowGap: `${cellSpacing}px`,\n };\n\n function shiftDate(date: any, numDays: any) {\n const newDate = new Date(date);\n newDate.setDate(newDate.getDate() + numDays);\n return newDate;\n }\n\n function indexToDate(index: number) {\n const x = Math.floor(index / 7);\n const y = index % 7;\n\n return shiftDate(firstDay, x * 7 + y);\n }\n\n function getScale(value: number) {\n return Math.ceil((value / maxVal) * scaleRange);\n }\n function renderCell(index: number) {\n const runsCount = getRunCountByDay(index);\n const date = indexToDate(index);\n const scale = runsCount ? getScale(runsCount) : 0;\n const tooltip = ` ${runsCount} tracked run${\n runsCount !== 1 ? 's' : ''\n } on ${months[date.getMonth()]} ${date.getDate()}, ${date.getFullYear()}`;\n\n function onClickCell(e: React.MouseEvent) {\n e.stopPropagation();\n onCellClick();\n if (scale) {\n const startDate = date.getTime();\n\n const search = encode({\n query: `datetime(${moment(startDate).format(\n DATE_QUERY_FORMAT,\n )}) <= run.created_at < datetime(${moment(startDate)\n .add(1, 'day')\n .format(DATE_QUERY_FORMAT)}) ${additionalQuery}`,\n });\n analytics.trackEvent(ANALYTICS_EVENT_KEYS.dashboard.activityCellClick);\n history.push(`/runs?select=${search}`);\n }\n }\n\n return (\n \n
\n {+endDate < +indexToDate(index) ? (\n
\n ) : (\n \n \n \n )}\n
\n \n );\n }\n\n return (\n
\n
\n
\n \n {orderedMonths.slice(0, 10).map((m, i) => (\n
\n {m}\n
\n ))}\n
\n
\n {weekDays.map((d, i) => (\n
\n {d}\n
\n ))}\n
\n
\n {[...Array(diffDays).keys()].map((index) => renderCell(index))}\n
\n
\n
\n \n Less\n \n {cellScales.map((scale) => (\n \n \n
\n ))}\n\n \n More\n \n
\n
\n );\n}\n\nexport default HeatMap;\n","import React from 'react';\nimport { Link as RouteLink } from 'react-router-dom';\n\nimport { Link, Tooltip } from '@material-ui/core';\n\nimport { Icon, Text } from 'components/kit';\nimport StatusLabel from 'components/StatusLabel';\nimport ExperimentNameBox from 'components/ExperimentNameBox';\n\nimport { PathEnum } from 'config/enums/routesEnum';\n\nimport { IFeedItemProps } from '.';\n\nimport './FeedItem.scss';\n\nfunction FeedItem(\n props: IFeedItemProps,\n): React.FunctionComponentElement {\n return (\n
\n
\n \n \n {props.date.split('_').join(' ')}\n \n
\n
\n {props.data.map((item) => (\n
\n
\n \n {item.date}\n \n \n Started a run:\n \n \n
\n \n
\n
\n
\n
\n \n /\n \n
\n \n {item.name}\n \n
\n
\n
\n
\n ))}\n
\n
\n );\n}\n\nexport default React.memo(FeedItem);\n","import FeedItem from './FeedItem';\n\nexport * from './FeedItem.d';\nexport default FeedItem;\n","import React from 'react';\nimport _ from 'lodash-es';\n\nimport { Button, Spinner, Text } from 'components/kit';\n\nimport FeedItem from './FeedItem';\n\nimport { IContributionsFeedProps } from '.';\n\nimport './ContributionsFeed.scss';\n\nfunction ContributionsFeed({\n data,\n loadMore,\n isLoading,\n totalRunsCount = 0,\n fetchedCount = 0,\n archivedRunsCount = 0,\n}: IContributionsFeedProps): React.FunctionComponentElement | null {\n return totalRunsCount && totalRunsCount !== archivedRunsCount ? (\n
\n \n Activity\n \n {isLoading && _.isEmpty(data) ? (\n
\n \n
\n ) : (\n <>\n {Object.keys(data).map((key) => (\n
\n \n {key.split('_').join(' ')}\n \n {Object.keys(data[key]).map((item: string) => (\n \n ))}\n
\n ))}\n\n {fetchedCount < totalRunsCount - archivedRunsCount! ? (\n \n {isLoading ? 'Loading...' : 'Show more activity'}\n \n ) : null}\n \n )}\n
\n ) : null;\n}\n\nexport default React.memo(ContributionsFeed);\n","import ContributionsFeed from './ContributionsFeed';\n\nexport * from './ContributionsFeed.d';\n\nexport default ContributionsFeed;\n","import * as React from 'react';\n\nimport { Text } from 'components/kit';\nimport StatisticsCard from 'components/StatisticsCard';\nimport StatisticsBar from 'components/StatisticsBar';\n\nimport { useProjectStatistics } from '.';\n\nimport './ProjectStatistics.scss';\n\nfunction ProjectStatistics() {\n const {\n projectParamsStore,\n projectContributionsStore,\n statisticsBarData,\n runsCountingMap,\n hoveredState,\n totalRunsCount,\n statisticsMap,\n onMouseOver,\n onMouseLeave,\n } = useProjectStatistics();\n\n return (\n
\n \n Total runs: {totalRunsCount}\n \n
\n {Object.values(runsCountingMap).map(\n ({ label, icon, count, iconBgColor, navLink }) => (\n \n ),\n )}\n
\n \n Tracked sequences\n \n
\n {Object.values(statisticsMap).map(\n ({ label, icon, count, iconBgColor, navLink, badge }) => (\n \n ),\n )}\n
\n
\n \n
\n
\n );\n}\n\nProjectStatistics.displayName = 'ProjectStatistics';\n\nexport default React.memo(ProjectStatistics);\n","import createResource from 'modules/core/utils/createResource';\nimport { getParams, GetParamsResult } from 'modules/core/api/projectApi';\n\nimport { SequenceTypesEnum } from 'types/core/enums';\n\nfunction projectStatisticsEngine() {\n const { fetchData, state, destroy } = createResource(() =>\n getParams({\n sequence: [\n SequenceTypesEnum.Metric,\n SequenceTypesEnum.Images,\n SequenceTypesEnum.Figures,\n SequenceTypesEnum.Texts,\n SequenceTypesEnum.Audios,\n SequenceTypesEnum.Distributions,\n ],\n exclude_params: true,\n }),\n );\n return { fetchProjectParams: fetchData, projectParamsState: state, destroy };\n}\n\nexport default projectStatisticsEngine();\n","import * as React from 'react';\n\nimport routes from 'routes/routes';\n\nimport { SequenceTypesEnum } from 'types/core/enums';\n\nimport { encode } from 'utils/encoder/encoder';\n\nimport projectContributionsEngine from '../ProjectContributions/ProjectContributionsStore';\n\nimport { IProjectStatistic } from './ProjectStatistics.d';\nimport projectStatisticsEngine from './ProjectStatisticsStore';\n\nconst statisticsInitialMap: Record = {\n [SequenceTypesEnum.Metric]: {\n label: 'Metrics',\n count: 0,\n icon: 'metrics',\n iconBgColor: '#7A4CE0',\n navLink: routes.METRICS.path,\n },\n systemMetrics: {\n label: 'Sys. metrics',\n count: 0,\n icon: 'metrics',\n iconBgColor: '#AF4EAB',\n navLink: `${routes.METRICS.path}?select=${encode({\n advancedQuery: \"metric.name.startswith('__system__') == True\",\n advancedMode: true,\n })}`,\n },\n [SequenceTypesEnum.Figures]: {\n label: 'Figures',\n icon: 'figures',\n count: 0,\n iconBgColor: '#18AB6D',\n navLink: routes.FIGURES_EXPLORER.path,\n },\n [SequenceTypesEnum.Images]: {\n label: 'Images',\n icon: 'images',\n count: 0,\n iconBgColor: '#F17922',\n navLink: routes.IMAGE_EXPLORE.path,\n },\n [SequenceTypesEnum.Audios]: {\n label: 'Audios',\n icon: 'audios',\n count: 0,\n iconBgColor: '#FCB500',\n navLink: routes.AUDIOS_EXPLORER.path,\n badge: {\n value: 'New',\n style: { backgroundColor: '#1473e6', color: '#fff' },\n },\n },\n [SequenceTypesEnum.Texts]: {\n label: 'Texts',\n icon: 'text',\n count: 0,\n iconBgColor: '#E149A0',\n navLink: routes.TEXT_EXPLORER.path,\n badge: {\n value: 'New',\n style: { backgroundColor: '#1473e6', color: '#fff' },\n },\n },\n [SequenceTypesEnum.Distributions]: {\n label: 'Distributions',\n icon: 'distributions',\n count: 0,\n iconBgColor: '#0394B4',\n navLink: '',\n badge: {\n value: 'Explorer coming soon',\n },\n },\n};\n\nconst runsCountingInitialMap: Record<'archived' | 'runs', IProjectStatistic> = {\n runs: {\n label: 'runs',\n icon: 'runs',\n count: 0,\n iconBgColor: '#1473E6',\n navLink: routes.RUNS.path,\n },\n archived: {\n label: 'archived',\n icon: 'archive',\n count: 0,\n iconBgColor: '#606986',\n navLink: `/runs?select=${encode({ query: 'run.archived == True' })}`,\n },\n};\n\nfunction useProjectStatistics() {\n const [hoveredState, setHoveredState] = React.useState({\n source: '',\n id: '',\n });\n const { current: projectStatsEngine } = React.useRef(projectStatisticsEngine);\n const projectParamsStore = projectStatsEngine.projectParamsState(\n (state) => state,\n );\n const { current: contributionsEngine } = React.useRef(\n projectContributionsEngine,\n );\n const projectContributionsStore =\n contributionsEngine.projectContributionsState((state) => state);\n\n React.useEffect(() => {\n if (!projectParamsStore.data) {\n projectStatsEngine.fetchProjectParams();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [projectStatsEngine]);\n\n const { statisticsMap, totalTrackedSequencesCount } = React.useMemo(() => {\n const statistics = { ...statisticsInitialMap };\n let totalTrackedSequencesCount = 0;\n\n for (let [seqName, seqData] of Object.entries(\n projectParamsStore.data || {},\n )) {\n let systemMetricsCount = 0;\n let sequenceItemsCount = 0;\n for (let [itemKey, itemData] of Object.entries(seqData)) {\n if (itemKey.startsWith('__system__')) {\n systemMetricsCount += itemData.length;\n } else {\n sequenceItemsCount += itemData.length;\n }\n }\n totalTrackedSequencesCount += sequenceItemsCount;\n statistics[seqName].count = sequenceItemsCount;\n if (systemMetricsCount) {\n totalTrackedSequencesCount += systemMetricsCount;\n statistics.systemMetrics.count = systemMetricsCount;\n }\n }\n return { statisticsMap: statistics, totalTrackedSequencesCount };\n }, [projectParamsStore]);\n\n const { totalRunsCount, archivedRuns } = React.useMemo(\n () => ({\n totalRunsCount: projectContributionsStore.data?.num_runs || 0,\n archivedRuns: projectContributionsStore.data?.num_archived_runs || 0,\n }),\n [projectContributionsStore],\n );\n const statisticsBarData = React.useMemo(\n () =>\n Object.values(statisticsMap).map(\n ({ label, iconBgColor = '#000', count }) => ({\n highlighted: hoveredState.id === label,\n label,\n color: iconBgColor,\n percent:\n totalTrackedSequencesCount === 0\n ? 0\n : (count / totalTrackedSequencesCount) * 100,\n }),\n ),\n [statisticsMap, totalTrackedSequencesCount, hoveredState],\n );\n\n const runsCountingMap = React.useMemo(\n () => ({\n runs: {\n ...runsCountingInitialMap.runs,\n count: totalRunsCount - archivedRuns,\n },\n archived: {\n ...runsCountingInitialMap.archived,\n count: archivedRuns,\n },\n }),\n [archivedRuns, totalRunsCount],\n );\n const onMouseOver = React.useCallback((id = '', source = '') => {\n setHoveredState({ source, id });\n }, []);\n const onMouseLeave = React.useCallback(() => {\n setHoveredState({ source: '', id: '' });\n }, []);\n\n return {\n projectParamsStore,\n projectContributionsStore,\n statisticsBarData,\n runsCountingMap,\n totalRunsCount,\n hoveredState,\n statisticsMap,\n onMouseOver,\n onMouseLeave,\n };\n}\n\nexport default useProjectStatistics;\n","import ProjectStatistics from './ProjectStatistics';\nimport useProjectStatistics from './useProjectStatistics';\n\nexport * from './ProjectStatistics.d';\nexport { useProjectStatistics };\n\nexport default ProjectStatistics;\n","import { getAPIHost } from 'config/config';\n\nimport ENDPOINTS from 'services/api/endpoints';\nimport NetworkService from 'services/NetworkService';\n\nimport { IDashboardData, IDashboardRequestBody } from './types';\n\nconst api = new NetworkService(`${getAPIHost()}${ENDPOINTS.DASHBOARDS.BASE}`);\n\n/**\n * function fetchDashboardsList\n * this call is used for fetching dashboards list.\n * @returns {Promise}\n */\nasync function fetchDashboardsList(): Promise {\n return (await api.makeAPIGetRequest(ENDPOINTS.DASHBOARDS.GET)).body;\n}\n\n/**\n * function fetchDashboard\n * this call is used for fetching a dashboard by id.\n * @param id - id of dashboard\n * @returns {Promise}\n */\nasync function fetchDashboard(id: string): Promise {\n return (await api.makeAPIGetRequest(`${ENDPOINTS.DASHBOARDS.GET}/${id}`))\n .body;\n}\n\n/**\n * function createDashboard\n * this call is used for creating new dashboard.\n * @param reqBody - query body params\n * @returns {Promise}\n */\nasync function createDashboard(\n reqBody: IDashboardRequestBody,\n): Promise {\n return (\n await api.makeAPIPostRequest(ENDPOINTS.DASHBOARDS.CREATE, {\n body: reqBody,\n })\n ).body;\n}\n\n/**\n * function updateDashboard\n * this call is used for updating a dashboard by id.\n * @param id - id of dashboard\n * @param reqBody - query body params\n * @returns {Promise}\n */\nasync function updateDashboard(\n id: string,\n reqBody: IDashboardRequestBody,\n): Promise {\n return (await api.makeAPIPutRequest(`/${id}`, { body: reqBody })).body;\n}\n\n/**\n * function deleteDashboard\n * this call is used for deleting a dashboard by id.\n * @param id - id of dashboard\n * @returns {Promise}\n */\nasync function deleteDashboard(id: string): Promise {\n return api.makeAPIDeleteRequest(`${id}`);\n}\n\nexport {\n fetchDashboardsList,\n fetchDashboard,\n createDashboard,\n updateDashboard,\n deleteDashboard,\n};\nexport * from './types';\n"],"sourceRoot":""}