summaryrefslogtreecommitdiffstats
path: root/web/gui/dashboard/static/js/main.76dfe4de.chunk.js.map
blob: 948126ebf4c16b442d86661d348a34ee29e04e4b (plain)
1
{"version":3,"sources":["utils/units-conversion.ts","components/button/button.tsx","domains/chart/components/toolbox-button.tsx","domains/chart/components/resize-handler.tsx","domains/global/actions.ts","hooks/use-user-node-access.ts","utils/index.ts","utils/name-2-id.ts","domains/global/reducer.ts","components/icon.tsx","domains/chart/reducer.ts","domains/chart/utils/transformDataAttributes.ts","domains/chart/actions.ts","components/header/constants.js","main.js","domains/global/constants.ts","components/header/ACLK/use-cloud-connection-status.tsx","components/header/ACLK/cloud-connection-status-modal.tsx","components/header/ACLK/cloud-connection-status.tsx","utils/utils.ts","vendor/d3pie-0.2.1-netdata-3.js","components/header/ACLK/index.ts","utils/server-detection.ts","domains/chart/selectors.ts","utils/date-time.js","domains/dashboard/actions.ts","domains/chart/constants.ts","domains/chart/utils/seconds4human.ts","../public/lib/dygraph-c91c859.min.js","domains/chart/utils/legend-utils.ts","domains/dashboard/reducer.ts","store/root-reducer.ts","utils/api.ts","utils/netdata-sdk/axios-instance.ts","utils/netdata-sdk/metrics-stream.ts","utils/fill-missing-data.ts","components/ui-notification/styled.ts","components/ui-notification/ui-notification.tsx","components/notifications/styled.tsx","components/notifications/notifications.tsx","domains/dashboard/utils/parse-url.ts","domains/chart/sagas.ts","components/space-panel/settings.ts","domains/global/alarms-sagas.ts","domains/global/utils.ts","domains/global/sagas.ts","domains/dashboard/sagas.ts","store/root-saga.ts","store/store.ts","domains/chart/utils/jquery-loader.ts","utils/css-loader.ts","domains/chart/utils/chartLibrariesSettings.ts","domains/chart/utils/get-chart-url-options.ts","utils/biggest-interval-number.ts","domains/chart/components/loader.tsx","domains/chart/utils/get-pan-and-zoom-step.ts","utils/safe-equal-check.ts","domains/chart/utils/formatters.ts","utils/color-hex-2-rgb.ts","domains/chart/components/chart-legend-bottom.styled.ts","domains/chart/components/legendText.js","domains/chart/components/chart-legend-right.tsx","domains/chart/components/chart-legend-bottom.tsx","domains/chart/components/chart-legend.tsx","domains/chart/components/legend-toolbox.tsx","domains/chart/components/lib-charts/dygraph/utils.ts","domains/chart/hooks/use-proceeded-chart.ts","domains/chart/hooks/useDygraphBadge.js","domains/chart/components/lib-charts/proceeded-chart-disclaimer.tsx","domains/chart/components/lib-charts/alarmBadge.js","domains/chart/components/lib-charts/dygraph-chart.tsx","utils/debounce.ts","domains/chart/components/lib-charts/easy-pie-chart.tsx","domains/chart/components/lib-charts/gauge-chart.tsx","domains/chart/utils/color-luminance.ts","domains/chart/components/lib-charts/sparkline-chart.tsx","domains/chart/utils/d3-loader.ts","domains/chart/utils/google-visualization-loader.ts","domains/chart/components/lib-charts/d3pie-chart.tsx","domains/chart/components/lib-charts/peity-chart.tsx","domains/chart/components/lib-charts/google-chart.tsx","domains/chart/components/lib-charts/text-only.tsx","domains/chart/components/lib-charts/group-box-chart/utilities.ts","domains/chart/components/lib-charts/group-box-chart/events.ts","domains/chart/components/lib-charts/group-box-chart/drawBoxes.ts","domains/chart/components/lib-charts/group-box-chart/getAlign.ts","domains/chart/components/lib-charts/group-box-chart/groupBox.tsx","domains/chart/components/lib-charts/group-box-chart/groupBoxes.tsx","domains/chart/components/lib-charts/group-box-chart/legend.tsx","domains/chart/components/lib-charts/group-box-chart/kubernetes/getLabel.ts","domains/chart/components/lib-charts/group-box-chart/kubernetes/separator.tsx","domains/chart/components/lib-charts/group-box-chart/kubernetes/header.tsx","domains/chart/components/lib-charts/group-box-chart/kubernetes/tabs.tsx","domains/chart/components/lib-charts/group-box-chart/kubernetes/section.tsx","domains/chart/utils/get-portal-node-styles.ts","hooks/use-common-intersection.ts","domains/chart/components/invisible-searchable-text.tsx","domains/chart/components/disable-out-of-view.tsx","domains/chart/components/chart-container/chart-container.tsx","domains/dashboard/utils/netdata-dashboard.ts","domains/chart/components/lib-charts/group-box-chart/kubernetes/chartOverview.tsx","domains/dashboard/components/migration-modal/use-migration-modal.tsx","domains/chart/components/lib-charts/group-box-chart/kubernetes/chart.tsx","domains/chart/components/lib-charts/group-box-chart/kubernetes/item.tsx","domains/chart/components/lib-charts/group-box-chart/kubernetes/dateSection.tsx","domains/chart/components/lib-charts/group-box-chart/kubernetes/metrics.tsx","domains/chart/components/lib-charts/group-box-chart/kubernetes/context.tsx","domains/chart/components/lib-charts/group-box-chart/kubernetes/list.tsx","domains/chart/components/lib-charts/group-box-chart/kubernetes/popover.tsx","domains/chart/components/lib-charts/group-box-chart/kubernetes/index.tsx","domains/chart/components/lib-charts/group-box-chart/kubernetes/transform.ts","domains/chart/components/abstract-chart.tsx","hooks/use-show-value-outside.ts","domains/chart/components/chart.tsx","domains/chart/components/chart-dropdown/styled.ts","domains/chart/components/chart-dropdown/chart-dropdown.tsx","domains/chart/components/chart-spinner/styled.ts","domains/chart/components/chart-spinner/chart-spinner.tsx","domains/chart/components/chart-with-loader/styled.ts","styles/z-index.js","domains/chart/components/chart-with-loader/chart-with-loader.tsx","domains/chart/hooks/use-fetch-new-data-clock.ts","domains/chart/utils/get-chart-pixels-per-point.ts","domains/dashboard/selectors.ts","domains/chart/components/snapshot-loader.tsx","domains/chart/components/portals.tsx","hooks/use-http.ts","domains/dashboard/components/modal-portal.tsx","domains/dashboard/components/print-modal/print-modal.tsx","domains/dashboard/components/sidebar-social-media/styled.ts","domains/dashboard/components/sidebar-social-media/sidebar-social-media.tsx","domains/dashboard/components/sidebar-social-media-portal/sidebar-social-media-portal.tsx","components/notifications-container/notifications-container.tsx","components/header/item.js","components/header/node/index.js","components/tooltips/customTooltip.js","components/tooltips/getContent.js","components/tooltips/index.js","components/header/options/index.js","components/app-header/components/versionControl/index.js","components/header/version.js","hooks/useToggle/index.js","hooks/useLocalStorage/index.js","components/mdx-components/dropdown/styled.js","components/date-picker/styled.js","components/mdx-components/dropdown/dropdown.js","components/date-picker/timePeriod.js","components/date-picker/utils.js","components/date-picker/timePeriods.js","components/date-picker/customTimePeriod.js","components/datePicker/datePickerLib.js","components/datePicker/styled.js","components/date-picker/datePickerInput.js","components/date-picker/useLocaleDate.js","components/date-picker/useConvertedDate.js","components/date-picker/datePickerWrapper.js","components/date-picker/periodIndication.js","components/date-picker/accessorElement/utils.js","components/date-picker/accessorElement/container.js","components/date-picker/accessorElement/dateBox.js","components/date-picker/accessorElement/durationBox.js","components/date-picker/accessorElement/index.js","components/date-picker/datePickerDrop.js","components/date-picker/reduxDatePickerContainer.js","components/header/globalControls/container.js","components/header/globalControls/playPausePill/styledPill.js","components/header/globalControls/playPausePill/index.js","components/menus/item.js","components/menus/list.js","components/header/globalControls/playOptions/playOptionsTooltip.js","components/menus/styled.js","components/header/globalControls/playOptions/index.js","components/header/globalControls/index.js","components/header/pill/styled.js","components/header/pill/index.js","components/header/alarms.js","components/header/news/index.js","components/header/timezone/dropdown.js","components/header/timezone/search/searchInput.js","components/header/timezone/search/index.js","components/header/timezone/container.js","components/header/timezone/wrapper.js","components/header/timezone/offsetItem.js","components/header/timezone/timezones.js","components/header/timezone/utils.js","components/header/timezone/index.js","components/auth/signIn/iframe.js","components/auth/signIn/useCheckSignInStatus.js","components/header/signIn/index.js","components/discover-cloud/cloudTab.js","components/discover-cloud/discoverCloudModal.js","components/discover-cloud/contents.js","components/discover-cloud/discoverCloudDrop.js","components/discover-cloud/discoverCloud.js","components/header/index.js","components/sidebar/spaces/expandButton.js","components/auth/signOut/index.js","components/sidebar/spaces/userSettings.js","components/sidebar/spaces/spacesSkeleton.js","components/sidebar/spaces/spacesIframe.js","components/sidebar/spaces/index.js","domains/dashboard/utils/sorting.ts","components/sidebar/space/nodes.js","components/sidebar/space/replicatedNodes/anchor.js","components/sidebar/space/replicatedNodes/node.js","components/sidebar/space/replicatedNodes/index.js","components/sidebar/space/spacePanelIframe.js","components/sidebar/space/prompts/signIn/promptContent.js","components/sidebar/space/prompts/signIn/index.js","components/sidebar/space/prompts/offline/noNetwork.js","components/sidebar/space/prompts/offline/index.js","components/sidebar/space/visitedNodes/styled.js","components/sidebar/space/visitedNodes/index.js","utils/truncateMiddle/index.js","components/sidebar/space/index.js","components/sidebar/index.js","components/layout/index.js","utils/map-theme.ts","domains/dashboard/components/migration-modal/migration-modal.js","domains/dashboard/components/migration-manager/migration-manager.tsx","App.tsx","hooks/use-registry.ts","hooks/use-alarms.ts","hooks/use-info.ts","domains/dashboard/hooks/use-charts-metadata.ts","domains/dashboard/hooks/useAlarmFromUrl.js","index.tsx","components/auth/signIn/index.js","utils/hash-utils.ts","utils/post-message.ts","utils/env.ts","domains/dashboard/constants.ts","store/redux-separate-context.ts","utils/is-demo.ts","domains/global/selectors.ts","components/anchor/index.tsx","utils/createRequestAction.ts","domains/global/options.ts"],"names":["currentTemperatureSetting","currentSecondsAsTimeSetting","zeropad","x","seconds2time","seconds","maxTimeUnit","secondsReturn","Math","abs","days","floor","hours","minutes","daysString","hoursString","minutesString","secondsString","toFixed","scalableUnits","pps","Kpps","Mpps","bytes","kilobytes","megabytes","gigabytes","terabytes","Hz","kHz","MHz","GHz","THz","PHz","EHz","ZHz","B","KiB","MiB","GiB","TiB","PiB","KB","MB","GB","TB","PB","EB","EiB","twoFixed","multiplier","value","convertibleUnits","Celsius","Fahrenheit","check","convert","celsius","fahrenheit","milliseconds","microseconds","max","identity","unitsConversionCreator","keys","latest","globalReset","this","get","uuid","min","units","desiredUnits","commonUnitsName","switchUnitsCallback","temperatureSetting","secondsAsTimeSetting","undefined","newConvertFunction","tunits","tdivider","scalableUnitsGroup","Object","forEach","unit","unitDivider","commonUnitsKey","t","divider","commonUnits","console","log","toString","Button","React","ref","children","className","rest","type","classNames","ToolboxButton","iconType","onClick","onDoubleClick","onMouseDown","onTouchStart","popoverContent","popoverTitle","buttonRef","useRef","showHelp","useSelector","selectShowHelp","useEffect","current","window","$","popover","container","animation","html","trigger","placement","delay","show","NETDATA","options","show_help_delay_show_ms","hide","show_help_delay_hide_ms","title","content","LOCALSTORAGE_HEIGHT_KEY_PREFIX","ResizeHandler","chartContainerElement","chartUuid","heightId","isLegendOnBottom","useState","clientHeight","resizeHeight","setResizeHeight","dispatch","useDispatch","setResizeHeightAction","id","handleResize","useCallback","event","preventDefault","intialHeight","eventStartHeight","touches","clientY","setHeight","currentHeight","nextHeight","style","height","heightForPersistance","LEGEND_BOTTOM_SINGLE_LINE_HEIGHT","localStorage","setItem","onMouseMove","e","onTouchMove","document","addEventListener","onTouchEnd","removeEventListener","onMouseEnd","stopPropagation","requestCommonColorsAction","createAction","storeKey","setCommonMinAction","setCommonMaxAction","setGlobalSelectionAction","setGlobalPanAndZoomAction","resetGlobalPanAndZoomAction","setDefaultAfterAction","resetDefaultAfterAction","setGlobalChartUnderlayAction","centerAroundHighlightAction","clearHighlightAction","windowFocusChangeAction","fetchHelloAction","createRequestAction","updatePersonUrlsAction","accessRegistrySuccessAction","startAlarmsAction","fetchAllAlarmsAction","updateActiveAlarmsAction","setOptionAction","resetOptionsAction","loadSnapshotAction","chartsMetadataRequestSuccess","setSpacePanelStatusAction","setSpacePanelTransitionEndAction","setAlarmAction","resetRegistry","setGlobalPauseAction","resetGlobalPauseAction","setUTCOffset","setUserNodeAccess","useRequestRefreshOfAccessMessage","sendToChildIframe","SIGN_IN_IFRAME_ID","payload","useUserNodeAccessMessage","useListenToPostMessage","message","name2id","s","replace","initialState","commonColorsKeys","commonMin","commonMax","currentSelectionMasterId","globalPanAndZoom","defaultAfter","isMainJs","getInitialAfterFromWindow","globalChartUnderlay","hoveredX","hasWindowFocus","hasFocus","globalPause","spacePanelIsActive","spacePanelTransitionEndIsActive","registry","cloudBaseURL","hasFetchedInfo","hasFetchedHello","isHelloCallError","hostname","isCloudEnabled","isCloudAvailable","isAgentClaimed","isACLKAvailable","hasStartedInfo","isFetchingHello","fullInfoPayload","machineGuid","personGuid","registryMachines","registryMachinesArray","registryServer","snapshot","alarms","activeAlarms","hasStartedAlarms","alarm","chartsMetadata","isFetching","isFetchingError","data","optionsMergedWithLocalStorage","userNodeAccess","globalReducer","createReducer","getKeyForCommonColorsState","colorsAttribute","commonColorsAttribute","chartContext","hasCustomColors","length","hasLastOnly","array","last","createCommonColorsKeysSubstate","custom","split","init","shouldCopyTheme","assigned","available","themes","colors","on","state","dimensionNames","keyName","subState","currentlyAssignedNr","requestedDimensionsAssigned","mergeAll","filter","dimensionName","map","i","commonMinKey","charts","currentExtreme","values","commonMaxKey","isActive","after","before","masterID","warn","highlightMargin","resetPanAndZoom","hasFocusNow","forcePlay","stop_updates_when_focus_is_lost","utcOffset","request","success","failure","CLOUD_BASE_URL_DISABLED","fetchInfoAction","key","clearLocalStorage","getOptionsMergedWithLocalStorage","parsedData","dataKey","uncompressed","uncompress","JSON","parse","reduce","acc","obj","typeToClassName","left","reset","right","zoomIn","zoomOut","resize","lineChart","areaChart","noChart","loading","noData","Icon","initialSingleState","chartData","chartId","chartMetadata","chartPanAndZoom","fetchDataParams","isRemotelyControlled","viewRange","isFetchingData","isFetchDataFailure","isFetchDetailsFailure","isFetchingDetails","snapshotDataIsFetching","snapshotDataIsError","snapshotData","chartReducer","getSubstate","fetchDataAction","chart","fetchDataCancelAction","substate","useNewKeysOnlyIfDifferent","fetchDataForSnapshotAction","snapshotExportResetAction","pick","fetchChartAction","setChartPanAndZoomAction","shouldForceTimeRange","resetChartPanAndZoomAction","SYNC_PAN_AND_ZOOM","assoc","clearChartStateAction","omit","getDataAttribute","element","defaultValue","hasAttribute","getAttribute","test","getAttributesStatic","node","mapObjIndexed","attribute","getDataAttributeBoolean","host","httpMethod","chartLibrary","chartDefaults","library","width","legend","legendPosition","unitsCommon","unitsDesired","aggrMethod","labels","postGroupBy","postAggregationMethod","dimensionsAggrMethod","aggrGroups","selectedChart","filteredRows","groupBy","nodeIDs","commonColors","decimalDigits","dimensions","selectedDimensions","forceTimeWindow","appendOptions","gtime","method","overrideOptions","pixelsPerPoint","points","hideResizeHandler","detectResize","dygraphType","dygraphValueRange","dygraphTheme","dygraphSmooth","dygraphColors","dygraphRightGap","dygraphShowRangeSelector","dygraphShowRoller","dygraphTitle","dygraphTitleHeight","dygraphLegend","dygraphLabelsDiv","dygraphLabelsSeparateLine","dygraphIncludeZero","dygraphShowZeroValues","dygraphShowLabelsOnHighLight","dygraphHideOverlayOnMouseOut","dygraphXRangePad","dygraphYRangePad","dygraphYLabelWidth","dygraphStrokeWidth","dygraphStrokePattern","dygraphDrawPoints","dygraphDrawGapEdgePoints","dygraphConnectSeparatedPoints","dygraphPointSize","dygraphStepPlot","dygraphStrokeBorderColor","dygraphStrokeBorderWidth","dygraphFillGraph","dygraphFillAlpha","dygraphStackedGraph","dygraphStackedGraphNanFill","dygraphAxisLabelFontSize","dygraphAxisLineColor","dygraphAxisLineWidth","dygraphDrawGrid","dygraphGridLinePattern","dygraphGridLineWidth","dygraphGridLineColor","dygraphMaxNumberWidth","dygraphSigFigs","dygraphDigitsAfterDecimal","dygraphHighlighCircleSize","dygraphHighlightSeriesOpts","dygraphHighlightSeriesBackgroundAlpha","dygraphXPixelsPerLabel","dygraphXAxisLabelWidth","dygraphDrawXAxis","dygraphYPixelsPerLabel","dygraphYAxisLabelWidth","dygraphDrawYAxis","dygraphDrawAxis","easyPieChartMinValue","easyPieChartMaxValue","easyPieChartBarColor","easyPieChartTrackColor","easyPieChartScaleColor","easyPieChartScaleLength","easyPieChartLineCap","easyPieChartLineWidth","easyPieChartTrackWidth","easyPieChartSize","easyPieChartRotate","easyPieChartAnimate","easyPieChartEasing","gaugeMinValue","gaugeMaxValue","gaugePointerColor","gaugeStrokeColor","gaugeStartColor","gaugeStopColor","gaugeGenerateGradient","sparklineType","sparklineLineColor","sparklineFillColor","sparklineChartRangeMin","sparklineChartRangeMax","sparklineComposite","sparklineEnableTagOptions","sparklineTagOptionPrefix","sparklineTagValuesAttribute","sparklineDisableHiddenCheck","sparklineDefaultPixelsPerValue","sparklineSpotColor","sparklineMinSpotColor","sparklineMaxSpotColor","sparklineSpotRadius","sparklineValueSpots","sparklineHighlightSpotColor","sparklineHighlightLineColor","sparklineLineWidth","sparklineNormalRangeMin","sparklineNormalRangeMax","sparklineDrawNormalOnTop","sparklineXvalues","sparklineChartRangeClip","sparklineChartRangeMinX","sparklineChartRangeMaxX","sparklineDisableInteraction","sparklineDisableTooltips","sparklineOnHover","sparklineDisableHighlight","sparklineHighlightLighten","sparklineHighlightColor","sparklineTooltipContainer","sparklineTooltipClassname","sparklineTooltipFormat","sparklineTooltipPrefix","sparklineTooltipSuffix","sparklineTooltipSkipNull","sparklineTooltipValueLookups","sparklineTooltipFormatFieldlist","sparklineTooltipFormatFieldlistKey","sparklineNumberFormatter","sparklineNumberDigitGroupSep","sparklineNumberDecimalMark","sparklineNumberDigitGroupCount","sparklineAnimatedZooms","d3pieTitle","d3pieSubtitle","d3pieFooter","d3pieTitleColor","d3pieTitleFontsize","d3pieTitleFontweight","d3pieTitleFont","d3PieSubtitleColor","d3PieSubtitleFontsize","d3PieSubtitleFontweight","d3PieSubtitleFont","d3PieFooterColor","d3PieFooterFontsize","d3PieFooterFontweight","d3PieFooterFont","d3PieFooterLocation","d3PiePieinnerradius","d3PiePieouterradius","d3PieSortorder","d3PieSmallsegmentgroupingEnabled","d3PieSmallsegmentgroupingValue","d3PieSmallsegmentgroupingValuetype","d3PieSmallsegmentgroupingLabel","d3PieSmallsegmentgroupingColor","d3PieLabelsOuterFormat","d3PieLabelsOuterHidewhenlessthanpercentage","d3PieLabelsOuterPiedistance","d3PieLabelsInnerFormat","d3PieLabelsInnerHidewhenlessthanpercentage","d3PieLabelsMainLabelColor","d3PieLabelsMainLabelFont","d3PieLabelsMainLabelFontsize","d3PieLabelsMainLabelFontweight","d3PieLabelsPercentageColor","d3PieLabelsPercentageFont","d3PieLabelsPercentageFontsize","d3PieLabelsPercentageFontweight","d3PieLabelsValueColor","d3PieLabelsValueFont","d3PieLabelsValueFontsize","d3PieLabelsValueFontweight","d3PieLabelsLinesEnabled","d3PieLabelsLinesStyle","d3PieLabelsLinesColor","d3PieLabelsTruncationEnabled","d3PieLabelsTruncationTruncatelength","d3PieMiscColorsSegmentstroke","d3PieMiscGradientEnabled","d3PieMiscColorsPercentage","d3PieMiscGradientColor","d3PieCssprefix","peityStrokeWidth","textOnlyDecimalPlaces","textOnlyPrefix","textOnlySuffix","getAttributes","attributesStatic","showValueOf","showValueOfAttribues","Array","from","attributes","name","startsWith","merged","isEmpty","getAttributesDynamic","defaultAttributes","initialLegendRight","localeDateString","localeTimeString","updateLocaleFunctions","newLocaleDateString","newLocaleTimeString","netdataShowAlarms","netdataRegistry","netdataServer","netdataServerStatic","netdataCheckXSS","reduxStore","escapeUserInputHTML","setOption","getFromRegistry","prop","selectRegistry","getState","verifyURL","urlOptions","hash","theme","help","mode","update_always","pan_and_zoom","server","getHashParam","highlight","highlight_after","highlight_before","nowelcome","show_alarms","family","utc","hasProperty","property","genHash","forReload","parseHash","variables","location","len","p","decodeURIComponent","booleans","numeric","parseInt","origin","pathname","welcome","Date","now","hashUpdate","history","replaceState","netdataPanAndZoomCallback","status","netdataSnapshotData","updateUtcParam","netdataHighlightCallback","round","d1","d2","getElementById","innerHTML","seconds4human","tooltip","clearHighlight","showHighlight","localStorageTested","localStorageTest","Storage","removeItem","loadLocalStorage","ret","getItem","error","saveLocalStorage","getTheme","def","setTheme","netdataTheme","updateTheme","netdataShowHelp","naturalSortChunkify","j","tz","y","n","charAt","charCodeAt","m","naturalSortCompare","a","b","aa","toLowerCase","bb","c","Number","d","saveTextToClient","filename","blob","Blob","url","URL","createObjectURL","link","createElement","setAttribute","el","appendChild","setTimeout","removeChild","revokeObjectURL","click","saveObjectToClient","stringify","netdataURL","indexOf","substring","netdataReload","reload","gotoHostedModalHandler","gotoServerValidateRemaining","gotoServerMiddleClick","gotoServerStop","gotoServerValidateUrl","guid","penalty","finalURL","registryHello","machine_guid","open","modal","gotoServerModalHandler","checked","alternateUrls","count","registrySearch","urls","switchRegistryModalHandler","notifyForSwitchRegistry","newPersonGuid","ajax","encodeURIComponent","serverDefault","async","cache","headers","xhrFields","withCredentials","done","xss","checkAlways","fail","deleteRegistryGuid","deleteRegistryUrl","deleteRegistryModalHandler","notifyForDeleteRegistry","responseEl","registryDelete","result","menus","submenu_names","version","release_channel","hosts","duration","update_every","chartsPerRow","chartsHeight","total","prioritySort","priority","sortObjectByPriority","object","idx","sorted","hasOwnProperty","push","sort","scrollToId","offset","animate","scrollTop","top","customDashboard","menu","submenu","context","netdataDashboard","sparklines_registry","os","sparkline","prefix","dimension","suffix","gaugeChart","anyAttribute","attr","menuTitle","menu_pattern","slice","menuIcon","menuInfo","menuHeight","submenuTitle","submenuInfo","submenuHeight","relative","contextInfo","contextValueRange","valueRange","contextHeight","contextDecimalDigits","enrichChartData","parts","tmp","match","endsWith","lastIndexOf","headMain","head","generateHeadCharts","hcharts","hi","hlen","renderPage","div","pcent_width","sidebar","mainhead","main","hasChartsOnBottom","chartAdditionalHeight","menuid","icon","info","shtml","mhead","sub","submenus","si","slen","submenuid","chtml","ci","clen","chartHeight","chartCommonMax","isMemoryModeDbEngine","memory_mode","dimensions_count","toLocaleString","charts_count","alarms_count","printPage","finalizePage","renderChartsAndMenu","menu_key","handleLoadJs","promise","callback","catch","alert","then","loadClipboard","clipboard","loadBootstrapTable","Promise","all","loadBootstrapSlider","slider","default","Slider","loadLzString","loadPako","pako","alarmsUpdateModal","active","footer","alarm_families","count_active","count_all","families","families_sort","charts_by_name","arr","unshift","families_sorted","fc","active_family_added","alarm_to_html","enableTooltipsAndPopovers","alarm_family_show","$accordion","target","bootstrapTable","pagination","pageSize","showPaginationSwitch","search","searchTimeOut","searchAlign","showColumns","showExport","exportDataType","exportOptions","fileName","onClickRow","row","scrollToChartAfterHidingModal","when","rowStyle","classes","showFooter","showHeader","showRefresh","showToggle","sortable","silentSort","columns","field","valign","titleTooltip","formatter","index","timestamp4human","align","switchable","visible","alarmid4human","negative_suffix","space","timestamp","toLocaleDateString","toLocaleTimeString","full","has_alarm","crit","badge_url","action_buttons","recipient","last_status_change","lookup_after","lookup_dimensions","lookup_method","lookup_before","lookup_options","alarm_lookup_explain","calc","green","red","warn_repeat_every","crit_repeat_every","delay_up_duration","delay_down_duration","delay_multiplier","delay_max_duration","exec","source","initializeDynamicDashboardWithData","timezone","clipboardCopy","text","writeText","clipboardCopyBadgeEmbed","initializeConfig","custom_info","loadDashboardInfo","memoizeWith","dataType","loadCustomDashboardInfo","always","extend","initializeChartsAndCustomInfo","chartRegistry","downloadAll","initializeDynamicDashboard","newReduxStore","netdataPrepCallback","innerText","versionLog","msg","versionsMatch","v1","v2","s1","s2","n1","n2","getGithubLatestVersion","channel","tag_name","checkForUpdateByVersion","force","sha2","showPageFooter","display","parseDom","jsonStringifyFn","jsonParseFn","str","eval","xssModalDisableXss","enabled","enabled_for_data","xssModalKeepXss","notifyForUpdate","sha1","save","printPreflight","screen","snapshotOptions","bytes_per_chart","compressionDefault","compressions","bytes_per_point_memory","bytes_per_point_disk","compress","compressed_length","btoa","deflate","to","inflate","atob","LZString","compressToUTF16","decompressFromUTF16","compressToBase64","decompressFromBase64","compressToEncodedURIComponent","decompressFromEncodedURIComponent","loadSnapshotModalLog","tmpSnapshotData","loadSnapshotPreflightFile","file","string","fr","FileReader","onload","date_after","after_ms","date_before","before_ms","charts_ok","charts_failed","compression","data_size","netdata_version","data_points","duration_ms","snapshot_version","comments","removeClass","addClass","readAsText","loadSnapshotPreflightEmpty","loadSnapshot","highlight_after_ms","highlight_before_ms","loadSnapshotDragAndDropInitialized","loadSnapshotDragAndDropSetup","originalEvent","dataTransfer","files","item","loadSnapshotPreflight","saveSnapshotStop","saveSnapshotCancel","stopSnapshotModeAction","saveSnapshotModalInitialized","saveSnapshotModalSetup","saveSnapshotModalInit","find","focus","saveSnapshotModalLog","saveSnapshotModalShowExpectedSize","saveSnapshotViewDuration","saveSnapshotSelectedSecondsPerPoint","sizemb","saveSnapshotCompression","memmb","saveSnapshotSetCompression","saveSnapshotSlider","browser_timezone","reduxState","selectDefaultAfter","start_ms","selectGlobalPanAndZoom","Boolean","start_date","yyyymmddhhssmm","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","view","destroy","ticks","step","scale","saveSnapshot","eltxt","saveData","update_every_ms","pack_api1_v1_chart_data","chartDataUniqueID","cstr","clearPanAndZoom","startSnapshotModeAction","dataPoints","saveSnapshotRestore","css","size","chartUpdated","chartsCount","selectAmountOfCharts","chartsOk","selectAmountOfSnapshotsFetched","chartsFailed","selectAmountOfSnapshotsFailed","pcent","Intl","DateTimeFormat","resolvedOptions","timeZone","getOption","option","createSelectOption","dashboardSettingsSetup","update_options_modal","sync_option","self","bootstrapToggle","units_sync_option","temp_sync_option","change","CHART_DIV_ID_PREFIX","CHART_DIV_OFFSET","scrollDashboardTo","chartElement","offsetTop","querySelector","modalHiddenCallback","animated","alarmDate","alarmStatus","includes","runOnceOnDashboardLastRun","runOnceOnDashboardWithjQuery","body","scrollspy","scrollPos","modal_depth","modal_shown","netdata_paused_on_modal","scrollspyOffset","scrollY","overflow","position","pauseCallback","pause","unpause","affix","bottom","removeAttr","Ps","initialize","wheelSpeed","wheelPropagation","swipePropagation","minScrollbarLength","maxScrollbarLength","useBothWheelAxes","suppressScrollX","suppressScrollY","scrollXMarginOffset","scrollYMarginOffset","fn","shorten","settings","config","showChars","minHideChars","ellipsesText","moreText","lessText","onLess","onscroll","onMore","errMsg","off","$this","hasClass","parent","prev","each","substr","inTag","bag","countChars","openTags","tagName","r","shift","isDemo","onresizeCallback","update","resetDashboardOptions","selected_server_timezone","isProperTimezone","userSetServerTimezone","timezoneOption","netdataCallback","showSignInModal","explicitlySignIn","explicitlySignInAction","MASKED_DATA","INFO_POLLING_FREQUENCY","alarmStatuses","useCloudConnectionStatus","userStatus","nodeStatus","date","useMemo","header","strong","bullets","rel","href","CTA1","makeCloudConnectionStatusInfo","CloudConnectionStatusModal","closeModal","onRefresh","isCTA1Disabled","handleClickedCTA1","background","margin","onClose","padding","column","gap","as","bullet","data-testid","utmParameters","campaign","data-ga","disabled","textTransform","label","Text","sx","fontWeight","lineHeight","CloudConnectionStatus","selectUserNodeAccess","cloudEnabled","selectIsCloudEnabled","isModalOpen","setModalOpen","cloudConnectionStatusInfo","nodeLiveness","documentElement","openModal","flavour","isTimestamp","NETDATA_REGISTRY_SERVER","MS_IN_SECOND","getIframeSrc","path","utmUrlSuffix","getBoundingClientRect","obj1","obj2","equals","callAll","fns","arg","define","_uniqueIDCounter","defaultSettings","color","fontSize","font","subtitle","titleSubtitlePadding","canvasHeight","canvasWidth","pieInnerRadius","pieOuterRadius","sortOrder","ignoreSmallSegments","valueType","smallSegmentGrouping","outer","format","hideWhenLessThanPercentage","pieDistance","inner","mainLabel","percentage","decimalPlaces","lines","truncation","truncateLength","effects","load","effect","speed","pullOutSegmentOnClick","highlightSegmentOnMouseover","highlightLuminosity","tooltips","placeholderParser","styles","fadeInSpeed","backgroundColor","backgroundOpacity","borderRadius","misc","segments","segmentStroke","gradient","canvasPadding","pieCenterOffset","cssPrefix","callbacks","onMouseoverSegment","onMouseoutSegment","onClickSegment","validate","pie","d3","HTMLElement","SVGElement","helpers","isArray","isNaN","addSVGSpace","svg","select","append","shuffleArray","tmpVal","randomIndex","currentIndex","random","processObj","is","getDimensions","w","h","getBBox","rectIntersect","r1","r2","getColorShade","hex","lum","String","newHex","initSegmentColors","finalColors","applySmallSegmentGrouping","totalSize","math","getTotalPieSize","newData","groupedData","totalGroupedData","isGrouped","showPoint","isFunction","functionToCheck","call","o","prototype","src","copy","copyIsArray","clone","arguments","deep","hasOwn","class2type","jQuery","isWindow","isNumeric","parseFloat","isFinite","isPlainObject","nodeType","constructor","toRadians","degrees","PI","toDegrees","radians","computePieRadius","textComponents","headerHeight","exists","innerRadius","percent","outerRadius","smallestDimension","pieDistanceSpace","sortPieData","getPieTranslateCenter","pieCenter","calculatePieCenter","hasTopTitle","hasTopSubtitle","headerOffset","footerOffset","rotate","xm","ym","cos","sin","translate","rads","pointIsInArc","pt","ptData","d3Arc","theta1","startAngle","theta2","endAngle","dist","angle","atan2","add","section","sectionDisplayType","include","getIncludes","outerLabel","insert","labelGroup","__labels","selectAll","enter","formatterContext","part","positionLabelElements","dims","computeLabelLinePositions","lineCoordGroups","computeLinePosition","x2","y2","x3","y3","getSegmentAngle","midpoint","originCoords","heightOffset","outerLabelGroupData","quarter","startOfLabelX","startOfLabel","addLabelLines","lineGroup","lineFunction","line","curve","curveBasis","positionLabelGroups","pieCenterCopy","newCoords","xOffset","yOffset","val","addMainLabel","addValue","addPercentage","computeOuterLabelCoords","getIdealOuterLabelPositions","resolveOuterLabelCollisions","checkConflict","currIndex","direction","curr","currIndexHemisphere","hs","nextIndex","currLabelGroup","examinedLabelGroup","labelHeights","center","lineLength","heightChange","isLabelHidden","adjustLabelPos","lastCorrectlyPositionedLabel","xDiff","yDiff","newXPos","newYPos","sqrt","labelGroupNode","labelGroupDims","originalX","originalY","hemisphere","effectMap","easeLinear","easeBounce","easeSin","easeElastic","easeBack","easeQuad","easeCircle","easeExp","create","pieChartElement","arc","addGradients","grads","addSegmentEventHandlers","merge","segment","currentEl","isExpanded","onSegmentEvent","closeSegment","openSegment","segColor","tt","showTooltip","moveTooltip","hideTooltip","func","expanded","isOpeningSegment","maybeCloseOpenSegment","transition","ease","centroid","pullOutSize","currentlyOpenSegment","getCentroid","bbox","opts","fullValue","compounded","currValue","offscreenCoord","addTitle","__title","positionTitle","headerLocation","addSubtitle","__subtitle","positionSubtitle","getHeaderHeight","addFooter","__footer","positionFooter","footerLocation","footerWidth","totalTitleHeight","footerPlusPadding","addTooltips","caption","replacePlaceholders","currentTooltip","mouseCoords","mouse","parentNode","replacements","placeholder","d3pie","_setupData","_init","recreate","redraw","getOpenSegment","updateProp","propKey","oldVal","oldValue","dp","_getPercentage","totalPercentage","relativeAmount","currentScript","isTestingEnv","getDefaultServer","isDevelopmentEnv","RegExp","getPathFromScriptSource","cond","T","getElementsByTagName","alwaysEndWithSlash","pipe","concat","serverStatic","selectChartsState","selectSingleChartState","createSelector","_","chartsState","selectChartData","chartState","selectChartMetadataFromExplicitCall","selectChartMetadata","selectChartMetadataFromChartsCall","metadataFromAll","metadataFromSingleCall","selectIsFetchingDetails","makeSelectChartMetadataRequest","selectChartViewRange","selectChartIsFetchingData","selectChartFetchDataParams","selectResizeHeight","selectChartPanAndZoom","selectAmountOfFetchedCharts","some","hasCompletedFetching","selectNameOfAnyFetchingChart","isSupportingDateTimeFormat","navigator","language","narrowToDate","localeDateStringNative","localeTimeStringNative","xAxisTimeStringNative","localeMatcher","formatMatcher","weekday","year","month","day","dateFormat","locale","long","isTime","secs","hourCycle","dateStyle","timeStyle","getOptions","getTimezone","useDateTime","selectTimezoneSetting","selectUTCOffsetSetting","xAxisTimeString","xAxisDateString","showSignInModalAction","isSignedInAction","setOfflineAction","fallbackUpdateTimeInterval","panAndZoomDelay","totalSeconds","defaultOptions","hour","minute","second","and","strings","pop","join","module","exports","require","l","Error","code","u","1","v","g","f","run","clearTimeout","fun","nextTick","apply","browser","env","argv","versions","addListener","once","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","umask","2","defineProperty","__esModule","extractSeries","rollingAverage","3","pow","4","5","onPointsCreated_","y_top","NaN","y_bottom","yval_minus","yval_plus","getExtremeYValues","onLineEvaluated","calcYNormal_","6","X","Y","EXTRAS","seriesToPoints","xval","yval","canvasx","canvasy","7","8","9","dygraph_","layout","elementContext","height_","width_","isCanvasSupported","area","getPlotArea","canvas_ctx_","beginPath","rect","clip","hidden_ctx_","clear","clearRect","render","_updatePoints","_renderLineChart","_getIteratorPredicate","_predicateThatSkipsEmptyPoints","_drawStyledLine","dygraph","getBooleanOption","setName","isArrayLike","createIterator","drawingContext","setLineDash","_drawSeries","_drawPointsOnLine","restore","strokeStyle","lineWidth","array_","end_","predicate_","start_","moveTo","lineTo","nextIdx_","next","hasNext","peek","stroke","setNames","colorsMap_","strokeWidth","axis","axisPropertiesForSeries","plotArea","seriesIndex","seriesCount","singleSeriesName","allSeriesPoints","_Plotters","linePlotter","_linePlotter","fillPlotter","_fillPlotter","errorPlotter","_errorPlotter","getNumericOption","Circles","DEFAULT","toRGB_","fillStyle","closePath","fill","_fastCanvasProxy","splice","_count","getLabels","visibility","getColors","A","minyval","yscale","O","D","E","L","S","P","C","M","FORCE_FAST_PROXY","N","F","isOK","k","y_stacked","10","highlightCircleSize","highlightSeriesOpts","highlightSeriesBackgroundAlpha","highlightSeriesBackgroundColor","labelsSeparateLines","labelsShowZeroValues","labelsKMB","labelsKMG2","showLabelsOnHighlight","digitsAfterDecimal","maxNumberWidth","sigFigs","strokeBorderWidth","strokeBorderColor","axisTickSize","axisLabelFontSize","rightGap","showRoller","xValueParser","delimiter","sigma","errorBars","fractions","wilsonInterval","customBars","fillGraph","fillAlpha","connectSeparatedPoints","stackedGraph","stackedGraphNaNFill","hideOverlayOnMouseOut","stepPlot","xRangePad","yRangePad","drawAxesAtZero","titleHeight","xLabelHeight","yLabelWidth","axisLineColor","axisLineWidth","gridLineWidth","axisLabelWidth","gridLineColor","interactionModel","defaultModel","animatedZooms","showRangeSelector","rangeSelectorHeight","rangeSelectorPlotStrokeColor","rangeSelectorPlotFillGradientColor","rangeSelectorPlotFillColor","rangeSelectorBackgroundStrokeColor","rangeSelectorBackgroundLineWidth","rangeSelectorPlotLineWidth","rangeSelectorForegroundStrokeColor","rangeSelectorForegroundLineWidth","rangeSelectorAlpha","showInRangeSelector","plotter","plugins","axes","pixelsPerLabel","axisLabelFormatter","dateAxisLabelFormatter","valueFormatter","dateValueFormatter","drawGrid","drawAxis","independentTicks","ticker","dateTicker","numberValueFormatter","numberAxisLabelFormatter","numericTicks","11","draw","date_graph","setSelection","getSelection","layout_","12","dragEndX","dragGetX_","dragEndY","dragGetY_","dragStartX","dragStartY","lastx_","treatMouseOpAsClick","regionWidth","regionHeight","isPanning","xAxisRange","getOptionForAxis","initialLeftmostDate","log10","dateRange","xUnitsPerPixel","plotter_","xAxisExtremes","toDomXCoord","toDataXCoord","boundedDates","axes_","extremeRange","toDomYCoord","toDataYCoord","boundedValues","is2DPan","yAxisRange","attributes_","getForAxis","initialTopValue","dragValueRange","unitsPerPixel","dateWindow_","LOG_SCALE","drawGraph_","endPan","maybeTreatMouseOpAsClick","startZoom","isZooming","zoomMoved","moveZoom","dragDirection","VERTICAL","HORIZONTAL","drawZoomRect_","prevDragDirection","prevEndX","prevEndY","getFunctionOption","MAX_VALUE","selPoints_","cancelable","point","cascadeEvents_","pts","endZoom","clearZoomRect_","getArea","doZoomX_","cancelNextDblclick","doZoomY_","startTouch","startTimeForDoubleTapMs","pageX","pageY","dataX","dataY","initialTouches","initialPinchCenter","touchDirections","initialRange","moveTouch","yAxisRanges","endTouch","changedTouches","getTime","doubleTapX","screenX","doubleTapY","screenY","resetZoom","findPos","canvas_","offsetWidth","offsetHeight","mousedown","button","initializeMouseDown","altKey","shiftKey","startPan","movePan","addAndTrackEvent","removeEvent","willDestroyContextMyself","touchstart","touchmove","touchend","dblclick","nonInteractiveModel_","mouseup","dragIsPanInteractionModel","mousemove","13","annotations","yAxes_","xTicks_","yTicks_","addDataset","area_","computePlotArea","chart_div","graphDiv","reserveSpaceLeft","reserveSpaceRight","reserveSpaceTop","reserveSpaceBottom","chartRect","setAnnotations","setXTicks","setYAxes","evaluate","_xAxis","_evaluateLimits","_evaluateLineCharts","_evaluateLineTicks","_evaluateAnnotations","minval","maxval","xlogrange","xlogscale","computedValueRange","maxyval","yrange","ylogrange","ylogscale","calcXNormal_","getForSeries","yval_stacked","dataHandler_","xticks","label_v","toPercentXCoord","pos","has_tick","yticks","toPercentYCoord","series","annotated_points","annotation","removeAllDatasets","setPointsLengths","setPointsOffsets","14","_process","15","xAxis_","series_","global_","attrs_","user_","user_attrs_","labels_","highlightSeries_","reparseSeries","AXIS_STRING_MAPPINGS_","y1","Y1","Y2","axisToIndex_","yAxis","getGlobalUser_","getGlobalDefault_","getHighlightSeries","numAxes","axisForSeries","axisOptions","seriesForAxis","seriesNames","16","numericLinearTicks","binarySearch","tickValue","pixel_coord","reverse","ceil","MILLISECONDLY","TWO_MILLISECONDLY","FIVE_MILLISECONDLY","TEN_MILLISECONDLY","FIFTY_MILLISECONDLY","HUNDRED_MILLISECONDLY","FIVE_HUNDRED_MILLISECONDLY","SECONDLY","TWO_SECONDLY","FIVE_SECONDLY","TEN_SECONDLY","THIRTY_SECONDLY","MINUTELY","TWO_MINUTELY","FIVE_MINUTELY","TEN_MINUTELY","THIRTY_MINUTELY","HOURLY","TWO_HOURLY","SIX_HOURLY","DAILY","TWO_DAILY","WEEKLY","MONTHLY","QUARTERLY","BIANNUAL","ANNUAL","DECADAL","CENTENNIAL","NUM_GRANULARITIES","Granularity","datefield","spacing","DateAccessorsUTC","DateAccessorsLocal","getMilliseconds","getDay","makeDate","getDateAxis","17","toExponential","toPrecision","nt","rt","ot","st","cancelEvent","cancelBubble","cancel","returnValue","hsvToRGB","pageXOffset","scrollLeft","pageYOffset","px","py","isValidPoint","floatFormat","hmsString_","dateString_","round_","dateParser","dateStrToMillis","updateDeep","Node","nodeName","isDateLike","createCanvas","getContextPixelRatio","devicePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","Iterator","repeatAndCleanup","et","isPixelChangingOptionList","at","detectLineDelimiter","isNodeContainedBy","getComputedStyle","getContext","parseFloat_","G","lt","W","LN_TEN","U","logRangeFraction","DOTTED_LINE","DASHED_LINE","DOT_DASH_LINE","addEvent","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","getUTCDay","UTC","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","requestAnimFrame","annotationClickHandler","annotationDblClickHandler","annotationMouseOutHandler","annotationMouseOverHandler","clickCallback","drawCallback","drawHighlightPointCallback","drawPoints","drawPointCallback","highlightCallback","labelsDiv","panEdgeFraction","pixelsPerYLabel","pointClickCallback","pointSize","underlayCallback","unhighlightCallback","zoomCallback","it","18","Symbol","iterator","return","TypeError","R","H","Z","q","Q","__init__","NAME","VERSION","DEFAULT_ROLL_PERIOD","DEFAULT_WIDTH","DEFAULT_HEIGHT","ANIMATION_STEPS","ANIMATION_DURATION","Plotters","addedAnnotationCSS","is_initial_draw_","readyFns_","copyUserAttrs_","maindiv_","file_","rollPeriod_","rollPeriod","previousVerticalX_","fractions_","dateWindow","annotations_","clientWidth","boundaryIds_","setIndexByName_","datasetIndex_","registeredEvents_","eventListeners_","createInterface_","plugins_","PLUGINS","plugin","activate","events","pluginOptions","createDragInterface_","defaultPrevented","propagationStopped","getPluginInstance_","isZoomed","attr_","getStringOption","optionsViewForAxis_","numRows","rawData_","yAxisExtremes","gatherDatasets_","rolledSeries_","extremes","computeYAxisRanges_","toDomCoords","toDataCoords","numColumns","getValue","textAlign","hidden_","createPlotKitCanvas_","resizeElements_","mouseEventElement_","createMouseEventElement_","mouseMoveHandler_","mouseMove_","mouseOutHandler_","fromElement","relatedTarget","toElement","mouseOut_","resizeHandler_","removeTrackedEvents_","hasChildNodes","firstChild","setColors_","colors_","getPropertiesForSeries","createRollInterface_","roller_","onchange","adjustRoll","tarp","cover","draggingDate","draggingValue","uncover","fillRect","currentZoomRectArgs_","doZoomXDates_","doAnimatedZoom","zoomAnimationFunction","clearSelection","eventToDomCoords","offsetX","offsetY","findClosestRow","findClosestPoint","seriesName","findStackedPoint","getLeftBoundary_","isSeriesLocked","lastRow_","highlightSet_","animateSelection_","fadeLevel","animateId","updateSelection_","selectedRow","selectedX","selectedPoints","lockedSet_","loadedEvent_","parseCSV_","cascadeDataDidUpdateEvent_","predraw_","addXTicks_","getHandlerClass_","computeYAxes_","drawingTimeMs_","PointType","stackPoints_","boundaryIds","renderGraph_","canvas","readyFired_","detectTypeFromString_","setXAxisOptions_","parseArray_","parseDataTable_","getNumberOfColumns","getNumberOfRows","getColumnType","getColumnLabel","shortText","fromCharCode","getColumnRange","XMLHttpRequest","ActiveXObject","onreadystatechange","readyState","responseText","send","updateOptions","resize_lock","setVisibility","indexFromSetName","getRowForX","ready","elem","GVizChart","defaultInteractionModel","nonInteractiveModel","Plugins","Legend","Axes","Annotations","ChartLabels","Grid","RangeSelector","DataHandlers","DefaultHandler","BarsHandler","CustomBarsHandler","DefaultFractionHandler","ErrorBarsHandler","FractionsBarsHandler","19","tarps","zIndex","20","clearChart","didDrawChart","detachLabels","tickHeight","cssClass","createTextNode","attachAtBottom","borderColor","tickColor","tickWidth","21","xlabels_","ylabels_","willDrawChart","22","title_div_","xlabel_div_","ylabel_div_","y2label_div_","detachLabels_","23","24","legend_div_","is_generated_div_","one_em_width_","deselect","predraw","generateLegendHTML","dashHTML","labelHTML","isVisible","xHTML","yHTML","isHighlighted","defaultFormatter","25","hasTouchInterface_","TouchEvent","isMobileDevice_","appVersion","interfaceCreated_","getOption_","reserveSpace_","renderStaticLayer_","renderInteractiveLayer_","bgcanvas_","fgcanvas_","leftZoomHandle_","rightZoomHandle_","setDefaultOption_","createCanvases_","createZoomHandles_","initInteraction_","addToGraph_","graphDiv_","removeFromGraph_","updateVisibility_","resize_","drawStaticLayer_","isChangingRange_","placeZoomHandles_","drawInteractiveLayer_","canvasRect_","bgcanvas_ctx_","fgcanvas_ctx_","cursor","Image","cloneNode","leftHandlePos","rightHandlePos","clientX","srcElement","getZoomHandleStatus_","targetTouches","opera","drawMiniPlot_","computeCombinedSeriesAndLimits_","yMax","yMin","createLinearGradient","addColorStop","MIN_VALUE","legendPluginModuleString","withContext","legendResolutionTooltip","collected","viewed","view_update_every","getNewSelectedDimensions","newSelectedDimensions","allDimensions","clickedDimensionName","isModifierKeyPressed","enabledDimensions","isCurrentlySelected","isSnapshotMode","snapshotCharts","snapshotDataPoints","isSignedIn","offline","dashboardReducer","combineReducers","globalKey","chartKey","dashboardKey","axiosInstance","axios","Pragma","getFetchStream","concurrentCallsLimit","fetch$","Subject","resetFetch$","handler","mergeMap","params","onErrorCallback","onSuccessCallback","cancelTokenSource","timeout","cancelToken","token","tap","responseData","catchError","empty","startWith","switchMap","subscribe","fillMissingData","nrOfPointsToFill","viewUpdateEvery","firstAddedTimestamp","emptyPoint","tail","nulls","addPointsDygraph","emptyArray","transformResults","shouldRevertFlip","dataResult","pointData","sum","Container","styled","getSizeBy","SideContent","ContentContainer","HeaderText","getColor","ContentText","TextSmall","UINotification","props","leftContent","rightContent","renderContent","createUINotification","NodeIconContainer","NotificationLink","toastOptions","toast","POSITION","BOTTOM_RIGHT","autoClose","pauseOnFocusLoss","showCloudInstallationProblemNotification","notificationComponent","showCloudConnectionProblemNotification","uiNotification","defaultUrlOptions","alarm_unique_id","alarm_id","alarm_event_id","alarm_when","parseQueryPair","isInvalidPair","isPrintMode","mapIndexed","mergeRight","parseUrl","watchFetchDataResponseChannel","fetchDataSaga","fetchChartSaga","fetchInfoSaga","chartSagas","CONCURRENT_CALLS_LIMIT_METRICS","fetchDataResponseChannel","take","action","start","end","put","constructCompatibleKey","IS_FLIP_RESPECTED_IN_COMPOSITE_CHARTS","getGroupByValues","fetchMetrics$","group","selectSnapshot","dimensionsWithUrlOptions","matchingKey","snapshotKey","agentOptionsOriginal","hasFlip","agentOptions","shouldAddFakeFlip","groupValues","axiosOptions","agent_options","post_aggregation_methods","aggregations","valueOf","fillMissingPoints","transformedResults","postAggregated","post_aggregated_data","fetchForSnapshot$","resetFetchForSnapshot$","fetchDataForSnapshotSaga","aggr_method","node_ids","stopSnapshotModeSaga","response","poll","wasCloudAvailable","wasACLKAvailable","takeEvery","spawn","sidePanelTransitionTimeInSeconds","getLog","notifyAll","alarmsLoop","startAlarms","fetchAllAlarmsSaga","alarmsSagas","ALARMS_INITIALIZATION_DELAY","ALARMS_UPDATE_EVERY","ALARMS_MS_BETWEEN_NOTIFICATIONS","areNotificationsAvailable","notificationCallback","netdataAlarmsNotifCallback","firstNotificationId","lastNotificationId","scrollToAlarm","chartID","scrollToChart","requestPermissions","Notification","permission","requestPermission","hasGivenNotificationPermissions","lastNotificationIdArg","getNotification","entry","firstNotificationIdArg","updated","valueString","value_string","tag","interaction","unique_id","old_status","no_clear_notification","notificationTitle","notificationOptions","requireInteraction","notificationHandler","alarmLogs","logsSorted","sortBy","newLogs","notifications","onclick","netdataAlarmsRemember","what","latest_alarm_log_unique_id","allAlarms","allowedReferrerDomains","isAllowedReferrer","referrer","watchWindowFocusChannel","waitForFullInfoPayload","injectPosthog","fetchHelloSaga","spacePanelSaga","globalSagas","windowFocusChannel","listenToWindowFocus","posthog","selectFullInfoPayload","__SV","_i","api_host","insertBefore","people","loaded","identify","shouldMaskReferrer","register","$ip","$current_url","$pathname","$host","$initial_referring_domain","$initial_referrer","$referring_domain","$referrer","event_source","netdata_machine_guid","netdata_person_id","netdata_buildinfo","netdata_release_channel","mirrored_host_count","mirrored_hosts","alarms_normal","normal","alarms_warning","warning","alarms_critical","critical","host_os_name","os_name","host_os_id","os_id","host_os_id_like","os_id_like","host_os_version","os_version","host_os_version_id","os_version_id","host_os_detection","os_detection","system_cores_total","cores_total","system_total_disk_space","total_disk_space","system_cpu_freq","cpu_freq","system_ram_total","ram_total","system_kernel_name","kernel_name","system_kernel_version","kernel_version","system_architecture","architecture","system_virtualization","virtualization","system_virt_detection","virt_detection","system_container","system_container_detection","container_detection","container_os_name","container_os_id","container_os_id_like","container_os_version","container_os_version_id","host_collectors_count","collectors","host_cloud_enabled","host_cloud_available","host_agent_claimed","host_aclk_available","host_aclk_implementation","host_allmetrics_json_used","host_allmetrics_prometheus_used","host_allmetrics_shell_used","host_charts_count","host_dashboard_used","host_metrics_count","host_notification_methods","config_memory_mode","config_exporting_enabled","config_exporting_connectors","config_hosts_available","config_https_enabled","config_multidb_disk_quota","config_page_cache_size","config_stream_enabled","config_web_enabled","host_is_parent","host_labels","_is_parent","mirrored_hosts_reachable","mirrored_hosts_status","reachable","mirrored_hosts_unreachable","host_collectors","host_is_k8s_node","is_k8s_node","accessRegistry","maxRedirects","machine","isRedirect","returnData","person_guid","parsePersonUrls","personUrls","lastTimestamp","accesses","existingObj","isNewer","extended","uniq","helloCallUrl","cloud_base_url","isUsingGlobalRegistry","accessRegistryResponse","anonymous_statistics","constructOptionStorageKey","setOptionSaga","showSignInSaga","mainJsSagas","LOCAL_STORAGE_NEEDS_SYNC","setGlobalChartUnderlaySaga","hashParams","getHashParams","setHashParams","clearHighlightSaga","removeHashParams","signInLinkHref","rootSaga","sagaMiddleware","createSagaMiddleware","store","createStore","rootReducer","compose","applyMiddleware","configureStore","loadCss","resolve","reject","fileRef","onerror","isDygraphSparkline","chartLibrariesSettings","hasToolboxPanAndZoom","xssRegexIgnore","isLogScale","hasLegend","trackColors","containerClass","peity","google","easypiechart","aspectRatio","gauge","textonly","groupbox","getChartURLOptions","shouldEliminateZeroDimensions","BIGGEST_INTERVAL_NUMBER","Loader","containerNode","hasEmptyData","screenHeight","lost","paddingTop","getPanAndZoomStep","ctrlKey","pan_and_zoom_factor","pan_and_zoom_factor_multiplier_control","pan_and_zoom_factor_multiplier_shift","pan_and_zoom_factor_multiplier_alt","safeEqualCheck","formattersFixed","formattersZeroBased","fastNumberFormat","NumberFormat","useGrouping","minimumFractionDigits","maximumFractionDigits","getLegendFormatValue","convertUnits","intlNumberFormat","valueDecimalDetail","dmin","dmax","convertedValue","useFormatters","selectTemperatureSetting","selectSecondsAsTimeSetting","setConvertUnits","setMin","setMax","unitsCurrent","setUnitsCurrent","decimals","setDecimals","setIntlNumberFormat","legendFormatValue","legendFormatValueRef","updateLegendFormatValueRef","newConvertUnits","newIntlNumberFormat","newDecimalDigits","legendFormatValueDecimalsFromMinMax","newMin","newMax","switchedUnits","newDecimals","convertedMin","convertedMax","delta","defaultColor","LegendContainer","LegendFirstRow","LegendSecondRow","LegendUnit","DateTimeSeparator","span","LegendItems","DimensionItem","isDisabled","DimensionItemToolboxPlaceholder","DimensionIcon","DimensionLabel","DimensionValue","ToolboxContainer","emptyObject","selector","dimension_names","LegendText","ChartLegendRight","hoveredRow","onDimensionClick","showLatestOnBlur","viewBefore","dimensionIds","dimension_ids","showUndefined","legendDate","colorFillOpacity","chart_type","scrollbarRef","dimensionId","rgb","hexFull","colorHex2Rgb","isSelected","hoveredValueArray","view_latest_values","role","tabIndex","ChartTimeframe","ChartLegendBottom","legendToolbox","resizeHandler","ChartLegend","setSelectedDimensions","LegendToolbox","onToolboxLeftClick","onToolboxRightClick","onToolboxZoomInClick","onToolboxZoomOutClick","getDataForFakeStacked","dimensionsVisibility","currentMin","currentMax","getDygraphChartType","chartSettings","dygraphRequestedType","dygraphChartType","getBackgroundColor","Color","transformColors","mix","getDygraphFillAlpha","isFakeStacked","color_fill_opacity_fake_stacked","color_fill_opacity_stacked","color_fill_opacity_area","useProceededChart","chartRef","propsRef","useToggle","proceeded","toggleProceeded","updatePosition","distance","first_entry","hasProceeded","defaultPositionTo","topMargin","ProceededChartDisclaimer","forwardRef","backgroundColorMap","WARNING","CRITICAL","CLEAR","borderColorMap","getBorderColor","textColorMap","Badge","border","getInitialDygraphOptions","hiddenLabelsElementId","orderedColors","setMinMax","shouldSmoothPlot","isSparkline","grid","includeZero","ylabel","smoothPlotter","strokePattern","drawGapEdgePoints","gridLinePattern","logscale","Dygraph","toTimeString","DygraphChart","chartElementClassName","chartElementId","onUpdateChartPanAndZoom","immediatelyDispatchPanAndZoom","setGlobalChartUnderlay","setHoveredX","viewAfter","selectGlobalChartUnderlay","selectedAlarm","selectAlarm","updateChartPanOrZoom","shouldNotExceedAvailableRange","dygraphInstance","latestIsUserAction","isMouseDown","dygraphHighlightAfter","dygraphLastTouchMove","dygraphLastTouchPageX","dygraphLastTouchEnd","isSyncPanAndZoom","selectSyncPanAndZoom","resetGlobalPanAndZoom","isRendered","toggleIsRendered","positionTo","useDygraphBadge","isAlarmBadgeVisible","alarmBadgeRef","updateAlarmBadge","isProceeded","precededChartRef","updatePrecededPosition","useLayoutEffect","selectSmoothPlot","dygraphOptionsStatic","dygraphOptions","newHoveredX","xRange","last_entry","isInRangeOfAvailableData","minDate","maxDate","currentAlarm","alarmPosition","fillColor","globalAlphaCache","globalAlpha","bottomLeft","topRight","isOutsideReasonableViewport","metaKey","sortedRange","wheel","normalDef","wheelDelta","deltaY","detail","layerX","offsetLeft","xPct","axisAfterOffset","offsetToPercentage","zoomInPercentage","bias","afterAxis","beforeAxis","increment","updatedAfter","updatedBefore","zoom","dygraphPlotter","pct","double_click_speed","instance","useUpdateEffect","selectSpacePanelTransitionEndIsActive","forceDateWindow","hasChangedDuration","hasScrolledToTheFutureDuringPlayMode","optionsDateWindow","selectGlobalSelectionMaster","commonMinState","selectCommonMin","commonMaxState","selectCommonMax","shouldUseCommonMin","shouldUseCommonMax","shouldUpdate","newExtremes","useUnmount","resizeObserver","useMount","hasOmitedFirstCallback","callbackDebounced","waitFor","args","debounce","ResizeObserver","observe","disconnect","EasyPieChart","chartWidth","chartInstance","setChartInstance","valueIndex","safeMinMax","_min","_max","isMinOverride","isMaxOverride","getPercentFromValueMinMax","easypiechart_track","easypiechart_scale","newChartInstance","EasyPie","barColor","trackColor","scaleColor","scaleLength","lineCap","trackWidth","easing","shouldUseAnimation","enableAnimation","disableAnimation","valueFontSize","valuetop","titleFontSize","titletop","unitFontSize","unitTop","isSetByUser","GaugeChart","chartCanvasElement","minAttribute","maxAttribute","safeMin","safeMax","_pcent","gauge_pointer","gauge_stroke","radiusScale","pointer","limitMax","limitMin","colorStart","colorStop","strokeColor","generateGradient","gradientType","highDpiSupport","Gauge","setOptions","minValue","maxValue","animationSpeed","set","valueTop","minMaxFontSize","normalizeHex","colorLuminance","hexNormalized","splitEvery","nr","convertToTimestamp","number","SparklineChart","viewAfterForCurrentData","viewBeforeForCurrentData","$chartElement","set$chartElement","sparklineOptions","requestedAfter","requestedBefore","currentDuration","requestedDuration","widthRatio","paddingLeftPercentage","getForceTimeWindowCorrection","defaultFillColor","fill_luminance","chartTitle","emptyStringIfDisable","sparklineInitOptions","lineColor","chartRangeMin","chartRangeMax","composite","enableTagOptions","tagOptionPrefix","tagValuesAttribute","disableHiddenCheck","defaultPixelsPerValue","spotColor","minSpotColor","maxSpotColor","spotRadius","valueSpots","highlightSpotColor","highlightLineColor","normalRangeMin","normalRangeMax","drawNormalOnTop","xvalues","chartRangeClip","chartRangeMinX","chartRangeMaxX","disableInteraction","disableTooltips","disableHighlight","highlightLighten","highlightColor","tooltipContainer","tooltipClassname","tooltipChartTitle","tooltipFormat","tooltipPrefix","tooltipSuffix","tooltipSkipNull","tooltipValueLookups","tooltipFormatFieldlist","tooltipFormatFieldlistKey","numberFormatter","numberDigitGroupSep","numberDecimalMark","numberDigitGroupCount","onLeave","onChange","sparklines","getCurrentRegionFields","bind","unbind","paddingLeft","fetchPromise","emptyContent","getDateRange","dt","dtString","time","t1","t2","D3pieChart","d3pieInstance","setD3pieInstance","d3pieOptions","safeContent","defaultTitle","other","mainlabel","segment_stroke","gradient_color","initialD3pieOptions","tooltip_bg","tooltip_fg","newD3pieInstance","isHoveredButNoData","slot","PeityChart","peityOptions","$element","peityInitOptions","foreground","updatedOptions","GoogleChart","googleChartInstance","hasApiBeenLoaded","setHasApiBeenLoaded","script","firstScript","packages","googleOptions","dataTable","visualization","DataTable","chartType","areaOpacity","Map","initialGoogleOptions","hAxis","viewWindowMode","slantedText","textStyle","gridlines","vAxis","chartArea","focusTarget","pointsVisible","titlePosition","titleTextStyle","isHtml","ignoreBounds","curveType","isStacked","googleInstance","AreaChart","LineChart","TextOnly","precision","textContent","defaultAspectRatio","getCellBoxSize","cellSize","getRows","getColumns","rows","getXPosition","getYPosition","getFullWidth","getFullHeight","getOffsetPosition","onMouseenter","onMouseout","cellPadding","hoveredIndex","getEvent","cellBoxSize","mouseout","nextHoveredIndex","getWidth","getCanvasAttributes","defaultColorRange","makeGetColor","colorRange","scaleLinear","domain","extent","range","innerHeight","aligns","GroupBox","renderTooltip","dataRef","canvasRef","boxesRef","hover","setHover","dropHoverRef","boxHoverRef","timeoutId","close","deactivateBox","closeDrop","currentHover","cellStroke","activeBox","activateBox","clearEvents","drawBox","registerEvents","strokeRect","drawBoxes","onMouseEnter","onMouseLeave","getAlign","Title","Label","Flex","attrs","TextMicro","GroupBoxWrapper","groupIndex","renderGroupPopover","renderBoxPopover","maxWidth","boxPopover","boxAlign","groupPopover","alignItems","plain","isOpen","popoverRef","GroupBoxes","flexWrap","vertical","flex","LinearColorScaleBar","k8s_cluster_id","k8s_node_name","k8s_namespace","k8s_controller_kind","k8s_controller_name","k8s_pod_name","k8s_container_name","labelIds","word","toUpperCase","Separator","Header","wordBreak","TabButton","neutral","themeType","Tabs","ExpandButton","makeFlex","Section","onExpand","noBorder","side","justifyContent","getPortalNodeStyles","shouldAddSpecialHeight","heightFromLocalStorage","heightID","persitedHeight","getHeightFromLocalStorage","heightOverriden","chartDefaultsMinWidth","min_width","minWidth","globalIntersectionOptions","root","rootMargin","threshold","globalIntersectionObserver","globalObserver","IntersectionObserver","entries","isIntersecting","unsubscribe","elementToUnsubscribe","createGlobalIntersectionObserver","InvisibleSearchableText","opacity","shouldCleanChartStateAlways","DisableOutOfView","portalNode","hasPortalNodeBeenStyled","setHasPortalNodeBeenStyled","isShowingAlarmOnChart","forEachObjIndexed","styleName","setProperty","destroyOnHide","selectDestroyOnHide","clonedChildrenRef","isVisibleIntersection","setIsVisible","isVisibleRef","newIsVisible","useCommonIntersection","debounceTime","selectIsAsyncOnScroll","shouldHideDebounced","setShouldHideDebounced","useDebounce","shouldHide","previousIsVisibleIntersection","newClonedChildren","child","cloned","clonedCanvases","querySelectorAll","oldCanvas","newCanvas","drawImage","cloneWithCanvas","clonedChildrenContainer","nodeElement","ChartContainer","dropdownMenu","renderCustomElementForDygraph","onAttributesChange","externalChartMetadata","sectionTitle","MigrationModalPromos","aggrMethods","avg","ChartValueContainer","memo","displayedIndex","aggregation","getAggregation","ChartValue","dangerouslySetInnerHTML","__html","groupLabel","postGroupLabel","relatedIndex","useContext","ThemeContext","chartContainerRef","setDisplayedIndex","setDisplayedIndexThrottled","throttle","repaint","relatedCharts","relatedChartAttributes","chartAttributes","chartLabels","ExternalButton","alignSelf","Item","secondary","DateItem","DateSection","Metrics","LabelsSection","labelId","items","onItemClick","getLabel","sliced","expandable","onNodeClick","ids","predefinedLabelIds","getLabelIds","StyledButton","List","onBack","horizontal","TabsContainer","Popover","setView","isLabelView","Kubernetes","labelValues","postGroupValues","postGroupData","groupValue","indexes","boxes","labelsAcc","groupData","groupChartLabels","groupLabels","Set","accChartLabels","transform","groupBoxData","groupedBoxesData","groupedBox","AbstractChart","showValueAttributesNodes","userElementId","chartSettingCallOptions","isFlipped","dimensionIndex","useShowValueOutside","Chart","viewRangeForCurrentData","themeContext","unitsScalingMethod","selectUnitsScalingMethod","shouldDisplayToolbox","legend_toolbox","shouldDisplayResizeHandler","resize_charts","allDimensionNames","dimensionNamesFromMetadata","additionalDimensionNamesFromData","localHoveredX","setLocalHoveredX","isSyncSelection","selectSyncSelection","handleSetHoveredX","noMaster","globalHoveredX","selectGlobalSelection","netdataFirst","netdataLast","fixedMinDuration","setGlobalPanAndZoomDebounced","useDebouncedCallback","newGlobalPanAndZoom","flush","handleUpdateChartPanAndZoom","shouldFlushImmediately","minDuration","currentDuraton","afterForced","beforeForced","first","wantedDuration","doCallback","tolerance","movement","handleToolBoxPanAndZoom","newAfter","newBefore","handleToolboxLeftClick","handleToolboxRightClick","timeWindow","handleToolboxZoomInClick","panAndZoomStep","handleToolboxZoomOutClick","selectAssignedColors","createSelectAssignedColors","__","isTimeVisible","DropdownItem","DropdownItemLabel","DotsBtn","ChartDropdown","setIsOpen","handleClose","circleAnimation","keyframes","SpinnerContainer","Circle","Circle2","Circle3","ChartSpinner","spaceBetween","ChartDropdownContainer","dimensionsAggrMethodMap","ChartWithLoader","selectChartMetadataRequest","actualChartMetadata","panAndZoom","isPanAndZoomMaster","areCriteriaMet","preferedIntervalTime","selectHasWindowFocus","stopUpdatesWhenFocusIsLost","selectStopUpdatesWhenFocusIsLost","selectGlobalPause","shouldBeUpdating","shouldFetch","setShouldFetch","shouldFetchImmediatelyAfterFocus","setShouldFetchImmediatelyAfterFocus","intervalTime","useInterval","useFetchNewDataClock","panAndZoomThrottled","useThrottle","initialBefore","liveModeAfter","boundingClientRect","isShowingSnapshot","selectShouldEliminateZeroDimensions","shouldUsePanAndZoomPadding","selectPanAndZoomDataPadding","CancelToken","shouldShowSpinnerDebounced","setShouldShowSpinnerDebounced","shouldShowSpinner","newViewRange","forceDataPoints","force_data_points","pointsMultiplier","requestedPadding","pixelsPerPointAttribute","pixelsPerPointSetting","pixels_per_point","getChartPixelsPerPoint","correctedPoints","firstEntry","nowInSeconds","afterAbsolute","beforeAbsolute","requestedRange","availableRange","getCorrectedPoints","externalSelectedDimensions","customElementForDygraph","selectDashboardDomain","selectIsSnapshotMode","selectSnapshotOptions","SnapshotLoader","SnapshotLoaderContainer","Portals","nodes","attributesMapped","createPortal","useHttp","shouldMakeCall","isExternal","setIsFetching","isError","setIsError","setData","modalRoot","ModalPortal","PrintModal","printModalElement","amountOfCharts","amountOfFetchedCharts","nameOfAnyFetchingChart","print","progressBarText","aria-labelledby","data-keyboard","data-backdrop","data-dismiss","aria-label","aria-hidden","aria-valuenow","aria-valuemin","aria-valuemax","SocialMediaContainer","FirstRow","GithubCopy","GithubCopyLine","SocialMediaLink","GithubStarQuestion","GithubIcon","TwitterIcon","FacebookIcon","SecondRow","SecondRowText","SidebarSocialMedia","SidebarSocialMediaPortal","NotificationsContainer","closeButton","hasBorder","hostNameSelector","global","truncate","tooltipBackground","CustomTooltip","isBasic","getContent","contentNode","Tooltip","getTooltipContent","Options","data-toggle","data-target","VersionControl","currentVersion","isStableReleaseChannel","releaseChannel","githubVersion","gcsVersionResponse","mediaLink","mediaLinkResponse","latestVersion","transformGcsVersionResponse","isNewVersionAvailable","small","versionSelector","Version","initialValue","setToggle","toggle","toggleOn","toggleOff","getValueFromStorage","useLocalStorage","setValue","RootContainer","DropdownContainer","Menu","ListContainer","OpenerIcon","noMargin","PickerBox","StyledTimePeriod","StyledCustomTimePeriod","StyledDropdown","renderTitle","onMenuToggle","anchorCorner","renderOpener","maxHeight","DropdownIcon","CustomInput","input","StyledDrop","Drop","StyledHR","hr","period","resolution","setTimeRange","tagging","dateResolutions","resolutionsMapping","MINUTE","HOUR","months","getCustomTimePeriod","parseInputPeriod","timeCorrection","customRange","getUnixTime","focusTaggingMap","startDate","endDate","timePeriods","getDateWithOffset","formattedDate","isMatch","splitOffset","mathSign","absoluteNumber","firstPart","padStart","padEnd","formatOffset","TimePeriods","handleTimePeriodChange","selectedDate","CustomTimePeriod","getInputValue","inputValue","setInputValue","isDropdownOpen","toggleDropdown","onBlur","currentValue","currentTarget","isValidInput","isInteger","timePeriod","isValid","onChangeResolution","newResolution","dateResolution","DatePicker","selected","selectsStart","selectsEnd","startOpen","inline","selectsRange","monthsShown","showPopperArrow","calendarContainer","StyledDateInput","StyledCalendar","getRgbColor","DatePickerInput","onDatesChange","onFocus","placeholderText","setFormattedValue","parsedDate","useLocaleDate","convertTimestampToDate","getLocaleDate","toDate","useConvertedDates","DatePickerWrapper","setStartDate","setEndDate","onInputFocus","convertedStartDate","convertedEndDate","setValidStartDate","setPreviousValue","isBefore","setValidEndDate","dates","startDateWithOffset","endDateWithOffset","startDateTimestamp","endDateTimestamp","grow","PeriodIndication","convertedStart","convertedEnd","formattedStartDate","formattedEndDate","formatDates","formatDistanceStrict","getTimePeriod","whiteSpace","resolutionMap","SECONDS","getDuration","moment","diff","getGranularDuration","showSeconds","getResolution","DateBox","isPlaying","isSameDate","DurationBox","PickerAccessorElement","isPickerOpen","setRangeValues","timeframe","setTimeframe","getStartDate","getEndDate","useDashboardSelector","isSame","getIsSameDate","DatePickerDrop","initialStartDate","initialEndDate","setResolution","focusedInput","setFocusedInput","setDates","clearChanges","togglePicker","focusTagging","getFocusTagging","isValidTimePeriod","isApplyDisabled","consistentDefaultValue","isClearDisabled","pickerDrop","canHideTarget","onEsc","onClickOutside","eventCategory","eventAction","eventLabel","eventValue","dataLayer","eventData","reportEvent","ReduxDatePickerContainer","dashboardDispatch","useDashboardDispatch","isGlobalPanAndZoom","pickedValues","getHoverColor","StyledPill","Pill","PlayPausePill","isForcePlaying","getIcon","PanelRowContainer","MenuItem","Wrapper","testid","actions","basis","DefaultListHeader","H4","SectionHandle","toggleOpen","ItemsList","PlayOptionsTooltip","bacgkround","MenuButton","Dropdown","MemoizedPlayOptions","GlobalControls","hollowColors","hollow","pillProps","Alarms","selectActiveAlarms","News","app","upToDate","SearchInput","TextInput","Search","inputRef","metaShrinked","OffsetItem","onSelect","timezones","abbr","getDefaultTimezone","memoized","timeZoneName","normalizedOffset","parsedOffset","normalizeOffset","digitizedOffset","digitizeOffset","timezoneList","byId","Timezone","selectedTimezone","selectedOffset","timezoneHash","zones","IframeContainer","Iframe","signedIn","rendered","setRendered","signInMsg","lsValue","removeLsValue","selectCloudBaseUrl","nameParam","originParam","signInIframeUrl","onLoad","useCheckSignInStatus","hasSignedInBefore","setHasSignedInBefore","onMessage","isNew","SignIn","isRegistry","onSignIn","CloudTab","showBorderLeft","onActivate","fixed","closable","TITLE","TabsContentText","TabsContent","Home","image","nodeView","Overview","Nodes","Dashboards","Alerts","Anomalies","video","Pricing","Privacy","DiscoverCloudDrop","parentRef","closeDropdown","handleGoToCloud","backdrop","marginLeft","frameBorder","allow","allowFullScreen","InnerPositioner","DiscoverCloud","setIsModalOpen","selectedModalContent","setSelectedModalContent","dropDownParentRef","handleOpenModal","selectedContentId","SignOut","SignInItem","isSignedInSelector","dashboard","UserSettings","menuItems","separator","DarkTheme","SpacesSkeleton","Fragment","SpacesIframe","Spaces","getNodeUrl","baseUrl","getNodes","hostsStatus","base","decodeURI","getBaseUrl","replicatedNodes","Anchor","StyledIcon","ReplicatedNodes","listOpen","setListOpen","toggleListOpen","iconLeft","SpacePanelIframe","spacePanelMessage","promptContent","signIn","signUp","SignInPrompt","NoNetwork","viewBox","xmlns","fillRule","clipRule","OfflinePrompt","NodesContainer","ListItem","TrashIcon","NodeUrl","TextNano","withComponent","NodeName","handle","metaIcon","maxLength","spanLength","truncateMiddle","VisitedNodes","sortedMachines","machinesArray","replicatedNodesSelector","visitedNodesSelector","visitedNodes","globalRegistry","selectIsUsingGlobalRegistry","switchIdentity","persist","pointerEvents","setLsValue","selectSpacePanelIsActive","Layout","printMode","mapTheme","slate","white","DefaultTheme","MigrationModal","migrationModalPromoInfo","setUserPrefrence","savePromoRemindMeSelection","migrationModalPromo","requestRefreshOfAccess","isRememberChoiceChecked","setIsRememberChoiceChecked","toPath","userPreference","handleClickedCTA2","CTA2","tickBoxOption","makeUTMParameters","modalPromo","utmParametersToString","migrationmodalInfo","PROMO_SIGN_UP_CLOUD","preferenceID","PROMO_SIGN_IN_CLOUD","PROMO_IVNITED_TO_SPACE","PROMO_CLAIM_NODE","PROMO_TO_USE_NEW_DASHBAORD","FALLBACK_TO_AGENT","NO_INFO_FALLBACK_TO_AGENT","modalStatusWithPromoFunctions","userSavedPreference","nodeClaimedStatus","useMigrationModal","modalStatus","MigrationManager","cloudUrl","selectSignInUrl","term","linkToCoud","redirectURI","hasPromoSelectionSaved","isPromoEligibleForShow","showModalTimer","goToCloud","FakeMargin","Box","App","useStore","refreshHelper","setRefreshHelper","haveDOMReadyForParsing","loadOverlay","shouldUseRegistry","useRegistry","shouldUseAlarms","selectHasStartedAlarms","useAlarms","shouldUseInfo","useInfo","hasFetchDependencies","setHasFetchDependencies","bootstrap_css","dashboard_css","useChartsMetadata","selectHasFetchedInfo","selectTheme","alarmWhen","alarmTime","alarmChart","alarmValue","useAlarmFromUrl","ReactDOM","isRegistrySelector","offlineSelector","signInUrl","fragmentParamsSeparatorRegEx","param","makeHashFromObject","allParams","allParamsResult","mergeDeepLeft","excludedParams","filteredParams","getFilteredHash","htmlIframeElement","iframeElement","contentWindow","postMessage","messageType","defaultState","lastMessage","setLastMessage","handleMessage","resetMesssage","process","useSelectorOriginal","useDispatchOriginal","getIsDemo","selectGlobal","globalState","selectOptions","optionName","selectChartsMetadata","allMetadata","BaseAnchor","Component","assign","meta","INITIAL_OPTIONS","netdataNoBootstrap","optionsFromLocalStorage","localStorageKeyToOption","parsed","getItemFromLocalStorage","overridenOptions"],"mappings":"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,CACE1kB,MAAO,SACPi1H,KAAM,IACN17F,KAAM,gCACN7U,IAAK,CAAC,aAAc,iBAAkB,eAAgB,sBAExD,CACE1kB,MAAO,yBACPi1H,KAAM,MACN17F,KAAM,SACN7U,IAAK,CACH,aACA,mBACA,mBACA,oBACA,mBAGJ,CACE1kB,MAAO,wBACPi1H,KAAM,OACN17F,KAAM,SACN7U,IAAK,CACH,oBACA,iBACA,eACA,gBACA,oBAGJ,CACE1kB,MAAO,iCACPi1H,KAAM,MACN17F,KAAM,kBACN7U,IAAK,CAAC,yBAER,CACE1kB,MAAO,wBACPi1H,KAAM,MACN17F,KAAM,6BACN7U,IAAK,CACH,iBACA,sBACA,kBACA,oBACA,qBACA,YAGJ,CACE1kB,MAAO,4BACPi1H,KAAM,OACN17F,KAAM,UACN7U,IAAK,CACH,kBACA,uBACA,qBACA,kBACA,cAGJ,CACE1kB,MAAO,kCACPi1H,KAAM,MACN17F,KAAM,8BACN7U,IAAK,CAAC,oBAAqB,qBAE7B,CACE1kB,MAAO,yBACPi1H,KAAM,MACN17F,KAAM,8BACN7U,IAAK,CACH,gBACA,wBACA,iBACA,mBACA,iBACA,kBACA,sBACA,YAGJ,CACE1kB,MAAO,gCACPi1H,KAAM,OACN17F,KAAM,kBACN7U,IAAK,CACH,iBACA,qBACA,sBACA,oBACA,kBACA,sBACA,YACA,sBAGJ,CACE1kB,MAAO,wBACPi1H,KAAM,MACN17F,KAAM,6BACN7U,IAAK,CACH,kBACA,uBACA,4BACA,oBACA,oBACA,8BACA,8BACA,iCACA,sBACA,uBACA,mBACA,mBACA,YAGJ,CACE1kB,MAAO,iCACPi1H,KAAM,MACN17F,KAAM,sCACN7U,IAAK,CACH,yBACA,iBACA,iBACA,sBACA,sBAGJ,CACE1kB,MAAO,+BACPi1H,KAAM,OACN17F,KAAM,eACN7U,IAAK,CAAC,iBAAkB,0BAE1B,CACE1kB,MAAO,2BACPi1H,KAAM,OACN17F,KAAM,sBACN7U,IAAK,CACH,iBACA,iBACA,wBACA,mBACA,oBACA,kBACA,eACA,iBACA,qBACA,cAGJ,CACE1kB,MAAO,wBACPi1H,KAAM,MACN17F,KAAM,6BACN7U,IAAK,CACH,kBACA,iBACA,6BACA,4BACA,0BACA,kBACA,8BACA,qBACA,mBACA,iBACA,mBACA,kBACA,sBACA,yBACA,sBACA,kBACA,YAGJ,CACE1kB,MAAO,2BACPi1H,KAAM,OACN17F,KAAM,iBACN7U,IAAK,CAAC,0BAA2B,wBAAyB,yBAE5D,CACE1kB,MAAO,0BACPi1H,KAAM,MACN17F,KAAM,UACN7U,IAAK,CAAC,oBAER,CACE1kB,MAAO,yBACPi1H,KAAM,MACN17F,KAAM,WACN7U,IAAK,CAAC,qBAER,CACE1kB,MAAO,yBACPi1H,KAAM,MACN17F,KAAM,yBACN7U,IAAK,CACH,oBACA,oBACA,kBACA,kBACA,gBACA,qBAGJ,CACE1kB,MAAO,kCACPi1H,KAAM,OACN17F,KAAM,SACN7U,IAAK,CAAC,uBAAwB,mBAEhC,CACE1kB,MAAO,2BACPi1H,KAAM,OACN17F,KAAM,uCACN7U,IAAK,CACH,mBACA,kBACA,gBACA,mBACA,uBACA,oBACA,kBACA,mBACA,qBACA,kBACA,qBACA,iBACA,qBACA,iBACA,wBACA,iBACA,kBACA,qBACA,qBACA,wBACA,sBACA,sBACA,wBACA,wBACA,mBACA,mBACA,oBACA,qBACA,kBACA,cAGJ,CACE1kB,MAAO,2BACPi1H,KAAM,OACN17F,KAAM,WACN7U,IAAK,CAAC,mBAAoB,sBAE5B,CACE1kB,MAAO,6BACPi1H,KAAM,MACN17F,KAAM,eACN7U,IAAK,CAAC,qBAER,CACE1kB,MAAO,iCACPi1H,KAAM,QACN17F,KAAM,WACN7U,IAAK,CAAC,sBAER,CACE1kB,MAAO,0BACPi1H,KAAM,MACN17F,KAAM,eACN7U,IAAK,CACH,6BACA,iCACA,0BACA,6BACA,6BACA,4BACA,4BACA,uBACA,oBACA,kBACA,gBACA,oBAGJ,CACE1kB,MAAO,2BACPi1H,KAAM,OACN17F,KAAM,qBACN7U,IAAK,CACH,oBACA,gBACA,kBACA,oBACA,iBACA,qBACA,iBACA,mBACA,qBACA,mBACA,cAGJ,CACE1kB,MAAO,0BACPi1H,KAAM,MACN17F,KAAM,YACN7U,IAAK,CAAC,oBAER,CACE1kB,MAAO,2BACPi1H,KAAM,MACN17F,KAAM,aACN7U,IAAK,CAAC,uBAER,CACE1kB,MAAO,sBACPi1H,KAAM,MACN17F,KAAM,WACN7U,IAAK,CAAC,kBAER,CACE1kB,MAAO,SACPi1H,KAAM,IACN17F,KAAM,gCACN7U,IAAK,CAAC,kBAAmB,yBAA0B,cAErD,CACE1kB,MAAO,6BACPi1H,KAAM,MACN17F,KAAM,qBACN7U,IAAK,IAEP,CACE1kB,MAAO,uBACPi1H,KAAM,MACN17F,KAAM,SACN7U,IAAK,CAAC,uBAAwB,oBAEhC,CACE1kB,MAAO,2BACPi1H,KAAM,OACN17F,KAAM,iBACN7U,IAAK,CAAC,sBAAuB,cAE/B,CACE1kB,MAAO,wBACPi1H,KAAM,MACN17F,KAAM,aACN7U,IAAK,CAAC,oBAAqB,oBAE7B,CACE1kB,MAAO,MACPi1H,KAAM,MACN17F,KAAM,6BACN7U,IAAK,CAAC,uBAAwB,YAEhC,CACE1kB,MAAO,oBACPi1H,KAAM,MACN17F,KAAM,oBACN7U,IAAK,CAAC,qBAAsB,kBAAmB,gBAAiB,kBAElE,CACE1kB,MAAO,oBACPi1H,KAAM,MACN17F,KAAM,iBACN7U,IAAK,CACH,kBACA,kBACA,mBACA,gBACA,kBAGJ,CACE1kB,MAAO,0BACPi1H,KAAM,MACN17F,KAAM,sBACN7U,IAAK,CACH,iBACA,eACA,gBACA,gBACA,gBACA,iBACA,eACA,kBACA,cACA,kBACA,oBACA,qBACA,kBACA,qBACA,uBAGJ,CACE1kB,MAAO,0BACPi1H,KAAM,OACN17F,KAAM,mDACN7U,IAAK,CACH,sBACA,mBACA,iBACA,gBACA,kBACA,mBACA,oBACA,eACA,gBACA,cACA,cACA,oBACA,mBACA,eACA,iBACA,gBACA,kBAGJ,CACE1kB,MAAO,+BACPi1H,KAAM,OACN17F,KAAM,oDACN7U,IAAK,CACH,kBACA,oBACA,kBACA,mBACA,mBACA,gBACA,kBAGJ,CACE1kB,MAAO,wBACPi1H,KAAM,MACN17F,KAAM,sCACN7U,IAAK,CAAC,eAAgB,kBAAmB,oBAAqB,gBAAiB,iBAEjF,CACE1kB,MAAO,iCACPi1H,KAAM,OACN17F,KAAM,mCACN7U,IAAK,CAAC,kBAAmB,gBAAiB,gBAAiB,kBAE7D,CACE1kB,MAAO,kCACPi1H,KAAM,QACN17F,KAAM,sBACN7U,IAAK,CACH,iBACA,gBACA,qBACA,gBACA,kBACA,eACA,oBACA,gBACA,gBACA,kBACA,gBACA,oBACA,eACA,cAGJ,CACE1kB,MAAO,wBACPi1H,KAAM,MACN17F,KAAM,WACN7U,IAAK,CAAC,oBAER,CACE1kB,MAAO,oBACPi1H,KAAM,MACN17F,KAAM,oBACN7U,IAAK,CAAC,eAAgB,gBAAiB,mBAAoB,oBAE7D,CACE1kB,MAAO,4BACPi1H,KAAM,OACN17F,KAAM,SACN7U,IAAK,CAAC,gBAER,CACE1kB,MAAO,sBACPi1H,KAAM,MACN17F,KAAM,QACN7U,IAAK,CAAC,iBAER,CACE1kB,MAAO,sBACPi1H,KAAM,MACN17F,KAAM,WACN7U,IAAK,CAAC,kBAER,CACE1kB,MAAO,0BACPi1H,KAAM,OACN17F,KAAM,YACN7U,IAAK,CACH,eACA,gBACA,mBACA,kBACA,kBACA,cACA,mBACA,iBACA,cACA,eACA,iBACA,kBACA,iBACA,sBAGJ,CACE1kB,MAAO,6BACPi1H,KAAM,OACN17F,KAAM,mBACN7U,IAAK,CACH,kBACA,mBACA,kBACA,gBACA,sBACA,gBACA,oBACA,gBACA,gBACA,gBACA,iBACA,cAGJ,CACE1kB,MAAO,oBACPi1H,KAAM,MACN17F,KAAM,gDACN7U,IAAK,CACH,kBACA,cACA,mBACA,cACA,eACA,iBACA,kBACA,iBACA,sBAGJ,CACE1kB,MAAO,uBACPi1H,KAAM,MACN17F,KAAM,WACN7U,IAAK,CAAC,oBAER,CACE1kB,MAAO,uBACPi1H,KAAM,MACN17F,KAAM,YACN7U,IAAK,CAAC,mBAER,CACE1kB,MAAO,sBACPi1H,KAAM,MACN17F,KAAM,UACN7U,IAAK,CAAC,mBAER,CACE1kB,MAAO,uBACPi1H,KAAM,MACN17F,KAAM,QACN7U,IAAK,CAAC,eAER,CACE1kB,MAAO,uBACPi1H,KAAM,MACN17F,KAAM,UACN7U,IAAK,CAAC,iBAER,CACE1kB,MAAO,4BACPi1H,KAAM,MACN17F,KAAM,cACN7U,IAAK,CAAC,uBAER,CACE1kB,MAAO,qBACPi1H,KAAM,MACN17F,KAAM,iBACN7U,IAAK,CAAC,YAAa,eAAgB,cAAe,aAAc,gBAElE,CACE1kB,MAAO,0BACPi1H,KAAM,OACN17F,KAAM,UACN7U,IAAK,CACH,qBACA,gBACA,uBACA,kBACA,cACA,iBACA,kBACA,mBACA,iBACA,mBACA,YACA,sBACA,gBACA,mBAGJ,CACE1kB,MAAO,uBACPi1H,KAAM,MACN17F,KAAM,2CACN7U,IAAK,CAAC,eAAgB,gBAAiB,oBAAqB,mBAAoB,iBAElF,CACE1kB,MAAO,cACPi1H,KAAM,OACN17F,KAAM,6BACN7U,IAAK,CAAC,mBAAoB,gBAAiB,qBAE7C,CACE1kB,MAAO,qBACPi1H,KAAM,MACN17F,KAAM,SACN7U,IAAK,CAAC,gBAER,CACE1kB,MAAO,wBACPi1H,KAAM,MACN17F,KAAM,oBACN7U,IAAK,CAAC,aAAc,cAAe,cAErC,CACE1kB,MAAO,2BACPi1H,KAAM,MACN17F,KAAM,OACN7U,IAAK,CAAC,cAER,CACE1kB,MAAO,0BACPi1H,KAAM,MACN17F,KAAM,aACN7U,IAAK,CAAC,cAAe,mBAAoB,mBAE3C,CACE1kB,MAAO,yBACPi1H,KAAM,MACN17F,KAAM,UACN7U,IAAK,CAAC,iBAER,CACE1kB,MAAO,yBACPi1H,KAAM,MACN17F,KAAM,UACN7U,IAAK,CAAC,iBAER,CACE1kB,MAAO,4BACPi1H,KAAM,MACN17F,KAAM,QACN7U,IAAK,CAAC,eAER,CACE1kB,MAAO,0BACPi1H,KAAM,OACN17F,KAAM,qBACN7U,IAAK,CACH,oBACA,aACA,cACA,gBACA,gBACA,YACA,iBACA,gBACA,YACA,mBACA,oBAGJ,CACE1kB,MAAO,qBACPi1H,KAAM,OACN17F,KAAM,gBACN7U,IAAK,CAAC,uBAER,CACE1kB,MAAO,yBACPi1H,KAAM,MACN17F,KAAM,qBACN7U,IAAK,CAAC,iBAER,CACE1kB,MAAO,sBACPi1H,KAAM,MACN17F,KAAM,sCACN7U,IAAK,CAAC,iBAER,CACE1kB,MAAO,0BACPi1H,KAAM,OACN17F,KAAM,sBACN7U,IAAK,CAAC,iBAER,CACE1kB,MAAO,sBACPi1H,KAAM,MACN17F,KAAM,YACN7U,IAAK,CAAC,mBAER,CACE1kB,MAAO,6BACPi1H,KAAM,OACN17F,KAAM,sBACN7U,IAAK,CACH,oBACA,cACA,eACA,iBACA,cACA,YACA,kBAGJ,CACE1kB,MAAO,2BACPi1H,KAAM,MACN17F,KAAM,QACN7U,IAAK,CAAC,aAAc,iBAEtB,CACE1kB,MAAO,wBACPi1H,KAAM,MACN17F,KAAM,mBACN7U,IAAK,CAAC,eAAgB,iBAExB,CACE1kB,MAAO,wBACPi1H,KAAM,OACN17F,KAAM,0BACN7U,IAAK,CACH,mBACA,eACA,YACA,eACA,kBACA,iBACA,cACA,iBACA,YACA,qBAGJ,CACE1kB,MAAO,gCACPi1H,KAAM,QACN17F,KAAM,cACN7U,IAAK,CAAC,oBAAqB,mBAAoB,cAEjD,CACE1kB,MAAO,sBACPi1H,KAAM,MACN17F,KAAM,wCACN7U,IAAK,CAAC,iBAAkB,aAAc,kBAExC,CACE1kB,MAAO,2BACPi1H,KAAM,OACN17F,KAAM,cACN7U,IAAK,CAAC,qBAER,CACE1kB,MAAO,0BACPi1H,KAAM,OACN17F,KAAM,0BACN7U,IAAK,CACH,cACA,oBACA,eACA,gBACA,cACA,iBACA,cAGJ,CACE1kB,MAAO,6BACPi1H,KAAM,OACN17F,KAAM,QACN7U,IAAK,CAAC,mBAAoB,oBAE5B,CACE1kB,MAAO,uBACPi1H,KAAM,MACN17F,KAAM,SACN7U,IAAK,CAAC,gBAER,CACE1kB,MAAO,4BACPi1H,KAAM,MACN17F,KAAM,cACN7U,IAAK,CAAC,kBAAmB,qBAE3B,CACE1kB,MAAO,gCACPi1H,KAAM,QACN17F,KAAM,UAC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","file":"static/js/main.76dfe4de.chunk.js","sourcesContent":["export const zeropad = (x: string | number) => {\n  if (x > -10 && x < 10) {\n    return `0${x}`\n  }\n  return `${x}`\n}\n\ninterface ScalableUnits {\n  [unitGroupName: string]: {\n    [unitName: string]: number\n  }\n}\n\nexport const leaveAtLeast1Decimal = (number: number) => {\n  const decimalPortion = `${number}`.split(\".\")[1]\n  if (decimalPortion && decimalPortion.length > 1) {\n    return `${number}`\n  }\n\n  let tms = number * 10\n  const integer = Math.floor(tms / 10)\n\n  tms -= integer * 10\n  return `${integer}.${tms}`\n}\n\ntype TimeUnit = \"MINUTES\" | \"HOURS\" | \"DAYS\"\nconst seconds2time = (seconds: number, maxTimeUnit: TimeUnit) => {\n  let secondsReturn = Math.abs(seconds)\n\n  const days = maxTimeUnit === \"DAYS\" ? Math.floor(secondsReturn / 86400) : 0\n  secondsReturn -= days * 86400\n\n  const hours =\n    maxTimeUnit === \"DAYS\" || maxTimeUnit === \"HOURS\" ? Math.floor(secondsReturn / 3600) : 0\n  secondsReturn -= hours * 3600\n\n  const minutes = Math.floor(secondsReturn / 60)\n  secondsReturn -= minutes * 60\n\n  const daysString = maxTimeUnit === \"DAYS\" ? `${days}d:` : \"\"\n  const hoursString = maxTimeUnit === \"DAYS\" || maxTimeUnit === \"HOURS\" ? `${zeropad(hours)}:` : \"\"\n  const minutesString = `${zeropad(minutes)}:`\n  let secondsString = zeropad(secondsReturn.toFixed(2))\n\n  return `${daysString}${hoursString}${minutesString}${secondsString}`\n}\n\nconst scalableUnits: ScalableUnits = {\n  \"packets/s\": {\n    pps: 1,\n    Kpps: 1000,\n    Mpps: 1000000,\n  },\n  pps: {\n    pps: 1,\n    Kpps: 1000,\n    Mpps: 1000000,\n  },\n  \"kilobits/s\": {\n    \"bits/s\": 1 / 1000,\n    \"kilobits/s\": 1,\n    \"megabits/s\": 1000,\n    \"gigabits/s\": 1000000,\n    \"terabits/s\": 1000000000,\n  },\n  \"bytes/s\": {\n    \"bytes/s\": 1,\n    \"kilobytes/s\": 1024,\n    \"megabytes/s\": 1024 * 1024,\n    \"gigabytes/s\": 1024 * 1024 * 1024,\n    \"terabytes/s\": 1024 * 1024 * 1024 * 1024,\n  },\n  \"kilobytes/s\": {\n    \"bytes/s\": 1 / 1024,\n    \"kilobytes/s\": 1,\n    \"megabytes/s\": 1024,\n    \"gigabytes/s\": 1024 * 1024,\n    \"terabytes/s\": 1024 * 1024 * 1024,\n  },\n  \"B/s\": {\n    \"B/s\": 1,\n    \"KiB/s\": 1024,\n    \"MiB/s\": 1024 * 1024,\n    \"GiB/s\": 1024 * 1024 * 1024,\n    \"TiB/s\": 1024 * 1024 * 1024 * 1024,\n  },\n  \"KB/s\": {\n    \"B/s\": 1 / 1024,\n    \"KB/s\": 1,\n    \"MB/s\": 1024,\n    \"GB/s\": 1024 * 1024,\n    \"TB/s\": 1024 * 1024 * 1024,\n  },\n  \"KiB/s\": {\n    \"B/s\": 1 / 1024,\n    \"KiB/s\": 1,\n    \"MiB/s\": 1024,\n    \"GiB/s\": 1024 * 1024,\n    \"TiB/s\": 1024 * 1024 * 1024,\n  },\n  bytes: {\n    bytes: 1,\n    kilobytes: 1024,\n    megabytes: 1024 * 1024,\n    gigabytes: 1024 * 1024 * 1024,\n    terabytes: 1024 * 1024 * 1024 * 1024,\n  },\n  Hz: {\n    Hz: 1,\n    kHz: 10 ** 3,\n    MHz: 10 ** 6,\n    GHz: 10 ** 9,\n    THz: 10 ** 12,\n    PHz: 10 ** 15,\n    EHz: 10 ** 18,\n    ZHz: 10 ** 21,\n  },\n  B: {\n    B: 1,\n    KiB: 1024,\n    MiB: 1024 * 1024,\n    GiB: 1024 * 1024 * 1024,\n    TiB: 1024 * 1024 * 1024 * 1024,\n    PiB: 1024 * 1024 * 1024 * 1024 * 1024,\n  },\n  KB: {\n    B: 1 / 1024,\n    KB: 1,\n    MB: 1024,\n    GB: 1024 * 1024,\n    TB: 1024 * 1024 * 1024,\n  },\n  KiB: {\n    B: 1 / 1024,\n    KiB: 1,\n    MiB: 1024,\n    GiB: 1024 * 1024,\n    TiB: 1024 * 1024 * 1024,\n  },\n  MB: {\n    B: 1 / (1024 * 1024),\n    KB: 1 / 1024,\n    MB: 1,\n    GB: 1024,\n    TB: 1024 * 1024,\n    PB: 1024 * 1024 * 1024,\n  },\n  MiB: {\n    B: 1 / (1024 * 1024),\n    KiB: 1 / 1024,\n    MiB: 1,\n    GiB: 1024,\n    TiB: 1024 * 1024,\n    PiB: 1024 * 1024 * 1024,\n  },\n  GB: {\n    B: 1 / (1024 * 1024 * 1024),\n    KB: 1 / (1024 * 1024),\n    MB: 1 / 1024,\n    GB: 1,\n    TB: 1024,\n    PB: 1024 * 1024,\n    EB: 1024 * 1024 * 1024,\n  },\n  GiB: {\n    B: 1 / (1024 * 1024 * 1024),\n    KiB: 1 / (1024 * 1024),\n    MiB: 1 / 1024,\n    GiB: 1,\n    TiB: 1024,\n    PiB: 1024 * 1024,\n    EiB: 1024 * 1024 * 1024,\n  },\n  /*\n  'milliseconds': {\n      'seconds': 1000\n  },\n  'seconds': {\n      'milliseconds': 0.001,\n      'seconds': 1,\n      'minutes': 60,\n      'hours': 3600,\n      'days': 86400\n  }\n  */\n}\n\nlet currentTemperatureSetting: \"celsius\" | \"fahrenheit\"\nlet currentSecondsAsTimeSetting: boolean\ninterface ConvertibleUnits {\n  [unitIn: string]: {\n    [unitOut: string]: {\n      check: ((number: number) => boolean) | (() => boolean)\n      convert: (number: number) => number | string\n    }\n  }\n}\n\nconst twoFixed =\n  (multiplier: number = 1) =>\n  (value: number) =>\n    (value * multiplier).toFixed(2)\n\nconst convertibleUnits: ConvertibleUnits = {\n  Celsius: {\n    Fahrenheit: {\n      check() {\n        return currentTemperatureSetting === \"fahrenheit\"\n      },\n      convert(value: number) {\n        return (value * 9) / 5 + 32\n      },\n    },\n  },\n  celsius: {\n    fahrenheit: {\n      check() {\n        return currentTemperatureSetting === \"fahrenheit\"\n      },\n      convert(value: number) {\n        return (value * 9) / 5 + 32\n      },\n    },\n  },\n  milliseconds: {\n    microseconds: {\n      check: (max: number) => max < 1,\n      convert: twoFixed(1000),\n    },\n    milliseconds: {\n      check: (max: number) => max >= 1 && max < 1000,\n      convert: twoFixed(),\n    },\n    seconds: {\n      check: (max: number) => max >= 1000 && max < 60000,\n      convert: twoFixed(0.001),\n    },\n    \"MM:SS.ms\": {\n      check: (max: number) => currentSecondsAsTimeSetting && max >= 60000 && max < 3600_000,\n      convert: (value: number) => seconds2time(value / 1000, \"MINUTES\"),\n    },\n    \"HH:MM:SS.ms\": {\n      check: (max: number) => currentSecondsAsTimeSetting && max >= 3600_000 && max < 86_400_000,\n      convert: (value: number) => seconds2time(value / 1000, \"HOURS\"),\n    },\n    \"dHH:MM:SS.ms\": {\n      check: (max: number) => currentSecondsAsTimeSetting && max >= 86_400_000,\n      convert: (value: number) => seconds2time(value / 1000, \"DAYS\"),\n    },\n  },\n\n  seconds: {\n    microseconds: {\n      check: (max: number) => max < 0.001,\n      convert: twoFixed(1000_000),\n    },\n    milliseconds: {\n      check: (max: number) => max >= 0.001 && max < 1,\n      convert: twoFixed(1000),\n    },\n    seconds: {\n      check: (max: number) => max >= 1 && max < 60,\n      convert: twoFixed(1),\n    },\n    \"MM:SS.ms\": {\n      check: (max: number) => currentSecondsAsTimeSetting && max >= 60 && max < 3600,\n      convert: (value: number) => seconds2time(value, \"MINUTES\"),\n    },\n    \"HH:MM:SS.ms\": {\n      check: (max: number) => currentSecondsAsTimeSetting && max >= 3600 && max < 86_400,\n      convert: (value: number) => seconds2time(value, \"HOURS\"),\n    },\n    \"dHH:MM:SS.ms\": {\n      check: (max: number) => currentSecondsAsTimeSetting && max >= 86_400,\n      convert: (value: number) => seconds2time(value, \"DAYS\"),\n    },\n  },\n}\n\nconst identity = (value: number) => value\n\ninterface Keys {\n  [commonUnitsKey: string]: {\n    [uuid: string]: {\n      divider: number\n      units: string\n    }\n  }\n}\ninterface Latest {\n  [commonUnitsKey: string]: {\n    divider: number\n    units: string\n  }\n}\nexport const unitsConversionCreator = {\n  // todo lift the state\n  keys: {} as Keys, // keys for data-common-units\n  latest: {} as Latest, // latest selected units for data-common-units\n\n  globalReset() {\n    this.keys = {}\n    this.latest = {}\n  },\n\n  // get a function that converts the units\n  // + every time units are switched call the callback\n  get(\n    uuid: string,\n    min: number,\n    max: number,\n    units: string | undefined,\n    desiredUnits: undefined | null | string,\n    commonUnitsName: string | null | undefined,\n    switchUnitsCallback: (units: string) => void,\n    temperatureSetting: \"celsius\" | \"fahrenheit\",\n    secondsAsTimeSetting: boolean\n  ) {\n    // validate the parameters\n    if (typeof units === \"undefined\") {\n      // eslint-disable-next-line no-param-reassign\n      units = \"undefined\"\n    }\n\n    // it will be removed when we'll lift the state to redux\n    currentTemperatureSetting = temperatureSetting\n    currentSecondsAsTimeSetting = secondsAsTimeSetting\n\n    // check if we support units conversion\n    if (typeof scalableUnits[units] === \"undefined\"\n      && typeof convertibleUnits[units] === \"undefined\"\n    ) {\n      // we can't convert these units\n      // console.log('DEBUG: ' + uuid.toString() + ' can\\'t convert units: ' + units.toString());\n      return (value: number) => value\n    }\n\n    // check if the caller wants the original units\n    if (desiredUnits === undefined || desiredUnits === null || desiredUnits === \"original\"\n      || desiredUnits === units\n    ) {\n      // console.log('DEBUG: ' + uuid.toString() + ' original units wanted');\n      switchUnitsCallback(units)\n      return identity\n    }\n\n    // now we know we can convert the units\n    // and the caller wants some kind of conversion\n\n    let tunits = null\n    let tdivider = 0\n\n    if (typeof scalableUnits[units] !== \"undefined\") {\n      // units that can be scaled\n      // we decide a divider\n\n      if (desiredUnits === \"auto\") {\n        // the caller wants to auto-scale the units\n\n        // find the absolute maximum value that is rendered on the chart\n        // based on this we decide the scale\n        /* eslint-disable no-param-reassign */\n        min = Math.abs(min)\n        max = Math.abs(max)\n        if (min > max) {\n          max = min\n        }\n        /* eslint-enable no-param-reassign */\n\n        const scalableUnitsGroup = scalableUnits[units]\n        Object.keys(scalableUnitsGroup).forEach((unit) => {\n          const unitDivider = scalableUnitsGroup[unit]\n          if (unitDivider <= max && unitDivider > tdivider) {\n            tunits = unit\n            tdivider = unitDivider\n          }\n        })\n\n        if (tunits === null || tdivider <= 0) {\n          // we couldn't find auto-scaling candidate for unit\n          switchUnitsCallback(units)\n          return identity\n        }\n\n        if (typeof commonUnitsName === \"string\") {\n          // the caller wants several charts to have the same units\n          // data-common-units\n\n          const commonUnitsKey = `${commonUnitsName}-${units}`\n\n          // add our divider into the list of keys\n          let t = this.keys[commonUnitsKey]\n          if (typeof t === \"undefined\") {\n            this.keys[commonUnitsKey] = {}\n            t = this.keys[commonUnitsKey]\n          }\n          t[uuid] = {\n            units: tunits,\n            divider: tdivider,\n          }\n\n          // find the max divider of all charts\n          let commonUnits = t[uuid]\n          // todo remove imperative forEach\n          Object.keys(t).forEach((x) => {\n            if (t[x].divider > commonUnits.divider) {\n              commonUnits = t[x]\n            }\n          })\n\n          // save our common_max to the latest keys\n          const latest = {\n            units: commonUnits.units,\n            divider: commonUnits.divider,\n          }\n          this.latest[commonUnitsKey] = latest\n\n          tunits = latest.units\n          tdivider = latest.divider\n\n          // apply it to this chart\n          switchUnitsCallback(tunits)\n          return (value: number) => {\n            if (tdivider !== latest.divider) {\n              // another chart switched our common units\n              // we should switch them too\n              tunits = latest.units\n              tdivider = latest.divider\n              switchUnitsCallback(tunits)\n            }\n\n            return value / tdivider\n          }\n        }\n        // the caller did not give data-common-units\n        // this chart auto-scales independently of all others\n\n        switchUnitsCallback(tunits)\n        return (value: number) => value / tdivider\n      }\n      // the caller wants specific units\n\n      if (typeof scalableUnits[units][desiredUnits] !== \"undefined\") {\n        // all good, set the new units\n        tdivider = scalableUnits[units][desiredUnits]\n        switchUnitsCallback(desiredUnits)\n        return (value: number) => value / tdivider\n      }\n      // oops! switch back to original units\n      // eslint-disable-next-line no-console\n      console.log(`Units conversion from ${units.toString()} to ${desiredUnits.toString()}\n       is not supported.`)\n\n      switchUnitsCallback(units)\n      return identity\n    } if (typeof convertibleUnits[units] !== \"undefined\") {\n      // units that can be converted\n      if (desiredUnits === \"auto\") {\n        let newConvertFunction: ((number: number) => number | string) | undefined\n        Object.keys(convertibleUnits[units]).forEach((x) => {\n          if (newConvertFunction) { return }\n          if (convertibleUnits[(units as string)][x].check(max)) {\n            // converting\n            switchUnitsCallback(x)\n            newConvertFunction = convertibleUnits[(units as string)][x].convert\n          }\n        })\n        if (newConvertFunction) {\n          return newConvertFunction\n        }\n\n        // none checked ok (no conversion available)\n        switchUnitsCallback(units)\n        return identity\n      } if (typeof convertibleUnits[units][desiredUnits] !== \"undefined\") {\n        switchUnitsCallback(desiredUnits)\n        return convertibleUnits[units][desiredUnits].convert\n      }\n      // eslint-disable-next-line no-console\n      console.log(`Units conversion from ${units.toString()} to ${desiredUnits.toString()}\n       is not supported.`)\n      switchUnitsCallback(units)\n      return identity\n    }\n    // hm... did we forget to implement the new type?\n    // eslint-disable-next-line no-console\n    console.log(`Unmatched unit conversion method for units ${units.toString()}`)\n    switchUnitsCallback(units)\n    return identity\n  },\n}\n","import * as React from \"react\"\nimport classNames from \"classnames\"\n\nimport \"./button.css\"\n\ntype Props = React.ButtonHTMLAttributes<HTMLButtonElement>\nexport const Button = React.forwardRef(({\n  children,\n  className,\n  ...rest\n}: Props, ref: React.Ref<HTMLButtonElement>) => (\n  <button\n    {...rest} // eslint-disable-line react/jsx-props-no-spreading\n    type=\"button\"\n    className={classNames(\"netdata-reset-button\", className)}\n    ref={ref}\n  >\n    {children}\n  </button>\n))\n","import React, { useRef, useEffect } from \"react\"\nimport classNames from \"classnames\"\n\nimport { useSelector } from \"store/redux-separate-context\"\nimport { selectShowHelp } from \"domains/global/selectors\"\nimport { Icon, IconType } from \"components/icon\"\nimport { Button } from \"components/button\"\n\ntype ClickCallback = (event: React.MouseEvent) => void\ninterface ToolboxButtonProps {\n  className?: string\n  iconType: IconType\n  onClick?: ClickCallback\n  onDoubleClick?: (event: React.MouseEvent) => void\n  onMouseDown?: (event: React.MouseEvent) => void\n  onTouchStart?: (event: React.TouchEvent) => void\n  popoverContent: string\n  popoverTitle: string\n}\nexport const ToolboxButton = ({\n  className,\n  iconType,\n  onClick,\n  onDoubleClick,\n  onMouseDown,\n  onTouchStart,\n  popoverContent,\n  popoverTitle,\n}: ToolboxButtonProps) => {\n  const buttonRef = useRef(null)\n  const showHelp = useSelector(selectShowHelp)\n  useEffect(() => {\n    if (buttonRef.current && showHelp) {\n      window.$(buttonRef.current).popover({\n        container: \"body\",\n        animation: false,\n        html: true,\n        trigger: \"hover\",\n        placement: \"bottom\",\n        delay: {\n          show: window.NETDATA.options.current.show_help_delay_show_ms,\n          hide: window.NETDATA.options.current.show_help_delay_hide_ms,\n        },\n        title: popoverTitle,\n        content: popoverContent,\n      })\n    }\n  }, []) // eslint-disable-line react-hooks/exhaustive-deps\n  return (\n    <Button\n      className={classNames(className)}\n      onClick={onClick}\n      onDoubleClick={onDoubleClick}\n      onMouseDown={onMouseDown}\n      onTouchStart={onTouchStart}\n      ref={buttonRef}\n    >\n      <Icon iconType={iconType} />\n    </Button>\n  )\n}\n","import React, { useState, useCallback, useEffect } from \"react\"\nimport { ToolboxButton } from \"domains/chart/components/toolbox-button\"\nimport { setResizeHeightAction } from \"domains/chart/actions\"\nimport { LEGEND_BOTTOM_SINGLE_LINE_HEIGHT } from \"domains/chart/utils/legend-utils\"\nimport { useDispatch } from \"store/redux-separate-context\"\n\nexport const LOCALSTORAGE_HEIGHT_KEY_PREFIX = \"chart_height.\"\n\ninterface Props {\n  chartContainerElement: HTMLElement\n  chartUuid: string\n  heightId: string | undefined\n  isLegendOnBottom: boolean\n}\n\nexport const ResizeHandler = ({\n  chartContainerElement, chartUuid, heightId, isLegendOnBottom,\n}: Props) => {\n  const [resizeHeight, setResizeHeight] = useState(() => chartContainerElement.clientHeight)\n  const dispatch = useDispatch()\n\n  useEffect(() => {\n    // todo when attributes.id are present, hook height to localStorage\n    if (resizeHeight >= 70) {\n      dispatch(\n        setResizeHeightAction({\n          id: chartUuid,\n          resizeHeight,\n        }),\n      )\n    }\n  }, [resizeHeight, chartUuid, heightId, dispatch])\n\n  const handleResize = useCallback(\n    (event) => {\n      event.preventDefault()\n      const intialHeight = chartContainerElement.clientHeight\n      const eventStartHeight = event.type === \"touchstart\"\n        ? event.touches[0].clientY\n        : event.clientY\n\n      const setHeight = (currentHeight: number) => {\n        const nextHeight = intialHeight + currentHeight - eventStartHeight\n        // eslint-disable-next-line no-param-reassign\n        chartContainerElement.style.height = `${nextHeight.toString()}px`\n        setResizeHeight(nextHeight)\n        if (heightId) {\n          const heightForPersistance = isLegendOnBottom\n            ? (nextHeight - LEGEND_BOTTOM_SINGLE_LINE_HEIGHT)\n            : nextHeight\n          localStorage.setItem(\n            `${LOCALSTORAGE_HEIGHT_KEY_PREFIX}${heightId}`,\n            `${heightForPersistance}`,\n          )\n        }\n      }\n\n      const onMouseMove = (e: MouseEvent) => setHeight(e.clientY)\n      const onTouchMove = (e: TouchEvent) => setHeight(e.touches[0].clientY)\n\n      const onMouseEnd = () => {\n        document.removeEventListener(\"mousemove\", onMouseMove)\n        document.removeEventListener(\"mouseup\", onMouseEnd)\n      }\n\n      const onTouchEnd = () => {\n        document.removeEventListener(\"touchmove\", onTouchMove)\n        document.removeEventListener(\"touchend\", onTouchEnd)\n      }\n\n      if (event.type === \"touchstart\") {\n        document.addEventListener(\"touchmove\", onTouchMove)\n        document.addEventListener(\"touchend\", onTouchEnd)\n      } else {\n        document.addEventListener(\"mousemove\", onMouseMove)\n        document.addEventListener(\"mouseup\", onMouseEnd)\n      }\n    },\n    [chartContainerElement.clientHeight, chartContainerElement.style.height, heightId,\n      isLegendOnBottom],\n  )\n\n  return (\n    <ToolboxButton\n      className=\"netdata-legend-resize-handler\"\n      onDoubleClick={(event: React.MouseEvent) => {\n        event.preventDefault()\n        event.stopPropagation()\n      }}\n      onMouseDown={handleResize}\n      onTouchStart={handleResize}\n      iconType=\"resize\"\n      popoverTitle=\"Chart Resize\"\n      popoverContent=\"Drag this point with your mouse or your finger (on touch devices), to resize\n     the chart vertically. You can also <b>double click it</b> or <b>double tap it</b> to reset\n      between 2 states: the default and the one that fits all the values.<br/><small>Help\n       can be disabled from the settings.</small>\"\n    />\n  )\n}\n","import { createAction } from \"redux-act\"\n\nimport { createRequestAction } from \"utils/createRequestAction\"\nimport { RegistryMachine } from \"domains/global/sagas\"\nimport { storeKey } from \"./constants\"\nimport { ActiveAlarms, ChartsMetadata, Snapshot, Alarm, UserNodeAccessMessage } from \"./types\"\n\ninterface RequestCommonColors {\n  chartContext: string\n  chartUuid: string\n  colorsAttribute: string | undefined\n  commonColorsAttribute: string | undefined\n  dimensionNames: string[]\n}\nexport const requestCommonColorsAction = createAction<RequestCommonColors>(\n  `${storeKey}/globalRequestCommonColors`\n)\n\ninterface SetCommonMinAction {\n  chartUuid: string\n  commonMinKey: string\n  value: number\n}\nexport const setCommonMinAction = createAction<SetCommonMinAction>(`${storeKey}/setCommonMin`)\n\ninterface SetCommonMaxAction {\n  chartUuid: string\n  commonMaxKey: string\n  value: number\n}\nexport const setCommonMaxAction = createAction<SetCommonMaxAction>(`${storeKey}/setCommonMax`)\n\ninterface SetGlobalSelectionAction {\n  chartUuid: string | null\n  hoveredX: number\n}\nexport const setGlobalSelectionAction = createAction<SetGlobalSelectionAction>(\n  `${storeKey}/setGlobalSelection`\n)\n\nexport interface SetGlobalPanAndZoomAction {\n  after: number\n  before: number\n  masterID?: string\n  shouldForceTimeRange?: boolean\n}\nexport const setGlobalPanAndZoomAction = createAction<SetGlobalPanAndZoomAction>(\n  `${storeKey}/setGlobalPanAndZoom`\n)\n\nexport const resetGlobalPanAndZoomAction = createAction(`${storeKey}/resetGlobalPanAndZoomAction`)\n\nexport interface SetDefaultAfterAction {\n  after: number\n}\nexport const setDefaultAfterAction = createAction<SetDefaultAfterAction>(\n  `${storeKey}/setDefaultAfterAction`\n)\n\nexport const resetDefaultAfterAction = createAction(`${storeKey}/resetDefaultAfterAction`)\n\nexport interface SetGlobalChartUnderlayAction {\n  after: number\n  before: number\n  masterID: string\n}\nexport const setGlobalChartUnderlayAction = createAction<SetGlobalChartUnderlayAction>(\n  `${storeKey}/setGlobalChartUnderlay`\n)\n\nexport const centerAroundHighlightAction = createAction(`${storeKey}/centerAroundHighlightAction`)\nexport const clearHighlightAction = createAction(`${storeKey}/clearHighlightAction`)\n\ninterface WindowFocusChangeAction {\n  hasWindowFocus: boolean\n}\nexport const windowFocusChangeAction = createAction<WindowFocusChangeAction>(\n  `${storeKey}/windowFocusChangeAction`\n)\n\nexport interface FetchHelloPayload {\n  serverDefault: string\n}\n/* eslint-disable camelcase */\nexport interface HelloResponse {\n  action: \"hello\"\n  anonymous_statistics: boolean\n  cloud_base_url: string\n  hostname: string\n  machine_guid: string\n  registry: string\n  status: string\n}\n/* eslint-enable camelcase */\n\nexport const fetchHelloAction = createRequestAction<\n  FetchHelloPayload,\n  { cloudBaseURL: string; hostname: string; isCloudEnabled: boolean; machineGuid: string }\n>(`${storeKey}/fetchHelloAction`)\n\ninterface UpdatePersonUrlsAction {\n  personGuid: string\n  registryMachines: { [key: string]: RegistryMachine }\n  registryMachinesArray: RegistryMachine[]\n}\nexport const updatePersonUrlsAction = createAction<UpdatePersonUrlsAction>(\n  `${storeKey}/updatePersonUrlsAction`\n)\n\nexport interface AccessRegistrySuccessAction {\n  registryServer: string\n}\nexport const accessRegistrySuccessAction = createAction<AccessRegistrySuccessAction>(\n  `${storeKey}/accessRegistrySuccessAction`\n)\n\nexport interface StartAlarmsPayload {\n  serverDefault: string\n}\nexport const startAlarmsAction = createAction<StartAlarmsPayload>(`${storeKey}/startAlarmsAction`)\n\nexport const fetchAllAlarmsAction = createRequestAction(`${storeKey}/fetchAllAlarmsAction`)\n\nexport interface UpdateActiveAlarmAction {\n  activeAlarms: ActiveAlarms\n}\nexport const updateActiveAlarmsAction = createAction<UpdateActiveAlarmAction>(\n  `${storeKey}/updateActiveAlarmsAction`\n)\n\nexport interface SetOptionAction {\n  key: string\n  value: unknown\n}\nexport const setOptionAction = createAction<SetOptionAction>(`${storeKey}/setOptionAction`)\n\nexport const resetOptionsAction = createAction(`${storeKey}/resetOptions`)\n\nexport const loadSnapshotAction = createAction<{ snapshot: Snapshot }>(\n  `${storeKey}/loadSnapshotAction`\n)\n\nexport const chartsMetadataRequestSuccess = createAction<{ data: ChartsMetadata }>(\n  `${storeKey}/chartsMetadataRequestSuccess`\n)\n\nexport interface SetSpacePanelStatusActionPayload {\n  isActive: boolean\n}\nexport const setSpacePanelStatusAction = createAction<SetSpacePanelStatusActionPayload>(\n  `${storeKey}/setSpacePanelStatusAction`\n)\n\nexport interface SetSpacePanelTransitionEndPayload {\n  isActive: boolean\n}\nexport const setSpacePanelTransitionEndAction = createAction<SetSpacePanelTransitionEndPayload>(\n  `${storeKey}/setSpacePanelStatusAction`\n)\n\nexport const setAlarmAction = createAction<{ alarm: Alarm }>(`${storeKey}/setAlarmAction`)\n\nexport const resetRegistry = createAction(`${storeKey}/resetRegistry`)\n\nexport const setGlobalPauseAction = createAction(`${storeKey}/setGlobalPauseAction`)\nexport const resetGlobalPauseAction = createAction<{ forcePlay?: boolean }>(\n  `${storeKey}/resetGlobalPauseAction`\n)\nexport const setUTCOffset = createAction<{ utcOffset?: number | string }>(\n  `${storeKey}/setUTCOffset`\n)\n\nexport const setUserNodeAccess = createAction<{ message: UserNodeAccessMessage }>(\n  `${storeKey}/setUserNodeAccess`\n)\n","import { useCallback } from \"react\"\nimport { useDispatch } from \"react-redux\"\nimport { sendToChildIframe, useListenToPostMessage } from \"utils/post-message\"\nimport { setUserNodeAccess } from \"domains/global/actions\"\nimport { UserNodeAccessMessage } from \"domains/global/types\"\nimport { SIGN_IN_IFRAME_ID } from \"components/header/constants\"\n\nconst useUserNodeAccessMessage = () => {\n  const dispatch = useDispatch()\n  useListenToPostMessage<UserNodeAccessMessage>(\"user-node-access\", message => {\n    dispatch(setUserNodeAccess({ message }))\n  })\n}\n\nexport const useRequestRefreshOfAccessMessage = () => {\n  return useCallback(() => {\n    sendToChildIframe(SIGN_IN_IFRAME_ID, { type: \"request-refresh-access\", payload: true })\n  }, [])\n}\n\nexport default useUserNodeAccessMessage\n","export * from \"./utils\"\n","export const name2id = (s: string) => s\n  .replace(/ /g, \"_\")\n  .replace(/:/g, \"_\")\n  .replace(/\\(/g, \"_\")\n  .replace(/\\)/g, \"_\")\n  .replace(/\\./g, \"_\")\n  .replace(/\\//g, \"_\")\n","import { init, last, mergeAll } from \"ramda\"\nimport { createReducer } from \"redux-act\"\n\nimport { getInitialAfterFromWindow } from \"utils/utils\"\nimport { isMainJs } from \"utils/env\"\nimport { RegistryMachine } from \"domains/global/sagas\"\nimport { Alarm, ActiveAlarms, Snapshot, ChartsMetadata } from \"domains/global/types\"\nimport { fetchInfoAction } from \"domains/chart/actions\"\nimport { InfoPayload } from \"./__mocks__/info-mock\"\nimport {\n  requestCommonColorsAction,\n  setGlobalChartUnderlayAction,\n  setGlobalSelectionAction,\n  setGlobalPanAndZoomAction,\n  centerAroundHighlightAction,\n  clearHighlightAction,\n  resetGlobalPanAndZoomAction,\n  setDefaultAfterAction,\n  windowFocusChangeAction,\n  fetchHelloAction,\n  updatePersonUrlsAction,\n  startAlarmsAction,\n  updateActiveAlarmsAction,\n  setOptionAction,\n  loadSnapshotAction,\n  chartsMetadataRequestSuccess,\n  setCommonMaxAction,\n  setCommonMinAction,\n  resetOptionsAction,\n  setSpacePanelStatusAction,\n  setSpacePanelTransitionEndAction,\n  resetRegistry,\n  accessRegistrySuccessAction,\n  resetDefaultAfterAction,\n  setAlarmAction,\n  setGlobalPauseAction,\n  resetGlobalPauseAction,\n  setUTCOffset,\n  setUserNodeAccess,\n} from \"./actions\"\nimport {\n  Options,\n  optionsMergedWithLocalStorage,\n  getOptionsMergedWithLocalStorage,\n  clearLocalStorage,\n} from \"./options\"\nimport { CLOUD_BASE_URL_DISABLED } from \"./constants\"\nimport { UserNodeAccessMessage } from \"./types\"\n\ninterface CommonMinMax {\n  [commonKey: string]: {\n    charts: {\n      [chartUuid: string]: number\n    }\n    currentExtreme: number\n  }\n}\n\nexport type StateT = {\n  commonColorsKeys: {\n    [key: string]: {\n      // key can be uuid, chart's context or commonColors attribute\n      assigned: {\n        // name-value of dimensions and their colors\n        [dimensionName: string]: string\n      }\n      available: string[] // an array of colors available to be used\n      custom: string[] // the array of colors defined by the user\n      charts: {} // the charts linked to this todo remove\n      copyTheme: boolean\n    }\n  }\n  commonMin: CommonMinMax\n  commonMax: CommonMinMax\n  currentSelectionMasterId: string | null\n  globalPanAndZoom: null | {\n    after: number // timestamp in ms\n    before: number // timestamp in ms\n    masterID?: string\n    shouldForceTimeRange?: boolean\n  }\n  defaultAfter: number\n  globalChartUnderlay: null | {\n    after: number\n    before: number\n    masterID: string\n  }\n  hoveredX: number | null\n  hasWindowFocus: boolean\n  globalPause: boolean\n\n  spacePanelIsActive: boolean\n  spacePanelTransitionEndIsActive: boolean\n\n  registry: {\n    cloudBaseURL: string | null\n    hasFetchedHello: boolean\n    isHelloCallError: boolean | null\n    hasFetchedInfo: boolean\n    hostname: string\n    isCloudEnabled: boolean | null\n    isCloudAvailable: boolean | null\n    isAgentClaimed: boolean | null\n    isACLKAvailable: boolean | null\n    hasStartedInfo: boolean\n    fullInfoPayload: InfoPayload | null\n    isFetchingHello: boolean\n    machineGuid: string | null\n    personGuid: string | null\n    registryMachines: { [key: string]: RegistryMachine } | null\n    registryMachinesArray: RegistryMachine[] | null\n    registryServer: string | null\n  }\n\n  chartsMetadata: {\n    isFetching: boolean\n    isFetchingError: boolean\n    data: null | ChartsMetadata\n  }\n\n  alarms: {\n    activeAlarms: null | ActiveAlarms\n    hasStartedAlarms: boolean\n  }\n  alarm: null | Alarm\n\n  snapshot: Snapshot | null\n  options: Options\n  userNodeAccess: UserNodeAccessMessage\n}\n\nexport const initialDefaultAfter = isMainJs ? getInitialAfterFromWindow() : -900\n\nexport const initialState: StateT = {\n  commonColorsKeys: {},\n  commonMin: {},\n  commonMax: {},\n  currentSelectionMasterId: null,\n  globalPanAndZoom: null,\n  // todo for dashboard calculate it based on width and window.NETDATA.chartDefaults.after\n  defaultAfter: initialDefaultAfter,\n  globalChartUnderlay: null,\n  hoveredX: null,\n  hasWindowFocus: document.hasFocus(),\n  globalPause: false,\n  spacePanelIsActive: false, // set to true only for testing layout\n  // the same as property above, just updated after transition ends\n  spacePanelTransitionEndIsActive: false,\n\n  registry: {\n    cloudBaseURL: null,\n    hasFetchedInfo: false,\n    hasFetchedHello: false,\n    isHelloCallError: null,\n    hostname: \"unknown\",\n    isCloudEnabled: null,\n    isCloudAvailable: null,\n    isAgentClaimed: null,\n    isACLKAvailable: null,\n    hasStartedInfo: false,\n    isFetchingHello: false,\n    fullInfoPayload: null,\n    machineGuid: null,\n    personGuid: null,\n    registryMachines: null,\n    registryMachinesArray: null,\n    registryServer: null,\n  },\n\n  snapshot: null,\n  alarms: {\n    activeAlarms: null,\n    hasStartedAlarms: false,\n  },\n  alarm: null,\n\n  chartsMetadata: {\n    isFetching: false,\n    isFetchingError: false,\n    data: null,\n  },\n\n  options: optionsMergedWithLocalStorage,\n  userNodeAccess: null,\n}\n\nexport const globalReducer = createReducer<StateT>({}, initialState)\n\nexport interface GetKeyArguments {\n  colorsAttribute: string | undefined\n  commonColorsAttribute: string | undefined\n  chartUuid: string\n  chartContext: string\n}\nexport const getKeyForCommonColorsState = ({\n  colorsAttribute,\n  commonColorsAttribute,\n  chartUuid,\n  chartContext,\n}: GetKeyArguments) => {\n  const hasCustomColors = typeof colorsAttribute === \"string\" && colorsAttribute.length > 0\n\n  // when there's commonColors attribute, share the state between all charts with that attribute\n  // if not, when there are custom colors, make each chart independent\n  // if not, share the same state between charts with the same context\n  return commonColorsAttribute || (hasCustomColors ? chartUuid : chartContext)\n}\n\nconst hasLastOnly = (array: string[]) => last(array) === \"ONLY\"\nconst removeLastOnly = (array: string[]) => (hasLastOnly(array) ? init(array) : array)\nconst createCommonColorsKeysSubstate = (\n  colorsAttribute: string | undefined,\n  hasCustomColors: boolean\n) => {\n  const custom = hasCustomColors ? removeLastOnly((colorsAttribute as string).split(\" \")) : []\n  const shouldCopyTheme = hasCustomColors\n    ? // disable copyTheme when there's \"ONLY\" keyword in \"data-colors\" attribute\n      !hasLastOnly((colorsAttribute as string).split(\" \"))\n    : true\n  const available = [\n    ...custom,\n    ...(shouldCopyTheme || custom.length === 0 ? window.NETDATA.themes.current.colors : []),\n  ]\n  return {\n    assigned: {},\n    available,\n    custom,\n  }\n}\n\nglobalReducer.on(\n  requestCommonColorsAction,\n  //@ts-ignore\n  (state, { chartContext, chartUuid, colorsAttribute, commonColorsAttribute, dimensionNames }) => {\n    const keyName = getKeyForCommonColorsState({\n      colorsAttribute,\n      commonColorsAttribute,\n      chartUuid,\n      chartContext,\n    })\n\n    const hasCustomColors = typeof colorsAttribute === \"string\" && colorsAttribute.length > 0\n    const subState =\n      state.commonColorsKeys[keyName] ||\n      createCommonColorsKeysSubstate(colorsAttribute, hasCustomColors)\n\n    const currentlyAssignedNr = Object.keys(subState.assigned).length\n    const requestedDimensionsAssigned = mergeAll(\n      dimensionNames\n        // dont assign already assigned dimensions\n        .filter(dimensionName => !subState.assigned[dimensionName])\n        .map((dimensionName, i) => ({\n          [dimensionName]:\n            subState.available[(i + currentlyAssignedNr) % subState.available.length],\n        }))\n    )\n    const assigned = {\n      ...subState.assigned,\n      ...requestedDimensionsAssigned,\n    }\n\n    return {\n      ...state,\n      commonColorsKeys: {\n        ...state.commonColorsKeys,\n        [keyName]: {\n          ...subState,\n          assigned,\n        },\n      },\n    }\n  }\n)\n\nglobalReducer.on(setCommonMinAction, (state, { chartUuid, commonMinKey, value }) => {\n  const charts = {\n    ...state.commonMin[commonMinKey]?.charts,\n    [chartUuid]: value,\n  }\n  const currentExtreme = Math.min(...Object.values(charts))\n\n  return {\n    ...state,\n    commonMin: {\n      ...state.commonMin,\n      [commonMinKey]: {\n        charts,\n        currentExtreme,\n      },\n    },\n  }\n})\n\nglobalReducer.on(setCommonMaxAction, (state, { chartUuid, commonMaxKey, value }) => {\n  const charts = {\n    ...state.commonMax[commonMaxKey]?.charts,\n    [chartUuid]: value,\n  }\n  const currentExtreme = Math.max(...Object.values(charts))\n\n  return {\n    ...state,\n    commonMax: {\n      ...state.commonMax,\n      [commonMaxKey]: {\n        charts,\n        currentExtreme,\n      },\n    },\n  }\n})\n\nglobalReducer.on(setSpacePanelStatusAction, (state, { isActive }) => ({\n  ...state,\n  spacePanelIsActive: isActive,\n}))\n\nglobalReducer.on(setSpacePanelTransitionEndAction, (state, { isActive }) => ({\n  ...state,\n  spacePanelTransitionEndIsActive: isActive,\n}))\n\nglobalReducer.on(setGlobalSelectionAction, (state, { chartUuid, hoveredX }) => ({\n  ...state,\n  hoveredX,\n  currentSelectionMasterId: chartUuid,\n}))\n\nglobalReducer.on(setGlobalPanAndZoomAction, (state, payload) => ({\n  ...state,\n  globalPanAndZoom: payload,\n}))\n\nglobalReducer.on(resetGlobalPanAndZoomAction, state => ({\n  ...state,\n  globalPanAndZoom: initialState.globalPanAndZoom,\n  hoveredX: initialState.hoveredX, // need to reset this also on mobile\n}))\n\nglobalReducer.on(setDefaultAfterAction, (state, { after }) => ({\n  ...state,\n  defaultAfter: after,\n}))\n\nglobalReducer.on(resetDefaultAfterAction, state => ({\n  ...state,\n  defaultAfter: initialState.defaultAfter,\n}))\n\nglobalReducer.on(setGlobalChartUnderlayAction, (state, { after, before, masterID }) => ({\n  ...state,\n  globalChartUnderlay: {\n    after,\n    before,\n    masterID,\n  },\n}))\n\nglobalReducer.on(centerAroundHighlightAction, state => {\n  if (!state.globalChartUnderlay) {\n    // eslint-disable-next-line no-console\n    console.warn(\"Cannot center around empty selection\")\n    return state\n  }\n  const { after, before } = state.globalChartUnderlay\n  const highlightMargin = (before - after) / 2\n  return {\n    ...state,\n    globalPanAndZoom: {\n      after: after - highlightMargin,\n      before: before + highlightMargin,\n    },\n  }\n})\n\nglobalReducer.on(\n  clearHighlightAction,\n  (state, { resetPanAndZoom = true }: { resetPanAndZoom?: boolean } = {}) => ({\n    ...state,\n    globalChartUnderlay: initialState.globalChartUnderlay,\n    ...(resetPanAndZoom ? { globalPanAndZoom: initialState.globalPanAndZoom } : {}),\n  })\n)\n\nglobalReducer.on(windowFocusChangeAction, (state, { hasWindowFocus }) => {\n  // make additional check, because it's possible to get hasWindowFocus === false\n  // message from iframe, after main window makes the state change (race condition)\n  const hasFocusNow = document.hasFocus()\n  return {\n    ...state,\n    hasWindowFocus: hasFocusNow || hasWindowFocus,\n  }\n})\n\nglobalReducer.on(setGlobalPauseAction, state => ({ ...state, globalPause: true }))\nglobalReducer.on(resetGlobalPauseAction, (state, { forcePlay }) => ({\n  ...state,\n  globalPause: initialState.globalPause,\n  globalPanAndZoom: initialState.globalPanAndZoom,\n  hoveredX: initialState.hoveredX,\n  options: { ...state.options, stop_updates_when_focus_is_lost: !forcePlay },\n}))\n\nglobalReducer.on(setUTCOffset, (state, { utcOffset }) => ({\n  ...state,\n  options: { ...state.options, utcOffset },\n}))\n\nglobalReducer.on(fetchHelloAction.request, state => ({\n  ...state,\n  registry: {\n    ...state.registry,\n    isFetchingHello: true,\n  },\n}))\n\nglobalReducer.on(fetchHelloAction.success, (state, { cloudBaseURL, hostname, machineGuid }) => ({\n  ...state,\n  registry: {\n    ...state.registry,\n    cloudBaseURL,\n    isFetchingHello: false,\n    hasFetchedHello: true,\n    hostname,\n    machineGuid,\n  },\n}))\nglobalReducer.on(fetchHelloAction.failure, state => ({\n  ...state,\n  registry: {\n    ...state.registry,\n    cloudBaseURL: CLOUD_BASE_URL_DISABLED,\n    isFetchingHello: false,\n    isHelloCallError: true,\n  },\n}))\nglobalReducer.on(accessRegistrySuccessAction, (state, { registryServer }) => ({\n  ...state,\n  registry: {\n    ...state.registry,\n    registryServer,\n  },\n}))\n\nglobalReducer.on(resetRegistry, state => ({\n  ...state,\n  registry: {\n    ...state.registry,\n    hasFetchedHello: initialState.registry.hasFetchedHello,\n  },\n}))\n\nglobalReducer.on(fetchInfoAction, state => ({\n  ...state,\n  registry: {\n    ...state.registry,\n    hasStartedInfo: true,\n  },\n}))\nglobalReducer.on(\n  fetchInfoAction.success,\n  (\n    state,\n    { isCloudAvailable, isCloudEnabled, isAgentClaimed, isACLKAvailable, fullInfoPayload }\n  ) => ({\n    ...state,\n    registry: {\n      ...state.registry,\n      hasFetchedInfo: true,\n      isCloudAvailable,\n      isCloudEnabled,\n      isAgentClaimed,\n      isACLKAvailable,\n      fullInfoPayload,\n    },\n  })\n)\n\nglobalReducer.on(fetchInfoAction.failure, state => ({\n  ...state,\n  registry: {\n    ...state.registry,\n    isCloudAvailable: false,\n    isCloudEnabled: false,\n    isAgentClaimed: false,\n    isACLKAvailable: false,\n  },\n}))\n\nglobalReducer.on(\n  updatePersonUrlsAction,\n  (state, { personGuid, registryMachines, registryMachinesArray }) => ({\n    ...state,\n    registry: {\n      ...state.registry,\n      personGuid,\n      registryMachines,\n      registryMachinesArray,\n    },\n  })\n)\n\nglobalReducer.on(startAlarmsAction, state => ({\n  ...state,\n  alarms: {\n    ...state.alarms,\n    hasStartedAlarms: true,\n  },\n}))\n\nglobalReducer.on(updateActiveAlarmsAction, (state, { activeAlarms }) => ({\n  ...state,\n  alarms: {\n    ...state.alarms,\n    activeAlarms,\n  },\n}))\n\nglobalReducer.on(setOptionAction, (state, { key, value }) => ({\n  ...state,\n  options: {\n    ...state.options,\n    [key]: value,\n  },\n}))\n\nglobalReducer.on(resetOptionsAction, state => {\n  clearLocalStorage()\n  return {\n    ...state,\n    options: getOptionsMergedWithLocalStorage(),\n  }\n})\n\nglobalReducer.on(loadSnapshotAction, (state, { snapshot }) => {\n  const parsedData = Object.keys(snapshot.data)\n    .map(dataKey => {\n      let uncompressed\n      try {\n        // @ts-ignore\n        uncompressed = snapshot.uncompress(snapshot.data[dataKey])\n\n        // repeat old logging\n        if (uncompressed === null) {\n          // eslint-disable-next-line no-console\n          console.warn(`uncompressed snapshot data for key ${dataKey} is null`)\n          return null\n        }\n\n        if (typeof uncompressed === \"undefined\") {\n          // eslint-disable-next-line no-console\n          console.warn(`uncompressed snapshot data for key ${dataKey} is undefined`)\n          return null\n        }\n      } catch (e) {\n        // eslint-disable-next-line no-console\n        console.warn(`decompression of snapshot data for key ${dataKey} failed`, e)\n        uncompressed = null\n      }\n\n      if (typeof uncompressed !== \"string\") {\n        // eslint-disable-next-line no-console\n        console.warn(`uncompressed snapshot data for key ${dataKey} is not string`)\n        return {}\n      }\n\n      let data\n      try {\n        data = JSON.parse(uncompressed)\n      } catch (e) {\n        // eslint-disable-next-line no-console\n        console.warn(`parsing snapshot data for key ${dataKey} failed`)\n        return {}\n      }\n\n      return { [dataKey]: data }\n    })\n    .reduce((acc, obj) => ({ ...acc, ...obj }), {})\n\n  return {\n    ...state,\n    snapshot: {\n      ...snapshot,\n      data: parsedData as { [key: string]: unknown },\n    },\n  }\n})\n\nglobalReducer.on(setAlarmAction, (state, { alarm }) => ({\n  ...state,\n  alarm,\n}))\n\nglobalReducer.on(chartsMetadataRequestSuccess, (state, { data }) => ({\n  ...state,\n  chartsMetadata: {\n    ...state.chartsMetadata,\n    data,\n  },\n}))\n\nglobalReducer.on(setUserNodeAccess, (state, { message }) => ({ ...state, userNodeAccess: message }))\n","import React from \"react\"\nimport classNames from \"classnames\"\n\n// todo add supoort for window.netdataIcons\nexport type IconType = \"left\" | \"reset\" | \"right\" | \"zoomIn\" | \"zoomOut\" | \"resize\" | \"lineChart\"\n  | \"areaChart\" | \"noChart\" | \"loading\" | \"noData\"\nconst typeToClassName = (iconType: IconType) => ({\n  left: \"fa-backward\",\n  reset: \"fa-play\",\n  right: \"fa-forward\",\n  zoomIn: \"fa-plus\",\n  zoomOut: \"fa-minus\",\n  resize: \"fa-sort\",\n  lineChart: \"fa-chart-line\",\n  areaChart: \"fa-chart-area\",\n  noChart: \"fa-chart-area\",\n  loading: \"fa-sync-alt\",\n  noData: \"fa-exclamation-triangle\",\n} as {[key in IconType]: string})[iconType]\n\ninterface Props {\n  iconType: IconType\n}\nexport const Icon = ({ iconType }: Props) => (\n  <i className={classNames(\"fas\", typeToClassName(iconType))} />\n)\n","import {\n  map, omit, assoc, pick,\n} from \"ramda\"\nimport { createReducer } from \"redux-act\"\n\nimport { setOptionAction } from \"domains/global/actions\"\nimport { SYNC_PAN_AND_ZOOM } from \"domains/global/options\"\nimport { useNewKeysOnlyIfDifferent } from \"utils/utils\"\n\nimport {\n  fetchDataAction,\n  fetchChartAction,\n  setResizeHeightAction,\n  clearChartStateAction,\n  fetchDataForSnapshotAction,\n  snapshotExportResetAction,\n  setChartPanAndZoomAction,\n  resetChartPanAndZoomAction,\n  fetchDataCancelAction,\n} from \"./actions\"\nimport { ChartState } from \"./chart-types\"\n\nexport type StateT = {\n  [chartID: string]: ChartState\n}\n\nexport const initialState = {\n}\nexport const initialSingleState = {\n  chartData: null,\n  chartId: null,\n  chartMetadata: null,\n  chartPanAndZoom: null,\n  fetchDataParams: {\n    isRemotelyControlled: false,\n    viewRange: null,\n  },\n  isFetchingData: false,\n  isFetchDataFailure: false,\n  isFetchDetailsFailure: false,\n  isFetchingDetails: false,\n  resizeHeight: null,\n\n  snapshotDataIsFetching: false,\n  snapshotDataIsError: false,\n  snapshotData: null,\n  viewRange: null,\n}\n\nexport const chartReducer = createReducer<StateT>(\n  {},\n  initialState,\n)\n\nexport const getSubstate = (state: StateT, id: string) => state[id] || initialSingleState\n\nchartReducer.on(fetchDataAction.request, (state, { chart, fetchDataParams, id }) => ({\n  ...state,\n  [id]: {\n    ...getSubstate(state, id),\n    chartId: chart,\n    isFetchingData: true,\n    viewRange: fetchDataParams.viewRange,\n  },\n}))\n\nchartReducer.on(fetchDataCancelAction, (state, { id }) => ({\n  ...state,\n  [id]: {\n    ...getSubstate(state, id),\n    isFetchingData: false,\n  },\n}))\n\nchartReducer.on(fetchDataAction.failure, (state, { id }) => ({\n  ...state,\n  [id]: {\n    ...getSubstate(state, id),\n    isFetchingData: false,\n    isFetchDataFailure: true,\n  },\n}))\n\nchartReducer.on(fetchDataAction.success, (state, { id, chartData, fetchDataParams }) => {\n  const substate = getSubstate(state, id)\n  return {\n    ...state,\n    [id]: {\n      ...substate,\n      chartData: useNewKeysOnlyIfDifferent([\"dimension_names\"], substate.chartData, chartData!),\n      fetchDataParams,\n      isFetchingData: false,\n      isFetchDataFailure: false,\n      viewRange: fetchDataParams.viewRange,\n    },\n  }\n})\n\n\nchartReducer.on(fetchDataForSnapshotAction.request, (state, { id }) => ({\n  ...state,\n  [id]: {\n    ...getSubstate(state, id),\n    snapshotDataIsFetching: true,\n  },\n}))\n\nchartReducer.on(fetchDataForSnapshotAction.failure, (state, { id }) => ({\n  ...state,\n  [id]: {\n    ...getSubstate(state, id),\n    snapshotDataIsFetching: false,\n    snapshotDataIsError: true,\n  },\n}))\n\nchartReducer.on(fetchDataForSnapshotAction.success, (state, { id, snapshotData }) => ({\n  ...state,\n  [id]: {\n    ...getSubstate(state, id),\n    snapshotDataIsFetching: false,\n    snapshotDataIsError: false,\n    snapshotData,\n  },\n}))\n\nchartReducer.on(snapshotExportResetAction, (state) => map((substate) => ({\n  ...substate,\n  ...pick([\"snapshotDataIsFetching\", \"snapshotDataIsError\", \"snapshotData\"], initialSingleState),\n}), state))\n\n\nchartReducer.on(fetchChartAction.request, (state, { id }) => ({\n  ...state,\n  [id]: {\n    ...getSubstate(state, id),\n    isFetchingDetails: true,\n  },\n}))\n\nchartReducer.on(fetchChartAction.failure, (state, { id }) => ({\n  ...state,\n  [id]: {\n    ...getSubstate(state, id),\n    isFetchDetailsFailure: true,\n  },\n}))\n\nchartReducer.on(fetchChartAction.success, (state, { id, chartMetadata }) => ({\n  ...state,\n  [id]: {\n    ...getSubstate(state, id),\n    chartMetadata,\n    isFetchingDetails: false,\n    isFetchDetailsFailure: false,\n  },\n}))\n\n// todo handle errors without creating a loop\n// chartReducer.on(fetchChartAction.failure, (state, { id }) => ({\n//   ...state,\n//   [id]: {\n//     ...getSubstate(state, id),\n//     isFetchingDetails: false,\n//   },\n// }))\n\nchartReducer.on(setResizeHeightAction, (state, { id, resizeHeight }) => ({\n  ...state,\n  [id]: {\n    ...getSubstate(state, id),\n    resizeHeight,\n  },\n}))\n\nchartReducer.on(setChartPanAndZoomAction, (state, {\n  after, before, id, shouldForceTimeRange,\n}) => ({\n  ...state,\n  [id]: {\n    ...getSubstate(state, id),\n    chartPanAndZoom: { after, before, shouldForceTimeRange },\n  },\n}))\n\nchartReducer.on(resetChartPanAndZoomAction, (state, { id }) => ({\n  ...state,\n  [id]: {\n    ...getSubstate(state, id),\n    chartPanAndZoom: initialSingleState.chartPanAndZoom,\n  },\n}))\n\nchartReducer.on(setOptionAction, (state, { key, value }) => {\n  // clear chartPanAndZoom, when SYNC_PAN_AND_ZOOM flag is turned on\n  if (key === SYNC_PAN_AND_ZOOM && value === true) {\n    return map(\n      assoc(\"chartPanAndZoom\", initialSingleState.chartPanAndZoom),\n      state,\n    )\n  }\n  return state\n})\n\nchartReducer.on(clearChartStateAction, (state, { id }) => omit([id], state))\n","import { mapObjIndexed, mergeAll, isEmpty } from \"ramda\"\nimport { Method } from \"axios\"\nimport { initialLegendRight } from \"domains/global/options\"\nimport { ChartLibraryName } from \"./chartLibrariesSettings\"\n\ntype OutputValue = string | boolean | number | null | undefined | any[]\n// almost the same as in old dashboard to ensure readers that it works the same way\nconst getDataAttribute = (element: Element, key: string, defaultValue?: OutputValue) => {\n  const dataKey = `data-${key}`\n  if (element.hasAttribute(dataKey)) {\n    // we know it's not null because of hasAttribute()\n    const data = element.getAttribute(dataKey) as string\n\n    if (data === \"true\") {\n      return true\n    }\n    if (data === \"false\") {\n      return false\n    }\n    if (data === \"null\") {\n      return null\n    }\n\n    // Only convert to a number if it doesn't change the string\n    if (data === `${+data}`) {\n      return +data\n    }\n\n    if (/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/.test(data)) {\n      return JSON.parse(data)\n    }\n\n    return data\n  }\n  // if no default is passed, then it's undefined and can be replaced with default value later\n  // it is recommended to do it in props destructuring assignment phase, ie.:\n  // const Chart = ({ dygraphPointsize = 1 }) => ....\n  return defaultValue\n}\n\nconst getDataAttributeBoolean = (element: Element, key: string, defaultValue?: boolean) => {\n  const value = getDataAttribute(element, key, defaultValue)\n\n  if (value === true || value === false) { // gmosx: Love this :)\n    return value\n  }\n\n  if (typeof (value) === \"string\") {\n    if (value === \"yes\" || value === \"on\") {\n      return true\n    }\n\n    if (value === \"\" || value === \"no\" || value === \"off\" || value === \"null\") {\n      return false\n    }\n\n    return defaultValue\n  }\n\n  if (typeof (value) === \"number\") {\n    return value !== 0\n  }\n\n  return defaultValue\n}\n\ninterface BaseAttributeConfig {\n  key: string\n  defaultValue?: OutputValue\n}\ninterface BooleanAttributeConfig extends BaseAttributeConfig {\n  type: \"boolean\"\n  defaultValue?: boolean\n}\ntype AttributeConfig = BaseAttributeConfig | BooleanAttributeConfig\n\nexport interface StaticAttributes {\n  id: string\n  host?: string | undefined\n  httpMethod?: Method\n  title?: string\n  chartLibrary: ChartLibraryName\n  width: number | string | null\n  height?: number | string | null\n  after?: number\n  before?: number\n  legend?: boolean\n  legendPosition?: \"bottom\" | \"right\"\n  units?: string\n  unitsCommon?: string\n  unitsDesired?: string\n  aggrMethod?: string\n  labels?: {[key: string]: string}\n  postGroupBy?: string\n  dimensionsAggrMethod?: string\n  postAggregationMethod?: string\n  aggrGroups?: string[]\n  selectedChart?: string\n  filteredRows?: string[] | null\n  groupBy?: string\n  nodeIDs?: string[]\n  colors?: string\n  commonColors?: string\n  decimalDigits?: number\n  dimensions?: string\n  selectedDimensions?: string[]\n  forceTimeWindow?: boolean\n\n  appendOptions?: string | undefined\n  gtime?: number\n  method?: string\n  overrideOptions?: string\n  pixelsPerPoint?: number\n  points?: number\n  heightId?: string\n  hideResizeHandler?: boolean\n  detectResize?: boolean\n  commonMin?: string\n  commonMax?: string\n\n  dygraphType?: string\n  dygraphValueRange?: any[]\n  dygraphTheme?: string\n  dygraphSmooth?: boolean\n  dygraphColors?: string[]\n  dygraphRightGap?: number\n  dygraphShowRangeSelector?: boolean\n  dygraphShowRoller?: boolean\n  dygraphTitle?: string\n  dygraphTitleHeight?: number\n  dygraphLegend?: \"always\" | \"follow\" | \"onmouseover\" | \"never\"\n  dygraphLabelsDiv?: string\n  dygraphLabelsSeparateLine?: boolean\n  dygraphIncludeZero?: boolean\n  dygraphShowZeroValues?: boolean\n  dygraphShowLabelsOnHighLight?: boolean\n  dygraphHideOverlayOnMouseOut?: boolean\n  dygraphXRangePad?: number\n  dygraphYRangePad?: number\n  dygraphYLabelWidth?: number\n  dygraphStrokeWidth?: number\n  dygraphStrokePattern?: number[]\n  dygraphDrawPoints?: boolean\n  dygraphDrawGapEdgePoints?: boolean\n  dygraphConnectSeparatedPoints?: boolean\n  dygraphPointSize?: number\n  dygraphStepPlot?: boolean\n  dygraphStrokeBorderColor?: string\n  dygraphStrokeBorderWidth?: number\n  dygraphFillGraph?: boolean\n  dygraphFillAlpha?: number\n  dygraphStackedGraph?: boolean\n  dygraphStackedGraphNanFill?: string\n  dygraphAxisLabelFontSize?: number\n  dygraphAxisLineColor?: string\n  dygraphAxisLineWidth?: number\n  dygraphDrawGrid?: boolean\n  dygraphGridLinePattern?: number[]\n  dygraphGridLineWidth?: number\n  dygraphGridLineColor?: string\n  dygraphMaxNumberWidth?: number\n  dygraphSigFigs?: number\n  dygraphDigitsAfterDecimal?: number\n  dygraphHighlighCircleSize?: number\n  dygraphHighlightSeriesOpts?: {[options: string]: number}\n  dygraphHighlightSeriesBackgroundAlpha?: number\n  dygraphXPixelsPerLabel?: number\n  dygraphXAxisLabelWidth?: number\n  dygraphDrawXAxis?: boolean\n  dygraphYPixelsPerLabel?: number\n  dygraphYAxisLabelWidth?: number\n  dygraphDrawYAxis?: boolean\n  dygraphDrawAxis?: boolean\n\n  easyPieChartMinValue?: number\n  easyPieChartMaxValue?: number\n  easyPieChartBarColor?: string\n  easyPieChartTrackColor?: string\n  easyPieChartScaleColor?: string,\n  easyPieChartScaleLength?: number,\n  easyPieChartLineCap?: string,\n  easyPieChartLineWidth?: string,\n  easyPieChartTrackWidth?: string,\n  easyPieChartSize?: string,\n  easyPieChartRotate?: number,\n  easyPieChartAnimate?: string,\n  easyPieChartEasing?: string,\n\n  gaugeMinValue?: number,\n  gaugeMaxValue?: number,\n  gaugePointerColor?: string,\n  gaugeStrokeColor?: string,\n  gaugeStartColor?: string,\n  gaugeStopColor?: string,\n  gaugeGenerateGradient?: boolean | string[],\n\n  sparklineType?: string,\n  sparklineLineColor?: string,\n  sparklineFillColor?: string,\n  sparklineChartRangeMin?: string,\n  sparklineChartRangeMax?: string,\n  sparklineComposite?: string,\n  sparklineEnableTagOptions?: string,\n  sparklineTagOptionPrefix?: string,\n  sparklineTagValuesAttribute?: string,\n  sparklineDisableHiddenCheck?: string,\n  sparklineDefaultPixelsPerValue?: string,\n  sparklineSpotColor?: string,\n  sparklineMinSpotColor?: string,\n  sparklineMaxSpotColor?: string,\n  sparklineSpotRadius?: string,\n  sparklineValueSpots?: string,\n  sparklineHighlightSpotColor?: string,\n  sparklineHighlightLineColor?: string,\n  sparklineLineWidth?: string,\n  sparklineNormalRangeMin?: string,\n  sparklineNormalRangeMax?: string,\n  sparklineDrawNormalOnTop?: string,\n  sparklineXvalues?: string,\n  sparklineChartRangeClip?: string,\n  sparklineChartRangeMinX?: string,\n  sparklineChartRangeMaxX?: string,\n  sparklineDisableInteraction?: boolean,\n  sparklineDisableTooltips?: boolean,\n  sparklineOnHover?: Function,\n  sparklineDisableHighlight?: boolean,\n  sparklineHighlightLighten?: string,\n  sparklineHighlightColor?: string,\n  sparklineTooltipContainer?: string,\n  sparklineTooltipClassname?: string,\n  sparklineTooltipFormat?: string,\n  sparklineTooltipPrefix?: string,\n  sparklineTooltipSuffix?: string,\n  sparklineTooltipSkipNull?: boolean,\n  sparklineTooltipValueLookups?: string,\n  sparklineTooltipFormatFieldlist?: string,\n  sparklineTooltipFormatFieldlistKey?: string,\n  sparklineNumberFormatter?: (d: number) => string,\n  sparklineNumberDigitGroupSep?: string,\n  sparklineNumberDecimalMark?: string,\n  sparklineNumberDigitGroupCount?: string,\n  sparklineAnimatedZooms?: boolean,\n\n\n  d3pieTitle?: string,\n  d3pieSubtitle?: string,\n  d3pieFooter?: string,\n  d3pieTitleColor?: string,\n  d3pieTitleFontsize?: string,\n  d3pieTitleFontweight?: string,\n  d3pieTitleFont?: string,\n  d3PieSubtitleColor?: string,\n  d3PieSubtitleFontsize?: string,\n  d3PieSubtitleFontweight?: string,\n  d3PieSubtitleFont?: string,\n  d3PieFooterColor?: string,\n  d3PieFooterFontsize?: string,\n  d3PieFooterFontweight?: string,\n  d3PieFooterFont?: string,\n  d3PieFooterLocation?: string,\n  d3PiePieinnerradius?: string,\n  d3PiePieouterradius?: string,\n  d3PieSortorder?: string,\n  d3PieSmallsegmentgroupingEnabled?: boolean,\n  d3PieSmallsegmentgroupingValue?: string,\n  d3PieSmallsegmentgroupingValuetype?: string,\n  d3PieSmallsegmentgroupingLabel?: string,\n  d3PieSmallsegmentgroupingColor?: string,\n  d3PieLabelsOuterFormat?: string,\n  d3PieLabelsOuterHidewhenlessthanpercentage?: string,\n  d3PieLabelsOuterPiedistance?: string,\n  d3PieLabelsInnerFormat?: string,\n  d3PieLabelsInnerHidewhenlessthanpercentage?: string,\n  d3PieLabelsMainLabelColor?: string,\n  d3PieLabelsMainLabelFont?: string,\n  d3PieLabelsMainLabelFontsize?: string,\n  d3PieLabelsMainLabelFontweight?: string,\n  d3PieLabelsPercentageColor?: string,\n  d3PieLabelsPercentageFont?: string,\n  d3PieLabelsPercentageFontsize?: string,\n  d3PieLabelsPercentageFontweight?: string,\n  d3PieLabelsValueColor?: string,\n  d3PieLabelsValueFont?: string,\n  d3PieLabelsValueFontsize?: string,\n  d3PieLabelsValueFontweight?: string,\n  d3PieLabelsLinesEnabled?: boolean,\n  d3PieLabelsLinesStyle?: string,\n  d3PieLabelsLinesColor?: string,\n  d3PieLabelsTruncationEnabled?: boolean,\n  d3PieLabelsTruncationTruncatelength?: string,\n  d3PieMiscColorsSegmentstroke?: string,\n  d3PieMiscGradientEnabled?: boolean,\n  d3PieMiscColorsPercentage?: string,\n  d3PieMiscGradientColor?: string,\n  d3PieCssprefix?: string,\n\n  peityStrokeWidth?: number,\n\n  textOnlyDecimalPlaces?: number,\n  textOnlyPrefix?: string,\n  textOnlySuffix?: string,\n}\n\nexport interface Attributes extends StaticAttributes {\n  // changed structure compared to original dashboard.js (not flat list, but dynamic objects stored\n  // in \"showValueOf\" property\n  showValueOf?: { [key: string]: string }\n}\n\nexport interface ChartsAttributes {\n  [chartID:string]: Attributes\n}\n\nexport type AttributePropKeys = keyof StaticAttributes\n\ntype AttributesMap = {\n  [key in AttributePropKeys]: AttributeConfig\n}\n\n// needs to be a getter so all window.NETDATA settings are set\nconst getAttributesMap = (): AttributesMap => ({\n  // all properties that don't have `defaultValue` should be \"| undefined\" in Attributes interface\n  // todo try to write above rule in TS\n  id: { key: \"netdata\" },\n  host: { key: \"host\" },\n  httpMethod: { key: \"http-method\" },\n  title: { key: \"title\" },\n  chartLibrary: { key: \"chart-library\", defaultValue: window.NETDATA.chartDefaults.library },\n  width: { key: \"width\", defaultValue: window.NETDATA.chartDefaults.width },\n  height: { key: \"height\", defaultValue: window.NETDATA.chartDefaults.height },\n  // todo use chartDefaults for static custom dashboards\n  // after: { key: \"after\", defaultValue: window.NETDATA.chartDefaults.after },\n  after: { key: \"after\" },\n  before: { key: \"before\", defaultValue: window.NETDATA.chartDefaults.before },\n  legend: { key: \"legend\", type: \"boolean\", defaultValue: true },\n  legendPosition: { key: \"legend-position\" },\n  units: { key: \"units\" },\n  unitsCommon: { key: \"common-units\" },\n  unitsDesired: { key: \"desired-units\" },\n  aggrMethod: { key: \"aggr-method\" },\n  labels: { key: \"labels\" },\n  postGroupBy: { key: \"post-group-by\" },\n  postAggregationMethod: { key: \"post-aggregation-method\" },\n  dimensionsAggrMethod: { key: \"dimensions-aggr-method\" },\n  aggrGroups: { key: \"aggrGroups\" },\n  selectedChart: { key: \"selected-chart\" },\n  filteredRows: { key: \"filtered-rows\" },\n  groupBy: { key: \"group-by\" },\n  nodeIDs: { key: \"node-ids\" },\n  colors: { key: \"colors\" },\n  commonColors: { key: \"common-colors\" },\n  decimalDigits: { key: \"decimal-digits\" },\n  dimensions: { key: \"dimensions\" },\n  selectedDimensions: { key: \"selected-dimensions\" },\n  forceTimeWindow: { key: \"force-time-window\" },\n\n  appendOptions: { key: \"append-options\" },\n  gtime: { key: \"gtime\" },\n  method: { key: \"method\" },\n  overrideOptions: { key: \"override-options\" },\n  pixelsPerPoint: { key: \"pixels-per-point\" },\n  points: { key: \"points\" },\n  heightId: { key: \"id\" },\n  hideResizeHandler: { key: \"hide-resize-handler\" },\n  detectResize: { key: \"detect-resize\" },\n  commonMin: { key: \"common-min\" },\n  commonMax: { key: \"common-max\" },\n\n  // let's not put the default values here, because they will also be needed by the main Agent page\n  // and the Cloud App\n  dygraphType: { key: \"dygraph-type\" },\n  dygraphValueRange: { key: \"dygraph-valuerange\" },\n  dygraphTheme: { key: \"dygraph-theme\" },\n  dygraphSmooth: { key: \"dygraph-smooth\", type: \"boolean\" },\n  dygraphColors: { key: \"dygraph-colors\" }, // not working in original dashboard\n  dygraphRightGap: { key: \"dygraph-rightgap\" },\n  dygraphShowRangeSelector: { key: \"dygraph-showrangeselector\", type: \"boolean\" },\n  dygraphShowRoller: { key: \"dygraph-showroller\", type: \"boolean\" },\n  dygraphTitle: { key: \"dygraph-title\" },\n  dygraphTitleHeight: { key: \"dygraph-titleheight\" },\n  dygraphLegend: { key: \"dygraph-legend\" },\n  dygraphLabelsDiv: { key: \"dygraph-labelsdiv\" },\n  dygraphLabelsSeparateLine: { key: \"dygraph-labelsseparatelines\", type: \"boolean\" },\n  dygraphIncludeZero: { key: \"dygraph-includezero\", type: \"boolean\" },\n  dygraphShowZeroValues: { key: \"dygraph-labelsshowzerovalues\", type: \"boolean\" },\n  dygraphShowLabelsOnHighLight: { key: \"dygraph-showlabelsonhighlight\", type: \"boolean\" },\n  dygraphHideOverlayOnMouseOut: { key: \"dygraph-hideoverlayonmouseout\", type: \"boolean\" },\n  dygraphXRangePad: { key: \"dygraph-xrangepad\" },\n  dygraphYRangePad: { key: \"dygraph-yrangepad\" },\n  dygraphYLabelWidth: { key: \"dygraph-ylabelwidth\" },\n  dygraphStrokeWidth: { key: \"dygraph-strokewidth\" },\n  dygraphStrokePattern: { key: \"dygraph-strokepattern\" },\n  dygraphDrawPoints: { key: \"dygraph-drawpoints\", type: \"boolean\" },\n  dygraphDrawGapEdgePoints: { key: \"dygraph-drawgapedgepoints\", type: \"boolean\" },\n  dygraphConnectSeparatedPoints: { key: \"dygraph-connectseparatedpoints\", type: \"boolean\" },\n  dygraphPointSize: { key: \"dygraph-pointsize\" },\n  dygraphStepPlot: { key: \"dygraph-stepplot\", type: \"boolean\" },\n  dygraphStrokeBorderColor: { key: \"dygraph-strokebordercolor\" },\n  dygraphStrokeBorderWidth: { key: \"dygraph-strokeborderwidth\" },\n  // it was not boolean in the old app, but that was most likely a bug\n  dygraphFillGraph: { key: \"dygraph-fillgraph\", type: \"boolean\" },\n  dygraphFillAlpha: { key: \"dygraph-fillalpha\" },\n  // also originally not set as boolean\n  dygraphStackedGraph: { key: \"dygraph-stackedgraph\", type: \"boolean\" },\n  dygraphStackedGraphNanFill: { key: \"dygraph-stackedgraphnanfill\" },\n  dygraphAxisLabelFontSize: { key: \"dygraph-axislabelfontsize\" },\n  dygraphAxisLineColor: { key: \"dygraph-axislinecolor\" },\n  dygraphAxisLineWidth: { key: \"dygraph-axislinewidth\" },\n  dygraphDrawGrid: { key: \"dygraph-drawgrid\", type: \"boolean\" },\n  dygraphGridLinePattern: { key: \"dygraph-gridlinepattern\" },\n  dygraphGridLineWidth: { key: \"dygraph-gridlinewidth\" },\n  dygraphGridLineColor: { key: \"dygraph-gridlinecolor\" },\n  dygraphMaxNumberWidth: { key: \"dygraph-maxnumberwidth\" },\n  dygraphSigFigs: { key: \"dygraph-sigfigs\" },\n  dygraphDigitsAfterDecimal: { key: \"dygraph-digitsafterdecimal\" },\n  // dygraphValueFormatter: { key: \"dygraph-valueformatter\" },\n  dygraphHighlighCircleSize: { key: \"dygraph-highlightcirclesize\" },\n  dygraphHighlightSeriesOpts: { key: \"dygraph-highlightseriesopts\" },\n  dygraphHighlightSeriesBackgroundAlpha: { key: \"dygraph-highlightseriesbackgroundalpha\" },\n  // dygraphPointClickCallback: { key: \"dygraph-pointclickcallback\" },\n  dygraphXPixelsPerLabel: { key: \"dygraph-xpixelsperlabel\" },\n  dygraphXAxisLabelWidth: { key: \"dygraph-xaxislabelwidth\" },\n  dygraphDrawXAxis: { key: \"dygraph-drawxaxis\", type: \"boolean\" },\n  dygraphYPixelsPerLabel: { key: \"dygraph-ypixelsperlabel\" },\n  dygraphYAxisLabelWidth: { key: \"dygraph-yaxislabelwidth\" },\n  dygraphDrawYAxis: { key: \"dygraph-drawyaxis\", type: \"boolean\" },\n  dygraphDrawAxis: { key: \"dygraph-drawaxis\", type: \"boolean\" },\n\n  easyPieChartMinValue: { key: \"easypiechart-min-value\" },\n  easyPieChartMaxValue: { key: \"easypiechart-max-value\" },\n  easyPieChartBarColor: { key: \"easypiechart-barcolor\" },\n  easyPieChartTrackColor: { key: \"easypiechart-trackcolor\" },\n  easyPieChartScaleColor: { key: \"easypiechart-scalecolor\" },\n  easyPieChartScaleLength: { key: \"easypiechart-scalelength\" },\n  easyPieChartLineCap: { key: \"easypiechart-linecap\" },\n  easyPieChartLineWidth: { key: \"easypiechart-linewidth\" },\n  easyPieChartTrackWidth: { key: \"easypiechart-trackwidth\" },\n  easyPieChartSize: { key: \"easypiechart-size\" },\n  easyPieChartRotate: { key: \"easypiechart-rotate\" },\n  easyPieChartAnimate: { key: \"easypiechart-animate\" },\n  easyPieChartEasing: { key: \"easypiechart-easing\" },\n\n  gaugeMinValue: { key: \"gauge-min-value\" },\n  gaugeMaxValue: { key: \"gauge-max-value\" },\n  gaugePointerColor: { key: \"gauge-pointer-color\" },\n  gaugeStrokeColor: { key: \"gauge-stroke-color\" },\n  gaugeStartColor: { key: \"gauge-start-color\" },\n  gaugeStopColor: { key: \"gauge-stop-color\" },\n  gaugeGenerateGradient: { key: \"gauge-generate-gradient\" },\n\n  sparklineType: { key: \"sparkline-type\" },\n  sparklineLineColor: { key: \"sparkline-linecolor\" },\n  sparklineFillColor: { key: \"sparkline-fillcolor\" },\n  sparklineChartRangeMin: { key: \"sparkline-chartrangemin\" },\n  sparklineChartRangeMax: { key: \"sparkline-chartrangemax\" },\n  sparklineComposite: { key: \"sparkline-composite\" },\n  sparklineEnableTagOptions: { key: \"sparkline-enabletagoptions\" },\n  sparklineTagOptionPrefix: { key: \"sparkline-tagoptionprefix\" },\n  sparklineTagValuesAttribute: { key: \"sparkline-tagvaluesattribute\" },\n  sparklineDisableHiddenCheck: { key: \"sparkline-disablehiddencheck\" },\n  sparklineDefaultPixelsPerValue: { key: \"sparkline-defaultpixelspervalue\" },\n  sparklineSpotColor: { key: \"sparkline-spotcolor\" },\n  sparklineMinSpotColor: { key: \"sparkline-minspotcolor\" },\n  sparklineMaxSpotColor: { key: \"sparkline-maxspotcolor\" },\n  sparklineSpotRadius: { key: \"sparkline-spotradius\" },\n  sparklineValueSpots: { key: \"sparkline-valuespots\" },\n  sparklineHighlightSpotColor: { key: \"sparkline-highlightspotcolor\" },\n  sparklineHighlightLineColor: { key: \"sparkline-highlightlinecolor\" },\n  sparklineLineWidth: { key: \"sparkline-linewidth\" },\n  sparklineNormalRangeMin: { key: \"sparkline-normalrangemin\" },\n  sparklineNormalRangeMax: { key: \"sparkline-normalrangemax\" },\n  sparklineDrawNormalOnTop: { key: \"sparkline-drawnormalontop\" },\n  sparklineXvalues: { key: \"sparkline-xvalues\" },\n  sparklineChartRangeClip: { key: \"sparkline-chartrangeclip\" },\n  sparklineChartRangeMinX: { key: \"sparkline-chartrangeminx\" },\n  sparklineChartRangeMaxX: { key: \"sparkline-chartrangemaxx\" },\n  sparklineDisableInteraction: { key: \"sparkline-disableinteraction\", type: \"boolean\" },\n  sparklineDisableTooltips: { key: \"sparkline-disabletooltips\", type: \"boolean\" },\n  sparklineOnHover: { key: \"sparkline-on-hover\" },\n  sparklineDisableHighlight: { key: \"sparkline-disablehighlight\", type: \"boolean\" },\n  sparklineHighlightLighten: { key: \"sparkline-highlightlighten\" },\n  sparklineHighlightColor: { key: \"sparkline-highlightcolor\" },\n  sparklineTooltipContainer: { key: \"sparkline-tooltipcontainer\" },\n  sparklineTooltipClassname: { key: \"sparkline-tooltipclassname\" },\n  sparklineTooltipFormat: { key: \"sparkline-tooltipformat\" },\n  sparklineTooltipPrefix: { key: \"sparkline-tooltipprefix\" },\n  sparklineTooltipSuffix: { key: \"sparkline-tooltipsuffix\" },\n  sparklineTooltipSkipNull: { key: \"sparkline-tooltipskipnull\", type: \"boolean\" },\n  sparklineTooltipValueLookups: { key: \"sparkline-tooltipvaluelookups\" },\n  sparklineTooltipFormatFieldlist: { key: \"sparkline-tooltipformatfieldlist\" },\n  sparklineTooltipFormatFieldlistKey: { key: \"sparkline-tooltipformatfieldlistkey\" },\n  sparklineNumberFormatter: { key: \"sparkline-numberformatter\" },\n  sparklineNumberDigitGroupSep: { key: \"sparkline-numberdigitgroupsep\" },\n  sparklineNumberDecimalMark: { key: \"sparkline-numberdecimalmark\" },\n  sparklineNumberDigitGroupCount: { key: \"sparkline-numberdigitgroupcount\" },\n  sparklineAnimatedZooms: { key: \"sparkline-animatedzooms\", type: \"boolean\" },\n\n  d3pieTitle: { key: \"d3pie-title\" },\n  d3pieSubtitle: { key: \"d3pie-subtitle\" },\n  d3pieFooter: { key: \"d3pie-footer\" },\n  d3pieTitleColor: { key: \"d3pie-title-color\" },\n  d3pieTitleFontsize: { key: \"d3pie-title-fontsize\" },\n  d3pieTitleFontweight: { key: \"d3pie-title-fontweight\" },\n  d3pieTitleFont: { key: \"d3pie-title-font\" },\n  d3PieSubtitleColor: { key: \"d3pie-subtitle-color\" },\n  d3PieSubtitleFontsize: { key: \"d3pie-subtitle-fontsize\" },\n  d3PieSubtitleFontweight: { key: \"d3pie-subtitle-fontweight\" },\n  d3PieSubtitleFont: { key: \"d3pie-subtitle-font\" },\n  d3PieFooterColor: { key: \"d3pie-footer-color\" },\n  d3PieFooterFontsize: { key: \"d3pie-footer-fontsize\" },\n  d3PieFooterFontweight: { key: \"d3pie-footer-fontweight\" },\n  d3PieFooterFont: { key: \"d3pie-footer-font\" },\n  d3PieFooterLocation: { key: \"d3pie-footer-location\" },\n  d3PiePieinnerradius: { key: \"d3pie-pieinnerradius\" },\n  d3PiePieouterradius: { key: \"d3pie-pieouterradius\" },\n  d3PieSortorder: { key: \"d3pie-sortorder\" },\n  d3PieSmallsegmentgroupingEnabled: { key: \"d3pie-smallsegmentgrouping-enabled\", type: \"boolean\" },\n  d3PieSmallsegmentgroupingValue: { key: \"d3pie-smallsegmentgrouping-value\" },\n  d3PieSmallsegmentgroupingValuetype: { key: \"d3pie-smallsegmentgrouping-valuetype\" },\n  d3PieSmallsegmentgroupingLabel: { key: \"d3pie-smallsegmentgrouping-label\" },\n  d3PieSmallsegmentgroupingColor: { key: \"d3pie-smallsegmentgrouping-color\" },\n  d3PieLabelsOuterFormat: { key: \"d3pie-labels-outer-format\" },\n  d3PieLabelsOuterHidewhenlessthanpercentage: {\n    key: \"d3pie-labels-outer-hidewhenlessthanpercentage\",\n  },\n  d3PieLabelsOuterPiedistance: { key: \"d3pie-labels-outer-piedistance\" },\n  d3PieLabelsInnerFormat: { key: \"d3pie-labels-inner-format\" },\n  d3PieLabelsInnerHidewhenlessthanpercentage: {\n    key: \"d3pie-labels-inner-hidewhenlessthanpercentage\",\n  },\n  d3PieLabelsMainLabelColor: { key: \"d3pie-labels-mainLabel-color\" },\n  d3PieLabelsMainLabelFont: { key: \"d3pie-labels-mainLabel-font\" },\n  d3PieLabelsMainLabelFontsize: { key: \"d3pie-labels-mainLabel-fontsize\" },\n  d3PieLabelsMainLabelFontweight: { key: \"d3pie-labels-mainLabel-fontweight\" },\n  d3PieLabelsPercentageColor: { key: \"d3pie-labels-percentage-color\" },\n  d3PieLabelsPercentageFont: { key: \"d3pie-labels-percentage-font\" },\n  d3PieLabelsPercentageFontsize: { key: \"d3pie-labels-percentage-fontsize\" },\n  d3PieLabelsPercentageFontweight: { key: \"d3pie-labels-percentage-fontweight\" },\n  d3PieLabelsValueColor: { key: \"d3pie-labels-value-color\" },\n  d3PieLabelsValueFont: { key: \"d3pie-labels-value-font\" },\n  d3PieLabelsValueFontsize: { key: \"d3pie-labels-value-fontsize\" },\n  d3PieLabelsValueFontweight: { key: \"d3pie-labels-value-fontweight\" },\n  d3PieLabelsLinesEnabled: { key: \"d3pie-labels-lines-enabled\", type: \"boolean\" },\n  d3PieLabelsLinesStyle: { key: \"d3pie-labels-lines-style\" },\n  d3PieLabelsLinesColor: { key: \"d3pie-labels-lines-color\" },\n  d3PieLabelsTruncationEnabled: { key: \"d3pie-labels-truncation-enabled\", type: \"boolean\" },\n  d3PieLabelsTruncationTruncatelength: { key: \"d3pie-labels-truncation-truncatelength\" },\n  d3PieMiscColorsSegmentstroke: { key: \"d3pie-misc-colors-segmentstroke\" },\n  d3PieMiscGradientEnabled: { key: \"d3pie-misc-gradient-enabled\", type: \"boolean\" },\n  d3PieMiscColorsPercentage: { key: \"d3pie-misc-colors-percentage\" },\n  d3PieMiscGradientColor: { key: \"d3pie-misc-gradient-color\" },\n  d3PieCssprefix: { key: \"d3pie-cssprefix\" },\n\n  peityStrokeWidth: { key: \"peity-strokewidth\" },\n\n  textOnlyDecimalPlaces: { key: \"textonly-decimal-places\" },\n  textOnlyPrefix: { key: \"textonly-prefix\" },\n  textOnlySuffix: { key: \"textonly-suffix\" },\n})\n\nexport const getAttributesStatic = (node: Element): Attributes => mapObjIndexed(\n  (attribute: AttributeConfig) => (\n    (attribute as BooleanAttributeConfig).type === \"boolean\"\n      ? getDataAttributeBoolean(\n        node,\n        attribute.key,\n          attribute.defaultValue as BooleanAttributeConfig[\"defaultValue\"],\n      ) : getDataAttribute(node, attribute.key, attribute.defaultValue)\n  ),\n  getAttributesMap(),\n) as Attributes // need to override because of broken Ramda typings\n\nexport const getAttributesDynamic = (node: Element) => {\n  const showValueOfAttribues = Array.from(node.attributes)\n    .filter((attribute) => attribute.name.startsWith(\"data-show-value-of\"))\n    .map((attribute) => ({\n      [attribute.name.replace(\"data-\", \"\")]: attribute.value,\n    }))\n  const merged = mergeAll(showValueOfAttribues)\n  return isEmpty(merged) ? undefined : merged\n}\n\nexport const getAttributes = (node: Element): Attributes => {\n  const attributesStatic = getAttributesStatic(node)\n  const showValueOf = getAttributesDynamic(node)\n  return { ...attributesStatic, showValueOf }\n}\n\nexport const defaultAttributes: Partial<Attributes> = {\n  legendPosition: initialLegendRight ? \"right\" : \"bottom\",\n}\n","import { createAction } from \"redux-act\"\nimport { CancelTokenSource, Method } from \"axios\"\n\nimport { createRequestAction } from \"utils/createRequestAction\"\nimport { InfoPayload } from \"domains/global/__mocks__/info-mock\"\n\nimport { storeKey } from \"./constants\"\nimport { ChartData, ChartMetadata } from \"./chart-types\"\n\nexport interface UpdateChartDataAction {\n  chartData: ChartData\n  id: string\n}\nexport const updateChartDataAction = createAction<UpdateChartDataAction>(\n  `${storeKey}/updateChartData`,\n)\n\nexport interface UpdateChartMetadataAction {\n  chartMetadata: ChartMetadata\n  id: string\n}\nexport const updateChartMetadataAction = createAction<UpdateChartMetadataAction>(\n  `${storeKey}/updateChartMetadata`,\n)\n\nexport interface FetchDataParams {\n  fillMissingPoints?: number\n  isRemotelyControlled: boolean\n  viewRange: [number, number]\n}\nexport interface FetchDataUrlParams {\n  host: string\n  chart: string\n  context: string\n  format: string\n  points: number\n  group: string\n  gtime: number\n  options: string\n  after: number | null\n  before?: number | null\n  dimensions?: string\n  labels?: {[key: string]: string}\n  postGroupBy?: string\n  postAggregationMethod?: string\n  aggrMethod?: string\n  aggrGroups?: string[]\n  dimensionsAggrMethod?: string\n  nodeIDs?: string[]\n  httpMethod?: Method\n  groupBy?: string\n}\nexport interface FetchDataPayload extends FetchDataUrlParams {\n  id: string,\n  fetchDataParams: FetchDataParams\n  cancelTokenSource: CancelTokenSource\n}\n\nexport const fetchDataAction = createRequestAction<\n  FetchDataPayload,\n  { id: string, chartData: ChartData, fetchDataParams: FetchDataParams }\n>(`${storeKey}/fetchDataAction`)\n\n\nexport interface FetchDataCancelAction { id: string }\nexport const fetchDataCancelAction = createAction<FetchDataCancelAction>(\n  `${storeKey}/fetchDataCancelAction`,\n)\n\nexport interface FetchDataForSnapshotPayload extends FetchDataUrlParams {\n  chartLibrary: string\n  id: string\n}\nexport const fetchDataForSnapshotAction = createRequestAction<\n  FetchDataForSnapshotPayload,\n  { id: string, snapshotData: ChartData }\n>(`${storeKey}/fetchDataForSnapshotAction`)\n\nexport const snapshotExportResetAction = createRequestAction(\n  `${storeKey}/snapshotExportResetAction`,\n)\n\nexport interface FetchChartPayload {\n  chart: string\n  id: string\n  host: string\n  nodeIDs?: string[]\n}\n\nexport const fetchChartAction = createRequestAction<\n  FetchChartPayload,\n  { chartMetadata: ChartMetadata, id: string }\n>(`${storeKey}/fetchChartAction`)\n\n\nexport interface SetResizeHeightAction {\n  id: string\n  resizeHeight: number\n}\nexport const setResizeHeightAction = createAction<SetResizeHeightAction>(\n  `${storeKey}/setResizeHeight`,\n)\n\nexport interface SetChartPanAndZoomAction {\n  id: string\n  after: number\n  before: number\n  shouldForceTimeRange?: boolean\n}\nexport const setChartPanAndZoomAction = createAction<SetChartPanAndZoomAction>(\n  `${storeKey}/setChartPanAndZoom`,\n)\n\nexport const resetChartPanAndZoomAction = createAction<{ id: string }>(\n  `${storeKey}/resetChartPanAndZoomAction`,\n)\n\nexport const clearChartStateAction = createAction<{ id: string }>(\n  `${storeKey}/clearChartStateAction`,\n)\n\nexport interface FetchInfoPayload {\n  poll?: boolean\n}\nexport interface FetchInfoSuccessPayload {\n  isCloudAvailable: boolean\n  isCloudEnabled: boolean\n  isAgentClaimed: boolean\n  isACLKAvailable: boolean\n  fullInfoPayload: InfoPayload\n}\nexport const fetchInfoAction = createRequestAction<\n  FetchInfoPayload,\n  FetchInfoSuccessPayload\n>(`${storeKey}/fetchInfoAction`)\n","export const SIGN_IN_IFRAME_ID = \"sign_in_iframe\"\n","/* eslint-disable */\n// Main JavaScript file for the Netdata GUI.\n\n// Codacy declarations\n/* global NETDATA */\n\nimport { identity, memoizeWith } from \"ramda\"\nimport {\n    centerAroundHighlightAction,\n    chartsMetadataRequestSuccess,\n    clearHighlightAction,\n    fetchAllAlarmsAction,\n    loadSnapshotAction,\n    resetGlobalPanAndZoomAction,\n    resetOptionsAction,\n    resetRegistry,\n    setDefaultAfterAction,\n    setGlobalChartUnderlayAction,\n    setGlobalPanAndZoomAction,\n    setOptionAction,\n} from './domains/global/actions';\nimport {\n    createSelectOption,\n    selectDefaultAfter,\n    selectGlobalPanAndZoom,\n    selectRegistry,\n} from \"./domains/global/selectors\"\nimport { seconds4human } from './domains/chart/utils/seconds4human';\nimport { zeropad } from './utils/units-conversion';\nimport {\n    explicitlySignInAction,\n    startSnapshotModeAction,\n    stopSnapshotModeAction,\n} from './domains/dashboard/actions';\nimport { snapshotExportResetAction } from './domains/chart/actions';\nimport {\n    selectAmountOfCharts,\n    selectAmountOfSnapshotsFailed,\n    selectAmountOfSnapshotsFetched,\n} from './domains/chart/selectors';\nimport { serverDefault } from './utils/server-detection';\nimport { name2id } from './utils/name-2-id';\nimport { isProperTimezone } from './utils/date-time';\nimport { NETDATA_REGISTRY_SERVER } from './utils';\nimport { getHashParam } from 'utils/hash-utils';\nimport { isDemo } from \"./utils/is-demo\"\nimport { LEGEND_BOTTOM_SINGLE_LINE_HEIGHT } from './domains/chart/utils/legend-utils';\nimport { defaultAttributes } from './domains/chart/utils/transformDataAttributes';\n\n// this is temporary, hook will be used after the full main.js refactor\nlet localeDateString, localeTimeString\nexport const updateLocaleFunctions = ({\n    localeDateString: newLocaleDateString,\n    localeTimeString: newLocaleTimeString,\n}) => {\n    localeDateString = newLocaleDateString\n    localeTimeString = newLocaleTimeString\n}\n\n// enable alarms checking and notifications\nvar netdataShowAlarms = true;\n\n// enable registry updates\nvar netdataRegistry = true;\n\n// forward definition only - not used here\nvar netdataServer = undefined;\nvar netdataServerStatic = undefined;\nvar netdataCheckXSS = undefined;\n\nlet reduxStore\n\nfunction escapeUserInputHTML(s) {\n    return s.toString()\n        .replace(/&/g, '&amp;')\n        .replace(/</g, '&lt;')\n        .replace(/>/g, '&gt;')\n        .replace(/\"/g, '&quot;')\n        .replace(/#/g, '&#35;')\n        .replace(/'/g, '&#39;')\n        .replace(/\\(/g, '&#40;')\n        .replace(/\\)/g, '&#41;')\n        .replace(/\\//g, '&#47;');\n}\n\nconst setOption = (key, value) => {\n    reduxStore.dispatch(setOptionAction({\n        key,\n        value,\n    }))\n}\n\n// temporary function that will be removed after full main.js migration to react\nconst getFromRegistry = (prop) => {\n    const registry = selectRegistry(reduxStore.getState())\n    return registry?.[prop]\n}\n\nfunction verifyURL(s) {\n    if (typeof (s) === 'string' && (s.startsWith('http://') || s.startsWith('https://'))) {\n        return s\n            .replace(/'/g, '%22')\n            .replace(/\"/g, '%27')\n            .replace(/\\)/g, '%28')\n            .replace(/\\(/g, '%29');\n    }\n\n    console.log('invalid URL detected:');\n    console.log(s);\n    return 'javascript:alert(\"invalid url\");';\n}\n\n// --------------------------------------------------------------------\n// urlOptions\n\nwindow.urlOptions = {\n    hash: '#',\n    theme: null,\n    help: null,\n    mode: 'live',         // 'live', 'print'\n    update_always: false,\n    pan_and_zoom: false,\n    server: null,\n    after: getHashParam('after') ?? 0,\n    before: getHashParam('before') ?? 0,\n    highlight: false,\n    highlight_after: 0,\n    highlight_before: 0,\n    nowelcome: false,\n    show_alarms: false,\n    chart: null,\n    family: null,\n    alarm: null,\n    utc: null,\n\n    hasProperty: function (property) {\n        // console.log('checking property ' + property + ' of type ' + typeof(this[property]));\n        return typeof this[property] !== 'undefined';\n    },\n\n    genHash: function (forReload) {\n        var hash = urlOptions.hash;\n\n        hash += ';after=' + urlOptions.after.toString() +\n          ';before=' + urlOptions.before.toString();\n\n        if (urlOptions.highlight === true) {\n            hash += ';highlight_after=' + urlOptions.highlight_after.toString() +\n              ';highlight_before=' + urlOptions.highlight_before.toString();\n        }\n\n        if (urlOptions.theme !== null) {\n            hash += ';theme=' + urlOptions.theme.toString();\n        }\n\n        if (urlOptions.help !== null) {\n            hash += ';help=' + urlOptions.help.toString();\n        }\n\n        if (urlOptions.update_always === true) {\n            hash += ';update_always=true';\n        }\n\n        if (forReload === true && urlOptions.server !== null) {\n            hash += ';server=' + urlOptions.server.toString();\n        }\n\n        if (urlOptions.mode !== 'live') {\n            hash += ';mode=' + urlOptions.mode;\n        }\n\n        if (urlOptions.utc !== null) {\n            hash += ';utc=' + urlOptions.utc;\n        }\n\n        return hash;\n    },\n\n    parseHash: function () {\n        var variables = document.location.hash.split(';');\n        var len = variables.length;\n        while (len--) {\n            if (len !== 0) {\n                var p = variables[len].split('=');\n                if (urlOptions.hasProperty(p[0]) && typeof p[1] !== 'undefined') {\n                    urlOptions[p[0]] = decodeURIComponent(p[1]);\n                }\n            } else {\n                if (variables[len].length > 0) {\n                    urlOptions.hash = variables[len];\n                }\n            }\n        }\n\n        var booleans = ['nowelcome', 'show_alarms', 'update_always'];\n        len = booleans.length;\n        while (len--) {\n            if (urlOptions[booleans[len]] === 'true' || urlOptions[booleans[len]] === true || urlOptions[booleans[len]] === '1' || urlOptions[booleans[len]] === 1) {\n                urlOptions[booleans[len]] = true;\n            } else {\n                urlOptions[booleans[len]] = false;\n            }\n        }\n\n        var numeric = ['after', 'before', 'highlight_after', 'highlight_before'];\n        len = numeric.length;\n        while (len--) {\n            if (typeof urlOptions[numeric[len]] === 'string') {\n                try {\n                    urlOptions[numeric[len]] = parseInt(urlOptions[numeric[len]]);\n                }\n                catch (e) {\n                    console.log('failed to parse URL hash parameter ' + numeric[len]);\n                    urlOptions[numeric[len]] = 0;\n                }\n            }\n        }\n\n        if (urlOptions.server !== null && urlOptions.server !== '') {\n            netdataServerStatic = document.location.origin.toString() + document.location.pathname.toString();\n            netdataServer = urlOptions.server;\n            netdataCheckXSS = true;\n        } else {\n            urlOptions.server = null;\n        }\n\n        if (urlOptions.before > 0 && urlOptions.after > 0) {\n            urlOptions.pan_and_zoom = true;\n            urlOptions.nowelcome = true;\n        } else {\n            urlOptions.pan_and_zoom = false;\n        }\n\n        if (urlOptions.highlight_before > 0 && urlOptions.highlight_after > 0) {\n            urlOptions.highlight = true;\n        } else {\n            urlOptions.highlight = false;\n        }\n\n        switch (urlOptions.mode) {\n            case 'print':\n                urlOptions.theme = 'white';\n                urlOptions.welcome = false;\n                urlOptions.help = false;\n                urlOptions.show_alarms = false;\n\n                if (urlOptions.pan_and_zoom === false) {\n                    urlOptions.pan_and_zoom = true;\n                    urlOptions.before = Date.now();\n                    const fallbackAfter = -600000\n                    const defaultAfter = urlOptions.after ? urlOptions.after * 1000 : fallbackAfter\n                    urlOptions.after = urlOptions.before + defaultAfter;\n                }\n\n                netdataShowAlarms = false;\n                netdataRegistry = false;\n                break;\n\n            case 'live':\n            default:\n                urlOptions.mode = 'live';\n                break;\n        }\n\n        // console.log(urlOptions);\n    },\n\n    hashUpdate: function () {\n        history.replaceState(null, '', urlOptions.genHash(true));\n    },\n\n    netdataPanAndZoomCallback: function (status, after, before) {\n        if (netdataSnapshotData === null) {\n            urlOptions.pan_and_zoom = status;\n            urlOptions.after = after;\n            urlOptions.before = before;\n        }\n    },\n\n    updateUtcParam: function (utc) {\n        if (!utc) return\n        urlOptions.utc = utc\n        urlOptions.hashUpdate();\n    },\n\n    netdataHighlightCallback: function (status, after, before) {\n        if (status === true && (after === null || before === null || after <= 0 || before <= 0 || after >= before)) {\n            status = false;\n            after = 0;\n            before = 0;\n        }\n\n        if (window.netdataSnapshotData === null) {\n            urlOptions.highlight = status;\n        } else {\n            urlOptions.highlight = false;\n        }\n\n        urlOptions.highlight_after = Math.round(after);\n        urlOptions.highlight_before = Math.round(before);\n        urlOptions.hashUpdate();\n\n        if (status === true && after > 0 && before > 0 && after < before) {\n            var d1 = localeDateString(after);\n            var d2 = localeDateString(before);\n            if (d1 === d2) {\n                d2 = '';\n            }\n            document.getElementById('navbar-highlight-content').innerHTML =\n              '<span class=\"navbar-highlight-bar highlight-tooltip\" onclick=\"urlOptions.showHighlight();\" title=\"restore the highlighted view\" data-toggle=\"tooltip\" data-placement=\"bottom\">'\n              + 'highlighted time-frame'\n              + ' <b>' + d1 + ' <code>' + localeTimeString(after) + '</code></b> to '\n              + ' <b>' + d2 + ' <code>' + localeTimeString(before) + '</code></b>, '\n              + 'duration <b>' + seconds4human(Math.round((before - after) / 1000)) + '</b>'\n              + '</span>'\n              + '<span class=\"navbar-highlight-button-right highlight-tooltip\" onclick=\"urlOptions.clearHighlight();\" title=\"clear the highlighted time-frame\" data-toggle=\"tooltip\" data-placement=\"bottom\"><i class=\"fas fa-times\"></i></span>';\n\n            $('.navbar-highlight').show();\n            $('.navbar-highlight').width(\"80%\");\n            $('.highlight-tooltip').tooltip({\n                html: true,\n                delay: { show: 500, hide: 0 },\n                container: 'body'\n            });\n        } else {\n            $('.navbar-highlight').hide();\n            $('.navbar-highlight').width(\"100%\");\n        }\n    },\n\n    clearHighlight: function () {\n        reduxStore.dispatch(clearHighlightAction())\n    },\n\n    showHighlight: function () {\n        reduxStore.dispatch(centerAroundHighlightAction())\n    }\n};\n\nurlOptions.parseHash();\n\n// --------------------------------------------------------------------\n// check options that should be processed before loading netdata.js\n\nvar localStorageTested = -1;\n\nfunction localStorageTest() {\n    if (localStorageTested !== -1) {\n        return localStorageTested;\n    }\n\n    if (typeof Storage !== \"undefined\" && typeof localStorage === 'object') {\n        var test = 'test';\n        try {\n            localStorage.setItem(test, test);\n            localStorage.removeItem(test);\n            localStorageTested = true;\n        }\n        catch (e) {\n            console.log(e);\n            localStorageTested = false;\n        }\n    } else {\n        localStorageTested = false;\n    }\n\n    return localStorageTested;\n}\n\nfunction loadLocalStorage(name) {\n    var ret = null;\n\n    try {\n        if (localStorageTest() === true) {\n            ret = localStorage.getItem(name);\n        } else {\n            console.log('localStorage is not available');\n        }\n    }\n    catch (error) {\n        console.log(error);\n        return null;\n    }\n\n    if (typeof ret === 'undefined' || ret === null) {\n        return null;\n    }\n\n    // console.log('loaded: ' + name.toString() + ' = ' + ret.toString());\n\n    return ret;\n}\n\nfunction saveLocalStorage(name, value) {\n    // console.log('saving: ' + name.toString() + ' = ' + value.toString());\n    try {\n        if (localStorageTest() === true) {\n            localStorage.setItem(name, value.toString());\n            return true;\n        }\n    }\n    catch (error) {\n        console.log(error);\n    }\n\n    return false;\n}\n\nfunction getTheme(def) {\n    if (urlOptions.mode === 'print') {\n        return 'white';\n    }\n\n    var ret = loadLocalStorage('netdataTheme');\n    if (typeof ret === 'undefined' || ret === null || ret === 'undefined') {\n        return def;\n    } else {\n        return ret;\n    }\n}\n\nfunction setTheme(theme) {\n    if (urlOptions.mode === 'print') {\n        return false;\n    }\n\n    if (theme === netdataTheme) {\n        return false;\n    }\n    return saveLocalStorage('netdataTheme', theme);\n}\n\nwindow.netdataTheme = getTheme('slate');\n// this is of course temporary, will be fixed during complete main.js rewrite\nNETDATA.updateTheme()\nvar netdataShowHelp = true;\n\nif (urlOptions.theme !== null) {\n    setTheme(urlOptions.theme);\n    netdataTheme = urlOptions.theme;\n    window.NETDATA.updateTheme()\n} else {\n    urlOptions.theme = netdataTheme;\n}\n\nif (urlOptions.help !== null) {\n    saveLocalStorage('options.show_help', urlOptions.help);\n    netdataShowHelp = urlOptions.help;\n} else {\n    urlOptions.help = loadLocalStorage('options.show_help');\n}\n\n// --------------------------------------------------------------------\n// natural sorting\n// http://www.davekoelle.com/files/alphanum.js - LGPL\n\nfunction naturalSortChunkify(t) {\n    var tz = [];\n    var x = 0, y = -1, n = 0, i, j;\n\n    while (i = (j = t.charAt(x++)).charCodeAt(0)) {\n        var m = (i >= 48 && i <= 57);\n        if (m !== n) {\n            tz[++y] = \"\";\n            n = m;\n        }\n        tz[y] += j;\n    }\n\n    return tz;\n}\n\nfunction naturalSortCompare(a, b) {\n    var aa = naturalSortChunkify(a.toLowerCase());\n    var bb = naturalSortChunkify(b.toLowerCase());\n\n    for (var x = 0; aa[x] && bb[x]; x++) {\n        if (aa[x] !== bb[x]) {\n            var c = Number(aa[x]), d = Number(bb[x]);\n            if (c.toString() === aa[x] && d.toString() === bb[x]) {\n                return c - d;\n            } else {\n                return (aa[x] > bb[x]) ? 1 : -1;\n            }\n        }\n    }\n\n    return aa.length - bb.length;\n}\n\n// --------------------------------------------------------------------\n// saving files to client\n\nfunction saveTextToClient(data, filename) {\n    var blob = new Blob([data], {\n        type: 'application/octet-stream'\n    });\n\n    var url = URL.createObjectURL(blob);\n    var link = document.createElement('a');\n    link.setAttribute('href', url);\n    link.setAttribute('download', filename);\n\n    var el = document.getElementById('hiddenDownloadLinks');\n    el.innerHTML = '';\n    el.appendChild(link);\n\n    setTimeout(function () {\n        el.removeChild(link);\n        URL.revokeObjectURL(url);\n    }, 60);\n\n    link.click();\n}\n\nfunction saveObjectToClient(data, filename) {\n    saveTextToClient(JSON.stringify(data), filename);\n}\n\nfunction netdataURL(url, forReload) {\n    if (typeof url === 'undefined')\n    // url = document.location.toString();\n    {\n        url = '';\n    }\n\n    if (url.indexOf('#') !== -1) {\n        url = url.substring(0, url.indexOf('#'));\n    }\n\n    var hash = urlOptions.genHash(forReload);\n\n    // console.log('netdataURL: ' + url + hash);\n\n    return url + hash;\n}\n\nfunction netdataReload(url) {\n    document.location = verifyURL(netdataURL(url, true));\n\n    // since we play with hash\n    // this is needed to reload the page\n    location.reload();\n}\n\nwindow.gotoHostedModalHandler = (url) => {\n    document.location = verifyURL(url + urlOptions.genHash());\n    return false;\n}\n\nvar gotoServerValidateRemaining = 0;\nvar gotoServerMiddleClick = false;\nvar gotoServerStop = false;\n\nfunction gotoServerValidateUrl(id, guid, url) {\n    var penalty = 0;\n    var error = 'failed';\n\n    if (document.location.toString().startsWith('http://') && url.toString().startsWith('https://'))\n    // we penalize https only if the current url is http\n    // to allow the user walk through all its servers.\n    {\n        penalty = 500;\n    } else if (document.location.toString().startsWith('https://') && url.toString().startsWith('http://')) {\n        error = 'can\\'t check';\n    }\n\n    var finalURL = netdataURL(url);\n\n    setTimeout(function () {\n        document.getElementById('gotoServerList').innerHTML += '<tr><td style=\"padding-left: 20px;\"><a href=\"' + verifyURL(finalURL) + '\" target=\"_blank\">' + escapeUserInputHTML(url) + '</a></td><td style=\"padding-left: 30px;\"><code id=\"' + guid + '-' + id + '-status\">checking...</code></td></tr>';\n\n        NETDATA.registryHello(url, function (data) {\n            if (typeof data !== 'undefined' && data !== null && typeof data.machine_guid === 'string' && data.machine_guid === guid) {\n                // console.log('OK ' + id + ' URL: ' + url);\n                document.getElementById(guid + '-' + id + '-status').innerHTML = \"OK\";\n\n                if (!gotoServerStop) {\n                    gotoServerStop = true;\n\n                    if (gotoServerMiddleClick) {\n                        window.open(verifyURL(finalURL), '_blank');\n                        gotoServerMiddleClick = false;\n                        const registryMachines = getFromRegistry(\"registryMachines\");\n                        document.getElementById('gotoServerResponse').innerHTML = '<b>Opening new window to ' + registryMachines[guid].name + '<br/><a href=\"' + verifyURL(finalURL) + '\">' + escapeUserInputHTML(url) + '</a></b><br/>(check your pop-up blocker if it fails)';\n                    } else {\n                        document.getElementById('gotoServerResponse').innerHTML += 'found it! It is at:<br/><small>' + escapeUserInputHTML(url) + '</small>';\n                        document.location = verifyURL(finalURL);\n                        $('#gotoServerModal').modal('hide');\n                    }\n                }\n            } else {\n                if (typeof data !== 'undefined' && data !== null && typeof data.machine_guid === 'string' && data.machine_guid !== guid) {\n                    error = 'wrong machine';\n                }\n\n                document.getElementById(guid + '-' + id + '-status').innerHTML = error;\n                gotoServerValidateRemaining--;\n                if (gotoServerValidateRemaining <= 0) {\n                    gotoServerMiddleClick = false;\n                    document.getElementById('gotoServerResponse').innerHTML = '<b>Sorry! I cannot find any operational URL for this server</b>';\n                }\n            }\n        });\n    }, (id * 50) + penalty);\n}\n\nwindow.gotoServerModalHandler = function gotoServerModalHandler(guid) {\n    // console.log('goto server: ' + guid);\n\n    gotoServerStop = false;\n    var checked = {};\n    const registryMachines = getFromRegistry(\"registryMachines\");\n    var len = registryMachines[guid].alternateUrls.length;\n    var count = 0;\n\n    document.getElementById('gotoServerResponse').innerHTML = '';\n    document.getElementById('gotoServerList').innerHTML = '';\n    document.getElementById('gotoServerName').innerHTML = registryMachines[guid].name;\n    $('#gotoServerModal').modal('show');\n\n    gotoServerValidateRemaining = len;\n    while (len--) {\n        var url = registryMachines[guid].alternateUrls[len];\n        checked[url] = true;\n        gotoServerValidateUrl(count++, guid, url);\n    }\n\n    // When the registry is enabled, if the user's known URLs are not working\n    // we consult the registry to get additional URLs.\n    setTimeout(function () {\n        if (gotoServerStop === false) {\n            document.getElementById('gotoServerResponse').innerHTML = '<b>Added all the known URLs for this machine.</b>';\n            NETDATA.registrySearch(guid, getFromRegistry, function (data) {\n                // console.log(data);\n                len = data.urls.length;\n                while (len--) {\n                    var url = data.urls[len][1];\n                    // console.log(url);\n                    if (typeof checked[url] === 'undefined') {\n                        gotoServerValidateRemaining++;\n                        checked[url] = true;\n                        gotoServerValidateUrl(count++, guid, url);\n                    }\n                }\n            });\n        }\n    }, 2000);\n\n    return false;\n}\n\nwindow.switchRegistryModalHandler = () => {\n    document.getElementById('switchRegistryPersonGUID').value = getFromRegistry(\"personGuid\");\n    document.getElementById('switchRegistryURL').innerHTML = getFromRegistry(\"registryServer\");\n    document.getElementById('switchRegistryResponse').innerHTML = '';\n    $('#switchRegistryModal').modal('show');\n};\n\nwindow.notifyForSwitchRegistry = () => {\n    // it's just old code, with minimal changes\n    const newPersonGuid = document.getElementById('switchRegistryPersonGUID').value;\n\n    if (newPersonGuid !== '' && newPersonGuid.length === 36) {\n\n        $.ajax({\n            url: getFromRegistry(\"registryServer\") + '/api/v1/registry?action=switch&machine='\n              + getFromRegistry(\"machineGuid\") + '&name='\n              + encodeURIComponent(getFromRegistry(\"hostname\")) + '&url='\n              + encodeURIComponent(serverDefault) + '&to=' + newPersonGuid,\n            async: true,\n            cache: false,\n            headers: {\n                'Cache-Control': 'no-cache, no-store',\n                'Pragma': 'no-cache'\n            },\n            xhrFields: {withCredentials: true} // required for the cookie\n        })\n        .done(function (data) {\n            data = NETDATA.xss.checkAlways('/api/v1/registry?action=switch', data);\n\n            if (typeof data.status !== 'string' || data.status !== 'ok') {\n                // NETDATA.error(413, NETDATA.registry.server + ' responded with: ' + JSON.stringify(data));\n                console.warn(\"Netdata registry server send invalid response to SWITCH\", data)\n                data = null;\n            }\n\n            $('#switchRegistryModal').modal('hide');\n        })\n        .fail(function () {\n            // NETDATA.error(414, NETDATA.registry.server);\n            console.warn(\"Netdata registry SWITCH failed\")\n            document.getElementById('switchRegistryResponse').innerHTML = \"<b>Sorry! The registry rejected your request.</b>\";\n        });\n    } else {\n        document.getElementById('switchRegistryResponse').innerHTML = \"<b>The ID you have entered is not a GUID.</b>\";\n    }\n};\n\nvar deleteRegistryGuid = null;\nvar deleteRegistryUrl = null;\n\nwindow.deleteRegistryModalHandler = (guid, name, url) => {\n    deleteRegistryGuid = guid;\n    deleteRegistryUrl = url;\n\n    document.getElementById('deleteRegistryServerName').innerHTML = name;\n    document.getElementById('deleteRegistryServerName2').innerHTML = name;\n    document.getElementById('deleteRegistryServerURL').innerHTML = url;\n    document.getElementById('deleteRegistryResponse').innerHTML = '';\n\n    $('#deleteRegistryModal').modal('show');\n}\n\nwindow.notifyForDeleteRegistry = () => {\n    const responseEl = document.getElementById('deleteRegistryResponse');\n\n    if (deleteRegistryUrl) {\n        NETDATA.registryDelete(getFromRegistry, serverDefault, deleteRegistryUrl, function (result) {\n            if (result !== null) {\n                deleteRegistryUrl = null;\n                $('#deleteRegistryModal').modal('hide');\n                reduxStore.dispatch(resetRegistry())\n            } else {\n                responseEl.innerHTML = \"<b>Sorry, this command was rejected by the registry server!</b>\";\n            }\n        });\n    }\n}\n\nvar options = {\n    menus: {},\n    submenu_names: {},\n    data: null,\n    hostname: 'netdata_server', // will be overwritten by the netdata server\n    version: 'unknown',\n    release_channel: 'unknown',\n    hosts: [],\n\n    duration: 0, // the default duration of the charts\n    update_every: 1,\n\n    chartsPerRow: 0,\n    // chartsMinWidth: 1450,\n    chartsHeight: 180,\n};\n\nfunction chartsPerRow(total) {\n    void (total);\n\n    if (options.chartsPerRow === 0) {\n        return 1;\n        //var width = Math.floor(total / options.chartsMinWidth);\n        //if(width === 0) width = 1;\n        //return width;\n    } else {\n        return options.chartsPerRow;\n    }\n}\n\nfunction prioritySort(a, b) {\n    if (a.priority < b.priority) {\n        return -1;\n    }\n    if (a.priority > b.priority) {\n        return 1;\n    }\n    return naturalSortCompare(a.name, b.name);\n}\n\nfunction sortObjectByPriority(object) {\n    var idx = {};\n    var sorted = [];\n\n    for (var i in object) {\n        if (!object.hasOwnProperty(i)) {\n            continue;\n        }\n\n        if (typeof idx[i] === 'undefined') {\n            idx[i] = object[i];\n            sorted.push(i);\n        }\n    }\n\n    sorted.sort(function (a, b) {\n        if (idx[a].priority < idx[b].priority) {\n            return -1;\n        }\n        if (idx[a].priority > idx[b].priority) {\n            return 1;\n        }\n        return naturalSortCompare(a, b);\n    });\n\n    return sorted;\n}\n\n// ----------------------------------------------------------------------------\n// scroll to a section, without changing the browser history\n\nwindow.scrollToId = (hash) => {\n    if (hash && hash !== '' && document.getElementById(hash) !== null) {\n        var offset = $('#' + hash).offset();\n        if (typeof offset !== 'undefined') {\n            //console.log('scrolling to ' + hash + ' at ' + offset.top.toString());\n            $('html, body').animate({ scrollTop: offset.top - 30 }, 0);\n        }\n    }\n\n    // we must return false to prevent the default action\n    return false;\n}\n\n// ----------------------------------------------------------------------------\n\n// user editable information\nwindow.customDashboard = {\n    menu: {},\n    submenu: {},\n    context: {}\n};\n\n// netdata standard information\nconst netdataDashboard = {\n    sparklines_registry: {},\n    os: 'unknown',\n\n    menu: {},\n    submenu: {},\n    context: {},\n\n    // generate a sparkline\n    // used in the documentation\n    sparkline: function (prefix, chart, dimension, units, suffix) {\n        if (options.data === null || typeof options.data.charts === 'undefined') {\n            return '';\n        }\n\n        if (typeof options.data.charts[chart] === 'undefined') {\n            return '';\n        }\n\n        if (typeof options.data.charts[chart].dimensions === 'undefined') {\n            return '';\n        }\n\n        if (typeof options.data.charts[chart].dimensions[dimension] === 'undefined') {\n            return '';\n        }\n\n        var key = chart + '.' + dimension;\n\n        if (typeof units === 'undefined') {\n            units = '';\n        }\n\n        if (typeof this.sparklines_registry[key] === 'undefined') {\n            this.sparklines_registry[key] = { count: 1 };\n        } else {\n            this.sparklines_registry[key].count++;\n        }\n\n        key = key + '.' + this.sparklines_registry[key].count;\n\n        return prefix + '<div class=\"netdata-container\" data-netdata=\"' + chart + '\" data-width=\"25%\" data-height=\"15px\" data-chart-library=\"dygraph\" data-dygraph-theme=\"sparkline\" data-dimensions=\"' + dimension + '\" data-show-value-of-' + dimension + '-at=\"' + key + '\"></div> (<span id=\"' + key + '\" style=\"display: inline-block; min-width: 50px; text-align: right;\">X</span>' + units + ')' + suffix;\n    },\n\n    gaugeChart: function (title, width, dimensions, colors) {\n        if (typeof colors === 'undefined') {\n            colors = '';\n        }\n\n        if (typeof dimensions === 'undefined') {\n            dimensions = '';\n        }\n\n        return '<div class=\"netdata-container\" data-netdata=\"CHART_UNIQUE_ID\"'\n          + ' data-dimensions=\"' + dimensions + '\"'\n          + ' data-chart-library=\"gauge\"'\n          + ' data-gauge-adjust=\"width\"'\n          + ' data-title=\"' + title + '\"'\n          + ' data-width=\"' + width + '\"'\n          + ' data-points=\"CHART_DURATION\"'\n          + ' data-colors=\"' + colors + '\"'\n          + ' role=\"application\"></div>';\n    },\n\n    anyAttribute: function (obj, attr, key, def) {\n        if (typeof (obj[key]) !== 'undefined') {\n            var x = obj[key][attr];\n\n            if (typeof (x) === 'undefined') {\n                return def;\n            }\n\n            if (typeof (x) === 'function') {\n                return x(netdataDashboard.os);\n            }\n\n            return x;\n        }\n\n        return def;\n    },\n\n    menuTitle: function (chart) {\n        if (typeof chart.menu_pattern !== 'undefined') {\n            return (this.anyAttribute(this.menu, 'title', chart.menu_pattern, chart.menu_pattern).toString()\n              + '&nbsp;' + chart.type.slice(-(chart.type.length - chart.menu_pattern.length - 1)).toString()).replace(/_/g, ' ');\n        }\n\n        return (this.anyAttribute(this.menu, 'title', chart.menu, chart.menu)).toString().replace(/_/g, ' ');\n    },\n\n    menuIcon: function (chart) {\n        if (typeof chart.menu_pattern !== 'undefined') {\n            return this.anyAttribute(this.menu, 'icon', chart.menu_pattern, '<i class=\"fas fa-puzzle-piece\"></i>').toString();\n        }\n\n        return this.anyAttribute(this.menu, 'icon', chart.menu, '<i class=\"fas fa-puzzle-piece\"></i>');\n    },\n\n    menuInfo: function (chart) {\n        if (typeof chart.menu_pattern !== 'undefined') {\n            return this.anyAttribute(this.menu, 'info', chart.menu_pattern, null);\n        }\n\n        return this.anyAttribute(this.menu, 'info', chart.menu, null);\n    },\n\n    menuHeight: function (chart) {\n        if (typeof chart.menu_pattern !== 'undefined') {\n            return this.anyAttribute(this.menu, 'height', chart.menu_pattern, 1.0);\n        }\n\n        return this.anyAttribute(this.menu, 'height', chart.menu, 1.0);\n    },\n\n    submenuTitle: function (menu, submenu) {\n        var key = menu + '.' + submenu;\n        // console.log(key);\n        var title = this.anyAttribute(this.submenu, 'title', key, submenu).toString().replace(/_/g, ' ');\n        if (title.length > 28) {\n            var a = title.substring(0, 13);\n            var b = title.substring(title.length - 12, title.length);\n            return a + '...' + b;\n        }\n        return title;\n    },\n\n    submenuInfo: function (menu, submenu) {\n        var key = menu + '.' + submenu;\n        return this.anyAttribute(this.submenu, 'info', key, null);\n    },\n\n    submenuHeight: function (menu, submenu, relative) {\n        var key = menu + '.' + submenu;\n        return this.anyAttribute(this.submenu, 'height', key, 1.0) * relative;\n    },\n\n    contextInfo: function (id) {\n        var x = this.anyAttribute(this.context, 'info', id, null);\n\n        if (x !== null) {\n            return '<div class=\"shorten dashboard-context-info netdata-chart-alignment\" role=\"document\">' + x + '</div>';\n        } else {\n            return '';\n        }\n    },\n\n    contextValueRange: function (id) {\n        if (typeof this.context[id] !== 'undefined' && typeof this.context[id].valueRange !== 'undefined') {\n            return this.context[id].valueRange;\n        } else {\n            return '[null, null]';\n        }\n    },\n\n    contextHeight: function (id, def) {\n        if (typeof this.context[id] !== 'undefined' && typeof this.context[id].height !== 'undefined') {\n            return def * this.context[id].height;\n        } else {\n            return def;\n        }\n    },\n\n    contextDecimalDigits: function (id, def) {\n        if (typeof this.context[id] !== 'undefined' && typeof this.context[id].decimalDigits !== 'undefined') {\n            return this.context[id].decimalDigits;\n        } else {\n            return def;\n        }\n    }\n};\nwindow.netdataDashboard = netdataDashboard // share with dashboard_info.js :/\n\n// ----------------------------------------------------------------------------\n\n// enrich the data structure returned by netdata\n// to reflect our menu system and content\n// TODO: this is a shame - we should fix charts naming (issue #807)\nfunction enrichChartData(chart) {\n    var parts = chart.type.split('_');\n    var tmp = parts[0];\n\n    switch (tmp) {\n        case 'ap':\n        case 'net':\n        case 'disk':\n        case 'powersupply':\n            chart.menu = tmp;\n            break;\n\n        case 'apache':\n            chart.menu = chart.type;\n            if (parts.length > 2 && parts[1] === 'cache') {\n                chart.menu_pattern = tmp + '_' + parts[1];\n            } else if (parts.length > 1) {\n                chart.menu_pattern = tmp;\n            }\n            break;\n\n        case 'bind':\n            chart.menu = chart.type;\n            if (parts.length > 2 && parts[1] === 'rndc') {\n                chart.menu_pattern = tmp + '_' + parts[1];\n            } else if (parts.length > 1) {\n                chart.menu_pattern = tmp;\n            }\n            break;\n\n        case 'cgroup':\n            chart.menu = chart.type;\n            if (chart.id.match(/.*[\\._\\/-:]qemu[\\._\\/-:]*/) || chart.id.match(/.*[\\._\\/-:]kvm[\\._\\/-:]*/)) {\n                chart.menu_pattern = 'cgqemu';\n            } else {\n                chart.menu_pattern = 'cgroup';\n            }\n            break;\n\n        case 'go':\n            chart.menu = chart.type;\n            if (parts.length > 2 && parts[1] === 'expvar') {\n                chart.menu_pattern = tmp + '_' + parts[1];\n            } else if (parts.length > 1) {\n                chart.menu_pattern = tmp;\n            }\n            break;\n\n        case 'mount':\n            if (parts.length > 2) {\n                chart.menu = tmp + '_' + parts[1];\n            }\n            else {\n                chart.menu = tmp;\n            }\n            break;\n\n        case 'isc':\n            chart.menu = chart.type;\n            if (parts.length > 2 && parts[1] === 'dhcpd') {\n                chart.menu_pattern = tmp + '_' + parts[1];\n            } else if (parts.length > 1) {\n                chart.menu_pattern = tmp;\n            }\n            break;\n\n        case 'ovpn':\n            chart.menu = chart.type;\n            if (parts.length > 3 && parts[1] === 'status' && parts[2] === 'log') {\n                chart.menu_pattern = tmp + '_' + parts[1];\n            } else if (parts.length > 1) {\n                chart.menu_pattern = tmp;\n            }\n            break;\n\n        case 'smartd':\n        case 'web':\n            chart.menu = chart.type;\n            if (parts.length > 2 && parts[1] === 'log') {\n                chart.menu_pattern = tmp + '_' + parts[1];\n            } else if (parts.length > 1) {\n                chart.menu_pattern = tmp;\n            }\n            break;\n\n        case 'dnsmasq':\n            chart.menu = chart.type;\n            if (parts.length == 2 && parts[1] === 'dhcp') {\n                chart.menu = tmp + '_' + parts[1];\n            } else if (parts.length > 2 && parts[1] === 'dhcp') {\n                chart.menu_pattern = tmp + '_' + parts[1];\n            } else if (parts.length > 1) {\n                chart.menu_pattern = tmp;\n            }\n            break;\n\n        case 'anomaly':\n            if (parts.length >= 2 && parts[1].startsWith('detection')) {\n                chart.menu = tmp + '_detection';\n            }\n            break;\n\n        case 'tc':\n            chart.menu = tmp;\n\n            // find a name for this device from fireqos info\n            // we strip '_(in|out)' or '(in|out)_'\n            if (chart.context === 'tc.qos' && (typeof options.submenu_names[chart.family] === 'undefined' || options.submenu_names[chart.family] === chart.family)) {\n                var n = chart.name.split('.')[1];\n                if (n.endsWith('_in')) {\n                    options.submenu_names[chart.family] = n.slice(0, n.lastIndexOf('_in'));\n                } else if (n.endsWith('_out')) {\n                    options.submenu_names[chart.family] = n.slice(0, n.lastIndexOf('_out'));\n                } else if (n.startsWith('in_')) {\n                    options.submenu_names[chart.family] = n.slice(3, n.length);\n                } else if (n.startsWith('out_')) {\n                    options.submenu_names[chart.family] = n.slice(4, n.length);\n                } else {\n                    options.submenu_names[chart.family] = n;\n                }\n            }\n\n            // increase the priority of IFB devices\n            // to have inbound appear before outbound\n            if (chart.id.match(/.*-ifb$/)) {\n                chart.priority--;\n            }\n\n            break;\n\n        default:\n            chart.menu = chart.type;\n            if (parts.length > 1) {\n                chart.menu_pattern = tmp;\n            }\n            break;\n    }\n\n    chart.submenu = chart.family;\n}\n\n// ----------------------------------------------------------------------------\n\nfunction headMain(os, charts, duration) {\n    void (os);\n\n    if (urlOptions.mode === 'print') {\n        return '';\n    }\n\n    var head = '';\n\n    if (typeof charts['system.swap'] !== 'undefined') {\n        head += '<div class=\"netdata-container\" style=\"margin-right: 10px;\" data-netdata=\"system.swap\"'\n          + ' data-dimensions=\"used\"'\n          + ' data-append-options=\"percentage\"'\n          + ' data-chart-library=\"easypiechart\"'\n          + ' data-title=\"Used Swap\"'\n          + ' data-units=\"%\"'\n          + ' data-easypiechart-max-value=\"100\"'\n          + ' data-width=\"9%\"'\n          + ' data-points=\"' + duration.toString() + '\"'\n          + ' data-colors=\"#DD4400\"'\n          + ' role=\"application\"></div>';\n    }\n\n    if (typeof charts['system.io'] !== 'undefined') {\n        head += '<div class=\"netdata-container\" style=\"margin-right: 10px;\" data-netdata=\"system.io\"'\n          + ' data-dimensions=\"in\"'\n          + ' data-chart-library=\"easypiechart\"'\n          + ' data-title=\"Disk Read\"'\n          + ' data-width=\"11%\"'\n          + ' data-points=\"' + duration.toString() + '\"'\n          + ' data-common-units=\"system.io.mainhead\"'\n          + ' role=\"application\"></div>';\n\n        head += '<div class=\"netdata-container\" style=\"margin-right: 10px;\" data-netdata=\"system.io\"'\n          + ' data-dimensions=\"out\"'\n          + ' data-chart-library=\"easypiechart\"'\n          + ' data-title=\"Disk Write\"'\n          + ' data-width=\"11%\"'\n          + ' data-points=\"' + duration.toString() + '\"'\n          + ' data-common-units=\"system.io.mainhead\"'\n          + ' role=\"application\"></div>';\n    }\n    else if (typeof charts['system.pgpgio'] !== 'undefined') {\n        head += '<div class=\"netdata-container\" style=\"margin-right: 10px;\" data-netdata=\"system.pgpgio\"'\n          + ' data-dimensions=\"in\"'\n          + ' data-chart-library=\"easypiechart\"'\n          + ' data-title=\"Disk Read\"'\n          + ' data-width=\"11%\"'\n          + ' data-points=\"' + duration.toString() + '\"'\n          + ' data-common-units=\"system.pgpgio.mainhead\"'\n          + ' role=\"application\"></div>';\n\n        head += '<div class=\"netdata-container\" style=\"margin-right: 10px;\" data-netdata=\"system.pgpgio\"'\n          + ' data-dimensions=\"out\"'\n          + ' data-chart-library=\"easypiechart\"'\n          + ' data-title=\"Disk Write\"'\n          + ' data-width=\"11%\"'\n          + ' data-points=\"' + duration.toString() + '\"'\n          + ' data-common-units=\"system.pgpgio.mainhead\"'\n          + ' role=\"application\"></div>';\n    }\n\n    if (typeof charts['system.cpu'] !== 'undefined') {\n        head += '<div class=\"netdata-container\" style=\"margin-right: 10px;\" data-netdata=\"system.cpu\"'\n          + ' data-chart-library=\"gauge\"'\n          + ' data-title=\"CPU\"'\n          + ' data-units=\"%\"'\n          + ' data-gauge-max-value=\"100\"'\n          + ' data-width=\"20%\"'\n          + ' data-points=\"' + duration.toString() + '\"'\n          + ' data-colors=\"' + NETDATA.colors[12] + '\"'\n          + ' role=\"application\"></div>';\n    }\n\n    if (typeof charts['system.net'] !== 'undefined') {\n        head += '<div class=\"netdata-container\" style=\"margin-right: 10px;\" data-netdata=\"system.net\"'\n          + ' data-dimensions=\"received\"'\n          + ' data-chart-library=\"easypiechart\"'\n          + ' data-title=\"Net Inbound\"'\n          + ' data-width=\"11%\"'\n          + ' data-points=\"' + duration.toString() + '\"'\n          + ' data-common-units=\"system.net.mainhead\"'\n          + ' role=\"application\"></div>';\n\n        head += '<div class=\"netdata-container\" style=\"margin-right: 10px;\" data-netdata=\"system.net\"'\n          + ' data-dimensions=\"sent\"'\n          + ' data-chart-library=\"easypiechart\"'\n          + ' data-title=\"Net Outbound\"'\n          + ' data-width=\"11%\"'\n          + ' data-points=\"' + duration.toString() + '\"'\n          + ' data-common-units=\"system.net.mainhead\"'\n          + ' role=\"application\"></div>';\n    }\n    else if (typeof charts['system.ip'] !== 'undefined') {\n        head += '<div class=\"netdata-container\" style=\"margin-right: 10px;\" data-netdata=\"system.ip\"'\n          + ' data-dimensions=\"received\"'\n          + ' data-chart-library=\"easypiechart\"'\n          + ' data-title=\"IP Inbound\"'\n          + ' data-width=\"11%\"'\n          + ' data-points=\"' + duration.toString() + '\"'\n          + ' data-common-units=\"system.ip.mainhead\"'\n          + ' role=\"application\"></div>';\n\n        head += '<div class=\"netdata-container\" style=\"margin-right: 10px;\" data-netdata=\"system.ip\"'\n          + ' data-dimensions=\"sent\"'\n          + ' data-chart-library=\"easypiechart\"'\n          + ' data-title=\"IP Outbound\"'\n          + ' data-width=\"11%\"'\n          + ' data-points=\"' + duration.toString() + '\"'\n          + ' data-common-units=\"system.ip.mainhead\"'\n          + ' role=\"application\"></div>';\n    }\n    else if (typeof charts['system.ipv4'] !== 'undefined') {\n        head += '<div class=\"netdata-container\" style=\"margin-right: 10px;\" data-netdata=\"system.ipv4\"'\n          + ' data-dimensions=\"received\"'\n          + ' data-chart-library=\"easypiechart\"'\n          + ' data-title=\"IPv4 Inbound\"'\n          + ' data-width=\"11%\"'\n          + ' data-points=\"' + duration.toString() + '\"'\n          + ' data-common-units=\"system.ipv4.mainhead\"'\n          + ' role=\"application\"></div>';\n\n        head += '<div class=\"netdata-container\" style=\"margin-right: 10px;\" data-netdata=\"system.ipv4\"'\n          + ' data-dimensions=\"sent\"'\n          + ' data-chart-library=\"easypiechart\"'\n          + ' data-title=\"IPv4 Outbound\"'\n          + ' data-width=\"11%\"'\n          + ' data-points=\"' + duration.toString() + '\"'\n          + ' data-common-units=\"system.ipv4.mainhead\"'\n          + ' role=\"application\"></div>';\n    }\n    else if (typeof charts['system.ipv6'] !== 'undefined') {\n        head += '<div class=\"netdata-container\" style=\"margin-right: 10px;\" data-netdata=\"system.ipv6\"'\n          + ' data-dimensions=\"received\"'\n          + ' data-chart-library=\"easypiechart\"'\n          + ' data-title=\"IPv6 Inbound\"'\n          + ' data-units=\"kbps\"'\n          + ' data-width=\"11%\"'\n          + ' data-points=\"' + duration.toString() + '\"'\n          + ' data-common-units=\"system.ipv6.mainhead\"'\n          + ' role=\"application\"></div>';\n\n        head += '<div class=\"netdata-container\" style=\"margin-right: 10px;\" data-netdata=\"system.ipv6\"'\n          + ' data-dimensions=\"sent\"'\n          + ' data-chart-library=\"easypiechart\"'\n          + ' data-title=\"IPv6 Outbound\"'\n          + ' data-units=\"kbps\"'\n          + ' data-width=\"11%\"'\n          + ' data-points=\"' + duration.toString() + '\"'\n          + ' data-common-units=\"system.ipv6.mainhead\"'\n          + ' role=\"application\"></div>';\n    }\n\n    if (typeof charts['system.ram'] !== 'undefined') {\n        head += '<div class=\"netdata-container\" style=\"margin-right: 10px;\" data-netdata=\"system.ram\"'\n          + ' data-dimensions=\"used|buffers|active|wired\"' // active and wired are FreeBSD stats\n          + ' data-append-options=\"percentage\"'\n          + ' data-chart-library=\"easypiechart\"'\n          + ' data-title=\"Used RAM\"'\n          + ' data-units=\"%\"'\n          + ' data-easypiechart-max-value=\"100\"'\n          + ' data-width=\"9%\"'\n          + ' data-points=\"' + duration.toString() + '\"'\n          + ' data-colors=\"' + NETDATA.colors[7] + '\"'\n          + ' role=\"application\"></div>';\n    }\n\n    return head;\n}\n\nfunction generateHeadCharts(type, chart, duration) {\n    if (urlOptions.mode === 'print') {\n        return '';\n    }\n\n    var head = '';\n    var hcharts = netdataDashboard.anyAttribute(netdataDashboard.context, type, chart.context, []);\n    if (hcharts.length > 0) {\n        var hi = 0, hlen = hcharts.length;\n        while (hi < hlen) {\n            if (typeof hcharts[hi] === 'function') {\n                head += hcharts[hi](netdataDashboard.os, chart.id).replace(/CHART_DURATION/g, duration.toString()).replace(/CHART_UNIQUE_ID/g, chart.id);\n            } else {\n                head += hcharts[hi].replace(/CHART_DURATION/g, duration.toString()).replace(/CHART_UNIQUE_ID/g, chart.id);\n            }\n            hi++;\n        }\n    }\n    return head;\n}\n\nfunction renderPage(menus, data) {\n    var div = document.getElementById('charts_div');\n    var pcent_width = Math.floor(100 / chartsPerRow($(div).width()));\n\n    // find the proper duration for per-second updates\n    var duration = Math.round(($(div).width() * pcent_width / 100 * data.update_every / 3) / 60) * 60;\n    options.duration = duration; // probably obsolete/not needed\n    options.update_every = data.update_every;\n\n    var html = '';\n    var sidebar = '<ul class=\"nav dashboard-sidenav\" data-spy=\"affix\" id=\"sidebar_ul\">';\n    var mainhead = headMain(netdataDashboard.os, data.charts, duration);\n\n    // sort the menus\n    var main = sortObjectByPriority(menus);\n    var i = 0, len = main.length;\n\n    // todo hook to options\n    const hasChartsOnBottom = defaultAttributes.legendPosition === \"bottom\"\n    const chartAdditionalHeight = hasChartsOnBottom ? LEGEND_BOTTOM_SINGLE_LINE_HEIGHT : 0\n    while (i < len) {\n        var menu = main[i++];\n\n        // generate an entry at the main menu\n\n        var menuid = NETDATA.name2id('menu_' + menu);\n        sidebar += '<li class=\"\"><a href=\"#' + menuid + '\" onClick=\"return scrollToId(\\'' + menuid + '\\');\">' + menus[menu].icon + ' ' + menus[menu].title + '</a><ul class=\"nav\">';\n        html += '<div role=\"section\" class=\"dashboard-section\"><div role=\"sectionhead\"><h1 id=\"' + menuid + '\" role=\"heading\">' + menus[menu].icon + ' ' + menus[menu].title + '</h1></div><div role=\"section\"  class=\"dashboard-subsection\">';\n\n        if (menus[menu].info !== null) {\n            html += menus[menu].info;\n        }\n\n        // console.log(' >> ' + menu + ' (' + menus[menu].priority + '): ' + menus[menu].title);\n\n        var shtml = '';\n        var mhead = '<div class=\"netdata-chart-row\">' + mainhead;\n        mainhead = '';\n\n        // sort the submenus of this menu\n        var sub = sortObjectByPriority(menus[menu].submenus);\n        var si = 0, slen = sub.length;\n        while (si < slen) {\n            var submenu = sub[si++];\n\n            // generate an entry at the submenu\n            var submenuid = NETDATA.name2id('menu_' + menu + '_submenu_' + submenu);\n            sidebar += '<li class><a href=\"#' + submenuid + '\" onClick=\"return scrollToId(\\'' + submenuid + '\\');\">' + menus[menu].submenus[submenu].title + '</a></li>';\n            shtml += '<div role=\"section\" class=\"dashboard-section-container\" id=\"' + submenuid + '\"><h2 id=\"' + submenuid + '\" class=\"netdata-chart-alignment\" role=\"heading\">' + menus[menu].submenus[submenu].title + '</h2>';\n\n            if (menus[menu].submenus[submenu].info !== null) {\n                shtml += '<div class=\"dashboard-submenu-info netdata-chart-alignment\" role=\"document\">' + menus[menu].submenus[submenu].info + '</div>';\n            }\n\n            var head = '<div class=\"netdata-chart-row\">';\n            var chtml = '';\n\n            // console.log('    \\------- ' + submenu + ' (' + menus[menu].submenus[submenu].priority + '): ' + menus[menu].submenus[submenu].title);\n\n            // sort the charts in this submenu of this menu\n            menus[menu].submenus[submenu].charts.sort(prioritySort);\n            var ci = 0, clen = menus[menu].submenus[submenu].charts.length;\n            while (ci < clen) {\n                var chart = menus[menu].submenus[submenu].charts[ci++];\n\n                // generate the submenu heading charts\n                mhead += generateHeadCharts('mainheads', chart, duration);\n                head += generateHeadCharts('heads', chart, duration);\n\n                function chartCommonMin(family, context, units) {\n                    var x = netdataDashboard.anyAttribute(netdataDashboard.context, 'commonMin', context, undefined);\n                    if (typeof x !== 'undefined') {\n                        return ' data-common-min=\"' + family + '/' + context + '/' + units + '\"';\n                    } else {\n                        return '';\n                    }\n                }\n\n                function chartCommonMax(family, context, units) {\n                    var x = netdataDashboard.anyAttribute(netdataDashboard.context, 'commonMax', context, undefined);\n                    if (typeof x !== 'undefined') {\n                        return ' data-common-max=\"' + family + '/' + context + '/' + units + '\"';\n                    } else {\n                        return '';\n                    }\n                }\n\n                // generate the chart\n                if (urlOptions.mode === 'print') {\n                    chtml += '<div role=\"row\" class=\"dashboard-print-row\">';\n                }\n\n                const chartHeight = netdataDashboard.contextHeight(chart.context, options.chartsHeight)\n                    + chartAdditionalHeight;\n\n                chtml += '<div class=\"netdata-chartblock-container\" style=\"width: ' + pcent_width.toString() + '%;\">' + netdataDashboard.contextInfo(chart.context) + '<div class=\"netdata-container\" id=\"chart_' + NETDATA.name2id(chart.id) + '\" data-netdata=\"' + chart.id + '\"'\n                  + ' data-width=\"100%\"'\n                  + ' data-height=\"' + chartHeight.toString() + 'px\"'\n                  + ' data-dygraph-valuerange=\"' + netdataDashboard.contextValueRange(chart.context) + '\"'\n                  + ' data-id=\"' + NETDATA.name2id(options.hostname + '/' + chart.id) + '\"'\n                  + ' data-colors=\"' + netdataDashboard.anyAttribute(netdataDashboard.context, 'colors', chart.context, '') + '\"'\n                  + ' data-decimal-digits=\"' + netdataDashboard.contextDecimalDigits(chart.context, -1) + '\"'\n                  + (hasChartsOnBottom ? ' data-legend-position=\"bottom\"' : '')\n                  + chartCommonMin(chart.family, chart.context, chart.units)\n                  + chartCommonMax(chart.family, chart.context, chart.units)\n                  + ' role=\"application\"></div></div>';\n\n                if (urlOptions.mode === 'print') {\n                    chtml += '</div>';\n                }\n            }\n\n            head += '</div>';\n            shtml += head + chtml + '</div>';\n        }\n\n        mhead += '</div>';\n        sidebar += '</ul></li>';\n        html += mhead + shtml + '</div></div><hr role=\"separator\"/>';\n    }\n\n    const isMemoryModeDbEngine = data.memory_mode === \"dbengine\";\n\n    sidebar += '<li class=\"\" style=\"padding-top:15px;\"><a href=\"https://learn.netdata.cloud/docs/agent/collectors/quickstart/\" target=\"_blank\"><i class=\"fas fa-plus\"></i> Add more charts</a></li>';\n    sidebar += '<li class=\"\"><a href=\"https://learn.netdata.cloud/docs/agent/health/quickstart/\" target=\"_blank\"><i class=\"fas fa-plus\"></i> Add more alarms</a></li>';\n    sidebar += '<li class=\"\" style=\"margin:20px;color:#666;\"><small>Every ' +\n      ((data.update_every === 1) ? 'second' : data.update_every.toString() + ' seconds') + ', ' +\n      'Netdata collects <strong>' + data.dimensions_count.toLocaleString() + '</strong> metrics on ' +\n      data.hostname.toString() + ', presents them in <strong>' +\n      data.charts_count.toLocaleString() + '</strong> charts' +\n      (isMemoryModeDbEngine ? '' : ',') + // oxford comma\n      ' and monitors them with <strong>' +\n      data.alarms_count.toLocaleString() + '</strong> alarms.';\n\n    if (!isMemoryModeDbEngine) {\n        sidebar += '<br />&nbsp;<br />Get more history by ' +\n          '<a href=\"https://learn.netdata.cloud/guides/longer-metrics-storage#using-the-round-robin-database\" target=_blank>configuring Netdata\\'s <strong>history</strong></a> or switching to the <a href=\"https://learn.netdata.cloud/docs/agent/database/engine\" target=_blank>database engine.</a>';\n    }\n\n    sidebar += '<br/>&nbsp;<br/><strong>netdata</strong><br/>' + data.version.toString() + '</small>';\n\n    sidebar += '</li>'\n\n    sidebar += '<li id=\"sidebar-end-portal-container\"></li>'\n\n\n    sidebar += '</ul>';\n    div.innerHTML = html;\n    document.getElementById('sidebar').innerHTML = sidebar;\n\n    if (urlOptions.highlight === true) {\n        reduxStore.dispatch(setGlobalChartUnderlayAction({\n            after: urlOptions.highlight_after,\n            before: urlOptions.highlight_before,\n        }))\n    }\n\n    if (urlOptions.mode === 'print') {\n        printPage();\n    } else {\n        finalizePage();\n    }\n}\n\nfunction renderChartsAndMenu(data) {\n    options.menus = {};\n    options.submenu_names = {};\n\n    var menus = options.menus;\n    var charts = data.charts;\n    var m, menu_key;\n\n    for (var c in charts) {\n        if (!charts.hasOwnProperty(c)) {\n            continue;\n        }\n\n        var chart = charts[c];\n        enrichChartData(chart);\n        m = chart.menu;\n\n        // create the menu\n        if (typeof menus[m] === 'undefined') {\n            menus[m] = {\n                menu_pattern: chart.menu_pattern,\n                priority: chart.priority,\n                submenus: {},\n                title: netdataDashboard.menuTitle(chart),\n                icon: netdataDashboard.menuIcon(chart),\n                info: netdataDashboard.menuInfo(chart),\n                height: netdataDashboard.menuHeight(chart) * options.chartsHeight\n            };\n        } else {\n            if (typeof (menus[m].menu_pattern) === 'undefined') {\n                menus[m].menu_pattern = chart.menu_pattern;\n            }\n\n            if (chart.priority < menus[m].priority) {\n                menus[m].priority = chart.priority;\n            }\n        }\n\n        menu_key = (typeof (menus[m].menu_pattern) !== 'undefined') ? menus[m].menu_pattern : m;\n\n        // create the submenu\n        if (typeof menus[m].submenus[chart.submenu] === 'undefined') {\n            menus[m].submenus[chart.submenu] = {\n                priority: chart.priority,\n                charts: [],\n                title: null,\n                info: netdataDashboard.submenuInfo(menu_key, chart.submenu),\n                height: netdataDashboard.submenuHeight(menu_key, chart.submenu, menus[m].height)\n            };\n        } else {\n            if (chart.priority < menus[m].submenus[chart.submenu].priority) {\n                menus[m].submenus[chart.submenu].priority = chart.priority;\n            }\n        }\n\n        // index the chart in the menu/submenu\n        menus[m].submenus[chart.submenu].charts.push(chart);\n    }\n\n    // propagate the descriptive subname given to QoS\n    // to all the other submenus with the same name\n    for (var m in menus) {\n        if (!menus.hasOwnProperty(m)) {\n            continue;\n        }\n\n        for (var s in menus[m].submenus) {\n            if (!menus[m].submenus.hasOwnProperty(s)) {\n                continue;\n            }\n\n            // set the family using a name\n            if (typeof options.submenu_names[s] !== 'undefined') {\n                menus[m].submenus[s].title = s + ' (' + options.submenu_names[s] + ')';\n            } else {\n                menu_key = (typeof (menus[m].menu_pattern) !== 'undefined') ? menus[m].menu_pattern : m;\n                menus[m].submenus[s].title = netdataDashboard.submenuTitle(menu_key, s);\n            }\n        }\n    }\n\n    renderPage(menus, data);\n}\n\n// ----------------------------------------------------------------------------\n\nexport const handleLoadJs = (promise, library, callback) => promise\n    .catch((e) => {\n        console.warn('error', e);\n        alert(`Cannot load required JS library: ${library}`)\n    })\n    .then(() => {\n        callback()\n    })\n\n\nfunction loadClipboard(callback) {\n    handleLoadJs(\n      import(\"clipboard-polyfill\").then((clipboard) => {\n          window.clipboard = clipboard\n      }),\n      \"clipboard-polyfill\",\n      callback,\n      )\n}\n\nfunction loadBootstrapTable(callback) {\n    handleLoadJs(\n      Promise.all([\n        import(\"bootstrap-table\").then(() => (\n          import('bootstrap-table/dist/extensions/export/bootstrap-table-export.min')\n          )),\n        import(\"tableexport.jquery.plugin\")\n      ]),\n      \"bootstrap-table\",\n      callback,\n    )\n}\n\nfunction loadBootstrapSlider(callback) {\n    handleLoadJs(\n      Promise.all([\n        import(\"bootstrap-slider\").then(({ default: slider }) => {\n            window.Slider = slider\n        }),\n        import(\"bootstrap-slider/dist/css/bootstrap-slider.min.css\"),\n      ]),\n      \"bootstrap-slider\",\n      callback,\n    )\n}\n\nfunction loadLzString(callback) {\n    handleLoadJs(import(\"lz-string\"), \"lz-string\", callback)\n}\n\nfunction loadPako(callback) {\n    handleLoadJs(\n      import(\"pako\").then(({ default: pako }) => {\n          window.pako = pako\n      }),\n      \"pako\",\n      callback,\n    )\n}\n\n// ----------------------------------------------------------------------------\n\nwindow.clipboardCopy = text => {\n    clipboard.writeText(text);\n};\n\nwindow.clipboardCopyBadgeEmbed = url => {\n    clipboard.writeText('<embed src=\"' + url + '\" type=\"image/svg+xml\" height=\"20\"/>');\n};\n\n// ----------------------------------------------------------------------------\n\nfunction alarmsUpdateModal() {\n    var active = '<h3>Raised Alarms</h3><table class=\"table\">';\n    var all = '<h3>All Running Alarms</h3><div class=\"panel-group\" id=\"alarms_all_accordion\" role=\"tablist\" aria-multiselectable=\"true\">';\n    var footer = '<hr/><a href=\"https://github.com/netdata/netdata/tree/master/web/api/badges#netdata-badges\" target=\"_blank\">netdata badges</a> refresh automatically. Their color indicates the state of the alarm: <span style=\"color: #e05d44\"><b>&nbsp;red&nbsp;</b></span> is critical, <span style=\"color:#fe7d37\"><b>&nbsp;orange&nbsp;</b></span> is warning, <span style=\"color: #4c1\"><b>&nbsp;bright green&nbsp;</b></span> is ok, <span style=\"color: #9f9f9f\"><b>&nbsp;light grey&nbsp;</b></span> is undefined (i.e. no data or no status), <span style=\"color: #000\"><b>&nbsp;black&nbsp;</b></span> is not initialized. You can copy and paste their URLs to embed them in any web page.<br/>netdata can send notifications for these alarms. Check <a href=\"https://github.com/netdata/netdata/blob/master/health/notifications/health_alarm_notify.conf\" target=\"_blank\">this configuration file</a> for more information.';\n\n    loadClipboard(function () {\n    });\n\n\n    const callback = (data) => {\n        options.alarm_families = [];\n\n        if (data === null) {\n            document.getElementById('alarms_active').innerHTML =\n              document.getElementById('alarms_all').innerHTML =\n                document.getElementById('alarms_log').innerHTML =\n                  'failed to load alarm data!';\n            return;\n        }\n\n        function alarmid4human(id) {\n            if (id === 0) {\n                return '-';\n            }\n\n            return id.toString();\n        }\n\n        function timestamp4human(timestamp, space) {\n            if (timestamp === 0) {\n                return '-';\n            }\n\n            if (typeof space === 'undefined') {\n                space = '&nbsp;';\n            }\n\n            var t = new Date(timestamp * 1000);\n\n            // commented out to always have date+time, to have consistent exports\n            // var now = new Date();\n\n            // if (t.toDateString() === now.toDateString()) {\n            //     return t.toLocaleTimeString();\n            // }\n\n            return t.toLocaleDateString() + space + t.toLocaleTimeString();\n        }\n\n        function alarm_lookup_explain(alarm, chart) {\n            var dimensions = ' of all values ';\n\n            if (chart.dimensions.length > 1) {\n                dimensions = ' of the sum of all dimensions ';\n            }\n\n            if (typeof alarm.lookup_dimensions !== 'undefined') {\n                var d = alarm.lookup_dimensions.replace(/|/g, ',');\n                var x = d.split(',');\n                if (x.length > 1) {\n                    dimensions = 'of the sum of dimensions <code>' + alarm.lookup_dimensions + '</code> ';\n                } else {\n                    dimensions = 'of all values of dimension <code>' + alarm.lookup_dimensions + '</code> ';\n                }\n            }\n\n            return '<code>' + alarm.lookup_method + '</code> '\n              + dimensions + ', of chart <code>' + alarm.chart + '</code>'\n              + ', starting <code>' + seconds4human(alarm.lookup_after + alarm.lookup_before, { space: '&nbsp;' }) + '</code> and up to <code>' + seconds4human(alarm.lookup_before, { space: '&nbsp;' }) + '</code>'\n              + ((alarm.lookup_options) ? (', with options <code>' + alarm.lookup_options.replace(/ /g, ',&nbsp;') + '</code>') : '')\n              + '.';\n        }\n\n        function alarm_to_html(alarm, full) {\n            var chart = options.data.charts[alarm.chart];\n            if (typeof (chart) === 'undefined') {\n                chart = options.data.charts_by_name[alarm.chart];\n                if (typeof (chart) === 'undefined') {\n                    // this means the charts loaded are incomplete\n                    // probably netdata was restarted and more alarms\n                    // are now available.\n                    console.log('Cannot find chart ' + alarm.chart + ', you probably need to refresh the page.');\n                    return '';\n                }\n            }\n\n            var has_alarm = (typeof alarm.warn !== 'undefined' || typeof alarm.crit !== 'undefined');\n            var badge_url = `${serverDefault}/api/v1/badge.svg?chart=${alarm.chart}&alarm=${alarm.name}&refresh=auto`;\n\n            var action_buttons = '<br/>&nbsp;<br/>role: <b>' + alarm.recipient + '</b><br/>&nbsp;<br/>'\n              + '<div class=\"action-button ripple\" title=\"click to scroll the dashboard to the chart of this alarm\" data-toggle=\"tooltip\" data-placement=\"bottom\" onClick=\"scrollToChartAfterHidingModal(\\'' + alarm.chart + '\\', ' + alarm.last_status_change * 1000 + ', \\'' + alarm.status + '\\'); $(\\'#alarmsModal\\').modal(\\'hide\\'); return false;\"><i class=\"fab fa-periscope\"></i></div>'\n              + '<div class=\"action-button ripple\" title=\"click to copy to the clipboard the URL of this badge\" data-toggle=\"tooltip\" data-placement=\"bottom\" onClick=\"clipboardCopy(\\'' + badge_url + '\\'); return false;\"><i class=\"far fa-copy\"></i></div>'\n              + '<div class=\"action-button ripple\" title=\"click to copy to the clipboard an auto-refreshing <code>embed</code> html element for this badge\" data-toggle=\"tooltip\" data-placement=\"bottom\" onClick=\"clipboardCopyBadgeEmbed(\\'' + badge_url + '\\'); return false;\"><i class=\"fas fa-copy\"></i></div>';\n\n            var html = '<tr><td class=\"text-center\" style=\"vertical-align: middle; word-break: break-word;\" width=\"40%\"><b>' + alarm.chart + '</b><br/>&nbsp;<br/><embed src=\"' + badge_url + '\" type=\"image/svg+xml\" height=\"20\"/><br/>&nbsp;<br/><span style=\"font-size: 18px;\">' + alarm.info + '</span>' + action_buttons + '</td>'\n              + '<td><table class=\"table\">'\n              + ((typeof alarm.warn !== 'undefined') ? ('<tr><td width=\"10%\" style=\"text-align:right\">warning&nbsp;when</td><td><span style=\"font-family: monospace; color:#fe7d37; font-weight: bold;\">' + alarm.warn + '</span></td></tr>') : '')\n              + ((typeof alarm.crit !== 'undefined') ? ('<tr><td width=\"10%\" style=\"text-align:right\">critical&nbsp;when</td><td><span style=\"font-family: monospace; color: #e05d44; font-weight: bold;\">' + alarm.crit + '</span></td></tr>') : '');\n\n            if (full === true) {\n                var units = chart.units;\n                if (units === '%') {\n                    units = '&#37;';\n                }\n\n                html += ((typeof alarm.lookup_after !== 'undefined') ? ('<tr><td width=\"10%\" style=\"text-align:right\">db&nbsp;lookup</td><td>' + alarm_lookup_explain(alarm, chart) + '</td></tr>') : '')\n                  + ((typeof alarm.calc !== 'undefined') ? ('<tr><td width=\"10%\" style=\"text-align:right\">calculation</td><td><span style=\"font-family: monospace;\">' + alarm.calc + '</span></td></tr>') : '')\n                  + ((chart.green !== null) ? ('<tr><td width=\"10%\" style=\"text-align:right\">green&nbsp;threshold</td><td><code>' + chart.green + ' ' + units + '</code></td></tr>') : '')\n                  + ((chart.red !== null) ? ('<tr><td width=\"10%\" style=\"text-align:right\">red&nbsp;threshold</td><td><code>' + chart.red + ' ' + units + '</code></td></tr>') : '');\n            }\n\n            if (alarm.warn_repeat_every > 0) {\n                html += '<tr><td width=\"10%\" style=\"text-align:right\">repeat&nbsp;warning</td><td>' + seconds4human(alarm.warn_repeat_every) + '</td></tr>';\n            }\n\n            if (alarm.crit_repeat_every > 0) {\n                html += '<tr><td width=\"10%\" style=\"text-align:right\">repeat&nbsp;critical</td><td>' + seconds4human(alarm.crit_repeat_every) + '</td></tr>';\n            }\n\n            var delay = '';\n            if ((alarm.delay_up_duration > 0 || alarm.delay_down_duration > 0) && alarm.delay_multiplier !== 0 && alarm.delay_max_duration > 0) {\n                if (alarm.delay_up_duration === alarm.delay_down_duration) {\n                    delay += '<small><br/>hysteresis ' + seconds4human(alarm.delay_up_duration, {\n                        space: '&nbsp;',\n                        negative_suffix: ''\n                    });\n                } else {\n                    delay = '<small><br/>hysteresis ';\n                    if (alarm.delay_up_duration > 0) {\n                        delay += 'on&nbsp;escalation&nbsp;<code>' + seconds4human(alarm.delay_up_duration, {\n                            space: '&nbsp;',\n                            negative_suffix: ''\n                        }) + '</code>, ';\n                    }\n                    if (alarm.delay_down_duration > 0) {\n                        delay += 'on&nbsp;recovery&nbsp;<code>' + seconds4human(alarm.delay_down_duration, {\n                            space: '&nbsp;',\n                            negative_suffix: ''\n                        }) + '</code>, ';\n                    }\n                }\n                if (alarm.delay_multiplier !== 1.0) {\n                    delay += 'multiplied&nbsp;by&nbsp;<code>' + alarm.delay_multiplier.toString() + '</code>';\n                    delay += ',&nbsp;up&nbsp;to&nbsp;<code>' + seconds4human(alarm.delay_max_duration, {\n                        space: '&nbsp;',\n                        negative_suffix: ''\n                    }) + '</code>';\n                }\n                delay += '</small>';\n            }\n\n            html += '<tr><td width=\"10%\" style=\"text-align:right\">check&nbsp;every</td><td>' + seconds4human(alarm.update_every, {\n                  space: '&nbsp;',\n                  negative_suffix: ''\n              }) + '</td></tr>'\n              + ((has_alarm === true) ? ('<tr><td width=\"10%\" style=\"text-align:right\">execute</td><td><span style=\"font-family: monospace;\">' + alarm.exec + '</span>' + delay + '</td></tr>') : '')\n              + '<tr><td width=\"10%\" style=\"text-align:right\">source</td><td><span style=\"font-family: monospace; word-break: break-word;\">' + alarm.source + '</span></td></tr>'\n              + '</table></td></tr>';\n\n            return html;\n        }\n\n        function alarm_family_show(id) {\n            var html = '<table class=\"table\">';\n            var family = options.alarm_families[id];\n            var len = family.arr.length;\n            while (len--) {\n                var alarm = family.arr[len];\n                html += alarm_to_html(alarm, true);\n            }\n            html += '</table>';\n\n            $('#alarm_all_' + id.toString()).html(html);\n            enableTooltipsAndPopovers();\n        }\n\n        // find the proper family of each alarm\n        var x, family, alarm;\n        var count_active = 0;\n        var count_all = 0;\n        var families = {};\n        var families_sort = [];\n        for (x in data.alarms) {\n            if (!data.alarms.hasOwnProperty(x)) {\n                continue;\n            }\n\n            alarm = data.alarms[x];\n            family = alarm.family;\n\n            // find the chart\n            var chart = options.data.charts[alarm.chart];\n            if (typeof chart === 'undefined') {\n                chart = options.data.charts_by_name[alarm.chart];\n            }\n\n            // not found - this should never happen!\n            if (typeof chart === 'undefined') {\n                console.log('WARNING: alarm ' + x + ' is linked to chart ' + alarm.chart + ', which is not found in the list of chart got from the server.');\n                chart = { priority: 9999999 };\n            }\n            else if (typeof chart.menu !== 'undefined' && typeof chart.submenu !== 'undefined')\n            // the family based on the chart\n            {\n                family = chart.menu + ' - ' + chart.submenu;\n            }\n\n            if (typeof families[family] === 'undefined') {\n                families[family] = {\n                    name: family,\n                    arr: [],\n                    priority: chart.priority\n                };\n\n                families_sort.push(families[family]);\n            }\n\n            if (chart.priority < families[family].priority) {\n                families[family].priority = chart.priority;\n            }\n\n            families[family].arr.unshift(alarm);\n        }\n\n        // sort the families, like the dashboard menu does\n        var families_sorted = families_sort.sort(function (a, b) {\n            if (a.priority < b.priority) {\n                return -1;\n            }\n            if (a.priority > b.priority) {\n                return 1;\n            }\n            return naturalSortCompare(a.name, b.name);\n        });\n\n        var i = 0;\n        var fc = 0;\n        var len = families_sorted.length;\n        while (len--) {\n            family = families_sorted[i++].name;\n            var active_family_added = false;\n\n            var expanded = 'false';\n            var collapsed = 'class=\"collapsed\"';\n            var cin = '';\n\n            // uncomment if first family needs to be expanded by default\n            // var expanded = 'true';\n            // var collapsed = '';\n            // var cin = 'in';\n\n            if (fc !== 0) {\n                all += \"</table></div></div></div>\";\n\n                // uncomment if first family needs to be expanded by default\n                // expanded = 'false';\n                // collapsed = 'class=\"collapsed\"';\n                // cin = '';\n            }\n\n            all += '<div class=\"panel panel-default\"><div class=\"panel-heading\" role=\"tab\" id=\"alarm_all_heading_' + fc.toString() + '\"><h4 class=\"panel-title\"><a ' + collapsed + ' role=\"button\" data-toggle=\"collapse\" data-parent=\"#alarms_all_accordion\" href=\"#alarm_all_' + fc.toString() + '\" aria-expanded=\"' + expanded + '\" aria-controls=\"alarm_all_' + fc.toString() + '\">' + family.toString() + '</a></h4></div><div id=\"alarm_all_' + fc.toString() + '\" class=\"panel-collapse collapse ' + cin + '\" role=\"tabpanel\" aria-labelledby=\"alarm_all_heading_' + fc.toString() + '\" data-alarm-id=\"' + fc.toString() + '\"><div class=\"panel-body\" id=\"alarm_all_body_' + fc.toString() + '\">';\n\n            options.alarm_families[fc] = families[family];\n\n            fc++;\n\n            var arr = families[family].arr;\n            var c = arr.length;\n            while (c--) {\n                alarm = arr[c];\n                if (alarm.status === 'WARNING' || alarm.status === 'CRITICAL') {\n                    if (!active_family_added) {\n                        active_family_added = true;\n                        active += '<tr><th class=\"text-center\" colspan=\"2\"><h4>' + family + '</h4></th></tr>';\n                    }\n                    count_active++;\n                    active += alarm_to_html(alarm, true);\n                }\n\n                count_all++;\n            }\n        }\n        active += \"</table>\";\n        if (families_sorted.length > 0) {\n            all += \"</div></div></div>\";\n        }\n        all += \"</div>\";\n\n        if (!count_active) {\n            active += '<div style=\"width:100%; height: 100px; text-align: center;\"><span style=\"font-size: 50px;\"><i class=\"fas fa-thumbs-up\"></i></span><br/>Everything is normal. No raised alarms.</div>';\n        } else {\n            active += footer;\n        }\n\n        if (!count_all) {\n            all += \"<h4>No alarms are running in this system.</h4>\";\n        } else {\n            all += footer;\n        }\n\n        document.getElementById('alarms_active').innerHTML = active;\n        document.getElementById('alarms_all').innerHTML = all;\n        enableTooltipsAndPopovers();\n\n        if (families_sorted.length > 0) {\n            alarm_family_show(0);\n        }\n\n        // register bootstrap events\n        var $accordion = $('#alarms_all_accordion');\n        $accordion.on('show.bs.collapse', function (d) {\n            var target = $(d.target);\n            var id = $(target).data('alarm-id');\n            alarm_family_show(id);\n        });\n        $accordion.on('hidden.bs.collapse', function (d) {\n            var target = $(d.target);\n            var id = $(target).data('alarm-id');\n            $('#alarm_all_' + id.toString()).html('');\n        });\n\n        document.getElementById('alarms_log').innerHTML = '<h3>Alarm Log</h3><table id=\"alarms_log_table\"></table>';\n\n        loadBootstrapTable(function () {\n            $('#alarms_log_table').bootstrapTable({\n                url: `${serverDefault}/api/v1/alarm_log?all`,\n                cache: false,\n                pagination: true,\n                pageSize: 10,\n                showPaginationSwitch: false,\n                search: true,\n                searchTimeOut: 300,\n                searchAlign: 'left',\n                showColumns: true,\n                showExport: true,\n                exportDataType: 'all',\n                exportOptions: {\n                    fileName: 'netdata_alarm_log'\n                },\n                onClickRow: function (row) {\n                    scrollToChartAfterHidingModal(row.chart, row.when * 1000, row.status);\n                    $('#alarmsModal').modal('hide');\n                    return false;\n                },\n                rowStyle: function (row) {\n                    switch (row.status) {\n                        case 'CRITICAL':\n                            return { classes: 'danger' };\n                            break;\n                        case 'WARNING':\n                            return { classes: 'warning' };\n                            break;\n                        case 'UNDEFINED':\n                            return { classes: 'info' };\n                            break;\n                        case 'CLEAR':\n                            return { classes: 'success' };\n                            break;\n                    }\n                    return {};\n                },\n                showFooter: false,\n                showHeader: true,\n                showRefresh: true,\n                showToggle: false,\n                sortable: true,\n                silentSort: false,\n                columns: [\n                    {\n                        field: 'when',\n                        title: 'Event Date',\n                        valign: 'middle',\n                        titleTooltip: 'The date and time the even took place',\n                        formatter: function (value, row, index) {\n                            void (row);\n                            void (index);\n                            return timestamp4human(value, ' ');\n                        },\n                        align: 'center',\n                        switchable: false,\n                        sortable: true\n                    },\n                    {\n                        field: 'hostname',\n                        title: 'Host',\n                        valign: 'middle',\n                        titleTooltip: 'The host that generated this event',\n                        align: 'center',\n                        visible: false,\n                        sortable: true\n                    },\n                    {\n                        field: 'unique_id',\n                        title: 'Unique ID',\n                        titleTooltip: 'The host unique ID for this event',\n                        formatter: function (value, row, index) {\n                            void (row);\n                            void (index);\n                            return alarmid4human(value);\n                        },\n                        align: 'center',\n                        valign: 'middle',\n                        visible: false,\n                        sortable: true\n                    },\n                    {\n                        field: 'alarm_id',\n                        title: 'Alarm ID',\n                        titleTooltip: 'The ID of the alarm that generated this event',\n                        formatter: function (value, row, index) {\n                            void (row);\n                            void (index);\n                            return alarmid4human(value);\n                        },\n                        align: 'center',\n                        valign: 'middle',\n                        visible: false,\n                        sortable: true\n                    },\n                    {\n                        field: 'alarm_event_id',\n                        title: 'Alarm Event ID',\n                        titleTooltip: 'The incremental ID of this event for the given alarm',\n                        formatter: function (value, row, index) {\n                            void (row);\n                            void (index);\n                            return alarmid4human(value);\n                        },\n                        align: 'center',\n                        valign: 'middle',\n                        visible: false,\n                        sortable: true\n                    },\n                    {\n                        field: 'chart',\n                        title: 'Chart',\n                        titleTooltip: 'The chart the alarm is attached to',\n                        align: 'center',\n                        valign: 'middle',\n                        switchable: false,\n                        sortable: true\n                    },\n                    {\n                        field: 'family',\n                        title: 'Family',\n                        titleTooltip: 'The family of the chart the alarm is attached to',\n                        align: 'center',\n                        valign: 'middle',\n                        visible: false,\n                        sortable: true\n                    },\n                    {\n                        field: 'name',\n                        title: 'Alarm',\n                        titleTooltip: 'The alarm name that generated this event',\n                        formatter: function (value, row, index) {\n                            void (row);\n                            void (index);\n                            return value.toString().replace(/_/g, ' ');\n                        },\n                        align: 'center',\n                        valign: 'middle',\n                        switchable: false,\n                        sortable: true\n                    },\n                    {\n                        field: 'value_string',\n                        title: 'Friendly Value',\n                        titleTooltip: 'The value of the alarm, that triggered this event',\n                        align: 'right',\n                        valign: 'middle',\n                        sortable: true\n                    },\n                    {\n                        field: 'old_value_string',\n                        title: 'Friendly Old Value',\n                        titleTooltip: 'The value of the alarm, just before this event',\n                        align: 'right',\n                        valign: 'middle',\n                        visible: false,\n                        sortable: true\n                    },\n                    {\n                        field: 'old_value',\n                        title: 'Old Value',\n                        titleTooltip: 'The value of the alarm, just before this event',\n                        formatter: function (value, row, index) {\n                            void (row);\n                            void (index);\n                            return ((value !== null) ? Math.round(value * 100) / 100 : 'NaN').toString();\n                        },\n                        align: 'center',\n                        valign: 'middle',\n                        visible: false,\n                        sortable: true\n                    },\n                    {\n                        field: 'value',\n                        title: 'Value',\n                        titleTooltip: 'The value of the alarm, that triggered this event',\n                        formatter: function (value, row, index) {\n                            void (row);\n                            void (index);\n                            return ((value !== null) ? Math.round(value * 100) / 100 : 'NaN').toString();\n                        },\n                        align: 'right',\n                        valign: 'middle',\n                        visible: false,\n                        sortable: true\n                    },\n                    {\n                        field: 'units',\n                        title: 'Units',\n                        titleTooltip: 'The units of the value of the alarm',\n                        align: 'left',\n                        valign: 'middle',\n                        visible: false,\n                        sortable: true\n                    },\n                    {\n                        field: 'old_status',\n                        title: 'Old Status',\n                        titleTooltip: 'The status of the alarm, just before this event',\n                        align: 'center',\n                        valign: 'middle',\n                        visible: false,\n                        sortable: true\n                    },\n                    {\n                        field: 'status',\n                        title: 'Status',\n                        titleTooltip: 'The status of the alarm, that was set due to this event',\n                        align: 'center',\n                        valign: 'middle',\n                        switchable: false,\n                        sortable: true\n                    },\n                    {\n                        field: 'duration',\n                        title: 'Last Duration',\n                        titleTooltip: 'The duration the alarm was at its previous state, just before this event',\n                        formatter: function (value, row, index) {\n                            void (row);\n                            void (index);\n                            return seconds4human(value, { negative_suffix: '', space: ' ', now: 'no time' });\n                        },\n                        align: 'center',\n                        valign: 'middle',\n                        visible: false,\n                        sortable: true\n                    },\n                    {\n                        field: 'non_clear_duration',\n                        title: 'Raised Duration',\n                        titleTooltip: 'The duration the alarm was raised, just before this event',\n                        formatter: function (value, row, index) {\n                            void (row);\n                            void (index);\n                            return seconds4human(value, { negative_suffix: '', space: ' ', now: 'no time' });\n                        },\n                        align: 'center',\n                        valign: 'middle',\n                        visible: false,\n                        sortable: true\n                    },\n                    {\n                        field: 'recipient',\n                        title: 'Recipient',\n                        titleTooltip: 'The recipient of this event',\n                        align: 'center',\n                        valign: 'middle',\n                        visible: false,\n                        sortable: true\n                    },\n                    {\n                        field: 'processed',\n                        title: 'Processed Status',\n                        titleTooltip: 'True when this event is processed',\n                        formatter: function (value, row, index) {\n                            void (row);\n                            void (index);\n\n                            if (value === true) {\n                                return 'DONE';\n                            } else {\n                                return 'PENDING';\n                            }\n                        },\n                        align: 'center',\n                        valign: 'middle',\n                        visible: false,\n                        sortable: true\n                    },\n                    {\n                        field: 'updated',\n                        title: 'Updated Status',\n                        titleTooltip: 'True when this event has been updated by another event',\n                        formatter: function (value, row, index) {\n                            void (row);\n                            void (index);\n\n                            if (value === true) {\n                                return 'UPDATED';\n                            } else {\n                                return 'CURRENT';\n                            }\n                        },\n                        align: 'center',\n                        valign: 'middle',\n                        visible: false,\n                        sortable: true\n                    },\n                    {\n                        field: 'updated_by_id',\n                        title: 'Updated By ID',\n                        titleTooltip: 'The unique ID of the event that obsoleted this one',\n                        formatter: function (value, row, index) {\n                            void (row);\n                            void (index);\n                            return alarmid4human(value);\n                        },\n                        align: 'center',\n                        valign: 'middle',\n                        visible: false,\n                        sortable: true\n                    },\n                    {\n                        field: 'updates_id',\n                        title: 'Updates ID',\n                        titleTooltip: 'The unique ID of the event obsoleted because of this event',\n                        formatter: function (value, row, index) {\n                            void (row);\n                            void (index);\n                            return alarmid4human(value);\n                        },\n                        align: 'center',\n                        valign: 'middle',\n                        visible: false,\n                        sortable: true\n                    },\n                    {\n                        field: 'exec',\n                        title: 'Script',\n                        titleTooltip: 'The script to handle the event notification',\n                        align: 'center',\n                        valign: 'middle',\n                        visible: false,\n                        sortable: true\n                    },\n                    {\n                        field: 'exec_run',\n                        title: 'Script Run At',\n                        titleTooltip: 'The date and time the script has been ran',\n                        formatter: function (value, row, index) {\n                            void (row);\n                            void (index);\n                            return timestamp4human(value, ' ');\n                        },\n                        align: 'center',\n                        valign: 'middle',\n                        visible: false,\n                        sortable: true\n                    },\n                    {\n                        field: 'exec_code',\n                        title: 'Script Return Value',\n                        titleTooltip: 'The return code of the script',\n                        formatter: function (value, row, index) {\n                            void (row);\n                            void (index);\n\n                            if (value === 0) {\n                                return 'OK (returned 0)';\n                            } else {\n                                return 'FAILED (with code ' + value.toString() + ')';\n                            }\n                        },\n                        align: 'center',\n                        valign: 'middle',\n                        visible: false,\n                        sortable: true\n                    },\n                    {\n                        field: 'delay',\n                        title: 'Script Delay',\n                        titleTooltip: 'The hysteresis of the notification',\n                        formatter: function (value, row, index) {\n                            void (row);\n                            void (index);\n\n                            return seconds4human(value, { negative_suffix: '', space: ' ', now: 'no time' });\n                        },\n                        align: 'center',\n                        valign: 'middle',\n                        visible: false,\n                        sortable: true\n                    },\n                    {\n                        field: 'delay_up_to_timestamp',\n                        title: 'Script Delay Run At',\n                        titleTooltip: 'The date and time the script should be run, after hysteresis',\n                        formatter: function (value, row, index) {\n                            void (row);\n                            void (index);\n                            return timestamp4human(value, ' ');\n                        },\n                        align: 'center',\n                        valign: 'middle',\n                        visible: false,\n                        sortable: true\n                    },\n                    {\n                        field: 'info',\n                        title: 'Description',\n                        titleTooltip: 'A short description of the alarm',\n                        align: 'center',\n                        valign: 'middle',\n                        visible: false,\n                        sortable: true\n                    },\n                    {\n                        field: 'source',\n                        title: 'Alarm Source',\n                        titleTooltip: 'The source of configuration of the alarm',\n                        align: 'center',\n                        valign: 'middle',\n                        visible: false,\n                        sortable: true\n                    }\n                ]\n            });\n            // console.log($('#alarms_log_table').bootstrapTable('getOptions'));\n        });\n    }\n\n    reduxStore.dispatch(fetchAllAlarmsAction.request({\n        callback,\n        serverDefault,\n    }))\n}\n\nfunction initializeDynamicDashboardWithData(data) {\n    if (data !== null) {\n        options.hostname = data.hostname;\n        options.data = data;\n        options.version = data.version;\n        options.release_channel = data.release_channel;\n        options.timezone = data.timezone;\n        netdataDashboard.os = data.os;\n\n        if (typeof data.hosts !== 'undefined') {\n            options.hosts = data.hosts;\n        }\n\n        // update the dashboard hostname\n        document.getElementById('netdataVersion').innerHTML = options.version;\n\n        // update the dashboard title\n        document.title = options.hostname + ' netdata dashboard';\n\n        // create a chart_by_name index\n        data.charts_by_name = {};\n        var charts = data.charts;\n        var x;\n        for (x in charts) {\n            if (!charts.hasOwnProperty(x)) {\n                continue;\n            }\n\n            var chart = charts[x];\n            data.charts_by_name[chart.name] = chart;\n        }\n\n        // render all charts\n        renderChartsAndMenu(data);\n    }\n}\n\n// an object to keep initialization configuration\n// needed due to the async nature of the XSS modal\nvar initializeConfig = {\n    url: null,\n    custom_info: true,\n};\n\n// will be removed when we'll transform dashboard_info.js into DSL\n// memoize so it's fetched only once\nconst loadDashboardInfo = memoizeWith(identity, () => (\n  $.ajax({\n      url: `${serverDefault}dashboard_info.js`,\n      cache: true,\n      dataType: 'script',\n      xhrFields: { withCredentials: true }, // required for the cookie\n  })\n  .fail(function () {\n      alert(`Cannot load required JS library: dashboard_info.js`);\n  })\n))\n\nfunction loadCustomDashboardInfo(url, callback) {\n    $.ajax({\n        url,\n        cache: true,\n        dataType: \"script\",\n        xhrFields: { withCredentials: true } // required for the cookie\n    })\n    .fail(function () {\n        alert(`Cannot load required JS library: ${url}`);\n    })\n    .always(function () {\n        $.extend(true, netdataDashboard, customDashboard);\n        callback();\n    })\n}\n\nfunction initializeChartsAndCustomInfo() {\n    loadDashboardInfo().then(() => {\n        // download all the charts the server knows\n        NETDATA.chartRegistry.downloadAll(initializeConfig.url, function (data) {\n            if (data !== null) {\n                reduxStore.dispatch(chartsMetadataRequestSuccess({ data }))\n                if (initializeConfig.custom_info === true && typeof data.custom_info !== 'undefined' && data.custom_info !== \"\" && window.netdataSnapshotData === null) {\n                    //console.log('loading custom dashboard decorations from server ' + initializeConfig.url);\n                    loadCustomDashboardInfo(serverDefault + data.custom_info, function () {\n                        initializeDynamicDashboardWithData(data);\n                    });\n                } else {\n                    //console.log('not loading custom dashboard decorations from server ' + initializeConfig.url);\n                    initializeDynamicDashboardWithData(data);\n                }\n            }\n        });\n    })\n}\n\nwindow.xssModalDisableXss = () => {\n    //console.log('disabling xss checks');\n    NETDATA.xss.enabled = false;\n    NETDATA.xss.enabled_for_data = false;\n    initializeConfig.custom_info = true;\n    initializeChartsAndCustomInfo();\n    return false;\n};\n\n\nwindow.xssModalKeepXss = () => {\n    //console.log('keeping xss checks');\n    NETDATA.xss.enabled = true;\n    NETDATA.xss.enabled_for_data = true;\n    initializeConfig.custom_info = false;\n    initializeChartsAndCustomInfo();\n    return false;\n};\n\nfunction initializeDynamicDashboard(newReduxStore) {\n    if (newReduxStore) {\n        reduxStore = newReduxStore\n\n        netdataPrepCallback()\n\n        initializeConfig.url = serverDefault;\n    }\n\n    if (typeof netdataCheckXSS !== 'undefined' && netdataCheckXSS === true) {\n        //$(\"#loadOverlay\").css(\"display\",\"none\");\n        document.getElementById('netdataXssModalServer').innerText = initializeConfig.url;\n        $('#xssModal').modal('show');\n    }  else {\n        initializeChartsAndCustomInfo();\n    }\n}\n\n// ----------------------------------------------------------------------------\n\nfunction versionLog(msg) {\n    document.getElementById('versionCheckLog').innerHTML = msg;\n}\n\n// New way of checking for updates, based only on versions\n\nfunction versionsMatch(v1, v2) {\n    if (v1 == v2) {\n        return true;\n    } else {\n        let s1 = v1.split('.');\n        let s2 = v2.split('.');\n        // Check major version\n        let n1 = parseInt(s1[0].substring(1, 2), 10);\n        let n2 = parseInt(s2[0].substring(1, 2), 10);\n        if (n1 < n2) return false;\n        else if (n1 > n2) return true;\n\n        // Check minor version\n        n1 = parseInt(s1[1], 10);\n        n2 = parseInt(s2[1], 10);\n        if (n1 < n2) return false;\n        else if (n1 > n2) return true;\n\n        // Split patch: format could be e.g. 0-22-nightly\n        s1 = s1[2].split('-');\n        s2 = s2[2].split('-');\n\n        n1 = parseInt(s1[0], 10);\n        n2 = parseInt(s2[0], 10);\n        if (n1 < n2) return false;\n        else if (n1 > n2) return true;\n\n        n1 = (s1.length > 1) ? parseInt(s1[1], 10) : 0;\n        n2 = (s2.length > 1) ? parseInt(s2[1], 10) : 0;\n        if (n1 < n2) return false;\n        else return true;\n    }\n}\n\nfunction getGithubLatestVersion(callback, channel) {\n    versionLog('Downloading latest version id from github...');\n    let url\n\n    if (channel === 'stable') {\n        url = 'https://api.github.com/repos/netdata/netdata/releases/latest'\n    } else {\n        url = 'https://api.github.com/repos/netdata/netdata-nightlies/releases/latest'\n    }\n\n    $.ajax({\n        url: url,\n        async: true,\n        cache: false\n    })\n    .done(function (data) {\n        data = data.tag_name.replace(/(\\r\\n|\\n|\\r| |\\t)/gm, \"\");\n        versionLog('Latest stable version from github is ' + data);\n        callback(data);\n    })\n    .fail(function () {\n        versionLog('Failed to download the latest stable version id from github!');\n        callback(null);\n    });\n}\n\nfunction checkForUpdateByVersion(force, callback) {\n    getGithubLatestVersion(function (sha2) {\n        callback(options.version, sha2);\n    }, options.release_channel);\n    return null;\n}\n\nwindow.notifyForUpdate = (force) => {\n    versionLog('<p>checking for updates...</p>');\n\n    var now = Date.now();\n\n    if (typeof force === 'undefined' || force !== true) {\n        var last = loadLocalStorage('last_update_check');\n\n        if (typeof last === 'string') {\n            last = parseInt(last);\n        } else {\n            last = 0;\n        }\n\n        if (now - last < 3600000 * 8) {\n            // no need to check it - too soon\n            return;\n        }\n    }\n\n    checkForUpdateByVersion(force, function (sha1, sha2) {\n        var save = false;\n\n        if (sha1 === null) {\n            save = false;\n            versionLog('<p><big>Failed to get your netdata version!</big></p><p>You can always get the latest netdata from <a href=\"https://github.com/netdata/netdata\" target=\"_blank\">its github page</a>.</p>');\n        } else if (sha2 === null) {\n            save = false;\n            versionLog('<p><big>Failed to get the latest netdata version.</big></p><p>You can always get the latest netdata from <a href=\"https://github.com/netdata/netdata\" target=\"_blank\">its github page</a>.</p>');\n        } else if (versionsMatch(sha1, sha2)) {\n            save = true;\n            versionLog('<p><big>You already have the latest netdata!</big></p><p>No update yet?<br/>We probably need some motivation to keep going on!</p><p>If you haven\\'t already, <a href=\"https://github.com/netdata/netdata\" target=\"_blank\">give netdata a <b><i class=\"fas fa-star\"></i></b> at its github page</a>.</p>');\n        } else {\n            save = true;\n            var compare = 'https://learn.netdata.cloud/docs/agent/changelog/';\n            versionLog('<p><big><strong>New version of netdata available!</strong></big></p><p>Latest version: <b><code>' + sha2 + '</code></b></p><p><a href=\"' + compare + '\" target=\"_blank\">Click here for the changes log</a> and<br/><a href=\"https://github.com/netdata/netdata/tree/master/packaging/installer/UPDATE.md\" target=\"_blank\">click here for directions on updating</a> your netdata installation.</p><p>We suggest to review the changes log for new features you may be interested, or important bug fixes you may need.<br/>Keeping your netdata updated is generally a good idea.</p>');\n        }\n\n        if (save) {\n            saveLocalStorage('last_update_check', now.toString());\n        }\n    });\n}\n\n// ----------------------------------------------------------------------------\n// printing dashboards\n\nfunction showPageFooter() {\n    document.getElementById('footer').style.display = 'block';\n}\n\nwindow.printPreflight = () => {\n    var url = document.location.origin.toString() + document.location.pathname.toString() + document.location.search.toString() + urlOptions.genHash() + ';mode=print';\n    var width = 990;\n    var height = screen.height * 90 / 100;\n    //console.log(url);\n    //console.log(document.location);\n    window.open(url, '', 'width=' + width.toString() + ',height=' + height.toString() + ',menubar=no,toolbar=no,personalbar=no,location=no,resizable=no,scrollbars=yes,status=no,chrome=yes,centerscreen=yes,attention=yes,dialog=yes');\n    $('#printPreflightModal').modal('hide');\n}\n\nfunction printPage() {\n    window.NETDATA.parseDom();\n\n    if (urlOptions.after < 0) {\n        reduxStore.dispatch(setDefaultAfterAction({ after: urlOptions.after }))\n    } else if (urlOptions.pan_and_zoom === true) {\n        reduxStore.dispatch(setGlobalPanAndZoomAction({\n            after: urlOptions.after,\n            before: urlOptions.before,\n        }))\n    }\n    showPageFooter(); // todo after full rewrite the footer should show when charts are loaded\n}\n\n// --------------------------------------------------------------------\n\nfunction jsonStringifyFn(obj) {\n    return JSON.stringify(obj, function (key, value) {\n        return (typeof value === 'function') ? value.toString() : value;\n    });\n}\n\nfunction jsonParseFn(str) {\n    return JSON.parse(str, function (key, value) {\n        if (typeof value != 'string') {\n            return value;\n        }\n        return (value.substring(0, 8) == 'function') ? eval('(' + value + ')') : value;\n    });\n}\n\n// --------------------------------------------------------------------\n\nvar snapshotOptions = {\n    bytes_per_chart: 2048,\n    compressionDefault: 'pako.deflate.base64',\n\n    compressions: {\n        'none': {\n            bytes_per_point_memory: 5.2,\n            bytes_per_point_disk: 5.6,\n\n            compress: function (s) {\n                return s;\n            },\n\n            compressed_length: function (s) {\n                return s.length;\n            },\n\n            uncompress: function (s) {\n                return s;\n            }\n        },\n\n        'pako.deflate.base64': {\n            bytes_per_point_memory: 1.8,\n            bytes_per_point_disk: 1.9,\n\n            compress: function (s) {\n                return btoa(pako.deflate(s, { to: 'string' }));\n            },\n\n            compressed_length: function (s) {\n                return s.length;\n            },\n\n            uncompress: function (s) {\n                return pako.inflate(atob(s), { to: 'string' });\n            }\n        },\n\n        'pako.deflate': {\n            bytes_per_point_memory: 1.4,\n            bytes_per_point_disk: 3.2,\n\n            compress: function (s) {\n                return pako.deflate(s, { to: 'string' });\n            },\n\n            compressed_length: function (s) {\n                return s.length;\n            },\n\n            uncompress: function (s) {\n                return pako.inflate(s, { to: 'string' });\n            }\n        },\n\n        'lzstring.utf16': {\n            bytes_per_point_memory: 1.7,\n            bytes_per_point_disk: 2.6,\n\n            compress: function (s) {\n                return LZString.compressToUTF16(s);\n            },\n\n            compressed_length: function (s) {\n                return s.length * 2;\n            },\n\n            uncompress: function (s) {\n                return LZString.decompressFromUTF16(s);\n            }\n        },\n\n        'lzstring.base64': {\n            bytes_per_point_memory: 2.1,\n            bytes_per_point_disk: 2.3,\n\n            compress: function (s) {\n                return LZString.compressToBase64(s);\n            },\n\n            compressed_length: function (s) {\n                return s.length;\n            },\n\n            uncompress: function (s) {\n                return LZString.decompressFromBase64(s);\n            }\n        },\n\n        'lzstring.uri': {\n            bytes_per_point_memory: 2.1,\n            bytes_per_point_disk: 2.3,\n\n            compress: function (s) {\n                return LZString.compressToEncodedURIComponent(s);\n            },\n\n            compressed_length: function (s) {\n                return s.length;\n            },\n\n            uncompress: function (s) {\n                return LZString.decompressFromEncodedURIComponent(s);\n            }\n        }\n    }\n};\n\n// --------------------------------------------------------------------\n// loading snapshots\n\nfunction loadSnapshotModalLog(priority, msg) {\n    document.getElementById('loadSnapshotStatus').className = \"alert alert-\" + priority;\n    document.getElementById('loadSnapshotStatus').innerHTML = msg;\n}\n\nvar tmpSnapshotData = null;\n\nwindow.loadSnapshot = () => {\n    $('#loadSnapshotImport').addClass('disabled');\n\n    if (tmpSnapshotData === null) {\n        loadSnapshotPreflightEmpty();\n        loadSnapshotModalLog('danger', 'no data have been loaded');\n        return;\n    }\n\n    loadPako(function () {\n        loadLzString(function () {\n            loadSnapshotModalLog('info', 'Please wait, activating snapshot...');\n            $('#loadSnapshotModal').modal('hide');\n\n            netdataShowAlarms = false;\n            netdataRegistry = false;\n            netdataServer = tmpSnapshotData.server;\n\n            document.getElementById('charts_div').innerHTML = '';\n            document.getElementById('sidebar').innerHTML = '';\n\n            if (typeof tmpSnapshotData.hash !== 'undefined') {\n                urlOptions.hash = tmpSnapshotData.hash;\n            } else {\n                urlOptions.hash = '#';\n            }\n\n            if (typeof tmpSnapshotData.info !== 'undefined') {\n                var info = jsonParseFn(tmpSnapshotData.info);\n                if (typeof info.menu !== 'undefined') {\n                    netdataDashboard.menu = info.menu;\n                }\n\n                if (typeof info.submenu !== 'undefined') {\n                    netdataDashboard.submenu = info.submenu;\n                }\n\n                if (typeof info.context !== 'undefined') {\n                    netdataDashboard.context = info.context;\n                }\n            }\n\n            if (typeof tmpSnapshotData.compression !== 'string') {\n                tmpSnapshotData.compression = 'none';\n            }\n\n            if (typeof snapshotOptions.compressions[tmpSnapshotData.compression] === 'undefined') {\n                alert('unknown compression method: ' + tmpSnapshotData.compression);\n                tmpSnapshotData.compression = 'none';\n            }\n\n            tmpSnapshotData.uncompress = snapshotOptions.compressions[tmpSnapshotData.compression].uncompress;\n\n            window.NETDATA.parseDom()\n            reduxStore.dispatch(loadSnapshotAction({\n                snapshot: tmpSnapshotData,\n            }))\n\n            window.netdataSnapshotData = tmpSnapshotData;\n\n            urlOptions.after = tmpSnapshotData.after_ms;\n            urlOptions.before = tmpSnapshotData.before_ms;\n\n            if (typeof tmpSnapshotData.highlight_after_ms !== 'undefined'\n              && tmpSnapshotData.highlight_after_ms !== null\n              && tmpSnapshotData.highlight_after_ms > 0\n              && typeof tmpSnapshotData.highlight_before_ms !== 'undefined'\n              && tmpSnapshotData.highlight_before_ms !== null\n              && tmpSnapshotData.highlight_before_ms > 0\n            ) {\n                urlOptions.highlight_after = tmpSnapshotData.highlight_after_ms;\n                urlOptions.highlight_before = tmpSnapshotData.highlight_before_ms;\n                urlOptions.highlight = true;\n            } else {\n                urlOptions.highlight_after = 0;\n                urlOptions.highlight_before = 0;\n                urlOptions.highlight = false;\n            }\n\n            netdataCheckXSS = false; // disable the modal - this does not affect XSS checks, since dashboard.js is already loaded\n            NETDATA.xss.enabled = true;             // we should not do any remote requests, but if we do, check them\n            NETDATA.xss.enabled_for_data = true;    // check also snapshot data - that have been excluded from the initial check, due to compression\n            loadSnapshotPreflightEmpty();\n            initializeDynamicDashboard();\n        });\n    });\n};\n\nfunction loadSnapshotPreflightFile(file) {\n    var filename = NETDATA.xss.string(file.name);\n    var fr = new FileReader();\n    fr.onload = function (e) {\n        document.getElementById('loadSnapshotFilename').innerHTML = filename;\n        var result = null;\n        try {\n            result = NETDATA.xss.checkAlways('snapshot', JSON.parse(e.target.result), /^(snapshot\\.info|snapshot\\.data)$/);\n\n            //console.log(result);\n            var date_after = new Date(result.after_ms);\n            var date_before = new Date(result.before_ms);\n\n            if (typeof result.charts_ok === 'undefined') {\n                result.charts_ok = 'unknown';\n            }\n\n            if (typeof result.charts_failed === 'undefined') {\n                result.charts_failed = 0;\n            }\n\n            if (typeof result.compression === 'undefined') {\n                result.compression = 'none';\n            }\n\n            if (typeof result.data_size === 'undefined') {\n                result.data_size = 0;\n            }\n\n            document.getElementById('loadSnapshotFilename').innerHTML = '<code>' + filename + '</code>';\n            document.getElementById('loadSnapshotHostname').innerHTML = '<b>' + result.hostname + '</b>, netdata version: <b>' + result.netdata_version.toString() + '</b>';\n            document.getElementById('loadSnapshotURL').innerHTML = result.url;\n            document.getElementById('loadSnapshotCharts').innerHTML = result.charts.charts_count.toString() + ' charts, ' + result.charts.dimensions_count.toString() + ' dimensions, ' + result.data_points.toString() + ' points per dimension, ' + Math.round(result.duration_ms / result.data_points).toString() + ' ms per point';\n            document.getElementById('loadSnapshotInfo').innerHTML = 'version: <b>' + result.snapshot_version.toString() + '</b>, includes <b>' + result.charts_ok.toString() + '</b> unique chart data queries ' + ((result.charts_failed > 0) ? ('<b>' + result.charts_failed.toString() + '</b> failed') : '').toString() + ', compressed with <code>' + result.compression.toString() + '</code>, data size ' + (Math.round(result.data_size * 100 / 1024 / 1024) / 100).toString() + ' MB';\n            document.getElementById('loadSnapshotTimeRange').innerHTML = '<b>' + localeDateString(date_after) + ' ' + localeTimeString(date_after) + '</b> to <b>' + localeDateString(date_before) + ' ' + localeTimeString(date_before) + '</b>';\n            document.getElementById('loadSnapshotComments').innerHTML = ((result.comments) ? result.comments : '').toString();\n            loadSnapshotModalLog('success', 'File loaded, click <b>Import</b> to render it!');\n            $('#loadSnapshotImport').removeClass('disabled');\n\n            tmpSnapshotData = result;\n        }\n        catch (e) {\n            console.log(e);\n            document.getElementById('loadSnapshotStatus').className = \"alert alert-danger\";\n            document.getElementById('loadSnapshotStatus').innerHTML = \"Failed to parse this file!\";\n            $('#loadSnapshotImport').addClass('disabled');\n        }\n    }\n\n    //console.log(file);\n    fr.readAsText(file);\n};\n\nfunction loadSnapshotPreflightEmpty() {\n    document.getElementById('loadSnapshotFilename').innerHTML = '';\n    document.getElementById('loadSnapshotHostname').innerHTML = '';\n    document.getElementById('loadSnapshotURL').innerHTML = '';\n    document.getElementById('loadSnapshotCharts').innerHTML = '';\n    document.getElementById('loadSnapshotInfo').innerHTML = '';\n    document.getElementById('loadSnapshotTimeRange').innerHTML = '';\n    document.getElementById('loadSnapshotComments').innerHTML = '';\n    loadSnapshotModalLog('success', 'Browse for a snapshot file (or drag it and drop it here), then click <b>Import</b> to render it.');\n    $('#loadSnapshotImport').addClass('disabled');\n};\n\nvar loadSnapshotDragAndDropInitialized = false;\n\nfunction loadSnapshotDragAndDropSetup() {\n    if (loadSnapshotDragAndDropInitialized === false) {\n        loadSnapshotDragAndDropInitialized = true;\n        $('#loadSnapshotDragAndDrop')\n        .on('drag dragstart dragend dragover dragenter dragleave drop', function (e) {\n            e.preventDefault();\n            e.stopPropagation();\n        })\n        .on('drop', function (e) {\n            if (e.originalEvent.dataTransfer.files.length) {\n                loadSnapshotPreflightFile(e.originalEvent.dataTransfer.files.item(0));\n            } else {\n                loadSnapshotPreflightEmpty();\n                loadSnapshotModalLog('danger', 'No file selected');\n            }\n        });\n    }\n};\n\nwindow.loadSnapshotPreflight = () => {\n    var files = document.getElementById('loadSnapshotSelectFiles').files;\n    if (!files.length) {\n        loadSnapshotPreflightEmpty();\n        loadSnapshotModalLog('danger', 'No file selected');\n        return;\n    }\n\n    loadSnapshotModalLog('info', 'Loading file...');\n\n    loadSnapshotPreflightFile(files.item(0));\n}\n\n// --------------------------------------------------------------------\n// saving snapshots\n\nvar saveSnapshotStop = false;\n\nfunction saveSnapshotCancel() {\n    reduxStore.dispatch(stopSnapshotModeAction())\n    saveSnapshotStop = true;\n}\n\nvar saveSnapshotModalInitialized = false;\n\nfunction saveSnapshotModalSetup() {\n    if (saveSnapshotModalInitialized === false) {\n        saveSnapshotModalInitialized = true;\n        $('#saveSnapshotModal')\n        .on('hide.bs.modal', saveSnapshotCancel)\n        .on('show.bs.modal', saveSnapshotModalInit)\n        .on('shown.bs.modal', function () {\n            $('#saveSnapshotResolutionSlider').find(\".slider-handle:first\").attr(\"tabindex\", 1);\n            document.getElementById('saveSnapshotComments').focus();\n        });\n    }\n};\n\nfunction saveSnapshotModalLog(priority, msg) {\n    document.getElementById('saveSnapshotStatus').className = \"alert alert-\" + priority;\n    document.getElementById('saveSnapshotStatus').innerHTML = msg;\n}\n\nfunction saveSnapshotModalShowExpectedSize() {\n    var points = Math.round(saveSnapshotViewDuration / saveSnapshotSelectedSecondsPerPoint);\n    var priority = 'info';\n    var msg = 'A moderate snapshot.';\n\n    var sizemb = Math.round(\n      (options.data.charts_count * snapshotOptions.bytes_per_chart\n        + options.data.dimensions_count * points * snapshotOptions.compressions[saveSnapshotCompression].bytes_per_point_disk)\n      * 10 / 1024 / 1024) / 10;\n\n    var memmb = Math.round(\n      (options.data.charts_count * snapshotOptions.bytes_per_chart\n        + options.data.dimensions_count * points * snapshotOptions.compressions[saveSnapshotCompression].bytes_per_point_memory)\n      * 10 / 1024 / 1024) / 10;\n\n    if (sizemb < 10) {\n        priority = 'success';\n        msg = 'A nice small snapshot!';\n    }\n    if (sizemb > 50) {\n        priority = 'warning';\n        msg = 'Will stress your browser...';\n    }\n    if (sizemb > 100) {\n        priority = 'danger';\n        msg = 'Hm... good luck...';\n    }\n\n    saveSnapshotModalLog(priority, 'The snapshot will have ' + points.toString() + ' points per dimension. Expected size on disk ' + sizemb + ' MB, at browser memory ' + memmb + ' MB.<br/>' + msg);\n}\n\nvar saveSnapshotCompression = snapshotOptions.compressionDefault;\n\nfunction saveSnapshotSetCompression(name) {\n    saveSnapshotCompression = name;\n    document.getElementById('saveSnapshotCompressionName').innerHTML = saveSnapshotCompression;\n    saveSnapshotModalShowExpectedSize();\n}\n\nvar saveSnapshotSlider = null;\nvar saveSnapshotSelectedSecondsPerPoint = 1;\nvar saveSnapshotViewDuration = 1;\n\nfunction saveSnapshotModalInit() {\n    $('#saveSnapshotModalProgressSection').hide();\n    $('#saveSnapshotResolutionRadio').show();\n    saveSnapshotModalLog('info', 'Select resolution and click <b>Save</b>');\n    $('#saveSnapshotExport').removeClass('disabled');\n\n    loadBootstrapSlider(function () {\n        const reduxState = reduxStore.getState()\n        saveSnapshotViewDuration = - selectDefaultAfter(reduxState)\n        var start_ms = Math.round(Date.now() - saveSnapshotViewDuration * 1000);\n        const globalPanAndZoom = selectGlobalPanAndZoom(reduxState)\n\n        if (Boolean(globalPanAndZoom)) {\n            saveSnapshotViewDuration = Math.round((globalPanAndZoom.before - globalPanAndZoom.after) / 1000);\n            start_ms = globalPanAndZoom.after;\n        }\n\n        var start_date = new Date(start_ms);\n        var yyyymmddhhssmm = start_date.getFullYear() + zeropad(start_date.getMonth() + 1) + zeropad(start_date.getDate()) + '-' + zeropad(start_date.getHours()) + zeropad(start_date.getMinutes()) + zeropad(start_date.getSeconds());\n\n        document.getElementById('saveSnapshotFilename').value = 'netdata-' + options.hostname.toString() + '-' + yyyymmddhhssmm.toString() + '-' + saveSnapshotViewDuration.toString() + '.snapshot';\n        saveSnapshotSetCompression(saveSnapshotCompression);\n\n        var min = options.update_every;\n        var max = Math.round(saveSnapshotViewDuration / 100);\n\n        if (Boolean(globalPanAndZoom)) {\n            max = Math.round(saveSnapshotViewDuration / 50);\n        }\n\n        var view = Math.round(saveSnapshotViewDuration / Math.round($(document.getElementById('charts_div')).width() / 2));\n\n        if (max < 10) {\n            max = 10;\n        }\n        if (max < min) {\n            max = min;\n        }\n        if (view < min) {\n            view = min;\n        }\n        if (view > max) {\n            view = max;\n        }\n\n        if (saveSnapshotSlider !== null) {\n            saveSnapshotSlider.destroy();\n        }\n\n        saveSnapshotSlider = new Slider('#saveSnapshotResolutionSlider', {\n            ticks: [min, view, max],\n            min: min,\n            max: max,\n            step: options.update_every,\n            value: view,\n            scale: (max > 100) ? 'logarithmic' : 'linear',\n            tooltip: 'always',\n            formatter: function (value) {\n                if (value < 1) {\n                    value = 1;\n                }\n\n                if (value < options.data.update_every) {\n                    value = options.data.update_every;\n                }\n\n                saveSnapshotSelectedSecondsPerPoint = value;\n                saveSnapshotModalShowExpectedSize();\n\n                var seconds = ' seconds ';\n                if (value === 1) {\n                    seconds = ' second ';\n                }\n\n                return value + seconds + 'per point' + ((value === options.data.update_every) ? ', server default' : '').toString();\n            }\n        });\n    });\n}\n\nwindow.saveSnapshot = () => {\n    loadPako(function () {\n        loadLzString(function () {\n            saveSnapshotStop = false;\n            $('#saveSnapshotModalProgressSection').show();\n            $('#saveSnapshotResolutionRadio').hide();\n            $('#saveSnapshotExport').addClass('disabled');\n\n            var filename = document.getElementById('saveSnapshotFilename').value;\n            // console.log(filename);\n            saveSnapshotModalLog('info', 'Generating snapshot as <code>' + filename.toString() + '</code>');\n\n\n            var el = document.getElementById('saveSnapshotModalProgressBar');\n            var eltxt = document.getElementById('saveSnapshotModalProgressBarText');\n\n            options.data.charts_by_name = null;\n            const reduxState = reduxStore.getState()\n            const defaultAfter = selectDefaultAfter(reduxState)\n\n            var saveData = {\n                hostname: options.hostname,\n                server: serverDefault,\n                netdata_version: options.data.version,\n                snapshot_version: 1,\n                after_ms: Date.now() + defaultAfter * 1000,\n                before_ms: Date.now(),\n                highlight_after_ms: urlOptions.highlight_after,\n                highlight_before_ms: urlOptions.highlight_before,\n                duration_ms: options.duration * 1000,\n                update_every_ms: options.update_every * 1000,\n                data_points: 0,\n                url: ((urlOptions.server !== null) ? urlOptions.server : document.location.origin.toString() + document.location.pathname.toString() + document.location.search.toString()).toString(),\n                comments: document.getElementById('saveSnapshotComments').value.toString(),\n                hash: urlOptions.hash,\n                charts: options.data,\n                info: jsonStringifyFn({\n                    menu: netdataDashboard.menu,\n                    submenu: netdataDashboard.submenu,\n                    context: netdataDashboard.context\n                }),\n                charts_ok: 0,\n                charts_failed: 0,\n                compression: saveSnapshotCompression,\n                data_size: 0,\n                data: {}\n            };\n\n            if (typeof snapshotOptions.compressions[saveData.compression] === 'undefined') {\n                alert('unknown compression method: ' + saveData.compression);\n                saveData.compression = 'none';\n            }\n\n            var compress = snapshotOptions.compressions[saveData.compression].compress;\n            var compressed_length = snapshotOptions.compressions[saveData.compression].compressed_length;\n\n            function pack_api1_v1_chart_data({ data, chartDataUniqueID }) {\n                if (data === null) {\n                    return 0\n                }\n\n                var str = JSON.stringify(data);\n\n                var cstr = compress(str);\n                saveData.data[chartDataUniqueID] = cstr;\n                return compressed_length(cstr);\n            }\n\n            const globalPanAndZoom = selectGlobalPanAndZoom(reduxState)\n            var clearPanAndZoom = false;\n            if (!globalPanAndZoom) {\n                reduxStore.dispatch(setGlobalPanAndZoomAction({\n                    after: saveData.after_ms,\n                    before: saveData.before_ms,\n                }))\n                clearPanAndZoom = true;\n            } else {\n                saveData.after_ms = globalPanAndZoom.after\n                saveData.before_ms = globalPanAndZoom.before\n            }\n\n\n            saveData.duration_ms = saveData.before_ms - saveData.after_ms;\n            saveData.data_points = Math.round((saveData.before_ms - saveData.after_ms) / (saveSnapshotSelectedSecondsPerPoint * 1000));\n            saveSnapshotModalLog('info', 'Generating snapshot with ' + saveData.data_points.toString() + ' data points per dimension...');\n\n            reduxStore.dispatch(startSnapshotModeAction({\n                charts: saveData.charts,\n                dataPoints: saveData.data_points,\n            }))\n\n\n            window.saveSnapshotRestore = () => {\n                $('#saveSnapshotModal').modal('hide');\n\n                $(el).css('width', '0%').attr('aria-valuenow', 0);\n                eltxt.innerText = '0%';\n\n                reduxStore.dispatch(stopSnapshotModeAction())\n                reduxStore.dispatch(snapshotExportResetAction())\n                if (clearPanAndZoom) {\n                    // clear that afterwards\n                    reduxStore.dispatch(resetGlobalPanAndZoomAction())\n                }\n\n                $('#saveSnapshotExport').removeClass('disabled');\n            }\n\n            var size = 0;\n            var info = ' Resolution: <b>' + saveSnapshotSelectedSecondsPerPoint.toString() + ((saveSnapshotSelectedSecondsPerPoint === 1) ? ' second ' : ' seconds ').toString() + 'per point</b>.';\n\n            window.chartUpdated = ({ chart, chartDataUniqueID, data }) => {\n                if (saveSnapshotStop === true) {\n                    saveSnapshotModalLog('info', 'Cancelled!');\n                    saveSnapshotRestore()\n                }\n                const state = reduxStore.getState()\n                const chartsCount = selectAmountOfCharts(state)\n                const chartsOk = selectAmountOfSnapshotsFetched(state) // hook\n                const chartsFailed = selectAmountOfSnapshotsFailed(state)\n\n                const pcent = ((chartsOk + chartsFailed) / chartsCount) * 100\n                $(el).css('width', pcent + '%').attr('aria-valuenow', pcent);\n                eltxt.innerText = Math.round(pcent).toString() + '%, ' + (chart || data.id)\n\n                size += pack_api1_v1_chart_data({ data, chartDataUniqueID })\n\n                saveSnapshotModalLog((chartsFailed) ? 'danger' : 'info', 'Generated snapshot data size <b>' + (Math.round(size * 100 / 1024 / 1024) / 100).toString() + ' MB</b>. ' + ((chartsFailed) ? (chartsFailed.toString() + ' charts have failed to be downloaded') : '').toString() + info);\n\n                window.saveData = saveData\n                // better not to use equality against pcent in case of floating point errors\n                if (chartsOk + chartsFailed === chartsCount) {\n                    saveData.charts_ok = chartsOk\n                    saveData.charts_failed = chartsFailed\n                    saveData.data_size = size\n\n                    saveObjectToClient(saveData, filename)\n                    if (chartsFailed > 0) {\n                        alert(`${chartsFailed} failed to be downloaded`);\n                    }\n                    saveSnapshotRestore()\n                    saveData = null\n                }\n            }\n\n            // called for every chart\n            function update_chart(idx) {\n                if (saveSnapshotStop === true) {\n                    saveSnapshotModalLog('info', 'Cancelled!');\n                    saveSnapshotRestore();\n                    return;\n                }\n\n                var state = NETDATA.options.targets[--idx];\n\n                var pcent = (NETDATA.options.targets.length - idx) * 100 / NETDATA.options.targets.length;\n                $(el).css('width', pcent + '%').attr('aria-valuenow', pcent);\n                eltxt.innerText = Math.round(pcent).toString() + '%, ' + state.id;\n\n                setTimeout(function () {\n                    charts_count++;\n                    state.isVisible(true);\n                    state.current.force_after_ms = saveData.after_ms;\n                    state.current.force_before_ms = saveData.before_ms;\n\n                    state.updateChart(function (status, reason) {\n                        state.current.force_after_ms = null;\n                        state.current.force_before_ms = null;\n\n                        if (status === true) {\n                            charts_ok++;\n                            // state.log('ok');\n                            size += pack_api1_v1_chart_data(state);\n                        } else {\n                            charts_failed++;\n                            state.log('failed to be updated: ' + reason);\n                        }\n\n                        saveSnapshotModalLog((charts_failed) ? 'danger' : 'info', 'Generated snapshot data size <b>' + (Math.round(size * 100 / 1024 / 1024) / 100).toString() + ' MB</b>. ' + ((charts_failed) ? (charts_failed.toString() + ' charts have failed to be downloaded') : '').toString() + info);\n\n                        if (idx > 0) {\n                            update_chart(idx);\n                        } else {\n                            saveData.charts_ok = charts_ok;\n                            saveData.charts_failed = charts_failed;\n                            saveData.data_size = size;\n                            // console.log(saveData.compression + ': ' + (size / (options.data.dimensions_count * Math.round(saveSnapshotViewDuration / saveSnapshotSelectedSecondsPerPoint))).toString());\n\n                            // save it\n                            // console.log(saveData);\n                            saveObjectToClient(saveData, filename);\n\n                            if (charts_failed > 0) {\n                                alert(charts_failed.toString() + ' failed to be downloaded');\n                            }\n\n                            saveSnapshotRestore();\n                            saveData = null;\n                        }\n                    })\n                }, 0);\n            }\n\n        });\n    });\n}\n\n// --------------------------------------------------------------------\n// activate netdata on the page\nlet browser_timezone\ntry {\n    browser_timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n} catch (e) {\n    console.log('failed to detect browser timezone: ' + e.toString());\n    browser_timezone = 'cannot-detect-it';\n}\n\nconst getOption = (option) => {\n    const state = reduxStore.getState()\n    return createSelectOption(option)(state)\n}\n\n\nfunction dashboardSettingsSetup() {\n    var update_options_modal = function () {\n        var sync_option = function (option) {\n            var self = $('#' + option);\n\n            if (self.prop('checked') !== getOption(option)) {\n                // console.log('switching ' + option.toString());\n                self.bootstrapToggle(getOption(option) ? 'on' : 'off');\n            }\n        };\n\n        var theme_sync_option = function (option) {\n            var self = $('#' + option);\n\n            self.bootstrapToggle(netdataTheme === 'slate' ? 'on' : 'off');\n        };\n        var units_sync_option = function (option) {\n            var self = $('#' + option);\n\n            if (self.prop('checked') !== (getOption('units') === 'auto')) {\n                self.bootstrapToggle(getOption('units') === 'auto' ? 'on' : 'off');\n            }\n\n            if (self.prop('checked') === true) {\n                $('#settingsLocaleTempRow').show();\n                $('#settingsLocaleTimeRow').show();\n            } else {\n                $('#settingsLocaleTempRow').hide();\n                $('#settingsLocaleTimeRow').hide();\n            }\n        };\n        var temp_sync_option = function (option) {\n            var self = $('#' + option);\n\n            if (self.prop('checked') !== (getOption('temperature') === 'celsius')) {\n                self.bootstrapToggle(getOption('temperature') === 'celsius' ? 'on' : 'off');\n            }\n        };\n\n        sync_option('stop_updates_when_focus_is_lost');\n        sync_option('eliminate_zero_dimensions');\n        sync_option('destroy_on_hide');\n        sync_option('async_on_scroll');\n\n        sync_option('parallel_refresher');\n        sync_option('concurrent_refreshes');\n        sync_option('sync_selection');\n\n        sync_option('legend_right');\n        theme_sync_option('netdata_theme_control');\n        sync_option('show_help');\n        sync_option('pan_and_zoom_data_padding');\n        sync_option('smooth_plot');\n\n        units_sync_option('units_conversion');\n        temp_sync_option('units_temp');\n        sync_option('seconds_as_time');\n\n        if (getOption('parallel_refresher') === false) {\n            $('#concurrent_refreshes_row').hide();\n        } else {\n            $('#concurrent_refreshes_row').show();\n        }\n    };\n\n    update_options_modal();\n\n    // handle options changes\n    $('#eliminate_zero_dimensions').change(function () {\n        setOption('eliminate_zero_dimensions', $(this).prop('checked'));\n    });\n    $('#destroy_on_hide').change(function () {\n        setOption('destroy_on_hide', $(this).prop('checked'));\n    });\n    $('#async_on_scroll').change(function () {\n        setOption('async_on_scroll', $(this).prop('checked'));\n    });\n    $('#parallel_refresher').change(function () {\n        setOption('parallel_refresher', $(this).prop('checked'));\n    });\n    $('#concurrent_refreshes').change(function () {\n        setOption('concurrent_refreshes', $(this).prop('checked'));\n    });\n    $('#sync_selection').change(function () {\n        setOption('sync_selection', $(this).prop('checked'));\n        netdataReload();\n    });\n    $('#stop_updates_when_focus_is_lost').change(function () {\n        urlOptions.update_always = !$(this).prop('checked');\n        urlOptions.hashUpdate();\n\n        setOption('stop_updates_when_focus_is_lost', !urlOptions.update_always);\n    });\n    $('#smooth_plot').change(function () {\n        setOption('smooth_plot', $(this).prop('checked'));\n    });\n    $('#pan_and_zoom_data_padding').change(function () {\n        setOption('pan_and_zoom_data_padding', $(this).prop('checked'));\n    });\n    $('#seconds_as_time').change(function () {\n        setOption('seconds_as_time', $(this).prop('checked'));\n    });\n\n    $('#units_conversion').change(function () {\n        setOption('units', $(this).prop('checked') ? 'auto' : 'original');\n        update_options_modal()\n    });\n    $('#units_temp').change(function () {\n        setOption('temperature', $(this).prop('checked') ? 'celsius' : 'fahrenheit');\n    });\n\n    $('#legend_right').change(function () {\n        setOption('legend_right', $(this).prop('checked'));\n        // reloading for now, it's much easier than rebuilding charts bootstraping in main.js\n        netdataReload();\n    });\n\n    $('#show_help').change(function () {\n        urlOptions.help = $(this).prop('checked');\n        urlOptions.hashUpdate();\n\n        setOption('show_help', urlOptions.help);\n        netdataReload();\n    });\n\n    // this has to be the last\n    // it reloads the page\n    $('#netdata_theme_control').change(function () {\n        urlOptions.theme = $(this).prop('checked') ? 'slate' : 'white';\n        urlOptions.hashUpdate();\n\n        if (setTheme(urlOptions.theme)) {\n            netdataReload();\n        }\n    });\n}\n\nconst CHART_DIV_ID_PREFIX = 'chart_'\nconst CHART_DIV_OFFSET = -50\n\nfunction scrollDashboardTo() {\n    if (window.netdataSnapshotData !== null && typeof window.netdataSnapshotData.hash !== 'undefined') {\n        scrollToId(window.netdataSnapshotData.hash.replace('#', ''));\n    } else {\n        // check if we have to jump to a specific section\n        scrollToId(urlOptions.hash.replace('#', ''));\n        if (urlOptions.chart !== null) {\n            const chartElement = document.getElementById(`${CHART_DIV_ID_PREFIX}${name2id(urlOptions.chart)}`)\n            if (chartElement) {\n                const offset = chartElement.offsetTop + CHART_DIV_OFFSET;\n                document.querySelector(\"html\").scrollTop = offset\n            }\n        }\n    }\n}\n\nvar modalHiddenCallback = null;\n\nwindow.scrollToChartAfterHidingModal = (chart, alarmDate, alarmStatus) => {\n    modalHiddenCallback = function () {\n\n        if (typeof chart === 'string') {\n            const chartElement = document.getElementById(`${CHART_DIV_ID_PREFIX}${name2id(chart)}`)\n            if (chartElement) {\n                const offset = chartElement.offsetTop + CHART_DIV_OFFSET;\n                document.querySelector(\"html\").scrollTop = offset\n            }\n        }\n\n        if (['WARNING', 'CRITICAL'].includes(alarmStatus)) {\n            const twoMinutes = 2 * 60 * 1000\n            reduxStore.dispatch(setGlobalPanAndZoomAction({\n                after: alarmDate - twoMinutes,\n                before: alarmDate + twoMinutes,\n            }))\n        }\n    };\n}\n\n// ----------------------------------------------------------------------------\n\nfunction enableTooltipsAndPopovers() {\n    $('[data-toggle=\"tooltip\"]').tooltip({\n        animated: 'fade',\n        trigger: 'hover',\n        html: true,\n        delay: { show: 500, hide: 0 },\n        container: 'body'\n    });\n    $('[data-toggle=\"popover\"]').popover();\n}\n\n// ----------------------------------------------------------------------------\n\nvar runOnceOnDashboardLastRun = 0;\n\nfunction runOnceOnDashboardWithjQuery() {\n    if (runOnceOnDashboardLastRun !== 0) {\n        scrollDashboardTo();\n\n        // restore the scrollspy at the proper position\n        $(document.body).scrollspy('refresh');\n        $(document.body).scrollspy('process');\n\n        return;\n    }\n\n    runOnceOnDashboardLastRun = Date.now();\n\n    // ------------------------------------------------------------------------\n    // bootstrap modals\n\n    // prevent bootstrap modals from scrolling the page\n    // maintains the current scroll position\n    // https://stackoverflow.com/a/34754029/4525767\n\n    var scrollPos = 0;\n    var modal_depth = 0;                            // how many modals are currently open\n    var modal_shown = false;                        // set to true, if a modal is shown\n    var netdata_paused_on_modal = false;            // set to true, if the modal paused netdata\n    var scrollspyOffset = $(window).height() / 3;   // will be updated below - the offset of scrollspy to select an item\n\n    $('.modal')\n        .on('show.bs.modal', function () {\n            if (modal_depth === 0) {\n                scrollPos = window.scrollY;\n\n                $('body').css({\n                    overflow: 'hidden',\n                    position: 'fixed',\n                    top: -scrollPos\n                });\n\n                modal_shown = true;\n\n                if (NETDATA.options.pauseCallback === null) {\n                    NETDATA.pause(function () {\n                    });\n                    netdata_paused_on_modal = true;\n                } else {\n                    netdata_paused_on_modal = false;\n                }\n            }\n\n            modal_depth++;\n            //console.log(urlOptions.after);\n\n        })\n        .on('hide.bs.modal', function () {\n\n            modal_depth--;\n\n            if (modal_depth <= 0) {\n                modal_depth = 0;\n\n                $('body')\n                    .css({\n                        overflow: '',\n                        position: '',\n                        top: ''\n                    });\n\n                // scroll to the position we had open before the modal\n                $('html, body')\n                    .animate({ scrollTop: scrollPos }, 0);\n\n                // unpause netdata, if we paused it\n                if (netdata_paused_on_modal === true) {\n                    NETDATA.unpause();\n                    netdata_paused_on_modal = false;\n                }\n\n                // restore the scrollspy at the proper position\n                $(document.body).scrollspy('process');\n            }\n            //console.log(urlOptions.after);\n        })\n        .on('hidden.bs.modal', function () {\n            if (modal_depth === 0) {\n                modal_shown = false;\n            }\n\n            if (typeof modalHiddenCallback === 'function') {\n                modalHiddenCallback();\n            }\n\n            modalHiddenCallback = null;\n            //console.log(urlOptions.after);\n        });\n\n    // ------------------------------------------------------------------------\n    // sidebar / affix\n\n    $('#sidebar')\n        .affix({\n            offset: {\n                top: 0,\n                bottom: 0\n            }\n        })\n        .on('affixed.bs.affix', function () {\n            // fix scrolling of very long affix lists\n            // http://stackoverflow.com/questions/21691585/bootstrap-3-1-0-affix-too-long\n\n            $(this).removeAttr('style');\n        })\n        .on('affix-top.bs.affix', function () {\n            // fix bootstrap affix click bug\n            // https://stackoverflow.com/a/37847981/4525767\n\n            if (modal_shown) {\n                return false;\n            }\n        })\n        .on('activate.bs.scrollspy', function (e) {\n            // change the URL based on the current position of the screen\n\n            if (modal_shown === false) {\n                var el = $(e.target);\n                var hash = el.find('a').attr('href');\n                if (typeof hash === 'string' && hash.substring(0, 1) === '#' && urlOptions.hash.startsWith(hash + '_submenu_') === false) {\n                    urlOptions.hash = hash;\n                    urlOptions.hashUpdate();\n                }\n            }\n        });\n\n    Ps.initialize(document.getElementById('sidebar'), {\n        wheelSpeed: 0.5,\n        wheelPropagation: true,\n        swipePropagation: true,\n        minScrollbarLength: null,\n        maxScrollbarLength: null,\n        useBothWheelAxes: false,\n        suppressScrollX: true,\n        suppressScrollY: false,\n        scrollXMarginOffset: 0,\n        scrollYMarginOffset: 0,\n        theme: 'default'\n    });\n\n    // ------------------------------------------------------------------------\n    // scrollspy\n\n    if (scrollspyOffset > 250) {\n        scrollspyOffset = 250;\n    }\n    if (scrollspyOffset < 75) {\n        scrollspyOffset = 75;\n    }\n    document.body.setAttribute('data-offset', scrollspyOffset);\n\n    // scroll the dashboard, before activating the scrollspy, so that our\n    // hash will not be updated before we got the chance to scroll to it\n    scrollDashboardTo();\n\n    $(document.body).scrollspy({\n        target: '#sidebar',\n        offset: scrollspyOffset // controls the diff of the <hX> element to the top, to select it\n    });\n\n    // ------------------------------------------------------------------------\n    // my-netdata menu\n\n    $('#deleteRegistryModal')\n        .on('hidden.bs.modal', function () {\n            deleteRegistryGuid = null;\n        });\n\n    // ------------------------------------------------------------------------\n    // update modal\n\n    $('#updateModal')\n        .on('show.bs.modal', function () {\n            versionLog('checking, please wait...');\n        })\n        .on('shown.bs.modal', function () {\n            notifyForUpdate(true);\n        });\n\n    // ------------------------------------------------------------------------\n    // alarms modal\n\n    $('#alarmsModal')\n        .on('shown.bs.modal', function () {\n            alarmsUpdateModal();\n        })\n        .on('hidden.bs.modal', function () {\n            document.getElementById('alarms_active').innerHTML =\n                document.getElementById('alarms_all').innerHTML =\n                document.getElementById('alarms_log').innerHTML =\n                'loading...';\n        });\n\n    // ------------------------------------------------------------------------\n\n    dashboardSettingsSetup();\n    loadSnapshotDragAndDropSetup();\n    saveSnapshotModalSetup();\n    showPageFooter();\n\n    // ------------------------------------------------------------------------\n    // https://github.com/viralpatel/jquery.shorten/blob/master/src/jquery.shorten.js\n\n    $.fn.shorten = function (settings) {\n        \"use strict\";\n\n        var config = {\n            showChars: 750,\n            minHideChars: 10,\n            ellipsesText: \"...\",\n            moreText: '<i class=\"fas fa-expand\"></i> show more information',\n            lessText: '<i class=\"fas fa-compress\"></i> show less information',\n            onLess: function () {\n                NETDATA.onscroll();\n            },\n            onMore: function () {\n                NETDATA.onscroll();\n            },\n            errMsg: null,\n            force: false\n        };\n\n        if (settings) {\n            $.extend(config, settings);\n        }\n\n        if ($(this).data('jquery.shorten') && !config.force) {\n            return false;\n        }\n        $(this).data('jquery.shorten', true);\n\n        $(document).off(\"click\", '.morelink');\n\n        $(document).on({\n            click: function () {\n\n                var $this = $(this);\n                if ($this.hasClass('less')) {\n                    $this.removeClass('less');\n                    $this.html(config.moreText);\n                    $this.parent().prev().animate({ 'height': '0' + '%' }, 0, function () {\n                        $this.parent().prev().prev().show();\n                    }).hide(0, function () {\n                        config.onLess();\n                    });\n                } else {\n                    $this.addClass('less');\n                    $this.html(config.lessText);\n                    $this.parent().prev().animate({ 'height': '100' + '%' }, 0, function () {\n                        $this.parent().prev().prev().hide();\n                    }).show(0, function () {\n                        config.onMore();\n                    });\n                }\n                return false;\n            }\n        }, '.morelink');\n\n        return this.each(function () {\n            var $this = $(this);\n\n            var content = $this.html();\n            var contentlen = $this.text().length;\n            if (contentlen > config.showChars + config.minHideChars) {\n                var c = content.substr(0, config.showChars);\n                if (c.indexOf('<') >= 0) // If there's HTML don't want to cut it\n                {\n                    var inTag = false; // I'm in a tag?\n                    var bag = ''; // Put the characters to be shown here\n                    var countChars = 0; // Current bag size\n                    var openTags = []; // Stack for opened tags, so I can close them later\n                    var tagName = null;\n\n                    for (var i = 0, r = 0; r <= config.showChars; i++) {\n                        if (content[i] === '<' && !inTag) {\n                            inTag = true;\n\n                            // This could be \"tag\" or \"/tag\"\n                            tagName = content.substring(i + 1, content.indexOf('>', i));\n\n                            // If its a closing tag\n                            if (tagName[0] === '/') {\n\n                                if (tagName !== ('/' + openTags[0])) {\n                                    config.errMsg = 'ERROR en HTML: the top of the stack should be the tag that closes';\n                                } else {\n                                    openTags.shift(); // Pops the last tag from the open tag stack (the tag is closed in the retult HTML!)\n                                }\n\n                            } else {\n                                // There are some nasty tags that don't have a close tag like <br/>\n                                if (tagName.toLowerCase() !== 'br') {\n                                    openTags.unshift(tagName); // Add to start the name of the tag that opens\n                                }\n                            }\n                        }\n\n                        if (inTag && content[i] === '>') {\n                            inTag = false;\n                        }\n\n                        if (inTag) {\n                            bag += content.charAt(i);\n                        } else {\n                            // Add tag name chars to the result\n                            r++;\n                            if (countChars <= config.showChars) {\n                                bag += content.charAt(i); // Fix to ie 7 not allowing you to reference string characters using the []\n                                countChars++;\n                            } else {\n                                // Now I have the characters needed\n                                if (openTags.length > 0) {\n                                    // I have unclosed tags\n\n                                    for (var j = 0; j < openTags.length; j++) {\n                                        bag += '</' + openTags[j] + '>'; // Close all tags that were opened\n\n                                        // You could shift the tag from the stack to check if you end with an empty stack, that means you have closed all open tags\n                                    }\n                                    break;\n                                }\n                            }\n                        }\n                    }\n                    c = $('<div/>').html(bag + '<span class=\"ellip\">' + config.ellipsesText + '</span>').html();\n                } else {\n                    c += config.ellipsesText;\n                }\n\n                var html = '<div class=\"shortcontent\">' + c +\n                    '</div><div class=\"allcontent\">' + content +\n                    '</div><span><a href=\"javascript://nop/\" class=\"morelink\">' + config.moreText + '</a></span>';\n\n                $this.html(html);\n                $this.find(\".allcontent\").hide(); // Hide all text\n                $('.shortcontent p:last', $this).css('margin-bottom', 0); //Remove bottom margin on last paragraph as it's likely shortened\n            }\n        });\n    };\n}\n\nfunction finalizePage() {\n    if (urlOptions.after < 0) {\n        reduxStore.dispatch(setDefaultAfterAction({ after: urlOptions.after }))\n    } else if (urlOptions.pan_and_zoom === true) {\n        reduxStore.dispatch(setGlobalPanAndZoomAction({\n            after: urlOptions.after,\n            before: urlOptions.before,\n        }))\n    }\n\n    // resize all charts - without starting the background thread\n    // this has to be done while NETDATA is paused\n    // if we omit this, the affix menu will be wrong, since all\n    // the Dom elements are initially zero-sized\n    NETDATA.parseDom();\n\n    // let it run (update the charts)\n    NETDATA.unpause();\n\n    runOnceOnDashboardWithjQuery();\n    $(\".shorten\").shorten();\n    enableTooltipsAndPopovers();\n\n    if (!isDemo) {\n        notifyForUpdate();\n    }\n\n    if (urlOptions.show_alarms === true) {\n        setTimeout(function () {\n            $('#alarmsModal').modal('show');\n        }, 1000);\n    }\n\n    NETDATA.onresizeCallback = function () {\n        Ps.update(document.getElementById('sidebar'));\n    };\n    NETDATA.onresizeCallback();\n\n    if (window.netdataSnapshotData !== null) {\n        reduxStore.dispatch(setGlobalPanAndZoomAction({\n            after: window.netdataSnapshotData.after_ms,\n            before: window.netdataSnapshotData.before_ms,\n        }))\n    }\n}\n\nwindow.resetDashboardOptions = () => {\n    reduxStore.dispatch(resetOptionsAction())\n\n    // it's dirty, but this will be rewritten anyway\n    urlOptions.update_always = false;\n    urlOptions.help = false;\n    urlOptions.theme = \"slate\";\n    urlOptions.hashUpdate();\n\n    netdataReload()\n}\n\n// callback to add the dashboard info to the\n// parallel javascript downloader in netdata\nexport const netdataPrepCallback = () => {\n    if (isDemo) {\n        document.getElementById('masthead').style.display = 'block';\n    } else {\n        if (urlOptions.update_always === true) {\n            setOption('stop_updates_when_focus_is_lost', !urlOptions.update_always);\n        }\n    }\n};\n\nwindow.selected_server_timezone = function (timezone, status) {\n    // clear the error\n    document.getElementById('timezone_error_message').innerHTML = '';\n\n    if (typeof status === 'undefined') {\n        // the user selected a timezone from the menu\n\n        setOption('user_set_server_timezone', timezone);\n\n        if (!isProperTimezone(timezone)) {\n            setOption(\"timezone\", \"default\")\n\n            if (!$('#local_timezone').prop('checked')) {\n                $('#local_timezone').bootstrapToggle('on');\n            }\n\n            document.getElementById('timezone_error_message').innerHTML = 'Ooops! That timezone was not accepted by your browser. Please open a github issue to help us fix it.';\n            setOption('user_set_server_timezone', options.timezone);\n        } else {\n            if ($('#local_timezone').prop('checked')) {\n                $('#local_timezone').bootstrapToggle('off');\n            }\n            setOption(\"timezone\", timezone)\n        }\n    } else if (status === true) {\n        // the user wants the browser default timezone to be activated\n        setOption(\"timezone\", \"default\")\n    } else {\n        // the user wants the server default timezone to be activated\n\n        let userSetServerTimezone = getOption(\"user_set_server_timezone\")\n        if (userSetServerTimezone === 'default') {\n            setOption(\"user_set_server_timezone\", options.timezone) // timezone from /charts endpoint\n            userSetServerTimezone = options.timezone\n        }\n\n        if (!isProperTimezone(userSetServerTimezone)) {\n            setOption(\"timezone\", \"default\");\n\n            if (!$('#local_timezone').prop('checked')) {\n                $('#local_timezone').bootstrapToggle('on');\n            }\n\n            document.getElementById('timezone_error_message').innerHTML = 'Sorry. The timezone \"' + timezone.toString() + '\" is not accepted by your browser. Please select one from the list.';\n            setOption('user_set_server_timezone', options.timezone);\n        } else {\n            setOption(\"timezone\", userSetServerTimezone)\n        }\n    }\n\n    const timezoneOption = getOption(\"timezone\")\n    document.getElementById('current_timezone').innerText = (timezoneOption === 'default') ? 'unset, using browser default' : timezoneOption;\n    return false;\n};\n\nexport var netdataCallback = initializeDynamicDashboard;\n\nwindow.showSignInModal = function() {\n    document.getElementById(\"sim-registry\").innerHTML = getFromRegistry(\"registryServer\");\n    $(\"#signInModal\").modal(\"show\");\n}\n\nwindow.explicitlySignIn = () => {\n    $(\"#signInModal\").modal(\"hide\");\n    reduxStore.dispatch(explicitlySignInAction())\n};\n","import { AlarmStatus } from \"domains/global/types\"\n\nexport const storeKey = \"global\"\n\nexport const TEMPORARY_MAIN_JS_TIMEOUT = 1000\n\nexport const MASKED_DATA = \"***\"\n\nexport const NOTIFICATIONS_TIMEOUT = 5000\n\nexport const INFO_POLLING_FREQUENCY = 5000\n\nexport const CLOUD_BASE_URL_DISABLED = \"CLOUD_BASE_URL_DISABLED\"\n\nexport const alarmStatuses: AlarmStatus[] = [\"WARNING\", \"ERROR\", \"REMOVED\", \"UNDEFINED\", \"UNINITIALIZED\", \"CLEAR\", \"CRITICAL\"]\n","import React, { useMemo } from \"react\"\nimport { CloudConnectionProps, ConnectionModalStatusContent } from \"./types\"\nimport Anchor from \"@/src/components/anchor\"\n\nimport { Text } from \"@netdata/netdata-ui\"\n\nexport const makeCloudConnectionStatusInfo = ({\n  nodeStatus,\n  userStatus,\n  date,\n}: CloudConnectionProps): ConnectionModalStatusContent => ({\n  title: \"Netdata Cloud connection status\",\n  text: {\n    header: () => {\n      return (\n        <Text>\n          This node is currently{\" \"}\n          <Text strong>{nodeStatus === \"LIVE\" ? \"Connected\" : \"Not Connected\"}</Text> to Netdata\n          Cloud\n        </Text>\n      )\n    },\n    bullets:\n      nodeStatus === \"NOT_LIVE\"\n        ? [\n            // `The node lost its Netdata Cloud connection at ${date}`,\n            () => (\n              <Text>\n                To troubleshoot Netdata Cloud connection issues, please follow{\" \"}\n                <Anchor\n                  target=\"_blank\"\n                  rel=\"noopener noreferrer\"\n                  href=\"https://learn.netdata.cloud/docs/agent/claim#troubleshooting\"\n                >\n                  this guide\n                </Anchor>\n                .\n              </Text>\n            ),\n          ]\n        : [],\n    footer: () => (\n      <Text>\n        You are{\" \"}\n        <Text strong>\n          {userStatus === \"LOGGED_IN\"\n            ? \"Logged In\"\n            : userStatus === \"EXPIRED_LOGIN\"\n            ? \"Logged out\"\n            : \"Not signed-up\"}\n        </Text>{\" \"}\n        to Netdata Cloud\n      </Text>\n    ),\n  },\n  CTA1: {\n    text: \"Take me to Netdata Cloud\",\n  },\n})\n\nconst useCloudConnectionStatus = ({ userStatus, nodeStatus, date }: CloudConnectionProps) => {\n  const cloudConnectionStatusInfo = useMemo<ConnectionModalStatusContent>(() => {\n    return makeCloudConnectionStatusInfo({ userStatus, nodeStatus, date })\n  }, [userStatus, nodeStatus, date])\n\n  return cloudConnectionStatusInfo\n}\n\nexport default useCloudConnectionStatus\n","import React, { useCallback } from \"react\"\nimport GoToCloud from \"components/auth/signIn\"\n\nimport {\n  Modal,\n  ModalContent,\n  ModalBody,\n  ModalFooter,\n  ModalHeader,\n  Text,\n  Flex,\n  H3,\n  Button,\n  Box,\n  ModalCloseButton,\n} from \"@netdata/netdata-ui\"\n\nimport { ConnectionModalStatusContent } from \"./types\"\n\nconst campaign = \"agent_nudge_to_cloud\"\n\nexport type CloudConnectionStatusModalProps = ConnectionModalStatusContent & {\n  closeModal: () => void\n  onRefresh?: () => void\n  isCTA1Disabled: boolean\n}\n\nconst CloudConnectionStatusModal = ({\n  title,\n  text,\n  CTA1,\n  closeModal,\n  onRefresh,\n  isCTA1Disabled,\n}: CloudConnectionStatusModalProps) => {\n  const handleClickedCTA1 = useCallback(\n    ({ link }: { link: string }) => {\n      closeModal()\n      window.location.href = link\n    },\n    [closeModal]\n  )\n\n  return (\n    <Modal>\n      <ModalContent width={180} background=\"modalBackground\">\n        <ModalHeader>\n          <H3 margin={[0]}>{title}</H3>\n          <ModalCloseButton onClose={closeModal} />\n        </ModalHeader>\n        <ModalBody>\n          <Flex padding={[0, 0, 4, 0]} column gap={3}>\n            {text.header({})}\n            {text.bullets.length > 0 && (\n              <Flex column gap={3}>\n                <Flex column gap={1} as={\"ul\"}>\n                  {text.bullets.map((bullet, index) => {\n                    if (typeof bullet === \"function\") {\n                      return <li key={index}> {bullet()}</li>\n                    }\n                    return (\n                      <li key={bullet}>\n                        <Text>{bullet}</Text>\n                      </li>\n                    )\n                  })}\n                </Flex>\n              </Flex>\n            )}\n            {text.footer()}\n          </Flex>\n        </ModalBody>\n        <ModalFooter>\n          <Box data-testid=\"cta1\" margin={[0, 2, 0, 0]} width={{ min: 40 }}>\n            <GoToCloud utmParameters={{ content: \"connection_to_cloud\", campaign }}>\n              {({ link }) => (\n                <Button\n                  data-ga={`connection-to-cloud::click-ct1::ad`}\n                  disabled={isCTA1Disabled}\n                  textTransform=\"none\"\n                  data-testid=\"cta1-button\"\n                  onClick={() => handleClickedCTA1({ link })}\n                  width=\"100%\"\n                  label={CTA1.text}\n                />\n              )}\n            </GoToCloud>\n          </Box>\n          <Box\n            data-ga={`connection-to-cloud::click-check-now::ad`}\n            onClick={onRefresh}\n            height={10}\n            className=\"btn btn-default\"\n            data-testid=\"cta2-button\"\n            width={{ min: 40 }}\n          >\n            <Box as={Text} sx={{ fontWeight: \"500\", lineHeight: \"25px\" }}>\n              Check Now\n            </Box>\n          </Box>\n        </ModalFooter>\n      </ModalContent>\n    </Modal>\n  )\n}\n\nexport default CloudConnectionStatusModal\n","import React, { useState, useCallback, useEffect } from \"react\"\nimport useCloudConnectionStatus from \"./use-cloud-connection-status\"\nimport CloudConnectionStatusModal from \"./cloud-connection-status-modal\"\n\nimport { Pill, Flex } from \"@netdata/netdata-ui\"\nimport { useSelector } from \"react-redux\"\nimport { useRequestRefreshOfAccessMessage } from \"hooks/use-user-node-access\"\nimport { selectUserNodeAccess } from \"domains/global/selectors\"\nimport { PromoProps } from \"@/src/domains/dashboard/components/migration-modal\"\nimport { selectIsCloudEnabled } from \"domains/global/selectors\"\n\nconst CloudConnectionStatus = () => {\n  const userNodeAccess = useSelector(selectUserNodeAccess) as PromoProps\n  const cloudEnabled = useSelector(selectIsCloudEnabled)\n\n  const [isModalOpen, setModalOpen] = useState(false)\n  const cloudConnectionStatusInfo = useCloudConnectionStatus({\n    userStatus: userNodeAccess?.userStatus || \"UNKNOWN\",\n    nodeStatus: userNodeAccess?.nodeLiveness || \"NOT_LIVE\",\n    date: \"\",\n  })\n\n  useEffect(() => {\n    if (isModalOpen) {\n      document.documentElement.style.overflow = \"hidden\"\n    } else {\n      document.documentElement.style.overflow = \"auto\"\n    }\n  }, [isModalOpen])\n\n  const openModal = useCallback(() => {\n    setModalOpen(true)\n  }, [])\n\n  const closeModal = useCallback(() => {\n    setModalOpen(false)\n  }, [])\n\n  const onRefresh = useRequestRefreshOfAccessMessage()\n\n  if (!cloudEnabled) return null\n\n  return (\n    <Flex column>\n      <Pill\n        data-ga={`connection-to-cloud::click-pill::ad`}\n        data-testid=\"header-connection-to-cloud-button\"\n        onClick={openModal}\n        flavour=\"neutral\"\n      >\n        Connection to Cloud\n      </Pill>\n      {isModalOpen && (\n        <CloudConnectionStatusModal\n          {...cloudConnectionStatusInfo}\n          isCTA1Disabled={userNodeAccess?.nodeLiveness !== \"LIVE\"}\n          closeModal={closeModal}\n          onRefresh={onRefresh}\n        />\n      )}\n    </Flex>\n  )\n}\n\nexport default CloudConnectionStatus\n","import { equals } from \"ramda\"\n\n// we use numbers to specify time. it can be either a timestamp (ms), or a relative value in seconds\n// which is always 0 or less (0 is now, -300 is -5 minutes)\n\nexport const isTimestamp = (x: number) => x > 0\n\nexport const NETDATA_REGISTRY_SERVER = \"https://registry.my-netdata.io\"\n\nexport const MS_IN_SECOND = 1000\nexport const NODE_VIEW_DYGRAPH_TITLE_HEIGHT = 30\nexport const DEFAULT_DASHBOARD_DURATION = 5 * 60\n\nexport const getIframeSrc = (cloudBaseURL: string, path: string) => `${cloudBaseURL}/sso/v2/${path}`\nexport const utmUrlSuffix = \"&utm_source=agent&utm_medium=web\"\n\nexport const getInitialAfterFromWindow = () => {\n  const div = document.getElementById(\"charts_div\")\n  if (!div) {\n    // eslint-disable-next-line no-console\n    console.error(\"Couldn't find '.charts_div' element to calculate width\")\n    return -900\n  }\n  // based on https://github.com/netdata/dashboard/blob/7a7b538b00f1c5a4e1550f69cb5333212bb68f95/src/main.js#L1753\n  // eslint-disable-next-line max-len\n  // var duration = Math.round(($(div).width() * pcent_width / 100 * data.update_every / 3) / 60) * 60;\n  return -Math.round(div.getBoundingClientRect().width / 3 / 60) * 60\n}\n\nexport const SPACE_PANEL_STATE = \"space-panel-state\"\n\nexport const useNewKeysOnlyIfDifferent = <T extends {}>(\n  keys: (keyof T)[],\n  obj1: T | null,\n  obj2: T\n): T => {\n  if (!obj1) {\n    return obj2\n  }\n  return keys.reduce<T>(\n    (acc, key) => ({\n      ...acc,\n      [key]: equals(obj1[key], obj2![key]) ? obj1[key] : obj2[key],\n    }),\n    obj2\n  )\n}\n\nexport type AnyFunction<T = any> = (...args: T[]) => any\n\nexport type FunctionArguments<T extends Function> = T extends (...args: infer R) => any ? R : never\n\nexport function callAll<T extends AnyFunction>(...fns: (T | undefined)[]) {\n  return function mergedFn(arg: FunctionArguments<T>[0]) {\n    fns.forEach(fn => {\n      fn?.(arg)\n    })\n  }\n}\n","/* eslint-disable */\n/*!\n * d3pie\n * @author Ben Keen\n * @version 0.1.9\n * @date June 17th, 2015\n * @repo http://github.com/benkeen/d3pie\n * SPDX-License-Identifier: MIT\n */\n\n// UMD pattern from https://github.com/umdjs/umd/blob/master/returnExports.js\n(function(root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module\n    define([], factory);\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but only CommonJS-like environments that support module.exports,\n    // like Node\n    module.exports = factory();\n  } else {\n    // browser globals (root is window)\n    root.d3pie = factory(root);\n  }\n}(this, function() {\n\n    var _scriptName = \"d3pie\";\n    var _version = \"0.2.1\";\n\n    // used to uniquely generate IDs and classes, ensuring no conflict between multiple pies on the same page\n    var _uniqueIDCounter = 0;\n\n\n    // this section includes all helper libs on the d3pie object. They're populated via grunt-template. Note: to keep\n    // the syntax highlighting from getting all messed up, I commented out each line. That REQUIRES each of the files\n    // to have an empty first line. Crumby, yes, but acceptable.\n    //// --------- _default-settings.js -----------/**\n/**\n * Contains the out-the-box settings for the script. Any of these settings that aren't explicitly overridden for the\n * d3pie instance will inherit from these. This is also included on the main website for use in the generation script.\n */\nvar defaultSettings = {\n    header: {\n        title: {\n            text:     \"\",\n            color:    \"#333333\",\n            fontSize: 18,\n            fontWeight: \"bold\",\n            font:     \"arial\"\n        },\n        subtitle: {\n            text:     \"\",\n            color:    \"#666666\",\n            fontSize: 14,\n            fontWeight: \"bold\",\n            font:     \"arial\"\n        },\n        location: \"top-center\",\n        titleSubtitlePadding: 8\n    },\n    footer: {\n        text: \t  \"\",\n        color:    \"#666666\",\n        fontSize: 14,\n        fontWeight: \"bold\",\n        font:     \"arial\",\n        location: \"left\"\n    },\n    size: {\n        canvasHeight: 500,\n        canvasWidth: 500,\n        pieInnerRadius: \"0%\",\n        pieOuterRadius: null\n    },\n    data: {\n        sortOrder: \"none\",\n        ignoreSmallSegments: {\n            enabled: false,\n            valueType: \"percentage\",\n            value: null\n        },\n        smallSegmentGrouping: {\n            enabled: false,\n            value: 1,\n            valueType: \"percentage\",\n            label: \"Other\",\n            color: \"#cccccc\"\n        },\n        content: []\n    },\n    labels: {\n        outer: {\n            format: \"label\",\n            hideWhenLessThanPercentage: null,\n            pieDistance: 30\n        },\n        inner: {\n            format: \"percentage\",\n            hideWhenLessThanPercentage: null\n        },\n        mainLabel: {\n            color: \"#333333\",\n            font: \"arial\",\n            fontWeight: \"normal\",\n            fontSize: 10\n        },\n        percentage: {\n            color: \"#dddddd\",\n            font: \"arial\",\n            fontWeight: \"bold\",\n            fontSize: 10,\n            decimalPlaces: 0\n        },\n        value: {\n            color: \"#cccc44\",\n            fontWeight: \"bold\",\n            font: \"arial\",\n            fontSize: 10\n        },\n        lines: {\n            enabled: true,\n            style: \"curved\",\n            color: \"segment\"\n        },\n        truncation: {\n            enabled: false,\n            truncateLength: 30\n        },\n    formatter: null\n    },\n    effects: {\n        load: {\n            effect: \"none\", // \"default\", commented in the code\n            speed: 1000\n        },\n        pullOutSegmentOnClick: {\n            effect: \"none\", // \"bounce\", commented in the code\n            speed: 300,\n            size: 10\n        },\n        highlightSegmentOnMouseover: false,\n        highlightLuminosity: -0.2\n    },\n    tooltips: {\n        enabled: false,\n        type: \"placeholder\", // caption|placeholder\n        string: \"\",\n        placeholderParser: null,\n        styles: {\n        fadeInSpeed: 250,\n        backgroundColor: \"#000000\",\n        backgroundOpacity: 0.5,\n        color: \"#efefef\",\n        borderRadius: 2,\n        font: \"arial\",\n        fontWeight: \"bold\",\n        fontSize: 10,\n        padding: 4\n        }\n    },\n    misc: {\n        colors: {\n            background: null,\n            segments: [\n                \"#2484c1\", \"#65a620\", \"#7b6888\", \"#a05d56\", \"#961a1a\", \"#d8d23a\", \"#e98125\", \"#d0743c\", \"#635222\", \"#6ada6a\",\n                \"#0c6197\", \"#7d9058\", \"#207f33\", \"#44b9b0\", \"#bca44a\", \"#e4a14b\", \"#a3acb2\", \"#8cc3e9\", \"#69a6f9\", \"#5b388f\",\n                \"#546e91\", \"#8bde95\", \"#d2ab58\", \"#273c71\", \"#98bf6e\", \"#4daa4b\", \"#98abc5\", \"#cc1010\", \"#31383b\", \"#006391\",\n                \"#c2643f\", \"#b0a474\", \"#a5a39c\", \"#a9c2bc\", \"#22af8c\", \"#7fcecf\", \"#987ac6\", \"#3d3b87\", \"#b77b1c\", \"#c9c2b6\",\n                \"#807ece\", \"#8db27c\", \"#be66a2\", \"#9ed3c6\", \"#00644b\", \"#005064\", \"#77979f\", \"#77e079\", \"#9c73ab\", \"#1f79a7\"\n            ],\n            segmentStroke: \"#ffffff\"\n        },\n        gradient: {\n            enabled: false,\n            percentage: 95,\n            color: \"#000000\"\n        },\n        canvasPadding: {\n            top: 5,\n            right: 5,\n            bottom: 5,\n            left: 5\n        },\n        pieCenterOffset: {\n            x: 0,\n            y: 0\n        },\n        cssPrefix: null\n    },\n    callbacks: {\n        onload: null,\n        onMouseoverSegment: null,\n        onMouseoutSegment: null,\n        onClickSegment: null\n    }\n};\n\n    //// --------- validate.js -----------\nvar validate = {\n\n    // called whenever a new pie chart is created\n    initialCheck: function(pie) {\n        var cssPrefix = pie.cssPrefix;\n        var element = pie.element;\n        var options = pie.options;\n\n        // confirm d3 is available [check minimum version]\n        if (!window.d3 || !window.d3.hasOwnProperty(\"version\")) {\n            console.error(\"d3pie error: d3 is not available\");\n            return false;\n        }\n\n        // confirm element is either a DOM element or a valid string for a DOM element\n        if (!(element instanceof HTMLElement || element instanceof SVGElement)) {\n            console.error(\"d3pie error: the first d3pie() param must be a valid DOM element (not jQuery) or a ID string.\");\n            return false;\n        }\n\n        // confirm the CSS prefix is valid. It has to start with a-Z and contain nothing but a-Z0-9_-\n        if (!(/[a-zA-Z][a-zA-Z0-9_-]*$/.test(cssPrefix))) {\n            console.error(\"d3pie error: invalid options.misc.cssPrefix\");\n            return false;\n        }\n\n        // confirm some data has been supplied\n        if (!helpers.isArray(options.data.content)) {\n            console.error(\"d3pie error: invalid config structure: missing data.content property.\");\n            return false;\n        }\n        if (options.data.content.length === 0) {\n            console.error(\"d3pie error: no data supplied.\");\n            return false;\n        }\n\n        // clear out any invalid data. Each data row needs a valid positive number and a label\n        var data = [];\n        for (var i=0; i<options.data.content.length; i++) {\n            if (typeof options.data.content[i].value !== \"number\" || isNaN(options.data.content[i].value)) {\n                console.log(\"not valid: \", options.data.content[i]);\n                continue;\n            }\n            if (options.data.content[i].value <= 0) {\n                console.log(\"not valid - should have positive value: \", options.data.content[i]);\n                continue;\n            }\n            data.push(options.data.content[i]);\n        }\n        pie.options.data.content = data;\n\n        // labels.outer.hideWhenLessThanPercentage - 1-100\n        // labels.inner.hideWhenLessThanPercentage - 1-100\n\n        return true;\n    }\n};\n\n    //// --------- helpers.js -----------\nvar helpers = {\n\n    // creates the SVG element\n    addSVGSpace: function(pie) {\n        var element = pie.element;\n        var canvasWidth = pie.options.size.canvasWidth;\n        var canvasHeight = pie.options.size.canvasHeight;\n        var backgroundColor = pie.options.misc.colors.background;\n\n        var svg = d3.select(element).append(\"svg:svg\")\n            .attr(\"width\", canvasWidth)\n            .attr(\"height\", canvasHeight);\n\n        if (backgroundColor !== \"transparent\") {\n            svg.style(\"background-color\", function() { return backgroundColor; });\n        }\n\n        return svg;\n    },\n\n    shuffleArray: function(array) {\n        var currentIndex = array.length, tmpVal, randomIndex;\n\n        while (0 !== currentIndex) {\n            randomIndex = Math.floor(Math.random() * currentIndex);\n            currentIndex -= 1;\n\n            // and swap it with the current element\n            tmpVal = array[currentIndex];\n            array[currentIndex] = array[randomIndex];\n            array[randomIndex] = tmpVal;\n        }\n        return array;\n    },\n\n    processObj: function(obj, is, value) {\n        if (typeof is === 'string') {\n            return helpers.processObj(obj, is.split('.'), value);\n        } else if (is.length === 1 && value !== undefined) {\n            obj[is[0]] = value;\n            return obj[is[0]];\n        } else if (is.length === 0) {\n            return obj;\n        } else {\n            return helpers.processObj(obj[is[0]], is.slice(1), value);\n        }\n    },\n\n    getDimensions: function(el) {\n        if(typeof el === 'string')\n            el = document.getElementById(el);\n\n        var w = 0, h = 0;\n        if (el) {\n            var dimensions = el.getBBox();\n            w = dimensions.width;\n            h = dimensions.height;\n        }\n        else {\n            console.log(\"error: getDimensions() \" + id + \" not found.\");\n        }\n\n        return { w: w, h: h };\n    },\n\n    /**\n     * This is based on the SVG coordinate system, where top-left is 0,0 and bottom right is n-n.\n     * @param r1\n     * @param r2\n     * @returns {boolean}\n     */\n    rectIntersect: function(r1, r2) {\n        var returnVal = (\n            // r2.left > r1.right\n            (r2.x > (r1.x + r1.w)) ||\n\n            // r2.right < r1.left\n            ((r2.x + r2.w) < r1.x) ||\n\n            // r2.top < r1.bottom\n            ((r2.y + r2.h) < r1.y) ||\n\n            // r2.bottom > r1.top\n            (r2.y > (r1.y + r1.h))\n        );\n\n        return !returnVal;\n    },\n\n    /**\n     * Returns a lighter/darker shade of a hex value, based on a luminance value passed.\n     * @param hex a hex color value such as “#abc” or “#123456″ (the hash is optional)\n     * @param lum the luminosity factor: -0.1 is 10% darker, 0.2 is 20% lighter, etc.\n     * @returns {string}\n     */\n    getColorShade: function(hex, lum) {\n\n        // validate hex string\n        hex = String(hex).replace(/[^0-9a-f]/gi, '');\n        if (hex.length < 6) {\n            hex = hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2];\n        }\n        lum = lum || 0;\n\n        // convert to decimal and change luminosity\n        var newHex = \"#\";\n        for (var i=0; i<3; i++) {\n            var c = parseInt(hex.substr(i * 2, 2), 16);\n            c = Math.round(Math.min(Math.max(0, c + (c * lum)), 255)).toString(16);\n            newHex += (\"00\" + c).substr(c.length);\n        }\n\n        return newHex;\n    },\n\n    /**\n     * Users can choose to specify segment colors in three ways (in order of precedence):\n     * \t1. include a \"color\" attribute for each row in data.content\n     * \t2. include a misc.colors.segments property which contains an array of hex codes\n     * \t3. specify nothing at all and rely on this lib provide some reasonable defaults\n     *\n     * This function sees what's included and populates this.options.colors with whatever's required\n     * for this pie chart.\n     * @param data\n     */\n    initSegmentColors: function(pie) {\n        var data   = pie.options.data.content;\n        var colors = pie.options.misc.colors.segments;\n\n        // TODO this needs a ton of error handling\n\n        var finalColors = [];\n        for (var i=0; i<data.length; i++) {\n            if (data[i].hasOwnProperty(\"color\")) {\n                finalColors.push(data[i].color);\n            } else {\n                finalColors.push(colors[i]);\n            }\n        }\n\n        return finalColors;\n    },\n\n    applySmallSegmentGrouping: function(data, smallSegmentGrouping) {\n        var totalSize;\n        if (smallSegmentGrouping.valueType === \"percentage\") {\n            totalSize = math.getTotalPieSize(data);\n        }\n\n        // loop through each data item\n        var newData = [];\n        var groupedData = [];\n        var totalGroupedData = 0;\n        for (var i=0; i<data.length; i++) {\n            if (smallSegmentGrouping.valueType === \"percentage\") {\n                var dataPercent = (data[i].value / totalSize) * 100;\n                if (dataPercent <= smallSegmentGrouping.value) {\n                    groupedData.push(data[i]);\n                    totalGroupedData += data[i].value;\n                    continue;\n                }\n                data[i].isGrouped = false;\n                newData.push(data[i]);\n            } else {\n                if (data[i].value <= smallSegmentGrouping.value) {\n                    groupedData.push(data[i]);\n                    totalGroupedData += data[i].value;\n                    continue;\n                }\n                data[i].isGrouped = false;\n                newData.push(data[i]);\n            }\n        }\n\n        // we're done! See if there's any small segment groups to add\n        if (groupedData.length) {\n            newData.push({\n                color: smallSegmentGrouping.color,\n                label: smallSegmentGrouping.label,\n                value: totalGroupedData,\n                isGrouped: true,\n                groupedData: groupedData\n            });\n        }\n\n        return newData;\n    },\n\n    // for debugging\n    showPoint: function(svg, x, y) {\n        svg.append(\"circle\").attr(\"cx\", x).attr(\"cy\", y).attr(\"r\", 2).style(\"fill\", \"black\");\n    },\n\n    isFunction: function(functionToCheck) {\n        var getType = {};\n        return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n    },\n\n    isArray: function(o) {\n        return Object.prototype.toString.call(o) === '[object Array]';\n    }\n};\n\n\n// taken from jQuery\nvar extend = function() {\n    var options, name, src, copy, copyIsArray, clone, target = arguments[0] || {},\n        i = 1,\n        length = arguments.length,\n        deep = false,\n        toString = Object.prototype.toString,\n        hasOwn = Object.prototype.hasOwnProperty,\n        class2type = {\n            \"[object Boolean]\": \"boolean\",\n            \"[object Number]\": \"number\",\n            \"[object String]\": \"string\",\n            \"[object Function]\": \"function\",\n            \"[object Array]\": \"array\",\n            \"[object Date]\": \"date\",\n            \"[object RegExp]\": \"regexp\",\n            \"[object Object]\": \"object\"\n        },\n\n        jQuery = {\n            isFunction: function (obj) {\n                return jQuery.type(obj) === \"function\";\n            },\n            isArray: Array.isArray ||\n                function (obj) {\n                    return jQuery.type(obj) === \"array\";\n                },\n            isWindow: function (obj) {\n                return obj !== null && obj === obj.window;\n            },\n            isNumeric: function (obj) {\n                return !isNaN(parseFloat(obj)) && isFinite(obj);\n            },\n            type: function (obj) {\n                return obj === null ? String(obj) : class2type[toString.call(obj)] || \"object\";\n            },\n            isPlainObject: function (obj) {\n                if (!obj || jQuery.type(obj) !== \"object\" || obj.nodeType) {\n                    return false;\n                }\n                try {\n                    if (obj.constructor && !hasOwn.call(obj, \"constructor\") && !hasOwn.call(obj.constructor.prototype, \"isPrototypeOf\")) {\n                        return false;\n                    }\n                } catch (e) {\n                    return false;\n                }\n                var key;\n                for (key in obj) {}\n                return key === undefined || hasOwn.call(obj, key);\n            }\n        };\n    if (typeof target === \"boolean\") {\n        deep = target;\n        target = arguments[1] || {};\n        i = 2;\n    }\n    if (typeof target !== \"object\" && !jQuery.isFunction(target)) {\n        target = {};\n    }\n    if (length === i) {\n        target = this;\n        --i;\n    }\n    for (i; i < length; i++) {\n        if ((options = arguments[i]) !== null) {\n            for (name in options) {\n                src = target[name];\n                copy = options[name];\n                if (target === copy) {\n                    continue;\n                }\n                if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)))) {\n                    if (copyIsArray) {\n                        copyIsArray = false;\n                        clone = src && jQuery.isArray(src) ? src : [];\n                    } else {\n                        clone = src && jQuery.isPlainObject(src) ? src : {};\n                    }\n                    // WARNING: RECURSION\n                    target[name] = extend(deep, clone, copy);\n                } else if (copy !== undefined) {\n                    target[name] = copy;\n                }\n            }\n        }\n    }\n    return target;\n};\n    //// --------- math.js -----------\nvar math = {\n\n    toRadians: function(degrees) {\n        return degrees * (Math.PI / 180);\n    },\n\n    toDegrees: function(radians) {\n        return radians * (180 / Math.PI);\n    },\n\n    computePieRadius: function(pie) {\n        var size = pie.options.size;\n        var canvasPadding = pie.options.misc.canvasPadding;\n\n        // outer radius is either specified (e.g. through the generator), or omitted altogether\n        // and calculated based on the canvas dimensions. Right now the estimated version isn't great - it should\n        // be possible to calculate it to precisely generate the maximum sized pie, but it's fussy as heck. Something\n        // for the next release.\n\n        // first, calculate the default _outerRadius\n        var w = size.canvasWidth - canvasPadding.left - canvasPadding.right;\n        var h = size.canvasHeight - canvasPadding.top - canvasPadding.bottom;\n\n        // now factor in the footer, title & subtitle\n        if (pie.options.header.location !== \"pie-center\") {\n            h -= pie.textComponents.headerHeight;\n        }\n\n        if (pie.textComponents.footer.exists) {\n            h -= pie.textComponents.footer.h;\n        }\n\n        // for really teeny pies, h may be < 0. Adjust it back\n        h = (h < 0) ? 0 : h;\n\n        var outerRadius = ((w < h) ? w : h) / 3;\n        var innerRadius, percent;\n\n        // if the user specified something, use that instead\n        if (size.pieOuterRadius !== null) {\n            if (/%/.test(size.pieOuterRadius)) {\n                percent = parseInt(size.pieOuterRadius.replace(/[\\D]/, \"\"), 10);\n                percent = (percent > 99) ? 99 : percent;\n                percent = (percent < 0) ? 0 : percent;\n\n                var smallestDimension = (w < h) ? w : h;\n\n                // now factor in the label line size\n                if (pie.options.labels.outer.format !== \"none\") {\n                    var pieDistanceSpace = parseInt(pie.options.labels.outer.pieDistance, 10) * 2;\n                    if (smallestDimension - pieDistanceSpace > 0) {\n                        smallestDimension -= pieDistanceSpace;\n                    }\n                }\n\n                outerRadius = Math.floor((smallestDimension / 100) * percent) / 2;\n            } else {\n                outerRadius = parseInt(size.pieOuterRadius, 10);\n            }\n        }\n\n        // inner radius\n        if (/%/.test(size.pieInnerRadius)) {\n            percent = parseInt(size.pieInnerRadius.replace(/[\\D]/, \"\"), 10);\n            percent = (percent > 99) ? 99 : percent;\n            percent = (percent < 0) ? 0 : percent;\n            innerRadius = Math.floor((outerRadius / 100) * percent);\n        } else {\n            innerRadius = parseInt(size.pieInnerRadius, 10);\n        }\n\n        pie.innerRadius = innerRadius;\n        pie.outerRadius = outerRadius;\n    },\n\n    getTotalPieSize: function(data) {\n        var totalSize = 0;\n        for (var i=0; i<data.length; i++) {\n            totalSize += data[i].value;\n        }\n        return totalSize;\n    },\n\n    sortPieData: function(pie) {\n        var data                 = pie.options.data.content;\n        var sortOrder            = pie.options.data.sortOrder;\n\n        switch (sortOrder) {\n            case \"none\":\n                // do nothing\n                break;\n            case \"random\":\n                data = helpers.shuffleArray(data);\n                break;\n            case \"value-asc\":\n                data.sort(function(a, b) { return (a.value < b.value) ? -1 : 1; });\n                break;\n            case \"value-desc\":\n                data.sort(function(a, b) { return (a.value < b.value) ? 1 : -1; });\n                break;\n            case \"label-asc\":\n                data.sort(function(a, b) { return (a.label.toLowerCase() > b.label.toLowerCase()) ? 1 : -1; });\n                break;\n            case \"label-desc\":\n                data.sort(function(a, b) { return (a.label.toLowerCase() < b.label.toLowerCase()) ? 1 : -1; });\n                break;\n        }\n\n        return data;\n    },\n\n    // var pieCenter = math.getPieCenter();\n    getPieTranslateCenter: function(pieCenter) {\n        return \"translate(\" + pieCenter.x + \",\" + pieCenter.y + \")\";\n    },\n\n    /**\n     * Used to determine where on the canvas the center of the pie chart should be. It takes into account the\n     * height and position of the title, subtitle and footer, and the various paddings.\n     * @private\n     */\n    calculatePieCenter: function(pie) {\n        var pieCenterOffset = pie.options.misc.pieCenterOffset;\n        var hasTopTitle    = (pie.textComponents.title.exists && pie.options.header.location !== \"pie-center\");\n        var hasTopSubtitle = (pie.textComponents.subtitle.exists && pie.options.header.location !== \"pie-center\");\n\n        var headerOffset = pie.options.misc.canvasPadding.top;\n        if (hasTopTitle && hasTopSubtitle) {\n            headerOffset += pie.textComponents.title.h + pie.options.header.titleSubtitlePadding + pie.textComponents.subtitle.h;\n        } else if (hasTopTitle) {\n            headerOffset += pie.textComponents.title.h;\n        } else if (hasTopSubtitle) {\n            headerOffset += pie.textComponents.subtitle.h;\n        }\n\n        var footerOffset = 0;\n        if (pie.textComponents.footer.exists) {\n            footerOffset = pie.textComponents.footer.h + pie.options.misc.canvasPadding.bottom;\n        }\n\n        var x = ((pie.options.size.canvasWidth - pie.options.misc.canvasPadding.left - pie.options.misc.canvasPadding.right) / 2) + pie.options.misc.canvasPadding.left;\n        var y = ((pie.options.size.canvasHeight - footerOffset - headerOffset) / 2) + headerOffset;\n\n        x += pieCenterOffset.x;\n        y += pieCenterOffset.y;\n\n        pie.pieCenter = { x: x, y: y };\n    },\n\n\n    /**\n     * Rotates a point (x, y) around an axis (xm, ym) by degrees (a).\n     * @param x\n     * @param y\n     * @param xm\n     * @param ym\n     * @param a angle in degrees\n     * @returns {Array}\n     */\n    rotate: function(x, y, xm, ym, a) {\n\n        a = a * Math.PI / 180; // convert to radians\n\n        var cos = Math.cos,\n            sin = Math.sin,\n        // subtract midpoints, so that midpoint is translated to origin and add it in the end again\n        xr = (x - xm) * cos(a) - (y - ym) * sin(a) + xm,\n        yr = (x - xm) * sin(a) + (y - ym) * cos(a) + ym;\n\n        return { x: xr, y: yr };\n    },\n\n    /**\n     * Translates a point x, y by distance d, and by angle a.\n     * @param x\n     * @param y\n     * @param dist\n     * @param a angle in degrees\n     */\n    translate: function(x, y, d, a) {\n        var rads = math.toRadians(a);\n        return {\n            x: x + d * Math.sin(rads),\n            y: y - d * Math.cos(rads)\n        };\n    },\n\n    // from: http://stackoverflow.com/questions/19792552/d3-put-arc-labels-in-a-pie-chart-if-there-is-enough-space\n    pointIsInArc: function(pt, ptData, d3Arc) {\n        // Center of the arc is assumed to be 0,0\n        // (pt.x, pt.y) are assumed to be relative to the center\n        var r1 = d3Arc.innerRadius()(ptData), // Note: Using the innerRadius\n            r2 = d3Arc.outerRadius()(ptData),\n            theta1 = d3Arc.startAngle()(ptData),\n            theta2 = d3Arc.endAngle()(ptData);\n\n        var dist = pt.x * pt.x + pt.y * pt.y,\n            angle = Math.atan2(pt.x, -pt.y); // Note: different coordinate system\n\n        angle = (angle < 0) ? (angle + Math.PI * 2) : angle;\n\n        return (r1 * r1 <= dist) && (dist <= r2 * r2) &&\n            (theta1 <= angle) && (angle <= theta2);\n    }\n};\n\n    //// --------- labels.js -----------\nvar labels = {\n\n    /**\n     * Adds the labels to the pie chart, but doesn't position them. There are two locations for the\n     * labels: inside (center) of the segments, or outside the segments on the edge.\n     * @param section \"inner\" or \"outer\"\n     * @param sectionDisplayType \"percentage\", \"value\", \"label\", \"label-value1\", etc.\n     * @param pie\n     */\n    add: function(pie, section, sectionDisplayType) {\n        var include = labels.getIncludes(sectionDisplayType);\n        var settings = pie.options.labels;\n\n        // group the label groups (label, percentage, value) into a single element for simpler positioning\n        var outerLabel = pie.svg.insert(\"g\", \".\" + pie.cssPrefix + \"labels-\" + section)\n            .attr(\"class\", pie.cssPrefix + \"labels-\" + section);\n\n        var labelGroup = pie.__labels[section] = outerLabel.selectAll(\".\" + pie.cssPrefix + \"labelGroup-\" + section)\n            .data(pie.options.data.content)\n            .enter()\n            .append(\"g\")\n            .attr(\"id\", function(d, i) { return pie.cssPrefix + \"labelGroup\" + i + \"-\" + section; })\n            .attr(\"data-index\", function(d, i) { return i; })\n            .attr(\"class\", pie.cssPrefix + \"labelGroup-\" + section)\n            .style(\"opacity\", 0);\n\n        var formatterContext = { section: section, sectionDisplayType: sectionDisplayType };\n\n        // 1. Add the main label\n        if (include.mainLabel) {\n            labelGroup.append(\"text\")\n                .attr(\"id\", function(d, i) { return pie.cssPrefix + \"segmentMainLabel\" + i + \"-\" + section; })\n                .attr(\"class\", pie.cssPrefix + \"segmentMainLabel-\" + section)\n                .text(function(d, i) {\n                    var str = d.label;\n\n                    // if a custom formatter has been defined, pass it the raw label string - it can do whatever it wants with it.\n                    // we only apply truncation if it's not defined\n                    if (settings.formatter) {\n                        formatterContext.index = i;\n                        formatterContext.part = 'mainLabel';\n                        formatterContext.value = d.value;\n                        formatterContext.label = str;\n                        str = settings.formatter(formatterContext);\n                    } else if (settings.truncation.enabled && d.label.length > settings.truncation.truncateLength) {\n                        str = d.label.substring(0, settings.truncation.truncateLength) + \"...\";\n                    }\n                    return str;\n                })\n                .style(\"font-size\", settings.mainLabel.fontSize + \"px\")\n                .style(\"font-family\", settings.mainLabel.font)\n                .style(\"font-weight\", settings.mainLabel.fontWeight)\n                .style(\"fill\", function(d, i) {\n                    return (settings.mainLabel.color === \"segment\") ? pie.options.colors[i] : settings.mainLabel.color;\n                });\n        }\n\n        // 2. Add the percentage label\n        if (include.percentage) {\n            labelGroup.append(\"text\")\n                .attr(\"id\", function(d, i) { return pie.cssPrefix + \"segmentPercentage\" + i + \"-\" + section; })\n                .attr(\"class\", pie.cssPrefix + \"segmentPercentage-\" + section)\n                .text(function(d, i) {\n                    var percentage = d.percentage;\n                    if (settings.formatter) {\n                        formatterContext.index = i;\n                        formatterContext.part = \"percentage\";\n                        formatterContext.value = d.value;\n                        formatterContext.label = d.percentage;\n                        percentage = settings.formatter(formatterContext);\n                    } else {\n                        percentage += \"%\";\n                    }\n                    return percentage;\n                })\n                .style(\"font-size\", settings.percentage.fontSize + \"px\")\n                .style(\"font-family\", settings.percentage.font)\n                .style(\"font-weight\", settings.percentage.fontWeight)\n                .style(\"fill\", settings.percentage.color);\n        }\n\n        // 3. Add the value label\n        if (include.value) {\n            labelGroup.append(\"text\")\n                .attr(\"id\", function(d, i) { return pie.cssPrefix +  \"segmentValue\" + i + \"-\" + section; })\n                .attr(\"class\", pie.cssPrefix + \"segmentValue-\" + section)\n                .text(function(d, i) {\n                    formatterContext.index = i;\n                    formatterContext.part = \"value\";\n                    formatterContext.value = d.value;\n                    formatterContext.label = d.value;\n                    return settings.formatter ? settings.formatter(formatterContext, d.value) : d.value;\n                })\n                .style(\"font-size\", settings.value.fontSize + \"px\")\n                .style(\"font-family\", settings.value.font)\n                .style(\"font-weight\", settings.value.fontWeight)\n                .style(\"fill\", settings.value.color);\n        }\n    },\n\n    /**\n     * @param section \"inner\" / \"outer\"\n     */\n    positionLabelElements: function(pie, section, sectionDisplayType) {\n        labels[\"dimensions-\" + section] = [];\n\n        // get the latest widths, heights\n        var labelGroups = pie.__labels[section];\n        labelGroups.each(function(d, i) {\n            var mainLabel  = d3.select(this).selectAll(\".\" + pie.cssPrefix + \"segmentMainLabel-\" + section);\n            var percentage = d3.select(this).selectAll(\".\" + pie.cssPrefix + \"segmentPercentage-\" + section);\n            var value      = d3.select(this).selectAll(\".\" + pie.cssPrefix + \"segmentValue-\" + section);\n\n            labels[\"dimensions-\" + section].push({\n                mainLabel:  (mainLabel.node() !== null) ? mainLabel.node().getBBox() : null,\n                percentage: (percentage.node() !== null) ? percentage.node().getBBox() : null,\n                value:      (value.node() !== null) ? value.node().getBBox() : null\n            });\n        });\n\n        var singleLinePad = 5;\n        var dims = labels[\"dimensions-\" + section];\n        switch (sectionDisplayType) {\n            case \"label-value1\":\n                pie.svg.selectAll(\".\" + pie.cssPrefix + \"segmentValue-\" + section)\n                    .attr(\"dx\", function(d, i) { return dims[i].mainLabel.width + singleLinePad; });\n                break;\n            case \"label-value2\":\n                pie.svg.selectAll(\".\" + pie.cssPrefix + \"segmentValue-\" + section)\n                    .attr(\"dy\", function(d, i) { return dims[i].mainLabel.height; });\n                break;\n            case \"label-percentage1\":\n                pie.svg.selectAll(\".\" + pie.cssPrefix + \"segmentPercentage-\" + section)\n                    .attr(\"dx\", function(d, i) { return dims[i].mainLabel.width + singleLinePad; });\n                break;\n            case \"label-percentage2\":\n                pie.svg.selectAll(\".\" + pie.cssPrefix + \"segmentPercentage-\" + section)\n                    .attr(\"dx\", function(d, i) { return (dims[i].mainLabel.width / 2) - (dims[i].percentage.width / 2); })\n                    .attr(\"dy\", function(d, i) { return dims[i].mainLabel.height; });\n                break;\n        }\n    },\n\n    computeLabelLinePositions: function(pie) {\n        pie.lineCoordGroups = [];\n        pie.__labels.outer\n            .each(function(d, i) { return labels.computeLinePosition(pie, i); });\n    },\n\n    computeLinePosition: function(pie, i) {\n        var angle = segments.getSegmentAngle(i, pie.options.data.content, pie.totalSize, { midpoint: true });\n        var originCoords = math.rotate(pie.pieCenter.x, pie.pieCenter.y - pie.outerRadius, pie.pieCenter.x, pie.pieCenter.y, angle);\n        var heightOffset = pie.outerLabelGroupData[i].h / 5; // TODO check\n        var labelXMargin = 6; // the x-distance of the label from the end of the line [TODO configurable]\n\n        var quarter = Math.floor(angle / 90);\n        var midPoint = 4;\n        var x2, y2, x3, y3;\n\n        // this resolves an issue when the\n        if (quarter === 2 && angle === 180) {\n            quarter = 1;\n        }\n\n        switch (quarter) {\n            case 0:\n                x2 = pie.outerLabelGroupData[i].x - labelXMargin - ((pie.outerLabelGroupData[i].x - labelXMargin - originCoords.x) / 2);\n                y2 = pie.outerLabelGroupData[i].y + ((originCoords.y - pie.outerLabelGroupData[i].y) / midPoint);\n                x3 = pie.outerLabelGroupData[i].x - labelXMargin;\n                y3 = pie.outerLabelGroupData[i].y - heightOffset;\n                break;\n            case 1:\n                x2 = originCoords.x + (pie.outerLabelGroupData[i].x - originCoords.x) / midPoint;\n                y2 = originCoords.y + (pie.outerLabelGroupData[i].y - originCoords.y) / midPoint;\n                x3 = pie.outerLabelGroupData[i].x - labelXMargin;\n                y3 = pie.outerLabelGroupData[i].y - heightOffset;\n                break;\n            case 2:\n                var startOfLabelX = pie.outerLabelGroupData[i].x + pie.outerLabelGroupData[i].w + labelXMargin;\n                x2 = originCoords.x - (originCoords.x - startOfLabelX) / midPoint;\n                y2 = originCoords.y + (pie.outerLabelGroupData[i].y - originCoords.y) / midPoint;\n                x3 = pie.outerLabelGroupData[i].x + pie.outerLabelGroupData[i].w + labelXMargin;\n                y3 = pie.outerLabelGroupData[i].y - heightOffset;\n                break;\n            case 3:\n                var startOfLabel = pie.outerLabelGroupData[i].x + pie.outerLabelGroupData[i].w + labelXMargin;\n                x2 = startOfLabel + ((originCoords.x - startOfLabel) / midPoint);\n                y2 = pie.outerLabelGroupData[i].y + (originCoords.y - pie.outerLabelGroupData[i].y) / midPoint;\n                x3 = pie.outerLabelGroupData[i].x + pie.outerLabelGroupData[i].w + labelXMargin;\n                y3 = pie.outerLabelGroupData[i].y - heightOffset;\n                break;\n        }\n\n        /*\n         * x1 / y1: the x/y coords of the start of the line, at the mid point of the segments arc on the pie circumference\n         * x2 / y2: if \"curved\" line style is being used, this is the midpoint of the line. Other\n         * x3 / y3: the end of the line; closest point to the label\n         */\n        if (pie.options.labels.lines.style === \"straight\") {\n            pie.lineCoordGroups[i] = [\n                { x: originCoords.x, y: originCoords.y },\n                { x: x3, y: y3 }\n            ];\n        } else {\n            pie.lineCoordGroups[i] = [\n                { x: originCoords.x, y: originCoords.y },\n                { x: x2, y: y2 },\n                { x: x3, y: y3 }\n            ];\n        }\n    },\n\n    addLabelLines: function(pie) {\n        var lineGroups = pie.svg.insert(\"g\", \".\" + pie.cssPrefix + \"pieChart\") // meaning, BEFORE .pieChart\n            .attr(\"class\", pie.cssPrefix + \"lineGroups\")\n            .style(\"opacity\", 1);\n\n        var lineGroup = lineGroups.selectAll(\".\" + pie.cssPrefix + \"lineGroup\")\n            .data(pie.lineCoordGroups)\n            .enter()\n            .append(\"g\")\n            .attr(\"class\", pie.cssPrefix + \"lineGroup\");\n\n        var lineFunction = d3.line()\n            .curve(d3.curveBasis)\n            .x(function(d) { return d.x; })\n            .y(function(d) { return d.y; });\n\n        lineGroup.append(\"path\")\n            .attr(\"d\", lineFunction)\n            .attr(\"stroke\", function(d, i) {\n                return (pie.options.labels.lines.color === \"segment\") ? pie.options.colors[i] : pie.options.labels.lines.color;\n            })\n            .attr(\"stroke-width\", 1)\n            .attr(\"fill\", \"none\")\n            .style(\"opacity\", function(d, i) {\n                var percentage = pie.options.labels.outer.hideWhenLessThanPercentage;\n                var isHidden = (percentage !== null && d.percentage < percentage) || pie.options.data.content[i].label === \"\";\n                return isHidden ? 0 : 1;\n            });\n    },\n\n    positionLabelGroups: function(pie, section) {\n        if (pie.options.labels[section].format === \"none\")\n            return;\n\n        pie.__labels[section]\n            .style(\"opacity\", function(d, i) {\n                var percentage = pie.options.labels[section].hideWhenLessThanPercentage;\n                return (percentage !== null && d.percentage < percentage) ? 0 : 1;\n            })\n            .attr(\"transform\", function(d, i) {\n                var x, y;\n                if (section === \"outer\") {\n                    x = pie.outerLabelGroupData[i].x;\n                    y = pie.outerLabelGroupData[i].y;\n                } else {\n                    var pieCenterCopy = extend(true, {}, pie.pieCenter);\n\n                    // now recompute the \"center\" based on the current _innerRadius\n                    if (pie.innerRadius > 0) {\n                        var angle = segments.getSegmentAngle(i, pie.options.data.content, pie.totalSize, { midpoint: true });\n                        var newCoords = math.translate(pie.pieCenter.x, pie.pieCenter.y, pie.innerRadius, angle);\n                        pieCenterCopy.x = newCoords.x;\n                        pieCenterCopy.y = newCoords.y;\n                    }\n\n                    var dims = helpers.getDimensions(pie.cssPrefix + \"labelGroup\" + i + \"-inner\");\n                    var xOffset = dims.w / 2;\n                    var yOffset = dims.h / 4; // confusing! Why 4? should be 2, but it doesn't look right\n\n                    x = pieCenterCopy.x + (pie.lineCoordGroups[i][0].x - pieCenterCopy.x) / 1.8;\n                    y = pieCenterCopy.y + (pie.lineCoordGroups[i][0].y - pieCenterCopy.y) / 1.8;\n\n                    x = x - xOffset;\n                    y = y + yOffset;\n                }\n\n                return \"translate(\" + x + \",\" + y + \")\";\n            });\n    },\n\n\n    getIncludes: function(val) {\n        var addMainLabel  = false;\n        var addValue      = false;\n        var addPercentage = false;\n\n        switch (val) {\n            case \"label\":\n                addMainLabel = true;\n                break;\n            case \"value\":\n                addValue = true;\n                break;\n            case \"percentage\":\n                addPercentage = true;\n                break;\n            case \"label-value1\":\n            case \"label-value2\":\n                addMainLabel = true;\n                addValue = true;\n                break;\n            case \"label-percentage1\":\n            case \"label-percentage2\":\n                addMainLabel = true;\n                addPercentage = true;\n                break;\n        }\n        return {\n            mainLabel: addMainLabel,\n            value: addValue,\n            percentage: addPercentage\n        };\n    },\n\n\n    /**\n     * This does the heavy-lifting to compute the actual coordinates for the outer label groups. It does two things:\n     * 1. Make a first pass and position them in the ideal positions, based on the pie sizes\n     * 2. Do some basic collision avoidance.\n     */\n    computeOuterLabelCoords: function(pie) {\n\n        // 1. figure out the ideal positions for the outer labels\n        pie.__labels.outer\n            .each(function(d, i) {\n                return labels.getIdealOuterLabelPositions(pie, i);\n            });\n\n        // 2. now adjust those positions to try to accommodate conflicts\n        labels.resolveOuterLabelCollisions(pie);\n    },\n\n    /**\n     * This attempts to resolve label positioning collisions.\n     */\n    resolveOuterLabelCollisions: function(pie) {\n    if (pie.options.labels.outer.format === \"none\") {\n      return;\n    }\n\n        var size = pie.options.data.content.length;\n        labels.checkConflict(pie, 0, \"clockwise\", size);\n        labels.checkConflict(pie, size-1, \"anticlockwise\", size);\n    },\n\n    checkConflict: function(pie, currIndex, direction, size) {\n    var i, curr;\n\n        if (size <= 1) {\n            return;\n        }\n\n        var currIndexHemisphere = pie.outerLabelGroupData[currIndex].hs;\n        if (direction === \"clockwise\" && currIndexHemisphere !== \"right\") {\n            return;\n        }\n        if (direction === \"anticlockwise\" && currIndexHemisphere !== \"left\") {\n            return;\n        }\n        var nextIndex = (direction === \"clockwise\") ? currIndex+1 : currIndex-1;\n\n        // this is the current label group being looked at. We KNOW it's positioned properly (the first item\n        // is always correct)\n        var currLabelGroup = pie.outerLabelGroupData[currIndex];\n\n        // this one we don't know about. That's the one we're going to look at and move if necessary\n        var examinedLabelGroup = pie.outerLabelGroupData[nextIndex];\n\n        var info = {\n            labelHeights: pie.outerLabelGroupData[0].h,\n            center: pie.pieCenter,\n            lineLength: (pie.outerRadius + pie.options.labels.outer.pieDistance),\n            heightChange: pie.outerLabelGroupData[0].h + 1 // 1 = padding\n        };\n\n        // loop through *ALL* label groups examined so far to check for conflicts. This is because when they're\n        // very tightly fitted, a later label group may still appear high up on the page\n        if (direction === \"clockwise\") {\n      i = 0;\n            for (; i<=currIndex; i++) {\n                curr = pie.outerLabelGroupData[i];\n\n                // if there's a conflict with this label group, shift the label to be AFTER the last known\n                // one that's been properly placed\n                if (!labels.isLabelHidden(pie, i) && helpers.rectIntersect(curr, examinedLabelGroup)) {\n                    labels.adjustLabelPos(pie, nextIndex, currLabelGroup, info);\n                    break;\n                }\n            }\n        } else {\n      i = size - 1;\n            for (; i >= currIndex; i--) {\n                curr = pie.outerLabelGroupData[i];\n\n                // if there's a conflict with this label group, shift the label to be AFTER the last known\n                // one that's been properly placed\n                if (!labels.isLabelHidden(pie, i) && helpers.rectIntersect(curr, examinedLabelGroup)) {\n                    labels.adjustLabelPos(pie, nextIndex, currLabelGroup, info);\n                    break;\n                }\n            }\n        }\n        labels.checkConflict(pie, nextIndex, direction, size);\n    },\n\n    isLabelHidden: function(pie, index) {\n        var percentage = pie.options.labels.outer.hideWhenLessThanPercentage;\n        return (percentage !== null && d.percentage < percentage) || pie.options.data.content[index].label === \"\";\n    },\n\n    // does a little math to shift a label into a new position based on the last properly placed one\n    adjustLabelPos: function(pie, nextIndex, lastCorrectlyPositionedLabel, info) {\n        var xDiff, yDiff, newXPos, newYPos;\n        newYPos = lastCorrectlyPositionedLabel.y + info.heightChange;\n        yDiff = info.center.y - newYPos;\n\n        if (Math.abs(info.lineLength) > Math.abs(yDiff)) {\n            xDiff = Math.sqrt((info.lineLength * info.lineLength) - (yDiff * yDiff));\n        } else {\n            xDiff = Math.sqrt((yDiff * yDiff) - (info.lineLength * info.lineLength));\n        }\n\n        if (lastCorrectlyPositionedLabel.hs === \"right\") {\n            newXPos = info.center.x + xDiff;\n        } else {\n            newXPos = info.center.x - xDiff - pie.outerLabelGroupData[nextIndex].w;\n        }\n\n        pie.outerLabelGroupData[nextIndex].x = newXPos;\n        pie.outerLabelGroupData[nextIndex].y = newYPos;\n    },\n\n    /**\n     * @param i 0-N where N is the dataset size - 1.\n     */\n    getIdealOuterLabelPositions: function(pie, i) {\n        var labelGroupNode = pie.svg.select(\"#\" + pie.cssPrefix + \"labelGroup\" + i + \"-outer\").node();\n        if (!labelGroupNode) return;\n\n        var labelGroupDims = labelGroupNode.getBBox();\n        var angle = segments.getSegmentAngle(i, pie.options.data.content, pie.totalSize, { midpoint: true });\n\n        var originalX = pie.pieCenter.x;\n        var originalY = pie.pieCenter.y - (pie.outerRadius + pie.options.labels.outer.pieDistance);\n        var newCoords = math.rotate(originalX, originalY, pie.pieCenter.x, pie.pieCenter.y, angle);\n\n        // if the label is on the left half of the pie, adjust the values\n        var hemisphere = \"right\"; // hemisphere\n        if (angle > 180) {\n            newCoords.x -= (labelGroupDims.width + 8);\n            hemisphere = \"left\";\n        } else {\n            newCoords.x += 8;\n        }\n\n        pie.outerLabelGroupData[i] = {\n            x: newCoords.x,\n            y: newCoords.y,\n            w: labelGroupDims.width,\n            h: labelGroupDims.height,\n            hs: hemisphere\n        };\n    }\n};\n\n    //// --------- segments.js -----------\nvar segments = {\n\n    effectMap: {\n        \"none\": d3.easeLinear,\n        \"bounce\": d3.easeBounce,\n        \"linear\": d3.easeLinear,\n        \"sin\": d3.easeSin,\n        \"elastic\": d3.easeElastic,\n        \"back\": d3.easeBack,\n        \"quad\": d3.easeQuad,\n        \"circle\": d3.easeCircle,\n        \"exp\": d3.easeExp\n    },\n\n    /**\n     * Creates the pie chart segments and displays them according to the desired load effect.\n     * @private\n     */\n    create: function(pie) {\n        var pieCenter = pie.pieCenter;\n        var colors = pie.options.colors;\n        var loadEffects = pie.options.effects.load;\n        var segmentStroke = pie.options.misc.colors.segmentStroke;\n\n        // we insert the pie chart BEFORE the title, to ensure the title overlaps the pie\n        var pieChartElement = pie.svg.insert(\"g\", \"#\" + pie.cssPrefix + \"title\")\n            .attr(\"transform\", function() { return math.getPieTranslateCenter(pieCenter); })\n            .attr(\"class\", pie.cssPrefix + \"pieChart\");\n\n        var arc = d3.arc()\n            .innerRadius(pie.innerRadius)\n            .outerRadius(pie.outerRadius)\n            .startAngle(0)\n            .endAngle(function(d) {\n                return (d.value / pie.totalSize) * 2 * Math.PI;\n            });\n\n        var g = pieChartElement.selectAll(\".\" + pie.cssPrefix + \"arc\")\n            .data(pie.options.data.content)\n            .enter()\n            .append(\"g\")\n            .attr(\"class\", pie.cssPrefix + \"arc\");\n\n        // if we're not fading in the pie, just set the load speed to 0\n        //var loadSpeed = loadEffects.speed;\n        //if (loadEffects.effect === \"none\") {\n        //\tloadSpeed = 0;\n        //}\n\n        g.append(\"path\")\n            .attr(\"id\", function(d, i) { return pie.cssPrefix + \"segment\" + i; })\n            .attr(\"fill\", function(d, i) {\n                var color = colors[i];\n                if (pie.options.misc.gradient.enabled) {\n                    color = \"url(#\" + pie.cssPrefix + \"grad\" + i + \")\";\n                }\n                return color;\n            })\n            .style(\"stroke\", segmentStroke)\n            .style(\"stroke-width\", 1)\n            //.transition()\n            //.ease(d3.easeCubicInOut)\n            //.duration(loadSpeed)\n            .attr(\"data-index\", function(d, i) { return i; })\n            .attr(\"d\", arc);\n/*\n            .attrTween(\"d\", function(b) {\n                var i = d3.interpolate({ value: 0 }, b);\n                return function(t) {\n                    var ret = pie.arc(i(t));\n                    console.log(ret);\n                    return ret;\n                };\n            });\n*/\n        pie.svg.selectAll(\"g.\" + pie.cssPrefix + \"arc\")\n            .attr(\"transform\",\n            function(d, i) {\n                var angle = 0;\n                if (i > 0) {\n                    angle = segments.getSegmentAngle(i-1, pie.options.data.content, pie.totalSize);\n                }\n                return \"rotate(\" + angle + \")\";\n            }\n        );\n        pie.arc = arc;\n    },\n\n    addGradients: function(pie) {\n        var grads = pie.svg.append(\"defs\")\n            .selectAll(\"radialGradient\")\n            .data(pie.options.data.content)\n            .enter().append(\"radialGradient\")\n            .attr(\"gradientUnits\", \"userSpaceOnUse\")\n            .attr(\"cx\", 0)\n            .attr(\"cy\", 0)\n            .attr(\"r\", \"120%\")\n            .attr(\"id\", function(d, i) { return pie.cssPrefix + \"grad\" + i; });\n\n        grads.append(\"stop\").attr(\"offset\", \"0%\").style(\"stop-color\", function(d, i) { return pie.options.colors[i]; });\n        grads.append(\"stop\").attr(\"offset\", pie.options.misc.gradient.percentage + \"%\").style(\"stop-color\", pie.options.misc.gradient.color);\n    },\n\n    addSegmentEventHandlers: function(pie) {\n        var arc = pie.svg.selectAll(\".\" + pie.cssPrefix + \"arc\");\n        arc = arc.merge(pie.__labels.inner.merge(pie.__labels.outer));\n\n        arc.on(\"click\", function() {\n            var currentEl = d3.select(this);\n            var segment;\n\n            // mouseover works on both the segments AND the segment labels, hence the following\n            if (currentEl.attr(\"class\") === pie.cssPrefix + \"arc\") {\n                segment = currentEl.select(\"path\");\n            } else {\n                var index = currentEl.attr(\"data-index\");\n                segment = d3.select(\"#\" + pie.cssPrefix + \"segment\" + index);\n            }\n\n            var isExpanded = segment.attr(\"class\") === pie.cssPrefix + \"expanded\";\n            segments.onSegmentEvent(pie, pie.options.callbacks.onClickSegment, segment, isExpanded);\n            if (pie.options.effects.pullOutSegmentOnClick.effect !== \"none\") {\n                if (isExpanded) {\n                    segments.closeSegment(pie, segment.node());\n                } else {\n                    segments.openSegment(pie, segment.node());\n                }\n            }\n        });\n\n        arc.on(\"mouseover\", function() {\n            var currentEl = d3.select(this);\n            var segment, index;\n\n            if (currentEl.attr(\"class\") === pie.cssPrefix + \"arc\") {\n                segment = currentEl.select(\"path\");\n            } else {\n                index = currentEl.attr(\"data-index\");\n                segment = d3.select(\"#\" + pie.cssPrefix + \"segment\" + index);\n            }\n\n            if (pie.options.effects.highlightSegmentOnMouseover) {\n                index = segment.attr(\"data-index\");\n                var segColor = pie.options.colors[index];\n                segment.style(\"fill\", helpers.getColorShade(segColor, pie.options.effects.highlightLuminosity));\n            }\n\n            if (pie.options.tooltips.enabled) {\n                index = segment.attr(\"data-index\");\n                tt.showTooltip(pie, index);\n            }\n\n            var isExpanded = segment.attr(\"class\") === pie.cssPrefix + \"expanded\";\n            segments.onSegmentEvent(pie, pie.options.callbacks.onMouseoverSegment, segment, isExpanded);\n        });\n\n        arc.on(\"mousemove\", function() {\n            tt.moveTooltip(pie);\n        });\n\n        arc.on(\"mouseout\", function() {\n            var currentEl = d3.select(this);\n            var segment, index;\n\n            if (currentEl.attr(\"class\") === pie.cssPrefix + \"arc\") {\n                segment = currentEl.select(\"path\");\n            } else {\n                index = currentEl.attr(\"data-index\");\n                segment = d3.select(\"#\" + pie.cssPrefix + \"segment\" + index);\n            }\n\n            if (pie.options.effects.highlightSegmentOnMouseover) {\n                index = segment.attr(\"data-index\");\n                var color = pie.options.colors[index];\n                if (pie.options.misc.gradient.enabled) {\n                    color = \"url(#\" + pie.cssPrefix + \"grad\" + index + \")\";\n                }\n                segment.style(\"fill\", color);\n            }\n\n            if (pie.options.tooltips.enabled) {\n                index = segment.attr(\"data-index\");\n                tt.hideTooltip(pie, index);\n            }\n\n            var isExpanded = segment.attr(\"class\") === pie.cssPrefix + \"expanded\";\n            segments.onSegmentEvent(pie, pie.options.callbacks.onMouseoutSegment, segment, isExpanded);\n        });\n    },\n\n    // helper function used to call the click, mouseover, mouseout segment callback functions\n    onSegmentEvent: function(pie, func, segment, isExpanded) {\n        if (!helpers.isFunction(func)) {\n            return;\n        }\n        var index = parseInt(segment.attr(\"data-index\"), 10);\n        func({\n            segment: segment.node(),\n            index: index,\n            expanded: isExpanded,\n            data: pie.options.data.content[index]\n        });\n    },\n\n    openSegment: function(pie, segment) {\n        if (pie.isOpeningSegment) {\n            return;\n        }\n        pie.isOpeningSegment = true;\n\n        segments.maybeCloseOpenSegment(pie);\n\n        d3.select(segment)\n            .transition()\n            .ease(segments.effectMap[pie.options.effects.pullOutSegmentOnClick.effect])\n            .duration(pie.options.effects.pullOutSegmentOnClick.speed)\n            .attr(\"transform\", function(d, i) {\n                var c = pie.arc.centroid(d),\n                    x = c[0],\n                    y = c[1],\n                    h = Math.sqrt(x*x + y*y),\n                    pullOutSize = parseInt(pie.options.effects.pullOutSegmentOnClick.size, 10);\n\n                return \"translate(\" + ((x/h) * pullOutSize) + ',' + ((y/h) * pullOutSize) + \")\";\n            })\n            .on(\"end\", function(d, i) {\n                pie.currentlyOpenSegment = segment;\n                pie.isOpeningSegment = false;\n                d3.select(segment).attr(\"class\", pie.cssPrefix + \"expanded\");\n            });\n    },\n\n    maybeCloseOpenSegment: function(pie) {\n        if (typeof pie !== 'undefined' && pie.svg.selectAll(\".\" + pie.cssPrefix + \"expanded\").size() > 0) {\n            segments.closeSegment(pie, pie.svg.select(\".\" + pie.cssPrefix + \"expanded\").node());\n        }\n    },\n\n    closeSegment: function(pie, segment) {\n        d3.select(segment)\n            .transition()\n            .duration(400)\n            .attr(\"transform\", \"translate(0,0)\")\n            .on(\"end\", function(d, i) {\n                d3.select(segment).attr(\"class\", \"\");\n                pie.currentlyOpenSegment = null;\n            });\n    },\n\n    getCentroid: function(el) {\n        var bbox = el.getBBox();\n        return {\n            x: bbox.x + bbox.width / 2,\n            y: bbox.y + bbox.height / 2\n        };\n    },\n\n    /**\n     * General helper function to return a segment's angle, in various different ways.\n     * @param index\n     * @param opts optional object for fine-tuning exactly what you want.\n     */\n    getSegmentAngle: function(index, data, totalSize, opts) {\n        var options = extend({\n            // if true, this returns the full angle from the origin. Otherwise it returns the single segment angle\n            compounded: true,\n\n            // optionally returns the midpoint of the angle instead of the full angle\n            midpoint: false\n        }, opts);\n\n        var currValue = data[index].value;\n        var fullValue;\n        if (options.compounded) {\n            fullValue = 0;\n\n            // get all values up to and including the specified index\n            for (var i=0; i<=index; i++) {\n                fullValue += data[i].value;\n            }\n        }\n\n        if (typeof fullValue === 'undefined') {\n            fullValue = currValue;\n        }\n\n        // now convert the full value to an angle\n        var angle = (fullValue / totalSize) * 360;\n\n        // lastly, if we want the midpoint, factor that sucker in\n        if (options.midpoint) {\n            var currAngle = (currValue / totalSize) * 360;\n            angle -= (currAngle / 2);\n        }\n\n        return angle;\n    }\n\n};\n\n    //// --------- text.js -----------\nvar text = {\n    offscreenCoord: -10000,\n\n    addTitle: function(pie) {\n        pie.__title = pie.svg.selectAll(\".\" + pie.cssPrefix + \"title\")\n            .data([pie.options.header.title])\n            .enter()\n            .append(\"text\")\n            .text(function(d) { return d.text; })\n            .attr(\"id\", pie.cssPrefix + \"title\")\n            .attr(\"class\", pie.cssPrefix + \"title\")\n            .attr(\"x\", text.offscreenCoord)\n            .attr(\"y\", text.offscreenCoord)\n            .attr(\"text-anchor\", function() {\n                var location;\n                if (pie.options.header.location === \"top-center\" || pie.options.header.location === \"pie-center\") {\n                    location = \"middle\";\n                } else {\n                    location = \"left\";\n                }\n                return location;\n            })\n            .attr(\"fill\", function(d) { return d.color; })\n            .style(\"font-size\", function(d) { return d.fontSize + \"px\"; })\n            .style(\"font-weight\", function(d) { return d.fontWeight; })\n            .style(\"font-family\", function(d) { return d.font; });\n    },\n\n    positionTitle: function(pie) {\n        var textComponents = pie.textComponents;\n        var headerLocation = pie.options.header.location;\n        var canvasPadding = pie.options.misc.canvasPadding;\n        var canvasWidth = pie.options.size.canvasWidth;\n        var titleSubtitlePadding = pie.options.header.titleSubtitlePadding;\n\n        var x;\n        if (headerLocation === \"top-left\") {\n            x = canvasPadding.left;\n        } else {\n            x = ((canvasWidth - canvasPadding.right) / 2) + canvasPadding.left;\n        }\n\n        // add whatever offset has been added by user\n        x += pie.options.misc.pieCenterOffset.x;\n\n        var y = canvasPadding.top + textComponents.title.h;\n\n        if (headerLocation === \"pie-center\") {\n            y = pie.pieCenter.y;\n\n            // still not fully correct\n            if (textComponents.subtitle.exists) {\n                var totalTitleHeight = textComponents.title.h + titleSubtitlePadding + textComponents.subtitle.h;\n                y = y - (totalTitleHeight / 2) + textComponents.title.h;\n            } else {\n                y += (textComponents.title.h / 4);\n            }\n        }\n\n        pie.__title\n            .attr(\"x\", x)\n            .attr(\"y\", y);\n    },\n\n    addSubtitle: function(pie) {\n        var headerLocation = pie.options.header.location;\n\n        pie.__subtitle = pie.svg.selectAll(\".\" + pie.cssPrefix + \"subtitle\")\n            .data([pie.options.header.subtitle])\n            .enter()\n            .append(\"text\")\n            .text(function(d) { return d.text; })\n            .attr(\"x\", text.offscreenCoord)\n            .attr(\"y\", text.offscreenCoord)\n            .attr(\"id\", pie.cssPrefix + \"subtitle\")\n            .attr(\"class\", pie.cssPrefix + \"subtitle\")\n            .attr(\"text-anchor\", function() {\n                var location;\n                if (headerLocation === \"top-center\" || headerLocation === \"pie-center\") {\n                    location = \"middle\";\n                } else {\n                    location = \"left\";\n                }\n                return location;\n            })\n            .attr(\"fill\", function(d) { return d.color; })\n            .style(\"font-size\", function(d) { return d.fontSize + \"px\"; })\n            .style(\"font-weight\", function(d) { return d.fontWeight; })\n            .style(\"font-family\", function(d) { return d.font; });\n    },\n\n    positionSubtitle: function(pie) {\n        var canvasPadding = pie.options.misc.canvasPadding;\n        var canvasWidth = pie.options.size.canvasWidth;\n\n        var x;\n        if (pie.options.header.location === \"top-left\") {\n            x = canvasPadding.left;\n        } else {\n            x = ((canvasWidth - canvasPadding.right) / 2) + canvasPadding.left;\n        }\n\n        // add whatever offset has been added by user\n        x += pie.options.misc.pieCenterOffset.x;\n\n        var y = text.getHeaderHeight(pie);\n\n        pie.__subtitle\n            .attr(\"x\", x)\n            .attr(\"y\", y);\n    },\n\n    addFooter: function(pie) {\n        pie.__footer = pie.svg.selectAll(\".\" + pie.cssPrefix + \"footer\")\n            .data([pie.options.footer])\n            .enter()\n            .append(\"text\")\n            .text(function(d) { return d.text; })\n            .attr(\"x\", text.offscreenCoord)\n            .attr(\"y\", text.offscreenCoord)\n            .attr(\"id\", pie.cssPrefix + \"footer\")\n            .attr(\"class\", pie.cssPrefix + \"footer\")\n            .attr(\"text-anchor\", function() {\n                var location = \"left\";\n                if (pie.options.footer.location === \"bottom-center\") {\n                    location = \"middle\";\n                } else if (pie.options.footer.location === \"bottom-right\") {\n                    location = \"left\"; // on purpose. We have to change the x-coord to make it properly right-aligned\n                }\n                return location;\n            })\n            .attr(\"fill\", function(d) { return d.color; })\n            .style(\"font-size\", function(d) { return d.fontSize + \"px\"; })\n            .style(\"font-weight\", function(d) { return d.fontWeight; })\n            .style(\"font-family\", function(d) { return d.font; });\n    },\n\n    positionFooter: function(pie) {\n        var footerLocation = pie.options.footer.location;\n        var footerWidth = pie.textComponents.footer.w;\n        var canvasWidth = pie.options.size.canvasWidth;\n        var canvasHeight = pie.options.size.canvasHeight;\n        var canvasPadding = pie.options.misc.canvasPadding;\n\n        var x;\n        if (footerLocation === \"bottom-left\") {\n            x = canvasPadding.left;\n        } else if (footerLocation === \"bottom-right\") {\n            x = canvasWidth - footerWidth - canvasPadding.right;\n        } else {\n            x = canvasWidth / 2; // TODO - shouldn't this also take into account padding?\n        }\n\n        pie.__footer\n            .attr(\"x\", x)\n            .attr(\"y\", canvasHeight - canvasPadding.bottom);\n    },\n\n    getHeaderHeight: function(pie) {\n        var h;\n        if (pie.textComponents.title.exists) {\n\n            // if the subtitle isn't defined, it'll be set to 0\n            var totalTitleHeight = pie.textComponents.title.h + pie.options.header.titleSubtitlePadding + pie.textComponents.subtitle.h;\n            if (pie.options.header.location === \"pie-center\") {\n                h = pie.pieCenter.y - (totalTitleHeight / 2) + totalTitleHeight;\n            } else {\n                h = totalTitleHeight + pie.options.misc.canvasPadding.top;\n            }\n        } else {\n            if (pie.options.header.location === \"pie-center\") {\n                var footerPlusPadding = pie.options.misc.canvasPadding.bottom + pie.textComponents.footer.h;\n                h = ((pie.options.size.canvasHeight - footerPlusPadding) / 2) + pie.options.misc.canvasPadding.top + (pie.textComponents.subtitle.h / 2);\n            } else {\n                h = pie.options.misc.canvasPadding.top + pie.textComponents.subtitle.h;\n            }\n        }\n        return h;\n    }\n};\n\n    //// --------- validate.js -----------\nvar tt = {\n    addTooltips: function(pie) {\n\n    // group the label groups (label, percentage, value) into a single element for simpler positioning\n    var tooltips = pie.svg.insert(\"g\")\n        .attr(\"class\", pie.cssPrefix + \"tooltips\");\n\n    tooltips.selectAll(\".\" + pie.cssPrefix + \"tooltip\")\n        .data(pie.options.data.content)\n        .enter()\n        .append(\"g\")\n        .attr(\"class\", pie.cssPrefix + \"tooltip\")\n        .attr(\"id\", function(d, i) { return pie.cssPrefix + \"tooltip\" + i; })\n        .style(\"opacity\", 0)\n        .append(\"rect\")\n        .attr(\"rx\", pie.options.tooltips.styles.borderRadius)\n        .attr(\"ry\", pie.options.tooltips.styles.borderRadius)\n        .attr(\"x\", -pie.options.tooltips.styles.padding)\n        .attr(\"opacity\", pie.options.tooltips.styles.backgroundOpacity)\n        .style(\"fill\", pie.options.tooltips.styles.backgroundColor);\n\n    tooltips.selectAll(\".\" + pie.cssPrefix + \"tooltip\")\n        .data(pie.options.data.content)\n        .append(\"text\")\n        .attr(\"fill\", function(d) { return pie.options.tooltips.styles.color; })\n        .style(\"font-size\", function(d) { return pie.options.tooltips.styles.fontSize; })\n        .style(\"font-weight\", function(d) { return pie.options.tooltips.styles.fontWeight; })\n        .style(\"font-family\", function(d) { return pie.options.tooltips.styles.font; })\n        .text(function(d, i) {\n            var caption = pie.options.tooltips.string;\n            if (pie.options.tooltips.type === \"caption\") {\n                caption = d.caption;\n            }\n            return tt.replacePlaceholders(pie, caption, i, {\n                label: d.label,\n                value: d.value,\n                percentage: d.percentage\n            });\n        });\n\n        tooltips.selectAll(\".\" + pie.cssPrefix + \"tooltip rect\")\n            .attr(\"width\", function (d, i) {\n                var dims = helpers.getDimensions(pie.cssPrefix + \"tooltip\" + i);\n                return dims.w + (2 * pie.options.tooltips.styles.padding);\n            })\n            .attr(\"height\", function (d, i) {\n                var dims = helpers.getDimensions(pie.cssPrefix + \"tooltip\" + i);\n                return dims.h + (2 * pie.options.tooltips.styles.padding);\n            })\n            .attr(\"y\", function (d, i) {\n                var dims = helpers.getDimensions(pie.cssPrefix + \"tooltip\" + i);\n                return -(dims.h / 2) + 1;\n            });\n    },\n\n    showTooltip: function(pie, index) {\n        var fadeInSpeed = pie.options.tooltips.styles.fadeInSpeed;\n        if (tt.currentTooltip === index) {\n            fadeInSpeed = 1;\n        }\n\n        tt.currentTooltip = index;\n        d3.select(\"#\" + pie.cssPrefix + \"tooltip\" + index)\n            .transition()\n            .duration(fadeInSpeed)\n            .style(\"opacity\", function() { return 1; });\n\n        tt.moveTooltip(pie);\n    },\n\n    moveTooltip: function(pie) {\n        d3.selectAll(\"#\" + pie.cssPrefix + \"tooltip\" + tt.currentTooltip)\n            .attr(\"transform\", function(d) {\n                var mouseCoords = d3.mouse(this.parentNode);\n                var x = mouseCoords[0] + pie.options.tooltips.styles.padding + 2;\n                var y = mouseCoords[1] - (2 * pie.options.tooltips.styles.padding) - 2;\n                    return \"translate(\" + x + \",\" + y + \")\";\n                });\n    },\n\n    hideTooltip: function(pie, index) {\n        d3.select(\"#\" + pie.cssPrefix + \"tooltip\" + index)\n            .style(\"opacity\", function() { return 0; });\n\n        // move the tooltip offscreen. This ensures that when the user next mouseovers the segment the hidden\n        // element won't interfere\n        d3.select(\"#\" + pie.cssPrefix + \"tooltip\" + tt.currentTooltip)\n            .attr(\"transform\", function(d, i) {\n                // klutzy, but it accounts for tooltip padding which could push it onscreen\n                var x = pie.options.size.canvasWidth + 1000;\n                var y = pie.options.size.canvasHeight + 1000;\n                return \"translate(\" + x + \",\" + y + \")\";\n            });\n    },\n\n    replacePlaceholders: function(pie, str, index, replacements) {\n\n        // if the user has defined a placeholderParser function, call it before doing the replacements\n        if (helpers.isFunction(pie.options.tooltips.placeholderParser)) {\n            pie.options.tooltips.placeholderParser(index, replacements);\n        }\n\n        var replacer = function()  {\n            return function(match) {\n                var placeholder = arguments[1];\n                if (replacements.hasOwnProperty(placeholder)) {\n                    return replacements[arguments[1]];\n                } else {\n                    return arguments[0];\n                }\n            };\n        };\n        return str.replace(/\\{(\\w+)\\}/g, replacer(replacements));\n    }\n};\n\n\n    // --------------------------------------------------------------------------------------------\n\n    // our constructor\n    var d3pie = function(element, options) {\n\n        // element can be an ID or DOM element\n        this.element = element;\n        if (typeof element === \"string\") {\n            var el = element.replace(/^#/, \"\"); // replace any jQuery-like ID hash char\n            this.element = document.getElementById(el);\n        }\n\n        var opts = {};\n        extend(true, opts, defaultSettings, options);\n        this.options = opts;\n\n        // if the user specified a custom CSS element prefix (ID, class), use it\n        if (this.options.misc.cssPrefix !== null) {\n            this.cssPrefix = this.options.misc.cssPrefix;\n        } else {\n            this.cssPrefix = \"p\" + _uniqueIDCounter + \"_\";\n            _uniqueIDCounter++;\n        }\n\n\n        // now run some validation on the user-defined info\n        if (!validate.initialCheck(this)) {\n            return;\n        }\n\n        // add a data-role to the DOM node to let anyone know that it contains a d3pie instance, and the d3pie version\n        d3.select(this.element).attr(_scriptName, _version);\n\n        // things that are done once\n        _setupData.call(this);\n        _init.call(this);\n    };\n\n    d3pie.prototype.recreate = function() {\n        // now run some validation on the user-defined info\n        if (!validate.initialCheck(this)) {\n            return;\n        }\n\n        _setupData.call(this);\n        _init.call(this);\n    };\n\n    d3pie.prototype.redraw = function() {\n        this.element.innerHTML = \"\";\n        _init.call(this);\n    };\n\n    d3pie.prototype.destroy = function() {\n        this.element.innerHTML = \"\"; // clear out the SVG\n        d3.select(this.element).attr(_scriptName, null); // remove the data attr\n    };\n\n    /**\n     * Returns all pertinent info about the current open info. Returns null if nothing's open, or if one is, an object of\n     * the following form:\n     * \t{\n     * \t  element: DOM NODE,\n     * \t  index: N,\n     * \t  data: {}\n     * \t}\n     */\n    d3pie.prototype.getOpenSegment = function() {\n        var segment = this.currentlyOpenSegment;\n        if (segment !== null && typeof segment !== \"undefined\") {\n            var index = parseInt(d3.select(segment).attr(\"data-index\"), 10);\n            return {\n                element: segment,\n                index: index,\n                data: this.options.data.content[index]\n            };\n        } else {\n            return null;\n        }\n    };\n\n    d3pie.prototype.openSegment = function(index) {\n        index = parseInt(index, 10);\n        if (index < 0 || index > this.options.data.content.length-1) {\n            return;\n        }\n        segments.openSegment(this, d3.select(\"#\" + this.cssPrefix + \"segment\" + index).node());\n    };\n\n    d3pie.prototype.closeSegment = function() {\n        segments.maybeCloseOpenSegment(this);\n    };\n\n    // this let's the user dynamically update aspects of the pie chart without causing a complete redraw. It\n    // intelligently re-renders only the part of the pie that the user specifies. Some things cause a repaint, others\n    // just redraw the single element\n    d3pie.prototype.updateProp = function(propKey, value) {\n        switch (propKey) {\n            case \"header.title.text\":\n                var oldVal = helpers.processObj(this.options, propKey);\n                helpers.processObj(this.options, propKey, value);\n                d3.select(\"#\" + this.cssPrefix + \"title\").html(value);\n                if ((oldVal === \"\" && value !== \"\") || (oldVal !== \"\" && value === \"\")) {\n                    this.redraw();\n                }\n                break;\n\n            case \"header.subtitle.text\":\n                var oldValue = helpers.processObj(this.options, propKey);\n                helpers.processObj(this.options, propKey, value);\n                d3.select(\"#\" + this.cssPrefix + \"subtitle\").html(value);\n                if ((oldValue === \"\" && value !== \"\") || (oldValue !== \"\" && value === \"\")) {\n                    this.redraw();\n                }\n                break;\n\n            case \"callbacks.onload\":\n            case \"callbacks.onMouseoverSegment\":\n            case \"callbacks.onMouseoutSegment\":\n            case \"callbacks.onClickSegment\":\n            case \"effects.pullOutSegmentOnClick.effect\":\n            case \"effects.pullOutSegmentOnClick.speed\":\n            case \"effects.pullOutSegmentOnClick.size\":\n            case \"effects.highlightSegmentOnMouseover\":\n            case \"effects.highlightLuminosity\":\n                helpers.processObj(this.options, propKey, value);\n                break;\n\n            // everything else, attempt to update it & do a repaint\n            default:\n                helpers.processObj(this.options, propKey, value);\n\n                this.destroy();\n                this.recreate();\n                break;\n        }\n    };\n\n\n    // ------------------------------------------------------------------------------------------------\n\n    var _setupData = function () {\n        this.options.data.content = math.sortPieData(this);\n        if (this.options.data.smallSegmentGrouping.enabled) {\n            this.options.data.content = helpers.applySmallSegmentGrouping(this.options.data.content, this.options.data.smallSegmentGrouping);\n        }\n\n\n        this.options.colors = helpers.initSegmentColors(this);\n        this.totalSize      = math.getTotalPieSize(this.options.data.content);\n\n        var dp = this.options.labels.percentage.decimalPlaces;\n\n        // add in percentage data to content\n        for (var i=0; i<this.options.data.content.length; i++) {\n            this.options.data.content[i].percentage = _getPercentage(this.options.data.content[i].value, this.totalSize, dp);\n        }\n\n        // adjust the final item to ensure the percentage always adds up to precisely 100%. This is necessary\n        var totalPercentage = 0;\n        for (var j=0; j<this.options.data.content.length; j++) {\n            if (j === this.options.data.content.length - 1) {\n                this.options.data.content[j].percentage = (100 - totalPercentage).toFixed(dp);\n            }\n            totalPercentage += parseFloat(this.options.data.content[j].percentage);\n        }\n    };\n\n    var _init = function() {\n\n        // prep-work\n        this.svg = helpers.addSVGSpace(this);\n\n        // store info about the main text components as part of the d3pie object instance\n        this.textComponents = {\n            headerHeight: 0,\n            title: {\n                exists: this.options.header.title.text !== \"\",\n                h: 0,\n                w: 0\n            },\n            subtitle: {\n                exists: this.options.header.subtitle.text !== \"\",\n                h: 0,\n                w: 0\n            },\n            footer: {\n                exists: this.options.footer.text !== \"\",\n                h: 0,\n                w: 0\n            }\n        };\n\n        this.outerLabelGroupData = [];\n\n        // add the key text components offscreen (title, subtitle, footer). We need to know their widths/heights for later computation\n        if (this.textComponents.title.exists) text.addTitle(this);\n        if (this.textComponents.subtitle.exists) text.addSubtitle(this);\n        text.addFooter(this);\n\n        // console.log(this);\n\n        // the footer never moves. Put it in place now\n        var self = this;\n        text.positionFooter(self);\n        var d3 = helpers.getDimensions(self.__footer.node());\n        self.textComponents.footer.h = d3.h;\n        self.textComponents.footer.w = d3.w;\n\n        if (self.textComponents.title.exists) {\n            var d1 = helpers.getDimensions(self.__title.node());\n            self.textComponents.title.h = d1.h;\n            self.textComponents.title.w = d1.w;\n        }\n\n        if (self.textComponents.subtitle.exists) {\n            var d2 = helpers.getDimensions(self.__subtitle.node());\n            self.textComponents.subtitle.h = d2.h;\n            self.textComponents.subtitle.w = d2.w;\n        }\n\n        // now compute the full header height\n        if (self.textComponents.title.exists || self.textComponents.subtitle.exists) {\n            var headerHeight = 0;\n            if (self.textComponents.title.exists) {\n                headerHeight += self.textComponents.title.h;\n                if (self.textComponents.subtitle.exists) {\n                    headerHeight += self.options.header.titleSubtitlePadding;\n                }\n            }\n            if (self.textComponents.subtitle.exists) {\n                headerHeight += self.textComponents.subtitle.h;\n            }\n            self.textComponents.headerHeight = headerHeight;\n        }\n\n        // at this point, all main text component dimensions have been calculated\n        math.computePieRadius(self);\n\n        // this value is used all over the place for placing things and calculating locations. We figure it out ONCE\n        // and store it as part of the object\n        math.calculatePieCenter(self);\n\n        // position the title and subtitle\n        text.positionTitle(self);\n        text.positionSubtitle(self);\n\n        // now create the pie chart segments, and gradients if the user desired\n        if (self.options.misc.gradient.enabled) {\n            segments.addGradients(self);\n        }\n        segments.create(self); // also creates this.arc\n\n        self.__labels = {};\n        labels.add(self, \"inner\", self.options.labels.inner.format);\n        labels.add(self, \"outer\", self.options.labels.outer.format);\n\n        // position the label elements relatively within their individual group (label, percentage, value)\n        labels.positionLabelElements(self, \"inner\", self.options.labels.inner.format);\n        labels.positionLabelElements(self, \"outer\", self.options.labels.outer.format);\n        labels.computeOuterLabelCoords(self);\n\n        // this is (and should be) dumb. It just places the outer groups at their calculated, collision-free positions\n        labels.positionLabelGroups(self, \"outer\");\n\n        // we use the label line positions for many other calculations, so ALWAYS compute them\n        labels.computeLabelLinePositions(self);\n\n        // only add them if they're actually enabled\n        if (self.options.labels.lines.enabled && self.options.labels.outer.format !== \"none\") {\n            labels.addLabelLines(self);\n        }\n\n        labels.positionLabelGroups(self, \"inner\");\n\n        if (helpers.isFunction(self.options.callbacks.onload)) {\n            try {\n                self.options.callbacks.onload();\n            } catch (e) { }\n        }\n\n        // add and position the tooltips\n        if (self.options.tooltips.enabled) {\n            tt.addTooltips(self);\n        }\n\n        segments.addSegmentEventHandlers(self);\n    };\n\n    var _getPercentage = function(value, total, decimalPlaces) {\n        var relativeAmount = value / total;\n        if (decimalPlaces <= 0) {\n            return Math.round(relativeAmount * 100);\n        } else {\n            return (relativeAmount * 100).toFixed(decimalPlaces);\n        }\n    };\n\n    return d3pie;\n}));\n","export * from \"./types\"\n\nexport { default as CloudConnectionStatus } from \"./cloud-connection-status\"\n","import {\n  concat, cond, equals, identity, last, pipe, T,\n} from \"ramda\"\n\nimport { isDevelopmentEnv, isMainJs, isTestingEnv } from \"utils/env\"\n\n\n// this part needs to be static and should run immediately because otherwise document.currentScript\n// will be null\nconst currentScript = isTestingEnv\n  ? { src: \"http://localhost:3000/some-script.js\" } // test env doesn't have document.currentScript\n  : document.currentScript\n\nconst getScriptSource = () => {\n  // logic based on old dashboard\n\n  // http://stackoverflow.com/questions/984510/what-is-my-script-src-url\n  // http://stackoverflow.com/questions/6941533/get-protocol-domain-and-port-from-url\n  const script = cond([\n    [Boolean, identity],\n    // \"last\" typings don't work well with HTMLScriptElement\n    // if document.currentScript is not available\n    [T, () => last(document.getElementsByTagName(\"script\") as unknown as [HTMLScriptElement])],\n  ])(currentScript)\n\n  return script.src\n}\n\nexport const getPathFromScriptSource = (source: string) => {\n  // match strings not containing slash, ending with `.js`, with optional suffix started by `?`\n  const jsFilenameRegex = \"[^\\\\/]*\\\\.js(\\\\/?.*)?$\"\n  const staticJsPath = \"/static/js\"\n  return source.replace(new RegExp(jsFilenameRegex), \"\")\n    .replace(staticJsPath, \"\")\n}\n\nconst getDefaultServer = () => {\n  if (isDevelopmentEnv) {\n    return \"http://localhost:19999\"\n  }\n\n  // Agent Dashboard does not need sophisticated server-detection, which is causing problems\n  // when navigating through streamed nodes. Let's overwrite that setting\n  if (isMainJs) {\n    const pathname = window.location.pathname\n      .replace(\"index.html\", \"\")\n      // todo consider .replace(/[^\\/]*\\.html/, \"\") (every .html file in the url)\n      .replace(\"default.html\", \"\") // for netdata demo servers\n    return window.location.origin + pathname\n  }\n\n  const source = getScriptSource()\n  return getPathFromScriptSource(source)\n}\n\n// append \"/\" at the end, if it's not already there\nexport const alwaysEndWithSlash = cond([\n  [pipe(last, equals(\"/\")), identity],\n  [T, (x: string) => concat(x, \"/\")], // R.__ typings don't work well\n])\n\nexport const serverDefault: string = alwaysEndWithSlash(\n  window.netdataServer || getDefaultServer(),\n)\n\nexport const serverStatic: string = isDevelopmentEnv\n  ? \"/\" // for localhost:3000/css/...\n  : alwaysEndWithSlash(getDefaultServer()) // by default, load from netdata server\n","import { prop } from \"ramda\"\nimport { createSelector } from \"reselect\"\n\nimport { AppStateT } from \"store/app-state\"\nimport { selectChartMetadataFromChartsCall } from \"domains/global/selectors\"\n\nimport { ChartState } from \"./chart-types\"\nimport { initialSingleState } from \"./reducer\"\nimport { storeKey } from \"./constants\"\n\nexport const selectChartsState = (state: AppStateT) => state[storeKey]\nexport const selectSingleChartState = createSelector(\n  selectChartsState,\n  (_: unknown, { id }: { chartId?: string, id: string }) => id,\n  (chartsState, id) => chartsState[id] || initialSingleState,\n)\n\nexport const selectChartData = createSelector(\n  selectSingleChartState,\n  (chartState) => chartState.chartData,\n)\n\nconst selectChartMetadataFromExplicitCall = createSelector(\n  selectSingleChartState, prop(\"chartMetadata\"),\n)\n// dashboard.js normally fetches metadata for every individual charts, but we can prevent it\n// if metadata for ALL charts will be present in state.global (from single call)\nconst selectChartMetadata = createSelector(\n  selectChartMetadataFromChartsCall,\n  selectChartMetadataFromExplicitCall,\n  (metadataFromAll, metadataFromSingleCall) => metadataFromAll || metadataFromSingleCall,\n)\nconst selectIsFetchingDetails = createSelector(selectSingleChartState, prop(\"isFetchingDetails\"))\n\nexport const makeSelectChartMetadataRequest = () => createSelector(\n  selectChartMetadata,\n  selectIsFetchingDetails,\n  (chartMetadata, isFetchingDetails) => ({ chartMetadata, isFetchingDetails }),\n)\n\nexport const selectChartViewRange = createSelector(\n  selectSingleChartState,\n  (chartState) => chartState.viewRange,\n)\n\nexport const selectChartIsFetchingData = createSelector(\n  selectSingleChartState,\n  (chartState) => chartState.isFetchingData,\n)\n\nexport const selectChartFetchDataParams = createSelector(\n  selectSingleChartState,\n  (chartState) => chartState.fetchDataParams,\n)\n\nexport const selectResizeHeight = createSelector(\n  selectSingleChartState,\n  (chartState) => chartState.resizeHeight,\n)\n\nexport const selectChartPanAndZoom = createSelector(selectSingleChartState, prop(\"chartPanAndZoom\"))\n\n// count the nr of \"success\" or \"failure\" charts\nconst hasCompletedFetching = (chartState: ChartState) => chartState.isFetchDataFailure\n  || Boolean(chartState.chartData) || chartState.isFetchDetailsFailure\n\nexport const selectChartsAreFetching = createSelector(selectChartsState, chartsState =>\n  Object.values(chartsState).some(({ isFetchingData }) => isFetchingData)\n)\n\nexport const selectAmountOfFetchedCharts = createSelector(\n  selectChartsState,\n  (chartsState) => Object.values(chartsState)\n    .reduce((acc, chartState) => acc + (hasCompletedFetching(chartState) ? 1 : 0), 0),\n)\n\nexport const selectAmountOfCharts = createSelector(\n  selectChartsState,\n  (chartsState) => Object.keys(chartsState).length,\n)\n\nexport const selectNameOfAnyFetchingChart = createSelector(\n  selectChartsState,\n  (chartsState) => Object.values(chartsState)\n    .find((chartState) => chartState.isFetchingData)?.chartId,\n)\n\nexport const selectAmountOfSnapshotsFetched = createSelector(\n  selectChartsState,\n  (chartsState) => Object.values(chartsState)\n    .reduce((acc, chartState) => acc + (chartState.snapshotData ? 1 : 0), 0),\n)\n\nexport const selectAmountOfSnapshotsFailed = createSelector(\n  selectChartsState,\n  (chartsState) => Object.values(chartsState)\n    .reduce((acc, chartState) => acc + (chartState.snapshotDataIsError ? 1 : 0), 0),\n)\n","import { useMemo } from \"react\"\nimport moment from \"moment\"\nimport { useSelector } from \"store/redux-separate-context\"\nimport { selectTimezoneSetting, selectUTCOffsetSetting } from \"domains/global/selectors\"\n\nconst zeropad = x => {\n  if (x > -10 && x < 10) {\n    return `0${x.toString()}`\n  }\n  return x.toString()\n}\n\nexport const isSupportingDateTimeFormat = !!(Intl && Intl.DateTimeFormat && navigator.language)\n\nconst narrowToDate = d => (typeof d === \"number\" ? new Date(d) : d)\n// these are the old netdata functions\n// we fallback to these, if the new ones fail\nexport const localeDateStringNative = d => narrowToDate(d).toLocaleDateString()\nexport const localeTimeStringNative = d => narrowToDate(d).toLocaleTimeString()\nexport const xAxisTimeStringNative = d => {\n  const date = narrowToDate(d)\n  return `${zeropad(date.getHours())}:${zeropad(date.getMinutes())}:${zeropad(date.getSeconds())}`\n}\n\nexport const isProperTimezone = timeZone => {\n  try {\n    Intl.DateTimeFormat(navigator.language, {\n      localeMatcher: \"best fit\",\n      formatMatcher: \"best fit\",\n      weekday: \"short\",\n      year: \"numeric\",\n      month: \"short\",\n      day: \"2-digit\",\n      timeZone,\n    })\n  } catch (e) {\n    return false\n  }\n  return true\n}\n\nexport const getDateWithOffset = (date, offset) => moment(date).utcOffset(offset)\n\nconst getOptions = ({ long, isTime, secs, timezone }) => ({\n  hourCycle: \"h23\",\n  ...(isTime\n    ? {}\n    : long\n    ? { weekday: \"short\", year: \"numeric\", month: \"short\", day: \"2-digit\" }\n    : { dateStyle: \"short\" }),\n  ...(isTime && {\n    timeStyle: secs ? \"medium\" : \"short\",\n  }),\n  timeZone: timezone,\n})\n\nconst dateFormat = (date, { locale, ...options }) =>\n  new Intl.DateTimeFormat(locale ?? navigator.language, getOptions(options)).format(date)\n\nconst getTimezone = timezone => (timezone !== \"\" && timezone !== \"default\" ? timezone : undefined)\n\nexport const useDateTime = () => {\n  const timezone = useSelector(selectTimezoneSetting)\n  const utcOffset = useSelector(selectUTCOffsetSetting)\n\n  const localeDateString = useMemo(() => {\n    return isSupportingDateTimeFormat\n      ? (date, options) =>\n          dateFormat(date, { long: true, timezone: getTimezone(timezone), ...options })\n      : localeDateStringNative\n  }, [timezone])\n\n  const localeTimeString = useMemo(() => {\n    return isSupportingDateTimeFormat\n      ? (date, options) =>\n          dateFormat(date, {\n            secs: true,\n            isTime: true,\n            timezone: getTimezone(timezone),\n            ...options,\n          })\n      : localeTimeStringNative\n  }, [timezone])\n\n  const xAxisTimeString = useMemo(() => {\n    return isSupportingDateTimeFormat\n      ? date => dateFormat(date, { secs: true, isTime: true, timezone: getTimezone(timezone) })\n      : xAxisTimeStringNative\n  }, [timezone])\n\n  const xAxisDateString = useMemo(() => {\n    return isSupportingDateTimeFormat\n      ? date => dateFormat(date, { long: true, timezone: getTimezone(timezone) })\n      : xAxisTimeStringNative\n  }, [timezone])\n\n  return {\n    localeDateString,\n    localeTimeString,\n    xAxisDateString,\n    xAxisTimeString,\n    utcOffset,\n  }\n}\n","import { createAction } from \"redux-act\"\nimport { ChartsMetadata } from \"domains/global/types\"\n\nimport { storeKey } from \"./constants\"\n\nexport interface startSnapshotModeAction {\n  charts: ChartsMetadata\n  dataPoints: number\n}\nexport const startSnapshotModeAction = createAction<startSnapshotModeAction>(\n  `${storeKey}/isSnapshotModeAction`,\n)\n\nexport const stopSnapshotModeAction = createAction(`${storeKey}/stopSnapshotModeAction`)\n\nexport interface ShowSignInModalAction { signInLinkHref: string }\nexport const showSignInModalAction = createAction<ShowSignInModalAction>(\n  `${storeKey}/showSignInModal`,\n)\n\nexport const explicitlySignInAction = createAction(`${storeKey}/explicitlySignIn`)\n\nexport interface IsSignedInAction { isSignedIn: boolean }\nexport const isSignedInAction = createAction<IsSignedInAction>(`${storeKey}/isSignedInAction`)\n\nexport interface SetOfflineAction { offline: boolean }\nexport const setOfflineAction = createAction<SetOfflineAction>(`${storeKey}/setOfflineAction`)\n","export const storeKey = \"chart\"\n\nexport const fallbackUpdateTimeInterval = 2000\n\n// corresponds to force_update_at in old dashboard\n// throttle time between use globalPanAndZoom change actions - and requests sent to server\nexport const panAndZoomDelay = 300\n","export const seconds4human = (\n  totalSeconds: number | string, overrideOptions?: {[key: string]: string},\n) => {\n  const defaultOptions: {[key: string]: string} = {\n    now: \"now\",\n    space: \" \",\n    negative_suffix: \"ago\",\n    day: \"day\",\n    days: \"days\",\n    hour: \"hour\",\n    hours: \"hours\",\n    minute: \"min\",\n    minutes: \"mins\",\n    second: \"sec\",\n    seconds: \"secs\",\n    and: \"and\",\n  }\n\n  const options = typeof overrideOptions === \"object\"\n    ? { ...defaultOptions, ...overrideOptions }\n    : defaultOptions\n\n  let seconds = typeof totalSeconds === \"string\"\n    ? parseInt(totalSeconds, 10)\n    : totalSeconds\n\n  if (seconds === 0) {\n    return options.now\n  }\n\n  let suffix = \"\"\n  if (seconds < 0) {\n    seconds = -seconds\n    if (options.negative_suffix !== \"\") {\n      suffix = options.space + options.negative_suffix\n    }\n  }\n\n  const days = Math.floor(seconds / 86400)\n  seconds -= (days * 86400)\n\n  const hours = Math.floor(seconds / 3600)\n  seconds -= (hours * 3600)\n\n  const minutes = Math.floor(seconds / 60)\n  seconds -= (minutes * 60)\n\n  const strings = []\n\n  if (days > 1) {\n    strings.push(days.toString() + options.space + options.days)\n  } else if (days === 1) {\n    strings.push(days.toString() + options.space + options.day)\n  }\n\n  if (hours > 1) {\n    strings.push(hours.toString() + options.space + options.hours)\n  } else if (hours === 1) {\n    strings.push(hours.toString() + options.space + options.hour)\n  }\n\n  if (minutes > 1) {\n    strings.push(minutes.toString() + options.space + options.minutes)\n  } else if (minutes === 1) {\n    strings.push(minutes.toString() + options.space + options.minute)\n  }\n\n  if (seconds > 1) {\n    strings.push(Math.floor(seconds).toString() + options.space + options.seconds)\n  } else if (seconds === 1) {\n    strings.push(Math.floor(seconds).toString() + options.space + options.second)\n  }\n\n  if (strings.length === 1) {\n    return strings.pop() + suffix\n  }\n\n  const last = strings.pop()\n  return `${strings.join(\", \")} ${options.and} ${last}${suffix}`\n}\n","/*! @license Copyright 2017 Dan Vanderkam (danvdk@gmail.com) MIT-licensed (http://opensource.org/licenses/MIT) */\n// SPDX-License-Identifier: MIT\n!function(t){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=t();else if(\"function\"==typeof define&&define.amd)define([],t);else{var e;e=\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this,e.Dygraph=t()}}(function(){return function t(e,a,i){function n(o,s){if(!a[o]){if(!e[o]){var l=\"function\"==typeof require&&require;if(!s&&l)return l(o,!0);if(r)return r(o,!0);var h=new Error(\"Cannot find module '\"+o+\"'\");throw h.code=\"MODULE_NOT_FOUND\",h}var u=a[o]={exports:{}};e[o][0].call(u.exports,function(t){var a=e[o][1][t];return n(a||t)},u,u.exports,t,e,a,i)}return a[o].exports}for(var r=\"function\"==typeof require&&require,o=0;o<i.length;o++)n(i[o]);return n}({1:[function(t,e,a){function i(){throw new Error(\"setTimeout has not been defined\")}function n(){throw new Error(\"clearTimeout has not been defined\")}function r(t){if(d===setTimeout)return setTimeout(t,0);if((d===i||!d)&&setTimeout)return d=setTimeout,setTimeout(t,0);try{return d(t,0)}catch(e){try{return d.call(null,t,0)}catch(e){return d.call(this,t,0)}}}function o(t){if(c===clearTimeout)return clearTimeout(t);if((c===n||!c)&&clearTimeout)return c=clearTimeout,clearTimeout(t);try{return c(t)}catch(e){try{return c.call(null,t)}catch(e){return c.call(this,t)}}}function s(){v&&g&&(v=!1,g.length?f=g.concat(f):_=-1,f.length&&l())}function l(){if(!v){var t=r(s);v=!0;for(var e=f.length;e;){for(g=f,f=[];++_<e;)g&&g[_].run();_=-1,e=f.length}g=null,v=!1,o(t)}}function h(t,e){this.fun=t,this.array=e}function u(){}var d,c,p=e.exports={};!function(){try{d=\"function\"==typeof setTimeout?setTimeout:i}catch(t){d=i}try{c=\"function\"==typeof clearTimeout?clearTimeout:n}catch(t){c=n}}();var g,f=[],v=!1,_=-1;p.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var a=1;a<arguments.length;a++)e[a-1]=arguments[a];f.push(new h(t,e)),1!==f.length||v||r(l)},h.prototype.run=function(){this.fun.apply(null,this.array)},p.title=\"browser\",p.browser=!0,p.env={},p.argv=[],p.version=\"\",p.versions={},p.on=u,p.addListener=u,p.once=u,p.off=u,p.removeListener=u,p.removeAllListeners=u,p.emit=u,p.prependListener=u,p.prependOnceListener=u,p.listeners=function(t){return[]},p.binding=function(t){throw new Error(\"process.binding is not supported\")},p.cwd=function(){return\"/\"},p.chdir=function(t){throw new Error(\"process.chdir is not supported\")},p.umask=function(){return 0}},{}],2:[function(t,e,a){\"use strict\";Object.defineProperty(a,\"__esModule\",{value:!0});var i=t(\"./bars\"),n=function(t){return t&&t.__esModule?t:{default:t}}(i),r=function(){};r.prototype=new n.default,r.prototype.extractSeries=function(t,e,a){for(var i,n,r,o=[],s=a.get(\"logscale\"),l=0;l<t.length;l++)i=t[l][0],r=t[l][e],s&&null!==r&&(r[0]<=0||r[1]<=0||r[2]<=0)&&(r=null),null!==r?(n=r[1],null===n||isNaN(n)?o.push([i,n,[n,n]]):o.push([i,n,[r[0],r[2]]])):o.push([i,null,[null,null]]);return o},r.prototype.rollingAverage=function(t,e,a){e=Math.min(e,t.length);var i,n,r,o,s,l,h,u=[];for(n=0,o=0,r=0,s=0,l=0;l<t.length;l++){if(i=t[l][1],h=t[l][2],u[l]=t[l],null===i||isNaN(i)||(n+=h[0],o+=i,r+=h[1],s+=1),l-e>=0){var d=t[l-e];null===d[1]||isNaN(d[1])||(n-=d[2][0],o-=d[1],r-=d[2][1],s-=1)}u[l]=s?[t[l][0],1*o/s,[1*n/s,1*r/s]]:[t[l][0],null,[null,null]]}return u},a.default=r,e.exports=a.default},{\"./bars\":5}],3:[function(t,e,a){\"use strict\";Object.defineProperty(a,\"__esModule\",{value:!0});var i=t(\"./bars\"),n=function(t){return t&&t.__esModule?t:{default:t}}(i),r=function(){};r.prototype=new n.default,r.prototype.extractSeries=function(t,e,a){for(var i,n,r,o,s=[],l=a.get(\"sigma\"),h=a.get(\"logscale\"),u=0;u<t.length;u++)i=t[u][0],o=t[u][e],h&&null!==o&&(o[0]<=0||o[0]-l*o[1]<=0)&&(o=null),null!==o?(n=o[0],null===n||isNaN(n)?s.push([i,n,[n,n,n]]):(r=l*o[1],s.push([i,n,[n-r,n+r,o[1]]]))):s.push([i,null,[null,null,null]]);return s},r.prototype.rollingAverage=function(t,e,a){e=Math.min(e,t.length);var i,n,r,o,s,l,h,u,d,c=[],p=a.get(\"sigma\");for(i=0;i<t.length;i++){for(s=0,u=0,l=0,n=Math.max(0,i-e+1);n<i+1;n++)null===(r=t[n][1])||isNaN(r)||(l++,s+=r,u+=Math.pow(t[n][2][2],2));l?(h=Math.sqrt(u)/l,d=s/l,c[i]=[t[i][0],d,[d-p*h,d+p*h]]):(o=1==e?t[i][1]:null,c[i]=[t[i][0],o,[o,o]])}return c},a.default=r,e.exports=a.default},{\"./bars\":5}],4:[function(t,e,a){\"use strict\";Object.defineProperty(a,\"__esModule\",{value:!0});var i=t(\"./bars\"),n=function(t){return t&&t.__esModule?t:{default:t}}(i),r=function(){};r.prototype=new n.default,r.prototype.extractSeries=function(t,e,a){for(var i,n,r,o,s,l,h,u,d=[],c=a.get(\"sigma\"),p=a.get(\"logscale\"),g=0;g<t.length;g++)i=t[g][0],r=t[g][e],p&&null!==r&&(r[0]<=0||r[1]<=0)&&(r=null),null!==r?(o=r[0],s=r[1],null===o||isNaN(o)?d.push([i,o,[o,o,o,s]]):(l=s?o/s:0,h=s?c*Math.sqrt(l*(1-l)/s):1,u=100*h,n=100*l,d.push([i,n,[n-u,n+u,o,s]]))):d.push([i,null,[null,null,null,null]]);return d},r.prototype.rollingAverage=function(t,e,a){e=Math.min(e,t.length);var i,n,r,o,s=[],l=a.get(\"sigma\"),h=a.get(\"wilsonInterval\"),u=0,d=0;for(r=0;r<t.length;r++){u+=t[r][2][2],d+=t[r][2][3],r-e>=0&&(u-=t[r-e][2][2],d-=t[r-e][2][3]);var c=t[r][0],p=d?u/d:0;if(h)if(d){var g=p<0?0:p,f=d,v=l*Math.sqrt(g*(1-g)/f+l*l/(4*f*f)),_=1+l*l/d;i=(g+l*l/(2*d)-v)/_,n=(g+l*l/(2*d)+v)/_,s[r]=[c,100*g,[100*i,100*n]]}else s[r]=[c,0,[0,0]];else o=d?l*Math.sqrt(p*(1-p)/d):1,s[r]=[c,100*p,[100*(p-o),100*(p+o)]]}return s},a.default=r,e.exports=a.default},{\"./bars\":5}],5:[function(t,e,a){\"use strict\";function i(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(a,\"__esModule\",{value:!0});var n=t(\"./datahandler\"),r=i(n),o=t(\"../dygraph-layout\"),s=i(o),l=function(){r.default.call(this)};l.prototype=new r.default,l.prototype.extractSeries=function(t,e,a){},l.prototype.rollingAverage=function(t,e,a){},l.prototype.onPointsCreated_=function(t,e){for(var a=0;a<t.length;++a){var i=t[a],n=e[a];n.y_top=NaN,n.y_bottom=NaN,n.yval_minus=r.default.parseFloat(i[2][0]),n.yval_plus=r.default.parseFloat(i[2][1])}},l.prototype.getExtremeYValues=function(t,e,a){for(var i,n=null,r=null,o=t.length-1,s=0;s<=o;s++)if(null!==(i=t[s][1])&&!isNaN(i)){var l=t[s][2][0],h=t[s][2][1];l>i&&(l=i),h<i&&(h=i),(null===r||h>r)&&(r=h),(null===n||l<n)&&(n=l)}return[n,r]},l.prototype.onLineEvaluated=function(t,e,a){for(var i,n=0;n<t.length;n++)i=t[n],i.y_top=s.default.calcYNormal_(e,i.yval_minus,a),i.y_bottom=s.default.calcYNormal_(e,i.yval_plus,a)},a.default=l,e.exports=a.default},{\"../dygraph-layout\":13,\"./datahandler\":6}],6:[function(t,e,a){\"use strict\";Object.defineProperty(a,\"__esModule\",{value:!0});var i=function(){},n=i;n.X=0,n.Y=1,n.EXTRAS=2,n.prototype.extractSeries=function(t,e,a){},n.prototype.seriesToPoints=function(t,e,a){for(var i=[],r=0;r<t.length;++r){var o=t[r],s=o[1],l=null===s?null:n.parseFloat(s),h={x:NaN,y:NaN,xval:n.parseFloat(o[0]),yval:l,name:e,idx:r+a,canvasx:NaN,canvasy:NaN};i.push(h)}return this.onPointsCreated_(t,i),i},n.prototype.onPointsCreated_=function(t,e){},n.prototype.rollingAverage=function(t,e,a){},n.prototype.getExtremeYValues=function(t,e,a){},n.prototype.onLineEvaluated=function(t,e,a){},n.parseFloat=function(t){return null===t?NaN:t},a.default=i,e.exports=a.default},{}],7:[function(t,e,a){\"use strict\";function i(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(a,\"__esModule\",{value:!0});var n=t(\"./datahandler\"),r=(i(n),t(\"./default\")),o=i(r),s=function(){};s.prototype=new o.default,s.prototype.extractSeries=function(t,e,a){for(var i,n,r,o,s,l,h=[],u=a.get(\"logscale\"),d=0;d<t.length;d++)i=t[d][0],r=t[d][e],u&&null!==r&&(r[0]<=0||r[1]<=0)&&(r=null),null!==r?(o=r[0],s=r[1],null===o||isNaN(o)?h.push([i,o,[o,s]]):(l=s?o/s:0,n=100*l,h.push([i,n,[o,s]]))):h.push([i,null,[null,null]]);return h},s.prototype.rollingAverage=function(t,e,a){e=Math.min(e,t.length);var i,n=[],r=0,o=0;for(i=0;i<t.length;i++){r+=t[i][2][0],o+=t[i][2][1],i-e>=0&&(r-=t[i-e][2][0],o-=t[i-e][2][1]);var s=t[i][0],l=o?r/o:0;n[i]=[s,100*l]}return n},a.default=s,e.exports=a.default},{\"./datahandler\":6,\"./default\":8}],8:[function(t,e,a){\"use strict\";Object.defineProperty(a,\"__esModule\",{value:!0});var i=t(\"./datahandler\"),n=function(t){return t&&t.__esModule?t:{default:t}}(i),r=function(){};r.prototype=new n.default,r.prototype.extractSeries=function(t,e,a){for(var i=[],n=a.get(\"logscale\"),r=0;r<t.length;r++){var o=t[r][0],s=t[r][e];n&&s<=0&&(s=null),i.push([o,s])}return i},r.prototype.rollingAverage=function(t,e,a){e=Math.min(e,t.length);var i,n,r,o,s,l=[];if(1==e)return t;for(i=0;i<t.length;i++){for(o=0,s=0,n=Math.max(0,i-e+1);n<i+1;n++)null===(r=t[n][1])||isNaN(r)||(s++,o+=t[n][1]);l[i]=s?[t[i][0],o/s]:[t[i][0],null]}return l},r.prototype.getExtremeYValues=function(t,e,a){for(var i,n=null,r=null,o=t.length-1,s=0;s<=o;s++)null===(i=t[s][1])||isNaN(i)||((null===r||i>r)&&(r=i),(null===n||i<n)&&(n=i));return[n,r]},a.default=r,e.exports=a.default},{\"./datahandler\":6}],9:[function(t,e,a){\"use strict\";Object.defineProperty(a,\"__esModule\",{value:!0});var i=t(\"./dygraph-utils\"),n=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(i),r=t(\"./dygraph\"),o=function(t){return t&&t.__esModule?t:{default:t}}(r),s=function(t,e,a,i){if(this.dygraph_=t,this.layout=i,this.element=e,this.elementContext=a,this.height=t.height_,this.width=t.width_,!n.isCanvasSupported(this.element))throw\"Canvas is not supported.\";this.area=i.getPlotArea();var r=this.dygraph_.canvas_ctx_;r.beginPath(),r.rect(this.area.x,this.area.y,this.area.w,this.area.h),r.clip(),r=this.dygraph_.hidden_ctx_,r.beginPath(),r.rect(this.area.x,this.area.y,this.area.w,this.area.h),r.clip()};s.prototype.clear=function(){this.elementContext.clearRect(0,0,this.width,this.height)},s.prototype.render=function(){this._updatePoints(),this._renderLineChart()},s._getIteratorPredicate=function(t){return t?s._predicateThatSkipsEmptyPoints:null},s._predicateThatSkipsEmptyPoints=function(t,e){return null!==t[e].yval},s._drawStyledLine=function(t,e,a,i,r,o,l){var h=t.dygraph,u=h.getBooleanOption(\"stepPlot\",t.setName);n.isArrayLike(i)||(i=null);var d=h.getBooleanOption(\"drawGapEdgePoints\",t.setName),c=t.points,p=t.setName,g=n.createIterator(c,0,c.length,s._getIteratorPredicate(h.getBooleanOption(\"connectSeparatedPoints\",p))),f=i&&i.length>=2,v=t.drawingContext;v.save(),f&&v.setLineDash&&v.setLineDash(i);var _=s._drawSeries(t,g,a,l,r,d,u,e);s._drawPointsOnLine(t,_,o,e,l),f&&v.setLineDash&&v.setLineDash([]),v.restore()},s._drawSeries=function(t,e,a,i,n,r,o,s){var l,h,u=null,d=null,c=null,p=[],g=!0,f=t.drawingContext;f.beginPath(),f.strokeStyle=s,f.lineWidth=a;for(var v=e.array_,_=e.end_,y=e.predicate_,x=e.start_;x<_;x++){if(h=v[x],y){for(;x<_&&!y(v,x);)x++;if(x==_)break;h=v[x]}if(null===h.canvasy||h.canvasy!=h.canvasy)o&&null!==u&&(f.moveTo(u,d),f.lineTo(h.canvasx,d)),u=d=null;else{if(l=!1,r||null===u){e.nextIdx_=x,e.next(),c=e.hasNext?e.peek.canvasy:null;var m=null===c||c!=c;l=null===u&&m,r&&(!g&&null===u||e.hasNext&&m)&&(l=!0)}null!==u?a&&(o&&(f.moveTo(u,d),f.lineTo(h.canvasx,d)),f.lineTo(h.canvasx,h.canvasy)):f.moveTo(h.canvasx,h.canvasy),(n||l)&&p.push([h.canvasx,h.canvasy,h.idx]),u=h.canvasx,d=h.canvasy}g=!1}return f.stroke(),p},s._drawPointsOnLine=function(t,e,a,i,n){for(var r=t.drawingContext,o=0;o<e.length;o++){var s=e[o];r.save(),a.call(t.dygraph,t.dygraph,t.setName,r,s[0],s[1],i,n,s[2]),r.restore()}},s.prototype._updatePoints=function(){for(var t=this.layout.points,e=t.length;e--;)for(var a=t[e],i=a.length;i--;){var n=a[i];n.canvasx=this.area.w*n.x+this.area.x,n.canvasy=this.area.h*n.y+this.area.y}},s.prototype._renderLineChart=function(t,e){var a,i,r=e||this.elementContext,o=this.layout.points,s=this.layout.setNames;this.colors=this.dygraph_.colorsMap_;var l=this.dygraph_.getOption(\"plotter\"),h=l;n.isArrayLike(h)||(h=[h]);var u={};for(a=0;a<s.length;a++){i=s[a];var d=this.dygraph_.getOption(\"plotter\",i);d!=l&&(u[i]=d)}for(a=0;a<h.length;a++)for(var c=h[a],p=a==h.length-1,g=0;g<o.length;g++)if(i=s[g],!t||i==t){var f=o[g],v=c;if(i in u){if(!p)continue;v=u[i]}var _=this.colors[i],y=this.dygraph_.getOption(\"strokeWidth\",i);r.save(),r.strokeStyle=_,r.lineWidth=y,v({points:f,setName:i,drawingContext:r,color:_,strokeWidth:y,dygraph:this.dygraph_,axis:this.dygraph_.axisPropertiesForSeries(i),plotArea:this.area,seriesIndex:g,seriesCount:o.length,singleSeriesName:t,allSeriesPoints:o}),r.restore()}},s._Plotters={linePlotter:function(t){s._linePlotter(t)},fillPlotter:function(t){s._fillPlotter(t)},errorPlotter:function(t){s._errorPlotter(t)}},s._linePlotter=function(t){var e=t.dygraph,a=t.setName,i=t.strokeWidth,r=e.getNumericOption(\"strokeBorderWidth\",a),o=e.getOption(\"drawPointCallback\",a)||n.Circles.DEFAULT,l=e.getOption(\"strokePattern\",a),h=e.getBooleanOption(\"drawPoints\",a),u=e.getNumericOption(\"pointSize\",a);r&&i&&s._drawStyledLine(t,e.getOption(\"strokeBorderColor\",a),i+2*r,l,h,o,u),s._drawStyledLine(t,t.color,i,l,h,o,u)},s._errorPlotter=function(t){var e=t.dygraph,a=t.setName;if(e.getBooleanOption(\"errorBars\")||e.getBooleanOption(\"customBars\")){e.getBooleanOption(\"fillGraph\",a)&&console.warn(\"Can't use fillGraph option with error bars\");var i,r=t.drawingContext,o=t.color,l=e.getNumericOption(\"fillAlpha\",a),h=e.getBooleanOption(\"stepPlot\",a),u=t.points,d=n.createIterator(u,0,u.length,s._getIteratorPredicate(e.getBooleanOption(\"connectSeparatedPoints\",a))),c=NaN,p=NaN,g=[-1,-1],f=n.toRGB_(o),v=\"rgba(\"+f.r+\",\"+f.g+\",\"+f.b+\",\"+l+\")\";r.fillStyle=v,r.beginPath();for(var _=function(t){return null===t||void 0===t||isNaN(t)};d.hasNext;){var y=d.next();!h&&_(y.y)||h&&!isNaN(p)&&_(p)?c=NaN:(i=[y.y_bottom,y.y_top],h&&(p=y.y),isNaN(i[0])&&(i[0]=y.y),isNaN(i[1])&&(i[1]=y.y),i[0]=t.plotArea.h*i[0]+t.plotArea.y,i[1]=t.plotArea.h*i[1]+t.plotArea.y,isNaN(c)||(h?(r.moveTo(c,g[0]),r.lineTo(y.canvasx,g[0]),r.lineTo(y.canvasx,g[1])):(r.moveTo(c,g[0]),r.lineTo(y.canvasx,i[0]),r.lineTo(y.canvasx,i[1])),r.lineTo(c,g[1]),r.closePath()),g=i,c=y.canvasx)}r.fill()}},s._fastCanvasProxy=function(t){var e=[],a=null,i=null,n=0,r=function(t){if(!(e.length<=1)){for(var a=e.length-1;a>0;a--){var i=e[a];if(2==i[0]){var n=e[a-1];n[1]==i[1]&&n[2]==i[2]&&e.splice(a,1)}}for(var a=0;a<e.length-1;){var i=e[a];2==i[0]&&2==e[a+1][0]?e.splice(a,1):a++}if(e.length>2&&!t){var r=0;2==e[0][0]&&r++;for(var o=null,s=null,a=r;a<e.length;a++){var i=e[a];if(1==i[0])if(null===o&&null===s)o=a,s=a;else{var l=i[2];l<e[o][2]?o=a:l>e[s][2]&&(s=a)}}var h=e[o],u=e[s];e.splice(r,e.length-r),o<s?(e.push(h),e.push(u)):o>s?(e.push(u),e.push(h)):e.push(h)}}},o=function(a){r(a);for(var o=0,s=e.length;o<s;o++){var l=e[o];1==l[0]?t.lineTo(l[1],l[2]):2==l[0]&&t.moveTo(l[1],l[2])}e.length&&(i=e[e.length-1][1]),n+=e.length,e=[]},s=function(t,n,r){var s=Math.round(n);if(null===a||s!=a){var l=a-i>1,h=s-a>1;o(l||h),a=s}e.push([t,n,r])};return{moveTo:function(t,e){s(2,t,e)},lineTo:function(t,e){s(1,t,e)},stroke:function(){o(!0),t.stroke()},fill:function(){o(!0),t.fill()},beginPath:function(){o(!0),t.beginPath()},closePath:function(){o(!0),t.closePath()},_count:function(){return n}}},s._fillPlotter=function(t){if(!t.singleSeriesName&&0===t.seriesIndex){for(var e=t.dygraph,a=e.getLabels().slice(1),i=a.length;i>=0;i--)e.visibility()[i]||a.splice(i,1);if(function(){for(var t=0;t<a.length;t++)if(e.getBooleanOption(\"fillGraph\",a[t]))return!0;return!1}())for(var r,l,h=t.plotArea,u=t.allSeriesPoints,d=u.length,c=e.getBooleanOption(\"stackedGraph\"),p=e.getColors(),g={},f=function(t,e,a,i){if(t.lineTo(e,a),c)for(var n=i.length-1;n>=0;n--){var r=i[n];t.lineTo(r[0],r[1])}},v=d-1;v>=0;v--){var _=t.drawingContext,y=a[v];if(e.getBooleanOption(\"fillGraph\",y)){var x=e.getNumericOption(\"fillAlpha\",y),m=e.getBooleanOption(\"stepPlot\",y),b=p[v],w=e.axisPropertiesForSeries(y),A=1+w.minyval*w.yscale;A<0?A=0:A>1&&(A=1),A=h.h*A+h.y;var O,D=u[v],E=n.createIterator(D,0,D.length,s._getIteratorPredicate(e.getBooleanOption(\"connectSeparatedPoints\",y))),L=NaN,T=[-1,-1],S=n.toRGB_(b),P=\"rgba(\"+S.r+\",\"+S.g+\",\"+S.b+\",\"+x+\")\";_.fillStyle=P,_.beginPath();var C,M=!0;(D.length>2*e.width_||o.default.FORCE_FAST_PROXY)&&(_=s._fastCanvasProxy(_));for(var N,F=[];E.hasNext;)if(N=E.next(),n.isOK(N.y)||m){if(c){if(!M&&C==N.xval)continue;M=!1,C=N.xval,r=g[N.canvasx];var k;k=void 0===r?A:l?r[0]:r,O=[N.canvasy,k],m?-1===T[0]?g[N.canvasx]=[N.canvasy,A]:g[N.canvasx]=[N.canvasy,T[0]]:g[N.canvasx]=N.canvasy}else O=isNaN(N.canvasy)&&m?[h.y+h.h,A]:[N.canvasy,A];isNaN(L)?(_.moveTo(N.canvasx,O[1]),_.lineTo(N.canvasx,O[0])):(m?(_.lineTo(N.canvasx,T[0]),_.lineTo(N.canvasx,O[0])):_.lineTo(N.canvasx,O[0]),c&&(F.push([L,T[1]]),l&&r?F.push([N.canvasx,r[1]]):F.push([N.canvasx,O[1]]))),T=O,L=N.canvasx}else f(_,L,T[1],F),F=[],L=NaN,null===N.y_stacked||isNaN(N.y_stacked)||(g[N.canvasx]=h.h*N.y_stacked+h.y);l=m,O&&N&&(f(_,N.canvasx,O[1],F),F=[]),_.fill()}}}},a.default=s,e.exports=a.default},{\"./dygraph\":18,\"./dygraph-utils\":17}],10:[function(t,e,a){\"use strict\";function i(t){return t&&t.__esModule?t:{default:t}}function n(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}Object.defineProperty(a,\"__esModule\",{value:!0});var r=t(\"./dygraph-tickers\"),o=n(r),s=t(\"./dygraph-interaction-model\"),l=i(s),h=t(\"./dygraph-canvas\"),u=i(h),d=t(\"./dygraph-utils\"),c=n(d),p={highlightCircleSize:3,highlightSeriesOpts:null,highlightSeriesBackgroundAlpha:.5,highlightSeriesBackgroundColor:\"rgb(255, 255, 255)\",labelsSeparateLines:!1,labelsShowZeroValues:!0,labelsKMB:!1,labelsKMG2:!1,showLabelsOnHighlight:!0,digitsAfterDecimal:2,maxNumberWidth:6,sigFigs:null,strokeWidth:1,strokeBorderWidth:0,strokeBorderColor:\"white\",axisTickSize:3,axisLabelFontSize:14,rightGap:5,showRoller:!1,xValueParser:void 0,delimiter:\",\",sigma:2,errorBars:!1,fractions:!1,wilsonInterval:!0,customBars:!1,fillGraph:!1,fillAlpha:.15,connectSeparatedPoints:!1,stackedGraph:!1,stackedGraphNaNFill:\"all\",hideOverlayOnMouseOut:!0,legend:\"onmouseover\",stepPlot:!1,xRangePad:0,yRangePad:null,drawAxesAtZero:!1,titleHeight:28,xLabelHeight:18,yLabelWidth:18,axisLineColor:\"black\",axisLineWidth:.3,gridLineWidth:.3,axisLabelWidth:50,gridLineColor:\"rgb(128,128,128)\",interactionModel:l.default.defaultModel,animatedZooms:!1,showRangeSelector:!1,rangeSelectorHeight:40,rangeSelectorPlotStrokeColor:\"#808FAB\",rangeSelectorPlotFillGradientColor:\"white\",rangeSelectorPlotFillColor:\"#A7B1C4\",rangeSelectorBackgroundStrokeColor:\"gray\",rangeSelectorBackgroundLineWidth:1,rangeSelectorPlotLineWidth:1.5,rangeSelectorForegroundStrokeColor:\"black\",rangeSelectorForegroundLineWidth:1,rangeSelectorAlpha:.6,showInRangeSelector:null,plotter:[u.default._fillPlotter,u.default._errorPlotter,u.default._linePlotter],plugins:[],axes:{x:{pixelsPerLabel:70,axisLabelWidth:60,axisLabelFormatter:c.dateAxisLabelFormatter,valueFormatter:c.dateValueFormatter,drawGrid:!0,drawAxis:!0,independentTicks:!0,ticker:o.dateTicker},y:{axisLabelWidth:50,pixelsPerLabel:30,valueFormatter:c.numberValueFormatter,axisLabelFormatter:c.numberAxisLabelFormatter,drawGrid:!0,drawAxis:!0,independentTicks:!0,ticker:o.numericTicks},y2:{axisLabelWidth:50,pixelsPerLabel:30,valueFormatter:c.numberValueFormatter,axisLabelFormatter:c.numberAxisLabelFormatter,drawAxis:!0,drawGrid:!1,independentTicks:!1,ticker:o.numericTicks}}};a.default=p,e.exports=a.default},{\"./dygraph-canvas\":9,\"./dygraph-interaction-model\":12,\"./dygraph-tickers\":16,\"./dygraph-utils\":17}],11:[function(t,e,a){\"use strict\";Object.defineProperty(a,\"__esModule\",{value:!0});var i=t(\"./dygraph\"),n=function(t){return t&&t.__esModule?t:{default:t}}(i),r=function(t){this.container=t};r.prototype.draw=function(t,e){this.container.innerHTML=\"\",void 0!==this.date_graph&&this.date_graph.destroy(),this.date_graph=new n.default(this.container,t,e)},r.prototype.setSelection=function(t){var e=!1;t.length&&(e=t[0].row),this.date_graph.setSelection(e)},r.prototype.getSelection=function(){var t=[],e=this.date_graph.getSelection();if(e<0)return t;for(var a=this.date_graph.layout_.points,i=0;i<a.length;++i)t.push({row:e,column:i+1});return t},a.default=r,e.exports=a.default},{\"./dygraph\":18}],12:[function(t,e,a){\"use strict\";Object.defineProperty(a,\"__esModule\",{value:!0});var i=t(\"./dygraph-utils\"),n=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(i),r={};r.maybeTreatMouseOpAsClick=function(t,e,a){a.dragEndX=n.dragGetX_(t,a),a.dragEndY=n.dragGetY_(t,a);var i=Math.abs(a.dragEndX-a.dragStartX),o=Math.abs(a.dragEndY-a.dragStartY);i<2&&o<2&&void 0!==e.lastx_&&-1!=e.lastx_&&r.treatMouseOpAsClick(e,t,a),a.regionWidth=i,a.regionHeight=o},r.startPan=function(t,e,a){var i,r;a.isPanning=!0;var o=e.xAxisRange();if(e.getOptionForAxis(\"logscale\",\"x\")?(a.initialLeftmostDate=n.log10(o[0]),a.dateRange=n.log10(o[1])-n.log10(o[0])):(a.initialLeftmostDate=o[0],a.dateRange=o[1]-o[0]),a.xUnitsPerPixel=a.dateRange/(e.plotter_.area.w-1),e.getNumericOption(\"panEdgeFraction\")){var s=e.width_*e.getNumericOption(\"panEdgeFraction\"),l=e.xAxisExtremes(),h=e.toDomXCoord(l[0])-s,u=e.toDomXCoord(l[1])+s,d=e.toDataXCoord(h),c=e.toDataXCoord(u);a.boundedDates=[d,c];var p=[],g=e.height_*e.getNumericOption(\"panEdgeFraction\");for(i=0;i<e.axes_.length;i++){r=e.axes_[i];var f=r.extremeRange,v=e.toDomYCoord(f[0],i)+g,_=e.toDomYCoord(f[1],i)-g,y=e.toDataYCoord(v,i),x=e.toDataYCoord(_,i);p[i]=[y,x]}a.boundedValues=p}for(a.is2DPan=!1,a.axes=[],i=0;i<e.axes_.length;i++){r=e.axes_[i];var m={},b=e.yAxisRange(i);e.attributes_.getForAxis(\"logscale\",i)?(m.initialTopValue=n.log10(b[1]),m.dragValueRange=n.log10(b[1])-n.log10(b[0])):(m.initialTopValue=b[1],m.dragValueRange=b[1]-b[0]),m.unitsPerPixel=m.dragValueRange/(e.plotter_.area.h-1),a.axes.push(m),r.valueRange&&(a.is2DPan=!0)}},r.movePan=function(t,e,a){a.dragEndX=n.dragGetX_(t,a),a.dragEndY=n.dragGetY_(t,a);var i=a.initialLeftmostDate-(a.dragEndX-a.dragStartX)*a.xUnitsPerPixel;a.boundedDates&&(i=Math.max(i,a.boundedDates[0]));var r=i+a.dateRange;if(a.boundedDates&&r>a.boundedDates[1]&&(i-=r-a.boundedDates[1],r=i+a.dateRange),e.getOptionForAxis(\"logscale\",\"x\")?e.dateWindow_=[Math.pow(n.LOG_SCALE,i),Math.pow(n.LOG_SCALE,r)]:e.dateWindow_=[i,r],a.is2DPan)for(var o=a.dragEndY-a.dragStartY,s=0;s<e.axes_.length;s++){var l=e.axes_[s],h=a.axes[s],u=o*h.unitsPerPixel,d=a.boundedValues?a.boundedValues[s]:null,c=h.initialTopValue+u;d&&(c=Math.min(c,d[1]));var p=c-h.dragValueRange;d&&p<d[0]&&(c-=p-d[0],p=c-h.dragValueRange),e.attributes_.getForAxis(\"logscale\",s)?l.valueRange=[Math.pow(n.LOG_SCALE,p),Math.pow(n.LOG_SCALE,c)]:l.valueRange=[p,c]}e.drawGraph_(!1)},r.endPan=r.maybeTreatMouseOpAsClick,r.startZoom=function(t,e,a){a.isZooming=!0,a.zoomMoved=!1},r.moveZoom=function(t,e,a){a.zoomMoved=!0,a.dragEndX=n.dragGetX_(t,a),a.dragEndY=n.dragGetY_(t,a);var i=Math.abs(a.dragStartX-a.dragEndX),r=Math.abs(a.dragStartY-a.dragEndY);a.dragDirection=i<r/2?n.VERTICAL:n.HORIZONTAL,e.drawZoomRect_(a.dragDirection,a.dragStartX,a.dragEndX,a.dragStartY,a.dragEndY,a.prevDragDirection,a.prevEndX,a.prevEndY),a.prevEndX=a.dragEndX,a.prevEndY=a.dragEndY,a.prevDragDirection=a.dragDirection},r.treatMouseOpAsClick=function(t,e,a){for(var i=t.getFunctionOption(\"clickCallback\"),n=t.getFunctionOption(\"pointClickCallback\"),r=null,o=-1,s=Number.MAX_VALUE,l=0;l<t.selPoints_.length;l++){var h=t.selPoints_[l],u=Math.pow(h.canvasx-a.dragEndX,2)+Math.pow(h.canvasy-a.dragEndY,2);!isNaN(u)&&(-1==o||u<s)&&(s=u,o=l)}var d=t.getNumericOption(\"highlightCircleSize\")+2;if(s<=d*d&&(r=t.selPoints_[o]),r){var c={cancelable:!0,point:r,canvasx:a.dragEndX,canvasy:a.dragEndY};if(t.cascadeEvents_(\"pointClick\",c))return;n&&n.call(t,e,r)}var c={cancelable:!0,xval:t.lastx_,pts:t.selPoints_,canvasx:a.dragEndX,canvasy:a.dragEndY};t.cascadeEvents_(\"click\",c)||i&&i.call(t,e,t.lastx_,t.selPoints_)},r.endZoom=function(t,e,a){e.clearZoomRect_(),a.isZooming=!1,r.maybeTreatMouseOpAsClick(t,e,a);var i=e.getArea();if(a.regionWidth>=10&&a.dragDirection==n.HORIZONTAL){var o=Math.min(a.dragStartX,a.dragEndX),s=Math.max(a.dragStartX,a.dragEndX);o=Math.max(o,i.x),s=Math.min(s,i.x+i.w),o<s&&e.doZoomX_(o,s),a.cancelNextDblclick=!0}else if(a.regionHeight>=10&&a.dragDirection==n.VERTICAL){var l=Math.min(a.dragStartY,a.dragEndY),h=Math.max(a.dragStartY,a.dragEndY);l=Math.max(l,i.y),h=Math.min(h,i.y+i.h),l<h&&e.doZoomY_(l,h),a.cancelNextDblclick=!0}a.dragStartX=null,a.dragStartY=null},r.startTouch=function(t,e,a){t.preventDefault(),t.touches.length>1&&(a.startTimeForDoubleTapMs=null);for(var i=[],n=0;n<t.touches.length;n++){var r=t.touches[n];i.push({pageX:r.pageX,pageY:r.pageY,dataX:e.toDataXCoord(r.pageX),dataY:e.toDataYCoord(r.pageY)})}if(a.initialTouches=i,1==i.length)a.initialPinchCenter=i[0],a.touchDirections={x:!0,y:!0};else if(i.length>=2){a.initialPinchCenter={pageX:.5*(i[0].pageX+i[1].pageX),pageY:.5*(i[0].pageY+i[1].pageY),dataX:.5*(i[0].dataX+i[1].dataX),dataY:.5*(i[0].dataY+i[1].dataY)};var o=180/Math.PI*Math.atan2(a.initialPinchCenter.pageY-i[0].pageY,i[0].pageX-a.initialPinchCenter.pageX);o=Math.abs(o),o>90&&(o=90-o),a.touchDirections={x:o<67.5,y:o>22.5}}a.initialRange={x:e.xAxisRange(),y:e.yAxisRange()}},r.moveTouch=function(t,e,a){a.startTimeForDoubleTapMs=null;var i,n=[];for(i=0;i<t.touches.length;i++){var r=t.touches[i];n.push({pageX:r.pageX,pageY:r.pageY})}var o,s=a.initialTouches,l=a.initialPinchCenter;o=1==n.length?n[0]:{pageX:.5*(n[0].pageX+n[1].pageX),pageY:.5*(n[0].pageY+n[1].pageY)};var h={pageX:o.pageX-l.pageX,pageY:o.pageY-l.pageY},u=a.initialRange.x[1]-a.initialRange.x[0],d=a.initialRange.y[0]-a.initialRange.y[1];h.dataX=h.pageX/e.plotter_.area.w*u,h.dataY=h.pageY/e.plotter_.area.h*d;var c,p;if(1==n.length)c=1,p=1;else if(n.length>=2){var g=s[1].pageX-l.pageX;c=(n[1].pageX-o.pageX)/g;var f=s[1].pageY-l.pageY;p=(n[1].pageY-o.pageY)/f}c=Math.min(8,Math.max(.125,c)),p=Math.min(8,Math.max(.125,p));var v=!1;if(a.touchDirections.x&&(e.dateWindow_=[l.dataX-h.dataX+(a.initialRange.x[0]-l.dataX)/c,l.dataX-h.dataX+(a.initialRange.x[1]-l.dataX)/c],v=!0),a.touchDirections.y)for(i=0;i<1;i++){var _=e.axes_[i],y=e.attributes_.getForAxis(\"logscale\",i);y||(_.valueRange=[l.dataY-h.dataY+(a.initialRange.y[0]-l.dataY)/p,l.dataY-h.dataY+(a.initialRange.y[1]-l.dataY)/p],v=!0)}if(e.drawGraph_(!1),v&&n.length>1&&e.getFunctionOption(\"zoomCallback\")){var x=e.xAxisRange();e.getFunctionOption(\"zoomCallback\").call(e,x[0],x[1],e.yAxisRanges())}},r.endTouch=function(t,e,a){if(0!==t.touches.length)r.startTouch(t,e,a);else if(1==t.changedTouches.length){var i=(new Date).getTime(),n=t.changedTouches[0];a.startTimeForDoubleTapMs&&i-a.startTimeForDoubleTapMs<500&&a.doubleTapX&&Math.abs(a.doubleTapX-n.screenX)<50&&a.doubleTapY&&Math.abs(a.doubleTapY-n.screenY)<50?e.resetZoom():(a.startTimeForDoubleTapMs=i,a.doubleTapX=n.screenX,a.doubleTapY=n.screenY)}};var o=function(t,e,a){return t<e?e-t:t>a?t-a:0},s=function(t,e){var a=n.findPos(e.canvas_),i={left:a.x,right:a.x+e.canvas_.offsetWidth,top:a.y,bottom:a.y+e.canvas_.offsetHeight},r={x:n.pageX(t),y:n.pageY(t)},s=o(r.x,i.left,i.right),l=o(r.y,i.top,i.bottom);return Math.max(s,l)};r.defaultModel={mousedown:function(t,e,a){if(!t.button||2!=t.button){a.initializeMouseDown(t,e,a),t.altKey||t.shiftKey?r.startPan(t,e,a):r.startZoom(t,e,a);var i=function(t){if(a.isZooming){s(t,e)<100?r.moveZoom(t,e,a):null!==a.dragEndX&&(a.dragEndX=null,a.dragEndY=null,e.clearZoomRect_())}else a.isPanning&&r.movePan(t,e,a)},o=function t(o){a.isZooming?null!==a.dragEndX?r.endZoom(o,e,a):r.maybeTreatMouseOpAsClick(o,e,a):a.isPanning&&r.endPan(o,e,a),n.removeEvent(document,\"mousemove\",i),n.removeEvent(document,\"mouseup\",t),a.destroy()};e.addAndTrackEvent(document,\"mousemove\",i),e.addAndTrackEvent(document,\"mouseup\",o)}},willDestroyContextMyself:!0,touchstart:function(t,e,a){r.startTouch(t,e,a)},touchmove:function(t,e,a){r.moveTouch(t,e,a)},touchend:function(t,e,a){r.endTouch(t,e,a)},dblclick:function(t,e,a){if(a.cancelNextDblclick)return void(a.cancelNextDblclick=!1);var i={canvasx:a.dragEndX,canvasy:a.dragEndY,cancelable:!0};e.cascadeEvents_(\"dblclick\",i)||t.altKey||t.shiftKey||e.resetZoom()}},r.nonInteractiveModel_={mousedown:function(t,e,a){a.initializeMouseDown(t,e,a)},mouseup:r.maybeTreatMouseOpAsClick},r.dragIsPanInteractionModel={mousedown:function(t,e,a){a.initializeMouseDown(t,e,a),r.startPan(t,e,a)},mousemove:function(t,e,a){a.isPanning&&r.movePan(t,e,a)},mouseup:function(t,e,a){a.isPanning&&r.endPan(t,e,a)}},a.default=r,e.exports=a.default},{\"./dygraph-utils\":17}],13:[function(t,e,a){\"use strict\";Object.defineProperty(a,\"__esModule\",{value:!0});var i=t(\"./dygraph-utils\"),n=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(i),r=function(t){this.dygraph_=t,this.points=[],this.setNames=[],this.annotations=[],this.yAxes_=null,this.xTicks_=null,this.yTicks_=null};r.prototype.addDataset=function(t,e){this.points.push(e),this.setNames.push(t)},r.prototype.getPlotArea=function(){return this.area_},r.prototype.computePlotArea=function(){var t={x:0,y:0};t.w=this.dygraph_.width_-t.x-this.dygraph_.getOption(\"rightGap\"),t.h=this.dygraph_.height_;var e={chart_div:this.dygraph_.graphDiv,reserveSpaceLeft:function(e){var a={x:t.x,y:t.y,w:e,h:t.h};return t.x+=e,t.w-=e,a},reserveSpaceRight:function(e){var a={x:t.x+t.w-e,y:t.y,w:e,h:t.h};return t.w-=e,a},reserveSpaceTop:function(e){var a={x:t.x,y:t.y,w:t.w,h:e};return t.y+=e,t.h-=e,a},reserveSpaceBottom:function(e){var a={x:t.x,y:t.y+t.h-e,w:t.w,h:e};return t.h-=e,a},chartRect:function(){return{x:t.x,y:t.y,w:t.w,h:t.h}}};this.dygraph_.cascadeEvents_(\"layout\",e),this.area_=t},r.prototype.setAnnotations=function(t){this.annotations=[];for(var e=this.dygraph_.getOption(\"xValueParser\")||function(t){return t},a=0;a<t.length;a++){var i={};if(!t[a].xval&&void 0===t[a].x)return void console.error(\"Annotations must have an 'x' property\");if(t[a].icon&&(!t[a].hasOwnProperty(\"width\")||!t[a].hasOwnProperty(\"height\")))return void console.error(\"Must set width and height when setting annotation.icon property\");n.update(i,t[a]),i.xval||(i.xval=e(i.x)),this.annotations.push(i)}},r.prototype.setXTicks=function(t){this.xTicks_=t},r.prototype.setYAxes=function(t){this.yAxes_=t},r.prototype.evaluate=function(){this._xAxis={},this._evaluateLimits(),this._evaluateLineCharts(),this._evaluateLineTicks(),this._evaluateAnnotations()},r.prototype._evaluateLimits=function(){var t=this.dygraph_.xAxisRange();this._xAxis.minval=t[0],this._xAxis.maxval=t[1];var e=t[1]-t[0];this._xAxis.scale=0!==e?1/e:1,this.dygraph_.getOptionForAxis(\"logscale\",\"x\")&&(this._xAxis.xlogrange=n.log10(this._xAxis.maxval)-n.log10(this._xAxis.minval),this._xAxis.xlogscale=0!==this._xAxis.xlogrange?1/this._xAxis.xlogrange:1);for(var a=0;a<this.yAxes_.length;a++){var i=this.yAxes_[a];i.minyval=i.computedValueRange[0],i.maxyval=i.computedValueRange[1],i.yrange=i.maxyval-i.minyval,i.yscale=0!==i.yrange?1/i.yrange:1,this.dygraph_.getOption(\"logscale\")&&(i.ylogrange=n.log10(i.maxyval)-n.log10(i.minyval),i.ylogscale=0!==i.ylogrange?1/i.ylogrange:1,isFinite(i.ylogrange)&&!isNaN(i.ylogrange)||console.error(\"axis \"+a+\" of graph at \"+i.g+\" can't be displayed in log scale for range [\"+i.minyval+\" - \"+i.maxyval+\"]\"))}},r.calcXNormal_=function(t,e,a){return a?(n.log10(t)-n.log10(e.minval))*e.xlogscale:(t-e.minval)*e.scale},r.calcYNormal_=function(t,e,a){if(a){var i=1-(n.log10(e)-n.log10(t.minyval))*t.ylogscale;return isFinite(i)?i:NaN}return 1-(e-t.minyval)*t.yscale},r.prototype._evaluateLineCharts=function(){for(var t=this.dygraph_.getOption(\"stackedGraph\"),e=this.dygraph_.getOptionForAxis(\"logscale\",\"x\"),a=0;a<this.points.length;a++){for(var i=this.points[a],n=this.setNames[a],o=this.dygraph_.getOption(\"connectSeparatedPoints\",n),s=this.dygraph_.axisPropertiesForSeries(n),l=this.dygraph_.attributes_.getForSeries(\"logscale\",n),h=0;h<i.length;h++){var u=i[h];u.x=r.calcXNormal_(u.xval,this._xAxis,e);var d=u.yval;t&&(u.y_stacked=r.calcYNormal_(s,u.yval_stacked,l),\nnull===d||isNaN(d)||(d=u.yval_stacked)),null===d&&(d=NaN,o||(u.yval=NaN)),u.y=r.calcYNormal_(s,d,l)}this.dygraph_.dataHandler_.onLineEvaluated(i,s,l)}},r.prototype._evaluateLineTicks=function(){var t,e,a,i,n,r;for(this.xticks=[],t=0;t<this.xTicks_.length;t++)e=this.xTicks_[t],a=e.label,r=!(\"label_v\"in e),n=r?e.v:e.label_v,(i=this.dygraph_.toPercentXCoord(n))>=0&&i<1&&this.xticks.push({pos:i,label:a,has_tick:r});for(this.yticks=[],t=0;t<this.yAxes_.length;t++)for(var o=this.yAxes_[t],s=0;s<o.ticks.length;s++)e=o.ticks[s],a=e.label,r=!(\"label_v\"in e),n=r?e.v:e.label_v,(i=this.dygraph_.toPercentYCoord(n,t))>0&&i<=1&&this.yticks.push({axis:t,pos:i,label:a,has_tick:r})},r.prototype._evaluateAnnotations=function(){var t,e={};for(t=0;t<this.annotations.length;t++){var a=this.annotations[t];e[a.xval+\",\"+a.series]=a}if(this.annotated_points=[],this.annotations&&this.annotations.length)for(var i=0;i<this.points.length;i++){var n=this.points[i];for(t=0;t<n.length;t++){var r=n[t],o=r.xval+\",\"+r.name;o in e&&(r.annotation=e[o],this.annotated_points.push(r))}}},r.prototype.removeAllDatasets=function(){delete this.points,delete this.setNames,delete this.setPointsLengths,delete this.setPointsOffsets,this.points=[],this.setNames=[],this.setPointsLengths=[],this.setPointsOffsets=[]},a.default=r,e.exports=a.default},{\"./dygraph-utils\":17}],14:[function(t,e,a){(function(t){\"use strict\";Object.defineProperty(a,\"__esModule\",{value:!0});var i=null;if(void 0!==t);a.default=i,e.exports=a.default}).call(this,t(\"_process\"))},{_process:1}],15:[function(t,e,a){(function(i){\"use strict\";function n(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(a,\"__esModule\",{value:!0});var r=t(\"./dygraph-utils\"),o=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(r),s=t(\"./dygraph-default-attrs\"),l=n(s),h=t(\"./dygraph-options-reference\"),u=(n(h),function(t){this.dygraph_=t,this.yAxes_=[],this.xAxis_={},this.series_={},this.global_=this.dygraph_.attrs_,this.user_=this.dygraph_.user_attrs_||{},this.labels_=[],this.highlightSeries_=this.get(\"highlightSeriesOpts\")||{},this.reparseSeries()});if(u.AXIS_STRING_MAPPINGS_={y:0,Y:0,y1:0,Y1:0,y2:1,Y2:1},u.axisToIndex_=function(t){if(\"string\"==typeof t){if(u.AXIS_STRING_MAPPINGS_.hasOwnProperty(t))return u.AXIS_STRING_MAPPINGS_[t];throw\"Unknown axis : \"+t}if(\"number\"==typeof t){if(0===t||1===t)return t;throw\"Dygraphs only supports two y-axes, indexed from 0-1.\"}if(t)throw\"Unknown axis : \"+t;return 0},u.prototype.reparseSeries=function(){var t=this.get(\"labels\");if(t){this.labels_=t.slice(1),this.yAxes_=[{series:[],options:{}}],this.xAxis_={options:{}},this.series_={};for(var e=this.user_.series||{},a=0;a<this.labels_.length;a++){var i=this.labels_[a],n=e[i]||{},r=u.axisToIndex_(n.axis);this.series_[i]={idx:a,yAxis:r,options:n},this.yAxes_[r]?this.yAxes_[r].series.push(i):this.yAxes_[r]={series:[i],options:{}}}var s=this.user_.axes||{};o.update(this.yAxes_[0].options,s.y||{}),this.yAxes_.length>1&&o.update(this.yAxes_[1].options,s.y2||{}),o.update(this.xAxis_.options,s.x||{})}},u.prototype.get=function(t){var e=this.getGlobalUser_(t);return null!==e?e:this.getGlobalDefault_(t)},u.prototype.getGlobalUser_=function(t){return this.user_.hasOwnProperty(t)?this.user_[t]:null},u.prototype.getGlobalDefault_=function(t){return this.global_.hasOwnProperty(t)?this.global_[t]:l.default.hasOwnProperty(t)?l.default[t]:null},u.prototype.getForAxis=function(t,e){var a,i;if(\"number\"==typeof e)a=e,i=0===a?\"y\":\"y2\";else{if(\"y1\"==e&&(e=\"y\"),\"y\"==e)a=0;else if(\"y2\"==e)a=1;else{if(\"x\"!=e)throw\"Unknown axis \"+e;a=-1}i=e}var n=-1==a?this.xAxis_:this.yAxes_[a];if(n){var r=n.options;if(r.hasOwnProperty(t))return r[t]}if(\"x\"!==e||\"logscale\"!==t){var o=this.getGlobalUser_(t);if(null!==o)return o}var s=l.default.axes[i];return s.hasOwnProperty(t)?s[t]:this.getGlobalDefault_(t)},u.prototype.getForSeries=function(t,e){if(e===this.dygraph_.getHighlightSeries()&&this.highlightSeries_.hasOwnProperty(t))return this.highlightSeries_[t];if(!this.series_.hasOwnProperty(e))throw\"Unknown series: \"+e;var a=this.series_[e],i=a.options;return i.hasOwnProperty(t)?i[t]:this.getForAxis(t,a.yAxis)},u.prototype.numAxes=function(){return this.yAxes_.length},u.prototype.axisForSeries=function(t){return this.series_[t].yAxis},u.prototype.axisOptions=function(t){return this.yAxes_[t].options},u.prototype.seriesForAxis=function(t){return this.yAxes_[t].series},u.prototype.seriesNames=function(){return this.labels_},void 0!==i);a.default=u,e.exports=a.default}).call(this,t(\"_process\"))},{\"./dygraph-default-attrs\":10,\"./dygraph-options-reference\":14,\"./dygraph-utils\":17,_process:1}],16:[function(t,e,a){\"use strict\";Object.defineProperty(a,\"__esModule\",{value:!0});var i=t(\"./dygraph-utils\"),n=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(i),r=function(t,e,a,i,n,r){return o(t,e,a,function(t){return\"logscale\"!==t&&i(t)},n,r)};a.numericLinearTicks=r;var o=function(t,e,a,i,r,o){var s,l,h,u,c=i(\"pixelsPerLabel\"),p=[];if(o)for(s=0;s<o.length;s++)p.push({v:o[s]});else{if(i(\"logscale\")){u=Math.floor(a/c);var g=n.binarySearch(t,d,1),f=n.binarySearch(e,d,-1);-1==g&&(g=0),-1==f&&(f=d.length-1);var v=null;if(f-g>=u/4){for(var _=f;_>=g;_--){var y=d[_],x=Math.log(y/t)/Math.log(e/t)*a,m={v:y};null===v?v={tickValue:y,pixel_coord:x}:Math.abs(x-v.pixel_coord)>=c?v={tickValue:y,pixel_coord:x}:m.label=\"\",p.push(m)}p.reverse()}}if(0===p.length){var b,w,A=i(\"labelsKMG2\");A?(b=[1,2,4,8,16,32,64,128,256],w=16):(b=[1,2,5,10,20,50,100],w=10);var O,D,E,L=Math.ceil(a/c),T=Math.abs(e-t)/L,S=Math.floor(Math.log(T)/Math.log(w)),P=Math.pow(w,S);for(l=0;l<b.length&&(O=P*b[l],D=Math.floor(t/O)*O,E=Math.ceil(e/O)*O,u=Math.abs(E-D)/O,!(a/u>c));l++);for(D>E&&(O*=-1),s=0;s<=u;s++)h=D+s*O,p.push({v:h})}}var C=i(\"axisLabelFormatter\");for(s=0;s<p.length;s++)void 0===p[s].label&&(p[s].label=C.call(r,p[s].v,0,i,r));return p};a.numericTicks=o;var s=function(t,e,a,i,n,r){var o=c(t,e,a,i);return o>=0?g(t,e,o,i,n):[]};a.dateTicker=s;var l={MILLISECONDLY:0,TWO_MILLISECONDLY:1,FIVE_MILLISECONDLY:2,TEN_MILLISECONDLY:3,FIFTY_MILLISECONDLY:4,HUNDRED_MILLISECONDLY:5,FIVE_HUNDRED_MILLISECONDLY:6,SECONDLY:7,TWO_SECONDLY:8,FIVE_SECONDLY:9,TEN_SECONDLY:10,THIRTY_SECONDLY:11,MINUTELY:12,TWO_MINUTELY:13,FIVE_MINUTELY:14,TEN_MINUTELY:15,THIRTY_MINUTELY:16,HOURLY:17,TWO_HOURLY:18,SIX_HOURLY:19,DAILY:20,TWO_DAILY:21,WEEKLY:22,MONTHLY:23,QUARTERLY:24,BIANNUAL:25,ANNUAL:26,DECADAL:27,CENTENNIAL:28,NUM_GRANULARITIES:29};a.Granularity=l;var h={DATEFIELD_Y:0,DATEFIELD_M:1,DATEFIELD_D:2,DATEFIELD_HH:3,DATEFIELD_MM:4,DATEFIELD_SS:5,DATEFIELD_MS:6,NUM_DATEFIELDS:7},u=[];u[l.MILLISECONDLY]={datefield:h.DATEFIELD_MS,step:1,spacing:1},u[l.TWO_MILLISECONDLY]={datefield:h.DATEFIELD_MS,step:2,spacing:2},u[l.FIVE_MILLISECONDLY]={datefield:h.DATEFIELD_MS,step:5,spacing:5},u[l.TEN_MILLISECONDLY]={datefield:h.DATEFIELD_MS,step:10,spacing:10},u[l.FIFTY_MILLISECONDLY]={datefield:h.DATEFIELD_MS,step:50,spacing:50},u[l.HUNDRED_MILLISECONDLY]={datefield:h.DATEFIELD_MS,step:100,spacing:100},u[l.FIVE_HUNDRED_MILLISECONDLY]={datefield:h.DATEFIELD_MS,step:500,spacing:500},u[l.SECONDLY]={datefield:h.DATEFIELD_SS,step:1,spacing:1e3},u[l.TWO_SECONDLY]={datefield:h.DATEFIELD_SS,step:2,spacing:2e3},u[l.FIVE_SECONDLY]={datefield:h.DATEFIELD_SS,step:5,spacing:5e3},u[l.TEN_SECONDLY]={datefield:h.DATEFIELD_SS,step:10,spacing:1e4},u[l.THIRTY_SECONDLY]={datefield:h.DATEFIELD_SS,step:30,spacing:3e4},u[l.MINUTELY]={datefield:h.DATEFIELD_MM,step:1,spacing:6e4},u[l.TWO_MINUTELY]={datefield:h.DATEFIELD_MM,step:2,spacing:12e4},u[l.FIVE_MINUTELY]={datefield:h.DATEFIELD_MM,step:5,spacing:3e5},u[l.TEN_MINUTELY]={datefield:h.DATEFIELD_MM,step:10,spacing:6e5},u[l.THIRTY_MINUTELY]={datefield:h.DATEFIELD_MM,step:30,spacing:18e5},u[l.HOURLY]={datefield:h.DATEFIELD_HH,step:1,spacing:36e5},u[l.TWO_HOURLY]={datefield:h.DATEFIELD_HH,step:2,spacing:72e5},u[l.SIX_HOURLY]={datefield:h.DATEFIELD_HH,step:6,spacing:216e5},u[l.DAILY]={datefield:h.DATEFIELD_D,step:1,spacing:864e5},u[l.TWO_DAILY]={datefield:h.DATEFIELD_D,step:2,spacing:1728e5},u[l.WEEKLY]={datefield:h.DATEFIELD_D,step:7,spacing:6048e5},u[l.MONTHLY]={datefield:h.DATEFIELD_M,step:1,spacing:2629817280},u[l.QUARTERLY]={datefield:h.DATEFIELD_M,step:3,spacing:216e5*365.2524},u[l.BIANNUAL]={datefield:h.DATEFIELD_M,step:6,spacing:432e5*365.2524},u[l.ANNUAL]={datefield:h.DATEFIELD_Y,step:1,spacing:864e5*365.2524},u[l.DECADAL]={datefield:h.DATEFIELD_Y,step:10,spacing:315578073600},u[l.CENTENNIAL]={datefield:h.DATEFIELD_Y,step:100,spacing:3155780736e3};var d=function(){for(var t=[],e=-39;e<=39;e++)for(var a=Math.pow(10,e),i=1;i<=9;i++){var n=a*i;t.push(n)}return t}(),c=function(t,e,a,i){for(var n=i(\"pixelsPerLabel\"),r=0;r<l.NUM_GRANULARITIES;r++){if(a/p(t,e,r)>=n)return r}return-1},p=function(t,e,a){var i=u[a].spacing;return Math.round(1*(e-t)/i)},g=function(t,e,a,i,r){var o=i(\"axisLabelFormatter\"),s=i(\"labelsUTC\"),d=s?n.DateAccessorsUTC:n.DateAccessorsLocal,c=u[a].datefield,p=u[a].step,g=u[a].spacing,f=new Date(t),v=[];v[h.DATEFIELD_Y]=d.getFullYear(f),v[h.DATEFIELD_M]=d.getMonth(f),v[h.DATEFIELD_D]=d.getDate(f),v[h.DATEFIELD_HH]=d.getHours(f),v[h.DATEFIELD_MM]=d.getMinutes(f),v[h.DATEFIELD_SS]=d.getSeconds(f),v[h.DATEFIELD_MS]=d.getMilliseconds(f);var _=v[c]%p;a==l.WEEKLY&&(_=d.getDay(f)),v[c]-=_;for(var y=c+1;y<h.NUM_DATEFIELDS;y++)v[y]=y===h.DATEFIELD_D?1:0;var x=[],m=d.makeDate.apply(null,v),b=m.getTime();if(a<=l.HOURLY)for(b<t&&(b+=g,m=new Date(b));b<=e;)x.push({v:b,label:o.call(r,m,a,i,r)}),b+=g,m=new Date(b);else for(b<t&&(v[c]+=p,m=d.makeDate.apply(null,v),b=m.getTime());b<=e;)(a>=l.DAILY||d.getHours(m)%p==0)&&x.push({v:b,label:o.call(r,m,a,i,r)}),v[c]+=p,m=d.makeDate.apply(null,v),b=m.getTime();return x};a.getDateAxis=g},{\"./dygraph-utils\":17}],17:[function(t,e,a){\"use strict\";function i(t,e,a){t.removeEventListener(e,a,!1)}function n(t){return t=t||window.event,t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault(),t.cancelBubble=!0,t.cancel=!0,t.returnValue=!1,!1}function r(t,e,a){var i,n,r;if(0===e)i=a,n=a,r=a;else{var o=Math.floor(6*t),s=6*t-o,l=a*(1-e),h=a*(1-e*s),u=a*(1-e*(1-s));switch(o){case 1:i=h,n=a,r=l;break;case 2:i=l,n=a,r=u;break;case 3:i=l,n=h,r=a;break;case 4:i=u,n=l,r=a;break;case 5:i=a,n=l,r=h;break;case 6:case 0:i=a,n=u,r=l}}return i=Math.floor(255*i+.5),n=Math.floor(255*n+.5),r=Math.floor(255*r+.5),\"rgb(\"+i+\",\"+n+\",\"+r+\")\"}function o(t){var e=t.getBoundingClientRect(),a=window,i=document.documentElement;return{x:e.left+(a.pageXOffset||i.scrollLeft),y:e.top+(a.pageYOffset||i.scrollTop)}}function s(t){return!t.pageX||t.pageX<0?0:t.pageX}function l(t){return!t.pageY||t.pageY<0?0:t.pageY}function h(t,e){return s(t)-e.px}function u(t,e){return l(t)-e.py}function d(t){return!!t&&!isNaN(t)}function c(t,e){return!!t&&(null!==t.yval&&(null!==t.x&&void 0!==t.x&&(null!==t.y&&void 0!==t.y&&!(isNaN(t.x)||!e&&isNaN(t.y)))))}function p(t,e){var a=Math.min(Math.max(1,e||2),21);return Math.abs(t)<.001&&0!==t?t.toExponential(a-1):t.toPrecision(a)}function g(t){return t<10?\"0\"+t:\"\"+t}function f(t,e,a,i){var n=g(t)+\":\"+g(e);if(a&&(n+=\":\"+g(a),i)){var r=\"\"+i;n+=\".\"+(\"000\"+r).substring(r.length)}return n}function v(t,e){var a=e?tt:$,i=new Date(t),n=a.getFullYear(i),r=a.getMonth(i),o=a.getDate(i),s=a.getHours(i),l=a.getMinutes(i),h=a.getSeconds(i),u=a.getMilliseconds(i),d=\"\"+n,c=g(r+1),p=g(o),v=3600*s+60*l+h+.001*u,_=d+\"/\"+c+\"/\"+p;return v&&(_+=\" \"+f(s,l,h,u)),_}function _(t,e){var a=Math.pow(10,e);return Math.round(t*a)/a}function y(t,e,a,i,n){for(var r=!0;r;){var o=t,s=e,l=a,h=i,u=n;if(r=!1,null!==h&&void 0!==h&&null!==u&&void 0!==u||(h=0,u=s.length-1),h>u)return-1;null!==l&&void 0!==l||(l=0);var d,c=function(t){return t>=0&&t<s.length},p=parseInt((h+u)/2,10),g=s[p];if(g==o)return p;if(g>o){if(l>0&&(d=p-1,c(d)&&s[d]<o))return p;t=o,e=s,a=l,i=h,n=p-1,r=!0,c=p=g=d=void 0}else{if(!(g<o))return-1;if(l<0&&(d=p+1,c(d)&&s[d]>o))return p;t=o,e=s,a=l,i=p+1,n=u,r=!0,c=p=g=d=void 0}}}function x(t){var e,a;if((-1==t.search(\"-\")||-1!=t.search(\"T\")||-1!=t.search(\"Z\"))&&(a=m(t))&&!isNaN(a))return a;if(-1!=t.search(\"-\")){for(e=t.replace(\"-\",\"/\",\"g\");-1!=e.search(\"-\");)e=e.replace(\"-\",\"/\");a=m(e)}else 8==t.length?(e=t.substr(0,4)+\"/\"+t.substr(4,2)+\"/\"+t.substr(6,2),a=m(e)):a=m(t);return a&&!isNaN(a)||console.error(\"Couldn't parse \"+t+\" as a date\"),a}function m(t){return new Date(t).getTime()}function b(t,e){if(void 0!==e&&null!==e)for(var a in e)e.hasOwnProperty(a)&&(t[a]=e[a]);return t}function w(t,e){if(void 0!==e&&null!==e)for(var a in e)e.hasOwnProperty(a)&&(null===e[a]?t[a]=null:A(e[a])?t[a]=e[a].slice():!function(t){return\"object\"==typeof Node?t instanceof Node:\"object\"==typeof t&&\"number\"==typeof t.nodeType&&\"string\"==typeof t.nodeName}(e[a])&&\"object\"==typeof e[a]?(\"object\"==typeof t[a]&&null!==t[a]||(t[a]={}),w(t[a],e[a])):t[a]=e[a]);return t}function A(t){var e=typeof t;return(\"object\"==e||\"function\"==e&&\"function\"==typeof t.item)&&null!==t&&\"number\"==typeof t.length&&3!==t.nodeType}function O(t){return\"object\"==typeof t&&null!==t&&\"function\"==typeof t.getTime}function D(t){for(var e=[],a=0;a<t.length;a++)A(t[a])?e.push(D(t[a])):e.push(t[a]);return e}function E(){return document.createElement(\"canvas\")}function L(t){try{var e=window.devicePixelRatio,a=t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1;return void 0!==e?e/a:1}catch(t){return 1}}function T(t,e,a,i){e=e||0,a=a||t.length,this.hasNext=!0,this.peek=null,this.start_=e,this.array_=t,this.predicate_=i,this.end_=Math.min(t.length,e+a),this.nextIdx_=e-1,this.next()}function S(t,e,a,i){return new T(t,e,a,i)}function P(t,e,a,i){var n,r=0,o=(new Date).getTime();if(t(r),1==e)return void i();var s=e-1;!function l(){r>=e||et.call(window,function(){var e=(new Date).getTime(),h=e-o;n=r,r=Math.floor(h/a);var u=r-n;r+u>s||r>=s?(t(s),i()):(0!==u&&t(r),l())})}()}function C(t,e){var a={};if(t)for(var i=1;i<t.length;i++)a[t[i]]=!0;var n=function(t){for(var e in t)if(t.hasOwnProperty(e)&&!at[e])return!0;return!1};for(var r in e)if(e.hasOwnProperty(r))if(\"highlightSeriesOpts\"==r||a[r]&&!e.series){if(n(e[r]))return!0}else if(\"series\"==r||\"axes\"==r){var o=e[r];for(var s in o)if(o.hasOwnProperty(s)&&n(o[s]))return!0}else if(!at[r])return!0;return!1}function M(t){for(var e=0;e<t.length;e++){var a=t.charAt(e);if(\"\\r\"===a)return e+1<t.length&&\"\\n\"===t.charAt(e+1)?\"\\r\\n\":a;if(\"\\n\"===a)return e+1<t.length&&\"\\r\"===t.charAt(e+1)?\"\\n\\r\":a}return null}function N(t,e){if(null===e||null===t)return!1;for(var a=t;a&&a!==e;)a=a.parentNode;return a===e}function F(t,e){return e<0?1/Math.pow(t,-e):Math.pow(t,e)}function k(t){var e=nt.exec(t);if(!e)return null;var a=parseInt(e[1],10),i=parseInt(e[2],10),n=parseInt(e[3],10);return e[4]?{r:a,g:i,b:n,a:parseFloat(e[4])}:{r:a,g:i,b:n}}function R(t){var e=k(t);if(e)return e;var a=document.createElement(\"div\");a.style.backgroundColor=t,a.style.visibility=\"hidden\",document.body.appendChild(a);var i=window.getComputedStyle(a,null).backgroundColor;return document.body.removeChild(a),k(i)}function I(t){try{(t||document.createElement(\"canvas\")).getContext(\"2d\")}catch(t){return!1}return!0}function H(t,e,a){var i=parseFloat(t);if(!isNaN(i))return i;if(/^ *$/.test(t))return null;if(/^ *nan *$/i.test(t))return NaN;var n=\"Unable to parse '\"+t+\"' as a number\";return void 0!==a&&void 0!==e&&(n+=\" on line \"+(1+(e||0))+\" ('\"+a+\"') of CSV.\"),console.error(n),null}function Y(t,e){var a=e(\"sigFigs\");if(null!==a)return p(t,a);var i,n=e(\"digitsAfterDecimal\"),r=e(\"maxNumberWidth\"),o=e(\"labelsKMB\"),s=e(\"labelsKMG2\");if(i=0!==t&&(Math.abs(t)>=Math.pow(10,r)||Math.abs(t)<Math.pow(10,-n))?t.toExponential(n):\"\"+_(t,n),o||s){var l,h=[],u=[];o&&(l=1e3,h=rt),s&&(o&&console.warn(\"Setting both labelsKMB and labelsKMG2. Pick one!\"),l=1024,h=ot,u=st);for(var d=Math.abs(t),c=F(l,h.length),g=h.length-1;g>=0;g--,c/=l)if(d>=c){i=_(t/c,n)+h[g];break}if(s){var f=String(t.toExponential()).split(\"e-\");2===f.length&&f[1]>=3&&f[1]<=24&&(i=f[1]%3>0?_(f[0]/F(10,f[1]%3),n):Number(f[0]).toFixed(2),i+=u[Math.floor(f[1]/3)-1])}}return i}function X(t,e,a){return Y.call(this,t,a)}function V(t,e,a){var i=a(\"labelsUTC\"),n=i?tt:$,r=n.getFullYear(t),o=n.getMonth(t),s=n.getDate(t),l=n.getHours(t),h=n.getMinutes(t),u=n.getSeconds(t),d=n.getMilliseconds(t);if(e>=G.Granularity.DECADAL)return\"\"+r;if(e>=G.Granularity.MONTHLY)return lt[o]+\"&#160;\"+r;if(0===3600*l+60*h+u+.001*d||e>=G.Granularity.DAILY)return g(s)+\"&#160;\"+lt[o];if(e<G.Granularity.SECONDLY){var c=\"\"+d;return g(u)+\".\"+(\"000\"+c).substring(c.length)}return e>G.Granularity.MINUTELY?f(l,h,u,0):f(l,h,u,d)}function Z(t,e){return v(t,e(\"labelsUTC\"))}Object.defineProperty(a,\"__esModule\",{value:!0}),a.removeEvent=i,a.cancelEvent=n,a.hsvToRGB=r,a.findPos=o,a.pageX=s,a.pageY=l,a.dragGetX_=h,a.dragGetY_=u,a.isOK=d,a.isValidPoint=c,a.floatFormat=p,a.zeropad=g,a.hmsString_=f,a.dateString_=v,a.round_=_,a.binarySearch=y,a.dateParser=x,a.dateStrToMillis=m,a.update=b,a.updateDeep=w,a.isArrayLike=A,a.isDateLike=O,a.clone=D,a.createCanvas=E,a.getContextPixelRatio=L,a.Iterator=T,a.createIterator=S,a.repeatAndCleanup=P,a.isPixelChangingOptionList=C,a.detectLineDelimiter=M,a.isNodeContainedBy=N,a.pow=F,a.toRGB_=R,a.isCanvasSupported=I,a.parseFloat_=H,a.numberValueFormatter=Y,a.numberAxisLabelFormatter=X,a.dateAxisLabelFormatter=V,a.dateValueFormatter=Z;var B=t(\"./dygraph-tickers\"),G=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(B);a.LOG_SCALE=10;var W=Math.log(10);a.LN_TEN=W;var U=function(t){return Math.log(t)/W};a.log10=U;var z=function(t,e,a){var i=U(t),n=U(e),r=i+a*(n-i);return Math.pow(10,r)};a.logRangeFraction=z;var j=[2,2];a.DOTTED_LINE=j;var K=[7,3];a.DASHED_LINE=K;var q=[7,2,2,2];a.DOT_DASH_LINE=q;a.HORIZONTAL=1;a.VERTICAL=2;var Q=function(t){return t.getContext(\"2d\")};a.getContext=Q;var J=function(t,e,a){t.addEventListener(e,a,!1)};a.addEvent=J;var $={getFullYear:function(t){return t.getFullYear()},getMonth:function(t){return t.getMonth()},getDate:function(t){return t.getDate()},getHours:function(t){return t.getHours()},getMinutes:function(t){return t.getMinutes()},getSeconds:function(t){return t.getSeconds()},getMilliseconds:function(t){return t.getMilliseconds()},getDay:function(t){return t.getDay()},makeDate:function(t,e,a,i,n,r,o){return new Date(t,e,a,i,n,r,o)}};a.DateAccessorsLocal=$;var tt={getFullYear:function(t){return t.getUTCFullYear()},getMonth:function(t){return t.getUTCMonth()},getDate:function(t){return t.getUTCDate()},getHours:function(t){return t.getUTCHours()},getMinutes:function(t){return t.getUTCMinutes()},getSeconds:function(t){return t.getUTCSeconds()},getMilliseconds:function(t){return t.getUTCMilliseconds()},getDay:function(t){return t.getUTCDay()},makeDate:function(t,e,a,i,n,r,o){return new Date(Date.UTC(t,e,a,i,n,r,o))}};a.DateAccessorsUTC=tt,T.prototype.next=function(){if(!this.hasNext)return null;for(var t=this.peek,e=this.nextIdx_+1,a=!1;e<this.end_;){if(!this.predicate_||this.predicate_(this.array_,e)){this.peek=this.array_[e],a=!0;break}e++}return this.nextIdx_=e,a||(this.hasNext=!1,this.peek=null),t};var et=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}();a.requestAnimFrame=et;var at={annotationClickHandler:!0,annotationDblClickHandler:!0,annotationMouseOutHandler:!0,annotationMouseOverHandler:!0,axisLineColor:!0,axisLineWidth:!0,clickCallback:!0,drawCallback:!0,drawHighlightPointCallback:!0,drawPoints:!0,drawPointCallback:!0,drawGrid:!0,fillAlpha:!0,gridLineColor:!0,gridLineWidth:!0,hideOverlayOnMouseOut:!0,highlightCallback:!0,highlightCircleSize:!0,interactionModel:!0,labelsDiv:!0,labelsKMB:!0,labelsKMG2:!0,labelsSeparateLines:!0,labelsShowZeroValues:!0,legend:!0,panEdgeFraction:!0,pixelsPerYLabel:!0,pointClickCallback:!0,pointSize:!0,rangeSelectorPlotFillColor:!0,rangeSelectorPlotFillGradientColor:!0,rangeSelectorPlotStrokeColor:!0,rangeSelectorBackgroundStrokeColor:!0,rangeSelectorBackgroundLineWidth:!0,rangeSelectorPlotLineWidth:!0,rangeSelectorForegroundStrokeColor:!0,rangeSelectorForegroundLineWidth:!0,rangeSelectorAlpha:!0,showLabelsOnHighlight:!0,showRoller:!0,strokeWidth:!0,underlayCallback:!0,unhighlightCallback:!0,zoomCallback:!0},it={DEFAULT:function(t,e,a,i,n,r,o){a.beginPath(),a.fillStyle=r,a.arc(i,n,o,0,2*Math.PI,!1),a.fill()}};a.Circles=it;var nt=/^rgba?\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})(?:,\\s*([01](?:\\.\\d+)?))?\\)$/,rt=[\"K\",\"M\",\"B\",\"T\",\"Q\"],ot=[\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"],st=[\"m\",\"u\",\"n\",\"p\",\"f\",\"a\",\"z\",\"y\"],lt=[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"]},{\"./dygraph-tickers\":16}],18:[function(t,e,a){(function(i){\"use strict\";function n(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}function r(t){return t&&t.__esModule?t:{default:t}}function o(t){var e=t[0],a=e[0];if(\"number\"!=typeof a&&!x.isDateLike(a))throw new Error(\"Expected number or date but got \"+typeof a+\": \"+a+\".\");for(var i=1;i<e.length;i++){var n=e[i];if(null!==n&&void 0!==n&&(\"number\"!=typeof n&&!x.isArrayLike(n)))throw new Error(\"Expected number or array but got \"+typeof n+\": \"+n+\".\")}}Object.defineProperty(a,\"__esModule\",{value:!0});var s=function(){function t(t,e){var a=[],i=!0,n=!1,r=void 0;try{for(var o,s=t[Symbol.iterator]();!(i=(o=s.next()).done)&&(a.push(o.value),!e||a.length!==e);i=!0);}catch(t){n=!0,r=t}finally{try{!i&&s.return&&s.return()}finally{if(n)throw r}}return a}return function(e,a){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,a);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}(),l=t(\"./dygraph-layout\"),h=r(l),u=t(\"./dygraph-canvas\"),d=r(u),c=t(\"./dygraph-options\"),p=r(c),g=t(\"./dygraph-interaction-model\"),f=r(g),v=t(\"./dygraph-tickers\"),_=n(v),y=t(\"./dygraph-utils\"),x=n(y),m=t(\"./dygraph-default-attrs\"),b=r(m),w=t(\"./dygraph-options-reference\"),A=(r(w),t(\"./iframe-tarp\")),O=r(A),D=t(\"./datahandler/default\"),E=r(D),L=t(\"./datahandler/bars-error\"),T=r(L),S=t(\"./datahandler/bars-custom\"),P=r(S),C=t(\"./datahandler/default-fractions\"),M=r(C),N=t(\"./datahandler/bars-fractions\"),F=r(N),k=t(\"./datahandler/bars\"),R=r(k),I=t(\"./plugins/annotations\"),H=r(I),Y=t(\"./plugins/axes\"),X=r(Y),V=t(\"./plugins/chart-labels\"),Z=r(V),B=t(\"./plugins/grid\"),G=r(B),W=t(\"./plugins/legend\"),U=r(W),z=t(\"./plugins/range-selector\"),j=r(z),K=t(\"./dygraph-gviz\"),q=r(K),Q=function(t,e,a){this.__init__(t,e,a)};Q.NAME=\"Dygraph\",Q.VERSION=\"2.1.0\",Q.DEFAULT_ROLL_PERIOD=1,Q.DEFAULT_WIDTH=480,Q.DEFAULT_HEIGHT=320,Q.ANIMATION_STEPS=12,Q.ANIMATION_DURATION=200,Q.Plotters=d.default._Plotters,Q.addedAnnotationCSS=!1,Q.prototype.__init__=function(t,e,a){if(this.is_initial_draw_=!0,this.readyFns_=[],null!==a&&void 0!==a||(a={}),a=Q.copyUserAttrs_(a),\"string\"==typeof t&&(t=document.getElementById(t)),!t)throw new Error(\"Constructing dygraph with a non-existent div!\");this.maindiv_=t,this.file_=e,this.rollPeriod_=a.rollPeriod||Q.DEFAULT_ROLL_PERIOD,this.previousVerticalX_=-1,this.fractions_=a.fractions||!1,this.dateWindow_=a.dateWindow||null,this.annotations_=[],t.innerHTML=\"\",\"\"===t.style.width&&a.width&&(t.style.width=a.width+\"px\"),\"\"===t.style.height&&a.height&&(t.style.height=a.height+\"px\"),\"\"===t.style.height&&0===t.clientHeight&&(t.style.height=Q.DEFAULT_HEIGHT+\"px\",\"\"===t.style.width&&(t.style.width=Q.DEFAULT_WIDTH+\"px\")),this.width_=t.clientWidth||a.width||0,this.height_=t.clientHeight||a.height||0,a.stackedGraph&&(a.fillGraph=!0),this.user_attrs_={},x.update(this.user_attrs_,a),this.attrs_={},x.updateDeep(this.attrs_,b.default),this.boundaryIds_=[],this.setIndexByName_={},this.datasetIndex_=[],this.registeredEvents_=[],this.eventListeners_={},this.attributes_=new p.default(this),this.createInterface_(),this.plugins_=[];for(var i=Q.PLUGINS.concat(this.getOption(\"plugins\")),n=0;n<i.length;n++){var r,o=i[n];r=void 0!==o.activate?o:new o;var s={plugin:r,events:{},options:{},pluginOptions:{}},l=r.activate(this);for(var h in l)l.hasOwnProperty(h)&&(s.events[h]=l[h]);this.plugins_.push(s)}for(var n=0;n<this.plugins_.length;n++){var u=this.plugins_[n];for(var h in u.events)if(u.events.hasOwnProperty(h)){var d=u.events[h],c=[u.plugin,d];h in this.eventListeners_?this.eventListeners_[h].push(c):this.eventListeners_[h]=[c]}}this.createDragInterface_(),this.start_()},Q.prototype.cascadeEvents_=function(t,e){if(!(t in this.eventListeners_))return!1;var a={dygraph:this,cancelable:!1,defaultPrevented:!1,preventDefault:function(){if(!a.cancelable)throw\"Cannot call preventDefault on non-cancelable event.\";a.defaultPrevented=!0},propagationStopped:!1,stopPropagation:function(){a.propagationStopped=!0}};x.update(a,e);var i=this.eventListeners_[t];if(i)for(var n=i.length-1;n>=0;n--){var r=i[n][0],o=i[n][1];if(o.call(r,a),a.propagationStopped)break}return a.defaultPrevented},Q.prototype.getPluginInstance_=function(t){for(var e=0;e<this.plugins_.length;e++){var a=this.plugins_[e];if(a.plugin instanceof t)return a.plugin}return null},Q.prototype.isZoomed=function(t){var e=!!this.dateWindow_;if(\"x\"===t)return e;var a=this.axes_.map(function(t){return!!t.valueRange}).indexOf(!0)>=0;if(null===t||void 0===t)return e||a;if(\"y\"===t)return a;throw new Error(\"axis parameter is [\"+t+\"] must be null, 'x' or 'y'.\")},Q.prototype.toString=function(){var t=this.maindiv_;return\"[Dygraph \"+(t&&t.id?t.id:t)+\"]\"},Q.prototype.attr_=function(t,e){return e?this.attributes_.getForSeries(t,e):this.attributes_.get(t)},Q.prototype.getOption=function(t,e){return this.attr_(t,e)},Q.prototype.getNumericOption=function(t,e){return this.getOption(t,e)},Q.prototype.getStringOption=function(t,e){return this.getOption(t,e)},Q.prototype.getBooleanOption=function(t,e){return this.getOption(t,e)},Q.prototype.getFunctionOption=function(t,e){return this.getOption(t,e)},Q.prototype.getOptionForAxis=function(t,e){return this.attributes_.getForAxis(t,e)},Q.prototype.optionsViewForAxis_=function(t){var e=this;return function(a){var i=e.user_attrs_.axes;return i&&i[t]&&i[t].hasOwnProperty(a)?i[t][a]:(\"x\"!==t||\"logscale\"!==a)&&(void 0!==e.user_attrs_[a]?e.user_attrs_[a]:(i=e.attrs_.axes,i&&i[t]&&i[t].hasOwnProperty(a)?i[t][a]:\"y\"==t&&e.axes_[0].hasOwnProperty(a)?e.axes_[0][a]:\"y2\"==t&&e.axes_[1].hasOwnProperty(a)?e.axes_[1][a]:e.attr_(a)))}},Q.prototype.rollPeriod=function(){return this.rollPeriod_},Q.prototype.xAxisRange=function(){return this.dateWindow_?this.dateWindow_:this.xAxisExtremes()},Q.prototype.xAxisExtremes=function(){var t=this.getNumericOption(\"xRangePad\")/this.plotter_.area.w;if(0===this.numRows())return[0-t,1+t];var e=this.rawData_[0][0],a=this.rawData_[this.rawData_.length-1][0];if(t){var i=a-e;e-=i*t,a+=i*t}return[e,a]},Q.prototype.yAxisExtremes=function(){var t=this.gatherDatasets_(this.rolledSeries_,null),e=t.extremes,a=this.axes_;this.computeYAxisRanges_(e);var i=this.axes_;return this.axes_=a,i.map(function(t){return t.extremeRange})},Q.prototype.yAxisRange=function(t){if(void 0===t&&(t=0),t<0||t>=this.axes_.length)return null;var e=this.axes_[t];return[e.computedValueRange[0],e.computedValueRange[1]]},Q.prototype.yAxisRanges=function(){for(var t=[],e=0;e<this.axes_.length;e++)t.push(this.yAxisRange(e));return t},Q.prototype.toDomCoords=function(t,e,a){return[this.toDomXCoord(t),this.toDomYCoord(e,a)]},Q.prototype.toDomXCoord=function(t){if(null===t)return null;var e=this.plotter_.area,a=this.xAxisRange();return e.x+(t-a[0])/(a[1]-a[0])*e.w},Q.prototype.toDomYCoord=function(t,e){var a=this.toPercentYCoord(t,e);if(null===a)return null;var i=this.plotter_.area;return i.y+a*i.h},Q.prototype.toDataCoords=function(t,e,a){return[this.toDataXCoord(t),this.toDataYCoord(e,a)]},Q.prototype.toDataXCoord=function(t){if(null===t)return null;var e=this.plotter_.area,a=this.xAxisRange();if(this.attributes_.getForAxis(\"logscale\",\"x\")){var i=(t-e.x)/e.w;return x.logRangeFraction(a[0],a[1],i)}return a[0]+(t-e.x)/e.w*(a[1]-a[0])},Q.prototype.toDataYCoord=function(t,e){if(null===t)return null;var a=this.plotter_.area,i=this.yAxisRange(e);if(void 0===e&&(e=0),this.attributes_.getForAxis(\"logscale\",e)){var n=(t-a.y)/a.h;return x.logRangeFraction(i[1],i[0],n)}return i[0]+(a.y+a.h-t)/a.h*(i[1]-i[0])},Q.prototype.toPercentYCoord=function(t,e){if(null===t)return null;void 0===e&&(e=0);var a,i=this.yAxisRange(e);if(this.attributes_.getForAxis(\"logscale\",e)){var n=x.log10(i[0]),r=x.log10(i[1]);a=(r-x.log10(t))/(r-n)}else a=(i[1]-t)/(i[1]-i[0]);return a},Q.prototype.toPercentXCoord=function(t){if(null===t)return null;var e,a=this.xAxisRange();if(!0===this.attributes_.getForAxis(\"logscale\",\"x\")){var i=x.log10(a[0]),n=x.log10(a[1]);e=(x.log10(t)-i)/(n-i)}else e=(t-a[0])/(a[1]-a[0]);return e},Q.prototype.numColumns=function(){return this.rawData_?this.rawData_[0]?this.rawData_[0].length:this.attr_(\"labels\").length:0},Q.prototype.numRows=function(){return this.rawData_?this.rawData_.length:0},Q.prototype.getValue=function(t,e){return t<0||t>this.rawData_.length?null:e<0||e>this.rawData_[t].length?null:this.rawData_[t][e]},Q.prototype.createInterface_=function(){var t=this.maindiv_;this.graphDiv=document.createElement(\"div\"),this.graphDiv.style.textAlign=\"left\",this.graphDiv.style.position=\"relative\",t.appendChild(this.graphDiv),this.canvas_=x.createCanvas(),this.canvas_.style.position=\"absolute\",this.hidden_=this.createPlotKitCanvas_(this.canvas_),this.canvas_ctx_=x.getContext(this.canvas_),this.hidden_ctx_=x.getContext(this.hidden_),this.resizeElements_(),this.graphDiv.appendChild(this.hidden_),this.graphDiv.appendChild(this.canvas_),this.mouseEventElement_=this.createMouseEventElement_(),this.layout_=new h.default(this);var e=this;this.mouseMoveHandler_=function(t){e.mouseMove_(t)},this.mouseOutHandler_=function(t){var a=t.target||t.fromElement,i=t.relatedTarget||t.toElement;x.isNodeContainedBy(a,e.graphDiv)&&!x.isNodeContainedBy(i,e.graphDiv)&&e.mouseOut_(t)},this.addAndTrackEvent(window,\"mouseout\",this.mouseOutHandler_),this.addAndTrackEvent(this.mouseEventElement_,\"mousemove\",this.mouseMoveHandler_),this.resizeHandler_||(this.resizeHandler_=function(t){e.resize()},this.addAndTrackEvent(window,\"resize\",this.resizeHandler_))},Q.prototype.resizeElements_=function(){this.graphDiv.style.width=this.width_+\"px\",this.graphDiv.style.height=this.height_+\"px\";var t=this.getNumericOption(\"pixelRatio\"),e=t||x.getContextPixelRatio(this.canvas_ctx_);this.canvas_.width=this.width_*e,this.canvas_.height=this.height_*e,this.canvas_.style.width=this.width_+\"px\",this.canvas_.style.height=this.height_+\"px\",1!==e&&this.canvas_ctx_.scale(e,e);var a=t||x.getContextPixelRatio(this.hidden_ctx_);this.hidden_.width=this.width_*a,this.hidden_.height=this.height_*a,this.hidden_.style.width=this.width_+\"px\",this.hidden_.style.height=this.height_+\"px\",1!==a&&this.hidden_ctx_.scale(a,a)},Q.prototype.destroy=function(){this.canvas_ctx_.restore(),this.hidden_ctx_.restore();for(var t=this.plugins_.length-1;t>=0;t--){var e=this.plugins_.pop();e.plugin.destroy&&e.plugin.destroy()}this.removeTrackedEvents_(),x.removeEvent(window,\"mouseout\",this.mouseOutHandler_),x.removeEvent(this.mouseEventElement_,\"mousemove\",this.mouseMoveHandler_),x.removeEvent(window,\"resize\",this.resizeHandler_),this.resizeHandler_=null,function t(e){for(;e.hasChildNodes();)t(e.firstChild),e.removeChild(e.firstChild)}(this.maindiv_);var a=function(t){for(var e in t)\"object\"==typeof t[e]&&(t[e]=null)};a(this.layout_),a(this.plotter_),a(this)},Q.prototype.createPlotKitCanvas_=function(t){var e=x.createCanvas();return e.style.position=\"absolute\",e.style.top=t.style.top,e.style.left=t.style.left,\ne.width=this.width_,e.height=this.height_,e.style.width=this.width_+\"px\",e.style.height=this.height_+\"px\",e},Q.prototype.createMouseEventElement_=function(){return this.canvas_},Q.prototype.setColors_=function(){var t=this.getLabels(),e=t.length-1;this.colors_=[],this.colorsMap_={};for(var a=this.getNumericOption(\"colorSaturation\")||1,i=this.getNumericOption(\"colorValue\")||.5,n=Math.ceil(e/2),r=this.getOption(\"colors\"),o=this.visibility(),s=0;s<e;s++)if(o[s]){var l=t[s+1],h=this.attributes_.getForSeries(\"color\",l);if(!h)if(r)h=r[s%r.length];else{var u=s%2?n+(s+1)/2:Math.ceil((s+1)/2),d=1*u/(1+e);h=x.hsvToRGB(d,a,i)}this.colors_.push(h),this.colorsMap_[l]=h}},Q.prototype.getColors=function(){return this.colors_},Q.prototype.getPropertiesForSeries=function(t){for(var e=-1,a=this.getLabels(),i=1;i<a.length;i++)if(a[i]==t){e=i;break}return-1==e?null:{name:t,column:e,visible:this.visibility()[e-1],color:this.colorsMap_[t],axis:1+this.attributes_.axisForSeries(t)}},Q.prototype.createRollInterface_=function(){var t=this,e=this.roller_;e||(this.roller_=e=document.createElement(\"input\"),e.type=\"text\",e.style.display=\"none\",e.className=\"dygraph-roller\",this.graphDiv.appendChild(e));var a=this.getBooleanOption(\"showRoller\")?\"block\":\"none\",i=this.getArea(),n={top:i.y+i.h-25+\"px\",left:i.x+1+\"px\",display:a};e.size=\"2\",e.value=this.rollPeriod_,x.update(e.style,n),e.onchange=function(){return t.adjustRoll(e.value)}},Q.prototype.createDragInterface_=function(){var t={isZooming:!1,isPanning:!1,is2DPan:!1,dragStartX:null,dragStartY:null,dragEndX:null,dragEndY:null,dragDirection:null,prevEndX:null,prevEndY:null,prevDragDirection:null,cancelNextDblclick:!1,initialLeftmostDate:null,xUnitsPerPixel:null,dateRange:null,px:0,py:0,boundedDates:null,boundedValues:null,tarp:new O.default,initializeMouseDown:function(t,e,a){t.preventDefault?t.preventDefault():(t.returnValue=!1,t.cancelBubble=!0);var i=x.findPos(e.canvas_);a.px=i.x,a.py=i.y,a.dragStartX=x.dragGetX_(t,a),a.dragStartY=x.dragGetY_(t,a),a.cancelNextDblclick=!1,a.tarp.cover()},destroy:function(){var t=this;if((t.isZooming||t.isPanning)&&(t.isZooming=!1,t.dragStartX=null,t.dragStartY=null),t.isPanning){t.isPanning=!1,t.draggingDate=null,t.dateRange=null;for(var e=0;e<a.axes_.length;e++)delete a.axes_[e].draggingValue,delete a.axes_[e].dragValueRange}t.tarp.uncover()}},e=this.getOption(\"interactionModel\"),a=this;for(var i in e)e.hasOwnProperty(i)&&this.addAndTrackEvent(this.mouseEventElement_,i,function(e){return function(i){e(i,a,t)}}(e[i]));if(!e.willDestroyContextMyself){var n=function(e){t.destroy()};this.addAndTrackEvent(document,\"mouseup\",n)}},Q.prototype.drawZoomRect_=function(t,e,a,i,n,r,o,s){var l=this.canvas_ctx_;r==x.HORIZONTAL?l.clearRect(Math.min(e,o),this.layout_.getPlotArea().y,Math.abs(e-o),this.layout_.getPlotArea().h):r==x.VERTICAL&&l.clearRect(this.layout_.getPlotArea().x,Math.min(i,s),this.layout_.getPlotArea().w,Math.abs(i-s)),t==x.HORIZONTAL?a&&e&&(l.fillStyle=\"rgba(128,128,128,0.33)\",l.fillRect(Math.min(e,a),this.layout_.getPlotArea().y,Math.abs(a-e),this.layout_.getPlotArea().h)):t==x.VERTICAL&&n&&i&&(l.fillStyle=\"rgba(128,128,128,0.33)\",l.fillRect(this.layout_.getPlotArea().x,Math.min(i,n),this.layout_.getPlotArea().w,Math.abs(n-i)))},Q.prototype.clearZoomRect_=function(){this.currentZoomRectArgs_=null,this.canvas_ctx_.clearRect(0,0,this.width_,this.height_)},Q.prototype.doZoomX_=function(t,e){this.currentZoomRectArgs_=null;var a=this.toDataXCoord(t),i=this.toDataXCoord(e);this.doZoomXDates_(a,i)},Q.prototype.doZoomXDates_=function(t,e){var a=this,i=this.xAxisRange(),n=[t,e],r=this.getFunctionOption(\"zoomCallback\");this.doAnimatedZoom(i,n,null,null,function(){r&&r.call(a,t,e,a.yAxisRanges())})},Q.prototype.doZoomY_=function(t,e){var a=this;this.currentZoomRectArgs_=null;for(var i=this.yAxisRanges(),n=[],r=0;r<this.axes_.length;r++){var o=this.toDataYCoord(t,r),l=this.toDataYCoord(e,r);n.push([l,o])}var h=this.getFunctionOption(\"zoomCallback\");this.doAnimatedZoom(null,null,i,n,function(){if(h){var t=a.xAxisRange(),e=s(t,2),i=e[0],n=e[1];h.call(a,i,n,a.yAxisRanges())}})},Q.zoomAnimationFunction=function(t,e){return(1-Math.pow(1.5,-t))/(1-Math.pow(1.5,-e))},Q.prototype.resetZoom=function(){var t=this,e=this.isZoomed(\"x\"),a=this.isZoomed(\"y\"),i=e||a;if(this.clearSelection(),i){var n=this.xAxisExtremes(),r=s(n,2),o=r[0],l=r[1],h=this.getBooleanOption(\"animatedZooms\"),u=this.getFunctionOption(\"zoomCallback\");if(!h)return this.dateWindow_=null,this.axes_.forEach(function(t){t.valueRange&&delete t.valueRange}),this.drawGraph_(),void(u&&u.call(this,o,l,this.yAxisRanges()));var d=null,c=null,p=null,g=null;e&&(d=this.xAxisRange(),c=[o,l]),a&&(p=this.yAxisRanges(),g=this.yAxisExtremes()),this.doAnimatedZoom(d,c,p,g,function(){t.dateWindow_=null,t.axes_.forEach(function(t){t.valueRange&&delete t.valueRange}),u&&u.call(t,o,l,t.yAxisRanges())})}},Q.prototype.doAnimatedZoom=function(t,e,a,i,n){var r,o,s=this,l=this.getBooleanOption(\"animatedZooms\")?Q.ANIMATION_STEPS:1,h=[],u=[];if(null!==t&&null!==e)for(r=1;r<=l;r++)o=Q.zoomAnimationFunction(r,l),h[r-1]=[t[0]*(1-o)+o*e[0],t[1]*(1-o)+o*e[1]];if(null!==a&&null!==i)for(r=1;r<=l;r++){o=Q.zoomAnimationFunction(r,l);for(var d=[],c=0;c<this.axes_.length;c++)d.push([a[c][0]*(1-o)+o*i[c][0],a[c][1]*(1-o)+o*i[c][1]]);u[r-1]=d}x.repeatAndCleanup(function(t){if(u.length)for(var e=0;e<s.axes_.length;e++){var a=u[t][e];s.axes_[e].valueRange=[a[0],a[1]]}h.length&&(s.dateWindow_=h[t]),s.drawGraph_()},l,Q.ANIMATION_DURATION/l,n)},Q.prototype.getArea=function(){return this.plotter_.area},Q.prototype.eventToDomCoords=function(t){if(t.offsetX&&t.offsetY)return[t.offsetX,t.offsetY];var e=x.findPos(this.mouseEventElement_);return[x.pageX(t)-e.x,x.pageY(t)-e.y]},Q.prototype.findClosestRow=function(t){for(var e=1/0,a=-1,i=this.layout_.points,n=0;n<i.length;n++)for(var r=i[n],o=r.length,s=0;s<o;s++){var l=r[s];if(x.isValidPoint(l,!0)){var h=Math.abs(l.canvasx-t);h<e&&(e=h,a=l.idx)}}return a},Q.prototype.findClosestPoint=function(t,e){for(var a,i,n,r,o,s,l,h=1/0,u=this.layout_.points.length-1;u>=0;--u)for(var d=this.layout_.points[u],c=0;c<d.length;++c)r=d[c],x.isValidPoint(r)&&(i=r.canvasx-t,n=r.canvasy-e,(a=i*i+n*n)<h&&(h=a,o=r,s=u,l=r.idx));return{row:l,seriesName:this.layout_.setNames[s],point:o}},Q.prototype.findStackedPoint=function(t,e){for(var a,i,n=this.findClosestRow(t),r=0;r<this.layout_.points.length;++r){var o=this.getLeftBoundary_(r),s=n-o,l=this.layout_.points[r];if(!(s>=l.length)){var h=l[s];if(x.isValidPoint(h)){var u=h.canvasy;if(t>h.canvasx&&s+1<l.length){var d=l[s+1];if(x.isValidPoint(d)){var c=d.canvasx-h.canvasx;if(c>0){var p=(t-h.canvasx)/c;u+=p*(d.canvasy-h.canvasy)}}}else if(t<h.canvasx&&s>0){var g=l[s-1];if(x.isValidPoint(g)){var c=h.canvasx-g.canvasx;if(c>0){var p=(h.canvasx-t)/c;u+=p*(g.canvasy-h.canvasy)}}}(0===r||u<e)&&(a=h,i=r)}}}return{row:n,seriesName:this.layout_.setNames[i],point:a}},Q.prototype.mouseMove_=function(t){var e=this.layout_.points;if(void 0!==e&&null!==e){var a=this.eventToDomCoords(t),i=a[0],n=a[1],r=this.getOption(\"highlightSeriesOpts\"),o=!1;if(r&&!this.isSeriesLocked()){var s;s=this.getBooleanOption(\"stackedGraph\")?this.findStackedPoint(i,n):this.findClosestPoint(i,n),o=this.setSelection(s.row,s.seriesName)}else{var l=this.findClosestRow(i);o=this.setSelection(l)}var h=this.getFunctionOption(\"highlightCallback\");h&&o&&h.call(this,t,this.lastx_,this.selPoints_,this.lastRow_,this.highlightSet_)}},Q.prototype.getLeftBoundary_=function(t){if(this.boundaryIds_[t])return this.boundaryIds_[t][0];for(var e=0;e<this.boundaryIds_.length;e++)if(void 0!==this.boundaryIds_[e])return this.boundaryIds_[e][0];return 0},Q.prototype.animateSelection_=function(t){void 0===this.fadeLevel&&(this.fadeLevel=0),void 0===this.animateId&&(this.animateId=0);var e=this.fadeLevel,a=t<0?e:10-e;if(a<=0)return void(this.fadeLevel&&this.updateSelection_(1));var i=++this.animateId,n=this,r=function(){0!==n.fadeLevel&&t<0&&(n.fadeLevel=0,n.clearSelection())};x.repeatAndCleanup(function(e){n.animateId==i&&(n.fadeLevel+=t,0===n.fadeLevel?n.clearSelection():n.updateSelection_(n.fadeLevel/10))},a,30,r)},Q.prototype.updateSelection_=function(t){this.cascadeEvents_(\"select\",{selectedRow:-1===this.lastRow_?void 0:this.lastRow_,selectedX:-1===this.lastx_?void 0:this.lastx_,selectedPoints:this.selPoints_});var e,a=this.canvas_ctx_;if(this.getOption(\"highlightSeriesOpts\")){a.clearRect(0,0,this.width_,this.height_);var i=1-this.getNumericOption(\"highlightSeriesBackgroundAlpha\"),n=x.toRGB_(this.getOption(\"highlightSeriesBackgroundColor\"));if(i){if(void 0===t)return void this.animateSelection_(1);i*=t,a.fillStyle=\"rgba(\"+n.r+\",\"+n.g+\",\"+n.b+\",\"+i+\")\",a.fillRect(0,0,this.width_,this.height_)}this.plotter_._renderLineChart(this.highlightSet_,a)}else if(this.previousVerticalX_>=0){var r=0,o=this.attr_(\"labels\");for(e=1;e<o.length;e++){var s=this.getNumericOption(\"highlightCircleSize\",o[e]);s>r&&(r=s)}var l=this.previousVerticalX_;a.clearRect(l-r-1,0,2*r+2,this.height_)}if(this.selPoints_.length>0){var h=this.selPoints_[0].canvasx;for(a.save(),e=0;e<this.selPoints_.length;e++){var u=this.selPoints_[e];if(!isNaN(u.canvasy)){var d=this.getNumericOption(\"highlightCircleSize\",u.name),c=this.getFunctionOption(\"drawHighlightPointCallback\",u.name),p=this.plotter_.colors[u.name];c||(c=x.Circles.DEFAULT),a.lineWidth=this.getNumericOption(\"strokeWidth\",u.name),a.strokeStyle=p,a.fillStyle=p,c.call(this,this,u.name,a,h,u.canvasy,p,d,u.idx)}}a.restore(),this.previousVerticalX_=h}},Q.prototype.setSelection=function(t,e,a){this.selPoints_=[];var i=!1;if(!1!==t&&t>=0){t!=this.lastRow_&&(i=!0),this.lastRow_=t;for(var n=0;n<this.layout_.points.length;++n){var r=this.layout_.points[n],o=t-this.getLeftBoundary_(n);if(o>=0&&o<r.length&&r[o].idx==t){var s=r[o];null!==s.yval&&this.selPoints_.push(s)}else for(var l=0;l<r.length;++l){var s=r[l];if(s.idx==t){null!==s.yval&&this.selPoints_.push(s);break}}}}else this.lastRow_>=0&&(i=!0),this.lastRow_=-1;return this.selPoints_.length?this.lastx_=this.selPoints_[0].xval:this.lastx_=-1,void 0!==e&&(this.highlightSet_!==e&&(i=!0),this.highlightSet_=e),void 0!==a&&(this.lockedSet_=a),i&&this.updateSelection_(void 0),i},Q.prototype.mouseOut_=function(t){this.getFunctionOption(\"unhighlightCallback\")&&this.getFunctionOption(\"unhighlightCallback\").call(this,t),this.getBooleanOption(\"hideOverlayOnMouseOut\")&&!this.lockedSet_&&this.clearSelection()},Q.prototype.clearSelection=function(){if(this.cascadeEvents_(\"deselect\",{}),this.lockedSet_=!1,this.fadeLevel)return void this.animateSelection_(-1);this.canvas_ctx_.clearRect(0,0,this.width_,this.height_),this.fadeLevel=0,this.selPoints_=[],this.lastx_=-1,this.lastRow_=-1,this.highlightSet_=null},Q.prototype.getSelection=function(){if(!this.selPoints_||this.selPoints_.length<1)return-1;for(var t=0;t<this.layout_.points.length;t++)for(var e=this.layout_.points[t],a=0;a<e.length;a++)if(e[a].x==this.selPoints_[0].x)return e[a].idx;return-1},Q.prototype.getHighlightSeries=function(){return this.highlightSet_},Q.prototype.isSeriesLocked=function(){return this.lockedSet_},Q.prototype.loadedEvent_=function(t){this.rawData_=this.parseCSV_(t),this.cascadeDataDidUpdateEvent_(),this.predraw_()},Q.prototype.addXTicks_=function(){var t;t=this.dateWindow_?[this.dateWindow_[0],this.dateWindow_[1]]:this.xAxisExtremes();var e=this.optionsViewForAxis_(\"x\"),a=e(\"ticker\")(t[0],t[1],this.plotter_.area.w,e,this);this.layout_.setXTicks(a)},Q.prototype.getHandlerClass_=function(){return this.attr_(\"dataHandler\")?this.attr_(\"dataHandler\"):this.fractions_?this.getBooleanOption(\"errorBars\")?F.default:M.default:this.getBooleanOption(\"customBars\")?P.default:this.getBooleanOption(\"errorBars\")?T.default:E.default},Q.prototype.predraw_=function(){var t=new Date;this.dataHandler_=new(this.getHandlerClass_()),this.layout_.computePlotArea(),this.computeYAxes_(),this.is_initial_draw_||(this.canvas_ctx_.restore(),this.hidden_ctx_.restore()),this.canvas_ctx_.save(),this.hidden_ctx_.save(),this.plotter_=new d.default(this,this.hidden_,this.hidden_ctx_,this.layout_),this.createRollInterface_(),this.cascadeEvents_(\"predraw\"),this.rolledSeries_=[null];for(var e=1;e<this.numColumns();e++){var a=this.dataHandler_.extractSeries(this.rawData_,e,this.attributes_);this.rollPeriod_>1&&(a=this.dataHandler_.rollingAverage(a,this.rollPeriod_,this.attributes_)),this.rolledSeries_.push(a)}this.drawGraph_();var i=new Date;this.drawingTimeMs_=i-t},Q.PointType=void 0,Q.stackPoints_=function(t,e,a,i){for(var n=null,r=null,o=null,s=-1,l=0;l<t.length;++l){var h=t[l],u=h.xval;void 0===e[u]&&(e[u]=0);var d=h.yval;isNaN(d)||null===d?\"none\"==i?d=0:(!function(e){if(!(s>=e))for(var a=e;a<t.length;++a)if(o=null,!isNaN(t[a].yval)&&null!==t[a].yval){s=a,o=t[a];break}}(l),d=r&&o&&\"none\"!=i?r.yval+(o.yval-r.yval)*((u-r.xval)/(o.xval-r.xval)):r&&\"all\"==i?r.yval:o&&\"all\"==i?o.yval:0):r=h;var c=e[u];n!=u&&(c+=d,e[u]=c),n=u,h.yval_stacked=c,c>a[1]&&(a[1]=c),c<a[0]&&(a[0]=c)}},Q.prototype.gatherDatasets_=function(t,e){var a,i,n,r,o,s,l=[],h=[],u=[],d={},c=t.length-1;for(a=c;a>=1;a--)if(this.visibility()[a-1]){if(e){s=t[a];var p=e[0],g=e[1];for(n=null,r=null,i=0;i<s.length;i++)s[i][0]>=p&&null===n&&(n=i),s[i][0]<=g&&(r=i);null===n&&(n=0);for(var f=n,v=!0;v&&f>0;)f--,v=null===s[f][1];null===r&&(r=s.length-1);var _=r;for(v=!0;v&&_<s.length-1;)_++,v=null===s[_][1];f!==n&&(n=f),_!==r&&(r=_),l[a-1]=[n,r],s=s.slice(n,r+1)}else s=t[a],l[a-1]=[0,s.length-1];var y=this.attr_(\"labels\")[a],x=this.dataHandler_.getExtremeYValues(s,e,this.getBooleanOption(\"stepPlot\",y)),m=this.dataHandler_.seriesToPoints(s,y,l[a-1][0]);this.getBooleanOption(\"stackedGraph\")&&(o=this.attributes_.axisForSeries(y),void 0===u[o]&&(u[o]=[]),Q.stackPoints_(m,u[o],x,this.getBooleanOption(\"stackedGraphNaNFill\"))),d[y]=x,h[a]=m}return{points:h,extremes:d,boundaryIds:l}},Q.prototype.drawGraph_=function(){var t=new Date,e=this.is_initial_draw_;this.is_initial_draw_=!1,this.layout_.removeAllDatasets(),this.setColors_(),this.attrs_.pointSize=.5*this.getNumericOption(\"highlightCircleSize\");var a=this.gatherDatasets_(this.rolledSeries_,this.dateWindow_),i=a.points,n=a.extremes;this.boundaryIds_=a.boundaryIds,this.setIndexByName_={};for(var r=this.attr_(\"labels\"),o=0,s=1;s<i.length;s++)this.visibility()[s-1]&&(this.layout_.addDataset(r[s],i[s]),this.datasetIndex_[s]=o++);for(var s=0;s<r.length;s++)this.setIndexByName_[r[s]]=s;if(this.computeYAxisRanges_(n),this.layout_.setYAxes(this.axes_),this.addXTicks_(),this.layout_.evaluate(),this.renderGraph_(e),this.getStringOption(\"timingName\")){var l=new Date;console.log(this.getStringOption(\"timingName\")+\" - drawGraph: \"+(l-t)+\"ms\")}},Q.prototype.renderGraph_=function(t){this.cascadeEvents_(\"clearChart\"),this.plotter_.clear();var e=this.getFunctionOption(\"underlayCallback\");e&&e.call(this,this.hidden_ctx_,this.layout_.getPlotArea(),this,this);var a={canvas:this.hidden_,drawingContext:this.hidden_ctx_};this.cascadeEvents_(\"willDrawChart\",a),this.plotter_.render(),this.cascadeEvents_(\"didDrawChart\",a),this.lastRow_=-1,this.canvas_.getContext(\"2d\").clearRect(0,0,this.width_,this.height_);var i=this.getFunctionOption(\"drawCallback\");if(null!==i&&i.call(this,this,t),t)for(this.readyFired_=!0;this.readyFns_.length>0;){var n=this.readyFns_.pop();n(this)}},Q.prototype.computeYAxes_=function(){var t,e,a;for(this.axes_=[],t=0;t<this.attributes_.numAxes();t++)e={g:this},x.update(e,this.attributes_.axisOptions(t)),this.axes_[t]=e;for(t=0;t<this.axes_.length;t++)if(0===t)e=this.optionsViewForAxis_(\"y\"+(t?\"2\":\"\")),(a=e(\"valueRange\"))&&(this.axes_[t].valueRange=a);else{var i=this.user_attrs_.axes;i&&i.y2&&(a=i.y2.valueRange)&&(this.axes_[t].valueRange=a)}},Q.prototype.numAxes=function(){return this.attributes_.numAxes()},Q.prototype.axisPropertiesForSeries=function(t){return this.axes_[this.attributes_.axisForSeries(t)]},Q.prototype.computeYAxisRanges_=function(t){for(var e,a,i,n,r,o=function(t){return isNaN(parseFloat(t))},s=this.attributes_.numAxes(),l=0;l<s;l++){var h=this.axes_[l],u=this.attributes_.getForAxis(\"logscale\",l),d=this.attributes_.getForAxis(\"includeZero\",l),c=this.attributes_.getForAxis(\"independentTicks\",l);i=this.attributes_.seriesForAxis(l),e=!0,n=.1;var p=this.getNumericOption(\"yRangePad\");if(null!==p&&(e=!1,n=p/this.plotter_.area.h),0===i.length)h.extremeRange=[0,1];else{for(var g,f,v=1/0,_=-1/0,y=0;y<i.length;y++)t.hasOwnProperty(i[y])&&(g=t[i[y]][0],null!==g&&(v=Math.min(g,v)),null!==(f=t[i[y]][1])&&(_=Math.max(f,_)));d&&!u&&(v>0&&(v=0),_<0&&(_=0)),v==1/0&&(v=0),_==-1/0&&(_=1),a=_-v,0===a&&(0!==_?a=Math.abs(_):(_=1,a=1));var m=_,b=v;e&&(u?(m=_+n*a,b=v):(m=_+n*a,b=v-n*a,b<0&&v>=0&&(b=0),m>0&&_<=0&&(m=0))),h.extremeRange=[b,m]}if(h.valueRange){var w=o(h.valueRange[0])?h.extremeRange[0]:h.valueRange[0],A=o(h.valueRange[1])?h.extremeRange[1]:h.valueRange[1];h.computedValueRange=[w,A]}else h.computedValueRange=h.extremeRange;if(!e)if(w=h.computedValueRange[0],A=h.computedValueRange[1],w===A&&(w-=.5,A+=.5),u){var O=n/(2*n-1),D=(n-1)/(2*n-1);h.computedValueRange[0]=x.logRangeFraction(w,A,O),h.computedValueRange[1]=x.logRangeFraction(w,A,D)}else a=A-w,h.computedValueRange[0]=w-a*n,h.computedValueRange[1]=A+a*n;if(c){h.independentTicks=c;var E=this.optionsViewForAxis_(\"y\"+(l?\"2\":\"\")),L=E(\"ticker\");h.ticks=L(h.computedValueRange[0],h.computedValueRange[1],this.plotter_.area.h,E,this),r||(r=h)}}if(void 0===r)throw'Configuration Error: At least one axis has to have the \"independentTicks\" option activated.';for(var l=0;l<s;l++){var h=this.axes_[l];if(!h.independentTicks){for(var E=this.optionsViewForAxis_(\"y\"+(l?\"2\":\"\")),L=E(\"ticker\"),T=r.ticks,S=r.computedValueRange[1]-r.computedValueRange[0],P=h.computedValueRange[1]-h.computedValueRange[0],C=[],M=0;M<T.length;M++){var N=(T[M].v-r.computedValueRange[0])/S,F=h.computedValueRange[0]+N*P;C.push(F)}h.ticks=L(h.computedValueRange[0],h.computedValueRange[1],this.plotter_.area.h,E,this,C)}}},Q.prototype.detectTypeFromString_=function(t){var e=!1,a=t.indexOf(\"-\");a>0&&\"e\"!=t[a-1]&&\"E\"!=t[a-1]||t.indexOf(\"/\")>=0||isNaN(parseFloat(t))?e=!0:8==t.length&&t>\"19700101\"&&t<\"20371231\"&&(e=!0),this.setXAxisOptions_(e)},Q.prototype.setXAxisOptions_=function(t){t?(this.attrs_.xValueParser=x.dateParser,this.attrs_.axes.x.valueFormatter=x.dateValueFormatter,this.attrs_.axes.x.ticker=_.dateTicker,this.attrs_.axes.x.axisLabelFormatter=x.dateAxisLabelFormatter):(this.attrs_.xValueParser=function(t){return parseFloat(t)},this.attrs_.axes.x.valueFormatter=function(t){return t},this.attrs_.axes.x.ticker=_.numericTicks,this.attrs_.axes.x.axisLabelFormatter=this.attrs_.axes.x.valueFormatter)},Q.prototype.parseCSV_=function(t){var e,a,i=[],n=x.detectLineDelimiter(t),r=t.split(n||\"\\n\"),o=this.getStringOption(\"delimiter\");-1==r[0].indexOf(o)&&r[0].indexOf(\"\\t\")>=0&&(o=\"\\t\");var s=0;\"labels\"in this.user_attrs_||(s=1,this.attrs_.labels=r[0].split(o),this.attributes_.reparseSeries());for(var l,h=!1,u=this.attr_(\"labels\").length,d=!1,c=s;c<r.length;c++){var p=r[c];if(c,0!==p.length&&\"#\"!=p[0]){var g=p.split(o);if(!(g.length<2)){var f=[];if(h||(this.detectTypeFromString_(g[0]),l=this.getFunctionOption(\"xValueParser\"),h=!0),f[0]=l(g[0],this),this.fractions_)for(a=1;a<g.length;a++)e=g[a].split(\"/\"),2!=e.length?(console.error('Expected fractional \"num/den\" values in CSV data but found a value \\''+g[a]+\"' on line \"+(1+c)+\" ('\"+p+\"') which is not of this form.\"),f[a]=[0,0]):f[a]=[x.parseFloat_(e[0],c,p),x.parseFloat_(e[1],c,p)];else if(this.getBooleanOption(\"errorBars\"))for(g.length%2!=1&&console.error(\"Expected alternating (value, stdev.) pairs in CSV data but line \"+(1+c)+\" has an odd number of values (\"+(g.length-1)+\"): '\"+p+\"'\"),a=1;a<g.length;a+=2)f[(a+1)/2]=[x.parseFloat_(g[a],c,p),x.parseFloat_(g[a+1],c,p)];else if(this.getBooleanOption(\"customBars\"))for(a=1;a<g.length;a++){var v=g[a];/^ *$/.test(v)?f[a]=[null,null,null]:(e=v.split(\";\"),3==e.length?f[a]=[x.parseFloat_(e[0],c,p),x.parseFloat_(e[1],c,p),x.parseFloat_(e[2],c,p)]:console.warn('When using customBars, values must be either blank or \"low;center;high\" tuples (got \"'+v+'\" on line '+(1+c)))}else for(a=1;a<g.length;a++)f[a]=x.parseFloat_(g[a],c,p);if(i.length>0&&f[0]<i[i.length-1][0]&&(d=!0),f.length!=u&&console.error(\"Number of columns in line \"+c+\" (\"+f.length+\") does not agree with number of labels (\"+u+\") \"+p),0===c&&this.attr_(\"labels\")){var _=!0;for(a=0;_&&a<f.length;a++)f[a]&&(_=!1);if(_){console.warn(\"The dygraphs 'labels' option is set, but the first row of CSV data ('\"+p+\"') appears to also contain labels. Will drop the CSV labels and use the option labels.\");continue}}i.push(f)}}}return d&&(console.warn(\"CSV is out of order; order it correctly to speed loading.\"),i.sort(function(t,e){return t[0]-e[0]})),i},Q.prototype.parseArray_=function(t){if(0===t.length)return console.error(\"Can't plot empty data set\"),null;if(0===t[0].length)return console.error(\"Data set cannot contain an empty row\"),null;o(t);var e;if(null===this.attr_(\"labels\")){for(console.warn(\"Using default labels. Set labels explicitly via 'labels' in the options parameter\"),this.attrs_.labels=[\"X\"],e=1;e<t[0].length;e++)this.attrs_.labels.push(\"Y\"+e);this.attributes_.reparseSeries()}else{var a=this.attr_(\"labels\");if(a.length!=t[0].length)return console.error(\"Mismatch between number of labels (\"+a+\") and number of columns in array (\"+t[0].length+\")\"),null}if(x.isDateLike(t[0][0])){this.attrs_.axes.x.valueFormatter=x.dateValueFormatter,this.attrs_.axes.x.ticker=_.dateTicker,this.attrs_.axes.x.axisLabelFormatter=x.dateAxisLabelFormatter;var i=x.clone(t);for(e=0;e<t.length;e++){if(0===i[e].length)return console.error(\"Row \"+(1+e)+\" of data is empty\"),null;if(null===i[e][0]||\"function\"!=typeof i[e][0].getTime||isNaN(i[e][0].getTime()))return console.error(\"x value in row \"+(1+e)+\" is not a Date\"),null;i[e][0]=i[e][0].getTime()}return i}return this.attrs_.axes.x.valueFormatter=function(t){return t},this.attrs_.axes.x.ticker=_.numericTicks,this.attrs_.axes.x.axisLabelFormatter=x.numberAxisLabelFormatter,t},Q.prototype.parseDataTable_=function(t){var e=t.getNumberOfColumns(),a=t.getNumberOfRows(),i=t.getColumnType(0);if(\"date\"==i||\"datetime\"==i)this.attrs_.xValueParser=x.dateParser,this.attrs_.axes.x.valueFormatter=x.dateValueFormatter,this.attrs_.axes.x.ticker=_.dateTicker,this.attrs_.axes.x.axisLabelFormatter=x.dateAxisLabelFormatter;else{if(\"number\"!=i)throw new Error(\"only 'date', 'datetime' and 'number' types are supported for column 1 of DataTable input (Got '\"+i+\"')\");this.attrs_.xValueParser=function(t){return parseFloat(t)},this.attrs_.axes.x.valueFormatter=function(t){return t},this.attrs_.axes.x.ticker=_.numericTicks,this.attrs_.axes.x.axisLabelFormatter=this.attrs_.axes.x.valueFormatter}var n,r,o=[],s={},l=!1;for(n=1;n<e;n++){var h=t.getColumnType(n);if(\"number\"==h)o.push(n);else{if(\"string\"!=h||!this.getBooleanOption(\"displayAnnotations\"))throw new Error(\"Only 'number' is supported as a dependent type with Gviz. 'string' is only supported if displayAnnotations is true\");var u=o[o.length-1];s.hasOwnProperty(u)?s[u].push(n):s[u]=[n],l=!0}}var d=[t.getColumnLabel(0)];for(n=0;n<o.length;n++)d.push(t.getColumnLabel(o[n])),this.getBooleanOption(\"errorBars\")&&(n+=1);this.attrs_.labels=d,e=d.length;var c=[],p=!1,g=[];for(n=0;n<a;n++){var f=[];if(void 0!==t.getValue(n,0)&&null!==t.getValue(n,0)){if(\"date\"==i||\"datetime\"==i?f.push(t.getValue(n,0).getTime()):f.push(t.getValue(n,0)),this.getBooleanOption(\"errorBars\"))for(r=0;r<e-1;r++)f.push([t.getValue(n,1+2*r),t.getValue(n,2+2*r)]);else{for(r=0;r<o.length;r++){var v=o[r];if(f.push(t.getValue(n,v)),l&&s.hasOwnProperty(v)&&null!==t.getValue(n,s[v][0])){var y={};y.series=t.getColumnLabel(v),y.xval=f[0],y.shortText=function(t){var e=String.fromCharCode(65+t%26);for(t=Math.floor(t/26);t>0;)e=String.fromCharCode(65+(t-1)%26)+e.toLowerCase(),t=Math.floor((t-1)/26);return e}(g.length),y.text=\"\";for(var m=0;m<s[v].length;m++)m&&(y.text+=\"\\n\"),y.text+=t.getValue(n,s[v][m]);g.push(y)}}for(r=0;r<f.length;r++)isFinite(f[r])||(f[r]=null)}c.length>0&&f[0]<c[c.length-1][0]&&(p=!0),c.push(f)}else console.warn(\"Ignoring row \"+n+\" of DataTable because of undefined or null first column.\")}p&&(console.warn(\"DataTable is out of order; order it correctly to speed loading.\"),c.sort(function(t,e){return t[0]-e[0]})),this.rawData_=c,g.length>0&&this.setAnnotations(g,!0),this.attributes_.reparseSeries()},Q.prototype.cascadeDataDidUpdateEvent_=function(){this.cascadeEvents_(\"dataDidUpdate\",{})},Q.prototype.start_=function(){var t=this.file_;if(\"function\"==typeof t&&(t=t()),x.isArrayLike(t))this.rawData_=this.parseArray_(t),this.cascadeDataDidUpdateEvent_(),this.predraw_();else if(\"object\"==typeof t&&\"function\"==typeof t.getColumnRange)this.parseDataTable_(t),this.cascadeDataDidUpdateEvent_(),this.predraw_();else if(\"string\"==typeof t){var e=x.detectLineDelimiter(t);if(e)this.loadedEvent_(t);else{var a;a=window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject(\"Microsoft.XMLHTTP\");var i=this;a.onreadystatechange=function(){4==a.readyState&&(200!==a.status&&0!==a.status||i.loadedEvent_(a.responseText))},a.open(\"GET\",t,!0),a.send(null)}}else console.error(\"Unknown data format: \"+typeof t)},Q.prototype.updateOptions=function(t,e){void 0===e&&(e=!1);var a=t.file,i=Q.copyUserAttrs_(t);\"rollPeriod\"in i&&(this.rollPeriod_=i.rollPeriod),\"dateWindow\"in i&&(this.dateWindow_=i.dateWindow);var n=x.isPixelChangingOptionList(this.attr_(\"labels\"),i);x.updateDeep(this.user_attrs_,i),this.attributes_.reparseSeries(),a?(this.cascadeEvents_(\"dataWillUpdate\",{}),this.file_=a,e||this.start_()):e||(n?this.predraw_():this.renderGraph_(!1))},Q.copyUserAttrs_=function(t){var e={};for(var a in t)t.hasOwnProperty(a)&&\"file\"!=a&&t.hasOwnProperty(a)&&(e[a]=t[a]);return e},Q.prototype.resize=function(t,e){if(!this.resize_lock){this.resize_lock=!0,null===t!=(null===e)&&(console.warn(\"Dygraph.resize() should be called with zero parameters or two non-NULL parameters. Pretending it was zero.\"),t=e=null);var a=this.width_,i=this.height_;t?(this.maindiv_.style.width=t+\"px\",this.maindiv_.style.height=e+\"px\",this.width_=t,this.height_=e):(this.width_=this.maindiv_.clientWidth,this.height_=this.maindiv_.clientHeight),a==this.width_&&i==this.height_||(this.resizeElements_(),this.predraw_()),this.resize_lock=!1}},Q.prototype.adjustRoll=function(t){this.rollPeriod_=t,this.predraw_()},Q.prototype.visibility=function(){for(this.getOption(\"visibility\")||(this.attrs_.visibility=[]);this.getOption(\"visibility\").length<this.numColumns()-1;)this.attrs_.visibility.push(!0);return this.getOption(\"visibility\")},Q.prototype.setVisibility=function(t,e){var a=this.visibility(),i=!1;if(Array.isArray(t)||(null!==t&&\"object\"==typeof t?i=!0:t=[t]),i)for(var n in t)t.hasOwnProperty(n)&&(n<0||n>=a.length?console.warn(\"Invalid series number in setVisibility: \"+n):a[n]=t[n]);else for(var n=0;n<t.length;n++)\"boolean\"==typeof t[n]?n>=a.length?console.warn(\"Invalid series number in setVisibility: \"+n):a[n]=t[n]:t[n]<0||t[n]>=a.length?console.warn(\"Invalid series number in setVisibility: \"+t[n]):a[t[n]]=e;this.predraw_()},Q.prototype.size=function(){return{width:this.width_,height:this.height_}},Q.prototype.setAnnotations=function(t,e){if(this.annotations_=t,!this.layout_)return void console.warn(\"Tried to setAnnotations before dygraph was ready. Try setting them in a ready() block. See dygraphs.com/tests/annotation.html\");this.layout_.setAnnotations(this.annotations_),e||this.predraw_()},Q.prototype.annotations=function(){return this.annotations_},Q.prototype.getLabels=function(){var t=this.attr_(\"labels\");return t?t.slice():null},Q.prototype.indexFromSetName=function(t){return this.setIndexByName_[t]},Q.prototype.getRowForX=function(t){for(var e=0,a=this.numRows()-1;e<=a;){var i=a+e>>1,n=this.getValue(i,0);if(n<t)e=i+1;else if(n>t)a=i-1;else{if(e==i)return i;a=i}}return null},Q.prototype.ready=function(t){this.is_initial_draw_?this.readyFns_.push(t):t.call(this,this)},Q.prototype.addAndTrackEvent=function(t,e,a){x.addEvent(t,e,a),this.registeredEvents_.push({elem:t,type:e,fn:a})},Q.prototype.removeTrackedEvents_=function(){if(this.registeredEvents_)for(var t=0;t<this.registeredEvents_.length;t++){var e=this.registeredEvents_[t];x.removeEvent(e.elem,e.type,e.fn)}this.registeredEvents_=[]},Q.PLUGINS=[U.default,X.default,j.default,Z.default,H.default,G.default],Q.GVizChart=q.default,Q.DASHED_LINE=x.DASHED_LINE,Q.DOT_DASH_LINE=x.DOT_DASH_LINE,Q.dateAxisLabelFormatter=x.dateAxisLabelFormatter,Q.toRGB_=x.toRGB_,Q.findPos=x.findPos,Q.pageX=x.pageX,Q.pageY=x.pageY,Q.dateString_=x.dateString_,Q.defaultInteractionModel=f.default.defaultModel,Q.nonInteractiveModel=Q.nonInteractiveModel_=f.default.nonInteractiveModel_,Q.Circles=x.Circles,Q.Plugins={Legend:U.default,Axes:X.default,Annotations:H.default,ChartLabels:Z.default,Grid:G.default,RangeSelector:j.default},Q.DataHandlers={DefaultHandler:E.default,BarsHandler:R.default,CustomBarsHandler:P.default,DefaultFractionHandler:M.default,ErrorBarsHandler:T.default,FractionsBarsHandler:F.default},Q.startPan=f.default.startPan,Q.startZoom=f.default.startZoom,Q.movePan=f.default.movePan,Q.moveZoom=f.default.moveZoom,Q.endPan=f.default.endPan,Q.endZoom=f.default.endZoom,Q.numericLinearTicks=_.numericLinearTicks,Q.numericTicks=_.numericTicks,Q.dateTicker=_.dateTicker,Q.Granularity=_.Granularity,Q.getDateAxis=_.getDateAxis,Q.floatFormat=x.floatFormat,a.default=Q,e.exports=a.default}).call(this,t(\"_process\"))},{\"./datahandler/bars\":5,\"./datahandler/bars-custom\":2,\"./datahandler/bars-error\":3,\"./datahandler/bars-fractions\":4,\"./datahandler/default\":8,\"./datahandler/default-fractions\":7,\"./dygraph-canvas\":9,\"./dygraph-default-attrs\":10,\"./dygraph-gviz\":11,\"./dygraph-interaction-model\":12,\"./dygraph-layout\":13,\"./dygraph-options\":15,\"./dygraph-options-reference\":14,\"./dygraph-tickers\":16,\"./dygraph-utils\":17,\"./iframe-tarp\":19,\"./plugins/annotations\":20,\"./plugins/axes\":21,\"./plugins/chart-labels\":22,\"./plugins/grid\":23,\"./plugins/legend\":24,\"./plugins/range-selector\":25,_process:1}],19:[function(t,e,a){\"use strict\";function i(){this.tarps=[]}Object.defineProperty(a,\"__esModule\",{value:!0});var n=t(\"./dygraph-utils\"),r=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(n);i.prototype.cover=function(){for(var t=document.getElementsByTagName(\"iframe\"),e=0;e<t.length;e++){var a=t[e],i=r.findPos(a),n=i.x,o=i.y,s=a.offsetWidth,l=a.offsetHeight,h=document.createElement(\"div\");h.style.position=\"absolute\",h.style.left=n+\"px\",h.style.top=o+\"px\",h.style.width=s+\"px\",h.style.height=l+\"px\",h.style.zIndex=999,document.body.appendChild(h),this.tarps.push(h)}},i.prototype.uncover=function(){for(var t=0;t<this.tarps.length;t++)this.tarps[t].parentNode.removeChild(this.tarps[t]);this.tarps=[]},a.default=i,e.exports=a.default},{\"./dygraph-utils\":17}],20:[function(t,e,a){\"use strict\";Object.defineProperty(a,\"__esModule\",{value:!0});var i=function(){this.annotations_=[]};i.prototype.toString=function(){return\"Annotations Plugin\"},i.prototype.activate=function(t){return{clearChart:this.clearChart,didDrawChart:this.didDrawChart}},i.prototype.detachLabels=function(){for(var t=0;t<this.annotations_.length;t++){var e=this.annotations_[t];e.parentNode&&e.parentNode.removeChild(e),this.annotations_[t]=null}this.annotations_=[]},i.prototype.clearChart=function(t){this.detachLabels()},i.prototype.didDrawChart=function(t){var e=t.dygraph,a=e.layout_.annotated_points;if(a&&0!==a.length)for(var i=t.canvas.parentNode,n=function(t,a,i){return function(n){var r=i.annotation;r.hasOwnProperty(t)?r[t](r,i,e,n):e.getOption(a)&&e.getOption(a)(r,i,e,n)}},r=t.dygraph.getArea(),o={},s=0;s<a.length;s++){var l=a[s];if(!(l.canvasx<r.x||l.canvasx>r.x+r.w||l.canvasy<r.y||l.canvasy>r.y+r.h)){var h=l.annotation,u=6;h.hasOwnProperty(\"tickHeight\")&&(u=h.tickHeight);var d=document.createElement(\"div\");d.style.fontSize=e.getOption(\"axisLabelFontSize\")+\"px\"\n;var c=\"dygraph-annotation\";h.hasOwnProperty(\"icon\")||(c+=\" dygraphDefaultAnnotation dygraph-default-annotation\"),h.hasOwnProperty(\"cssClass\")&&(c+=\" \"+h.cssClass),d.className=c;var p=h.hasOwnProperty(\"width\")?h.width:16,g=h.hasOwnProperty(\"height\")?h.height:16;if(h.hasOwnProperty(\"icon\")){var f=document.createElement(\"img\");f.src=h.icon,f.width=p,f.height=g,d.appendChild(f)}else l.annotation.hasOwnProperty(\"shortText\")&&d.appendChild(document.createTextNode(l.annotation.shortText));var v=l.canvasx-p/2;d.style.left=v+\"px\";var _=0;if(h.attachAtBottom){var y=r.y+r.h-g-u;o[v]?y-=o[v]:o[v]=0,o[v]+=u+g,_=y}else _=l.canvasy-g-u;d.style.top=_+\"px\",d.style.width=p+\"px\",d.style.height=g+\"px\",d.title=l.annotation.text,d.style.color=e.colorsMap_[l.name],d.style.borderColor=e.colorsMap_[l.name],h.div=d,e.addAndTrackEvent(d,\"click\",n(\"clickHandler\",\"annotationClickHandler\",l)),e.addAndTrackEvent(d,\"mouseover\",n(\"mouseOverHandler\",\"annotationMouseOverHandler\",l)),e.addAndTrackEvent(d,\"mouseout\",n(\"mouseOutHandler\",\"annotationMouseOutHandler\",l)),e.addAndTrackEvent(d,\"dblclick\",n(\"dblClickHandler\",\"annotationDblClickHandler\",l)),i.appendChild(d),this.annotations_.push(d);var x=t.drawingContext;if(x.save(),x.strokeStyle=h.hasOwnProperty(\"tickColor\")?h.tickColor:e.colorsMap_[l.name],x.lineWidth=h.hasOwnProperty(\"tickWidth\")?h.tickWidth:e.getOption(\"strokeWidth\"),x.beginPath(),h.attachAtBottom){var y=_+g;x.moveTo(l.canvasx,y),x.lineTo(l.canvasx,y+u)}else x.moveTo(l.canvasx,l.canvasy),x.lineTo(l.canvasx,l.canvasy-2-u);x.closePath(),x.stroke(),x.restore()}}},i.prototype.destroy=function(){this.detachLabels()},a.default=i,e.exports=a.default},{}],21:[function(t,e,a){\"use strict\";Object.defineProperty(a,\"__esModule\",{value:!0});var i=t(\"../dygraph-utils\"),n=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(i),r=function(){this.xlabels_=[],this.ylabels_=[]};r.prototype.toString=function(){return\"Axes Plugin\"},r.prototype.activate=function(t){return{layout:this.layout,clearChart:this.clearChart,willDrawChart:this.willDrawChart}},r.prototype.layout=function(t){var e=t.dygraph;if(e.getOptionForAxis(\"drawAxis\",\"y\")){var a=e.getOptionForAxis(\"axisLabelWidth\",\"y\")+2*e.getOptionForAxis(\"axisTickSize\",\"y\");t.reserveSpaceLeft(a)}if(e.getOptionForAxis(\"drawAxis\",\"x\")){var i;i=e.getOption(\"xAxisHeight\")?e.getOption(\"xAxisHeight\"):e.getOptionForAxis(\"axisLabelFontSize\",\"x\")+2*e.getOptionForAxis(\"axisTickSize\",\"x\"),t.reserveSpaceBottom(i)}if(2==e.numAxes()){if(e.getOptionForAxis(\"drawAxis\",\"y2\")){var a=e.getOptionForAxis(\"axisLabelWidth\",\"y2\")+2*e.getOptionForAxis(\"axisTickSize\",\"y2\");t.reserveSpaceRight(a)}}else e.numAxes()>2&&e.error(\"Only two y-axes are supported at this time. (Trying to use \"+e.numAxes()+\")\")},r.prototype.detachLabels=function(){function t(t){for(var e=0;e<t.length;e++){var a=t[e];a.parentNode&&a.parentNode.removeChild(a)}}t(this.xlabels_),t(this.ylabels_),this.xlabels_=[],this.ylabels_=[]},r.prototype.clearChart=function(t){this.detachLabels()},r.prototype.willDrawChart=function(t){function e(t){return Math.round(t)+.5}function a(t){return Math.round(t)-.5}var i=this,r=t.dygraph;if(r.getOptionForAxis(\"drawAxis\",\"x\")||r.getOptionForAxis(\"drawAxis\",\"y\")||r.getOptionForAxis(\"drawAxis\",\"y2\")){var o,s,l,h=t.drawingContext,u=t.canvas.parentNode,d=r.width_,c=r.height_,p=function(t){return{position:\"absolute\",fontSize:r.getOptionForAxis(\"axisLabelFontSize\",t)+\"px\",width:r.getOptionForAxis(\"axisLabelWidth\",t)+\"px\"}},g={x:p(\"x\"),y:p(\"y\"),y2:p(\"y2\")},f=function(t,e,a){var i=document.createElement(\"div\"),r=g[\"y2\"==a?\"y2\":e];n.update(i.style,r);var o=document.createElement(\"div\");return o.className=\"dygraph-axis-label dygraph-axis-label-\"+e+(a?\" dygraph-axis-label-\"+a:\"\"),o.innerHTML=t,i.appendChild(o),i};h.save();var v=r.layout_,_=t.dygraph.plotter_.area,y=function(t){return function(e){return r.getOptionForAxis(e,t)}};if(r.getOptionForAxis(\"drawAxis\",\"y\")){if(v.yticks&&v.yticks.length>0){var x=r.numAxes(),m=[y(\"y\"),y(\"y2\")];v.yticks.forEach(function(t){if(void 0!==t.label){s=_.x;var e=\"y1\",a=m[0];1==t.axis&&(s=_.x+_.w,-1,e=\"y2\",a=m[1]);var n=a(\"axisLabelFontSize\");l=_.y+t.pos*_.h,o=f(t.label,\"y\",2==x?e:null);var r=l-n/2;r<0&&(r=0),r+n+3>c?o.style.bottom=\"0\":o.style.top=r+\"px\",0===t.axis?(o.style.left=_.x-a(\"axisLabelWidth\")-a(\"axisTickSize\")+\"px\",o.style.textAlign=\"right\"):1==t.axis&&(o.style.left=_.x+_.w+a(\"axisTickSize\")+\"px\",o.style.textAlign=\"left\"),o.style.width=a(\"axisLabelWidth\")+\"px\",u.appendChild(o),i.ylabels_.push(o)}});var b=this.ylabels_[0],w=r.getOptionForAxis(\"axisLabelFontSize\",\"y\");parseInt(b.style.top,10)+w>c-w&&(b.style.top=parseInt(b.style.top,10)-w/2+\"px\")}var A;if(r.getOption(\"drawAxesAtZero\")){var O=r.toPercentXCoord(0);(O>1||O<0||isNaN(O))&&(O=0),A=e(_.x+O*_.w)}else A=e(_.x);h.strokeStyle=r.getOptionForAxis(\"axisLineColor\",\"y\"),h.lineWidth=r.getOptionForAxis(\"axisLineWidth\",\"y\"),h.beginPath(),h.moveTo(A,a(_.y)),h.lineTo(A,a(_.y+_.h)),h.closePath(),h.stroke(),2==r.numAxes()&&(h.strokeStyle=r.getOptionForAxis(\"axisLineColor\",\"y2\"),h.lineWidth=r.getOptionForAxis(\"axisLineWidth\",\"y2\"),h.beginPath(),h.moveTo(a(_.x+_.w),a(_.y)),h.lineTo(a(_.x+_.w),a(_.y+_.h)),h.closePath(),h.stroke())}if(r.getOptionForAxis(\"drawAxis\",\"x\")){if(v.xticks){var D=y(\"x\");v.xticks.forEach(function(t){if(void 0!==t.label){s=_.x+t.pos*_.w,l=_.y+_.h,o=f(t.label,\"x\"),o.style.textAlign=\"center\",o.style.top=l+D(\"axisTickSize\")+\"px\";var e=s-D(\"axisLabelWidth\")/2;e+D(\"axisLabelWidth\")>d&&(e=d-D(\"axisLabelWidth\"),o.style.textAlign=\"right\"),e<0&&(e=0,o.style.textAlign=\"left\"),o.style.left=e+\"px\",o.style.width=D(\"axisLabelWidth\")+\"px\",u.appendChild(o),i.xlabels_.push(o)}})}h.strokeStyle=r.getOptionForAxis(\"axisLineColor\",\"x\"),h.lineWidth=r.getOptionForAxis(\"axisLineWidth\",\"x\"),h.beginPath();var E;if(r.getOption(\"drawAxesAtZero\")){var O=r.toPercentYCoord(0,0);(O>1||O<0)&&(O=1),E=a(_.y+O*_.h)}else E=a(_.y+_.h);h.moveTo(e(_.x),E),h.lineTo(e(_.x+_.w),E),h.closePath(),h.stroke()}h.restore()}},a.default=r,e.exports=a.default},{\"../dygraph-utils\":17}],22:[function(t,e,a){\"use strict\";Object.defineProperty(a,\"__esModule\",{value:!0});var i=function(){this.title_div_=null,this.xlabel_div_=null,this.ylabel_div_=null,this.y2label_div_=null};i.prototype.toString=function(){return\"ChartLabels Plugin\"},i.prototype.activate=function(t){return{layout:this.layout,didDrawChart:this.didDrawChart}};var n=function(t){var e=document.createElement(\"div\");return e.style.position=\"absolute\",e.style.left=t.x+\"px\",e.style.top=t.y+\"px\",e.style.width=t.w+\"px\",e.style.height=t.h+\"px\",e};i.prototype.detachLabels_=function(){for(var t=[this.title_div_,this.xlabel_div_,this.ylabel_div_,this.y2label_div_],e=0;e<t.length;e++){var a=t[e];a&&(a.parentNode&&a.parentNode.removeChild(a))}this.title_div_=null,this.xlabel_div_=null,this.ylabel_div_=null,this.y2label_div_=null};var r=function(t,e,a,i,n){var r=document.createElement(\"div\");r.style.position=\"absolute\",r.style.left=1==a?\"0px\":e.x+\"px\",r.style.top=e.y+\"px\",r.style.width=e.w+\"px\",r.style.height=e.h+\"px\",r.style.fontSize=t.getOption(\"yLabelWidth\")-2+\"px\";var o=document.createElement(\"div\");o.style.position=\"absolute\",o.style.width=e.h+\"px\",o.style.height=e.w+\"px\",o.style.top=e.h/2-e.w/2+\"px\",o.style.left=e.w/2-e.h/2+\"px\",o.className=\"dygraph-label-rotate-\"+(1==a?\"right\":\"left\");var s=document.createElement(\"div\");return s.className=i,s.innerHTML=n,o.appendChild(s),r.appendChild(o),r};i.prototype.layout=function(t){this.detachLabels_();var e=t.dygraph,a=t.chart_div;if(e.getOption(\"title\")){var i=t.reserveSpaceTop(e.getOption(\"titleHeight\"));this.title_div_=n(i),this.title_div_.style.fontSize=e.getOption(\"titleHeight\")-8+\"px\";var o=document.createElement(\"div\");o.className=\"dygraph-label dygraph-title\",o.innerHTML=e.getOption(\"title\"),this.title_div_.appendChild(o),a.appendChild(this.title_div_)}if(e.getOption(\"xlabel\")){var s=t.reserveSpaceBottom(e.getOption(\"xLabelHeight\"));this.xlabel_div_=n(s),this.xlabel_div_.style.fontSize=e.getOption(\"xLabelHeight\")-2+\"px\";var o=document.createElement(\"div\");o.className=\"dygraph-label dygraph-xlabel\",o.innerHTML=e.getOption(\"xlabel\"),this.xlabel_div_.appendChild(o),a.appendChild(this.xlabel_div_)}if(e.getOption(\"ylabel\")){var l=t.reserveSpaceLeft(0);this.ylabel_div_=r(e,l,1,\"dygraph-label dygraph-ylabel\",e.getOption(\"ylabel\")),a.appendChild(this.ylabel_div_)}if(e.getOption(\"y2label\")&&2==e.numAxes()){var h=t.reserveSpaceRight(0);this.y2label_div_=r(e,h,2,\"dygraph-label dygraph-y2label\",e.getOption(\"y2label\")),a.appendChild(this.y2label_div_)}},i.prototype.didDrawChart=function(t){var e=t.dygraph;this.title_div_&&(this.title_div_.children[0].innerHTML=e.getOption(\"title\")),this.xlabel_div_&&(this.xlabel_div_.children[0].innerHTML=e.getOption(\"xlabel\")),this.ylabel_div_&&(this.ylabel_div_.children[0].children[0].innerHTML=e.getOption(\"ylabel\")),this.y2label_div_&&(this.y2label_div_.children[0].children[0].innerHTML=e.getOption(\"y2label\"))},i.prototype.clearChart=function(){},i.prototype.destroy=function(){this.detachLabels_()},a.default=i,e.exports=a.default},{}],23:[function(t,e,a){\"use strict\";Object.defineProperty(a,\"__esModule\",{value:!0});var i=function(){};i.prototype.toString=function(){return\"Gridline Plugin\"},i.prototype.activate=function(t){return{willDrawChart:this.willDrawChart}},i.prototype.willDrawChart=function(t){function e(t){return Math.round(t)+.5}function a(t){return Math.round(t)-.5}var i,n,r,o,s=t.dygraph,l=t.drawingContext,h=s.layout_,u=t.dygraph.plotter_.area;if(s.getOptionForAxis(\"drawGrid\",\"y\")){for(var d=[\"y\",\"y2\"],c=[],p=[],g=[],f=[],v=[],r=0;r<d.length;r++)g[r]=s.getOptionForAxis(\"drawGrid\",d[r]),g[r]&&(c[r]=s.getOptionForAxis(\"gridLineColor\",d[r]),p[r]=s.getOptionForAxis(\"gridLineWidth\",d[r]),v[r]=s.getOptionForAxis(\"gridLinePattern\",d[r]),f[r]=v[r]&&v[r].length>=2);o=h.yticks,l.save(),o.forEach(function(t){if(t.has_tick){var r=t.axis;g[r]&&(l.save(),f[r]&&l.setLineDash&&l.setLineDash(v[r]),l.strokeStyle=c[r],l.lineWidth=p[r],i=e(u.x),n=a(u.y+t.pos*u.h),l.beginPath(),l.moveTo(i,n),l.lineTo(i+u.w,n),l.stroke(),l.restore())}}),l.restore()}if(s.getOptionForAxis(\"drawGrid\",\"x\")){o=h.xticks,l.save();var v=s.getOptionForAxis(\"gridLinePattern\",\"x\"),f=v&&v.length>=2;f&&l.setLineDash&&l.setLineDash(v),l.strokeStyle=s.getOptionForAxis(\"gridLineColor\",\"x\"),l.lineWidth=s.getOptionForAxis(\"gridLineWidth\",\"x\"),o.forEach(function(t){t.has_tick&&(i=e(u.x+t.pos*u.w),n=a(u.y+u.h),l.beginPath(),l.moveTo(i,n),l.lineTo(i,u.y),l.closePath(),l.stroke())}),f&&l.setLineDash&&l.setLineDash([]),l.restore()}},i.prototype.destroy=function(){},a.default=i,e.exports=a.default},{}],24:[function(t,e,a){\"use strict\";function i(t,e,a){if(!t||t.length<=1)return'<div class=\"dygraph-legend-line\" style=\"border-bottom-color: '+e+';\"></div>';var i,n,r,o,s,l=0,h=0,u=[];for(i=0;i<=t.length;i++)l+=t[i%t.length];if((s=Math.floor(a/(l-t[0])))>1){for(i=0;i<t.length;i++)u[i]=t[i]/a;h=u.length}else{for(s=1,i=0;i<t.length;i++)u[i]=t[i]/l;h=u.length+1}var d=\"\";for(n=0;n<s;n++)for(i=0;i<h;i+=2)r=u[i%u.length],o=i<t.length?u[(i+1)%u.length]:0,d+='<div class=\"dygraph-legend-dash\" style=\"margin-right: '+o+\"em; padding-left: \"+r+'em;\"></div>';return d}Object.defineProperty(a,\"__esModule\",{value:!0});var n=t(\"../dygraph-utils\"),r=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(n),o=function(){this.legend_div_=null,this.is_generated_div_=!1};o.prototype.toString=function(){return\"Legend Plugin\"},o.prototype.activate=function(t){var e,a=t.getOption(\"labelsDiv\");return a&&null!==a?e=\"string\"==typeof a||a instanceof String?document.getElementById(a):a:(e=document.createElement(\"div\"),e.className=\"dygraph-legend\",t.graphDiv.appendChild(e),this.is_generated_div_=!0),this.legend_div_=e,this.one_em_width_=10,{select:this.select,deselect:this.deselect,predraw:this.predraw,didDrawChart:this.didDrawChart}};var s=function(t){var e=document.createElement(\"span\");e.setAttribute(\"style\",\"margin: 0; padding: 0 0 0 1em; border: 0;\"),t.appendChild(e);var a=e.offsetWidth;return t.removeChild(e),a},l=function(t){return t.replace(/&/g,\"&amp;\").replace(/\"/g,\"&quot;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\")};o.prototype.select=function(t){var e=t.selectedX,a=t.selectedPoints,i=t.selectedRow,n=t.dygraph.getOption(\"legend\");if(\"never\"===n)return void(this.legend_div_.style.display=\"none\");if(\"follow\"===n){var r=t.dygraph.plotter_.area,s=this.legend_div_.offsetWidth,l=t.dygraph.getOptionForAxis(\"axisLabelWidth\",\"y\"),h=a[0].x*r.w+50,u=a[0].y*r.h-50;h+s+1>r.w&&(h=h-100-s-(l-r.x)),t.dygraph.graphDiv.appendChild(this.legend_div_),this.legend_div_.style.left=l+h+\"px\",this.legend_div_.style.top=u+\"px\"}var d=o.generateLegendHTML(t.dygraph,e,a,this.one_em_width_,i);this.legend_div_.innerHTML=d,this.legend_div_.style.display=\"\"},o.prototype.deselect=function(t){\"always\"!==t.dygraph.getOption(\"legend\")&&(this.legend_div_.style.display=\"none\");var e=s(this.legend_div_);this.one_em_width_=e;var a=o.generateLegendHTML(t.dygraph,void 0,void 0,e,null);this.legend_div_.innerHTML=a},o.prototype.didDrawChart=function(t){this.deselect(t)},o.prototype.predraw=function(t){if(this.is_generated_div_){t.dygraph.graphDiv.appendChild(this.legend_div_);var e=t.dygraph.getArea(),a=this.legend_div_.offsetWidth;this.legend_div_.style.left=e.x+e.w-a-1+\"px\",this.legend_div_.style.top=e.y+\"px\"}},o.prototype.destroy=function(){this.legend_div_=null},o.generateLegendHTML=function(t,e,a,n,s){var h={dygraph:t,x:e,series:[]},u={},d=t.getLabels();if(d)for(var c=1;c<d.length;c++){var p=t.getPropertiesForSeries(d[c]),g=t.getOption(\"strokePattern\",d[c]),f={dashHTML:i(g,p.color,n),label:d[c],labelHTML:l(d[c]),isVisible:p.visible,color:p.color};h.series.push(f),u[d[c]]=f}if(void 0!==e){var v=t.optionsViewForAxis_(\"x\"),_=v(\"valueFormatter\");h.xHTML=_.call(t,e,v,d[0],t,s,0);for(var y=[],x=t.numAxes(),c=0;c<x;c++)y[c]=t.optionsViewForAxis_(\"y\"+(c?1+c:\"\"));var m=t.getOption(\"labelsShowZeroValues\"),b=t.getHighlightSeries();for(c=0;c<a.length;c++){var w=a[c],f=u[w.name];if(f.y=w.yval,0===w.yval&&!m||isNaN(w.canvasy))f.isVisible=!1;else{var p=t.getPropertiesForSeries(w.name),A=y[p.axis-1],O=A(\"valueFormatter\"),D=O.call(t,w.yval,A,w.name,t,s,d.indexOf(w.name));r.update(f,{yHTML:D}),w.name==b&&(f.isHighlighted=!0)}}}return(t.getOption(\"legendFormatter\")||o.defaultFormatter).call(t,h)},o.defaultFormatter=function(t){var e=t.dygraph;if(!0!==e.getOption(\"showLabelsOnHighlight\"))return\"\";var a,i=e.getOption(\"labelsSeparateLines\");if(void 0===t.x){if(\"always\"!=e.getOption(\"legend\"))return\"\";a=\"\";for(var n=0;n<t.series.length;n++){var r=t.series[n];r.isVisible&&(\"\"!==a&&(a+=i?\"<br/>\":\" \"),a+=\"<span style='font-weight: bold; color: \"+r.color+\";'>\"+r.dashHTML+\" \"+r.labelHTML+\"</span>\")}return a}a=t.xHTML+\":\";for(var n=0;n<t.series.length;n++){var r=t.series[n];if(r.isVisible){i&&(a+=\"<br>\");a+=\"<span\"+(r.isHighlighted?' class=\"highlight\"':\"\")+\"> <b><span style='color: \"+r.color+\";'>\"+r.labelHTML+\"</span></b>:&#160;\"+r.yHTML+\"</span>\"}}return a},a.default=o,e.exports=a.default},{\"../dygraph-utils\":17}],25:[function(t,e,a){\"use strict\";function i(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(a,\"__esModule\",{value:!0});var n=t(\"../dygraph-utils\"),r=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(n),o=t(\"../dygraph-interaction-model\"),s=i(o),l=t(\"../iframe-tarp\"),h=i(l),u=function(){this.hasTouchInterface_=\"undefined\"!=typeof TouchEvent,this.isMobileDevice_=/mobile|android/gi.test(navigator.appVersion),this.interfaceCreated_=!1};u.prototype.toString=function(){return\"RangeSelector Plugin\"},u.prototype.activate=function(t){return this.dygraph_=t,this.getOption_(\"showRangeSelector\")&&this.createInterface_(),{layout:this.reserveSpace_,predraw:this.renderStaticLayer_,didDrawChart:this.renderInteractiveLayer_}},u.prototype.destroy=function(){this.bgcanvas_=null,this.fgcanvas_=null,this.leftZoomHandle_=null,this.rightZoomHandle_=null},u.prototype.getOption_=function(t,e){return this.dygraph_.getOption(t,e)},u.prototype.setDefaultOption_=function(t,e){this.dygraph_.attrs_[t]=e},u.prototype.createInterface_=function(){this.createCanvases_(),this.createZoomHandles_(),this.initInteraction_(),this.getOption_(\"animatedZooms\")&&(console.warn(\"Animated zooms and range selector are not compatible; disabling animatedZooms.\"),this.dygraph_.updateOptions({animatedZooms:!1},!0)),this.interfaceCreated_=!0,this.addToGraph_()},u.prototype.addToGraph_=function(){var t=this.graphDiv_=this.dygraph_.graphDiv;t.appendChild(this.bgcanvas_),t.appendChild(this.fgcanvas_),t.appendChild(this.leftZoomHandle_),t.appendChild(this.rightZoomHandle_)},u.prototype.removeFromGraph_=function(){var t=this.graphDiv_;t.removeChild(this.bgcanvas_),t.removeChild(this.fgcanvas_),t.removeChild(this.leftZoomHandle_),t.removeChild(this.rightZoomHandle_),this.graphDiv_=null},u.prototype.reserveSpace_=function(t){this.getOption_(\"showRangeSelector\")&&t.reserveSpaceBottom(this.getOption_(\"rangeSelectorHeight\")+4)},u.prototype.renderStaticLayer_=function(){this.updateVisibility_()&&(this.resize_(),this.drawStaticLayer_())},u.prototype.renderInteractiveLayer_=function(){this.updateVisibility_()&&!this.isChangingRange_&&(this.placeZoomHandles_(),this.drawInteractiveLayer_())},u.prototype.updateVisibility_=function(){var t=this.getOption_(\"showRangeSelector\");if(t)this.interfaceCreated_?this.graphDiv_&&this.graphDiv_.parentNode||this.addToGraph_():this.createInterface_();else if(this.graphDiv_){this.removeFromGraph_();var e=this.dygraph_;setTimeout(function(){e.width_=0,e.resize()},1)}return t},u.prototype.resize_=function(){function t(t,e,a,i){var n=i||r.getContextPixelRatio(e);t.style.top=a.y+\"px\",t.style.left=a.x+\"px\",t.width=a.w*n,t.height=a.h*n,t.style.width=a.w+\"px\",t.style.height=a.h+\"px\",1!=n&&e.scale(n,n)}var e=this.dygraph_.layout_.getPlotArea(),a=0;this.dygraph_.getOptionForAxis(\"drawAxis\",\"x\")&&(a=this.getOption_(\"xAxisHeight\")||this.getOption_(\"axisLabelFontSize\")+2*this.getOption_(\"axisTickSize\")),this.canvasRect_={x:e.x,y:e.y+e.h+a+4,w:e.w,h:this.getOption_(\"rangeSelectorHeight\")};var i=this.dygraph_.getNumericOption(\"pixelRatio\");t(this.bgcanvas_,this.bgcanvas_ctx_,this.canvasRect_,i),t(this.fgcanvas_,this.fgcanvas_ctx_,this.canvasRect_,i)},u.prototype.createCanvases_=function(){this.bgcanvas_=r.createCanvas(),this.bgcanvas_.className=\"dygraph-rangesel-bgcanvas\",this.bgcanvas_.style.position=\"absolute\",this.bgcanvas_.style.zIndex=9,this.bgcanvas_ctx_=r.getContext(this.bgcanvas_),this.fgcanvas_=r.createCanvas(),this.fgcanvas_.className=\"dygraph-rangesel-fgcanvas\",this.fgcanvas_.style.position=\"absolute\",this.fgcanvas_.style.zIndex=9,this.fgcanvas_.style.cursor=\"default\",this.fgcanvas_ctx_=r.getContext(this.fgcanvas_)},u.prototype.createZoomHandles_=function(){var t=new Image;t.className=\"dygraph-rangesel-zoomhandle\",t.style.position=\"absolute\",t.style.zIndex=10,t.style.visibility=\"hidden\",t.style.cursor=\"col-resize\",t.width=9,t.height=16,t.src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAQCAYAAADESFVDAAAAAXNSR0IArs4c6QAAAAZiS0dEANAAzwDP4Z7KegAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAAd0SU1FB9sHGw0cMqdt1UwAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAaElEQVQoz+3SsRFAQBCF4Z9WJM8KCDVwownl6YXsTmCUsyKGkZzcl7zkz3YLkypgAnreFmDEpHkIwVOMfpdi9CEEN2nGpFdwD03yEqDtOgCaun7sqSTDH32I1pQA2Pb9sZecAxc5r3IAb21d6878xsAAAAAASUVORK5CYII=\",this.isMobileDevice_&&(t.width*=2,t.height*=2),this.leftZoomHandle_=t,this.rightZoomHandle_=t.cloneNode(!1)},u.prototype.initInteraction_=function(){var t,e,a,i,n,o,l,u,d,c,p,g,f,v,_=this,y=document,x=0,m=null,b=!1,w=!1,A=!this.isMobileDevice_,O=new h.default;t=function(t){var e=_.dygraph_.xAxisExtremes(),a=(e[1]-e[0])/_.canvasRect_.w;return[e[0]+(t.leftHandlePos-_.canvasRect_.x)*a,e[0]+(t.rightHandlePos-_.canvasRect_.x)*a]},e=function(t){return r.cancelEvent(t),b=!0,x=t.clientX,m=t.target?t.target:t.srcElement,\"mousedown\"!==t.type&&\"dragstart\"!==t.type||(r.addEvent(y,\"mousemove\",a),r.addEvent(y,\"mouseup\",i)),_.fgcanvas_.style.cursor=\"col-resize\",O.cover(),!0},a=function(t){if(!b)return!1;r.cancelEvent(t);var e=t.clientX-x;if(Math.abs(e)<4)return!0;x=t.clientX;var a,i=_.getZoomHandleStatus_();m==_.leftZoomHandle_?(a=i.leftHandlePos+e,a=Math.min(a,i.rightHandlePos-m.width-3),a=Math.max(a,_.canvasRect_.x)):(a=i.rightHandlePos+e,a=Math.min(a,_.canvasRect_.x+_.canvasRect_.w),a=Math.max(a,i.leftHandlePos+m.width+3));var o=m.width/2;return m.style.left=a-o+\"px\",_.drawInteractiveLayer_(),A&&n(),!0},i=function(t){return!!b&&(b=!1,O.uncover(),r.removeEvent(y,\"mousemove\",a),r.removeEvent(y,\"mouseup\",i),_.fgcanvas_.style.cursor=\"default\",A||n(),!0)},n=function(){try{var e=_.getZoomHandleStatus_();if(_.isChangingRange_=!0,e.isZoomed){var a=t(e);_.dygraph_.doZoomXDates_(a[0],a[1])}else _.dygraph_.resetZoom()}finally{_.isChangingRange_=!1}},o=function(t){var e=_.leftZoomHandle_.getBoundingClientRect(),a=e.left+e.width/2;e=_.rightZoomHandle_.getBoundingClientRect();var i=e.left+e.width/2;return t.clientX>a&&t.clientX<i},l=function(t){return!(w||!o(t)||!_.getZoomHandleStatus_().isZoomed)&&(r.cancelEvent(t),w=!0,x=t.clientX,\"mousedown\"===t.type&&(r.addEvent(y,\"mousemove\",u),r.addEvent(y,\"mouseup\",d)),!0)},u=function(t){if(!w)return!1;r.cancelEvent(t);var e=t.clientX-x;if(Math.abs(e)<4)return!0;x=t.clientX;var a=_.getZoomHandleStatus_(),i=a.leftHandlePos,n=a.rightHandlePos,o=n-i;i+e<=_.canvasRect_.x?(i=_.canvasRect_.x,n=i+o):n+e>=_.canvasRect_.x+_.canvasRect_.w?(n=_.canvasRect_.x+_.canvasRect_.w,i=n-o):(i+=e,n+=e);var s=_.leftZoomHandle_.width/2;return _.leftZoomHandle_.style.left=i-s+\"px\",_.rightZoomHandle_.style.left=n-s+\"px\",_.drawInteractiveLayer_(),A&&c(),!0},d=function(t){return!!w&&(w=!1,r.removeEvent(y,\"mousemove\",u),r.removeEvent(y,\"mouseup\",d),A||c(),!0)},c=function(){try{_.isChangingRange_=!0,_.dygraph_.dateWindow_=t(_.getZoomHandleStatus_()),_.dygraph_.drawGraph_(!1)}finally{_.isChangingRange_=!1}},p=function(t){if(!b&&!w){var e=o(t)?\"move\":\"default\";e!=_.fgcanvas_.style.cursor&&(_.fgcanvas_.style.cursor=e)}},g=function(t){\"touchstart\"==t.type&&1==t.targetTouches.length?e(t.targetTouches[0])&&r.cancelEvent(t):\"touchmove\"==t.type&&1==t.targetTouches.length?a(t.targetTouches[0])&&r.cancelEvent(t):i(t)},f=function(t){\"touchstart\"==t.type&&1==t.targetTouches.length?l(t.targetTouches[0])&&r.cancelEvent(t):\"touchmove\"==t.type&&1==t.targetTouches.length?u(t.targetTouches[0])&&r.cancelEvent(t):d(t)},v=function(t,e){for(var a=[\"touchstart\",\"touchend\",\"touchmove\",\"touchcancel\"],i=0;i<a.length;i++)_.dygraph_.addAndTrackEvent(t,a[i],e)},this.setDefaultOption_(\"interactionModel\",s.default.dragIsPanInteractionModel),this.setDefaultOption_(\"panEdgeFraction\",1e-4);var D=window.opera?\"mousedown\":\"dragstart\";this.dygraph_.addAndTrackEvent(this.leftZoomHandle_,D,e),this.dygraph_.addAndTrackEvent(this.rightZoomHandle_,D,e),this.dygraph_.addAndTrackEvent(this.fgcanvas_,\"mousedown\",l),this.dygraph_.addAndTrackEvent(this.fgcanvas_,\"mousemove\",p),this.hasTouchInterface_&&(v(this.leftZoomHandle_,g),v(this.rightZoomHandle_,g),v(this.fgcanvas_,f))},u.prototype.drawStaticLayer_=function(){var t=this.bgcanvas_ctx_;t.clearRect(0,0,this.canvasRect_.w,this.canvasRect_.h);try{this.drawMiniPlot_()}catch(t){console.warn(t)}this.bgcanvas_ctx_.lineWidth=this.getOption_(\"rangeSelectorBackgroundLineWidth\"),t.strokeStyle=this.getOption_(\"rangeSelectorBackgroundStrokeColor\"),t.beginPath(),t.moveTo(.5,.5),t.lineTo(.5,this.canvasRect_.h-.5),t.lineTo(this.canvasRect_.w-.5,this.canvasRect_.h-.5),t.lineTo(this.canvasRect_.w-.5,.5),t.stroke()},u.prototype.drawMiniPlot_=function(){var t=this.getOption_(\"rangeSelectorPlotFillColor\"),e=this.getOption_(\"rangeSelectorPlotFillGradientColor\"),a=this.getOption_(\"rangeSelectorPlotStrokeColor\");if(t||a){var i=this.getOption_(\"stepPlot\"),n=this.computeCombinedSeriesAndLimits_(),r=n.yMax-n.yMin,o=this.bgcanvas_ctx_,s=this.dygraph_.xAxisExtremes(),l=Math.max(s[1]-s[0],1e-30),h=(this.canvasRect_.w-.5)/l,u=(this.canvasRect_.h-.5)/r,d=this.canvasRect_.w-.5,c=this.canvasRect_.h-.5,p=null,g=null;o.beginPath(),o.moveTo(.5,c);for(var f=0;f<n.data.length;f++){var v=n.data[f],_=null!==v[0]?(v[0]-s[0])*h:NaN,y=null!==v[1]?c-(v[1]-n.yMin)*u:NaN;(i||null===p||Math.round(_)!=Math.round(p))&&(isFinite(_)&&isFinite(y)?(null===p?o.lineTo(_,c):i&&o.lineTo(_,g),o.lineTo(_,y),p=_,g=y):(null!==p&&(i?(o.lineTo(_,g),o.lineTo(_,c)):o.lineTo(p,c)),p=g=null))}if(o.lineTo(d,c),o.closePath(),t){var x=this.bgcanvas_ctx_.createLinearGradient(0,0,0,c);e&&x.addColorStop(0,e),x.addColorStop(1,t),this.bgcanvas_ctx_.fillStyle=x,o.fill()}a&&(this.bgcanvas_ctx_.strokeStyle=a,this.bgcanvas_ctx_.lineWidth=this.getOption_(\"rangeSelectorPlotLineWidth\"),o.stroke())}},u.prototype.computeCombinedSeriesAndLimits_=function(){var t,e=this.dygraph_,a=this.getOption_(\"logscale\"),i=e.numColumns(),n=e.getLabels(),o=new Array(i),s=!1,l=e.visibility(),h=[];for(t=1;t<i;t++){var u=this.getOption_(\"showInRangeSelector\",n[t]);h.push(u),null!==u&&(s=!0)}if(s)for(t=1;t<i;t++)o[t]=h[t-1];else for(t=1;t<i;t++)o[t]=l[t-1];var d=[],c=e.dataHandler_,p=e.attributes_;for(t=1;t<e.numColumns();t++)if(o[t]){var g=c.extractSeries(e.rawData_,t,p);e.rollPeriod()>1&&(g=c.rollingAverage(g,e.rollPeriod(),p)),d.push(g)}var f=[];for(t=0;t<d[0].length;t++){for(var v=0,_=0,y=0;y<d.length;y++){var x=d[y][t][1];null===x||isNaN(x)||(_++,v+=x)}f.push([d[0][t][0],v/_])}var m=Number.MAX_VALUE,b=-Number.MAX_VALUE;for(t=0;t<f.length;t++){var w=f[t][1];null!==w&&isFinite(w)&&(!a||w>0)&&(m=Math.min(m,w),b=Math.max(b,w))}if(a)for(b=r.log10(b),b+=.25*b,m=r.log10(m),t=0;t<f.length;t++)f[t][1]=r.log10(f[t][1]);else{var A,O=b-m;A=O<=Number.MIN_VALUE?.25*b:.25*O,b+=A,m-=A}return{data:f,yMin:m,yMax:b}},u.prototype.placeZoomHandles_=function(){var t=this.dygraph_.xAxisExtremes(),e=this.dygraph_.xAxisRange(),a=t[1]-t[0],i=Math.max(0,(e[0]-t[0])/a),n=Math.max(0,(t[1]-e[1])/a),r=this.canvasRect_.x+this.canvasRect_.w*i,o=this.canvasRect_.x+this.canvasRect_.w*(1-n),s=Math.max(this.canvasRect_.y,this.canvasRect_.y+(this.canvasRect_.h-this.leftZoomHandle_.height)/2),l=this.leftZoomHandle_.width/2;this.leftZoomHandle_.style.left=r-l+\"px\",this.leftZoomHandle_.style.top=s+\"px\",this.rightZoomHandle_.style.left=o-l+\"px\",this.rightZoomHandle_.style.top=this.leftZoomHandle_.style.top,this.leftZoomHandle_.style.visibility=\"visible\",this.rightZoomHandle_.style.visibility=\"visible\"},u.prototype.drawInteractiveLayer_=function(){var t=this.fgcanvas_ctx_;t.clearRect(0,0,this.canvasRect_.w,this.canvasRect_.h);var e=this.canvasRect_.w-1,a=this.canvasRect_.h-1,i=this.getZoomHandleStatus_();if(t.strokeStyle=this.getOption_(\"rangeSelectorForegroundStrokeColor\"),t.lineWidth=this.getOption_(\"rangeSelectorForegroundLineWidth\"),i.isZoomed){var n=Math.max(1,i.leftHandlePos-this.canvasRect_.x),r=Math.min(e,i.rightHandlePos-this.canvasRect_.x);t.fillStyle=\"rgba(240, 240, 240, \"+this.getOption_(\"rangeSelectorAlpha\").toString()+\")\",t.fillRect(0,0,n,this.canvasRect_.h),t.fillRect(r,0,this.canvasRect_.w-r,this.canvasRect_.h),t.beginPath(),t.moveTo(1,1),t.lineTo(n,1),t.lineTo(n,a),t.lineTo(r,a),t.lineTo(r,1),t.lineTo(e,1),t.stroke()}else t.beginPath(),t.moveTo(1,1),t.lineTo(1,a),t.lineTo(e,a),t.lineTo(e,1),t.stroke()},u.prototype.getZoomHandleStatus_=function(){var t=this.leftZoomHandle_.width/2,e=parseFloat(this.leftZoomHandle_.style.left)+t,a=parseFloat(this.rightZoomHandle_.style.left)+t;return{leftHandlePos:e,rightHandlePos:a,isZoomed:e-1>this.canvasRect_.x||a+1<this.canvasRect_.x+this.canvasRect_.w}},a.default=u,e.exports=a.default},{\"../dygraph-interaction-model\":12,\"../dygraph-utils\":17,\"../iframe-tarp\":19}]},{},[18])(18)});\n//# sourceMappingURL=dist/dygraph.min.js.map\n","import { ChartData, ChartMetadata } from \"../chart-types\"\nimport { seconds4human } from \"./seconds4human\"\n\nexport const LEGEND_BOTTOM_SINGLE_LINE_HEIGHT = 80\n\nexport const legendPluginModuleString = (withContext: boolean, chartMetadata: ChartMetadata) => {\n  let str = \" \"\n  let context = \"\"\n\n  if (withContext && typeof chartMetadata.context === \"string\") {\n    // eslint-disable-next-line prefer-destructuring\n    context = chartMetadata.context\n  }\n\n  if (typeof chartMetadata.plugin === \"string\" && chartMetadata.plugin !== \"\") {\n    str = chartMetadata.plugin\n\n    if (str.endsWith(\".plugin\")) {\n      str = str.substring(0, str.length - 7)\n    }\n\n    if (typeof chartMetadata.module === \"string\" && chartMetadata.module !== \"\") {\n      str += `:${chartMetadata.module}`\n    }\n\n    if (withContext && context !== \"\") {\n      str += `, ${context}`\n    }\n  } else if (withContext && context !== \"\") {\n    str = context\n  }\n  return str\n}\n\nexport const legendResolutionTooltip = (chartData: ChartData, chartMetadata: ChartMetadata) => {\n  const collected = chartMetadata.update_every\n  // todo if there's no data (but maybe there won't be situation like this), then use \"collected\"\n  const viewed = chartData.view_update_every\n  if (collected === viewed) {\n    return `resolution ${seconds4human(collected)}`\n  }\n\n  return `resolution ${seconds4human(viewed)}, collected every ${seconds4human(collected)}`\n}\n\ntype GetNewSelectedDimensions = (arg: {\n  allDimensions: string[],\n  selectedDimensions: string[],\n  clickedDimensionName: string,\n  isModifierKeyPressed: boolean,\n}) => string[]\n\nexport const getNewSelectedDimensions: GetNewSelectedDimensions = ({\n  allDimensions,\n  selectedDimensions,\n  clickedDimensionName,\n  isModifierKeyPressed,\n}) => {\n  // when selectedDimensions is empty, then all dimensions should be enabled\n  // let's narrow this case now\n  const enabledDimensions = selectedDimensions.length === 0 ? allDimensions : selectedDimensions\n  const isCurrentlySelected = enabledDimensions.includes(clickedDimensionName)\n\n  let newSelectedDimensions: string[]\n  if (!isModifierKeyPressed\n    && ((isCurrentlySelected && enabledDimensions.length > 1) || !isCurrentlySelected)\n  ) {\n    newSelectedDimensions = [clickedDimensionName]\n  } else if (isCurrentlySelected) { // modifier key pressed\n    newSelectedDimensions = enabledDimensions.filter(\n      (dimension) => dimension !== clickedDimensionName,\n    )\n  } else { // modifier key pressed\n    newSelectedDimensions = enabledDimensions.concat(clickedDimensionName)\n  }\n\n  if (newSelectedDimensions.length === allDimensions.length) {\n    return []\n  }\n  return newSelectedDimensions\n}\n","import { createReducer } from \"redux-act\"\n\nimport { ChartsMetadata } from \"domains/global/types\"\n\nimport { startSnapshotModeAction, stopSnapshotModeAction, isSignedInAction, setOfflineAction } from \"./actions\"\n\nexport type StateT = {\n  isSnapshotMode: boolean\n  snapshotCharts: ChartsMetadata | null\n  snapshotDataPoints: number | null\n  isSignedIn: boolean\n  offline: boolean\n}\n\nexport const initialState: StateT = {\n  isSnapshotMode: false,\n  snapshotCharts: null,\n  snapshotDataPoints: null,\n  isSignedIn: false,\n  offline: false\n}\n\nexport const dashboardReducer = createReducer<StateT>({}, initialState)\n\ndashboardReducer.on(startSnapshotModeAction, (state, { charts, dataPoints }) => ({\n  ...state,\n  snapshotCharts: charts, // todo integrate with /charts result\n  snapshotDataPoints: dataPoints,\n  isSnapshotMode: true,\n}))\n\ndashboardReducer.on(stopSnapshotModeAction, (state) => ({\n  ...state,\n  isSnapshotMode: initialState.isSnapshotMode,\n  snapshotCharts: initialState.snapshotCharts,\n  snapshotDataPoints: initialState.snapshotDataPoints,\n}))\n\ndashboardReducer.on(isSignedInAction, (state, { isSignedIn }) => ({\n  ...state,\n  isSignedIn\n}))\n\ndashboardReducer.on(setOfflineAction, (state, { offline }) => ({\n  ...state,\n  offline\n}))\n","import { combineReducers } from \"redux\"\n\nimport { globalReducer } from \"domains/global/reducer\"\nimport { storeKey as globalKey } from \"domains/global/constants\"\n\nimport { chartReducer } from \"domains/chart/reducer\"\nimport { storeKey as chartKey } from \"domains/chart/constants\"\n\nimport { dashboardReducer } from \"domains/dashboard/reducer\"\nimport { storeKey as dashboardKey } from \"domains/dashboard/constants\"\n\nexport default combineReducers({\n  [globalKey]: globalReducer,\n  [chartKey]: chartReducer,\n\n  // todo lazy-load and inject those reducers, when they are not needed (dashboard.js, cloud)\n  [dashboardKey]: dashboardReducer,\n})\n","import axios from \"axios\"\n\nexport const axiosInstance = axios.create({\n  headers: {\n    \"Cache-Control\": \"no-cache, no-store\",\n    Pragma: \"no-cache\",\n  },\n  withCredentials: true,\n})\n","import axios from \"axios\"\n\nexport const axiosInstance = axios.create({\n  // timeout: 30 * 1000, // todo\n  headers: {\n    \"Cache-Control\": \"no-cache, no-store\",\n    Pragma: \"no-cache\",\n  },\n  withCredentials: true,\n})\n","import {\n  Subject, from, empty,\n} from \"rxjs\"\nimport {\n  mergeMap, tap, catchError, startWith, switchMap,\n} from \"rxjs/operators\"\nimport { CancelTokenSource, Method } from \"axios\"\n\nimport { UnknownStringKeyT } from \"types/common\"\n\nimport { axiosInstance } from \"./axios-instance\"\n\nexport const CHART_UNMOUNTED = \"Chart scrolled out of view\"\n\ninterface FetchInputEvent {\n  url: string\n  method?: Method\n  params?: UnknownStringKeyT\n  data?: UnknownStringKeyT\n  onErrorCallback: (error: Error) => void\n  onSuccessCallback: (data: { [key: string]: unknown }) => void\n  cancelTokenSource?: CancelTokenSource\n}\n\nconst METRICS_TIMEOUT = 15_000\n\nexport const getFetchStream = (concurrentCallsLimit: number) => {\n  const fetch$ = new Subject<FetchInputEvent>()\n  const resetFetch$ = new Subject()\n\n  const handler = mergeMap(({\n    url, method = \"GET\", params = {}, data, onErrorCallback, onSuccessCallback, cancelTokenSource,\n  }: FetchInputEvent) => (\n    from(axiosInstance.request({\n      url,\n      method,\n      params,\n      data,\n      timeout: METRICS_TIMEOUT,\n      cancelToken: cancelTokenSource?.token,\n    })).pipe(\n      tap(({ data: responseData }) => { onSuccessCallback(responseData) }),\n      catchError((error: Error) => {\n        // todo implement error handling to support NETDATA.options.current.retries_on_data_failures\n        if (error?.message !== CHART_UNMOUNTED) {\n          console.warn(\"fetch error\", url) // eslint-disable-line no-console\n        }\n        onErrorCallback(error)\n        return empty()\n      }),\n    )\n  ), concurrentCallsLimit)\n\n  const output = resetFetch$.pipe(\n    startWith(null),\n    switchMap(() => fetch$.pipe(handler)),\n  )\n\n  output.subscribe()\n  return [fetch$, resetFetch$]\n}\n","import { tail, sum, reverse } from \"ramda\"\nimport { ChartData, DygraphData } from \"domains/chart/chart-types\"\n\n/*\nwhen requesting for bigger time interval than available history in the agent,\nwe get only the available range. Dashboard was first designed to not allow zooming-out too much.\nBut we want to show the requested time-range, so to do it consistently, we return nr of points\nwhen making the request, and after getting result, we add `null`s at the beginning\n */\n\ninterface GetCorrectedPointsArg {\n  after: number\n  before: number\n  firstEntry: number\n  points: number\n}\nexport const getCorrectedPoints = ({\n  after,\n  before,\n  firstEntry,\n  points,\n}: GetCorrectedPointsArg) => {\n  const nowInSeconds = Math.round(new Date().valueOf() / 1000)\n  const afterAbsolute = after > 0 ? after : nowInSeconds + after\n  const beforeAbsolute = before > 0 ? before : nowInSeconds + before\n\n  if (afterAbsolute < firstEntry) {\n    // take into account first_entry\n    const realAfter = Math.max(afterAbsolute, firstEntry)\n    const requestedRange = beforeAbsolute - afterAbsolute\n    const availableRange = beforeAbsolute - realAfter\n\n    return Math.round((points * availableRange) / requestedRange)\n  }\n  return null\n}\n\nexport const addPointsDygraph = (data: DygraphData, nrOfPointsToFill: number) => {\n  const viewUpdateEvery = data.view_update_every\n  if (!data.result.data.length) {\n    return data\n  }\n  const firstAddedTimestamp = data.result.data[0][0] - nrOfPointsToFill * viewUpdateEvery\n  const emptyPoint = tail(data.result.labels).map(() => null)\n  const nulls = new Array(nrOfPointsToFill)\n    .fill(null)\n    .map((_, i) => [firstAddedTimestamp + i * viewUpdateEvery, ...emptyPoint])\n  return {\n    ...data,\n    after: data.after - viewUpdateEvery * nrOfPointsToFill,\n    result: {\n      ...data.result,\n      data: nulls.concat(data.result.data),\n    },\n  }\n}\n\nexport const fillMissingData = (data: ChartData, nrOfPointsToFill: number) => {\n  if (data.format === \"json\") {\n    return addPointsDygraph(data as DygraphData, nrOfPointsToFill)\n  }\n  return data\n}\n\nconst emptyArray: number[] = []\nexport const transformResults = (data: ChartData, format: string, shouldRevertFlip: boolean) => {\n  if (format === \"array\" && data.format === \"json\") {\n    if (Array.isArray(data.result)) return data\n\n    const dataResult = shouldRevertFlip\n      ? reverse((data as DygraphData).result.data)\n      : (data as DygraphData).result.data\n    return {\n      ...data,\n      // set proper output type so other functions like fillMissingData work properly\n      format: \"array\",\n      result: dataResult.reduce((acc: number[], pointData: number[]) => {\n        pointData.shift()\n        return [...acc, sum(pointData)]\n      }, emptyArray),\n    }\n  }\n  return data\n}\n\nexport const mapDefaultAggrMethod = (unit: string): string => {\n  if (unit.length === 0) {\n    return \"sum\"\n  }\n  const avgUnits: any = {\n    percentage: true,\n    percent: true,\n    \"rotations/min\": true,\n    ratio: true,\n    seconds: true,\n    \"seconds ago\": true,\n    milliseconds: true,\n    millisec: true,\n    ms: true,\n    \"log2 s\": true,\n    minutes: true,\n    hours: true,\n    interval: true,\n    ticks: true,\n    celsius: true,\n    c: true,\n    mhz: true,\n    hz: true,\n    volts: true,\n    kwh: true,\n    ampere: true,\n    amps: true,\n    dbm: true,\n    value: true,\n    stratum: true,\n    units: true,\n    watt: true,\n    temperature: true,\n    \"random number\": true,\n    rpm: true,\n    quadro: true,\n    \"adv/item\": true,\n    multiplier: true,\n    geforce: true,\n  }\n  if (avgUnits[unit.toLowerCase()]) {\n    return \"avg\"\n  }\n  const avgUnitsRegExes: any = [\".*%.*\", \".*/operation\", \".*/run\", \".*/ run\", \".*/request\"]\n  if (\n    avgUnitsRegExes.some((regEx: string) => {\n      const regExpression = RegExp(regEx, \"i\")\n      return regExpression.test(unit.toLowerCase())\n    })\n  ) {\n    return \"avg\"\n  }\n  return \"sum\"\n}\n","import styled from \"styled-components\"\nimport {\n  getSizeBy, Text, TextSmall, getColor,\n} from \"@netdata/netdata-ui\"\n\nexport const Container = styled.div`\n  width: 100%;\n  height: 100%;\n  min-height: ${getSizeBy(10)};\n  display: flex;\n  flex-flow: row nowrap;\n  padding: ${getSizeBy(2)} ${getSizeBy(2)} ${getSizeBy(2)} ${getSizeBy(2)};\n`\n\nexport const SideContent = styled.div<{ right?: boolean }>`\n  flex-grow: 0;\n  flex-shrink: 0;\n  height: 100%;\n  align-self: stretch;\n`\n\nexport const ContentContainer = styled.div``\n\nexport const HeaderText = styled(Text)<{ error?: boolean; success?: boolean }>`\n  color: ${({ error, success }) => (success && getColor(\"success\"))\n    || (error && getColor(\"error\"))};\n  font-weight: bold;\n  display: block;\n  margin-bottom: ${getSizeBy()};\n`\n\nexport const ContentText = styled(TextSmall)<{ error?: boolean; success?: boolean }>`\n  display: block;\n  color: ${({ error }) => (error && getColor(\"error\")) || getColor(\"border\")};\n`\n","import React from \"react\"\nimport {\n  Container, SideContent, ContentContainer, HeaderText, ContentText,\n} from \"./styled\"\n\ninterface NotificationProps {\n  header?: string\n  leftContent?: React.ReactNode\n  rightContent?: React.ReactNode\n  text?: React.ReactNode\n  className?: string\n  renderContent?: (props: NotificationProps) => React.ReactNode | React.ReactNodeArray | null\n  success?: boolean\n  error?: boolean\n}\n\nexport const UINotification = (props: NotificationProps) => {\n  const {\n    header, text, leftContent, rightContent, renderContent, success, error,\n  } = props\n  return (\n    <Container>\n      {leftContent && <SideContent>{leftContent}</SideContent>}\n      <ContentContainer>\n        {header && (\n          <HeaderText success={success} error={error}>\n            {header}\n          </HeaderText>\n        )}\n        {text && (\n          <ContentText success={success} error={error}>\n            {text}\n          </ContentText>\n        )}\n        {renderContent && renderContent(props)}\n      </ContentContainer>\n      {rightContent && <SideContent right>{rightContent}</SideContent>}\n    </Container>\n  )\n}\n\n// for usage in non-jsx contexts\n// eslint-disable-next-line react/jsx-props-no-spreading\nexport const createUINotification = (props: NotificationProps) => <UINotification {...props} />\n","import styled from \"styled-components\"\nimport { getSizeBy } from \"@netdata/netdata-ui\"\n\nexport const NodeIconContainer = styled.div`\n  width: ${getSizeBy(5)};\n  height: ${getSizeBy(5)};\n  margin-right: ${getSizeBy(2)};\n  display: flex;\n  justify-content: center;\n  align-items: center;\n`\n\nexport const NotificationLink = styled.a`\n  &,\n  &:hover {\n    text-decoration: underline;\n    color: inherit;\n  }\n`\n","import React from \"react\"\nimport { Icon } from \"@netdata/netdata-ui\"\nimport { toast } from \"react-toastify\"\n\nimport { createUINotification } from \"components/ui-notification\"\n\nimport * as S from \"./styled\"\n\nexport const toastOptions = {\n  position: toast.POSITION.BOTTOM_RIGHT,\n  autoClose: 10000,\n  pauseOnFocusLoss: false,\n}\n\nexport const showCloudInstallationProblemNotification = () => {\n  const uiNotification = {\n    header: \"Installation error\",\n    text: \"The installer could not prepare the required dependencies to enable Netdata Cloud\"\n      + \" functionality\",\n  }\n  const notificationComponent = createUINotification({\n    ...uiNotification,\n    error: true,\n    leftContent: (\n      <S.NodeIconContainer>\n        <Icon name=\"gear\" size=\"large\" color=\"error\" />\n      </S.NodeIconContainer>\n    ),\n  })\n  toast.error(notificationComponent, toastOptions)\n}\n\nexport const showCloudConnectionProblemNotification = () => {\n  const uiNotification = {\n    header: \"Connection Problem\",\n    text: (\n      <S.NotificationLink\n        href=\"https://learn.netdata.cloud/docs/agent/packaging/installer#automatic-one-line-installation-script\"\n        target=\"_blank\"\n      >\n        To access Cloud install again your agent via the kickstart script\n      </S.NotificationLink>\n    ),\n  }\n  const notificationComponent = createUINotification({\n    ...uiNotification,\n    error: true,\n    leftContent: (\n      <S.NodeIconContainer>\n        <Icon name=\"gear\" size=\"large\" color=\"error\" />\n      </S.NodeIconContainer>\n    ),\n  })\n  toast.error(notificationComponent, toastOptions)\n}\n","import {\n  mergeAll, pipe, split, mergeRight,\n} from \"ramda\"\nimport { mapIndexed } from \"ramda-adjunct\"\n\nconst defaultUrlOptions = {\n  hash: \"#\",\n  theme: null,\n  help: null,\n  mode: \"live\", // 'live', 'print'\n  update_always: false,\n  pan_and_zoom: false,\n  server: null,\n  after: 0,\n  before: 0,\n  highlight: false,\n  highlight_after: 0,\n  highlight_before: 0,\n  nowelcome: false,\n  show_alarms: false,\n  chart: null,\n  family: null,\n  alarm: null,\n  alarm_unique_id: 0,\n  alarm_id: 0,\n  alarm_event_id: 0,\n  alarm_when: 0,\n} as {[key: string]: unknown}\n\nconst isInvalidPair = ([key, value]: [string, string]) => (\n  defaultUrlOptions[key] === undefined || value === undefined\n)\n\nconst parseQueryPair = ([key, value]: [string, string]): {[key: string] : unknown} => {\n  if (isInvalidPair([key, value])) {\n    return {}\n  }\n  return {\n    [key]: decodeURIComponent(value),\n  }\n}\n\nexport const parseUrl = pipe(\n  split(\";\"),\n  mapIndexed((value, index) => (\n    (index === 0) ? { hash: value } : parseQueryPair((value.split(\"=\") as [string, string]))\n  )),\n  mergeAll,\n  mergeRight(defaultUrlOptions),\n)\n\nconst urlParsed = parseUrl(document.location.hash)\n\nexport const isPrintMode = urlParsed.mode === \"print\"\n","import {\n  call,\n  put,\n  takeEvery,\n  select,\n  spawn,\n  take,\n  delay,\n} from \"redux-saga/effects\"\nimport { channel } from \"redux-saga\"\nimport { Action } from \"redux-act\"\n\nimport { axiosInstance } from \"utils/api\"\nimport { alwaysEndWithSlash, serverDefault } from \"utils/server-detection\"\nimport { getFetchStream } from \"utils/netdata-sdk\"\nimport { isMainJs } from \"utils/env\"\nimport { fillMissingData, transformResults } from \"utils/fill-missing-data\"\nimport {\n  showCloudInstallationProblemNotification, showCloudConnectionProblemNotification,\n} from \"components/notifications\"\nimport { selectGlobalPanAndZoom, selectSnapshot, selectRegistry } from \"domains/global/selectors\"\nimport { StateT as GlobalStateT } from \"domains/global/reducer\"\nimport { stopSnapshotModeAction } from \"domains/dashboard/actions\"\nimport { isPrintMode } from \"domains/dashboard/utils/parse-url\"\nimport { INFO_POLLING_FREQUENCY } from \"domains/global/constants\"\n\nimport {\n  fetchDataAction,\n  FetchDataPayload,\n  fetchChartAction,\n  FetchChartPayload,\n  fetchDataForSnapshotAction,\n  FetchDataForSnapshotPayload,\n  fetchInfoAction,\n  FetchInfoPayload,\n  fetchDataCancelAction,\n} from \"./actions\"\nimport { ChartData } from \"./chart-types\"\n\nconst CONCURRENT_CALLS_LIMIT_METRICS = isMainJs ? 30 : 60\nconst CONCURRENT_CALLS_LIMIT_PRINT = 2\nconst CONCURRENT_CALLS_LIMIT_SNAPSHOTS = 1\n\nconst fetchDataResponseChannel = channel()\n\nexport function* watchFetchDataResponseChannel() {\n  while (true) {\n    const action = (yield take(fetchDataResponseChannel))\n\n    // special case - if requested relative timeRange, and during request the mode has been changed\n    // to absolute global-pan-and-zoom, cancel the store update\n    // todo do xss check of data\n    if (action.type === fetchDataAction.success.toString()) {\n      const payload = (action.payload as FetchDataPayload)\n      const { viewRange } = payload.fetchDataParams\n      const [start, end] = viewRange\n      const globalPanAndZoom = (yield select(\n        selectGlobalPanAndZoom,\n      )) as GlobalStateT[\"globalPanAndZoom\"]\n\n      if (globalPanAndZoom\n        && (start <= 0 || end <= 0) // check if they are not timestamps\n      ) {\n        yield put(fetchDataCancelAction({\n          id: payload.id,\n        }))\n        // eslint-disable-next-line no-continue\n        continue\n      }\n    }\n\n    yield put(action)\n  }\n}\n\n// todo construct a new version of key that will be safer to be used in future\n// (while keeping old key supported for some time)\n// perhaps the key could be passed as attribute to the chart, to avoid matching\nconst constructCompatibleKey = (dimensions: undefined | string, options: string) => (\n  // strange transformations for backwards compatibility. old snapshot keys were encoded this way\n  // that empty dimensions were actually \"null\" string\n  `${dimensions === undefined\n    ? \"null\"\n    : encodeURIComponent(dimensions)\n  },${encodeURIComponent(options)}`\n)\n\n// currently BE always transforms data as if `flip` was there\nconst IS_FLIP_RESPECTED_IN_COMPOSITE_CHARTS = false\n\nconst getGroupByValues = (groupBy) => {\n  if (groupBy === \"chart\") return \"node\"\n  if (groupBy === \"node\" || groupBy === \"dimension\") return groupBy\n  return `label=${groupBy}`\n}\n\nconst [fetchMetrics$] = getFetchStream(\n  isPrintMode ? CONCURRENT_CALLS_LIMIT_PRINT : CONCURRENT_CALLS_LIMIT_METRICS,\n)\nfunction* fetchDataSaga({ payload }: Action<FetchDataPayload>) {\n  const {\n    // props for api\n    host, context, chart, format, points, group, gtime, options,\n    after, before, dimensions, labels, postGroupBy, postAggregationMethod,\n    aggrMethod, dimensionsAggrMethod, nodeIDs, httpMethod,\n    groupBy = \"dimension\", // group by node, dimension, or label keys\n    aggrGroups = [],\n    // props for the store\n    fetchDataParams, id, cancelTokenSource,\n  } = payload\n\n  const snapshot = yield select(selectSnapshot)\n  if (snapshot) {\n    // if reading snapshot\n    const dimensionsWithUrlOptions = constructCompatibleKey(dimensions, options)\n    const matchingKey = Object.keys(snapshot.data).find((snapshotKey) => (\n      snapshotKey.startsWith(chart) && snapshotKey.includes(dimensionsWithUrlOptions)\n    ))\n    if (!matchingKey) {\n      // eslint-disable-next-line no-console\n      console.warn(`Could not find snapshot key for chart: ${chart} and id ${id}`)\n      return\n    }\n    const data = snapshot.data[matchingKey]\n    yield put(fetchDataAction.success({\n      chartData: data,\n      fetchDataParams,\n      id,\n    }))\n    return\n  }\n\n  const url = isMainJs\n    ? `${alwaysEndWithSlash(host)}api/v1/data`\n    : host\n\n  const agentOptionsOriginal = options.split(\"|\")\n  const hasFlip = agentOptionsOriginal.includes(\"flip\")\n  const shouldAddFakeFlip = !IS_FLIP_RESPECTED_IN_COMPOSITE_CHARTS && !hasFlip\n  // if flip is not respected in composite-charts, send it always (like dygraph charts normally do)\n  const agentOptions = shouldAddFakeFlip\n    ? agentOptionsOriginal.concat(\"flip\") : agentOptionsOriginal\n\n  const groupValues = [\n    getGroupByValues(groupBy),\n    postGroupBy && `label=${postGroupBy}`,\n  ].filter(Boolean)\n\n  const axiosOptions = httpMethod === \"POST\" ? {\n    // used by cloud's room-overview\n    data: {\n      filter: {\n        nodeIDs,\n        context,\n        dimensions: dimensions ? dimensions.split(/['|]/) : undefined,\n        labels,\n      },\n      after,\n      before,\n      points,\n      group,\n      gtime,\n      agent_options: agentOptions,\n      ...(postAggregationMethod && { post_aggregation_methods: [postAggregationMethod] }),\n      aggregations: [groupBy !== \"dimension\" && {\n        method: dimensionsAggrMethod || \"sum\",\n        groupBy: [\"chart\", ...groupValues],\n      },\n      groupBy !== \"chart\" && {\n        method: aggrMethod,\n        groupBy: groupValues,\n        ...(aggrGroups.length && { labels: aggrGroups }),\n      }].filter(Boolean),\n    },\n  } : {\n    params: {\n      chart,\n      _: new Date().valueOf(),\n      format,\n      points,\n      group,\n      gtime,\n      options,\n      after,\n      before,\n      dimensions,\n    },\n  }\n\n  const onSuccessCallback = (data: { [id: string]: unknown}) => {\n    if (!data?.result) {\n      fetchDataResponseChannel.put(fetchDataAction.failure({ id }))\n    } else {\n      const { fillMissingPoints } = fetchDataParams\n\n      const transformedResults = transformResults(\n        (data as unknown) as ChartData,\n        format,\n        shouldAddFakeFlip,\n      )\n\n      const chartData = {\n        ...transformedResults,\n        // @ts-ignore\n        ...((\"post_aggregated_data\" in data.result) && {\n          postAggregationMethod,\n          groupBy,\n          postGroupBy,\n          aggrGroups,\n          // @ts-ignore\n          postAggregated: data.result.post_aggregated_data[postAggregationMethod],\n        }),\n      }\n\n      fetchDataResponseChannel.put(fetchDataAction.success({\n        chartData: fillMissingPoints\n          ? fillMissingData(chartData as ChartData, fillMissingPoints)\n          : chartData,\n        fetchDataParams,\n        id,\n      }))\n    }\n  }\n\n  const onErrorCallback = (error: Error) => {\n    console.warn(\"fetch chart data failure\", error) // eslint-disable-line no-console\n    fetchDataResponseChannel.put(fetchDataAction.failure({ id }))\n  }\n\n  fetchMetrics$.next({\n    ...axiosOptions,\n    method: httpMethod || \"GET\",\n    url,\n    onErrorCallback,\n    onSuccessCallback,\n    cancelTokenSource,\n  })\n}\n\nconst [fetchForSnapshot$, resetFetchForSnapshot$] = getFetchStream(CONCURRENT_CALLS_LIMIT_SNAPSHOTS)\nfunction fetchDataForSnapshotSaga({ payload }: Action<FetchDataForSnapshotPayload>) {\n  const {\n    host, chart, format, points, group, gtime, options,\n    after, before, dimensions, aggrMethod,\n    groupBy,\n    nodeIDs,\n    chartLibrary, id,\n  } = payload\n\n  // backwards-compatibility, the keys look like this:\n  // net_errors.stf0,dygraph,null,ms%7Cflip%7Cjsonwrap%7Cnonzero\n  const chartDataUniqueID = `${chart},${chartLibrary},${constructCompatibleKey(\n    dimensions,\n    options,\n  )}`\n\n  const url = `${alwaysEndWithSlash(host)}api/v1/data`\n  const params = {\n    chart,\n    _: new Date().valueOf(),\n    format,\n    points,\n    group,\n    gtime,\n    options,\n    after,\n    before,\n    dimensions,\n    ...(aggrMethod && { aggr_method: aggrMethod }),\n    ...(nodeIDs && { node_ids: nodeIDs.join(\",\") }),\n    ...(groupBy && { groupBy }),\n  }\n\n  const onSuccessCallback = (data: unknown) => {\n    fetchDataResponseChannel.put(fetchDataForSnapshotAction.success({\n      snapshotData: data,\n      id,\n    }))\n    // temporarily, until main.js finished rewrite\n    // @ts-ignore\n    window.chartUpdated({\n      chartDataUniqueID,\n      data,\n    })\n  }\n\n  const onErrorCallback = () => {\n    fetchDataResponseChannel.put(fetchDataForSnapshotAction.failure({ id }))\n    // @ts-ignore\n    window.chartUpdated({\n      chartDataUniqueID,\n      chart,\n      data: null,\n    })\n  }\n\n  fetchForSnapshot$.next({\n    url,\n    params,\n    onErrorCallback,\n    onSuccessCallback,\n  })\n}\n\nfunction stopSnapshotModeSaga() {\n  // any calls in the queue should stop when save-snapshot modal is closed\n  resetFetchForSnapshot$.next()\n}\n\nfunction* fetchChartSaga({ payload }: Action<FetchChartPayload>) {\n  const { chart, id, host } = payload\n\n  const snapshot = yield select(selectSnapshot)\n  if (snapshot) {\n    yield put(fetchChartAction.success({\n      chartMetadata: snapshot.charts.charts[chart],\n      id,\n    }))\n    return\n  }\n\n  let response\n  const url = isMainJs\n    ? `${alwaysEndWithSlash(host)}api/v1/chart`\n    : host.replace(\"/data\", \"/chart\")\n  try {\n    response = yield call(axiosInstance.get, url, {\n      params: {\n        chart,\n      },\n    })\n  } catch (e) {\n    console.warn(\"fetch chart details failure\") // eslint-disable-line no-console\n    yield put(fetchChartAction.failure({ id }))\n    return\n  }\n  yield put(fetchChartAction.success({\n    chartMetadata: response.data,\n    id,\n  }))\n}\n\nfunction* fetchInfoSaga({ payload }: Action<FetchInfoPayload>) {\n  const { poll } = payload\n  let isCloudEnabled = false\n  let isAgentClaimed = false\n  let isCloudAvailable = false\n  let isACLKAvailable = false\n\n  try {\n    const registry: GlobalStateT[\"registry\"] = yield select(selectRegistry)\n    const wasCloudAvailable = registry?.isCloudAvailable\n    const wasACLKAvailable = registry?.isACLKAvailable\n\n    const { data } = yield call(axiosInstance.get, `${serverDefault}/api/v1/info`)\n    isCloudAvailable = data?.[\"cloud-available\"] || false\n    isCloudEnabled = data?.[\"cloud-enabled\"] || false\n    isAgentClaimed = data?.[\"agent-claimed\"] || false\n    isACLKAvailable = data?.[\"aclk-available\"] || false\n\n    yield put(fetchInfoAction.success({\n      isCloudAvailable, isCloudEnabled, isAgentClaimed, isACLKAvailable, fullInfoPayload: data,\n    }))\n\n    if (isCloudEnabled && (wasCloudAvailable === null) && !isCloudAvailable) {\n      // show only once per session\n      showCloudInstallationProblemNotification()\n    }\n    if (isCloudAvailable && isAgentClaimed && (wasACLKAvailable !== false) && !isACLKAvailable) {\n      // show at session-init and if we see a change of isACLKAvailable from true to false\n      showCloudConnectionProblemNotification()\n    }\n    // TODO: No success notification spec`ed?\n    // else if (!wasACLKAvailable && isACLKAvailable) {\n    //   toast.success(\"Connected to the Cloud!\", {\n    //     position: \"bottom-right\",\n    //     type: toast.TYPE.SUCCESS,\n    //     autoClose: NOTIFICATIONS_TIMEOUT,\n    //   })\n    // }\n  } catch (e) {\n    console.warn(\"fetch agent info failure\") // eslint-disable-line no-console\n    yield put(fetchInfoAction.failure())\n  }\n\n  if (poll && isCloudEnabled && isAgentClaimed) {\n    yield delay(INFO_POLLING_FREQUENCY)\n    yield put(fetchInfoAction({ poll: true }))\n  }\n}\n\n\nexport function* chartSagas() {\n  yield takeEvery(fetchDataAction.request, fetchDataSaga)\n  yield takeEvery(fetchChartAction.request, fetchChartSaga)\n  yield takeEvery(fetchDataForSnapshotAction.request, fetchDataForSnapshotSaga)\n  yield takeEvery(stopSnapshotModeAction, stopSnapshotModeSaga)\n  yield takeEvery(fetchInfoAction.request, fetchInfoSaga)\n  yield spawn(watchFetchDataResponseChannel)\n}\n","export const sidePanelTransitionTimeInSeconds = 0.2\n","import { sortBy, prop, last } from \"ramda\"\nimport { Action } from \"redux-act\"\nimport {\n  call, delay, spawn, take, takeEvery, put,\n} from \"redux-saga/effects\"\n\nimport { axiosInstance } from \"utils/api\"\nimport { serverStatic } from \"utils/server-detection\"\nimport { name2id } from \"utils/name-2-id\"\n\nimport {\n  startAlarmsAction, StartAlarmsPayload, fetchAllAlarmsAction, updateActiveAlarmsAction,\n} from \"./actions\"\nimport { AlarmLogs, AlarmLog, ActiveAlarms } from \"./types\"\n\nconst ALARMS_INITIALIZATION_DELAY = 1000\nconst ALARMS_UPDATE_EVERY = 10000 // the time in ms between alarm checks\nconst CHART_DIV_OFFSET = -50\n\n// firefox moves the alarms off-screen (above, outside the top of the screen)\n// if alarms are shown faster than: one per 500ms\nconst ALARMS_MS_BETWEEN_NOTIFICATIONS = 500\n\n// equal to old NETDATA.alarms.notifications\nconst areNotificationsAvailable = \"Notification\" in window\n\nconst notificationCallback = window.netdataAlarmsNotifCallback\n\n\n// todo this doesn't change in the session, but should be moved to the redux state anyway\nlet firstNotificationId = 0\nlet lastNotificationId = 0\n\n\nconst scrollToChart = (chartID: unknown): boolean => {\n  if (typeof chartID === \"string\") {\n    const chartElement = document.querySelector(`#chart_${name2id(chartID)}`)\n    if (chartElement) {\n      const offset = (chartElement as HTMLDivElement).offsetTop + CHART_DIV_OFFSET;\n      (document.querySelector(\"html\") as HTMLElement).scrollTop = offset\n      return true\n    }\n  }\n  return false\n}\n\n// perhaps sagas are not the best place for this\nconst scrollToAlarm = (alarm: AlarmLog) => {\n  if (typeof alarm === \"object\") {\n    const hasFoundChart = scrollToChart(alarm.chart)\n    if (hasFoundChart) {\n      window.focus()\n    }\n  }\n}\n\nconst requestPermissions = () => {\n  if (areNotificationsAvailable) {\n    if (Notification.permission === \"default\") {\n      Notification.requestPermission()\n    }\n  }\n}\n\nconst hasGivenNotificationPermissions = () => (areNotificationsAvailable\n  && Notification.permission === \"granted\"\n)\n\nfunction* getLog(lastNotificationIdArg: number, serverDefault: string) {\n  try {\n    const { data } = yield call(\n      axiosInstance.get,\n      `${serverDefault}/api/v1/alarm_log?after=${lastNotificationIdArg}`,\n    )\n    // todo xss check\n    return data\n  } catch (error) {\n    console.warn(\"Error fetching alarms log\", error) // eslint-disable-line no-console\n    return null\n  }\n}\n\ninterface NotificationConfig {\n  notificationTitle: string\n  notificationOptions: NotificationOptions\n  notificationHandler: (event: Event) => void\n}\n// called \"notify\" in old codebase\nconst getNotification = (\n  entry: AlarmLog, activeAlarms: ActiveAlarms, firstNotificationIdArg: number,\n): NotificationConfig | undefined => {\n  if (entry.updated) {\n    // has been updated by another alarm\n    return\n  }\n\n  let valueString = entry.value_string\n  const t = activeAlarms.alarms[`${entry.chart}.${entry.name}`]\n  if (typeof t !== \"undefined\"\n    && entry.status === t.status\n    && typeof t.value_string !== \"undefined\"\n  ) {\n    valueString = t.value_string\n  }\n\n  const name = entry.name.replace(/_/g, \" \")\n  let status = entry.status.toLowerCase()\n  let title = `${name} = ${valueString}`\n  const tag = entry.alarm_id\n  let icon = \"images/banner-icon-144x144.png\"\n  let interaction = false\n  let show = true\n\n  // switch/case left here to simplify refractor (it's very similar to old code)\n  switch (entry.status) {\n    case \"REMOVED\":\n      show = false\n      break\n\n    case \"UNDEFINED\":\n      return\n\n    case \"UNINITIALIZED\":\n      return\n\n    case \"CLEAR\":\n      if (entry.unique_id < firstNotificationIdArg) {\n        // alarm is not current\n        return\n      }\n      if (entry.old_status === \"UNINITIALIZED\" || entry.old_status === \"UNDEFINED\") {\n        // alarm switch to CLEAR from old_status\n        return\n      }\n      if (entry.no_clear_notification) {\n        // alarm is CLEAR but has no_clear_notification flag\n        return\n      }\n      title = `${name} back to normal (${valueString})`\n      icon = \"images/check-mark-2-128-green.png\"\n      interaction = false\n      break\n\n    case \"WARNING\":\n      if (entry.old_status === \"CRITICAL\") {\n        status = `demoted to ${entry.status.toLowerCase()}`\n      }\n\n      icon = \"images/alert-128-orange.png\"\n      interaction = false\n      break\n\n    case \"CRITICAL\":\n      if (entry.old_status === \"WARNING\") {\n        status = `escalated to ${entry.status.toLowerCase()}`\n      }\n\n      icon = \"images/alert-128-red.png\"\n      interaction = true\n      break\n\n    default:\n      console.warn(`invalid alarm status ${entry.status}`) // eslint-disable-line no-console\n      return\n  }\n\n  // filter recipients\n  // if (show) {\n  //   show = NETDATA.alarms.recipientMatches(entry.recipient, NETDATA.alarms.recipients)\n  // }\n\n\n  if (show) {\n    if (typeof notificationCallback === \"function\") {\n      show = notificationCallback(entry)\n    }\n\n    if (show) {\n      // show this notification\n      // eslint-disable-next-line consistent-return\n      return {\n        notificationTitle: title,\n        notificationOptions: {\n          body: `${entry.hostname} - ${entry.chart} (${entry.family}) - ${status}: ${entry.info}`,\n          tag: `${tag}`,\n          requireInteraction: interaction,\n          icon: serverStatic + icon,\n          data: entry,\n        },\n        notificationHandler: (event: Event) => {\n          event.preventDefault()\n          if (event.target) {\n            const { data } = event.target as Notification\n            scrollToAlarm(data)\n          }\n        },\n      }\n    }\n  }\n}\n\nfunction* notifyAll(serverDefault: string, activeAlarms: ActiveAlarms) {\n  const alarmLogs: AlarmLogs = yield call(getLog, lastNotificationId, serverDefault)\n  if (alarmLogs === null || typeof alarmLogs !== \"object\") {\n    console.warn(\"invalid alarms log response\") // eslint-disable-line no-console\n    return\n  }\n\n  if (alarmLogs.length === 0) {\n    console.log(\"received empty alarm log\") // eslint-disable-line no-console\n    return\n  }\n\n  const logsSorted = sortBy(prop(\"unique_id\"), alarmLogs)\n\n  // eslint-disable-next-line camelcase\n  const newLogs = logsSorted.filter(({ unique_id }) => unique_id > lastNotificationId)\n  const notifications = newLogs\n    .map((entry) => (getNotification(entry, activeAlarms, firstNotificationId)))\n    .filter((x) => x !== undefined) as NotificationConfig[]\n\n  for (let i = 0; i < notifications.length; i += 1) {\n    const {\n      notificationTitle, notificationOptions, notificationHandler,\n    } = notifications[i]\n    const notification = new Notification(\n      notificationTitle,\n      notificationOptions,\n    )\n    notification.onclick = notificationHandler\n\n    yield delay(ALARMS_MS_BETWEEN_NOTIFICATIONS)\n  }\n\n  // todo put to redux store\n  lastNotificationId = (last(logsSorted) as AlarmLog).unique_id\n\n  if (typeof window.netdataAlarmsRemember === \"undefined\" || window.netdataAlarmsRemember) {\n    localStorage.setItem(\"last_notification_id\", `${lastNotificationId}`)\n  }\n}\n\n\nfunction* get(what: string, serverDefault: string) {\n  const { data } = yield call(axiosInstance.get, `${serverDefault}/api/v1/alarms?${what}`)\n  if (firstNotificationId === 0 && typeof data.latest_alarm_log_unique_id === \"number\") {\n    firstNotificationId = data.latest_alarm_log_unique_id\n  }\n  return data\n}\n\nfunction* alarmsLoop(serverDefault: string) {\n  while (true) {\n    const activeAlarms = (yield call(get, \"active\", serverDefault)) as ActiveAlarms\n    if (activeAlarms) {\n      yield put(updateActiveAlarmsAction({ activeAlarms }))\n      if (\n        hasGivenNotificationPermissions()\n        // timestamps in seconds\n        && (activeAlarms.latest_alarm_log_unique_id > lastNotificationId)\n      ) {\n        yield call(notifyAll, serverDefault, activeAlarms)\n\n        if (activeAlarms.status === false) {\n          // Health monitoring is disabled on this netdata\n          break\n        }\n      }\n    }\n    yield delay(ALARMS_UPDATE_EVERY)\n  }\n}\n\nfunction* startAlarms() {\n  // make sure we handle that action only once, we don't want multiple intervals/loops\n  const { payload }: { payload: StartAlarmsPayload } = yield take(startAlarmsAction)\n  const { serverDefault } = payload\n\n  yield delay(ALARMS_INITIALIZATION_DELAY)\n\n  lastNotificationId = +(localStorage.getItem(\"last_notification_id\") || lastNotificationId)\n  requestPermissions()\n  yield call(alarmsLoop, serverDefault)\n}\n\ntype FetchAllAlarmsPayload = {\n  callback: (x: unknown) => void,\n  serverDefault: string,\n}\nfunction* fetchAllAlarmsSaga({ payload }: Action<FetchAllAlarmsPayload>) {\n  const { callback, serverDefault } = payload\n  const allAlarms = yield call(get, \"all\", serverDefault)\n  callback(allAlarms)\n}\n\nexport function* alarmsSagas() {\n  yield spawn(startAlarms)\n  yield takeEvery(fetchAllAlarmsAction.request, fetchAllAlarmsSaga)\n}\n","const allowedReferrerDomains = [\n  \"\",\n  \"https://www.google.com/\",\n  \"https://duckduckgo.com/\",\n  \"https://www.reddit.com/\",\n]\n\nexport const isAllowedReferrer = (referrer: string) => allowedReferrerDomains.includes(referrer)\n  || referrer.endsWith(\".my-netdata.io/\")\n  || referrer.startsWith(\"https://github.com/\")\n  || referrer.endsWith(\"netdata.cloud/\")\n  || referrer.startsWith(\"https://app.netdata.cloud/\")\n","import { uniq, filter } from \"ramda\"\nimport {\n  spawn, take, put, takeEvery, call, delay, select,\n} from \"redux-saga/effects\"\nimport { channel } from \"redux-saga\"\nimport { AxiosResponse } from \"axios\"\nimport { Action } from \"redux-act\"\n\nimport { NETDATA_REGISTRY_SERVER } from \"utils/utils\"\nimport { axiosInstance } from \"utils/api\"\nimport { isDemo } from \"utils/is-demo\"\nimport { sidePanelTransitionTimeInSeconds } from \"components/space-panel/settings\"\nimport { fetchInfoAction } from \"domains/chart/actions\"\n\nimport {\n  fetchHelloAction,\n  FetchHelloPayload,\n  windowFocusChangeAction,\n  updatePersonUrlsAction,\n  SetOptionAction,\n  setOptionAction,\n  setSpacePanelStatusAction,\n  SetSpacePanelStatusActionPayload,\n  setSpacePanelTransitionEndAction,\n  HelloResponse,\n  accessRegistrySuccessAction,\n} from \"./actions\"\nimport { alarmsSagas } from \"./alarms-sagas\"\nimport { MASKED_DATA } from \"./constants\"\nimport { selectFullInfoPayload } from \"./selectors\"\nimport { isAllowedReferrer } from \"./utils\"\nimport { InfoPayload } from \"./__mocks__/info-mock\"\n\nconst windowFocusChannel = channel()\n\nexport function listenToWindowFocus() {\n  window.addEventListener(\"focus\", () => {\n    windowFocusChannel.put(windowFocusChangeAction({ hasWindowFocus: true }))\n  })\n  window.addEventListener(\"blur\", () => {\n    windowFocusChannel.put(windowFocusChangeAction({ hasWindowFocus: false }))\n  })\n}\n\nexport function* watchWindowFocusChannel() {\n  while (true) {\n    const action = yield take(windowFocusChannel)\n    yield put(action)\n  }\n}\n\nfunction* waitForFullInfoPayload() {\n  return (yield take(fetchInfoAction.success)).payload.fullInfoPayload\n}\n\nfunction* injectPosthog(machineGuid: string, personGuid?: string) {\n  if (window.posthog) {\n    return\n  }\n  const info: InfoPayload = (yield select(selectFullInfoPayload))\n    || (yield call(waitForFullInfoPayload))\n    || {}\n\n  /* eslint-disable */\n  // @ts-ignore\n  !function(t,e){var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(\".\");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement(\"script\")).type=\"text/javascript\",p.async=!0,p.src=s.api_host+\"/static/array.js\",(r=t.getElementsByTagName(\"script\")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a=\"posthog\",u.people=u.people||[],u.toString=function(t){var e=\"posthog\";return\"posthog\"!==a&&(e+=\".\"+a),t||(e+=\" (stub)\"),e},u.people.toString=function(){return u.toString(1)+\".people (stub)\"},o=\"capture identify alias people.set people.set_once set_config register register_once unregister opt_out_capturing has_opted_out_capturing opt_in_capturing reset isFeatureEnabled onFeatureFlags\".split(\" \"),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[]);\n  /* eslint-enable */\n  window.posthog.init(\"mqkwGT0JNFqO-zX2t0mW6Tec9yooaVu7xCBlXtHnt5Y\", {\n    api_host: \"https://app.posthog.com\",\n    loaded: (posthog: any) => {\n      if (personGuid) {\n        posthog.identify(personGuid)\n      }\n    },\n  })\n  const shouldMaskReferrer = !isDemo && !isAllowedReferrer(document.referrer)\n  const MASKED = \"masked\"\n  window.posthog.register(\n    // remove properties with unavailable values\n    filter((value) => value !== undefined && value !== null,\n      {\n        $ip: \"127.0.0.1\",\n        $current_url: isDemo ? null : \"agent dashboard\",\n        $pathname: isDemo ? null : \"netdata-dashboard\",\n        $host: isDemo ? null : \"dashboard.netdata.io\",\n\n        $initial_referring_domain: shouldMaskReferrer ? MASKED : null,\n        $initial_referrer: shouldMaskReferrer ? MASKED : null,\n        $referring_domain: shouldMaskReferrer ? MASKED : null,\n        $referrer: shouldMaskReferrer ? MASKED : null,\n\n        event_source: \"agent dashboard\",\n\n        netdata_version: info.version,\n        netdata_machine_guid: machineGuid,\n        netdata_person_id: personGuid || \"Unavailable\",\n        netdata_buildinfo: info[\"buildinfo\"],\n        netdata_release_channel: info[\"release-channel\"],\n        mirrored_host_count: info.mirrored_hosts?.length,\n        alarms_normal: info.alarms?.normal,\n        alarms_warning: info.alarms?.warning,\n        alarms_critical: info.alarms.critical,\n        host_os_name: info.os_name,\n        host_os_id: info.os_id,\n        host_os_id_like: info.os_id_like,\n        host_os_version: info.os_version,\n        host_os_version_id: info.os_version_id,\n        host_os_detection: info.os_detection,\n        system_cores_total: info.cores_total,\n        system_total_disk_space: info.total_disk_space,\n        system_cpu_freq: info.cpu_freq,\n        system_ram_total: info.ram_total,\n        system_kernel_name: info.kernel_name,\n        system_kernel_version: info.kernel_version,\n        system_architecture: info.architecture,\n        system_virtualization: info.virtualization,\n        system_virt_detection: info.virt_detection,\n        system_container: info.container,\n        system_container_detection: info.container_detection,\n        container_os_name: info.container_os_name,\n        container_os_id: info.container_os_id,\n        container_os_id_like: info.container_os_id_like,\n        container_os_version: info.container_os_version,\n        container_os_version_id: info.container_os_version_id,\n        host_collectors_count: info.collectors.length,\n        host_cloud_enabled: info[\"cloud-enabled\"],\n        host_cloud_available: info[\"cloud-available\"],\n        host_agent_claimed: info[\"agent-claimed\"],\n        host_aclk_available: info[\"aclk-available\"],\n        host_aclk_implementation: info[\"aclk-implementation\"],\n        host_allmetrics_json_used: info[\"allmetrics-json-used\"],\n        host_allmetrics_prometheus_used: info[\"allmetrics-prometheus-used\"],\n        host_allmetrics_shell_used: info[\"allmetrics-shell-used\"],\n        host_charts_count: info[\"charts-count\"],\n        host_dashboard_used: info[\"dashboard-used\"],\n        host_metrics_count: info[\"metrics-count\"],\n        host_notification_methods: info[\"notification-methods\"],\n        config_memory_mode: info[\"memory-mode\"],\n        config_exporting_enabled: info[\"exporting-enabled\"],\n        config_exporting_connectors: info[\"exporting-connectors\"],\n        config_hosts_available: info[\"hosts-available\"],\n        config_https_enabled: info[\"https-enabled\"],\n        config_multidb_disk_quota: info[\"multidb-disk-quota\"],\n        config_page_cache_size: info[\"page-cache-size\"],\n        config_stream_enabled: info[\"stream-enabled\"],\n        config_web_enabled: info[\"web-enabled\"],\n        // eslint-disable-next-line camelcase\n        host_is_parent: info.host_labels?._is_parent,\n        mirrored_hosts_reachable: info.mirrored_hosts_status\n          .filter(({ reachable }) => reachable).length,\n        mirrored_hosts_unreachable: info.mirrored_hosts_status\n          .filter(({ reachable }) => !reachable).length,\n        host_collectors: info.collectors,\n        host_is_k8s_node: info.is_k8s_node,\n      }),\n  )\n}\n\nexport type PersonUrl = [\n  string, // guid\n  string, // url\n  number, // last timestamp (ms)\n  number, // accesses\n  string // name\n]\n\ntype AccessRegistryResponse = null | {\n  personGuid?: string\n  registryServer: string\n  urls?: PersonUrl[]\n}\n\ntype AccessRegistry = (args: {\n  machineGuid: string\n  maxRedirects: number\n  name: string\n  registryServer: string\n  url: string\n}) => Promise<AccessRegistryResponse>\nconst accessRegistry: AccessRegistry = ({\n  machineGuid, maxRedirects, name, registryServer, url,\n}) => axiosInstance.get(`${registryServer}/api/v1/registry`, {\n  headers: {\n    \"Cache-Control\": \"no-cache, no-store\",\n    Pragma: \"no-cache\",\n  },\n  params: {\n    action: \"access\",\n    machine: machineGuid,\n    name,\n    url,\n  },\n  withCredentials: true, // required for the cookie\n}).then(({ data }) => {\n  // todo xss check\n  const isRedirect = typeof data.registry === \"string\"\n\n  let returnData = data\n  if (typeof data.status !== \"string\" || data.status !== \"ok\") {\n    // todo throw error (409 in old dashboard)\n    returnData = null\n  }\n\n  if (returnData === null) {\n    if (isRedirect && maxRedirects > 0) {\n      return accessRegistry({\n        maxRedirects: maxRedirects - 1,\n        machineGuid,\n        name,\n        registryServer: data.registry,\n        url,\n      })\n    }\n    return { registryServer }\n  }\n  const urls = data.urls.filter((u: [string, string]) => u[1] !== MASKED_DATA)\n  return {\n    personGuid: data.person_guid || null,\n    registryServer,\n    urls,\n  }\n}).catch(() => {\n  // todo handle error in better way (410 in old dashboard)\n  console.warn(\"error calling registry:\", registryServer) // eslint-disable-line no-console\n  return null\n})\n\nexport interface RegistryMachine {\n  guid: string\n  url: string\n  lastTimestamp: number\n  accesses: number\n  name: string\n  alternateUrls: string[]\n}\n\ntype ParsePersonUrls = (\n  personUrls: PersonUrl[]\n) => {\n  registryMachines: { [key: string]: RegistryMachine }\n  registryMachinesArray: RegistryMachine[]\n}\nexport const parsePersonUrls: ParsePersonUrls = (personUrls) => {\n  // todo main.js is using registryMachines, but should use only the array\n  const registryMachines: { [key: string]: RegistryMachine } = {}\n\n  personUrls\n    .slice()\n    .reverse()\n    .forEach(([guid, url, lastTimestamp, accesses, name]: PersonUrl) => {\n      const existingObj = registryMachines[guid] || {\n        lastTimestamp: 0,\n        accesses: 0,\n        alternateUrls: [],\n        guid: \"\",\n        url: \"\",\n        name: \"\"\n      }\n      const isNewer = existingObj.lastTimestamp < lastTimestamp\n      const extended: RegistryMachine = {\n        guid: existingObj.guid || guid,\n        url: isNewer ? url : existingObj.url,\n        lastTimestamp: isNewer ? lastTimestamp : existingObj.lastTimestamp,\n        accesses: existingObj.accesses + accesses,\n        name: isNewer ? name : existingObj.name,\n        alternateUrls: existingObj.alternateUrls.concat(url),\n      }\n      registryMachines[guid] = extended\n    })\n\n  const registryMachinesArray = uniq(\n    // not sure if reverse is needed, but it was in old dashboard\n    personUrls\n      .slice()\n      .reverse()\n      .map(([guid]: PersonUrl) => guid),\n  ).map((guid) => registryMachines[guid])\n  return {\n    registryMachines,\n    registryMachinesArray,\n  }\n}\n\nfunction* fetchHelloSaga({ payload }: Action<FetchHelloPayload>) {\n  const { serverDefault } = payload\n  const helloCallUrl = `${serverDefault}api/v1/registry?action=hello`\n  let response: AxiosResponse<HelloResponse>\n  try {\n    response = yield call(axiosInstance.get, helloCallUrl, {\n      headers: {\n        \"Cache-Control\": \"no-cache, no-store\",\n        Pragma: \"no-cache\",\n      },\n      withCredentials: true,\n    })\n  } catch (error) {\n    console.warn(\"error accessing registry or Do-Not-Track is enabled\") // eslint-disable-line\n    yield put(fetchHelloAction.failure())\n    return\n  }\n  const cloudBaseURL = response.data.cloud_base_url\n  const { hostname } = response.data\n  const machineGuid = response.data.machine_guid\n  const registryServer = response.data.registry\n  const isUsingGlobalRegistry = registryServer === NETDATA_REGISTRY_SERVER\n\n  yield put(fetchHelloAction.success({\n    cloudBaseURL,\n    hostname,\n    isUsingGlobalRegistry,\n    machineGuid,\n  }))\n\n  const name = isUsingGlobalRegistry ? MASKED_DATA : hostname\n  const url = isUsingGlobalRegistry ? MASKED_DATA : serverDefault\n\n  // now make access call - max_redirects, callback, etc...\n  const accessRegistryResponse: AccessRegistryResponse = yield call(accessRegistry, {\n    machineGuid,\n    maxRedirects: 2,\n    name,\n    registryServer,\n    url,\n  })\n\n  if (response.data.anonymous_statistics) {\n    yield spawn(injectPosthog, response.data.machine_guid, accessRegistryResponse?.personGuid)\n  }\n\n  if (accessRegistryResponse?.urls && accessRegistryResponse?.personGuid) {\n    const personUrls = parsePersonUrls(accessRegistryResponse.urls)\n    const { registryMachines, registryMachinesArray } = personUrls\n    yield put(updatePersonUrlsAction({\n      personGuid: accessRegistryResponse.personGuid,\n      registryMachines,\n      registryMachinesArray,\n    }))\n  }\n\n  yield put(accessRegistrySuccessAction({\n    registryServer: accessRegistryResponse?.registryServer || registryServer,\n  }))\n}\n\nconst constructOptionStorageKey = (key: string) => `options.${key}`\nfunction setOptionSaga({ payload }: Action<SetOptionAction>) {\n  const { key, value } = payload\n  if (key === \"stop_updates_when_focus_is_lost\") {\n    // old dashboard was saving that property to localStorage, but was always omitting it when\n    // reading. it was only possible to persist this setting via url (update_always hash param)\n    return\n  }\n  localStorage.setItem(constructOptionStorageKey(key), JSON.stringify(value))\n}\n\nfunction* spacePanelSaga({ payload }: Action<SetSpacePanelStatusActionPayload>) {\n  if (payload.isActive) {\n    document.body.className = \"with-panel\"\n  } else {\n    document.body.className = \"\"\n  }\n  yield delay(sidePanelTransitionTimeInSeconds * 1000)\n  yield put(setSpacePanelTransitionEndAction({ isActive: payload.isActive }))\n}\n\nexport function* globalSagas() {\n  yield spawn(listenToWindowFocus)\n  yield spawn(watchWindowFocusChannel)\n  yield takeEvery(fetchHelloAction.request, fetchHelloSaga)\n  yield spawn(alarmsSagas)\n  yield takeEvery(setOptionAction, setOptionSaga)\n  yield takeEvery(setSpacePanelStatusAction, spacePanelSaga)\n}\n","/* eslint-disable camelcase */\n/* eslint-disable operator-linebreak */\nimport { take, takeEvery } from \"redux-saga/effects\"\nimport { Action } from \"redux-act\"\n\nimport {\n  clearHighlightAction,\n  SetGlobalChartUnderlayAction,\n  setGlobalChartUnderlayAction,\n} from \"domains/global/actions\"\nimport {\n  explicitlySignInAction,\n  showSignInModalAction,\n  ShowSignInModalAction,\n} from \"domains/dashboard/actions\"\nimport { setHashParams, getHashParams, removeHashParams } from \"utils/hash-utils\"\n\nexport const LOCAL_STORAGE_NEEDS_SYNC = \"LOCAL-STORAGE-NEEDS-SYNC\"\n\nfunction setGlobalChartUnderlaySaga({ payload }: Action<SetGlobalChartUnderlayAction>) {\n  const { after, before } = payload\n  if (window.urlOptions) {\n    // additional check to prevent loop, after setting initial state from url\n    if (window.urlOptions.after !== after || window.urlOptions.before !== before) {\n      window.urlOptions.netdataHighlightCallback(true, after, before)\n    }\n  } else {\n    // TODO: Consider a setting to control whether the component sets these hash params\n    const hashParams = getHashParams()\n    const highlight_after = Math.round(after).toString()\n    const highlight_before = Math.round(before).toString()\n    if (\n      hashParams.highlight_after !== highlight_after ||\n      hashParams.highlight_before !== highlight_before\n    ) {\n      setHashParams({ highlight_after, highlight_before })\n    }\n  }\n}\n\nfunction clearHighlightSaga() {\n  if (window.urlOptions) {\n    window.urlOptions.netdataHighlightCallback(false, 0, 0)\n  } else {\n    removeHashParams([\"highlight_after\", \"highlight_before\"])\n  }\n}\n\nfunction* showSignInSaga({ payload }: Action<ShowSignInModalAction>) {\n  if (window.showSignInModal) {\n    window.showSignInModal()\n\n    yield take(explicitlySignInAction)\n    const { signInLinkHref } = payload\n    window.localStorage.setItem(LOCAL_STORAGE_NEEDS_SYNC, \"true\")\n    window.location.href = signInLinkHref\n  }\n}\n\nexport function* mainJsSagas() {\n  yield takeEvery(setGlobalChartUnderlayAction, setGlobalChartUnderlaySaga)\n  yield takeEvery(clearHighlightAction, clearHighlightSaga)\n  yield takeEvery(showSignInModalAction, showSignInSaga)\n}\n","import { spawn } from \"redux-saga/effects\"\n\nimport { chartSagas } from \"domains/chart/sagas\"\nimport { globalSagas } from \"domains/global/sagas\"\nimport { mainJsSagas } from \"domains/dashboard/sagas\"\n\nexport function* rootSaga() {\n  yield spawn(globalSagas)\n  yield spawn(chartSagas)\n  yield spawn(mainJsSagas)\n}\n","import { compose, applyMiddleware, createStore } from \"redux\"\nimport createSagaMiddleware from \"redux-saga\"\nimport rootReducer from \"./root-reducer\"\nimport { rootSaga } from \"./root-saga\"\n\nconst sagaMiddleware = createSagaMiddleware()\n\nconst reduxDevTools = process.env.NODE_ENV === \"development\"\n  && window.__REDUX_DEVTOOLS_EXTENSION__\n  // @ts-ignore\n  && window.__REDUX_DEVTOOLS_EXTENSION__({ name: \"Dashboard Charts\" })\n\nconst composeMiddlewaresWithDevTools = () => (reduxDevTools\n  ? compose(applyMiddleware(sagaMiddleware), reduxDevTools)\n  : compose(applyMiddleware(sagaMiddleware)))\n\nexport const configureStore = () => {\n  const store = createStore(\n    rootReducer,\n    composeMiddlewaresWithDevTools(),\n  )\n  sagaMiddleware.run(rootSaga)\n  return store\n}\n\nexport const store = configureStore()\n","import $ from \"jquery\"\n\nwindow.$ = $\nwindow.jQuery = $\n","let loadCssPromise: Promise<void>\n\ntype LoadCss = (href: string) => Promise<void>\nexport const loadCss: LoadCss = (href) => {\n  if (loadCssPromise) {\n    return loadCssPromise\n  }\n  return new Promise((resolve, reject) => {\n    const fileRef = document.createElement(\"link\")\n    fileRef.setAttribute(\"rel\", \"stylesheet\")\n    fileRef.setAttribute(\"type\", \"text/css\")\n    fileRef.setAttribute(\"href\", href)\n\n    fileRef.onload = () => {\n      resolve()\n    }\n\n    fileRef.onerror = () => {\n      reject(Error(`Error loading css: ${href}`))\n    }\n\n    document.getElementsByTagName(\"head\")[0].appendChild(fileRef)\n  })\n}\n","import classNames from \"classnames\"\nimport { Attributes } from \"./transformDataAttributes\"\n\nexport type ChartLibraryName =\n  | \"dygraph\"\n  | \"sparkline\"\n  | \"peity\"\n  | \"google\"\n  // | \"d3\"\n  | \"d3pie\"\n  | \"easypiechart\"\n  | \"gauge\"\n  | \"textonly\"\n  | \"groupbox\"\nexport interface ChartLibraryConfig {\n  aspectRatio?: number\n  format: string\n  hasLegend: (attributes: Attributes) => boolean\n  hasToolboxPanAndZoom?: boolean\n  isLogScale?: (attributes: Attributes) => boolean\n  options: (attributes: Attributes) => string\n  trackColors: boolean\n  pixelsPerPoint: (attributes: Attributes) => number\n  xssRegexIgnore: RegExp\n  containerClass: (attributes: Attributes) => string\n}\nexport type ChartLibrariesSettings = {\n  [key in ChartLibraryName]: ChartLibraryConfig\n}\n\ntype IsDygraphSparkline = (attributes: Attributes) => boolean\nconst isDygraphSparkline: IsDygraphSparkline = (attributes) => (\n  attributes.dygraphTheme === \"sparkline\"\n)\n\nexport const chartLibrariesSettings: ChartLibrariesSettings = {\n  dygraph: {\n    // initialize: window.NETDATA.dygraphInitialize,\n    // create: window.NETDATA.dygraphChartCreate,\n    // update: window.NETDATA.dygraphChartUpdate,\n    // resize(state) {\n    //   if (typeof state.tmp.dygraph_instance !== \"undefined\"\n    //     && typeof state.tmp.dygraph_instance.resize === \"function\") {\n    //     state.tmp.dygraph_instance.resize()\n    //   }\n    // },\n    // setSelection: window.NETDATA.dygraphSetSelection,\n    // clearSelection: window.NETDATA.dygraphClearSelection,\n    hasToolboxPanAndZoom: true,\n    // initialized: false,\n    // enabled: true,\n    xssRegexIgnore: new RegExp(\"^/api/v1/data.result.data$\"),\n    format: \"json\",\n    options(attributes: Attributes) {\n      if (typeof this.isLogScale === \"function\") {\n        // flip - in proper order (from oldest to newest)\n        return `ms|flip${this.isLogScale(attributes) ? \"|abs\" : \"\"}`\n      }\n      return \"\"\n    },\n    hasLegend(attributes: Attributes) {\n      // not using __hasLegendCache__ as in old-dashboard, because performance tweaks like this\n      // probably won't be needed in react app\n      const { legend = true } = attributes\n      return !isDygraphSparkline(attributes) && Boolean(legend)\n    },\n    // autoresize(state) {\n    //   void (state)\n    //   return true\n    // },\n    // max_updates_to_recreate(state) {\n    //   void (state)\n    //   return 5000\n    // },\n    trackColors: true,\n    pixelsPerPoint: ((attributes: Attributes) => (isDygraphSparkline(attributes) ? 2 : 3)),\n    // pixels_per_point(state) {\n    //   return (this.isSparkline(state) === false) ? 3 : 2\n    // },\n    isLogScale(attributes: Attributes) {\n      return attributes.dygraphTheme === \"logscale\"\n    },\n    containerClass(attributes: Attributes) {\n      return this.hasLegend(attributes)\n        ? classNames(\n          \"netdata-container-with-legend\",\n          attributes.legendPosition === \"bottom\" && \"netdata-container-with-legend--bottom\",\n        )\n        : \"netdata-container\"\n    },\n    // container_class(state) {\n    //   if (this.legend(state) !== null) {\n    //     return \"netdata-container-with-legend\"\n    //   }\n    //   return \"netdata-container\"\n    // },\n  },\n  sparkline: {\n  //   initialize: window.NETDATA.sparklineInitialize,\n  //   create: window.NETDATA.sparklineChartCreate,\n  //   update: window.NETDATA.sparklineChartUpdate,\n  //   resize: null,\n  //   setSelection: undefined, // function(state, t) { void(state); return true; },\n  //   clearSelection: undefined, // function(state) { void(state); return true; },\n    hasToolboxPanAndZoom: false,\n    //   initialized: false,\n    //   enabled: true,\n    xssRegexIgnore: new RegExp(\"^/api/v1/data.result$\"),\n    format: \"array\",\n    options: () => \"flip|abs\",\n    hasLegend: () => false,\n    //   autoresize(state) {\n    //     void (state)\n    //     return false\n    //   },\n    //   max_updates_to_recreate(state) {\n    //     void (state)\n    //     return 5000\n    //   },\n    trackColors: false,\n    pixelsPerPoint: () => 3,\n    containerClass: () => \"netdata-container\",\n  },\n  peity: {\n    // initialize: window.NETDATA.peityInitialize,\n    // create: window.NETDATA.peityChartCreate,\n    // update: window.NETDATA.peityChartUpdate,\n    // resize: null,\n    // setSelection: undefined, // function(state, t) { void(state); return true; },\n    // clearSelection: undefined, // function(state) { void(state); return true; },\n    hasToolboxPanAndZoom: false,\n    // initialized: false,\n    // enabled: true,\n    xssRegexIgnore: new RegExp(\"^/api/v1/data.result$\"),\n    format: \"ssvcomma\",\n    options: () => \"null2zero|flip|abs\",\n    hasLegend: () => false,\n    // autoresize(state) {\n    //   void (state)\n    //   return false\n    // },\n    // max_updates_to_recreate(state) {\n    //   void (state)\n    //   return 5000\n    // },\n    trackColors: false,\n    pixelsPerPoint: () => 3,\n    containerClass: () => \"netdata-container\",\n  },\n  google: {\n    // initialize: window.NETDATA.googleInitialize,\n    // create: window.NETDATA.googleChartCreate,\n    // update: window.NETDATA.googleChartUpdate,\n    // resize: null,\n    // setSelection: undefined, // function(state, t) { void(state); return true; },\n    // clearSelection: undefined, // function(state) { void(state); return true; },\n    hasToolboxPanAndZoom: false,\n    // initialized: false,\n    // enabled: true,\n    xssRegexIgnore: new RegExp(\"^/api/v1/data.result.rows$\"),\n    format: \"datatable\",\n    options: () => \"\",\n    hasLegend: () => false,\n    // autoresize(state) {\n    //   void (state)\n    //   return false\n    // },\n    // max_updates_to_recreate(state) {\n    //   void (state)\n    //   return 300\n    // },\n    trackColors: false,\n    pixelsPerPoint: () => 4,\n    containerClass: () => \"netdata-container\",\n  },\n  d3pie: {\n    // initialize: window.NETDATA.d3pieInitialize,\n    // create: window.NETDATA.d3pieChartCreate,\n    // update: window.NETDATA.d3pieChartUpdate,\n    // resize: null,\n    // setSelection: window.NETDATA.d3pieSetSelection,\n    // clearSelection: window.NETDATA.d3pieClearSelection,\n    hasToolboxPanAndZoom: false,\n    xssRegexIgnore: new RegExp(\"^/api/v1/data.result.data$\"),\n    format: \"json\",\n    hasLegend: () => false,\n    options: () => \"objectrows|ms\",\n    // autoresize(state) {\n    //   void (state)\n    //   return false\n    // },\n    // max_updates_to_recreate(state) {\n    //   void (state)\n    //   return 5000\n    // },\n    trackColors: false,\n    pixelsPerPoint: () => 15,\n    containerClass: () => \"netdata-container\",\n  },\n  // d3: {\n  //   initialize: window.NETDATA.d3Initialize,\n  //   create: window.NETDATA.d3ChartCreate,\n  //   update: window.NETDATA.d3ChartUpdate,\n  //   resize: null,\n  //   setSelection: undefined, // function(state, t) { void(state); return true; },\n  //   clearSelection: undefined, // function(state) { void(state); return true; },\n  //   toolboxPanAndZoom: null,\n  //   initialized: false,\n  //   enabled: true,\n  //   xssRegexIgnore: new RegExp(\"^/api/v1/data\\.result.data$\"),\n  //   format(state) {\n  //     void (state)\n  //     return \"json\"\n  //   },\n  //   options(state) {\n  //     void (state)\n  //     return \"\"\n  //   },\n  //   legend(state) {\n  //     void (state)\n  //     return null\n  //   },\n  //   autoresize(state) {\n  //     void (state)\n  //     return false\n  //   },\n  //   max_updates_to_recreate(state) {\n  //     void (state)\n  //     return 5000\n  //   },\n  //   track_colors(state) {\n  //     void (state)\n  //     return false\n  //   },\n  //   pixels_per_point(state) {\n  //     void (state)\n  //     return 3\n  //   },\n  //   container_class(state) {\n  //     void (state)\n  //     return \"netdata-container\"\n  //   },\n  // },\n  easypiechart: {\n  //   initialize: window.NETDATA.easypiechartInitialize,\n  //   create: window.NETDATA.easypiechartChartCreate,\n  //   update: window.NETDATA.easypiechartChartUpdate,\n  //   resize: null,\n  //   setSelection: window.NETDATA.easypiechartSetSelection,\n  //   clearSelection: window.NETDATA.easypiechartClearSelection,\n    hasToolboxPanAndZoom: false,\n    //   initialized: false,\n    //   enabled: true,\n    xssRegexIgnore: new RegExp(\"^/api/v1/data.result$\"),\n    format: \"array\",\n    options() {\n      return \"absolute\"\n    },\n    hasLegend() {\n      return false\n    },\n    //   autoresize(state) {\n    //     void (state)\n    //     return false\n    //   },\n    //   max_updates_to_recreate(state) {\n    //     void (state)\n    //     return 5000\n    //   },\n    trackColors: true,\n    pixelsPerPoint: () => 3,\n    aspectRatio: 100,\n    containerClass: () => \"netdata-container-easypiechart\",\n  },\n  gauge: {\n    // initialize: window.NETDATA.gaugeInitialize,\n    // create: window.NETDATA.gaugeChartCreate,\n    // update: window.NETDATA.gaugeChartUpdate,\n    // resize: null,\n    // setSelection: window.NETDATA.gaugeSetSelection,\n    // clearSelection: window.NETDATA.gaugeClearSelection,\n    hasToolboxPanAndZoom: false,\n    // initialized: false,\n    // enabled: true,\n    xssRegexIgnore: new RegExp(\"^/api/v1/data.result$\"),\n    format: \"array\",\n    options: () => \"absolute\",\n    hasLegend: () => false,\n    // autoresize(state) {\n    //   void (state)\n    //   return false\n    // },\n    // max_updates_to_recreate(state) {\n    //   void (state)\n    //   return 5000\n    // },\n    trackColors: true,\n    pixelsPerPoint: () => 3,\n    aspectRatio: 60,\n    containerClass: () => \"netdata-container-gauge\",\n  },\n  textonly: {\n    // autoresize(state) {\n    //   void (state)\n    //   return false\n    // },\n    containerClass: () => \"netdata-container\",\n    // create: window.NETDATA.textOnlyCreate,\n    // enabled: true,\n    format: \"array\",\n    // initialized: true,\n    // initialize(callback) {\n    //   callback()\n    // },\n    hasLegend: () => false,\n    // max_updates_to_recreate(state) {\n    //   void (state)\n    //   return 5000\n    // },\n    options: () => \"absolute\",\n    pixelsPerPoint: () => 3,\n    trackColors: false,\n    // update: window.NETDATA.textOnlyUpdate,\n    xssRegexIgnore: new RegExp(\"^/api/v1/data.result$\"),\n  },\n  groupbox: {\n    containerClass: () => \"netdata-container\",\n    hasLegend: () => false,\n    options: () => \"absolute\",\n    format: \"json\",\n    trackColors: false,\n    pixelsPerPoint: () => 3,\n    xssRegexIgnore: new RegExp(\"^/api/v1/data.result$\"),\n  },\n}\n","import { Attributes } from \"domains/chart/utils/transformDataAttributes\"\nimport { chartLibrariesSettings } from \"domains/chart/utils/chartLibrariesSettings\"\n\nexport const getChartURLOptions = (\n  attributes: Attributes, shouldEliminateZeroDimensions: boolean,\n) => {\n  const {\n    appendOptions,\n    overrideOptions,\n  } = attributes\n  let ret = \"\"\n\n  ret += overrideOptions\n    ? overrideOptions.toString()\n    : chartLibrariesSettings[attributes.chartLibrary].options(attributes)\n\n  if (typeof appendOptions === \"string\") {\n    ret += `|${encodeURIComponent(appendOptions)}`\n  }\n\n  ret += \"|jsonwrap\"\n\n  if (shouldEliminateZeroDimensions) {\n    ret += \"|nonzero\"\n  }\n\n  if (attributes.dimensionsAggrMethod === \"sum-of-abs\"\n  || (!attributes.dimensionsAggrMethod && attributes.groupBy && attributes.groupBy !== \"dimension\")\n  ) {\n    ret += \"|absolute\"\n  }\n\n  return ret\n}\n","export const BIGGEST_INTERVAL_NUMBER = 2 ** 31 - 1\n","import React from \"react\"\n\nimport { Icon } from \"components/icon\"\n\ninterface Props {\n  containerNode: HTMLElement\n  hasEmptyData: boolean\n}\n\nexport const Loader = ({\n  containerNode,\n  hasEmptyData,\n}: Props) => {\n  // below is 90% of original logic.\n  // since it rerenders when IntersectionObserver turns the chart back on,\n  // it's not that important to detect screen height and container sizes changes\n  const screenHeight = window.screen.height\n\n  // normally we want a font size, as tall as the element\n  let h = containerNode.clientHeight\n\n  // but give it some air, 20% let's say, or 5 pixels min\n  const lost = Math.max(h * 0.2, 5)\n  h -= lost\n\n  // center the text, vertically\n  let paddingTop = (lost - 5) / 2\n\n  // but check the width too\n  // it should fit 10 characters in it\n  const w = containerNode.clientWidth / 10\n  if (h > w) {\n    paddingTop += (h - w) / 2\n    h = w\n  }\n\n  // and don't make it too huge\n  // 5% of the screen size is good\n  if (h > screenHeight / 20) {\n    paddingTop += (h - (screenHeight / 20)) / 2\n    h = screenHeight / 20\n  }\n\n  const label = hasEmptyData ? \" empty\" : \" netdata\"\n  const iconType = hasEmptyData ? \"noData\" : \"loading\"\n\n  return (\n    <div\n      className=\"netdata-message icon\"\n      style={{\n        fontSize: h,\n        paddingTop,\n      }}\n    >\n      <Icon iconType={iconType} />\n      {label}\n    </div>\n  )\n}\n","type GetPanAndZoomStep = (event: React.MouseEvent) => number\nexport const getPanAndZoomStep: GetPanAndZoomStep = (event) => {\n  if (event.ctrlKey) {\n    return window.NETDATA.options.current.pan_and_zoom_factor\n      * window.NETDATA.options.current.pan_and_zoom_factor_multiplier_control\n  } if (event.shiftKey) {\n    return window.NETDATA.options.current.pan_and_zoom_factor\n      * window.NETDATA.options.current.pan_and_zoom_factor_multiplier_shift\n  } if (event.altKey) {\n    return window.NETDATA.options.current.pan_and_zoom_factor\n      * window.NETDATA.options.current.pan_and_zoom_factor_multiplier_alt\n  }\n  return window.NETDATA.options.current.pan_and_zoom_factor\n}\n","export const safeEqualCheck = (a: unknown, b: unknown) => {\n  if (a === b) {\n    return true\n  }\n  return Number.isNaN(a as number) && Number.isNaN(b as number)\n}\n","import { identity } from \"ramda\"\nimport { useCallback, useState, useMemo, useRef } from \"react\"\n\nimport { useSelector } from \"store/redux-separate-context\"\nimport { selectTemperatureSetting, selectSecondsAsTimeSetting } from \"domains/global/selectors\"\nimport { unitsConversionCreator } from \"utils/units-conversion\"\nimport { safeEqualCheck } from \"utils/safe-equal-check\"\n\nimport { ChartData } from \"../chart-types\"\nimport { Attributes } from \"./transformDataAttributes\"\n\ntype Converter = (v: number) => number | string\n// only time units are converted into strings, the rest are numbers\n\n// todo - memoization similar to the one as in old dashboard, but probably not needed\nconst formattersFixed: any[] = []\nconst formattersZeroBased: any[] = []\nconst fastNumberFormat = (min: number, max: number) => {\n  const key = max\n  if (min === max) {\n    if (typeof formattersFixed[key] === \"undefined\") {\n      formattersFixed[key] = new Intl.NumberFormat(undefined, {\n        useGrouping: true,\n        minimumFractionDigits: min,\n        maximumFractionDigits: max,\n      })\n    }\n\n    return formattersFixed[key]\n  }\n  if (min === 0) {\n    if (typeof formattersZeroBased[key] === \"undefined\") {\n      formattersZeroBased[key] = new Intl.NumberFormat(undefined, {\n        useGrouping: true,\n        minimumFractionDigits: min,\n        maximumFractionDigits: max,\n      })\n    }\n\n    return formattersZeroBased[key]\n  }\n  // (old dashboard comment)\n  // this is never used\n  // it is added just for completeness\n  return new Intl.NumberFormat(undefined, {\n    useGrouping: true,\n    minimumFractionDigits: min,\n    maximumFractionDigits: max,\n  })\n}\n\nconst getLegendFormatValue =\n  (\n    convertUnits: Converter,\n    intlNumberFormat: Intl.NumberFormat | null,\n    valueDecimalDetail: number\n  ) =>\n  (value: number | string | null) => {\n    if (typeof value !== \"number\") {\n      return \"-\"\n    }\n\n    const convertedValue = convertUnits(value)\n    if (typeof convertedValue !== \"number\") {\n      return convertedValue\n    }\n\n    if (intlNumberFormat !== null) {\n      return intlNumberFormat.format(convertedValue)\n    }\n\n    let dmin\n    let dmax\n    if (valueDecimalDetail !== -1) {\n      dmin = valueDecimalDetail\n      dmax = valueDecimalDetail\n    } else {\n      dmin = 0\n      const abs = convertedValue < 0 ? -convertedValue : convertedValue\n      if (abs > 1000) {\n        dmax = 0\n      } else if (abs > 10) {\n        dmax = 1\n      } else if (abs > 1) {\n        dmax = 2\n      } else if (abs > 0.1) {\n        dmax = 2\n      } else if (abs > 0.01) {\n        dmax = 4\n      } else if (abs > 0.001) {\n        dmax = 5\n      } else if (abs > 0.0001) {\n        dmax = 6\n      } else {\n        dmax = 7\n      }\n    }\n\n    return fastNumberFormat(dmin, dmax).format(convertedValue)\n  }\n\ntype LegendFormatValue = (value: string | number | null) => string | number\n\ninterface Arguments {\n  attributes: Attributes\n  data: ChartData\n  units: string\n  unitsCommon: string | undefined\n  unitsDesired: string\n  uuid: string\n}\nexport const useFormatters = ({\n  attributes,\n  data,\n  units,\n  unitsCommon,\n  unitsDesired,\n  uuid,\n}: Arguments) => {\n  const temperatureSetting = useSelector(selectTemperatureSetting)\n  const secondsAsTimeSetting = useSelector(selectSecondsAsTimeSetting)\n\n  // previously _unitsConversion\n  const [convertUnits, setConvertUnits] = useState<Converter>(() => identity)\n\n  // probably can also be removed\n  const [min, setMin] = useState<number>()\n  const [max, setMax] = useState<number>()\n\n  // todo most of this state is not needed, that hook can be refactored\n  const [unitsCurrent, setUnitsCurrent] = useState<string>(units)\n\n  const [decimals, setDecimals] = useState<number>(-1)\n  const [intlNumberFormat, setIntlNumberFormat] = useState<Intl.NumberFormat | null>(null)\n\n  const {\n    // \"valueDecimalDetail\" in old app\n    decimalDigits = -1,\n  } = attributes\n\n  const legendFormatValue: LegendFormatValue = useMemo(\n    () => getLegendFormatValue(convertUnits, intlNumberFormat, decimalDigits),\n    [convertUnits, decimalDigits, intlNumberFormat]\n  )\n\n  const legendFormatValueRef = useRef(legendFormatValue)\n  const updateLegendFormatValueRef = (\n    newConvertUnits: Converter,\n    newIntlNumberFormat: any,\n    newDecimalDigits: any\n  ) => {\n    legendFormatValueRef.current = getLegendFormatValue(\n      newConvertUnits,\n      newIntlNumberFormat,\n      newDecimalDigits\n    )\n  }\n\n  const legendFormatValueDecimalsFromMinMax = useCallback(\n    (newMin: number, newMax: number) => {\n      if (safeEqualCheck(min, newMin) && safeEqualCheck(max, newMax)) {\n        return legendFormatValueRef.current\n      }\n      // we should call the convertUnits-creation only when original app was doing this\n      // so we don't get new updates in improper places\n      setMin(newMin)\n      setMax(newMax)\n\n      const newConvertUnits = unitsConversionCreator.get(\n        uuid,\n        newMin,\n        newMax,\n        units,\n        unitsDesired,\n        unitsCommon,\n        switchedUnits => {\n          setUnitsCurrent(switchedUnits)\n          // that.legendSetUnitsString(that.units_current);\n          // that.legendSetUnitsString just populates some DOM with unitsCurrent\n          // on all occurrences just take the unitsCurrent from this state\n        },\n        temperatureSetting,\n        secondsAsTimeSetting\n      )\n\n      // as function, so useState() interprets it properly\n      setConvertUnits(() => newConvertUnits)\n\n      const convertedMin = newConvertUnits(newMin)\n      const convertedMax = newConvertUnits(newMax)\n\n      // if number is returned, we format it!!!!\n      if (typeof convertedMin !== \"number\" || typeof convertedMax !== \"number\") {\n        updateLegendFormatValueRef(newConvertUnits, intlNumberFormat, decimalDigits)\n        return legendFormatValueRef.current\n      }\n\n      let newDecimals\n\n      if (data.min === data.max) {\n        // it is a fixed number, let the visualizer decide based on the value\n        newDecimals = -1\n      } else if (decimalDigits !== -1) {\n        // there is an override\n        newDecimals = decimalDigits\n      } else {\n        // ok, let's calculate the proper number of decimal points\n        let delta\n\n        if (convertedMin === convertedMax) {\n          delta = Math.abs(convertedMin)\n        } else {\n          delta = Math.abs(convertedMax - convertedMin)\n        }\n\n        if (delta > 1000) {\n          newDecimals = 0\n        } else if (delta > 10) {\n          newDecimals = 1\n        } else if (delta > 1) {\n          newDecimals = 2\n        } else if (delta > 0.1) {\n          newDecimals = 2\n        } else if (delta > 0.01) {\n          newDecimals = 4\n        } else if (delta > 0.001) {\n          newDecimals = 5\n        } else if (delta > 0.0001) {\n          newDecimals = 6\n        } else {\n          newDecimals = 7\n        }\n      }\n\n      let newIntlNumberFormat = intlNumberFormat\n\n      if (newDecimals !== decimals) {\n        if (newDecimals < 0) {\n          newIntlNumberFormat = null\n        } else {\n          newIntlNumberFormat = fastNumberFormat(newDecimals, newDecimals)\n        }\n        setIntlNumberFormat(() => newIntlNumberFormat)\n        setDecimals(newDecimals)\n      }\n      updateLegendFormatValueRef(newConvertUnits, newIntlNumberFormat, newDecimals)\n      return legendFormatValueRef.current\n    },\n    [\n      decimals,\n      decimalDigits,\n      min,\n      max,\n      uuid,\n      temperatureSetting,\n      units,\n      unitsDesired,\n      unitsCommon,\n      secondsAsTimeSetting,\n      data.min,\n      data.max,\n      intlNumberFormat,\n    ]\n  )\n\n  return {\n    legendFormatValue,\n    legendFormatValueDecimalsFromMinMax,\n    unitsCurrent,\n  }\n}\n","const defaultColor = {\n  r: 255,\n  g: 0,\n  b: 0,\n}\n\ntype ColorHex2Rgb = (hex: string) => {\n  r: number,\n  g: number,\n  b: number\n}\nexport const colorHex2Rgb: ColorHex2Rgb = (hex) => {\n  // Expand shorthand form (e.g. \"03F\") to full form (e.g. \"0033FF\")\n  const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i\n  if (!hex) {\n    return defaultColor\n  }\n  const hexFull = hex.replace(shorthandRegex, (m, r, g, b) => r + r + g + g + b + b)\n\n  const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hexFull)\n  if (!result) {\n    console.warn(\"wrong color format:\", hex) // eslint-disable-line no-console\n  }\n  return result\n    ? {\n      r: parseInt(result[1], 16),\n      g: parseInt(result[2], 16),\n      b: parseInt(result[3], 16),\n    } : defaultColor\n}\n","import styled from \"styled-components\"\nimport { getSizeBy } from \"@netdata/netdata-ui\"\n\nexport const LegendContainer = styled.div`\n  margin-bottom: ${getSizeBy(3)};\n  padding-left: 35px;\n`\n\nexport const LegendFirstRow = styled.div`\n  margin-top: 4px;\n  display: flex;\n  justify-content: space-between;\n`\n\nexport const LegendSecondRow = styled.div`\n  margin-top: 4px;\n  display: flex;\n  justify-content: space-between;\n`\n\nexport const LegendUnit = styled.div`\n`\n\nexport const DateTimeSeparator = styled.span`\n  margin: 0 3px;\n`\n\nexport const LegendItems = styled.div`\n  display: flex;\n  flex-wrap: wrap;\n  overflow: auto;\n  max-height: 80px;\n`\n\nexport const DimensionItem = styled.div<{ color: string, isDisabled: boolean }>`\n  display: flex;\n  align-items: center;\n  color: ${({ color }) => color};\n  margin-right: 12px;\n  cursor: pointer;\n  opacity: ${({ isDisabled }) => (isDisabled ? 0.3 : null)};\n  user-select: none;\n  font-size: 11px;\n  &:focus {\n    outline: none;\n  }\n`\n\n// toolbox is based on \"absolute\", so to make sure it's not put on top of dimension-item\n// let's put a transparent block as last in dimension-items container. Toolbox will soon be moved\n// to other place so it's temporary\nexport const DimensionItemToolboxPlaceholder = styled.div`\n  width: 140px;\n  height: 20px;\n`\n\nexport const DimensionIcon = styled.div<{ color: string }>`\n  width: 14px;\n  height: 7px;\n  border-radius: 4px;\n  overflow: hidden;\n  background-color: ${({ color }) => color};\n`\n\nexport const DimensionLabel = styled.span`\n  margin-left: 3px;\n`\n\nexport const DimensionValue = styled.span`\n  margin-left: 5px;\n  min-width: 30px;\n`\n\nexport const ToolboxContainer = styled.div`\n  position: relative;\n  touch-action: none;\n`\n","import React, { useCallback } from \"react\"\nimport { createSelector } from \"reselect\"\nimport { useSelector } from \"store/redux-separate-context\"\nimport { selectChartData } from \"domains/chart/selectors\"\nimport { DimensionLabel } from \"./chart-legend-bottom.styled\"\n\nconst emptyObject = {}\n\nconst selector = createSelector(\n  selectChartData,\n  ({ dimension_names: dimensionNames, keys = emptyObject }) => ({\n    dimensionNames,\n    keys,\n  })\n)\n\nconst LegendText = ({ id, index }) => {\n  const { dimensionNames, keys } = useSelector(useCallback(state => selector(state, { id }), [id]))\n  const { chart, node } = keys\n\n  if (chart && node && Object.keys(keys).length === 2) {\n    return (\n      <DimensionLabel>\n        {chart[index]}@{node[index]}\n      </DimensionLabel>\n    )\n  }\n\n  const name = dimensionNames[index]\n\n  return <DimensionLabel>{name}</DimensionLabel>\n}\n\nexport default LegendText\n","import React, { Fragment, useRef, useEffect, useCallback } from \"react\"\nimport classNames from \"classnames\"\nimport { useSelector } from \"store/redux-separate-context\"\nimport { selectChartData } from \"domains/chart/selectors\"\n\nimport { colorHex2Rgb } from \"utils/color-hex-2-rgb\"\nimport { useDateTime } from \"utils/date-time\"\n\nimport { legendResolutionTooltip, legendPluginModuleString } from \"../utils/legend-utils\"\n\nimport { ChartMetadata } from \"../chart-types\"\nimport LegendText from \"./legendText\"\n\ninterface Props {\n  chartUuid: string\n  chartMetadata: ChartMetadata\n  chartLibrary: string\n  colors: {\n    [key: string]: string\n  }\n  hoveredRow: number\n  hoveredX: number | null\n  legendFormatValue: (value: number | string | null) => (number | string)\n  onDimensionClick: (clickedDimensionName: string, event: React.MouseEvent) => void\n  selectedDimensions: string[]\n  showLatestOnBlur: boolean\n  unitsCurrent: string\n  viewBefore: number\n}\n\nexport const ChartLegendRight = ({\n  chartUuid,\n  chartMetadata,\n  chartLibrary,\n  colors,\n  hoveredRow,\n  hoveredX,\n  legendFormatValue,\n  onDimensionClick,\n  selectedDimensions,\n  showLatestOnBlur,\n  unitsCurrent,\n  viewBefore,\n}: Props) => {\n  const chartData = useSelector(\n    useCallback((state: any) => selectChartData(state, { id: chartUuid }), [chartUuid])\n  )\n  const { dimension_names: dimensionNames, dimension_ids: dimensionIds } = chartData\n\n  // todo handle also this case:\n  // const netdataLast = chartData.last_entry * 1000\n  // const dataUpdateEvery = chartData.view_update_every * 1000\n  // showUndefined = Math.abs(netdataLast - viewBefore) > dataUpdateEvery\n  // (showUndefined also when difference between last and before is bigger than granularity)\n  const showUndefined = hoveredRow === -1 && !showLatestOnBlur\n\n  // todo support timezone\n  const legendDate = new Date(hoveredX || viewBefore)\n\n  // todo make a possibility to add chartLegened when there's not chartData\n  // (if this situation is possible)\n\n  // @ts-ignore ignoring because options.current has inconsistent structure\n  const colorFillOpacity = window.NETDATA.options.current[\n    `color_fill_opacity_${chartMetadata.chart_type}`\n  ]\n\n  const { localeDateString, localeTimeString } = useDateTime()\n\n  const scrollbarRef = useRef(null)\n  useEffect(() => {\n    if (scrollbarRef.current) {\n      window.Ps.initialize(scrollbarRef.current, {\n        wheelSpeed: 0.2,\n        wheelPropagation: true,\n        swipePropagation: true,\n        minScrollbarLength: null,\n        maxScrollbarLength: null,\n        useBothWheelAxes: false,\n        suppressScrollX: true,\n        suppressScrollY: false,\n        scrollXMarginOffset: 0,\n        scrollYMarginOffset: 0,\n        theme: \"default\",\n      })\n    }\n  }, [scrollbarRef])\n\n  return (\n    <div className={classNames(\n      \"netdata-chart-legend\",\n      `netdata-${chartLibrary}-legend`,\n    )}\n    >\n      <span\n        className=\"netdata-legend-title-date\"\n        title={legendPluginModuleString(true, chartMetadata)}\n      >\n        {showUndefined\n          ? legendPluginModuleString(false, chartMetadata)\n          : localeDateString(legendDate)}\n      </span>\n      <br />\n      <span\n        className=\"netdata-legend-title-time\"\n        title={legendResolutionTooltip(chartData, chartMetadata)}\n      >\n        {showUndefined\n          ? chartMetadata.context.toString()\n          : localeTimeString(legendDate)}\n      </span>\n      <br />\n      <span className=\"netdata-legend-title-units\">{unitsCurrent}</span>\n      <br />\n      <div className=\"netdata-legend-series\" ref={scrollbarRef}>\n        <div className=\"netdata-legend-series-content\">\n          {dimensionIds.map((dimensionId, i) => {\n            const dimensionName = dimensionNames[i]\n            // todo dimension could be a separate component\n            const color = colors[dimensionName]\n            const rgb = colorHex2Rgb(color)\n\n            const isSelected = selectedDimensions.length === 0\n              || selectedDimensions.includes(dimensionName)\n\n            let value\n            if (showUndefined) {\n              value = null\n            } else if (hoveredRow !== -1) {\n              const hoveredValueArray = chartData.result.data[hoveredRow]\n              // [timestamp, valueDim1, valueDim2, ...]\n              value = hoveredValueArray ? hoveredValueArray[i + 1] : null\n            } else {\n              value = chartData.view_latest_values[i]\n            }\n\n            return (\n              <Fragment key={dimensionId}>\n                {i !== 0 && <br />}\n                {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events */}\n                <span\n                  title={dimensionName}\n                  className={classNames(\n                    \"netdata-legend-name\",\n                    isSelected ? \"selected\" : \"not-selected\",\n                  )}\n                  onClick={(event) => {\n                    onDimensionClick(dimensionName, event)\n                  }}\n                  role=\"button\"\n                  style={{ color }}\n                  tabIndex={0}\n                >\n                  <table\n                    className={`netdata-legend-name-table-${chartMetadata.chart_type}`}\n                    style={{\n                      backgroundColor: `rgba(${rgb.r},${rgb.g},${rgb.b},${colorFillOpacity})`,\n                    }}\n                  >\n                    <tbody>\n                      <tr className=\"netdata-legend-name-tr\">\n                        <td className=\"netdata-legend-name-td\" />\n                      </tr>\n                    </tbody>\n                  </table>\n                  {\" \"}\n                  <LegendText id={chartUuid} index={i} />\n                </span>\n                {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events */}\n                <span\n                  title={dimensionName}\n                  className={classNames(\n                    \"netdata-legend-value\",\n                    !isSelected && \"hidden\",\n                  )}\n                  onClick={(event) => {\n                    onDimensionClick(dimensionName, event)\n                  }}\n                  role=\"button\"\n                  style={{ color }} // omitted !important during refractor, react doesn't support it\n                  tabIndex={0}\n                >\n                  {legendFormatValue(\n                    value,\n                  )}\n                </span>\n              </Fragment>\n            )\n          })}\n        </div>\n      </div>\n    </div>\n  )\n}\n","import React, { useCallback } from \"react\"\nimport { useDateTime } from \"utils/date-time\"\nimport { useSelector } from \"store/redux-separate-context\"\nimport { selectChartData } from \"domains/chart/selectors\"\nimport { legendPluginModuleString, legendResolutionTooltip } from \"domains/chart/utils/legend-utils\"\nimport { ChartMetadata } from \"../chart-types\"\nimport LegendText from \"./legendText\"\nimport * as S from \"./chart-legend-bottom.styled\"\ninterface Props {\n  chartUuid: string\n  chartMetadata: ChartMetadata\n  chartLibrary: string\n  colors: {\n    [key: string]: string\n  }\n  hoveredRow: number\n  hoveredX: number | null\n  legendFormatValue: (value: number | string | null) => number | string\n  onDimensionClick: (clickedDimensionName: string, event: React.MouseEvent) => void\n  selectedDimensions: string[]\n  showLatestOnBlur: boolean\n  unitsCurrent: string\n  viewBefore: number\n  legendToolbox: JSX.Element\n  resizeHandler: React.ReactNode\n}\n\nexport const ChartTimeframe = ({\n  chartMetadata,\n  showUndefined,\n  hoveredX,\n  viewBefore,\n  chartData,\n}: any) => {\n  const { localeDateString, localeTimeString } = useDateTime()\n\n  const legendDate = new Date(hoveredX || viewBefore)\n\n  return (\n    <div>\n      <span title={legendPluginModuleString(true, chartMetadata)}>\n        {showUndefined\n          ? legendPluginModuleString(false, chartMetadata)\n          : localeDateString(legendDate)}\n      </span>\n      <S.DateTimeSeparator>|</S.DateTimeSeparator>\n      <span title={legendResolutionTooltip(chartData, chartMetadata)}>\n        {showUndefined ? chartMetadata.context.toString() : localeTimeString(legendDate)}\n      </span>\n    </div>\n  )\n}\n\nexport const ChartLegendBottom = ({\n  chartUuid,\n  chartMetadata,\n  colors,\n  hoveredRow,\n  hoveredX,\n  legendFormatValue,\n  onDimensionClick,\n  selectedDimensions,\n  showLatestOnBlur,\n  unitsCurrent,\n  viewBefore,\n  legendToolbox,\n  resizeHandler,\n}: Props) => {\n  const showUndefined = hoveredRow === -1 && !showLatestOnBlur\n  const chartData = useSelector(\n    useCallback((state: any) => selectChartData(state, { id: chartUuid }), [chartUuid])\n  )\n  const { dimension_names: dimensionNames, dimension_ids: dimensionIds } = chartData\n\n  return (\n    <S.LegendContainer>\n      <S.LegendFirstRow>\n        <S.LegendUnit>{unitsCurrent}</S.LegendUnit>\n        <ChartTimeframe\n          chartMetadata={chartMetadata}\n          showUndefined={showUndefined}\n          hoveredX={hoveredX}\n          viewBefore={viewBefore}\n          chartData={chartData}\n        />\n      </S.LegendFirstRow>\n      <S.LegendSecondRow>\n        <S.LegendItems>\n          {dimensionIds.map((dimensionId, i) => {\n            const dimensionName = dimensionNames[i]\n            const color = colors[dimensionName]\n\n            const isSelected =\n              selectedDimensions.length === 0 || selectedDimensions.includes(dimensionName)\n\n            let value\n            if (showUndefined) {\n              value = null\n            } else if (hoveredRow !== -1) {\n              const hoveredValueArray = chartData.result.data[hoveredRow]\n              // [timestamp, valueDim1, valueDim2, ...]\n              value = hoveredValueArray ? hoveredValueArray[i + 1] : null\n            } else {\n              value = chartData.view_latest_values[i]\n            }\n            return (\n              <S.DimensionItem\n                color={color}\n                onClick={event => {\n                  onDimensionClick(dimensionName, event)\n                }}\n                role=\"button\"\n                tabIndex={0}\n                isDisabled={!isSelected}\n                key={dimensionId}\n              >\n                <S.DimensionIcon title={dimensionName} color={color} />\n                <LegendText id={chartUuid} index={i} />\n                <S.DimensionValue>{isSelected && legendFormatValue(value)}</S.DimensionValue>\n              </S.DimensionItem>\n            )\n          })}\n          <S.DimensionItemToolboxPlaceholder />\n        </S.LegendItems>\n        <S.ToolboxContainer>\n          {legendToolbox}\n          {resizeHandler}\n        </S.ToolboxContainer>\n      </S.LegendSecondRow>\n    </S.LegendContainer>\n  )\n}\n","import React, { useCallback } from \"react\"\n\nimport { useSelector } from \"store/redux-separate-context\"\nimport { selectChartData } from \"domains/chart/selectors\"\nimport { getNewSelectedDimensions } from \"domains/chart/utils/legend-utils\"\nimport { Attributes } from \"../utils/transformDataAttributes\"\nimport { ChartMetadata } from \"../chart-types\"\n\nimport { ChartLegendRight } from \"./chart-legend-right\"\nimport { ChartLegendBottom } from \"./chart-legend-bottom\"\n\ninterface Props {\n  attributes: Attributes\n  chartUuid: string\n  chartMetadata: ChartMetadata\n  chartLibrary: string\n  colors: {\n    [key: string]: string\n  }\n  hoveredRow: number\n  hoveredX: number | null\n  legendFormatValue: (value: number | string | null) => number | string\n  selectedDimensions: string[]\n  setSelectedDimensions: (selectedDimensions: string[]) => void\n  showLatestOnBlur: boolean\n  unitsCurrent: string\n  viewBefore: number\n  legendToolbox: JSX.Element\n  resizeHandler: React.ReactNode\n}\n\nexport const ChartLegend = ({\n  attributes,\n  chartUuid,\n  chartMetadata,\n  chartLibrary,\n  colors,\n  hoveredRow,\n  hoveredX,\n  legendFormatValue,\n  selectedDimensions,\n  setSelectedDimensions,\n  showLatestOnBlur,\n  unitsCurrent,\n  viewBefore,\n  legendToolbox,\n  resizeHandler,\n}: Props) => {\n  const dimension_names = useSelector(\n    useCallback((state: any) => selectChartData(state, { id: chartUuid }).dimension_names, [\n      chartUuid,\n    ])\n  )\n\n  const onDimensionClick = (clickedDimensionName: string, event: React.MouseEvent) => {\n    event.preventDefault()\n    const isModifierKeyPressed = event.shiftKey || event.ctrlKey\n    const newSelectedDimensions = getNewSelectedDimensions({\n      allDimensions: dimension_names,\n      selectedDimensions,\n      clickedDimensionName,\n      isModifierKeyPressed,\n    })\n    setSelectedDimensions(newSelectedDimensions)\n  }\n\n  if (attributes.legendPosition === \"bottom\") {\n    return (\n      <ChartLegendBottom\n        chartUuid={chartUuid}\n        chartLibrary={chartLibrary}\n        chartMetadata={chartMetadata}\n        colors={colors}\n        hoveredRow={hoveredRow}\n        hoveredX={hoveredX}\n        legendFormatValue={legendFormatValue}\n        onDimensionClick={onDimensionClick}\n        selectedDimensions={selectedDimensions}\n        showLatestOnBlur={showLatestOnBlur}\n        unitsCurrent={unitsCurrent}\n        viewBefore={viewBefore}\n        legendToolbox={legendToolbox}\n        resizeHandler={resizeHandler}\n      />\n    )\n  }\n\n  return (\n    <ChartLegendRight\n      chartUuid={chartUuid}\n      chartLibrary={chartLibrary}\n      chartMetadata={chartMetadata}\n      colors={colors}\n      hoveredRow={hoveredRow}\n      hoveredX={hoveredX}\n      legendFormatValue={legendFormatValue}\n      onDimensionClick={onDimensionClick}\n      selectedDimensions={selectedDimensions}\n      showLatestOnBlur={showLatestOnBlur}\n      unitsCurrent={unitsCurrent}\n      viewBefore={viewBefore}\n    />\n  )\n}\n","import React from \"react\"\n\nimport { ToolboxButton } from \"./toolbox-button\"\n\ntype ClickCallback = (event: React.MouseEvent) => void\ninterface Props {\n  onToolboxLeftClick: ClickCallback\n  onToolboxRightClick: ClickCallback\n  onToolboxZoomInClick: ClickCallback\n  onToolboxZoomOutClick: ClickCallback\n}\nexport const LegendToolbox = ({\n  onToolboxLeftClick,\n  onToolboxRightClick,\n  onToolboxZoomInClick,\n  onToolboxZoomOutClick,\n}: Props) => (\n  <div className=\"netdata-legend-toolbox\">\n    <ToolboxButton\n      className=\"netdata-legend-toolbox-button\"\n      onClick={onToolboxLeftClick}\n      iconType=\"left\"\n      popoverTitle=\"Pan Left\"\n      popoverContent=\"Pan the chart to the left. You can also <b>drag it</b> with your mouse or your\n       finger (on touch devices).<br/><small>Help can be disabled from the settings.</small>\"\n    />\n    <ToolboxButton\n      className=\"netdata-legend-toolbox-button\"\n      onClick={onToolboxRightClick}\n      iconType=\"right\"\n      popoverTitle=\"Pan Right\"\n      popoverContent=\"Pan the chart to the right. You can also <b>drag it</b> with your mouse or\n       your finger (on touch devices).<br/><small>Help can be disabled from the settings.</small>\"\n    />\n    <ToolboxButton\n      className=\"netdata-legend-toolbox-button\"\n      onClick={onToolboxZoomInClick}\n      iconType=\"zoomIn\"\n      popoverTitle=\"Chart Zoom In\"\n      popoverContent=\"Zoom in the chart. You can also press SHIFT and select an area of the chart,\n       or press SHIFT or ALT and use the mouse wheel or 2-finger touchpad scroll to zoom in or out.\n       <br/><small>Help can be disabled from the settings.</small>\"\n    />\n    <ToolboxButton\n      className=\"netdata-legend-toolbox-button\"\n      onClick={onToolboxZoomOutClick}\n      iconType=\"zoomOut\"\n      popoverTitle=\"Chart Zoom Out\"\n      popoverContent=\"Zoom out the chart. You can also press SHIFT or ALT and use the mouse wheel,\n       or 2-finger touchpad scroll to zoom in or out.<br/><small>Help can be disabled from the\n        settings.</small>\"\n    />\n  </div>\n)\n","/* eslint-disable no-nested-ternary */\nimport { always, memoizeWith } from \"ramda\"\nimport Color from \"color\"\n\nimport { ChartMetadata, DygraphData } from \"domains/chart/chart-types\"\nimport { Attributes } from \"domains/chart/utils/transformDataAttributes\"\nimport { ChartLibraryConfig } from \"domains/chart/utils/chartLibrariesSettings\"\n\nexport const getDataForFakeStacked = (\n  data: number[][],\n  dimensionsVisibility: boolean[],\n): number[][] => data.map((point) => {\n  const [timestamp, ...values] = point\n  const rest: number[] = []\n  let currentMin = 0\n  let currentMax = 0\n  values\n    .map((value, i) => ({ isVisible: dimensionsVisibility[i], value }))\n    // reverse because first dimensions should be \"on top\" (at least positive ones)\n    .slice().reverse()\n    .forEach(({ isVisible, value }) => {\n      if (!isVisible) {\n        rest.push(0) // push with value '0'. it won't be visible but needs to be present in array\n        return\n      }\n      if (value >= 0) {\n        currentMax += value\n        rest.push(currentMax)\n      } else {\n        currentMin += value\n        rest.push(currentMin)\n      }\n    })\n  return [\n    timestamp,\n    ...rest,\n  ]\n})\n\nconst isPercentage = (unit: string) => unit === \"percentage\"\n  || unit === \"percent\"\n  || unit.indexOf(\"%\") !== -1\n\nexport const getDygraphChartType = (\n  attributes: Attributes, chartData: DygraphData, chartMetadata: ChartMetadata,\n  chartSettings: ChartLibraryConfig,\n) => {\n  const isLogScale = (chartSettings.isLogScale as ((a: Attributes) => boolean))(attributes)\n  const {\n    dygraphType: dygraphRequestedType = chartMetadata.chart_type,\n    groupBy,\n  } = attributes\n\n  if (groupBy && groupBy !== \"dimension\" && isPercentage(chartMetadata.units)) {\n    return \"line\"\n  }\n\n  // corresponds to state.tmp.dygraph_chart_type in old app\n  let dygraphChartType = dygraphRequestedType\n  if (dygraphChartType === \"stacked\" && chartData.dimensions === 1) {\n    dygraphChartType = \"area\"\n  }\n  if (dygraphChartType === \"stacked\" && isLogScale) {\n    dygraphChartType = \"area\"\n  }\n  return dygraphChartType\n}\n\nconst getBackgroundColor = memoizeWith(\n  always(\"true\"),\n  () => Color(window.NETDATA.themes.current.background),\n)\n// when in \"fakeStacked\" mode, we cannot use opacity for fill in charts, because the areas would\n// be visible under each other. So the darkening / whitening needs to be added directly to colors\n// (the colors are too saturated for areas and in stacked mode they were with 0.8 opacity)\nexport const transformColors = (colors: string[]) => (\n  colors.map((color) => Color(color).mix(getBackgroundColor(), 0.2).hex())\n)\n\nexport const getDygraphFillAlpha = (\n  isFakeStacked: boolean, dygraphChartType: string,\n) => (isFakeStacked\n  ? window.NETDATA.options.current.color_fill_opacity_fake_stacked\n  : dygraphChartType === \"stacked\"\n    ? window.NETDATA.options.current.color_fill_opacity_stacked\n    : window.NETDATA.options.current.color_fill_opacity_area)\n\n\n// https://github.com/danvk/dygraphs/blob/master/src/iframe-tarp.js#L1-L23\n// On mouseUp dygraphs put rectangles above all iframes so mouseUp can be properly intercepted.\n// this causes a problem with some analytics iframes that place themselves in regions where they\n// aren't visible anyway (for example hubspot iframe on Cloud), and this creates a problematic\n// horizontal scrollbar to appear. This function filters those \"rectangles\" (tarps) to omit\n// elements with unreachable \"left\" styles\nexport const hackDygraphIFrameTarps = (tarps: HTMLDivElement[]): HTMLDivElement[] => (\n  tarps.filter((element: HTMLDivElement) => {\n    const isOutsideReasonableViewport = Number(element.style.left.replace(\"px\", \"\")) > 10000\n    if (isOutsideReasonableViewport) {\n      element.parentNode!.removeChild(element)\n    }\n    return !isOutsideReasonableViewport\n  })\n)\n","/* eslint-disable react-hooks/exhaustive-deps */\n/* eslint-disable function-paren-newline */\n/* eslint-disable comma-dangle */\nimport React, { useRef, useCallback } from \"react\"\nimport { useToggle } from \"react-use\"\n\nconst useProceededChart = (\n  chartRef: any,\n  propsRef: any\n): [boolean, React.Ref<HTMLElement>, (g: Dygraph) => void] => {\n  const [proceeded, toggleProceeded] = useToggle(false)\n\n  const ref = useRef<HTMLElement>(null)\n\n  const updatePosition = useCallback((g: Dygraph) => {\n    const { x } = g.getArea()\n    const distance = g.toDomXCoord(propsRef.current.chartData.first_entry * 1000)\n    const hasProceeded = distance > x\n    toggleProceeded(hasProceeded)\n\n    if (hasProceeded && ref.current) {\n      const { height } = chartRef.current.getBoundingClientRect()\n      ref.current.style.left = `${x}px`\n      ref.current.style.right = `calc(100% - ${distance}px)`\n      ref.current.style.top = `${height / 2}px`\n    }\n  }, [])\n\n  return [proceeded, ref, updatePosition]\n}\n\nexport default useProceededChart\n","import { useRef } from \"react\"\nimport { useToggle } from \"react-use\"\n\nconst badgeTopMargin = \"40px\"\n\nconst defaultPositionTo = (ref, x, position, topMargin) => {\n  ref.current.style.left = `${x}px`\n  ref.current.style.right = `calc(100% - ${position}px)`\n  ref.current.style.top = topMargin\n}\n\nexport default () => {\n  const [isRendered, toggleIsRendered] = useToggle(false)\n\n  const ref = useRef(null)\n\n  const updatePosition = (isVisible, g, position, positionTo = defaultPositionTo) => {\n    if (!isVisible) {\n      toggleIsRendered(false)\n      return\n    }\n\n    if (ref.current) {\n      toggleIsRendered(true)\n      const { x } = g.getArea()\n\n      positionTo(ref, x, position, badgeTopMargin)\n    }\n  }\n\n  return [isRendered, ref, updatePosition]\n}\n","import React, { forwardRef } from \"react\"\nimport styled from \"styled-components\"\n\nconst Container = styled.div`\n  display: block;\n`\n\nconst ProceededChartDisclaimer = forwardRef((\n  props: React.HTMLAttributes<HTMLElement>,\n  ref: React.Ref<HTMLDivElement>,\n) => (\n  <Container ref={ref} className=\"dygraph__history-tip\" data-testid=\"proceededChartDisclaimer\">\n    <span className=\"dygraph__history-tip-content\">\n      Want to extend your history of real-time metrics?\n      <br />\n      <a href=\"https://learn.netdata.cloud/guides/longer-metrics-storage/\" target=\"_blank\" rel=\"noopener noreferrer\" data-testid=\"proceededChartDisclaimer-configure\">\n        Configure Netdata&apos;s&nbsp;\n        <b>history</b>\n      </a>\n      &nbsp;or use the&nbsp;\n      <a href=\"https://learn.netdata.cloud/docs/agent/database/engine/\" target=\"_blank\" rel=\"noopener noreferrer\" data-testid=\"proceededChartDisclaimer-engine\">DB engine</a>\n      .\n    </span>\n  </Container>\n))\n\nexport default ProceededChartDisclaimer\n","import React, { forwardRef } from \"react\"\nimport styled from \"styled-components\"\n\nconst backgroundColorMap = {\n  WARNING: \"#FFF8E1\",\n  CRITICAL: \"#FFEBEF\",\n  CLEAR: \"#E5F5E8\",\n}\nexport const getBackgroundColor = (status) => backgroundColorMap[status] || null\n\nconst borderColorMap = {\n  WARNING: \"#FFC300\",\n  CRITICAL: \"#F59B9B\",\n  CLEAR: \"#68C47D\",\n}\nexport const getBorderColor = (status) => borderColorMap[status] || null\n\nconst textColorMap = {\n  WARNING: \"#536775\",\n  CRITICAL: \"#FF4136\",\n  CLEAR: \"#00AB44\",\n}\nexport const getColor = (status) => textColorMap[status] || null\n\nconst Container = styled.div`\n  position: absolute;\n  margin-right: 10px;\n  overflow: hidden;\n  pointer-events: none;\n  direction: rtl;\n  z-index: 10; // higher than chart\n`\n\nconst Badge = styled.div`\n  display: inline-block;\n  border-radius: 36px;\n  padding: 2px 12px;\n  background: ${({ background }) => background};\n  border: 1px solid ${({ border }) => border};\n  color: ${({ color }) => color};\n  font-size: 12px;\n  font-weight: 700;\n  direction: ltr;\n  white-space: nowrap;\n`\n\nexport default forwardRef((\n  { isVisible, status, label },\n  ref,\n) => (\n  <Container ref={ref}>\n    {isVisible && (\n      <Badge\n        background={getBackgroundColor(status)}\n        border={getBorderColor(status)}\n        color={getColor(status)}\n      >\n        {label}\n      </Badge>\n    )}\n  </Container>\n))\n","//@ts-nocheck\nimport { sortBy, reverse } from \"ramda\"\nimport React, { useLayoutEffect, useRef, useCallback } from \"react\"\nimport classNames from \"classnames\"\nimport { useUpdateEffect, useUnmount, useMount } from \"react-use\"\n// this version is needed because it contains a fix for handling constant value in the chart\n// ie. https://github.com/danvk/dygraphs/pull/909\nimport Dygraph from \"vendor/dygraph-c91c859.min\"\nimport \"dygraphs/src-es5/extras/smooth-plotter\"\nimport ResizeObserver from \"resize-observer-polyfill\"\n\nimport { useDispatch, useSelector } from \"store/redux-separate-context\"\nimport { AppStateT } from \"store/app-state\"\nimport { DygraphArea, NetdataDygraph } from \"types/vendor-overrides\"\nimport { TimeRange } from \"types/common\"\nimport { useDateTime } from \"utils/date-time\"\nimport { debounce } from \"utils/debounce\"\n\nimport {\n  selectCommonMin,\n  selectCommonMax,\n  selectGlobalChartUnderlay,\n  selectGlobalSelectionMaster,\n  selectSmoothPlot,\n  selectSyncPanAndZoom,\n  selectSpacePanelTransitionEndIsActive,\n  selectAlarm,\n  selectTimezoneSetting,\n} from \"domains/global/selectors\"\nimport {\n  resetGlobalPanAndZoomAction,\n  setCommonMaxAction,\n  setCommonMinAction,\n  setGlobalPauseAction,\n  resetGlobalPauseAction,\n} from \"domains/global/actions\"\n\nimport { resetChartPanAndZoomAction } from \"domains/chart/actions\"\n\nimport { Attributes } from \"../../utils/transformDataAttributes\"\nimport {\n  chartLibrariesSettings,\n  ChartLibraryConfig,\n  ChartLibraryName,\n} from \"../../utils/chartLibrariesSettings\"\nimport { ChartMetadata, DygraphData } from \"../../chart-types\"\nimport { selectResizeHeight } from \"../../selectors\"\n\nimport {\n  getDygraphChartType,\n  getDataForFakeStacked,\n  transformColors,\n  getDygraphFillAlpha,\n  hackDygraphIFrameTarps,\n} from \"./dygraph/utils\"\nimport \"./dygraph-chart.css\"\n\nimport useProceededChart from \"../../hooks/use-proceeded-chart\"\nimport useDygraphBadge from \"../../hooks/useDygraphBadge\"\nimport ProceededChartDisclaimer from \"./proceeded-chart-disclaimer\"\nimport AlarmBadge, { getBorderColor } from \"./alarmBadge\"\n\n// This is the threshold above which we assume chart shown duration has changed\nconst timeframeThreshold = 5000\nconst dygraphResizeDebounceTime = 500\n\ntype IsInRangeOfAvailableData = (props: {\n  after: number, before: number, chartData: DygraphData,\n}) => boolean\nconst isInRangeOfAvailableData: IsInRangeOfAvailableData = ({ after, before, chartData }) => (\n  after >= (chartData.first_entry * 1000) && before <= (chartData.last_entry * 1000)\n)\n\ninterface GetInitialDygraphOptions {\n  attributes: Attributes,\n  chartData: DygraphData,\n  chartMetadata: ChartMetadata,\n  chartSettings: ChartLibraryConfig,\n  dimensionsVisibility: boolean[]\n  hiddenLabelsElementId: string,\n  isFakeStacked: boolean,\n  orderedColors: string[],\n  setMinMax: (minMax: TimeRange) => void\n  shouldSmoothPlot: boolean,\n  unitsCurrent: string,\n  xAxisDateString: (d: Date) => string,\n  xAxisTimeString: (d: Date) => string,\n}\nconst getInitialDygraphOptions = ({\n  attributes,\n  chartData,\n  chartMetadata,\n  chartSettings,\n  dimensionsVisibility,\n  hiddenLabelsElementId,\n  isFakeStacked,\n  orderedColors,\n  setMinMax,\n  shouldSmoothPlot,\n  unitsCurrent,\n  xAxisDateString,\n  xAxisTimeString,\n}: GetInitialDygraphOptions) => {\n  const isSparkline = attributes.dygraphTheme === \"sparkline\"\n  const highlightCircleSize = isSparkline ? 3 : 4\n\n  const isLogScale = (chartSettings.isLogScale as ((a: Attributes) => boolean))(attributes)\n  const dygraphChartType = getDygraphChartType(attributes, chartData, chartMetadata, chartSettings)\n  const {\n    dygraphSmooth = dygraphChartType === \"line\"\n      && !isSparkline,\n    dygraphDrawAxis = true,\n    legendPosition,\n  } = attributes\n  const isLegendOnBottom = legendPosition === \"bottom\"\n  const {\n    // destructuring with default values\n    dygraphColors = orderedColors,\n    dygraphRightGap = 5,\n    dygraphShowRangeSelector = false,\n    dygraphShowRoller = false,\n    dygraphTitle = attributes.title || chartMetadata.title,\n    dygraphTitleHeight = 19,\n    dygraphLegend = \"always\",\n    dygraphLabelsDiv = hiddenLabelsElementId,\n    dygraphLabelsSeparateLine = true,\n    dygraphIncludeZero = dygraphChartType === \"stacked\",\n    dygraphShowZeroValues = true,\n    dygraphShowLabelsOnHighLight = true,\n    dygraphHideOverlayOnMouseOut = true,\n    dygraphXRangePad = 0,\n    dygraphYRangePad = 1,\n    dygraphValueRange = [null, null],\n    dygraphYLabelWidth = 12,\n    // eslint-disable-next-line no-nested-ternary\n    dygraphStrokeWidth = dygraphChartType === \"stacked\"\n      ? 0.1\n      : (dygraphSmooth === true\n        ? 1.5\n        : 0.7),\n\n    dygraphStrokePattern,\n    dygraphDrawPoints = false,\n    dygraphDrawGapEdgePoints = true,\n    dygraphConnectSeparatedPoints = false,\n    dygraphPointSize = 1,\n    dygraphStepPlot = false,\n    dygraphStrokeBorderColor = window.NETDATA.themes.current.background,\n    dygraphStrokeBorderWidth = 0,\n    dygraphFillGraph = (dygraphChartType === \"area\" || dygraphChartType === \"stacked\"),\n    dygraphFillAlpha = getDygraphFillAlpha(isFakeStacked, dygraphChartType),\n    dygraphStackedGraph = dygraphChartType === \"stacked\" && !isFakeStacked,\n    dygraphStackedGraphNanFill = \"none\",\n    dygraphAxisLabelFontSize = 10,\n    dygraphAxisLineColor = window.NETDATA.themes.current.axis,\n    dygraphAxisLineWidth = 1.0,\n    dygraphDrawGrid = true,\n    dygraphGridLinePattern,\n    dygraphGridLineWidth = 1.0,\n    dygraphGridLineColor = window.NETDATA.themes.current.grid,\n    dygraphMaxNumberWidth = 8,\n    dygraphSigFigs,\n    dygraphDigitsAfterDecimal = 2,\n    dygraphHighlighCircleSize = highlightCircleSize,\n    dygraphHighlightSeriesOpts,\n    dygraphHighlightSeriesBackgroundAlpha,\n\n    dygraphXPixelsPerLabel = 50,\n    dygraphXAxisLabelWidth = 60,\n    dygraphDrawXAxis = dygraphDrawAxis,\n    dygraphYPixelsPerLabel = 15,\n    dygraphYAxisLabelWidth = isLegendOnBottom ? 30 : 50,\n    dygraphDrawYAxis = dygraphDrawAxis,\n  } = attributes\n  return {\n    colors: isFakeStacked ? transformColors(reverse(dygraphColors)) : dygraphColors,\n\n    // leave a few pixels empty on the right of the chart\n    rightGap: isSparkline ? 0 : dygraphRightGap,\n    showRangeSelector: dygraphShowRangeSelector,\n    showRoller: dygraphShowRoller,\n    title: isSparkline ? undefined : dygraphTitle,\n    titleHeight: dygraphTitleHeight,\n    legend: dygraphLegend, // we need this to get selection events\n    labels: chartData.result.labels,\n    labelsDiv: dygraphLabelsDiv,\n\n    labelsSeparateLines: isSparkline ? true : dygraphLabelsSeparateLine,\n    labelsShowZeroValues: isLogScale ? false : dygraphShowZeroValues,\n    labelsKMB: false,\n    labelsKMG2: false,\n    showLabelsOnHighlight: dygraphShowLabelsOnHighLight,\n    hideOverlayOnMouseOut: dygraphHideOverlayOnMouseOut,\n    includeZero: dygraphIncludeZero,\n    xRangePad: dygraphXRangePad,\n    yRangePad: isSparkline ? 1 : dygraphYRangePad,\n    valueRange: dygraphValueRange,\n    ylabel: (isSparkline || isLegendOnBottom) ? undefined : unitsCurrent,\n    yLabelWidth: (isSparkline || isLegendOnBottom) ? 0 : dygraphYLabelWidth,\n\n    // the function to plot the chart\n    plotter: (dygraphSmooth && shouldSmoothPlot) ? window.smoothPlotter : null,\n\n    // The width of the lines connecting data points.\n    // This can be used to increase the contrast or some graphs.\n    strokeWidth: dygraphStrokeWidth,\n    strokePattern: dygraphStrokePattern,\n\n    // The size of the dot to draw on each point in pixels (see drawPoints).\n    // A dot is always drawn when a point is \"isolated\",\n    // i.e. there is a missing point on either side of it.\n    // This also controls the size of those dots.\n    drawPoints: dygraphDrawPoints,\n\n    // Draw points at the edges of gaps in the data.\n    // This improves visibility of small data segments or other data irregularities.\n    drawGapEdgePoints: dygraphDrawGapEdgePoints,\n    connectSeparatedPoints: isLogScale ? false : dygraphConnectSeparatedPoints,\n    pointSize: dygraphPointSize,\n\n    // enabling this makes the chart with little square lines\n    stepPlot: dygraphStepPlot,\n\n    // Draw a border around graph lines to make crossing lines more easily\n    // distinguishable. Useful for graphs with many lines.\n    strokeBorderColor: dygraphStrokeBorderColor,\n    strokeBorderWidth: dygraphStrokeBorderWidth,\n    fillGraph: dygraphFillGraph,\n    fillAlpha: dygraphFillAlpha,\n    stackedGraph: dygraphStackedGraph,\n    stackedGraphNaNFill: dygraphStackedGraphNanFill,\n    drawAxis: isSparkline ? false : dygraphDrawAxis,\n    axisLabelFontSize: dygraphAxisLabelFontSize,\n    axisLineColor: dygraphAxisLineColor,\n    axisLineWidth: dygraphAxisLineWidth,\n    drawGrid: isSparkline ? false : dygraphDrawGrid,\n    gridLinePattern: dygraphGridLinePattern,\n    gridLineWidth: dygraphGridLineWidth,\n    gridLineColor: dygraphGridLineColor,\n    maxNumberWidth: dygraphMaxNumberWidth,\n    sigFigs: dygraphSigFigs,\n    digitsAfterDecimal: dygraphDigitsAfterDecimal,\n    highlightCircleSize: dygraphHighlighCircleSize,\n    highlightSeriesOpts: dygraphHighlightSeriesOpts, // TOO SLOW: { strokeWidth: 1.5 },\n    // TOO SLOW: (state.tmp.dygraph_chart_type === 'stacked')?0.7:0.5,\n    highlightSeriesBackgroundAlpha: dygraphHighlightSeriesBackgroundAlpha,\n    visibility: dimensionsVisibility,\n    logscale: isLogScale,\n\n    axes: {\n      x: {\n        pixelsPerLabel: dygraphXPixelsPerLabel,\n        // insufficient typings for Dygraph\n        // @ts-ignore\n        ticker: Dygraph.dateTicker,\n        axisLabelWidth: dygraphXAxisLabelWidth,\n        drawAxis: isSparkline ? false : dygraphDrawXAxis,\n        axisLabelFormatter: (d: Date | number) => ((d as Date).toTimeString().startsWith(\"00:00:00\")\n          ? xAxisDateString(d as Date)\n          : xAxisTimeString(d as Date)\n        ),\n      },\n      y: {\n        logscale: isLogScale,\n        pixelsPerLabel: dygraphYPixelsPerLabel,\n        axisLabelWidth: dygraphYAxisLabelWidth,\n        drawAxis: isSparkline ? false : dygraphDrawYAxis,\n        // axisLabelFormatter is added on the updates\n        axisLabelFormatter(y: Date | number) {\n          const formatter = setMinMax([\n            // @ts-ignore\n            // eslint-disable-next-line no-underscore-dangle\n            this.axes_[0].extremeRange[0],\n            // @ts-ignore\n            // eslint-disable-next-line no-underscore-dangle\n            this.axes_[0].extremeRange[1],\n          ]) as unknown as ((value: Date | number) => string)\n          return formatter(y as number)\n        },\n      },\n    },\n  }\n}\n\ninterface Props {\n  attributes: Attributes\n  chartData: DygraphData\n  chartMetadata: ChartMetadata\n  chartElementClassName: string\n  chartElementId: string\n  chartLibrary: ChartLibraryName\n  chartUuid: string\n  colors: {\n    [key: string]: string\n  }\n  dimensionsVisibility: boolean[]\n  hasEmptyData: boolean\n  hasLegend: boolean\n  isRemotelyControlled: boolean\n  onUpdateChartPanAndZoom: (arg: {\n    after: number, before: number,\n    callback: (after: number, before: number) => void,\n    masterID: string,\n    shouldNotExceedAvailableRange: boolean,\n  }) => void\n  orderedColors: string[]\n  immediatelyDispatchPanAndZoom: () => void\n\n  hoveredRow: number\n  hoveredX: number | null\n  setGlobalChartUnderlay: (arg: { after: number, before: number, masterID: string }) => void\n  setHoveredX: (hoveredX: number | null, noMaster?: boolean) => void\n  setMinMax: (minMax: TimeRange) => void\n  unitsCurrent: string\n  viewAfter: number\n  viewBefore: number\n}\nexport const DygraphChart = ({\n  attributes,\n  chartData,\n  chartMetadata,\n  chartElementClassName,\n  chartElementId,\n  chartLibrary,\n  // colors,\n  chartUuid,\n  dimensionsVisibility,\n  hasEmptyData,\n  hasLegend,\n  isRemotelyControlled,\n  onUpdateChartPanAndZoom,\n  orderedColors,\n  immediatelyDispatchPanAndZoom,\n\n  hoveredRow,\n  hoveredX,\n  setGlobalChartUnderlay,\n  setHoveredX,\n  setMinMax,\n  unitsCurrent,\n  viewAfter,\n  viewBefore,\n}: Props) => {\n  const globalChartUnderlay = useSelector(selectGlobalChartUnderlay)\n  const selectedAlarm = useSelector(selectAlarm)\n  const alarm = selectedAlarm?.chartId === chartData.id ? selectedAlarm : null\n\n  const timezone = useSelector(selectTimezoneSetting)\n\n  const { xAxisDateString, xAxisTimeString } = useDateTime()\n  const chartSettings = chartLibrariesSettings[chartLibrary]\n  const hiddenLabelsElementId = `${chartUuid}-hidden-labels-id`\n\n  const dygraphChartType = getDygraphChartType(attributes, chartData, chartMetadata, chartSettings)\n  // isFakeStacked - is a special mode for displaying stacked charts with both positive and negative\n  // values. Dygraph.js doesn't support it so in this case we need to sum the values manually\n  // and display the chart as \"area\" type, but with keeping all styling (fill etc.) properties\n  // as in \"stacked\" type\n  // because first values need to be \"on top\" (at least for positive values), the dimension order\n  // needs to be reversed (in getDataForFakeStacked function and when assigning dimension colors)\n  const isFakeStacked = chartData.min < 0 && dygraphChartType === \"stacked\"\n  const dygraphFillAlpha = getDygraphFillAlpha(isFakeStacked, dygraphChartType)\n\n  const chartElement = useRef<HTMLDivElement>(null)\n\n  const updateChartPanOrZoom = useCallback(({\n    after, before,\n    callback,\n    shouldNotExceedAvailableRange,\n  }) => {\n    onUpdateChartPanAndZoom({\n      after,\n      before,\n      callback,\n      masterID: chartUuid,\n      shouldNotExceedAvailableRange,\n    })\n  }, [chartUuid, onUpdateChartPanAndZoom])\n\n  // keep in ref to prevent additional updates\n  const dygraphInstance = useRef<Dygraph | null>()\n  // state.tmp.dygraph_user_action in old dashboard\n  const latestIsUserAction = useRef(false)\n  // state.tmp.dygraph_mouse_down in old dashboard\n  const isMouseDown = useRef(false)\n  // state.tmp.dygraph_highlight_after in old dashboard\n  const dygraphHighlightAfter = useRef<null | number>(null)\n  // state.dygraph_last_touch_move in old dashboard\n  const dygraphLastTouchMove = useRef(0)\n  // state.dygraph_last_touch_page_x in old dashboard\n  const dygraphLastTouchPageX = useRef(0)\n  // state.dygraph_last_touch_end in old dashboard\n  const dygraphLastTouchEnd = useRef<undefined | number>()\n\n  const dispatch = useDispatch()\n  const isSyncPanAndZoom = useSelector(selectSyncPanAndZoom)\n\n  const resetGlobalPanAndZoom = useCallback(() => {\n    latestIsUserAction.current = false // prevent starting panAndZoom\n    if (dygraphInstance.current) {\n      // todo on toolbox reset click, do updateOptions({ dateWindow: null })\n      // (issue existed also before rewrite)\n      dygraphInstance.current.updateOptions({\n        // reset dateWindow to the current\n        // @ts-ignore external typings dont support null\n        dateWindow: null,\n      })\n    }\n\n    if (isSyncPanAndZoom) {\n      dispatch(resetGlobalPanAndZoomAction())\n    } else {\n      dispatch(resetChartPanAndZoomAction({ id: chartUuid }))\n    }\n  }, [chartUuid, dispatch, isSyncPanAndZoom])\n\n  const [isAlarmBadgeVisible, alarmBadgeRef, updateAlarmBadge] = useDygraphBadge() as any\n\n  // setGlobalChartUnderlay is using state from closure (chartData.after), so we need to have always\n  // the newest callback. Unfortunately we cannot use Dygraph.updateOptions() (library restriction)\n  // for interactionModel callbacks so we need to keep the callback in mutable ref\n  const propsRef = useRef({\n    alarm,\n    chartData,\n    globalChartUnderlay,\n    hoveredX,\n    immediatelyDispatchPanAndZoom,\n    // put it to ref to prevent additional updateOptions() after creating dygraph\n    resetGlobalPanAndZoom,\n    setGlobalChartUnderlay,\n    updateAlarmBadge,\n    updateChartPanOrZoom,\n    viewAfter,\n    viewBefore,\n  })\n\n  const [\n    isProceeded, precededChartRef, updatePrecededPosition,\n  ] = useProceededChart(chartElement, propsRef)\n\n  useLayoutEffect(() => {\n    propsRef.current.alarm = alarm\n    propsRef.current.chartData = chartData\n    propsRef.current.hoveredX = hoveredX\n    propsRef.current.immediatelyDispatchPanAndZoom = immediatelyDispatchPanAndZoom\n    propsRef.current.globalChartUnderlay = globalChartUnderlay\n    propsRef.current.resetGlobalPanAndZoom = resetGlobalPanAndZoom\n    propsRef.current.setGlobalChartUnderlay = setGlobalChartUnderlay\n    propsRef.current.updateAlarmBadge = updateAlarmBadge\n    propsRef.current.updateChartPanOrZoom = updateChartPanOrZoom\n    propsRef.current.viewAfter = viewAfter\n    propsRef.current.viewBefore = viewBefore\n  }, [\n    alarm,\n    chartData,\n    globalChartUnderlay,\n    hoveredX,\n    immediatelyDispatchPanAndZoom,\n    resetGlobalPanAndZoom,\n    setGlobalChartUnderlay,\n    updateAlarmBadge,\n    updateChartPanOrZoom,\n    viewAfter,\n    viewBefore,\n  ])\n\n  const shouldSmoothPlot = useSelector(selectSmoothPlot)\n  useLayoutEffect(() => {\n    if (chartElement && chartElement.current && !dygraphInstance.current && !hasEmptyData) {\n      const dygraphOptionsStatic = getInitialDygraphOptions({\n        attributes,\n        chartData,\n        chartMetadata,\n        chartSettings,\n        dimensionsVisibility,\n        hiddenLabelsElementId,\n        isFakeStacked,\n        orderedColors,\n        setMinMax,\n        shouldSmoothPlot,\n        unitsCurrent,\n        xAxisDateString,\n        xAxisTimeString,\n      })\n\n      latestIsUserAction.current = false\n\n      const dygraphOptions = {\n        ...dygraphOptionsStatic,\n        // set dateWindow on init - this is needed when chart is globalPanAndZoom-master\n        // and user scrolls down/up so the chart hides and then unhides. This causes the chart\n        // to re-create, but the data has additional padding which should be outside of\n        // visible range\n        dateWindow: [propsRef.current.viewAfter, propsRef.current.viewBefore],\n\n        highlightCallback(\n          event: MouseEvent, xval: number,\n        ) {\n          // todo\n          // state.pauseChart()\n\n          const newHoveredX = isMouseDown.current\n            ? null\n            : xval\n\n          const currentHoveredX = propsRef.current.hoveredX\n          if (newHoveredX !== currentHoveredX) {\n            setHoveredX(newHoveredX)\n          }\n        },\n\n        unhighlightCallback() {\n          // todo\n          // state.unpauseChart();\n          if (propsRef.current.hoveredX !== null) {\n            setHoveredX(null)\n          }\n        },\n        drawCallback(dygraph: Dygraph) {\n          // the user has panned the chart and this is called to re-draw the chart\n          // 1. refresh this chart by adding data to it\n          // 2. notify all the other charts about the update they need\n\n          // to prevent an infinite loop (feedback), we use\n          //     state.tmp.dygraph_user_action\n          // - when true, this is initiated by a user\n          // - when false, this is feedback\n\n          if (latestIsUserAction.current) {\n            latestIsUserAction.current = false\n            const xRange = dygraph.xAxisRange()\n            const after = Math.round(xRange[0])\n            const before = Math.round(xRange[1])\n\n            if (isInRangeOfAvailableData({\n              after, before, chartData: propsRef.current.chartData,\n            })) {\n              propsRef.current.updateChartPanOrZoom({ after, before })\n            }\n          }\n        },\n        zoomCallback: (minDate: number, maxDate: number) => {\n          latestIsUserAction.current = true\n          propsRef.current.updateChartPanOrZoom({ after: minDate, before: maxDate })\n        },\n\n        underlayCallback(canvas: CanvasRenderingContext2D, area: DygraphArea, g: Dygraph) {\n          updatePrecededPosition(g)\n\n          if (propsRef.current.alarm) {\n            const { alarm: currentAlarm } = propsRef.current\n\n            const alarmPosition = g.toDomXCoord(currentAlarm.when * 1000)\n            const fillColor = getBorderColor(currentAlarm.status)\n            const horizontalPadding = 3\n            // use RAF, because dygraph doesn't provide any callback called after drawing the chart\n            requestAnimationFrame(() => {\n              canvas.fillStyle = fillColor\n              const globalAlphaCache = canvas.globalAlpha\n              canvas.globalAlpha = 0.7\n              canvas.fillRect(alarmPosition - horizontalPadding, area.y, 2 * horizontalPadding, area.h)\n              canvas.globalAlpha = globalAlphaCache\n            })\n\n            propsRef.current.updateAlarmBadge(\n              propsRef.current.alarm,\n              g,\n              alarmPosition - horizontalPadding,\n            )\n          }\n\n          // the chart is about to be drawn\n          // this function renders global highlighted time-frame\n\n          if (propsRef.current.globalChartUnderlay) {\n            const { after, before } = propsRef.current.globalChartUnderlay\n\n            if (after < before) {\n              const HIGHLIGHT_HORIZONTAL_PADDING = 20\n              const bottomLeft = g.toDomCoords(after, -HIGHLIGHT_HORIZONTAL_PADDING)\n              const topRight = g.toDomCoords(before, HIGHLIGHT_HORIZONTAL_PADDING)\n\n              const left = bottomLeft[0]\n              const right = topRight[0]\n\n              // eslint-disable-next-line no-param-reassign\n              canvas.fillStyle = window.NETDATA.themes.current.highlight\n              canvas.fillRect(left, area.y, right - left, area.h)\n            }\n          }\n        },\n\n        // interactionModel cannot be replaced with updateOptions(). we need to keep all changing\n        // values and callbacks in mutable ref,\n        interactionModel: {\n          mousedown(event: MouseEvent, dygraph: Dygraph, context: any) {\n            // Right-click should not initiate anything.\n            if (event.button && event.button === 2) {\n              return\n            }\n\n            latestIsUserAction.current = true\n            isMouseDown.current = true\n            context.initializeMouseDown(event, dygraph, context)\n\n            // limit problematic dygraph's feature, more info above the function\n            // eslint-disable-next-line no-param-reassign\n            context.tarp.tarps = hackDygraphIFrameTarps(context.tarp.tarps)\n\n            dispatch(setGlobalPauseAction())\n\n            if (event.button && event.button === 1) {\n              // middle mouse button\n\n              if (event.shiftKey) {\n                // panning\n                dygraphHighlightAfter.current = null\n                // @ts-ignore\n                Dygraph.startPan(event, dygraph, context)\n              } else if (event.altKey || event.ctrlKey || event.metaKey) {\n                // middle mouse button highlight\n                dygraphHighlightAfter.current = dygraph.toDataXCoord(event.offsetX)\n                // @ts-ignore\n                Dygraph.startZoom(event, dygraph, context)\n              } else {\n                // middle mouse button selection for zoom\n                dygraphHighlightAfter.current = null\n                // @ts-ignore\n                Dygraph.startZoom(event, dygraph, context)\n              }\n            } else if (event.shiftKey) {\n              // left mouse button selection for zoom (ZOOM)\n              dygraphHighlightAfter.current = null\n              // @ts-ignore\n              Dygraph.startZoom(event, dygraph, context)\n            } else if (event.altKey || event.ctrlKey || event.metaKey) {\n              // left mouse button highlight\n              dygraphHighlightAfter.current = dygraph.toDataXCoord(event.offsetX)\n              // @ts-ignore\n              Dygraph.startZoom(event, dygraph, context)\n            } else {\n              // left mouse button dragging (PAN)\n              dygraphHighlightAfter.current = null\n              // @ts-ignore\n              Dygraph.startPan(event, dygraph, context)\n            }\n          },\n\n          mousemove(event: MouseEvent, dygraph: Dygraph, context: any) {\n            // if (state.tmp.dygraph_highlight_after !== null) {\n            // else if (\n            if (dygraphHighlightAfter.current !== null) {\n              // highlight selection\n              latestIsUserAction.current = true\n              // @ts-ignore\n              Dygraph.moveZoom(event, dygraph, context)\n              event.preventDefault()\n            } else if (context.isPanning) {\n              latestIsUserAction.current = true\n              // eslint-disable-next-line no-param-reassign\n              context.is2DPan = false\n              // @ts-ignore\n              Dygraph.movePan(event, dygraph, context)\n            } else if (context.isZooming) {\n              // @ts-ignore\n              Dygraph.moveZoom(event, dygraph, context)\n            }\n          },\n\n          mouseup(event: MouseEvent, dygraph: Dygraph, context: any) {\n            isMouseDown.current = false\n            if (dygraphHighlightAfter.current !== null) {\n              const sortedRange = sortBy((x) => +x, [\n                dygraphHighlightAfter.current,\n                dygraph.toDataXCoord(event.offsetX),\n              ])\n\n              propsRef.current.setGlobalChartUnderlay({\n                after: sortedRange[0],\n                before: sortedRange[1],\n                masterID: chartData.id,\n              })\n              dygraphHighlightAfter.current = null\n              // eslint-disable-next-line no-param-reassign\n              context.isZooming = false\n\n              // old dashboard code\n              // @ts-ignore\n              // eslint-disable-next-line no-underscore-dangle\n              dygraph.clearZoomRect_()\n              // this call probably fixes the broken selection circle during highlighting\n              // and forces underlayCallback to fire (and draw highlight-rect\n              // @ts-ignore\n              // eslint-disable-next-line no-underscore-dangle\n              dygraph.drawGraph_(false)\n            } else if (context.isPanning) {\n              latestIsUserAction.current = true\n              // @ts-ignore\n              Dygraph.endPan(event, dygraph, context)\n              propsRef.current.immediatelyDispatchPanAndZoom()\n            } else if (context.isZooming) {\n              latestIsUserAction.current = true\n              // @ts-ignore\n              Dygraph.endZoom(event, dygraph, context)\n              propsRef.current.immediatelyDispatchPanAndZoom()\n            }\n          },\n\n          wheel(event: WheelEvent, dygraph: Dygraph) {\n            if (!event.shiftKey && !event.altKey) return\n\n            latestIsUserAction.current = true\n            event.preventDefault()\n            event.stopPropagation()\n\n            // https://dygraphs.com/gallery/interaction-api.js\n            const zoom = (g, zoomInPercentage, bias) => {\n              bias = bias || 0.5\n              const [afterAxis, beforeAxis] = g.xAxisRange()\n              const delta = beforeAxis - afterAxis\n              const increment = delta * zoomInPercentage\n              const [afterIncrement, beforeIncrement] = [increment * bias, increment * (1 - bias)]\n\n              const after = afterAxis + afterIncrement\n              const before = beforeAxis - beforeIncrement\n\n              propsRef.current.updateChartPanOrZoom({\n                after,\n                before,\n                shouldNotExceedAvailableRange: true,\n                callback: (updatedAfter: number, updatedBefore: number) => {\n                  dygraph.updateOptions({\n                    dateWindow: [updatedAfter, updatedBefore],\n                  })\n                },\n              })\n            }\n\n            const offsetToPercentage = (g, offsetX) => {\n              // This is calculating the pixel offset of the leftmost date.\n              const [axisAfterOffset] = g.toDomCoords(g.xAxisRange()[0], null)\n              // x and w are relative to the corner of the drawing area,\n              // so that the upper corner of the drawing area is (0, 0).\n              const x = offsetX - axisAfterOffset\n              // This is computing the rightmost pixel, effectively defining the\n              // width.\n              const w = g.toDomCoords(g.xAxisRange()[1], null)[0] - axisAfterOffset\n\n              // Percentage from the left.\n              return w === 0 ? 0 : x / w\n            }\n\n            const normalDef =\n              typeof event.wheelDelta === \"number\" && !Number.isNaN(event.wheelDelta)\n                ? event.wheelDelta / 40\n                : event.deltaY * -1.2\n\n            const normal = event.detail ? event.detail * -1 : normalDef\n            const percentage = normal / 50\n\n            if (!event.offsetX) event.offsetX = event.layerX - event.target.offsetLeft\n            const xPct = offsetToPercentage(dygraph, event.offsetX)\n\n            zoom(dygraph, percentage, xPct)\n          },\n\n          click(event: MouseEvent) {\n            event.preventDefault()\n          },\n\n          dblclick() {\n            dispatch(resetGlobalPauseAction({ forcePlay: false }))\n            propsRef.current.resetGlobalPanAndZoom()\n          },\n\n          touchstart(event: TouchEvent, dygraph: Dygraph, context: any) {\n            isMouseDown.current = true\n            latestIsUserAction.current = true\n\n            // todo\n            // state.pauseChart()\n\n            Dygraph.defaultInteractionModel.touchstart(event, dygraph, context)\n\n            // we overwrite the touch directions at the end, to overwrite\n            // the internal default of dygraph\n            // eslint-disable-next-line no-param-reassign\n            context.touchDirections = { x: true, y: false }\n\n            dygraphLastTouchMove.current = 0\n\n            if (typeof event.touches[0].pageX === \"number\") {\n              dygraphLastTouchPageX.current = event.touches[0].pageX\n            } else {\n              dygraphLastTouchPageX.current = 0\n            }\n          },\n          touchmove(event: TouchEvent, dygraph: Dygraph, context: any) {\n            latestIsUserAction.current = true\n            Dygraph.defaultInteractionModel.touchmove(event, dygraph, context)\n\n            dygraphLastTouchMove.current = Date.now()\n          },\n\n          touchend(event: TouchEvent, dygraph: Dygraph, context: any) {\n            isMouseDown.current = false\n            latestIsUserAction.current = true\n            Dygraph.defaultInteractionModel.touchend(event, dygraph, context)\n\n            // if it didn't move, it is a selection\n            if (dygraphLastTouchMove.current === 0 && dygraphLastTouchPageX.current !== 0\n              && chartElement.current // this is just for TS\n            ) {\n              latestIsUserAction.current = false // prevent updating pan-and-zoom\n              // internal api of dygraph\n              // @ts-ignore\n              // eslint-disable-next-line no-underscore-dangle\n              const dygraphPlotter = dygraph.plotter_\n              const pct = (dygraphLastTouchPageX.current - (\n                dygraphPlotter.area.x + chartElement.current.getBoundingClientRect().left\n              )) / dygraphPlotter.area.w\n\n              const { current } = propsRef\n              const t = Math.round(current.viewAfter\n                + (current.viewBefore - current.viewAfter) * pct)\n              // dont set \"master\" so the highlight is recalculated (to match existing row)\n              setHoveredX(t, true)\n            }\n\n            // if it was double tap within double click time, reset the charts\n            const now = Date.now()\n            if (typeof dygraphLastTouchEnd.current !== \"undefined\") {\n              if (dygraphLastTouchMove.current === 0) {\n                const dt = now - dygraphLastTouchEnd.current\n                if (dt <= window.NETDATA.options.current.double_click_speed) {\n                  propsRef.current.resetGlobalPanAndZoom()\n                }\n              }\n            }\n\n            // remember the timestamp of the last touch end\n            dygraphLastTouchEnd.current = now\n            propsRef.current.immediatelyDispatchPanAndZoom()\n          },\n        },\n      }\n\n      const data = isFakeStacked\n        ? getDataForFakeStacked(chartData.result.data, dimensionsVisibility)\n        : chartData.result.data\n      const instance = new Dygraph((chartElement.current), data, dygraphOptions)\n      dygraphInstance.current = instance\n    }\n  }, [attributes, chartData, chartMetadata, chartSettings, chartUuid, dimensionsVisibility,\n    hasEmptyData, hiddenLabelsElementId, isFakeStacked,\n    orderedColors, setHoveredX, setMinMax, shouldSmoothPlot, unitsCurrent,\n    xAxisDateString, xAxisTimeString, updatePrecededPosition, dispatch])\n\n  useUpdateEffect(() => {\n    if (dygraphInstance.current) {\n      const isSparkline = attributes.dygraphTheme === \"sparkline\"\n      const isLegendOnBottom = attributes.legendPosition === \"bottom\"\n      dygraphInstance.current.updateOptions({\n        ylabel: (isSparkline || isLegendOnBottom) ? undefined : unitsCurrent,\n      })\n    }\n  }, [attributes, unitsCurrent])\n\n\n  // immediately update when changing global chart underlay or currently showed alarm\n  useUpdateEffect(() => {\n    if (dygraphInstance.current) {\n      dygraphInstance.current.updateOptions({})\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [alarm, globalChartUnderlay])\n\n  const spacePanelTransitionEndIsActive = useSelector(selectSpacePanelTransitionEndIsActive)\n  useUpdateEffect(() => {\n    if (dygraphInstance.current) {\n      // dygraph always resizes on browser width change, but doesn't resize when the container\n      // has different width.\n      window.requestAnimationFrame(() => {\n        if (dygraphInstance.current) {\n          (dygraphInstance.current as NetdataDygraph).resize()\n        }\n      })\n    }\n  }, [spacePanelTransitionEndIsActive])\n\n  // update data of the chart\n  // first effect should only be made by new DygraphInstance()\n  useUpdateEffect(() => {\n    // dont update when there is no data - in this case we should still show old chart\n    if (dygraphInstance.current && !hasEmptyData) {\n      // todo support state.tmp.dygraph_force_zoom\n      const forceDateWindow = [viewAfter, viewBefore]\n\n      // in old dashboard, when chart needed to reset internal dateWindow state,\n      // dateWindow was set to null, and new dygraph got the new dateWindow from results.\n      // this caused small unsync between dateWindow of parent (master) and child charts\n      // i also detected that forceDateWindow timestamps have slightly better performance (10%)\n      // so if the chart needs to change local dateWindow, we'll always use timestamps instead of\n      // null.\n\n      const xAxisRange = dygraphInstance.current.xAxisRange()\n      // eslint-disable-next-line max-len\n      const hasChangedDuration = Math.abs((viewBefore - viewAfter) - (xAxisRange[1] - xAxisRange[0])) > timeframeThreshold\n\n      // check if the time is relative\n      const hasScrolledToTheFutureDuringPlayMode = viewBefore <= 0\n      && (xAxisRange[1] > viewBefore)\n      // if viewAfter is bigger than current dateWindow start, just reset dateWindow\n      && (xAxisRange[0] > viewAfter)\n      && !hasChangedDuration\n\n      const optionsDateWindow = (isRemotelyControlled && !hasScrolledToTheFutureDuringPlayMode)\n        ? { dateWindow: forceDateWindow }\n        : {}\n\n      const { dygraphColors = orderedColors } = attributes\n      const file = isFakeStacked\n        ? getDataForFakeStacked(chartData.result.data, dimensionsVisibility)\n        : chartData.result.data\n\n      const includeZero = dimensionsVisibility.length === 1 ||\n        dimensionsVisibility.filter(x => x === true).length > 1\n\n      dygraphInstance.current.updateOptions({\n        ...optionsDateWindow,\n        colors: isFakeStacked ? transformColors(reverse(dygraphColors)) : dygraphColors,\n        file,\n        labels: chartData.result.labels,\n        fillAlpha: dygraphFillAlpha,\n        ...(dygraphChartType === \"stacked\" ? { includeZero } : {}),\n        stackedGraph: dygraphChartType === \"stacked\" && !isFakeStacked,\n        // see explanation about reversing before isFakeStacked assignment\n        visibility: isFakeStacked ? reverse(dimensionsVisibility) : dimensionsVisibility,\n      })\n    }\n  }, [attributes, chartData.result, chartUuid, dimensionsVisibility, dygraphChartType,\n    dygraphFillAlpha, hasEmptyData, isFakeStacked, isRemotelyControlled, orderedColors,\n    viewAfter, viewBefore])\n\n  useUpdateEffect(() => {\n    if (!dygraphInstance.current) {\n      return\n    }\n\n    const dygraphOptionsStatic = getInitialDygraphOptions({\n      attributes,\n      chartData,\n      chartMetadata,\n      chartSettings,\n      dimensionsVisibility,\n      hiddenLabelsElementId,\n      isFakeStacked,\n      orderedColors,\n      setMinMax,\n      shouldSmoothPlot,\n      unitsCurrent,\n      xAxisDateString,\n      xAxisTimeString,\n    })\n    if (!hasEmptyData) dygraphInstance.current.updateOptions(dygraphOptionsStatic)\n  }, [dygraphChartType, timezone])\n\n  // set selection\n  const currentSelectionMasterId = useSelector(selectGlobalSelectionMaster)\n  useLayoutEffect(() => {\n    if (dygraphInstance.current && currentSelectionMasterId !== chartUuid) {\n      if (hoveredRow === -1) {\n        // getSelection is 100 times faster that clearSelection\n        if (dygraphInstance.current.getSelection() !== -1) {\n          dygraphInstance.current.clearSelection()\n        }\n        return\n      }\n      dygraphInstance.current.setSelection(hoveredRow)\n    }\n  }, [chartData, chartUuid, currentSelectionMasterId, hoveredRow,\n    viewAfter, viewBefore])\n\n\n  // handle resizeHeight change\n  const resizeHeight = useSelector(\n    (state: AppStateT) => selectResizeHeight(state, { id: chartUuid }),\n  )\n  useLayoutEffect(() => {\n    if (dygraphInstance.current) {\n      (dygraphInstance.current as NetdataDygraph).resize()\n    }\n  }, [resizeHeight, chartData.dimension_names.length])\n\n\n  const commonMinState = useSelector((state: AppStateT) => (\n    attributes.commonMin\n      ? selectCommonMin(state, attributes.commonMin)\n      : undefined\n  ))\n  const commonMaxState = useSelector((state: AppStateT) => (\n    attributes.commonMax\n      ? selectCommonMax(state, attributes.commonMax)\n      : undefined\n  ))\n\n  useLayoutEffect(() => {\n    const { commonMin: commonMinKey, commonMax: commonMaxKey } = attributes\n\n    if (\n      dygraphInstance.current\n      && (commonMinKey || commonMaxKey)\n    ) {\n      const extremes = (dygraphInstance.current as NetdataDygraph).yAxisExtremes()[0]\n      const [currentMin, currentMax] = extremes\n\n      const {\n        dygraphValueRange = [null, null],\n      } = attributes\n      // if the user gave a valueRange, respect it\n      const shouldUseCommonMin = dygraphValueRange[0] === null\n      const shouldUseCommonMax = dygraphValueRange[1] === null\n\n\n      let shouldUpdate = false\n      let valueRange: number[] = [...extremes]\n\n      // check if current extreme (painted by dygraph) is not more extreme than commonMin/Max\n      // if yes - update the chart\n      if (commonMinKey && shouldUseCommonMin) {\n        if (commonMinState && commonMinState.currentExtreme < currentMin) {\n          valueRange[0] = commonMinState.currentExtreme\n          shouldUpdate = true\n        }\n      }\n      if (commonMaxKey && shouldUseCommonMax) {\n        if (commonMaxState && commonMaxState.currentExtreme > currentMax) {\n          valueRange[1] = commonMaxState.currentExtreme\n          shouldUpdate = true\n        }\n      }\n\n      if (shouldUpdate) {\n        dygraphInstance.current.updateOptions({ valueRange })\n        const newExtremes = (dygraphInstance.current as NetdataDygraph).yAxisExtremes()[0]\n        // get updated valueRange (rounded by dygraph)\n        valueRange = [...newExtremes]\n      }\n\n      // if the value is different than the one stored in state, update redux state\n      if (commonMinKey && shouldUseCommonMin\n        && (valueRange[0] !== commonMinState?.charts[chartUuid])\n      ) {\n        dispatch(setCommonMinAction({ chartUuid, commonMinKey, value: valueRange[0] }))\n      }\n      if (commonMaxKey && shouldUseCommonMax\n        && (valueRange[1] !== commonMaxState?.charts[chartUuid])\n      ) {\n        dispatch(setCommonMaxAction({ chartUuid, commonMaxKey, value: valueRange[1] }))\n      }\n    }\n  }, [attributes, chartData.result, chartUuid, commonMinState, commonMaxState, dispatch])\n\n  useLayoutEffect(() => {\n    if (isProceeded && dygraphInstance.current) {\n      updatePrecededPosition(dygraphInstance.current)\n    }\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [isProceeded])\n\n  useUnmount(() => {\n    if (dygraphInstance.current) {\n      dygraphInstance.current.destroy()\n    }\n  })\n\n  /**\n   * resize with ResizeObserver\n   */\n  const resizeObserver = useRef<ResizeObserver>()\n  useMount(() => {\n    if (!attributes.detectResize) {\n      return\n    }\n    // flag used to prevent first callback (and resize) on dygraph initial draw\n    let hasOmitedFirstCallback = false\n    const callbackDebounced = debounce(() => {\n      if (!hasOmitedFirstCallback) {\n        hasOmitedFirstCallback = true\n        return\n      }\n\n      if (dygraphInstance.current) {\n        (dygraphInstance.current as NetdataDygraph).resize()\n      }\n    }, dygraphResizeDebounceTime)\n\n    resizeObserver.current = new ResizeObserver(() => {\n      callbackDebounced()\n    })\n    resizeObserver.current.observe(chartElement.current as HTMLDivElement)\n  })\n\n  useUnmount(() => {\n    dygraphInstance.current = null // clear it for debounce purposes\n    if (resizeObserver.current) {\n      resizeObserver.current.disconnect()\n    }\n  })\n\n  const isLegendOnBottom = attributes.legendPosition === \"bottom\"\n\n  return (\n    <>\n      <div\n        ref={chartElement}\n        id={chartElementId}\n        className={classNames(\n          chartElementClassName,\n          { \"dygraph-chart--legend-bottom\": isLegendOnBottom },\n        )}\n      />\n      {isProceeded && hasLegend && (\n        <ProceededChartDisclaimer ref={precededChartRef as React.Ref<HTMLDivElement>} />\n      )}\n      {alarm?.value && hasLegend && (\n        // @ts-ignore\n        <AlarmBadge\n          isVisible={isAlarmBadgeVisible}\n          ref={alarmBadgeRef}\n          status={alarm.status}\n          label={alarm.value}\n        />\n      )}\n      <div className=\"dygraph-chart__labels-hidden\" id={hiddenLabelsElementId} />\n    </>\n  )\n}\n","// https://gist.github.com/ca0v/73a31f57b397606c9813472f7493a940\n\nexport const debounce = <F extends (...args: any[]) => any>(func: F, waitFor: number) => {\n  let timeout: ReturnType<typeof setTimeout> | null = null\n\n  const debounced = (...args: Parameters<F>) => {\n    if (timeout !== null) {\n      clearTimeout(timeout)\n      timeout = null\n    }\n    timeout = setTimeout(() => func(...args), waitFor)\n  }\n\n  return debounced as (...args: Parameters<F>) => ReturnType<F>\n}\n","import React, { useRef, useEffect, useState } from \"react\"\n// @ts-ignore \"declare module\" doesn't work properly when importing dashboard in cloud\nimport EasyPie from \"easy-pie-chart\"\n\nimport { Attributes } from \"domains/chart/utils/transformDataAttributes\"\nimport { ChartMetadata, EasyPieChartData } from \"domains/chart/chart-types\"\nimport { ChartLibraryName } from \"domains/chart/utils/chartLibrariesSettings\"\nimport {\n  always, cond, identity, T, sortBy, map, pipe,\n} from \"ramda\"\n\ntype GetPercentFromValueMinMax = (arg: {\n  value: number | undefined\n  min: number | undefined\n  max: number | undefined\n  isMinOverride: boolean\n  isMaxOverride: boolean\n}) => number\nconst getPercentFromValueMinMax: GetPercentFromValueMinMax = ({\n  value = 0, min = 0, max = 0,\n  isMinOverride,\n  isMaxOverride,\n}) => {\n  /* eslint-disable no-param-reassign */\n  // todo refractor old logic to readable functions\n  // if no easyPiechart-min-value attribute\n  if (!isMinOverride && min > 0) {\n    min = 0\n  }\n  if (!isMaxOverride && max < 0) {\n    max = 0\n  }\n\n  let pcent\n\n  if (min < 0 && max > 0) {\n    // it is both positive and negative\n    // zero at the top center of the chart\n    max = (-min > max) ? -min : max\n    pcent = Math.round((value * 100) / max)\n  } else if (value >= 0 && min >= 0 && max >= 0) {\n    // clockwise\n    pcent = Math.round(((value - min) * 100) / (max - min))\n    if (pcent === 0) {\n      pcent = 0.1\n    }\n  } else {\n    // counter clockwise\n    pcent = Math.round(((value - max) * 100) / (max - min))\n    if (pcent === 0) {\n      pcent = -0.1\n    }\n  }\n  /* eslint-enable no-param-reassign */\n  return pcent\n}\n\ninterface Props {\n  attributes: Attributes\n  chartData: EasyPieChartData\n  chartMetadata: ChartMetadata\n  chartElementClassName: string\n  chartElementId: string\n  chartLibrary: ChartLibraryName\n  chartUuid: string\n  colors: {\n    [key: string]: string\n  }\n  chartWidth: number\n  dimensionsVisibility: boolean[]\n  isRemotelyControlled: boolean\n  legendFormatValue: ((v: number | string | null) => number | string)\n  onUpdateChartPanAndZoom: (arg: {\n    after: number, before: number,\n    callback: (after: number, before: number) => void,\n    masterID: string,\n    shouldNotExceedAvailableRange: boolean,\n  }) => void\n  orderedColors: string[]\n\n  hoveredRow: number\n  setGlobalChartUnderlay: (arg: { after: number, before: number, masterID: string }) => void\n  setMinMax: (minMax: [number, number]) => void\n  showUndefined: boolean\n  unitsCurrent: string\n  viewAfter: number\n  viewBefore: number\n}\nexport const EasyPieChart = ({\n  attributes,\n  chartData,\n  chartMetadata,\n  chartElementClassName,\n  chartElementId,\n  chartWidth,\n  hoveredRow,\n  legendFormatValue,\n  orderedColors,\n  setMinMax,\n  showUndefined,\n  unitsCurrent,\n}: Props) => {\n  const chartElement = useRef<HTMLDivElement>(null)\n  const [chartInstance, setChartInstance] = useState()\n\n  const valueIndex = hoveredRow === -1\n    ? 0\n    : (chartData.result.length - 1 - hoveredRow) // because data for easy-pie-chart are flipped\n  const value = showUndefined ? null : chartData.result[valueIndex]\n\n  const {\n    // if this is set, then we're overriding commonMin\n    easyPieChartMinValue: min = chartData.min, // todo replace with commonMin\n    easyPieChartMaxValue: max = chartData.max, // todo replace with commonMax\n  } = attributes\n\n  // make sure the order is correct and that value is not outside those boundaries\n  // (this check was present in old dashboard but perhaps it's not needed)\n  const safeMinMax = pipe(\n    map((x: number) => +x),\n    sortBy(identity),\n    ([_min, _max]: number[]) => [Math.min(_min, value || 0), Math.max(_max, value || 0)],\n  )([min, max])\n\n  useEffect(() => {\n    setMinMax(safeMinMax as [number, number])\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [safeMinMax])\n\n  const pcent = getPercentFromValueMinMax({\n    value: showUndefined ? 0 : (value as number),\n    min: safeMinMax[0],\n    max: safeMinMax[1],\n    isMinOverride: attributes.easyPieChartMinValue !== undefined,\n    isMaxOverride: attributes.easyPieChartMaxValue !== undefined,\n  })\n\n  useEffect(() => {\n    if (chartElement.current && !chartInstance) {\n      const stroke = cond([\n        [(v) => v < 3, always(2)],\n        [T, identity],\n      ])(Math.floor(chartWidth / 22))\n\n      const {\n        easyPieChartTrackColor = window.NETDATA.themes.current.easypiechart_track,\n        easyPieChartScaleColor = window.NETDATA.themes.current.easypiechart_scale,\n        easyPieChartScaleLength = 5,\n        easyPieChartLineCap = \"round\",\n        easyPieChartLineWidth = stroke,\n        easyPieChartTrackWidth,\n        easyPieChartSize = chartWidth,\n        easyPieChartRotate = 0,\n        easyPieChartAnimate = { duration: 500, enabled: true },\n        easyPieChartEasing,\n      } = attributes\n\n      const newChartInstance = new EasyPie(chartElement.current, {\n        barColor: orderedColors[0],\n        trackColor: easyPieChartTrackColor,\n        scaleColor: easyPieChartScaleColor,\n        scaleLength: easyPieChartScaleLength,\n        lineCap: easyPieChartLineCap,\n        lineWidth: easyPieChartLineWidth,\n        trackWidth: easyPieChartTrackWidth,\n        size: easyPieChartSize,\n        rotate: easyPieChartRotate,\n        animate: easyPieChartAnimate,\n        easing: easyPieChartEasing,\n      })\n      setChartInstance(newChartInstance)\n    }\n  }, [attributes, chartData, chartInstance, chartWidth, orderedColors])\n\n  // update with value\n  useEffect(() => {\n    if (chartInstance) {\n      const shouldUseAnimation = hoveredRow === -1 && !showUndefined\n\n      if (shouldUseAnimation && !chartInstance.options.animate.enabled) {\n        chartInstance.enableAnimation()\n      } else if (!shouldUseAnimation && chartInstance.options.animate.enabled) {\n        chartInstance.disableAnimation()\n      }\n\n      setTimeout(() => {\n        // need to be in timeout to trigger animation properly\n        chartInstance.update(pcent)\n      }, 0)\n    }\n  }, [chartInstance, hoveredRow, pcent, showUndefined])\n\n  const valueFontSize = (chartWidth * 2) / 3 / 5\n  const valuetop = Math.round((chartWidth - valueFontSize - (chartWidth / 40)) / 2)\n\n  const titleFontSize = Math.round((valueFontSize * 1.6) / 3)\n  const titletop = Math.round(valuetop - (titleFontSize * 2) - (chartWidth / 40))\n\n  const unitFontSize = Math.round(titleFontSize * 0.9)\n  const unitTop = Math.round(valuetop + (valueFontSize + unitFontSize) + (chartWidth / 40))\n  // to update, just label innerText and pcent are changed\n\n  return (\n    <div ref={chartElement} id={chartElementId} className={chartElementClassName}>\n      <span\n        className=\"easyPieChartLabel\"\n        style={{\n          fontSize: valueFontSize,\n          top: valuetop,\n        }}\n      >\n        {legendFormatValue(value)}\n      </span>\n      <span\n        className=\"easyPieChartTitle\"\n        style={{\n          fontSize: titleFontSize,\n          top: titletop,\n        }}\n      >\n        {attributes.title || chartMetadata.title}\n      </span>\n      <span\n        className=\"easyPieChartUnits\"\n        style={{\n          fontSize: unitFontSize,\n          top: unitTop,\n        }}\n      >\n        {unitsCurrent}\n      </span>\n\n    </div>\n  )\n}\n","import React, {\n  useRef, useEffect, useState,\n} from \"react\"\n// @ts-ignore \"declare module\" doesn't work properly when importing dashboard in cloud\nimport { Gauge } from \"gaugeJS\"\n\nimport { Attributes } from \"domains/chart/utils/transformDataAttributes\"\nimport { ChartMetadata, EasyPieChartData } from \"domains/chart/chart-types\"\nimport { ChartLibraryName } from \"domains/chart/utils/chartLibrariesSettings\"\nimport {\n  identity, sortBy, map, pipe, always,\n} from \"ramda\"\n\nconst isSetByUser = (x: undefined | number): x is number => (\n  typeof x === \"number\"\n)\n\ninterface Props {\n  attributes: Attributes\n  chartData: EasyPieChartData\n  chartMetadata: ChartMetadata\n  chartElementClassName: string\n  chartElementId: string\n  chartLibrary: ChartLibraryName\n  chartUuid: string\n  colors: {\n    [key: string]: string\n  }\n  chartHeight: number\n  chartWidth: number\n  dimensionsVisibility: boolean[]\n  isRemotelyControlled: boolean\n  legendFormatValue: ((v: number | string | null) => number | string)\n  onUpdateChartPanAndZoom: (arg: {\n    after: number, before: number,\n    callback: (after: number, before: number) => void,\n    masterID: string,\n    shouldNotExceedAvailableRange: boolean,\n  }) => void\n  orderedColors: string[]\n\n  hoveredRow: number\n  hoveredX: number | null\n  setGlobalChartUnderlay: (arg: { after: number, before: number, masterID: string }) => void\n  setHoveredX: (hoveredX: number | null, noMaster?: boolean) => void\n  setMinMax: (minMax: [number, number]) => void\n  showUndefined: boolean\n  unitsCurrent: string\n  viewAfter: number\n  viewBefore: number\n}\nexport const GaugeChart = ({\n  attributes,\n  chartData,\n  chartMetadata,\n  chartElementClassName,\n  chartElementId,\n  chartUuid,\n  chartHeight,\n  chartWidth,\n  hoveredRow,\n  legendFormatValue,\n  orderedColors,\n  setMinMax,\n  showUndefined,\n  unitsCurrent,\n}: Props) => {\n  const chartCanvasElement = useRef<HTMLCanvasElement>(null)\n  const [chartInstance, setChartInstance] = useState()\n\n  const valueIndex = hoveredRow === -1\n    ? 0\n    : (chartData.result.length - 1 - hoveredRow) // because data for easy-pie-chart are flipped\n  const value = chartData.result[valueIndex]\n\n  const {\n    // if this is set, then we're overriding commonMin\n    gaugeMinValue: minAttribute,\n    gaugeMaxValue: maxAttribute,\n  } = attributes\n\n  const min = isSetByUser(minAttribute) ? minAttribute : chartData.min\n  const max = isSetByUser(maxAttribute) ? maxAttribute : chartData.max\n  // we should use minAttribute if it's existing\n  // old app was using commonMin\n\n  // make sure the order is correct and that value is not outside those boundaries\n  // (this check was present in old dashboard but perhaps it's not needed)\n  const [safeMin, safeMax] = pipe(\n    // if they are attributes, make sure they're converted to numbers\n    map((x: number) => +x),\n    // make sure it is zero based\n    // but only if it has not been set by the user\n    ([_min, _max]: number[]) => [\n      (!isSetByUser(minAttribute) && _min > 0) ? 0 : _min,\n      (!isSetByUser(maxAttribute) && _max < 0) ? 0 : _max,\n    ],\n    // make sure min <= max\n    sortBy(identity),\n    ([_min, _max]: number[]) => [Math.min(_min, value), Math.max(_max, value)],\n  )([min, max])\n  // calling outside \"useEffect\" intentionally,\n  // because it should update the values first, and only then render the chart in useEffect()\n  useEffect(() => {\n    setMinMax([safeMin, safeMax])\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [safeMin, safeMax])\n\n  const pcent = pipe(\n    always(((value - safeMin) * 100) / (safeMax - safeMin)),\n    // bug fix for gauge.js 1.3.1\n    // if the value is the absolute min or max, the chart is broken\n    (_pcent: number) => Math.max(0.001, _pcent),\n    (_pcent: number) => Math.min(99.999, _pcent),\n  )()\n\n  useEffect(() => {\n    if (chartCanvasElement.current && !chartInstance) {\n      const {\n        gaugePointerColor = window.NETDATA.themes.current.gauge_pointer,\n        gaugeStrokeColor = window.NETDATA.themes.current.gauge_stroke,\n        gaugeStartColor = orderedColors[0],\n        gaugeStopColor,\n        gaugeGenerateGradient = false,\n      } = attributes\n\n      const options = {\n        lines: 12, // The number of lines to draw\n        angle: 0.14, // The span of the gauge arc\n        lineWidth: 0.57, // The line thickness\n        radiusScale: 1.0, // Relative radius\n        pointer: {\n          length: 0.85, // 0.9 The radius of the inner circle\n          strokeWidth: 0.045, // The rotation offset\n          color: gaugePointerColor, // Fill color\n        },\n\n        // If false, the max value of the gauge will be updated if value surpass max\n        // If true, the min value of the gauge will be fixed unless you set it manually\n        limitMax: true,\n        limitMin: true,\n        colorStart: gaugeStartColor,\n        colorStop: gaugeStopColor,\n        strokeColor: gaugeStrokeColor,\n        generateGradient: (gaugeGenerateGradient === true), // gmosx:\n        gradientType: 0,\n        highDpiSupport: true, // High resolution support\n      }\n\n      const newChartInstance = new Gauge(chartCanvasElement.current).setOptions(options)\n\n      // we will always feed a percentage (copied from old dashboard)\n      newChartInstance.minValue = 0\n      newChartInstance.maxValue = 100\n\n      setChartInstance(newChartInstance)\n    }\n  }, [attributes, chartData, chartInstance, chartWidth, orderedColors])\n\n  // update with value\n  useEffect(() => {\n    if (chartInstance) {\n      // gauge animation\n      const shouldUseAnimation = hoveredRow === -1 && !showUndefined\n      // animation doesn't work in newest, 1.3.7 version!\n      const speed = shouldUseAnimation ? 32 : 1000000000\n      chartInstance.animationSpeed = speed\n      setTimeout(() => {\n        chartInstance.set(showUndefined ? 0 : pcent)\n      }, 0)\n    }\n  }, [chartInstance, chartHeight, chartWidth, hoveredRow, pcent, showUndefined])\n\n  const valueFontSize = Math.floor(chartHeight / 5)\n  const valueTop = Math.round((chartHeight - valueFontSize) / 3.2)\n\n  const titleFontSize = Math.round(valueFontSize / 2.1)\n  const titleTop = 0\n\n  const unitFontSize = Math.round(titleFontSize * 0.9)\n\n  const minMaxFontSize = Math.round(valueFontSize * 0.75)\n  return (\n    <div\n      id={chartElementId}\n      className={chartElementClassName}\n    >\n      <canvas\n        ref={chartCanvasElement}\n        className=\"gaugeChart\"\n        id={`gauge-${chartUuid}-canvas`}\n        style={{\n          width: chartWidth,\n          height: chartHeight,\n        }}\n      />\n      <span\n        className=\"gaugeChartLabel\"\n        style={{\n          fontSize: valueFontSize,\n          top: valueTop,\n        }}\n      >\n        {legendFormatValue(showUndefined ? null : value)}\n      </span>\n      <span\n        className=\"gaugeChartTitle\"\n        style={{\n          fontSize: titleFontSize,\n          top: titleTop,\n        }}\n      >\n        {attributes.title || chartMetadata.title}\n      </span>\n      <span\n        className=\"gaugeChartUnits\"\n        style={{\n          fontSize: unitFontSize,\n        }}\n      >\n        {unitsCurrent}\n      </span>\n      <span className=\"gaugeChartMin\" style={{ fontSize: minMaxFontSize }}>\n        {legendFormatValue(showUndefined ? null : safeMin)}\n      </span>\n      <span className=\"gaugeChartMax\" style={{ fontSize: minMaxFontSize }}>\n        {legendFormatValue(showUndefined ? null : safeMax)}\n      </span>\n    </div>\n  )\n}\n","import {\n  cond, identity, map, pipe, replace, splitEvery, T, toString,\n} from \"ramda\"\n\ntype NormalizeHex = (hex: string) => string\nexport const normalizeHex: NormalizeHex = pipe(\n  toString,\n  replace(/[^0-9a-f]/gi, \"\"),\n  cond([\n    [(str) => str.length < 6, (str) => str[0] + str[0] + str[1] + str[1] + str[2] + str[2]],\n    [T, identity],\n  ]),\n)\n\nexport const colorLuminance = (hex: string, lum: number = 0) => {\n  const hexNormalized = normalizeHex(hex)\n\n  // convert to decimal and change luminosity\n  const rgb = pipe(\n    // point-free version generates ts error\n    (str: string) => splitEvery(2, str),\n    map(\n      pipe(\n        (str: string) => parseInt(str, 16),\n        (nr) => Math.round(\n          Math.min(\n            Math.max(0, nr + (nr * lum)),\n            255,\n          ),\n        ).toString(16),\n        (str) => `00${str}`.substr(str.length),\n      ),\n    ),\n    (x) => x.join(\"\"),\n  )(hexNormalized)\n  return `#${rgb}`\n}\n","/* eslint-disable indent */\n/* eslint-disable operator-linebreak */\n/* eslint-disable comma-dangle */\n/* eslint-disable react-hooks/exhaustive-deps */\n/* eslint-disable consistent-return */\nimport \"jquery-sparkline\"\nimport React, { useRef, useEffect, useState } from \"react\"\n\nimport { Attributes } from \"domains/chart/utils/transformDataAttributes\"\nimport { ChartMetadata, EasyPieChartData } from \"domains/chart/chart-types\"\nimport { colorLuminance } from \"domains/chart/utils/color-luminance\"\nimport { MS_IN_SECOND } from \"utils/utils\"\nimport { TimeRange } from \"types/common\"\n\nconst convertToTimestamp = (number: number) => {\n  if (number > 0) {\n    return number\n  }\n  return new Date().valueOf() + number // number is negative or zero\n}\n\ninterface TimeWindowCorrection {\n  paddingLeftPercentage?: string\n  widthRatio?: number\n}\nconst getForceTimeWindowCorrection = (\n  chartData: EasyPieChartData,\n  viewRange: TimeRange\n): TimeWindowCorrection => {\n  const requestedAfter = convertToTimestamp(viewRange[0])\n  const requestedBefore = convertToTimestamp(viewRange[1])\n  const after = chartData.after * MS_IN_SECOND\n  const before = chartData.before * MS_IN_SECOND\n\n  const currentDuration = before - after\n  const requestedDuration = requestedBefore - requestedAfter\n  // don't do overrides when current (available) duration is bigger or only slightly lower\n  // than requested duration\n  const DURATION_CHANGE_TOLERANCE = 1.03\n  if (currentDuration > requestedDuration / DURATION_CHANGE_TOLERANCE) {\n    return {}\n  }\n\n  const widthRatio = currentDuration / requestedDuration\n\n  const visibleDuration = requestedBefore - requestedAfter\n  const paddingLeftPercentage = `${100 * ((after - requestedAfter) / visibleDuration)}%`\n\n  return {\n    paddingLeftPercentage,\n    widthRatio,\n  }\n}\n\ninterface Props {\n  attributes: Attributes\n  chartContainerElement: HTMLElement\n  chartData: EasyPieChartData\n  chartMetadata: ChartMetadata\n  chartElementClassName: string\n  chartElementId: string\n  dimensionsVisibility: boolean[]\n  isRemotelyControlled: boolean\n  orderedColors: string[]\n  unitsCurrent: string\n  viewAfterForCurrentData: number\n  viewBeforeForCurrentData: number\n}\nexport const SparklineChart = ({\n  attributes,\n  chartContainerElement,\n  chartData,\n  chartMetadata,\n  chartElementClassName,\n  chartElementId,\n  orderedColors,\n  unitsCurrent,\n  viewAfterForCurrentData,\n  viewBeforeForCurrentData,\n}: Props) => {\n  const chartElement = useRef<HTMLDivElement>(null)\n\n  // update width, height automatically each time\n  const [$chartElement, set$chartElement] = useState()\n  const sparklineOptions = useRef<{ [key: string]: any }>()\n\n  const { paddingLeftPercentage = undefined, widthRatio = 1 } = attributes.forceTimeWindow\n    ? getForceTimeWindowCorrection(chartData, [viewAfterForCurrentData, viewBeforeForCurrentData])\n    : {}\n\n  const updateSparklineValues = () => {\n    if (!$chartElement) return\n\n    const { width, height } = chartContainerElement.getBoundingClientRect()\n    // @ts-ignore\n    $chartElement.sparkline(chartData.result, {\n      ...sparklineOptions.current,\n      width: Math.floor(width * widthRatio),\n      height: Math.floor(height),\n    })\n  }\n\n  // create chart\n  useEffect(() => {\n    const { sparklineLineColor = orderedColors[0] } = attributes\n    const defaultFillColor =\n      chartMetadata.chart_type === \"line\"\n        ? window.NETDATA.themes.current.background\n        : colorLuminance(sparklineLineColor, window.NETDATA.chartDefaults.fill_luminance)\n    const chartTitle = attributes.title || chartMetadata.title\n\n    const emptyStringIfDisable = (x: string | undefined) => (x === \"disable\" ? \"\" : x)\n\n    const {\n      sparklineType = \"line\",\n      sparklineFillColor = defaultFillColor,\n      sparklineDisableInteraction = false,\n      sparklineDisableTooltips = false,\n      sparklineDisableHighlight = false,\n      sparklineHighlightLighten = 1.4,\n      sparklineTooltipSuffix = ` ${unitsCurrent}`,\n      sparklineNumberFormatter = (n: number) => n.toFixed(2),\n    } = attributes\n\n    const sparklineInitOptions = {\n      type: sparklineType,\n      lineColor: sparklineLineColor,\n      fillColor: sparklineFillColor,\n      chartRangeMin: attributes.sparklineChartRangeMin,\n      chartRangeMax: attributes.sparklineChartRangeMax,\n      composite: attributes.sparklineComposite,\n      enableTagOptions: attributes.sparklineEnableTagOptions,\n      tagOptionPrefix: attributes.sparklineTagOptionPrefix,\n      tagValuesAttribute: attributes.sparklineTagValuesAttribute,\n\n      disableHiddenCheck: attributes.sparklineDisableHiddenCheck,\n      defaultPixelsPerValue: attributes.sparklineDefaultPixelsPerValue,\n      spotColor: emptyStringIfDisable(attributes.sparklineSpotColor),\n      minSpotColor: emptyStringIfDisable(attributes.sparklineMinSpotColor),\n      maxSpotColor: emptyStringIfDisable(attributes.sparklineMaxSpotColor),\n      spotRadius: attributes.sparklineSpotRadius,\n      valueSpots: attributes.sparklineValueSpots,\n      highlightSpotColor: attributes.sparklineHighlightSpotColor,\n      highlightLineColor: attributes.sparklineHighlightLineColor,\n      lineWidth: attributes.sparklineLineWidth,\n      normalRangeMin: attributes.sparklineNormalRangeMin,\n      normalRangeMax: attributes.sparklineNormalRangeMax,\n      drawNormalOnTop: attributes.sparklineDrawNormalOnTop,\n      xvalues: attributes.sparklineXvalues,\n      chartRangeClip: attributes.sparklineChartRangeClip,\n      chartRangeMinX: attributes.sparklineChartRangeMinX,\n      chartRangeMaxX: attributes.sparklineChartRangeMaxX,\n      disableInteraction: sparklineDisableInteraction,\n      disableTooltips: sparklineDisableTooltips,\n      disableHighlight: sparklineDisableHighlight,\n      highlightLighten: sparklineHighlightLighten,\n      highlightColor: attributes.sparklineHighlightColor,\n      tooltipContainer: attributes.sparklineTooltipContainer,\n      tooltipClassname: attributes.sparklineTooltipClassname,\n      tooltipChartTitle: chartTitle,\n      tooltipFormat: attributes.sparklineTooltipFormat,\n      tooltipPrefix: attributes.sparklineTooltipPrefix,\n      tooltipSuffix: sparklineTooltipSuffix,\n      tooltipSkipNull: attributes.sparklineTooltipSkipNull,\n      tooltipValueLookups: attributes.sparklineTooltipValueLookups,\n      tooltipFormatFieldlist: attributes.sparklineTooltipFormatFieldlist,\n      tooltipFormatFieldlistKey: attributes.sparklineTooltipFormatFieldlistKey,\n      numberFormatter: sparklineNumberFormatter,\n      numberDigitGroupSep: attributes.sparklineNumberDigitGroupSep,\n      numberDecimalMark: attributes.sparklineNumberDecimalMark,\n      numberDigitGroupCount: attributes.sparklineNumberDigitGroupCount,\n      animatedZooms: attributes.sparklineAnimatedZooms,\n    }\n    sparklineOptions.current = sparklineInitOptions\n\n    if (!chartElement.current || $chartElement) return\n\n    set$chartElement(() => window.$(chartElement.current))\n  }, [\n    $chartElement,\n    attributes,\n    chartContainerElement,\n    chartData.result,\n    chartMetadata,\n    orderedColors,\n    unitsCurrent,\n    widthRatio,\n  ])\n\n  const { sparklineOnHover } = attributes\n  useEffect(() => {\n    if (!$chartElement || !sparklineOnHover) return\n\n    const onLeave = () => sparklineOnHover(null)\n    const onChange = ({ sparklines: [sparkline] }: any) => {\n      const { x, y } = sparkline.getCurrentRegionFields()\n      sparklineOnHover({ x, y })\n    }\n\n    // @ts-ignore\n    $chartElement.bind(\"sparklineRegionChange\", onChange).bind(\"mouseleave\", onLeave)\n    return () => {\n      // @ts-ignore\n      $chartElement.unbind(\"sparklineRegionChange\", onChange).unbind(\"mouseleave\", onLeave)\n    }\n  }, [$chartElement, sparklineOnHover])\n\n  // update chart\n  useEffect(updateSparklineValues, [$chartElement, chartData.result])\n\n  const style = paddingLeftPercentage\n    ? {\n        textAlign: \"initial\" as \"initial\", // :) typescript\n        paddingLeft: paddingLeftPercentage,\n      }\n    : undefined\n\n  return (\n    <div ref={chartElement} id={chartElementId} className={chartElementClassName} style={style} />\n  )\n}\n","import * as d3 from \"d3\"\n\nwindow.d3 = d3\n","let fetchPromise: Promise<string>\n\nconst GOOGLE_JS_API_SRC = \"https://www.google.com/jsapi\"\n\nexport const loadGoogleVisualizationApi = () => {\n  if (fetchPromise) {\n    return fetchPromise\n  }\n  fetchPromise = new Promise((resolve, reject) => {\n    setTimeout(() => {\n      const script = document.createElement(\"script\")\n      script.type = \"text/javascript\"\n      script.async = true\n      script.src = GOOGLE_JS_API_SRC\n\n      script.onerror = () => {\n        reject(Error(\"error loading google.js api\"))\n      }\n      script.onload = () => {\n        resolve(\"ok\")\n      }\n\n      const firstScript = document.getElementsByTagName(\"script\")[0] as HTMLScriptElement\n      (firstScript.parentNode as Node).insertBefore(script, firstScript)\n    }, 1000)\n  }).then(() => new Promise((resolve) => {\n    window.google.load(\"visualization\", \"1.1\", {\n      packages: [\"corechart\", \"controls\"],\n      callback: resolve,\n    })\n  }))\n  return fetchPromise\n}\n","// @ts-ignore \"declare module\" doesn't work properly when importing dashboard in cloud\nimport \"jquery-sparkline\"\nimport React, {\n  useRef, useEffect, useState,\n} from \"react\"\n\nimport \"../../utils/d3-loader\"\n// @ts-ignore \"declare module\" doesn't work properly when importing dashboard in cloud\nimport d3pie from \"vendor/d3pie-0.2.1-netdata-3\"\n\nimport { Attributes } from \"domains/chart/utils/transformDataAttributes\"\nimport {\n  ChartMetadata,\n  D3pieChartData,\n} from \"domains/chart/chart-types\"\nimport { seconds4human } from \"domains/chart/utils/seconds4human\"\nimport { useDateTime } from \"utils/date-time\"\nimport { tail } from \"ramda\"\n\nconst emptyContent = {\n  label: \"no data\",\n  value: 100,\n  color: \"#666666\",\n}\n\ntype GetDateRange = (arg: {\n  chartData: D3pieChartData,\n  index: number,\n  localeDateString: (date: number | Date) => string,\n  localeTimeString: (time: number | Date) => string,\n}) => string\nconst getDateRange: GetDateRange = ({\n  chartData, index,\n  localeDateString, localeTimeString,\n}) => {\n  const dt = Math.round((chartData.before - chartData.after + 1) / chartData.points)\n  const dtString = seconds4human(dt)\n\n  const before = chartData.result.data[index].time\n  const after = before - (dt * 1000)\n\n  const d1 = localeDateString(after)\n  const t1 = localeTimeString(after)\n  const d2 = localeDateString(before)\n  const t2 = localeTimeString(before)\n\n  if (d1 === d2) {\n    return `${d1} ${t1} to ${t2}, ${dtString}`\n  }\n\n  return `${d1} ${t1} to ${d2} ${t2}, ${dtString}`\n}\n\ninterface Props {\n  attributes: Attributes\n  chartContainerElement: HTMLElement\n  chartData: D3pieChartData\n  chartMetadata: ChartMetadata\n  chartElementClassName: string\n  chartElementId: string\n  dimensionsVisibility: boolean[]\n  hoveredRow: number\n  hoveredX: number | null\n  isRemotelyControlled: boolean\n  legendFormatValue: ((v: number | string | null) => number | string)\n  orderedColors: string[]\n  setMinMax: (minMax: [number, number]) => void\n  showUndefined: boolean\n  unitsCurrent: string\n}\nexport const D3pieChart = ({\n  attributes,\n  chartContainerElement,\n  chartData,\n  chartMetadata,\n  chartElementClassName,\n  chartElementId,\n  hoveredRow,\n  hoveredX,\n  legendFormatValue,\n  orderedColors,\n  setMinMax,\n  unitsCurrent,\n}: Props) => {\n  const chartElement = useRef<HTMLDivElement>(null)\n\n  const legendFormatValueRef = useRef(legendFormatValue)\n  legendFormatValueRef.current = legendFormatValue\n\n  const [d3pieInstance, setD3pieInstance] = useState()\n  const d3pieOptions = useRef<{[key: string]: any}>()\n\n  const { localeDateString, localeTimeString } = useDateTime()\n\n  // create chart\n  useEffect(() => {\n    if (chartElement.current && !d3pieInstance) {\n      // d3pieSetContent\n      // todo this should be set in chart.tsx, when creating hook\n      setMinMax([chartData.min, chartData.max])\n      // index is ROW! it's !== 0 only when selection is made\n      const index = 0\n      const content = tail(chartData.result.labels).map((label, i) => {\n        const value = chartData.result.data[index][label]\n        const color = orderedColors[i]\n        return {\n          label,\n          value,\n          color,\n        }\n      }).filter((x) => x.value !== null && x.value > 0)\n      const safeContent = content.length > 0 ? content : emptyContent\n\n      const defaultTitle = attributes.title || chartMetadata.title\n      const dateRange = getDateRange({\n        chartData,\n        index: 0,\n        localeDateString,\n        localeTimeString,\n      })\n      const {\n        d3pieTitle = defaultTitle,\n        d3pieSubtitle = unitsCurrent,\n        d3pieFooter = dateRange,\n        d3pieTitleColor = window.NETDATA.themes.current.d3pie.title,\n        d3pieTitleFontsize = 12,\n        d3pieTitleFontweight = \"bold\",\n        d3pieTitleFont = \"arial\",\n        d3PieSubtitleColor = window.NETDATA.themes.current.d3pie.subtitle,\n        d3PieSubtitleFontsize = 10,\n        d3PieSubtitleFontweight = \"normal\",\n        d3PieSubtitleFont = \"arial\",\n        d3PieFooterColor = window.NETDATA.themes.current.d3pie.footer,\n        d3PieFooterFontsize = 9,\n        d3PieFooterFontweight = \"bold\",\n        d3PieFooterFont = \"arial\",\n        d3PieFooterLocation = \"bottom-center\",\n\n        d3PiePieinnerradius = \"45%\",\n        d3PiePieouterradius = \"80%\",\n        d3PieSortorder = \"value-desc\",\n        d3PieSmallsegmentgroupingEnabled = false,\n        d3PieSmallsegmentgroupingValue = 1,\n        d3PieSmallsegmentgroupingValuetype = \"percentage\",\n        d3PieSmallsegmentgroupingLabel = \"other\",\n        d3PieSmallsegmentgroupingColor = window.NETDATA.themes.current.d3pie.other,\n\n        d3PieLabelsOuterFormat = \"label-value1\",\n        d3PieLabelsOuterHidewhenlessthanpercentage = null,\n        d3PieLabelsOuterPiedistance = 15,\n        d3PieLabelsInnerFormat = \"percentage\",\n        d3PieLabelsInnerHidewhenlessthanpercentage = 2,\n\n        d3PieLabelsMainLabelColor = window.NETDATA.themes.current.d3pie.mainlabel,\n        d3PieLabelsMainLabelFont = \"arial\",\n        d3PieLabelsMainLabelFontsize = 10,\n        d3PieLabelsMainLabelFontweight = \"normal\",\n\n        d3PieLabelsPercentageColor = window.NETDATA.themes.current.d3pie.percentage,\n        d3PieLabelsPercentageFont = \"arial\",\n        d3PieLabelsPercentageFontsize = 10,\n        d3PieLabelsPercentageFontweight = \"bold\",\n\n        d3PieLabelsValueColor = window.NETDATA.themes.current.d3pie.value,\n        d3PieLabelsValueFont = \"arial\",\n        d3PieLabelsValueFontsize = 10,\n        d3PieLabelsValueFontweight = \"bold\",\n\n        d3PieLabelsLinesEnabled = true,\n        d3PieLabelsLinesStyle = \"curved\",\n        d3PieLabelsLinesColor = \"segment\", // \"segment\" or a hex color\n\n        d3PieLabelsTruncationEnabled = false,\n        d3PieLabelsTruncationTruncatelength = 30,\n\n        d3PieMiscColorsSegmentstroke = window.NETDATA.themes.current.d3pie.segment_stroke,\n        d3PieMiscGradientEnabled = false,\n        d3PieMiscColorsPercentage = 95,\n        d3PieMiscGradientColor = window.NETDATA.themes.current.d3pie.gradient_color,\n\n        d3PieCssprefix = null,\n      } = attributes\n\n      const { width, height } = chartContainerElement.getBoundingClientRect()\n\n      const initialD3pieOptions = {\n        header: {\n          title: {\n            text: d3pieTitle,\n            color: d3pieTitleColor,\n            fontSize: d3pieTitleFontsize,\n            fontWeight: d3pieTitleFontweight,\n            font: d3pieTitleFont,\n          },\n          subtitle: {\n            text: d3pieSubtitle,\n            color: d3PieSubtitleColor,\n            fontSize: d3PieSubtitleFontsize,\n            fontWeight: d3PieSubtitleFontweight,\n            font: d3PieSubtitleFont,\n          },\n          titleSubtitlePadding: 1,\n        },\n        footer: {\n          text: d3pieFooter,\n          color: d3PieFooterColor,\n          fontSize: d3PieFooterFontsize,\n          fontWeight: d3PieFooterFontweight,\n          font: d3PieFooterFont,\n          location: d3PieFooterLocation,\n        },\n        size: {\n          canvasHeight: Math.floor(height),\n          canvasWidth: Math.floor(width),\n          pieInnerRadius: d3PiePieinnerradius,\n          pieOuterRadius: d3PiePieouterradius,\n        },\n        data: {\n          // none, random, value-asc, value-desc, label-asc, label-desc\n          sortOrder: d3PieSortorder,\n          smallSegmentGrouping: {\n            enabled: d3PieSmallsegmentgroupingEnabled,\n            value: d3PieSmallsegmentgroupingValue,\n            // percentage, value\n            valueType: d3PieSmallsegmentgroupingValuetype,\n            label: d3PieSmallsegmentgroupingLabel,\n            color: d3PieSmallsegmentgroupingColor,\n          },\n\n          // REQUIRED! This is where you enter your pie data; it needs to be an array of objects\n          // of this form: { label: \"label\", value: 1.5, color: \"#000000\" } - color is optional\n          content: safeContent,\n        },\n\n\n        labels: {\n          outer: {\n            // label, value, percentage, label-value1, label-value2, label-percentage1,\n            // label-percentage2\n            format: d3PieLabelsOuterFormat,\n            hideWhenLessThanPercentage: d3PieLabelsOuterHidewhenlessthanpercentage,\n            pieDistance: d3PieLabelsOuterPiedistance,\n          },\n          inner: {\n            // label, value, percentage, label-value1, label-value2, label-percentage1,\n            // label-percentage2\n            format: d3PieLabelsInnerFormat,\n            hideWhenLessThanPercentage: d3PieLabelsInnerHidewhenlessthanpercentage,\n          },\n          mainLabel: {\n            color: d3PieLabelsMainLabelColor, // or 'segment' for dynamic color\n            font: d3PieLabelsMainLabelFont,\n            fontSize: d3PieLabelsMainLabelFontsize,\n            fontWeight: d3PieLabelsMainLabelFontweight,\n          },\n          percentage: {\n            color: d3PieLabelsPercentageColor,\n            font: d3PieLabelsPercentageFont,\n            fontSize: d3PieLabelsPercentageFontsize,\n            fontWeight: d3PieLabelsPercentageFontweight,\n            decimalPlaces: 0,\n          },\n          value: {\n            color: d3PieLabelsValueColor,\n            font: d3PieLabelsValueFont,\n            fontSize: d3PieLabelsValueFontsize,\n            fontWeight: d3PieLabelsValueFontweight,\n          },\n          lines: {\n            enabled: d3PieLabelsLinesEnabled,\n            style: d3PieLabelsLinesStyle,\n            color: d3PieLabelsLinesColor,\n          },\n          truncation: {\n            enabled: d3PieLabelsTruncationEnabled,\n            truncateLength: d3PieLabelsTruncationTruncatelength,\n          },\n          formatter(context: any) {\n            if (context.part === \"value\") {\n              return legendFormatValueRef.current(context.value)\n            }\n            if (context.part === \"percentage\") {\n              return `${context.label}%`\n            }\n\n            return context.label\n          },\n        },\n        effects: {\n          load: {\n            effect: \"none\", // none / default\n            speed: 0, // commented in the d3pie code to speed it up\n          },\n          pullOutSegmentOnClick: {\n            effect: \"bounce\", // none / linear / bounce / elastic / back\n            speed: 400,\n            size: 5,\n          },\n          highlightSegmentOnMouseover: true,\n          highlightLuminosity: -0.2,\n        },\n        tooltips: {\n          enabled: false,\n          type: \"placeholder\", // caption|placeholder\n          string: \"\",\n          placeholderParser: null, // function\n          styles: {\n            fadeInSpeed: 250,\n            backgroundColor: window.NETDATA.themes.current.d3pie.tooltip_bg,\n            backgroundOpacity: 0.5,\n            color: window.NETDATA.themes.current.d3pie.tooltip_fg,\n            borderRadius: 2,\n            font: \"arial\",\n            fontSize: 12,\n            padding: 4,\n          },\n        },\n        misc: {\n          colors: {\n            background: \"transparent\", // transparent or color #\n            // segments: state.chartColors(),\n            segmentStroke: d3PieMiscColorsSegmentstroke,\n          },\n          gradient: {\n            enabled: d3PieMiscGradientEnabled,\n            percentage: d3PieMiscColorsPercentage,\n            color: d3PieMiscGradientColor,\n          },\n          canvasPadding: {\n            top: 5,\n            right: 5,\n            bottom: 5,\n            left: 5,\n          },\n          pieCenterOffset: {\n            x: 0,\n            y: 0,\n          },\n          cssPrefix: d3PieCssprefix,\n        },\n        callbacks: {\n          onload: null,\n          onMouseoverSegment: null,\n          onMouseoutSegment: null,\n          onClickSegment: null,\n        },\n      }\n      // eslint-disable-next-line new-cap\n      const newD3pieInstance = new d3pie(chartElement.current, initialD3pieOptions)\n      d3pieOptions.current = initialD3pieOptions\n      setD3pieInstance(() => newD3pieInstance)\n    }\n  }, [attributes, chartContainerElement, chartData, chartMetadata, d3pieInstance, legendFormatValue,\n    localeDateString, localeTimeString, orderedColors, setMinMax, unitsCurrent])\n\n  // update chart\n  useEffect(() => {\n    if (d3pieInstance && d3pieOptions.current) {\n      const dateRange = getDateRange({\n        chartData,\n        index: 0,\n        localeDateString,\n        localeTimeString,\n      })\n      const {\n        d3pieSubtitle = unitsCurrent,\n        d3pieFooter = dateRange,\n      } = attributes\n\n\n      const isHoveredButNoData = !!hoveredX && (hoveredRow === -1)\n      const slot = chartData.result.data.length - hoveredRow - 1\n\n      const index = (slot < 0 || slot >= chartData.result.data.length)\n        ? 0\n        : slot\n\n      const content = tail(chartData.result.labels).map((label, i) => {\n        const value = chartData.result.data[index][label]\n        const color = orderedColors[i]\n        return {\n          label,\n          value,\n          color,\n        }\n      }).filter((x) => x.value !== null && x.value > 0)\n      const safeContent = (content.length > 0 && !isHoveredButNoData)\n        ? content\n        : [emptyContent]\n\n      d3pieInstance.options.header.subtitle.text = d3pieSubtitle\n      d3pieInstance.options.footer.text = d3pieFooter\n\n      d3pieInstance.options.data.content = safeContent\n      d3pieInstance.destroy()\n      d3pieInstance.recreate()\n    }\n  }, [attributes, chartData, d3pieInstance, hoveredRow, hoveredX, localeDateString,\n    localeTimeString, orderedColors, unitsCurrent])\n\n  return (\n    <div ref={chartElement} id={chartElementId} className={chartElementClassName} />\n  )\n}\n","// @ts-ignore \"declare module\" doesn't work properly when importing dashboard in cloud\nimport \"peity\"\nimport React, {\n  useRef, useState, useLayoutEffect,\n} from \"react\"\n\nimport { Attributes } from \"domains/chart/utils/transformDataAttributes\"\nimport { ChartMetadata, EasyPieChartData } from \"domains/chart/chart-types\"\nimport { colorLuminance } from \"domains/chart/utils/color-luminance\"\n\ninterface Props {\n  attributes: Attributes\n  chartContainerElement: HTMLElement\n  chartData: EasyPieChartData\n  chartMetadata: ChartMetadata\n  chartElementClassName: string\n  chartElementId: string\n  orderedColors: string[]\n}\nexport const PeityChart = ({\n  attributes,\n  chartContainerElement,\n  chartData,\n  chartMetadata,\n  chartElementClassName,\n  chartElementId,\n  orderedColors,\n}: Props) => {\n  const chartElement = useRef<HTMLDivElement>(null)\n\n  // update width, height automatically each time\n  const [$chartElement, set$chartElement] = useState()\n  const peityOptions = useRef<{\n    stroke: string,\n    fill: string,\n    strokeWidth: number,\n    width: number,\n    height: number,\n  }>()\n\n\n  // create chart\n  useLayoutEffect(() => {\n    if (chartElement.current && !$chartElement) {\n      const $element = window.$(chartElement.current)\n\n      const { width, height } = chartContainerElement.getBoundingClientRect()\n\n      const {\n        peityStrokeWidth = 1,\n      } = attributes\n      const peityInitOptions = {\n        stroke: window.NETDATA.themes.current.foreground,\n        strokeWidth: peityStrokeWidth,\n        width: Math.floor(width),\n        height: Math.floor(height),\n        fill: window.NETDATA.themes.current.foreground,\n      }\n\n      set$chartElement(() => $element)\n      peityOptions.current = peityInitOptions\n    }\n  }, [attributes, $chartElement, chartContainerElement])\n\n  // update chart\n  useLayoutEffect(() => {\n    if ($chartElement && peityOptions.current) {\n      const getFillOverride = () => (\n        chartMetadata.chart_type === \"line\"\n          ? window.NETDATA.themes.current.background\n          : colorLuminance(orderedColors[0], window.NETDATA.chartDefaults.fill_luminance)\n      )\n      const updatedOptions = {\n        ...peityOptions.current,\n        stroke: orderedColors[0],\n        // optimizatino from old dashboard, perhaps could be transformed to useMemo()\n        fill: (orderedColors[0] === peityOptions.current.stroke)\n          ? peityOptions.current.fill\n          : getFillOverride(),\n      }\n      $chartElement.peity(\"line\", updatedOptions)\n      peityOptions.current = updatedOptions\n    }\n  }, [$chartElement, chartData, chartMetadata, orderedColors])\n\n  return (\n    <div\n      ref={chartElement}\n      id={chartElementId}\n      className={chartElementClassName}\n    >\n      {chartData.result}\n    </div>\n  )\n}\n","import React, {\n  useRef, useState, useLayoutEffect,\n} from \"react\"\n\nimport { Attributes } from \"domains/chart/utils/transformDataAttributes\"\nimport { ChartMetadata, EasyPieChartData } from \"domains/chart/chart-types\"\nimport { loadGoogleVisualizationApi } from \"domains/chart/utils/google-visualization-loader\"\n\ninterface Props {\n  attributes: Attributes\n  chartData: EasyPieChartData\n  chartMetadata: ChartMetadata\n  chartElementClassName: string\n  chartElementId: string\n  orderedColors: string[]\n  unitsCurrent: string\n}\nexport const GoogleChart = ({\n  attributes,\n  chartData,\n  chartMetadata,\n  chartElementClassName,\n  chartElementId,\n  orderedColors,\n  unitsCurrent,\n}: Props) => {\n  const chartElement = useRef<HTMLDivElement>(null)\n  const googleChartInstance = useRef<\n    google.visualization.AreaChart |\n    google.visualization.LineChart>()\n\n  const [hasApiBeenLoaded, setHasApiBeenLoaded] = useState(false)\n  loadGoogleVisualizationApi()\n    .then(() => {\n      setHasApiBeenLoaded(true)\n    })\n\n  const googleOptions = useRef<{[key: string]: unknown}>()\n\n  // update chart\n  useLayoutEffect(() => {\n    if (googleChartInstance.current && googleOptions.current) {\n      const dataTable = new window.google.visualization.DataTable(chartData.result)\n      googleChartInstance.current.draw(dataTable, googleOptions.current)\n    }\n  }, [chartData])\n\n  // create chart\n  useLayoutEffect(() => {\n    if (chartElement.current && !googleOptions.current && hasApiBeenLoaded) {\n      const dataTable = new window.google.visualization.DataTable(chartData.result)\n\n      const {\n        title = chartMetadata.title,\n      } = attributes\n      const chartType = chartMetadata.chart_type\n      const areaOpacity = new Map([\n        [\"area\", window.NETDATA.options.current.color_fill_opacity_area],\n        [\"stacked\", window.NETDATA.options.current.color_fill_opacity_stacked],\n      ]).get(chartType) || 0.3\n      const initialGoogleOptions = {\n        colors: orderedColors,\n\n        // do not set width, height - the chart resizes itself\n        // width: state.chartWidth(),\n        // height: state.chartHeight(),\n        lineWidth: chartType === \"line\" ? 2 : 1,\n        title,\n        fontSize: 11,\n        hAxis: {\n          //  title: \"Time of Day\",\n          //  format:'HH:mm:ss',\n          viewWindowMode: \"maximized\",\n          slantedText: false,\n          format: \"HH:mm:ss\",\n          textStyle: {\n            fontSize: 9,\n          },\n          gridlines: {\n            color: \"#EEE\",\n          },\n        },\n        vAxis: {\n          title: unitsCurrent,\n          viewWindowMode: (chartType === \"area\" || chartType === \"stacked\")\n            ? \"maximized\"\n            : \"pretty\",\n          minValue: chartType === \"stacked\" ? undefined : -0.1,\n          maxValue: chartType === \"stacked\" ? undefined : 0.1,\n          direction: 1,\n          textStyle: {\n            fontSize: 9,\n          },\n          gridlines: {\n            color: \"#EEE\",\n          },\n        },\n        chartArea: {\n          width: \"65%\",\n          height: \"80%\",\n        },\n        focusTarget: \"category\",\n        annotation: {\n          1: {\n            style: \"line\",\n          },\n        },\n        pointsVisible: false,\n        titlePosition: \"out\",\n        titleTextStyle: {\n          fontSize: 11,\n        },\n        tooltip: {\n          isHtml: false,\n          ignoreBounds: true,\n          textStyle: {\n            fontSize: 9,\n          },\n        },\n        curveType: \"function\" as \"function\",\n        areaOpacity,\n        isStacked: chartType === \"stacked\",\n      }\n\n      const googleInstance = [\"area\", \"stacked\"].includes(chartMetadata.chart_type)\n        ? new window.google.visualization.AreaChart(chartElement.current)\n        : new window.google.visualization.LineChart(chartElement.current)\n\n      googleInstance.draw(dataTable, initialGoogleOptions)\n\n      googleOptions.current = initialGoogleOptions\n      googleChartInstance.current = googleInstance\n    }\n  }, [attributes, chartData.result, chartMetadata, chartElement, hasApiBeenLoaded, orderedColors,\n    unitsCurrent])\n\n\n  return (\n    <div\n      ref={chartElement}\n      id={chartElementId}\n      className={chartElementClassName}\n    />\n  )\n}\n","import React from \"react\"\n\nimport { Attributes } from \"domains/chart/utils/transformDataAttributes\"\nimport { EasyPieChartData } from \"domains/chart/chart-types\"\n\ninterface Props {\n  attributes: Attributes\n  chartData: EasyPieChartData\n  chartElementClassName: string\n  chartElementId: string\n}\nexport const TextOnly = ({\n  attributes,\n  chartData,\n  chartElementClassName,\n  chartElementId,\n}: Props) => {\n  const { textOnlyDecimalPlaces = 1, textOnlyPrefix = \"\", textOnlySuffix = \"\" } = attributes\n\n  // Round based on number of decimal places to show\n  const precision = 10 ** textOnlyDecimalPlaces\n  const value = Math.round(chartData.result[0] * precision) / precision\n\n  const textContent = chartData.result.length === 0 ? \"\" : textOnlyPrefix + value + textOnlySuffix\n\n  return (\n    <div id={chartElementId} className={chartElementClassName}>\n      {textContent}\n    </div>\n  )\n}\n","/* eslint-disable no-param-reassign */\n// @ts-nocheck\n\nexport const defaultCellSize = 11\nexport const defaultPadding = 1\nexport const defaultAspectRatio = Math.round(16 / 9)\n\nexport const getCellBoxSize = (cellSize = defaultCellSize, padding = defaultPadding) =>\n  cellSize - padding\nexport const getRows = (data, aspectRatio = defaultAspectRatio) =>\n  Math.sqrt(data.length / aspectRatio)\nexport const getColumns = (rows, aspectRatio = defaultAspectRatio) => rows * aspectRatio\n\nexport const getXPosition = (columns, index, cellSize = defaultCellSize) =>\n  Math.floor(index % columns) * cellSize\nexport const getYPosition = (columns, index, cellSize = defaultCellSize) =>\n  Math.floor(index / columns) * cellSize\n\nexport const getFullWidth = (columns, cellSize = defaultCellSize) => Math.ceil(columns) * cellSize\nexport const getFullHeight = (rows, cellSize = defaultCellSize, padding = defaultCellSize) =>\n  Math.ceil(rows) * cellSize + padding\n\nexport const getOffsetPosition = (offset, cellSize = defaultCellSize) =>\n  Math.floor(offset / cellSize)\n","/* eslint-disable object-curly-newline */\n/* eslint-disable no-param-reassign */\n// @ts-nocheck\nimport { getCellBoxSize, getXPosition, getYPosition, getOffsetPosition } from \"./utilities\"\n\nexport default (\n  el,\n  columns,\n  total,\n  { onMouseenter, onMouseout },\n  { cellSize, cellPadding } = {}\n) => {\n  let hoveredIndex = -1\n\n  const getEvent = index => {\n    const rect = el.getBoundingClientRect()\n    const offsetX = getXPosition(columns, index, cellSize)\n    const offsetY = getYPosition(columns, index, cellSize)\n    const left = rect.left + offsetX\n    const top = rect.top + offsetY\n    const cellBoxSize = getCellBoxSize(cellSize, cellPadding)\n\n    return {\n      index,\n      left,\n      top,\n      right: left + cellBoxSize,\n      bottom: top + cellBoxSize,\n      width: cellBoxSize,\n      height: cellBoxSize,\n      offsetX,\n      offsetY,\n    }\n  }\n\n  const mouseout = () => {\n    onMouseout(getEvent(hoveredIndex))\n    hoveredIndex = -1\n  }\n\n  const mousemove = e => {\n    const { offsetX, offsetY } = e\n    const x = getOffsetPosition(offsetX, cellSize)\n    const y = getOffsetPosition(offsetY, cellSize)\n    const nextHoveredIndex = y * columns + x\n\n    if (nextHoveredIndex === hoveredIndex) return\n\n    if (hoveredIndex !== -1) mouseout()\n\n    if (nextHoveredIndex >= total) return\n\n    onMouseenter(getEvent(nextHoveredIndex))\n    hoveredIndex = nextHoveredIndex\n  }\n\n  el.addEventListener(\"mousemove\", mousemove)\n  el.addEventListener(\"mouseout\", mouseout)\n  return () => {\n    el.removeEventListener(\"mousemove\", mousemove)\n    el.removeEventListener(\"mouseout\", mouseout)\n  }\n}\n","/* eslint-disable object-curly-newline */\n/* eslint-disable comma-dangle */\n/* eslint-disable implicit-arrow-linebreak */\n/* eslint-disable no-param-reassign */\n// @ts-nocheck\nimport { scaleLinear, extent } from \"d3\"\nimport {\n  getCellBoxSize,\n  getRows,\n  getColumns,\n  getXPosition,\n  getYPosition,\n  getFullWidth,\n  getFullHeight,\n} from \"./utilities\"\nimport registerEvents from \"./events\"\n\nexport const getWidth = (data, { aspectRatio, cellSize } = {}) => {\n  const rows = getRows(data, aspectRatio)\n  const columns = getColumns(rows, aspectRatio)\n  return getFullWidth(columns, cellSize)\n}\n\nconst getCanvasAttributes = (data, { aspectRatio, cellSize, padding } = {}) => {\n  const rows = getRows(data, aspectRatio)\n  const columns = getColumns(rows, aspectRatio)\n  const width = getFullWidth(columns, cellSize)\n  const height = getFullHeight(rows, cellSize, padding)\n\n  return { width, height, columns: Math.ceil(columns) }\n}\n\nconst defaultColorRange = [\"rgba(198, 227, 246, 0.9)\", \"rgba(14, 154, 255, 0.9)\"]\n\nconst makeGetColor = (values, colorRange = defaultColorRange) =>\n  scaleLinear()\n    .domain(extent(values, value => value))\n    .range(colorRange)\n\nexport default (el, { onMouseenter, onMouseout }, options = {}) => {\n  const { cellSize, cellPadding, cellStroke = 2, lineWidth = 1, colorRange } = options\n  const canvas = el.getContext(\"2d\")\n\n  let activeBox = -1\n  let deactivateBox = () => {}\n  let activateBox = {}\n  let clearEvents = () => {}\n\n  const clear = () => {\n    deactivateBox()\n    clearEvents()\n    canvas.clearRect(0, 0, el.width, el.height)\n    canvas.beginPath()\n  }\n\n  const update = ({ data }) => {\n    const { width, height, columns } = getCanvasAttributes(data, options)\n    el.width = parseInt(width)\n    el.height = parseInt(height)\n    clear()\n    clearEvents()\n    const getColor = makeGetColor(data, colorRange)\n\n    const drawBox = (value, index) => {\n      canvas.fillStyle = getColor(value)\n\n      const offsetX = getXPosition(columns, index, cellSize)\n      const offsetY = getYPosition(columns, index, cellSize)\n\n      if (lineWidth && cellStroke) {\n        canvas.clearRect(\n          offsetX - lineWidth,\n          offsetY - lineWidth,\n          getCellBoxSize(cellSize, cellPadding) + cellStroke,\n          getCellBoxSize(cellSize, cellPadding) + cellStroke\n        )\n      }\n\n      canvas.fillRect(\n        offsetX,\n        offsetY,\n        getCellBoxSize(cellSize, cellPadding),\n        getCellBoxSize(cellSize, cellPadding)\n      )\n    }\n\n    data.forEach(drawBox)\n\n    clearEvents = registerEvents(\n      el,\n      columns,\n      data.length,\n      {\n        onMouseenter,\n        onMouseout,\n      },\n      options\n    )\n\n    deactivateBox = () => {\n      if (activeBox !== -1) drawBox(data[activeBox], activeBox)\n    }\n\n    activateBox = index => {\n      deactivateBox()\n      activeBox = index\n\n      const offsetX = getXPosition(columns, index, cellSize)\n      const offsetY = getYPosition(columns, index, cellSize)\n\n      if (lineWidth && cellStroke) {\n        canvas.lineWidth = lineWidth\n        canvas.strokeStyle = \"#fff\"\n        canvas.strokeRect(\n          offsetX + lineWidth,\n          offsetY + lineWidth,\n          getCellBoxSize(cellSize, cellPadding) - cellStroke,\n          getCellBoxSize(cellSize, cellPadding) - cellStroke\n        )\n      }\n    }\n  }\n\n  return {\n    clear,\n    update,\n    activateBox: index => activateBox(index),\n    deactivateBox: () => deactivateBox(),\n  }\n}\n","/* eslint-disable arrow-body-style */\n// @ts-nocheck\n\nexport default (el) => {\n  return el.getBoundingClientRect().top / window.innerHeight > 0.5 ? \"top\" : \"bottom\"\n}\n","/* eslint-disable operator-linebreak */\n/* eslint-disable implicit-arrow-linebreak */\n/* eslint-disable object-curly-newline */\n/* eslint-disable react-hooks/exhaustive-deps */\n/* eslint-disable react/jsx-fragments */\n// @ts-nocheck\nimport React, { useRef, useLayoutEffect, Fragment, useState, useCallback } from \"react\"\nimport { Drop } from \"@netdata/netdata-ui\"\nimport drawBoxes from \"./drawBoxes\"\nimport getAlign from \"./getAlign\"\n\ninterface GroupboxData {\n  data: number[]\n  labels: string[]\n}\n\ninterface GroupBoxProps {\n  data: GroupboxData[]\n}\n\nconst aligns = {\n  top: { bottom: \"top\" },\n  bottom: { top: \"bottom\" },\n}\n\nconst GroupBox = ({ data, renderTooltip, ...options }: GroupBoxProps) => {\n  const dataRef = useRef()\n  const canvasRef = useRef()\n  const boxesRef = useRef()\n\n  const [hover, setHover] = useState(null)\n  const dropHoverRef = useRef(false)\n  const boxHoverRef = useRef(-1)\n  const timeoutId = useRef()\n\n  const close = () => {\n    boxesRef.current.deactivateBox()\n    setHover(null)\n    dropHoverRef.current = false\n    boxHoverRef.current = -1\n  }\n\n  const closeDrop = () =>\n    requestAnimationFrame(() => {\n      setHover(currentHover => {\n        if (\n          !dropHoverRef.current &&\n          (boxHoverRef.current === -1 || boxHoverRef.current !== currentHover?.index)\n        ) {\n          close()\n        }\n        return currentHover\n      })\n    })\n\n  useLayoutEffect(() => {\n    boxesRef.current = drawBoxes(\n      canvasRef.current,\n      {\n        onMouseenter: ({ index, ...rect }) => {\n          boxHoverRef.current = index\n          boxesRef.current.activateBox(index)\n          timeoutId.current = setTimeout(() => {\n            setHover({\n              target: { getBoundingClientRect: () => rect },\n              index,\n              rect,\n            })\n          }, 600)\n        },\n        onMouseout: () => {\n          boxHoverRef.current = -1\n          clearTimeout(timeoutId.current)\n          closeDrop()\n        },\n      },\n      options\n    )\n    return () => boxesRef.current.clear()\n  }, [])\n\n  useLayoutEffect(() => {\n    if (\n      hover &&\n      dataRef.current &&\n      dataRef.current.labels[hover.index] !== data.labels[hover.index]\n    ) {\n      close()\n    }\n    dataRef.current = data\n    boxesRef.current.update(data)\n  }, [data])\n\n  const onMouseEnter = useCallback(() => {\n    dropHoverRef.current = true\n  }, [])\n\n  const onMouseLeave = useCallback(() => {\n    dropHoverRef.current = false\n    closeDrop()\n  }, [])\n\n  const align = hover && getAlign(hover.target)\n\n  return (\n    <Fragment>\n      <canvas data-testid=\"groupBox\" ref={canvasRef} />\n      {hover && renderTooltip && (\n        <Drop\n          align={aligns[align]}\n          target={hover.target}\n          onMouseEnter={onMouseEnter}\n          onMouseLeave={onMouseLeave}\n        >\n          {renderTooltip(hover.index, align)}\n        </Drop>\n      )}\n    </Fragment>\n  )\n}\n\nexport default GroupBox\n","/* eslint-disable operator-linebreak */\n/* eslint-disable object-curly-newline */\n/* eslint-disable arrow-body-style */\n/* eslint-disable react/jsx-props-no-spreading */\n/* eslint-disable react/jsx-one-expression-per-line */\n// @ts-nocheck\nimport React, { useRef, useMemo } from \"react\"\nimport styled from \"styled-components\"\nimport { Flex, TextMicro, Popover } from \"@netdata/netdata-ui\"\nimport GroupBox from \"./groupBox\"\nimport { getWidth } from \"./drawBoxes\"\nimport getAlign from \"./getAlign\"\n\ninterface GroupBoxWrapperProps {\n  data: any\n  title: string\n}\n\nconst Title = styled.span`\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow-x: hidden;\n`\n\nconst Label = styled(Flex).attrs({\n  as: TextMicro,\n  gap: 1,\n})`\n  cursor: default;\n  &:hover {\n    font-weight: bold;\n  }\n`\n\nconst GroupBoxWrapper = ({\n  data,\n  label,\n  groupIndex,\n  renderGroupPopover,\n  renderBoxPopover,\n}: GroupBoxWrapperProps) => {\n  const ref = useRef()\n  const align = ref.current && getAlign(ref.current)\n\n  const style = useMemo(() => ({ maxWidth: `${getWidth(data.data)}px` }), [data])\n\n  const boxPopover =\n    renderBoxPopover &&\n    ((index, boxAlign) => renderBoxPopover({ group: label, groupIndex, align: boxAlign, index }))\n\n  const groupPopover =\n    renderGroupPopover && (() => renderGroupPopover({ group: label, groupIndex, align }))\n\n  return (\n    <Flex data-testid=\"groupBoxWrapper\" column alignItems=\"start\" gap={1} margin={[0, 4, 0, 0]}>\n      <Popover content={groupPopover} align={align} plain>\n        {({ isOpen, ref: popoverRef, ...rest }) => (\n          <Label\n            data-testid=\"groupBoxWrapper-title\"\n            ref={el => {\n              ref.current = el\n              popoverRef(el)\n            }}\n            strong={isOpen}\n            style={style}\n            {...rest}\n          >\n            <Title>{label}</Title>\n            {data.data.length > 3 && <span>({data.data.length})</span>}\n          </Label>\n        )}\n      </Popover>\n      <GroupBox data={data} renderTooltip={boxPopover} />\n    </Flex>\n  )\n}\n\nconst GroupBoxes = ({ data, labels, renderBoxPopover, renderGroupPopover }: any) => (\n  <Flex data-testid=\"groupBoxes\" flexWrap overflow={{ vertical: \"auto\" }} flex>\n    {labels.map((label, index) => {\n      return data[index].data.length ? (\n        <GroupBoxWrapper\n          key={label}\n          label={label}\n          groupIndex={index}\n          data={data[index]}\n          renderGroupPopover={renderGroupPopover}\n          renderBoxPopover={renderBoxPopover}\n        />\n      ) : null\n    })}\n  </Flex>\n)\n\nexport default GroupBoxes\n","import React from \"react\"\nimport styled from \"styled-components\"\nimport { Flex, TextNano } from \"@netdata/netdata-ui\"\n\ninterface LegendProps {\n  children?: React.ReactNode\n}\n\nconst LinearColorScaleBar = styled(Flex).attrs({ width: \"120px\", height: \"12px\", round: true })`\n  background: linear-gradient(to right, #c6e3f6, #0e9aff);\n`\n\nconst Legend = ({ children }: LegendProps) => (\n  <Flex data-testid=\"groupBox-legend\" gap={4} alignItems=\"center\">\n    <TextNano strong>{children}</TextNano>\n    <Flex gap={2} alignItems=\"center\">\n      <TextNano>0%</TextNano>\n      <LinearColorScaleBar />\n      <TextNano>100%</TextNano>\n    </Flex>\n    {/* <Flex gap={2} alignItems=\"center\">\n      <TextNano strong>Alarms</TextNano>\n      <Flex width=\"12px\" height=\"12px\" background=\"error\" round />\n    </Flex>\n    <Flex gap={2} alignItems=\"center\">\n      <TextNano strong>Warnings</TextNano>\n      <Flex width=\"12px\" height=\"12px\" background=\"warning\" round />\n    </Flex> */}\n  </Flex>\n)\n\nexport default Legend\n","// @ts-nocheck\n\nconst labels = {\n  k8s_cluster_id: { icon: \"cluster\", title: \"Cluster Id\" },\n  k8s_node_name: { icon: \"nodes_hollow\", title: \"Node\" },\n  k8s_namespace: { icon: \"cluster_spaces\", title: \"Namespace\" },\n  k8s_controller_kind: { icon: \"controller_kind\", title: \"Controller Kind\" },\n  k8s_controller_name: { icon: \"controller_name\", title: \"Controller Name\" },\n  k8s_pod_name: { icon: \"pod\", title: \"Pod Name\" },\n  k8s_container_name: { icon: \"container\", title: \"Container\" },\n}\n\nexport const labelIds = Object.keys(labels)\n\nexport default (id) => {\n  if (id in labels) return labels[id]\n  // k8s_custom_label -> Custom Label\n  const title = id.replace(/_./g, (word) => ` ${word[1].toUpperCase()}`).replace(/^k8s /, \"\")\n  return { title, icon: \"node\" }\n}\n","/* eslint-disable react/jsx-props-no-spreading */\n/* eslint-disable react/prop-types */\n// @ts-nocheck\nimport React from \"react\"\nimport { Flex } from \"@netdata/netdata-ui\"\n\nconst Separator = () => <Flex height=\"1px\" width=\"100%\" background=\"separator\" />\n\nexport default Separator\n","/* eslint-disable react/jsx-props-no-spreading */\n/* eslint-disable react/prop-types */\n// @ts-nocheck\nimport React from \"react\"\nimport { H5 } from \"@netdata/netdata-ui\"\n\nconst Header = props => (\n  <H5 color=\"bright\" wordBreak=\"break-all\" data-testid=\"k8sPopover-header\" {...props} />\n)\n\nexport default Header\n","/* eslint-disable indent */\n/* eslint-disable implicit-arrow-linebreak */\n/* eslint-disable react/jsx-props-no-spreading */\n/* eslint-disable react/prop-types */\n// @ts-nocheck\nimport React from \"react\"\nimport { Flex, Button, getColor } from \"@netdata/netdata-ui\"\nimport styled from \"styled-components\"\n\nexport const TabButton = styled(Button).attrs(({ active }) => ({\n  flavour: \"borderless\",\n  neutral: true,\n  themeType: \"dark\",\n  className: \"btn\",\n  disabled: active,\n  \"data-testid\": \"k8sPopoverChart-tab\",\n}))`\n  &&& {\n    height: initial;\n    width: initial;\n    padding: 2px 20px;\n    ${({ active, theme }) => active && `border-bottom: 3px solid ${getColor(\"bright\")({ theme })};`}\n    color: ${({ active, theme }) => getColor(active ? \"bright\" : \"separator\")({ theme })}\n  }\n`\n\nconst Tabs = ({ value, onChange, ...rest }) => (\n  <Flex data-testid=\"k8sPopoverChart-tabs\" {...rest}>\n    <TabButton label=\"Context\" active={value === \"context\"} onClick={() => onChange(\"context\")} />\n    <TabButton label=\"Metrics\" active={value === \"metrics\"} onClick={() => onChange(\"metrics\")} />\n  </Flex>\n)\n\nexport default Tabs\n","/* eslint-disable object-curly-newline */\n/* eslint-disable react/prop-types */\n// @ts-nocheck\nimport React from \"react\"\nimport { Flex, Button, H6, makeFlex } from \"@netdata/netdata-ui\"\nimport styled from \"styled-components\"\n\nconst ExpandButton = styled(makeFlex(Button)).attrs({\n  icon: \"chevron_right_s\",\n  label: \"More\",\n  flavour: \"borderless\",\n  neutral: true,\n  themeType: \"dark\",\n  className: \"btn\",\n  alignItems: \"baseline\",\n  gap: 1,\n  direction: \"rowReverse\",\n})`\n  &&& {\n    padding: 0;\n    margin: 0;\n    font-weight: normal;\n    height: initial;\n    width: initial;\n\n    svg {\n      height: 6px;\n      width: 6px;\n      position: initial;\n    }\n  }\n`\n\nconst Section = ({ title, onExpand, children, noBorder }) => (\n  <Flex\n    gap={3}\n    padding={[0, 0, 3]}\n    border={!noBorder && { side: \"bottom\", color: \"separator\" }}\n    column\n    data-testid=\"k8sPopoverSection\"\n  >\n    <Flex justifyContent=\"between\" data-testid=\"k8sPopoverSection-header\">\n      <H6 color=\"border\" wordBreak=\"break-all\">\n        {title}\n      </H6>\n      {onExpand && <ExpandButton onClick={onExpand} />}\n    </Flex>\n    <Flex gap={4} column data-testid=\"k8sPopoverSection-content\">\n      {children}\n    </Flex>\n  </Flex>\n)\n\nexport default Section\n","import { LOCALSTORAGE_HEIGHT_KEY_PREFIX } from \"domains/chart/components/resize-handler\"\n\nimport { LEGEND_BOTTOM_SINGLE_LINE_HEIGHT } from \"domains/chart/utils/legend-utils\"\nimport { Attributes } from \"./transformDataAttributes\"\nimport { ChartLibraryConfig } from \"./chartLibrariesSettings\"\n\ntype GetPortalNodeStyles = (\n  attributes: Attributes,\n  chartSettings: ChartLibraryConfig,\n  shouldAddSpecialHeight: boolean,\n) => {\n  height: string | undefined,\n  width: string | undefined,\n  minWidth: string | undefined\n}\n\nconst getHeightFromLocalStorage = (heightID: string, isLegendOnBottom: boolean) => {\n  const persitedHeight = localStorage.getItem(`${LOCALSTORAGE_HEIGHT_KEY_PREFIX}${heightID}`)\n  if (persitedHeight) {\n    if (Number.isNaN(Number(persitedHeight))) {\n      return null\n    }\n    return `${isLegendOnBottom\n      ? Number(persitedHeight) + LEGEND_BOTTOM_SINGLE_LINE_HEIGHT\n      : persitedHeight\n    }px`\n  }\n\n  return null\n}\n\nexport const getPortalNodeStyles: GetPortalNodeStyles = (\n  attributes,\n  chartSettings,\n  shouldAddSpecialHeight,\n) => {\n  let width\n  if (typeof attributes.width === \"string\") {\n    // eslint-disable-next-line prefer-destructuring\n    width = attributes.width\n  } else if (typeof attributes.width === \"number\") {\n    width = `${attributes.width.toString()}px`\n  }\n  let height\n  if (chartSettings.aspectRatio === undefined) {\n    if (typeof attributes.height === \"string\") {\n      // eslint-disable-next-line prefer-destructuring\n      height = attributes.height\n    } else if (typeof attributes.height === \"number\") {\n      height = `${attributes.height.toString()}px`\n    }\n  }\n  const isLegendOnBottom = attributes.legendPosition === \"bottom\"\n\n  const heightFromLocalStorage = attributes.heightId\n    ? getHeightFromLocalStorage(attributes.heightId, isLegendOnBottom)\n    : null\n\n  if (heightFromLocalStorage) {\n    // .replace() is for backwards compatibility -  old dashboard was always doing\n    // JSON.stringify when setting localStorage so many users have '\"180px\"' values set.\n    // We can remove .replace() after some time\n    height = heightFromLocalStorage.replace(/\"/g, \"\")\n  }\n\n  if (shouldAddSpecialHeight) {\n    const heightOverriden = isLegendOnBottom\n      ? window.innerHeight * 0.5\n      : window.innerHeight * 0.4\n    height = `${heightOverriden}px`\n  }\n\n  const chartDefaultsMinWidth = window.NETDATA.chartDefaults.min_width\n  const minWidth = chartDefaultsMinWidth === null\n    ? undefined\n    : chartDefaultsMinWidth\n  return {\n    height,\n    width,\n    minWidth,\n  }\n}\n","import {\n  useEffect, useRef, useState, MutableRefObject,\n} from \"react\"\n\nconst globalIntersectionOptions = {\n  root: null,\n  rootMargin: \"0px\",\n  threshold: undefined,\n}\n\ntype IntersectionCallback = (isVisible: boolean) => void\ntype Listener = {\n  element: HTMLElement,\n  callback: IntersectionCallback,\n}\nconst createGlobalIntersectionObserver = () => {\n  let listeners: Listener[] = []\n  const globalHandler = (entries: IntersectionObserverEntry[]) => {\n    entries.forEach(({ isIntersecting, target }) => {\n      const callback = listeners.find(({ element }) => element === target)?.callback\n      if (callback) {\n        callback(isIntersecting)\n      }\n    })\n  }\n  const globalObserver = new IntersectionObserver(globalHandler, globalIntersectionOptions)\n\n  return {\n    subscribe: (element: HTMLElement, callback: IntersectionCallback) => {\n      globalObserver.observe(element)\n      listeners = listeners.concat({ element, callback })\n    },\n    unsubscribe: (elementToUnsubscribe: HTMLElement) => {\n      listeners = listeners.filter(({ element }) => element !== elementToUnsubscribe)\n    },\n  }\n}\nconst globalIntersectionObserver = createGlobalIntersectionObserver()\n\n\n// this hook is created for 2 reasons:\n// 1) to use the same IntersectionObserver for all charts (contrary to use-intersection from\n//    react-use, which creates new observer for every hook)\n// 2) to update the isVisible state only when necessary (contrary to what \"use-in-view\" hook from\n//    https://github.com/thebuilder/react-intersection-observer does)\nexport const useCommonIntersection = (\n  element: HTMLElement,\n  clonedChildrenRef: MutableRefObject<HTMLElement | undefined>,\n) => {\n  const [isVisible, setIsVisible] = useState(false)\n  const isVisibleRef = useRef(isVisible)\n  // the ref is just to prevent most updates on init - charts are not visible on first intersection\n  // observer callback, but it still tries to set the state. UseState does not bail out when\n  // state doesn't change\n\n  useEffect(() => {\n    if (typeof IntersectionObserver === \"function\") {\n      globalIntersectionObserver.subscribe(\n        element,\n        (newIsVisible) => {\n          if (isVisibleRef.current !== newIsVisible) {\n            if (clonedChildrenRef.current) {\n              // eslint-disable-next-line no-param-reassign\n              clonedChildrenRef.current.style.visibility = newIsVisible ? \"visible\" : \"hidden\"\n            }\n\n            isVisibleRef.current = newIsVisible\n            // we need to mirror it in `use-state` to cause react update\n            setIsVisible(newIsVisible)\n          }\n        },\n      )\n    }\n    return () => {\n      globalIntersectionObserver.unsubscribe(element)\n    }\n  }, [clonedChildrenRef, element])\n\n  return isVisible\n}\n","import React from \"react\"\n\nimport { Attributes } from \"domains/chart/utils/transformDataAttributes\"\n\ninterface Props {\n  attributes: Attributes\n}\n\n// rendered on init (for example when chart is not visible)\n// and when it's rendering after being hidden previously\nexport const InvisibleSearchableText = ({\n  attributes,\n}: Props) => (\n  <span style={{ position: \"absolute\", opacity: 0, width: 0 }}>\n    {attributes.id}\n  </span>\n)\n","import React, {\n  useEffect, useLayoutEffect, useState, useRef,\n} from \"react\"\nimport { useDebounce } from \"react-use\"\nimport { forEachObjIndexed } from \"ramda\"\n\nimport { useDispatch, useSelector } from \"store/redux-separate-context\"\nimport { isPrintMode } from \"domains/dashboard/utils/parse-url\"\nimport { selectDestroyOnHide, selectIsAsyncOnScroll, selectAlarm } from \"domains/global/selectors\"\nimport { getPortalNodeStyles } from \"domains/chart/utils/get-portal-node-styles\"\nimport { Attributes } from \"domains/chart/utils/transformDataAttributes\"\nimport { chartLibrariesSettings } from \"domains/chart/utils/chartLibrariesSettings\"\nimport { useCommonIntersection } from \"hooks/use-common-intersection\"\n\nimport { clearChartStateAction } from \"../actions\"\n\nimport { InvisibleSearchableText } from \"./invisible-searchable-text\"\n\nconst SCROLL_DEBOUNCE_ASYNC = 750\nconst SCROLL_DEBOUNCE_SYNC = 100\n\nconst cloneWithCanvas = (element: HTMLElement) => {\n  const cloned = element.cloneNode(true) as HTMLElement\n  const clonedCanvases = cloned.querySelectorAll(\"canvas\")\n\n  element.querySelectorAll(\"canvas\")\n    .forEach((oldCanvas, index) => {\n      const newCanvas = clonedCanvases[index]\n      const context = newCanvas.getContext(\"2d\")\n\n      newCanvas.width = oldCanvas.width\n      newCanvas.height = oldCanvas.height\n\n      if (context) {\n        context.drawImage(oldCanvas, 0, 0)\n      }\n    })\n  return cloned\n}\n\nconst shouldCleanChartStateAlways = localStorage.getItem(\"wipe-chart-state\")\n\ninterface Props {\n  attributes: Attributes\n  chartUuid: string\n  children: any\n  portalNode: HTMLElement\n}\nexport const DisableOutOfView = ({\n  attributes,\n  chartUuid,\n  children,\n  portalNode,\n}: Props) => {\n  /* when unmounting, clear redux state for this chart */\n  const dispatch = useDispatch()\n  useEffect(() => { // eslint-disable-line arrow-body-style\n    return () => {\n      dispatch(clearChartStateAction({ id: chartUuid }))\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [])\n\n\n  /* separate functionality - adding custom styles to portalNode */\n  const chartSettings = chartLibrariesSettings[attributes.chartLibrary]\n  const [hasPortalNodeBeenStyled, setHasPortalNodeBeenStyled] = useState<boolean>(false)\n  const isShowingAlarmOnChart = useSelector(selectAlarm)?.chartId === attributes.id\n  useLayoutEffect(() => {\n    if (hasPortalNodeBeenStyled) {\n      return\n    }\n    const shouldAddSpecialHeight = isShowingAlarmOnChart\n      && attributes.chartLibrary === \"dygraph\"\n      && chartSettings.hasLegend(attributes)\n    const styles = getPortalNodeStyles(attributes, chartSettings, shouldAddSpecialHeight)\n    forEachObjIndexed((value, styleName) => {\n      if (value) {\n        portalNode.style.setProperty(styleName, value)\n      }\n    }, styles)\n    // eslint-disable-next-line no-param-reassign\n    portalNode.className = chartSettings.containerClass(attributes)\n    setHasPortalNodeBeenStyled(true)\n  }, [attributes, chartSettings, hasPortalNodeBeenStyled, isShowingAlarmOnChart, portalNode,\n    setHasPortalNodeBeenStyled ])\n  /* end of \"adding custom styles to portalNode\" */\n\n\n  const destroyOnHide = useSelector(selectDestroyOnHide)\n\n  const clonedChildrenRef = useRef<HTMLElement>()\n  const isVisibleIntersection = useCommonIntersection(portalNode, clonedChildrenRef)\n\n  // todo hook to scroll (observe on visible items) instead of changes in intersectionRatio\n  // because intersectinnRatio maxes out on 1.0 when element is fully visible\n  const isAsyncOnScroll = useSelector(selectIsAsyncOnScroll)\n  const debounceTime = isAsyncOnScroll ? SCROLL_DEBOUNCE_ASYNC : SCROLL_DEBOUNCE_SYNC\n\n  // \"should hide because of debounced scroll handler\"\n  const [shouldHideDebounced, setShouldHideDebounced] = useState(!isVisibleIntersection)\n  useDebounce(\n    () => {\n      // start rendering, when intersectionRatio is not 0 and it hasn't changed for 1500 ms\n      setShouldHideDebounced(!isVisibleIntersection)\n    },\n    debounceTime,\n    [isVisibleIntersection],\n  )\n  const shouldHide = isVisibleIntersection ? shouldHideDebounced : true\n\n  const previousIsVisibleIntersection = useRef(isVisibleIntersection)\n  if (clonedChildrenRef.current\n    && previousIsVisibleIntersection.current !== isVisibleIntersection\n  ) {\n    previousIsVisibleIntersection.current = isVisibleIntersection\n  }\n\n  useEffect(() => {\n    if (!isPrintMode && shouldHide && shouldCleanChartStateAlways) {\n      dispatch(clearChartStateAction({ id: chartUuid }))\n    }\n  }, [chartUuid, dispatch, shouldHide])\n\n\n  if (isPrintMode) {\n    // we should show everything in this case\n    return children\n  }\n\n  if (shouldHide) {\n    // todo perhaps loader should be added here to both scenarios\n    if (destroyOnHide) {\n      return (\n        <InvisibleSearchableText attributes={attributes} />\n      )\n    }\n\n    if (!clonedChildrenRef.current) {\n      const newClonedChildren = Array.from(portalNode.children)\n        .map((child) => cloneWithCanvas(child as HTMLElement))\n\n      const clonedChildrenContainer = document.createElement(\"div\")\n      clonedChildrenContainer.style.visibility = \"hidden\"\n\n      newClonedChildren.forEach((child) => {\n        clonedChildrenContainer.appendChild(child)\n      })\n\n      clonedChildrenRef.current = clonedChildrenContainer\n    }\n\n    return (\n      <>\n        <InvisibleSearchableText attributes={attributes} />\n        <div\n          ref={(nodeElement) => {\n            if (nodeElement && clonedChildrenRef.current) {\n              nodeElement.appendChild(clonedChildrenRef.current)\n            }\n          }}\n        />\n      </>\n    )\n  }\n\n  if (!destroyOnHide && clonedChildrenRef.current) {\n    clonedChildrenRef.current = undefined\n  }\n\n  return children\n}\n","import React from \"react\"\n\nimport { Attributes } from \"../../utils/transformDataAttributes\"\nimport { ChartMetadata } from \"../../chart-types\"\nimport { ChartWithLoader, RenderCustomElementForDygraph } from \"../chart-with-loader\"\nimport { DisableOutOfView } from \"../disable-out-of-view\"\nimport { DropdownMenu } from \"../chart-dropdown\"\n\nexport type Props = {\n  attributes: Attributes\n  // warning! this is not the same as chartId in old dashboard\n  // here, the chartID must be unique across all agents\n  chartUuid: string\n  uuid?: string\n  portalNode: HTMLElement\n  chartMetadata?: ChartMetadata | undefined\n  dropdownMenu?: DropdownMenu\n  renderCustomElementForDygraph?: RenderCustomElementForDygraph\n  onAttributesChange?: any\n}\n\nexport const ChartContainer = ({\n  attributes,\n  chartMetadata,\n  chartUuid,\n  dropdownMenu,\n  portalNode,\n  renderCustomElementForDygraph,\n  onAttributesChange,\n  uuid,\n}: Props) => (\n  <DisableOutOfView attributes={attributes} portalNode={portalNode} chartUuid={chartUuid}>\n    <ChartWithLoader\n      attributes={attributes}\n      chartUuid={chartUuid}\n      renderCustomElementForDygraph={renderCustomElementForDygraph}\n      onAttributesChange={onAttributesChange}\n      dropdownMenu={dropdownMenu}\n      externalChartMetadata={chartMetadata}\n      portalNode={portalNode}\n      uuid={uuid}\n    />\n  </DisableOutOfView>\n)\n","/* eslint-disable max-len */\nimport { ChartsMetadata } from \"domains/global/types\"\nimport { AnyStringKeyT } from \"types/common\"\nimport { ChartEnriched } from \"domains/chart/chart-types\"\n\nexport interface Submenus {\n  [submenus: string]: {\n    charts: ChartEnriched[]\n    height: number\n    info: string | null\n    priority: number\n    title: string | null\n  }\n}\n\nexport interface CorrelationMetadata {\n    scoredCount?: number\n    totalCount?: number\n    averageScore?: number\n}\n\nexport interface Menu {\n  // eslint-disable-next-line camelcase\n  menu_pattern: string\n  priority: number\n  submenus: Submenus\n  title: string\n  icon: string\n  info: string\n  height: number\n  correlationsMetadata?: CorrelationMetadata\n}\n\nexport interface Menus {\n  [menu: string]: Menu\n}\n\nexport const options = {\n  menus: {} as Menus,\n  submenu_names: {} as {[family: string]: string},\n  data: null as (ChartsMetadata | null),\n  hostname: \"netdata_server\", // will be overwritten by the netdata server\n  version: \"unknown\",\n  release_channel: \"unknown\",\n  hosts: [],\n\n  duration: 0, // the default duration of the charts\n  update_every: 1,\n\n  chartsPerRow: 0,\n  // chartsMinWidth: 1450,\n  chartsHeight: 180,\n}\n\n\n// netdata standard information\nexport const netdataDashboard = {\n  sparklines_registry: {} as {[key: string]: { count: number }},\n  os: \"unknown\",\n\n  menu: {},\n  submenu: {} as {\n    [family: string]: {\n      info?: string | ((os: string) => string)\n      title?: string\n    }\n  },\n  context: {} as {\n    [id: string]: {\n      valueRange: string // examples: \"[0, 100]\", \"[null, null]\"\n      height: number\n      decimalDigits: number\n  }},\n\n  // generate a sparkline\n  // used in the documentation\n  sparkline(\n    prefix: string, chart: string, dimension: string, units: string = \"\", suffix: string,\n  ) {\n    if (options.data === null || typeof options.data.charts === \"undefined\") {\n      return \"\"\n    }\n\n    if (typeof options.data.charts[chart] === \"undefined\") {\n      return \"\"\n    }\n\n    if (typeof options.data.charts[chart].dimensions === \"undefined\") {\n      return \"\"\n    }\n\n    if (typeof options.data.charts[chart].dimensions[dimension] === \"undefined\") {\n      return \"\"\n    }\n\n    let key = `${chart}.${dimension}`\n\n    if (typeof this.sparklines_registry[key] === \"undefined\") {\n      this.sparklines_registry[key] = { count: 1 }\n    } else {\n      this.sparklines_registry[key].count += 1\n    }\n\n    key = `${key}.${this.sparklines_registry[key].count}`\n\n    return `${prefix}<div class=\"netdata-container\" data-netdata=\"${chart}\" data-after=\"-120\"\n      data-width=\"25%\" data-height=\"15px\" data-chart-library=\"dygraph\"\n      data-dygraph-theme=\"sparkline\" data-dimensions=\"${dimension}\"\n      data-show-value-of-${dimension}-at=\"${key}\"></div>\n       (<span id=\"${key}\" style=\"display: inline-block; min-width: 50px; text-align: right;\">\n       X</span>${units})${suffix}`\n  },\n\n  gaugeChart(\n    title: string, width: string, dimensions: string = \"\", colors: string = \"\",\n  ) {\n    return `${\"<div class=\\\"netdata-container\\\" data-netdata=\\\"CHART_UNIQUE_ID\\\"\"\n      + \" data-dimensions=\\\"\"}${dimensions}\"`\n      + \" data-chart-library=\\\"gauge\\\"\"\n      + \" data-gauge-adjust=\\\"width\\\"\"\n      + ` data-title=\"${title}\"`\n      + ` data-width=\"${width}\"`\n      + \" data-before=\\\"0\\\"\"\n      + \" data-after=\\\"-CHART_DURATION\\\"\"\n      + \" data-points=\\\"CHART_DURATION\\\"\"\n      + ` data-colors=\"${colors}\"`\n      + \" role=\\\"application\\\"></div>\"\n  },\n\n  anyAttribute(obj: AnyStringKeyT, attr: string, key: string, def: unknown, domain?: string) {\n    if (typeof (obj[key]) !== \"undefined\") {\n      const config = obj[key]\n      const configWithDomain = domain ? {...config, ...config[domain]} : config\n      const x = configWithDomain[attr]\n\n      if (x === undefined) {\n        return def\n      }\n\n      if (typeof (x) === \"function\") {\n        return x(netdataDashboard.os)\n      }\n\n      return x\n    }\n\n    return def\n  },\n\n  menuTitle(chart: ChartEnriched) {\n    if (chart.sectionTitle) {\n      return chart.sectionTitle\n    }\n    if (typeof chart.menu_pattern !== \"undefined\") {\n      const type = chart.type || chart.id.split(\".\")[0]\n      return (`${this.anyAttribute(this.menu, \"title\", chart.menu_pattern, chart.menu_pattern)\n        .toString()\n      } ${type.slice(-(type.length - chart.menu_pattern.length - 1)).toString()}`)\n        .replace(/_/g, \" \")\n    }\n\n    return (this.anyAttribute(this.menu, \"title\", chart.menu, chart.menu)).toString()\n      .replace(/_/g, \" \")\n  },\n\n  menuIcon(chart: ChartEnriched) {\n    if (typeof chart.menu_pattern !== \"undefined\") {\n      return this.anyAttribute(this.menu, \"icon\", chart.menu_pattern,\n        \"<i class=\\\"fas fa-puzzle-piece\\\"></i>\").toString()\n    }\n\n    return this.anyAttribute(this.menu, \"icon\", chart.menu, \"<i class=\\\"fas fa-puzzle-piece\\\"></i>\")\n  },\n\n  menuInfo(chart: ChartEnriched) {\n    if (typeof chart.menu_pattern !== \"undefined\") {\n      return this.anyAttribute(this.menu, \"info\", chart.menu_pattern, null)\n    }\n\n    return this.anyAttribute(this.menu, \"info\", chart.menu, null)\n  },\n\n  menuHeight(chart: ChartEnriched) {\n    if (typeof chart.menu_pattern !== \"undefined\") {\n      return this.anyAttribute(this.menu, \"height\", chart.menu_pattern, 1.0)\n    }\n\n    return this.anyAttribute(this.menu, \"height\", chart.menu, 1.0)\n  },\n\n  submenuTitle(menu: string, submenu: string) {\n    const key = `${menu}.${submenu}`\n    // console.log(key);\n    const title = this.anyAttribute(this.submenu, \"title\", key, submenu)\n      .toString().replace(/_/g, \" \") as string\n    if (title.length > 28) {\n      const a = title.substring(0, 13)\n      const b = title.substring(title.length - 12, title.length)\n      return `${a}...${b}`\n    }\n    return title\n  },\n\n  submenuInfo(menu: string, submenu: string) {\n    const key = `${menu}.${submenu}`\n    return this.anyAttribute(this.submenu, \"info\", key, null) as (string | null)\n  },\n\n  submenuHeight(menu: string, submenu: string, relative: number) {\n    const key = `${menu}.${submenu}`\n    return this.anyAttribute(this.submenu, \"height\", key, 1.0) * relative\n  },\n\n  contextInfo(id: string, domain?: string) {\n    const x = this.anyAttribute(this.context, \"info\", id, null, domain)\n\n    if (x !== null) {\n      return `<div class=\"shorten dashboard-context-info\"\n        role=\"document\">${x}</div>`\n    }\n    return \"\"\n  },\n\n  contextValueRange(id: string) {\n    if (typeof this.context[id] !== \"undefined\"\n      && typeof this.context[id].valueRange !== \"undefined\"\n    ) {\n      try {\n        return JSON.parse(this.context[id].valueRange)\n      } catch (e) {\n        return [null, null]\n      }\n    }\n    return [null, null]\n  },\n\n  contextHeight(id: string, def: number) {\n    if (typeof this.context[id] !== \"undefined\" && typeof this.context[id].height !== \"undefined\") {\n      return def * this.context[id].height\n    }\n    return def\n  },\n\n  contextDecimalDigits(id: string, def: number) {\n    if (typeof this.context[id] !== \"undefined\"\n      && typeof this.context[id].decimalDigits !== \"undefined\"\n    ) {\n      return this.context[id].decimalDigits\n    }\n    return def\n  },\n}\n\n// @ts-ignore\nwindow.netdataDashboard = netdataDashboard\n","/* eslint-disable object-curly-newline */\n/* eslint-disable react/jsx-props-no-spreading */\n/* eslint-disable react/destructuring-assignment */\n/* eslint-disable operator-linebreak */\n/* eslint-disable arrow-body-style */\n/* eslint-disable react/prop-types */\n// @ts-nocheck\nimport React, { memo } from \"react\"\nimport styled from \"styled-components\"\nimport { Flex, Text } from \"@netdata/netdata-ui\"\nimport { useSelector } from \"store/redux-separate-context\"\nimport { useFormatters } from \"domains/chart/utils/formatters\"\nimport { netdataDashboard } from \"domains/dashboard/utils/netdata-dashboard\"\nimport { selectChartData } from \"domains/chart/selectors\"\n\nconst Title = styled(Text)`\n  text-overflow: ellipsis;\n  max-width: 120px;\n  overflow-x: hidden;\n`\n\nconst getUnitSign = unit => {\n  return unit === \"percentage\" ? \"%\" : ` ${unit.replace(/milliseconds/, \"ms\")}`\n}\n\nconst aggrMethods = {\n  avg: \"Average\",\n  sum: \"Sum\",\n  min: \"Min\",\n  max: \"Max\",\n}\nconst getAggregation = value => `${aggrMethods[value]}` || \"\"\n\nconst ChartValueContainer = memo(({ id, units, aggrMethod, displayedIndex }) => {\n  const chartData = useSelector((state: AppStateT) => selectChartData(state, { id }))\n\n  const value =\n    typeof displayedIndex === \"number\"\n      ? chartData.result[displayedIndex]\n      : chartData.view_latest_values[0]\n\n  const { legendFormatValue, unitsCurrent } = useFormatters({\n    attributes: {},\n    data: chartData,\n    units,\n    unitsCommon: null,\n    unitsDesired: null,\n    uuid: id,\n  })\n\n  const aggregation = getAggregation(aggrMethod)\n\n  return (\n    <Text\n      wordBreak=\"keep-all\"\n      color=\"bright\"\n      margin={[0, 0, 0, \"auto\"]}\n      data-testid=\"k8sPopoverChart-chartValue\"\n    >\n      {aggregation && (\n        <Text margin={[0, 1, 0, 0]} color=\"separator\" data-testid=\"k8sPopoverChart-chartValue-aggr\">\n          {aggregation}\n        </Text>\n      )}\n      {legendFormatValue(value)}\n      {getUnitSign(unitsCurrent)}\n    </Text>\n  )\n})\n\nconst ChartValue = ({ id, ...rest }) => {\n  const chartData = useSelector((state: AppStateT) => selectChartData(state, { id }))\n\n  if (!chartData || chartData.result.length === 0) return null\n  return <ChartValueContainer id={id} {...rest} />\n}\n\nconst ChartOverview = ({ id, chartMetadata, aggrMethod, displayedIndex }) => {\n  const { units, context } = chartMetadata\n  const title = context.replace(/cgroup\\./, \"\")\n  const icon = netdataDashboard.menuIcon(chartMetadata)\n\n  return (\n    <Flex gap={2} data-testid=\"k8sPopoverChart-overview\">\n      <Text color=\"bright\" dangerouslySetInnerHTML={{ __html: icon }} />\n      <Title color=\"bright\" data-testid=\"k8sPopoverChart-title\">\n        {title}\n      </Title>\n      <ChartValue id={id} units={units} aggrMethod={aggrMethod} displayedIndex={displayedIndex} />\n    </Flex>\n  )\n}\n\nexport default memo(ChartOverview)\n","import React, { useMemo } from \"react\"\nimport Anchor from \"@/src/components/anchor\"\nimport { Text } from \"@netdata/netdata-ui\"\nimport { useLocalStorage } from \"react-use\"\nimport { utmUrlSuffix } from \"utils/utils\"\nimport { utmParametersToString } from \"domains/global/selectors\"\n\nexport type UserStatus = \"LOGGED_IN\" | \"EXPIRED_LOGIN\" | \"UNKNOWN\"\nexport type NodeClaimedStatus = \"NOT_CLAIMED\" | \"CLAIMED\"\nexport type UserNodeAccess = \"NO_ACCESS\" | \"ACCESS_OK\"\ntype UserPreference = \"AGENT\" | \"CLOUD\" | \"UNDEFINED\"\nexport type NodeLiveness = \"LIVE\" | \"NOT_LIVE\"\ntype CTATYPE = \"NAVIGATE\" | \"REFRESH\"\n\nexport enum MigrationModalPromos {\n  PROMO_SIGN_IN_CLOUD = \"PROMO_SIGN_IN_CLOUD\",\n  PROMO_SIGN_UP_CLOUD = \"PROMO_SIGN_UP_CLOUD\",\n  PROMO_IVNITED_TO_SPACE = \"PROMO_IVNITED_TO_SPACE\",\n  PROMO_CLAIM_NODE = \"PROMO_CLAIM_NODE\",\n  PROMO_TO_USE_NEW_DASHBAORD = \"PROMO_TO_USE_NEW_DASHBAORD\",\n  FALLBACK_TO_AGENT = \"FALLBACK_TO_AGENT\",\n  NO_INFO_FALLBACK_TO_AGENT = \"NO_INFO_FALLBACK_TO_AGENT\",\n}\n\ntype MigrationModalActions = {\n  text: string\n  action: CTATYPE\n  toPath?: string\n  userPreference?: UserPreference | \"DONT_SHOW\"\n}\n\ntype MigrationModalContent = {\n  title: string\n  text: {\n    header: ((props: any) => React.ReactNode) | string\n    bullets?: Array<string | ((props?: any) => React.ReactNode)>\n    footer?: ((props: any) => React.ReactNode) | string\n  }\n  tickBoxOption: { text: string; preferenceID: MigrationModalPromos }\n  CTA1: MigrationModalActions\n  CTA2?: MigrationModalActions\n}\n\ntype MigrationModalInfo = {\n  [key in MigrationModalPromos]: MigrationModalContent\n}\n\nconst campaign = \"agent_nudge_to_cloud\"\n\nconst makeUTMParameters = (modalPromo: MigrationModalPromos) =>\n  `${utmUrlSuffix}${utmParametersToString({\n    content: modalPromo,\n    campaign,\n  })}`\n\nexport const migrationmodalInfo: MigrationModalInfo = {\n  [MigrationModalPromos.PROMO_SIGN_UP_CLOUD]: {\n    title: \"Learn about Netdata Cloud!\",\n    text: {\n      header: () => (\n        <Text strong>\n          Netdata Cloud is a FREE service that complements the Netdata Agent, to provide:\n        </Text>\n      ),\n      bullets: [\n        \"Infrastructure level dashboards (each chart aggregates data from multiple nodes)\",\n        \"Central dispatch of alert notifications\",\n        \"Custom dashboards editor\",\n        \"Intelligence assisted troubleshooting, to help surface the root cause of issues\",\n      ],\n      footer: \"Have a look, you will be surprised!\",\n    },\n    tickBoxOption: {\n      text: \"Remember my choice\",\n      preferenceID: MigrationModalPromos.PROMO_SIGN_UP_CLOUD,\n    },\n    CTA1: {\n      text: \"Wow! Let’s go to Netdata Cloud\",\n      toPath: \"path/signup/cloud\",\n      action: \"NAVIGATE\",\n      userPreference: \"CLOUD\",\n    },\n    CTA2: {\n      text: \"Later, stay at the agent dashboard\",\n      action: \"NAVIGATE\",\n      toPath: \"path/agent-dashboard\",\n      userPreference: \"AGENT\",\n    },\n  },\n  [MigrationModalPromos.PROMO_SIGN_IN_CLOUD]: {\n    title: \"Sign-in to Netdata Cloud or get an invitation!\",\n    text: {\n      header: () => (\n        <>\n          <Text strong>\n            This node is connected to Netdata Cloud but you are not. If you have a Netdata Cloud\n            account sign-in, if not ask for an invitation to it.\n          </Text>\n\n          <Text>\n            Netdata Cloud is a FREE service that complements the Netdata Agent, to provide:\n          </Text>\n        </>\n      ),\n      bullets: [\n        \"Infrastructure level dashboards (each chart aggregates data from multiple nodes)\",\n        \"Central dispatch of alert notifications\",\n        \"Custom dashboards editor\",\n        \"Intelligence assisted troubleshooting, to help surface the root cause of issues\",\n      ],\n      footer: \"Have a look, you will be surprised!\",\n    },\n    tickBoxOption: {\n      text: \"Remember my choice\",\n      preferenceID: MigrationModalPromos.PROMO_SIGN_IN_CLOUD,\n    },\n    CTA1: {\n      text: \"Sign-in or get a Netdata Cloud account\",\n      action: \"NAVIGATE\",\n      toPath: \"path/signin/cloud\",\n      userPreference: \"CLOUD\",\n    },\n    CTA2: {\n      text: \"Later, stay at the Agent dashboard\",\n      toPath: \"path/agent-dashboard\",\n      action: \"NAVIGATE\",\n      userPreference: \"AGENT\",\n    },\n  },\n  [MigrationModalPromos.PROMO_IVNITED_TO_SPACE]: {\n    title: \"Get an invitation to this Node’s Space!\",\n    text: {\n      header: () => (\n        <Text strong>\n          This node is connected to Netdata Cloud but it isnt available on one of your Spaces.\n        </Text>\n      ),\n      bullets: [],\n      footer: \"Ask for an invitation to this Space!\",\n    },\n    tickBoxOption: {\n      text: \"Don't remind me of this again\",\n      preferenceID: MigrationModalPromos.PROMO_IVNITED_TO_SPACE,\n    },\n    CTA1: {\n      text: \"Thanks, stay at Agent dashboard for now\",\n      toPath: \"agent\",\n      action: \"NAVIGATE\",\n      userPreference: \"AGENT\",\n    },\n  },\n  [MigrationModalPromos.PROMO_CLAIM_NODE]: {\n    title: \"This node isn’t connected to Netdata Cloud\",\n    text: {\n      header: () => (\n        <Text strong>\n          For you to be able to see this node on Netdata Cloud you will either need to:\n        </Text>\n      ),\n      footer: \"Have a look, you will be surprised!\",\n      bullets: [\n        () => {\n          return (\n            <Text>\n              {\" \"}\n              Connect this node directly (documentation on{\" \"}\n              <Anchor\n                target=\"_blank\"\n                rel=\"noopener noreferrer\"\n                href={`https://learn.netdata.cloud/docs/agent/claim?${makeUTMParameters(\n                  MigrationModalPromos.PROMO_CLAIM_NODE\n                ).substring(1)}#how-to-connect-a-node`}\n              >\n                how to connect a node\n              </Anchor>\n              ) , or\n            </Text>\n          )\n        },\n        () => {\n          return (\n            <Text>\n              Αctivate streaming to a parent node that is already connected (documentation on{\" \"}\n              <Anchor\n                target=\"_blank\"\n                rel=\"noopener noreferrer\"\n                href={`https://learn.netdata.cloud/docs/metrics-storage-management/enable-streaming?${makeUTMParameters(\n                  MigrationModalPromos.PROMO_CLAIM_NODE\n                ).substring(1)}`}\n              >\n                how to configure streaming\n              </Anchor>\n              )\n            </Text>\n          )\n        },\n      ],\n    },\n    tickBoxOption: {\n      text: \"Remember my choice.\",\n      preferenceID: MigrationModalPromos.PROMO_CLAIM_NODE,\n    },\n    CTA1: {\n      text: \"Wow! Let’s go to Netdata Cloud\",\n      action: \"NAVIGATE\",\n      toPath: \"path/node/cloud\",\n      userPreference: \"CLOUD\",\n    },\n    CTA2: {\n      text: \"Later, stay at the Agent dashboard\",\n      action: \"NAVIGATE\",\n      toPath: \"path/agent-dashboard\",\n      userPreference: \"AGENT\",\n    },\n  },\n  [MigrationModalPromos.PROMO_TO_USE_NEW_DASHBAORD]: {\n    title: \"Use the Old or the New dashboard?\",\n    text: {\n      header: () => (\n        <Text strong>\n          This node is available in your Netdata Cloud account. So, you have full access to the NEW\n          dashboards, charts, intelligence-assisted troubleshooting and many more!\n        </Text>\n      ),\n      bullets: [],\n    },\n    tickBoxOption: {\n      text: \"Remember my choice\",\n      preferenceID: MigrationModalPromos.PROMO_TO_USE_NEW_DASHBAORD,\n    },\n    CTA1: {\n      text: \"Wow! Let’s go to Netdata Cloud \",\n      action: \"NAVIGATE\",\n      toPath: \"path/dashboard/cloud\",\n      userPreference: \"CLOUD\",\n    },\n    CTA2: {\n      text: \"Later, stay at the Agent dashboard\",\n      action: \"NAVIGATE\",\n      toPath: \"path/agent-dashboard\",\n      userPreference: \"AGENT\",\n    },\n  },\n  [MigrationModalPromos.FALLBACK_TO_AGENT]: {\n    title: \"Oops! This node has lost connection to Netdata Cloud!\",\n    text: {\n      header: ({ date = \"\" }) => {\n        return (\n          <>\n            <Text strong>\n              Unfortunately, it seems that this node is not currently connected to Netdata Cloud.\n              So, the old agent dashboard is the only option available.\n            </Text>\n            {/* <Text>\n              The node lost its Netdata Cloud connection at <Text strong>{date}</Text>.\n            </Text> */}\n            <Text>\n              To troubleshoot Netdata Cloud connection issues, please follow this{\" \"}\n              <Anchor\n                target=\"_blank\"\n                rel=\"noopener noreferrer\"\n                href={`https://learn.netdata.cloud/docs/agent/claim?${makeUTMParameters(\n                  MigrationModalPromos.FALLBACK_TO_AGENT\n                ).substring(1)}#troubleshooting`}\n              >\n                this guide.\n              </Anchor>\n            </Text>\n          </>\n        )\n      },\n      bullets: [],\n    },\n    tickBoxOption: {\n      text: \"Don't show this again\",\n      preferenceID: MigrationModalPromos.FALLBACK_TO_AGENT,\n    },\n    CTA1: {\n      text: \"Check again please\",\n      action: \"REFRESH\",\n      userPreference: undefined,\n    },\n    CTA2: {\n      text: \"Thanks, stay at Agent dashboard\",\n      toPath: \"path/agent\",\n      action: \"NAVIGATE\",\n      userPreference: \"AGENT\",\n    },\n  },\n  [MigrationModalPromos.NO_INFO_FALLBACK_TO_AGENT]: {\n    title: \"Oops! We aren't able to get information of this node in regards to Netdata Cloud!\",\n    text: {\n      header: () => {\n        return (\n          <>\n            <Text strong>\n              Unfortunately, it seems we aren't able to get information on this node in regards to\n              Netdata Cloud.\n            </Text>\n            <Text>\n              This could be from internet connectivity issues from your end or some temporary issue\n              with our services. So, the old agent dashboard is the only option available.\n            </Text>\n          </>\n        )\n      },\n      bullets: [],\n    },\n    tickBoxOption: {\n      text: \"Don't show this again\",\n      preferenceID: MigrationModalPromos.NO_INFO_FALLBACK_TO_AGENT,\n    },\n    CTA1: {\n      text: \"Check again please\",\n      action: \"REFRESH\",\n      userPreference: undefined,\n    },\n    CTA2: {\n      text: \"Thanks, stay at Agent dashboard\",\n      toPath: \"path/agent-dashboard\",\n      action: \"NAVIGATE\",\n      userPreference: \"AGENT\",\n    },\n  },\n}\n\nexport type PromoProps = {\n  userSavedPreference?: UserPreference\n  userStatus?: UserStatus\n  nodeClaimedStatus?: NodeClaimedStatus\n  userNodeAccess?: UserNodeAccess\n  nodeLiveness?: NodeLiveness\n}\n\nconst isPromoSignUp = ({\n  userSavedPreference,\n  userStatus,\n  nodeClaimedStatus,\n}: PromoProps): boolean =>\n  userSavedPreference !== \"AGENT\" && userStatus === \"UNKNOWN\" && nodeClaimedStatus === \"NOT_CLAIMED\"\n\nconst isPromoSignIn = ({\n  userSavedPreference,\n  userStatus,\n  nodeClaimedStatus,\n}: PromoProps): boolean =>\n  userSavedPreference !== \"AGENT\" && userStatus === \"UNKNOWN\" && nodeClaimedStatus === \"CLAIMED\"\n\nconst isPromoInvitedToSpace = ({\n  userSavedPreference,\n  userStatus,\n  nodeClaimedStatus,\n  userNodeAccess,\n}: PromoProps): boolean =>\n  userSavedPreference !== \"AGENT\" &&\n  (userStatus === \"LOGGED_IN\" || userStatus === \"EXPIRED_LOGIN\") &&\n  nodeClaimedStatus === \"CLAIMED\" &&\n  userNodeAccess === \"NO_ACCESS\"\n\nconst isPromoToClaimThisNode = ({\n  userSavedPreference,\n  userStatus,\n  nodeClaimedStatus,\n}: PromoProps): boolean =>\n  userSavedPreference !== \"AGENT\" &&\n  (userStatus === \"LOGGED_IN\" || userStatus === \"EXPIRED_LOGIN\") &&\n  nodeClaimedStatus === \"NOT_CLAIMED\"\n\nconst isPromoToNewDasboardOnCloud = ({\n  userSavedPreference,\n  userStatus,\n  nodeLiveness,\n  userNodeAccess,\n}: PromoProps): boolean =>\n  !userSavedPreference &&\n  (userStatus === \"LOGGED_IN\" || userStatus === \"EXPIRED_LOGIN\") &&\n  nodeLiveness === \"LIVE\" &&\n  userNodeAccess === \"ACCESS_OK\"\n\nconst isNoInfoFallbackToAgent = ({\n  userSavedPreference,\n  userStatus,\n  nodeClaimedStatus,\n  nodeLiveness,\n  userNodeAccess,\n}: PromoProps): boolean =>\n  userSavedPreference === \"CLOUD\" &&\n  !userStatus &&\n  !nodeClaimedStatus &&\n  !nodeLiveness &&\n  !userNodeAccess\n\nconst isFallbackToAgent = ({\n  userSavedPreference,\n  userStatus,\n  nodeClaimedStatus,\n  nodeLiveness,\n  userNodeAccess,\n}: PromoProps): boolean =>\n  userSavedPreference !== \"AGENT\" &&\n  (userStatus === \"LOGGED_IN\" || userStatus === \"EXPIRED_LOGIN\") &&\n  nodeClaimedStatus === \"CLAIMED\" &&\n  nodeLiveness === \"NOT_LIVE\" &&\n  userNodeAccess === \"ACCESS_OK\"\n\nexport const goToAgentDashboard = ({ userSavedPreference }: PromoProps) =>\n  userSavedPreference === \"AGENT\"\n\nexport const goToCloud = ({\n  userSavedPreference,\n  userStatus,\n  nodeLiveness,\n  userNodeAccess,\n}: PromoProps) =>\n  userSavedPreference === \"CLOUD\" &&\n  (userStatus === \"LOGGED_IN\" || userStatus === \"EXPIRED_LOGIN\") &&\n  nodeLiveness === \"LIVE\" &&\n  userNodeAccess === \"ACCESS_OK\"\n\nconst modalStatusWithPromoFunctions: Record<\n  MigrationModalPromos,\n  (props: PromoProps) => boolean\n> = {\n  [MigrationModalPromos.FALLBACK_TO_AGENT]: isFallbackToAgent,\n  [MigrationModalPromos.NO_INFO_FALLBACK_TO_AGENT]: isNoInfoFallbackToAgent,\n  [MigrationModalPromos.PROMO_TO_USE_NEW_DASHBAORD]: isPromoToNewDasboardOnCloud,\n  [MigrationModalPromos.PROMO_CLAIM_NODE]: isPromoToClaimThisNode,\n  [MigrationModalPromos.PROMO_IVNITED_TO_SPACE]: isPromoInvitedToSpace,\n  [MigrationModalPromos.PROMO_SIGN_IN_CLOUD]: isPromoSignIn,\n  [MigrationModalPromos.PROMO_SIGN_UP_CLOUD]: isPromoSignUp,\n}\n\nconst useMigrationModal = ({\n  userStatus,\n  nodeClaimedStatus,\n  userNodeAccess,\n  nodeLiveness,\n}: PromoProps) => {\n  const [userSavedPreference, setUserPrefrence] = useLocalStorage<UserPreference>(\n    \"USER_SAVED_PREFERENCE\"\n  )\n\n  const migrationModalPromo = useMemo<MigrationModalPromos>(() => {\n    return Object.keys(modalStatusWithPromoFunctions).find(modalStatus => {\n      return modalStatusWithPromoFunctions[modalStatus]({\n        userStatus,\n        nodeClaimedStatus,\n        userNodeAccess,\n        userSavedPreference,\n        nodeLiveness,\n      })\n    }) as MigrationModalPromos\n  }, [userStatus, nodeClaimedStatus, userNodeAccess, nodeLiveness, userSavedPreference])\n\n  return {\n    migrationModalPromoInfo: migrationmodalInfo[migrationModalPromo],\n    migrationModalPromo,\n    setUserPrefrence,\n    userSavedPreference,\n  }\n}\n\nexport default useMigrationModal\n","/* eslint-disable comma-dangle */\n/* eslint-disable react-hooks/exhaustive-deps */\n/* eslint-disable object-curly-newline */\n/* eslint-disable react/prop-types */\n// @ts-nocheck\nimport React, { useRef, useContext, useLayoutEffect, useState, memo, useMemo } from \"react\"\nimport { throttle } from \"throttle-debounce\"\nimport { ChartContainer } from \"domains/chart/components/chart-container\"\nimport { ThemeContext } from \"styled-components\"\nimport { Flex, getColor } from \"@netdata/netdata-ui\"\nimport ChartOverview from \"./chartOverview\"\n\nconst Chart = ({ groupLabel, postGroupLabel, id, attributes, relatedIndex }) => {\n  const theme = useContext(ThemeContext)\n  const chartContainerRef = useRef()\n  const [displayedIndex, setDisplayedIndex] = useState()\n  const setDisplayedIndexThrottled = useMemo(() => throttle(400, setDisplayedIndex), [])\n  const [, repaint] = useState()\n\n  useLayoutEffect(() => {\n    repaint(true)\n  }, [])\n\n  const { chartMetadata, attributes: relatedChartAttributes } = attributes.relatedCharts[\n    relatedIndex\n  ]\n\n  const chartAttributes = useMemo(\n    () => ({\n      id: chartMetadata.id,\n\n      width: \"100%\",\n      height: \"60px\",\n\n      chartLibrary: \"sparkline\",\n      sparklineLineWidth: \"2px\",\n      sparklineLineColor: getColor(\"border\")({ theme }),\n      sparklineFillColor: getColor(\"disabled\")({ theme }),\n      sparklineSpotRadius: 0,\n      sparklineDisableTooltips: true,\n      sparklineOnHover: (event) => setDisplayedIndexThrottled(event?.x),\n\n      httpMethod: \"POST\",\n      host: attributes.host,\n      nodeIDs: attributes.nodeIDs,\n      dimensions: relatedChartAttributes.dimensions,\n      aggrMethod: relatedChartAttributes.aggrMethod,\n\n      labels: {\n        k8s_cluster_id: [chartMetadata.chartLabels.k8s_cluster_id[0]],\n        [attributes.groupBy]: [groupLabel],\n        ...(postGroupLabel && { [attributes.postGroupBy]: [postGroupLabel] }),\n      },\n    }),\n    [chartMetadata, attributes]\n  )\n\n  return (\n    <Flex gap={2} column data-testid=\"k8sPopoverChart\">\n      <div\n        ref={chartContainerRef}\n        style={{ height: \"60px\", width: \"100%\" }}\n        data-testid=\"k8sPopoverChart-container\"\n      >\n        {chartContainerRef.current && (\n          <ChartContainer\n            chartUuid={id}\n            attributes={chartAttributes}\n            chartMetadata={chartMetadata}\n            portalNode={chartContainerRef.current}\n          />\n        )}\n      </div>\n      <ChartOverview\n        id={id}\n        aggrMethod={chartAttributes.aggrMethod}\n        chartMetadata={chartMetadata}\n        displayedIndex={displayedIndex}\n      />\n    </Flex>\n  )\n}\n\nexport default memo(Chart)\n","/* eslint-disable object-curly-newline */\n/* eslint-disable react/prop-types */\n// @ts-nocheck\nimport React from \"react\"\nimport styled from \"styled-components\"\nimport { Text, Flex, Icon } from \"@netdata/netdata-ui\"\n\nconst ExternalButton = styled(Icon).attrs({\n  margin: [0, 0, 0, \"auto\"],\n  color: \"bright\",\n  width: \"10px\",\n  height: \"10px\",\n  alignSelf: \"center\",\n  name: \"nav_arrow_goto\",\n  role: \"button\",\n  title: \"Go to node\",\n  \"data-testid\": \"k8sPopoverItem-externalButton\",\n})`\n  cursor: pointer;\n`\n\nconst Item = ({ icon, title, secondary, onClick }) => (\n  <Flex gap={1} alignItems=\"start\" data-testid=\"k8sPopoverItem\">\n    <Flex width=\"22px\" height=\"22px\" data-testid=\"k8sPopoverItem-icon\">\n      <Icon name={icon} color=\"bright\" margin={[0, 1, 0, 0]} width=\"22px\" height=\"22px\" />\n    </Flex>\n    <Text color=\"bright\" data-testid=\"k8sPopoverItem-title\">\n      {title}\n    </Text>\n    {secondary && (\n      <Text color=\"border\" wordBreak=\"break-all\" data-testid=\"k8sPopoverItem-detail\">\n        {secondary}\n      </Text>\n    )}\n    {onClick && <ExternalButton onClick={onClick} />}\n  </Flex>\n)\n\nexport default Item\n","/* eslint-disable react/prop-types */\n// @ts-nocheck\nimport React from \"react\"\nimport { useDateTime } from \"utils/date-time\"\nimport Item from \"./item\"\nimport Section from \"./section\"\n\nconst DateItem = ({ date, title }) => {\n  const { localeDateString, localeTimeString } = useDateTime()\n\n  return (\n    <Item\n      icon=\"around_clock\"\n      title={title}\n      secondary={`${localeDateString(date)} | ${localeTimeString(date)}`}\n    />\n  )\n}\n\nconst DateSection = ({ before, after }) => (\n  <Section title=\"Time\">\n    <DateItem title=\"From\" date={after} />\n    <DateItem title=\"To\" date={before} />\n  </Section>\n)\n\nexport default DateSection\n","/* eslint-disable object-curly-newline */\n/* eslint-disable react/prop-types */\n// @ts-nocheck\nimport React from \"react\"\nimport { Flex } from \"@netdata/netdata-ui\"\nimport Section from \"./section\"\nimport Chart from \"./chart\"\nimport DateSection from \"./dateSection\"\n\nconst Metrics = ({ groupLabel, postGroupLabel, attributes, viewAfter, viewBefore }) => (\n  <Flex gap={3} column width=\"100%\" data-testid=\"k8sPopoverMetrics\">\n    <DateSection after={viewAfter} before={viewBefore} />\n    <Section title=\"Metrics\" noBorder>\n      <Flex gap={3} column data-testid=\"k8sPopoverMetrics-container\">\n        {attributes.relatedCharts.map(({ chartMetadata }, index) => (\n          <Chart\n            key={chartMetadata.id}\n            id={[groupLabel, postGroupLabel, attributes.id, chartMetadata.id].join(\"|\")}\n            attributes={attributes}\n            relatedIndex={index}\n            groupLabel={groupLabel}\n            postGroupLabel={postGroupLabel}\n          />\n        ))}\n      </Flex>\n    </Section>\n  </Flex>\n)\n\nexport default Metrics\n","/* eslint-disable no-param-reassign */\n/* eslint-disable comma-dangle */\n/* eslint-disable object-curly-newline */\n/* eslint-disable react/jsx-props-no-spreading */\n/* eslint-disable react/prop-types */\n// @ts-nocheck\nimport React, { memo } from \"react\"\nimport { Flex } from \"@netdata/netdata-ui\"\nimport Item from \"./item\"\nimport Section from \"./section\"\nimport getLabel, { labelIds } from \"./getLabel\"\n\nconst LabelsSection = ({ labelId, items, onExpand, onItemClick, ...rest }) => {\n  const { title, icon } = getLabel(labelId)\n  const sliced = items.slice(0, 3)\n  const expandable = items.length > 3\n\n  const text = expandable ? `${title} (${items.length})` : title\n  return (\n    <Section title={text} onExpand={expandable && onExpand} {...rest}>\n      {sliced.map((item) => (\n        <Item\n          key={item}\n          icon={icon}\n          title={item}\n          onClick={onItemClick && (() => onItemClick(item))}\n        />\n      ))}\n    </Section>\n  )\n}\n\nconst getLabelIds = (chartLabels) => {\n  chartLabels = { ...chartLabels }\n  const predefinedLabelIds = labelIds.reduce((acc, labelId) => {\n    if (!(labelId in chartLabels)) return acc\n\n    delete chartLabels[labelId]\n    return [...acc, labelId]\n  }, [])\n\n  return [...predefinedLabelIds, ...Object.keys(chartLabels)]\n}\n\nconst Context = ({ chartLabels, onExpand, onNodeClick }) => {\n  const ids = getLabelIds(chartLabels)\n\n  return (\n    <Flex gap={3} column width=\"100%\" data-testid=\"k8sPopoverContext\">\n      {ids.map((id, index) => (\n        <LabelsSection\n          key={id}\n          labelId={id}\n          items={chartLabels[id]}\n          onExpand={() => onExpand(id)}\n          noBorder={index === ids.length - 1}\n          onItemClick={id === \"k8s_node_name\" && onNodeClick}\n        />\n      ))}\n    </Flex>\n  )\n}\n\nexport default memo(Context)\n","/* eslint-disable object-curly-newline */\n/* eslint-disable react/prop-types */\n// @ts-nocheck\nimport React from \"react\"\nimport { Flex, Button, makeFlex } from \"@netdata/netdata-ui\"\nimport styled from \"styled-components\"\nimport Separator from \"./separator\"\nimport Header from \"./header\"\nimport Item from \"./item\"\nimport getLabel from \"./getLabel\"\n\nconst StyledButton = styled(makeFlex(Button)).attrs({\n  flavour: \"borderless\",\n  neutral: true,\n  themeType: \"dark\",\n  className: \"btn\",\n  alignItems: \"start\",\n  gap: 1,\n})`\n  &&& {\n    padding: 0;\n    margin: 0;\n    height: initial;\n    width: initial;\n\n    svg {\n      height: 18px;\n      width: 18px;\n      position: initial;\n    }\n  }\n`\n\nconst List = ({ labelId, items, onBack, onItemClick }) => {\n  const { title, icon } = getLabel(labelId)\n\n  return (\n    <Flex height=\"100%\" gap={3} data-testid=\"k8sPopoverList\" column>\n      <Header>\n        <StyledButton\n          label={`${title} (${items.length})`}\n          icon=\"chevron_left\"\n          onClick={onBack}\n          data-testid=\"k8sPopoverList-back\"\n        />\n      </Header>\n      <Separator />\n      <Flex\n        gap={3}\n        overflow={{ vertical: \"auto\", horizontal: \"hidden\" }}\n        column\n        data-testid=\"k8sPopoverList-container\"\n      >\n        {items.map((item) => (\n          <Item\n            key={item}\n            icon={icon}\n            title={item}\n            onClick={onItemClick && (() => onItemClick(item))}\n          />\n        ))}\n      </Flex>\n    </Flex>\n  )\n}\n\nexport default List\n","/* eslint-disable object-curly-newline */\n/* eslint-disable react/jsx-props-no-spreading */\n/* eslint-disable react/prop-types */\n// @ts-nocheck\nimport React, { useState } from \"react\"\nimport { Flex, DropContainer } from \"@netdata/netdata-ui\"\nimport Separator from \"./separator\"\nimport Header from \"./header\"\nimport Tabs from \"./tabs\"\nimport Metrics from \"./metrics\"\nimport Context from \"./context\"\nimport List from \"./list\"\n\nconst Container = (props) => (\n  <DropContainer\n    background={[\"transparent\", \"popover\"]}\n    padding={[2, 4]}\n    width=\"322px\"\n    height=\"422px\"\n    {...props}\n  />\n)\n\nconst TabsContainer = ({ label, value, onChange, children }) => (\n  <Flex height=\"100%\" column>\n    <Header>{label}</Header>\n    <Tabs value={value} onChange={onChange} margin={[4, 0, 0, 0]} />\n    <Separator />\n    <Flex gap={3} overflow={{ vertical: \"auto\", horizontal: \"hidden\" }} margin={[4, 0, 0, 0]}>\n      {children}\n    </Flex>\n  </Flex>\n)\n\nconst Popover = ({\n  title,\n  groupLabel,\n  postGroupLabel,\n  chartLabels,\n  attributes,\n  viewBefore,\n  viewAfter,\n  ...rest\n}) => {\n  const [view, setView] = useState(\"context\")\n\n  const isLabelView = view !== \"context\" && view !== \"metrics\"\n\n  const { onNodeClick } = attributes\n\n  return (\n    <Container data-testid=\"k8sPopover\" {...rest}>\n      {isLabelView && (\n        <List\n          labelId={view}\n          items={chartLabels[view]}\n          attributes={attributes}\n          onBack={() => setView(\"context\")}\n          onItemClick={view === \"k8s_node_name\" && onNodeClick}\n        />\n      )}\n      {!isLabelView && (\n        <TabsContainer label={title} value={view} onChange={setView}>\n          {view === \"context\" && (\n            <Context chartLabels={chartLabels} onExpand={setView} onNodeClick={onNodeClick} />\n          )}\n          {view === \"metrics\" && (\n            <Metrics\n              groupLabel={groupLabel}\n              postGroupLabel={postGroupLabel}\n              attributes={attributes}\n              viewAfter={viewAfter}\n              viewBefore={viewBefore}\n            />\n          )}\n        </TabsContainer>\n      )}\n    </Container>\n  )\n}\n\nexport default Popover\n","/* eslint-disable arrow-body-style */\n/* eslint-disable react-hooks/exhaustive-deps */\n/* eslint-disable comma-dangle */\n/* eslint-disable react/prop-types */\n// @ts-nocheck\nimport React, { useMemo } from \"react\"\nimport { Flex } from \"@netdata/netdata-ui\"\nimport { ChartMetadata } from \"domains/chart/chart-types\"\nimport { Attributes } from \"domains/chart/utils/transformDataAttributes.ts\"\nimport { ChartTimeframe } from \"domains/chart/components/chart-legend-bottom\"\nimport GroupBoxes from \"domains/chart/components/lib-charts/group-box-chart/groupBoxes\"\nimport Legend from \"domains/chart/components/lib-charts/group-box-chart/legend\"\nimport getLabel from \"./getLabel\"\nimport transform from \"./transform\"\nimport Popover from \"./popover\"\n\ninterface Props {\n  chartData: any\n  chartMetadata: ChartMetadata\n  attributes: Attributes\n  viewAfter: number\n  viewBefore: number\n  hoveredRow: number\n  hoveredX: number | null\n  showUndefined: boolean\n}\n\nconst Kubernetes = ({\n  chartData,\n  chartMetadata,\n  attributes,\n  viewAfter,\n  viewBefore,\n  hoveredRow,\n  hoveredX,\n  showUndefined,\n}: Props) => {\n  const { filteredRows } = attributes\n  const { data: groupBoxData, labels, chartLabels } = useMemo(\n    () => transform(chartData, filteredRows),\n    [filteredRows, chartData]\n  )\n\n  const {\n    id,\n    result: { data },\n    groupBy,\n    postGroupBy,\n  } = chartData\n\n  const renderBoxPopover = ({ groupIndex, index, align }) => {\n    const label = groupBoxData[groupIndex].labels[index]\n    const { title } = getLabel(postGroupBy)\n\n    return (\n      <Popover\n        align={align}\n        title={`${title}: ${label}`}\n        groupLabel={labels[groupIndex]}\n        postGroupLabel={label}\n        chartLabels={groupBoxData[groupIndex].chartLabels[index]}\n        attributes={attributes}\n        viewBefore={viewBefore}\n        viewAfter={viewAfter}\n      />\n    )\n  }\n\n  const renderGroupPopover = ({ groupIndex, align }) => {\n    const label = labels[groupIndex]\n    const { title } = getLabel(groupBy)\n\n    return (\n      <Popover\n        align={align}\n        title={`${title}: ${label}`}\n        groupLabel={label}\n        chartLabels={chartLabels[groupIndex]}\n        attributes={attributes}\n        viewBefore={viewBefore}\n        viewAfter={viewAfter}\n      />\n    )\n  }\n\n  const groupedBoxesData = useMemo(() => {\n    return groupBoxData.map((groupedBox) => {\n      return {\n        labels: groupedBox.labels,\n        data:\n          hoveredRow === -1 || hoveredRow > data.length || !(hoveredRow in data)\n            ? groupedBox.postAggregated\n            : groupedBox.indexes.map((index) => data[hoveredRow][index + 1]) || [],\n      }\n    })\n  }, [data, groupBoxData, hoveredRow])\n\n  return (\n    <Flex column width=\"100%\" height=\"100%\" gap={4} padding={[4, 2]}>\n      <GroupBoxes\n        data={groupedBoxesData}\n        labels={labels}\n        renderBoxPopover={renderBoxPopover}\n        renderGroupPopover={renderGroupPopover}\n      />\n      <Flex data-testid=\"legend-container\" justifyContent=\"between\">\n        <Legend>{id}</Legend>\n        <ChartTimeframe\n          chartMetadata={chartMetadata}\n          showUndefined={showUndefined}\n          hoveredX={hoveredX}\n          viewBefore={viewBefore}\n          chartData={chartData}\n        />\n      </Flex>\n    </Flex>\n  )\n}\n\nexport default Kubernetes\n","/* eslint-disable arrow-body-style */\n/* eslint-disable object-curly-newline */\n/* eslint-disable react-hooks/exhaustive-deps */\n/* eslint-disable comma-dangle */\n/* eslint-disable react/prop-types */\n// @ts-nocheck\n\nexport default (chartData, filteredRows) => {\n  const { keys, labels: labelValues, groupBy, postGroupBy, aggrGroups, postAggregated } = chartData\n  const groupValues = keys[groupBy]\n  const postGroupValues = keys[postGroupBy]\n  const indexes = filteredRows || [...Array(groupValues.length)].map((v, index) => index)\n\n  const postGroupData = indexes.reduce((acc: any, index: number) => {\n    const groupValue = groupValues[index]\n    if (!(groupValue in acc)) {\n      acc[groupValue] = {\n        labels: [],\n        indexes: [],\n        chartLabels: [],\n        postAggregated: [],\n      }\n    }\n    const boxes = acc[groupValue]\n    boxes.indexes.push(index)\n    boxes.labels.push(postGroupValues[index])\n    boxes.postAggregated.push(postAggregated[index])\n\n    const chartLabels = aggrGroups.reduce((labelsAcc, label) => {\n      return labelValues[label][index]\n        ? { ...labelsAcc, [label]: labelValues[label][index] }\n        : labelsAcc\n    }, {})\n    boxes.chartLabels.push(chartLabels)\n    return acc\n  }, {})\n\n  const labels = Object.keys(postGroupData).sort(\n    (a, b) => postGroupData[b].indexes.length - postGroupData[a].indexes.length\n  )\n\n  const groupData = labels.map((label) => postGroupData[label])\n\n  const groupChartLabels = groupData.map((boxes) => {\n    return aggrGroups.reduce((acc, label) => {\n      const groupLabels = new Set(\n        boxes.chartLabels.reduce((accChartLabels, chartLabels) => {\n          return chartLabels[label] ? [...accChartLabels, ...chartLabels[label]] : accChartLabels\n        }, [])\n      )\n      return groupLabels.size === 0 ? acc : { ...acc, [label]: Array.from(groupLabels) }\n    }, {})\n  })\n\n  return { labels, data: groupData, chartLabels: groupChartLabels }\n}\n","import React, { useCallback } from \"react\"\nimport classNames from \"classnames\"\n\nimport { useDispatch, useSelector } from \"store/redux-separate-context\"\nimport { setGlobalChartUnderlayAction, setGlobalPanAndZoomAction } from \"domains/global/actions\"\nimport { selectSyncPanAndZoom } from \"domains/global/selectors\"\nimport { setChartPanAndZoomAction } from \"domains/chart/actions\"\nimport { useShowValueOutside } from \"hooks/use-show-value-outside\"\n\nimport { Attributes } from \"../utils/transformDataAttributes\"\nimport {\n  ChartData, ChartMetadata, DygraphData, EasyPieChartData, D3pieChartData,\n} from \"../chart-types\"\nimport { chartLibrariesSettings, ChartLibraryName } from \"../utils/chartLibrariesSettings\"\n\nimport { DygraphChart } from \"./lib-charts/dygraph-chart\"\nimport { EasyPieChart } from \"./lib-charts/easy-pie-chart\"\nimport { GaugeChart } from \"./lib-charts/gauge-chart\"\nimport { SparklineChart } from \"./lib-charts/sparkline-chart\"\nimport { D3pieChart } from \"./lib-charts/d3pie-chart\"\nimport { PeityChart } from \"./lib-charts/peity-chart\"\nimport { GoogleChart } from \"./lib-charts/google-chart\"\nimport { TextOnly } from \"./lib-charts/text-only\"\nimport { KubernetesGroupBoxes } from \"./lib-charts/group-box-chart\"\n\ninterface Props {\n  attributes: Attributes\n  chartContainerElement: HTMLElement\n  chartData: ChartData\n  chartMetadata: ChartMetadata\n  chartLibrary: ChartLibraryName\n  colors: {\n    [key: string]: string\n  }\n  chartUuid: string\n  chartHeight: number\n  chartWidth: number\n  dimensionsVisibility: boolean[]\n  hasEmptyData: boolean\n  isRemotelyControlled: boolean\n  legendFormatValue: ((v: number | string | null) => number | string)\n  orderedColors: string[]\n  hoveredX: number | null\n  onUpdateChartPanAndZoom: (arg: { after: number, before: number, masterID: string }) => void\n  immediatelyDispatchPanAndZoom: () => void\n\n  hoveredRow: number\n  setHoveredX: (hoveredX: number | null, noMaster?: boolean) => void\n  setMinMax: (minMax: [number, number]) => void\n  showLatestOnBlur: boolean\n  unitsCurrent: string\n  viewAfterForCurrentData: number,\n  viewBeforeForCurrentData: number,\n}\n\nexport const AbstractChart = ({\n  attributes,\n  chartContainerElement,\n  chartData,\n  chartMetadata,\n  chartLibrary,\n  colors,\n  chartUuid,\n  chartHeight,\n  chartWidth,\n  dimensionsVisibility,\n  hasEmptyData,\n  isRemotelyControlled,\n  legendFormatValue,\n  orderedColors,\n  hoveredRow,\n  hoveredX,\n  onUpdateChartPanAndZoom,\n  immediatelyDispatchPanAndZoom,\n  setHoveredX,\n  setMinMax,\n  showLatestOnBlur,\n  unitsCurrent,\n  viewAfterForCurrentData,\n  viewBeforeForCurrentData,\n}: Props) => {\n  const dispatch = useDispatch()\n\n  const isSyncPanAndZoom = useSelector(selectSyncPanAndZoom)\n  const setGlobalChartUnderlay = useCallback(({ after, before, masterID }) => {\n    dispatch(setGlobalChartUnderlayAction({ after, before, masterID }))\n\n    // freeze charts\n    // don't send masterID, so no padding is applied\n    if (isSyncPanAndZoom) {\n      dispatch(setGlobalPanAndZoomAction({\n        after: viewAfterForCurrentData,\n        before: viewBeforeForCurrentData,\n      }))\n    } else {\n      dispatch(setChartPanAndZoomAction({\n        after: viewAfterForCurrentData,\n        before: viewBeforeForCurrentData,\n        id: chartUuid,\n      }))\n    }\n  }, [chartUuid, dispatch, isSyncPanAndZoom, viewAfterForCurrentData, viewBeforeForCurrentData])\n\n  const chartSettings = chartLibrariesSettings[chartLibrary]\n  const { hasLegend } = chartSettings\n  const chartElementClassName = hasLegend(attributes)\n    ? classNames(\n      `netdata-chart-with-legend-${attributes.legendPosition || \"right\"}`,\n      `netdata-${chartLibrary}-chart-with-legend-right`,\n    )\n    : classNames(\n      \"netdata-chart\",\n      `netdata-${chartLibrary}-chart`,\n    )\n  const chartElementId = `${chartLibrary}-${chartUuid}-chart`\n  const showUndefined = hoveredRow === -1 && !showLatestOnBlur\n\n  useShowValueOutside({\n    attributes, chartData, chartSettings, hoveredRow, legendFormatValue, showUndefined,\n  })\n\n  if (chartLibrary === \"easypiechart\") {\n    return (\n      <EasyPieChart\n        attributes={attributes}\n        chartData={chartData as EasyPieChartData}\n        chartMetadata={chartMetadata}\n        chartElementClassName={chartElementClassName}\n        chartElementId={chartElementId}\n        chartLibrary={chartLibrary}\n        chartWidth={chartWidth}\n        colors={colors}\n        chartUuid={chartUuid}\n        dimensionsVisibility={dimensionsVisibility}\n        isRemotelyControlled={isRemotelyControlled}\n        // easyPieChart doesn't support resizing, so lets just create new one when\n        // container size changes\n        key={chartWidth}\n        legendFormatValue={legendFormatValue}\n        orderedColors={orderedColors}\n        hoveredRow={hoveredRow}\n        onUpdateChartPanAndZoom={onUpdateChartPanAndZoom}\n        setGlobalChartUnderlay={setGlobalChartUnderlay}\n        setMinMax={setMinMax}\n        showUndefined={showUndefined}\n        unitsCurrent={unitsCurrent}\n        viewAfter={viewAfterForCurrentData}\n        viewBefore={viewBeforeForCurrentData}\n      />\n    )\n  }\n\n  if (chartLibrary === \"gauge\") {\n    return (\n      <GaugeChart\n        attributes={attributes}\n        chartData={chartData as EasyPieChartData}\n        chartMetadata={chartMetadata}\n        chartElementClassName={chartElementClassName}\n        chartElementId={chartElementId}\n        chartLibrary={chartLibrary}\n        chartHeight={chartHeight}\n        chartWidth={chartWidth}\n        colors={colors}\n        chartUuid={chartUuid}\n        dimensionsVisibility={dimensionsVisibility}\n        isRemotelyControlled={isRemotelyControlled}\n        legendFormatValue={legendFormatValue}\n        orderedColors={orderedColors}\n        hoveredRow={hoveredRow}\n        hoveredX={hoveredX}\n        onUpdateChartPanAndZoom={onUpdateChartPanAndZoom}\n        setGlobalChartUnderlay={setGlobalChartUnderlay}\n        setHoveredX={setHoveredX}\n        setMinMax={setMinMax}\n        showUndefined={showUndefined}\n        unitsCurrent={unitsCurrent}\n        viewAfter={viewAfterForCurrentData}\n        viewBefore={viewBeforeForCurrentData}\n      />\n    )\n  }\n\n  if (chartLibrary === \"sparkline\") {\n    return (\n      <SparklineChart\n        attributes={attributes}\n        chartContainerElement={chartContainerElement}\n        chartData={chartData as EasyPieChartData}\n        chartMetadata={chartMetadata}\n        chartElementClassName={chartElementClassName}\n        chartElementId={chartElementId}\n        dimensionsVisibility={dimensionsVisibility}\n        isRemotelyControlled={isRemotelyControlled}\n        orderedColors={orderedColors}\n        unitsCurrent={unitsCurrent}\n        viewAfterForCurrentData={viewAfterForCurrentData}\n        viewBeforeForCurrentData={viewBeforeForCurrentData}\n      />\n    )\n  }\n\n  if (chartLibrary === \"d3pie\") {\n    return (\n      <D3pieChart\n        attributes={attributes}\n        chartContainerElement={chartContainerElement}\n        chartData={chartData as D3pieChartData}\n        chartMetadata={chartMetadata}\n        chartElementClassName={chartElementClassName}\n        chartElementId={chartElementId}\n        dimensionsVisibility={dimensionsVisibility}\n        hoveredRow={hoveredRow}\n        hoveredX={hoveredX}\n        isRemotelyControlled={isRemotelyControlled}\n        legendFormatValue={legendFormatValue}\n        orderedColors={orderedColors}\n        setMinMax={setMinMax}\n        showUndefined={showUndefined}\n        unitsCurrent={unitsCurrent}\n      />\n    )\n  }\n\n  if (chartLibrary === \"peity\") {\n    return (\n      <PeityChart\n        attributes={attributes}\n        chartContainerElement={chartContainerElement}\n        chartData={chartData as EasyPieChartData}\n        chartMetadata={chartMetadata}\n        chartElementClassName={chartElementClassName}\n        chartElementId={chartElementId}\n        orderedColors={orderedColors}\n      />\n    )\n  }\n\n  if (chartLibrary === \"google\") {\n    return (\n      <GoogleChart\n        attributes={attributes}\n        chartData={chartData as EasyPieChartData}\n        chartMetadata={chartMetadata}\n        chartElementClassName={chartElementClassName}\n        chartElementId={chartElementId}\n        orderedColors={orderedColors}\n        unitsCurrent={unitsCurrent}\n      />\n    )\n  }\n\n  if (chartLibrary === \"textonly\") {\n    return (\n      <TextOnly\n        attributes={attributes}\n        chartData={chartData as EasyPieChartData}\n        chartElementClassName={chartElementClassName}\n        chartElementId={chartElementId}\n      />\n    )\n  }\n\n  if (chartLibrary === \"groupbox\") {\n    return (\n      <KubernetesGroupBoxes\n        chartData={chartData}\n        chartMetadata={chartMetadata}\n        attributes={attributes}\n        viewAfter={viewAfterForCurrentData}\n        viewBefore={viewBeforeForCurrentData}\n        hoveredRow={hoveredRow}\n        hoveredX={hoveredX}\n        showUndefined={showUndefined}\n      />\n    )\n  }\n\n  return (\n    <DygraphChart\n      attributes={attributes}\n      chartData={chartData as DygraphData}\n      chartMetadata={chartMetadata}\n      chartElementClassName={chartElementClassName}\n      chartElementId={chartElementId}\n      chartLibrary={chartLibrary}\n      colors={colors}\n      chartUuid={chartUuid}\n      dimensionsVisibility={dimensionsVisibility}\n      hasEmptyData={hasEmptyData}\n      hasLegend={hasLegend(attributes)}\n      isRemotelyControlled={isRemotelyControlled}\n      orderedColors={orderedColors}\n      immediatelyDispatchPanAndZoom={immediatelyDispatchPanAndZoom}\n      hoveredRow={hoveredRow}\n      hoveredX={hoveredX}\n      onUpdateChartPanAndZoom={onUpdateChartPanAndZoom}\n      setGlobalChartUnderlay={setGlobalChartUnderlay}\n      setHoveredX={setHoveredX}\n      setMinMax={setMinMax}\n      unitsCurrent={unitsCurrent}\n      viewAfter={viewAfterForCurrentData}\n      viewBefore={viewBeforeForCurrentData}\n    />\n  )\n}\n","import { useEffect, useRef } from \"react\"\nimport { isEmpty } from \"ramda\"\nimport { useMount } from \"react-use\"\n\nimport { ChartData, DygraphData } from \"domains/chart/chart-types\"\nimport { Attributes } from \"domains/chart/utils/transformDataAttributes\"\nimport { ChartLibraryConfig } from \"domains/chart/utils/chartLibrariesSettings\"\n\n\ninterface UseShowValueOutsideArgument {\n  attributes: Attributes\n  chartData: ChartData\n  chartSettings: ChartLibraryConfig\n  hoveredRow: number\n  legendFormatValue: ((v: number | string | null) => number | string)\n  showUndefined: boolean\n}\n\n// example of the attribute:\n// show-value-of-iowait-at: \"system.cpu.iowait.1\"\n\nexport const useShowValueOutside = ({\n  attributes,\n  chartData,\n  chartSettings,\n  hoveredRow,\n  legendFormatValue,\n  showUndefined,\n}: UseShowValueOutsideArgument) => {\n  // a ref to store found elements, just once per lifetime of component\n  const showValueAttributesNodes = useRef<(HTMLElement | null)[]>([])\n\n  // find the nodes that will have populated values\n  useMount(() => {\n    const { showValueOf } = attributes\n    // showValueOf will be undefined if not used, but additional isEmpty check can prevent\n    // regression performance issue in the future\n    if (!showValueOf || isEmpty(showValueOf)) {\n      return\n    }\n    const dimensionNames = chartData.dimension_names\n    const dimensionIds = chartData.dimension_ids\n    dimensionNames.forEach((dimensionName, i) => {\n      const userElementId = showValueOf[`show-value-of-${dimensionName.toLowerCase()}`]\n        || showValueOf[`show-value-of-${dimensionIds[i].toLowerCase()}-at`]\n\n      // if element is not found, just add null\n      showValueAttributesNodes.current = showValueAttributesNodes.current.concat(\n        document.getElementById(userElementId),\n      )\n    })\n  })\n\n  useEffect(() => {\n    if (showValueAttributesNodes.current.length) {\n      const chartSettingCallOptions = chartSettings.options(attributes)\n      const isFlipped = chartSettingCallOptions.includes(\"flip\")\n\n      // \"objectrows\" is for d3pie, which has different data format\n      if (chartData.format === \"json\" && !chartSettingCallOptions.includes(\"objectrows\")) {\n        const { data } = (chartData as DygraphData).result\n        const valueIndex = hoveredRow === -1\n          ? (data.length - 1)\n          : (hoveredRow) // because data for easy-pie-chart are flipped\n\n        // yes, \"flipped\" value means chronological order (from oldest to newest) :)\n        const rowIndex = isFlipped ? valueIndex : (data.length - valueIndex - 1)\n        const row = data[rowIndex]\n\n        chartData.dimension_names.forEach((dimensionName, dimensionIndex) => {\n          const value = (showUndefined || !row)\n            ? \"\"\n            : legendFormatValue(row[dimensionIndex + 1])\n          const element = showValueAttributesNodes.current[dimensionIndex]\n          if (element) {\n            element.innerText = `${value}`\n          }\n        })\n      }\n    }\n  }, [attributes, chartData, chartSettings, hoveredRow, legendFormatValue, showUndefined])\n}\n","import { __, prop } from \"ramda\"\nimport React, { useEffect, useState, useCallback, useMemo, memo, useContext } from \"react\"\nimport { ThemeContext } from \"styled-components\"\nimport { useDebouncedCallback } from \"use-debounce\"\n\nimport {\n  requestCommonColorsAction,\n  setDefaultAfterAction,\n  setGlobalPanAndZoomAction,\n  setGlobalSelectionAction,\n} from \"domains/global/actions\"\nimport {\n  createSelectAssignedColors,\n  selectGlobalSelection,\n  selectSyncPanAndZoom,\n  selectSyncSelection,\n  selectUnitsScalingMethod,\n} from \"domains/global/selectors\"\nimport { useDispatch, useSelector } from \"store/redux-separate-context\"\nimport { TimeRange } from \"types/common\"\nimport { MS_IN_SECOND, isTimestamp } from \"utils/utils\"\n\nimport { setChartPanAndZoomAction } from \"domains/chart/actions\"\n\nimport { getPanAndZoomStep } from \"../utils/get-pan-and-zoom-step\"\nimport { Attributes } from \"../utils/transformDataAttributes\"\nimport { chartLibrariesSettings } from \"../utils/chartLibrariesSettings\"\nimport { useFormatters } from \"../utils/formatters\"\nimport { ChartData, ChartMetadata } from \"../chart-types\"\n\nimport { ChartLegend } from \"./chart-legend\"\nimport { LegendToolbox } from \"./legend-toolbox\"\nimport { ResizeHandler } from \"./resize-handler\"\nimport { AbstractChart } from \"./abstract-chart\"\n\ninterface GlobalPanAndZoomState {\n  after: number // timestamp in ms\n  before: number // timestamp in ms\n  masterID?: string\n  shouldForceTimeRange?: boolean\n}\n\ninterface Props {\n  attributes: Attributes\n  chartContainerElement: HTMLElement\n  chartData: ChartData\n  chartMetadata: ChartMetadata\n  chartHeight: number\n  chartUuid: string\n  chartWidth: number\n  defaultAfter: number\n  globalPanAndZoom: null | GlobalPanAndZoomState\n  hasEmptyData: boolean\n  isRemotelyControlled: boolean\n  viewRangeForCurrentData: TimeRange\n  viewRange: TimeRange\n  selectedDimensions: string[]\n  setSelectedDimensions: (newState: string[]) => void\n  showLatestOnBlur: boolean\n}\n\nexport const Chart = memo(\n  ({\n    attributes,\n    attributes: { chartLibrary },\n    chartContainerElement,\n    chartData,\n    chartMetadata,\n    chartHeight,\n    chartUuid,\n    chartWidth,\n    defaultAfter,\n    globalPanAndZoom,\n    hasEmptyData,\n    isRemotelyControlled,\n    viewRangeForCurrentData,\n    viewRange,\n    selectedDimensions,\n    setSelectedDimensions,\n    showLatestOnBlur,\n  }: Props) => {\n    const themeContext = useContext(ThemeContext)\n    const unitsScalingMethod = useSelector(selectUnitsScalingMethod)\n    const chartSettings = chartLibrariesSettings[chartLibrary]\n    const { hasLegend } = chartSettings\n    const {\n      units = chartMetadata.units,\n      unitsCommon,\n      unitsDesired = unitsScalingMethod,\n    } = attributes\n\n    // we need to have empty selectedDimensions work as {all enabled}, in case\n    // new dimensions show up (when all are enabled, the new dimensions should also auto-enable)\n    const dimensionsVisibility = useMemo(\n      () =>\n        chartData.dimension_names.map(dimensionName =>\n          selectedDimensions.length === 0 ? true : selectedDimensions.includes(dimensionName)\n        ),\n      [chartData.dimension_names, selectedDimensions]\n    )\n\n    const shouldDisplayToolbox =\n      hasLegend(attributes) && window.NETDATA.options.current.legend_toolbox\n\n    const shouldDisplayResizeHandler =\n      shouldDisplayToolbox &&\n      window.NETDATA.options.current.resize_charts && // legacy way of turning off for print mode\n      !attributes.hideResizeHandler\n\n    const dispatch = useDispatch()\n    const allDimensionNames = useMemo(() => {\n      // metadata and chartData dimensions match each other, but we need to first parse\n      // dimensions from metadata, to keep the same order (when browser parsers dimensions object,\n      // it sorts them in *some* way which is hard to reproduce). And people can get used to colors\n      // so let's keep them as they were before\n      const dimensionNamesFromMetadata = Object.values(chartMetadata.dimensions).map(x => x.name)\n      const additionalDimensionNamesFromData = chartData.dimension_names.filter(\n        x => !dimensionNamesFromMetadata.includes(x)\n      )\n      return dimensionNamesFromMetadata.concat(additionalDimensionNamesFromData)\n    }, [chartData.dimension_names, chartMetadata.dimensions])\n    useEffect(() => {\n      dispatch(\n        requestCommonColorsAction({\n          chartContext: chartMetadata.context,\n          chartUuid,\n          colorsAttribute: attributes.colors,\n          commonColorsAttribute: attributes.commonColors,\n          dimensionNames: allDimensionNames,\n        })\n      )\n    }, [\n      allDimensionNames,\n      attributes.colors,\n      attributes.commonColors,\n      chartMetadata.context,\n      chartUuid,\n      dispatch,\n    ])\n\n    const { legendFormatValue, legendFormatValueDecimalsFromMinMax, unitsCurrent } = useFormatters({\n      attributes,\n      data: chartData,\n      units,\n      unitsCommon,\n      unitsDesired,\n      uuid: chartUuid,\n    })\n\n    const [localHoveredX, setLocalHoveredX] = useState<number | null>(null)\n\n    const isSyncSelection = useSelector(selectSyncSelection)\n    const handleSetHoveredX = useCallback(\n      (newHoveredX, noMaster) => {\n        if (isSyncSelection) {\n          const action = noMaster\n            ? { chartUuid: null, hoveredX: newHoveredX }\n            : { chartUuid, hoveredX: newHoveredX }\n          dispatch(setGlobalSelectionAction(action))\n        } else {\n          setLocalHoveredX(newHoveredX)\n        }\n      },\n      [chartUuid, dispatch, isSyncSelection]\n    )\n    const globalHoveredX = useSelector(selectGlobalSelection)\n    const hoveredX = isSyncSelection ? globalHoveredX : localHoveredX\n\n    // time-frames for requested data (even when request is pending)\n    const viewAfter = isTimestamp(viewRange[0]) ? viewRange[0] : chartData.after * MS_IN_SECOND\n    const viewBefore = isTimestamp(viewRange[1]) ? viewRange[1] : chartData.before * MS_IN_SECOND\n\n    const viewAfterForCurrentData = isTimestamp(viewRangeForCurrentData[0])\n      ? viewRangeForCurrentData[0]\n      : chartData.after * MS_IN_SECOND\n    const viewBeforeForCurrentData = isTimestamp(viewRangeForCurrentData[1])\n      ? viewRangeForCurrentData[1]\n      : chartData.before * MS_IN_SECOND // when 'before' is 0 or negative\n\n    const netdataFirst = chartData.first_entry * MS_IN_SECOND\n    const netdataLast = chartData.last_entry * MS_IN_SECOND\n\n    // old dashboard persists min duration based on first chartWidth, i assume it's a bug\n    // and will update fixedMinDuration when width changes\n    const fixedMinDuration = useMemo(\n      () => Math.round((chartWidth / 30) * chartMetadata.update_every * MS_IN_SECOND),\n      [chartMetadata.update_every, chartWidth]\n    )\n\n    const isSyncPanAndZoom = useSelector(selectSyncPanAndZoom)\n\n    const setGlobalPanAndZoomDebounced = useDebouncedCallback(\n      newGlobalPanAndZoom => {\n        dispatch(setGlobalPanAndZoomAction(newGlobalPanAndZoom))\n      },\n      400 // corresponds to global_pan_sync_time in old dashboard\n    )\n\n    const immediatelyDispatchPanAndZoom = useCallback(() => {\n      setGlobalPanAndZoomDebounced.flush()\n    }, [setGlobalPanAndZoomDebounced])\n\n    /**\n     * pan-and-zoom handler (both for toolbox and mouse events)\n     */\n    const handleUpdateChartPanAndZoom = useCallback(\n      ({\n        after,\n        before,\n        callback,\n        shouldFlushImmediately = false,\n        shouldForceTimeRange,\n        shouldNotExceedAvailableRange,\n      }) => {\n        if (before < after) {\n          return\n        }\n        let minDuration = fixedMinDuration\n\n        const currentDuraton = Math.round(viewBefore - viewAfter)\n\n        let afterForced = Math.round(after)\n        let beforeForced = Math.round(before)\n        const viewUpdateEvery = chartData.view_update_every * MS_IN_SECOND\n\n        if (shouldNotExceedAvailableRange) {\n          const first = netdataFirst + viewUpdateEvery\n          const last = netdataLast + viewUpdateEvery\n          // first check \"before\"\n          if (beforeForced > last) {\n            afterForced -= before - last\n            beforeForced = last\n          }\n\n          if (afterForced < first) {\n            afterForced = first\n          }\n        }\n\n        // align them to update_every\n        // stretching them further away\n        afterForced -= afterForced % viewUpdateEvery\n        beforeForced += viewUpdateEvery - (beforeForced % viewUpdateEvery)\n\n        // the final wanted duration\n        let wantedDuration = beforeForced - afterForced\n\n        // to allow panning, accept just a point below our minimum\n        if (currentDuraton - viewUpdateEvery < minDuration) {\n          minDuration = currentDuraton - viewUpdateEvery\n        }\n\n        // we do it, but we adjust to minimum size and return false\n        // when the wanted size is below the current and the minimum\n        // and we zoom\n        let doCallback = true\n        if (wantedDuration < currentDuraton && wantedDuration < minDuration) {\n          minDuration = fixedMinDuration\n\n          const dt = (minDuration - wantedDuration) / 2\n          beforeForced += dt\n          afterForced -= dt\n          wantedDuration = beforeForced - afterForced\n          doCallback = false\n        }\n\n        const tolerance = viewUpdateEvery * 2\n        const movement = Math.abs(beforeForced - viewBefore)\n\n        if (\n          Math.abs(currentDuraton - wantedDuration) <= tolerance &&\n          movement <= tolerance &&\n          doCallback\n        ) {\n          return\n        }\n\n        if (isSyncPanAndZoom) {\n          setGlobalPanAndZoomDebounced.callback({\n            after: afterForced,\n            before: beforeForced,\n            masterID: chartUuid,\n            shouldForceTimeRange,\n          })\n          if (shouldFlushImmediately) {\n            setGlobalPanAndZoomDebounced.flush()\n          }\n        } else {\n          dispatch(\n            setChartPanAndZoomAction({\n              after: afterForced,\n              before: beforeForced,\n              id: chartUuid,\n              shouldForceTimeRange,\n            })\n          )\n        }\n\n        if (doCallback && typeof callback === \"function\") {\n          callback(afterForced, beforeForced)\n        }\n      },\n      [\n        chartData.view_update_every,\n        chartUuid,\n        dispatch,\n        fixedMinDuration,\n        isSyncPanAndZoom,\n        netdataFirst,\n        netdataLast,\n        setGlobalPanAndZoomDebounced,\n        viewAfter,\n        viewBefore,\n      ]\n    )\n\n    /**\n     * toolbox handlers\n     */\n    const handleToolBoxPanAndZoom = useCallback(\n      (after: number, before: number) => {\n        const newAfter = Math.max(after, netdataFirst)\n        const newBefore = Math.min(before, netdataLast)\n        handleUpdateChartPanAndZoom({\n          after: newAfter,\n          before: newBefore,\n          shouldForceTimeRange: true,\n          shouldFlushImmediately: true,\n        })\n      },\n      [handleUpdateChartPanAndZoom, netdataFirst, netdataLast]\n    )\n\n    const handleToolboxLeftClick = useCallback(\n      (event: React.MouseEvent) => {\n        const step = (viewBefore - viewAfter) * getPanAndZoomStep(event)\n        const newBefore = viewBefore - step\n        const newAfter = viewAfter - step\n        if (newAfter >= netdataFirst) {\n          handleToolBoxPanAndZoom(newAfter, newBefore)\n        }\n      },\n      [handleToolBoxPanAndZoom, netdataFirst, viewAfter, viewBefore]\n    )\n\n    const handleToolboxRightClick = useCallback(\n      (event: React.MouseEvent) => {\n        const timeWindow = viewBefore - viewAfter\n        const step = timeWindow * getPanAndZoomStep(event)\n        const newBefore = Math.min(viewBefore + step, netdataLast)\n        const newAfter = newBefore - timeWindow\n        handleToolBoxPanAndZoom(newAfter, newBefore)\n      },\n      [handleToolBoxPanAndZoom, netdataLast, viewAfter, viewBefore]\n    )\n\n    const handleToolboxZoomInClick = useCallback(\n      (event: React.MouseEvent) => {\n        const panAndZoomStep = getPanAndZoomStep(event) * 0.8\n        if (!globalPanAndZoom) {\n          dispatch(\n            setDefaultAfterAction({\n              after: Math.round(defaultAfter / (panAndZoomStep + 1)),\n            })\n          )\n          return\n        }\n        // if visible time range is much bigger than available time range in history, first zoom-in\n        // should just fit to available range\n        if (viewBefore - viewAfter > (netdataLast - netdataFirst) * 1.2) {\n          handleToolBoxPanAndZoom(netdataFirst, netdataLast)\n          return\n        }\n        const dt = ((viewBefore - viewAfter) * panAndZoomStep) / 2\n        const newAfter = viewAfter + dt\n        const newBefore = viewBefore - dt\n        handleToolBoxPanAndZoom(newAfter, newBefore)\n      },\n      [\n        defaultAfter,\n        dispatch,\n        globalPanAndZoom,\n        handleToolBoxPanAndZoom,\n        netdataFirst,\n        netdataLast,\n        viewAfter,\n        viewBefore,\n      ]\n    )\n\n    const handleToolboxZoomOutClick = useCallback(\n      (event: React.MouseEvent) => {\n        const panAndZoomStep = getPanAndZoomStep(event) * 0.8\n        if (!globalPanAndZoom) {\n          dispatch(\n            setDefaultAfterAction({\n              after: Math.round(defaultAfter * (panAndZoomStep + 1)),\n            })\n          )\n          return\n        }\n        const dt =\n          ((viewBefore - viewAfter) / (1.0 - panAndZoomStep * 0.8) - (viewBefore - viewAfter)) / 2\n        const newAfter = viewAfter - dt\n        const newBefore = viewBefore + dt\n        handleToolBoxPanAndZoom(newAfter, newBefore)\n      },\n      [defaultAfter, dispatch, globalPanAndZoom, handleToolBoxPanAndZoom, viewAfter, viewBefore]\n    )\n\n    /**\n     * assign colors\n     */\n    const selectAssignedColors = useMemo(\n      () =>\n        createSelectAssignedColors({\n          chartContext: chartMetadata.context,\n          chartUuid,\n          colorsAttribute: attributes.colors,\n          commonColorsAttribute: attributes.commonColors,\n        }),\n      [attributes.colors, attributes.commonColors, chartMetadata, chartUuid]\n    )\n    const colors = useSelector(selectAssignedColors)\n    const orderedColors = useMemo(\n      () => chartData.dimension_names.map(prop(__, colors)),\n      [chartData, colors]\n    )\n\n    if (!colors) {\n      return <span /> // wait for createSelectAssignedColors reducer result to come back\n    }\n\n    const isTimeVisible = hoveredX && hoveredX >= viewAfter && hoveredX <= viewBefore\n    const viewUpdateEvery = chartData.view_update_every * MS_IN_SECOND\n    const hoveredRow = isTimeVisible\n      ? Math.floor(((hoveredX as number) - chartData.after * MS_IN_SECOND) / viewUpdateEvery)\n      : -1\n\n    const isLegendOnBottom = attributes.legendPosition === \"bottom\"\n\n    const legendToolbox = (\n      <LegendToolbox\n        onToolboxLeftClick={handleToolboxLeftClick}\n        onToolboxRightClick={handleToolboxRightClick}\n        onToolboxZoomInClick={handleToolboxZoomInClick}\n        onToolboxZoomOutClick={handleToolboxZoomOutClick}\n      />\n    )\n\n    const resizeHandler = shouldDisplayResizeHandler && (\n      <ResizeHandler\n        chartContainerElement={chartContainerElement}\n        chartUuid={chartUuid}\n        heightId={attributes.heightId}\n        isLegendOnBottom={isLegendOnBottom}\n      />\n    )\n\n    return (\n      <>\n        <AbstractChart\n          // remount on theme change\n          key={themeContext.name}\n          attributes={attributes}\n          chartContainerElement={chartContainerElement}\n          chartData={chartData}\n          chartMetadata={chartMetadata}\n          chartLibrary={chartLibrary}\n          colors={colors}\n          chartUuid={chartUuid}\n          chartHeight={chartHeight}\n          chartWidth={chartWidth}\n          dimensionsVisibility={dimensionsVisibility}\n          hasEmptyData={hasEmptyData}\n          onUpdateChartPanAndZoom={handleUpdateChartPanAndZoom}\n          immediatelyDispatchPanAndZoom={immediatelyDispatchPanAndZoom}\n          isRemotelyControlled={isRemotelyControlled}\n          legendFormatValue={legendFormatValue}\n          orderedColors={orderedColors}\n          hoveredX={hoveredX}\n          hoveredRow={hoveredRow}\n          setHoveredX={handleSetHoveredX}\n          setMinMax={([min, max]) => legendFormatValueDecimalsFromMinMax(min, max)}\n          showLatestOnBlur={showLatestOnBlur}\n          unitsCurrent={unitsCurrent}\n          viewAfterForCurrentData={viewAfterForCurrentData}\n          viewBeforeForCurrentData={viewBeforeForCurrentData}\n        />\n        {hasLegend(attributes) && (\n          <ChartLegend\n            attributes={attributes}\n            chartUuid={chartUuid}\n            chartMetadata={chartMetadata}\n            chartLibrary={chartLibrary}\n            colors={colors}\n            hoveredX={hoveredX}\n            hoveredRow={hoveredRow}\n            legendFormatValue={legendFormatValue}\n            selectedDimensions={selectedDimensions}\n            setSelectedDimensions={setSelectedDimensions}\n            showLatestOnBlur={showLatestOnBlur}\n            unitsCurrent={unitsCurrent}\n            viewBefore={viewBefore}\n            legendToolbox={legendToolbox}\n            resizeHandler={resizeHandler}\n          />\n        )}\n        {shouldDisplayToolbox && !isLegendOnBottom && legendToolbox}\n        {!isLegendOnBottom && resizeHandler}\n      </>\n    )\n  }\n)\n","import styled from \"styled-components\"\nimport { getColor, Icon } from \"@netdata/netdata-ui\"\n\nexport const DropdownItem = styled.div`\n  display: flex;\n  flex-direction: start;\n  align-items: center;\n  color: ${getColor([\"neutral\", \"limedSpruce\"])};\n  white-space: nowrap;\n  & > svg use {\n    fill: ${getColor([\"neutral\", \"limedSpruce\"])};\n  }\n`\n\nexport const DropdownItemLabel = styled.span`\n  margin-left: 12px;\n`\n\nexport const DotsBtn = styled(Icon)`\n  width: 6px;\n  height: 10px;\n  cursor: pointer;\n  & use {\n    fill: ${getColor([\"neutral\", \"limedSpruce\"])};\n    & :hover {\n      fill: ${getColor([\"neutral\", \"regentgrey\"])};\n    }\n  }\n`\n","import React, { useState, ReactNode } from \"react\"\n\nimport { Attributes } from \"domains/chart/utils/transformDataAttributes\"\nimport { ChartMetadata } from \"domains/chart/chart-types\"\n\nimport { List, SimpleListItem } from \"@rmwc/list\"\nimport { MenuSurface, MenuSurfaceAnchor } from \"@rmwc/menu\"\n\nimport * as S from \"./styled\"\n\ninterface DropdownMenuCallbackProps {\n  attributes: Attributes,\n  chartMetadata: ChartMetadata,\n  chartID: string,\n}\n\nexport type DropdownMenu = {\n  icon: ReactNode,\n  label: string,\n  onClick: (dropdownMenuCallbackProps: DropdownMenuCallbackProps) => void,\n}[]\n\ninterface Props {\n  attributes: Attributes\n  chartID: string\n  chartMetadata: ChartMetadata\n  dropdownMenu: DropdownMenu\n}\n\nexport const ChartDropdown = ({\n  attributes,\n  chartID,\n  chartMetadata,\n  dropdownMenu,\n}: Props) => {\n  const [isOpen, setIsOpen] = useState(false)\n\n  const handleClose = () => {\n    setIsOpen(false)\n  }\n\n  return (\n    <>\n      <S.DotsBtn\n        name=\"dots_2x3\"\n        onClick={() => {\n          setIsOpen(true)\n        }}\n      />\n      <MenuSurfaceAnchor>\n        <MenuSurface open={isOpen} onClose={handleClose}>\n          <List>\n            {dropdownMenu.map(({ icon, label, onClick }) => (\n              <SimpleListItem\n                key={label}\n                text={(\n                  <S.DropdownItem>\n                    {icon}\n                    <S.DropdownItemLabel>\n                      {label}\n                    </S.DropdownItemLabel>\n                  </S.DropdownItem>\n                )}\n                onClick={() => {\n                  onClick({ attributes, chartMetadata, chartID })\n                  handleClose()\n                }}\n              />\n            ))}\n          </List>\n        </MenuSurface>\n      </MenuSurfaceAnchor>\n    </>\n  )\n}\n","import { prop } from \"ramda\"\nimport styled, { keyframes } from \"styled-components\"\n\nimport { getColor } from \"@netdata/netdata-ui\"\n\nconst circleAnimation = keyframes`\n  0% {\n   opacity: .1;\n  }\n  50% {\n    opacity: .5;\n  }\n  100% {\n   opacity: .1;\n  }\n`\n\n\nexport const SpinnerContainer = styled.div<{ top: number, right: number }>`\n  position: absolute;\n  top: ${prop(\"top\")}px;\n  right: ${prop(\"right\")}px;\n  display: flex;\n`\n\nexport const Circle = styled.div<{ size: number }>`\n  width: ${prop(\"size\")}px;\n  height: ${prop(\"size\")}px;\n  background: ${getColor(\"border\")};\n  border-radius: 50%;\n  animation: 1s linear infinite both ${circleAnimation};\n`\n\nexport const Circle2 = styled(Circle)<{ spaceBetween: number }>`\n  animation-delay: .3s; \n  margin-left: ${prop(\"spaceBetween\")}px;\n`\n\nexport const Circle3 = styled(Circle)<{ spaceBetween: number }>`\n  animation-delay: .6s; \n  margin-left: ${prop(\"spaceBetween\")}px;\n`\n","import React from \"react\"\n\nimport * as S from \"./styled\"\n\ninterface Props {\n  chartLibrary: string\n}\nexport const ChartSpinner = ({\n  chartLibrary,\n}: Props) => {\n  const top = chartLibrary === \"dygraph\" ? 33 : 0\n  const right = chartLibrary === \"dygraph\" ? 8 : 0\n  const size = chartLibrary === \"dygraph\" ? 10 : 7\n  const spaceBetween = chartLibrary === \"dygraph\" ? 4 : 2\n  return (\n    <S.SpinnerContainer top={top} right={right}>\n      <S.Circle size={size} />\n      <S.Circle2 size={size} spaceBetween={spaceBetween} />\n      <S.Circle3 size={size} spaceBetween={spaceBetween} />\n    </S.SpinnerContainer>\n  )\n}\n","import styled from \"styled-components\"\n\nimport { chartDropdownZIndex } from \"styles/z-index\"\n\nexport const ChartDropdownContainer = styled.div`\n  position: absolute;\n  top: 0;\n  left: 40px;\n  width: 20px;\n  height: 20px;\n  z-index: ${chartDropdownZIndex};\n`\n","export const notificationsZIndex = \"z-index: 50;\"\n\nexport const chartDropdownZIndex = 10\n\nexport const spacesBarZIndex = 8\n\nexport const spacePanelZIndex = 6\n\nexport const appHeaderZIndex = 5\n\n// the same as in cloud\nexport const portalSidebarZIndex = \"z-index: 35;\"\nexport const customDropdownZIndex = \"z-index: 45;\"\nexport const dialogsZIndex = 60\n","import { cond, always, T } from \"ramda\"\nimport axios from \"axios\"\nimport React, { useEffect, useState, useMemo, useLayoutEffect } from \"react\"\nimport { useThrottle, useUpdateEffect, useUnmount, useDebounce } from \"react-use\"\n\nimport { AppStateT } from \"store/app-state\"\nimport { useSelector, useDispatch } from \"store/redux-separate-context\"\n\nimport {\n  selectGlobalPanAndZoom,\n  selectGlobalSelection,\n  selectShouldEliminateZeroDimensions,\n  selectPanAndZoomDataPadding,\n  selectSnapshot,\n  selectSpacePanelTransitionEndIsActive,\n  selectDefaultAfter,\n} from \"domains/global/selectors\"\nimport { serverDefault } from \"utils/server-detection\"\nimport { CHART_UNMOUNTED } from \"utils/netdata-sdk\"\nimport { getCorrectedPoints } from \"utils/fill-missing-data\"\n\nimport { fallbackUpdateTimeInterval, panAndZoomDelay } from \"../../constants\"\nimport { getChartURLOptions } from \"../../utils/get-chart-url-options\"\nimport { chartLibrariesSettings } from \"../../utils/chartLibrariesSettings\"\nimport { Attributes } from \"../../utils/transformDataAttributes\"\nimport { getChartPixelsPerPoint } from \"../../utils/get-chart-pixels-per-point\"\nimport { useFetchNewDataClock } from \"../../hooks/use-fetch-new-data-clock\"\n\nimport { fetchChartAction, fetchDataAction } from \"../../actions\"\nimport {\n  selectChartData,\n  selectChartFetchDataParams,\n  makeSelectChartMetadataRequest,\n  selectChartPanAndZoom,\n  selectChartIsFetchingData,\n  selectChartViewRange,\n} from \"../../selectors\"\nimport {\n  ChartData,\n  ChartMetadata,\n  D3pieChartData,\n  DygraphData,\n  EasyPieChartData,\n} from \"../../chart-types\"\n\nimport { Loader } from \"../loader\"\nimport { Chart } from \"../chart\"\nimport { ChartDropdown, DropdownMenu } from \"../chart-dropdown\"\nimport { ChartSpinner } from \"../chart-spinner/chart-spinner\"\n\nimport * as S from \"./styled\"\nimport \"./chart-with-loader.css\"\n\nexport type RenderCustomElementForDygraph = (selectedChartConfiguration: {\n  attributes: Attributes\n  onAttributesChange: any\n  chartMetadata: ChartMetadata\n  chartID: string\n  chartData: ChartData | null\n}) => JSX.Element\n\nconst dimensionsAggrMethodMap = {\n  \"sum-of-abs\": \"sum\",\n}\n\nconst emptyArray = [] as any\n\nexport type Props = {\n  attributes: Attributes\n  chartUuid: string\n  uuid?: string\n  dropdownMenu?: DropdownMenu\n  externalChartMetadata?: ChartMetadata\n  portalNode: HTMLElement\n  renderCustomElementForDygraph?: RenderCustomElementForDygraph\n  onAttributesChange?: any\n}\n\nexport const ChartWithLoader = ({\n  attributes,\n  chartUuid,\n  uuid,\n  dropdownMenu,\n  externalChartMetadata,\n  portalNode,\n  renderCustomElementForDygraph,\n  onAttributesChange,\n}: Props) => {\n  /**\n   * fetch chart details\n   */\n  const { host = serverDefault, id, nodeIDs } = attributes\n  const dispatch = useDispatch()\n  const selectChartMetadataRequest = useMemo(makeSelectChartMetadataRequest, [])\n  const { chartMetadata, isFetchingDetails } = useSelector((state: AppStateT) =>\n    selectChartMetadataRequest(state, { chartId: id, id: chartUuid })\n  )\n  const actualChartMetadata = externalChartMetadata || chartMetadata\n  useEffect(() => {\n    if (!chartMetadata && !isFetchingDetails && !externalChartMetadata) {\n      dispatch(\n        fetchChartAction.request({\n          chart: id,\n          id: chartUuid,\n          host,\n          nodeIDs,\n        })\n      )\n    }\n  }, [\n    id,\n    chartUuid,\n    dispatch,\n    host,\n    isFetchingDetails,\n    chartMetadata,\n    externalChartMetadata,\n    nodeIDs,\n    uuid,\n  ])\n\n  // todo local state option\n  const globalPanAndZoom = useSelector(selectGlobalPanAndZoom)\n  const chartPanAndZoom = useSelector((state: AppStateT) =>\n    selectChartPanAndZoom(state, { id: chartUuid })\n  )\n  const panAndZoom = chartPanAndZoom || globalPanAndZoom\n\n  const isPanAndZoomMaster =\n    (!!globalPanAndZoom && globalPanAndZoom.masterID === chartUuid) || Boolean(chartPanAndZoom)\n  const shouldForceTimeRange = panAndZoom?.shouldForceTimeRange || false\n\n  // (isRemotelyControlled === false) only during globalPanAndZoom, when chart is panAndZoomMaster\n  // and when no toolbox is used at that time\n  const isRemotelyControlled = !panAndZoom || !isPanAndZoomMaster || shouldForceTimeRange // used when zooming/shifting in toolbox\n\n  const fetchDataParams = useSelector((state: AppStateT) =>\n    selectChartFetchDataParams(state, { id: chartUuid })\n  )\n  const viewRange = useSelector((state: AppStateT) =>\n    selectChartViewRange(state, { id: chartUuid })\n  )\n  const chartData = useSelector((state: AppStateT) => selectChartData(state, { id: chartUuid }))\n  const isFetchingData = useSelector((state: AppStateT) =>\n    selectChartIsFetchingData(state, { id: chartUuid })\n  )\n\n  const hoveredX = useSelector(selectGlobalSelection)\n\n  // periodical update of newest data\n  // default to 2000ms. When chartMetadata has been fetched, use chartMetadata.update_every\n  // if chartData has been fetched, use chartData.view_update_every instead\n  // todo add support to \"data-update-every\" attribute\n  const viewUpdateEvery = cond([\n    [always(!!chartData), () => (chartData as ChartData).view_update_every * 1000],\n    [\n      always(!!actualChartMetadata),\n      () => (actualChartMetadata as ChartMetadata).update_every * 1000,\n    ],\n    [T, always(fallbackUpdateTimeInterval)],\n  ])()\n  const [shouldFetch, setShouldFetch] = useFetchNewDataClock({\n    areCriteriaMet: !panAndZoom && !hoveredX,\n    preferedIntervalTime: viewUpdateEvery,\n  })\n\n  const panAndZoomThrottled = useThrottle(panAndZoom, panAndZoomDelay)\n  useEffect(() => {\n    setShouldFetch(true)\n  }, [panAndZoomThrottled, setShouldFetch])\n\n  const defaultAfter = useSelector(selectDefaultAfter)\n  // when after/before changes, don't wait for next interval, just fetch immediately\n  useUpdateEffect(() => {\n    setShouldFetch(true)\n  }, [\n    attributes.after,\n    attributes.before,\n    defaultAfter,\n    attributes.dimensions,\n    attributes.aggrMethod,\n    attributes.groupBy,\n  ])\n\n  const { before: initialBefore = window.NETDATA.chartDefaults.before } = attributes\n\n  // attributes.after should be now used only for old custom dashboard\n  // and in the future for setting timeframe per-chart\n  const liveModeAfter = attributes.after || defaultAfter\n\n  const chartSettings = chartLibrariesSettings[attributes.chartLibrary]\n  const { hasLegend } = chartSettings\n\n  // todo optimize by using resizeObserver (optionally)\n  const boundingClientRect = portalNode.getBoundingClientRect()\n\n  // from old dashboard\n  const chartWidth = boundingClientRect.width - (hasLegend(attributes) ? 140 : 0)\n  const chartHeight = boundingClientRect.height\n\n  const isShowingSnapshot = Boolean(useSelector(selectSnapshot))\n  const shouldEliminateZeroDimensions =\n    useSelector(selectShouldEliminateZeroDimensions) || isShowingSnapshot\n  const shouldUsePanAndZoomPadding = useSelector(selectPanAndZoomDataPadding)\n\n  const { CancelToken } = axios\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  const cancelTokenSource = useMemo(() => CancelToken.source(), [])\n  useUnmount(() => {\n    cancelTokenSource.cancel(CHART_UNMOUNTED)\n  })\n\n  /**\n   * spinner state\n   * show spinner when it's fetching for more than 2 seconds\n   * hide spinner immediately when it's not fetching\n   */\n  const [shouldShowSpinnerDebounced, setShouldShowSpinnerDebounced] = useState(false)\n  const shouldShowSpinner = shouldShowSpinnerDebounced && isFetchingData\n  useDebounce(\n    () => {\n      if (isFetchingData) {\n        setShouldShowSpinnerDebounced(true)\n      }\n    },\n    2000,\n    [isFetchingData]\n  )\n  useEffect(() => {\n    if (!isFetchingData && shouldShowSpinnerDebounced) {\n      setShouldShowSpinnerDebounced(false)\n    }\n  }, [isFetchingData, shouldShowSpinnerDebounced])\n\n  /**\n   * fetch data\n   */\n  useEffect(() => {\n    if (shouldFetch && actualChartMetadata && !isFetchingData) {\n      // todo can be overridden by main.js\n      const forceDataPoints = window.NETDATA.options.force_data_points\n\n      let after\n      let before\n      let newViewRange\n      let pointsMultiplier = 1\n\n      if (panAndZoom) {\n        if (isPanAndZoomMaster) {\n          after = Math.round(panAndZoom.after / 1000)\n          before = Math.round(panAndZoom.before / 1000)\n\n          newViewRange = [after, before]\n\n          if (shouldUsePanAndZoomPadding) {\n            const requestedPadding = Math.round((before - after) / 2)\n            after -= requestedPadding\n            before += requestedPadding\n            pointsMultiplier = 2\n          }\n        } else {\n          after = Math.round(panAndZoom.after / 1000)\n          before = Math.round(panAndZoom.before / 1000)\n          pointsMultiplier = 1\n        }\n      } else {\n        // no panAndZoom\n        before = initialBefore\n        after = liveModeAfter\n        pointsMultiplier = 1\n      }\n\n      newViewRange = (newViewRange || [after, before]).map(x => x * 1000) as [number, number]\n\n      const dataPoints =\n        attributes.points ||\n        Math.round(chartWidth / getChartPixelsPerPoint({ attributes, chartSettings }))\n      const points = forceDataPoints || dataPoints * pointsMultiplier\n\n      const shouldForceTimeWindow = attributes.forceTimeWindow || Boolean(defaultAfter)\n      // if we want to add fake points, we need first need to request less\n      // to have the desired frequency\n      // this will be removed when Agents will support forcing time-window between points\n      const correctedPoints = shouldForceTimeWindow\n        ? getCorrectedPoints({\n            after,\n            before,\n            firstEntry: actualChartMetadata.first_entry,\n            points,\n          })\n        : null\n\n      const group = attributes.method || window.NETDATA.chartDefaults.method\n      setShouldFetch(false)\n      dispatch(\n        fetchDataAction.request({\n          // properties to be passed to API\n          host,\n          context: actualChartMetadata.context,\n          chart: actualChartMetadata.id,\n          format: chartSettings.format,\n          points: correctedPoints || points,\n          group,\n          gtime: attributes.gtime || 0,\n          options: getChartURLOptions(attributes, shouldEliminateZeroDimensions),\n          after: after || null,\n          before: before || null,\n          dimensions: attributes.dimensions,\n          labels: attributes.labels,\n          postGroupBy: attributes.postGroupBy,\n          postAggregationMethod: attributes.postAggregationMethod,\n          aggrMethod: attributes.aggrMethod,\n          aggrGroups: attributes.aggrGroups,\n          // @ts-ignore\n          dimensionsAggrMethod:\n            dimensionsAggrMethodMap[attributes.dimensionsAggrMethod] ||\n            attributes.dimensionsAggrMethod,\n          nodeIDs,\n          httpMethod: attributes.httpMethod,\n          groupBy: attributes.groupBy,\n\n          // properties for the reducer\n          fetchDataParams: {\n            // we store it here so it is only available when data is fetched\n            // those params should be synced with data\n            fillMissingPoints: correctedPoints ? points - correctedPoints : undefined,\n            isRemotelyControlled,\n            viewRange: newViewRange,\n          },\n          id: chartUuid,\n          cancelTokenSource,\n        })\n      )\n    }\n  }, [\n    attributes,\n    actualChartMetadata,\n    chartSettings,\n    chartUuid,\n    chartWidth,\n    defaultAfter,\n    dispatch,\n    hasLegend,\n    host,\n    initialBefore,\n    isFetchingData,\n    isPanAndZoomMaster,\n    isRemotelyControlled,\n    liveModeAfter,\n    panAndZoom,\n    portalNode,\n    setShouldFetch,\n    shouldEliminateZeroDimensions,\n    shouldUsePanAndZoomPadding,\n    shouldFetch,\n    cancelTokenSource,\n    nodeIDs,\n    uuid,\n  ])\n\n  useSelector(selectSpacePanelTransitionEndIsActive)\n\n  const externalSelectedDimensions = attributes?.selectedDimensions\n  const [selectedDimensions, setSelectedDimensions] = useState<string[]>(\n    externalSelectedDimensions || emptyArray\n  )\n\n  useLayoutEffect(() => {\n    if (externalSelectedDimensions) {\n      setSelectedDimensions(externalSelectedDimensions)\n    }\n  }, [externalSelectedDimensions])\n\n  useLayoutEffect(() => {\n    setSelectedDimensions(externalSelectedDimensions || emptyArray)\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [attributes?.groupBy])\n\n  const customElementForDygraph = useMemo(\n    () =>\n      renderCustomElementForDygraph &&\n      renderCustomElementForDygraph({\n        onAttributesChange,\n        attributes,\n        chartMetadata: actualChartMetadata as ChartMetadata,\n        chartData,\n        chartID: id,\n      }),\n    [\n      onAttributesChange,\n      renderCustomElementForDygraph,\n      attributes,\n      id,\n      actualChartMetadata,\n      chartData,\n    ]\n  )\n\n  // eslint-disable-next-line max-len\n  const hasEmptyData =\n    (chartData as DygraphData | D3pieChartData | null)?.result?.data?.length === 0 ||\n    (chartData as EasyPieChartData | null)?.result?.length === 0\n\n  if (!chartData || !actualChartMetadata) {\n    return (\n      <>\n        <Loader\n          // Loader should remount when that flag is changed, because inside\n          // there's an oldschool bootstrap icon which doesn't handle updates well\n          key={`${hasEmptyData}`}\n          hasEmptyData={hasEmptyData}\n          containerNode={portalNode}\n        />\n        {shouldShowSpinner && <ChartSpinner chartLibrary={attributes.chartLibrary} />}\n      </>\n    )\n  }\n\n  return (\n    <>\n      {hasEmptyData && (\n        <Loader key={`${hasEmptyData}`} hasEmptyData={hasEmptyData} containerNode={portalNode} />\n      )}\n      <Chart\n        attributes={attributes}\n        chartContainerElement={portalNode}\n        chartData={chartData}\n        chartMetadata={actualChartMetadata}\n        chartUuid={chartUuid}\n        chartHeight={chartHeight}\n        chartWidth={chartWidth}\n        defaultAfter={defaultAfter}\n        globalPanAndZoom={globalPanAndZoom}\n        hasEmptyData={hasEmptyData}\n        isRemotelyControlled={fetchDataParams.isRemotelyControlled}\n        // view range that updates only when data is fetched\n        viewRangeForCurrentData={fetchDataParams.viewRange}\n        // view range that updates when requesting and fetching of data\n        viewRange={viewRange!}\n        selectedDimensions={selectedDimensions}\n        setSelectedDimensions={setSelectedDimensions}\n        showLatestOnBlur={!panAndZoom}\n      />\n      {shouldShowSpinner && <ChartSpinner chartLibrary={attributes.chartLibrary} />}\n      {dropdownMenu && dropdownMenu.length > 0 && (\n        <S.ChartDropdownContainer>\n          <ChartDropdown\n            dropdownMenu={dropdownMenu}\n            chartID={id}\n            attributes={attributes}\n            chartMetadata={actualChartMetadata}\n          />\n        </S.ChartDropdownContainer>\n      )}\n      {customElementForDygraph}\n    </>\n  )\n}\n","import { useEffect, useState } from \"react\"\nimport { useInterval } from \"react-use\"\n\nimport { useSelector } from \"store/redux-separate-context\"\nimport {\n  selectHasWindowFocus,\n  selectStopUpdatesWhenFocusIsLost,\n  selectGlobalPause,\n} from \"domains/global/selectors\"\nimport { BIGGEST_INTERVAL_NUMBER } from \"utils/biggest-interval-number\"\nimport { isPrintMode } from \"domains/dashboard/utils/parse-url\"\n\ntype UseFetchNewDataClock = (arg: {\n  areCriteriaMet: boolean\n  preferedIntervalTime: number\n}) => [boolean, (shouldFetch: boolean) => void]\nexport const useFetchNewDataClock: UseFetchNewDataClock = ({\n  areCriteriaMet,\n  preferedIntervalTime,\n}) => {\n  const hasWindowFocus = useSelector(selectHasWindowFocus)\n  const stopUpdatesWhenFocusIsLost = useSelector(selectStopUpdatesWhenFocusIsLost)\n  const globalPause = useSelector(selectGlobalPause)\n\n  const shouldBeUpdating = !(!hasWindowFocus && stopUpdatesWhenFocusIsLost) && !globalPause\n\n  const [shouldFetch, setShouldFetch] = useState<boolean>(true)\n  const [shouldFetchImmediatelyAfterFocus, setShouldFetchImmediatelyAfterFocus] = useState(false)\n\n  useEffect(() => {\n    if (shouldFetchImmediatelyAfterFocus && shouldBeUpdating) {\n      setShouldFetchImmediatelyAfterFocus(false)\n      setShouldFetch(true)\n    }\n  }, [shouldFetchImmediatelyAfterFocus, setShouldFetchImmediatelyAfterFocus, shouldBeUpdating])\n\n  // don't use setInterval when we loose focus\n  const intervalTime =\n    (shouldBeUpdating || !shouldFetchImmediatelyAfterFocus) && !isPrintMode\n      ? preferedIntervalTime\n      : BIGGEST_INTERVAL_NUMBER\n  useInterval(() => {\n    if (areCriteriaMet) {\n      if (!shouldBeUpdating) {\n        setShouldFetchImmediatelyAfterFocus(true)\n        return\n      }\n      setShouldFetch(true)\n    }\n    // when there's no focus, don't ask for updated data\n  }, intervalTime)\n  return [shouldFetch, setShouldFetch]\n}\n","import { Attributes } from \"./transformDataAttributes\"\nimport { ChartLibraryConfig } from \"./chartLibrariesSettings\"\n\ntype GetChartPixelsPerPoint = (arg: {\n  attributes: Attributes,\n  chartSettings: ChartLibraryConfig,\n}) => number\n\nexport const getChartPixelsPerPoint: GetChartPixelsPerPoint = ({\n  attributes, chartSettings,\n}) => {\n  const {\n    pixelsPerPoint: pixelsPerPointAttribute,\n  } = attributes\n  if (typeof pixelsPerPointAttribute === \"number\") {\n    return pixelsPerPointAttribute\n  }\n  const pixelsPerPointSetting = chartSettings.pixelsPerPoint(attributes)\n\n  return Math.max(...[\n    pixelsPerPointSetting,\n    window.NETDATA.options.current.pixels_per_point,\n  ].filter((px) => typeof px === \"number\"))\n}\n","import { prop, pick } from \"ramda\"\nimport { createSelector } from \"reselect\"\n\nimport { AppStateT } from \"store/app-state\"\n\nimport { storeKey } from \"./constants\"\n\nconst selectDashboardDomain = (state: AppStateT) => state[storeKey]\n\nexport const selectIsSnapshotMode = createSelector(\n  selectDashboardDomain,\n  prop(\"isSnapshotMode\"),\n)\n\nexport const selectSnapshotOptions = createSelector(\n  selectDashboardDomain,\n  pick([\"snapshotCharts\", \"snapshotDataPoints\"]),\n)\n","import React, { useEffect } from \"react\"\n\nimport { MS_IN_SECOND } from \"utils/utils\"\nimport { serverDefault } from \"utils/server-detection\"\nimport { selectIsSnapshotMode, selectSnapshotOptions } from \"domains/dashboard/selectors\"\nimport { selectGlobalPanAndZoom } from \"domains/global/selectors\"\nimport { useDispatch, useSelector } from \"store/redux-separate-context\"\nimport { TimeRangeObjT } from \"types/common\"\n\nimport { Attributes } from \"../utils/transformDataAttributes\"\nimport { fetchDataForSnapshotAction } from \"../actions\"\nimport { chartLibrariesSettings } from \"../utils/chartLibrariesSettings\"\nimport { getChartURLOptions } from \"../utils/get-chart-url-options\"\n\ninterface SnapshotLoaderProps {\n  attributes: Attributes\n  chartUuid: string\n}\nconst SnapshotLoader = ({\n  attributes,\n  chartUuid,\n}: SnapshotLoaderProps) => {\n  const host = attributes.host || serverDefault\n  const { snapshotDataPoints } = useSelector(selectSnapshotOptions)\n  const group = attributes.method || window.NETDATA.chartDefaults.method\n  const { chartLibrary } = attributes\n  const chartSettings = chartLibrariesSettings[chartLibrary]\n\n  const globalPanAndZoom = useSelector(selectGlobalPanAndZoom)\n  const after = (globalPanAndZoom as TimeRangeObjT).after / MS_IN_SECOND\n  const before = (globalPanAndZoom as TimeRangeObjT).before / MS_IN_SECOND\n\n  const dispatch = useDispatch()\n  useEffect(() => {\n    dispatch(fetchDataForSnapshotAction.request({\n      // properties to be passed to API\n      host,\n      context: attributes.id,\n      chart: attributes.id,\n      format: chartSettings.format,\n      points: snapshotDataPoints as number,\n      group,\n      gtime: attributes.gtime || 0,\n      // for snapshots, always eliminate zero dimensions\n      options: getChartURLOptions(attributes, true),\n      after: after || null,\n      before: before || null,\n      dimensions: attributes.dimensions,\n      aggrMethod: attributes.aggrMethod,\n      nodeIDs: attributes.nodeIDs,\n      chartLibrary,\n      id: chartUuid,\n      groupBy: attributes.groupBy,\n    }))\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }) // todo fetch based on state\n  return null\n}\n\n\ninterface SnapshotLoaderContainerProps {\n  attributes: Attributes\n  chartUuid: string\n}\nexport const SnapshotLoaderContainer = ({\n  attributes,\n  chartUuid,\n}: SnapshotLoaderContainerProps) => {\n  const isSnapshotMode = useSelector(selectIsSnapshotMode)\n  if (!isSnapshotMode) {\n    return null\n  }\n  return <SnapshotLoader attributes={attributes} chartUuid={chartUuid} />\n}\n","import React, { memo } from \"react\"\nimport { createPortal } from \"react-dom\"\n\nimport { getAttributes } from \"../utils/transformDataAttributes\"\nimport { ChartWithLoader } from \"./chart-with-loader\"\nimport { DisableOutOfView } from \"./disable-out-of-view\"\nimport { SnapshotLoaderContainer } from \"./snapshot-loader\"\n\nconst getNodesArray = () => Array.from(document.querySelectorAll(\"[data-netdata]\"))\n\nexport const Portals = memo(() => {\n  const nodes = getNodesArray()\n  return (\n    <>\n      {nodes.map((node, index) => {\n        const attributesMapped = getAttributes(node)\n        const chartId = `${attributesMapped.id}-${index}`\n        return (\n          createPortal(\n            <>\n              <DisableOutOfView\n                attributes={attributesMapped}\n                chartUuid={chartId}\n                portalNode={(node as HTMLElement)}\n              >\n                <ChartWithLoader\n                  attributes={attributesMapped}\n                  // todo change to uuid generator (when we disconnect dashboard.js)\n                  chartUuid={chartId}\n                  portalNode={(node as HTMLElement)}\n                />\n              </DisableOutOfView>\n              <SnapshotLoaderContainer\n                attributes={attributesMapped}\n                chartUuid={chartId}\n              />\n            </>,\n            node,\n          )\n        )\n      })}\n    </>\n  )\n})\n","import { useEffect, useState } from \"react\"\n\nimport { axiosInstance } from \"utils/api\"\n\nexport const useHttp = <T = unknown>(\n  url: string | undefined,\n  shouldMakeCall : boolean = true,\n  isExternal?: boolean,\n) => {\n  const [isFetching, setIsFetching] = useState(false)\n  const [isError, setIsError] = useState(false)\n  const [data, setData] = useState<T | null>(null)\n  useEffect(() => {\n    if (shouldMakeCall && url) {\n      const options = isExternal\n        ? { headers: null, withCredentials: false }\n        : {}\n\n      setIsFetching(true)\n      axiosInstance.get(url, options)\n        .then((r) => {\n          if (r.data) {\n            setData(r.data)\n            setIsError(false)\n            setIsFetching(false)\n          }\n        })\n        .catch((error) => {\n          // eslint-disable-next-line no-console\n          console.warn(`error fetching ${url}`, error)\n          setIsError(true)\n          setIsFetching(false)\n        })\n    }\n  }, [isExternal, shouldMakeCall, url])\n  // force triple instead of array\n  return [data, isFetching, isError] as [T | null, boolean, boolean]\n}\n","import { ReactNode, useEffect, useRef } from \"react\"\nimport { createPortal } from \"react-dom\"\n\nconst modalRoot = document.getElementById(\"modal-root\") as HTMLElement\n\ntype Props = {\n  children: ReactNode\n}\nexport const ModalPortal = ({ children }: Props) => {\n  const element = useRef(document.createElement(\"div\"))\n  useEffect(() => {\n    modalRoot.appendChild(element.current)\n    return () => {\n      // eslint-disable-next-line react-hooks/exhaustive-deps\n      modalRoot.removeChild(element.current)\n    }\n  }, [])\n\n  return createPortal(children, element.current)\n}\n","import React, { useRef, useEffect } from \"react\"\nimport classNames from \"classnames\"\n\nimport { useSelector } from \"store/redux-separate-context\"\nimport { ModalPortal } from \"domains/dashboard/components/modal-portal\"\nimport {\n  selectAmountOfCharts, selectAmountOfFetchedCharts, selectNameOfAnyFetchingChart,\n} from \"domains/chart/selectors\"\n\nimport \"./print-modal.scss\"\n\nconst TIMEOUT_DURATION_TO_MAKE_SURE_ALL_CHARTS_HAVE_BEEN_RENDERED = 1000\n\nexport const PrintModal = () => {\n  const printModalElement = useRef<HTMLDivElement>(null)\n  const isFetchingMetrics = true\n\n  useEffect(() => {\n    // todo replace bootstrap with newer solution (custom or react-compatible library)\n    if (printModalElement.current) {\n      const $element = window.$(printModalElement.current)\n      $element.modal(\"show\")\n    }\n  }) // render just once\n\n  const amountOfCharts = useSelector(selectAmountOfCharts)\n  const amountOfFetchedCharts = useSelector(selectAmountOfFetchedCharts)\n  const nameOfAnyFetchingChart = useSelector(selectNameOfAnyFetchingChart)\n\n  const percentage = amountOfCharts === 0\n    ? 0\n    : (amountOfFetchedCharts / amountOfCharts) * 100\n\n  useEffect(() => {\n    if (percentage === 100) {\n      setTimeout(() => {\n        // in case browser will not be able to close the window\n        window.$(printModalElement.current).modal(\"hide\")\n        window.print()\n        window.close()\n      }, TIMEOUT_DURATION_TO_MAKE_SURE_ALL_CHARTS_HAVE_BEEN_RENDERED)\n    }\n  }, [percentage])\n\n\n  const progressBarText = nameOfAnyFetchingChart\n    && `${Math.round(percentage)}%, ${nameOfAnyFetchingChart}`\n\n\n  return (\n    <ModalPortal>\n      <div\n        ref={printModalElement}\n        className=\"modal fade\"\n        id=\"printModal\"\n        tabIndex={-1}\n        role=\"dialog\"\n        aria-labelledby=\"printModalLabel\"\n        data-keyboard=\"false\"\n        data-backdrop=\"static\"\n      >\n        <div className=\"modal-dialog modal-lg\" role=\"document\">\n          <div className=\"modal-content\">\n            <div className=\"modal-header\">\n              <button\n                type=\"button\"\n                className={classNames(\n                  \"close\",\n                  { \"print-modal__close-button--disabled\": isFetchingMetrics },\n                )}\n                data-dismiss=\"modal\"\n                aria-label=\"Close\"\n              >\n                <span aria-hidden=\"true\">&times;</span>\n              </button>\n              <h4 className=\"modal-title\" id=\"printModalLabel\">\n                Preparing dashboard for printing...\n              </h4>\n            </div>\n            <div className=\"modal-body\">\n              Please wait while we initialize and render all the charts on the dashboard.\n              <div\n                className=\"progress progress-striped active\"\n                style={{ height: \"2em\" }}\n              >\n                <div\n                  id=\"printModalProgressBar\"\n                  className=\"progress-bar progress-bar-info\"\n                  role=\"progressbar\"\n                  aria-valuenow={percentage}\n                  aria-valuemin={0}\n                  aria-valuemax={100}\n                  style={{\n                    minWidth: \"2em\",\n                    width: `${percentage}%`,\n                  }}\n                >\n                  <span\n                    id=\"printModalProgressBarText\"\n                    style={{\n                      paddingLeft: 10,\n                      paddingTop: 4,\n                      fontSize: \"1.2em\",\n                      textAlign: \"left\",\n                      width: \"100%\",\n                      position: \"absolute\",\n                      display: \"block\",\n                      color: \"black\",\n                    }}\n                  >\n                    {progressBarText}\n                  </span>\n                </div>\n              </div>\n              The print dialog will appear as soon as we finish rendering the page.\n            </div>\n            <div className=\"modal-footer\" />\n          </div>\n        </div>\n      </div>\n    </ModalPortal>\n  )\n}\n","import styled from \"styled-components\"\nimport { getSizeBy, getColor } from \"@netdata/netdata-ui\"\n\nexport const SocialMediaContainer = styled.div`\n  width: 185px;\n  padding: ${getSizeBy(2)};\n  background: ${getColor(\"borderSecondary\")};\n\n  font-size: 12px;\n  margin-bottom: ${getSizeBy(3)};\n`\n\nexport const FirstRow = styled.div`\n  display: flex;\n  justify-content: space-between;\n`\n\nexport const GithubCopy = styled.div`\n\n`\n\nexport const GithubCopyLine = styled.div`\n\n`\n\nexport const SocialMediaLink = styled.a`\n  &, &:hover {\n    color: ${getColor(\"main\")};\n  }\n`\n\nexport const GithubStarQuestion = styled(SocialMediaLink)``\n\nexport const GithubIcon = styled(SocialMediaLink)`\n  font-size: 24px;\n`\n\nexport const TwitterIcon = styled(SocialMediaLink)`\n  font-size: 17px;\n`\n\nexport const FacebookIcon = styled(SocialMediaLink)`\n  font-size: 23px;\n`\n\nexport const Separator = styled.div`\n  margin-top: ${getSizeBy(2)};\n  border-top: 1px solid ${getColor(\"separator\")};\n\n`\nexport const SecondRow = styled.div`\n  margin-top: ${getSizeBy(2)};\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n`\n\nexport const SecondRowText = styled.span`\n  font-size: 10px;\n`\n","import React from \"react\"\n\nimport * as S from \"./styled\"\n\nexport const SidebarSocialMedia = () => (\n  <S.SocialMediaContainer>\n    <S.FirstRow>\n      <S.GithubCopy>\n        <S.GithubCopyLine>\n            Do you like Netdata?\n        </S.GithubCopyLine>\n        <S.GithubStarQuestion href=\"https://github.com/netdata/netdata/\" target=\"_blank\">\n            Give us a star!\n        </S.GithubStarQuestion>\n      </S.GithubCopy>\n      <S.GithubIcon href=\"https://github.com/netdata/netdata/\" target=\"_blank\">\n        <i className=\"fab fa-github\" />\n      </S.GithubIcon>\n    </S.FirstRow>\n    <S.Separator />\n    <S.SecondRow>\n      <S.SecondRowText>\n          And share the word!\n      </S.SecondRowText>\n      <S.TwitterIcon href=\"https://twitter.com/linuxnetdata/\" target=\"_blank\">\n        <i className=\"fab fa-twitter\" />\n      </S.TwitterIcon>\n      <S.FacebookIcon href=\"https://www.facebook.com/linuxnetdata/\" target=\"_blank\">\n        <i className=\"fab fa-facebook\" />\n      </S.FacebookIcon>\n    </S.SecondRow>\n  </S.SocialMediaContainer>\n)\n","import React, { useRef } from \"react\"\nimport { createPortal } from \"react-dom\"\n\ninterface Props {\n  children: React.ReactNode\n}\nexport const SidebarSocialMediaPortal = ({\n  children,\n}: Props) => {\n  const element = useRef(document.querySelector(\"#sidebar-end-portal-container\"))\n  return createPortal(children, element.current!)\n}\n","import React from \"react\"\nimport styled from \"styled-components\"\nimport { ToastContainer, ToastContainerProps } from \"react-toastify\"\nimport \"react-toastify/dist/ReactToastify.min.css\"\n\nimport { getColor } from \"@netdata/netdata-ui\"\n\nimport { notificationsZIndex } from \"styles/z-index\"\n\nconst WrappedToastContainer = ({\n  className,\n  ...rest\n}: ToastContainerProps & { className?: string }) => (\n  <div className={className}>\n    {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n    <ToastContainer {...rest} closeButton={false} />\n  </div>\n)\n\nexport const NotificationsContainer = styled(WrappedToastContainer)<ToastContainerProps>`\n  .Toastify__toast-container {\n    position: fixed;\n    width: unset;\n    min-width: 400px;\n    max-width: 500px;\n    ${notificationsZIndex};\n    color: ${getColor([\"neutral\", \"limedSpruce\"])};\n  }\n  .Toastify__toast {\n    padding: 0;\n    padding-top: 5px;\n  }\n  .Toastify__toast--error {\n    background: ${getColor([\"red\", \"lavender\"])};\n    border: 1px solid ${getColor(\"error\")};\n  }\n  .Toastify__toast--warning {\n  }\n  .Toastify__toast--success {\n    background: ${getColor([\"green\", \"frostee\"])};\n    border: 1px solid ${getColor(\"success\")};\n  }\n  .Toastify__toast-body {\n  }\n  .Toastify__progress-bar {\n    bottom: unset;\n    top: 0;\n  }\n  .Toastify__progress-bar--success {\n    background-color: ${getColor(\"success\")};\n  }\n  .Toastify__progress-bar--error {\n    background-color: ${getColor(\"error\")};\n  }\n`\n","import React from \"react\"\nimport { Icon, Flex } from \"@netdata/netdata-ui\"\n\nconst Item = ({ icon, children, hasBorder }) => (\n  <Flex\n    gap={2}\n    border={hasBorder && { side: \"right\", color: \"separator\" }}\n    alignItems=\"center\"\n    padding={[0, 3, 0, 0]}\n    height=\"100%\"\n  >\n    {!!icon && <Icon name={icon} color=\"bright\" height=\"15px\" />}\n    {children}\n  </Flex>\n)\n\nexport default Item\n","import React from \"react\"\nimport { Text } from \"@netdata/netdata-ui\"\nimport Item from \"../item\"\nimport { useSelector } from \"@/src/store/redux-separate-context\"\n\nconst hostNameSelector = state => {\n  const snapshot = state.global.snapshot\n  const data = state.global.chartsMetadata.data\n\n  if (!snapshot && !data) return \"\"\n  return snapshot ? snapshot.hostname : data.hostname\n}\n\nconst Node = () => {\n  const hostname = useSelector(hostNameSelector)\n\n  return (\n    <Item icon=\"node_hollow\">\n      <Text data-testid={`header-nodename-${hostname}`} color=\"bright\" strong truncate>\n        {hostname}\n      </Text>\n    </Item>\n  )\n}\n\nexport default Node\n","import React from \"react\"\nimport { Flex, TextSmall } from \"@netdata/netdata-ui\"\n\nconst tooltipBackground = [\"neutral\", \"black\"]\n\nconst CustomTooltip = ({ children, isBasic }) => (\n  <Flex\n    padding={[1.5, 2]}\n    margin={[2]}\n    background={tooltipBackground}\n    round={1}\n    {...(!isBasic && { width: { max: \"300px\" } })}\n  >\n    <TextSmall color=\"bright\">{children}</TextSmall>\n  </Flex>\n)\n\nexport default CustomTooltip\n","import React from \"react\"\nimport CustomTooltip from \"@/src/components/tooltips/customTooltip\"\n\nconst getContent = (content, { isBasic }) => {\n  const contentNode = typeof content === \"function\" ? content() : content\n  if (typeof content === \"string\" || isBasic) {\n    return <CustomTooltip isBasic={isBasic}>{contentNode}</CustomTooltip>\n  }\n  return contentNode\n}\n\nexport default getContent\n","import React, { useCallback } from \"react\"\nimport { Tooltip as BaseTooltip } from \"@netdata/netdata-ui\"\nimport getContent from \"./getContent\"\n\nconst Tooltip = ({ children, content, isBasic, ...rest }) => {\n  const getTooltipContent = useCallback(() => getContent(content, { isBasic }), [content, isBasic])\n  return (\n    <BaseTooltip plain animation content={getTooltipContent} {...rest}>\n      {children}\n    </BaseTooltip>\n  )\n}\n\nexport default Tooltip\n","import React, { useCallback } from \"react\"\nimport { Flex, Button } from \"@netdata/netdata-ui\"\nimport Tooltip from \"@/src/components/tooltips\"\nimport { setGlobalPauseAction } from \"domains/global/actions\"\nimport { useDispatch } from \"store/redux-separate-context\"\n\nconst Options = () => {\n  const dispatch = useDispatch()\n  const onClick = useCallback(() => dispatch(setGlobalPauseAction()), [dispatch])\n  return (\n    <Flex gap={2} data-testid=\"header-options-button\">\n      <Tooltip content=\"Import a Netdata snapshot\" align=\"bottom\" plain>\n        <Button\n          flavour=\"borderless\"\n          neutral\n          themeType=\"dark\"\n          data-toggle=\"modal\"\n          data-target=\"#loadSnapshotModal\"\n          icon=\"download\"\n        />\n      </Tooltip>\n      <Tooltip content=\"Export a Netdata snapshot\" align=\"bottom\" plain>\n        <Button\n          onClick={onClick}\n          flavour=\"borderless\"\n          neutral\n          themeType=\"dark\"\n          data-toggle=\"modal\"\n          data-target=\"#saveSnapshotModal\"\n          icon=\"upload\"\n        />\n      </Tooltip>\n      <Tooltip content=\"Print the dashboard\" align=\"bottom\" plain>\n        <Button\n          flavour=\"borderless\"\n          neutral\n          themeType=\"dark\"\n          data-toggle=\"modal\"\n          data-target=\"#printPreflightModal\"\n          icon=\"print\"\n        />\n      </Tooltip>\n    </Flex>\n  )\n}\n\nexport default Options\n","import React from \"react\"\nimport { Button } from \"@netdata/netdata-ui\"\nimport Tooltip from \"@/src/components/tooltips\"\n\nimport { useHttp } from \"hooks/use-http\"\n\nconst NETDATA_LATEST_VERSION_URL = \"https://api.github.com/repos/netdata/netdata/releases/latest\"\nconst NETDATA_LATEST_GCS_VERSION_URL =\n  \"https://www.googleapis.com/storage/v1/b/netdata-nightlies/o/latest-version.txt\"\n\nconst transformGcsVersionResponse = data => data.replace(/(\\r\\n|\\n|\\r| |\\t)/gm, \"\")\n\nconst transformGithubResponse = data => data?.tag_name.replace(/(\\r\\n|\\n|\\r| |\\t)/gm, \"\")\n\nconst versionsMatch = (v1, v2) => {\n  if (v1 === v2) {\n    return true\n  }\n  let s1 = v1.split(\".\")\n  let s2 = v2.split(\".\")\n  // Check major version\n  let n1 = parseInt(s1[0].substring(1, 2), 10)\n  let n2 = parseInt(s2[0].substring(1, 2), 10)\n  if (n1 < n2) return false\n  if (n1 > n2) return true\n\n  // Check minor version\n  n1 = parseInt(s1[1], 10)\n  n2 = parseInt(s2[1], 10)\n  if (n1 < n2) return false\n  if (n1 > n2) return true\n\n  // Split patch: format could be e.g. 0-22-nightly\n  s1 = s1[2].split(\"-\")\n  s2 = s2[2].split(\"-\")\n\n  n1 = parseInt(s1[0], 10)\n  n2 = parseInt(s2[0], 10)\n  if (n1 < n2) return false\n  if (n1 > n2) return true\n\n  n1 = s1.length > 1 ? parseInt(s1[1], 10) : 0\n  n2 = s2.length > 1 ? parseInt(s2[1], 10) : 0\n  if (n1 < n2) return false\n  return true\n}\n\nconst VersionControl = ({ currentVersion, releaseChannel }) => {\n  const isStableReleaseChannel = releaseChannel === \"stable\"\n  const [githubVersion] = useHttp(NETDATA_LATEST_VERSION_URL, isStableReleaseChannel, true)\n\n  const [gcsVersionResponse] = useHttp(NETDATA_LATEST_GCS_VERSION_URL, !isStableReleaseChannel)\n  const [mediaLinkResponse] = useHttp(gcsVersionResponse?.mediaLink, Boolean(gcsVersionResponse))\n\n  const latestVersion = isStableReleaseChannel\n    ? transformGithubResponse(githubVersion)\n    : mediaLinkResponse\n    ? transformGcsVersionResponse(mediaLinkResponse)\n    : null\n\n  if (!latestVersion) {\n    return null\n  }\n  const isNewVersionAvailable = !versionsMatch(currentVersion, latestVersion)\n\n  return (\n    <Tooltip content={isNewVersionAvailable ? \"Need help?\" : \"Check Version\"} align=\"bottom\" plain>\n      <Button\n        data-testid=\"header-version-control-button\"\n        flavour=\"borderless\"\n        themeType=\"dark\"\n        small\n        neutral={!isNewVersionAvailable}\n        warning={isNewVersionAvailable}\n        name={isNewVersionAvailable ? \"update_pending\" : \"update\"}\n        icon={isNewVersionAvailable ? \"update_pending\" : \"update\"}\n        data-toggle=\"modal\"\n        data-target=\"#updateModal\"\n      />\n    </Tooltip>\n  )\n}\n\nexport default VersionControl\n","import React from \"react\"\nimport VersionControl from \"components/app-header/components/versionControl\"\nimport { useSelector } from \"@/src/store/redux-separate-context\"\n\nconst versionSelector = state => {\n  const { data } = state.global.chartsMetadata\n\n  if (!data) return null\n\n  const { version, release_channel: releaseChannel } = data\n  return {\n    version,\n    releaseChannel,\n  }\n}\n\nconst Version = () => {\n  const data = useSelector(versionSelector)\n  return (\n    data && <VersionControl currentVersion={data.version} releaseChannel={data.releaseChannel} />\n  )\n}\n\nexport default Version\n","import { useState, useCallback } from \"react\"\n\n/**\n * @example\n * const [value, toggle, toggleOn, toggleOff]  = useToggle(false);\n *\n * @param {Boolean} initialValue\n */\n\nconst useToggle = (initialValue = false) => {\n  const [value, setToggle] = useState(!!initialValue)\n  const toggle = useCallback(() => setToggle(oldValue => !oldValue), [])\n  const toggleOn = useCallback(() => setToggle(true), [])\n  const toggleOff = useCallback(() => setToggle(false), [])\n\n  return [value, toggle, toggleOn, toggleOff]\n}\n\nexport default useToggle\n","import { useEffect, useState } from \"react\"\n\nconst useLocalStorage = (key, defaultValue) => {\n  const [value, setValue] = useState(() => getValueFromStorage(key, defaultValue))\n\n  useEffect(() => localStorage.setItem(key, JSON.stringify(value)), [key, value])\n\n  return [value, setValue]\n}\n\nconst getValueFromStorage = (key, defaultValue = \"\") =>\n  JSON.parse(localStorage.getItem(key)) ?? defaultValue\n\nexport default useLocalStorage\n","import styled from \"styled-components\"\nimport { getColor, getSizeBy, Icon } from \"@netdata/netdata-ui\"\nimport { Menu } from \"@rmwc/menu\"\n\nexport const RootContainer = styled.div`\n  width: 100%;\n  height: 100%;\n  display: flex;\n  flex-flow: row nowrap;\n  align-items: center;\n`\n\nexport const StyledMenu = styled(Menu)``\n\nexport const DropdownContainer = styled.div`\n  cursor: pointer;\n  color: ${getColor(\"bright\")};\n  .mdc-menu-surface {\n    border-radius: 0;\n    .mdc-list {\n      padding: 0;\n    }\n    .mdc-list-item {\n      padding: 0 ${getSizeBy(5)} 0 ${getSizeBy(5)};\n      font-size: 14px;\n      height: ${getSizeBy(6)};\n    }\n  }\n`\n\nexport const ListContainer = styled.div`\n  padding: ${getSizeBy(3)} 0;\n`\n\nexport const OpenerIcon = styled(Icon)`\n  flex-shrink: 0;\n  flex-grow: 0;\n  margin-left: ${({ noMargin }) => (noMargin ? \"unset\" : \"16px\")};\n  fill: ${getColor(\"bright\")};\n  width: 10px;\n  height: 5px;\n`\n","import styled from \"styled-components\"\nimport { getColor, getSizeBy, Icon, Drop } from \"@netdata/netdata-ui\"\nimport { Dropdown } from \"@/src/components/mdx-components/dropdown\"\nimport { dialogsZIndex, customDropdownZIndex } from \"@/src/styles/z-index\"\n\nexport const PickerBox = styled.div`\n  display: flex;\n  position: relative;\n  min-width: ${getSizeBy(102)};\n  min-height: ${getSizeBy(43)};\n  flex-direction: column;\n  align-items: flex-end;\n  background-color: ${getColor(\"mainBackground\")};\n  color: ${getColor(\"text\")};\n  z-index: ${dialogsZIndex};\n  border-radius: 8px;\n`\n\nexport const StyledTimePeriod = styled.span`\n  margin-top: ${getSizeBy(3)};\n  cursor: pointer;\n  width: 187px;\n  height: ${getSizeBy(2)};\n  &:first-of-type {\n    margin-top: ${getSizeBy(1)};\n  }\n  &:last-of-type {\n    margin-bottom: ${getSizeBy(1)};\n  }\n  & > span:hover {\n    color: ${getColor(\"textLite\")};\n  }\n`\nexport const StyledCustomTimePeriod = styled.span`\n  margin: ${getSizeBy(1)} ${getSizeBy(3)} 0;\n  color: ${({ isSelected, theme }) => getColor(isSelected ? \"primary\" : \"text\")({ theme })};\n  cursor: pointer;\n  &:first-of-type {\n    margin-top: 0;\n  }\n  &:hover {\n    color: ${getColor(\"textLite\")};\n  }\n`\n\nexport const StyledDropdown = styled(Dropdown)`\n  width: 88px;\n  height: 32px;\n  padding-top: 8px;\n  padding-bottom: 8px;\n  padding-left: 8px;\n  padding-right: 7px;\n  border: 1px solid ${getColor(\"border\")};\n  box-sizing: border-box;\n  border-radius: 4px;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  color: ${getColor(\"text\")};\n  .mdc-menu-surface--anchor {\n    .mdc-menu-surface--open {\n      ${customDropdownZIndex}\n      margin-top: ${getSizeBy(2)};\n      background: ${getColor(\"mainBackground\")};\n      border-radius: 4px;\n    }\n  }\n  .mdc-list {\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    align-items: center;\n  }\n`\nexport const DropdownIcon = styled(Icon)`\n  fill: ${getColor(\"text\")};\n  width: 12px;\n  height: 12px;\n`\n\nexport const CustomInput = styled.input`\n  border: 1px solid ${getColor(\"border\")};\n  color: inherit;\n  background: ${getColor(\"mainBackground\")};\n  box-sizing: border-box;\n  border-radius: 4px;\n  padding: 4px;\n  width: 32px;\n  height: 32px;\n  margin-left: 10px;\n  margin-right: 10px;\n  outline: none;\n  &:focus {\n    border: 1px solid ${getColor(\"primary\")};\n  }\n`\nexport const StyledDrop = styled(Drop).attrs({\n  background: \"mainBackground\",\n  round: 2,\n  margin: [4, 0, 0],\n  border: { side: \"all\", color: \"elementBackground\" },\n  animation: true,\n})`\n  box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25);\n`\nexport const StyledHR = styled.hr`\n  border: none;\n  margin: 0;\n  border-left: 1px solid ${getColor(\"borderSecondary\")};\n  height: 284px;\n`\n","import React, { useRef } from \"react\"\nimport { List } from \"@rmwc/list\"\nimport { MenuSurfaceAnchor, MenuSurface } from \"@rmwc/menu\"\nimport { RootContainer, ListContainer, DropdownContainer, OpenerIcon } from \"./styled\"\n\nexport const Dropdown = ({\n  title,\n  children,\n  className,\n  renderTitle,\n  isOpen = false,\n  onMenuToggle,\n  anchorCorner = \"bottomStart\",\n  renderOpener,\n}) => {\n  const ref = useRef()\n\n  const handleOpenState = () => {\n    onMenuToggle(!isOpen)\n  }\n\n  const handleClose = () => {\n    onMenuToggle(false)\n  }\n\n  return (\n    <DropdownContainer className={className}>\n      <MenuSurfaceAnchor>\n        <MenuSurface ref={ref} open={isOpen} onClose={handleClose} anchorCorner={anchorCorner}>\n          {typeof children === \"function\" ? (\n            isOpen && (\n              <ListContainer>\n                <List>{children({ maxHeight: ref.current?.root.ref.style.maxHeight })}</List>\n              </ListContainer>\n            )\n          ) : (\n            <ListContainer>\n              <List>{children}</List>\n            </ListContainer>\n          )}\n        </MenuSurface>\n        <RootContainer onClick={handleOpenState}>\n          {title || (renderTitle && renderTitle())}\n          {renderOpener ? (\n            renderOpener()\n          ) : (\n            <OpenerIcon name=\"triangle_down\" noMargin={Boolean(renderTitle)} />\n          )}\n        </RootContainer>\n      </MenuSurfaceAnchor>\n    </DropdownContainer>\n  )\n}\n","import React, { memo, useCallback } from \"react\"\nimport { Text } from \"@netdata/netdata-ui\"\nimport { StyledTimePeriod } from \"./styled\"\n\nconst TimePeriod = ({ value, period, resolution, isSelected, setTimeRange, tagging }) => {\n  const onClick = useCallback(\n    () => setTimeRange(value, resolution),\n    [value, resolution, setTimeRange]\n  )\n  return (\n    <StyledTimePeriod\n      key={value}\n      onClick={onClick}\n      data-ga={`date-picker::click-quick-selector::${tagging}::${-value}`}\n      data-testid=\"timePeriod-value\"\n    >\n      <Text color={isSelected ? \"primary\" : \"text\"}>{period}</Text>\n    </StyledTimePeriod>\n  )\n}\n\nexport default memo(TimePeriod)\n","import { format, formatDistanceStrict, parse, getTime, getUnixTime, add, isMatch } from \"date-fns\"\n\nconst MINUTE = 60\nconst HOUR = MINUTE * 60\nconst DAY = HOUR * 24\nconst MONTH = 30 * DAY\n\nexport const maxTimePeriodInUnix = 94694400\nexport const dateResolutions = [\"minutes\", \"hours\", \"days\", \"months\"]\n\nconst resolutionsMapping = {\n  minutes: MINUTE,\n  hours: HOUR,\n  days: DAY,\n  months: MONTH,\n}\n\nexport const getCustomTimePeriod = (after, resolution) =>\n  Math.round(after / resolutionsMapping[resolution])\n\nexport const parseInputPeriod = (timeCorrection, resolution) => {\n  const customRange = add(new Date(0), {\n    [resolution]: timeCorrection,\n  })\n  return -getUnixTime(customRange)\n}\n\nconst focusTaggingMap = {\n  startDate: \"start\",\n  endDate: \"finish\",\n}\n\nexport const getFocusTagging = focusedInput => focusTaggingMap[focusedInput]\n\nexport const timePeriods = [\n  { period: \"Last 5 minutes\", value: -5 * MINUTE, resolution: \"minutes\" },\n  { period: \"Last 15 minutes\", value: -15 * MINUTE, resolution: \"minutes\" },\n  { period: \"Last 30 minutes\", value: -30 * MINUTE, resolution: \"minutes\" },\n  { period: \"Last 2 hours\", value: -2 * HOUR, resolution: \"hours\" },\n  { period: \"Last 6 hours\", value: -6 * HOUR, resolution: \"hours\" },\n  { period: \"Last 12 hours\", value: -12 * HOUR, resolution: \"hours\" },\n  { period: \"Last Day\", value: -DAY, resolution: \"days\" },\n  { period: \"Last 2 Days\", value: -2 * DAY, resolution: \"days\" },\n  { period: \"Last 7 Days\", value: -7 * DAY, resolution: \"days\" },\n]\n\nexport const formatDates = (startDate, endDate) => {\n  const formattedStartDate = format(startDate, \"MMMM d yyyy, H:mm:ss\")\n  const formattedEndDate = format(endDate, \"MMMM d yyyy, H:mm:ss\")\n  return {\n    formattedStartDate,\n    formattedEndDate,\n  }\n}\n\nexport const formatOffset = offset => {\n  if (!offset) return \"+00:00\"\n  const splitOffset = offset.toString().split(\".\")\n  const mathSign = splitOffset[0] > 0 ? \"+\" : \"-\"\n  const absoluteNumber = Math.abs(splitOffset[0]).toString()\n  const firstPart = `${mathSign}${absoluteNumber.padStart(2, 0)}`\n  return splitOffset.length > 1\n    ? `${firstPart}:${String(splitOffset[1] * 0.6).padEnd(2, 0)}`\n    : `${firstPart}:00`\n}\n\nexport const getDateWithOffset = (date, utcOffset) => {\n  const formattedDate = isMatch(date, \"MMMM d yyyy, H:mm\")\n    ? date\n    : parse(date, \"MMMM d yyyy, H:mm\", Date.now())\n  return parse(`${formattedDate} ${formatOffset(utcOffset)}`, \"MMMM d yyyy, H:mm xxx\", Date.now())\n}\n\nexport const getTimePeriod = (startDate, endDate) =>\n  formatDistanceStrict(getTime(startDate), getTime(endDate))\n","import React from \"react\"\nimport { Flex } from \"@netdata/netdata-ui\"\nimport TimePeriod from \"./timePeriod\"\nimport { timePeriods } from \"./utils\"\n\nconst TimePeriods = ({ handleTimePeriodChange, selectedDate, tagging }) => (\n  <Flex\n    column\n    justifyContent=\"start\"\n    alignItems=\"start\"\n    height={{ max: \"240px\" }}\n    overflow={{ vertical: \"scroll\" }}\n    data-testid=\"timePeriods\"\n  >\n    {timePeriods.map(({ period, value, resolution }) => (\n      <TimePeriod\n        key={value}\n        value={value}\n        period={period}\n        resolution={resolution}\n        setTimeRange={handleTimePeriodChange}\n        isSelected={selectedDate === value}\n        tagging={tagging}\n      />\n    ))}\n  </Flex>\n)\n\nexport default TimePeriods\n","import React, { useCallback, useEffect, useState } from \"react\"\nimport { isValid, add, getUnixTime } from \"date-fns\"\nimport { Flex, Text } from \"@netdata/netdata-ui\"\nimport {\n  getCustomTimePeriod,\n  parseInputPeriod,\n  dateResolutions,\n  maxTimePeriodInUnix,\n} from \"./utils\"\nimport { StyledDropdown, DropdownIcon, CustomInput, StyledCustomTimePeriod } from \"./styled\"\n\nconst CustomTimePeriod = ({ handleTimePeriodChange, value, resolution, tagging }) => {\n  const getInputValue = () => (value <= 0 ? getCustomTimePeriod(-value, resolution) : 0)\n  const [inputValue, setInputValue] = useState(getInputValue)\n  const [isDropdownOpen, toggleDropdown] = useState(false)\n\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  useEffect(() => setInputValue(getInputValue()), [value])\n\n  const onChange = useCallback(e => setInputValue(e.target.value), [])\n\n  const onBlur = useCallback(\n    e => {\n      const currentValue = Number(e.currentTarget.value)\n      const isValidInput =\n        !Number.isNaN(currentValue) && Number.isInteger(currentValue) && currentValue > 0\n      const timePeriod = add(new Date(0), {\n        [resolution]: currentValue,\n      })\n      const isValidTimePeriod =\n        isValidInput && isValid(timePeriod) && getUnixTime(timePeriod) <= maxTimePeriodInUnix\n      if (isValidTimePeriod)\n        return handleTimePeriodChange(parseInputPeriod(currentValue, resolution), resolution)\n      return value <= 0 ? setInputValue(getCustomTimePeriod(-value, resolution)) : setInputValue(0)\n    },\n    [resolution, value, handleTimePeriodChange]\n  )\n\n  const onChangeResolution = useCallback(\n    newResolution => {\n      return () => {\n        handleTimePeriodChange(parseInputPeriod(inputValue, newResolution), newResolution)\n        toggleDropdown(false)\n      }\n    },\n    [inputValue, handleTimePeriodChange]\n  )\n\n  const renderTitle = () => (\n    <Flex alignItems=\"center\" flexWrap={false} width=\"100%\">\n      <Text padding={[0, 4, 0, 0]}>{resolution}</Text>\n      <DropdownIcon name=\"triangle_down\" />\n    </Flex>\n  )\n  return (\n    <Flex\n      justifyContent=\"start\"\n      alignItems=\"center\"\n      height={8}\n      data-ga={`date-picker::click-last-integer::${tagging}`}\n      data-testid=\"customTimePeriod\"\n    >\n      <Text>Last</Text>\n      <CustomInput\n        value={inputValue}\n        onChange={onChange}\n        onBlur={onBlur}\n        data-ga={`date-picker::click-last-integer::${tagging}::${inputValue}`}\n        data-testid=\"timePeriod-timeInput\"\n      />\n      <StyledDropdown\n        isOpen={isDropdownOpen}\n        onMenuToggle={toggleDropdown}\n        renderTitle={renderTitle}\n        renderOpener={() => null}\n      >\n        {() =>\n          dateResolutions.map(dateResolution => (\n            <StyledCustomTimePeriod\n              key={dateResolution}\n              onClick={onChangeResolution(dateResolution)}\n              data-ga={`date-picker::click-last-time-${dateResolution}::${tagging}`}\n              data-testid=\"timePeriod-option\"\n            >\n              {dateResolution}\n            </StyledCustomTimePeriod>\n          ))\n        }\n      </StyledDropdown>\n    </Flex>\n  )\n}\n\nexport default CustomTimePeriod\n","import React from \"react\"\nimport DatePickerLib from \"react-datepicker\"\nimport \"react-datepicker/dist/react-datepicker.css\"\n\nconst DatePicker = ({\n  selected,\n  selectsStart = false,\n  selectsEnd = false,\n  startDate,\n  endDate,\n  onChange,\n  minDate,\n  maxDate,\n  dateFormat = \"MM/dd/yyyy\",\n  open = false,\n  startOpen = false,\n  inline = false,\n  selectsRange = false,\n  monthsShown = 1,\n  showPopperArrow = true,\n  calendarContainer = null,\n}) => (\n  <DatePickerLib\n    selected={selected}\n    onChange={onChange}\n    selectsStart={selectsStart}\n    selectsEnd={selectsEnd}\n    startDate={startDate}\n    endDate={endDate}\n    minDate={minDate}\n    maxDate={maxDate}\n    dateFormat={dateFormat}\n    open={open}\n    startOpen={startOpen}\n    inline={inline}\n    selectsRange={selectsRange}\n    monthsShown={monthsShown}\n    showPopperArrow={showPopperArrow}\n    calendarContainer={calendarContainer}\n  />\n)\n\nexport default DatePicker\n","import { getColor, getRgbColor } from \"@netdata/netdata-ui\"\nimport styled from \"styled-components\"\n\nexport const StyledDateInput = styled.input`\n  width: 100%;\n  text-align: center;\n  border: 1px solid ${getColor(\"border\")};\n  color: inherit;\n  background: ${getColor(\"mainBackground\")};\n  box-sizing: border-box;\n  border-radius: 4px;\n  padding: 4px;\n  height: 32px;\n  margin-left: 20px;\n  margin-right: 20px;\n  outline: none;\n  &:focus {\n    border: 1px solid ${getColor(\"primary\")};\n  }\n`\nexport const StyledCalendar = styled.div`\n  background: ${getColor(\"mainBackground\")};\n  border: 0;\n  .react-datepicker {\n    &__navigation {\n      top: 8px;\n      &-icon::before {\n        border-color: ${getColor(\"text\")};\n      }\n    }\n    &__header {\n      background: ${getColor(\"mainBackground\")};\n      border: 0;\n      .react-datepicker__current-month {\n        color: ${getColor(\"main\")};\n        font-weight: normal;\n      }\n      .react-datepicker__day-name {\n        color: ${getColor(\"textLite\")};\n      }\n    }\n    &__day {\n      color: ${getColor(\"main\")};\n      &:hover {\n        background: ${getColor(\"elementBackground\")};\n      }\n      &--disabled {\n        color: ${getColor(\"textLite\")};\n        &:hover {\n          background: inherit;\n        }\n      }\n      &--keyboard-selected,\n      &--keyboard-selected:hover {\n        color: ${getColor(\"main\")};\n        background: inherit;\n        border-radius: inherit;\n      }\n      &--selected,\n      &--selected:hover {\n        color: ${getColor(\"bright\")};\n        background: ${getColor(\"primary\")};\n        border-radius: 8px;\n      }\n      &--in-selecting-range,\n      &--in-range {\n        color: ${getColor(\"primary\")};\n        background: ${getColor(\"elementBackground\")};\n        border-radius: 0;\n      }\n      &--selecting-range-start,\n      &--range-start {\n        color: ${getColor(\"bright\")};\n        background: ${getColor(\"primary\")};\n        border-top-left-radius: 8px;\n        border-bottom-left-radius: 8px;\n        &:hover {\n          color: ${getColor(\"bright\")};\n          background: ${getRgbColor([\"green\", \"netdata\"], 0.8)};\n          border-radius: 0;\n          border-top-left-radius: 8px;\n          border-bottom-left-radius: 8px;\n        }\n      }\n      &--selecting-range-end,\n      &--range-end {\n        color: ${getColor(\"bright\")};\n        background: ${getColor(\"primary\")};\n        border-top-right-radius: 8px;\n        border-bottom-right-radius: 8px;\n        &:hover {\n          color: ${getColor(\"bright\")};\n          background: ${getRgbColor([\"green\", \"netdata\"], 0.8)};\n          border-top-right-radius: 8px;\n          border-bottom-right-radius: 8px;\n        }\n      }\n    }\n  }\n`\n","import React, { useState, useEffect, useCallback } from \"react\"\nimport { format, isValid, getTime } from \"date-fns\"\nimport { getDateWithOffset } from \"./utils\"\nimport { StyledDateInput } from \"../datePicker/styled\"\nimport { useDateTime } from \"@/src/utils/date-time\"\n\nconst DatePickerInput = ({\n  name = \"\",\n  value = \"\",\n  onDatesChange,\n  onFocus,\n  placeholderText = \"\",\n}) => {\n  const { utcOffset } = useDateTime()\n  const [inputValue, setInputValue] = useState(\"\")\n  const onChange = useCallback(e => {\n    const date = e.target.value\n    setInputValue(date)\n  }, [])\n  const setFormattedValue = useCallback(value => {\n    if (isValid(value)) {\n      const formattedDate = format(value, \"MMMM d yyyy, H:mm\")\n      setInputValue(formattedDate)\n    }\n  }, [])\n  const onBlur = useCallback(\n    e => {\n      const parsedDate = getDateWithOffset(e.target.value, utcOffset)\n      const isValidDate = isValid(parsedDate) && getTime(parsedDate) > 0\n      if (isValidDate) {\n        const timestamp = getTime(parsedDate)\n        onDatesChange(timestamp, () => setFormattedValue(value))\n      } else setFormattedValue(value)\n    },\n    [value, utcOffset, onDatesChange, setFormattedValue]\n  )\n\n  useEffect(() => setFormattedValue(value), [value, setFormattedValue])\n\n  return (\n    <StyledDateInput\n      type=\"text\"\n      name={name}\n      value={value ? inputValue : placeholderText}\n      onChange={onChange}\n      onBlur={onBlur}\n      onFocus={onFocus}\n      placeholder={placeholderText}\n      data-testid=\"datePicker-input\"\n    />\n  )\n}\n\nexport default DatePickerInput\n","import { useDateTime } from \"@/src/utils/date-time\"\nimport { useCallback } from \"react\"\n\nconst useLocaleDate = () => {\n  const { localeTimeString, localeDateString } = useDateTime()\n  return useCallback(\n    date => {\n      return `${localeDateString(date, { locale: \"en-us\", long: false })} ${localeTimeString(date, {\n        secs: false,\n      })}`\n    },\n    [localeTimeString, localeDateString]\n  )\n}\n\nexport default useLocaleDate\n","import { useMemo } from \"react\"\nimport { toDate } from \"date-fns\"\nimport useLocaleDate from \"./useLocaleDate\"\n\nexport const convertTimestampToDate = (timestamp, getLocaleDate) => {\n  if (timestamp > 0) {\n    return toDate(new Date(getLocaleDate(timestamp)))\n  } else if (timestamp || timestamp === 0)\n    return toDate(new Date(getLocaleDate(new Date().valueOf() + timestamp * 1000)))\n  return null\n}\n\nconst useConvertedDates = (startDate, endDate) => {\n  const getLocaleDate = useLocaleDate()\n  return useMemo(\n    () => [\n      convertTimestampToDate(startDate, getLocaleDate),\n      convertTimestampToDate(endDate, getLocaleDate),\n    ],\n    [startDate, endDate, getLocaleDate]\n  )\n}\n\nexport default useConvertedDates\n","import { Flex } from \"@netdata/netdata-ui\"\nimport React, { useCallback } from \"react\"\nimport { getTime, isBefore, format } from \"date-fns\"\nimport { useDateTime } from \"@/src/utils/date-time\"\nimport DatePicker from \"../datePicker/datePickerLib\"\nimport DatePickerInput from \"./datePickerInput\"\nimport useConvertedDates, { convertTimestampToDate } from \"./useConvertedDate\"\nimport useLocaleDate from \"./useLocaleDate\"\nimport { getDateWithOffset } from \"./utils\"\nimport { StyledCalendar } from \"../datePicker/styled\"\n\nconst DatePickerWrapper = ({\n  startDate,\n  setStartDate,\n  endDate,\n  setEndDate,\n  onDatesChange,\n  onInputFocus,\n}) => {\n  const getLocaleDate = useLocaleDate()\n  const [convertedStartDate, convertedEndDate] = useConvertedDates(startDate, endDate)\n  const { utcOffset } = useDateTime()\n  const setValidStartDate = useCallback(\n    (startDate, setPreviousValue) =>\n      isBefore(convertTimestampToDate(startDate, getLocaleDate), convertedEndDate)\n        ? setStartDate(startDate)\n        : setPreviousValue(),\n    [convertedEndDate, getLocaleDate, setStartDate]\n  )\n\n  const setValidEndDate = useCallback(\n    (endDate, setPreviousValue) =>\n      isBefore(convertedStartDate, convertTimestampToDate(endDate, getLocaleDate))\n        ? setEndDate(endDate)\n        : setPreviousValue(),\n    [convertedStartDate, getLocaleDate, setEndDate]\n  )\n\n  const onChange = useCallback(\n    dates => {\n      const [startDate, endDate] = dates\n\n      const startDateWithOffset = startDate\n        ? getDateWithOffset(format(startDate, \"MMMM d yyyy, H:mm\"), utcOffset)\n        : startDate\n      const endDateWithOffset = endDate\n        ? getDateWithOffset(format(endDate, \"MMMM d yyyy, H:mm\"), utcOffset)\n        : endDate\n\n      const startDateTimestamp = getTime(startDateWithOffset) || null\n      const endDateTimestamp = getTime(endDateWithOffset) || null\n\n      onDatesChange(startDateTimestamp, endDateTimestamp)\n    },\n    [utcOffset, onDatesChange]\n  )\n\n  return (\n    <Flex\n      column\n      justifyContent=\"center\"\n      alignItems=\"center\"\n      flex={{ grow: 1 }}\n      gap={3}\n      margin={[0, 0, 0, 7]}\n      data-testid=\"datePicker-wrapper\"\n    >\n      <DatePicker\n        selected={convertedStartDate}\n        onChange={onChange}\n        startDate={convertedStartDate}\n        endDate={convertedEndDate}\n        maxDate={new Date()}\n        minDate={new Date(\"1/1/2018\")}\n        inline\n        selectsRange\n        monthsShown={2}\n        dateFormat=\"MMMM d yyyy, H:mm\"\n        showPopperArrow={false}\n        calendarContainer={StyledCalendar}\n      />\n      <Flex justifyContent=\"around\" alignItems=\"center\" width=\"100%\">\n        <DatePickerInput\n          name=\"startDate\"\n          value={convertedStartDate}\n          onDatesChange={setValidStartDate}\n          onFocus={onInputFocus}\n          placeholderText=\"Select a start date\"\n        />\n        <DatePickerInput\n          name=\"endDate\"\n          value={convertedEndDate}\n          onDatesChange={setValidEndDate}\n          onFocus={onInputFocus}\n          placeholderText=\"Select an end date\"\n        />\n      </Flex>\n    </Flex>\n  )\n}\n\nexport default DatePickerWrapper\n","import React, { useMemo } from \"react\"\nimport { Flex, Icon, TextSmall } from \"@netdata/netdata-ui\"\nimport { formatDates, getTimePeriod } from \"./utils\"\nimport useConvertedDates from \"./useConvertedDate\"\n\nconst PeriodIndication = ({ startDate, endDate }) => {\n  const [convertedStart, convertedEnd] = useConvertedDates(startDate, endDate)\n\n  const { formattedStartDate, formattedEndDate } = useMemo(\n    () => formatDates(convertedStart, convertedEnd),\n    [convertedStart, convertedEnd]\n  )\n  const timePeriod = useMemo(\n    () => getTimePeriod(convertedStart, convertedEnd),\n    [convertedStart, convertedEnd]\n  )\n\n  return (\n    <Flex alignItems=\"center\" justifyContent=\"between\" gap={2}>\n      <Flex alignItems=\"center\" justifyContent=\"center\" gap={1.5}>\n        <TextSmall strong whiteSpace=\"nowrap\">\n          From\n        </TextSmall>\n        <TextSmall whiteSpace=\"nowrap\" data-testid=\"periodIndication-from\">\n          {formattedStartDate}\n        </TextSmall>\n      </Flex>\n      <Icon name=\"arrow_left\" size=\"small\" color=\"textLite\" rotate={2} />\n      <Flex alignItems=\"center\" justifyContent=\"center\" gap={1.5}>\n        <TextSmall strong whiteSpace=\"nowrap\">\n          To\n        </TextSmall>\n        <TextSmall whiteSpace=\"nowrap\" data-testid=\"periodIndication-to\">\n          {formattedEndDate}\n        </TextSmall>\n      </Flex>\n      <Flex alignItems=\"center\" justifyContent=\"center\" gap={2}>\n        <TextSmall whiteSpace=\"nowrap\">/</TextSmall>\n        <TextSmall color=\"textLite\" whiteSpace=\"nowrap\" data-testid=\"periodIndication-period\">\n          {timePeriod}\n        </TextSmall>\n      </Flex>\n    </Flex>\n  )\n}\n\nexport default PeriodIndication\n","import moment from \"moment\"\n\nexport const SECONDS = 1000\nexport const MINUTE = SECONDS * 60\nexport const HOUR = MINUTE * 60\nexport const DAY = HOUR * 24\nexport const MONTH = DAY * 30\n\nconst resolutionMap = [\n  { value: DAY, unit: \"d\" },\n  { value: HOUR, unit: \"h\" },\n  { value: MINUTE, unit: \"min\" },\n  { value: MINUTE, unit: \"min\" },\n  { value: SECONDS, unit: \"s\" },\n]\n\nexport const getStartDate = start =>\n  start < 0 ? moment(new Date()).add(start, \"seconds\") : moment(start)\nexport const getEndDate = end => (!end ? moment(new Date()) : moment(end))\nexport const getIsSameDate = (startDate, endDate) => startDate.isSame(endDate, \"day\")\nexport const getDuration = (startDate, endDate) => moment.duration(startDate.diff(endDate))\n\nconst getResolution = (value, resolution) => (value > 1 ? `${Math.floor(value)}${resolution}` : \"\")\n\nexport const getGranularDuration = duration => {\n  let seconds = Math.abs(duration)\n  const showSeconds = seconds < MINUTE\n  return resolutionMap.reduce((acc, { value, unit }) => {\n    if (value === SECONDS && !showSeconds) return acc\n    acc = acc + getResolution(seconds / value, unit)\n    seconds = seconds % value\n    return acc\n  }, \"\")\n}","import styled from \"styled-components\"\nimport { Flex, getColor } from \"@netdata/netdata-ui\"\n\nconst Container = styled(Flex)`\n  cursor: pointer;\n\n  &:hover * {\n    color: ${getColor(\"textLite\")};\n    fill: ${getColor(\"textLite\")};\n  }\n`\n\nexport default Container\n","import React from \"react\"\nimport { Flex, TextSmall, Icon } from \"@netdata/netdata-ui\"\nimport { useDateTime } from \"utils/date-time\"\n\nconst DateBox = ({ isPlaying, startDate, endDate, isSameDate }) => {\n  const { localeTimeString, localeDateString } = useDateTime()\n  return (\n    <Flex gap={2}>\n      <TextSmall color=\"text\" whiteSpace=\"nowrap\">\n        {localeDateString(startDate, { long: false })} •{\" \"}\n        <TextSmall color={isPlaying ? \"accent\" : \"textFocus\"} whiteSpace=\"nowrap\">\n          {localeTimeString(startDate, { secs: false })}\n        </TextSmall>\n      </TextSmall>\n      <Icon name=\"arrow_left\" color={isPlaying ? \"accent\" : \"textFocus\"} size=\"small\" rotate={2} />\n      <TextSmall color=\"text\" whiteSpace=\"nowrap\">\n        {!isSameDate && `${localeDateString(endDate, { long: false })} • `}\n        <TextSmall color={isPlaying ? \"accent\" : \"textFocus\"} whiteSpace=\"nowrap\">\n          {localeTimeString(endDate, { secs: false })}\n        </TextSmall>\n      </TextSmall>\n    </Flex>\n  )\n}\n\nexport default DateBox\n","import React from \"react\"\nimport { Flex, TextSmall } from \"@netdata/netdata-ui\"\n\nconst DurationBox = ({ isPlaying, duration }) => {\n  return (\n    <Flex gap={1}>\n      <Flex width=\"24px\" justifyContent=\"center\">\n        {isPlaying && (\n          <TextSmall color=\"text\" whiteSpace=\"nowrap\">\n            • last\n          </TextSmall>\n        )}\n      </Flex>\n      <TextSmall color=\"text\" whiteSpace=\"nowrap\">\n        {duration}\n      </TextSmall>\n    </Flex>\n  )\n}\n\nexport default DurationBox\n","import React, { useState, useMemo, useEffect, forwardRef } from \"react\"\nimport Tooltip from \"@/src/components/tooltips\"\nimport { useSelector as useDashboardSelector } from \"store/redux-separate-context\"\nimport { selectGlobalPanAndZoom } from \"domains/global/selectors\"\nimport {\n  getStartDate,\n  getEndDate,\n  getIsSameDate,\n  getDuration,\n  MINUTE,\n  getGranularDuration,\n} from \"./utils\"\nimport Container from \"./container\"\nimport DateBox from \"./dateBox\"\nimport DurationBox from \"./durationBox\"\n\nconst PickerAccessorElement = forwardRef(\n  (\n    { onClick, start = 15 * MINUTE, end, isPlaying, isPickerOpen, setRangeValues, tagging },\n    ref\n  ) => {\n    const [timeframe, setTimeframe] = useState()\n    const startDate = getStartDate(start)\n    const endDate = getEndDate(end)\n    const globalPanAndZoom = useDashboardSelector(selectGlobalPanAndZoom)\n    useEffect(() => {\n      const after = getDuration(startDate, endDate).as(\"seconds\")\n      if (!isPlaying && timeframe !== after) setTimeframe(Math.round(after))\n      if (isPlaying && timeframe && !!globalPanAndZoom) {\n        setRangeValues({ start: Math.round(timeframe) })\n        setTimeframe(null)\n      }\n      // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [startDate, endDate, timeframe, isPlaying])\n\n    const isSameDate = useMemo(() => getIsSameDate(startDate, endDate), [startDate, endDate])\n    const duration = useMemo(\n      () => getGranularDuration(getDuration(startDate, endDate).as(\"milliseconds\")),\n      // eslint-disable-next-line react-hooks/exhaustive-deps\n      [isPlaying, startDate, endDate]\n    )\n\n    return (\n      <Tooltip\n        content={isPickerOpen ? () => {} : \"Select a predefined or a custom timeframe\"}\n        align=\"bottom\"\n        plain\n      >\n        <Container\n          alignItems=\"center\"\n          justifyContent=\"center\"\n          gap={1}\n          height=\"100%\"\n          width={{ min: \"380px\" }}\n          onMouseDown={onClick}\n          padding={[0, 1]}\n          ref={ref}\n          data-ga={`date-picker::click-time::${tagging}`}\n          data-testid=\"datePicker-accessorElement\"\n        >\n          <DateBox\n            isPlaying={isPlaying}\n            endDate={endDate}\n            startDate={startDate}\n            isSameDate={isSameDate}\n          />\n          <DurationBox isPlaying={isPlaying} duration={duration} />\n        </Container>\n      </Tooltip>\n    )\n  }\n)\n\nexport default PickerAccessorElement\n","import React, { useState, useEffect, useMemo, useRef, useCallback } from \"react\"\nimport { Button, Flex } from \"@netdata/netdata-ui\"\nimport useToggle from \"hooks/useToggle\"\nimport useLocalStorage from \"hooks/useLocalStorage\"\nimport TimePeriods from \"./timePeriods\"\nimport CustomTimePeriod from \"./customTimePeriod\"\nimport DatePickerWrapper from \"./datePickerWrapper\"\nimport { getFocusTagging } from \"./utils\"\nimport PeriodIndication from \"./periodIndication\"\nimport AccessorElement from \"./accessorElement\"\nimport { PickerBox, StyledDrop, StyledHR } from \"./styled\"\n\nexport const reportEvent = (\n  eventCategory,\n  eventAction,\n  eventLabel,\n  eventValue,\n  event = \"gaCustomEvent\"\n) => {\n  if (window.dataLayer) {\n    const eventData = { event, eventCategory, eventAction, eventLabel, eventValue }\n    window.dataLayer.push(eventData)\n  }\n}\n\nconst DatePickerDrop = ({\n  onChange,\n  values: { start: initialStartDate, end: initialEndDate } = {},\n  defaultValue = -60 * 15,\n  tagging = \"\",\n  isPlaying,\n}) => {\n  const [startDate, setStartDate] = useState(initialStartDate)\n  const [endDate, setEndDate] = useState(initialStartDate)\n  const [resolution, setResolution] = useLocalStorage(\"resolution\", \"minutes\")\n  const [focusedInput, setFocusedInput] = useState(\"startDate\")\n  const [isOpen, toggle, , close] = useToggle()\n  const ref = useRef()\n\n  const setDates = useCallback(({ startDate, endDate }) => {\n    setStartDate(startDate)\n    setEndDate(endDate)\n  }, [])\n\n  useEffect(() => {\n    setDates({\n      startDate: initialStartDate,\n      endDate: initialEndDate,\n    })\n  }, [initialStartDate, initialEndDate, setDates])\n\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  const clearChanges = useCallback(() => setDates({ startDate: defaultValue, endDate: 0 }), [])\n\n  const onInputFocus = useCallback(e => {\n    if (!e.target.name) return\n    setFocusedInput(e.target.name)\n  }, [])\n\n  const togglePicker = useCallback(\n    e => {\n      e.stopPropagation()\n      toggle()\n    },\n    [toggle]\n  )\n\n  const applyChanges = () => {\n    onChange({\n      start: startDate,\n      end: endDate,\n    })\n    close()\n  }\n\n  const focusTagging = useMemo(() => getFocusTagging(focusedInput), [focusedInput])\n\n  const isValidTimePeriod = startDate !== null && endDate !== null && startDate !== endDate\n  const isApplyDisabled = startDate === initialStartDate && endDate === initialEndDate\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  const consistentDefaultValue = useMemo(() => defaultValue, [])\n  const isClearDisabled = startDate === consistentDefaultValue\n\n  const handleTimePeriodChange = useCallback(\n    (time, resolution) => {\n      setResolution(resolution)\n      setDates({\n        startDate: time,\n        endDate: 0,\n      })\n    },\n    [setDates, setResolution]\n  )\n  const onDatepickerChange = (startDate, endDate) => {\n    setDates({ startDate, endDate })\n    const date = focusTagging === \"finish\" ? endDate || startDate : startDate || endDate\n    reportEvent(\"date-picker\", \"click-date-picker\", tagging, String(date))\n  }\n\n  const pickerDrop =\n    ref.current && isOpen ? (\n      <StyledDrop\n        target={ref.current}\n        canHideTarget={false}\n        align={{ top: \"bottom\", left: \"left\" }}\n        onEsc={close}\n        onClickOutside={close}\n      >\n        <PickerBox data-testid=\"datePicker\">\n          <Flex justifyContent=\"between\" alignItems=\"center\" width=\"100%\" padding={[6, 6, 0, 6]}>\n            <Flex column gap={3} margin={[0, 7, 0, 0]}>\n              <TimePeriods\n                handleTimePeriodChange={handleTimePeriodChange}\n                selectedDate={startDate}\n                tagging={tagging}\n              />\n              <CustomTimePeriod\n                handleTimePeriodChange={handleTimePeriodChange}\n                value={startDate}\n                resolution={resolution}\n                tagging={tagging}\n              />\n            </Flex>\n            <StyledHR />\n            <DatePickerWrapper\n              startDate={startDate}\n              endDate={endDate}\n              setStartDate={setStartDate}\n              setEndDate={setEndDate}\n              onDatesChange={onDatepickerChange}\n              onInputFocus={onInputFocus}\n            />\n          </Flex>\n          <Flex\n            alignItems=\"center\"\n            justifyContent={isValidTimePeriod ? \"between\" : \"end\"}\n            width=\"100%\"\n            padding={[5, 6]}\n            gap={2}\n          >\n            {isValidTimePeriod && <PeriodIndication startDate={startDate} endDate={endDate} />}\n            <Flex alignItems=\"center\" justifyContent=\"center\" gap={4}>\n              <Button\n                label=\"Clear\"\n                flavour=\"hollow\"\n                onClick={clearChanges}\n                disabled={isClearDisabled}\n                data-ga={`date-picker::click-clear::${tagging}-${focusTagging}`}\n                data-testid=\"datePicker-clear\"\n              />\n              <Button\n                label=\"Apply\"\n                onClick={applyChanges}\n                disabled={!isValidTimePeriod || isApplyDisabled}\n                data-ga={`date-picker::click-apply::${tagging}-${focusTagging}`}\n                data-testid=\"datePicker-apply\"\n              />\n            </Flex>\n          </Flex>\n        </PickerBox>\n      </StyledDrop>\n    ) : null\n\n  return (\n    <>\n      <AccessorElement\n        onClick={togglePicker}\n        tagging={tagging}\n        isPickerOpen={isOpen}\n        isPlaying={isPlaying}\n        setRangeValues={onChange}\n        start={initialStartDate}\n        end={initialEndDate}\n        ref={ref}\n      />\n      {pickerDrop}\n    </>\n  )\n}\n\nexport default DatePickerDrop\n","import React, { memo, useEffect, useMemo } from \"react\"\nimport {\n  useDispatch as useDashboardDispatch,\n  useSelector as useDashboardSelector,\n} from \"store/redux-separate-context\"\nimport {\n  resetGlobalPanAndZoomAction,\n  setGlobalPanAndZoomAction,\n  setDefaultAfterAction,\n} from \"domains/global/actions\"\nimport { selectDefaultAfter, selectGlobalPanAndZoom } from \"domains/global/selectors\"\nimport { setHashParams } from \"utils/hash-utils\"\nimport DatePickerDrop from \"./datePickerDrop\"\n\nconst ReduxDatePickerContainer = memo(({ tagging, isPlaying }) => {\n  const dashboardDispatch = useDashboardDispatch()\n\n  const globalPanAndZoom = useDashboardSelector(selectGlobalPanAndZoom)\n  const isGlobalPanAndZoom = Boolean(globalPanAndZoom)\n\n  const defaultAfter = useDashboardSelector(selectDefaultAfter)\n  const pickedValues = useMemo(\n    () =>\n      isGlobalPanAndZoom\n        ? { start: globalPanAndZoom.after, end: globalPanAndZoom.before }\n        : {\n            start: defaultAfter,\n            end: 0,\n          },\n    [isGlobalPanAndZoom, globalPanAndZoom, defaultAfter]\n  )\n\n  function handlePickedValuesChange(params) {\n    const { start, end } = params\n    if (start < 0) {\n      // live mode\n      dashboardDispatch(\n        // changes the default value, so it becomes inconsistent\n        setDefaultAfterAction({\n          after: start,\n        })\n      )\n      if (isGlobalPanAndZoom) {\n        dashboardDispatch(resetGlobalPanAndZoomAction())\n      }\n    } else {\n      // global-pan-and-zoom mode\n      dashboardDispatch(\n        setGlobalPanAndZoomAction({\n          after: start,\n          before: end,\n        })\n      )\n    }\n  }\n\n  useEffect(() => {\n    const { start, end } = pickedValues\n    const after = start.toString()\n    const before = end.toString()\n    if (window.urlOptions.after !== after || window.urlOptions.before !== before) {\n      window.urlOptions.netdataPanAndZoomCallback(true, after, before)\n    }\n    setHashParams({ after, before })\n  }, [pickedValues])\n  return (\n    <DatePickerDrop\n      values={pickedValues}\n      defaultValue={defaultAfter}\n      onChange={handlePickedValuesChange}\n      tagging={tagging}\n      isPlaying={isPlaying}\n    />\n  )\n})\n\nexport default ReduxDatePickerContainer\n","import styled from \"styled-components\"\nimport { Flex, getRgbColor } from \"@netdata/netdata-ui\"\n\nconst getBackground = ({ theme, isPlaying }) => {\n  const { name } = theme\n\n  const background =\n    name === \"Dark\"\n      ? getRgbColor(isPlaying ? [\"green\", \"netdata\"] : [\"neutral\", \"tuna\"], isPlaying ? 0.3 : 1)\n      : getRgbColor(isPlaying ? [\"green\", \"frostee\"] : [\"neutral\", \"blackhaze\"])\n\n  return background({ theme })\n}\n\nconst Container = styled(Flex)`\n  background: ${getBackground};\n`\n\nexport default Container\n","import styled from \"styled-components\"\nimport { Pill, getColor } from \"@netdata/netdata-ui\"\n\nconst getHoverColor = ({ isPlaying }) =>\n  getColor(isPlaying ? [\"green\", \"chateau\"] : [\"neutral\", \"iron\"])\n\nconst StyledPill = styled(Pill).attrs(({ isPlaying }) => ({\n  flavour: isPlaying ? \"success\" : \"neutral\",\n}))`\n  &:hover {\n    background: ${getHoverColor};\n    border-color: ${getHoverColor};\n  }\n`\n\nexport default StyledPill\n","import React, { useMemo } from \"react\"\nimport { useDispatch } from \"store/redux-separate-context\"\nimport { resetGlobalPauseAction, setGlobalPauseAction } from \"domains/global/actions\"\nimport Tooltip from \"@/src/components/tooltips\"\nimport StyledPill from \"./styledPill\"\n\nconst getIcon = (isPlaying, isForcePlaying) => {\n  if (!isPlaying) return \"pauseSolid\"\n  return isForcePlaying ? \"forcePlay\" : \"playSolid\"\n}\n\nconst PlayPausePill = ({ isPlaying, isForcePlaying }) => {\n  const dispatch = useDispatch()\n\n  const onPlay = () => dispatch(resetGlobalPauseAction({ forcePlay: false }))\n  const onPause = () => dispatch(setGlobalPauseAction())\n  const icon = useMemo(() => getIcon(isPlaying, isForcePlaying), [isPlaying, isForcePlaying])\n\n  return (\n    <Tooltip content={isPlaying ? \"Click to pause\" : \"Click to play\"} align=\"bottom\" plain>\n      <StyledPill icon={icon} onClick={isPlaying ? onPause : onPlay} isPlaying={isPlaying}>\n        {isPlaying ? \"Playing\" : \"Paused\"}\n      </StyledPill>\n    </Tooltip>\n  )\n}\n\nexport default PlayPausePill\n","import React, { useCallback, forwardRef } from \"react\"\nimport styled from \"styled-components\"\nimport { getColor, Flex, Icon, Text } from \"@netdata/netdata-ui\"\n\nexport const PanelRowContainer = styled(Flex)`\n  cursor: pointer;\n\n  &:hover {\n    background: ${getColor(\"selected\")};\n  }\n\n  ${props => props.selected && `background: ${getColor(\"selected\")(props)};`}\n`\n\nconst MenuItem = forwardRef(\n  (\n    {\n      disabled,\n      children,\n      Wrapper = Text,\n      onClick,\n      testid,\n      icon,\n      padding = [2, 3],\n      margin = [0],\n      round = 0,\n      actions,\n      selected,\n      width = \"100%\",\n    },\n    ref\n  ) => {\n    const click = useCallback(() => {\n      if (disabled) return\n      if (onClick) onClick()\n    }, [onClick, disabled])\n\n    return (\n      <PanelRowContainer\n        ref={ref}\n        flexWrap={false}\n        justifyContent=\"between\"\n        alignItems=\"center\"\n        padding={padding}\n        margin={margin}\n        round={round}\n        onClick={click}\n        data-testid={testid}\n        width={width}\n        selected={selected}\n        disabled={disabled}\n      >\n        <Flex alignItems=\"center\" gap={3} flex basis=\"\">\n          {typeof icon === \"string\" ? (\n            <Icon name={icon} disabled={disabled} color=\"text\" height=\"16px\" width=\"16px\" />\n          ) : (\n            icon\n          )}\n          <Wrapper opacity={disabled ? \"medium\" : undefined} width=\"150px\">\n            {children}\n          </Wrapper>\n        </Flex>\n        {actions}\n      </PanelRowContainer>\n    )\n  }\n)\n\nexport default MenuItem\n","import React from \"react\"\nimport styled from \"styled-components\"\nimport { Flex, H4, Collapsible } from \"@netdata/netdata-ui\"\n\nexport const DefaultListHeader = styled(H4).attrs({ padding: [0], margin: [0] })`\n  cursor: pointer;\n`\n\nconst SectionHandle = ({ toggleOpen, label, testid, Header = DefaultListHeader }) => (\n  <Header data-testid={testid} onClick={toggleOpen}>\n    {label}\n  </Header>\n)\n\nconst ItemsList = ({ isOpen = false, toggleOpen, label, children, testid, Header }) => (\n  <Flex column>\n    <SectionHandle Header={Header} toggleOpen={toggleOpen} label={label} testid={testid} />\n    <Collapsible open={isOpen}>{children}</Collapsible>\n  </Flex>\n)\n\nexport default ItemsList\n","import React from \"react\"\nimport { Flex, TextSmall } from \"@netdata/netdata-ui\"\n\nconst PlayOptionsTooltip = () => (\n  <Flex\n    padding={[1, 2]}\n    margin={[1]}\n    background={[\"neutral\", \"black\"]}\n    round={1}\n    justifyContent=\"center\"\n    width={{ max: \"320px\" }}\n  >\n    <TextSmall color=\"bright\">\n      Play to refresh and have live content, pause to see historical, or force play to keep\n      refreshing even when the tab loses focus at the expense of some system performance.\n    </TextSmall>\n  </Flex>\n)\n\nexport default PlayOptionsTooltip\n","import styled from \"styled-components\"\nimport { Flex } from \"@netdata/netdata-ui\"\n\nexport const Divider = styled(Flex).attrs({\n  bacgkround: \"disabled\",\n  height: \"1px\",\n  margin: [2, 6],\n})``\n","import React, { memo, Fragment } from \"react\"\nimport styled from \"styled-components\"\nimport { useToggle } from \"react-use\"\nimport { Flex, Icon, Drop } from \"@netdata/netdata-ui\"\nimport { MenuItem } from \"@/src/components/menus\"\nimport { useDispatch } from \"store/redux-separate-context\"\nimport { resetGlobalPauseAction, setGlobalPauseAction } from \"domains/global/actions\"\nimport Tooltip from \"@/src/components/tooltips\"\nimport PlayOptionsTooltip from \"./playOptionsTooltip\"\n\nconst MenuButton = styled(Flex).attrs({ padding: [1], role: \"button\" })`\n  cursor: pointer;\n`\n\nconst Dropdown = styled(Flex).attrs({\n  column: true,\n  padding: [2],\n  background: \"dropdown\",\n  round: 1,\n  overflow: { vertical: \"auto\" },\n  margin: [2, 0, 0],\n  width: 40,\n})`\n  box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25);\n`\n\nconst PlayOptions = ({ target }) => {\n  const dispatch = useDispatch()\n  const [isOpen, toggle] = useToggle()\n\n  const close = () => toggle(false)\n\n  const onPlay = () => {\n    dispatch(resetGlobalPauseAction({ forcePlay: false }))\n    close()\n  }\n\n  const onPause = () => {\n    dispatch(setGlobalPauseAction())\n    close()\n  }\n\n  const onForcePlay = () => {\n    dispatch(resetGlobalPauseAction({ forcePlay: true }))\n    close()\n  }\n\n  return (\n    <Fragment>\n      {!isOpen ? (\n        <Tooltip content={<PlayOptionsTooltip />} align=\"bottom\" plain>\n          <MenuButton onClick={toggle} width=\"auto\">\n            <Icon name=\"chevron_down\" color=\"text\" width=\"12px\" height=\"12px\" />\n          </MenuButton>\n        </Tooltip>\n      ) : (\n        <MenuButton onClick={toggle} width=\"auto\">\n          <Icon name=\"chevron_down\" color=\"text\" width=\"12px\" height=\"12px\" />\n        </MenuButton>\n      )}\n      {target.current && isOpen && (\n        <Drop\n          target={target.current}\n          align={{ top: \"bottom\", left: \"left\" }}\n          onEsc={close}\n          onClickOutside={close}\n          animation\n        >\n          <Dropdown>\n            <MenuItem round={1} icon=\"playOutline\" onClick={onPlay}>\n              Play\n            </MenuItem>\n            <MenuItem round={1} icon=\"pauseOutline\" onClick={onPause}>\n              Pause\n            </MenuItem>\n            <MenuItem round={1} icon=\"forcePlayOutline\" onClick={onForcePlay}>\n              Force Play\n            </MenuItem>\n          </Dropdown>\n        </Drop>\n      )}\n    </Fragment>\n  )\n}\n\nconst MemoizedPlayOptions = memo(PlayOptions)\n\nexport default MemoizedPlayOptions\n","import React, { useMemo, useRef } from \"react\"\nimport { useSelector } from \"store/redux-separate-context\"\nimport {\n  selectHasWindowFocus,\n  selectStopUpdatesWhenFocusIsLost,\n  selectGlobalPanAndZoom,\n  selectGlobalPause,\n  selectGlobalSelection,\n} from \"domains/global/selectors\"\nimport { ReduxDatePickerContainer } from \"components/date-picker\"\nimport Item from \"../item\"\nimport Container from \"./container\"\nimport PlayPausePill from \"./playPausePill\"\nimport PlayOptions from \"./playOptions\"\n\nconst tagging = \"global-view\"\n\nconst GlobalControls = () => {\n  const ref = useRef()\n  const hasWindowFocus = useSelector(selectHasWindowFocus)\n  const stopUpdatesWhenFocusIsLost = useSelector(selectStopUpdatesWhenFocusIsLost)\n  const globalPanAndZoom = useSelector(selectGlobalPanAndZoom)\n  const hoveredX = useSelector(selectGlobalSelection)\n  const globalPause = useSelector(selectGlobalPause)\n\n  const isPlaying = useMemo(\n    () =>\n      Boolean(\n        (hasWindowFocus || !stopUpdatesWhenFocusIsLost) &&\n          !globalPanAndZoom &&\n          !hoveredX &&\n          !globalPause\n      ),\n    [hasWindowFocus, stopUpdatesWhenFocusIsLost, globalPanAndZoom, hoveredX, globalPause]\n  )\n\n  return (\n    <Item hasBorder>\n      <Container\n        isPlaying={isPlaying}\n        padding={[2, 2]}\n        round\n        height=\"100%\"\n        alignItems=\"center\"\n        gap={1}\n        ref={ref}\n      >\n        <PlayPausePill isPlaying={isPlaying} isForcePlaying={!stopUpdatesWhenFocusIsLost} />\n        <PlayOptions target={ref} />\n        <ReduxDatePickerContainer isPlaying={isPlaying} tagging={tagging} />\n      </Container>\n    </Item>\n  )\n}\n\nexport default GlobalControls\n","import styled from \"styled-components\"\nimport { Flex } from \"@netdata/netdata-ui\"\n\nconst hollowColors = {\n  warning: \"#FFF8E1\",\n  error: \"#FFEBEF\",\n}\n\nconst StyledPill = styled(Flex).attrs(({ round = 999, hollow, background }) => ({\n  padding: [0.5, 2],\n  round,\n  border: hollow ? { side: \"all\", color: background, size: \"1px\" } : false,\n}))`\n  background: ${({ background, hollow }) => (hollow ? hollowColors[background] : background)};\n  cursor: pointer;\n`\n\nexport default StyledPill\n","import React, { forwardRef } from \"react\"\nimport { TextMicro } from \"@netdata/netdata-ui\"\nimport StyledPill from \"./styled\"\n\nconst Pill = forwardRef(({ children, background, color, hollow, ...rest }, ref) => (\n  <StyledPill background={background} hollow={hollow} ref={ref} {...rest}>\n    <TextMicro color={hollow ? background : color} strong>\n      {children}\n    </TextMicro>\n  </StyledPill>\n))\n\nexport default Pill\n","import React, { useMemo } from \"react\"\nimport { useSelector } from \"store/redux-separate-context\"\nimport { selectActiveAlarms } from \"domains/global/selectors\"\nimport Item from \"./item\"\nimport Pill from \"./pill\"\nimport Tooltip from \"@/src/components/tooltips\"\n\nconst pillProps = {\n  \"data-toggle\": \"modal\",\n  \"data-target\": \"#alarmsModal\",\n}\n\nconst Alarms = () => {\n  const activeAlarms = useSelector(selectActiveAlarms)\n\n  const alarms = useMemo(() => (activeAlarms ? Object.values(activeAlarms.alarms) : []), [\n    activeAlarms,\n  ])\n\n  const { critical, warning } = useMemo(\n    () =>\n      alarms.reduce(\n        (acc, { status }) => {\n          if (status === \"CRITICAL\") acc.critical = acc.critical + 1\n          if (status === \"WARNING\") acc.warning = acc.warning + 1\n          return acc\n        },\n        { critical: 0, warning: 0 }\n      ),\n    [alarms]\n  )\n\n  return (\n    <Item icon=\"alarm\">\n      <Tooltip\n        content={\n          critical\n            ? `${critical} critical alert${critical.length > 1 ? \"s\" : \"\"}`\n            : \"No critical alerts\"\n        }\n        align=\"bottom\"\n        plain\n      >\n        <Pill background=\"error\" hollow {...pillProps}>\n          {critical}\n        </Pill>\n      </Tooltip>\n      <Tooltip\n        content={\n          warning ? `${warning} warning alert${warning.length > 1 ? \"s\" : \"\"}` : \"No warning alerts\"\n        }\n        align=\"bottom\"\n        plain\n      >\n        <Pill background=\"warning\" hollow {...pillProps}>\n          {warning}\n        </Pill>\n      </Tooltip>\n    </Item>\n  )\n}\n\nexport default Alarms\n","import React from \"react\"\nimport { Button, News as AgentNews } from \"@netdata/netdata-ui\"\nimport Tooltip from \"@/src/components/tooltips\"\n\nconst News = () => {\n  return (\n    <AgentNews app=\"agent\">\n      {({ toggle, upToDate }) => (\n        <Tooltip content=\"News\" align=\"bottom\" plain>\n          <Button\n            data-testid=\"header-news-button\"\n            themeType=\"dark\"\n            name=\"news\"\n            icon=\"insights\"\n            flavour=\"borderless\"\n            neutral={upToDate}\n            warning={!upToDate}\n            onClick={toggle}\n          />\n        </Tooltip>\n      )}\n    </AgentNews>\n  )\n}\n\nexport default News\n","import styled from \"styled-components\"\nimport { Flex } from \"@netdata/netdata-ui\"\n\nconst Dropdown = styled(Flex).attrs({\n  column: true,\n  padding: [2],\n  background: \"dropdown\",\n  round: 1,\n  overflow: { vertical: \"auto\" },\n  margin: [2, 0, 0],\n  width: 80,\n})`\n  box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25);\n`\n\nexport default Dropdown\n","import styled from \"styled-components\"\nimport { TextInput } from \"@netdata/netdata-ui\"\n\nconst SearchInput = styled(TextInput)`\n  & input {\n    background: transparent;\n  }\n\n  & > label {\n    margin-bottom: 0;\n  }\n`\nexport default SearchInput\n","import React, { forwardRef } from \"react\"\nimport SearchInput from \"./searchInput\"\n\nconst Search = forwardRef(({ value, onChange }, ref) => (\n  <SearchInput inputRef={ref} value={value} onChange={onChange} placeholder=\"Search\" metaShrinked />\n))\n\nexport default Search\n","import styled from \"styled-components\"\nimport { Flex } from \"@netdata/netdata-ui\"\n\nconst Container = styled(Flex).attrs({\n  column: true,\n  padding: [2, 0, 0],\n  overflow: { vertical: \"auto\" },\n  height: { max: \"320px\" },\n})``\n\nexport default Container\n","import styled from \"styled-components\"\nimport { Flex } from \"@netdata/netdata-ui\"\n\nconst Wrapper = styled(Flex).attrs({\n  justifyContent: \"between\",\n  alignItems: \"center\",\n  width: \"100%\",\n  gap: 2,\n})``\n\nexport default Wrapper\n","import React, { useCallback } from \"react\"\nimport { Text } from \"@netdata/netdata-ui\"\nimport { MenuItem } from \"@/src/components/menus\"\nimport Wrapper from \"./wrapper\"\n\nconst OffsetItem = ({ name, offset, utc, onSelect }) => {\n  const onClick = useCallback(() => onSelect(utc), [utc, onSelect])\n\n  return (\n    <MenuItem round={1} onClick={onClick} Wrapper={Wrapper}>\n      <Text color=\"text\">{name}</Text>\n      <Text color=\"textLite\" whiteSpace=\"nowrap\">\n        UTC {offset}\n      </Text>\n    </MenuItem>\n  )\n}\n\nexport default OffsetItem\n","export const timezones = [\n  {\n    value: \"Dateline Standard Time\",\n    abbr: \"DST\",\n    text: \"International Date Line West\",\n    utc: [\"Etc/GMT+12\"],\n  },\n  {\n    value: \"UTC-11\",\n    abbr: \"U\",\n    text: \"Coordinated Universal Time-11\",\n    utc: [\"Etc/GMT+11\", \"Pacific/Midway\", \"Pacific/Niue\", \"Pacific/Pago_Pago\"],\n  },\n  {\n    value: \"Hawaiian Standard Time\",\n    abbr: \"HST\",\n    text: \"Hawaii\",\n    utc: [\n      \"Etc/GMT+10\",\n      \"Pacific/Honolulu\",\n      \"Pacific/Johnston\",\n      \"Pacific/Rarotonga\",\n      \"Pacific/Tahiti\",\n    ],\n  },\n  {\n    value: \"Alaskan Standard Time\",\n    abbr: \"AKDT\",\n    text: \"Alaska\",\n    utc: [\n      \"America/Anchorage\",\n      \"America/Juneau\",\n      \"America/Nome\",\n      \"America/Sitka\",\n      \"America/Yakutat\",\n    ],\n  },\n  {\n    value: \"Pacific Standard Time (Mexico)\",\n    abbr: \"PDT\",\n    text: \"Baja California\",\n    utc: [\"America/Santa_Isabel\"],\n  },\n  {\n    value: \"Pacific Standard Time\",\n    abbr: \"PST\",\n    text: \"Pacific Time (US & Canada)\",\n    utc: [\n      \"America/Dawson\",\n      \"America/Los_Angeles\",\n      \"America/Tijuana\",\n      \"America/Vancouver\",\n      \"America/Whitehorse\",\n      \"PST8PDT\",\n    ],\n  },\n  {\n    value: \"US Mountain Standard Time\",\n    abbr: \"UMST\",\n    text: \"Arizona\",\n    utc: [\n      \"America/Creston\",\n      \"America/Dawson_Creek\",\n      \"America/Hermosillo\",\n      \"America/Phoenix\",\n      \"Etc/GMT+7\",\n    ],\n  },\n  {\n    value: \"Mountain Standard Time (Mexico)\",\n    abbr: \"MDT\",\n    text: \"Chihuahua, La Paz, Mazatlan\",\n    utc: [\"America/Chihuahua\", \"America/Mazatlan\"],\n  },\n  {\n    value: \"Mountain Standard Time\",\n    abbr: \"MDT\",\n    text: \"Mountain Time (US & Canada)\",\n    utc: [\n      \"America/Boise\",\n      \"America/Cambridge_Bay\",\n      \"America/Denver\",\n      \"America/Edmonton\",\n      \"America/Inuvik\",\n      \"America/Ojinaga\",\n      \"America/Yellowknife\",\n      \"MST7MDT\",\n    ],\n  },\n  {\n    value: \"Central America Standard Time\",\n    abbr: \"CAST\",\n    text: \"Central America\",\n    utc: [\n      \"America/Belize\",\n      \"America/Costa_Rica\",\n      \"America/El_Salvador\",\n      \"America/Guatemala\",\n      \"America/Managua\",\n      \"America/Tegucigalpa\",\n      \"Etc/GMT+6\",\n      \"Pacific/Galapagos\",\n    ],\n  },\n  {\n    value: \"Central Standard Time\",\n    abbr: \"CDT\",\n    text: \"Central Time (US & Canada)\",\n    utc: [\n      \"America/Chicago\",\n      \"America/Indiana/Knox\",\n      \"America/Indiana/Tell_City\",\n      \"America/Matamoros\",\n      \"America/Menominee\",\n      \"America/North_Dakota/Beulah\",\n      \"America/North_Dakota/Center\",\n      \"America/North_Dakota/New_Salem\",\n      \"America/Rainy_River\",\n      \"America/Rankin_Inlet\",\n      \"America/Resolute\",\n      \"America/Winnipeg\",\n      \"CST6CDT\",\n    ],\n  },\n  {\n    value: \"Central Standard Time (Mexico)\",\n    abbr: \"CDT\",\n    text: \"Guadalajara, Mexico City, Monterrey\",\n    utc: [\n      \"America/Bahia_Banderas\",\n      \"America/Cancun\",\n      \"America/Merida\",\n      \"America/Mexico_City\",\n      \"America/Monterrey\",\n    ],\n  },\n  {\n    value: \"Canada Central Standard Time\",\n    abbr: \"CCST\",\n    text: \"Saskatchewan\",\n    utc: [\"America/Regina\", \"America/Swift_Current\"],\n  },\n  {\n    value: \"SA Pacific Standard Time\",\n    abbr: \"SPST\",\n    text: \"Bogota, Lima, Quito\",\n    utc: [\n      \"America/Bogota\",\n      \"America/Cayman\",\n      \"America/Coral_Harbour\",\n      \"America/Eirunepe\",\n      \"America/Guayaquil\",\n      \"America/Jamaica\",\n      \"America/Lima\",\n      \"America/Panama\",\n      \"America/Rio_Branco\",\n      \"Etc/GMT+5\",\n    ],\n  },\n  {\n    value: \"Eastern Standard Time\",\n    abbr: \"EDT\",\n    text: \"Eastern Time (US & Canada)\",\n    utc: [\n      \"America/Detroit\",\n      \"America/Havana\",\n      \"America/Indiana/Petersburg\",\n      \"America/Indiana/Vincennes\",\n      \"America/Indiana/Winamac\",\n      \"America/Iqaluit\",\n      \"America/Kentucky/Monticello\",\n      \"America/Louisville\",\n      \"America/Montreal\",\n      \"America/Nassau\",\n      \"America/New_York\",\n      \"America/Nipigon\",\n      \"America/Pangnirtung\",\n      \"America/Port-au-Prince\",\n      \"America/Thunder_Bay\",\n      \"America/Toronto\",\n      \"EST5EDT\",\n    ],\n  },\n  {\n    value: \"US Eastern Standard Time\",\n    abbr: \"UEDT\",\n    text: \"Indiana (East)\",\n    utc: [\"America/Indiana/Marengo\", \"America/Indiana/Vevay\", \"America/Indianapolis\"],\n  },\n  {\n    value: \"Venezuela Standard Time\",\n    abbr: \"VST\",\n    text: \"Caracas\",\n    utc: [\"America/Caracas\"],\n  },\n  {\n    value: \"Paraguay Standard Time\",\n    abbr: \"PYT\",\n    text: \"Asuncion\",\n    utc: [\"America/Asuncion\"],\n  },\n  {\n    value: \"Atlantic Standard Time\",\n    abbr: \"ADT\",\n    text: \"Atlantic Time (Canada)\",\n    utc: [\n      \"America/Glace_Bay\",\n      \"America/Goose_Bay\",\n      \"America/Halifax\",\n      \"America/Moncton\",\n      \"America/Thule\",\n      \"Atlantic/Bermuda\",\n    ],\n  },\n  {\n    value: \"Central Brazilian Standard Time\",\n    abbr: \"CBST\",\n    text: \"Cuiaba\",\n    utc: [\"America/Campo_Grande\", \"America/Cuiaba\"],\n  },\n  {\n    value: \"SA Western Standard Time\",\n    abbr: \"SWST\",\n    text: \"Georgetown, La Paz, Manaus, San Juan\",\n    utc: [\n      \"America/Anguilla\",\n      \"America/Antigua\",\n      \"America/Aruba\",\n      \"America/Barbados\",\n      \"America/Blanc-Sablon\",\n      \"America/Boa_Vista\",\n      \"America/Curacao\",\n      \"America/Dominica\",\n      \"America/Grand_Turk\",\n      \"America/Grenada\",\n      \"America/Guadeloupe\",\n      \"America/Guyana\",\n      \"America/Kralendijk\",\n      \"America/La_Paz\",\n      \"America/Lower_Princes\",\n      \"America/Manaus\",\n      \"America/Marigot\",\n      \"America/Martinique\",\n      \"America/Montserrat\",\n      \"America/Port_of_Spain\",\n      \"America/Porto_Velho\",\n      \"America/Puerto_Rico\",\n      \"America/Santo_Domingo\",\n      \"America/St_Barthelemy\",\n      \"America/St_Kitts\",\n      \"America/St_Lucia\",\n      \"America/St_Thomas\",\n      \"America/St_Vincent\",\n      \"America/Tortola\",\n      \"Etc/GMT+4\",\n    ],\n  },\n  {\n    value: \"Pacific SA Standard Time\",\n    abbr: \"PSST\",\n    text: \"Santiago\",\n    utc: [\"America/Santiago\", \"Antarctica/Palmer\"],\n  },\n  {\n    value: \"Newfoundland Standard Time\",\n    abbr: \"NDT\",\n    text: \"Newfoundland\",\n    utc: [\"America/St_Johns\"],\n  },\n  {\n    value: \"E. South America Standard Time\",\n    abbr: \"ESAST\",\n    text: \"Brasilia\",\n    utc: [\"America/Sao_Paulo\"],\n  },\n  {\n    value: \"Argentina Standard Time\",\n    abbr: \"AST\",\n    text: \"Buenos Aires\",\n    utc: [\n      \"America/Argentina/La_Rioja\",\n      \"America/Argentina/Rio_Gallegos\",\n      \"America/Argentina/Salta\",\n      \"America/Argentina/San_Juan\",\n      \"America/Argentina/San_Luis\",\n      \"America/Argentina/Tucuman\",\n      \"America/Argentina/Ushuaia\",\n      \"America/Buenos_Aires\",\n      \"America/Catamarca\",\n      \"America/Cordoba\",\n      \"America/Jujuy\",\n      \"America/Mendoza\",\n    ],\n  },\n  {\n    value: \"SA Eastern Standard Time\",\n    abbr: \"SEST\",\n    text: \"Cayenne, Fortaleza\",\n    utc: [\n      \"America/Araguaina\",\n      \"America/Belem\",\n      \"America/Cayenne\",\n      \"America/Fortaleza\",\n      \"America/Maceio\",\n      \"America/Paramaribo\",\n      \"America/Recife\",\n      \"America/Santarem\",\n      \"Antarctica/Rothera\",\n      \"Atlantic/Stanley\",\n      \"Etc/GMT+3\",\n    ],\n  },\n  {\n    value: \"Greenland Standard Time\",\n    abbr: \"GDT\",\n    text: \"Greenland\",\n    utc: [\"America/Godthab\"],\n  },\n  {\n    value: \"Montevideo Standard Time\",\n    abbr: \"MST\",\n    text: \"Montevideo\",\n    utc: [\"America/Montevideo\"],\n  },\n  {\n    value: \"Bahia Standard Time\",\n    abbr: \"BST\",\n    text: \"Salvador\",\n    utc: [\"America/Bahia\"],\n  },\n  {\n    value: \"UTC-02\",\n    abbr: \"U\",\n    text: \"Coordinated Universal Time-02\",\n    utc: [\"America/Noronha\", \"Atlantic/South_Georgia\", \"Etc/GMT+2\"],\n  },\n  {\n    value: \"Mid-Atlantic Standard Time\",\n    abbr: \"MDT\",\n    text: \"Mid-Atlantic - Old\",\n    utc: [],\n  },\n  {\n    value: \"Azores Standard Time\",\n    abbr: \"ADT\",\n    text: \"Azores\",\n    utc: [\"America/Scoresbysund\", \"Atlantic/Azores\"],\n  },\n  {\n    value: \"Cape Verde Standard Time\",\n    abbr: \"CVST\",\n    text: \"Cape Verde Is.\",\n    utc: [\"Atlantic/Cape_Verde\", \"Etc/GMT+1\"],\n  },\n  {\n    value: \"Morocco Standard Time\",\n    abbr: \"MDT\",\n    text: \"Casablanca\",\n    utc: [\"Africa/Casablanca\", \"Africa/El_Aaiun\"],\n  },\n  {\n    value: \"UTC\",\n    abbr: \"UTC\",\n    text: \"Coordinated Universal Time\",\n    utc: [\"America/Danmarkshavn\", \"Etc/GMT\"],\n  },\n  {\n    value: \"GMT Standard Time\",\n    abbr: \"GMT\",\n    text: \"Edinburgh, London\",\n    utc: [\"Europe/Isle_of_Man\", \"Europe/Guernsey\", \"Europe/Jersey\", \"Europe/London\"],\n  },\n  {\n    value: \"GMT Standard Time\",\n    abbr: \"GDT\",\n    text: \"Dublin, Lisbon\",\n    utc: [\n      \"Atlantic/Canary\",\n      \"Atlantic/Faeroe\",\n      \"Atlantic/Madeira\",\n      \"Europe/Dublin\",\n      \"Europe/Lisbon\",\n    ],\n  },\n  {\n    value: \"Greenwich Standard Time\",\n    abbr: \"GST\",\n    text: \"Monrovia, Reykjavik\",\n    utc: [\n      \"Africa/Abidjan\",\n      \"Africa/Accra\",\n      \"Africa/Bamako\",\n      \"Africa/Banjul\",\n      \"Africa/Bissau\",\n      \"Africa/Conakry\",\n      \"Africa/Dakar\",\n      \"Africa/Freetown\",\n      \"Africa/Lome\",\n      \"Africa/Monrovia\",\n      \"Africa/Nouakchott\",\n      \"Africa/Ouagadougou\",\n      \"Africa/Sao_Tome\",\n      \"Atlantic/Reykjavik\",\n      \"Atlantic/St_Helena\",\n    ],\n  },\n  {\n    value: \"W. Europe Standard Time\",\n    abbr: \"WEDT\",\n    text: \"Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna\",\n    utc: [\n      \"Arctic/Longyearbyen\",\n      \"Europe/Amsterdam\",\n      \"Europe/Andorra\",\n      \"Europe/Berlin\",\n      \"Europe/Busingen\",\n      \"Europe/Gibraltar\",\n      \"Europe/Luxembourg\",\n      \"Europe/Malta\",\n      \"Europe/Monaco\",\n      \"Europe/Oslo\",\n      \"Europe/Rome\",\n      \"Europe/San_Marino\",\n      \"Europe/Stockholm\",\n      \"Europe/Vaduz\",\n      \"Europe/Vatican\",\n      \"Europe/Vienna\",\n      \"Europe/Zurich\",\n    ],\n  },\n  {\n    value: \"Central Europe Standard Time\",\n    abbr: \"CEDT\",\n    text: \"Belgrade, Bratislava, Budapest, Ljubljana, Prague\",\n    utc: [\n      \"Europe/Belgrade\",\n      \"Europe/Bratislava\",\n      \"Europe/Budapest\",\n      \"Europe/Ljubljana\",\n      \"Europe/Podgorica\",\n      \"Europe/Prague\",\n      \"Europe/Tirane\",\n    ],\n  },\n  {\n    value: \"Romance Standard Time\",\n    abbr: \"RDT\",\n    text: \"Brussels, Copenhagen, Madrid, Paris\",\n    utc: [\"Africa/Ceuta\", \"Europe/Brussels\", \"Europe/Copenhagen\", \"Europe/Madrid\", \"Europe/Paris\"],\n  },\n  {\n    value: \"Central European Standard Time\",\n    abbr: \"CEDT\",\n    text: \"Sarajevo, Skopje, Warsaw, Zagreb\",\n    utc: [\"Europe/Sarajevo\", \"Europe/Skopje\", \"Europe/Warsaw\", \"Europe/Zagreb\"],\n  },\n  {\n    value: \"W. Central Africa Standard Time\",\n    abbr: \"WCAST\",\n    text: \"West Central Africa\",\n    utc: [\n      \"Africa/Algiers\",\n      \"Africa/Bangui\",\n      \"Africa/Brazzaville\",\n      \"Africa/Douala\",\n      \"Africa/Kinshasa\",\n      \"Africa/Lagos\",\n      \"Africa/Libreville\",\n      \"Africa/Luanda\",\n      \"Africa/Malabo\",\n      \"Africa/Ndjamena\",\n      \"Africa/Niamey\",\n      \"Africa/Porto-Novo\",\n      \"Africa/Tunis\",\n      \"Etc/GMT-1\",\n    ],\n  },\n  {\n    value: \"Namibia Standard Time\",\n    abbr: \"NST\",\n    text: \"Windhoek\",\n    utc: [\"Africa/Windhoek\"],\n  },\n  {\n    value: \"GTB Standard Time\",\n    abbr: \"GDT\",\n    text: \"Athens, Bucharest\",\n    utc: [\"Asia/Nicosia\", \"Europe/Athens\", \"Europe/Bucharest\", \"Europe/Chisinau\"],\n  },\n  {\n    value: \"Middle East Standard Time\",\n    abbr: \"MEDT\",\n    text: \"Beirut\",\n    utc: [\"Asia/Beirut\"],\n  },\n  {\n    value: \"Egypt Standard Time\",\n    abbr: \"EST\",\n    text: \"Cairo\",\n    utc: [\"Africa/Cairo\"],\n  },\n  {\n    value: \"Syria Standard Time\",\n    abbr: \"SDT\",\n    text: \"Damascus\",\n    utc: [\"Asia/Damascus\"],\n  },\n  {\n    value: \"E. Europe Standard Time\",\n    abbr: \"EEDT\",\n    text: \"E. Europe\",\n    utc: [\n      \"Asia/Nicosia\",\n      \"Europe/Athens\",\n      \"Europe/Bucharest\",\n      \"Europe/Chisinau\",\n      \"Europe/Helsinki\",\n      \"Europe/Kiev\",\n      \"Europe/Mariehamn\",\n      \"Europe/Nicosia\",\n      \"Europe/Riga\",\n      \"Europe/Sofia\",\n      \"Europe/Tallinn\",\n      \"Europe/Uzhgorod\",\n      \"Europe/Vilnius\",\n      \"Europe/Zaporozhye\",\n    ],\n  },\n  {\n    value: \"South Africa Standard Time\",\n    abbr: \"SAST\",\n    text: \"Harare, Pretoria\",\n    utc: [\n      \"Africa/Blantyre\",\n      \"Africa/Bujumbura\",\n      \"Africa/Gaborone\",\n      \"Africa/Harare\",\n      \"Africa/Johannesburg\",\n      \"Africa/Kigali\",\n      \"Africa/Lubumbashi\",\n      \"Africa/Lusaka\",\n      \"Africa/Maputo\",\n      \"Africa/Maseru\",\n      \"Africa/Mbabane\",\n      \"Etc/GMT-2\",\n    ],\n  },\n  {\n    value: \"FLE Standard Time\",\n    abbr: \"FDT\",\n    text: \"Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius\",\n    utc: [\n      \"Europe/Helsinki\",\n      \"Europe/Kiev\",\n      \"Europe/Mariehamn\",\n      \"Europe/Riga\",\n      \"Europe/Sofia\",\n      \"Europe/Tallinn\",\n      \"Europe/Uzhgorod\",\n      \"Europe/Vilnius\",\n      \"Europe/Zaporozhye\",\n    ],\n  },\n  {\n    value: \"Turkey Standard Time\",\n    abbr: \"TDT\",\n    text: \"Istanbul\",\n    utc: [\"Europe/Istanbul\"],\n  },\n  {\n    value: \"Israel Standard Time\",\n    abbr: \"JDT\",\n    text: \"Jerusalem\",\n    utc: [\"Asia/Jerusalem\"],\n  },\n  {\n    value: \"Libya Standard Time\",\n    abbr: \"LST\",\n    text: \"Tripoli\",\n    utc: [\"Africa/Tripoli\"],\n  },\n  {\n    value: \"Jordan Standard Time\",\n    abbr: \"JST\",\n    text: \"Amman\",\n    utc: [\"Asia/Amman\"],\n  },\n  {\n    value: \"Arabic Standard Time\",\n    abbr: \"AST\",\n    text: \"Baghdad\",\n    utc: [\"Asia/Baghdad\"],\n  },\n  {\n    value: \"Kaliningrad Standard Time\",\n    abbr: \"KST\",\n    text: \"Kaliningrad\",\n    utc: [\"Europe/Kaliningrad\"],\n  },\n  {\n    value: \"Arab Standard Time\",\n    abbr: \"AST\",\n    text: \"Kuwait, Riyadh\",\n    utc: [\"Asia/Aden\", \"Asia/Bahrain\", \"Asia/Kuwait\", \"Asia/Qatar\", \"Asia/Riyadh\"],\n  },\n  {\n    value: \"E. Africa Standard Time\",\n    abbr: \"EAST\",\n    text: \"Nairobi\",\n    utc: [\n      \"Africa/Addis_Ababa\",\n      \"Africa/Asmera\",\n      \"Africa/Dar_es_Salaam\",\n      \"Africa/Djibouti\",\n      \"Africa/Juba\",\n      \"Africa/Kampala\",\n      \"Africa/Khartoum\",\n      \"Africa/Mogadishu\",\n      \"Africa/Nairobi\",\n      \"Antarctica/Syowa\",\n      \"Etc/GMT-3\",\n      \"Indian/Antananarivo\",\n      \"Indian/Comoro\",\n      \"Indian/Mayotte\",\n    ],\n  },\n  {\n    value: \"Moscow Standard Time\",\n    abbr: \"MSK\",\n    text: \"Moscow, St. Petersburg, Volgograd, Minsk\",\n    utc: [\"Europe/Kirov\", \"Europe/Moscow\", \"Europe/Simferopol\", \"Europe/Volgograd\", \"Europe/Minsk\"],\n  },\n  {\n    value: \"Samara Time\",\n    abbr: \"SAMT\",\n    text: \"Samara, Ulyanovsk, Saratov\",\n    utc: [\"Europe/Astrakhan\", \"Europe/Samara\", \"Europe/Ulyanovsk\"],\n  },\n  {\n    value: \"Iran Standard Time\",\n    abbr: \"IDT\",\n    text: \"Tehran\",\n    utc: [\"Asia/Tehran\"],\n  },\n  {\n    value: \"Arabian Standard Time\",\n    abbr: \"AST\",\n    text: \"Abu Dhabi, Muscat\",\n    utc: [\"Asia/Dubai\", \"Asia/Muscat\", \"Etc/GMT-4\"],\n  },\n  {\n    value: \"Azerbaijan Standard Time\",\n    abbr: \"ADT\",\n    text: \"Baku\",\n    utc: [\"Asia/Baku\"],\n  },\n  {\n    value: \"Mauritius Standard Time\",\n    abbr: \"MST\",\n    text: \"Port Louis\",\n    utc: [\"Indian/Mahe\", \"Indian/Mauritius\", \"Indian/Reunion\"],\n  },\n  {\n    value: \"Georgian Standard Time\",\n    abbr: \"GET\",\n    text: \"Tbilisi\",\n    utc: [\"Asia/Tbilisi\"],\n  },\n  {\n    value: \"Caucasus Standard Time\",\n    abbr: \"CST\",\n    text: \"Yerevan\",\n    utc: [\"Asia/Yerevan\"],\n  },\n  {\n    value: \"Afghanistan Standard Time\",\n    abbr: \"AST\",\n    text: \"Kabul\",\n    utc: [\"Asia/Kabul\"],\n  },\n  {\n    value: \"West Asia Standard Time\",\n    abbr: \"WAST\",\n    text: \"Ashgabat, Tashkent\",\n    utc: [\n      \"Antarctica/Mawson\",\n      \"Asia/Aqtau\",\n      \"Asia/Aqtobe\",\n      \"Asia/Ashgabat\",\n      \"Asia/Dushanbe\",\n      \"Asia/Oral\",\n      \"Asia/Samarkand\",\n      \"Asia/Tashkent\",\n      \"Etc/GMT-5\",\n      \"Indian/Kerguelen\",\n      \"Indian/Maldives\",\n    ],\n  },\n  {\n    value: \"Yekaterinburg Time\",\n    abbr: \"YEKT\",\n    text: \"Yekaterinburg\",\n    utc: [\"Asia/Yekaterinburg\"],\n  },\n  {\n    value: \"Pakistan Standard Time\",\n    abbr: \"PKT\",\n    text: \"Islamabad, Karachi\",\n    utc: [\"Asia/Karachi\"],\n  },\n  {\n    value: \"India Standard Time\",\n    abbr: \"IST\",\n    text: \"Chennai, Kolkata, Mumbai, New Delhi\",\n    utc: [\"Asia/Kolkata\"],\n  },\n  {\n    value: \"Sri Lanka Standard Time\",\n    abbr: \"SLST\",\n    text: \"Sri Jayawardenepura\",\n    utc: [\"Asia/Colombo\"],\n  },\n  {\n    value: \"Nepal Standard Time\",\n    abbr: \"NST\",\n    text: \"Kathmandu\",\n    utc: [\"Asia/Kathmandu\"],\n  },\n  {\n    value: \"Central Asia Standard Time\",\n    abbr: \"CAST\",\n    text: \"Nur-Sultan (Astana)\",\n    utc: [\n      \"Antarctica/Vostok\",\n      \"Asia/Almaty\",\n      \"Asia/Bishkek\",\n      \"Asia/Qyzylorda\",\n      \"Asia/Urumqi\",\n      \"Etc/GMT-6\",\n      \"Indian/Chagos\",\n    ],\n  },\n  {\n    value: \"Bangladesh Standard Time\",\n    abbr: \"BST\",\n    text: \"Dhaka\",\n    utc: [\"Asia/Dhaka\", \"Asia/Thimphu\"],\n  },\n  {\n    value: \"Myanmar Standard Time\",\n    abbr: \"MST\",\n    text: \"Yangon (Rangoon)\",\n    utc: [\"Asia/Rangoon\", \"Indian/Cocos\"],\n  },\n  {\n    value: \"SE Asia Standard Time\",\n    abbr: \"SAST\",\n    text: \"Bangkok, Hanoi, Jakarta\",\n    utc: [\n      \"Antarctica/Davis\",\n      \"Asia/Bangkok\",\n      \"Asia/Hovd\",\n      \"Asia/Jakarta\",\n      \"Asia/Phnom_Penh\",\n      \"Asia/Pontianak\",\n      \"Asia/Saigon\",\n      \"Asia/Vientiane\",\n      \"Etc/GMT-7\",\n      \"Indian/Christmas\",\n    ],\n  },\n  {\n    value: \"N. Central Asia Standard Time\",\n    abbr: \"NCAST\",\n    text: \"Novosibirsk\",\n    utc: [\"Asia/Novokuznetsk\", \"Asia/Novosibirsk\", \"Asia/Omsk\"],\n  },\n  {\n    value: \"China Standard Time\",\n    abbr: \"CST\",\n    text: \"Beijing, Chongqing, Hong Kong, Urumqi\",\n    utc: [\"Asia/Hong_Kong\", \"Asia/Macau\", \"Asia/Shanghai\"],\n  },\n  {\n    value: \"North Asia Standard Time\",\n    abbr: \"NAST\",\n    text: \"Krasnoyarsk\",\n    utc: [\"Asia/Krasnoyarsk\"],\n  },\n  {\n    value: \"Singapore Standard Time\",\n    abbr: \"MPST\",\n    text: \"Kuala Lumpur, Singapore\",\n    utc: [\n      \"Asia/Brunei\",\n      \"Asia/Kuala_Lumpur\",\n      \"Asia/Kuching\",\n      \"Asia/Makassar\",\n      \"Asia/Manila\",\n      \"Asia/Singapore\",\n      \"Etc/GMT-8\",\n    ],\n  },\n  {\n    value: \"W. Australia Standard Time\",\n    abbr: \"WAST\",\n    text: \"Perth\",\n    utc: [\"Antarctica/Casey\", \"Australia/Perth\"],\n  },\n  {\n    value: \"Taipei Standard Time\",\n    abbr: \"TST\",\n    text: \"Taipei\",\n    utc: [\"Asia/Taipei\"],\n  },\n  {\n    value: \"Ulaanbaatar Standard Time\",\n    abbr: \"UST\",\n    text: \"Ulaanbaatar\",\n    utc: [\"Asia/Choibalsan\", \"Asia/Ulaanbaatar\"],\n  },\n  {\n    value: \"North Asia East Standard Time\",\n    abbr: \"NAEST\",\n    text: \"Irkutsk\",\n    utc: [\"Asia/Irkutsk\"],\n  },\n  {\n    value: \"Japan Standard Time\",\n    abbr: \"JST\",\n    text: \"Osaka, Sapporo, Tokyo\",\n    utc: [\"Asia/Dili\", \"Asia/Jayapura\", \"Asia/Tokyo\", \"Etc/GMT-9\", \"Pacific/Palau\"],\n  },\n  {\n    value: \"Korea Standard Time\",\n    abbr: \"KST\",\n    text: \"Seoul\",\n    utc: [\"Asia/Pyongyang\", \"Asia/Seoul\"],\n  },\n  {\n    value: \"Cen. Australia Standard Time\",\n    abbr: \"CAST\",\n    text: \"Adelaide\",\n    utc: [\"Australia/Adelaide\", \"Australia/Broken_Hill\"],\n  },\n  {\n    value: \"AUS Central Standard Time\",\n    abbr: \"ACST\",\n    text: \"Darwin\",\n    utc: [\"Australia/Darwin\"],\n  },\n  {\n    value: \"E. Australia Standard Time\",\n    abbr: \"EAST\",\n    text: \"Brisbane\",\n    utc: [\"Australia/Brisbane\", \"Australia/Lindeman\"],\n  },\n  {\n    value: \"AUS Eastern Standard Time\",\n    abbr: \"AEST\",\n    text: \"Canberra, Melbourne, Sydney\",\n    utc: [\"Australia/Melbourne\", \"Australia/Sydney\"],\n  },\n  {\n    value: \"West Pacific Standard Time\",\n    abbr: \"WPST\",\n    text: \"Guam, Port Moresby\",\n    utc: [\n      \"Antarctica/DumontDUrville\",\n      \"Etc/GMT-10\",\n      \"Pacific/Guam\",\n      \"Pacific/Port_Moresby\",\n      \"Pacific/Saipan\",\n      \"Pacific/Truk\",\n    ],\n  },\n  {\n    value: \"Tasmania Standard Time\",\n    abbr: \"TST\",\n    text: \"Hobart\",\n    utc: [\"Australia/Currie\", \"Australia/Hobart\"],\n  },\n  {\n    value: \"Yakutsk Standard Time\",\n    abbr: \"YST\",\n    text: \"Yakutsk\",\n    utc: [\"Asia/Chita\", \"Asia/Khandyga\", \"Asia/Yakutsk\"],\n  },\n  {\n    value: \"Central Pacific Standard Time\",\n    abbr: \"CPST\",\n    text: \"Solomon Is., New Caledonia\",\n    utc: [\n      \"Antarctica/Macquarie\",\n      \"Etc/GMT-11\",\n      \"Pacific/Efate\",\n      \"Pacific/Guadalcanal\",\n      \"Pacific/Kosrae\",\n      \"Pacific/Noumea\",\n      \"Pacific/Ponape\",\n    ],\n  },\n  {\n    value: \"Vladivostok Standard Time\",\n    abbr: \"VST\",\n    text: \"Vladivostok\",\n    utc: [\"Asia/Sakhalin\", \"Asia/Ust-Nera\", \"Asia/Vladivostok\"],\n  },\n  {\n    value: \"New Zealand Standard Time\",\n    abbr: \"NZST\",\n    text: \"Auckland, Wellington\",\n    utc: [\"Antarctica/McMurdo\", \"Pacific/Auckland\"],\n  },\n  {\n    value: \"UTC+12\",\n    abbr: \"U\",\n    text: \"Coordinated Universal Time+12\",\n    utc: [\n      \"Etc/GMT-12\",\n      \"Pacific/Funafuti\",\n      \"Pacific/Kwajalein\",\n      \"Pacific/Majuro\",\n      \"Pacific/Nauru\",\n      \"Pacific/Tarawa\",\n      \"Pacific/Wake\",\n      \"Pacific/Wallis\",\n    ],\n  },\n  {\n    value: \"Fiji Standard Time\",\n    abbr: \"FST\",\n    text: \"Fiji\",\n    utc: [\"Pacific/Fiji\"],\n  },\n  {\n    value: \"Magadan Standard Time\",\n    abbr: \"MST\",\n    text: \"Magadan\",\n    utc: [\"Asia/Anadyr\", \"Asia/Kamchatka\", \"Asia/Magadan\", \"Asia/Srednekolymsk\"],\n  },\n  {\n    value: \"Kamchatka Standard Time\",\n    abbr: \"KDT\",\n    text: \"Petropavlovsk-Kamchatsky - Old\",\n    utc: [\"Asia/Kamchatka\"],\n  },\n  {\n    value: \"Tonga Standard Time\",\n    abbr: \"TST\",\n    text: \"Nuku'alofa\",\n    utc: [\"Etc/GMT-13\", \"Pacific/Enderbury\", \"Pacific/Fakaofo\", \"Pacific/Tongatapu\"],\n  },\n  {\n    value: \"Samoa Standard Time\",\n    abbr: \"SST\",\n    text: \"Samoa\",\n    utc: [\"Pacific/Apia\"],\n  },\n]\n","import { timezones } from \"./timezones\"\n\nconst digitizeOffset = parsedOffset => {\n  if (!parsedOffset) return \"+0\"\n  const splitOffset = parsedOffset.split(\":\")\n  return splitOffset.length > 1\n    ? `${splitOffset[0]}${(splitOffset[1] / 60).toString().substr(1)}`\n    : splitOffset[0]\n}\n\nconst normalizeOffset = parsedOffset => (parsedOffset ? parsedOffset.replace(\"−\", \"-\") : \"\")\n\nconst now = new Date()\nexport const timezoneList = () => {\n  const memoized = {}\n  return timezones.reduce((acc, timezone) => {\n    const { utc } = timezone\n\n    try {\n      // We use 'fr' locale because it is the only one that returns back the UTC offset (dd/mm/yyyy, UTC-x) \n      // so we can parse it later and digitize it.\n      const dateString = new Intl.DateTimeFormat(\"fr\", {\n        timeZone: utc[0],\n        timeZoneName: \"short\",\n      }).format(now)\n\n      const [parsedOffset] = dateString.match(/[−+].+/) || []\n      const normalizedOffset = normalizeOffset(parsedOffset)\n\n      if (memoized[normalizedOffset])\n        return acc.concat({ ...timezone, offset: memoized[normalizedOffset] })\n\n      const digitizedOffset = digitizeOffset(normalizedOffset)\n\n      memoized[normalizedOffset] = digitizedOffset\n      return acc.concat({ ...timezone, offset: digitizedOffset })\n    } catch (e) {\n      return acc\n    }\n  }, [])\n}\n\nexport const timezonesById = timezones =>\n  timezones.reduce((acc, { utc, ...timezone }) => {\n    utc.forEach(item => (acc[item] = { ...timezone, utc: item }))\n    return acc\n  }, {})\n\nexport const getDefaultTimezone = () => {\n  const dateFormat = new Intl.DateTimeFormat(\"default\", {})\n  const usedOptions = dateFormat.resolvedOptions()\n  return usedOptions\n}\n","import React, { useRef, useState, useEffect, useMemo, useCallback } from \"react\"\nimport { useToggle } from \"react-use\"\nimport { Drop, Flex, Text, Icon } from \"@netdata/netdata-ui\"\nimport { useDispatch, useSelector } from \"store/redux-separate-context\"\nimport { setOptionAction } from \"@/src/domains/global/actions\"\nimport { selectTimezoneSetting } from \"domains/global/selectors\"\nimport { MenuItem } from \"@/src/components/menus\"\nimport Item from \"../item\"\nimport Dropdown from \"./dropdown\"\nimport Search from \"./search\"\nimport Container from \"./container\"\nimport Wrapper from \"./wrapper\"\nimport OffsetItem from \"./offsetItem\"\nimport { getDefaultTimezone, timezoneList, timezonesById } from \"./utils\"\nimport { getHashParams } from \"utils/hash-utils\"\n\nconst timezones = timezoneList().sort((a, b) => a.offset - b.offset)\nconst byId = timezonesById(timezones)\n\nconst getTimezone = (selectedTimezone, timezoneHash) => {\n  const timezone = timezoneHash\n    ? timezoneHash\n    : selectedTimezone === \"default\"\n    ? getDefaultTimezone().timeZone\n    : selectedTimezone\n\n  return byId[timezone in byId ? timezone : getDefaultTimezone().timeZone] || {}\n}\n\nconst Timezone = () => {\n  const [value, setValue] = useState(\"\")\n  const [isOpen, toggle] = useToggle()\n\n  const ref = useRef()\n  const inputRef = useRef()\n\n  const { updateUtcParam } = window.urlOptions\n\n  useEffect(() => {\n    if (!inputRef.current || !isOpen) return\n    inputRef.current.focus()\n  }, [isOpen])\n\n  const dispatch = useDispatch()\n  const selectedTimezone = useSelector(selectTimezoneSetting)\n\n  const selectedOffset = useMemo(() => {\n    const { utc: timezoneHash = \"\" } = getHashParams()\n    const { offset = \"\", utc = \"\" } = getTimezone(selectedTimezone, timezoneHash)\n\n    if (timezoneHash !== utc) updateUtcParam(utc)\n    if (selectedTimezone !== utc) dispatch(setOptionAction({ key: \"timezone\", value: utc }))\n\n    dispatch(setOptionAction({ key: \"utcOffset\", value: parseFloat(offset) }))\n\n    return offset\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [selectedTimezone])\n\n  const zones = useMemo(() => {\n    if (!value) return timezones\n    return timezones.filter(\n      ({ text, offset }) =>\n        text.toUpperCase().includes(value.toUpperCase()) || offset.includes(value)\n    )\n  }, [value])\n\n  const close = () => {\n    toggle(false)\n    setValue(\"\")\n  }\n\n  const onSelect = useCallback(utc => {\n    updateUtcParam(utc)\n    dispatch(setOptionAction({ key: \"timezone\", value: utc }))\n    close()\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [])\n\n  const onChange = useCallback(e => setValue(e.target.value), [])\n\n  return (\n    <Item hasBorder>\n      <MenuItem round={1} onClick={toggle} ref={ref} Wrapper={Wrapper}>\n        <Flex gap={1}>\n          <Text color=\"textLite\" whiteSpace=\"nowrap\">\n            UTC {selectedOffset}\n          </Text>\n        </Flex>\n        <Icon name=\"chevron_down\" color=\"text\" width=\"12px\" height=\"12px\" />\n      </MenuItem>\n      {ref.current && isOpen && (\n        <Drop\n          target={ref.current}\n          align={{ top: \"bottom\", left: \"left\" }}\n          onEsc={close}\n          onClickOutside={close}\n          animation\n        >\n          <Dropdown>\n            <Search value={value} onChange={onChange} ref={inputRef} />\n            <Container>\n              {zones.map(({ text, offset, utc }) => (\n                <OffsetItem\n                  key={text}\n                  name={text}\n                  offset={offset}\n                  utc={utc[0]}\n                  onSelect={onSelect}\n                />\n              ))}\n            </Container>\n          </Dropdown>\n        </Drop>\n      )}\n    </Item>\n  )\n}\n\nexport default Timezone\n","import React, { useCallback, useEffect, useState, useRef } from \"react\"\nimport styled from \"styled-components\"\nimport { useSelector, useDispatch } from \"store/redux-separate-context\"\nimport { useLocalStorage } from \"react-use\"\nimport { Flex } from \"@netdata/netdata-ui\"\nimport { sendToChildIframe, useListenToPostMessage } from \"utils/post-message\"\nimport { getIframeSrc, NETDATA_REGISTRY_SERVER } from \"utils/utils\"\nimport useUserNodeAccessMessage from \"hooks/use-user-node-access\"\nimport { selectRegistry, selectCloudBaseUrl } from \"domains/global/selectors\"\nimport { LOCAL_STORAGE_NEEDS_SYNC } from \"domains/dashboard/sagas\"\nimport { setOfflineAction } from \"@/src/domains/dashboard/actions\"\nimport { SIGN_IN_IFRAME_ID } from \"components/header/constants\"\n\nconst IframeContainer = styled(Flex).attrs({ position: \"absolute\" })`\n  display: none;\n`\nconst Iframe = ({ signedIn }) => {\n  const [rendered, setRendered] = useState(false)\n  const signInMsg = useRef()\n  const ref = useRef()\n\n  const [lsValue, , removeLsValue] = useLocalStorage(LOCAL_STORAGE_NEEDS_SYNC)\n  const cloudBaseURL = useSelector(selectCloudBaseUrl)\n  const registry = useSelector(selectRegistry)\n\n  const dispatch = useDispatch()\n\n  const { origin, pathname } = window.location\n  const nameParam = encodeURIComponent(registry.hostname)\n  const originParam = encodeURIComponent(origin + pathname)\n\n  const signInIframeUrl = getIframeSrc(\n    cloudBaseURL,\n    `sign-in?id=${registry.machineGuid}&name=${nameParam}&origin=${originParam}`\n  )\n\n  useListenToPostMessage(\"hello-from-sign-in\", msg => {\n    signInMsg.current = msg\n  })\n\n  useUserNodeAccessMessage()\n\n  const onLoad = useCallback(() => {\n    setRendered(true)\n    setTimeout(() => dispatch(setOfflineAction({ offline: signInMsg.current === undefined })), 500)\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [])\n\n  useEffect(() => {\n    const handler = e => {\n      if (!e?.target) return\n      if (e.target.src === signInIframeUrl && !rendered) onLoad()\n    }\n\n    window.addEventListener(\"DOMFrameContentLoaded\", handler)\n    return () => window.removeEventListener(\"DOMFrameContentLoaded\", handler)\n  }, [signInIframeUrl, rendered, onLoad])\n\n  useEffect(() => {\n    if (!signedIn || !ref.current) return\n    if (!registry.registryServer || registry.registryServer === NETDATA_REGISTRY_SERVER) return\n    if (!lsValue) return\n\n    removeLsValue()\n\n    const { registryMachinesArray } = registry\n    if (registryMachinesArray && registryMachinesArray.length > 0) {\n      sendToChildIframe(ref.current, {\n        type: \"synced-private-registry\",\n        payload: registryMachinesArray,\n      })\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [signedIn, registry, lsValue])\n\n  return (\n    <IframeContainer as=\"iframe\" id={SIGN_IN_IFRAME_ID} src={signInIframeUrl} onLoad={onLoad} />\n  )\n}\n\nexport default Iframe\n","import { useCallback, useState } from \"react\"\nimport { useLocalStorage } from \"react-use\"\nimport { useDispatch } from \"react-redux\"\nimport { useListenToPostMessage } from \"@/src/utils/post-message\"\nimport { isSignedInAction } from \"@/src/domains/dashboard/actions\"\n\nconst useCheckSignInStatus = () => {\n  const dispatch = useDispatch()\n  const [value, setValue] = useLocalStorage(\"has-sign-in-history\")\n  const [hasSignedInBefore, setHasSignedInBefore] = useState(value)\n\n  const onMessage = useCallback(isNew => {\n    if (isNew) {\n      setHasSignedInBefore(isNew)\n      setValue(isNew)\n    }\n    dispatch(isSignedInAction({ isSignedIn: isNew }))\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [])\n\n  const [signedIn] = useListenToPostMessage(\"is-signed-in\", onMessage)\n\n  return [signedIn, hasSignedInBefore]\n}\n\nexport default useCheckSignInStatus\n","import React from \"react\"\nimport { useSelector } from \"react-redux\"\nimport { Button } from \"@netdata/netdata-ui\"\nimport SignInButton from \"components/auth/signIn\"\nimport SignInIframe from \"components/auth/signIn/iframe\"\nimport useCheckSignInStatus from \"components/auth/signIn/useCheckSignInStatus\"\nimport { selectIsCloudEnabled } from \"domains/global/selectors\"\nimport Tooltip from \"@/src/components/tooltips\"\n\nconst SignIn = () => {\n  const [signedIn] = useCheckSignInStatus()\n  const cloudEnabled = useSelector(selectIsCloudEnabled)\n\n  return (\n    cloudEnabled && (\n      <Tooltip\n        content=\"Sign in to Netdata to monitor all your nodes at once, have composite charts, custom dashboards, use intelligent features and more\"\n        align=\"bottom\"\n        plain\n      >\n        <div>\n          <SignInIframe signedIn={signedIn} />\n          {!signedIn && (\n            <SignInButton utmParameters={{ content: \"topbar\" }}>\n              {({ isRegistry, link, offline, onSignIn }) => (\n                <Button\n                  data-testid=\"header-signin\"\n                  label=\"Sign in\"\n                  disabled={offline}\n                  {...(isRegistry ? { as: \"a\", href: link } : { onClick: onSignIn })}\n                />\n              )}\n            </SignInButton>\n          )}\n        </div>\n      </Tooltip>\n    )\n  )\n}\n\nexport default SignIn\n","import { Text, NavigationTab, Icon } from \"@netdata/netdata-ui\"\nimport React from \"react\"\n\nconst CloudTab = ({ label, active, showBorderLeft, icon, onActivate }) => {\n  const handleOnActivate = () => {\n    if (active) return\n    if (onActivate) onActivate()\n  }\n  return (\n    <NavigationTab\n      onActivate={handleOnActivate}\n      icon={<Icon name={icon} size=\"small\" />}\n      fixed\n      closable={false}\n      showBorderLeft={showBorderLeft}\n      active={active}\n    >\n      <Text>{label}</Text>\n    </NavigationTab>\n  )\n}\n\nexport default CloudTab\n","import React from \"react\"\nimport {\n  Flex,\n  Button,\n  Box,\n  Text,\n  H3,\n  H4,\n  Modal,\n  ModalContent,\n  ModalBody,\n  ModalHeader,\n  ModalCloseButton,\n  ModalFooter,\n  Icon,\n} from \"@netdata/netdata-ui\"\n\nimport GoToCloud from \"components/auth/signIn\"\n\nexport const TITLE = \"Discover the free benefits of Netdata Cloud\"\n\nconst DiscoverCloudModal = ({ closeModal, text, header, handleGoToCloud, image, video }) => {\n  return (\n    <Modal borderShadow backdrop={false}>\n      <ModalContent background=\"modalBackground\">\n        <ModalHeader>\n          <Flex gap={2}>\n            <Icon color=\"white\" name=\"netdata\" />\n            <H3 margin={[0]}>{TITLE}:</H3>\n          </Flex>\n\n          <ModalCloseButton onClose={closeModal} />\n        </ModalHeader>\n        <ModalBody>\n          <Flex column width={189} height={130}>\n            <Flex padding={[0, 0, 4, 0]} column gap={4}>\n              <Flex alignItems=\"center\">\n                <H4 margin={[0]}>{header}</H4>\n                <Box\n                  sx={{ marginLeft: \"auto\" }}\n                  data-testid=\"go-to-cloud-cta\"\n                  margin={[0, 2, 0, 0]}\n                  width={{ min: 40 }}\n                >\n                  <GoToCloud utmParameters={{ campaign: \"discover_cloud\" }}>\n                    {({ link }) => (\n                      <Box\n                        label={\n                          <Text textTransform=\"none\" strong color=\"panel\">\n                            Sign in to Netdata Cloud!\n                          </Text>\n                        }\n                        width=\"100%\"\n                        onClick={() => handleGoToCloud({ link })}\n                        as={Button}\n                        small\n                        data-ga={\"go-to-cloud-button\"}\n                        data-testid=\"cta1-button\"\n                      />\n                    )}\n                  </GoToCloud>\n                </Box>\n              </Flex>\n              {text()}\n            </Flex>\n            {image && (\n              <Flex height=\"auto\" width=\"100%\" overflow=\"hidden\">\n                <Box\n                  sx={{\n                    width: \"100%\",\n                    height: \"auto\",\n                  }}\n                  as=\"img\"\n                  src={image}\n                ></Box>\n              </Flex>\n            )}\n            {video && (\n              <Flex height=\"100%\" width=\"100%\">\n                <Box sx={{ width: \"100%\", height: \"100%\" }}>\n                  <iframe\n                    title={`discover-cloud-iframe}`}\n                    width=\"100%\"\n                    height=\"100%\"\n                    src={video}\n                    frameBorder=\"0\"\n                    allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n                    allowFullScreen\n                  />\n                </Box>\n              </Flex>\n            )}\n          </Flex>\n        </ModalBody>\n        <ModalFooter></ModalFooter>\n      </ModalContent>\n    </Modal>\n  )\n}\n\nexport default DiscoverCloudModal\n","import { Text } from \"@netdata/netdata-ui\"\nimport Anchor from \"@/src/components/anchor\"\nimport React from \"react\"\n\nconst TabsContentText = ({ children }) => <Text fontSize=\"16px\">{children}</Text>\n\nexport const TabsContent = {\n  Home: {\n    id: \"Home\",\n    label: \"Home\",\n    header: \"Home\",\n    text: () => (\n      <TabsContentText>\n        The Home view in Netdata cloud provides summarized relevant information in an easily\n        digestible display. You can see information about your nodes, data collection and retention\n        stats, alerts, users and dashboards.\n      </TabsContentText>\n    ),\n    icon: \"room_home\",\n    image: \"images/home.png\",\n  },\n  nodeView: {\n    id: \"nodeView\",\n    label: \"Node View\",\n    header: \"Node View\",\n    text: () => (\n      <>\n        <TabsContentText>\n          The single node view you are currently using will of course be available on Netdata Cloud\n          as well. In addition, the charts and visualization on Netdata Cloud will be more flexible\n          and powerful for troubleshooting than what is available on the agent.\n        </TabsContentText>\n        <TabsContentText>\n          Netdata Cloud also comes with the Metric Correlations feature that lets you quickly find\n          metrics and charts related to a particular window of interest that you want to explore\n          further. By displaying the standard Netdata dashboard, filtered to show only charts that\n          are relevant to the window of interest, you can get to the root cause sooner.\n        </TabsContentText>\n      </>\n    ),\n    icon: \"nodes_hollow\",\n    image: \"images/nodeView.png\",\n  },\n  Overview: {\n    id: \"Overview\",\n    label: \"Overview\",\n    header: \"Overview\",\n    text: () => (\n      <>\n        <TabsContentText>\n          The Overview tab is a great way to monitor your infrastructure using Netdata Cloud. While\n          the interface might look similar to local dashboards served by an Agent, or even the\n          single-node dashboards in Netdata Cloud, Overview uses composite charts. These charts\n          display real-time aggregated metrics from all the nodes (or a filtered selection) in a\n          given War Room.\n        </TabsContentText>\n        <TabsContentText>\n          With Overview's composite charts, you can see your infrastructure from a single pane of\n          glass, discover trends or anomalies, then drill down by grouping metrics by node and\n          jumping to single-node dashboards for root cause analysis.\n        </TabsContentText>\n        <TabsContentText>\n          Here's an example of a composite chart visualizing Disk I/O bandwidth from 5 different\n          nodes in one chart.\n        </TabsContentText>\n      </>\n    ),\n    icon: \"room_overview\",\n    image: \"images/overview.png\",\n  },\n  Nodes: {\n    id: \"Nodes\",\n    label: \"Nodes\",\n    header: \"Nodes\",\n    text: () => (\n      <TabsContentText>\n        The Nodes view in Netdata Cloud lets you see and customize key metrics from any number of\n        Agent-monitored nodes and seamlessly navigate to any node's dashboard for troubleshooting\n        performance issues or anomalies using Netdata's highly-granular metrics.\n      </TabsContentText>\n    ),\n    icon: \"nodes_hollow\",\n    image: \"images/nodes.jpg\",\n  },\n  Dashboards: {\n    id: \"Dashboards\",\n    label: \"Dashboards\",\n    header: \"Dashboards\",\n    text: () => (\n      <TabsContentText>\n        With Netdata Cloud, you can build new dashboards that target your infrastructure's unique\n        needs. Put key metrics from any number of distributed systems in one place for a bird's eye\n        view of your infrastructure.\n      </TabsContentText>\n    ),\n    icon: \"dashboard\",\n    image: \"images/dashboards.png\",\n  },\n  Alerts: {\n    id: \"Alerts\",\n    label: \"Alerts\",\n    header: \"Alerts\",\n    text: () => (\n      <TabsContentText>\n        The Alerts view gives you a high level of availability and performance information for every\n        node you're monitoring with Netdata Cloud. It also offers an easy way to drill down into any\n        particular alert by taking the user to the dedicated alert view from where the user can run\n        metrics correlation or take further troubleshooting steps.\n      </TabsContentText>\n    ),\n    icon: \"alarm\",\n    image: \"images/alerts.jpg\",\n  },\n  Anomalies: {\n    id: \"Anomalies\",\n    label: \"Anomalies\",\n    header: \"Anomaies\",\n    text: () => (\n      <TabsContentText>\n        The Anomalies view on Netdata Cloud lets you quickly surface potentially anomalous metrics\n        and charts related to a particular highlight window of interest using Anomaly Advisor.\n        Anomalies are detected using per metric unsupervised machine learning running at the edge!\n      </TabsContentText>\n    ),\n    icon: \"anomaliesLens\",\n    video:\n      \"https://user-images.githubusercontent.com/24860547/165943403-1acb9759-7446-4704-8955-c566d04ad7ab.mp4\",\n  },\n  Pricing: {\n    id: \"Pricing\",\n    label: \"Pricing\",\n    header: \"Pricing\",\n    text: () => (\n      <TabsContentText>\n        Netdata Cloud’s distributed architecture—with processing occurring at the individual\n        nodes—enables us to add any number of users at marginal cost. Couple this with our upcoming\n        paid plan with added functionality for enterprise customers, and it means we can commit to\n        providing our current functionality for free, always.\n      </TabsContentText>\n    ),\n    image: \"images/pricing.png\",\n    icon: \"pricing\",\n  },\n  Privacy: {\n    id: \"Privacy\",\n    label: \"Privacy\",\n    header: \"Privacy\",\n    text: () => (\n      <>\n        <TabsContentText>\n          Data privacy is very important to us. We firmly believe that your data belongs to you.\n          This is why we don't store any metric data in Netdata Cloud.\n        </TabsContentText>\n        <TabsContentText>\n          Your local installations of the Netdata Agent form the basis for the Netdata Cloud. All\n          the data that you see in the web browser when using Netdata Cloud, is actually streamed\n          directly from the Netdata Agent to the Netdata Cloud dashboard. The data passes through\n          our systems, but it isn't stored. You can learn more about{\" \"}\n          <Anchor\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n            href=\"https://learn.netdata.cloud/docs/agent/netdata-security\"\n          >\n            the Agent's security design\n          </Anchor>{\" \"}\n          design in the Agent documentation.\n        </TabsContentText>\n        <TabsContentText>\n          However, to be able to offer the stunning visualizations and advanced functionality of\n          Netdata Cloud, it does store a limited number of metadata. This metadata is ONLY available\n          to Netdata and NEVER to any 3rd parties. You can learn more about what metadata is stored\n          in Netdata cloud in our\n          <Anchor\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n            href=\"https://learn.netdata.cloud/docs/cloud/data-privacy\"\n          >\n            {\" \"}\n            documentation\n          </Anchor>\n        </TabsContentText>\n      </>\n    ),\n    icon: \"privacy\",\n  },\n}\n","import React from \"react\"\nimport {\n  Text,\n  Drop,\n  ModalContent,\n  ModalBody,\n  ModalHeader,\n  ModalCloseButton,\n  ModalFooter,\n  Flex,\n  Button,\n  Box,\n  H3,\n  H4,\n  Icon,\n} from \"@netdata/netdata-ui\"\n\nimport GoToCloud from \"components/auth/signIn\"\n\nexport const TITLE = \"Discover the free benefits of Netdata Cloud\"\n\nconst DiscoverCloudDrop = ({\n  parentRef,\n  isDropdownOpen,\n  closeDropdown,\n  text,\n  header,\n  handleGoToCloud,\n  image,\n  video,\n}) => {\n  if (parentRef.current && isDropdownOpen)\n    return (\n      <Drop\n        backdrop\n        data-testid=\"selectedNodesDropdown\"\n        onEsc={closeDropdown}\n        align={{ top: \"bottom\", left: \"left\" }}\n        target={parentRef.current}\n        onClickOutside={closeDropdown}\n      >\n        <ModalContent background=\"modalBackground\">\n          <ModalHeader>\n            <Flex gap={2}>\n              <Icon color=\"white\" name=\"netdata\" />\n              <H3 margin={[0]}>{TITLE}:</H3>\n            </Flex>\n\n            <ModalCloseButton onClose={closeDropdown} />\n          </ModalHeader>\n          <ModalBody>\n            <Flex column width={189} height={130}>\n              <Flex padding={[0, 0, 4, 0]} column gap={4}>\n                <Flex alignItems=\"center\">\n                  <H4 margin={[0]}>{header}</H4>\n                  <Box\n                    sx={{ marginLeft: \"auto\" }}\n                    data-testid=\"go-to-cloud-cta\"\n                    margin={[0, 2, 0, 0]}\n                    width={{ min: 40 }}\n                  >\n                    <GoToCloud utmParameters={{ campaign: \"discover_cloud\" }}>\n                      {({ link }) => (\n                        <Box\n                          label={\n                            <Text textTransform=\"none\" strong color=\"panel\">\n                              Sign in to Netdata Cloud!\n                            </Text>\n                          }\n                          width=\"100%\"\n                          onClick={() => handleGoToCloud({ link })}\n                          data-testid=\"cta1-button\"\n                          as={Button}\n                          small\n                          data-ga={\"go-to-cloud-button\"}\n                        />\n                      )}\n                    </GoToCloud>\n                  </Box>\n                </Flex>\n                {text()}\n              </Flex>\n              {image && (\n                <Flex height=\"auto\" width=\"100%\" overflow=\"hidden\">\n                  <Box\n                    sx={{\n                      width: \"100%\",\n                      height: \"auto\",\n                    }}\n                    as=\"img\"\n                    src={image}\n                  ></Box>\n                </Flex>\n              )}\n              {video && (\n                <Flex height=\"100%\" width=\"100%\">\n                  <Box sx={{ width: \"100%\", height: \"100%\" }}>\n                    <iframe\n                      title={`discover-cloud-iframe}`}\n                      width=\"100%\"\n                      height=\"100%\"\n                      src={video}\n                      frameBorder=\"0\"\n                      allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n                      allowFullScreen\n                    />\n                  </Box>\n                </Flex>\n              )}\n            </Flex>\n          </ModalBody>\n          <ModalFooter></ModalFooter>\n        </ModalContent>\n      </Drop>\n    )\n\n  return null\n}\n\nexport default DiscoverCloudDrop\n","import React, { useState, useRef } from \"react\"\nimport { Text, Flex, NavigationTabs } from \"@netdata/netdata-ui\"\n\nimport CloudTab from \"./cloudTab\"\nimport { TITLE } from \"./discoverCloudModal\"\n\nimport { callAll } from \"@/src/utils/utils\"\nimport { TabsContent } from \"./contents\"\n\nimport DiscoverCloudDrop from \"./discoverCloudDrop\"\n\nconst Wrapper = Flex\nconst InnerPositioner = Flex\n\nconst DiscoverCloud = () => {\n  const [isModalOpen, setIsModalOpen] = useState(false)\n  const [selectedModalContent, setSelectedModalContent] = useState(null)\n  const dropDownParentRef = useRef()\n\n  const handleOpenModal = () => {\n    setIsModalOpen(true)\n  }\n\n  const handleCloseModal = () => {\n    setIsModalOpen(false)\n  }\n\n  const handleGoToCloud = ({ link }) => {\n    window.location.href = link\n  }\n\n  const handleSetModalContent = content => {\n    setSelectedModalContent(content)\n  }\n  const handleResetModalContent = () => {\n    setSelectedModalContent(null)\n  }\n\n  return (\n    <Wrapper padding={[0, 0, 0, 4]} position=\"relative\" height={15}>\n      <InnerPositioner\n        padding={[4, 2, 4, 2]}\n        gap={4}\n        height=\"100%\"\n        justifyContent=\"center\"\n        alignItems=\"center\"\n      >\n        <Text color=\"primary\">{TITLE}:</Text>\n        <Flex ref={dropDownParentRef}>\n          <NavigationTabs>\n            {Object.keys(TabsContent).map((key, index) => {\n              const { label, icon, id } = TabsContent[key]\n              const selectedContentId = selectedModalContent ? selectedModalContent.id : null\n              return (\n                <CloudTab\n                  key={key}\n                  icon={icon}\n                  active={id === selectedContentId}\n                  label={label}\n                  showBorderLeft={index === 0}\n                  onActivate={callAll(handleOpenModal, () =>\n                    handleSetModalContent(TabsContent[key])\n                  )}\n                />\n              )\n            })}\n          </NavigationTabs>\n        </Flex>\n      </InnerPositioner>\n      <DiscoverCloudDrop\n        parentRef={dropDownParentRef}\n        isDropdownOpen={isModalOpen}\n        {...selectedModalContent}\n        closeDropdown={callAll(handleCloseModal, handleResetModalContent)}\n        handleGoToCloud={handleGoToCloud}\n      />\n      {/* {isModalOpen && selectedModalContent && (\n        <DiscoverCloudModal\n          {...selectedModalContent}\n          closeModal={callAll(handleCloseModal, handleResetModalContent)}\n          handleGoToCloud={handleGoToCloud}\n        />\n      )} */}\n    </Wrapper>\n  )\n}\n\nexport default DiscoverCloud\n","import React from \"react\"\nimport styled from \"styled-components\"\nimport { Flex, Box } from \"@netdata/netdata-ui\"\nimport Node from \"./node\"\nimport Options from \"./options\"\nimport Version from \"./version\"\nimport GlobalControls from \"./globalControls\"\nimport Alarms from \"./alarms\"\nimport News from \"./news\"\nimport Timezone from \"./timezone\"\nimport SignIn from \"./signIn\"\nimport { CloudConnectionStatus } from \"./ACLK\"\nimport { DiscoverCloud } from \"@/src/components/discover-cloud\"\nimport { selectIsCloudEnabled } from \"domains/global/selectors\"\nimport { useSelector } from \"react-redux\"\n\nconst Wrapper = styled(Flex).attrs({\n  as: \"header\",\n  position: \"relative\",\n  justifyContent: \"between\",\n  background: \"panel\",\n  zIndex: 20,\n  width: \"100%\",\n  padding: [2, 4, 2, 4],\n})`\n  pointer-events: all;\n`\n\nconst Header = () => {\nconst cloudEnabled = useSelector(selectIsCloudEnabled)\n\n return <Wrapper>\n  <Flex alignItems=\"center\" gap={3}>\n    <Node />\n  </Flex>\n  <Flex justifyContent=\"end\" alignItems=\"center\" gap={3}>\n    <CloudConnectionStatus />\n    <Version />\n    <News />\n    <Options />\n    <Timezone />\n    <GlobalControls />\n    <Alarms />\n    <SignIn />\n  </Flex>\n {cloudEnabled&& <Box sx={{ background: \"#272B30\" }} position=\"absolute\" top=\"52px\" left=\"0px\" right=\"0px\">\n    <DiscoverCloud />\n  </Box>} \n</Wrapper>\n}\n\n\n\nexport default Header\n","import styled from \"styled-components\"\nimport { Button } from \"@netdata/netdata-ui\"\n\nconst ExpandButton = styled(Button)`\n&& {\n  > .button-icon {\n    width: 6px;\n    height: 9px;\n  }\n`\nexport default ExpandButton\n","import React from \"react\"\nimport { useSelector } from \"react-redux\"\nimport { Flex } from \"@netdata/netdata-ui\"\nimport { selectCloudBaseUrl } from \"domains/global/selectors\"\nimport { getIframeSrc } from \"@/src/utils\"\n\n\nconst SignOut = ({ flavour = \"default\", ...rest }) => {\n  const cloudBaseURL = useSelector(selectCloudBaseUrl)\n\n  return (\n    <Flex\n      alignItems=\"center\"\n      as=\"iframe\"\n      src={`${getIframeSrc(cloudBaseURL, \"sign-out\")}?type=${flavour}`}\n      border={{ side: \"all\", size: \"0px\" }}\n      width={{ max: \"128px\" }}\n      height={{ max: \"40px\" }}\n      {...rest}\n    />\n  )\n}\n\nexport default SignOut\n","import React, { useMemo } from \"react\"\nimport { ThemeProvider } from \"styled-components\"\nimport { createSelector } from \"reselect\"\nimport { useToggle } from \"react-use\"\nimport { Flex, Button, DarkTheme, Text, Layer } from \"@netdata/netdata-ui\"\nimport { useSelector } from \"store/redux-separate-context\"\nimport { MenuItem } from \"components/menus\"\nimport SignOut from \"components/auth/signOut\"\nimport SignIn from \"components/auth/signIn\"\n\nconst SignInItem = () => {\n  const onClick = (e, link) => {\n    e.stopPropagation()\n    window.location.href = link\n  }\n  return (\n    <SignIn utmParameters={{ content: \"userSettings\" }}>\n      {({ isRegistry, link, onSignIn }) => (\n        <Text onClick={isRegistry ? e => onClick(e, link) : onSignIn}>Sign in</Text>\n      )}\n    </SignIn>\n  )\n}\n\nconst isSignedInSelector = createSelector(\n  ({ dashboard }) => dashboard,\n  ({ isSignedIn }) => isSignedIn\n)\n\nconst UserSettings = () => {\n  const [isOpen, toggle] = useToggle()\n  const signedIn = useSelector(isSignedInSelector)\n\n  const menuItems = useMemo(\n    () => [\n      ...(signedIn\n        ? [\n            {\n              children: \"Operational Status\",\n              onClick: () =>\n                window.open(\"https://status.netdata.cloud\", \"_blank\", \"noopener,noreferrer\"),\n            },\n          ]\n        : []),\n      ...(signedIn ? [{ separator: true }] : []),\n      ...(signedIn\n        ? [\n            {\n              children: (\n                <SignOut\n                  data-testid=\"signout-button-sidebar\"\n                  flavour=\"borderless\"\n                  height={{ max: \"18px\" }}\n                />\n              ),\n            },\n          ]\n        : [{ children: <SignInItem /> }]),\n    ],\n    [signedIn]\n  )\n\n  return (\n    <ThemeProvider theme={DarkTheme}>\n      <Button\n        data-testid=\"avatar-button-sidebar\"\n        flavour=\"borderless\"\n        neutral\n        icon=\"user\"\n        title=\"User settings\"\n        name=\"userSettings\"\n        onClick={toggle}\n      />\n      {isOpen && (\n        <Layer\n          position=\"bottom-left\"\n          onClickOutside={toggle}\n          onEsc={toggle}\n          backdrop={false}\n          margin={[5, 18]}\n        >\n          <Flex column width={52} background=\"mainBackground\" padding={[3]} round>\n            {menuItems.map((item, i) => {\n              if (item.separator) return <Flex height=\"1px\" background=\"disabled\" key={i} />\n              return (\n                <MenuItem\n                  key={i}\n                  padding={[2, 4]}\n                  round={1}\n                  {...(item.onClick && { onClick: item.onClick })}\n                >\n                  {item.children}\n                </MenuItem>\n              )\n            })}\n          </Flex>\n        </Layer>\n      )}\n    </ThemeProvider>\n  )\n}\n\nexport default UserSettings\n","import React from \"react\"\nimport { Flex, Button } from \"@netdata/netdata-ui\"\n\nconst SpacesSkeleton = () => (\n  <React.Fragment>\n    <Flex\n      width=\"40px\"\n      height=\"40px\"\n      round={2}\n      border={{ side: \"all\", color: \"border\", size: \"2px\", type: \"dotted\" }}\n    />\n    <Flex height=\"1px\" background=\"separator\" width=\"20px\" />\n    <Button icon=\"plus\" disabled />\n  </React.Fragment>\n)\n\nexport default SpacesSkeleton\n","import React from \"react\"\nimport { Flex } from \"@netdata/netdata-ui\"\nimport { useSelector } from \"store/redux-separate-context\"\nimport { selectCloudBaseUrl } from \"domains/global/selectors\"\nimport { getIframeSrc } from \"utils/utils\"\n\nconst SpacesIframe = () => {\n  const cloudBaseURL = useSelector(selectCloudBaseUrl)\n  return (\n    <Flex\n      as=\"iframe\"\n      src={getIframeSrc(cloudBaseURL, \"space-bar\")}\n      title=\"Space Bar\"\n      height=\"100%\"\n      width=\"100%\"\n      border={{ side: \"all\", size: \"0px\" }}\n      overflow=\"hidden\"\n    />\n  )\n}\n\nexport default SpacesIframe\n","import React from \"react\"\nimport { useSelector } from \"react-redux\"\nimport { Icon, Flex, Button, Documentation } from \"@netdata/netdata-ui\"\nimport { selectIsCloudEnabled } from \"domains/global/selectors\"\nimport ExpandButton from \"./expandButton\"\nimport UserSettings from \"./userSettings\"\nimport SpacesSkeleton from \"./spacesSkeleton\"\nimport SpacesIframe from \"./spacesIframe\"\n\nconst Spaces = ({ isOpen, toggle, isSignedIn }) => {\n  const cloudEnabled = useSelector(selectIsCloudEnabled)\n\n  return (\n    <Flex\n      column\n      justifyContent=\"between\"\n      background=\"panel\"\n      padding={[3, 0]}\n      width=\"64px\"\n      alignItems=\"center\"\n      gap={6}\n      position=\"relative\"\n      overflow=\"hidden\"\n    >\n      <Flex column gap={4} alignItems=\"center\" height=\"100%\" overflow=\"hidden\">\n        <Icon color=\"success\" name=\"netdataPress\" height=\"32px\" width=\"32px\" />\n        {!isOpen && (\n          <ExpandButton\n            icon=\"chevron_right_s\"\n            onClick={toggle}\n            small\n            neutral\n            flavour=\"borderless\"\n            themeType=\"dark\"\n          />\n        )}\n        {cloudEnabled && isSignedIn && <SpacesIframe />}\n        {cloudEnabled && !isSignedIn && <SpacesSkeleton />}\n      </Flex>\n      <Flex column gap={4} alignItems=\"center\">\n        <Documentation app=\"agent\">\n          {toggle => (\n            <Button\n              flavour=\"borderless\"\n              neutral\n              themeType=\"dark\"\n              className=\"btn\"\n              icon=\"question\"\n              onClick={toggle}\n              title=\"Need help?\"\n            />\n          )}\n        </Documentation>\n        <Button\n          flavour=\"borderless\"\n          neutral\n          themeType=\"dark\"\n          className=\"btn\"\n          data-toggle=\"modal\"\n          data-target=\"#optionsModal\"\n          icon=\"gear\"\n          title=\"Settings\"\n        />\n        {cloudEnabled && <UserSettings />}\n      </Flex>\n    </Flex>\n  )\n}\n\nexport default Spaces\n","// some old functions here, i don't have time to comprehend them now\n\n// --------------------------------------------------------------------\n// natural sorting\n// http://www.davekoelle.com/files/alphanum.js - LGPL\n\nconst naturalSortChunkify = (t: string) => {\n  const tz = []\n  let x = 0\n  let y = -1; let n = 0 as boolean | number; let i; let j\n\n  // eslint-disable-next-line no-cond-assign,no-plusplus\n  while (i = (j = t.charAt(x++)).charCodeAt(0)) {\n    const m = (i >= 48 && i <= 57)\n    if (m !== n) {\n      // eslint-disable-next-line no-plusplus\n      tz[++y] = \"\"\n      n = m\n    }\n    tz[y] += j\n  }\n\n  return tz\n}\n\n\nexport const naturalSortCompare = (a: string, b: string) => {\n  const aa = naturalSortChunkify(a.toLowerCase())\n  const bb = naturalSortChunkify(b.toLowerCase())\n\n  // eslint-disable-next-line no-plusplus\n  for (let x = 0; aa[x] && bb[x]; x++) {\n    if (aa[x] !== bb[x]) {\n      const c = Number(aa[x]); const\n        d = Number(bb[x])\n      if (c.toString() === aa[x] && d.toString() === bb[x]) {\n        return c - d\n      }\n      return (aa[x] > bb[x]) ? 1 : -1\n    }\n  }\n  return aa.length - bb.length\n}\n\n\ninterface ObjectsWithPriority {\n  [key: string]: {\n    priority: number\n  }\n}\nexport const sortObjectByPriority = <T extends ObjectsWithPriority>(object: T) => {\n  const sorted = Object.keys(object)\n\n  sorted.sort((a, b) => {\n    if (object[a].priority < object[b].priority) {\n      return -1\n    }\n    if (object[a].priority > object[b].priority) {\n      return 1\n    }\n    return naturalSortCompare(a, b)\n  })\n\n  return sorted\n}\n\n\ninterface PrioritySortObject {\n  name: string\n  priority: number\n}\nexport const prioritySort = <T extends PrioritySortObject>(a: T, b: T) => {\n  if (a.priority < b.priority) {\n    return -1\n  }\n  if (a.priority > b.priority) {\n    return 1\n  }\n  return naturalSortCompare(a.name, b.name)\n}\n","import { naturalSortCompare } from \"domains/dashboard/utils/sorting\"\n\nconst getBaseUrl = hostname => {\n  let base = document.location.origin.toString() + decodeURI(document.location.pathname.toString())\n  if (base.endsWith(`/host/${hostname}/`)) {\n    base = base.substring(0, base.length - `/host/${hostname}/`.toString().length)\n  }\n\n  if (base.endsWith(\"/\")) {\n    base = base.substring(0, base.length - 1)\n  }\n\n  return base\n}\n\nconst getNodeUrl = (baseUrl, hostname) => `${baseUrl}/host/${hostname}/`\n\nconst getNodes = (hosts, hostname, hostsStatus) => {\n  if (!hosts || !hostname) return {}\n\n  // decodeURI, because pathname (which is hostname) can contain white-spaces\n  // or other characters which are URIencoded when user clicks the link\n  // and we need to match it with `chartsMetadata.hostname`\n  const baseUrl = getBaseUrl(hostname)\n\n  const [{ hostname: parentNodeHostname }] = hosts\n\n  const parentNode = {\n    hostname: parentNodeHostname,\n    url: `${baseUrl}/`,\n  }\n\n  const replicatedNodes = hosts\n    .slice(1)\n    .map(({ hostname }, index) => ({\n      hostname,\n      url: getNodeUrl(baseUrl, hostname),\n      status: hostsStatus.find(host => host.hostname === hostname)?.reachable || false,\n    }))\n    .sort((a, b) => naturalSortCompare(a.hostname, b.hostname))\n\n  return {\n    parentNode,\n    replicatedNodes,\n  }\n}\n\nexport default getNodes\n","import styled from \"styled-components\"\nimport { Flex } from \"@netdata/netdata-ui\"\n\nconst Anchor = styled(Flex).attrs({\n  as: \"a\",\n  gap: 2,\n  alignItems: \"center\",\n})`\n  & :hover {\n    text-decoration: none;\n  }\n`\n\nexport default Anchor\n","import React from \"react\"\nimport { Flex, Text, Icon } from \"@netdata/netdata-ui\"\nimport Pill from \"components/header/pill\"\nimport Anchor from \"./anchor\"\n\nconst Node = ({ hostname, url, status }) => {\n  return (\n    <Anchor href={url} justifyContent=\"between\" padding={[0, 0, 0, 2]}>\n      <Flex alignItems=\"center\" gap={2}>\n        <Icon name=\"node\" color=\"bright\" />\n        <Text color=\"bright\" truncate>\n          {hostname}\n        </Text>\n      </Flex>\n      <Pill background={status ? \"success\" : \"border\"} color=\"bright\" round={10}>\n        {status ? \"Live\" : \"Off\"}\n      </Pill>\n    </Anchor>\n  )\n}\n\nexport default Node\n","import React, { useState, useCallback, useMemo } from \"react\"\nimport styled from \"styled-components\"\nimport { Flex, Text, Icon, TextInput } from \"@netdata/netdata-ui\"\nimport { MenuList } from \"components/menus\"\nimport Anchor from \"./anchor\"\nimport Node from \"./node\"\n\nconst Search = styled(TextInput)`\n  & > label {\n    margin-bottom: 0;\n  }\n`\n\nconst StyledIcon = styled(Icon)`\n  transform: ${({ right }) => (right ? \"rotate(270deg)\" : \"none\")};\n`\n\nconst ReplicatedNodes = ({ parentNode, replicatedNodes }) => {\n  const [listOpen, setListOpen] = useState(true)\n  const [value, setValue] = useState(\"\")\n\n  const toggleListOpen = useCallback(() => setListOpen(o => !o), [])\n  const onChange = useCallback(e => setValue(e.target.value), [])\n\n  const nodes = useMemo(() => {\n    if (!value) return replicatedNodes\n    return replicatedNodes.filter(({ hostname }) =>\n      hostname.toLowerCase().includes(value.toLowerCase())\n    )\n  }, [replicatedNodes, value])\n\n  return (\n    <MenuList\n      isOpen={listOpen}\n      toggleOpen={toggleListOpen}\n      label={\n        <Flex alignItems=\"center\" justifyContent=\"between\">\n          <Text strong color=\"border\">\n            Replicated nodes\n          </Text>\n          <StyledIcon right={!listOpen} name=\"chevron_down\" size=\"small\" color=\"text\" />\n        </Flex>\n      }\n    >\n      <Flex column gap={4} padding={[4, 0, 0]}>\n        <Anchor as=\"a\" href={parentNode.url} justifyContent=\"start\">\n          <Icon name=\"nodes\" size=\"small\" color=\"bright\" />\n          <Text color=\"bright\">{parentNode.hostname}</Text>\n        </Anchor>\n        {nodes.length >= 5 && (\n          <Flex padding={[0, 0, 0, 2]}>\n            <Search\n              value={value}\n              onChange={onChange}\n              iconLeft={<Icon name=\"search_s\" size=\"small\" color=\"text\" />}\n              metaShrinked\n            />\n          </Flex>\n        )}\n        <Flex column gap={2}>\n          {nodes.map(({ hostname, url, status }) => (\n            <Node key={hostname} hostname={hostname} url={url} status={status} />\n          ))}\n        </Flex>\n      </Flex>\n    </MenuList>\n  )\n}\n\nexport default ReplicatedNodes\n","import React, { useRef, useEffect } from \"react\"\nimport { Flex } from \"@netdata/netdata-ui\"\nimport { useSelector } from \"store/redux-separate-context\"\nimport { sendToChildIframe, useListenToPostMessage } from \"@/src/utils/post-message\"\nimport { getIframeSrc } from \"@/src/utils\"\nimport { selectCloudBaseUrl } from \"domains/global/selectors\"\n\nconst SpacePanelIframe = ({ parentNode, replicatedNodes }) => {\n  const cloudBaseURL = useSelector(selectCloudBaseUrl)\n\n  const ref = useRef()\n\n  const [spacePanelMessage] = useListenToPostMessage(\"hello-from-space-panel\")\n\n  useEffect(() => {\n    if (!spacePanelMessage || !ref.current) return\n    sendToChildIframe(ref.current, {\n      type: \"streamed-hosts-data\",\n      payload: { parentNode, replicatedNodes },\n    })\n  }, [replicatedNodes, parentNode, spacePanelMessage])\n\n  return (\n    <Flex\n      ref={ref}\n      as=\"iframe\"\n      src={getIframeSrc(cloudBaseURL, \"space-panel\")}\n      title=\"space panel\"\n      width=\"100%\"\n      height=\"100%\"\n      border={{ side: \"all\", size: \"0px\" }}\n    />\n  )\n}\n\nexport default SpacePanelIframe\n","import React from \"react\"\nimport { TextSmall } from \"@netdata/netdata-ui\"\n\nconst promptContent = {\n  signIn: {\n    title: \"Welcome back!\",\n    content: [\n      <TextSmall key=\"1\" color=\"bright\">\n        Sign in again to enjoy the benefits of Netdata Cloud{\" \"}\n      </TextSmall>,\n    ],\n  },\n  signUp: {\n    title: \"Welcome to Netdata Cloud!\",\n    content: [\n      <TextSmall key=\"1\" color=\"bright\">\n        <TextSmall strong color=\"bright\">\n          A single place\n        </TextSmall>{\" \"}\n        for all your nodes.\n      </TextSmall>,\n      <TextSmall key=\"2\" color=\"bright\">\n        <TextSmall strong color=\"bright\">\n          Multi-node dashboards\n        </TextSmall>{\" \"}\n        out of the box.\n      </TextSmall>,\n      <TextSmall key=\"3\" color=\"bright\">\n        <TextSmall strong color=\"bright\">\n          Custom dashboards\n        </TextSmall>{\" \"}\n        for you to create, edit and share online.\n      </TextSmall>,\n      <TextSmall key=\"4\" color=\"bright\">\n        <TextSmall strong color=\"bright\">\n          Metric Correlations\n        </TextSmall>{\" \"}\n        to find the root cause of anything.\n      </TextSmall>,\n      <TextSmall key=\"5\" color=\"bright\">\n        <TextSmall strong color=\"bright\">\n          Centrally dispatched notifications\n        </TextSmall>{\" \"}\n        for all alarms of all your nodes.\n      </TextSmall>,\n      <TextSmall key=\"6\" color=\"bright\">\n        And... It is{\" \"}\n        <TextSmall\n          as=\"a\"\n          href=\"https://www.netdata.cloud/get-netdata/\"\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n          strong\n          color=\"bright\"\n        >\n          free, forever!\n        </TextSmall>\n      </TextSmall>,\n    ],\n  },\n}\n\nexport default promptContent\n","import React from \"react\"\nimport { Flex, Text, Button } from \"@netdata/netdata-ui\"\nimport SignIn from \"@/src/components/auth/signIn\"\nimport promptContent from \"./promptContent\"\n\nconst SignInPrompt = () => {\n  return (\n    <SignIn utmParameters={{ content: \"sidebar\" }}>\n      {({ isRegistry, link, onSignIn, offline }) => {\n        const { title, content } = promptContent[\"signIn\"]\n        return (\n          <Flex\n            background={[\"neutral\", \"regentgrey\"]}\n            column\n            gap={4}\n            padding={[10]}\n            border={{ side: \"right\", color: \"panel\" }}\n          >\n            <Text color=\"bright\" strong>\n              {title}\n            </Text>\n            {content.map(el => el)}\n            <Button\n              width=\"100%\"\n              label=\"Sign in\"\n              disabled={offline}\n              {...(isRegistry ? { as: \"a\", href: link } : { onClick: onSignIn })}\n            />\n          </Flex>\n        )\n      }}\n    </SignIn>\n  )\n}\n\nexport default SignInPrompt\n","import React from \"react\"\n\nconst NoNetwork = () => (\n  <svg width=\"68\" height=\"68\" viewBox=\"0 0 68 68\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n    <path\n      d=\"M48.875 6.375H19.125C16.7778 6.375 14.875 8.27779 14.875 10.625V40.375C14.875 42.7222 16.7778 44.625 19.125 44.625H48.875C51.2222 44.625 53.125 42.7222 53.125 40.375V10.625C53.125 8.27779 51.2222 6.375 48.875 6.375Z\"\n      fill=\"white\"\n      stroke=\"#AEB3B7\"\n    />\n    <path\n      fillRule=\"evenodd\"\n      clipRule=\"evenodd\"\n      d=\"M41.0834 38.25C41.8658 38.25 42.5 38.8843 42.5 39.6667V41.0833C44.0648 41.0833 45.3334 42.3519 45.3334 43.9167V58.0833C45.3334 59.6481 44.0648 60.9167 42.5 60.9167H38.25V65.1667H31.8278V60.9167H26.9167C25.3519 60.9167 24.0834 59.6481 24.0834 58.0833V43.9167C24.0834 42.3519 25.3519 41.0833 26.9167 41.0833V39.6667C26.9167 38.8843 27.551 38.25 28.3334 38.25H41.0834Z\"\n      fill=\"#35414A\"\n    />\n    <path\n      fillRule=\"evenodd\"\n      clipRule=\"evenodd\"\n      d=\"M39.7954 12.75C40.5778 12.75 41.2121 13.3843 41.2121 14.1667L41.2108 16.7294L43.9166 16.7296C44.699 16.7296 45.3333 17.3639 45.3333 18.1463V34C45.3333 34.7824 44.699 35.4167 43.9166 35.4167L43.272 35.4152L43.2727 33.3403H41.2121L41.2108 35.4152H39.151L39.1515 33.3403H37.0909L37.0897 35.4152H35.0299L35.0303 33.3403H32.9697L32.9686 35.4152H30.9088L30.909 33.3403H28.8484L28.8475 35.4152H26.7877L26.7878 33.3403H24.7272L24.7265 35.4152L24.0833 35.4167C23.3009 35.4167 22.6666 34.7824 22.6666 34V18.1463C22.6666 17.3639 23.3009 16.7296 24.0833 16.7296L26.7877 16.7294L26.7878 14.1667C26.7878 13.3843 27.4221 12.75 28.2045 12.75H39.7954Z\"\n      fill=\"#35414A\"\n    />\n  </svg>\n)\n\nexport default NoNetwork\n","import React from \"react\"\nimport { Flex, TextNano, TextSmall } from \"@netdata/netdata-ui\"\nimport NoNetwork from \"./noNetwork\"\n\nconst OfflinePrompt = () => (\n  <Flex alignItems=\"center\" background={[\"neutral\", \"regentgrey\"]} column gap={1} padding={[10]}>\n    <TextSmall color=\"bright\" strong textAlign=\"center\">\n      Can't connect to Netdata Cloud\n    </TextSmall>\n    <NoNetwork />\n    <TextNano color=\"bright\" textAlign=\"center\" margin={[2, 0, 0]}>\n      Maybe you are behind a firewall or you don’t have connection to the internet\n    </TextNano>\n  </Flex>\n)\n\nexport default OfflinePrompt\n","import styled from \"styled-components\"\nimport { getSizeBy, getColor, Icon, TextNano, Text } from \"@netdata/netdata-ui\"\n\nexport const NodesContainer = styled.div`\n  .mdc-list-item {\n    padding: 0 0;\n    padding-left: 0;\n  }\n  .rmwc-collapsible-list__children {\n    .mdc-list-item {\n      padding: 0 0;\n      padding-left: 0;\n      height: ${getSizeBy(4)};\n    }\n  }\n  .rmwc-collapsible-list__handle {\n    .mdc-list-item {\n      padding: 0 ${getSizeBy(2)};\n    }\n  }\n  .mdc-list-item__meta {\n    color: ${getColor(\"bright\")};\n  }\n  .mdc-list-item:before {\n    background: none;\n  }\n`\n\nexport const ListItem = styled.div`\n  width: 100%;\n  min-height: ${getSizeBy(3)};\n  display: flex;\n  flex-flow: row nowrap;\n  align-items: center;\n  cursor: pointer;\n  justify-content: space-between;\n`\n\nexport const TrashIcon = styled(Icon)`\n  fill: #35414a;\n  margin-right: ${getSizeBy(2)};\n  transition: opacity 0.4s ease-in;\n  &:hover {\n    opacity: 0.6;\n  }\n`\n\nexport const StyledIcon = styled(Icon)`\n  flex-shrink: 0;\n  flex-grow: 0;\n  margin-right: ${getSizeBy(2)};\n  fill: ${getColor([\"gray\", \"arsenic\"])};\n`\n\n// @ts-ignore todo extend interface in dashboard due to lack of types in netdata-ui\nexport const NodeUrl = styled(TextNano.withComponent(\"a\"))`\n  text-decoration: none;\n  margin-left: ${getSizeBy(5)};\n  color: #aeb3b7;\n  max-width: 145px;\n  word-wrap: break-word;\n  &:hover {\n    color: inherit; // overwrite bootstrap\n    text-decoration: none;\n  }\n`\n\n// @ts-ignore todo\nexport const NodeName = styled(Text.withComponent(\"a\"))`\n  flex: 1;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  min-width: 0;\n  white-space: nowrap;\n`\n","import React, { useCallback, useState } from \"react\"\nimport { CollapsibleList, SimpleListItem } from \"@rmwc/list\"\nimport \"@material/list/dist/mdc.list.css\"\nimport \"@rmwc/list/collapsible-list.css\"\nimport \"@rmwc/icon/icon.css\"\nimport { Box, Flex, Text } from \"@netdata/netdata-ui\"\n\nimport truncateMiddle from \"utils/truncateMiddle\"\nimport { naturalSortCompare } from \"domains/dashboard/utils/sorting\"\nimport { MASKED_DATA } from \"domains/global/constants\"\nimport { MenuList } from \"components/menus\"\n\nimport { NodesContainer, ListItem, StyledIcon, NodeUrl, NodeName, TrashIcon } from \"./styled\"\n\nconst Node = ({ name, alternateUrls, machineGuid }) => (\n  <CollapsibleList\n    handle={\n      <SimpleListItem\n        text={\n          <>\n            <StyledIcon name=\"node\" />\n            <NodeName\n              color=\"bright\"\n              href=\"\"\n              onClick={event => {\n                event.preventDefault() // prevent navigating to url\n                event.stopPropagation()\n                window.gotoServerModalHandler(machineGuid)\n              }}\n            >\n              {name}\n            </NodeName>\n          </>\n        }\n        metaIcon={alternateUrls.length && \"chevron_right\"}\n      />\n    }\n  >\n    <Box margin={[2, 0, 0]}>\n      {alternateUrls.map(url => (\n        <ListItem key={url}>\n          <NodeUrl href={url}>{truncateMiddle(url, 50)}</NodeUrl>\n          <TrashIcon\n            name=\"trashcan\"\n            size=\"small\"\n            onClick={() => {\n              window.deleteRegistryModalHandler(machineGuid, name, url)\n            }}\n          />\n        </ListItem>\n      ))}\n    </Box>\n  </CollapsibleList>\n)\n\nexport const VisitedNodes = ({ machinesArray }) => {\n  const sortedMachines = machinesArray\n    .sort((a, b) => naturalSortCompare(a.name, b.name))\n    .filter(({ url }) => url !== MASKED_DATA)\n\n  const [listOpen, setListOpen] = useState(true)\n  const toggleListOpen = useCallback(() => setListOpen(o => !o), [])\n\n  return (\n    <MenuList\n      isOpen={listOpen}\n      toggleOpen={toggleListOpen}\n      label={\n        <Flex alignItems=\"center\" justifyContent=\"between\">\n          <Text strong color=\"border\">\n            Visited Nodes\n          </Text>\n          <StyledIcon right={!listOpen} name=\"chevron_down\" size=\"small\" color=\"text\" />\n        </Flex>\n      }\n    >\n      <NodesContainer column gap={2}>\n        {sortedMachines.map(({ name, alternateUrls, guid, url }) => (\n          <Node\n            alternateUrls={alternateUrls}\n            key={`${name}-${guid}`}\n            machineGuid={guid}\n            name={name}\n            url={url}\n          />\n        ))}\n      </NodesContainer>\n    </MenuList>\n  )\n}\n\nexport default VisitedNodes\n","export default (text, maxLength) => {\n  if (text.length <= maxLength) return text\n\n  const spanLength = Math.floor((maxLength - 3) / 2)\n  return `${text.substring(0, spanLength)}...${text.substring(text.length - spanLength)}`\n}\n","import React, { useCallback } from \"react\"\nimport { useSelector } from \"react-redux\"\nimport { createSelector } from \"reselect\"\nimport { Flex, Text, TextSmall, Collapsible, Button } from \"@netdata/netdata-ui\"\nimport { selectIsUsingGlobalRegistry, selectIsCloudEnabled } from \"domains/global/selectors\"\nimport getNodes from \"./nodes\"\nimport ReplicatedNodes from \"./replicatedNodes\"\nimport SpacePanelIframe from \"./spacePanelIframe\"\nimport SignInPrompt from \"./prompts/signIn\"\nimport OfflinePrompt from \"./prompts/offline\"\nimport VisitedNodes from \"./visitedNodes\"\n\nconst replicatedNodesSelector = createSelector(\n  state => state.global.chartsMetadata.data || {},\n  state => state.global.registry.fullInfoPayload.mirrored_hosts_status || {},\n  ({ hosts, hostname }, hostsStatus) => getNodes(hosts, hostname, hostsStatus)\n)\n\nconst visitedNodesSelector = createSelector(\n  state => state.global.registry,\n  registry => registry.registryMachinesArray || []\n)\n\nconst isSignedInSelector = createSelector(\n  ({ dashboard }) => dashboard,\n  ({ isSignedIn, offline }) => ({ isSignedIn, offline })\n)\n\nconst Space = ({ isOpen, toggle }) => {\n  const { parentNode = {}, replicatedNodes = [] } = useSelector(replicatedNodesSelector)\n  const visitedNodes = useSelector(visitedNodesSelector)\n  const globalRegistry = useSelector(selectIsUsingGlobalRegistry)\n  const { isSignedIn, offline } = useSelector(isSignedInSelector)\n  const cloudEnabled = useSelector(selectIsCloudEnabled)\n\n  const switchIdentity = useCallback(() => window.switchRegistryModalHandler(), [])\n\n  return (\n    <Collapsible width={74} background=\"panel\" open={isOpen} direction=\"horizontal\" persist>\n      <Flex\n        flex\n        column\n        overflow={{ vertical: \"hidden\" }}\n        margin={[3, 0, 0]}\n        border={{ side: \"left\", color: \"separator\" }}\n        style={{ pointerEvents: \"all\" }}\n      >\n        <Flex overflow={{ vertical: \"auto\" }} flex column gap={4} padding={[4]}>\n          <Flex alignSelf=\"end\">\n            <Button\n              neutral\n              flavour=\"borderless\"\n              themeType=\"dark\"\n              small\n              icon=\"chevron_left\"\n              onClick={toggle}\n            />\n          </Flex>\n          {!isSignedIn && (\n            <>\n              {!!replicatedNodes.length && (\n                <ReplicatedNodes parentNode={parentNode} replicatedNodes={replicatedNodes} />\n              )}\n              {!!visitedNodes.length && (\n                <Text strong color=\"border\">\n                  <VisitedNodes machinesArray={visitedNodes} />\n                </Text>\n              )}\n            </>\n          )}\n          {isSignedIn && (\n            <SpacePanelIframe parentNode={parentNode} replicatedNodes={replicatedNodes} />\n          )}\n        </Flex>\n        {globalRegistry && (\n          <Flex border={{ side: \"top\" }} justifyContent=\"center\" alignItems=\"center\" padding={[6]}>\n            <TextSmall onClick={switchIdentity}>Switch Identity</TextSmall>\n          </Flex>\n        )}\n        {!isSignedIn && cloudEnabled && <SignInPrompt />}\n        {offline && cloudEnabled && <OfflinePrompt />}\n      </Flex>\n    </Collapsible>\n  )\n}\n\nexport default React.memo(Space)\n","import React, { useCallback, useEffect } from \"react\"\nimport styled from \"styled-components\"\nimport { createSelector } from \"reselect\"\nimport { Flex } from \"@netdata/netdata-ui\"\nimport { useDispatch, useSelector } from \"react-redux\"\nimport { useLocalStorage } from \"react-use\"\nimport { selectSpacePanelIsActive } from \"@/src/domains/global/selectors\"\nimport { setSpacePanelStatusAction } from \"@/src/domains/global/actions\"\nimport Spaces from \"./spaces\"\nimport Space from \"./space\"\n\nconst Wrapper = styled(Flex).attrs({ height: \"100vh\", zIndex: 10 })`\n  pointer-events: all;\n`\n\nconst isSignedInSelector = createSelector(\n  ({ dashboard }) => dashboard,\n  ({ isSignedIn }) => isSignedIn\n)\n\nconst Sidebar = () => {\n  const [lsValue, setLsValue] = useLocalStorage(\"space-panel-state\")\n  const isOpen = useSelector(selectSpacePanelIsActive)\n  const signedIn = useSelector(isSignedInSelector)\n\n  const dispatch = useDispatch()\n\n  const toggle = useCallback(() => {\n    dispatch(setSpacePanelStatusAction({ isActive: !isOpen }))\n    setLsValue(!isOpen)\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [isOpen])\n\n  useEffect(() => {\n    dispatch(setSpacePanelStatusAction({ isActive: lsValue ? signedIn : false }))\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [signedIn])\n\n  return (\n    <Wrapper>\n      <Spaces isOpen={isOpen} toggle={toggle} isSignedIn={signedIn} />\n      <Space isOpen={isOpen} toggle={toggle} offline={true} />\n    </Wrapper>\n  )\n}\n\nexport default React.memo(Sidebar)\n","import React from \"react\"\nimport styled from \"styled-components\"\nimport { Flex } from \"@netdata/netdata-ui\"\nimport Header from \"components/header\"\nimport Sidebar from \"components/sidebar\"\n\nconst Wrapper = styled(Flex).attrs({\n  position: \"fixed\",\n  justifyContent: \"start\",\n  alignItems: \"start\",\n  width: \"100%\",\n  zIndex: 10,\n})`\n  top: 0;\n  left: 0;\n  pointer-events: none;\n`\n\nconst Layout = ({ children, printMode }) => {\n\n  if (printMode) return children\n\n  return (\n    <Wrapper>\n      <Sidebar />\n      <Header />\n      {children}\n    </Wrapper>\n  )\n}\n\nexport default Layout\n","import { DefaultTheme, DarkTheme } from \"@netdata/netdata-ui\"\n\nexport type DashboardTheme = any\n\nexport const mapTheme = (theme: DashboardTheme): any =>\n  ({\n    slate: DarkTheme,\n    white: DefaultTheme,\n  }[theme] || DarkTheme)\n","import React, { useState, useCallback } from \"react\"\nimport GoToCloud from \"components/auth/signIn\"\n\nimport {\n  Modal,\n  ModalContent,\n  ModalBody,\n  ModalFooter,\n  ModalHeader,\n  Text,\n  Flex,\n  H3,\n  Button,\n  Box,\n  Checkbox,\n} from \"@netdata/netdata-ui\"\n\nconst campaign = \"agent_nudge_to_cloud\"\n\nconst MigrationModal = ({\n  migrationModalPromoInfo,\n  setUserPrefrence,\n  closeModal,\n  savePromoRemindMeSelection,\n  migrationModalPromo,\n  requestRefreshOfAccess,\n}) => {\n  const [isRememberChoiceChecked, setIsRememberChoiceChecked] = useState(false)\n\n  const handleCheckBoxChange = e => {\n    setIsRememberChoiceChecked(e.currentTarget.checked)\n  }\n\n  const handleClickedCTA1 = useCallback(\n    ({ link, toPath }) => {\n      const { CTA1 } = migrationModalPromoInfo\n\n      if (CTA1.action === \"NAVIGATE\") {\n        if (isRememberChoiceChecked) {\n          setUserPrefrence(CTA1.userPreference)\n          savePromoRemindMeSelection(isRememberChoiceChecked)\n        }\n        if (toPath !== \"agent\") window.location.href = link\n        closeModal()\n      } else if (CTA1.action === \"REFRESH\") {\n        requestRefreshOfAccess()\n      }\n    },\n    [\n      migrationModalPromoInfo,\n      setUserPrefrence,\n      isRememberChoiceChecked,\n      requestRefreshOfAccess,\n      savePromoRemindMeSelection,\n      closeModal,\n    ]\n  )\n\n  const handleClickedCTA2 = useCallback(() => {\n    const { CTA2 } = migrationModalPromoInfo\n    if (isRememberChoiceChecked) {\n      setUserPrefrence(CTA2.userPreference)\n      savePromoRemindMeSelection(isRememberChoiceChecked)\n    }\n    if (CTA2.action === \"NAVIGATE\") {\n    } else if (CTA2.action === \"REFRESH\") {\n      requestRefreshOfAccess()\n    }\n    closeModal()\n  }, [\n    migrationModalPromoInfo,\n    setUserPrefrence,\n    isRememberChoiceChecked,\n    requestRefreshOfAccess,\n    savePromoRemindMeSelection,\n    closeModal,\n  ])\n\n  return migrationModalPromoInfo ? (\n    <Modal>\n      <ModalContent width={180} background=\"modalBackground\">\n        <ModalHeader>\n          <H3 margin={[0]}>{migrationModalPromoInfo.title}</H3>\n        </ModalHeader>\n        <ModalBody>\n          <Flex padding={[0, 0, 4, 0]} column gap={3}>\n            {typeof migrationModalPromoInfo.text.header === \"function\" ? (\n              migrationModalPromoInfo.text.header({})\n            ) : (\n              <Text>{migrationModalPromoInfo.text.header}</Text>\n            )}\n            {migrationModalPromoInfo.text.bullets.length > 0 && (\n              <Flex column gap={3}>\n                <Flex column gap={1} as={\"ul\"}>\n                  {migrationModalPromoInfo.text.bullets.map(bullet => {\n                    if (typeof bullet === \"function\") {\n                      return <li key={bullet}>{bullet()}</li>\n                    }\n                    return (\n                      <li key={bullet}>\n                        <Text>{bullet}</Text>\n                      </li>\n                    )\n                  })}\n                </Flex>\n              </Flex>\n            )}\n            {migrationModalPromoInfo.text.footer && (\n              <Text data-testid=\"body-footer\">{migrationModalPromoInfo.text.footer}</Text>\n            )}\n          </Flex>\n        </ModalBody>\n        <ModalFooter>\n          <Box margin={[0, \"auto\", 0, 0]}>\n            <Checkbox\n              data-ga={`${migrationModalPromo}::click-remind-me::ad`}\n              data-testid=\"remind-me-checkbox\"\n              checked={isRememberChoiceChecked}\n              onChange={handleCheckBoxChange}\n              label={migrationModalPromoInfo.tickBoxOption.text}\n            />\n          </Box>\n          <Box data-testid=\"cta1\" margin={[0, 2, 0, 0]} width={{ min: 40 }}>\n            <GoToCloud utmParameters={{ content: migrationModalPromo, campaign }}>\n              {({ link }) => (\n                <Button\n                  data-ga={`${migrationModalPromo}::click-ct1::ad`}\n                  textTransform=\"none\"\n                  data-testid=\"cta1-button\"\n                  onClick={() =>\n                    handleClickedCTA1({ link, toPath: migrationModalPromoInfo.CTA1.toPath })\n                  }\n                  width=\"100%\"\n                  label={migrationModalPromoInfo.CTA1.text}\n                />\n              )}\n            </GoToCloud>\n          </Box>\n          {migrationModalPromoInfo.CTA2 && (\n            <Box\n              data-ga={`${migrationModalPromo}::click-ct2::ad`}\n              onClick={handleClickedCTA2}\n              height={10}\n              className=\"btn btn-default\"\n              data-testid=\"cta2\"\n              width={{ min: 40 }}\n            >\n              <Box as={Text} sx={{ fontWeight: \"500\", lineHeight: \"25px\" }}>\n                {migrationModalPromoInfo.CTA2.text}\n              </Box>\n            </Box>\n          )}\n        </ModalFooter>\n      </ModalContent>\n    </Modal>\n  ) : null\n}\n\nexport default MigrationModal\n","import React, { useState, useEffect, useMemo } from \"react\"\nimport { useLocalStorage } from \"react-use\"\nimport { useSelector } from \"react-redux\"\n\nimport { selectUserNodeAccess } from \"domains/global/selectors\"\nimport {\n  MigrationModal,\n  useMigrationModal,\n  PromoProps,\n  goToCloud,\n  goToAgentDashboard,\n} from \"@/src/domains/dashboard/components/migration-modal\"\nimport { selectSignInUrl } from \"domains/global/selectors\"\nimport { useRequestRefreshOfAccessMessage } from \"hooks/use-user-node-access\"\nimport { selectIsCloudEnabled } from \"domains/global/selectors\"\nimport { selectRegistry } from \"domains/global/selectors\"\n\n// const PROMO_SIGN_UP_CLOUD: PromoProps = { userStatus: \"UNKNOWN\", nodeClaimedStatus: \"NOT_CLAIMED\" } //CLOUD\n// const PROMO_SIGN_IN_CLOUD: PromoProps = {\n//   userStatus: \"UNKNOWN\",\n//   nodeClaimedStatus: \"CLAIMED\",\n// } //CLOUD\n// const PROMO_IVNITED_TO_SPACE: PromoProps = {\n//   userStatus: \"LOGGED_IN\",\n//   nodeClaimedStatus: \"CLAIMED\",\n//   userNodeAccess: \"NO_ACCESS\",\n// } //CLOUD\n\n// const PROMO_CLAIM_NODE: PromoProps = { userStatus: \"LOGGED_IN\", nodeClaimedStatus: \"NOT_CLAIMED\" } //CLOUD\n// const PROMO_TO_USE_NEW_DASHBAORD: PromoProps = {\n//   userStatus: \"LOGGED_IN\",\n//   nodeLiveness: \"LIVE\",\n//   userNodeAccess: \"ACCESS_OK\",\n// } //UNDEFIND\n\n// const FALLBACK_TO_AGENT: PromoProps = {\n//   userStatus: \"LOGGED_IN\",\n//   nodeLiveness: \"NOT_LIVE\",\n//   userNodeAccess: \"ACCESS_OK\",\n//   nodeClaimedStatus: \"CLAIMED\",\n// } //CLOUD\n\n// const NO_INFO_FALLBACK_TO_AGENT: PromoProps = {\n//   userStatus: undefined,\n//   nodeLiveness: undefined,\n//   userNodeAccess: undefined,\n//   nodeClaimedStatus: undefined,\n// } //CLOUD\n\n// const GO_TO_CLOUD: PromoProps = {\n//   userStatus: \"LOGGED_IN\",\n//   nodeLiveness: \"LIVE\",\n//   userNodeAccess: \"ACCESS_OK\",\n//   nodeClaimedStatus: \"CLAIMED\",\n// } //CLOUD\n\nconst MigrationManager = () => {\n  const cloudEnabled = useSelector(selectIsCloudEnabled)\n  const registry = useSelector(selectRegistry)\n\n  const cloudUrl = useSelector(state =>\n    selectSignInUrl({ content: \"agent-auto-redirect\", term: registry.machineGuid })(state as any)\n  )\n\n  const linkToCoud = useMemo(() => {\n    const { href } = window.location\n    const redirectURI = encodeURIComponent(href)\n    return `${cloudUrl}&redirect_uri=${redirectURI}`\n  }, [cloudUrl])\n\n  const userNodeAccess = useSelector(selectUserNodeAccess) as PromoProps\n  const [isModalOpen, setModalOpen] = useState(false)\n  const { migrationModalPromoInfo, setUserPrefrence, userSavedPreference, migrationModalPromo } =\n    useMigrationModal({\n      ...userNodeAccess,\n    })\n\n  const preferenceID = migrationModalPromoInfo?.tickBoxOption.preferenceID || \"\"\n\n  /**\n   * There is seem to be a bug when we are using the useLocalStorage,\n   * the value to be returned does not change when preferenceID is changing.\n   * For that reason we access the localStorage directly\n   */\n  const [, savePromoRemindMeSelection] = useLocalStorage(preferenceID)\n  const hasPromoSelectionSaved = localStorage.getItem(preferenceID)\n\n  const closeModal = () => {\n    setModalOpen(false)\n  }\n\n  const isPromoEligibleForShow =\n    cloudEnabled &&\n    migrationModalPromoInfo &&\n    isModalOpen &&\n    (!hasPromoSelectionSaved || hasPromoSelectionSaved === \"undefined\")\n\n  const requestRefreshOfAccess = useRequestRefreshOfAccessMessage()\n\n  /** We are delaying the show of modal because some time the userNodeAccess is equal to null\n   *  and only for a few seconds we are showing the NO_INFO modal an the the userNodeAccess\n   *  has a new value and we show a second modal on top of the other. We dont want this\n   *  behaviour\n   */\n  useEffect(() => {\n    let showModalTimer = setTimeout(() => setModalOpen(true), 4000)\n    return () => {\n      clearTimeout(showModalTimer)\n    }\n  }, [])\n\n  useEffect(() => {\n    if (goToCloud({ userSavedPreference, ...userNodeAccess })) {\n      window.location.href = linkToCoud\n    }\n  }, [linkToCoud, userNodeAccess, userSavedPreference])\n\n  useEffect(() => {\n    if (goToAgentDashboard({ userSavedPreference })) console.log(\"Lets go to Agent\")\n  }, [userSavedPreference])\n\n  useEffect(() => {\n    if (isPromoEligibleForShow) {\n      document.documentElement.style.overflow = \"hidden\"\n    } else {\n      document.documentElement.style.overflow = \"auto\"\n    }\n  }, [isModalOpen, isPromoEligibleForShow])\n\n  if (isPromoEligibleForShow)\n    return (\n      <MigrationModal\n        savePromoRemindMeSelection={savePromoRemindMeSelection}\n        migrationModalPromoInfo={migrationModalPromoInfo}\n        setUserPrefrence={setUserPrefrence}\n        closeModal={closeModal}\n        migrationModalPromo={migrationModalPromo}\n        requestRefreshOfAccess={requestRefreshOfAccess}\n      />\n    )\n\n  return null\n}\n\nexport default MigrationManager\n","import React, { useEffect, useLayoutEffect, useRef, useState } from \"react\"\nimport Ps from \"perfect-scrollbar\"\nimport { ThemeProvider } from \"styled-components\"\n\nimport \"@formatjs/intl-datetimeformat/polyfill\"\nimport \"@formatjs/intl-datetimeformat/locale-data/en\"\nimport \"@formatjs/intl-datetimeformat/add-all-tz\"\n\nimport \"@material/menu-surface/dist/mdc.menu-surface.css\"\n\n// intentionally loading before bootstrap styles\nimport \"./styles/main.css\"\n\n// needs to be included before bootstrap\nimport \"domains/chart/utils/jquery-loader\"\nimport \"bootstrap\"\nimport \"bootstrap-toggle\"\nimport \"bootstrap-toggle/css/bootstrap-toggle.min.css\"\n\nimport { useStore } from \"react-redux\"\nimport \"typeface-ibm-plex-sans\"\nimport \"@fortawesome/fontawesome-free/js/all\"\n\nimport \"styles/fonts.css\"\nimport { loadCss } from \"utils/css-loader\"\nimport { useDateTime } from \"utils/date-time\"\nimport { useSelector } from \"store/redux-separate-context\"\nimport { selectCloudBaseUrl, selectHasFetchedInfo, selectTheme } from \"domains/global/selectors\"\nimport { Portals } from \"domains/chart/components/portals\"\nimport { useChartsMetadata } from \"domains/dashboard/hooks/use-charts-metadata\"\nimport { PrintModal } from \"domains/dashboard/components/print-modal\"\nimport { SidebarSocialMedia } from \"domains/dashboard/components/sidebar-social-media\"\nimport { SidebarSocialMediaPortal } from \"domains/dashboard/components/sidebar-social-media-portal\"\nimport { isPrintMode } from \"domains/dashboard/utils/parse-url\"\nimport useAlarmFromUrl from \"domains/dashboard/hooks/useAlarmFromUrl\"\nimport { useRegistry } from \"hooks/use-registry\"\nimport { useAlarms } from \"hooks/use-alarms\"\nimport { NotificationsContainer } from \"components/notifications-container\"\n\nimport Layout from \"components/layout\"\n\nimport \"./types/global\"\n\nimport { useInfo } from \"hooks/use-info\"\nimport { serverStatic } from \"utils/server-detection\"\nimport { mapTheme } from \"utils/map-theme\"\nimport { netdataCallback, updateLocaleFunctions } from \"./main\"\n\nimport { MigrationManager } from \"@/src/domains/dashboard/components/migration-manager\"\nimport { isDemo } from \"./utils/is-demo\"\nimport { Box } from \"@netdata/netdata-ui\"\nimport { selectIsCloudEnabled } from \"domains/global/selectors\"\n\nconst FakeMargin = Box\n\n// support legacy code\nwindow.Ps = Ps\n\nconst App: React.FC = () => {\n  const cloudEnabled = useSelector(selectIsCloudEnabled)\n\n  const store = useStore()\n  useEffect(() => {\n    // todo\n    // @ts-ignore\n    window.NETDATA.alarms = {}\n    // @ts-ignore\n    window.NETDATA.pause = callback => {\n      callback()\n    }\n    netdataCallback(store)\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [])\n  const [refreshHelper, setRefreshHelper] = useState<number>()\n  // this is temporary, we will not need it when main.js will be fully refactored\n  const haveDOMReadyForParsing = refreshHelper !== undefined\n  // a workaround - each time parseDom is run, the portals are rerendered\n  const parseDom = useRef(() => {\n    setRefreshHelper(Math.random())\n  })\n\n  useEffect(() => {\n    if (haveDOMReadyForParsing) {\n      const loadOverlay = document.getElementById(\"loadOverlay\")\n      if (loadOverlay) {\n        loadOverlay.style.display = \"none\"\n      }\n    }\n  }, [haveDOMReadyForParsing])\n\n  const { localeDateString, localeTimeString } = useDateTime()\n  useEffect(() => {\n    updateLocaleFunctions({\n      localeDateString,\n      localeTimeString,\n    })\n  }, [localeDateString, localeTimeString])\n\n  useRegistry(true)\n  useAlarms(true)\n  useInfo(true)\n\n  const [hasFetchDependencies, setHasFetchDependencies] = useState(false)\n  useLayoutEffect(() => {\n    Promise.all([\n      loadCss(serverStatic + window.NETDATA.themes.current.bootstrap_css),\n      loadCss(serverStatic + window.NETDATA.themes.current.dashboard_css),\n    ]).then(() => {\n      setHasFetchDependencies(true)\n    })\n  }, [])\n\n  const chartsMetadata = useChartsMetadata()\n  const cloudBaseURL = useSelector(selectCloudBaseUrl)\n\n  // @ts-ignore\n  window.NETDATA.parseDom = parseDom.current\n\n  const hasFetchedInfo = useSelector(selectHasFetchedInfo)\n  const theme = useSelector(selectTheme)\n  useAlarmFromUrl()\n\n  return (\n    <ThemeProvider theme={mapTheme(theme)}>\n      {hasFetchDependencies && (\n        // this needs to render after dynamic css files are loaded, otherwise netdata-ui\n        // styling will have smaller priority than bootstrap css\n        <NotificationsContainer />\n      )}\n      <></>\n      {chartsMetadata && cloudBaseURL && hasFetchedInfo && haveDOMReadyForParsing && (\n        <>\n          <Layout printMode={isPrintMode}>\n            {isDemo ? null : <MigrationManager />}\n            {hasFetchDependencies && (\n              <>\n                <Portals key={refreshHelper} />\n                <SidebarSocialMediaPortal>\n                  <SidebarSocialMedia />\n                </SidebarSocialMediaPortal>\n                {isPrintMode && <PrintModal />}\n              </>\n            )}\n          </Layout>\n          {cloudEnabled && <FakeMargin height={15} />}\n        </>\n      )}\n    </ThemeProvider>\n  )\n}\n\nexport default App\n","import { useEffect } from \"react\"\n\nimport { useDispatch, useSelector } from \"store/redux-separate-context\"\nimport { serverDefault } from \"utils/server-detection\"\nimport { fetchHelloAction } from \"domains/global/actions\"\nimport { selectRegistry } from \"domains/global/selectors\"\n\nexport const useRegistry = (shouldUseRegistry: boolean) => {\n  const registry = useSelector(selectRegistry)\n\n  const dispatch = useDispatch()\n  useEffect(() => {\n    if (shouldUseRegistry && !registry.isFetchingHello && !registry.hasFetchedHello\n      && !registry.isHelloCallError\n    ) {\n      dispatch(fetchHelloAction.request({\n        serverDefault,\n      }))\n    }\n  }, [dispatch, registry, shouldUseRegistry])\n}\n","import { useEffect } from \"react\"\n\nimport { useDispatch, useSelector } from \"store/redux-separate-context\"\nimport { startAlarmsAction } from \"domains/global/actions\"\nimport { selectHasStartedAlarms } from \"domains/global/selectors\"\nimport { serverDefault } from \"utils/server-detection\"\n\nexport const useAlarms = (shouldUseAlarms: boolean) => {\n  const hasStartedAlarms = useSelector(selectHasStartedAlarms)\n\n  const dispatch = useDispatch()\n  useEffect(() => {\n    if (shouldUseAlarms && !hasStartedAlarms) {\n      dispatch(startAlarmsAction({\n        serverDefault,\n      }))\n    }\n  }, [dispatch, hasStartedAlarms, shouldUseAlarms])\n}\n","import { useEffect } from \"react\"\nimport { useDispatch, useSelector } from \"store/redux-separate-context\"\nimport { fetchInfoAction } from \"domains/chart/actions\"\nimport { selectRegistry } from \"domains/global/selectors\"\n\nexport const useInfo = (shouldUseInfo: boolean) => {\n  const registry = useSelector(selectRegistry)\n  const hasStartedInfo = registry?.hasStartedInfo || false\n  const dispatch = useDispatch()\n  useEffect(() => {\n    if (shouldUseInfo && !hasStartedInfo) {\n      dispatch(fetchInfoAction.request({\n        poll: false,\n      }))\n    }\n  }, [dispatch, hasStartedInfo, shouldUseInfo])\n}\n","import { useHttp } from \"hooks/use-http\"\nimport { serverDefault } from \"utils/server-detection\"\nimport { ChartsMetadata } from \"domains/global/types\"\n\nexport const useChartsMetadata = () => {\n  const [chartsMetadata] = useHttp<ChartsMetadata>(`${serverDefault}api/v1/charts`)\n  return chartsMetadata\n}\n","import { useMount } from \"react-use\"\n\nimport { useDispatch } from \"store/redux-separate-context\"\nimport { getHashParams } from \"utils/hash-utils\"\nimport { setAlarmAction, setGlobalPanAndZoomAction } from \"domains/global/actions\"\nimport { alarmStatuses } from \"domains/global/constants\"\n\nexport default () => {\n  const dispatch = useDispatch()\n  useMount(() => {\n    const params = getHashParams()\n    const alarmWhen = params[\"alarm_when\"]\n    if (alarmWhen) {\n      const alarmTime = Number(alarmWhen)\n\n      const alarmStatus = params[\"alarm_status\"]\n      const alarmChart = params[\"alarm_chart\"]\n      const alarmValue = params[\"alarm_value\"]\n      if (!alarmStatuses.includes(alarmStatus) || !alarmChart || !alarmValue) {\n        return\n      }\n\n      dispatch(setAlarmAction({\n        alarm: {\n          chartId: alarmChart,\n          status: alarmStatus,\n          value: alarmValue,\n          when: alarmTime,\n        },\n      }))\n      const PADDING = 1000 * 60 * 5\n      dispatch(setGlobalPanAndZoomAction({\n        after: alarmTime * 1000 - PADDING,\n        before: alarmTime * 1000 + PADDING,\n      }))\n    }\n  })\n}\n","import React from \"react\"\nimport ReactDOM from \"react-dom\"\nimport { Provider } from \"react-redux\"\n\nimport { store } from \"store\"\n\n// resolved in craco.config\n// @ts-ignore\nimport App from \"App\"\n\nimport \"./index.css\"\n\n// todo for static-dashboard:\n// 1) wait for the whole page to load, then render\n// 2) when the whole page is loaded, check window.NETDATA.options set by user and override initial\n//    options settings\n\nReactDOM.render(\n  <Provider store={store}>\n    <App />\n  </Provider>,\n  document.getElementById(\"root\")\n)\n","import { useCallback, useMemo } from \"react\"\nimport { useDispatch, useSelector } from \"react-redux\"\nimport { createSelector } from \"reselect\"\nimport { useLocalStorage } from \"react-use\"\nimport { showSignInModalAction } from \"domains/dashboard/actions\"\nimport { selectSignInUrl, selectRegistry } from \"domains/global/selectors\"\nimport { NETDATA_REGISTRY_SERVER } from \"utils/utils\"\n\nconst isRegistrySelector = createSelector(\n  selectRegistry,\n  ({ registryServer }) => registryServer === NETDATA_REGISTRY_SERVER\n)\n\nconst offlineSelector = createSelector(\n  ({ dashboard }) => dashboard,\n  ({ offline }) => offline\n)\n\nconst SignIn = ({ children, utmParameters }) => {\n  const [hasSignedInBefore] = useLocalStorage(\"has-sign-in-history\")\n  const signInUrl = useSelector(state => selectSignInUrl(utmParameters)(state))\n  const isRegistry = useSelector(isRegistrySelector)\n  const offline = useSelector(offlineSelector)\n\n  const dispatch = useDispatch()\n\n  const link = useMemo(() => {\n    const { href } = window.location\n    const redirectURI = encodeURIComponent(href)\n    return `${signInUrl}&redirect_uri=${redirectURI}`\n  }, [signInUrl])\n\n  const onSignIn = useCallback(\n    () =>\n      dispatch(\n        showSignInModalAction({\n          signInLinkHref: link,\n        })\n      ),\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [link]\n  )\n\n  return useMemo(\n    () =>\n      typeof children === \"function\"\n        ? children({ isRegistry, link, onSignIn, offline, hasSignedInBefore })\n        : children,\n    [children, isRegistry, link, onSignIn, offline, hasSignedInBefore]\n  )\n}\n\nexport default SignIn\n","/* eslint-disable comma-dangle */\n/* eslint-disable implicit-arrow-linebreak */\nimport { omit, pipe, mergeDeepLeft } from \"ramda\"\n\ntype HashParams = { [param: string]: string }\nconst fragmentParamsSeparatorRegEx = /[&;]/\nconst fragmentParamsSeparator = \";\"\n\nexport const getHashParams = (\n  hash = decodeURIComponent(window.location.hash.substr(1))\n): HashParams => {\n  if (hash.length === 0) {\n    return {}\n  }\n  const params = hash.split(fragmentParamsSeparatorRegEx)\n  const response = params.reduce((acc: HashParams, current) => {\n    const parts = current.split(\"=\")\n    const [param, value] = parts\n    acc[param] = value\n    return acc\n  }, {})\n  return response\n}\n\nexport const makeHashFromObject = (params: { [paramKey: string]: string }) => {\n  const entries = Object.entries(params)\n  if (entries.length === 0) {\n    return \"\"\n  }\n  return entries\n    .map(([key, value]) => (value === undefined ? key : `${key}=${encodeURIComponent(value)}`))\n    .join(fragmentParamsSeparator)\n}\n\nexport const getFilteredHash = (\n  excludedParams: string[],\n  hash = decodeURIComponent(window.location.hash.substr(1))\n) => {\n  const filteredParams = omit(excludedParams, getHashParams(hash))\n  return makeHashFromObject(filteredParams)\n}\n\nexport const getUniqueParamsHash = pipe(getHashParams, makeHashFromObject)\n\nexport const setHashParams = (params: { [paramKey: string]: string }) => {\n  const allParams = getHashParams()\n  const allParamsResult = mergeDeepLeft(params, allParams)\n  window.history.replaceState(window.history.state, \"\", `#${makeHashFromObject(allParamsResult)}`)\n}\n\nexport const getHashParam = (\n  param: string,\n  hash = decodeURIComponent(window.location.hash.substr(1))\n): string => getHashParams(hash)[param]\n\nexport const hasHashParam = (\n  param: string,\n  hash = decodeURIComponent(window.location.hash.substr(1))\n): boolean => getHashParams(hash)[param] !== undefined\n\nexport const removeHashParams = (params: string[]) => {\n  window.history.replaceState(window.history.state, \"\", `#${getFilteredHash(params)}`)\n}\n","import { useEffect, useCallback, useState } from \"react\"\n\ntype IframesMessageType =\n  | \"spaces\"\n  | \"workspaces\"\n  | \"hello-from-spaces-bar\"\n  | \"hello-from-space-panel\"\n  | \"hello-from-sign-in\"\n  | \"is-signed-in\"\n  | \"streamed-hosts-data\"\n  | \"has-focus\"\n  | \"iframe-focus-change\"\n  | \"synced-private-registry\"\n  | \"set-is-logout-dropdown-opened\"\n  | \"user-node-access\"\n  | \"request-refresh-access\"\n\ninterface IframesMessage<T = unknown> {\n  type: IframesMessageType\n  payload: T\n}\n\nexport const sendToChildIframe = (\n  htmlIframeElement: HTMLIFrameElement | string,\n  message: IframesMessage\n) => {\n  const iframeElement =\n    typeof htmlIframeElement === \"string\"\n      ? (document.getElementById(htmlIframeElement) as HTMLIFrameElement)\n      : htmlIframeElement\n\n  if (iframeElement.contentWindow) {\n    iframeElement.contentWindow.postMessage(message, \"*\")\n  }\n}\n\nexport const useListenToPostMessage = <T>(\n  messageType: IframesMessageType,\n  callback?: (newMessage: T) => void,\n  defaultState?: T | (() => T)\n): [T | undefined, () => void] => {\n  const [lastMessage, setLastMessage] = useState<T | undefined>(defaultState)\n  const handleMessage = useCallback(\n    message => {\n      const data = message.data as IframesMessage<T>\n      if (data.type === messageType) {\n        setLastMessage(data.payload)\n        if (callback) {\n          callback(data.payload)\n        }\n      }\n    },\n    [callback, messageType]\n  )\n  const resetMesssage = useCallback(() => {\n    setLastMessage(defaultState as T)\n  }, [defaultState])\n  useEffect(() => {\n    window.addEventListener(\"message\", handleMessage)\n    return () => {\n      window.removeEventListener(\"message\", handleMessage)\n    }\n  }, [handleMessage, messageType])\n  return [lastMessage, resetMesssage]\n}\n","export const isMainJs = process.env.REACT_APP_IS_MAIN_DASHBOARD\nexport const isTestingEnv = process.env.NODE_ENV === \"test\"\nexport const isDevelopmentEnv = process.env.NODE_ENV === \"development\"\n","export const storeKey = \"dashboard\"\n","import { createContext } from \"react\"\nimport {\n  createDispatchHook, createSelectorHook, ReactReduxContextValue,\n  useSelector as useSelectorOriginal,\n  useDispatch as useDispatchOriginal,\n} from \"react-redux\"\n\nconst shouldUseDefaultContext = process.env.REACT_APP_SHOULD_USE_DEFAULT_CONTEXT\n\nexport const dashboardReduxContext = shouldUseDefaultContext\n  ? undefined\n  : createContext<ReactReduxContextValue>(undefined as any)\n\nexport const useSelector = dashboardReduxContext\n  ? createSelectorHook(dashboardReduxContext)\n  : useSelectorOriginal\nexport const useDispatch = dashboardReduxContext\n  ? createDispatchHook(dashboardReduxContext)\n  : useDispatchOriginal\n","const isPrintMode = window.location.hash.split(\";\").includes(\"help=true\")\n\nconst getIsDemo = () => {\n  if (isPrintMode) {\n    return false\n  }\n  const { hostname } = document.location\n  return (\n    hostname.endsWith(\".my-netdata.io\")\n    || hostname.endsWith(\".mynetdata.io\")\n    || hostname.endsWith(\".netdata.rocks\")\n    || hostname.endsWith(\".netdata.ai\")\n    || hostname.endsWith(\".netdata.live\")\n    || hostname.endsWith(\".firehol.org\")\n    || hostname.endsWith(\".netdata.online\")\n    || hostname.endsWith(\".netdata.cloud\")\n  )\n}\n\nexport const isDemo = getIsDemo()\n","import { prop, path } from \"ramda\"\nimport { createSelector } from \"reselect\"\n\nimport { AppStateT } from \"store/app-state\"\nimport { utmUrlSuffix } from \"utils/utils\"\nimport { alwaysEndWithSlash } from \"utils/server-detection\"\n\nimport { GetKeyArguments, getKeyForCommonColorsState } from \"./reducer\"\nimport { storeKey } from \"./constants\"\nimport { OptionsKey } from \"./options\"\n\nconst NETDATA_REGISTRY_SERVER = \"https://registry.my-netdata.io\"\n\nexport const createSelectAssignedColors = (args: GetKeyArguments) => (state: AppStateT) => {\n  const keyName = getKeyForCommonColorsState(args)\n  const substate = state[storeKey].commonColorsKeys[keyName]\n  return substate && substate.assigned\n}\n\nexport const selectGlobal = (state: AppStateT) => state.global\n\nexport const selectCommonMin = createSelector(\n  selectGlobal,\n  (_: unknown, commonMinKey: string) => commonMinKey,\n  (globalState, commonMinKey) => (\n    globalState.commonMin[commonMinKey]\n  ),\n)\n\nexport const selectCommonMax = createSelector(\n  selectGlobal,\n  (_: unknown, commonMaxKey: string) => commonMaxKey,\n  (globalState, commonMaxKey) => (\n    globalState.commonMax[commonMaxKey]\n  ),\n)\n\nexport const selectGlobalSelection = createSelector(selectGlobal, prop(\"hoveredX\"))\n\nexport const selectGlobalSelectionMaster = createSelector(\n  selectGlobal,\n  prop(\"currentSelectionMasterId\"),\n)\n\nexport const selectGlobalPanAndZoom = createSelector(selectGlobal, prop(\"globalPanAndZoom\"))\n\nexport const selectDefaultAfter = createSelector(selectGlobal, prop(\"defaultAfter\"))\n\nexport const selectGlobalChartUnderlay = createSelector(selectGlobal, prop(\"globalChartUnderlay\"))\n\nexport const selectHasWindowFocus = createSelector(selectGlobal, prop(\"hasWindowFocus\"))\nexport const selectGlobalPause = createSelector(selectGlobal, prop(\"globalPause\"))\n\nexport const selectSnapshot = createSelector(\n  selectGlobal,\n  prop(\"snapshot\"),\n)\n\nexport const selectRegistry = createSelector(selectGlobal, prop(\"registry\"))\n\nexport const selectCloudBaseUrl = createSelector(selectRegistry, prop(\"cloudBaseURL\"))\n\nexport const utmParametersToString = (utmParameters = {}) =>\n  Object.keys(utmParameters).reduce((acc, key) => (acc += `&utm_${key}=${utmParameters[key]}`), \"\")\n\nexport const selectSignInUrl = utmParameters =>\n  createSelector(selectRegistry, selectCloudBaseUrl, (registry, cloudBaseURL) => {\n    const name = encodeURIComponent(registry.hostname)\n    const origin = encodeURIComponent(\n      alwaysEndWithSlash(window.location.origin + window.location.pathname)\n    )\n    // not adding redirect_url - it needs to always be based on newest href\n    // eslint-disable-next-line max-len\n    return `${cloudBaseURL}/sign-in?id=${\n      registry.machineGuid\n    }&name=${name}&origin=${origin}${utmUrlSuffix}${utmParametersToString(utmParameters)}`\n  })\n\nexport const selectIsFetchingHello = createSelector(selectRegistry, prop(\"isFetchingHello\"))\nexport const selectIsUsingGlobalRegistry = createSelector(\n  selectRegistry,\n  ({ registryServer }) => registryServer && (registryServer !== NETDATA_REGISTRY_SERVER),\n)\n\n// currently cloud-base-url is taken from registry?action=hello call, which returns error\n// if Agent+browser are configured to respect do-not-track\nexport const selectIsCloudEnabled = createSelector(\n  selectRegistry,\n  (registry) => registry.isCloudEnabled && !registry.isHelloCallError,\n)\nexport const selectHasFetchedInfo = createSelector(selectRegistry, prop(\"hasFetchedInfo\"))\nexport const selectFullInfoPayload = createSelector(selectRegistry, prop(\"fullInfoPayload\"))\n\nexport const selectHasStartedAlarms = createSelector(\n  selectGlobal,\n  path([\"alarms\", \"hasStartedAlarms\"]),\n)\nexport const selectActiveAlarms = createSelector(\n  selectGlobal,\n  (global) => global.alarms.activeAlarms,\n)\n\nexport const selectAlarm = createSelector(\n  selectGlobal,\n  (global) => global.alarm\n)\n\nexport const selectSpacePanelIsActive = createSelector(selectGlobal, prop(\"spacePanelIsActive\"))\nexport const selectSpacePanelTransitionEndIsActive = createSelector(\n  selectGlobal, prop(\"spacePanelTransitionEndIsActive\"),\n)\n\nexport const selectOptions = createSelector(selectGlobal, global => global.options)\n\nexport const createSelectOption = <T extends OptionsKey>(optionName: T) => (\n  createSelector(selectOptions, (options) => options[optionName])\n)\n\nexport const selectDestroyOnHide = createSelectOption(\"destroy_on_hide\")\nexport const selectStopUpdatesWhenFocusIsLost = createSelectOption(\n  \"stop_updates_when_focus_is_lost\",\n)\nexport const selectShouldEliminateZeroDimensions = createSelectOption(\"eliminate_zero_dimensions\")\nexport const selectIsAsyncOnScroll = createSelectOption(\"async_on_scroll\")\n\nexport const selectParallelRefresher = createSelectOption(\"parallel_refresher\")\nexport const selectConcurrentRefreshes = createSelectOption(\"concurrent_refreshes\")\nexport const selectSyncSelection = createSelectOption(\"sync_selection\")\nexport const selectSyncPanAndZoom = createSelectOption(\"sync_pan_and_zoom\")\n\nexport const selectTheme = createSelectOption(\"theme\")\nexport const selectShowHelp = createSelectOption(\"show_help\")\nexport const selectPanAndZoomDataPadding = createSelectOption(\"pan_and_zoom_data_padding\")\nexport const selectSmoothPlot = createSelectOption(\"smooth_plot\")\n\nexport const selectUnitsScalingMethod = createSelectOption(\"units\")\nexport const selectTemperatureSetting = createSelectOption(\"temperature\")\nexport const selectSecondsAsTimeSetting = createSelectOption(\"seconds_as_time\")\nexport const selectTimezoneSetting = createSelectOption(\"timezone\")\nexport const selectUTCOffsetSetting = createSelectOption(\"utcOffset\")\nexport const selectUserSetServerTimezone = createSelectOption(\"user_set_server_timezone\")\n\nexport const selectChartsMetadata = createSelector(\n  selectGlobal,\n  (global) => global.chartsMetadata.data,\n)\n\nexport const selectChartMetadataFromChartsCall = createSelector(\n  selectChartsMetadata,\n  (_: unknown, { chartId }: { chartId: string, id: string }) => chartId,\n  (allMetadata, chartId) => allMetadata?.charts[chartId],\n)\n\nexport const selectUserNodeAccess = createSelector(selectGlobal, global => global.userNodeAccess)\n","import React from \"react\"\nimport styled from \"styled-components\"\nimport { Text, getColor } from \"@netdata/netdata-ui\"\n\nconst BaseAnchor = styled(\"a\")`\n  && {\n    color: ${getColor(\"primary\")};\n\n    :hover {\n      color: ${getColor(\"primary\")};\n    }\n\n    :visited {\n      color: ${getColor(\"accent\")};\n    }\n  }\n`\n\ntype AnchorProps = React.ComponentPropsWithRef<\"a\"> & {\n  Component?: React.ElementType\n}\n\nconst Anchor = ({ Component = Text, ...rest }: AnchorProps): any => (\n  <Component as={BaseAnchor} {...rest} />\n)\n\nexport default Anchor\n","import { createAction } from \"redux-act\"\n\n// slightly simplified version of the creator used in the cloud\n// we will unify it when some typing issues will be fixed (cloud version didn't warn on bad payload)\nexport const createRequestAction = <RequestT, SuccessT = any, FailureT = any>(name: string) => {\n  const action = createAction<RequestT>(name.toUpperCase())\n\n  return Object.assign(action, {\n    request: action,\n    success: createAction<SuccessT>(\n      `${name.toUpperCase()}_SUCCESS`,\n      (payload) => payload,\n      (meta) => meta,\n    ),\n    failure: createAction<FailureT>(\n      `${name.toUpperCase()}_FAILURE`,\n      (payload) => payload,\n      (meta) => ({\n        ...meta,\n        error: true,\n      }),\n    ),\n  })\n}\n","import { mergeAll, mergeRight } from \"ramda\"\nimport { LOCALSTORAGE_HEIGHT_KEY_PREFIX } from \"domains/chart/components/resize-handler\"\nimport { DashboardTheme } from \"utils/map-theme\"\n\nexport const SYNC_PAN_AND_ZOOM = \"sync_pan_and_zoom\"\nexport const STOP_UPDATES_WHEN_FOCUS_IS_LOST = \"stop_updates_when_focus_is_lost\"\nexport const DESTROY_ON_HIDE = \"destroy_on_hide\"\nexport const THEME = \"theme\"\nexport const LEGEND_RIGHT = \"legend_right\"\n\nexport const themeLocalStorageKey = \"netdataTheme\"\n\n/* eslint-disable camelcase */\n\nexport interface Options {\n  // performance options\n  [STOP_UPDATES_WHEN_FOCUS_IS_LOST]: boolean\n  eliminate_zero_dimensions: boolean\n  [DESTROY_ON_HIDE]: boolean\n  async_on_scroll: boolean\n\n  // synchronization options\n  parallel_refresher: boolean\n  concurrent_refreshes: boolean\n  sync_selection: boolean\n  [SYNC_PAN_AND_ZOOM]: boolean\n\n  // visual options\n  [LEGEND_RIGHT]: boolean\n  [THEME]: DashboardTheme\n  show_help: boolean\n  pan_and_zoom_data_padding: boolean\n  smooth_plot: boolean\n\n  // locale options\n  units: \"auto\" | \"original\"\n  temperature: \"celsius\" | \"fahrenheit\"\n  seconds_as_time: boolean\n  timezone: string\n  user_set_server_timezone: string\n  utcOffset: number | string\n}\nexport type OptionsKey = keyof Options\n\n// those options have been created around 2015/2016 and some of them are not needed anymore\n// so we need to revisit them, test their impact, etc.\n\nexport const INITIAL_OPTIONS: Options = {\n  // performance options\n\n  // boolean - shall we stop auto-refreshes when document does not have user focus\n  [STOP_UPDATES_WHEN_FOCUS_IS_LOST]: true,\n  // do not show dimensions with just zeros\n  eliminate_zero_dimensions: true,\n  // destroy charts when they are not visible\n  [DESTROY_ON_HIDE]: false, // eventually apply slow device detection\n  async_on_scroll: false,\n\n  // synchronization options\n  // enable parallel refresh of charts\n  parallel_refresher: true, // eventually apply slow device detection\n  // when parallel_refresher is enabled, sync also the charts\n  concurrent_refreshes: true,\n  // enable or disable selection sync\n  sync_selection: true,\n  // enable or disable pan and zoom sync\n  [SYNC_PAN_AND_ZOOM]: true,\n\n  // visual options\n  [LEGEND_RIGHT]: false,\n  [THEME]: \"slate\",\n  // when enabled the charts will show some help\n  // when there's no bootstrap, we can't show it\n  show_help: Boolean(window.netdataShowHelp) && !window.netdataNoBootstrap,\n  // fetch more data for the master chart when panning or zooming\n  pan_and_zoom_data_padding: true,\n  // enable smooth plot, where possible\n  smooth_plot: true, // eventually apply slow device detection\n\n  // locale options\n  units: \"auto\", // auto or original\n  temperature: \"celsius\",\n  seconds_as_time: true, // show seconds as DDd:HH:MM:SS ?\n  timezone: \"default\", // the timezone to use, or 'default'\n  user_set_server_timezone: \"default\", // as set by the user on the dashboard\n  utcOffset: 0,\n}\n\nconst localStorageKeyToOption = <T extends string>(key: T) =>\n  key.replace(/^options\\./, \"\").replace(themeLocalStorageKey, THEME)\n\nconst getItemFromLocalStorage = <T extends string>(key: T) => {\n  const value = localStorage.getItem(key)\n  // \"undefined\" (deliberate as a string) to support \"options.setOptionCallback\", an old property\n  // used in old dashboard. users will still have it, so we need to support it for some time\n  if (value === null || value === \"undefined\") {\n    localStorage.removeItem(key)\n    return null\n  }\n  let parsed\n  try {\n    parsed = JSON.parse(value)\n  } catch (e) {\n    // todo fix after main.js refactor\n    // special case for netdataTheme, only this option is not boolean\n    if (key === themeLocalStorageKey && value) {\n      return value\n    }\n\n    console.log(`localStorage: failed to read \"${key}\", using default`) // eslint-disable-line no-console, max-len\n    // it was not present in old dashboard, but it probably makes sense to remove broken values\n    localStorage.removeItem(key)\n    return null\n  }\n  return parsed\n}\n\nexport const getOptionsMergedWithLocalStorage = (): Options => {\n  const optionsFromLocalStorage = Object.keys(localStorage)\n    .filter(key => key.startsWith(\"options.\") || key === themeLocalStorageKey)\n    .map(key => ({\n      [localStorageKeyToOption(key)]: getItemFromLocalStorage(key),\n    }))\n    .filter(o => Object.values(o)[0] !== null)\n\n  const overridenOptions = mergeAll(optionsFromLocalStorage) as unknown as Options\n  return mergeRight(INITIAL_OPTIONS, overridenOptions)\n}\n\nexport const optionsMergedWithLocalStorage = getOptionsMergedWithLocalStorage()\nexport const initialLegendRight = optionsMergedWithLocalStorage[LEGEND_RIGHT]\n\nexport const clearLocalStorage = () => {\n  const localStorageKeys = Object.keys(localStorage)\n  localStorageKeys.forEach(key => {\n    if (key.startsWith(LOCALSTORAGE_HEIGHT_KEY_PREFIX) || key.startsWith(\"options.\")) {\n      localStorage.removeItem(key)\n    }\n  })\n}\n"],"sourceRoot":""}