{"version":3,"file":"newron-core.js","mappings":"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","sources":["webpack://core/./src/elements/leaderboard/createGroupModal.css","webpack://core/./node_modules/systemjs-webpack-interop/auto-public-path/auto-public-path.js","webpack://core/./node_modules/html2canvas/dist/html2canvas.js","webpack://core/./node_modules/systemjs-webpack-interop/public-path.js","webpack://core/external system \"@ecosystem/newron-client-lib\"","webpack://core/./src/elements/statsTable/statsTable.css","webpack://core/./node_modules/style-loader/dist/runtime/insertStyleElement.js","webpack://core/./node_modules/react/cjs/react-jsx-runtime.production.min.js","webpack://core/./node_modules/style-loader/dist/runtime/styleTagTransform.js","webpack://core/./src/export/ExportHideout.css","webpack://core/./node_modules/css-loader/dist/runtime/sourceMaps.js","webpack://core/./node_modules/pako/lib/zlib/inflate.js","webpack://core/./src/elements/leaderboard/quicklook.css","webpack://core/./node_modules/pako/index.js","webpack://core/./src/page/heading/header.css","webpack://core/external system \"react-dom\"","webpack://core/./node_modules/pako/lib/utils/strings.js","webpack://core/./node_modules/pako/lib/zlib/inftrees.js","webpack://core/./src/page/page.css","webpack://core/./src/design/table2/table.css","webpack://core/./node_modules/pako/lib/zlib/adler32.js","webpack://core/./node_modules/pako/lib/deflate.js","webpack://core/./node_modules/pako/lib/zlib/trees.js","webpack://core/./src/elements/billboard/billboard.css","webpack://core/./node_modules/pako/lib/zlib/zstream.js","webpack://core/./src/common/selection.menu/sub.menu.css","webpack://core/./node_modules/pako/lib/zlib/messages.js","webpack://core/external system \"react\"","webpack://core/./node_modules/pako/lib/zlib/crc32.js","webpack://core/./node_modules/react/jsx-runtime.js","webpack://core/./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js","webpack://core/./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack://core/./node_modules/react-dom/client.js","webpack://core/./src/styles.css","webpack://core/./src/filters/filterGroupContainer.css","webpack://core/external system \"@ecosystem/newron-upsell\"","webpack://core/./src/design/modal/Modal.css","webpack://core/./node_modules/@ecosystem/export-api/dist/index.js","webpack://core/external system \"@ecosystem/newron-client-collections\"","webpack://core/./node_modules/css-loader/dist/runtime/api.js","webpack://core/./node_modules/axios/dist/browser/axios.cjs","webpack://core/external system \"@ecosystem/newron-client-routes\"","webpack://core/./node_modules/classnames/index.js","webpack://core/./node_modules/pako/lib/inflate.js","webpack://core/./node_modules/pako/lib/zlib/inffast.js","webpack://core/./node_modules/pako/lib/zlib/gzheader.js","webpack://core/./src/design/clickable.card/card.css","webpack://core/./node_modules/style-loader/dist/runtime/insertBySelector.js","webpack://core/./node_modules/style-loader/dist/runtime/styleDomAPI.js","webpack://core/external system \"@ecosystem/newron-design-system\"","webpack://core/./node_modules/cookie/dist/index.js","webpack://core/./node_modules/pako/lib/zlib/deflate.js","webpack://core/./src/elements/keyIndicators/indicators.css","webpack://core/./node_modules/pako/lib/zlib/constants.js","webpack://core/./node_modules/pako/lib/utils/common.js","webpack://core/webpack/bootstrap","webpack://core/webpack/runtime/__system_context__","webpack://core/webpack/runtime/compat get default export","webpack://core/webpack/runtime/define property getters","webpack://core/webpack/runtime/global","webpack://core/webpack/runtime/hasOwnProperty shorthand","webpack://core/webpack/runtime/make namespace object","webpack://core/webpack/runtime/publicPath","webpack://core/webpack/runtime/nonce","webpack://core/./node_modules/systemjs-webpack-interop/auto-public-path/1.js","webpack://core/./node_modules/single-spa-react/lib/esm/single-spa-react.js","webpack://core/./src/styles.css?f91e","webpack://core/./node_modules/axios/lib/helpers/bind.js","webpack://core/./node_modules/axios/lib/utils.js","webpack://core/./node_modules/axios/lib/core/AxiosError.js","webpack://core/./node_modules/axios/lib/helpers/toFormData.js","webpack://core/./node_modules/axios/lib/helpers/AxiosURLSearchParams.js","webpack://core/./node_modules/axios/lib/helpers/buildURL.js","webpack://core/./node_modules/axios/lib/core/InterceptorManager.js","webpack://core/./node_modules/axios/lib/defaults/transitional.js","webpack://core/./node_modules/axios/lib/platform/browser/index.js","webpack://core/./node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","webpack://core/./node_modules/axios/lib/platform/browser/classes/FormData.js","webpack://core/./node_modules/axios/lib/platform/browser/classes/Blob.js","webpack://core/./node_modules/axios/lib/platform/common/utils.js","webpack://core/./node_modules/axios/lib/platform/index.js","webpack://core/./node_modules/axios/lib/helpers/formDataToJSON.js","webpack://core/./node_modules/axios/lib/defaults/index.js","webpack://core/./node_modules/axios/lib/helpers/toURLEncodedForm.js","webpack://core/./node_modules/axios/lib/helpers/parseHeaders.js","webpack://core/./node_modules/axios/lib/core/AxiosHeaders.js","webpack://core/./node_modules/axios/lib/core/transformData.js","webpack://core/./node_modules/axios/lib/cancel/isCancel.js","webpack://core/./node_modules/axios/lib/cancel/CanceledError.js","webpack://core/./node_modules/axios/lib/core/settle.js","webpack://core/./node_modules/axios/lib/helpers/speedometer.js","webpack://core/./node_modules/axios/lib/helpers/progressEventReducer.js","webpack://core/./node_modules/axios/lib/helpers/throttle.js","webpack://core/./node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack://core/./node_modules/axios/lib/helpers/cookies.js","webpack://core/./node_modules/axios/lib/core/buildFullPath.js","webpack://core/./node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack://core/./node_modules/axios/lib/helpers/combineURLs.js","webpack://core/./node_modules/axios/lib/core/mergeConfig.js","webpack://core/./node_modules/axios/lib/helpers/resolveConfig.js","webpack://core/./node_modules/axios/lib/adapters/xhr.js","webpack://core/./node_modules/axios/lib/helpers/parseProtocol.js","webpack://core/./node_modules/axios/lib/helpers/composeSignals.js","webpack://core/./node_modules/axios/lib/helpers/trackStream.js","webpack://core/./node_modules/axios/lib/adapters/fetch.js","webpack://core/./node_modules/axios/lib/adapters/adapters.js","webpack://core/./node_modules/axios/lib/helpers/null.js","webpack://core/./node_modules/axios/lib/core/dispatchRequest.js","webpack://core/./node_modules/axios/lib/env/data.js","webpack://core/./node_modules/axios/lib/helpers/validator.js","webpack://core/./node_modules/axios/lib/core/Axios.js","webpack://core/./node_modules/axios/lib/cancel/CancelToken.js","webpack://core/./node_modules/axios/lib/helpers/HttpStatusCode.js","webpack://core/./node_modules/axios/lib/axios.js","webpack://core/./node_modules/axios/lib/helpers/spread.js","webpack://core/./node_modules/axios/lib/helpers/isAxiosError.js","webpack://core/./src/tools/axios.trace.ts","webpack://core/./src/types/data/data.types.ts","webpack://core/./src/types/content/common.types.ts","webpack://core/./src/types/content/context.types.ts","webpack://core/./src/types/content/filter.types.ts","webpack://core/./src/types/content/component.types.ts","webpack://core/./src/types/content/content.types.ts","webpack://core/./src/types/content/data.types.ts","webpack://core/./src/types/content/modal.types.ts","webpack://core/./src/types/content/section.types.ts","webpack://core/./src/types/analytics/index.ts","webpack://core/./src/data/types.ts","webpack://core/./src/client/impersonate.ts","webpack://core/./src/common/constants/error.ts","webpack://core/./src/design/error/simpleMessageError.ts","webpack://core/./src/tools/featureToggle/utils.ts","webpack://core/./src/client/featureFlags.ts","webpack://core/./src/client/page.client.ts","webpack://core/./src/client/data.client.ts","webpack://core/./src/client/context.client.ts","webpack://core/./src/client/user.client.ts","webpack://core/./src/tools/mounted.hook.tsx","webpack://core/./src/tools/object.ts","webpack://core/./src/page/reducer.ts","webpack://core/./src/context/cache.ts","webpack://core/./src/context/utils.ts","webpack://core/./src/context/manager.ts","webpack://core/./src/client/preference.client.ts","webpack://core/./src/page/settings.ts","webpack://core/./src/tools/strings.ts","webpack://core/./src/content/collection/types.ts","webpack://core/./src/tools/useSavedView.ts","webpack://core/./src/page/utils.ts","webpack://core/./src/page/provider.tsx","webpack://core/./src/ui.actions/provider.tsx","webpack://core/./src/ui.actions/hook.tsx","webpack://core/./src/cache/cache.ts","webpack://core/./src/analytics/analytics.provider.tsx","webpack://core/./src/data/constants.ts","webpack://core/./src/data/store.ts","webpack://core/./node_modules/uuid/dist/esm-browser/native.js","webpack://core/./node_modules/uuid/dist/esm-browser/rng.js","webpack://core/./node_modules/uuid/dist/esm-browser/stringify.js","webpack://core/./node_modules/uuid/dist/esm-browser/v4.js","webpack://core/./src/data/reducer.ts","webpack://core/./src/data/provider.tsx","webpack://core/./src/tools/visible.hook.tsx","webpack://core/./src/design/search/search.tsx","webpack://core/./src/elements/timeSeries/custom/timeSeries.custom.modal.tsx","webpack://core/./src/filters/constants.ts","webpack://core/./src/common/util.ts","webpack://core/./src/data/formatting.ts","webpack://core/./src/filters/utils.ts","webpack://core/./src/context/unique-preferences/unique-preferences.provider.tsx","webpack://core/./src/filters/saveFeatureSegments.hook.tsx","webpack://core/./src/filters/savePriceClasses.hook.tsx","webpack://core/./src/tools/outsideclick.hook.tsx","webpack://core/./src/tools/intoview.hook.tsx","webpack://core/./src/common/selection.menu/menu.context.tsx","webpack://core/./src/common/selection.menu/menu.context.button.tsx","webpack://core/./node_modules/date-fns/_lib/defaultOptions.js","webpack://core/./node_modules/date-fns/constants.js","webpack://core/./node_modules/date-fns/constructFrom.js","webpack://core/./node_modules/date-fns/toDate.js","webpack://core/./node_modules/date-fns/startOfWeek.js","webpack://core/./node_modules/date-fns/startOfWeekYear.js","webpack://core/./node_modules/date-fns/getWeekYear.js","webpack://core/./node_modules/date-fns/addDays.js","webpack://core/./src/common/selection.menu/custom/weekPicker.tsx","webpack://core/./src/common/selection.menu/custom/monthPicker.tsx","webpack://core/./src/common/selection.menu/menu.separator.tsx","webpack://core/./src/design/error/genericError.ts","webpack://core/./src/common/selection.menu/menu.custom.modal.tsx","webpack://core/./src/common/selection.menu/constants.ts","webpack://core/./src/common/selection.menu/menu.item.tsx","webpack://core/./src/common/selection.menu/menu.label.tsx","webpack://core/./src/common/selection.menu/shared.ts","webpack://core/./src/common/selection.menu/sub.menu.css?a083","webpack://core/./src/common/selection.menu/sub.menu.tsx","webpack://core/./src/common/selection.menu/menu.tsx","webpack://core/./src/common/dynamic.title/title.button.tsx","webpack://core/./src/design/loading/Loading.tsx","webpack://core/./src/filters/customFilters/customClassLabel.tsx","webpack://core/./src/filters/customFilters/price/customPriceClasses.tsx","webpack://core/./src/filters/shareCustomModal.tsx","webpack://core/./src/filters/customFilters/useSideBar.hook.tsx","webpack://core/./src/filters/types.ts","webpack://core/./src/filters/customFilters/deleteSavedCustomModal.tsx","webpack://core/./src/filters/customFilters/customSegmentsUtils.ts","webpack://core/./src/filters/customFilters/savedCustomSegmentsCard.tsx","webpack://core/./src/filters/customFilters/saveCustomSegmentsModal.tsx","webpack://core/./src/filters/customFilters/addClassButton.tsx","webpack://core/./src/filters/customFilters/price/customPriceTray.tsx","webpack://core/./src/filters/checkbox.tsx","webpack://core/./src/filters/multiSelect.tsx","webpack://core/./src/filters/numericRange.tsx","webpack://core/./src/filters/dateRange.tsx","webpack://core/./src/filters/select.tsx","webpack://core/./src/filters/filterEntry.tsx","webpack://core/./src/filters/customFilters/features/customFeatureClasses.tsx","webpack://core/./src/filters/customFilters/features/renderNumericFeature.tsx","webpack://core/./src/filters/customFilters/features/renderCategoricalFeature.tsx","webpack://core/./src/filters/customFilters/features/customFeatureTray.tsx","webpack://core/./src/filters/customFilters/editTray.tsx","webpack://core/./src/common/dynamic.title/title.tsx","webpack://core/./src/filters/filterTracking.hook.tsx","webpack://core/./src/analytics/utils.ts","webpack://core/./src/analytics/types.ts","webpack://core/./src/analytics/trackPageElementViewed.hook.ts","webpack://core/./src/common/no-data-warning/empty-state.tsx","webpack://core/./src/design/warning/warningsDisplay.tsx","webpack://core/./src/common/no-data-warning/no-data-info.tsx","webpack://core/./node_modules/react-intersection-observer/dist/index.mjs","webpack://core/./src/components/component.card.tsx","webpack://core/./src/tools/inView.hook.tsx","webpack://core/./src/context/edit.provider.tsx","webpack://core/./src/context/selectors/menu.tsx","webpack://core/./src/context/selectors/selection.list.tsx","webpack://core/./src/context/selectors/multi.select.tsx","webpack://core/./src/context/selectors/radio.group.tsx","webpack://core/./src/context/selectors/single.select.tsx","webpack://core/./src/context/selectors/unknown.tsx","webpack://core/./src/elements/dummy.tsx","webpack://core/./src/elements/dummy.static.tsx","webpack://core/./node_modules/dompurify/dist/purify.es.mjs","webpack://core/./src/design/error/error.tsx","webpack://core/./src/elements/error/error.tsx","webpack://core/./src/common/title.selector/index.tsx","webpack://core/./src/content/instructions.ts","webpack://core/./src/bff/content/component/index.ts","webpack://core/./src/bff/content/modal/dsl.ts","webpack://core/./src/bff/content/content/base.ts","webpack://core/./src/bff/content/data/options.ts","webpack://core/./src/bff/content/content/timeSeries.ts","webpack://core/./src/bff/content/content/segmentation.ts","webpack://core/./src/bff/content/content/multiKpi.ts","webpack://core/./src/bff/content/content/leaderBoard.ts","webpack://core/./src/bff/content/content/statsTable.ts","webpack://core/./src/bff/content/content/keyIndicators.ts","webpack://core/./src/bff/content/content/kpiTrends.ts","webpack://core/./src/bff/content/content/billboard.ts","webpack://core/./src/bff/content/content/alertPanel.ts","webpack://core/./src/bff/content/content/singleKpiTrend.ts","webpack://core/./src/bff/content/content/heatmap.ts","webpack://core/./src/bff/content/content/kpiDecomposition.ts","webpack://core/./src/bff/content/page/dsl.ts","webpack://core/./src/bff/content/section/base.ts","webpack://core/./src/bff/content/section/column.ts","webpack://core/./src/bff/content/section/tabbed.ts","webpack://core/./src/bff/content/index.ts","webpack://core/./src/elements/keyIndicators/data.ts","webpack://core/./src/elements/keyIndicators/indicators.css?a17a","webpack://core/./src/elements/keyIndicators/spark.tsx","webpack://core/./src/design/clickable.card/card.css?7275","webpack://core/./src/design/clickable.card/card.tsx","webpack://core/./src/elements/keyIndicators/card.tsx","webpack://core/./src/elements/constants.ts","webpack://core/./src/export/utils/mapDefinitions.ts","webpack://core/./src/export/utils/getExportContext.ts","webpack://core/./src/export/utils/mapValueToDataCell.ts","webpack://core/./src/export/utils/formatLabel.ts","webpack://core/./node_modules/luxon/src/errors.js","webpack://core/./node_modules/luxon/src/impl/formats.js","webpack://core/./node_modules/luxon/src/zone.js","webpack://core/./node_modules/luxon/src/zones/systemZone.js","webpack://core/./node_modules/luxon/src/zones/IANAZone.js","webpack://core/./node_modules/luxon/src/impl/locale.js","webpack://core/./node_modules/luxon/src/impl/english.js","webpack://core/./node_modules/luxon/src/zones/fixedOffsetZone.js","webpack://core/./node_modules/luxon/src/zones/invalidZone.js","webpack://core/./node_modules/luxon/src/impl/zoneUtil.js","webpack://core/./node_modules/luxon/src/impl/util.js","webpack://core/./node_modules/luxon/src/impl/digits.js","webpack://core/./node_modules/luxon/src/settings.js","webpack://core/./node_modules/luxon/src/impl/invalid.js","webpack://core/./node_modules/luxon/src/impl/conversions.js","webpack://core/./node_modules/luxon/src/impl/formatter.js","webpack://core/./node_modules/luxon/src/impl/regexParser.js","webpack://core/./node_modules/luxon/src/duration.js","webpack://core/./node_modules/luxon/src/interval.js","webpack://core/./node_modules/luxon/src/info.js","webpack://core/./node_modules/luxon/src/impl/diff.js","webpack://core/./node_modules/luxon/src/impl/tokenParser.js","webpack://core/./node_modules/luxon/src/datetime.js","webpack://core/./node_modules/luxon/src/luxon.js","webpack://core/./src/export/utils/componentToPptData.ts","webpack://core/./src/export/utils/chartToPptData.ts","webpack://core/./src/export/utils/exportContainer.ts","webpack://core/./src/elements/collection/useOnCollectionExportReady.ts","webpack://core/./src/design/warning/GenericWarnings.tsx","webpack://core/./src/elements/keyIndicators/indicators.tsx","webpack://core/./src/design/table2/table.css?3511","webpack://core/./src/design/table2/table.tsx","webpack://core/./src/export/utils/debounce.ts","webpack://core/./src/design/table2/cells.tsx","webpack://core/./src/data/helpers.ts","webpack://core/./src/elements/leaderboard/data.ts","webpack://core/./src/elements/leaderboard/types.ts","webpack://core/./src/elements/leaderboard/constants.ts","webpack://core/./src/elements/leaderboard/updateProductGroupModal.tsx","webpack://core/./src/elements/leaderboard/productGroupMenu.tsx","webpack://core/./src/elements/leaderboard/helper.ts","webpack://core/./src/elements/leaderboard/board.parts.tsx","webpack://core/./src/elements/leaderboard/quicklook.css?9f54","webpack://core/./src/elements/leaderboard/quicklook.tsx","webpack://core/./src/design/modal/Modal.css?726e","webpack://core/./src/design/modal/Modal.tsx","webpack://core/./src/elements/leaderboard/customise.tsx","webpack://core/./src/elements/leaderboard/selection.bar.tsx","webpack://core/./src/tools/hasScrollbar.ts","webpack://core/./src/analytics/trackDataExported.ts","webpack://core/./src/export/export.button.tsx","webpack://core/./src/elements/leaderboard/chartDataToExportData.ts","webpack://core/./src/elements/leaderboard/useDataFromComponentSettings.hook.tsx","webpack://core/./src/elements/leaderboard/useProductGroups.hook.tsx","webpack://core/./src/elements/leaderboard/createGroupModal.css?8afe","webpack://core/./src/elements/leaderboard/createGroupModal.tsx","webpack://core/./src/elements/leaderboard/leaderboard.tsx","webpack://core/./node_modules/@kurkle/color/dist/color.esm.js","webpack://core/./node_modules/chart.js/dist/chunks/helpers.segment.js","webpack://core/./node_modules/chart.js/dist/chart.js","webpack://core/./node_modules/chart.js/auto/auto.js","webpack://core/./node_modules/chartjs-plugin-datalabels/dist/chartjs-plugin-datalabels.esm.js","webpack://core/./src/design/charts/constants.ts","webpack://core/./src/design/charts/plugins.ts","webpack://core/./src/design/charts/tooltip.ts","webpack://core/./src/design/charts/stackedBarChart.tsx","webpack://core/./src/tools/featureToggle/featureToggle.button.tsx","webpack://core/./src/tools/featureToggle/featureToggle.hook.tsx","webpack://core/./src/design/charts/lineChart.tsx","webpack://core/./src/design/charts/slopeChart.tsx","webpack://core/./src/design/charts/kpiTrend.tsx","webpack://core/./src/design/charts/index.ts","webpack://core/./src/elements/data/common.ts","webpack://core/./src/elements/data/chartData.ts","webpack://core/./src/elements/multiKpi/helper.ts","webpack://core/./src/design/charts/legend.tsx","webpack://core/./src/design/menus/selection.tsx","webpack://core/./src/design/charts/parts.tsx","webpack://core/./src/common/constants/warningMessages.ts","webpack://core/./src/design/warning/emptyDataWarning.tsx","webpack://core/./src/elements/multiKpi/multiKpi.chart.tsx","webpack://core/./src/elements/multiKpi/multiKpi.table.tsx","webpack://core/./src/elements/multiKpi/customise.tsx","webpack://core/./src/components/dataviz.toggle.tsx","webpack://core/./src/elements/multiKpi/chartDataToExportData.ts","webpack://core/./src/export/ExportHideout.css?ad41","webpack://core/./src/export/ExportHideout.tsx","webpack://core/./src/tools/arrays.ts","webpack://core/./src/analytics/trackChartInteractions.hook.tsx","webpack://core/./src/page/heading/utils.ts","webpack://core/./src/tools/createViewState.ts","webpack://core/./src/elements/multiKpi/multiKpi.tsx","webpack://core/./src/elements/multiKpi/data.ts","webpack://core/./src/elements/segmentation/data.ts","webpack://core/./src/elements/segmentation/segmentation.chart.tsx","webpack://core/./src/elements/segmentation/segmentation.table.tsx","webpack://core/./src/elements/segmentation/chartDataToExportData.ts","webpack://core/./src/elements/segmentation/segmentation.tsx","webpack://core/./src/elements/statsTable/statsTable.css?b180","webpack://core/./src/elements/statsTable/statsTable.tsx","webpack://core/./src/elements/statsTable/statsToExportData.ts","webpack://core/./src/elements/timeSeries/data.ts","webpack://core/./src/elements/timeSeries/timeSeries.chart.tsx","webpack://core/./src/elements/timeSeries/timeSeries.table.tsx","webpack://core/./src/elements/timeSeries/chartDataToExportData.ts","webpack://core/./src/elements/timeSeries/timeSeries.tsx","webpack://core/./src/elements/unknown/unknown.tsx","webpack://core/./src/elements/kpiTrends/trends.tsx","webpack://core/./src/elements/kpiTrends/data.ts","webpack://core/./src/elements/billboard/data.ts","webpack://core/./src/elements/billboard/billboard.css?39fa","webpack://core/./src/elements/billboard/billboard.tsx","webpack://core/./src/elements/alertPanel/alertPanel.tsx","webpack://core/./src/elements/singleKpiTrend/trend.tsx","webpack://core/./src/elements/singleKpiTrend/data.ts","webpack://core/./src/design/charts/heatmap.tsx","webpack://core/./src/elements/heatmap/data.ts","webpack://core/./src/elements/heatmap/heatmap.utils.ts","webpack://core/./src/elements/heatmap/heatmap.tsx","webpack://core/./src/design/charts/decompositionChart.tsx","webpack://core/./src/elements/kpiDecomposition/data.ts","webpack://core/./src/elements/kpiDecomposition/kpiDecomposition.tsx","webpack://core/./src/content/register.ts","webpack://core/./src/content/element.tsx","webpack://core/./src/components/component.footer.tsx","webpack://core/./node_modules/react-error-boundary/dist/react-error-boundary.esm.js","webpack://core/./src/components/LocalErrorBoundary.tsx","webpack://core/./src/components/component.tsx","webpack://core/./src/components/component.actions.tsx","webpack://core/./src/sections/column.tsx","webpack://core/./src/sections/tabbed.tsx","webpack://core/./src/sections/tools.ts","webpack://core/./src/sections/unknown.tsx","webpack://core/./src/sections/element.tsx","webpack://core/./src/sections/sections.tsx","webpack://core/./src/page/heading/title.tsx","webpack://core/./src/page/heading/header.css?fb66","webpack://core/./src/page/heading/heading.tsx","webpack://core/./src/page/page.css?85a9","webpack://core/./node_modules/react-router/dist/development/chunk-XJI4KG32.mjs","webpack://core/./src/filters/filterGroups.tsx","webpack://core/./src/filters/filterGroupContainer.css?165b","webpack://core/./src/filters/filterGroupContainer.tsx","webpack://core/./src/filters/filterSection.tsx","webpack://core/./src/filters/savedFilters.hook.ts","webpack://core/./src/filters/savedFilters.provider.tsx","webpack://core/./src/filters/savedFilters.tsx","webpack://core/./src/filters/panel.tsx","webpack://core/./src/filters/saveFilter.button.tsx","webpack://core/./src/filters/chips.tsx","webpack://core/./src/context/contextTracking.hook.tsx","webpack://core/./src/context/display.tsx","webpack://core/./src/modal/modal.tsx","webpack://core/./src/analytics/trackPageViewed.hook.tsx","webpack://core/./src/page/footer.tsx","webpack://core/./src/analytics/access.ts","webpack://core/./src/analytics/persona.client.ts","webpack://core/./src/analytics/impersonation.ts","webpack://core/./src/analytics/tools.ts","webpack://core/./src/analytics/track.ts","webpack://core/./src/analytics/queue.ts","webpack://core/./src/analytics/enabled.ts","webpack://core/./src/analytics/tracking.hook.tsx","webpack://core/./src/common/upsell/upsell.wrapper.tsx","webpack://core/./src/page/page.tsx","webpack://core/./src/content/collection/utils.ts","webpack://core/./src/content/collection/getInsightInfo.ts","webpack://core/./src/content/collection/insightElementWithData.tsx","webpack://core/./src/content/collection/insightElement.tsx","webpack://core/./src/content/collection/getConfigItemCallbacks.ts","webpack://core/./src/newron-core.tsx","webpack://core/./src/root/Root.tsx"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.groupListPLB {\n\tmargin: 1.2rem 0\n}\n\n.selectGroupInfoPLB {\n\tfont-size: 0.8rem;\n\tcolor: #777;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/elements/leaderboard/createGroupModal.css\"],\"names\":[],\"mappings\":\"AAAA;CACC;AACD;;AAEA;CACC,iBAAiB;CACjB,WAAW;AACZ\",\"sourcesContent\":[\".groupListPLB {\\n\\tmargin: 1.2rem 0\\n}\\n\\n.selectGroupInfoPLB {\\n\\tfont-size: 0.8rem;\\n\\tcolor: #777;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","const resolveDirectory = require(\"../public-path\").resolveDirectory;\n\nexports.autoPublicPath = function autoPublicPath(rootDirLevel) {\n if (!rootDirLevel) {\n rootDirLevel = 1;\n }\n\n if (typeof __webpack_public_path__ !== \"undefined\") {\n if (typeof __system_context__ === \"undefined\") {\n throw Error(\n \"systemjs-webpack-interop requires webpack@>=5.0.0-beta.15 and output.libraryTarget set to 'system'\"\n );\n }\n\n if (!__system_context__.meta || !__system_context__.meta.url) {\n console.error(\"__system_context__\", __system_context__);\n throw Error(\n \"systemjs-webpack-interop was provided an unknown SystemJS context. Expected context.meta.url, but none was provided\"\n );\n }\n\n __webpack_public_path__ = resolveDirectory(\n __system_context__.meta.url,\n rootDirLevel\n );\n }\n};\n","/*!\n * html2canvas 1.4.1 <https://html2canvas.hertzen.com>\n * Copyright (c) 2022 Niklas von Hertzen <https://hertzen.com>\n * Released under MIT License\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.html2canvas = factory());\n}(this, (function () { 'use strict';\n\n /*! *****************************************************************************\r\n Copyright (c) Microsoft Corporation.\r\n\r\n Permission to use, copy, modify, and/or distribute this software for any\r\n purpose with or without fee is hereby granted.\r\n\r\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\n AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\n LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\n OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\n PERFORMANCE OF THIS SOFTWARE.\r\n ***************************************************************************** */\r\n /* global Reflect, Promise */\r\n\r\n var extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n\r\n function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n }\r\n\r\n var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n };\r\n\r\n function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n }\r\n\r\n function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n }\r\n\r\n function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || from);\r\n }\n\n var Bounds = /** @class */ (function () {\n function Bounds(left, top, width, height) {\n this.left = left;\n this.top = top;\n this.width = width;\n this.height = height;\n }\n Bounds.prototype.add = function (x, y, w, h) {\n return new Bounds(this.left + x, this.top + y, this.width + w, this.height + h);\n };\n Bounds.fromClientRect = function (context, clientRect) {\n return new Bounds(clientRect.left + context.windowBounds.left, clientRect.top + context.windowBounds.top, clientRect.width, clientRect.height);\n };\n Bounds.fromDOMRectList = function (context, domRectList) {\n var domRect = Array.from(domRectList).find(function (rect) { return rect.width !== 0; });\n return domRect\n ? new Bounds(domRect.left + context.windowBounds.left, domRect.top + context.windowBounds.top, domRect.width, domRect.height)\n : Bounds.EMPTY;\n };\n Bounds.EMPTY = new Bounds(0, 0, 0, 0);\n return Bounds;\n }());\n var parseBounds = function (context, node) {\n return Bounds.fromClientRect(context, node.getBoundingClientRect());\n };\n var parseDocumentSize = function (document) {\n var body = document.body;\n var documentElement = document.documentElement;\n if (!body || !documentElement) {\n throw new Error(\"Unable to get document size\");\n }\n var width = Math.max(Math.max(body.scrollWidth, documentElement.scrollWidth), Math.max(body.offsetWidth, documentElement.offsetWidth), Math.max(body.clientWidth, documentElement.clientWidth));\n var height = Math.max(Math.max(body.scrollHeight, documentElement.scrollHeight), Math.max(body.offsetHeight, documentElement.offsetHeight), Math.max(body.clientHeight, documentElement.clientHeight));\n return new Bounds(0, 0, width, height);\n };\n\n /*\n * css-line-break 2.1.0 <https://github.com/niklasvh/css-line-break#readme>\n * Copyright (c) 2022 Niklas von Hertzen <https://hertzen.com>\n * Released under MIT License\n */\n var toCodePoints$1 = function (str) {\n var codePoints = [];\n var i = 0;\n var length = str.length;\n while (i < length) {\n var value = str.charCodeAt(i++);\n if (value >= 0xd800 && value <= 0xdbff && i < length) {\n var extra = str.charCodeAt(i++);\n if ((extra & 0xfc00) === 0xdc00) {\n codePoints.push(((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000);\n }\n else {\n codePoints.push(value);\n i--;\n }\n }\n else {\n codePoints.push(value);\n }\n }\n return codePoints;\n };\n var fromCodePoint$1 = function () {\n var codePoints = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n codePoints[_i] = arguments[_i];\n }\n if (String.fromCodePoint) {\n return String.fromCodePoint.apply(String, codePoints);\n }\n var length = codePoints.length;\n if (!length) {\n return '';\n }\n var codeUnits = [];\n var index = -1;\n var result = '';\n while (++index < length) {\n var codePoint = codePoints[index];\n if (codePoint <= 0xffff) {\n codeUnits.push(codePoint);\n }\n else {\n codePoint -= 0x10000;\n codeUnits.push((codePoint >> 10) + 0xd800, (codePoint % 0x400) + 0xdc00);\n }\n if (index + 1 === length || codeUnits.length > 0x4000) {\n result += String.fromCharCode.apply(String, codeUnits);\n codeUnits.length = 0;\n }\n }\n return result;\n };\n var chars$2 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n // Use a lookup table to find the index.\n var lookup$2 = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\n for (var i$2 = 0; i$2 < chars$2.length; i$2++) {\n lookup$2[chars$2.charCodeAt(i$2)] = i$2;\n }\n\n /*\n * utrie 1.0.2 <https://github.com/niklasvh/utrie>\n * Copyright (c) 2022 Niklas von Hertzen <https://hertzen.com>\n * Released under MIT License\n */\n var chars$1$1 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n // Use a lookup table to find the index.\n var lookup$1$1 = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\n for (var i$1$1 = 0; i$1$1 < chars$1$1.length; i$1$1++) {\n lookup$1$1[chars$1$1.charCodeAt(i$1$1)] = i$1$1;\n }\n var decode$1 = function (base64) {\n var bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;\n if (base64[base64.length - 1] === '=') {\n bufferLength--;\n if (base64[base64.length - 2] === '=') {\n bufferLength--;\n }\n }\n var buffer = typeof ArrayBuffer !== 'undefined' &&\n typeof Uint8Array !== 'undefined' &&\n typeof Uint8Array.prototype.slice !== 'undefined'\n ? new ArrayBuffer(bufferLength)\n : new Array(bufferLength);\n var bytes = Array.isArray(buffer) ? buffer : new Uint8Array(buffer);\n for (i = 0; i < len; i += 4) {\n encoded1 = lookup$1$1[base64.charCodeAt(i)];\n encoded2 = lookup$1$1[base64.charCodeAt(i + 1)];\n encoded3 = lookup$1$1[base64.charCodeAt(i + 2)];\n encoded4 = lookup$1$1[base64.charCodeAt(i + 3)];\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n return buffer;\n };\n var polyUint16Array$1 = function (buffer) {\n var length = buffer.length;\n var bytes = [];\n for (var i = 0; i < length; i += 2) {\n bytes.push((buffer[i + 1] << 8) | buffer[i]);\n }\n return bytes;\n };\n var polyUint32Array$1 = function (buffer) {\n var length = buffer.length;\n var bytes = [];\n for (var i = 0; i < length; i += 4) {\n bytes.push((buffer[i + 3] << 24) | (buffer[i + 2] << 16) | (buffer[i + 1] << 8) | buffer[i]);\n }\n return bytes;\n };\n\n /** Shift size for getting the index-2 table offset. */\n var UTRIE2_SHIFT_2$1 = 5;\n /** Shift size for getting the index-1 table offset. */\n var UTRIE2_SHIFT_1$1 = 6 + 5;\n /**\n * Shift size for shifting left the index array values.\n * Increases possible data size with 16-bit index values at the cost\n * of compactability.\n * This requires data blocks to be aligned by UTRIE2_DATA_GRANULARITY.\n */\n var UTRIE2_INDEX_SHIFT$1 = 2;\n /**\n * Difference between the two shift sizes,\n * for getting an index-1 offset from an index-2 offset. 6=11-5\n */\n var UTRIE2_SHIFT_1_2$1 = UTRIE2_SHIFT_1$1 - UTRIE2_SHIFT_2$1;\n /**\n * The part of the index-2 table for U+D800..U+DBFF stores values for\n * lead surrogate code _units_ not code _points_.\n * Values for lead surrogate code _points_ are indexed with this portion of the table.\n * Length=32=0x20=0x400>>UTRIE2_SHIFT_2. (There are 1024=0x400 lead surrogates.)\n */\n var UTRIE2_LSCP_INDEX_2_OFFSET$1 = 0x10000 >> UTRIE2_SHIFT_2$1;\n /** Number of entries in a data block. 32=0x20 */\n var UTRIE2_DATA_BLOCK_LENGTH$1 = 1 << UTRIE2_SHIFT_2$1;\n /** Mask for getting the lower bits for the in-data-block offset. */\n var UTRIE2_DATA_MASK$1 = UTRIE2_DATA_BLOCK_LENGTH$1 - 1;\n var UTRIE2_LSCP_INDEX_2_LENGTH$1 = 0x400 >> UTRIE2_SHIFT_2$1;\n /** Count the lengths of both BMP pieces. 2080=0x820 */\n var UTRIE2_INDEX_2_BMP_LENGTH$1 = UTRIE2_LSCP_INDEX_2_OFFSET$1 + UTRIE2_LSCP_INDEX_2_LENGTH$1;\n /**\n * The 2-byte UTF-8 version of the index-2 table follows at offset 2080=0x820.\n * Length 32=0x20 for lead bytes C0..DF, regardless of UTRIE2_SHIFT_2.\n */\n var UTRIE2_UTF8_2B_INDEX_2_OFFSET$1 = UTRIE2_INDEX_2_BMP_LENGTH$1;\n var UTRIE2_UTF8_2B_INDEX_2_LENGTH$1 = 0x800 >> 6; /* U+0800 is the first code point after 2-byte UTF-8 */\n /**\n * The index-1 table, only used for supplementary code points, at offset 2112=0x840.\n * Variable length, for code points up to highStart, where the last single-value range starts.\n * Maximum length 512=0x200=0x100000>>UTRIE2_SHIFT_1.\n * (For 0x100000 supplementary code points U+10000..U+10ffff.)\n *\n * The part of the index-2 table for supplementary code points starts\n * after this index-1 table.\n *\n * Both the index-1 table and the following part of the index-2 table\n * are omitted completely if there is only BMP data.\n */\n var UTRIE2_INDEX_1_OFFSET$1 = UTRIE2_UTF8_2B_INDEX_2_OFFSET$1 + UTRIE2_UTF8_2B_INDEX_2_LENGTH$1;\n /**\n * Number of index-1 entries for the BMP. 32=0x20\n * This part of the index-1 table is omitted from the serialized form.\n */\n var UTRIE2_OMITTED_BMP_INDEX_1_LENGTH$1 = 0x10000 >> UTRIE2_SHIFT_1$1;\n /** Number of entries in an index-2 block. 64=0x40 */\n var UTRIE2_INDEX_2_BLOCK_LENGTH$1 = 1 << UTRIE2_SHIFT_1_2$1;\n /** Mask for getting the lower bits for the in-index-2-block offset. */\n var UTRIE2_INDEX_2_MASK$1 = UTRIE2_INDEX_2_BLOCK_LENGTH$1 - 1;\n var slice16$1 = function (view, start, end) {\n if (view.slice) {\n return view.slice(start, end);\n }\n return new Uint16Array(Array.prototype.slice.call(view, start, end));\n };\n var slice32$1 = function (view, start, end) {\n if (view.slice) {\n return view.slice(start, end);\n }\n return new Uint32Array(Array.prototype.slice.call(view, start, end));\n };\n var createTrieFromBase64$1 = function (base64, _byteLength) {\n var buffer = decode$1(base64);\n var view32 = Array.isArray(buffer) ? polyUint32Array$1(buffer) : new Uint32Array(buffer);\n var view16 = Array.isArray(buffer) ? polyUint16Array$1(buffer) : new Uint16Array(buffer);\n var headerLength = 24;\n var index = slice16$1(view16, headerLength / 2, view32[4] / 2);\n var data = view32[5] === 2\n ? slice16$1(view16, (headerLength + view32[4]) / 2)\n : slice32$1(view32, Math.ceil((headerLength + view32[4]) / 4));\n return new Trie$1(view32[0], view32[1], view32[2], view32[3], index, data);\n };\n var Trie$1 = /** @class */ (function () {\n function Trie(initialValue, errorValue, highStart, highValueIndex, index, data) {\n this.initialValue = initialValue;\n this.errorValue = errorValue;\n this.highStart = highStart;\n this.highValueIndex = highValueIndex;\n this.index = index;\n this.data = data;\n }\n /**\n * Get the value for a code point as stored in the Trie.\n *\n * @param codePoint the code point\n * @return the value\n */\n Trie.prototype.get = function (codePoint) {\n var ix;\n if (codePoint >= 0) {\n if (codePoint < 0x0d800 || (codePoint > 0x0dbff && codePoint <= 0x0ffff)) {\n // Ordinary BMP code point, excluding leading surrogates.\n // BMP uses a single level lookup. BMP index starts at offset 0 in the Trie2 index.\n // 16 bit data is stored in the index array itself.\n ix = this.index[codePoint >> UTRIE2_SHIFT_2$1];\n ix = (ix << UTRIE2_INDEX_SHIFT$1) + (codePoint & UTRIE2_DATA_MASK$1);\n return this.data[ix];\n }\n if (codePoint <= 0xffff) {\n // Lead Surrogate Code Point. A Separate index section is stored for\n // lead surrogate code units and code points.\n // The main index has the code unit data.\n // For this function, we need the code point data.\n // Note: this expression could be refactored for slightly improved efficiency, but\n // surrogate code points will be so rare in practice that it's not worth it.\n ix = this.index[UTRIE2_LSCP_INDEX_2_OFFSET$1 + ((codePoint - 0xd800) >> UTRIE2_SHIFT_2$1)];\n ix = (ix << UTRIE2_INDEX_SHIFT$1) + (codePoint & UTRIE2_DATA_MASK$1);\n return this.data[ix];\n }\n if (codePoint < this.highStart) {\n // Supplemental code point, use two-level lookup.\n ix = UTRIE2_INDEX_1_OFFSET$1 - UTRIE2_OMITTED_BMP_INDEX_1_LENGTH$1 + (codePoint >> UTRIE2_SHIFT_1$1);\n ix = this.index[ix];\n ix += (codePoint >> UTRIE2_SHIFT_2$1) & UTRIE2_INDEX_2_MASK$1;\n ix = this.index[ix];\n ix = (ix << UTRIE2_INDEX_SHIFT$1) + (codePoint & UTRIE2_DATA_MASK$1);\n return this.data[ix];\n }\n if (codePoint <= 0x10ffff) {\n return this.data[this.highValueIndex];\n }\n }\n // Fall through. The code point is outside of the legal range of 0..0x10ffff.\n return this.errorValue;\n };\n return Trie;\n }());\n\n /*\n * base64-arraybuffer 1.0.2 <https://github.com/niklasvh/base64-arraybuffer>\n * Copyright (c) 2022 Niklas von Hertzen <https://hertzen.com>\n * Released under MIT License\n */\n var chars$3 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n // Use a lookup table to find the index.\n var lookup$3 = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\n for (var i$3 = 0; i$3 < chars$3.length; i$3++) {\n lookup$3[chars$3.charCodeAt(i$3)] = i$3;\n }\n\n var base64$1 = 'KwAAAAAAAAAACA4AUD0AADAgAAACAAAAAAAIABAAGABAAEgAUABYAGAAaABgAGgAYgBqAF8AZwBgAGgAcQB5AHUAfQCFAI0AlQCdAKIAqgCyALoAYABoAGAAaABgAGgAwgDKAGAAaADGAM4A0wDbAOEA6QDxAPkAAQEJAQ8BFwF1AH0AHAEkASwBNAE6AUIBQQFJAVEBWQFhAWgBcAF4ATAAgAGGAY4BlQGXAZ8BpwGvAbUBvQHFAc0B0wHbAeMB6wHxAfkBAQIJAvEBEQIZAiECKQIxAjgCQAJGAk4CVgJeAmQCbAJ0AnwCgQKJApECmQKgAqgCsAK4ArwCxAIwAMwC0wLbAjAA4wLrAvMC+AIAAwcDDwMwABcDHQMlAy0DNQN1AD0DQQNJA0kDSQNRA1EDVwNZA1kDdQB1AGEDdQBpA20DdQN1AHsDdQCBA4kDkQN1AHUAmQOhA3UAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AKYDrgN1AHUAtgO+A8YDzgPWAxcD3gPjA+sD8wN1AHUA+wMDBAkEdQANBBUEHQQlBCoEFwMyBDgEYABABBcDSARQBFgEYARoBDAAcAQzAXgEgASIBJAEdQCXBHUAnwSnBK4EtgS6BMIEyAR1AHUAdQB1AHUAdQCVANAEYABgAGAAYABgAGAAYABgANgEYADcBOQEYADsBPQE/AQEBQwFFAUcBSQFLAU0BWQEPAVEBUsFUwVbBWAAYgVgAGoFcgV6BYIFigWRBWAAmQWfBaYFYABgAGAAYABgAKoFYACxBbAFuQW6BcEFwQXHBcEFwQXPBdMF2wXjBeoF8gX6BQIGCgYSBhoGIgYqBjIGOgZgAD4GRgZMBmAAUwZaBmAAYABgAGAAYABgAGAAYABgAGAAYABgAGIGYABpBnAGYABgAGAAYABgAGAAYABgAGAAYAB4Bn8GhQZgAGAAYAB1AHcDFQSLBmAAYABgAJMGdQA9A3UAmwajBqsGqwaVALMGuwbDBjAAywbSBtIG1QbSBtIG0gbSBtIG0gbdBuMG6wbzBvsGAwcLBxMHAwcbByMHJwcsBywHMQcsB9IGOAdAB0gHTgfSBkgHVgfSBtIG0gbSBtIG0gbSBtIG0gbSBiwHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAdgAGAALAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAdbB2MHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsB2kH0gZwB64EdQB1AHUAdQB1AHUAdQB1AHUHfQdgAIUHjQd1AHUAlQedB2AAYAClB6sHYACzB7YHvgfGB3UAzgfWBzMB3gfmB1EB7gf1B/0HlQENAQUIDQh1ABUIHQglCBcDLQg1CD0IRQhNCEEDUwh1AHUAdQBbCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIcAh3CHoIMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIgggwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAALAcsBywHLAcsBywHLAcsBywHLAcsB4oILAcsB44I0gaWCJ4Ipgh1AHUAqgiyCHUAdQB1AHUAdQB1AHUAdQB1AHUAtwh8AXUAvwh1AMUIyQjRCNkI4AjoCHUAdQB1AO4I9gj+CAYJDgkTCS0HGwkjCYIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiAAIAAAAFAAYABgAGIAXwBgAHEAdQBFAJUAogCyAKAAYABgAEIA4ABGANMA4QDxAMEBDwE1AFwBLAE6AQEBUQF4QkhCmEKoQrhCgAHIQsAB0MLAAcABwAHAAeDC6ABoAHDCwMMAAcABwAHAAdDDGMMAAcAB6MM4wwjDWMNow3jDaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAEjDqABWw6bDqABpg6gAaABoAHcDvwOPA+gAaABfA/8DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DpcPAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcAB9cPKwkyCToJMAB1AHUAdQBCCUoJTQl1AFUJXAljCWcJawkwADAAMAAwAHMJdQB2CX4JdQCECYoJjgmWCXUAngkwAGAAYABxAHUApgn3A64JtAl1ALkJdQDACTAAMAAwADAAdQB1AHUAdQB1AHUAdQB1AHUAowYNBMUIMAAwADAAMADICcsJ0wnZCRUE4QkwAOkJ8An4CTAAMAB1AAAKvwh1AAgKDwoXCh8KdQAwACcKLgp1ADYKqAmICT4KRgowADAAdQB1AE4KMAB1AFYKdQBeCnUAZQowADAAMAAwADAAMAAwADAAMAAVBHUAbQowADAAdQC5CXUKMAAwAHwBxAijBogEMgF9CoQKiASMCpQKmgqIBKIKqgquCogEDQG2Cr4KxgrLCjAAMADTCtsKCgHjCusK8Qr5CgELMAAwADAAMAB1AIsECQsRC3UANAEZCzAAMAAwADAAMAB1ACELKQswAHUANAExCzkLdQBBC0kLMABRC1kLMAAwADAAMAAwADAAdQBhCzAAMAAwAGAAYABpC3ELdwt/CzAAMACHC4sLkwubC58Lpwt1AK4Ltgt1APsDMAAwADAAMAAwADAAMAAwAL4LwwvLC9IL1wvdCzAAMADlC+kL8Qv5C/8LSQswADAAMAAwADAAMAAwADAAMAAHDDAAMAAwADAAMAAODBYMHgx1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1ACYMMAAwADAAdQB1AHUALgx1AHUAdQB1AHUAdQA2DDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AD4MdQBGDHUAdQB1AHUAdQB1AEkMdQB1AHUAdQB1AFAMMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQBYDHUAdQB1AF8MMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUA+wMVBGcMMAAwAHwBbwx1AHcMfwyHDI8MMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAYABgAJcMMAAwADAAdQB1AJ8MlQClDDAAMACtDCwHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsB7UMLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AA0EMAC9DDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAsBywHLAcsBywHLAcsBywHLQcwAMEMyAwsBywHLAcsBywHLAcsBywHLAcsBywHzAwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1ANQM2QzhDDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMABgAGAAYABgAGAAYABgAOkMYADxDGAA+AwADQYNYABhCWAAYAAODTAAMAAwADAAFg1gAGAAHg37AzAAMAAwADAAYABgACYNYAAsDTQNPA1gAEMNPg1LDWAAYABgAGAAYABgAGAAYABgAGAAUg1aDYsGVglhDV0NcQBnDW0NdQ15DWAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAlQCBDZUAiA2PDZcNMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAnw2nDTAAMAAwADAAMAAwAHUArw23DTAAMAAwADAAMAAwADAAMAAwADAAMAB1AL8NMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAB1AHUAdQB1AHUAdQDHDTAAYABgAM8NMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAA1w11ANwNMAAwAD0B5A0wADAAMAAwADAAMADsDfQN/A0EDgwOFA4wABsOMAAwADAAMAAwADAAMAAwANIG0gbSBtIG0gbSBtIG0gYjDigOwQUuDsEFMw7SBjoO0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGQg5KDlIOVg7SBtIGXg5lDm0OdQ7SBtIGfQ6EDooOjQ6UDtIGmg6hDtIG0gaoDqwO0ga0DrwO0gZgAGAAYADEDmAAYAAkBtIGzA5gANIOYADaDokO0gbSBt8O5w7SBu8O0gb1DvwO0gZgAGAAxA7SBtIG0gbSBtIGYABgAGAAYAAED2AAsAUMD9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGFA8sBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAccD9IGLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHJA8sBywHLAcsBywHLAccDywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywPLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAc0D9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAccD9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGFA8sBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHPA/SBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gYUD0QPlQCVAJUAMAAwADAAMACVAJUAlQCVAJUAlQCVAEwPMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAA//8EAAQABAAEAAQABAAEAAQABAANAAMAAQABAAIABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQACgATABcAHgAbABoAHgAXABYAEgAeABsAGAAPABgAHABLAEsASwBLAEsASwBLAEsASwBLABgAGAAeAB4AHgATAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYAGwASAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAWAA0AEQAeAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAFAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJABYAGgAbABsAGwAeAB0AHQAeAE8AFwAeAA0AHgAeABoAGwBPAE8ADgBQAB0AHQAdAE8ATwAXAE8ATwBPABYAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAFAATwBAAE8ATwBPAEAATwBQAFAATwBQAB4AHgAeAB4AHgAeAB0AHQAdAB0AHgAdAB4ADgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgBQAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkACQAJAAkACQAJAAkABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAFAAHgAeAB4AKwArAFAAUABQAFAAGABQACsAKwArACsAHgAeAFAAHgBQAFAAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUAAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAYAA0AKwArAB4AHgAbACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAB4ABAAEAB4ABAAEABMABAArACsAKwArACsAKwArACsAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAKwArACsAKwBWAFYAVgBWAB4AHgArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AGgAaABoAGAAYAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQAEwAEACsAEwATAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABLAEsASwBLAEsASwBLAEsASwBLABoAGQAZAB4AUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABMAUAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABABQAFAABAAEAB4ABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUAAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAFAABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQAUABQAB4AHgAYABMAUAArACsABAAbABsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAFAABAAEAAQABAAEAFAABAAEAAQAUAAEAAQABAAEAAQAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArACsAHgArAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAUAAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEAA0ADQBLAEsASwBLAEsASwBLAEsASwBLAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUAArACsAKwBQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABABQACsAKwArACsAKwArACsAKwAEACsAKwArACsAUABQACsAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUAAaABoAUABQAFAAUABQAEwAHgAbAFAAHgAEACsAKwAEAAQABAArAFAAUABQAFAAUABQACsAKwArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQACsAUABQACsAKwAEACsABAAEAAQABAAEACsAKwArACsABAAEACsAKwAEAAQABAArACsAKwAEACsAKwArACsAKwArACsAUABQAFAAUAArAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLAAQABABQAFAAUAAEAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAArACsAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAB4AGwArACsAKwArACsAKwArAFAABAAEAAQABAAEAAQAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAKwArACsAKwArAAQABAAEACsAKwArACsAUABQACsAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAB4AUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAAQAUAArAFAAUABQAFAAUABQACsAKwArAFAAUABQACsAUABQAFAAUAArACsAKwBQAFAAKwBQACsAUABQACsAKwArAFAAUAArACsAKwBQAFAAUAArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAAQABAAEAAQABAArACsAKwAEAAQABAArAAQABAAEAAQAKwArAFAAKwArACsAKwArACsABAArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAHgAeAB4AHgAeAB4AGwAeACsAKwArACsAKwAEAAQABAAEAAQAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAUAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAAEACsAKwArACsAKwArACsABAAEACsAUABQAFAAKwArACsAKwArAFAAUAAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwAOAFAAUABQAFAAUABQAFAAHgBQAAQABAAEAA4AUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAKwArAAQAUAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAAEACsAKwArACsAKwArACsABAAEACsAKwArACsAKwArACsAUAArAFAAUAAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwBQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABABQAB4AKwArACsAKwBQAFAAUAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQABoAUABQAFAAUABQAFAAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQACsAUAArACsAUABQAFAAUABQAFAAUAArACsAKwAEACsAKwArACsABAAEAAQABAAEAAQAKwAEACsABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgAqACsAKwArACsAGwBcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAeAEsASwBLAEsASwBLAEsASwBLAEsADQANACsAKwArACsAKwBcAFwAKwBcACsAXABcAFwAXABcACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAXAArAFwAXABcAFwAXABcAFwAXABcAFwAKgBcAFwAKgAqACoAKgAqACoAKgAqACoAXAArACsAXABcAFwAXABcACsAXAArACoAKgAqACoAKgAqACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwBcAFwAXABcAFAADgAOAA4ADgAeAA4ADgAJAA4ADgANAAkAEwATABMAEwATAAkAHgATAB4AHgAeAAQABAAeAB4AHgAeAB4AHgBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQAFAADQAEAB4ABAAeAAQAFgARABYAEQAEAAQAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAAQABAAEAAQADQAEAAQAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAA0ADQAeAB4AHgAeAB4AHgAEAB4AHgAeAB4AHgAeACsAHgAeAA4ADgANAA4AHgAeAB4AHgAeAAkACQArACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgBcAEsASwBLAEsASwBLAEsASwBLAEsADQANAB4AHgAeAB4AXABcAFwAXABcAFwAKgAqACoAKgBcAFwAXABcACoAKgAqAFwAKgAqACoAXABcACoAKgAqACoAKgAqACoAXABcAFwAKgAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKgAqAFwAKgBLAEsASwBLAEsASwBLAEsASwBLACoAKgAqACoAKgAqAFAAUABQAFAAUABQACsAUAArACsAKwArACsAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgBQAFAAUABQAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAKwBQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsABAAEAAQAHgANAB4AHgAeAB4AHgAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUAArACsADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAWABEAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAA0ADQANAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAANAA0AKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUAArAAQABAArACsAKwArACsAKwArACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqAA0ADQAVAFwADQAeAA0AGwBcACoAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwAeAB4AEwATAA0ADQAOAB4AEwATAB4ABAAEAAQACQArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUAAEAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAHgArACsAKwATABMASwBLAEsASwBLAEsASwBLAEsASwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAXABcAFwAXABcACsAKwArACsAKwArACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAXAArACsAKwAqACoAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsAHgAeAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKwAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKwArAAQASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACoAKgAqACoAKgAqACoAXAAqACoAKgAqACoAKgArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABABQAFAAUABQAFAAUABQACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwANAA0AHgANAA0ADQANAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AKwArACsABAAEAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwAeAB4AHgAeAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArAA0ADQANAA0ADQBLAEsASwBLAEsASwBLAEsASwBLACsAKwArAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAA0ADQBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUAAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArAAQABAAEAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAAQAUABQAFAAUABQAFAABABQAFAABAAEAAQAUAArACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAKwBQACsAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQACsAKwAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQACsAHgAeAB4AHgAeAB4AHgAOAB4AKwANAA0ADQANAA0ADQANAAkADQANAA0ACAAEAAsABAAEAA0ACQANAA0ADAAdAB0AHgAXABcAFgAXABcAFwAWABcAHQAdAB4AHgAUABQAFAANAAEAAQAEAAQABAAEAAQACQAaABoAGgAaABoAGgAaABoAHgAXABcAHQAVABUAHgAeAB4AHgAeAB4AGAAWABEAFQAVABUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ADQAeAA0ADQANAA0AHgANAA0ADQAHAB4AHgAeAB4AKwAEAAQABAAEAAQABAAEAAQABAAEAFAAUAArACsATwBQAFAAUABQAFAAHgAeAB4AFgARAE8AUABPAE8ATwBPAFAAUABQAFAAUAAeAB4AHgAWABEAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArABsAGwAbABsAGwAbABsAGgAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGgAbABsAGwAbABoAGwAbABoAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAHgAeAFAAGgAeAB0AHgBQAB4AGgAeAB4AHgAeAB4AHgAeAB4AHgBPAB4AUAAbAB4AHgBQAFAAUABQAFAAHgAeAB4AHQAdAB4AUAAeAFAAHgBQAB4AUABPAFAAUAAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAHgBQAFAAUABQAE8ATwBQAFAAUABQAFAATwBQAFAATwBQAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAFAAUABQAFAATwBPAE8ATwBPAE8ATwBPAE8ATwBQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABPAB4AHgArACsAKwArAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHQAdAB4AHgAeAB0AHQAeAB4AHQAeAB4AHgAdAB4AHQAbABsAHgAdAB4AHgAeAB4AHQAeAB4AHQAdAB0AHQAeAB4AHQAeAB0AHgAdAB0AHQAdAB0AHQAeAB0AHgAeAB4AHgAeAB0AHQAdAB0AHgAeAB4AHgAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB0AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAdAB0AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAWABEAHgAeAB4AHgAeAB4AHQAeAB4AHgAeAB4AHgAeACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAFAAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeAB4AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AHQAdAB0AHgAeAB0AHgAeAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlAB4AHQAdAB4AHgAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AJQAlAB0AHQAlAB4AJQAlACUAIAAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAeAB4AHgAeAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAdAB0AHQAeAB0AJQAdAB0AHgAdAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAdAB0AHQAdACUAHgAlACUAJQAdACUAJQAdAB0AHQAlACUAHQAdACUAHQAdACUAJQAlAB4AHQAeAB4AHgAeAB0AHQAlAB0AHQAdAB0AHQAdACUAJQAlACUAJQAdACUAJQAgACUAHQAdACUAJQAlACUAJQAlACUAJQAeAB4AHgAlACUAIAAgACAAIAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AFwAXABcAFwAXABcAHgATABMAJQAeAB4AHgAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARABYAEQAWABEAFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAeAB4AKwArACsAKwArABMADQANAA0AUAATAA0AUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUAANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAA0ADQANAA0ADQANAA0ADQAeAA0AFgANAB4AHgAXABcAHgAeABcAFwAWABEAFgARABYAEQAWABEADQANAA0ADQATAFAADQANAB4ADQANAB4AHgAeAB4AHgAMAAwADQANAA0AHgANAA0AFgANAA0ADQANAA0ADQANAA0AHgANAB4ADQANAB4AHgAeACsAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArAA0AEQARACUAJQBHAFcAVwAWABEAFgARABYAEQAWABEAFgARACUAJQAWABEAFgARABYAEQAWABEAFQAWABEAEQAlAFcAVwBXAFcAVwBXAFcAVwBXAAQABAAEAAQABAAEACUAVwBXAFcAVwA2ACUAJQBXAFcAVwBHAEcAJQAlACUAKwBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBRAFcAUQBXAFEAVwBXAFcAVwBXAFcAUQBXAFcAVwBXAFcAVwBRAFEAKwArAAQABAAVABUARwBHAFcAFQBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBRAFcAVwBXAFcAVwBXAFEAUQBXAFcAVwBXABUAUQBHAEcAVwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwAlACUAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACsAKwArACsAKwArACsAKwArACsAKwArAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBPAE8ATwBPAE8ATwBPAE8AJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADQATAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQAHgBQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAeAA0ADQANAA0ADQArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAAQAUABQAFAABABQAFAAUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAeAB4AHgAeAAQAKwArACsAUABQAFAAUABQAFAAHgAeABoAHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADgAOABMAEwArACsAKwArACsAKwArACsABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUAAeAB4AHgBQAA4AUABQAAQAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAB4AWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYACsAKwArAAQAHgAeAB4AHgAeAB4ADQANAA0AHgAeAB4AHgArAFAASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArAB4AHgBcAFwAXABcAFwAKgBcAFwAXABcAFwAXABcAFwAXABcAEsASwBLAEsASwBLAEsASwBLAEsAXABcAFwAXABcACsAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAFAAUABQAAQAUABQAFAAUABQAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAHgANAA0ADQBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAKgAqACoAXABcACoAKgBcAFwAXABcAFwAKgAqAFwAKgBcACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAA0ADQBQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQADQAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAVABVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBUAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVACsAKwArACsAKwArACsAKwArACsAKwArAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAKwArACsAKwBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAKwArACsAKwAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArACsAKwArAFYABABWAFYAVgBWAFYAVgBWAFYAVgBWAB4AVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgArAFYAVgBWAFYAVgArAFYAKwBWAFYAKwBWAFYAKwBWAFYAVgBWAFYAVgBWAFYAVgBWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAEQAWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAaAB4AKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAGAARABEAGAAYABMAEwAWABEAFAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACUAJQAlACUAJQAWABEAFgARABYAEQAWABEAFgARABYAEQAlACUAFgARACUAJQAlACUAJQAlACUAEQAlABEAKwAVABUAEwATACUAFgARABYAEQAWABEAJQAlACUAJQAlACUAJQAlACsAJQAbABoAJQArACsAKwArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAcAKwATACUAJQAbABoAJQAlABYAEQAlACUAEQAlABEAJQBXAFcAVwBXAFcAVwBXAFcAVwBXABUAFQAlACUAJQATACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXABYAJQARACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAWACUAEQAlABYAEQARABYAEQARABUAVwBRAFEAUQBRAFEAUQBRAFEAUQBRAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcARwArACsAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXACsAKwBXAFcAVwBXAFcAVwArACsAVwBXAFcAKwArACsAGgAbACUAJQAlABsAGwArAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAAQAB0AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsADQANAA0AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAAQAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAA0AUABQAFAAUAArACsAKwArAFAAUABQAFAAUABQAFAAUAANAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAKwArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArACsAKwBQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAUABQAFAAUABQAAQABAAEACsABAAEACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAKwBQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAA0ADQANAA0ADQANAA0ADQAeACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAArACsAKwArAFAAUABQAFAAUAANAA0ADQANAA0ADQAUACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsADQANAA0ADQANAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAAQABAAEAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArAAQABAANACsAKwBQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAB4AHgAeAB4AHgArACsAKwArACsAKwAEAAQABAAEAAQABAAEAA0ADQAeAB4AHgAeAB4AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwAeACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsASwBLAEsASwBLAEsASwBLAEsASwANAA0ADQANAFAABAAEAFAAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAeAA4AUAArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAADQANAB4ADQAEAAQABAAEAB4ABAAEAEsASwBLAEsASwBLAEsASwBLAEsAUAAOAFAADQANAA0AKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAA0AHgANAA0AHgAEACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAA0AKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQACsABAAEAFAABAAEAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAUAArACsAKwArACsAKwAEACsAKwArACsAKwBQAFAAUABQAFAABAAEACsAKwAEAAQABAAEAAQABAAEACsAKwArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABABQAFAAUABQAA0ADQANAA0AHgBLAEsASwBLAEsASwBLAEsASwBLAA0ADQArAB4ABABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAFAAUAAeAFAAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABAAEAAQADgANAA0AEwATAB4AHgAeAA0ADQANAA0ADQANAA0ADQANAA0ADQANAA0ADQANAFAAUABQAFAABAAEACsAKwAEAA0ADQAeAFAAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKwArACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBcAFwADQANAA0AKgBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQAKwAEAAQAKwArAAQABAAEAAQAUAAEAFAABAAEAA0ADQANACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABABQAA4AUAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAOAB4ADQANAA0ADQAOAB4ABAArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAA0ADQANAFAADgAOAA4ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAFAADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAOABMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAArACsAKwAEACsABAAEACsABAAEAAQABAAEAAQABABQAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwAEAAQAKwAEAAQABAAEAAQAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAaABoAGgAaAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABIAEgAQwBDAEMAUABQAFAAUABDAFAAUABQAEgAQwBIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABDAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAJAAkACQAJAAkACQAJABYAEQArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwANAA0AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAANACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQANAB4AHgAeAB4AHgAeAFAAUABQAFAADQAeACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAA0AHgAeACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAARwBHABUARwAJACsAKwArACsAKwArACsAKwArACsAKwAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUQBRAFEAKwArACsAKwArACsAKwArACsAKwArACsAKwBRAFEAUQBRACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArACsAHgAEAAQADQAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAAQABAAEAAQABAAeAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQAHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQAFAAKwArAFAAKwArAFAAUAArACsAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUAArAFAAUABQAFAAUABQAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAHgAeAFAAUABQAFAAUAArAFAAKwArACsAUABQAFAAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeACsAKwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4ABAAeAB4AHgAeAB4AHgAeAB4AHgAeAAQAHgAeAA0ADQANAA0AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAAQAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArAAQABAAEAAQABAAEAAQAKwAEAAQAKwAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwBQAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArABsAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAB4AHgAeAB4ABAAEAAQABAAEAAQABABQACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArABYAFgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAGgBQAFAAUAAaAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQACsAKwBQACsAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwBQACsAUAArACsAKwArACsAKwBQACsAKwArACsAUAArAFAAKwBQACsAUABQAFAAKwBQAFAAKwBQACsAKwBQACsAUAArAFAAKwBQACsAUAArAFAAUAArAFAAKwArAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUAArAFAAUABQAFAAKwBQACsAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAKwBQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AJQAlACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeACUAJQAlAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAlACUAJQAlACUAHgAlACUAJQAlACUAIAAgACAAJQAlACAAJQAlACAAIAAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACEAIQAhACEAIQAlACUAIAAgACUAJQAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAIAAlACUAJQAlACAAIAAgACUAIAAgACAAJQAlACUAJQAlACUAJQAgACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAlAB4AJQAeACUAJQAlACUAJQAgACUAJQAlACUAHgAlAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACAAIAAgACUAJQAlACAAIAAgACAAIAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABcAFwAXABUAFQAVAB4AHgAeAB4AJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAgACUAJQAgACUAJQAlACUAJQAlACUAJQAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAgACAAIAAgACAAIAAgACAAIAAgACUAJQAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAlACAAIAAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAgACAAIAAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAA==';\n\n var LETTER_NUMBER_MODIFIER = 50;\n // Non-tailorable Line Breaking Classes\n var BK = 1; // Cause a line break (after)\n var CR$1 = 2; // Cause a line break (after), except between CR and LF\n var LF$1 = 3; // Cause a line break (after)\n var CM = 4; // Prohibit a line break between the character and the preceding character\n var NL = 5; // Cause a line break (after)\n var WJ = 7; // Prohibit line breaks before and after\n var ZW = 8; // Provide a break opportunity\n var GL = 9; // Prohibit line breaks before and after\n var SP = 10; // Enable indirect line breaks\n var ZWJ$1 = 11; // Prohibit line breaks within joiner sequences\n // Break Opportunities\n var B2 = 12; // Provide a line break opportunity before and after the character\n var BA = 13; // Generally provide a line break opportunity after the character\n var BB = 14; // Generally provide a line break opportunity before the character\n var HY = 15; // Provide a line break opportunity after the character, except in numeric context\n var CB = 16; // Provide a line break opportunity contingent on additional information\n // Characters Prohibiting Certain Breaks\n var CL = 17; // Prohibit line breaks before\n var CP = 18; // Prohibit line breaks before\n var EX = 19; // Prohibit line breaks before\n var IN = 20; // Allow only indirect line breaks between pairs\n var NS = 21; // Allow only indirect line breaks before\n var OP = 22; // Prohibit line breaks after\n var QU = 23; // Act like they are both opening and closing\n // Numeric Context\n var IS = 24; // Prevent breaks after any and before numeric\n var NU = 25; // Form numeric expressions for line breaking purposes\n var PO = 26; // Do not break following a numeric expression\n var PR = 27; // Do not break in front of a numeric expression\n var SY = 28; // Prevent a break before; and allow a break after\n // Other Characters\n var AI = 29; // Act like AL when the resolvedEAW is N; otherwise; act as ID\n var AL = 30; // Are alphabetic characters or symbols that are used with alphabetic characters\n var CJ = 31; // Treat as NS or ID for strict or normal breaking.\n var EB = 32; // Do not break from following Emoji Modifier\n var EM = 33; // Do not break from preceding Emoji Base\n var H2 = 34; // Form Korean syllable blocks\n var H3 = 35; // Form Korean syllable blocks\n var HL = 36; // Do not break around a following hyphen; otherwise act as Alphabetic\n var ID = 37; // Break before or after; except in some numeric context\n var JL = 38; // Form Korean syllable blocks\n var JV = 39; // Form Korean syllable blocks\n var JT = 40; // Form Korean syllable blocks\n var RI$1 = 41; // Keep pairs together. For pairs; break before and after other classes\n var SA = 42; // Provide a line break opportunity contingent on additional, language-specific context analysis\n var XX = 43; // Have as yet unknown line breaking behavior or unassigned code positions\n var ea_OP = [0x2329, 0xff08];\n var BREAK_MANDATORY = '!';\n var BREAK_NOT_ALLOWED$1 = '×';\n var BREAK_ALLOWED$1 = '÷';\n var UnicodeTrie$1 = createTrieFromBase64$1(base64$1);\n var ALPHABETICS = [AL, HL];\n var HARD_LINE_BREAKS = [BK, CR$1, LF$1, NL];\n var SPACE$1 = [SP, ZW];\n var PREFIX_POSTFIX = [PR, PO];\n var LINE_BREAKS = HARD_LINE_BREAKS.concat(SPACE$1);\n var KOREAN_SYLLABLE_BLOCK = [JL, JV, JT, H2, H3];\n var HYPHEN = [HY, BA];\n var codePointsToCharacterClasses = function (codePoints, lineBreak) {\n if (lineBreak === void 0) { lineBreak = 'strict'; }\n var types = [];\n var indices = [];\n var categories = [];\n codePoints.forEach(function (codePoint, index) {\n var classType = UnicodeTrie$1.get(codePoint);\n if (classType > LETTER_NUMBER_MODIFIER) {\n categories.push(true);\n classType -= LETTER_NUMBER_MODIFIER;\n }\n else {\n categories.push(false);\n }\n if (['normal', 'auto', 'loose'].indexOf(lineBreak) !== -1) {\n // U+2010, – U+2013, 〜 U+301C, ゠ U+30A0\n if ([0x2010, 0x2013, 0x301c, 0x30a0].indexOf(codePoint) !== -1) {\n indices.push(index);\n return types.push(CB);\n }\n }\n if (classType === CM || classType === ZWJ$1) {\n // LB10 Treat any remaining combining mark or ZWJ as AL.\n if (index === 0) {\n indices.push(index);\n return types.push(AL);\n }\n // LB9 Do not break a combining character sequence; treat it as if it has the line breaking class of\n // the base character in all of the following rules. Treat ZWJ as if it were CM.\n var prev = types[index - 1];\n if (LINE_BREAKS.indexOf(prev) === -1) {\n indices.push(indices[index - 1]);\n return types.push(prev);\n }\n indices.push(index);\n return types.push(AL);\n }\n indices.push(index);\n if (classType === CJ) {\n return types.push(lineBreak === 'strict' ? NS : ID);\n }\n if (classType === SA) {\n return types.push(AL);\n }\n if (classType === AI) {\n return types.push(AL);\n }\n // For supplementary characters, a useful default is to treat characters in the range 10000..1FFFD as AL\n // and characters in the ranges 20000..2FFFD and 30000..3FFFD as ID, until the implementation can be revised\n // to take into account the actual line breaking properties for these characters.\n if (classType === XX) {\n if ((codePoint >= 0x20000 && codePoint <= 0x2fffd) || (codePoint >= 0x30000 && codePoint <= 0x3fffd)) {\n return types.push(ID);\n }\n else {\n return types.push(AL);\n }\n }\n types.push(classType);\n });\n return [indices, types, categories];\n };\n var isAdjacentWithSpaceIgnored = function (a, b, currentIndex, classTypes) {\n var current = classTypes[currentIndex];\n if (Array.isArray(a) ? a.indexOf(current) !== -1 : a === current) {\n var i = currentIndex;\n while (i <= classTypes.length) {\n i++;\n var next = classTypes[i];\n if (next === b) {\n return true;\n }\n if (next !== SP) {\n break;\n }\n }\n }\n if (current === SP) {\n var i = currentIndex;\n while (i > 0) {\n i--;\n var prev = classTypes[i];\n if (Array.isArray(a) ? a.indexOf(prev) !== -1 : a === prev) {\n var n = currentIndex;\n while (n <= classTypes.length) {\n n++;\n var next = classTypes[n];\n if (next === b) {\n return true;\n }\n if (next !== SP) {\n break;\n }\n }\n }\n if (prev !== SP) {\n break;\n }\n }\n }\n return false;\n };\n var previousNonSpaceClassType = function (currentIndex, classTypes) {\n var i = currentIndex;\n while (i >= 0) {\n var type = classTypes[i];\n if (type === SP) {\n i--;\n }\n else {\n return type;\n }\n }\n return 0;\n };\n var _lineBreakAtIndex = function (codePoints, classTypes, indicies, index, forbiddenBreaks) {\n if (indicies[index] === 0) {\n return BREAK_NOT_ALLOWED$1;\n }\n var currentIndex = index - 1;\n if (Array.isArray(forbiddenBreaks) && forbiddenBreaks[currentIndex] === true) {\n return BREAK_NOT_ALLOWED$1;\n }\n var beforeIndex = currentIndex - 1;\n var afterIndex = currentIndex + 1;\n var current = classTypes[currentIndex];\n // LB4 Always break after hard line breaks.\n // LB5 Treat CR followed by LF, as well as CR, LF, and NL as hard line breaks.\n var before = beforeIndex >= 0 ? classTypes[beforeIndex] : 0;\n var next = classTypes[afterIndex];\n if (current === CR$1 && next === LF$1) {\n return BREAK_NOT_ALLOWED$1;\n }\n if (HARD_LINE_BREAKS.indexOf(current) !== -1) {\n return BREAK_MANDATORY;\n }\n // LB6 Do not break before hard line breaks.\n if (HARD_LINE_BREAKS.indexOf(next) !== -1) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB7 Do not break before spaces or zero width space.\n if (SPACE$1.indexOf(next) !== -1) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB8 Break before any character following a zero-width space, even if one or more spaces intervene.\n if (previousNonSpaceClassType(currentIndex, classTypes) === ZW) {\n return BREAK_ALLOWED$1;\n }\n // LB8a Do not break after a zero width joiner.\n if (UnicodeTrie$1.get(codePoints[currentIndex]) === ZWJ$1) {\n return BREAK_NOT_ALLOWED$1;\n }\n // zwj emojis\n if ((current === EB || current === EM) && UnicodeTrie$1.get(codePoints[afterIndex]) === ZWJ$1) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB11 Do not break before or after Word joiner and related characters.\n if (current === WJ || next === WJ) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB12 Do not break after NBSP and related characters.\n if (current === GL) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB12a Do not break before NBSP and related characters, except after spaces and hyphens.\n if ([SP, BA, HY].indexOf(current) === -1 && next === GL) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB13 Do not break before ‘]’ or ‘!’ or ‘;’ or ‘/’, even after spaces.\n if ([CL, CP, EX, IS, SY].indexOf(next) !== -1) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB14 Do not break after ‘[’, even after spaces.\n if (previousNonSpaceClassType(currentIndex, classTypes) === OP) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB15 Do not break within ‘”[’, even with intervening spaces.\n if (isAdjacentWithSpaceIgnored(QU, OP, currentIndex, classTypes)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB16 Do not break between closing punctuation and a nonstarter (lb=NS), even with intervening spaces.\n if (isAdjacentWithSpaceIgnored([CL, CP], NS, currentIndex, classTypes)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB17 Do not break within ‘——’, even with intervening spaces.\n if (isAdjacentWithSpaceIgnored(B2, B2, currentIndex, classTypes)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB18 Break after spaces.\n if (current === SP) {\n return BREAK_ALLOWED$1;\n }\n // LB19 Do not break before or after quotation marks, such as ‘ ” ’.\n if (current === QU || next === QU) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB20 Break before and after unresolved CB.\n if (next === CB || current === CB) {\n return BREAK_ALLOWED$1;\n }\n // LB21 Do not break before hyphen-minus, other hyphens, fixed-width spaces, small kana, and other non-starters, or after acute accents.\n if ([BA, HY, NS].indexOf(next) !== -1 || current === BB) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB21a Don't break after Hebrew + Hyphen.\n if (before === HL && HYPHEN.indexOf(current) !== -1) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB21b Don’t break between Solidus and Hebrew letters.\n if (current === SY && next === HL) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB22 Do not break before ellipsis.\n if (next === IN) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB23 Do not break between digits and letters.\n if ((ALPHABETICS.indexOf(next) !== -1 && current === NU) || (ALPHABETICS.indexOf(current) !== -1 && next === NU)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB23a Do not break between numeric prefixes and ideographs, or between ideographs and numeric postfixes.\n if ((current === PR && [ID, EB, EM].indexOf(next) !== -1) ||\n ([ID, EB, EM].indexOf(current) !== -1 && next === PO)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB24 Do not break between numeric prefix/postfix and letters, or between letters and prefix/postfix.\n if ((ALPHABETICS.indexOf(current) !== -1 && PREFIX_POSTFIX.indexOf(next) !== -1) ||\n (PREFIX_POSTFIX.indexOf(current) !== -1 && ALPHABETICS.indexOf(next) !== -1)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB25 Do not break between the following pairs of classes relevant to numbers:\n if (\n // (PR | PO) × ( OP | HY )? NU\n ([PR, PO].indexOf(current) !== -1 &&\n (next === NU || ([OP, HY].indexOf(next) !== -1 && classTypes[afterIndex + 1] === NU))) ||\n // ( OP | HY ) × NU\n ([OP, HY].indexOf(current) !== -1 && next === NU) ||\n // NU ×\t(NU | SY | IS)\n (current === NU && [NU, SY, IS].indexOf(next) !== -1)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // NU (NU | SY | IS)* × (NU | SY | IS | CL | CP)\n if ([NU, SY, IS, CL, CP].indexOf(next) !== -1) {\n var prevIndex = currentIndex;\n while (prevIndex >= 0) {\n var type = classTypes[prevIndex];\n if (type === NU) {\n return BREAK_NOT_ALLOWED$1;\n }\n else if ([SY, IS].indexOf(type) !== -1) {\n prevIndex--;\n }\n else {\n break;\n }\n }\n }\n // NU (NU | SY | IS)* (CL | CP)? × (PO | PR))\n if ([PR, PO].indexOf(next) !== -1) {\n var prevIndex = [CL, CP].indexOf(current) !== -1 ? beforeIndex : currentIndex;\n while (prevIndex >= 0) {\n var type = classTypes[prevIndex];\n if (type === NU) {\n return BREAK_NOT_ALLOWED$1;\n }\n else if ([SY, IS].indexOf(type) !== -1) {\n prevIndex--;\n }\n else {\n break;\n }\n }\n }\n // LB26 Do not break a Korean syllable.\n if ((JL === current && [JL, JV, H2, H3].indexOf(next) !== -1) ||\n ([JV, H2].indexOf(current) !== -1 && [JV, JT].indexOf(next) !== -1) ||\n ([JT, H3].indexOf(current) !== -1 && next === JT)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB27 Treat a Korean Syllable Block the same as ID.\n if ((KOREAN_SYLLABLE_BLOCK.indexOf(current) !== -1 && [IN, PO].indexOf(next) !== -1) ||\n (KOREAN_SYLLABLE_BLOCK.indexOf(next) !== -1 && current === PR)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB28 Do not break between alphabetics (“at”).\n if (ALPHABETICS.indexOf(current) !== -1 && ALPHABETICS.indexOf(next) !== -1) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB29 Do not break between numeric punctuation and alphabetics (“e.g.”).\n if (current === IS && ALPHABETICS.indexOf(next) !== -1) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB30 Do not break between letters, numbers, or ordinary symbols and opening or closing parentheses.\n if ((ALPHABETICS.concat(NU).indexOf(current) !== -1 &&\n next === OP &&\n ea_OP.indexOf(codePoints[afterIndex]) === -1) ||\n (ALPHABETICS.concat(NU).indexOf(next) !== -1 && current === CP)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB30a Break between two regional indicator symbols if and only if there are an even number of regional\n // indicators preceding the position of the break.\n if (current === RI$1 && next === RI$1) {\n var i = indicies[currentIndex];\n var count = 1;\n while (i > 0) {\n i--;\n if (classTypes[i] === RI$1) {\n count++;\n }\n else {\n break;\n }\n }\n if (count % 2 !== 0) {\n return BREAK_NOT_ALLOWED$1;\n }\n }\n // LB30b Do not break between an emoji base and an emoji modifier.\n if (current === EB && next === EM) {\n return BREAK_NOT_ALLOWED$1;\n }\n return BREAK_ALLOWED$1;\n };\n var cssFormattedClasses = function (codePoints, options) {\n if (!options) {\n options = { lineBreak: 'normal', wordBreak: 'normal' };\n }\n var _a = codePointsToCharacterClasses(codePoints, options.lineBreak), indicies = _a[0], classTypes = _a[1], isLetterNumber = _a[2];\n if (options.wordBreak === 'break-all' || options.wordBreak === 'break-word') {\n classTypes = classTypes.map(function (type) { return ([NU, AL, SA].indexOf(type) !== -1 ? ID : type); });\n }\n var forbiddenBreakpoints = options.wordBreak === 'keep-all'\n ? isLetterNumber.map(function (letterNumber, i) {\n return letterNumber && codePoints[i] >= 0x4e00 && codePoints[i] <= 0x9fff;\n })\n : undefined;\n return [indicies, classTypes, forbiddenBreakpoints];\n };\n var Break = /** @class */ (function () {\n function Break(codePoints, lineBreak, start, end) {\n this.codePoints = codePoints;\n this.required = lineBreak === BREAK_MANDATORY;\n this.start = start;\n this.end = end;\n }\n Break.prototype.slice = function () {\n return fromCodePoint$1.apply(void 0, this.codePoints.slice(this.start, this.end));\n };\n return Break;\n }());\n var LineBreaker = function (str, options) {\n var codePoints = toCodePoints$1(str);\n var _a = cssFormattedClasses(codePoints, options), indicies = _a[0], classTypes = _a[1], forbiddenBreakpoints = _a[2];\n var length = codePoints.length;\n var lastEnd = 0;\n var nextIndex = 0;\n return {\n next: function () {\n if (nextIndex >= length) {\n return { done: true, value: null };\n }\n var lineBreak = BREAK_NOT_ALLOWED$1;\n while (nextIndex < length &&\n (lineBreak = _lineBreakAtIndex(codePoints, classTypes, indicies, ++nextIndex, forbiddenBreakpoints)) ===\n BREAK_NOT_ALLOWED$1) { }\n if (lineBreak !== BREAK_NOT_ALLOWED$1 || nextIndex === length) {\n var value = new Break(codePoints, lineBreak, lastEnd, nextIndex);\n lastEnd = nextIndex;\n return { value: value, done: false };\n }\n return { done: true, value: null };\n },\n };\n };\n\n // https://www.w3.org/TR/css-syntax-3\n var FLAG_UNRESTRICTED = 1 << 0;\n var FLAG_ID = 1 << 1;\n var FLAG_INTEGER = 1 << 2;\n var FLAG_NUMBER = 1 << 3;\n var LINE_FEED = 0x000a;\n var SOLIDUS = 0x002f;\n var REVERSE_SOLIDUS = 0x005c;\n var CHARACTER_TABULATION = 0x0009;\n var SPACE = 0x0020;\n var QUOTATION_MARK = 0x0022;\n var EQUALS_SIGN = 0x003d;\n var NUMBER_SIGN = 0x0023;\n var DOLLAR_SIGN = 0x0024;\n var PERCENTAGE_SIGN = 0x0025;\n var APOSTROPHE = 0x0027;\n var LEFT_PARENTHESIS = 0x0028;\n var RIGHT_PARENTHESIS = 0x0029;\n var LOW_LINE = 0x005f;\n var HYPHEN_MINUS = 0x002d;\n var EXCLAMATION_MARK = 0x0021;\n var LESS_THAN_SIGN = 0x003c;\n var GREATER_THAN_SIGN = 0x003e;\n var COMMERCIAL_AT = 0x0040;\n var LEFT_SQUARE_BRACKET = 0x005b;\n var RIGHT_SQUARE_BRACKET = 0x005d;\n var CIRCUMFLEX_ACCENT = 0x003d;\n var LEFT_CURLY_BRACKET = 0x007b;\n var QUESTION_MARK = 0x003f;\n var RIGHT_CURLY_BRACKET = 0x007d;\n var VERTICAL_LINE = 0x007c;\n var TILDE = 0x007e;\n var CONTROL = 0x0080;\n var REPLACEMENT_CHARACTER = 0xfffd;\n var ASTERISK = 0x002a;\n var PLUS_SIGN = 0x002b;\n var COMMA = 0x002c;\n var COLON = 0x003a;\n var SEMICOLON = 0x003b;\n var FULL_STOP = 0x002e;\n var NULL = 0x0000;\n var BACKSPACE = 0x0008;\n var LINE_TABULATION = 0x000b;\n var SHIFT_OUT = 0x000e;\n var INFORMATION_SEPARATOR_ONE = 0x001f;\n var DELETE = 0x007f;\n var EOF = -1;\n var ZERO = 0x0030;\n var a = 0x0061;\n var e = 0x0065;\n var f = 0x0066;\n var u = 0x0075;\n var z = 0x007a;\n var A = 0x0041;\n var E = 0x0045;\n var F = 0x0046;\n var U = 0x0055;\n var Z = 0x005a;\n var isDigit = function (codePoint) { return codePoint >= ZERO && codePoint <= 0x0039; };\n var isSurrogateCodePoint = function (codePoint) { return codePoint >= 0xd800 && codePoint <= 0xdfff; };\n var isHex = function (codePoint) {\n return isDigit(codePoint) || (codePoint >= A && codePoint <= F) || (codePoint >= a && codePoint <= f);\n };\n var isLowerCaseLetter = function (codePoint) { return codePoint >= a && codePoint <= z; };\n var isUpperCaseLetter = function (codePoint) { return codePoint >= A && codePoint <= Z; };\n var isLetter = function (codePoint) { return isLowerCaseLetter(codePoint) || isUpperCaseLetter(codePoint); };\n var isNonASCIICodePoint = function (codePoint) { return codePoint >= CONTROL; };\n var isWhiteSpace = function (codePoint) {\n return codePoint === LINE_FEED || codePoint === CHARACTER_TABULATION || codePoint === SPACE;\n };\n var isNameStartCodePoint = function (codePoint) {\n return isLetter(codePoint) || isNonASCIICodePoint(codePoint) || codePoint === LOW_LINE;\n };\n var isNameCodePoint = function (codePoint) {\n return isNameStartCodePoint(codePoint) || isDigit(codePoint) || codePoint === HYPHEN_MINUS;\n };\n var isNonPrintableCodePoint = function (codePoint) {\n return ((codePoint >= NULL && codePoint <= BACKSPACE) ||\n codePoint === LINE_TABULATION ||\n (codePoint >= SHIFT_OUT && codePoint <= INFORMATION_SEPARATOR_ONE) ||\n codePoint === DELETE);\n };\n var isValidEscape = function (c1, c2) {\n if (c1 !== REVERSE_SOLIDUS) {\n return false;\n }\n return c2 !== LINE_FEED;\n };\n var isIdentifierStart = function (c1, c2, c3) {\n if (c1 === HYPHEN_MINUS) {\n return isNameStartCodePoint(c2) || isValidEscape(c2, c3);\n }\n else if (isNameStartCodePoint(c1)) {\n return true;\n }\n else if (c1 === REVERSE_SOLIDUS && isValidEscape(c1, c2)) {\n return true;\n }\n return false;\n };\n var isNumberStart = function (c1, c2, c3) {\n if (c1 === PLUS_SIGN || c1 === HYPHEN_MINUS) {\n if (isDigit(c2)) {\n return true;\n }\n return c2 === FULL_STOP && isDigit(c3);\n }\n if (c1 === FULL_STOP) {\n return isDigit(c2);\n }\n return isDigit(c1);\n };\n var stringToNumber = function (codePoints) {\n var c = 0;\n var sign = 1;\n if (codePoints[c] === PLUS_SIGN || codePoints[c] === HYPHEN_MINUS) {\n if (codePoints[c] === HYPHEN_MINUS) {\n sign = -1;\n }\n c++;\n }\n var integers = [];\n while (isDigit(codePoints[c])) {\n integers.push(codePoints[c++]);\n }\n var int = integers.length ? parseInt(fromCodePoint$1.apply(void 0, integers), 10) : 0;\n if (codePoints[c] === FULL_STOP) {\n c++;\n }\n var fraction = [];\n while (isDigit(codePoints[c])) {\n fraction.push(codePoints[c++]);\n }\n var fracd = fraction.length;\n var frac = fracd ? parseInt(fromCodePoint$1.apply(void 0, fraction), 10) : 0;\n if (codePoints[c] === E || codePoints[c] === e) {\n c++;\n }\n var expsign = 1;\n if (codePoints[c] === PLUS_SIGN || codePoints[c] === HYPHEN_MINUS) {\n if (codePoints[c] === HYPHEN_MINUS) {\n expsign = -1;\n }\n c++;\n }\n var exponent = [];\n while (isDigit(codePoints[c])) {\n exponent.push(codePoints[c++]);\n }\n var exp = exponent.length ? parseInt(fromCodePoint$1.apply(void 0, exponent), 10) : 0;\n return sign * (int + frac * Math.pow(10, -fracd)) * Math.pow(10, expsign * exp);\n };\n var LEFT_PARENTHESIS_TOKEN = {\n type: 2 /* LEFT_PARENTHESIS_TOKEN */\n };\n var RIGHT_PARENTHESIS_TOKEN = {\n type: 3 /* RIGHT_PARENTHESIS_TOKEN */\n };\n var COMMA_TOKEN = { type: 4 /* COMMA_TOKEN */ };\n var SUFFIX_MATCH_TOKEN = { type: 13 /* SUFFIX_MATCH_TOKEN */ };\n var PREFIX_MATCH_TOKEN = { type: 8 /* PREFIX_MATCH_TOKEN */ };\n var COLUMN_TOKEN = { type: 21 /* COLUMN_TOKEN */ };\n var DASH_MATCH_TOKEN = { type: 9 /* DASH_MATCH_TOKEN */ };\n var INCLUDE_MATCH_TOKEN = { type: 10 /* INCLUDE_MATCH_TOKEN */ };\n var LEFT_CURLY_BRACKET_TOKEN = {\n type: 11 /* LEFT_CURLY_BRACKET_TOKEN */\n };\n var RIGHT_CURLY_BRACKET_TOKEN = {\n type: 12 /* RIGHT_CURLY_BRACKET_TOKEN */\n };\n var SUBSTRING_MATCH_TOKEN = { type: 14 /* SUBSTRING_MATCH_TOKEN */ };\n var BAD_URL_TOKEN = { type: 23 /* BAD_URL_TOKEN */ };\n var BAD_STRING_TOKEN = { type: 1 /* BAD_STRING_TOKEN */ };\n var CDO_TOKEN = { type: 25 /* CDO_TOKEN */ };\n var CDC_TOKEN = { type: 24 /* CDC_TOKEN */ };\n var COLON_TOKEN = { type: 26 /* COLON_TOKEN */ };\n var SEMICOLON_TOKEN = { type: 27 /* SEMICOLON_TOKEN */ };\n var LEFT_SQUARE_BRACKET_TOKEN = {\n type: 28 /* LEFT_SQUARE_BRACKET_TOKEN */\n };\n var RIGHT_SQUARE_BRACKET_TOKEN = {\n type: 29 /* RIGHT_SQUARE_BRACKET_TOKEN */\n };\n var WHITESPACE_TOKEN = { type: 31 /* WHITESPACE_TOKEN */ };\n var EOF_TOKEN = { type: 32 /* EOF_TOKEN */ };\n var Tokenizer = /** @class */ (function () {\n function Tokenizer() {\n this._value = [];\n }\n Tokenizer.prototype.write = function (chunk) {\n this._value = this._value.concat(toCodePoints$1(chunk));\n };\n Tokenizer.prototype.read = function () {\n var tokens = [];\n var token = this.consumeToken();\n while (token !== EOF_TOKEN) {\n tokens.push(token);\n token = this.consumeToken();\n }\n return tokens;\n };\n Tokenizer.prototype.consumeToken = function () {\n var codePoint = this.consumeCodePoint();\n switch (codePoint) {\n case QUOTATION_MARK:\n return this.consumeStringToken(QUOTATION_MARK);\n case NUMBER_SIGN:\n var c1 = this.peekCodePoint(0);\n var c2 = this.peekCodePoint(1);\n var c3 = this.peekCodePoint(2);\n if (isNameCodePoint(c1) || isValidEscape(c2, c3)) {\n var flags = isIdentifierStart(c1, c2, c3) ? FLAG_ID : FLAG_UNRESTRICTED;\n var value = this.consumeName();\n return { type: 5 /* HASH_TOKEN */, value: value, flags: flags };\n }\n break;\n case DOLLAR_SIGN:\n if (this.peekCodePoint(0) === EQUALS_SIGN) {\n this.consumeCodePoint();\n return SUFFIX_MATCH_TOKEN;\n }\n break;\n case APOSTROPHE:\n return this.consumeStringToken(APOSTROPHE);\n case LEFT_PARENTHESIS:\n return LEFT_PARENTHESIS_TOKEN;\n case RIGHT_PARENTHESIS:\n return RIGHT_PARENTHESIS_TOKEN;\n case ASTERISK:\n if (this.peekCodePoint(0) === EQUALS_SIGN) {\n this.consumeCodePoint();\n return SUBSTRING_MATCH_TOKEN;\n }\n break;\n case PLUS_SIGN:\n if (isNumberStart(codePoint, this.peekCodePoint(0), this.peekCodePoint(1))) {\n this.reconsumeCodePoint(codePoint);\n return this.consumeNumericToken();\n }\n break;\n case COMMA:\n return COMMA_TOKEN;\n case HYPHEN_MINUS:\n var e1 = codePoint;\n var e2 = this.peekCodePoint(0);\n var e3 = this.peekCodePoint(1);\n if (isNumberStart(e1, e2, e3)) {\n this.reconsumeCodePoint(codePoint);\n return this.consumeNumericToken();\n }\n if (isIdentifierStart(e1, e2, e3)) {\n this.reconsumeCodePoint(codePoint);\n return this.consumeIdentLikeToken();\n }\n if (e2 === HYPHEN_MINUS && e3 === GREATER_THAN_SIGN) {\n this.consumeCodePoint();\n this.consumeCodePoint();\n return CDC_TOKEN;\n }\n break;\n case FULL_STOP:\n if (isNumberStart(codePoint, this.peekCodePoint(0), this.peekCodePoint(1))) {\n this.reconsumeCodePoint(codePoint);\n return this.consumeNumericToken();\n }\n break;\n case SOLIDUS:\n if (this.peekCodePoint(0) === ASTERISK) {\n this.consumeCodePoint();\n while (true) {\n var c = this.consumeCodePoint();\n if (c === ASTERISK) {\n c = this.consumeCodePoint();\n if (c === SOLIDUS) {\n return this.consumeToken();\n }\n }\n if (c === EOF) {\n return this.consumeToken();\n }\n }\n }\n break;\n case COLON:\n return COLON_TOKEN;\n case SEMICOLON:\n return SEMICOLON_TOKEN;\n case LESS_THAN_SIGN:\n if (this.peekCodePoint(0) === EXCLAMATION_MARK &&\n this.peekCodePoint(1) === HYPHEN_MINUS &&\n this.peekCodePoint(2) === HYPHEN_MINUS) {\n this.consumeCodePoint();\n this.consumeCodePoint();\n return CDO_TOKEN;\n }\n break;\n case COMMERCIAL_AT:\n var a1 = this.peekCodePoint(0);\n var a2 = this.peekCodePoint(1);\n var a3 = this.peekCodePoint(2);\n if (isIdentifierStart(a1, a2, a3)) {\n var value = this.consumeName();\n return { type: 7 /* AT_KEYWORD_TOKEN */, value: value };\n }\n break;\n case LEFT_SQUARE_BRACKET:\n return LEFT_SQUARE_BRACKET_TOKEN;\n case REVERSE_SOLIDUS:\n if (isValidEscape(codePoint, this.peekCodePoint(0))) {\n this.reconsumeCodePoint(codePoint);\n return this.consumeIdentLikeToken();\n }\n break;\n case RIGHT_SQUARE_BRACKET:\n return RIGHT_SQUARE_BRACKET_TOKEN;\n case CIRCUMFLEX_ACCENT:\n if (this.peekCodePoint(0) === EQUALS_SIGN) {\n this.consumeCodePoint();\n return PREFIX_MATCH_TOKEN;\n }\n break;\n case LEFT_CURLY_BRACKET:\n return LEFT_CURLY_BRACKET_TOKEN;\n case RIGHT_CURLY_BRACKET:\n return RIGHT_CURLY_BRACKET_TOKEN;\n case u:\n case U:\n var u1 = this.peekCodePoint(0);\n var u2 = this.peekCodePoint(1);\n if (u1 === PLUS_SIGN && (isHex(u2) || u2 === QUESTION_MARK)) {\n this.consumeCodePoint();\n this.consumeUnicodeRangeToken();\n }\n this.reconsumeCodePoint(codePoint);\n return this.consumeIdentLikeToken();\n case VERTICAL_LINE:\n if (this.peekCodePoint(0) === EQUALS_SIGN) {\n this.consumeCodePoint();\n return DASH_MATCH_TOKEN;\n }\n if (this.peekCodePoint(0) === VERTICAL_LINE) {\n this.consumeCodePoint();\n return COLUMN_TOKEN;\n }\n break;\n case TILDE:\n if (this.peekCodePoint(0) === EQUALS_SIGN) {\n this.consumeCodePoint();\n return INCLUDE_MATCH_TOKEN;\n }\n break;\n case EOF:\n return EOF_TOKEN;\n }\n if (isWhiteSpace(codePoint)) {\n this.consumeWhiteSpace();\n return WHITESPACE_TOKEN;\n }\n if (isDigit(codePoint)) {\n this.reconsumeCodePoint(codePoint);\n return this.consumeNumericToken();\n }\n if (isNameStartCodePoint(codePoint)) {\n this.reconsumeCodePoint(codePoint);\n return this.consumeIdentLikeToken();\n }\n return { type: 6 /* DELIM_TOKEN */, value: fromCodePoint$1(codePoint) };\n };\n Tokenizer.prototype.consumeCodePoint = function () {\n var value = this._value.shift();\n return typeof value === 'undefined' ? -1 : value;\n };\n Tokenizer.prototype.reconsumeCodePoint = function (codePoint) {\n this._value.unshift(codePoint);\n };\n Tokenizer.prototype.peekCodePoint = function (delta) {\n if (delta >= this._value.length) {\n return -1;\n }\n return this._value[delta];\n };\n Tokenizer.prototype.consumeUnicodeRangeToken = function () {\n var digits = [];\n var codePoint = this.consumeCodePoint();\n while (isHex(codePoint) && digits.length < 6) {\n digits.push(codePoint);\n codePoint = this.consumeCodePoint();\n }\n var questionMarks = false;\n while (codePoint === QUESTION_MARK && digits.length < 6) {\n digits.push(codePoint);\n codePoint = this.consumeCodePoint();\n questionMarks = true;\n }\n if (questionMarks) {\n var start_1 = parseInt(fromCodePoint$1.apply(void 0, digits.map(function (digit) { return (digit === QUESTION_MARK ? ZERO : digit); })), 16);\n var end = parseInt(fromCodePoint$1.apply(void 0, digits.map(function (digit) { return (digit === QUESTION_MARK ? F : digit); })), 16);\n return { type: 30 /* UNICODE_RANGE_TOKEN */, start: start_1, end: end };\n }\n var start = parseInt(fromCodePoint$1.apply(void 0, digits), 16);\n if (this.peekCodePoint(0) === HYPHEN_MINUS && isHex(this.peekCodePoint(1))) {\n this.consumeCodePoint();\n codePoint = this.consumeCodePoint();\n var endDigits = [];\n while (isHex(codePoint) && endDigits.length < 6) {\n endDigits.push(codePoint);\n codePoint = this.consumeCodePoint();\n }\n var end = parseInt(fromCodePoint$1.apply(void 0, endDigits), 16);\n return { type: 30 /* UNICODE_RANGE_TOKEN */, start: start, end: end };\n }\n else {\n return { type: 30 /* UNICODE_RANGE_TOKEN */, start: start, end: start };\n }\n };\n Tokenizer.prototype.consumeIdentLikeToken = function () {\n var value = this.consumeName();\n if (value.toLowerCase() === 'url' && this.peekCodePoint(0) === LEFT_PARENTHESIS) {\n this.consumeCodePoint();\n return this.consumeUrlToken();\n }\n else if (this.peekCodePoint(0) === LEFT_PARENTHESIS) {\n this.consumeCodePoint();\n return { type: 19 /* FUNCTION_TOKEN */, value: value };\n }\n return { type: 20 /* IDENT_TOKEN */, value: value };\n };\n Tokenizer.prototype.consumeUrlToken = function () {\n var value = [];\n this.consumeWhiteSpace();\n if (this.peekCodePoint(0) === EOF) {\n return { type: 22 /* URL_TOKEN */, value: '' };\n }\n var next = this.peekCodePoint(0);\n if (next === APOSTROPHE || next === QUOTATION_MARK) {\n var stringToken = this.consumeStringToken(this.consumeCodePoint());\n if (stringToken.type === 0 /* STRING_TOKEN */) {\n this.consumeWhiteSpace();\n if (this.peekCodePoint(0) === EOF || this.peekCodePoint(0) === RIGHT_PARENTHESIS) {\n this.consumeCodePoint();\n return { type: 22 /* URL_TOKEN */, value: stringToken.value };\n }\n }\n this.consumeBadUrlRemnants();\n return BAD_URL_TOKEN;\n }\n while (true) {\n var codePoint = this.consumeCodePoint();\n if (codePoint === EOF || codePoint === RIGHT_PARENTHESIS) {\n return { type: 22 /* URL_TOKEN */, value: fromCodePoint$1.apply(void 0, value) };\n }\n else if (isWhiteSpace(codePoint)) {\n this.consumeWhiteSpace();\n if (this.peekCodePoint(0) === EOF || this.peekCodePoint(0) === RIGHT_PARENTHESIS) {\n this.consumeCodePoint();\n return { type: 22 /* URL_TOKEN */, value: fromCodePoint$1.apply(void 0, value) };\n }\n this.consumeBadUrlRemnants();\n return BAD_URL_TOKEN;\n }\n else if (codePoint === QUOTATION_MARK ||\n codePoint === APOSTROPHE ||\n codePoint === LEFT_PARENTHESIS ||\n isNonPrintableCodePoint(codePoint)) {\n this.consumeBadUrlRemnants();\n return BAD_URL_TOKEN;\n }\n else if (codePoint === REVERSE_SOLIDUS) {\n if (isValidEscape(codePoint, this.peekCodePoint(0))) {\n value.push(this.consumeEscapedCodePoint());\n }\n else {\n this.consumeBadUrlRemnants();\n return BAD_URL_TOKEN;\n }\n }\n else {\n value.push(codePoint);\n }\n }\n };\n Tokenizer.prototype.consumeWhiteSpace = function () {\n while (isWhiteSpace(this.peekCodePoint(0))) {\n this.consumeCodePoint();\n }\n };\n Tokenizer.prototype.consumeBadUrlRemnants = function () {\n while (true) {\n var codePoint = this.consumeCodePoint();\n if (codePoint === RIGHT_PARENTHESIS || codePoint === EOF) {\n return;\n }\n if (isValidEscape(codePoint, this.peekCodePoint(0))) {\n this.consumeEscapedCodePoint();\n }\n }\n };\n Tokenizer.prototype.consumeStringSlice = function (count) {\n var SLICE_STACK_SIZE = 50000;\n var value = '';\n while (count > 0) {\n var amount = Math.min(SLICE_STACK_SIZE, count);\n value += fromCodePoint$1.apply(void 0, this._value.splice(0, amount));\n count -= amount;\n }\n this._value.shift();\n return value;\n };\n Tokenizer.prototype.consumeStringToken = function (endingCodePoint) {\n var value = '';\n var i = 0;\n do {\n var codePoint = this._value[i];\n if (codePoint === EOF || codePoint === undefined || codePoint === endingCodePoint) {\n value += this.consumeStringSlice(i);\n return { type: 0 /* STRING_TOKEN */, value: value };\n }\n if (codePoint === LINE_FEED) {\n this._value.splice(0, i);\n return BAD_STRING_TOKEN;\n }\n if (codePoint === REVERSE_SOLIDUS) {\n var next = this._value[i + 1];\n if (next !== EOF && next !== undefined) {\n if (next === LINE_FEED) {\n value += this.consumeStringSlice(i);\n i = -1;\n this._value.shift();\n }\n else if (isValidEscape(codePoint, next)) {\n value += this.consumeStringSlice(i);\n value += fromCodePoint$1(this.consumeEscapedCodePoint());\n i = -1;\n }\n }\n }\n i++;\n } while (true);\n };\n Tokenizer.prototype.consumeNumber = function () {\n var repr = [];\n var type = FLAG_INTEGER;\n var c1 = this.peekCodePoint(0);\n if (c1 === PLUS_SIGN || c1 === HYPHEN_MINUS) {\n repr.push(this.consumeCodePoint());\n }\n while (isDigit(this.peekCodePoint(0))) {\n repr.push(this.consumeCodePoint());\n }\n c1 = this.peekCodePoint(0);\n var c2 = this.peekCodePoint(1);\n if (c1 === FULL_STOP && isDigit(c2)) {\n repr.push(this.consumeCodePoint(), this.consumeCodePoint());\n type = FLAG_NUMBER;\n while (isDigit(this.peekCodePoint(0))) {\n repr.push(this.consumeCodePoint());\n }\n }\n c1 = this.peekCodePoint(0);\n c2 = this.peekCodePoint(1);\n var c3 = this.peekCodePoint(2);\n if ((c1 === E || c1 === e) && (((c2 === PLUS_SIGN || c2 === HYPHEN_MINUS) && isDigit(c3)) || isDigit(c2))) {\n repr.push(this.consumeCodePoint(), this.consumeCodePoint());\n type = FLAG_NUMBER;\n while (isDigit(this.peekCodePoint(0))) {\n repr.push(this.consumeCodePoint());\n }\n }\n return [stringToNumber(repr), type];\n };\n Tokenizer.prototype.consumeNumericToken = function () {\n var _a = this.consumeNumber(), number = _a[0], flags = _a[1];\n var c1 = this.peekCodePoint(0);\n var c2 = this.peekCodePoint(1);\n var c3 = this.peekCodePoint(2);\n if (isIdentifierStart(c1, c2, c3)) {\n var unit = this.consumeName();\n return { type: 15 /* DIMENSION_TOKEN */, number: number, flags: flags, unit: unit };\n }\n if (c1 === PERCENTAGE_SIGN) {\n this.consumeCodePoint();\n return { type: 16 /* PERCENTAGE_TOKEN */, number: number, flags: flags };\n }\n return { type: 17 /* NUMBER_TOKEN */, number: number, flags: flags };\n };\n Tokenizer.prototype.consumeEscapedCodePoint = function () {\n var codePoint = this.consumeCodePoint();\n if (isHex(codePoint)) {\n var hex = fromCodePoint$1(codePoint);\n while (isHex(this.peekCodePoint(0)) && hex.length < 6) {\n hex += fromCodePoint$1(this.consumeCodePoint());\n }\n if (isWhiteSpace(this.peekCodePoint(0))) {\n this.consumeCodePoint();\n }\n var hexCodePoint = parseInt(hex, 16);\n if (hexCodePoint === 0 || isSurrogateCodePoint(hexCodePoint) || hexCodePoint > 0x10ffff) {\n return REPLACEMENT_CHARACTER;\n }\n return hexCodePoint;\n }\n if (codePoint === EOF) {\n return REPLACEMENT_CHARACTER;\n }\n return codePoint;\n };\n Tokenizer.prototype.consumeName = function () {\n var result = '';\n while (true) {\n var codePoint = this.consumeCodePoint();\n if (isNameCodePoint(codePoint)) {\n result += fromCodePoint$1(codePoint);\n }\n else if (isValidEscape(codePoint, this.peekCodePoint(0))) {\n result += fromCodePoint$1(this.consumeEscapedCodePoint());\n }\n else {\n this.reconsumeCodePoint(codePoint);\n return result;\n }\n }\n };\n return Tokenizer;\n }());\n\n var Parser = /** @class */ (function () {\n function Parser(tokens) {\n this._tokens = tokens;\n }\n Parser.create = function (value) {\n var tokenizer = new Tokenizer();\n tokenizer.write(value);\n return new Parser(tokenizer.read());\n };\n Parser.parseValue = function (value) {\n return Parser.create(value).parseComponentValue();\n };\n Parser.parseValues = function (value) {\n return Parser.create(value).parseComponentValues();\n };\n Parser.prototype.parseComponentValue = function () {\n var token = this.consumeToken();\n while (token.type === 31 /* WHITESPACE_TOKEN */) {\n token = this.consumeToken();\n }\n if (token.type === 32 /* EOF_TOKEN */) {\n throw new SyntaxError(\"Error parsing CSS component value, unexpected EOF\");\n }\n this.reconsumeToken(token);\n var value = this.consumeComponentValue();\n do {\n token = this.consumeToken();\n } while (token.type === 31 /* WHITESPACE_TOKEN */);\n if (token.type === 32 /* EOF_TOKEN */) {\n return value;\n }\n throw new SyntaxError(\"Error parsing CSS component value, multiple values found when expecting only one\");\n };\n Parser.prototype.parseComponentValues = function () {\n var values = [];\n while (true) {\n var value = this.consumeComponentValue();\n if (value.type === 32 /* EOF_TOKEN */) {\n return values;\n }\n values.push(value);\n values.push();\n }\n };\n Parser.prototype.consumeComponentValue = function () {\n var token = this.consumeToken();\n switch (token.type) {\n case 11 /* LEFT_CURLY_BRACKET_TOKEN */:\n case 28 /* LEFT_SQUARE_BRACKET_TOKEN */:\n case 2 /* LEFT_PARENTHESIS_TOKEN */:\n return this.consumeSimpleBlock(token.type);\n case 19 /* FUNCTION_TOKEN */:\n return this.consumeFunction(token);\n }\n return token;\n };\n Parser.prototype.consumeSimpleBlock = function (type) {\n var block = { type: type, values: [] };\n var token = this.consumeToken();\n while (true) {\n if (token.type === 32 /* EOF_TOKEN */ || isEndingTokenFor(token, type)) {\n return block;\n }\n this.reconsumeToken(token);\n block.values.push(this.consumeComponentValue());\n token = this.consumeToken();\n }\n };\n Parser.prototype.consumeFunction = function (functionToken) {\n var cssFunction = {\n name: functionToken.value,\n values: [],\n type: 18 /* FUNCTION */\n };\n while (true) {\n var token = this.consumeToken();\n if (token.type === 32 /* EOF_TOKEN */ || token.type === 3 /* RIGHT_PARENTHESIS_TOKEN */) {\n return cssFunction;\n }\n this.reconsumeToken(token);\n cssFunction.values.push(this.consumeComponentValue());\n }\n };\n Parser.prototype.consumeToken = function () {\n var token = this._tokens.shift();\n return typeof token === 'undefined' ? EOF_TOKEN : token;\n };\n Parser.prototype.reconsumeToken = function (token) {\n this._tokens.unshift(token);\n };\n return Parser;\n }());\n var isDimensionToken = function (token) { return token.type === 15 /* DIMENSION_TOKEN */; };\n var isNumberToken = function (token) { return token.type === 17 /* NUMBER_TOKEN */; };\n var isIdentToken = function (token) { return token.type === 20 /* IDENT_TOKEN */; };\n var isStringToken = function (token) { return token.type === 0 /* STRING_TOKEN */; };\n var isIdentWithValue = function (token, value) {\n return isIdentToken(token) && token.value === value;\n };\n var nonWhiteSpace = function (token) { return token.type !== 31 /* WHITESPACE_TOKEN */; };\n var nonFunctionArgSeparator = function (token) {\n return token.type !== 31 /* WHITESPACE_TOKEN */ && token.type !== 4 /* COMMA_TOKEN */;\n };\n var parseFunctionArgs = function (tokens) {\n var args = [];\n var arg = [];\n tokens.forEach(function (token) {\n if (token.type === 4 /* COMMA_TOKEN */) {\n if (arg.length === 0) {\n throw new Error(\"Error parsing function args, zero tokens for arg\");\n }\n args.push(arg);\n arg = [];\n return;\n }\n if (token.type !== 31 /* WHITESPACE_TOKEN */) {\n arg.push(token);\n }\n });\n if (arg.length) {\n args.push(arg);\n }\n return args;\n };\n var isEndingTokenFor = function (token, type) {\n if (type === 11 /* LEFT_CURLY_BRACKET_TOKEN */ && token.type === 12 /* RIGHT_CURLY_BRACKET_TOKEN */) {\n return true;\n }\n if (type === 28 /* LEFT_SQUARE_BRACKET_TOKEN */ && token.type === 29 /* RIGHT_SQUARE_BRACKET_TOKEN */) {\n return true;\n }\n return type === 2 /* LEFT_PARENTHESIS_TOKEN */ && token.type === 3 /* RIGHT_PARENTHESIS_TOKEN */;\n };\n\n var isLength = function (token) {\n return token.type === 17 /* NUMBER_TOKEN */ || token.type === 15 /* DIMENSION_TOKEN */;\n };\n\n var isLengthPercentage = function (token) {\n return token.type === 16 /* PERCENTAGE_TOKEN */ || isLength(token);\n };\n var parseLengthPercentageTuple = function (tokens) {\n return tokens.length > 1 ? [tokens[0], tokens[1]] : [tokens[0]];\n };\n var ZERO_LENGTH = {\n type: 17 /* NUMBER_TOKEN */,\n number: 0,\n flags: FLAG_INTEGER\n };\n var FIFTY_PERCENT = {\n type: 16 /* PERCENTAGE_TOKEN */,\n number: 50,\n flags: FLAG_INTEGER\n };\n var HUNDRED_PERCENT = {\n type: 16 /* PERCENTAGE_TOKEN */,\n number: 100,\n flags: FLAG_INTEGER\n };\n var getAbsoluteValueForTuple = function (tuple, width, height) {\n var x = tuple[0], y = tuple[1];\n return [getAbsoluteValue(x, width), getAbsoluteValue(typeof y !== 'undefined' ? y : x, height)];\n };\n var getAbsoluteValue = function (token, parent) {\n if (token.type === 16 /* PERCENTAGE_TOKEN */) {\n return (token.number / 100) * parent;\n }\n if (isDimensionToken(token)) {\n switch (token.unit) {\n case 'rem':\n case 'em':\n return 16 * token.number; // TODO use correct font-size\n case 'px':\n default:\n return token.number;\n }\n }\n return token.number;\n };\n\n var DEG = 'deg';\n var GRAD = 'grad';\n var RAD = 'rad';\n var TURN = 'turn';\n var angle = {\n name: 'angle',\n parse: function (_context, value) {\n if (value.type === 15 /* DIMENSION_TOKEN */) {\n switch (value.unit) {\n case DEG:\n return (Math.PI * value.number) / 180;\n case GRAD:\n return (Math.PI / 200) * value.number;\n case RAD:\n return value.number;\n case TURN:\n return Math.PI * 2 * value.number;\n }\n }\n throw new Error(\"Unsupported angle type\");\n }\n };\n var isAngle = function (value) {\n if (value.type === 15 /* DIMENSION_TOKEN */) {\n if (value.unit === DEG || value.unit === GRAD || value.unit === RAD || value.unit === TURN) {\n return true;\n }\n }\n return false;\n };\n var parseNamedSide = function (tokens) {\n var sideOrCorner = tokens\n .filter(isIdentToken)\n .map(function (ident) { return ident.value; })\n .join(' ');\n switch (sideOrCorner) {\n case 'to bottom right':\n case 'to right bottom':\n case 'left top':\n case 'top left':\n return [ZERO_LENGTH, ZERO_LENGTH];\n case 'to top':\n case 'bottom':\n return deg(0);\n case 'to bottom left':\n case 'to left bottom':\n case 'right top':\n case 'top right':\n return [ZERO_LENGTH, HUNDRED_PERCENT];\n case 'to right':\n case 'left':\n return deg(90);\n case 'to top left':\n case 'to left top':\n case 'right bottom':\n case 'bottom right':\n return [HUNDRED_PERCENT, HUNDRED_PERCENT];\n case 'to bottom':\n case 'top':\n return deg(180);\n case 'to top right':\n case 'to right top':\n case 'left bottom':\n case 'bottom left':\n return [HUNDRED_PERCENT, ZERO_LENGTH];\n case 'to left':\n case 'right':\n return deg(270);\n }\n return 0;\n };\n var deg = function (deg) { return (Math.PI * deg) / 180; };\n\n var color$1 = {\n name: 'color',\n parse: function (context, value) {\n if (value.type === 18 /* FUNCTION */) {\n var colorFunction = SUPPORTED_COLOR_FUNCTIONS[value.name];\n if (typeof colorFunction === 'undefined') {\n throw new Error(\"Attempting to parse an unsupported color function \\\"\" + value.name + \"\\\"\");\n }\n return colorFunction(context, value.values);\n }\n if (value.type === 5 /* HASH_TOKEN */) {\n if (value.value.length === 3) {\n var r = value.value.substring(0, 1);\n var g = value.value.substring(1, 2);\n var b = value.value.substring(2, 3);\n return pack(parseInt(r + r, 16), parseInt(g + g, 16), parseInt(b + b, 16), 1);\n }\n if (value.value.length === 4) {\n var r = value.value.substring(0, 1);\n var g = value.value.substring(1, 2);\n var b = value.value.substring(2, 3);\n var a = value.value.substring(3, 4);\n return pack(parseInt(r + r, 16), parseInt(g + g, 16), parseInt(b + b, 16), parseInt(a + a, 16) / 255);\n }\n if (value.value.length === 6) {\n var r = value.value.substring(0, 2);\n var g = value.value.substring(2, 4);\n var b = value.value.substring(4, 6);\n return pack(parseInt(r, 16), parseInt(g, 16), parseInt(b, 16), 1);\n }\n if (value.value.length === 8) {\n var r = value.value.substring(0, 2);\n var g = value.value.substring(2, 4);\n var b = value.value.substring(4, 6);\n var a = value.value.substring(6, 8);\n return pack(parseInt(r, 16), parseInt(g, 16), parseInt(b, 16), parseInt(a, 16) / 255);\n }\n }\n if (value.type === 20 /* IDENT_TOKEN */) {\n var namedColor = COLORS[value.value.toUpperCase()];\n if (typeof namedColor !== 'undefined') {\n return namedColor;\n }\n }\n return COLORS.TRANSPARENT;\n }\n };\n var isTransparent = function (color) { return (0xff & color) === 0; };\n var asString = function (color) {\n var alpha = 0xff & color;\n var blue = 0xff & (color >> 8);\n var green = 0xff & (color >> 16);\n var red = 0xff & (color >> 24);\n return alpha < 255 ? \"rgba(\" + red + \",\" + green + \",\" + blue + \",\" + alpha / 255 + \")\" : \"rgb(\" + red + \",\" + green + \",\" + blue + \")\";\n };\n var pack = function (r, g, b, a) {\n return ((r << 24) | (g << 16) | (b << 8) | (Math.round(a * 255) << 0)) >>> 0;\n };\n var getTokenColorValue = function (token, i) {\n if (token.type === 17 /* NUMBER_TOKEN */) {\n return token.number;\n }\n if (token.type === 16 /* PERCENTAGE_TOKEN */) {\n var max = i === 3 ? 1 : 255;\n return i === 3 ? (token.number / 100) * max : Math.round((token.number / 100) * max);\n }\n return 0;\n };\n var rgb = function (_context, args) {\n var tokens = args.filter(nonFunctionArgSeparator);\n if (tokens.length === 3) {\n var _a = tokens.map(getTokenColorValue), r = _a[0], g = _a[1], b = _a[2];\n return pack(r, g, b, 1);\n }\n if (tokens.length === 4) {\n var _b = tokens.map(getTokenColorValue), r = _b[0], g = _b[1], b = _b[2], a = _b[3];\n return pack(r, g, b, a);\n }\n return 0;\n };\n function hue2rgb(t1, t2, hue) {\n if (hue < 0) {\n hue += 1;\n }\n if (hue >= 1) {\n hue -= 1;\n }\n if (hue < 1 / 6) {\n return (t2 - t1) * hue * 6 + t1;\n }\n else if (hue < 1 / 2) {\n return t2;\n }\n else if (hue < 2 / 3) {\n return (t2 - t1) * 6 * (2 / 3 - hue) + t1;\n }\n else {\n return t1;\n }\n }\n var hsl = function (context, args) {\n var tokens = args.filter(nonFunctionArgSeparator);\n var hue = tokens[0], saturation = tokens[1], lightness = tokens[2], alpha = tokens[3];\n var h = (hue.type === 17 /* NUMBER_TOKEN */ ? deg(hue.number) : angle.parse(context, hue)) / (Math.PI * 2);\n var s = isLengthPercentage(saturation) ? saturation.number / 100 : 0;\n var l = isLengthPercentage(lightness) ? lightness.number / 100 : 0;\n var a = typeof alpha !== 'undefined' && isLengthPercentage(alpha) ? getAbsoluteValue(alpha, 1) : 1;\n if (s === 0) {\n return pack(l * 255, l * 255, l * 255, 1);\n }\n var t2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\n var t1 = l * 2 - t2;\n var r = hue2rgb(t1, t2, h + 1 / 3);\n var g = hue2rgb(t1, t2, h);\n var b = hue2rgb(t1, t2, h - 1 / 3);\n return pack(r * 255, g * 255, b * 255, a);\n };\n var SUPPORTED_COLOR_FUNCTIONS = {\n hsl: hsl,\n hsla: hsl,\n rgb: rgb,\n rgba: rgb\n };\n var parseColor = function (context, value) {\n return color$1.parse(context, Parser.create(value).parseComponentValue());\n };\n var COLORS = {\n ALICEBLUE: 0xf0f8ffff,\n ANTIQUEWHITE: 0xfaebd7ff,\n AQUA: 0x00ffffff,\n AQUAMARINE: 0x7fffd4ff,\n AZURE: 0xf0ffffff,\n BEIGE: 0xf5f5dcff,\n BISQUE: 0xffe4c4ff,\n BLACK: 0x000000ff,\n BLANCHEDALMOND: 0xffebcdff,\n BLUE: 0x0000ffff,\n BLUEVIOLET: 0x8a2be2ff,\n BROWN: 0xa52a2aff,\n BURLYWOOD: 0xdeb887ff,\n CADETBLUE: 0x5f9ea0ff,\n CHARTREUSE: 0x7fff00ff,\n CHOCOLATE: 0xd2691eff,\n CORAL: 0xff7f50ff,\n CORNFLOWERBLUE: 0x6495edff,\n CORNSILK: 0xfff8dcff,\n CRIMSON: 0xdc143cff,\n CYAN: 0x00ffffff,\n DARKBLUE: 0x00008bff,\n DARKCYAN: 0x008b8bff,\n DARKGOLDENROD: 0xb886bbff,\n DARKGRAY: 0xa9a9a9ff,\n DARKGREEN: 0x006400ff,\n DARKGREY: 0xa9a9a9ff,\n DARKKHAKI: 0xbdb76bff,\n DARKMAGENTA: 0x8b008bff,\n DARKOLIVEGREEN: 0x556b2fff,\n DARKORANGE: 0xff8c00ff,\n DARKORCHID: 0x9932ccff,\n DARKRED: 0x8b0000ff,\n DARKSALMON: 0xe9967aff,\n DARKSEAGREEN: 0x8fbc8fff,\n DARKSLATEBLUE: 0x483d8bff,\n DARKSLATEGRAY: 0x2f4f4fff,\n DARKSLATEGREY: 0x2f4f4fff,\n DARKTURQUOISE: 0x00ced1ff,\n DARKVIOLET: 0x9400d3ff,\n DEEPPINK: 0xff1493ff,\n DEEPSKYBLUE: 0x00bfffff,\n DIMGRAY: 0x696969ff,\n DIMGREY: 0x696969ff,\n DODGERBLUE: 0x1e90ffff,\n FIREBRICK: 0xb22222ff,\n FLORALWHITE: 0xfffaf0ff,\n FORESTGREEN: 0x228b22ff,\n FUCHSIA: 0xff00ffff,\n GAINSBORO: 0xdcdcdcff,\n GHOSTWHITE: 0xf8f8ffff,\n GOLD: 0xffd700ff,\n GOLDENROD: 0xdaa520ff,\n GRAY: 0x808080ff,\n GREEN: 0x008000ff,\n GREENYELLOW: 0xadff2fff,\n GREY: 0x808080ff,\n HONEYDEW: 0xf0fff0ff,\n HOTPINK: 0xff69b4ff,\n INDIANRED: 0xcd5c5cff,\n INDIGO: 0x4b0082ff,\n IVORY: 0xfffff0ff,\n KHAKI: 0xf0e68cff,\n LAVENDER: 0xe6e6faff,\n LAVENDERBLUSH: 0xfff0f5ff,\n LAWNGREEN: 0x7cfc00ff,\n LEMONCHIFFON: 0xfffacdff,\n LIGHTBLUE: 0xadd8e6ff,\n LIGHTCORAL: 0xf08080ff,\n LIGHTCYAN: 0xe0ffffff,\n LIGHTGOLDENRODYELLOW: 0xfafad2ff,\n LIGHTGRAY: 0xd3d3d3ff,\n LIGHTGREEN: 0x90ee90ff,\n LIGHTGREY: 0xd3d3d3ff,\n LIGHTPINK: 0xffb6c1ff,\n LIGHTSALMON: 0xffa07aff,\n LIGHTSEAGREEN: 0x20b2aaff,\n LIGHTSKYBLUE: 0x87cefaff,\n LIGHTSLATEGRAY: 0x778899ff,\n LIGHTSLATEGREY: 0x778899ff,\n LIGHTSTEELBLUE: 0xb0c4deff,\n LIGHTYELLOW: 0xffffe0ff,\n LIME: 0x00ff00ff,\n LIMEGREEN: 0x32cd32ff,\n LINEN: 0xfaf0e6ff,\n MAGENTA: 0xff00ffff,\n MAROON: 0x800000ff,\n MEDIUMAQUAMARINE: 0x66cdaaff,\n MEDIUMBLUE: 0x0000cdff,\n MEDIUMORCHID: 0xba55d3ff,\n MEDIUMPURPLE: 0x9370dbff,\n MEDIUMSEAGREEN: 0x3cb371ff,\n MEDIUMSLATEBLUE: 0x7b68eeff,\n MEDIUMSPRINGGREEN: 0x00fa9aff,\n MEDIUMTURQUOISE: 0x48d1ccff,\n MEDIUMVIOLETRED: 0xc71585ff,\n MIDNIGHTBLUE: 0x191970ff,\n MINTCREAM: 0xf5fffaff,\n MISTYROSE: 0xffe4e1ff,\n MOCCASIN: 0xffe4b5ff,\n NAVAJOWHITE: 0xffdeadff,\n NAVY: 0x000080ff,\n OLDLACE: 0xfdf5e6ff,\n OLIVE: 0x808000ff,\n OLIVEDRAB: 0x6b8e23ff,\n ORANGE: 0xffa500ff,\n ORANGERED: 0xff4500ff,\n ORCHID: 0xda70d6ff,\n PALEGOLDENROD: 0xeee8aaff,\n PALEGREEN: 0x98fb98ff,\n PALETURQUOISE: 0xafeeeeff,\n PALEVIOLETRED: 0xdb7093ff,\n PAPAYAWHIP: 0xffefd5ff,\n PEACHPUFF: 0xffdab9ff,\n PERU: 0xcd853fff,\n PINK: 0xffc0cbff,\n PLUM: 0xdda0ddff,\n POWDERBLUE: 0xb0e0e6ff,\n PURPLE: 0x800080ff,\n REBECCAPURPLE: 0x663399ff,\n RED: 0xff0000ff,\n ROSYBROWN: 0xbc8f8fff,\n ROYALBLUE: 0x4169e1ff,\n SADDLEBROWN: 0x8b4513ff,\n SALMON: 0xfa8072ff,\n SANDYBROWN: 0xf4a460ff,\n SEAGREEN: 0x2e8b57ff,\n SEASHELL: 0xfff5eeff,\n SIENNA: 0xa0522dff,\n SILVER: 0xc0c0c0ff,\n SKYBLUE: 0x87ceebff,\n SLATEBLUE: 0x6a5acdff,\n SLATEGRAY: 0x708090ff,\n SLATEGREY: 0x708090ff,\n SNOW: 0xfffafaff,\n SPRINGGREEN: 0x00ff7fff,\n STEELBLUE: 0x4682b4ff,\n TAN: 0xd2b48cff,\n TEAL: 0x008080ff,\n THISTLE: 0xd8bfd8ff,\n TOMATO: 0xff6347ff,\n TRANSPARENT: 0x00000000,\n TURQUOISE: 0x40e0d0ff,\n VIOLET: 0xee82eeff,\n WHEAT: 0xf5deb3ff,\n WHITE: 0xffffffff,\n WHITESMOKE: 0xf5f5f5ff,\n YELLOW: 0xffff00ff,\n YELLOWGREEN: 0x9acd32ff\n };\n\n var backgroundClip = {\n name: 'background-clip',\n initialValue: 'border-box',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n return tokens.map(function (token) {\n if (isIdentToken(token)) {\n switch (token.value) {\n case 'padding-box':\n return 1 /* PADDING_BOX */;\n case 'content-box':\n return 2 /* CONTENT_BOX */;\n }\n }\n return 0 /* BORDER_BOX */;\n });\n }\n };\n\n var backgroundColor = {\n name: \"background-color\",\n initialValue: 'transparent',\n prefix: false,\n type: 3 /* TYPE_VALUE */,\n format: 'color'\n };\n\n var parseColorStop = function (context, args) {\n var color = color$1.parse(context, args[0]);\n var stop = args[1];\n return stop && isLengthPercentage(stop) ? { color: color, stop: stop } : { color: color, stop: null };\n };\n var processColorStops = function (stops, lineLength) {\n var first = stops[0];\n var last = stops[stops.length - 1];\n if (first.stop === null) {\n first.stop = ZERO_LENGTH;\n }\n if (last.stop === null) {\n last.stop = HUNDRED_PERCENT;\n }\n var processStops = [];\n var previous = 0;\n for (var i = 0; i < stops.length; i++) {\n var stop_1 = stops[i].stop;\n if (stop_1 !== null) {\n var absoluteValue = getAbsoluteValue(stop_1, lineLength);\n if (absoluteValue > previous) {\n processStops.push(absoluteValue);\n }\n else {\n processStops.push(previous);\n }\n previous = absoluteValue;\n }\n else {\n processStops.push(null);\n }\n }\n var gapBegin = null;\n for (var i = 0; i < processStops.length; i++) {\n var stop_2 = processStops[i];\n if (stop_2 === null) {\n if (gapBegin === null) {\n gapBegin = i;\n }\n }\n else if (gapBegin !== null) {\n var gapLength = i - gapBegin;\n var beforeGap = processStops[gapBegin - 1];\n var gapValue = (stop_2 - beforeGap) / (gapLength + 1);\n for (var g = 1; g <= gapLength; g++) {\n processStops[gapBegin + g - 1] = gapValue * g;\n }\n gapBegin = null;\n }\n }\n return stops.map(function (_a, i) {\n var color = _a.color;\n return { color: color, stop: Math.max(Math.min(1, processStops[i] / lineLength), 0) };\n });\n };\n var getAngleFromCorner = function (corner, width, height) {\n var centerX = width / 2;\n var centerY = height / 2;\n var x = getAbsoluteValue(corner[0], width) - centerX;\n var y = centerY - getAbsoluteValue(corner[1], height);\n return (Math.atan2(y, x) + Math.PI * 2) % (Math.PI * 2);\n };\n var calculateGradientDirection = function (angle, width, height) {\n var radian = typeof angle === 'number' ? angle : getAngleFromCorner(angle, width, height);\n var lineLength = Math.abs(width * Math.sin(radian)) + Math.abs(height * Math.cos(radian));\n var halfWidth = width / 2;\n var halfHeight = height / 2;\n var halfLineLength = lineLength / 2;\n var yDiff = Math.sin(radian - Math.PI / 2) * halfLineLength;\n var xDiff = Math.cos(radian - Math.PI / 2) * halfLineLength;\n return [lineLength, halfWidth - xDiff, halfWidth + xDiff, halfHeight - yDiff, halfHeight + yDiff];\n };\n var distance = function (a, b) { return Math.sqrt(a * a + b * b); };\n var findCorner = function (width, height, x, y, closest) {\n var corners = [\n [0, 0],\n [0, height],\n [width, 0],\n [width, height]\n ];\n return corners.reduce(function (stat, corner) {\n var cx = corner[0], cy = corner[1];\n var d = distance(x - cx, y - cy);\n if (closest ? d < stat.optimumDistance : d > stat.optimumDistance) {\n return {\n optimumCorner: corner,\n optimumDistance: d\n };\n }\n return stat;\n }, {\n optimumDistance: closest ? Infinity : -Infinity,\n optimumCorner: null\n }).optimumCorner;\n };\n var calculateRadius = function (gradient, x, y, width, height) {\n var rx = 0;\n var ry = 0;\n switch (gradient.size) {\n case 0 /* CLOSEST_SIDE */:\n // The ending shape is sized so that that it exactly meets the side of the gradient box closest to the gradient’s center.\n // If the shape is an ellipse, it exactly meets the closest side in each dimension.\n if (gradient.shape === 0 /* CIRCLE */) {\n rx = ry = Math.min(Math.abs(x), Math.abs(x - width), Math.abs(y), Math.abs(y - height));\n }\n else if (gradient.shape === 1 /* ELLIPSE */) {\n rx = Math.min(Math.abs(x), Math.abs(x - width));\n ry = Math.min(Math.abs(y), Math.abs(y - height));\n }\n break;\n case 2 /* CLOSEST_CORNER */:\n // The ending shape is sized so that that it passes through the corner of the gradient box closest to the gradient’s center.\n // If the shape is an ellipse, the ending shape is given the same aspect-ratio it would have if closest-side were specified.\n if (gradient.shape === 0 /* CIRCLE */) {\n rx = ry = Math.min(distance(x, y), distance(x, y - height), distance(x - width, y), distance(x - width, y - height));\n }\n else if (gradient.shape === 1 /* ELLIPSE */) {\n // Compute the ratio ry/rx (which is to be the same as for \"closest-side\")\n var c = Math.min(Math.abs(y), Math.abs(y - height)) / Math.min(Math.abs(x), Math.abs(x - width));\n var _a = findCorner(width, height, x, y, true), cx = _a[0], cy = _a[1];\n rx = distance(cx - x, (cy - y) / c);\n ry = c * rx;\n }\n break;\n case 1 /* FARTHEST_SIDE */:\n // Same as closest-side, except the ending shape is sized based on the farthest side(s)\n if (gradient.shape === 0 /* CIRCLE */) {\n rx = ry = Math.max(Math.abs(x), Math.abs(x - width), Math.abs(y), Math.abs(y - height));\n }\n else if (gradient.shape === 1 /* ELLIPSE */) {\n rx = Math.max(Math.abs(x), Math.abs(x - width));\n ry = Math.max(Math.abs(y), Math.abs(y - height));\n }\n break;\n case 3 /* FARTHEST_CORNER */:\n // Same as closest-corner, except the ending shape is sized based on the farthest corner.\n // If the shape is an ellipse, the ending shape is given the same aspect ratio it would have if farthest-side were specified.\n if (gradient.shape === 0 /* CIRCLE */) {\n rx = ry = Math.max(distance(x, y), distance(x, y - height), distance(x - width, y), distance(x - width, y - height));\n }\n else if (gradient.shape === 1 /* ELLIPSE */) {\n // Compute the ratio ry/rx (which is to be the same as for \"farthest-side\")\n var c = Math.max(Math.abs(y), Math.abs(y - height)) / Math.max(Math.abs(x), Math.abs(x - width));\n var _b = findCorner(width, height, x, y, false), cx = _b[0], cy = _b[1];\n rx = distance(cx - x, (cy - y) / c);\n ry = c * rx;\n }\n break;\n }\n if (Array.isArray(gradient.size)) {\n rx = getAbsoluteValue(gradient.size[0], width);\n ry = gradient.size.length === 2 ? getAbsoluteValue(gradient.size[1], height) : rx;\n }\n return [rx, ry];\n };\n\n var linearGradient = function (context, tokens) {\n var angle$1 = deg(180);\n var stops = [];\n parseFunctionArgs(tokens).forEach(function (arg, i) {\n if (i === 0) {\n var firstToken = arg[0];\n if (firstToken.type === 20 /* IDENT_TOKEN */ && firstToken.value === 'to') {\n angle$1 = parseNamedSide(arg);\n return;\n }\n else if (isAngle(firstToken)) {\n angle$1 = angle.parse(context, firstToken);\n return;\n }\n }\n var colorStop = parseColorStop(context, arg);\n stops.push(colorStop);\n });\n return { angle: angle$1, stops: stops, type: 1 /* LINEAR_GRADIENT */ };\n };\n\n var prefixLinearGradient = function (context, tokens) {\n var angle$1 = deg(180);\n var stops = [];\n parseFunctionArgs(tokens).forEach(function (arg, i) {\n if (i === 0) {\n var firstToken = arg[0];\n if (firstToken.type === 20 /* IDENT_TOKEN */ &&\n ['top', 'left', 'right', 'bottom'].indexOf(firstToken.value) !== -1) {\n angle$1 = parseNamedSide(arg);\n return;\n }\n else if (isAngle(firstToken)) {\n angle$1 = (angle.parse(context, firstToken) + deg(270)) % deg(360);\n return;\n }\n }\n var colorStop = parseColorStop(context, arg);\n stops.push(colorStop);\n });\n return {\n angle: angle$1,\n stops: stops,\n type: 1 /* LINEAR_GRADIENT */\n };\n };\n\n var webkitGradient = function (context, tokens) {\n var angle = deg(180);\n var stops = [];\n var type = 1 /* LINEAR_GRADIENT */;\n var shape = 0 /* CIRCLE */;\n var size = 3 /* FARTHEST_CORNER */;\n var position = [];\n parseFunctionArgs(tokens).forEach(function (arg, i) {\n var firstToken = arg[0];\n if (i === 0) {\n if (isIdentToken(firstToken) && firstToken.value === 'linear') {\n type = 1 /* LINEAR_GRADIENT */;\n return;\n }\n else if (isIdentToken(firstToken) && firstToken.value === 'radial') {\n type = 2 /* RADIAL_GRADIENT */;\n return;\n }\n }\n if (firstToken.type === 18 /* FUNCTION */) {\n if (firstToken.name === 'from') {\n var color = color$1.parse(context, firstToken.values[0]);\n stops.push({ stop: ZERO_LENGTH, color: color });\n }\n else if (firstToken.name === 'to') {\n var color = color$1.parse(context, firstToken.values[0]);\n stops.push({ stop: HUNDRED_PERCENT, color: color });\n }\n else if (firstToken.name === 'color-stop') {\n var values = firstToken.values.filter(nonFunctionArgSeparator);\n if (values.length === 2) {\n var color = color$1.parse(context, values[1]);\n var stop_1 = values[0];\n if (isNumberToken(stop_1)) {\n stops.push({\n stop: { type: 16 /* PERCENTAGE_TOKEN */, number: stop_1.number * 100, flags: stop_1.flags },\n color: color\n });\n }\n }\n }\n }\n });\n return type === 1 /* LINEAR_GRADIENT */\n ? {\n angle: (angle + deg(180)) % deg(360),\n stops: stops,\n type: type\n }\n : { size: size, shape: shape, stops: stops, position: position, type: type };\n };\n\n var CLOSEST_SIDE = 'closest-side';\n var FARTHEST_SIDE = 'farthest-side';\n var CLOSEST_CORNER = 'closest-corner';\n var FARTHEST_CORNER = 'farthest-corner';\n var CIRCLE = 'circle';\n var ELLIPSE = 'ellipse';\n var COVER = 'cover';\n var CONTAIN = 'contain';\n var radialGradient = function (context, tokens) {\n var shape = 0 /* CIRCLE */;\n var size = 3 /* FARTHEST_CORNER */;\n var stops = [];\n var position = [];\n parseFunctionArgs(tokens).forEach(function (arg, i) {\n var isColorStop = true;\n if (i === 0) {\n var isAtPosition_1 = false;\n isColorStop = arg.reduce(function (acc, token) {\n if (isAtPosition_1) {\n if (isIdentToken(token)) {\n switch (token.value) {\n case 'center':\n position.push(FIFTY_PERCENT);\n return acc;\n case 'top':\n case 'left':\n position.push(ZERO_LENGTH);\n return acc;\n case 'right':\n case 'bottom':\n position.push(HUNDRED_PERCENT);\n return acc;\n }\n }\n else if (isLengthPercentage(token) || isLength(token)) {\n position.push(token);\n }\n }\n else if (isIdentToken(token)) {\n switch (token.value) {\n case CIRCLE:\n shape = 0 /* CIRCLE */;\n return false;\n case ELLIPSE:\n shape = 1 /* ELLIPSE */;\n return false;\n case 'at':\n isAtPosition_1 = true;\n return false;\n case CLOSEST_SIDE:\n size = 0 /* CLOSEST_SIDE */;\n return false;\n case COVER:\n case FARTHEST_SIDE:\n size = 1 /* FARTHEST_SIDE */;\n return false;\n case CONTAIN:\n case CLOSEST_CORNER:\n size = 2 /* CLOSEST_CORNER */;\n return false;\n case FARTHEST_CORNER:\n size = 3 /* FARTHEST_CORNER */;\n return false;\n }\n }\n else if (isLength(token) || isLengthPercentage(token)) {\n if (!Array.isArray(size)) {\n size = [];\n }\n size.push(token);\n return false;\n }\n return acc;\n }, isColorStop);\n }\n if (isColorStop) {\n var colorStop = parseColorStop(context, arg);\n stops.push(colorStop);\n }\n });\n return { size: size, shape: shape, stops: stops, position: position, type: 2 /* RADIAL_GRADIENT */ };\n };\n\n var prefixRadialGradient = function (context, tokens) {\n var shape = 0 /* CIRCLE */;\n var size = 3 /* FARTHEST_CORNER */;\n var stops = [];\n var position = [];\n parseFunctionArgs(tokens).forEach(function (arg, i) {\n var isColorStop = true;\n if (i === 0) {\n isColorStop = arg.reduce(function (acc, token) {\n if (isIdentToken(token)) {\n switch (token.value) {\n case 'center':\n position.push(FIFTY_PERCENT);\n return false;\n case 'top':\n case 'left':\n position.push(ZERO_LENGTH);\n return false;\n case 'right':\n case 'bottom':\n position.push(HUNDRED_PERCENT);\n return false;\n }\n }\n else if (isLengthPercentage(token) || isLength(token)) {\n position.push(token);\n return false;\n }\n return acc;\n }, isColorStop);\n }\n else if (i === 1) {\n isColorStop = arg.reduce(function (acc, token) {\n if (isIdentToken(token)) {\n switch (token.value) {\n case CIRCLE:\n shape = 0 /* CIRCLE */;\n return false;\n case ELLIPSE:\n shape = 1 /* ELLIPSE */;\n return false;\n case CONTAIN:\n case CLOSEST_SIDE:\n size = 0 /* CLOSEST_SIDE */;\n return false;\n case FARTHEST_SIDE:\n size = 1 /* FARTHEST_SIDE */;\n return false;\n case CLOSEST_CORNER:\n size = 2 /* CLOSEST_CORNER */;\n return false;\n case COVER:\n case FARTHEST_CORNER:\n size = 3 /* FARTHEST_CORNER */;\n return false;\n }\n }\n else if (isLength(token) || isLengthPercentage(token)) {\n if (!Array.isArray(size)) {\n size = [];\n }\n size.push(token);\n return false;\n }\n return acc;\n }, isColorStop);\n }\n if (isColorStop) {\n var colorStop = parseColorStop(context, arg);\n stops.push(colorStop);\n }\n });\n return { size: size, shape: shape, stops: stops, position: position, type: 2 /* RADIAL_GRADIENT */ };\n };\n\n var isLinearGradient = function (background) {\n return background.type === 1 /* LINEAR_GRADIENT */;\n };\n var isRadialGradient = function (background) {\n return background.type === 2 /* RADIAL_GRADIENT */;\n };\n var image = {\n name: 'image',\n parse: function (context, value) {\n if (value.type === 22 /* URL_TOKEN */) {\n var image_1 = { url: value.value, type: 0 /* URL */ };\n context.cache.addImage(value.value);\n return image_1;\n }\n if (value.type === 18 /* FUNCTION */) {\n var imageFunction = SUPPORTED_IMAGE_FUNCTIONS[value.name];\n if (typeof imageFunction === 'undefined') {\n throw new Error(\"Attempting to parse an unsupported image function \\\"\" + value.name + \"\\\"\");\n }\n return imageFunction(context, value.values);\n }\n throw new Error(\"Unsupported image type \" + value.type);\n }\n };\n function isSupportedImage(value) {\n return (!(value.type === 20 /* IDENT_TOKEN */ && value.value === 'none') &&\n (value.type !== 18 /* FUNCTION */ || !!SUPPORTED_IMAGE_FUNCTIONS[value.name]));\n }\n var SUPPORTED_IMAGE_FUNCTIONS = {\n 'linear-gradient': linearGradient,\n '-moz-linear-gradient': prefixLinearGradient,\n '-ms-linear-gradient': prefixLinearGradient,\n '-o-linear-gradient': prefixLinearGradient,\n '-webkit-linear-gradient': prefixLinearGradient,\n 'radial-gradient': radialGradient,\n '-moz-radial-gradient': prefixRadialGradient,\n '-ms-radial-gradient': prefixRadialGradient,\n '-o-radial-gradient': prefixRadialGradient,\n '-webkit-radial-gradient': prefixRadialGradient,\n '-webkit-gradient': webkitGradient\n };\n\n var backgroundImage = {\n name: 'background-image',\n initialValue: 'none',\n type: 1 /* LIST */,\n prefix: false,\n parse: function (context, tokens) {\n if (tokens.length === 0) {\n return [];\n }\n var first = tokens[0];\n if (first.type === 20 /* IDENT_TOKEN */ && first.value === 'none') {\n return [];\n }\n return tokens\n .filter(function (value) { return nonFunctionArgSeparator(value) && isSupportedImage(value); })\n .map(function (value) { return image.parse(context, value); });\n }\n };\n\n var backgroundOrigin = {\n name: 'background-origin',\n initialValue: 'border-box',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n return tokens.map(function (token) {\n if (isIdentToken(token)) {\n switch (token.value) {\n case 'padding-box':\n return 1 /* PADDING_BOX */;\n case 'content-box':\n return 2 /* CONTENT_BOX */;\n }\n }\n return 0 /* BORDER_BOX */;\n });\n }\n };\n\n var backgroundPosition = {\n name: 'background-position',\n initialValue: '0% 0%',\n type: 1 /* LIST */,\n prefix: false,\n parse: function (_context, tokens) {\n return parseFunctionArgs(tokens)\n .map(function (values) { return values.filter(isLengthPercentage); })\n .map(parseLengthPercentageTuple);\n }\n };\n\n var backgroundRepeat = {\n name: 'background-repeat',\n initialValue: 'repeat',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n return parseFunctionArgs(tokens)\n .map(function (values) {\n return values\n .filter(isIdentToken)\n .map(function (token) { return token.value; })\n .join(' ');\n })\n .map(parseBackgroundRepeat);\n }\n };\n var parseBackgroundRepeat = function (value) {\n switch (value) {\n case 'no-repeat':\n return 1 /* NO_REPEAT */;\n case 'repeat-x':\n case 'repeat no-repeat':\n return 2 /* REPEAT_X */;\n case 'repeat-y':\n case 'no-repeat repeat':\n return 3 /* REPEAT_Y */;\n case 'repeat':\n default:\n return 0 /* REPEAT */;\n }\n };\n\n var BACKGROUND_SIZE;\n (function (BACKGROUND_SIZE) {\n BACKGROUND_SIZE[\"AUTO\"] = \"auto\";\n BACKGROUND_SIZE[\"CONTAIN\"] = \"contain\";\n BACKGROUND_SIZE[\"COVER\"] = \"cover\";\n })(BACKGROUND_SIZE || (BACKGROUND_SIZE = {}));\n var backgroundSize = {\n name: 'background-size',\n initialValue: '0',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n return parseFunctionArgs(tokens).map(function (values) { return values.filter(isBackgroundSizeInfoToken); });\n }\n };\n var isBackgroundSizeInfoToken = function (value) {\n return isIdentToken(value) || isLengthPercentage(value);\n };\n\n var borderColorForSide = function (side) { return ({\n name: \"border-\" + side + \"-color\",\n initialValue: 'transparent',\n prefix: false,\n type: 3 /* TYPE_VALUE */,\n format: 'color'\n }); };\n var borderTopColor = borderColorForSide('top');\n var borderRightColor = borderColorForSide('right');\n var borderBottomColor = borderColorForSide('bottom');\n var borderLeftColor = borderColorForSide('left');\n\n var borderRadiusForSide = function (side) { return ({\n name: \"border-radius-\" + side,\n initialValue: '0 0',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n return parseLengthPercentageTuple(tokens.filter(isLengthPercentage));\n }\n }); };\n var borderTopLeftRadius = borderRadiusForSide('top-left');\n var borderTopRightRadius = borderRadiusForSide('top-right');\n var borderBottomRightRadius = borderRadiusForSide('bottom-right');\n var borderBottomLeftRadius = borderRadiusForSide('bottom-left');\n\n var borderStyleForSide = function (side) { return ({\n name: \"border-\" + side + \"-style\",\n initialValue: 'solid',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, style) {\n switch (style) {\n case 'none':\n return 0 /* NONE */;\n case 'dashed':\n return 2 /* DASHED */;\n case 'dotted':\n return 3 /* DOTTED */;\n case 'double':\n return 4 /* DOUBLE */;\n }\n return 1 /* SOLID */;\n }\n }); };\n var borderTopStyle = borderStyleForSide('top');\n var borderRightStyle = borderStyleForSide('right');\n var borderBottomStyle = borderStyleForSide('bottom');\n var borderLeftStyle = borderStyleForSide('left');\n\n var borderWidthForSide = function (side) { return ({\n name: \"border-\" + side + \"-width\",\n initialValue: '0',\n type: 0 /* VALUE */,\n prefix: false,\n parse: function (_context, token) {\n if (isDimensionToken(token)) {\n return token.number;\n }\n return 0;\n }\n }); };\n var borderTopWidth = borderWidthForSide('top');\n var borderRightWidth = borderWidthForSide('right');\n var borderBottomWidth = borderWidthForSide('bottom');\n var borderLeftWidth = borderWidthForSide('left');\n\n var color = {\n name: \"color\",\n initialValue: 'transparent',\n prefix: false,\n type: 3 /* TYPE_VALUE */,\n format: 'color'\n };\n\n var direction = {\n name: 'direction',\n initialValue: 'ltr',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, direction) {\n switch (direction) {\n case 'rtl':\n return 1 /* RTL */;\n case 'ltr':\n default:\n return 0 /* LTR */;\n }\n }\n };\n\n var display = {\n name: 'display',\n initialValue: 'inline-block',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n return tokens.filter(isIdentToken).reduce(function (bit, token) {\n return bit | parseDisplayValue(token.value);\n }, 0 /* NONE */);\n }\n };\n var parseDisplayValue = function (display) {\n switch (display) {\n case 'block':\n case '-webkit-box':\n return 2 /* BLOCK */;\n case 'inline':\n return 4 /* INLINE */;\n case 'run-in':\n return 8 /* RUN_IN */;\n case 'flow':\n return 16 /* FLOW */;\n case 'flow-root':\n return 32 /* FLOW_ROOT */;\n case 'table':\n return 64 /* TABLE */;\n case 'flex':\n case '-webkit-flex':\n return 128 /* FLEX */;\n case 'grid':\n case '-ms-grid':\n return 256 /* GRID */;\n case 'ruby':\n return 512 /* RUBY */;\n case 'subgrid':\n return 1024 /* SUBGRID */;\n case 'list-item':\n return 2048 /* LIST_ITEM */;\n case 'table-row-group':\n return 4096 /* TABLE_ROW_GROUP */;\n case 'table-header-group':\n return 8192 /* TABLE_HEADER_GROUP */;\n case 'table-footer-group':\n return 16384 /* TABLE_FOOTER_GROUP */;\n case 'table-row':\n return 32768 /* TABLE_ROW */;\n case 'table-cell':\n return 65536 /* TABLE_CELL */;\n case 'table-column-group':\n return 131072 /* TABLE_COLUMN_GROUP */;\n case 'table-column':\n return 262144 /* TABLE_COLUMN */;\n case 'table-caption':\n return 524288 /* TABLE_CAPTION */;\n case 'ruby-base':\n return 1048576 /* RUBY_BASE */;\n case 'ruby-text':\n return 2097152 /* RUBY_TEXT */;\n case 'ruby-base-container':\n return 4194304 /* RUBY_BASE_CONTAINER */;\n case 'ruby-text-container':\n return 8388608 /* RUBY_TEXT_CONTAINER */;\n case 'contents':\n return 16777216 /* CONTENTS */;\n case 'inline-block':\n return 33554432 /* INLINE_BLOCK */;\n case 'inline-list-item':\n return 67108864 /* INLINE_LIST_ITEM */;\n case 'inline-table':\n return 134217728 /* INLINE_TABLE */;\n case 'inline-flex':\n return 268435456 /* INLINE_FLEX */;\n case 'inline-grid':\n return 536870912 /* INLINE_GRID */;\n }\n return 0 /* NONE */;\n };\n\n var float = {\n name: 'float',\n initialValue: 'none',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, float) {\n switch (float) {\n case 'left':\n return 1 /* LEFT */;\n case 'right':\n return 2 /* RIGHT */;\n case 'inline-start':\n return 3 /* INLINE_START */;\n case 'inline-end':\n return 4 /* INLINE_END */;\n }\n return 0 /* NONE */;\n }\n };\n\n var letterSpacing = {\n name: 'letter-spacing',\n initialValue: '0',\n prefix: false,\n type: 0 /* VALUE */,\n parse: function (_context, token) {\n if (token.type === 20 /* IDENT_TOKEN */ && token.value === 'normal') {\n return 0;\n }\n if (token.type === 17 /* NUMBER_TOKEN */) {\n return token.number;\n }\n if (token.type === 15 /* DIMENSION_TOKEN */) {\n return token.number;\n }\n return 0;\n }\n };\n\n var LINE_BREAK;\n (function (LINE_BREAK) {\n LINE_BREAK[\"NORMAL\"] = \"normal\";\n LINE_BREAK[\"STRICT\"] = \"strict\";\n })(LINE_BREAK || (LINE_BREAK = {}));\n var lineBreak = {\n name: 'line-break',\n initialValue: 'normal',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, lineBreak) {\n switch (lineBreak) {\n case 'strict':\n return LINE_BREAK.STRICT;\n case 'normal':\n default:\n return LINE_BREAK.NORMAL;\n }\n }\n };\n\n var lineHeight = {\n name: 'line-height',\n initialValue: 'normal',\n prefix: false,\n type: 4 /* TOKEN_VALUE */\n };\n var computeLineHeight = function (token, fontSize) {\n if (isIdentToken(token) && token.value === 'normal') {\n return 1.2 * fontSize;\n }\n else if (token.type === 17 /* NUMBER_TOKEN */) {\n return fontSize * token.number;\n }\n else if (isLengthPercentage(token)) {\n return getAbsoluteValue(token, fontSize);\n }\n return fontSize;\n };\n\n var listStyleImage = {\n name: 'list-style-image',\n initialValue: 'none',\n type: 0 /* VALUE */,\n prefix: false,\n parse: function (context, token) {\n if (token.type === 20 /* IDENT_TOKEN */ && token.value === 'none') {\n return null;\n }\n return image.parse(context, token);\n }\n };\n\n var listStylePosition = {\n name: 'list-style-position',\n initialValue: 'outside',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, position) {\n switch (position) {\n case 'inside':\n return 0 /* INSIDE */;\n case 'outside':\n default:\n return 1 /* OUTSIDE */;\n }\n }\n };\n\n var listStyleType = {\n name: 'list-style-type',\n initialValue: 'none',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, type) {\n switch (type) {\n case 'disc':\n return 0 /* DISC */;\n case 'circle':\n return 1 /* CIRCLE */;\n case 'square':\n return 2 /* SQUARE */;\n case 'decimal':\n return 3 /* DECIMAL */;\n case 'cjk-decimal':\n return 4 /* CJK_DECIMAL */;\n case 'decimal-leading-zero':\n return 5 /* DECIMAL_LEADING_ZERO */;\n case 'lower-roman':\n return 6 /* LOWER_ROMAN */;\n case 'upper-roman':\n return 7 /* UPPER_ROMAN */;\n case 'lower-greek':\n return 8 /* LOWER_GREEK */;\n case 'lower-alpha':\n return 9 /* LOWER_ALPHA */;\n case 'upper-alpha':\n return 10 /* UPPER_ALPHA */;\n case 'arabic-indic':\n return 11 /* ARABIC_INDIC */;\n case 'armenian':\n return 12 /* ARMENIAN */;\n case 'bengali':\n return 13 /* BENGALI */;\n case 'cambodian':\n return 14 /* CAMBODIAN */;\n case 'cjk-earthly-branch':\n return 15 /* CJK_EARTHLY_BRANCH */;\n case 'cjk-heavenly-stem':\n return 16 /* CJK_HEAVENLY_STEM */;\n case 'cjk-ideographic':\n return 17 /* CJK_IDEOGRAPHIC */;\n case 'devanagari':\n return 18 /* DEVANAGARI */;\n case 'ethiopic-numeric':\n return 19 /* ETHIOPIC_NUMERIC */;\n case 'georgian':\n return 20 /* GEORGIAN */;\n case 'gujarati':\n return 21 /* GUJARATI */;\n case 'gurmukhi':\n return 22 /* GURMUKHI */;\n case 'hebrew':\n return 22 /* HEBREW */;\n case 'hiragana':\n return 23 /* HIRAGANA */;\n case 'hiragana-iroha':\n return 24 /* HIRAGANA_IROHA */;\n case 'japanese-formal':\n return 25 /* JAPANESE_FORMAL */;\n case 'japanese-informal':\n return 26 /* JAPANESE_INFORMAL */;\n case 'kannada':\n return 27 /* KANNADA */;\n case 'katakana':\n return 28 /* KATAKANA */;\n case 'katakana-iroha':\n return 29 /* KATAKANA_IROHA */;\n case 'khmer':\n return 30 /* KHMER */;\n case 'korean-hangul-formal':\n return 31 /* KOREAN_HANGUL_FORMAL */;\n case 'korean-hanja-formal':\n return 32 /* KOREAN_HANJA_FORMAL */;\n case 'korean-hanja-informal':\n return 33 /* KOREAN_HANJA_INFORMAL */;\n case 'lao':\n return 34 /* LAO */;\n case 'lower-armenian':\n return 35 /* LOWER_ARMENIAN */;\n case 'malayalam':\n return 36 /* MALAYALAM */;\n case 'mongolian':\n return 37 /* MONGOLIAN */;\n case 'myanmar':\n return 38 /* MYANMAR */;\n case 'oriya':\n return 39 /* ORIYA */;\n case 'persian':\n return 40 /* PERSIAN */;\n case 'simp-chinese-formal':\n return 41 /* SIMP_CHINESE_FORMAL */;\n case 'simp-chinese-informal':\n return 42 /* SIMP_CHINESE_INFORMAL */;\n case 'tamil':\n return 43 /* TAMIL */;\n case 'telugu':\n return 44 /* TELUGU */;\n case 'thai':\n return 45 /* THAI */;\n case 'tibetan':\n return 46 /* TIBETAN */;\n case 'trad-chinese-formal':\n return 47 /* TRAD_CHINESE_FORMAL */;\n case 'trad-chinese-informal':\n return 48 /* TRAD_CHINESE_INFORMAL */;\n case 'upper-armenian':\n return 49 /* UPPER_ARMENIAN */;\n case 'disclosure-open':\n return 50 /* DISCLOSURE_OPEN */;\n case 'disclosure-closed':\n return 51 /* DISCLOSURE_CLOSED */;\n case 'none':\n default:\n return -1 /* NONE */;\n }\n }\n };\n\n var marginForSide = function (side) { return ({\n name: \"margin-\" + side,\n initialValue: '0',\n prefix: false,\n type: 4 /* TOKEN_VALUE */\n }); };\n var marginTop = marginForSide('top');\n var marginRight = marginForSide('right');\n var marginBottom = marginForSide('bottom');\n var marginLeft = marginForSide('left');\n\n var overflow = {\n name: 'overflow',\n initialValue: 'visible',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n return tokens.filter(isIdentToken).map(function (overflow) {\n switch (overflow.value) {\n case 'hidden':\n return 1 /* HIDDEN */;\n case 'scroll':\n return 2 /* SCROLL */;\n case 'clip':\n return 3 /* CLIP */;\n case 'auto':\n return 4 /* AUTO */;\n case 'visible':\n default:\n return 0 /* VISIBLE */;\n }\n });\n }\n };\n\n var overflowWrap = {\n name: 'overflow-wrap',\n initialValue: 'normal',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, overflow) {\n switch (overflow) {\n case 'break-word':\n return \"break-word\" /* BREAK_WORD */;\n case 'normal':\n default:\n return \"normal\" /* NORMAL */;\n }\n }\n };\n\n var paddingForSide = function (side) { return ({\n name: \"padding-\" + side,\n initialValue: '0',\n prefix: false,\n type: 3 /* TYPE_VALUE */,\n format: 'length-percentage'\n }); };\n var paddingTop = paddingForSide('top');\n var paddingRight = paddingForSide('right');\n var paddingBottom = paddingForSide('bottom');\n var paddingLeft = paddingForSide('left');\n\n var textAlign = {\n name: 'text-align',\n initialValue: 'left',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, textAlign) {\n switch (textAlign) {\n case 'right':\n return 2 /* RIGHT */;\n case 'center':\n case 'justify':\n return 1 /* CENTER */;\n case 'left':\n default:\n return 0 /* LEFT */;\n }\n }\n };\n\n var position = {\n name: 'position',\n initialValue: 'static',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, position) {\n switch (position) {\n case 'relative':\n return 1 /* RELATIVE */;\n case 'absolute':\n return 2 /* ABSOLUTE */;\n case 'fixed':\n return 3 /* FIXED */;\n case 'sticky':\n return 4 /* STICKY */;\n }\n return 0 /* STATIC */;\n }\n };\n\n var textShadow = {\n name: 'text-shadow',\n initialValue: 'none',\n type: 1 /* LIST */,\n prefix: false,\n parse: function (context, tokens) {\n if (tokens.length === 1 && isIdentWithValue(tokens[0], 'none')) {\n return [];\n }\n return parseFunctionArgs(tokens).map(function (values) {\n var shadow = {\n color: COLORS.TRANSPARENT,\n offsetX: ZERO_LENGTH,\n offsetY: ZERO_LENGTH,\n blur: ZERO_LENGTH\n };\n var c = 0;\n for (var i = 0; i < values.length; i++) {\n var token = values[i];\n if (isLength(token)) {\n if (c === 0) {\n shadow.offsetX = token;\n }\n else if (c === 1) {\n shadow.offsetY = token;\n }\n else {\n shadow.blur = token;\n }\n c++;\n }\n else {\n shadow.color = color$1.parse(context, token);\n }\n }\n return shadow;\n });\n }\n };\n\n var textTransform = {\n name: 'text-transform',\n initialValue: 'none',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, textTransform) {\n switch (textTransform) {\n case 'uppercase':\n return 2 /* UPPERCASE */;\n case 'lowercase':\n return 1 /* LOWERCASE */;\n case 'capitalize':\n return 3 /* CAPITALIZE */;\n }\n return 0 /* NONE */;\n }\n };\n\n var transform$1 = {\n name: 'transform',\n initialValue: 'none',\n prefix: true,\n type: 0 /* VALUE */,\n parse: function (_context, token) {\n if (token.type === 20 /* IDENT_TOKEN */ && token.value === 'none') {\n return null;\n }\n if (token.type === 18 /* FUNCTION */) {\n var transformFunction = SUPPORTED_TRANSFORM_FUNCTIONS[token.name];\n if (typeof transformFunction === 'undefined') {\n throw new Error(\"Attempting to parse an unsupported transform function \\\"\" + token.name + \"\\\"\");\n }\n return transformFunction(token.values);\n }\n return null;\n }\n };\n var matrix = function (args) {\n var values = args.filter(function (arg) { return arg.type === 17 /* NUMBER_TOKEN */; }).map(function (arg) { return arg.number; });\n return values.length === 6 ? values : null;\n };\n // doesn't support 3D transforms at the moment\n var matrix3d = function (args) {\n var values = args.filter(function (arg) { return arg.type === 17 /* NUMBER_TOKEN */; }).map(function (arg) { return arg.number; });\n var a1 = values[0], b1 = values[1]; values[2]; values[3]; var a2 = values[4], b2 = values[5]; values[6]; values[7]; values[8]; values[9]; values[10]; values[11]; var a4 = values[12], b4 = values[13]; values[14]; values[15];\n return values.length === 16 ? [a1, b1, a2, b2, a4, b4] : null;\n };\n var SUPPORTED_TRANSFORM_FUNCTIONS = {\n matrix: matrix,\n matrix3d: matrix3d\n };\n\n var DEFAULT_VALUE = {\n type: 16 /* PERCENTAGE_TOKEN */,\n number: 50,\n flags: FLAG_INTEGER\n };\n var DEFAULT = [DEFAULT_VALUE, DEFAULT_VALUE];\n var transformOrigin = {\n name: 'transform-origin',\n initialValue: '50% 50%',\n prefix: true,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n var origins = tokens.filter(isLengthPercentage);\n if (origins.length !== 2) {\n return DEFAULT;\n }\n return [origins[0], origins[1]];\n }\n };\n\n var visibility = {\n name: 'visible',\n initialValue: 'none',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, visibility) {\n switch (visibility) {\n case 'hidden':\n return 1 /* HIDDEN */;\n case 'collapse':\n return 2 /* COLLAPSE */;\n case 'visible':\n default:\n return 0 /* VISIBLE */;\n }\n }\n };\n\n var WORD_BREAK;\n (function (WORD_BREAK) {\n WORD_BREAK[\"NORMAL\"] = \"normal\";\n WORD_BREAK[\"BREAK_ALL\"] = \"break-all\";\n WORD_BREAK[\"KEEP_ALL\"] = \"keep-all\";\n })(WORD_BREAK || (WORD_BREAK = {}));\n var wordBreak = {\n name: 'word-break',\n initialValue: 'normal',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, wordBreak) {\n switch (wordBreak) {\n case 'break-all':\n return WORD_BREAK.BREAK_ALL;\n case 'keep-all':\n return WORD_BREAK.KEEP_ALL;\n case 'normal':\n default:\n return WORD_BREAK.NORMAL;\n }\n }\n };\n\n var zIndex = {\n name: 'z-index',\n initialValue: 'auto',\n prefix: false,\n type: 0 /* VALUE */,\n parse: function (_context, token) {\n if (token.type === 20 /* IDENT_TOKEN */) {\n return { auto: true, order: 0 };\n }\n if (isNumberToken(token)) {\n return { auto: false, order: token.number };\n }\n throw new Error(\"Invalid z-index number parsed\");\n }\n };\n\n var time = {\n name: 'time',\n parse: function (_context, value) {\n if (value.type === 15 /* DIMENSION_TOKEN */) {\n switch (value.unit.toLowerCase()) {\n case 's':\n return 1000 * value.number;\n case 'ms':\n return value.number;\n }\n }\n throw new Error(\"Unsupported time type\");\n }\n };\n\n var opacity = {\n name: 'opacity',\n initialValue: '1',\n type: 0 /* VALUE */,\n prefix: false,\n parse: function (_context, token) {\n if (isNumberToken(token)) {\n return token.number;\n }\n return 1;\n }\n };\n\n var textDecorationColor = {\n name: \"text-decoration-color\",\n initialValue: 'transparent',\n prefix: false,\n type: 3 /* TYPE_VALUE */,\n format: 'color'\n };\n\n var textDecorationLine = {\n name: 'text-decoration-line',\n initialValue: 'none',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n return tokens\n .filter(isIdentToken)\n .map(function (token) {\n switch (token.value) {\n case 'underline':\n return 1 /* UNDERLINE */;\n case 'overline':\n return 2 /* OVERLINE */;\n case 'line-through':\n return 3 /* LINE_THROUGH */;\n case 'none':\n return 4 /* BLINK */;\n }\n return 0 /* NONE */;\n })\n .filter(function (line) { return line !== 0 /* NONE */; });\n }\n };\n\n var fontFamily = {\n name: \"font-family\",\n initialValue: '',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n var accumulator = [];\n var results = [];\n tokens.forEach(function (token) {\n switch (token.type) {\n case 20 /* IDENT_TOKEN */:\n case 0 /* STRING_TOKEN */:\n accumulator.push(token.value);\n break;\n case 17 /* NUMBER_TOKEN */:\n accumulator.push(token.number.toString());\n break;\n case 4 /* COMMA_TOKEN */:\n results.push(accumulator.join(' '));\n accumulator.length = 0;\n break;\n }\n });\n if (accumulator.length) {\n results.push(accumulator.join(' '));\n }\n return results.map(function (result) { return (result.indexOf(' ') === -1 ? result : \"'\" + result + \"'\"); });\n }\n };\n\n var fontSize = {\n name: \"font-size\",\n initialValue: '0',\n prefix: false,\n type: 3 /* TYPE_VALUE */,\n format: 'length'\n };\n\n var fontWeight = {\n name: 'font-weight',\n initialValue: 'normal',\n type: 0 /* VALUE */,\n prefix: false,\n parse: function (_context, token) {\n if (isNumberToken(token)) {\n return token.number;\n }\n if (isIdentToken(token)) {\n switch (token.value) {\n case 'bold':\n return 700;\n case 'normal':\n default:\n return 400;\n }\n }\n return 400;\n }\n };\n\n var fontVariant = {\n name: 'font-variant',\n initialValue: 'none',\n type: 1 /* LIST */,\n prefix: false,\n parse: function (_context, tokens) {\n return tokens.filter(isIdentToken).map(function (token) { return token.value; });\n }\n };\n\n var fontStyle = {\n name: 'font-style',\n initialValue: 'normal',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, overflow) {\n switch (overflow) {\n case 'oblique':\n return \"oblique\" /* OBLIQUE */;\n case 'italic':\n return \"italic\" /* ITALIC */;\n case 'normal':\n default:\n return \"normal\" /* NORMAL */;\n }\n }\n };\n\n var contains = function (bit, value) { return (bit & value) !== 0; };\n\n var content = {\n name: 'content',\n initialValue: 'none',\n type: 1 /* LIST */,\n prefix: false,\n parse: function (_context, tokens) {\n if (tokens.length === 0) {\n return [];\n }\n var first = tokens[0];\n if (first.type === 20 /* IDENT_TOKEN */ && first.value === 'none') {\n return [];\n }\n return tokens;\n }\n };\n\n var counterIncrement = {\n name: 'counter-increment',\n initialValue: 'none',\n prefix: true,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n if (tokens.length === 0) {\n return null;\n }\n var first = tokens[0];\n if (first.type === 20 /* IDENT_TOKEN */ && first.value === 'none') {\n return null;\n }\n var increments = [];\n var filtered = tokens.filter(nonWhiteSpace);\n for (var i = 0; i < filtered.length; i++) {\n var counter = filtered[i];\n var next = filtered[i + 1];\n if (counter.type === 20 /* IDENT_TOKEN */) {\n var increment = next && isNumberToken(next) ? next.number : 1;\n increments.push({ counter: counter.value, increment: increment });\n }\n }\n return increments;\n }\n };\n\n var counterReset = {\n name: 'counter-reset',\n initialValue: 'none',\n prefix: true,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n if (tokens.length === 0) {\n return [];\n }\n var resets = [];\n var filtered = tokens.filter(nonWhiteSpace);\n for (var i = 0; i < filtered.length; i++) {\n var counter = filtered[i];\n var next = filtered[i + 1];\n if (isIdentToken(counter) && counter.value !== 'none') {\n var reset = next && isNumberToken(next) ? next.number : 0;\n resets.push({ counter: counter.value, reset: reset });\n }\n }\n return resets;\n }\n };\n\n var duration = {\n name: 'duration',\n initialValue: '0s',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (context, tokens) {\n return tokens.filter(isDimensionToken).map(function (token) { return time.parse(context, token); });\n }\n };\n\n var quotes = {\n name: 'quotes',\n initialValue: 'none',\n prefix: true,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n if (tokens.length === 0) {\n return null;\n }\n var first = tokens[0];\n if (first.type === 20 /* IDENT_TOKEN */ && first.value === 'none') {\n return null;\n }\n var quotes = [];\n var filtered = tokens.filter(isStringToken);\n if (filtered.length % 2 !== 0) {\n return null;\n }\n for (var i = 0; i < filtered.length; i += 2) {\n var open_1 = filtered[i].value;\n var close_1 = filtered[i + 1].value;\n quotes.push({ open: open_1, close: close_1 });\n }\n return quotes;\n }\n };\n var getQuote = function (quotes, depth, open) {\n if (!quotes) {\n return '';\n }\n var quote = quotes[Math.min(depth, quotes.length - 1)];\n if (!quote) {\n return '';\n }\n return open ? quote.open : quote.close;\n };\n\n var boxShadow = {\n name: 'box-shadow',\n initialValue: 'none',\n type: 1 /* LIST */,\n prefix: false,\n parse: function (context, tokens) {\n if (tokens.length === 1 && isIdentWithValue(tokens[0], 'none')) {\n return [];\n }\n return parseFunctionArgs(tokens).map(function (values) {\n var shadow = {\n color: 0x000000ff,\n offsetX: ZERO_LENGTH,\n offsetY: ZERO_LENGTH,\n blur: ZERO_LENGTH,\n spread: ZERO_LENGTH,\n inset: false\n };\n var c = 0;\n for (var i = 0; i < values.length; i++) {\n var token = values[i];\n if (isIdentWithValue(token, 'inset')) {\n shadow.inset = true;\n }\n else if (isLength(token)) {\n if (c === 0) {\n shadow.offsetX = token;\n }\n else if (c === 1) {\n shadow.offsetY = token;\n }\n else if (c === 2) {\n shadow.blur = token;\n }\n else {\n shadow.spread = token;\n }\n c++;\n }\n else {\n shadow.color = color$1.parse(context, token);\n }\n }\n return shadow;\n });\n }\n };\n\n var paintOrder = {\n name: 'paint-order',\n initialValue: 'normal',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n var DEFAULT_VALUE = [0 /* FILL */, 1 /* STROKE */, 2 /* MARKERS */];\n var layers = [];\n tokens.filter(isIdentToken).forEach(function (token) {\n switch (token.value) {\n case 'stroke':\n layers.push(1 /* STROKE */);\n break;\n case 'fill':\n layers.push(0 /* FILL */);\n break;\n case 'markers':\n layers.push(2 /* MARKERS */);\n break;\n }\n });\n DEFAULT_VALUE.forEach(function (value) {\n if (layers.indexOf(value) === -1) {\n layers.push(value);\n }\n });\n return layers;\n }\n };\n\n var webkitTextStrokeColor = {\n name: \"-webkit-text-stroke-color\",\n initialValue: 'currentcolor',\n prefix: false,\n type: 3 /* TYPE_VALUE */,\n format: 'color'\n };\n\n var webkitTextStrokeWidth = {\n name: \"-webkit-text-stroke-width\",\n initialValue: '0',\n type: 0 /* VALUE */,\n prefix: false,\n parse: function (_context, token) {\n if (isDimensionToken(token)) {\n return token.number;\n }\n return 0;\n }\n };\n\n var CSSParsedDeclaration = /** @class */ (function () {\n function CSSParsedDeclaration(context, declaration) {\n var _a, _b;\n this.animationDuration = parse(context, duration, declaration.animationDuration);\n this.backgroundClip = parse(context, backgroundClip, declaration.backgroundClip);\n this.backgroundColor = parse(context, backgroundColor, declaration.backgroundColor);\n this.backgroundImage = parse(context, backgroundImage, declaration.backgroundImage);\n this.backgroundOrigin = parse(context, backgroundOrigin, declaration.backgroundOrigin);\n this.backgroundPosition = parse(context, backgroundPosition, declaration.backgroundPosition);\n this.backgroundRepeat = parse(context, backgroundRepeat, declaration.backgroundRepeat);\n this.backgroundSize = parse(context, backgroundSize, declaration.backgroundSize);\n this.borderTopColor = parse(context, borderTopColor, declaration.borderTopColor);\n this.borderRightColor = parse(context, borderRightColor, declaration.borderRightColor);\n this.borderBottomColor = parse(context, borderBottomColor, declaration.borderBottomColor);\n this.borderLeftColor = parse(context, borderLeftColor, declaration.borderLeftColor);\n this.borderTopLeftRadius = parse(context, borderTopLeftRadius, declaration.borderTopLeftRadius);\n this.borderTopRightRadius = parse(context, borderTopRightRadius, declaration.borderTopRightRadius);\n this.borderBottomRightRadius = parse(context, borderBottomRightRadius, declaration.borderBottomRightRadius);\n this.borderBottomLeftRadius = parse(context, borderBottomLeftRadius, declaration.borderBottomLeftRadius);\n this.borderTopStyle = parse(context, borderTopStyle, declaration.borderTopStyle);\n this.borderRightStyle = parse(context, borderRightStyle, declaration.borderRightStyle);\n this.borderBottomStyle = parse(context, borderBottomStyle, declaration.borderBottomStyle);\n this.borderLeftStyle = parse(context, borderLeftStyle, declaration.borderLeftStyle);\n this.borderTopWidth = parse(context, borderTopWidth, declaration.borderTopWidth);\n this.borderRightWidth = parse(context, borderRightWidth, declaration.borderRightWidth);\n this.borderBottomWidth = parse(context, borderBottomWidth, declaration.borderBottomWidth);\n this.borderLeftWidth = parse(context, borderLeftWidth, declaration.borderLeftWidth);\n this.boxShadow = parse(context, boxShadow, declaration.boxShadow);\n this.color = parse(context, color, declaration.color);\n this.direction = parse(context, direction, declaration.direction);\n this.display = parse(context, display, declaration.display);\n this.float = parse(context, float, declaration.cssFloat);\n this.fontFamily = parse(context, fontFamily, declaration.fontFamily);\n this.fontSize = parse(context, fontSize, declaration.fontSize);\n this.fontStyle = parse(context, fontStyle, declaration.fontStyle);\n this.fontVariant = parse(context, fontVariant, declaration.fontVariant);\n this.fontWeight = parse(context, fontWeight, declaration.fontWeight);\n this.letterSpacing = parse(context, letterSpacing, declaration.letterSpacing);\n this.lineBreak = parse(context, lineBreak, declaration.lineBreak);\n this.lineHeight = parse(context, lineHeight, declaration.lineHeight);\n this.listStyleImage = parse(context, listStyleImage, declaration.listStyleImage);\n this.listStylePosition = parse(context, listStylePosition, declaration.listStylePosition);\n this.listStyleType = parse(context, listStyleType, declaration.listStyleType);\n this.marginTop = parse(context, marginTop, declaration.marginTop);\n this.marginRight = parse(context, marginRight, declaration.marginRight);\n this.marginBottom = parse(context, marginBottom, declaration.marginBottom);\n this.marginLeft = parse(context, marginLeft, declaration.marginLeft);\n this.opacity = parse(context, opacity, declaration.opacity);\n var overflowTuple = parse(context, overflow, declaration.overflow);\n this.overflowX = overflowTuple[0];\n this.overflowY = overflowTuple[overflowTuple.length > 1 ? 1 : 0];\n this.overflowWrap = parse(context, overflowWrap, declaration.overflowWrap);\n this.paddingTop = parse(context, paddingTop, declaration.paddingTop);\n this.paddingRight = parse(context, paddingRight, declaration.paddingRight);\n this.paddingBottom = parse(context, paddingBottom, declaration.paddingBottom);\n this.paddingLeft = parse(context, paddingLeft, declaration.paddingLeft);\n this.paintOrder = parse(context, paintOrder, declaration.paintOrder);\n this.position = parse(context, position, declaration.position);\n this.textAlign = parse(context, textAlign, declaration.textAlign);\n this.textDecorationColor = parse(context, textDecorationColor, (_a = declaration.textDecorationColor) !== null && _a !== void 0 ? _a : declaration.color);\n this.textDecorationLine = parse(context, textDecorationLine, (_b = declaration.textDecorationLine) !== null && _b !== void 0 ? _b : declaration.textDecoration);\n this.textShadow = parse(context, textShadow, declaration.textShadow);\n this.textTransform = parse(context, textTransform, declaration.textTransform);\n this.transform = parse(context, transform$1, declaration.transform);\n this.transformOrigin = parse(context, transformOrigin, declaration.transformOrigin);\n this.visibility = parse(context, visibility, declaration.visibility);\n this.webkitTextStrokeColor = parse(context, webkitTextStrokeColor, declaration.webkitTextStrokeColor);\n this.webkitTextStrokeWidth = parse(context, webkitTextStrokeWidth, declaration.webkitTextStrokeWidth);\n this.wordBreak = parse(context, wordBreak, declaration.wordBreak);\n this.zIndex = parse(context, zIndex, declaration.zIndex);\n }\n CSSParsedDeclaration.prototype.isVisible = function () {\n return this.display > 0 && this.opacity > 0 && this.visibility === 0 /* VISIBLE */;\n };\n CSSParsedDeclaration.prototype.isTransparent = function () {\n return isTransparent(this.backgroundColor);\n };\n CSSParsedDeclaration.prototype.isTransformed = function () {\n return this.transform !== null;\n };\n CSSParsedDeclaration.prototype.isPositioned = function () {\n return this.position !== 0 /* STATIC */;\n };\n CSSParsedDeclaration.prototype.isPositionedWithZIndex = function () {\n return this.isPositioned() && !this.zIndex.auto;\n };\n CSSParsedDeclaration.prototype.isFloating = function () {\n return this.float !== 0 /* NONE */;\n };\n CSSParsedDeclaration.prototype.isInlineLevel = function () {\n return (contains(this.display, 4 /* INLINE */) ||\n contains(this.display, 33554432 /* INLINE_BLOCK */) ||\n contains(this.display, 268435456 /* INLINE_FLEX */) ||\n contains(this.display, 536870912 /* INLINE_GRID */) ||\n contains(this.display, 67108864 /* INLINE_LIST_ITEM */) ||\n contains(this.display, 134217728 /* INLINE_TABLE */));\n };\n return CSSParsedDeclaration;\n }());\n var CSSParsedPseudoDeclaration = /** @class */ (function () {\n function CSSParsedPseudoDeclaration(context, declaration) {\n this.content = parse(context, content, declaration.content);\n this.quotes = parse(context, quotes, declaration.quotes);\n }\n return CSSParsedPseudoDeclaration;\n }());\n var CSSParsedCounterDeclaration = /** @class */ (function () {\n function CSSParsedCounterDeclaration(context, declaration) {\n this.counterIncrement = parse(context, counterIncrement, declaration.counterIncrement);\n this.counterReset = parse(context, counterReset, declaration.counterReset);\n }\n return CSSParsedCounterDeclaration;\n }());\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var parse = function (context, descriptor, style) {\n var tokenizer = new Tokenizer();\n var value = style !== null && typeof style !== 'undefined' ? style.toString() : descriptor.initialValue;\n tokenizer.write(value);\n var parser = new Parser(tokenizer.read());\n switch (descriptor.type) {\n case 2 /* IDENT_VALUE */:\n var token = parser.parseComponentValue();\n return descriptor.parse(context, isIdentToken(token) ? token.value : descriptor.initialValue);\n case 0 /* VALUE */:\n return descriptor.parse(context, parser.parseComponentValue());\n case 1 /* LIST */:\n return descriptor.parse(context, parser.parseComponentValues());\n case 4 /* TOKEN_VALUE */:\n return parser.parseComponentValue();\n case 3 /* TYPE_VALUE */:\n switch (descriptor.format) {\n case 'angle':\n return angle.parse(context, parser.parseComponentValue());\n case 'color':\n return color$1.parse(context, parser.parseComponentValue());\n case 'image':\n return image.parse(context, parser.parseComponentValue());\n case 'length':\n var length_1 = parser.parseComponentValue();\n return isLength(length_1) ? length_1 : ZERO_LENGTH;\n case 'length-percentage':\n var value_1 = parser.parseComponentValue();\n return isLengthPercentage(value_1) ? value_1 : ZERO_LENGTH;\n case 'time':\n return time.parse(context, parser.parseComponentValue());\n }\n break;\n }\n };\n\n var elementDebuggerAttribute = 'data-html2canvas-debug';\n var getElementDebugType = function (element) {\n var attribute = element.getAttribute(elementDebuggerAttribute);\n switch (attribute) {\n case 'all':\n return 1 /* ALL */;\n case 'clone':\n return 2 /* CLONE */;\n case 'parse':\n return 3 /* PARSE */;\n case 'render':\n return 4 /* RENDER */;\n default:\n return 0 /* NONE */;\n }\n };\n var isDebugging = function (element, type) {\n var elementType = getElementDebugType(element);\n return elementType === 1 /* ALL */ || type === elementType;\n };\n\n var ElementContainer = /** @class */ (function () {\n function ElementContainer(context, element) {\n this.context = context;\n this.textNodes = [];\n this.elements = [];\n this.flags = 0;\n if (isDebugging(element, 3 /* PARSE */)) {\n debugger;\n }\n this.styles = new CSSParsedDeclaration(context, window.getComputedStyle(element, null));\n if (isHTMLElementNode(element)) {\n if (this.styles.animationDuration.some(function (duration) { return duration > 0; })) {\n element.style.animationDuration = '0s';\n }\n if (this.styles.transform !== null) {\n // getBoundingClientRect takes transforms into account\n element.style.transform = 'none';\n }\n }\n this.bounds = parseBounds(this.context, element);\n if (isDebugging(element, 4 /* RENDER */)) {\n this.flags |= 16 /* DEBUG_RENDER */;\n }\n }\n return ElementContainer;\n }());\n\n /*\n * text-segmentation 1.0.3 <https://github.com/niklasvh/text-segmentation>\n * Copyright (c) 2022 Niklas von Hertzen <https://hertzen.com>\n * Released under MIT License\n */\n var base64 = 'AAAAAAAAAAAAEA4AGBkAAFAaAAACAAAAAAAIABAAGAAwADgACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAAQABIAEQATAAIABAACAAQAAgAEAAIABAAVABcAAgAEAAIABAACAAQAGAAaABwAHgAgACIAI4AlgAIABAAmwCjAKgAsAC2AL4AvQDFAMoA0gBPAVYBWgEIAAgACACMANoAYgFkAWwBdAF8AX0BhQGNAZUBlgGeAaMBlQGWAasBswF8AbsBwwF0AcsBYwHTAQgA2wG/AOMBdAF8AekB8QF0AfkB+wHiAHQBfAEIAAMC5gQIAAsCEgIIAAgAFgIeAggAIgIpAggAMQI5AkACygEIAAgASAJQAlgCYAIIAAgACAAKBQoFCgUTBRMFGQUrBSsFCAAIAAgACAAIAAgACAAIAAgACABdAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABoAmgCrwGvAQgAbgJ2AggAHgEIAAgACADnAXsCCAAIAAgAgwIIAAgACAAIAAgACACKAggAkQKZAggAPADJAAgAoQKkAqwCsgK6AsICCADJAggA0AIIAAgACAAIANYC3gIIAAgACAAIAAgACABAAOYCCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAkASoB+QIEAAgACAA8AEMCCABCBQgACABJBVAFCAAIAAgACAAIAAgACAAIAAgACABTBVoFCAAIAFoFCABfBWUFCAAIAAgACAAIAAgAbQUIAAgACAAIAAgACABzBXsFfQWFBYoFigWKBZEFigWKBYoFmAWfBaYFrgWxBbkFCAAIAAgACAAIAAgACAAIAAgACAAIAMEFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAMgFCADQBQgACAAIAAgACAAIAAgACAAIAAgACAAIAO4CCAAIAAgAiQAIAAgACABAAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAD0AggACAD8AggACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIANYFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAMDvwAIAAgAJAIIAAgACAAIAAgACAAIAAgACwMTAwgACAB9BOsEGwMjAwgAKwMyAwsFYgE3A/MEPwMIAEUDTQNRAwgAWQOsAGEDCAAIAAgACAAIAAgACABpAzQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFIQUoBSwFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABtAwgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABMAEwACAAIAAgACAAIABgACAAIAAgACAC/AAgACAAyAQgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACAAIAAwAAgACAAIAAgACAAIAAgACAAIAAAARABIAAgACAAIABQASAAIAAgAIABwAEAAjgCIABsAqAC2AL0AigDQAtwC+IJIQqVAZUBWQqVAZUBlQGVAZUBlQGrC5UBlQGVAZUBlQGVAZUBlQGVAXsKlQGVAbAK6wsrDGUMpQzlDJUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAfAKAAuZA64AtwCJALoC6ADwAAgAuACgA/oEpgO6AqsD+AAIAAgAswMIAAgACAAIAIkAuwP5AfsBwwPLAwgACAAIAAgACADRA9kDCAAIAOED6QMIAAgACAAIAAgACADuA/YDCAAIAP4DyQAIAAgABgQIAAgAXQAOBAgACAAIAAgACAAIABMECAAIAAgACAAIAAgACAD8AAQBCAAIAAgAGgQiBCoECAExBAgAEAEIAAgACAAIAAgACAAIAAgACAAIAAgACAA4BAgACABABEYECAAIAAgATAQYAQgAVAQIAAgACAAIAAgACAAIAAgACAAIAFoECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAOQEIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAB+BAcACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAEABhgSMBAgACAAIAAgAlAQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAwAEAAQABAADAAMAAwADAAQABAAEAAQABAAEAAQABHATAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAdQMIAAgACAAIAAgACAAIAMkACAAIAAgAfQMIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACFA4kDCAAIAAgACAAIAOcBCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAIcDCAAIAAgACAAIAAgACAAIAAgACAAIAJEDCAAIAAgACADFAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABgBAgAZgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAbAQCBXIECAAIAHkECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABAAJwEQACjBKoEsgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAC6BMIECAAIAAgACAAIAAgACABmBAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAxwQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAGYECAAIAAgAzgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBd0FXwUIAOIF6gXxBYoF3gT5BQAGCAaKBYoFigWKBYoFigWKBYoFigWKBYoFigXWBIoFigWKBYoFigWKBYoFigWKBYsFEAaKBYoFigWKBYoFigWKBRQGCACKBYoFigWKBQgACAAIANEECAAIABgGigUgBggAJgYIAC4GMwaKBYoF0wQ3Bj4GigWKBYoFigWKBYoFigWKBYoFigWKBYoFigUIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWLBf///////wQABAAEAAQABAAEAAQABAAEAAQAAwAEAAQAAgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAQADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUAAAAFAAUAAAAFAAUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAQAAAAUABQAFAAUABQAFAAAAAAAFAAUAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAFAAUAAQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAAABwAHAAcAAAAHAAcABwAFAAEAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAcABwAFAAUAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAQABAAAAAAAAAAAAAAAFAAUABQAFAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAHAAcAAAAHAAcAAAAAAAUABQAHAAUAAQAHAAEABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwABAAUABQAFAAUAAAAAAAAAAAAAAAEAAQABAAEAAQABAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABQANAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAABQAHAAUABQAFAAAAAAAAAAcABQAFAAUABQAFAAQABAAEAAQABAAEAAQABAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUAAAAFAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAUAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAcABwAFAAcABwAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUABwAHAAUABQAFAAUAAAAAAAcABwAAAAAABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAAAAAAAAAAABQAFAAAAAAAFAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAFAAUABQAFAAUAAAAFAAUABwAAAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABwAFAAUABQAFAAAAAAAHAAcAAAAAAAcABwAFAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAAAAAAAAAHAAcABwAAAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAUABQAFAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAHAAcABQAHAAcAAAAFAAcABwAAAAcABwAFAAUAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAcABwAFAAUABQAAAAUAAAAHAAcABwAHAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAHAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUAAAAFAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAUAAAAFAAUAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABwAFAAUABQAFAAUABQAAAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABQAFAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAFAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAHAAUABQAFAAUABQAFAAUABwAHAAcABwAHAAcABwAHAAUABwAHAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABwAHAAcABwAFAAUABwAHAAcAAAAAAAAAAAAHAAcABQAHAAcABwAHAAcABwAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAUABQAFAAUABQAFAAUAAAAFAAAABQAAAAAABQAFAAUABQAFAAUABQAFAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAUABQAFAAUABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABwAFAAcABwAHAAcABwAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAUABQAFAAUABwAHAAUABQAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABQAFAAcABwAHAAUABwAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAcABQAFAAUABQAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAAAAAABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAUABQAHAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAFAAUABQAFAAcABwAFAAUABwAHAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAcABwAFAAUABwAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABQAAAAAABQAFAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAcABwAAAAAAAAAAAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAcABwAFAAcABwAAAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAFAAUABQAAAAUABQAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABwAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAHAAcABQAHAAUABQAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAAABwAHAAAAAAAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAFAAUABwAFAAcABwAFAAcABQAFAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAAAAAABwAHAAcABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAFAAcABwAFAAUABQAFAAUABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAUABQAFAAcABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABQAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAAAAAAFAAUABwAHAAcABwAFAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAHAAUABQAFAAUABQAFAAUABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAABQAAAAUABQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAHAAcAAAAFAAUAAAAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABQAFAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAABQAFAAUABQAFAAUABQAAAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAFAAUABQAFAAUADgAOAA4ADgAOAA4ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAMAAwADAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAAAAAAAAAAAAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAAAAAAAAAAAAsADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwACwAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAADgAOAA4AAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAAAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4AAAAOAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAAAAAAAAAAAA4AAAAOAAAAAAAAAAAADgAOAA4AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAA=';\n\n /*\n * utrie 1.0.2 <https://github.com/niklasvh/utrie>\n * Copyright (c) 2022 Niklas von Hertzen <https://hertzen.com>\n * Released under MIT License\n */\n var chars$1 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n // Use a lookup table to find the index.\n var lookup$1 = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\n for (var i$1 = 0; i$1 < chars$1.length; i$1++) {\n lookup$1[chars$1.charCodeAt(i$1)] = i$1;\n }\n var decode = function (base64) {\n var bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;\n if (base64[base64.length - 1] === '=') {\n bufferLength--;\n if (base64[base64.length - 2] === '=') {\n bufferLength--;\n }\n }\n var buffer = typeof ArrayBuffer !== 'undefined' &&\n typeof Uint8Array !== 'undefined' &&\n typeof Uint8Array.prototype.slice !== 'undefined'\n ? new ArrayBuffer(bufferLength)\n : new Array(bufferLength);\n var bytes = Array.isArray(buffer) ? buffer : new Uint8Array(buffer);\n for (i = 0; i < len; i += 4) {\n encoded1 = lookup$1[base64.charCodeAt(i)];\n encoded2 = lookup$1[base64.charCodeAt(i + 1)];\n encoded3 = lookup$1[base64.charCodeAt(i + 2)];\n encoded4 = lookup$1[base64.charCodeAt(i + 3)];\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n return buffer;\n };\n var polyUint16Array = function (buffer) {\n var length = buffer.length;\n var bytes = [];\n for (var i = 0; i < length; i += 2) {\n bytes.push((buffer[i + 1] << 8) | buffer[i]);\n }\n return bytes;\n };\n var polyUint32Array = function (buffer) {\n var length = buffer.length;\n var bytes = [];\n for (var i = 0; i < length; i += 4) {\n bytes.push((buffer[i + 3] << 24) | (buffer[i + 2] << 16) | (buffer[i + 1] << 8) | buffer[i]);\n }\n return bytes;\n };\n\n /** Shift size for getting the index-2 table offset. */\n var UTRIE2_SHIFT_2 = 5;\n /** Shift size for getting the index-1 table offset. */\n var UTRIE2_SHIFT_1 = 6 + 5;\n /**\n * Shift size for shifting left the index array values.\n * Increases possible data size with 16-bit index values at the cost\n * of compactability.\n * This requires data blocks to be aligned by UTRIE2_DATA_GRANULARITY.\n */\n var UTRIE2_INDEX_SHIFT = 2;\n /**\n * Difference between the two shift sizes,\n * for getting an index-1 offset from an index-2 offset. 6=11-5\n */\n var UTRIE2_SHIFT_1_2 = UTRIE2_SHIFT_1 - UTRIE2_SHIFT_2;\n /**\n * The part of the index-2 table for U+D800..U+DBFF stores values for\n * lead surrogate code _units_ not code _points_.\n * Values for lead surrogate code _points_ are indexed with this portion of the table.\n * Length=32=0x20=0x400>>UTRIE2_SHIFT_2. (There are 1024=0x400 lead surrogates.)\n */\n var UTRIE2_LSCP_INDEX_2_OFFSET = 0x10000 >> UTRIE2_SHIFT_2;\n /** Number of entries in a data block. 32=0x20 */\n var UTRIE2_DATA_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_2;\n /** Mask for getting the lower bits for the in-data-block offset. */\n var UTRIE2_DATA_MASK = UTRIE2_DATA_BLOCK_LENGTH - 1;\n var UTRIE2_LSCP_INDEX_2_LENGTH = 0x400 >> UTRIE2_SHIFT_2;\n /** Count the lengths of both BMP pieces. 2080=0x820 */\n var UTRIE2_INDEX_2_BMP_LENGTH = UTRIE2_LSCP_INDEX_2_OFFSET + UTRIE2_LSCP_INDEX_2_LENGTH;\n /**\n * The 2-byte UTF-8 version of the index-2 table follows at offset 2080=0x820.\n * Length 32=0x20 for lead bytes C0..DF, regardless of UTRIE2_SHIFT_2.\n */\n var UTRIE2_UTF8_2B_INDEX_2_OFFSET = UTRIE2_INDEX_2_BMP_LENGTH;\n var UTRIE2_UTF8_2B_INDEX_2_LENGTH = 0x800 >> 6; /* U+0800 is the first code point after 2-byte UTF-8 */\n /**\n * The index-1 table, only used for supplementary code points, at offset 2112=0x840.\n * Variable length, for code points up to highStart, where the last single-value range starts.\n * Maximum length 512=0x200=0x100000>>UTRIE2_SHIFT_1.\n * (For 0x100000 supplementary code points U+10000..U+10ffff.)\n *\n * The part of the index-2 table for supplementary code points starts\n * after this index-1 table.\n *\n * Both the index-1 table and the following part of the index-2 table\n * are omitted completely if there is only BMP data.\n */\n var UTRIE2_INDEX_1_OFFSET = UTRIE2_UTF8_2B_INDEX_2_OFFSET + UTRIE2_UTF8_2B_INDEX_2_LENGTH;\n /**\n * Number of index-1 entries for the BMP. 32=0x20\n * This part of the index-1 table is omitted from the serialized form.\n */\n var UTRIE2_OMITTED_BMP_INDEX_1_LENGTH = 0x10000 >> UTRIE2_SHIFT_1;\n /** Number of entries in an index-2 block. 64=0x40 */\n var UTRIE2_INDEX_2_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_1_2;\n /** Mask for getting the lower bits for the in-index-2-block offset. */\n var UTRIE2_INDEX_2_MASK = UTRIE2_INDEX_2_BLOCK_LENGTH - 1;\n var slice16 = function (view, start, end) {\n if (view.slice) {\n return view.slice(start, end);\n }\n return new Uint16Array(Array.prototype.slice.call(view, start, end));\n };\n var slice32 = function (view, start, end) {\n if (view.slice) {\n return view.slice(start, end);\n }\n return new Uint32Array(Array.prototype.slice.call(view, start, end));\n };\n var createTrieFromBase64 = function (base64, _byteLength) {\n var buffer = decode(base64);\n var view32 = Array.isArray(buffer) ? polyUint32Array(buffer) : new Uint32Array(buffer);\n var view16 = Array.isArray(buffer) ? polyUint16Array(buffer) : new Uint16Array(buffer);\n var headerLength = 24;\n var index = slice16(view16, headerLength / 2, view32[4] / 2);\n var data = view32[5] === 2\n ? slice16(view16, (headerLength + view32[4]) / 2)\n : slice32(view32, Math.ceil((headerLength + view32[4]) / 4));\n return new Trie(view32[0], view32[1], view32[2], view32[3], index, data);\n };\n var Trie = /** @class */ (function () {\n function Trie(initialValue, errorValue, highStart, highValueIndex, index, data) {\n this.initialValue = initialValue;\n this.errorValue = errorValue;\n this.highStart = highStart;\n this.highValueIndex = highValueIndex;\n this.index = index;\n this.data = data;\n }\n /**\n * Get the value for a code point as stored in the Trie.\n *\n * @param codePoint the code point\n * @return the value\n */\n Trie.prototype.get = function (codePoint) {\n var ix;\n if (codePoint >= 0) {\n if (codePoint < 0x0d800 || (codePoint > 0x0dbff && codePoint <= 0x0ffff)) {\n // Ordinary BMP code point, excluding leading surrogates.\n // BMP uses a single level lookup. BMP index starts at offset 0 in the Trie2 index.\n // 16 bit data is stored in the index array itself.\n ix = this.index[codePoint >> UTRIE2_SHIFT_2];\n ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK);\n return this.data[ix];\n }\n if (codePoint <= 0xffff) {\n // Lead Surrogate Code Point. A Separate index section is stored for\n // lead surrogate code units and code points.\n // The main index has the code unit data.\n // For this function, we need the code point data.\n // Note: this expression could be refactored for slightly improved efficiency, but\n // surrogate code points will be so rare in practice that it's not worth it.\n ix = this.index[UTRIE2_LSCP_INDEX_2_OFFSET + ((codePoint - 0xd800) >> UTRIE2_SHIFT_2)];\n ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK);\n return this.data[ix];\n }\n if (codePoint < this.highStart) {\n // Supplemental code point, use two-level lookup.\n ix = UTRIE2_INDEX_1_OFFSET - UTRIE2_OMITTED_BMP_INDEX_1_LENGTH + (codePoint >> UTRIE2_SHIFT_1);\n ix = this.index[ix];\n ix += (codePoint >> UTRIE2_SHIFT_2) & UTRIE2_INDEX_2_MASK;\n ix = this.index[ix];\n ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK);\n return this.data[ix];\n }\n if (codePoint <= 0x10ffff) {\n return this.data[this.highValueIndex];\n }\n }\n // Fall through. The code point is outside of the legal range of 0..0x10ffff.\n return this.errorValue;\n };\n return Trie;\n }());\n\n /*\n * base64-arraybuffer 1.0.2 <https://github.com/niklasvh/base64-arraybuffer>\n * Copyright (c) 2022 Niklas von Hertzen <https://hertzen.com>\n * Released under MIT License\n */\n var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n // Use a lookup table to find the index.\n var lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\n for (var i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n }\n\n var Prepend = 1;\n var CR = 2;\n var LF = 3;\n var Control = 4;\n var Extend = 5;\n var SpacingMark = 7;\n var L = 8;\n var V = 9;\n var T = 10;\n var LV = 11;\n var LVT = 12;\n var ZWJ = 13;\n var Extended_Pictographic = 14;\n var RI = 15;\n var toCodePoints = function (str) {\n var codePoints = [];\n var i = 0;\n var length = str.length;\n while (i < length) {\n var value = str.charCodeAt(i++);\n if (value >= 0xd800 && value <= 0xdbff && i < length) {\n var extra = str.charCodeAt(i++);\n if ((extra & 0xfc00) === 0xdc00) {\n codePoints.push(((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000);\n }\n else {\n codePoints.push(value);\n i--;\n }\n }\n else {\n codePoints.push(value);\n }\n }\n return codePoints;\n };\n var fromCodePoint = function () {\n var codePoints = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n codePoints[_i] = arguments[_i];\n }\n if (String.fromCodePoint) {\n return String.fromCodePoint.apply(String, codePoints);\n }\n var length = codePoints.length;\n if (!length) {\n return '';\n }\n var codeUnits = [];\n var index = -1;\n var result = '';\n while (++index < length) {\n var codePoint = codePoints[index];\n if (codePoint <= 0xffff) {\n codeUnits.push(codePoint);\n }\n else {\n codePoint -= 0x10000;\n codeUnits.push((codePoint >> 10) + 0xd800, (codePoint % 0x400) + 0xdc00);\n }\n if (index + 1 === length || codeUnits.length > 0x4000) {\n result += String.fromCharCode.apply(String, codeUnits);\n codeUnits.length = 0;\n }\n }\n return result;\n };\n var UnicodeTrie = createTrieFromBase64(base64);\n var BREAK_NOT_ALLOWED = '×';\n var BREAK_ALLOWED = '÷';\n var codePointToClass = function (codePoint) { return UnicodeTrie.get(codePoint); };\n var _graphemeBreakAtIndex = function (_codePoints, classTypes, index) {\n var prevIndex = index - 2;\n var prev = classTypes[prevIndex];\n var current = classTypes[index - 1];\n var next = classTypes[index];\n // GB3 Do not break between a CR and LF\n if (current === CR && next === LF) {\n return BREAK_NOT_ALLOWED;\n }\n // GB4 Otherwise, break before and after controls.\n if (current === CR || current === LF || current === Control) {\n return BREAK_ALLOWED;\n }\n // GB5\n if (next === CR || next === LF || next === Control) {\n return BREAK_ALLOWED;\n }\n // Do not break Hangul syllable sequences.\n // GB6\n if (current === L && [L, V, LV, LVT].indexOf(next) !== -1) {\n return BREAK_NOT_ALLOWED;\n }\n // GB7\n if ((current === LV || current === V) && (next === V || next === T)) {\n return BREAK_NOT_ALLOWED;\n }\n // GB8\n if ((current === LVT || current === T) && next === T) {\n return BREAK_NOT_ALLOWED;\n }\n // GB9 Do not break before extending characters or ZWJ.\n if (next === ZWJ || next === Extend) {\n return BREAK_NOT_ALLOWED;\n }\n // Do not break before SpacingMarks, or after Prepend characters.\n // GB9a\n if (next === SpacingMark) {\n return BREAK_NOT_ALLOWED;\n }\n // GB9a\n if (current === Prepend) {\n return BREAK_NOT_ALLOWED;\n }\n // GB11 Do not break within emoji modifier sequences or emoji zwj sequences.\n if (current === ZWJ && next === Extended_Pictographic) {\n while (prev === Extend) {\n prev = classTypes[--prevIndex];\n }\n if (prev === Extended_Pictographic) {\n return BREAK_NOT_ALLOWED;\n }\n }\n // GB12 Do not break within emoji flag sequences.\n // That is, do not break between regional indicator (RI) symbols\n // if there is an odd number of RI characters before the break point.\n if (current === RI && next === RI) {\n var countRI = 0;\n while (prev === RI) {\n countRI++;\n prev = classTypes[--prevIndex];\n }\n if (countRI % 2 === 0) {\n return BREAK_NOT_ALLOWED;\n }\n }\n return BREAK_ALLOWED;\n };\n var GraphemeBreaker = function (str) {\n var codePoints = toCodePoints(str);\n var length = codePoints.length;\n var index = 0;\n var lastEnd = 0;\n var classTypes = codePoints.map(codePointToClass);\n return {\n next: function () {\n if (index >= length) {\n return { done: true, value: null };\n }\n var graphemeBreak = BREAK_NOT_ALLOWED;\n while (index < length &&\n (graphemeBreak = _graphemeBreakAtIndex(codePoints, classTypes, ++index)) === BREAK_NOT_ALLOWED) { }\n if (graphemeBreak !== BREAK_NOT_ALLOWED || index === length) {\n var value = fromCodePoint.apply(null, codePoints.slice(lastEnd, index));\n lastEnd = index;\n return { value: value, done: false };\n }\n return { done: true, value: null };\n },\n };\n };\n var splitGraphemes = function (str) {\n var breaker = GraphemeBreaker(str);\n var graphemes = [];\n var bk;\n while (!(bk = breaker.next()).done) {\n if (bk.value) {\n graphemes.push(bk.value.slice());\n }\n }\n return graphemes;\n };\n\n var testRangeBounds = function (document) {\n var TEST_HEIGHT = 123;\n if (document.createRange) {\n var range = document.createRange();\n if (range.getBoundingClientRect) {\n var testElement = document.createElement('boundtest');\n testElement.style.height = TEST_HEIGHT + \"px\";\n testElement.style.display = 'block';\n document.body.appendChild(testElement);\n range.selectNode(testElement);\n var rangeBounds = range.getBoundingClientRect();\n var rangeHeight = Math.round(rangeBounds.height);\n document.body.removeChild(testElement);\n if (rangeHeight === TEST_HEIGHT) {\n return true;\n }\n }\n }\n return false;\n };\n var testIOSLineBreak = function (document) {\n var testElement = document.createElement('boundtest');\n testElement.style.width = '50px';\n testElement.style.display = 'block';\n testElement.style.fontSize = '12px';\n testElement.style.letterSpacing = '0px';\n testElement.style.wordSpacing = '0px';\n document.body.appendChild(testElement);\n var range = document.createRange();\n testElement.innerHTML = typeof ''.repeat === 'function' ? '👨'.repeat(10) : '';\n var node = testElement.firstChild;\n var textList = toCodePoints$1(node.data).map(function (i) { return fromCodePoint$1(i); });\n var offset = 0;\n var prev = {};\n // ios 13 does not handle range getBoundingClientRect line changes correctly #2177\n var supports = textList.every(function (text, i) {\n range.setStart(node, offset);\n range.setEnd(node, offset + text.length);\n var rect = range.getBoundingClientRect();\n offset += text.length;\n var boundAhead = rect.x > prev.x || rect.y > prev.y;\n prev = rect;\n if (i === 0) {\n return true;\n }\n return boundAhead;\n });\n document.body.removeChild(testElement);\n return supports;\n };\n var testCORS = function () { return typeof new Image().crossOrigin !== 'undefined'; };\n var testResponseType = function () { return typeof new XMLHttpRequest().responseType === 'string'; };\n var testSVG = function (document) {\n var img = new Image();\n var canvas = document.createElement('canvas');\n var ctx = canvas.getContext('2d');\n if (!ctx) {\n return false;\n }\n img.src = \"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg'></svg>\";\n try {\n ctx.drawImage(img, 0, 0);\n canvas.toDataURL();\n }\n catch (e) {\n return false;\n }\n return true;\n };\n var isGreenPixel = function (data) {\n return data[0] === 0 && data[1] === 255 && data[2] === 0 && data[3] === 255;\n };\n var testForeignObject = function (document) {\n var canvas = document.createElement('canvas');\n var size = 100;\n canvas.width = size;\n canvas.height = size;\n var ctx = canvas.getContext('2d');\n if (!ctx) {\n return Promise.reject(false);\n }\n ctx.fillStyle = 'rgb(0, 255, 0)';\n ctx.fillRect(0, 0, size, size);\n var img = new Image();\n var greenImageSrc = canvas.toDataURL();\n img.src = greenImageSrc;\n var svg = createForeignObjectSVG(size, size, 0, 0, img);\n ctx.fillStyle = 'red';\n ctx.fillRect(0, 0, size, size);\n return loadSerializedSVG$1(svg)\n .then(function (img) {\n ctx.drawImage(img, 0, 0);\n var data = ctx.getImageData(0, 0, size, size).data;\n ctx.fillStyle = 'red';\n ctx.fillRect(0, 0, size, size);\n var node = document.createElement('div');\n node.style.backgroundImage = \"url(\" + greenImageSrc + \")\";\n node.style.height = size + \"px\";\n // Firefox 55 does not render inline <img /> tags\n return isGreenPixel(data)\n ? loadSerializedSVG$1(createForeignObjectSVG(size, size, 0, 0, node))\n : Promise.reject(false);\n })\n .then(function (img) {\n ctx.drawImage(img, 0, 0);\n // Edge does not render background-images\n return isGreenPixel(ctx.getImageData(0, 0, size, size).data);\n })\n .catch(function () { return false; });\n };\n var createForeignObjectSVG = function (width, height, x, y, node) {\n var xmlns = 'http://www.w3.org/2000/svg';\n var svg = document.createElementNS(xmlns, 'svg');\n var foreignObject = document.createElementNS(xmlns, 'foreignObject');\n svg.setAttributeNS(null, 'width', width.toString());\n svg.setAttributeNS(null, 'height', height.toString());\n foreignObject.setAttributeNS(null, 'width', '100%');\n foreignObject.setAttributeNS(null, 'height', '100%');\n foreignObject.setAttributeNS(null, 'x', x.toString());\n foreignObject.setAttributeNS(null, 'y', y.toString());\n foreignObject.setAttributeNS(null, 'externalResourcesRequired', 'true');\n svg.appendChild(foreignObject);\n foreignObject.appendChild(node);\n return svg;\n };\n var loadSerializedSVG$1 = function (svg) {\n return new Promise(function (resolve, reject) {\n var img = new Image();\n img.onload = function () { return resolve(img); };\n img.onerror = reject;\n img.src = \"data:image/svg+xml;charset=utf-8,\" + encodeURIComponent(new XMLSerializer().serializeToString(svg));\n });\n };\n var FEATURES = {\n get SUPPORT_RANGE_BOUNDS() {\n var value = testRangeBounds(document);\n Object.defineProperty(FEATURES, 'SUPPORT_RANGE_BOUNDS', { value: value });\n return value;\n },\n get SUPPORT_WORD_BREAKING() {\n var value = FEATURES.SUPPORT_RANGE_BOUNDS && testIOSLineBreak(document);\n Object.defineProperty(FEATURES, 'SUPPORT_WORD_BREAKING', { value: value });\n return value;\n },\n get SUPPORT_SVG_DRAWING() {\n var value = testSVG(document);\n Object.defineProperty(FEATURES, 'SUPPORT_SVG_DRAWING', { value: value });\n return value;\n },\n get SUPPORT_FOREIGNOBJECT_DRAWING() {\n var value = typeof Array.from === 'function' && typeof window.fetch === 'function'\n ? testForeignObject(document)\n : Promise.resolve(false);\n Object.defineProperty(FEATURES, 'SUPPORT_FOREIGNOBJECT_DRAWING', { value: value });\n return value;\n },\n get SUPPORT_CORS_IMAGES() {\n var value = testCORS();\n Object.defineProperty(FEATURES, 'SUPPORT_CORS_IMAGES', { value: value });\n return value;\n },\n get SUPPORT_RESPONSE_TYPE() {\n var value = testResponseType();\n Object.defineProperty(FEATURES, 'SUPPORT_RESPONSE_TYPE', { value: value });\n return value;\n },\n get SUPPORT_CORS_XHR() {\n var value = 'withCredentials' in new XMLHttpRequest();\n Object.defineProperty(FEATURES, 'SUPPORT_CORS_XHR', { value: value });\n return value;\n },\n get SUPPORT_NATIVE_TEXT_SEGMENTATION() {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = !!(typeof Intl !== 'undefined' && Intl.Segmenter);\n Object.defineProperty(FEATURES, 'SUPPORT_NATIVE_TEXT_SEGMENTATION', { value: value });\n return value;\n }\n };\n\n var TextBounds = /** @class */ (function () {\n function TextBounds(text, bounds) {\n this.text = text;\n this.bounds = bounds;\n }\n return TextBounds;\n }());\n var parseTextBounds = function (context, value, styles, node) {\n var textList = breakText(value, styles);\n var textBounds = [];\n var offset = 0;\n textList.forEach(function (text) {\n if (styles.textDecorationLine.length || text.trim().length > 0) {\n if (FEATURES.SUPPORT_RANGE_BOUNDS) {\n var clientRects = createRange(node, offset, text.length).getClientRects();\n if (clientRects.length > 1) {\n var subSegments = segmentGraphemes(text);\n var subOffset_1 = 0;\n subSegments.forEach(function (subSegment) {\n textBounds.push(new TextBounds(subSegment, Bounds.fromDOMRectList(context, createRange(node, subOffset_1 + offset, subSegment.length).getClientRects())));\n subOffset_1 += subSegment.length;\n });\n }\n else {\n textBounds.push(new TextBounds(text, Bounds.fromDOMRectList(context, clientRects)));\n }\n }\n else {\n var replacementNode = node.splitText(text.length);\n textBounds.push(new TextBounds(text, getWrapperBounds(context, node)));\n node = replacementNode;\n }\n }\n else if (!FEATURES.SUPPORT_RANGE_BOUNDS) {\n node = node.splitText(text.length);\n }\n offset += text.length;\n });\n return textBounds;\n };\n var getWrapperBounds = function (context, node) {\n var ownerDocument = node.ownerDocument;\n if (ownerDocument) {\n var wrapper = ownerDocument.createElement('html2canvaswrapper');\n wrapper.appendChild(node.cloneNode(true));\n var parentNode = node.parentNode;\n if (parentNode) {\n parentNode.replaceChild(wrapper, node);\n var bounds = parseBounds(context, wrapper);\n if (wrapper.firstChild) {\n parentNode.replaceChild(wrapper.firstChild, wrapper);\n }\n return bounds;\n }\n }\n return Bounds.EMPTY;\n };\n var createRange = function (node, offset, length) {\n var ownerDocument = node.ownerDocument;\n if (!ownerDocument) {\n throw new Error('Node has no owner document');\n }\n var range = ownerDocument.createRange();\n range.setStart(node, offset);\n range.setEnd(node, offset + length);\n return range;\n };\n var segmentGraphemes = function (value) {\n if (FEATURES.SUPPORT_NATIVE_TEXT_SEGMENTATION) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var segmenter = new Intl.Segmenter(void 0, { granularity: 'grapheme' });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return Array.from(segmenter.segment(value)).map(function (segment) { return segment.segment; });\n }\n return splitGraphemes(value);\n };\n var segmentWords = function (value, styles) {\n if (FEATURES.SUPPORT_NATIVE_TEXT_SEGMENTATION) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var segmenter = new Intl.Segmenter(void 0, {\n granularity: 'word'\n });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return Array.from(segmenter.segment(value)).map(function (segment) { return segment.segment; });\n }\n return breakWords(value, styles);\n };\n var breakText = function (value, styles) {\n return styles.letterSpacing !== 0 ? segmentGraphemes(value) : segmentWords(value, styles);\n };\n // https://drafts.csswg.org/css-text/#word-separator\n var wordSeparators = [0x0020, 0x00a0, 0x1361, 0x10100, 0x10101, 0x1039, 0x1091];\n var breakWords = function (str, styles) {\n var breaker = LineBreaker(str, {\n lineBreak: styles.lineBreak,\n wordBreak: styles.overflowWrap === \"break-word\" /* BREAK_WORD */ ? 'break-word' : styles.wordBreak\n });\n var words = [];\n var bk;\n var _loop_1 = function () {\n if (bk.value) {\n var value = bk.value.slice();\n var codePoints = toCodePoints$1(value);\n var word_1 = '';\n codePoints.forEach(function (codePoint) {\n if (wordSeparators.indexOf(codePoint) === -1) {\n word_1 += fromCodePoint$1(codePoint);\n }\n else {\n if (word_1.length) {\n words.push(word_1);\n }\n words.push(fromCodePoint$1(codePoint));\n word_1 = '';\n }\n });\n if (word_1.length) {\n words.push(word_1);\n }\n }\n };\n while (!(bk = breaker.next()).done) {\n _loop_1();\n }\n return words;\n };\n\n var TextContainer = /** @class */ (function () {\n function TextContainer(context, node, styles) {\n this.text = transform(node.data, styles.textTransform);\n this.textBounds = parseTextBounds(context, this.text, styles, node);\n }\n return TextContainer;\n }());\n var transform = function (text, transform) {\n switch (transform) {\n case 1 /* LOWERCASE */:\n return text.toLowerCase();\n case 3 /* CAPITALIZE */:\n return text.replace(CAPITALIZE, capitalize);\n case 2 /* UPPERCASE */:\n return text.toUpperCase();\n default:\n return text;\n }\n };\n var CAPITALIZE = /(^|\\s|:|-|\\(|\\))([a-z])/g;\n var capitalize = function (m, p1, p2) {\n if (m.length > 0) {\n return p1 + p2.toUpperCase();\n }\n return m;\n };\n\n var ImageElementContainer = /** @class */ (function (_super) {\n __extends(ImageElementContainer, _super);\n function ImageElementContainer(context, img) {\n var _this = _super.call(this, context, img) || this;\n _this.src = img.currentSrc || img.src;\n _this.intrinsicWidth = img.naturalWidth;\n _this.intrinsicHeight = img.naturalHeight;\n _this.context.cache.addImage(_this.src);\n return _this;\n }\n return ImageElementContainer;\n }(ElementContainer));\n\n var CanvasElementContainer = /** @class */ (function (_super) {\n __extends(CanvasElementContainer, _super);\n function CanvasElementContainer(context, canvas) {\n var _this = _super.call(this, context, canvas) || this;\n _this.canvas = canvas;\n _this.intrinsicWidth = canvas.width;\n _this.intrinsicHeight = canvas.height;\n return _this;\n }\n return CanvasElementContainer;\n }(ElementContainer));\n\n var SVGElementContainer = /** @class */ (function (_super) {\n __extends(SVGElementContainer, _super);\n function SVGElementContainer(context, img) {\n var _this = _super.call(this, context, img) || this;\n var s = new XMLSerializer();\n var bounds = parseBounds(context, img);\n img.setAttribute('width', bounds.width + \"px\");\n img.setAttribute('height', bounds.height + \"px\");\n _this.svg = \"data:image/svg+xml,\" + encodeURIComponent(s.serializeToString(img));\n _this.intrinsicWidth = img.width.baseVal.value;\n _this.intrinsicHeight = img.height.baseVal.value;\n _this.context.cache.addImage(_this.svg);\n return _this;\n }\n return SVGElementContainer;\n }(ElementContainer));\n\n var LIElementContainer = /** @class */ (function (_super) {\n __extends(LIElementContainer, _super);\n function LIElementContainer(context, element) {\n var _this = _super.call(this, context, element) || this;\n _this.value = element.value;\n return _this;\n }\n return LIElementContainer;\n }(ElementContainer));\n\n var OLElementContainer = /** @class */ (function (_super) {\n __extends(OLElementContainer, _super);\n function OLElementContainer(context, element) {\n var _this = _super.call(this, context, element) || this;\n _this.start = element.start;\n _this.reversed = typeof element.reversed === 'boolean' && element.reversed === true;\n return _this;\n }\n return OLElementContainer;\n }(ElementContainer));\n\n var CHECKBOX_BORDER_RADIUS = [\n {\n type: 15 /* DIMENSION_TOKEN */,\n flags: 0,\n unit: 'px',\n number: 3\n }\n ];\n var RADIO_BORDER_RADIUS = [\n {\n type: 16 /* PERCENTAGE_TOKEN */,\n flags: 0,\n number: 50\n }\n ];\n var reformatInputBounds = function (bounds) {\n if (bounds.width > bounds.height) {\n return new Bounds(bounds.left + (bounds.width - bounds.height) / 2, bounds.top, bounds.height, bounds.height);\n }\n else if (bounds.width < bounds.height) {\n return new Bounds(bounds.left, bounds.top + (bounds.height - bounds.width) / 2, bounds.width, bounds.width);\n }\n return bounds;\n };\n var getInputValue = function (node) {\n var value = node.type === PASSWORD ? new Array(node.value.length + 1).join('\\u2022') : node.value;\n return value.length === 0 ? node.placeholder || '' : value;\n };\n var CHECKBOX = 'checkbox';\n var RADIO = 'radio';\n var PASSWORD = 'password';\n var INPUT_COLOR = 0x2a2a2aff;\n var InputElementContainer = /** @class */ (function (_super) {\n __extends(InputElementContainer, _super);\n function InputElementContainer(context, input) {\n var _this = _super.call(this, context, input) || this;\n _this.type = input.type.toLowerCase();\n _this.checked = input.checked;\n _this.value = getInputValue(input);\n if (_this.type === CHECKBOX || _this.type === RADIO) {\n _this.styles.backgroundColor = 0xdededeff;\n _this.styles.borderTopColor =\n _this.styles.borderRightColor =\n _this.styles.borderBottomColor =\n _this.styles.borderLeftColor =\n 0xa5a5a5ff;\n _this.styles.borderTopWidth =\n _this.styles.borderRightWidth =\n _this.styles.borderBottomWidth =\n _this.styles.borderLeftWidth =\n 1;\n _this.styles.borderTopStyle =\n _this.styles.borderRightStyle =\n _this.styles.borderBottomStyle =\n _this.styles.borderLeftStyle =\n 1 /* SOLID */;\n _this.styles.backgroundClip = [0 /* BORDER_BOX */];\n _this.styles.backgroundOrigin = [0 /* BORDER_BOX */];\n _this.bounds = reformatInputBounds(_this.bounds);\n }\n switch (_this.type) {\n case CHECKBOX:\n _this.styles.borderTopRightRadius =\n _this.styles.borderTopLeftRadius =\n _this.styles.borderBottomRightRadius =\n _this.styles.borderBottomLeftRadius =\n CHECKBOX_BORDER_RADIUS;\n break;\n case RADIO:\n _this.styles.borderTopRightRadius =\n _this.styles.borderTopLeftRadius =\n _this.styles.borderBottomRightRadius =\n _this.styles.borderBottomLeftRadius =\n RADIO_BORDER_RADIUS;\n break;\n }\n return _this;\n }\n return InputElementContainer;\n }(ElementContainer));\n\n var SelectElementContainer = /** @class */ (function (_super) {\n __extends(SelectElementContainer, _super);\n function SelectElementContainer(context, element) {\n var _this = _super.call(this, context, element) || this;\n var option = element.options[element.selectedIndex || 0];\n _this.value = option ? option.text || '' : '';\n return _this;\n }\n return SelectElementContainer;\n }(ElementContainer));\n\n var TextareaElementContainer = /** @class */ (function (_super) {\n __extends(TextareaElementContainer, _super);\n function TextareaElementContainer(context, element) {\n var _this = _super.call(this, context, element) || this;\n _this.value = element.value;\n return _this;\n }\n return TextareaElementContainer;\n }(ElementContainer));\n\n var IFrameElementContainer = /** @class */ (function (_super) {\n __extends(IFrameElementContainer, _super);\n function IFrameElementContainer(context, iframe) {\n var _this = _super.call(this, context, iframe) || this;\n _this.src = iframe.src;\n _this.width = parseInt(iframe.width, 10) || 0;\n _this.height = parseInt(iframe.height, 10) || 0;\n _this.backgroundColor = _this.styles.backgroundColor;\n try {\n if (iframe.contentWindow &&\n iframe.contentWindow.document &&\n iframe.contentWindow.document.documentElement) {\n _this.tree = parseTree(context, iframe.contentWindow.document.documentElement);\n // http://www.w3.org/TR/css3-background/#special-backgrounds\n var documentBackgroundColor = iframe.contentWindow.document.documentElement\n ? parseColor(context, getComputedStyle(iframe.contentWindow.document.documentElement).backgroundColor)\n : COLORS.TRANSPARENT;\n var bodyBackgroundColor = iframe.contentWindow.document.body\n ? parseColor(context, getComputedStyle(iframe.contentWindow.document.body).backgroundColor)\n : COLORS.TRANSPARENT;\n _this.backgroundColor = isTransparent(documentBackgroundColor)\n ? isTransparent(bodyBackgroundColor)\n ? _this.styles.backgroundColor\n : bodyBackgroundColor\n : documentBackgroundColor;\n }\n }\n catch (e) { }\n return _this;\n }\n return IFrameElementContainer;\n }(ElementContainer));\n\n var LIST_OWNERS = ['OL', 'UL', 'MENU'];\n var parseNodeTree = function (context, node, parent, root) {\n for (var childNode = node.firstChild, nextNode = void 0; childNode; childNode = nextNode) {\n nextNode = childNode.nextSibling;\n if (isTextNode(childNode) && childNode.data.trim().length > 0) {\n parent.textNodes.push(new TextContainer(context, childNode, parent.styles));\n }\n else if (isElementNode(childNode)) {\n if (isSlotElement(childNode) && childNode.assignedNodes) {\n childNode.assignedNodes().forEach(function (childNode) { return parseNodeTree(context, childNode, parent, root); });\n }\n else {\n var container = createContainer(context, childNode);\n if (container.styles.isVisible()) {\n if (createsRealStackingContext(childNode, container, root)) {\n container.flags |= 4 /* CREATES_REAL_STACKING_CONTEXT */;\n }\n else if (createsStackingContext(container.styles)) {\n container.flags |= 2 /* CREATES_STACKING_CONTEXT */;\n }\n if (LIST_OWNERS.indexOf(childNode.tagName) !== -1) {\n container.flags |= 8 /* IS_LIST_OWNER */;\n }\n parent.elements.push(container);\n childNode.slot;\n if (childNode.shadowRoot) {\n parseNodeTree(context, childNode.shadowRoot, container, root);\n }\n else if (!isTextareaElement(childNode) &&\n !isSVGElement(childNode) &&\n !isSelectElement(childNode)) {\n parseNodeTree(context, childNode, container, root);\n }\n }\n }\n }\n }\n };\n var createContainer = function (context, element) {\n if (isImageElement(element)) {\n return new ImageElementContainer(context, element);\n }\n if (isCanvasElement(element)) {\n return new CanvasElementContainer(context, element);\n }\n if (isSVGElement(element)) {\n return new SVGElementContainer(context, element);\n }\n if (isLIElement(element)) {\n return new LIElementContainer(context, element);\n }\n if (isOLElement(element)) {\n return new OLElementContainer(context, element);\n }\n if (isInputElement(element)) {\n return new InputElementContainer(context, element);\n }\n if (isSelectElement(element)) {\n return new SelectElementContainer(context, element);\n }\n if (isTextareaElement(element)) {\n return new TextareaElementContainer(context, element);\n }\n if (isIFrameElement(element)) {\n return new IFrameElementContainer(context, element);\n }\n return new ElementContainer(context, element);\n };\n var parseTree = function (context, element) {\n var container = createContainer(context, element);\n container.flags |= 4 /* CREATES_REAL_STACKING_CONTEXT */;\n parseNodeTree(context, element, container, container);\n return container;\n };\n var createsRealStackingContext = function (node, container, root) {\n return (container.styles.isPositionedWithZIndex() ||\n container.styles.opacity < 1 ||\n container.styles.isTransformed() ||\n (isBodyElement(node) && root.styles.isTransparent()));\n };\n var createsStackingContext = function (styles) { return styles.isPositioned() || styles.isFloating(); };\n var isTextNode = function (node) { return node.nodeType === Node.TEXT_NODE; };\n var isElementNode = function (node) { return node.nodeType === Node.ELEMENT_NODE; };\n var isHTMLElementNode = function (node) {\n return isElementNode(node) && typeof node.style !== 'undefined' && !isSVGElementNode(node);\n };\n var isSVGElementNode = function (element) {\n return typeof element.className === 'object';\n };\n var isLIElement = function (node) { return node.tagName === 'LI'; };\n var isOLElement = function (node) { return node.tagName === 'OL'; };\n var isInputElement = function (node) { return node.tagName === 'INPUT'; };\n var isHTMLElement = function (node) { return node.tagName === 'HTML'; };\n var isSVGElement = function (node) { return node.tagName === 'svg'; };\n var isBodyElement = function (node) { return node.tagName === 'BODY'; };\n var isCanvasElement = function (node) { return node.tagName === 'CANVAS'; };\n var isVideoElement = function (node) { return node.tagName === 'VIDEO'; };\n var isImageElement = function (node) { return node.tagName === 'IMG'; };\n var isIFrameElement = function (node) { return node.tagName === 'IFRAME'; };\n var isStyleElement = function (node) { return node.tagName === 'STYLE'; };\n var isScriptElement = function (node) { return node.tagName === 'SCRIPT'; };\n var isTextareaElement = function (node) { return node.tagName === 'TEXTAREA'; };\n var isSelectElement = function (node) { return node.tagName === 'SELECT'; };\n var isSlotElement = function (node) { return node.tagName === 'SLOT'; };\n // https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name\n var isCustomElement = function (node) { return node.tagName.indexOf('-') > 0; };\n\n var CounterState = /** @class */ (function () {\n function CounterState() {\n this.counters = {};\n }\n CounterState.prototype.getCounterValue = function (name) {\n var counter = this.counters[name];\n if (counter && counter.length) {\n return counter[counter.length - 1];\n }\n return 1;\n };\n CounterState.prototype.getCounterValues = function (name) {\n var counter = this.counters[name];\n return counter ? counter : [];\n };\n CounterState.prototype.pop = function (counters) {\n var _this = this;\n counters.forEach(function (counter) { return _this.counters[counter].pop(); });\n };\n CounterState.prototype.parse = function (style) {\n var _this = this;\n var counterIncrement = style.counterIncrement;\n var counterReset = style.counterReset;\n var canReset = true;\n if (counterIncrement !== null) {\n counterIncrement.forEach(function (entry) {\n var counter = _this.counters[entry.counter];\n if (counter && entry.increment !== 0) {\n canReset = false;\n if (!counter.length) {\n counter.push(1);\n }\n counter[Math.max(0, counter.length - 1)] += entry.increment;\n }\n });\n }\n var counterNames = [];\n if (canReset) {\n counterReset.forEach(function (entry) {\n var counter = _this.counters[entry.counter];\n counterNames.push(entry.counter);\n if (!counter) {\n counter = _this.counters[entry.counter] = [];\n }\n counter.push(entry.reset);\n });\n }\n return counterNames;\n };\n return CounterState;\n }());\n var ROMAN_UPPER = {\n integers: [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1],\n values: ['M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I']\n };\n var ARMENIAN = {\n integers: [\n 9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000, 900, 800, 700, 600, 500, 400, 300, 200, 100, 90, 80, 70,\n 60, 50, 40, 30, 20, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1\n ],\n values: [\n 'Ք',\n 'Փ',\n 'Ւ',\n 'Ց',\n 'Ր',\n 'Տ',\n 'Վ',\n 'Ս',\n 'Ռ',\n 'Ջ',\n 'Պ',\n 'Չ',\n 'Ո',\n 'Շ',\n 'Ն',\n 'Յ',\n 'Մ',\n 'Ճ',\n 'Ղ',\n 'Ձ',\n 'Հ',\n 'Կ',\n 'Ծ',\n 'Խ',\n 'Լ',\n 'Ի',\n 'Ժ',\n 'Թ',\n 'Ը',\n 'Է',\n 'Զ',\n 'Ե',\n 'Դ',\n 'Գ',\n 'Բ',\n 'Ա'\n ]\n };\n var HEBREW = {\n integers: [\n 10000, 9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000, 400, 300, 200, 100, 90, 80, 70, 60, 50, 40, 30, 20,\n 19, 18, 17, 16, 15, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1\n ],\n values: [\n 'י׳',\n 'ט׳',\n 'ח׳',\n 'ז׳',\n 'ו׳',\n 'ה׳',\n 'ד׳',\n 'ג׳',\n 'ב׳',\n 'א׳',\n 'ת',\n 'ש',\n 'ר',\n 'ק',\n 'צ',\n 'פ',\n 'ע',\n 'ס',\n 'נ',\n 'מ',\n 'ל',\n 'כ',\n 'יט',\n 'יח',\n 'יז',\n 'טז',\n 'טו',\n 'י',\n 'ט',\n 'ח',\n 'ז',\n 'ו',\n 'ה',\n 'ד',\n 'ג',\n 'ב',\n 'א'\n ]\n };\n var GEORGIAN = {\n integers: [\n 10000, 9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000, 900, 800, 700, 600, 500, 400, 300, 200, 100, 90,\n 80, 70, 60, 50, 40, 30, 20, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1\n ],\n values: [\n 'ჵ',\n 'ჰ',\n 'ჯ',\n 'ჴ',\n 'ხ',\n 'ჭ',\n 'წ',\n 'ძ',\n 'ც',\n 'ჩ',\n 'შ',\n 'ყ',\n 'ღ',\n 'ქ',\n 'ფ',\n 'ჳ',\n 'ტ',\n 'ს',\n 'რ',\n 'ჟ',\n 'პ',\n 'ო',\n 'ჲ',\n 'ნ',\n 'მ',\n 'ლ',\n 'კ',\n 'ი',\n 'თ',\n 'ჱ',\n 'ზ',\n 'ვ',\n 'ე',\n 'დ',\n 'გ',\n 'ბ',\n 'ა'\n ]\n };\n var createAdditiveCounter = function (value, min, max, symbols, fallback, suffix) {\n if (value < min || value > max) {\n return createCounterText(value, fallback, suffix.length > 0);\n }\n return (symbols.integers.reduce(function (string, integer, index) {\n while (value >= integer) {\n value -= integer;\n string += symbols.values[index];\n }\n return string;\n }, '') + suffix);\n };\n var createCounterStyleWithSymbolResolver = function (value, codePointRangeLength, isNumeric, resolver) {\n var string = '';\n do {\n if (!isNumeric) {\n value--;\n }\n string = resolver(value) + string;\n value /= codePointRangeLength;\n } while (value * codePointRangeLength >= codePointRangeLength);\n return string;\n };\n var createCounterStyleFromRange = function (value, codePointRangeStart, codePointRangeEnd, isNumeric, suffix) {\n var codePointRangeLength = codePointRangeEnd - codePointRangeStart + 1;\n return ((value < 0 ? '-' : '') +\n (createCounterStyleWithSymbolResolver(Math.abs(value), codePointRangeLength, isNumeric, function (codePoint) {\n return fromCodePoint$1(Math.floor(codePoint % codePointRangeLength) + codePointRangeStart);\n }) +\n suffix));\n };\n var createCounterStyleFromSymbols = function (value, symbols, suffix) {\n if (suffix === void 0) { suffix = '. '; }\n var codePointRangeLength = symbols.length;\n return (createCounterStyleWithSymbolResolver(Math.abs(value), codePointRangeLength, false, function (codePoint) { return symbols[Math.floor(codePoint % codePointRangeLength)]; }) + suffix);\n };\n var CJK_ZEROS = 1 << 0;\n var CJK_TEN_COEFFICIENTS = 1 << 1;\n var CJK_TEN_HIGH_COEFFICIENTS = 1 << 2;\n var CJK_HUNDRED_COEFFICIENTS = 1 << 3;\n var createCJKCounter = function (value, numbers, multipliers, negativeSign, suffix, flags) {\n if (value < -9999 || value > 9999) {\n return createCounterText(value, 4 /* CJK_DECIMAL */, suffix.length > 0);\n }\n var tmp = Math.abs(value);\n var string = suffix;\n if (tmp === 0) {\n return numbers[0] + string;\n }\n for (var digit = 0; tmp > 0 && digit <= 4; digit++) {\n var coefficient = tmp % 10;\n if (coefficient === 0 && contains(flags, CJK_ZEROS) && string !== '') {\n string = numbers[coefficient] + string;\n }\n else if (coefficient > 1 ||\n (coefficient === 1 && digit === 0) ||\n (coefficient === 1 && digit === 1 && contains(flags, CJK_TEN_COEFFICIENTS)) ||\n (coefficient === 1 && digit === 1 && contains(flags, CJK_TEN_HIGH_COEFFICIENTS) && value > 100) ||\n (coefficient === 1 && digit > 1 && contains(flags, CJK_HUNDRED_COEFFICIENTS))) {\n string = numbers[coefficient] + (digit > 0 ? multipliers[digit - 1] : '') + string;\n }\n else if (coefficient === 1 && digit > 0) {\n string = multipliers[digit - 1] + string;\n }\n tmp = Math.floor(tmp / 10);\n }\n return (value < 0 ? negativeSign : '') + string;\n };\n var CHINESE_INFORMAL_MULTIPLIERS = '十百千萬';\n var CHINESE_FORMAL_MULTIPLIERS = '拾佰仟萬';\n var JAPANESE_NEGATIVE = 'マイナス';\n var KOREAN_NEGATIVE = '마이너스';\n var createCounterText = function (value, type, appendSuffix) {\n var defaultSuffix = appendSuffix ? '. ' : '';\n var cjkSuffix = appendSuffix ? '、' : '';\n var koreanSuffix = appendSuffix ? ', ' : '';\n var spaceSuffix = appendSuffix ? ' ' : '';\n switch (type) {\n case 0 /* DISC */:\n return '•' + spaceSuffix;\n case 1 /* CIRCLE */:\n return '◦' + spaceSuffix;\n case 2 /* SQUARE */:\n return '◾' + spaceSuffix;\n case 5 /* DECIMAL_LEADING_ZERO */:\n var string = createCounterStyleFromRange(value, 48, 57, true, defaultSuffix);\n return string.length < 4 ? \"0\" + string : string;\n case 4 /* CJK_DECIMAL */:\n return createCounterStyleFromSymbols(value, '〇一二三四五六七八九', cjkSuffix);\n case 6 /* LOWER_ROMAN */:\n return createAdditiveCounter(value, 1, 3999, ROMAN_UPPER, 3 /* DECIMAL */, defaultSuffix).toLowerCase();\n case 7 /* UPPER_ROMAN */:\n return createAdditiveCounter(value, 1, 3999, ROMAN_UPPER, 3 /* DECIMAL */, defaultSuffix);\n case 8 /* LOWER_GREEK */:\n return createCounterStyleFromRange(value, 945, 969, false, defaultSuffix);\n case 9 /* LOWER_ALPHA */:\n return createCounterStyleFromRange(value, 97, 122, false, defaultSuffix);\n case 10 /* UPPER_ALPHA */:\n return createCounterStyleFromRange(value, 65, 90, false, defaultSuffix);\n case 11 /* ARABIC_INDIC */:\n return createCounterStyleFromRange(value, 1632, 1641, true, defaultSuffix);\n case 12 /* ARMENIAN */:\n case 49 /* UPPER_ARMENIAN */:\n return createAdditiveCounter(value, 1, 9999, ARMENIAN, 3 /* DECIMAL */, defaultSuffix);\n case 35 /* LOWER_ARMENIAN */:\n return createAdditiveCounter(value, 1, 9999, ARMENIAN, 3 /* DECIMAL */, defaultSuffix).toLowerCase();\n case 13 /* BENGALI */:\n return createCounterStyleFromRange(value, 2534, 2543, true, defaultSuffix);\n case 14 /* CAMBODIAN */:\n case 30 /* KHMER */:\n return createCounterStyleFromRange(value, 6112, 6121, true, defaultSuffix);\n case 15 /* CJK_EARTHLY_BRANCH */:\n return createCounterStyleFromSymbols(value, '子丑寅卯辰巳午未申酉戌亥', cjkSuffix);\n case 16 /* CJK_HEAVENLY_STEM */:\n return createCounterStyleFromSymbols(value, '甲乙丙丁戊己庚辛壬癸', cjkSuffix);\n case 17 /* CJK_IDEOGRAPHIC */:\n case 48 /* TRAD_CHINESE_INFORMAL */:\n return createCJKCounter(value, '零一二三四五六七八九', CHINESE_INFORMAL_MULTIPLIERS, '負', cjkSuffix, CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS);\n case 47 /* TRAD_CHINESE_FORMAL */:\n return createCJKCounter(value, '零壹貳參肆伍陸柒捌玖', CHINESE_FORMAL_MULTIPLIERS, '負', cjkSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS);\n case 42 /* SIMP_CHINESE_INFORMAL */:\n return createCJKCounter(value, '零一二三四五六七八九', CHINESE_INFORMAL_MULTIPLIERS, '负', cjkSuffix, CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS);\n case 41 /* SIMP_CHINESE_FORMAL */:\n return createCJKCounter(value, '零壹贰叁肆伍陆柒捌玖', CHINESE_FORMAL_MULTIPLIERS, '负', cjkSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS);\n case 26 /* JAPANESE_INFORMAL */:\n return createCJKCounter(value, '〇一二三四五六七八九', '十百千万', JAPANESE_NEGATIVE, cjkSuffix, 0);\n case 25 /* JAPANESE_FORMAL */:\n return createCJKCounter(value, '零壱弐参四伍六七八九', '拾百千万', JAPANESE_NEGATIVE, cjkSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS);\n case 31 /* KOREAN_HANGUL_FORMAL */:\n return createCJKCounter(value, '영일이삼사오육칠팔구', '십백천만', KOREAN_NEGATIVE, koreanSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS);\n case 33 /* KOREAN_HANJA_INFORMAL */:\n return createCJKCounter(value, '零一二三四五六七八九', '十百千萬', KOREAN_NEGATIVE, koreanSuffix, 0);\n case 32 /* KOREAN_HANJA_FORMAL */:\n return createCJKCounter(value, '零壹貳參四五六七八九', '拾百千', KOREAN_NEGATIVE, koreanSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS);\n case 18 /* DEVANAGARI */:\n return createCounterStyleFromRange(value, 0x966, 0x96f, true, defaultSuffix);\n case 20 /* GEORGIAN */:\n return createAdditiveCounter(value, 1, 19999, GEORGIAN, 3 /* DECIMAL */, defaultSuffix);\n case 21 /* GUJARATI */:\n return createCounterStyleFromRange(value, 0xae6, 0xaef, true, defaultSuffix);\n case 22 /* GURMUKHI */:\n return createCounterStyleFromRange(value, 0xa66, 0xa6f, true, defaultSuffix);\n case 22 /* HEBREW */:\n return createAdditiveCounter(value, 1, 10999, HEBREW, 3 /* DECIMAL */, defaultSuffix);\n case 23 /* HIRAGANA */:\n return createCounterStyleFromSymbols(value, 'あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをん');\n case 24 /* HIRAGANA_IROHA */:\n return createCounterStyleFromSymbols(value, 'いろはにほへとちりぬるをわかよたれそつねならむうゐのおくやまけふこえてあさきゆめみしゑひもせす');\n case 27 /* KANNADA */:\n return createCounterStyleFromRange(value, 0xce6, 0xcef, true, defaultSuffix);\n case 28 /* KATAKANA */:\n return createCounterStyleFromSymbols(value, 'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲン', cjkSuffix);\n case 29 /* KATAKANA_IROHA */:\n return createCounterStyleFromSymbols(value, 'イロハニホヘトチリヌルヲワカヨタレソツネナラムウヰノオクヤマケフコエテアサキユメミシヱヒモセス', cjkSuffix);\n case 34 /* LAO */:\n return createCounterStyleFromRange(value, 0xed0, 0xed9, true, defaultSuffix);\n case 37 /* MONGOLIAN */:\n return createCounterStyleFromRange(value, 0x1810, 0x1819, true, defaultSuffix);\n case 38 /* MYANMAR */:\n return createCounterStyleFromRange(value, 0x1040, 0x1049, true, defaultSuffix);\n case 39 /* ORIYA */:\n return createCounterStyleFromRange(value, 0xb66, 0xb6f, true, defaultSuffix);\n case 40 /* PERSIAN */:\n return createCounterStyleFromRange(value, 0x6f0, 0x6f9, true, defaultSuffix);\n case 43 /* TAMIL */:\n return createCounterStyleFromRange(value, 0xbe6, 0xbef, true, defaultSuffix);\n case 44 /* TELUGU */:\n return createCounterStyleFromRange(value, 0xc66, 0xc6f, true, defaultSuffix);\n case 45 /* THAI */:\n return createCounterStyleFromRange(value, 0xe50, 0xe59, true, defaultSuffix);\n case 46 /* TIBETAN */:\n return createCounterStyleFromRange(value, 0xf20, 0xf29, true, defaultSuffix);\n case 3 /* DECIMAL */:\n default:\n return createCounterStyleFromRange(value, 48, 57, true, defaultSuffix);\n }\n };\n\n var IGNORE_ATTRIBUTE = 'data-html2canvas-ignore';\n var DocumentCloner = /** @class */ (function () {\n function DocumentCloner(context, element, options) {\n this.context = context;\n this.options = options;\n this.scrolledElements = [];\n this.referenceElement = element;\n this.counters = new CounterState();\n this.quoteDepth = 0;\n if (!element.ownerDocument) {\n throw new Error('Cloned element does not have an owner document');\n }\n this.documentElement = this.cloneNode(element.ownerDocument.documentElement, false);\n }\n DocumentCloner.prototype.toIFrame = function (ownerDocument, windowSize) {\n var _this = this;\n var iframe = createIFrameContainer(ownerDocument, windowSize);\n if (!iframe.contentWindow) {\n return Promise.reject(\"Unable to find iframe window\");\n }\n var scrollX = ownerDocument.defaultView.pageXOffset;\n var scrollY = ownerDocument.defaultView.pageYOffset;\n var cloneWindow = iframe.contentWindow;\n var documentClone = cloneWindow.document;\n /* Chrome doesn't detect relative background-images assigned in inline <style> sheets when fetched through getComputedStyle\n if window url is about:blank, we can assign the url to current by writing onto the document\n */\n var iframeLoad = iframeLoader(iframe).then(function () { return __awaiter(_this, void 0, void 0, function () {\n var onclone, referenceElement;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n this.scrolledElements.forEach(restoreNodeScroll);\n if (cloneWindow) {\n cloneWindow.scrollTo(windowSize.left, windowSize.top);\n if (/(iPad|iPhone|iPod)/g.test(navigator.userAgent) &&\n (cloneWindow.scrollY !== windowSize.top || cloneWindow.scrollX !== windowSize.left)) {\n this.context.logger.warn('Unable to restore scroll position for cloned document');\n this.context.windowBounds = this.context.windowBounds.add(cloneWindow.scrollX - windowSize.left, cloneWindow.scrollY - windowSize.top, 0, 0);\n }\n }\n onclone = this.options.onclone;\n referenceElement = this.clonedReferenceElement;\n if (typeof referenceElement === 'undefined') {\n return [2 /*return*/, Promise.reject(\"Error finding the \" + this.referenceElement.nodeName + \" in the cloned document\")];\n }\n if (!(documentClone.fonts && documentClone.fonts.ready)) return [3 /*break*/, 2];\n return [4 /*yield*/, documentClone.fonts.ready];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n if (!/(AppleWebKit)/g.test(navigator.userAgent)) return [3 /*break*/, 4];\n return [4 /*yield*/, imagesReady(documentClone)];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4:\n if (typeof onclone === 'function') {\n return [2 /*return*/, Promise.resolve()\n .then(function () { return onclone(documentClone, referenceElement); })\n .then(function () { return iframe; })];\n }\n return [2 /*return*/, iframe];\n }\n });\n }); });\n documentClone.open();\n documentClone.write(serializeDoctype(document.doctype) + \"<html></html>\");\n // Chrome scrolls the parent document for some reason after the write to the cloned window???\n restoreOwnerScroll(this.referenceElement.ownerDocument, scrollX, scrollY);\n documentClone.replaceChild(documentClone.adoptNode(this.documentElement), documentClone.documentElement);\n documentClone.close();\n return iframeLoad;\n };\n DocumentCloner.prototype.createElementClone = function (node) {\n if (isDebugging(node, 2 /* CLONE */)) {\n debugger;\n }\n if (isCanvasElement(node)) {\n return this.createCanvasClone(node);\n }\n if (isVideoElement(node)) {\n return this.createVideoClone(node);\n }\n if (isStyleElement(node)) {\n return this.createStyleClone(node);\n }\n var clone = node.cloneNode(false);\n if (isImageElement(clone)) {\n if (isImageElement(node) && node.currentSrc && node.currentSrc !== node.src) {\n clone.src = node.currentSrc;\n clone.srcset = '';\n }\n if (clone.loading === 'lazy') {\n clone.loading = 'eager';\n }\n }\n if (isCustomElement(clone)) {\n return this.createCustomElementClone(clone);\n }\n return clone;\n };\n DocumentCloner.prototype.createCustomElementClone = function (node) {\n var clone = document.createElement('html2canvascustomelement');\n copyCSSStyles(node.style, clone);\n return clone;\n };\n DocumentCloner.prototype.createStyleClone = function (node) {\n try {\n var sheet = node.sheet;\n if (sheet && sheet.cssRules) {\n var css = [].slice.call(sheet.cssRules, 0).reduce(function (css, rule) {\n if (rule && typeof rule.cssText === 'string') {\n return css + rule.cssText;\n }\n return css;\n }, '');\n var style = node.cloneNode(false);\n style.textContent = css;\n return style;\n }\n }\n catch (e) {\n // accessing node.sheet.cssRules throws a DOMException\n this.context.logger.error('Unable to access cssRules property', e);\n if (e.name !== 'SecurityError') {\n throw e;\n }\n }\n return node.cloneNode(false);\n };\n DocumentCloner.prototype.createCanvasClone = function (canvas) {\n var _a;\n if (this.options.inlineImages && canvas.ownerDocument) {\n var img = canvas.ownerDocument.createElement('img');\n try {\n img.src = canvas.toDataURL();\n return img;\n }\n catch (e) {\n this.context.logger.info(\"Unable to inline canvas contents, canvas is tainted\", canvas);\n }\n }\n var clonedCanvas = canvas.cloneNode(false);\n try {\n clonedCanvas.width = canvas.width;\n clonedCanvas.height = canvas.height;\n var ctx = canvas.getContext('2d');\n var clonedCtx = clonedCanvas.getContext('2d');\n if (clonedCtx) {\n if (!this.options.allowTaint && ctx) {\n clonedCtx.putImageData(ctx.getImageData(0, 0, canvas.width, canvas.height), 0, 0);\n }\n else {\n var gl = (_a = canvas.getContext('webgl2')) !== null && _a !== void 0 ? _a : canvas.getContext('webgl');\n if (gl) {\n var attribs = gl.getContextAttributes();\n if ((attribs === null || attribs === void 0 ? void 0 : attribs.preserveDrawingBuffer) === false) {\n this.context.logger.warn('Unable to clone WebGL context as it has preserveDrawingBuffer=false', canvas);\n }\n }\n clonedCtx.drawImage(canvas, 0, 0);\n }\n }\n return clonedCanvas;\n }\n catch (e) {\n this.context.logger.info(\"Unable to clone canvas as it is tainted\", canvas);\n }\n return clonedCanvas;\n };\n DocumentCloner.prototype.createVideoClone = function (video) {\n var canvas = video.ownerDocument.createElement('canvas');\n canvas.width = video.offsetWidth;\n canvas.height = video.offsetHeight;\n var ctx = canvas.getContext('2d');\n try {\n if (ctx) {\n ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\n if (!this.options.allowTaint) {\n ctx.getImageData(0, 0, canvas.width, canvas.height);\n }\n }\n return canvas;\n }\n catch (e) {\n this.context.logger.info(\"Unable to clone video as it is tainted\", video);\n }\n var blankCanvas = video.ownerDocument.createElement('canvas');\n blankCanvas.width = video.offsetWidth;\n blankCanvas.height = video.offsetHeight;\n return blankCanvas;\n };\n DocumentCloner.prototype.appendChildNode = function (clone, child, copyStyles) {\n if (!isElementNode(child) ||\n (!isScriptElement(child) &&\n !child.hasAttribute(IGNORE_ATTRIBUTE) &&\n (typeof this.options.ignoreElements !== 'function' || !this.options.ignoreElements(child)))) {\n if (!this.options.copyStyles || !isElementNode(child) || !isStyleElement(child)) {\n clone.appendChild(this.cloneNode(child, copyStyles));\n }\n }\n };\n DocumentCloner.prototype.cloneChildNodes = function (node, clone, copyStyles) {\n var _this = this;\n for (var child = node.shadowRoot ? node.shadowRoot.firstChild : node.firstChild; child; child = child.nextSibling) {\n if (isElementNode(child) && isSlotElement(child) && typeof child.assignedNodes === 'function') {\n var assignedNodes = child.assignedNodes();\n if (assignedNodes.length) {\n assignedNodes.forEach(function (assignedNode) { return _this.appendChildNode(clone, assignedNode, copyStyles); });\n }\n }\n else {\n this.appendChildNode(clone, child, copyStyles);\n }\n }\n };\n DocumentCloner.prototype.cloneNode = function (node, copyStyles) {\n if (isTextNode(node)) {\n return document.createTextNode(node.data);\n }\n if (!node.ownerDocument) {\n return node.cloneNode(false);\n }\n var window = node.ownerDocument.defaultView;\n if (window && isElementNode(node) && (isHTMLElementNode(node) || isSVGElementNode(node))) {\n var clone = this.createElementClone(node);\n clone.style.transitionProperty = 'none';\n var style = window.getComputedStyle(node);\n var styleBefore = window.getComputedStyle(node, ':before');\n var styleAfter = window.getComputedStyle(node, ':after');\n if (this.referenceElement === node && isHTMLElementNode(clone)) {\n this.clonedReferenceElement = clone;\n }\n if (isBodyElement(clone)) {\n createPseudoHideStyles(clone);\n }\n var counters = this.counters.parse(new CSSParsedCounterDeclaration(this.context, style));\n var before = this.resolvePseudoContent(node, clone, styleBefore, PseudoElementType.BEFORE);\n if (isCustomElement(node)) {\n copyStyles = true;\n }\n if (!isVideoElement(node)) {\n this.cloneChildNodes(node, clone, copyStyles);\n }\n if (before) {\n clone.insertBefore(before, clone.firstChild);\n }\n var after = this.resolvePseudoContent(node, clone, styleAfter, PseudoElementType.AFTER);\n if (after) {\n clone.appendChild(after);\n }\n this.counters.pop(counters);\n if ((style && (this.options.copyStyles || isSVGElementNode(node)) && !isIFrameElement(node)) ||\n copyStyles) {\n copyCSSStyles(style, clone);\n }\n if (node.scrollTop !== 0 || node.scrollLeft !== 0) {\n this.scrolledElements.push([clone, node.scrollLeft, node.scrollTop]);\n }\n if ((isTextareaElement(node) || isSelectElement(node)) &&\n (isTextareaElement(clone) || isSelectElement(clone))) {\n clone.value = node.value;\n }\n return clone;\n }\n return node.cloneNode(false);\n };\n DocumentCloner.prototype.resolvePseudoContent = function (node, clone, style, pseudoElt) {\n var _this = this;\n if (!style) {\n return;\n }\n var value = style.content;\n var document = clone.ownerDocument;\n if (!document || !value || value === 'none' || value === '-moz-alt-content' || style.display === 'none') {\n return;\n }\n this.counters.parse(new CSSParsedCounterDeclaration(this.context, style));\n var declaration = new CSSParsedPseudoDeclaration(this.context, style);\n var anonymousReplacedElement = document.createElement('html2canvaspseudoelement');\n copyCSSStyles(style, anonymousReplacedElement);\n declaration.content.forEach(function (token) {\n if (token.type === 0 /* STRING_TOKEN */) {\n anonymousReplacedElement.appendChild(document.createTextNode(token.value));\n }\n else if (token.type === 22 /* URL_TOKEN */) {\n var img = document.createElement('img');\n img.src = token.value;\n img.style.opacity = '1';\n anonymousReplacedElement.appendChild(img);\n }\n else if (token.type === 18 /* FUNCTION */) {\n if (token.name === 'attr') {\n var attr = token.values.filter(isIdentToken);\n if (attr.length) {\n anonymousReplacedElement.appendChild(document.createTextNode(node.getAttribute(attr[0].value) || ''));\n }\n }\n else if (token.name === 'counter') {\n var _a = token.values.filter(nonFunctionArgSeparator), counter = _a[0], counterStyle = _a[1];\n if (counter && isIdentToken(counter)) {\n var counterState = _this.counters.getCounterValue(counter.value);\n var counterType = counterStyle && isIdentToken(counterStyle)\n ? listStyleType.parse(_this.context, counterStyle.value)\n : 3 /* DECIMAL */;\n anonymousReplacedElement.appendChild(document.createTextNode(createCounterText(counterState, counterType, false)));\n }\n }\n else if (token.name === 'counters') {\n var _b = token.values.filter(nonFunctionArgSeparator), counter = _b[0], delim = _b[1], counterStyle = _b[2];\n if (counter && isIdentToken(counter)) {\n var counterStates = _this.counters.getCounterValues(counter.value);\n var counterType_1 = counterStyle && isIdentToken(counterStyle)\n ? listStyleType.parse(_this.context, counterStyle.value)\n : 3 /* DECIMAL */;\n var separator = delim && delim.type === 0 /* STRING_TOKEN */ ? delim.value : '';\n var text = counterStates\n .map(function (value) { return createCounterText(value, counterType_1, false); })\n .join(separator);\n anonymousReplacedElement.appendChild(document.createTextNode(text));\n }\n }\n else ;\n }\n else if (token.type === 20 /* IDENT_TOKEN */) {\n switch (token.value) {\n case 'open-quote':\n anonymousReplacedElement.appendChild(document.createTextNode(getQuote(declaration.quotes, _this.quoteDepth++, true)));\n break;\n case 'close-quote':\n anonymousReplacedElement.appendChild(document.createTextNode(getQuote(declaration.quotes, --_this.quoteDepth, false)));\n break;\n default:\n // safari doesn't parse string tokens correctly because of lack of quotes\n anonymousReplacedElement.appendChild(document.createTextNode(token.value));\n }\n }\n });\n anonymousReplacedElement.className = PSEUDO_HIDE_ELEMENT_CLASS_BEFORE + \" \" + PSEUDO_HIDE_ELEMENT_CLASS_AFTER;\n var newClassName = pseudoElt === PseudoElementType.BEFORE\n ? \" \" + PSEUDO_HIDE_ELEMENT_CLASS_BEFORE\n : \" \" + PSEUDO_HIDE_ELEMENT_CLASS_AFTER;\n if (isSVGElementNode(clone)) {\n clone.className.baseValue += newClassName;\n }\n else {\n clone.className += newClassName;\n }\n return anonymousReplacedElement;\n };\n DocumentCloner.destroy = function (container) {\n if (container.parentNode) {\n container.parentNode.removeChild(container);\n return true;\n }\n return false;\n };\n return DocumentCloner;\n }());\n var PseudoElementType;\n (function (PseudoElementType) {\n PseudoElementType[PseudoElementType[\"BEFORE\"] = 0] = \"BEFORE\";\n PseudoElementType[PseudoElementType[\"AFTER\"] = 1] = \"AFTER\";\n })(PseudoElementType || (PseudoElementType = {}));\n var createIFrameContainer = function (ownerDocument, bounds) {\n var cloneIframeContainer = ownerDocument.createElement('iframe');\n cloneIframeContainer.className = 'html2canvas-container';\n cloneIframeContainer.style.visibility = 'hidden';\n cloneIframeContainer.style.position = 'fixed';\n cloneIframeContainer.style.left = '-10000px';\n cloneIframeContainer.style.top = '0px';\n cloneIframeContainer.style.border = '0';\n cloneIframeContainer.width = bounds.width.toString();\n cloneIframeContainer.height = bounds.height.toString();\n cloneIframeContainer.scrolling = 'no'; // ios won't scroll without it\n cloneIframeContainer.setAttribute(IGNORE_ATTRIBUTE, 'true');\n ownerDocument.body.appendChild(cloneIframeContainer);\n return cloneIframeContainer;\n };\n var imageReady = function (img) {\n return new Promise(function (resolve) {\n if (img.complete) {\n resolve();\n return;\n }\n if (!img.src) {\n resolve();\n return;\n }\n img.onload = resolve;\n img.onerror = resolve;\n });\n };\n var imagesReady = function (document) {\n return Promise.all([].slice.call(document.images, 0).map(imageReady));\n };\n var iframeLoader = function (iframe) {\n return new Promise(function (resolve, reject) {\n var cloneWindow = iframe.contentWindow;\n if (!cloneWindow) {\n return reject(\"No window assigned for iframe\");\n }\n var documentClone = cloneWindow.document;\n cloneWindow.onload = iframe.onload = function () {\n cloneWindow.onload = iframe.onload = null;\n var interval = setInterval(function () {\n if (documentClone.body.childNodes.length > 0 && documentClone.readyState === 'complete') {\n clearInterval(interval);\n resolve(iframe);\n }\n }, 50);\n };\n });\n };\n var ignoredStyleProperties = [\n 'all',\n 'd',\n 'content' // Safari shows pseudoelements if content is set\n ];\n var copyCSSStyles = function (style, target) {\n // Edge does not provide value for cssText\n for (var i = style.length - 1; i >= 0; i--) {\n var property = style.item(i);\n if (ignoredStyleProperties.indexOf(property) === -1) {\n target.style.setProperty(property, style.getPropertyValue(property));\n }\n }\n return target;\n };\n var serializeDoctype = function (doctype) {\n var str = '';\n if (doctype) {\n str += '<!DOCTYPE ';\n if (doctype.name) {\n str += doctype.name;\n }\n if (doctype.internalSubset) {\n str += doctype.internalSubset;\n }\n if (doctype.publicId) {\n str += \"\\\"\" + doctype.publicId + \"\\\"\";\n }\n if (doctype.systemId) {\n str += \"\\\"\" + doctype.systemId + \"\\\"\";\n }\n str += '>';\n }\n return str;\n };\n var restoreOwnerScroll = function (ownerDocument, x, y) {\n if (ownerDocument &&\n ownerDocument.defaultView &&\n (x !== ownerDocument.defaultView.pageXOffset || y !== ownerDocument.defaultView.pageYOffset)) {\n ownerDocument.defaultView.scrollTo(x, y);\n }\n };\n var restoreNodeScroll = function (_a) {\n var element = _a[0], x = _a[1], y = _a[2];\n element.scrollLeft = x;\n element.scrollTop = y;\n };\n var PSEUDO_BEFORE = ':before';\n var PSEUDO_AFTER = ':after';\n var PSEUDO_HIDE_ELEMENT_CLASS_BEFORE = '___html2canvas___pseudoelement_before';\n var PSEUDO_HIDE_ELEMENT_CLASS_AFTER = '___html2canvas___pseudoelement_after';\n var PSEUDO_HIDE_ELEMENT_STYLE = \"{\\n content: \\\"\\\" !important;\\n display: none !important;\\n}\";\n var createPseudoHideStyles = function (body) {\n createStyles(body, \".\" + PSEUDO_HIDE_ELEMENT_CLASS_BEFORE + PSEUDO_BEFORE + PSEUDO_HIDE_ELEMENT_STYLE + \"\\n .\" + PSEUDO_HIDE_ELEMENT_CLASS_AFTER + PSEUDO_AFTER + PSEUDO_HIDE_ELEMENT_STYLE);\n };\n var createStyles = function (body, styles) {\n var document = body.ownerDocument;\n if (document) {\n var style = document.createElement('style');\n style.textContent = styles;\n body.appendChild(style);\n }\n };\n\n var CacheStorage = /** @class */ (function () {\n function CacheStorage() {\n }\n CacheStorage.getOrigin = function (url) {\n var link = CacheStorage._link;\n if (!link) {\n return 'about:blank';\n }\n link.href = url;\n link.href = link.href; // IE9, LOL! - http://jsfiddle.net/niklasvh/2e48b/\n return link.protocol + link.hostname + link.port;\n };\n CacheStorage.isSameOrigin = function (src) {\n return CacheStorage.getOrigin(src) === CacheStorage._origin;\n };\n CacheStorage.setContext = function (window) {\n CacheStorage._link = window.document.createElement('a');\n CacheStorage._origin = CacheStorage.getOrigin(window.location.href);\n };\n CacheStorage._origin = 'about:blank';\n return CacheStorage;\n }());\n var Cache = /** @class */ (function () {\n function Cache(context, _options) {\n this.context = context;\n this._options = _options;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this._cache = {};\n }\n Cache.prototype.addImage = function (src) {\n var result = Promise.resolve();\n if (this.has(src)) {\n return result;\n }\n if (isBlobImage(src) || isRenderable(src)) {\n (this._cache[src] = this.loadImage(src)).catch(function () {\n // prevent unhandled rejection\n });\n return result;\n }\n return result;\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Cache.prototype.match = function (src) {\n return this._cache[src];\n };\n Cache.prototype.loadImage = function (key) {\n return __awaiter(this, void 0, void 0, function () {\n var isSameOrigin, useCORS, useProxy, src;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n isSameOrigin = CacheStorage.isSameOrigin(key);\n useCORS = !isInlineImage(key) && this._options.useCORS === true && FEATURES.SUPPORT_CORS_IMAGES && !isSameOrigin;\n useProxy = !isInlineImage(key) &&\n !isSameOrigin &&\n !isBlobImage(key) &&\n typeof this._options.proxy === 'string' &&\n FEATURES.SUPPORT_CORS_XHR &&\n !useCORS;\n if (!isSameOrigin &&\n this._options.allowTaint === false &&\n !isInlineImage(key) &&\n !isBlobImage(key) &&\n !useProxy &&\n !useCORS) {\n return [2 /*return*/];\n }\n src = key;\n if (!useProxy) return [3 /*break*/, 2];\n return [4 /*yield*/, this.proxy(src)];\n case 1:\n src = _a.sent();\n _a.label = 2;\n case 2:\n this.context.logger.debug(\"Added image \" + key.substring(0, 256));\n return [4 /*yield*/, new Promise(function (resolve, reject) {\n var img = new Image();\n img.onload = function () { return resolve(img); };\n img.onerror = reject;\n //ios safari 10.3 taints canvas with data urls unless crossOrigin is set to anonymous\n if (isInlineBase64Image(src) || useCORS) {\n img.crossOrigin = 'anonymous';\n }\n img.src = src;\n if (img.complete === true) {\n // Inline XML images may fail to parse, throwing an Error later on\n setTimeout(function () { return resolve(img); }, 500);\n }\n if (_this._options.imageTimeout > 0) {\n setTimeout(function () { return reject(\"Timed out (\" + _this._options.imageTimeout + \"ms) loading image\"); }, _this._options.imageTimeout);\n }\n })];\n case 3: return [2 /*return*/, _a.sent()];\n }\n });\n });\n };\n Cache.prototype.has = function (key) {\n return typeof this._cache[key] !== 'undefined';\n };\n Cache.prototype.keys = function () {\n return Promise.resolve(Object.keys(this._cache));\n };\n Cache.prototype.proxy = function (src) {\n var _this = this;\n var proxy = this._options.proxy;\n if (!proxy) {\n throw new Error('No proxy defined');\n }\n var key = src.substring(0, 256);\n return new Promise(function (resolve, reject) {\n var responseType = FEATURES.SUPPORT_RESPONSE_TYPE ? 'blob' : 'text';\n var xhr = new XMLHttpRequest();\n xhr.onload = function () {\n if (xhr.status === 200) {\n if (responseType === 'text') {\n resolve(xhr.response);\n }\n else {\n var reader_1 = new FileReader();\n reader_1.addEventListener('load', function () { return resolve(reader_1.result); }, false);\n reader_1.addEventListener('error', function (e) { return reject(e); }, false);\n reader_1.readAsDataURL(xhr.response);\n }\n }\n else {\n reject(\"Failed to proxy resource \" + key + \" with status code \" + xhr.status);\n }\n };\n xhr.onerror = reject;\n var queryString = proxy.indexOf('?') > -1 ? '&' : '?';\n xhr.open('GET', \"\" + proxy + queryString + \"url=\" + encodeURIComponent(src) + \"&responseType=\" + responseType);\n if (responseType !== 'text' && xhr instanceof XMLHttpRequest) {\n xhr.responseType = responseType;\n }\n if (_this._options.imageTimeout) {\n var timeout_1 = _this._options.imageTimeout;\n xhr.timeout = timeout_1;\n xhr.ontimeout = function () { return reject(\"Timed out (\" + timeout_1 + \"ms) proxying \" + key); };\n }\n xhr.send();\n });\n };\n return Cache;\n }());\n var INLINE_SVG = /^data:image\\/svg\\+xml/i;\n var INLINE_BASE64 = /^data:image\\/.*;base64,/i;\n var INLINE_IMG = /^data:image\\/.*/i;\n var isRenderable = function (src) { return FEATURES.SUPPORT_SVG_DRAWING || !isSVG(src); };\n var isInlineImage = function (src) { return INLINE_IMG.test(src); };\n var isInlineBase64Image = function (src) { return INLINE_BASE64.test(src); };\n var isBlobImage = function (src) { return src.substr(0, 4) === 'blob'; };\n var isSVG = function (src) { return src.substr(-3).toLowerCase() === 'svg' || INLINE_SVG.test(src); };\n\n var Vector = /** @class */ (function () {\n function Vector(x, y) {\n this.type = 0 /* VECTOR */;\n this.x = x;\n this.y = y;\n }\n Vector.prototype.add = function (deltaX, deltaY) {\n return new Vector(this.x + deltaX, this.y + deltaY);\n };\n return Vector;\n }());\n\n var lerp = function (a, b, t) {\n return new Vector(a.x + (b.x - a.x) * t, a.y + (b.y - a.y) * t);\n };\n var BezierCurve = /** @class */ (function () {\n function BezierCurve(start, startControl, endControl, end) {\n this.type = 1 /* BEZIER_CURVE */;\n this.start = start;\n this.startControl = startControl;\n this.endControl = endControl;\n this.end = end;\n }\n BezierCurve.prototype.subdivide = function (t, firstHalf) {\n var ab = lerp(this.start, this.startControl, t);\n var bc = lerp(this.startControl, this.endControl, t);\n var cd = lerp(this.endControl, this.end, t);\n var abbc = lerp(ab, bc, t);\n var bccd = lerp(bc, cd, t);\n var dest = lerp(abbc, bccd, t);\n return firstHalf ? new BezierCurve(this.start, ab, abbc, dest) : new BezierCurve(dest, bccd, cd, this.end);\n };\n BezierCurve.prototype.add = function (deltaX, deltaY) {\n return new BezierCurve(this.start.add(deltaX, deltaY), this.startControl.add(deltaX, deltaY), this.endControl.add(deltaX, deltaY), this.end.add(deltaX, deltaY));\n };\n BezierCurve.prototype.reverse = function () {\n return new BezierCurve(this.end, this.endControl, this.startControl, this.start);\n };\n return BezierCurve;\n }());\n var isBezierCurve = function (path) { return path.type === 1 /* BEZIER_CURVE */; };\n\n var BoundCurves = /** @class */ (function () {\n function BoundCurves(element) {\n var styles = element.styles;\n var bounds = element.bounds;\n var _a = getAbsoluteValueForTuple(styles.borderTopLeftRadius, bounds.width, bounds.height), tlh = _a[0], tlv = _a[1];\n var _b = getAbsoluteValueForTuple(styles.borderTopRightRadius, bounds.width, bounds.height), trh = _b[0], trv = _b[1];\n var _c = getAbsoluteValueForTuple(styles.borderBottomRightRadius, bounds.width, bounds.height), brh = _c[0], brv = _c[1];\n var _d = getAbsoluteValueForTuple(styles.borderBottomLeftRadius, bounds.width, bounds.height), blh = _d[0], blv = _d[1];\n var factors = [];\n factors.push((tlh + trh) / bounds.width);\n factors.push((blh + brh) / bounds.width);\n factors.push((tlv + blv) / bounds.height);\n factors.push((trv + brv) / bounds.height);\n var maxFactor = Math.max.apply(Math, factors);\n if (maxFactor > 1) {\n tlh /= maxFactor;\n tlv /= maxFactor;\n trh /= maxFactor;\n trv /= maxFactor;\n brh /= maxFactor;\n brv /= maxFactor;\n blh /= maxFactor;\n blv /= maxFactor;\n }\n var topWidth = bounds.width - trh;\n var rightHeight = bounds.height - brv;\n var bottomWidth = bounds.width - brh;\n var leftHeight = bounds.height - blv;\n var borderTopWidth = styles.borderTopWidth;\n var borderRightWidth = styles.borderRightWidth;\n var borderBottomWidth = styles.borderBottomWidth;\n var borderLeftWidth = styles.borderLeftWidth;\n var paddingTop = getAbsoluteValue(styles.paddingTop, element.bounds.width);\n var paddingRight = getAbsoluteValue(styles.paddingRight, element.bounds.width);\n var paddingBottom = getAbsoluteValue(styles.paddingBottom, element.bounds.width);\n var paddingLeft = getAbsoluteValue(styles.paddingLeft, element.bounds.width);\n this.topLeftBorderDoubleOuterBox =\n tlh > 0 || tlv > 0\n ? getCurvePoints(bounds.left + borderLeftWidth / 3, bounds.top + borderTopWidth / 3, tlh - borderLeftWidth / 3, tlv - borderTopWidth / 3, CORNER.TOP_LEFT)\n : new Vector(bounds.left + borderLeftWidth / 3, bounds.top + borderTopWidth / 3);\n this.topRightBorderDoubleOuterBox =\n tlh > 0 || tlv > 0\n ? getCurvePoints(bounds.left + topWidth, bounds.top + borderTopWidth / 3, trh - borderRightWidth / 3, trv - borderTopWidth / 3, CORNER.TOP_RIGHT)\n : new Vector(bounds.left + bounds.width - borderRightWidth / 3, bounds.top + borderTopWidth / 3);\n this.bottomRightBorderDoubleOuterBox =\n brh > 0 || brv > 0\n ? getCurvePoints(bounds.left + bottomWidth, bounds.top + rightHeight, brh - borderRightWidth / 3, brv - borderBottomWidth / 3, CORNER.BOTTOM_RIGHT)\n : new Vector(bounds.left + bounds.width - borderRightWidth / 3, bounds.top + bounds.height - borderBottomWidth / 3);\n this.bottomLeftBorderDoubleOuterBox =\n blh > 0 || blv > 0\n ? getCurvePoints(bounds.left + borderLeftWidth / 3, bounds.top + leftHeight, blh - borderLeftWidth / 3, blv - borderBottomWidth / 3, CORNER.BOTTOM_LEFT)\n : new Vector(bounds.left + borderLeftWidth / 3, bounds.top + bounds.height - borderBottomWidth / 3);\n this.topLeftBorderDoubleInnerBox =\n tlh > 0 || tlv > 0\n ? getCurvePoints(bounds.left + (borderLeftWidth * 2) / 3, bounds.top + (borderTopWidth * 2) / 3, tlh - (borderLeftWidth * 2) / 3, tlv - (borderTopWidth * 2) / 3, CORNER.TOP_LEFT)\n : new Vector(bounds.left + (borderLeftWidth * 2) / 3, bounds.top + (borderTopWidth * 2) / 3);\n this.topRightBorderDoubleInnerBox =\n tlh > 0 || tlv > 0\n ? getCurvePoints(bounds.left + topWidth, bounds.top + (borderTopWidth * 2) / 3, trh - (borderRightWidth * 2) / 3, trv - (borderTopWidth * 2) / 3, CORNER.TOP_RIGHT)\n : new Vector(bounds.left + bounds.width - (borderRightWidth * 2) / 3, bounds.top + (borderTopWidth * 2) / 3);\n this.bottomRightBorderDoubleInnerBox =\n brh > 0 || brv > 0\n ? getCurvePoints(bounds.left + bottomWidth, bounds.top + rightHeight, brh - (borderRightWidth * 2) / 3, brv - (borderBottomWidth * 2) / 3, CORNER.BOTTOM_RIGHT)\n : new Vector(bounds.left + bounds.width - (borderRightWidth * 2) / 3, bounds.top + bounds.height - (borderBottomWidth * 2) / 3);\n this.bottomLeftBorderDoubleInnerBox =\n blh > 0 || blv > 0\n ? getCurvePoints(bounds.left + (borderLeftWidth * 2) / 3, bounds.top + leftHeight, blh - (borderLeftWidth * 2) / 3, blv - (borderBottomWidth * 2) / 3, CORNER.BOTTOM_LEFT)\n : new Vector(bounds.left + (borderLeftWidth * 2) / 3, bounds.top + bounds.height - (borderBottomWidth * 2) / 3);\n this.topLeftBorderStroke =\n tlh > 0 || tlv > 0\n ? getCurvePoints(bounds.left + borderLeftWidth / 2, bounds.top + borderTopWidth / 2, tlh - borderLeftWidth / 2, tlv - borderTopWidth / 2, CORNER.TOP_LEFT)\n : new Vector(bounds.left + borderLeftWidth / 2, bounds.top + borderTopWidth / 2);\n this.topRightBorderStroke =\n tlh > 0 || tlv > 0\n ? getCurvePoints(bounds.left + topWidth, bounds.top + borderTopWidth / 2, trh - borderRightWidth / 2, trv - borderTopWidth / 2, CORNER.TOP_RIGHT)\n : new Vector(bounds.left + bounds.width - borderRightWidth / 2, bounds.top + borderTopWidth / 2);\n this.bottomRightBorderStroke =\n brh > 0 || brv > 0\n ? getCurvePoints(bounds.left + bottomWidth, bounds.top + rightHeight, brh - borderRightWidth / 2, brv - borderBottomWidth / 2, CORNER.BOTTOM_RIGHT)\n : new Vector(bounds.left + bounds.width - borderRightWidth / 2, bounds.top + bounds.height - borderBottomWidth / 2);\n this.bottomLeftBorderStroke =\n blh > 0 || blv > 0\n ? getCurvePoints(bounds.left + borderLeftWidth / 2, bounds.top + leftHeight, blh - borderLeftWidth / 2, blv - borderBottomWidth / 2, CORNER.BOTTOM_LEFT)\n : new Vector(bounds.left + borderLeftWidth / 2, bounds.top + bounds.height - borderBottomWidth / 2);\n this.topLeftBorderBox =\n tlh > 0 || tlv > 0\n ? getCurvePoints(bounds.left, bounds.top, tlh, tlv, CORNER.TOP_LEFT)\n : new Vector(bounds.left, bounds.top);\n this.topRightBorderBox =\n trh > 0 || trv > 0\n ? getCurvePoints(bounds.left + topWidth, bounds.top, trh, trv, CORNER.TOP_RIGHT)\n : new Vector(bounds.left + bounds.width, bounds.top);\n this.bottomRightBorderBox =\n brh > 0 || brv > 0\n ? getCurvePoints(bounds.left + bottomWidth, bounds.top + rightHeight, brh, brv, CORNER.BOTTOM_RIGHT)\n : new Vector(bounds.left + bounds.width, bounds.top + bounds.height);\n this.bottomLeftBorderBox =\n blh > 0 || blv > 0\n ? getCurvePoints(bounds.left, bounds.top + leftHeight, blh, blv, CORNER.BOTTOM_LEFT)\n : new Vector(bounds.left, bounds.top + bounds.height);\n this.topLeftPaddingBox =\n tlh > 0 || tlv > 0\n ? getCurvePoints(bounds.left + borderLeftWidth, bounds.top + borderTopWidth, Math.max(0, tlh - borderLeftWidth), Math.max(0, tlv - borderTopWidth), CORNER.TOP_LEFT)\n : new Vector(bounds.left + borderLeftWidth, bounds.top + borderTopWidth);\n this.topRightPaddingBox =\n trh > 0 || trv > 0\n ? getCurvePoints(bounds.left + Math.min(topWidth, bounds.width - borderRightWidth), bounds.top + borderTopWidth, topWidth > bounds.width + borderRightWidth ? 0 : Math.max(0, trh - borderRightWidth), Math.max(0, trv - borderTopWidth), CORNER.TOP_RIGHT)\n : new Vector(bounds.left + bounds.width - borderRightWidth, bounds.top + borderTopWidth);\n this.bottomRightPaddingBox =\n brh > 0 || brv > 0\n ? getCurvePoints(bounds.left + Math.min(bottomWidth, bounds.width - borderLeftWidth), bounds.top + Math.min(rightHeight, bounds.height - borderBottomWidth), Math.max(0, brh - borderRightWidth), Math.max(0, brv - borderBottomWidth), CORNER.BOTTOM_RIGHT)\n : new Vector(bounds.left + bounds.width - borderRightWidth, bounds.top + bounds.height - borderBottomWidth);\n this.bottomLeftPaddingBox =\n blh > 0 || blv > 0\n ? getCurvePoints(bounds.left + borderLeftWidth, bounds.top + Math.min(leftHeight, bounds.height - borderBottomWidth), Math.max(0, blh - borderLeftWidth), Math.max(0, blv - borderBottomWidth), CORNER.BOTTOM_LEFT)\n : new Vector(bounds.left + borderLeftWidth, bounds.top + bounds.height - borderBottomWidth);\n this.topLeftContentBox =\n tlh > 0 || tlv > 0\n ? getCurvePoints(bounds.left + borderLeftWidth + paddingLeft, bounds.top + borderTopWidth + paddingTop, Math.max(0, tlh - (borderLeftWidth + paddingLeft)), Math.max(0, tlv - (borderTopWidth + paddingTop)), CORNER.TOP_LEFT)\n : new Vector(bounds.left + borderLeftWidth + paddingLeft, bounds.top + borderTopWidth + paddingTop);\n this.topRightContentBox =\n trh > 0 || trv > 0\n ? getCurvePoints(bounds.left + Math.min(topWidth, bounds.width + borderLeftWidth + paddingLeft), bounds.top + borderTopWidth + paddingTop, topWidth > bounds.width + borderLeftWidth + paddingLeft ? 0 : trh - borderLeftWidth + paddingLeft, trv - (borderTopWidth + paddingTop), CORNER.TOP_RIGHT)\n : new Vector(bounds.left + bounds.width - (borderRightWidth + paddingRight), bounds.top + borderTopWidth + paddingTop);\n this.bottomRightContentBox =\n brh > 0 || brv > 0\n ? getCurvePoints(bounds.left + Math.min(bottomWidth, bounds.width - (borderLeftWidth + paddingLeft)), bounds.top + Math.min(rightHeight, bounds.height + borderTopWidth + paddingTop), Math.max(0, brh - (borderRightWidth + paddingRight)), brv - (borderBottomWidth + paddingBottom), CORNER.BOTTOM_RIGHT)\n : new Vector(bounds.left + bounds.width - (borderRightWidth + paddingRight), bounds.top + bounds.height - (borderBottomWidth + paddingBottom));\n this.bottomLeftContentBox =\n blh > 0 || blv > 0\n ? getCurvePoints(bounds.left + borderLeftWidth + paddingLeft, bounds.top + leftHeight, Math.max(0, blh - (borderLeftWidth + paddingLeft)), blv - (borderBottomWidth + paddingBottom), CORNER.BOTTOM_LEFT)\n : new Vector(bounds.left + borderLeftWidth + paddingLeft, bounds.top + bounds.height - (borderBottomWidth + paddingBottom));\n }\n return BoundCurves;\n }());\n var CORNER;\n (function (CORNER) {\n CORNER[CORNER[\"TOP_LEFT\"] = 0] = \"TOP_LEFT\";\n CORNER[CORNER[\"TOP_RIGHT\"] = 1] = \"TOP_RIGHT\";\n CORNER[CORNER[\"BOTTOM_RIGHT\"] = 2] = \"BOTTOM_RIGHT\";\n CORNER[CORNER[\"BOTTOM_LEFT\"] = 3] = \"BOTTOM_LEFT\";\n })(CORNER || (CORNER = {}));\n var getCurvePoints = function (x, y, r1, r2, position) {\n var kappa = 4 * ((Math.sqrt(2) - 1) / 3);\n var ox = r1 * kappa; // control point offset horizontal\n var oy = r2 * kappa; // control point offset vertical\n var xm = x + r1; // x-middle\n var ym = y + r2; // y-middle\n switch (position) {\n case CORNER.TOP_LEFT:\n return new BezierCurve(new Vector(x, ym), new Vector(x, ym - oy), new Vector(xm - ox, y), new Vector(xm, y));\n case CORNER.TOP_RIGHT:\n return new BezierCurve(new Vector(x, y), new Vector(x + ox, y), new Vector(xm, ym - oy), new Vector(xm, ym));\n case CORNER.BOTTOM_RIGHT:\n return new BezierCurve(new Vector(xm, y), new Vector(xm, y + oy), new Vector(x + ox, ym), new Vector(x, ym));\n case CORNER.BOTTOM_LEFT:\n default:\n return new BezierCurve(new Vector(xm, ym), new Vector(xm - ox, ym), new Vector(x, y + oy), new Vector(x, y));\n }\n };\n var calculateBorderBoxPath = function (curves) {\n return [curves.topLeftBorderBox, curves.topRightBorderBox, curves.bottomRightBorderBox, curves.bottomLeftBorderBox];\n };\n var calculateContentBoxPath = function (curves) {\n return [\n curves.topLeftContentBox,\n curves.topRightContentBox,\n curves.bottomRightContentBox,\n curves.bottomLeftContentBox\n ];\n };\n var calculatePaddingBoxPath = function (curves) {\n return [\n curves.topLeftPaddingBox,\n curves.topRightPaddingBox,\n curves.bottomRightPaddingBox,\n curves.bottomLeftPaddingBox\n ];\n };\n\n var TransformEffect = /** @class */ (function () {\n function TransformEffect(offsetX, offsetY, matrix) {\n this.offsetX = offsetX;\n this.offsetY = offsetY;\n this.matrix = matrix;\n this.type = 0 /* TRANSFORM */;\n this.target = 2 /* BACKGROUND_BORDERS */ | 4 /* CONTENT */;\n }\n return TransformEffect;\n }());\n var ClipEffect = /** @class */ (function () {\n function ClipEffect(path, target) {\n this.path = path;\n this.target = target;\n this.type = 1 /* CLIP */;\n }\n return ClipEffect;\n }());\n var OpacityEffect = /** @class */ (function () {\n function OpacityEffect(opacity) {\n this.opacity = opacity;\n this.type = 2 /* OPACITY */;\n this.target = 2 /* BACKGROUND_BORDERS */ | 4 /* CONTENT */;\n }\n return OpacityEffect;\n }());\n var isTransformEffect = function (effect) {\n return effect.type === 0 /* TRANSFORM */;\n };\n var isClipEffect = function (effect) { return effect.type === 1 /* CLIP */; };\n var isOpacityEffect = function (effect) { return effect.type === 2 /* OPACITY */; };\n\n var equalPath = function (a, b) {\n if (a.length === b.length) {\n return a.some(function (v, i) { return v === b[i]; });\n }\n return false;\n };\n var transformPath = function (path, deltaX, deltaY, deltaW, deltaH) {\n return path.map(function (point, index) {\n switch (index) {\n case 0:\n return point.add(deltaX, deltaY);\n case 1:\n return point.add(deltaX + deltaW, deltaY);\n case 2:\n return point.add(deltaX + deltaW, deltaY + deltaH);\n case 3:\n return point.add(deltaX, deltaY + deltaH);\n }\n return point;\n });\n };\n\n var StackingContext = /** @class */ (function () {\n function StackingContext(container) {\n this.element = container;\n this.inlineLevel = [];\n this.nonInlineLevel = [];\n this.negativeZIndex = [];\n this.zeroOrAutoZIndexOrTransformedOrOpacity = [];\n this.positiveZIndex = [];\n this.nonPositionedFloats = [];\n this.nonPositionedInlineLevel = [];\n }\n return StackingContext;\n }());\n var ElementPaint = /** @class */ (function () {\n function ElementPaint(container, parent) {\n this.container = container;\n this.parent = parent;\n this.effects = [];\n this.curves = new BoundCurves(this.container);\n if (this.container.styles.opacity < 1) {\n this.effects.push(new OpacityEffect(this.container.styles.opacity));\n }\n if (this.container.styles.transform !== null) {\n var offsetX = this.container.bounds.left + this.container.styles.transformOrigin[0].number;\n var offsetY = this.container.bounds.top + this.container.styles.transformOrigin[1].number;\n var matrix = this.container.styles.transform;\n this.effects.push(new TransformEffect(offsetX, offsetY, matrix));\n }\n if (this.container.styles.overflowX !== 0 /* VISIBLE */) {\n var borderBox = calculateBorderBoxPath(this.curves);\n var paddingBox = calculatePaddingBoxPath(this.curves);\n if (equalPath(borderBox, paddingBox)) {\n this.effects.push(new ClipEffect(borderBox, 2 /* BACKGROUND_BORDERS */ | 4 /* CONTENT */));\n }\n else {\n this.effects.push(new ClipEffect(borderBox, 2 /* BACKGROUND_BORDERS */));\n this.effects.push(new ClipEffect(paddingBox, 4 /* CONTENT */));\n }\n }\n }\n ElementPaint.prototype.getEffects = function (target) {\n var inFlow = [2 /* ABSOLUTE */, 3 /* FIXED */].indexOf(this.container.styles.position) === -1;\n var parent = this.parent;\n var effects = this.effects.slice(0);\n while (parent) {\n var croplessEffects = parent.effects.filter(function (effect) { return !isClipEffect(effect); });\n if (inFlow || parent.container.styles.position !== 0 /* STATIC */ || !parent.parent) {\n effects.unshift.apply(effects, croplessEffects);\n inFlow = [2 /* ABSOLUTE */, 3 /* FIXED */].indexOf(parent.container.styles.position) === -1;\n if (parent.container.styles.overflowX !== 0 /* VISIBLE */) {\n var borderBox = calculateBorderBoxPath(parent.curves);\n var paddingBox = calculatePaddingBoxPath(parent.curves);\n if (!equalPath(borderBox, paddingBox)) {\n effects.unshift(new ClipEffect(paddingBox, 2 /* BACKGROUND_BORDERS */ | 4 /* CONTENT */));\n }\n }\n }\n else {\n effects.unshift.apply(effects, croplessEffects);\n }\n parent = parent.parent;\n }\n return effects.filter(function (effect) { return contains(effect.target, target); });\n };\n return ElementPaint;\n }());\n var parseStackTree = function (parent, stackingContext, realStackingContext, listItems) {\n parent.container.elements.forEach(function (child) {\n var treatAsRealStackingContext = contains(child.flags, 4 /* CREATES_REAL_STACKING_CONTEXT */);\n var createsStackingContext = contains(child.flags, 2 /* CREATES_STACKING_CONTEXT */);\n var paintContainer = new ElementPaint(child, parent);\n if (contains(child.styles.display, 2048 /* LIST_ITEM */)) {\n listItems.push(paintContainer);\n }\n var listOwnerItems = contains(child.flags, 8 /* IS_LIST_OWNER */) ? [] : listItems;\n if (treatAsRealStackingContext || createsStackingContext) {\n var parentStack = treatAsRealStackingContext || child.styles.isPositioned() ? realStackingContext : stackingContext;\n var stack = new StackingContext(paintContainer);\n if (child.styles.isPositioned() || child.styles.opacity < 1 || child.styles.isTransformed()) {\n var order_1 = child.styles.zIndex.order;\n if (order_1 < 0) {\n var index_1 = 0;\n parentStack.negativeZIndex.some(function (current, i) {\n if (order_1 > current.element.container.styles.zIndex.order) {\n index_1 = i;\n return false;\n }\n else if (index_1 > 0) {\n return true;\n }\n return false;\n });\n parentStack.negativeZIndex.splice(index_1, 0, stack);\n }\n else if (order_1 > 0) {\n var index_2 = 0;\n parentStack.positiveZIndex.some(function (current, i) {\n if (order_1 >= current.element.container.styles.zIndex.order) {\n index_2 = i + 1;\n return false;\n }\n else if (index_2 > 0) {\n return true;\n }\n return false;\n });\n parentStack.positiveZIndex.splice(index_2, 0, stack);\n }\n else {\n parentStack.zeroOrAutoZIndexOrTransformedOrOpacity.push(stack);\n }\n }\n else {\n if (child.styles.isFloating()) {\n parentStack.nonPositionedFloats.push(stack);\n }\n else {\n parentStack.nonPositionedInlineLevel.push(stack);\n }\n }\n parseStackTree(paintContainer, stack, treatAsRealStackingContext ? stack : realStackingContext, listOwnerItems);\n }\n else {\n if (child.styles.isInlineLevel()) {\n stackingContext.inlineLevel.push(paintContainer);\n }\n else {\n stackingContext.nonInlineLevel.push(paintContainer);\n }\n parseStackTree(paintContainer, stackingContext, realStackingContext, listOwnerItems);\n }\n if (contains(child.flags, 8 /* IS_LIST_OWNER */)) {\n processListItems(child, listOwnerItems);\n }\n });\n };\n var processListItems = function (owner, elements) {\n var numbering = owner instanceof OLElementContainer ? owner.start : 1;\n var reversed = owner instanceof OLElementContainer ? owner.reversed : false;\n for (var i = 0; i < elements.length; i++) {\n var item = elements[i];\n if (item.container instanceof LIElementContainer &&\n typeof item.container.value === 'number' &&\n item.container.value !== 0) {\n numbering = item.container.value;\n }\n item.listValue = createCounterText(numbering, item.container.styles.listStyleType, true);\n numbering += reversed ? -1 : 1;\n }\n };\n var parseStackingContexts = function (container) {\n var paintContainer = new ElementPaint(container, null);\n var root = new StackingContext(paintContainer);\n var listItems = [];\n parseStackTree(paintContainer, root, root, listItems);\n processListItems(paintContainer.container, listItems);\n return root;\n };\n\n var parsePathForBorder = function (curves, borderSide) {\n switch (borderSide) {\n case 0:\n return createPathFromCurves(curves.topLeftBorderBox, curves.topLeftPaddingBox, curves.topRightBorderBox, curves.topRightPaddingBox);\n case 1:\n return createPathFromCurves(curves.topRightBorderBox, curves.topRightPaddingBox, curves.bottomRightBorderBox, curves.bottomRightPaddingBox);\n case 2:\n return createPathFromCurves(curves.bottomRightBorderBox, curves.bottomRightPaddingBox, curves.bottomLeftBorderBox, curves.bottomLeftPaddingBox);\n case 3:\n default:\n return createPathFromCurves(curves.bottomLeftBorderBox, curves.bottomLeftPaddingBox, curves.topLeftBorderBox, curves.topLeftPaddingBox);\n }\n };\n var parsePathForBorderDoubleOuter = function (curves, borderSide) {\n switch (borderSide) {\n case 0:\n return createPathFromCurves(curves.topLeftBorderBox, curves.topLeftBorderDoubleOuterBox, curves.topRightBorderBox, curves.topRightBorderDoubleOuterBox);\n case 1:\n return createPathFromCurves(curves.topRightBorderBox, curves.topRightBorderDoubleOuterBox, curves.bottomRightBorderBox, curves.bottomRightBorderDoubleOuterBox);\n case 2:\n return createPathFromCurves(curves.bottomRightBorderBox, curves.bottomRightBorderDoubleOuterBox, curves.bottomLeftBorderBox, curves.bottomLeftBorderDoubleOuterBox);\n case 3:\n default:\n return createPathFromCurves(curves.bottomLeftBorderBox, curves.bottomLeftBorderDoubleOuterBox, curves.topLeftBorderBox, curves.topLeftBorderDoubleOuterBox);\n }\n };\n var parsePathForBorderDoubleInner = function (curves, borderSide) {\n switch (borderSide) {\n case 0:\n return createPathFromCurves(curves.topLeftBorderDoubleInnerBox, curves.topLeftPaddingBox, curves.topRightBorderDoubleInnerBox, curves.topRightPaddingBox);\n case 1:\n return createPathFromCurves(curves.topRightBorderDoubleInnerBox, curves.topRightPaddingBox, curves.bottomRightBorderDoubleInnerBox, curves.bottomRightPaddingBox);\n case 2:\n return createPathFromCurves(curves.bottomRightBorderDoubleInnerBox, curves.bottomRightPaddingBox, curves.bottomLeftBorderDoubleInnerBox, curves.bottomLeftPaddingBox);\n case 3:\n default:\n return createPathFromCurves(curves.bottomLeftBorderDoubleInnerBox, curves.bottomLeftPaddingBox, curves.topLeftBorderDoubleInnerBox, curves.topLeftPaddingBox);\n }\n };\n var parsePathForBorderStroke = function (curves, borderSide) {\n switch (borderSide) {\n case 0:\n return createStrokePathFromCurves(curves.topLeftBorderStroke, curves.topRightBorderStroke);\n case 1:\n return createStrokePathFromCurves(curves.topRightBorderStroke, curves.bottomRightBorderStroke);\n case 2:\n return createStrokePathFromCurves(curves.bottomRightBorderStroke, curves.bottomLeftBorderStroke);\n case 3:\n default:\n return createStrokePathFromCurves(curves.bottomLeftBorderStroke, curves.topLeftBorderStroke);\n }\n };\n var createStrokePathFromCurves = function (outer1, outer2) {\n var path = [];\n if (isBezierCurve(outer1)) {\n path.push(outer1.subdivide(0.5, false));\n }\n else {\n path.push(outer1);\n }\n if (isBezierCurve(outer2)) {\n path.push(outer2.subdivide(0.5, true));\n }\n else {\n path.push(outer2);\n }\n return path;\n };\n var createPathFromCurves = function (outer1, inner1, outer2, inner2) {\n var path = [];\n if (isBezierCurve(outer1)) {\n path.push(outer1.subdivide(0.5, false));\n }\n else {\n path.push(outer1);\n }\n if (isBezierCurve(outer2)) {\n path.push(outer2.subdivide(0.5, true));\n }\n else {\n path.push(outer2);\n }\n if (isBezierCurve(inner2)) {\n path.push(inner2.subdivide(0.5, true).reverse());\n }\n else {\n path.push(inner2);\n }\n if (isBezierCurve(inner1)) {\n path.push(inner1.subdivide(0.5, false).reverse());\n }\n else {\n path.push(inner1);\n }\n return path;\n };\n\n var paddingBox = function (element) {\n var bounds = element.bounds;\n var styles = element.styles;\n return bounds.add(styles.borderLeftWidth, styles.borderTopWidth, -(styles.borderRightWidth + styles.borderLeftWidth), -(styles.borderTopWidth + styles.borderBottomWidth));\n };\n var contentBox = function (element) {\n var styles = element.styles;\n var bounds = element.bounds;\n var paddingLeft = getAbsoluteValue(styles.paddingLeft, bounds.width);\n var paddingRight = getAbsoluteValue(styles.paddingRight, bounds.width);\n var paddingTop = getAbsoluteValue(styles.paddingTop, bounds.width);\n var paddingBottom = getAbsoluteValue(styles.paddingBottom, bounds.width);\n return bounds.add(paddingLeft + styles.borderLeftWidth, paddingTop + styles.borderTopWidth, -(styles.borderRightWidth + styles.borderLeftWidth + paddingLeft + paddingRight), -(styles.borderTopWidth + styles.borderBottomWidth + paddingTop + paddingBottom));\n };\n\n var calculateBackgroundPositioningArea = function (backgroundOrigin, element) {\n if (backgroundOrigin === 0 /* BORDER_BOX */) {\n return element.bounds;\n }\n if (backgroundOrigin === 2 /* CONTENT_BOX */) {\n return contentBox(element);\n }\n return paddingBox(element);\n };\n var calculateBackgroundPaintingArea = function (backgroundClip, element) {\n if (backgroundClip === 0 /* BORDER_BOX */) {\n return element.bounds;\n }\n if (backgroundClip === 2 /* CONTENT_BOX */) {\n return contentBox(element);\n }\n return paddingBox(element);\n };\n var calculateBackgroundRendering = function (container, index, intrinsicSize) {\n var backgroundPositioningArea = calculateBackgroundPositioningArea(getBackgroundValueForIndex(container.styles.backgroundOrigin, index), container);\n var backgroundPaintingArea = calculateBackgroundPaintingArea(getBackgroundValueForIndex(container.styles.backgroundClip, index), container);\n var backgroundImageSize = calculateBackgroundSize(getBackgroundValueForIndex(container.styles.backgroundSize, index), intrinsicSize, backgroundPositioningArea);\n var sizeWidth = backgroundImageSize[0], sizeHeight = backgroundImageSize[1];\n var position = getAbsoluteValueForTuple(getBackgroundValueForIndex(container.styles.backgroundPosition, index), backgroundPositioningArea.width - sizeWidth, backgroundPositioningArea.height - sizeHeight);\n var path = calculateBackgroundRepeatPath(getBackgroundValueForIndex(container.styles.backgroundRepeat, index), position, backgroundImageSize, backgroundPositioningArea, backgroundPaintingArea);\n var offsetX = Math.round(backgroundPositioningArea.left + position[0]);\n var offsetY = Math.round(backgroundPositioningArea.top + position[1]);\n return [path, offsetX, offsetY, sizeWidth, sizeHeight];\n };\n var isAuto = function (token) { return isIdentToken(token) && token.value === BACKGROUND_SIZE.AUTO; };\n var hasIntrinsicValue = function (value) { return typeof value === 'number'; };\n var calculateBackgroundSize = function (size, _a, bounds) {\n var intrinsicWidth = _a[0], intrinsicHeight = _a[1], intrinsicProportion = _a[2];\n var first = size[0], second = size[1];\n if (!first) {\n return [0, 0];\n }\n if (isLengthPercentage(first) && second && isLengthPercentage(second)) {\n return [getAbsoluteValue(first, bounds.width), getAbsoluteValue(second, bounds.height)];\n }\n var hasIntrinsicProportion = hasIntrinsicValue(intrinsicProportion);\n if (isIdentToken(first) && (first.value === BACKGROUND_SIZE.CONTAIN || first.value === BACKGROUND_SIZE.COVER)) {\n if (hasIntrinsicValue(intrinsicProportion)) {\n var targetRatio = bounds.width / bounds.height;\n return targetRatio < intrinsicProportion !== (first.value === BACKGROUND_SIZE.COVER)\n ? [bounds.width, bounds.width / intrinsicProportion]\n : [bounds.height * intrinsicProportion, bounds.height];\n }\n return [bounds.width, bounds.height];\n }\n var hasIntrinsicWidth = hasIntrinsicValue(intrinsicWidth);\n var hasIntrinsicHeight = hasIntrinsicValue(intrinsicHeight);\n var hasIntrinsicDimensions = hasIntrinsicWidth || hasIntrinsicHeight;\n // If the background-size is auto or auto auto:\n if (isAuto(first) && (!second || isAuto(second))) {\n // If the image has both horizontal and vertical intrinsic dimensions, it's rendered at that size.\n if (hasIntrinsicWidth && hasIntrinsicHeight) {\n return [intrinsicWidth, intrinsicHeight];\n }\n // If the image has no intrinsic dimensions and has no intrinsic proportions,\n // it's rendered at the size of the background positioning area.\n if (!hasIntrinsicProportion && !hasIntrinsicDimensions) {\n return [bounds.width, bounds.height];\n }\n // TODO If the image has no intrinsic dimensions but has intrinsic proportions, it's rendered as if contain had been specified instead.\n // If the image has only one intrinsic dimension and has intrinsic proportions, it's rendered at the size corresponding to that one dimension.\n // The other dimension is computed using the specified dimension and the intrinsic proportions.\n if (hasIntrinsicDimensions && hasIntrinsicProportion) {\n var width_1 = hasIntrinsicWidth\n ? intrinsicWidth\n : intrinsicHeight * intrinsicProportion;\n var height_1 = hasIntrinsicHeight\n ? intrinsicHeight\n : intrinsicWidth / intrinsicProportion;\n return [width_1, height_1];\n }\n // If the image has only one intrinsic dimension but has no intrinsic proportions,\n // it's rendered using the specified dimension and the other dimension of the background positioning area.\n var width_2 = hasIntrinsicWidth ? intrinsicWidth : bounds.width;\n var height_2 = hasIntrinsicHeight ? intrinsicHeight : bounds.height;\n return [width_2, height_2];\n }\n // If the image has intrinsic proportions, it's stretched to the specified dimension.\n // The unspecified dimension is computed using the specified dimension and the intrinsic proportions.\n if (hasIntrinsicProportion) {\n var width_3 = 0;\n var height_3 = 0;\n if (isLengthPercentage(first)) {\n width_3 = getAbsoluteValue(first, bounds.width);\n }\n else if (isLengthPercentage(second)) {\n height_3 = getAbsoluteValue(second, bounds.height);\n }\n if (isAuto(first)) {\n width_3 = height_3 * intrinsicProportion;\n }\n else if (!second || isAuto(second)) {\n height_3 = width_3 / intrinsicProportion;\n }\n return [width_3, height_3];\n }\n // If the image has no intrinsic proportions, it's stretched to the specified dimension.\n // The unspecified dimension is computed using the image's corresponding intrinsic dimension,\n // if there is one. If there is no such intrinsic dimension,\n // it becomes the corresponding dimension of the background positioning area.\n var width = null;\n var height = null;\n if (isLengthPercentage(first)) {\n width = getAbsoluteValue(first, bounds.width);\n }\n else if (second && isLengthPercentage(second)) {\n height = getAbsoluteValue(second, bounds.height);\n }\n if (width !== null && (!second || isAuto(second))) {\n height =\n hasIntrinsicWidth && hasIntrinsicHeight\n ? (width / intrinsicWidth) * intrinsicHeight\n : bounds.height;\n }\n if (height !== null && isAuto(first)) {\n width =\n hasIntrinsicWidth && hasIntrinsicHeight\n ? (height / intrinsicHeight) * intrinsicWidth\n : bounds.width;\n }\n if (width !== null && height !== null) {\n return [width, height];\n }\n throw new Error(\"Unable to calculate background-size for element\");\n };\n var getBackgroundValueForIndex = function (values, index) {\n var value = values[index];\n if (typeof value === 'undefined') {\n return values[0];\n }\n return value;\n };\n var calculateBackgroundRepeatPath = function (repeat, _a, _b, backgroundPositioningArea, backgroundPaintingArea) {\n var x = _a[0], y = _a[1];\n var width = _b[0], height = _b[1];\n switch (repeat) {\n case 2 /* REPEAT_X */:\n return [\n new Vector(Math.round(backgroundPositioningArea.left), Math.round(backgroundPositioningArea.top + y)),\n new Vector(Math.round(backgroundPositioningArea.left + backgroundPositioningArea.width), Math.round(backgroundPositioningArea.top + y)),\n new Vector(Math.round(backgroundPositioningArea.left + backgroundPositioningArea.width), Math.round(height + backgroundPositioningArea.top + y)),\n new Vector(Math.round(backgroundPositioningArea.left), Math.round(height + backgroundPositioningArea.top + y))\n ];\n case 3 /* REPEAT_Y */:\n return [\n new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.top)),\n new Vector(Math.round(backgroundPositioningArea.left + x + width), Math.round(backgroundPositioningArea.top)),\n new Vector(Math.round(backgroundPositioningArea.left + x + width), Math.round(backgroundPositioningArea.height + backgroundPositioningArea.top)),\n new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.height + backgroundPositioningArea.top))\n ];\n case 1 /* NO_REPEAT */:\n return [\n new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.top + y)),\n new Vector(Math.round(backgroundPositioningArea.left + x + width), Math.round(backgroundPositioningArea.top + y)),\n new Vector(Math.round(backgroundPositioningArea.left + x + width), Math.round(backgroundPositioningArea.top + y + height)),\n new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.top + y + height))\n ];\n default:\n return [\n new Vector(Math.round(backgroundPaintingArea.left), Math.round(backgroundPaintingArea.top)),\n new Vector(Math.round(backgroundPaintingArea.left + backgroundPaintingArea.width), Math.round(backgroundPaintingArea.top)),\n new Vector(Math.round(backgroundPaintingArea.left + backgroundPaintingArea.width), Math.round(backgroundPaintingArea.height + backgroundPaintingArea.top)),\n new Vector(Math.round(backgroundPaintingArea.left), Math.round(backgroundPaintingArea.height + backgroundPaintingArea.top))\n ];\n }\n };\n\n var SMALL_IMAGE = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n\n var SAMPLE_TEXT = 'Hidden Text';\n var FontMetrics = /** @class */ (function () {\n function FontMetrics(document) {\n this._data = {};\n this._document = document;\n }\n FontMetrics.prototype.parseMetrics = function (fontFamily, fontSize) {\n var container = this._document.createElement('div');\n var img = this._document.createElement('img');\n var span = this._document.createElement('span');\n var body = this._document.body;\n container.style.visibility = 'hidden';\n container.style.fontFamily = fontFamily;\n container.style.fontSize = fontSize;\n container.style.margin = '0';\n container.style.padding = '0';\n container.style.whiteSpace = 'nowrap';\n body.appendChild(container);\n img.src = SMALL_IMAGE;\n img.width = 1;\n img.height = 1;\n img.style.margin = '0';\n img.style.padding = '0';\n img.style.verticalAlign = 'baseline';\n span.style.fontFamily = fontFamily;\n span.style.fontSize = fontSize;\n span.style.margin = '0';\n span.style.padding = '0';\n span.appendChild(this._document.createTextNode(SAMPLE_TEXT));\n container.appendChild(span);\n container.appendChild(img);\n var baseline = img.offsetTop - span.offsetTop + 2;\n container.removeChild(span);\n container.appendChild(this._document.createTextNode(SAMPLE_TEXT));\n container.style.lineHeight = 'normal';\n img.style.verticalAlign = 'super';\n var middle = img.offsetTop - container.offsetTop + 2;\n body.removeChild(container);\n return { baseline: baseline, middle: middle };\n };\n FontMetrics.prototype.getMetrics = function (fontFamily, fontSize) {\n var key = fontFamily + \" \" + fontSize;\n if (typeof this._data[key] === 'undefined') {\n this._data[key] = this.parseMetrics(fontFamily, fontSize);\n }\n return this._data[key];\n };\n return FontMetrics;\n }());\n\n var Renderer = /** @class */ (function () {\n function Renderer(context, options) {\n this.context = context;\n this.options = options;\n }\n return Renderer;\n }());\n\n var MASK_OFFSET = 10000;\n var CanvasRenderer = /** @class */ (function (_super) {\n __extends(CanvasRenderer, _super);\n function CanvasRenderer(context, options) {\n var _this = _super.call(this, context, options) || this;\n _this._activeEffects = [];\n _this.canvas = options.canvas ? options.canvas : document.createElement('canvas');\n _this.ctx = _this.canvas.getContext('2d');\n if (!options.canvas) {\n _this.canvas.width = Math.floor(options.width * options.scale);\n _this.canvas.height = Math.floor(options.height * options.scale);\n _this.canvas.style.width = options.width + \"px\";\n _this.canvas.style.height = options.height + \"px\";\n }\n _this.fontMetrics = new FontMetrics(document);\n _this.ctx.scale(_this.options.scale, _this.options.scale);\n _this.ctx.translate(-options.x, -options.y);\n _this.ctx.textBaseline = 'bottom';\n _this._activeEffects = [];\n _this.context.logger.debug(\"Canvas renderer initialized (\" + options.width + \"x\" + options.height + \") with scale \" + options.scale);\n return _this;\n }\n CanvasRenderer.prototype.applyEffects = function (effects) {\n var _this = this;\n while (this._activeEffects.length) {\n this.popEffect();\n }\n effects.forEach(function (effect) { return _this.applyEffect(effect); });\n };\n CanvasRenderer.prototype.applyEffect = function (effect) {\n this.ctx.save();\n if (isOpacityEffect(effect)) {\n this.ctx.globalAlpha = effect.opacity;\n }\n if (isTransformEffect(effect)) {\n this.ctx.translate(effect.offsetX, effect.offsetY);\n this.ctx.transform(effect.matrix[0], effect.matrix[1], effect.matrix[2], effect.matrix[3], effect.matrix[4], effect.matrix[5]);\n this.ctx.translate(-effect.offsetX, -effect.offsetY);\n }\n if (isClipEffect(effect)) {\n this.path(effect.path);\n this.ctx.clip();\n }\n this._activeEffects.push(effect);\n };\n CanvasRenderer.prototype.popEffect = function () {\n this._activeEffects.pop();\n this.ctx.restore();\n };\n CanvasRenderer.prototype.renderStack = function (stack) {\n return __awaiter(this, void 0, void 0, function () {\n var styles;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n styles = stack.element.container.styles;\n if (!styles.isVisible()) return [3 /*break*/, 2];\n return [4 /*yield*/, this.renderStackContent(stack)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2: return [2 /*return*/];\n }\n });\n });\n };\n CanvasRenderer.prototype.renderNode = function (paint) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (contains(paint.container.flags, 16 /* DEBUG_RENDER */)) {\n debugger;\n }\n if (!paint.container.styles.isVisible()) return [3 /*break*/, 3];\n return [4 /*yield*/, this.renderNodeBackgroundAndBorders(paint)];\n case 1:\n _a.sent();\n return [4 /*yield*/, this.renderNodeContent(paint)];\n case 2:\n _a.sent();\n _a.label = 3;\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n CanvasRenderer.prototype.renderTextWithLetterSpacing = function (text, letterSpacing, baseline) {\n var _this = this;\n if (letterSpacing === 0) {\n this.ctx.fillText(text.text, text.bounds.left, text.bounds.top + baseline);\n }\n else {\n var letters = segmentGraphemes(text.text);\n letters.reduce(function (left, letter) {\n _this.ctx.fillText(letter, left, text.bounds.top + baseline);\n return left + _this.ctx.measureText(letter).width;\n }, text.bounds.left);\n }\n };\n CanvasRenderer.prototype.createFontStyle = function (styles) {\n var fontVariant = styles.fontVariant\n .filter(function (variant) { return variant === 'normal' || variant === 'small-caps'; })\n .join('');\n var fontFamily = fixIOSSystemFonts(styles.fontFamily).join(', ');\n var fontSize = isDimensionToken(styles.fontSize)\n ? \"\" + styles.fontSize.number + styles.fontSize.unit\n : styles.fontSize.number + \"px\";\n return [\n [styles.fontStyle, fontVariant, styles.fontWeight, fontSize, fontFamily].join(' '),\n fontFamily,\n fontSize\n ];\n };\n CanvasRenderer.prototype.renderTextNode = function (text, styles) {\n return __awaiter(this, void 0, void 0, function () {\n var _a, font, fontFamily, fontSize, _b, baseline, middle, paintOrder;\n var _this = this;\n return __generator(this, function (_c) {\n _a = this.createFontStyle(styles), font = _a[0], fontFamily = _a[1], fontSize = _a[2];\n this.ctx.font = font;\n this.ctx.direction = styles.direction === 1 /* RTL */ ? 'rtl' : 'ltr';\n this.ctx.textAlign = 'left';\n this.ctx.textBaseline = 'alphabetic';\n _b = this.fontMetrics.getMetrics(fontFamily, fontSize), baseline = _b.baseline, middle = _b.middle;\n paintOrder = styles.paintOrder;\n text.textBounds.forEach(function (text) {\n paintOrder.forEach(function (paintOrderLayer) {\n switch (paintOrderLayer) {\n case 0 /* FILL */:\n _this.ctx.fillStyle = asString(styles.color);\n _this.renderTextWithLetterSpacing(text, styles.letterSpacing, baseline);\n var textShadows = styles.textShadow;\n if (textShadows.length && text.text.trim().length) {\n textShadows\n .slice(0)\n .reverse()\n .forEach(function (textShadow) {\n _this.ctx.shadowColor = asString(textShadow.color);\n _this.ctx.shadowOffsetX = textShadow.offsetX.number * _this.options.scale;\n _this.ctx.shadowOffsetY = textShadow.offsetY.number * _this.options.scale;\n _this.ctx.shadowBlur = textShadow.blur.number;\n _this.renderTextWithLetterSpacing(text, styles.letterSpacing, baseline);\n });\n _this.ctx.shadowColor = '';\n _this.ctx.shadowOffsetX = 0;\n _this.ctx.shadowOffsetY = 0;\n _this.ctx.shadowBlur = 0;\n }\n if (styles.textDecorationLine.length) {\n _this.ctx.fillStyle = asString(styles.textDecorationColor || styles.color);\n styles.textDecorationLine.forEach(function (textDecorationLine) {\n switch (textDecorationLine) {\n case 1 /* UNDERLINE */:\n // Draws a line at the baseline of the font\n // TODO As some browsers display the line as more than 1px if the font-size is big,\n // need to take that into account both in position and size\n _this.ctx.fillRect(text.bounds.left, Math.round(text.bounds.top + baseline), text.bounds.width, 1);\n break;\n case 2 /* OVERLINE */:\n _this.ctx.fillRect(text.bounds.left, Math.round(text.bounds.top), text.bounds.width, 1);\n break;\n case 3 /* LINE_THROUGH */:\n // TODO try and find exact position for line-through\n _this.ctx.fillRect(text.bounds.left, Math.ceil(text.bounds.top + middle), text.bounds.width, 1);\n break;\n }\n });\n }\n break;\n case 1 /* STROKE */:\n if (styles.webkitTextStrokeWidth && text.text.trim().length) {\n _this.ctx.strokeStyle = asString(styles.webkitTextStrokeColor);\n _this.ctx.lineWidth = styles.webkitTextStrokeWidth;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _this.ctx.lineJoin = !!window.chrome ? 'miter' : 'round';\n _this.ctx.strokeText(text.text, text.bounds.left, text.bounds.top + baseline);\n }\n _this.ctx.strokeStyle = '';\n _this.ctx.lineWidth = 0;\n _this.ctx.lineJoin = 'miter';\n break;\n }\n });\n });\n return [2 /*return*/];\n });\n });\n };\n CanvasRenderer.prototype.renderReplacedElement = function (container, curves, image) {\n if (image && container.intrinsicWidth > 0 && container.intrinsicHeight > 0) {\n var box = contentBox(container);\n var path = calculatePaddingBoxPath(curves);\n this.path(path);\n this.ctx.save();\n this.ctx.clip();\n this.ctx.drawImage(image, 0, 0, container.intrinsicWidth, container.intrinsicHeight, box.left, box.top, box.width, box.height);\n this.ctx.restore();\n }\n };\n CanvasRenderer.prototype.renderNodeContent = function (paint) {\n return __awaiter(this, void 0, void 0, function () {\n var container, curves, styles, _i, _a, child, image, image, iframeRenderer, canvas, size, _b, fontFamily, fontSize, baseline, bounds, x, textBounds, img, image, url, fontFamily, bounds;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n this.applyEffects(paint.getEffects(4 /* CONTENT */));\n container = paint.container;\n curves = paint.curves;\n styles = container.styles;\n _i = 0, _a = container.textNodes;\n _c.label = 1;\n case 1:\n if (!(_i < _a.length)) return [3 /*break*/, 4];\n child = _a[_i];\n return [4 /*yield*/, this.renderTextNode(child, styles)];\n case 2:\n _c.sent();\n _c.label = 3;\n case 3:\n _i++;\n return [3 /*break*/, 1];\n case 4:\n if (!(container instanceof ImageElementContainer)) return [3 /*break*/, 8];\n _c.label = 5;\n case 5:\n _c.trys.push([5, 7, , 8]);\n return [4 /*yield*/, this.context.cache.match(container.src)];\n case 6:\n image = _c.sent();\n this.renderReplacedElement(container, curves, image);\n return [3 /*break*/, 8];\n case 7:\n _c.sent();\n this.context.logger.error(\"Error loading image \" + container.src);\n return [3 /*break*/, 8];\n case 8:\n if (container instanceof CanvasElementContainer) {\n this.renderReplacedElement(container, curves, container.canvas);\n }\n if (!(container instanceof SVGElementContainer)) return [3 /*break*/, 12];\n _c.label = 9;\n case 9:\n _c.trys.push([9, 11, , 12]);\n return [4 /*yield*/, this.context.cache.match(container.svg)];\n case 10:\n image = _c.sent();\n this.renderReplacedElement(container, curves, image);\n return [3 /*break*/, 12];\n case 11:\n _c.sent();\n this.context.logger.error(\"Error loading svg \" + container.svg.substring(0, 255));\n return [3 /*break*/, 12];\n case 12:\n if (!(container instanceof IFrameElementContainer && container.tree)) return [3 /*break*/, 14];\n iframeRenderer = new CanvasRenderer(this.context, {\n scale: this.options.scale,\n backgroundColor: container.backgroundColor,\n x: 0,\n y: 0,\n width: container.width,\n height: container.height\n });\n return [4 /*yield*/, iframeRenderer.render(container.tree)];\n case 13:\n canvas = _c.sent();\n if (container.width && container.height) {\n this.ctx.drawImage(canvas, 0, 0, container.width, container.height, container.bounds.left, container.bounds.top, container.bounds.width, container.bounds.height);\n }\n _c.label = 14;\n case 14:\n if (container instanceof InputElementContainer) {\n size = Math.min(container.bounds.width, container.bounds.height);\n if (container.type === CHECKBOX) {\n if (container.checked) {\n this.ctx.save();\n this.path([\n new Vector(container.bounds.left + size * 0.39363, container.bounds.top + size * 0.79),\n new Vector(container.bounds.left + size * 0.16, container.bounds.top + size * 0.5549),\n new Vector(container.bounds.left + size * 0.27347, container.bounds.top + size * 0.44071),\n new Vector(container.bounds.left + size * 0.39694, container.bounds.top + size * 0.5649),\n new Vector(container.bounds.left + size * 0.72983, container.bounds.top + size * 0.23),\n new Vector(container.bounds.left + size * 0.84, container.bounds.top + size * 0.34085),\n new Vector(container.bounds.left + size * 0.39363, container.bounds.top + size * 0.79)\n ]);\n this.ctx.fillStyle = asString(INPUT_COLOR);\n this.ctx.fill();\n this.ctx.restore();\n }\n }\n else if (container.type === RADIO) {\n if (container.checked) {\n this.ctx.save();\n this.ctx.beginPath();\n this.ctx.arc(container.bounds.left + size / 2, container.bounds.top + size / 2, size / 4, 0, Math.PI * 2, true);\n this.ctx.fillStyle = asString(INPUT_COLOR);\n this.ctx.fill();\n this.ctx.restore();\n }\n }\n }\n if (isTextInputElement(container) && container.value.length) {\n _b = this.createFontStyle(styles), fontFamily = _b[0], fontSize = _b[1];\n baseline = this.fontMetrics.getMetrics(fontFamily, fontSize).baseline;\n this.ctx.font = fontFamily;\n this.ctx.fillStyle = asString(styles.color);\n this.ctx.textBaseline = 'alphabetic';\n this.ctx.textAlign = canvasTextAlign(container.styles.textAlign);\n bounds = contentBox(container);\n x = 0;\n switch (container.styles.textAlign) {\n case 1 /* CENTER */:\n x += bounds.width / 2;\n break;\n case 2 /* RIGHT */:\n x += bounds.width;\n break;\n }\n textBounds = bounds.add(x, 0, 0, -bounds.height / 2 + 1);\n this.ctx.save();\n this.path([\n new Vector(bounds.left, bounds.top),\n new Vector(bounds.left + bounds.width, bounds.top),\n new Vector(bounds.left + bounds.width, bounds.top + bounds.height),\n new Vector(bounds.left, bounds.top + bounds.height)\n ]);\n this.ctx.clip();\n this.renderTextWithLetterSpacing(new TextBounds(container.value, textBounds), styles.letterSpacing, baseline);\n this.ctx.restore();\n this.ctx.textBaseline = 'alphabetic';\n this.ctx.textAlign = 'left';\n }\n if (!contains(container.styles.display, 2048 /* LIST_ITEM */)) return [3 /*break*/, 20];\n if (!(container.styles.listStyleImage !== null)) return [3 /*break*/, 19];\n img = container.styles.listStyleImage;\n if (!(img.type === 0 /* URL */)) return [3 /*break*/, 18];\n image = void 0;\n url = img.url;\n _c.label = 15;\n case 15:\n _c.trys.push([15, 17, , 18]);\n return [4 /*yield*/, this.context.cache.match(url)];\n case 16:\n image = _c.sent();\n this.ctx.drawImage(image, container.bounds.left - (image.width + 10), container.bounds.top);\n return [3 /*break*/, 18];\n case 17:\n _c.sent();\n this.context.logger.error(\"Error loading list-style-image \" + url);\n return [3 /*break*/, 18];\n case 18: return [3 /*break*/, 20];\n case 19:\n if (paint.listValue && container.styles.listStyleType !== -1 /* NONE */) {\n fontFamily = this.createFontStyle(styles)[0];\n this.ctx.font = fontFamily;\n this.ctx.fillStyle = asString(styles.color);\n this.ctx.textBaseline = 'middle';\n this.ctx.textAlign = 'right';\n bounds = new Bounds(container.bounds.left, container.bounds.top + getAbsoluteValue(container.styles.paddingTop, container.bounds.width), container.bounds.width, computeLineHeight(styles.lineHeight, styles.fontSize.number) / 2 + 1);\n this.renderTextWithLetterSpacing(new TextBounds(paint.listValue, bounds), styles.letterSpacing, computeLineHeight(styles.lineHeight, styles.fontSize.number) / 2 + 2);\n this.ctx.textBaseline = 'bottom';\n this.ctx.textAlign = 'left';\n }\n _c.label = 20;\n case 20: return [2 /*return*/];\n }\n });\n });\n };\n CanvasRenderer.prototype.renderStackContent = function (stack) {\n return __awaiter(this, void 0, void 0, function () {\n var _i, _a, child, _b, _c, child, _d, _e, child, _f, _g, child, _h, _j, child, _k, _l, child, _m, _o, child;\n return __generator(this, function (_p) {\n switch (_p.label) {\n case 0:\n if (contains(stack.element.container.flags, 16 /* DEBUG_RENDER */)) {\n debugger;\n }\n // https://www.w3.org/TR/css-position-3/#painting-order\n // 1. the background and borders of the element forming the stacking context.\n return [4 /*yield*/, this.renderNodeBackgroundAndBorders(stack.element)];\n case 1:\n // https://www.w3.org/TR/css-position-3/#painting-order\n // 1. the background and borders of the element forming the stacking context.\n _p.sent();\n _i = 0, _a = stack.negativeZIndex;\n _p.label = 2;\n case 2:\n if (!(_i < _a.length)) return [3 /*break*/, 5];\n child = _a[_i];\n return [4 /*yield*/, this.renderStack(child)];\n case 3:\n _p.sent();\n _p.label = 4;\n case 4:\n _i++;\n return [3 /*break*/, 2];\n case 5: \n // 3. For all its in-flow, non-positioned, block-level descendants in tree order:\n return [4 /*yield*/, this.renderNodeContent(stack.element)];\n case 6:\n // 3. For all its in-flow, non-positioned, block-level descendants in tree order:\n _p.sent();\n _b = 0, _c = stack.nonInlineLevel;\n _p.label = 7;\n case 7:\n if (!(_b < _c.length)) return [3 /*break*/, 10];\n child = _c[_b];\n return [4 /*yield*/, this.renderNode(child)];\n case 8:\n _p.sent();\n _p.label = 9;\n case 9:\n _b++;\n return [3 /*break*/, 7];\n case 10:\n _d = 0, _e = stack.nonPositionedFloats;\n _p.label = 11;\n case 11:\n if (!(_d < _e.length)) return [3 /*break*/, 14];\n child = _e[_d];\n return [4 /*yield*/, this.renderStack(child)];\n case 12:\n _p.sent();\n _p.label = 13;\n case 13:\n _d++;\n return [3 /*break*/, 11];\n case 14:\n _f = 0, _g = stack.nonPositionedInlineLevel;\n _p.label = 15;\n case 15:\n if (!(_f < _g.length)) return [3 /*break*/, 18];\n child = _g[_f];\n return [4 /*yield*/, this.renderStack(child)];\n case 16:\n _p.sent();\n _p.label = 17;\n case 17:\n _f++;\n return [3 /*break*/, 15];\n case 18:\n _h = 0, _j = stack.inlineLevel;\n _p.label = 19;\n case 19:\n if (!(_h < _j.length)) return [3 /*break*/, 22];\n child = _j[_h];\n return [4 /*yield*/, this.renderNode(child)];\n case 20:\n _p.sent();\n _p.label = 21;\n case 21:\n _h++;\n return [3 /*break*/, 19];\n case 22:\n _k = 0, _l = stack.zeroOrAutoZIndexOrTransformedOrOpacity;\n _p.label = 23;\n case 23:\n if (!(_k < _l.length)) return [3 /*break*/, 26];\n child = _l[_k];\n return [4 /*yield*/, this.renderStack(child)];\n case 24:\n _p.sent();\n _p.label = 25;\n case 25:\n _k++;\n return [3 /*break*/, 23];\n case 26:\n _m = 0, _o = stack.positiveZIndex;\n _p.label = 27;\n case 27:\n if (!(_m < _o.length)) return [3 /*break*/, 30];\n child = _o[_m];\n return [4 /*yield*/, this.renderStack(child)];\n case 28:\n _p.sent();\n _p.label = 29;\n case 29:\n _m++;\n return [3 /*break*/, 27];\n case 30: return [2 /*return*/];\n }\n });\n });\n };\n CanvasRenderer.prototype.mask = function (paths) {\n this.ctx.beginPath();\n this.ctx.moveTo(0, 0);\n this.ctx.lineTo(this.canvas.width, 0);\n this.ctx.lineTo(this.canvas.width, this.canvas.height);\n this.ctx.lineTo(0, this.canvas.height);\n this.ctx.lineTo(0, 0);\n this.formatPath(paths.slice(0).reverse());\n this.ctx.closePath();\n };\n CanvasRenderer.prototype.path = function (paths) {\n this.ctx.beginPath();\n this.formatPath(paths);\n this.ctx.closePath();\n };\n CanvasRenderer.prototype.formatPath = function (paths) {\n var _this = this;\n paths.forEach(function (point, index) {\n var start = isBezierCurve(point) ? point.start : point;\n if (index === 0) {\n _this.ctx.moveTo(start.x, start.y);\n }\n else {\n _this.ctx.lineTo(start.x, start.y);\n }\n if (isBezierCurve(point)) {\n _this.ctx.bezierCurveTo(point.startControl.x, point.startControl.y, point.endControl.x, point.endControl.y, point.end.x, point.end.y);\n }\n });\n };\n CanvasRenderer.prototype.renderRepeat = function (path, pattern, offsetX, offsetY) {\n this.path(path);\n this.ctx.fillStyle = pattern;\n this.ctx.translate(offsetX, offsetY);\n this.ctx.fill();\n this.ctx.translate(-offsetX, -offsetY);\n };\n CanvasRenderer.prototype.resizeImage = function (image, width, height) {\n var _a;\n if (image.width === width && image.height === height) {\n return image;\n }\n var ownerDocument = (_a = this.canvas.ownerDocument) !== null && _a !== void 0 ? _a : document;\n var canvas = ownerDocument.createElement('canvas');\n canvas.width = Math.max(1, width);\n canvas.height = Math.max(1, height);\n var ctx = canvas.getContext('2d');\n ctx.drawImage(image, 0, 0, image.width, image.height, 0, 0, width, height);\n return canvas;\n };\n CanvasRenderer.prototype.renderBackgroundImage = function (container) {\n return __awaiter(this, void 0, void 0, function () {\n var index, _loop_1, this_1, _i, _a, backgroundImage;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n index = container.styles.backgroundImage.length - 1;\n _loop_1 = function (backgroundImage) {\n var image, url, _c, path, x, y, width, height, pattern, _d, path, x, y, width, height, _e, lineLength, x0, x1, y0, y1, canvas, ctx, gradient_1, pattern, _f, path, left, top_1, width, height, position, x, y, _g, rx, ry, radialGradient_1, midX, midY, f, invF;\n return __generator(this, function (_h) {\n switch (_h.label) {\n case 0:\n if (!(backgroundImage.type === 0 /* URL */)) return [3 /*break*/, 5];\n image = void 0;\n url = backgroundImage.url;\n _h.label = 1;\n case 1:\n _h.trys.push([1, 3, , 4]);\n return [4 /*yield*/, this_1.context.cache.match(url)];\n case 2:\n image = _h.sent();\n return [3 /*break*/, 4];\n case 3:\n _h.sent();\n this_1.context.logger.error(\"Error loading background-image \" + url);\n return [3 /*break*/, 4];\n case 4:\n if (image) {\n _c = calculateBackgroundRendering(container, index, [\n image.width,\n image.height,\n image.width / image.height\n ]), path = _c[0], x = _c[1], y = _c[2], width = _c[3], height = _c[4];\n pattern = this_1.ctx.createPattern(this_1.resizeImage(image, width, height), 'repeat');\n this_1.renderRepeat(path, pattern, x, y);\n }\n return [3 /*break*/, 6];\n case 5:\n if (isLinearGradient(backgroundImage)) {\n _d = calculateBackgroundRendering(container, index, [null, null, null]), path = _d[0], x = _d[1], y = _d[2], width = _d[3], height = _d[4];\n _e = calculateGradientDirection(backgroundImage.angle, width, height), lineLength = _e[0], x0 = _e[1], x1 = _e[2], y0 = _e[3], y1 = _e[4];\n canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n ctx = canvas.getContext('2d');\n gradient_1 = ctx.createLinearGradient(x0, y0, x1, y1);\n processColorStops(backgroundImage.stops, lineLength).forEach(function (colorStop) {\n return gradient_1.addColorStop(colorStop.stop, asString(colorStop.color));\n });\n ctx.fillStyle = gradient_1;\n ctx.fillRect(0, 0, width, height);\n if (width > 0 && height > 0) {\n pattern = this_1.ctx.createPattern(canvas, 'repeat');\n this_1.renderRepeat(path, pattern, x, y);\n }\n }\n else if (isRadialGradient(backgroundImage)) {\n _f = calculateBackgroundRendering(container, index, [\n null,\n null,\n null\n ]), path = _f[0], left = _f[1], top_1 = _f[2], width = _f[3], height = _f[4];\n position = backgroundImage.position.length === 0 ? [FIFTY_PERCENT] : backgroundImage.position;\n x = getAbsoluteValue(position[0], width);\n y = getAbsoluteValue(position[position.length - 1], height);\n _g = calculateRadius(backgroundImage, x, y, width, height), rx = _g[0], ry = _g[1];\n if (rx > 0 && ry > 0) {\n radialGradient_1 = this_1.ctx.createRadialGradient(left + x, top_1 + y, 0, left + x, top_1 + y, rx);\n processColorStops(backgroundImage.stops, rx * 2).forEach(function (colorStop) {\n return radialGradient_1.addColorStop(colorStop.stop, asString(colorStop.color));\n });\n this_1.path(path);\n this_1.ctx.fillStyle = radialGradient_1;\n if (rx !== ry) {\n midX = container.bounds.left + 0.5 * container.bounds.width;\n midY = container.bounds.top + 0.5 * container.bounds.height;\n f = ry / rx;\n invF = 1 / f;\n this_1.ctx.save();\n this_1.ctx.translate(midX, midY);\n this_1.ctx.transform(1, 0, 0, f, 0, 0);\n this_1.ctx.translate(-midX, -midY);\n this_1.ctx.fillRect(left, invF * (top_1 - midY) + midY, width, height * invF);\n this_1.ctx.restore();\n }\n else {\n this_1.ctx.fill();\n }\n }\n }\n _h.label = 6;\n case 6:\n index--;\n return [2 /*return*/];\n }\n });\n };\n this_1 = this;\n _i = 0, _a = container.styles.backgroundImage.slice(0).reverse();\n _b.label = 1;\n case 1:\n if (!(_i < _a.length)) return [3 /*break*/, 4];\n backgroundImage = _a[_i];\n return [5 /*yield**/, _loop_1(backgroundImage)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n _i++;\n return [3 /*break*/, 1];\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n CanvasRenderer.prototype.renderSolidBorder = function (color, side, curvePoints) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n this.path(parsePathForBorder(curvePoints, side));\n this.ctx.fillStyle = asString(color);\n this.ctx.fill();\n return [2 /*return*/];\n });\n });\n };\n CanvasRenderer.prototype.renderDoubleBorder = function (color, width, side, curvePoints) {\n return __awaiter(this, void 0, void 0, function () {\n var outerPaths, innerPaths;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!(width < 3)) return [3 /*break*/, 2];\n return [4 /*yield*/, this.renderSolidBorder(color, side, curvePoints)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n case 2:\n outerPaths = parsePathForBorderDoubleOuter(curvePoints, side);\n this.path(outerPaths);\n this.ctx.fillStyle = asString(color);\n this.ctx.fill();\n innerPaths = parsePathForBorderDoubleInner(curvePoints, side);\n this.path(innerPaths);\n this.ctx.fill();\n return [2 /*return*/];\n }\n });\n });\n };\n CanvasRenderer.prototype.renderNodeBackgroundAndBorders = function (paint) {\n return __awaiter(this, void 0, void 0, function () {\n var styles, hasBackground, borders, backgroundPaintingArea, side, _i, borders_1, border;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n this.applyEffects(paint.getEffects(2 /* BACKGROUND_BORDERS */));\n styles = paint.container.styles;\n hasBackground = !isTransparent(styles.backgroundColor) || styles.backgroundImage.length;\n borders = [\n { style: styles.borderTopStyle, color: styles.borderTopColor, width: styles.borderTopWidth },\n { style: styles.borderRightStyle, color: styles.borderRightColor, width: styles.borderRightWidth },\n { style: styles.borderBottomStyle, color: styles.borderBottomColor, width: styles.borderBottomWidth },\n { style: styles.borderLeftStyle, color: styles.borderLeftColor, width: styles.borderLeftWidth }\n ];\n backgroundPaintingArea = calculateBackgroundCurvedPaintingArea(getBackgroundValueForIndex(styles.backgroundClip, 0), paint.curves);\n if (!(hasBackground || styles.boxShadow.length)) return [3 /*break*/, 2];\n this.ctx.save();\n this.path(backgroundPaintingArea);\n this.ctx.clip();\n if (!isTransparent(styles.backgroundColor)) {\n this.ctx.fillStyle = asString(styles.backgroundColor);\n this.ctx.fill();\n }\n return [4 /*yield*/, this.renderBackgroundImage(paint.container)];\n case 1:\n _a.sent();\n this.ctx.restore();\n styles.boxShadow\n .slice(0)\n .reverse()\n .forEach(function (shadow) {\n _this.ctx.save();\n var borderBoxArea = calculateBorderBoxPath(paint.curves);\n var maskOffset = shadow.inset ? 0 : MASK_OFFSET;\n var shadowPaintingArea = transformPath(borderBoxArea, -maskOffset + (shadow.inset ? 1 : -1) * shadow.spread.number, (shadow.inset ? 1 : -1) * shadow.spread.number, shadow.spread.number * (shadow.inset ? -2 : 2), shadow.spread.number * (shadow.inset ? -2 : 2));\n if (shadow.inset) {\n _this.path(borderBoxArea);\n _this.ctx.clip();\n _this.mask(shadowPaintingArea);\n }\n else {\n _this.mask(borderBoxArea);\n _this.ctx.clip();\n _this.path(shadowPaintingArea);\n }\n _this.ctx.shadowOffsetX = shadow.offsetX.number + maskOffset;\n _this.ctx.shadowOffsetY = shadow.offsetY.number;\n _this.ctx.shadowColor = asString(shadow.color);\n _this.ctx.shadowBlur = shadow.blur.number;\n _this.ctx.fillStyle = shadow.inset ? asString(shadow.color) : 'rgba(0,0,0,1)';\n _this.ctx.fill();\n _this.ctx.restore();\n });\n _a.label = 2;\n case 2:\n side = 0;\n _i = 0, borders_1 = borders;\n _a.label = 3;\n case 3:\n if (!(_i < borders_1.length)) return [3 /*break*/, 13];\n border = borders_1[_i];\n if (!(border.style !== 0 /* NONE */ && !isTransparent(border.color) && border.width > 0)) return [3 /*break*/, 11];\n if (!(border.style === 2 /* DASHED */)) return [3 /*break*/, 5];\n return [4 /*yield*/, this.renderDashedDottedBorder(border.color, border.width, side, paint.curves, 2 /* DASHED */)];\n case 4:\n _a.sent();\n return [3 /*break*/, 11];\n case 5:\n if (!(border.style === 3 /* DOTTED */)) return [3 /*break*/, 7];\n return [4 /*yield*/, this.renderDashedDottedBorder(border.color, border.width, side, paint.curves, 3 /* DOTTED */)];\n case 6:\n _a.sent();\n return [3 /*break*/, 11];\n case 7:\n if (!(border.style === 4 /* DOUBLE */)) return [3 /*break*/, 9];\n return [4 /*yield*/, this.renderDoubleBorder(border.color, border.width, side, paint.curves)];\n case 8:\n _a.sent();\n return [3 /*break*/, 11];\n case 9: return [4 /*yield*/, this.renderSolidBorder(border.color, side, paint.curves)];\n case 10:\n _a.sent();\n _a.label = 11;\n case 11:\n side++;\n _a.label = 12;\n case 12:\n _i++;\n return [3 /*break*/, 3];\n case 13: return [2 /*return*/];\n }\n });\n });\n };\n CanvasRenderer.prototype.renderDashedDottedBorder = function (color, width, side, curvePoints, style) {\n return __awaiter(this, void 0, void 0, function () {\n var strokePaths, boxPaths, startX, startY, endX, endY, length, dashLength, spaceLength, useLineDash, multiplier, numberOfDashes, minSpace, maxSpace, path1, path2, path1, path2;\n return __generator(this, function (_a) {\n this.ctx.save();\n strokePaths = parsePathForBorderStroke(curvePoints, side);\n boxPaths = parsePathForBorder(curvePoints, side);\n if (style === 2 /* DASHED */) {\n this.path(boxPaths);\n this.ctx.clip();\n }\n if (isBezierCurve(boxPaths[0])) {\n startX = boxPaths[0].start.x;\n startY = boxPaths[0].start.y;\n }\n else {\n startX = boxPaths[0].x;\n startY = boxPaths[0].y;\n }\n if (isBezierCurve(boxPaths[1])) {\n endX = boxPaths[1].end.x;\n endY = boxPaths[1].end.y;\n }\n else {\n endX = boxPaths[1].x;\n endY = boxPaths[1].y;\n }\n if (side === 0 || side === 2) {\n length = Math.abs(startX - endX);\n }\n else {\n length = Math.abs(startY - endY);\n }\n this.ctx.beginPath();\n if (style === 3 /* DOTTED */) {\n this.formatPath(strokePaths);\n }\n else {\n this.formatPath(boxPaths.slice(0, 2));\n }\n dashLength = width < 3 ? width * 3 : width * 2;\n spaceLength = width < 3 ? width * 2 : width;\n if (style === 3 /* DOTTED */) {\n dashLength = width;\n spaceLength = width;\n }\n useLineDash = true;\n if (length <= dashLength * 2) {\n useLineDash = false;\n }\n else if (length <= dashLength * 2 + spaceLength) {\n multiplier = length / (2 * dashLength + spaceLength);\n dashLength *= multiplier;\n spaceLength *= multiplier;\n }\n else {\n numberOfDashes = Math.floor((length + spaceLength) / (dashLength + spaceLength));\n minSpace = (length - numberOfDashes * dashLength) / (numberOfDashes - 1);\n maxSpace = (length - (numberOfDashes + 1) * dashLength) / numberOfDashes;\n spaceLength =\n maxSpace <= 0 || Math.abs(spaceLength - minSpace) < Math.abs(spaceLength - maxSpace)\n ? minSpace\n : maxSpace;\n }\n if (useLineDash) {\n if (style === 3 /* DOTTED */) {\n this.ctx.setLineDash([0, dashLength + spaceLength]);\n }\n else {\n this.ctx.setLineDash([dashLength, spaceLength]);\n }\n }\n if (style === 3 /* DOTTED */) {\n this.ctx.lineCap = 'round';\n this.ctx.lineWidth = width;\n }\n else {\n this.ctx.lineWidth = width * 2 + 1.1;\n }\n this.ctx.strokeStyle = asString(color);\n this.ctx.stroke();\n this.ctx.setLineDash([]);\n // dashed round edge gap\n if (style === 2 /* DASHED */) {\n if (isBezierCurve(boxPaths[0])) {\n path1 = boxPaths[3];\n path2 = boxPaths[0];\n this.ctx.beginPath();\n this.formatPath([new Vector(path1.end.x, path1.end.y), new Vector(path2.start.x, path2.start.y)]);\n this.ctx.stroke();\n }\n if (isBezierCurve(boxPaths[1])) {\n path1 = boxPaths[1];\n path2 = boxPaths[2];\n this.ctx.beginPath();\n this.formatPath([new Vector(path1.end.x, path1.end.y), new Vector(path2.start.x, path2.start.y)]);\n this.ctx.stroke();\n }\n }\n this.ctx.restore();\n return [2 /*return*/];\n });\n });\n };\n CanvasRenderer.prototype.render = function (element) {\n return __awaiter(this, void 0, void 0, function () {\n var stack;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.options.backgroundColor) {\n this.ctx.fillStyle = asString(this.options.backgroundColor);\n this.ctx.fillRect(this.options.x, this.options.y, this.options.width, this.options.height);\n }\n stack = parseStackingContexts(element);\n return [4 /*yield*/, this.renderStack(stack)];\n case 1:\n _a.sent();\n this.applyEffects([]);\n return [2 /*return*/, this.canvas];\n }\n });\n });\n };\n return CanvasRenderer;\n }(Renderer));\n var isTextInputElement = function (container) {\n if (container instanceof TextareaElementContainer) {\n return true;\n }\n else if (container instanceof SelectElementContainer) {\n return true;\n }\n else if (container instanceof InputElementContainer && container.type !== RADIO && container.type !== CHECKBOX) {\n return true;\n }\n return false;\n };\n var calculateBackgroundCurvedPaintingArea = function (clip, curves) {\n switch (clip) {\n case 0 /* BORDER_BOX */:\n return calculateBorderBoxPath(curves);\n case 2 /* CONTENT_BOX */:\n return calculateContentBoxPath(curves);\n case 1 /* PADDING_BOX */:\n default:\n return calculatePaddingBoxPath(curves);\n }\n };\n var canvasTextAlign = function (textAlign) {\n switch (textAlign) {\n case 1 /* CENTER */:\n return 'center';\n case 2 /* RIGHT */:\n return 'right';\n case 0 /* LEFT */:\n default:\n return 'left';\n }\n };\n // see https://github.com/niklasvh/html2canvas/pull/2645\n var iOSBrokenFonts = ['-apple-system', 'system-ui'];\n var fixIOSSystemFonts = function (fontFamilies) {\n return /iPhone OS 15_(0|1)/.test(window.navigator.userAgent)\n ? fontFamilies.filter(function (fontFamily) { return iOSBrokenFonts.indexOf(fontFamily) === -1; })\n : fontFamilies;\n };\n\n var ForeignObjectRenderer = /** @class */ (function (_super) {\n __extends(ForeignObjectRenderer, _super);\n function ForeignObjectRenderer(context, options) {\n var _this = _super.call(this, context, options) || this;\n _this.canvas = options.canvas ? options.canvas : document.createElement('canvas');\n _this.ctx = _this.canvas.getContext('2d');\n _this.options = options;\n _this.canvas.width = Math.floor(options.width * options.scale);\n _this.canvas.height = Math.floor(options.height * options.scale);\n _this.canvas.style.width = options.width + \"px\";\n _this.canvas.style.height = options.height + \"px\";\n _this.ctx.scale(_this.options.scale, _this.options.scale);\n _this.ctx.translate(-options.x, -options.y);\n _this.context.logger.debug(\"EXPERIMENTAL ForeignObject renderer initialized (\" + options.width + \"x\" + options.height + \" at \" + options.x + \",\" + options.y + \") with scale \" + options.scale);\n return _this;\n }\n ForeignObjectRenderer.prototype.render = function (element) {\n return __awaiter(this, void 0, void 0, function () {\n var svg, img;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n svg = createForeignObjectSVG(this.options.width * this.options.scale, this.options.height * this.options.scale, this.options.scale, this.options.scale, element);\n return [4 /*yield*/, loadSerializedSVG(svg)];\n case 1:\n img = _a.sent();\n if (this.options.backgroundColor) {\n this.ctx.fillStyle = asString(this.options.backgroundColor);\n this.ctx.fillRect(0, 0, this.options.width * this.options.scale, this.options.height * this.options.scale);\n }\n this.ctx.drawImage(img, -this.options.x * this.options.scale, -this.options.y * this.options.scale);\n return [2 /*return*/, this.canvas];\n }\n });\n });\n };\n return ForeignObjectRenderer;\n }(Renderer));\n var loadSerializedSVG = function (svg) {\n return new Promise(function (resolve, reject) {\n var img = new Image();\n img.onload = function () {\n resolve(img);\n };\n img.onerror = reject;\n img.src = \"data:image/svg+xml;charset=utf-8,\" + encodeURIComponent(new XMLSerializer().serializeToString(svg));\n });\n };\n\n var Logger = /** @class */ (function () {\n function Logger(_a) {\n var id = _a.id, enabled = _a.enabled;\n this.id = id;\n this.enabled = enabled;\n this.start = Date.now();\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Logger.prototype.debug = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (this.enabled) {\n // eslint-disable-next-line no-console\n if (typeof window !== 'undefined' && window.console && typeof console.debug === 'function') {\n // eslint-disable-next-line no-console\n console.debug.apply(console, __spreadArray([this.id, this.getTime() + \"ms\"], args));\n }\n else {\n this.info.apply(this, args);\n }\n }\n };\n Logger.prototype.getTime = function () {\n return Date.now() - this.start;\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Logger.prototype.info = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (this.enabled) {\n // eslint-disable-next-line no-console\n if (typeof window !== 'undefined' && window.console && typeof console.info === 'function') {\n // eslint-disable-next-line no-console\n console.info.apply(console, __spreadArray([this.id, this.getTime() + \"ms\"], args));\n }\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Logger.prototype.warn = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (this.enabled) {\n // eslint-disable-next-line no-console\n if (typeof window !== 'undefined' && window.console && typeof console.warn === 'function') {\n // eslint-disable-next-line no-console\n console.warn.apply(console, __spreadArray([this.id, this.getTime() + \"ms\"], args));\n }\n else {\n this.info.apply(this, args);\n }\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Logger.prototype.error = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (this.enabled) {\n // eslint-disable-next-line no-console\n if (typeof window !== 'undefined' && window.console && typeof console.error === 'function') {\n // eslint-disable-next-line no-console\n console.error.apply(console, __spreadArray([this.id, this.getTime() + \"ms\"], args));\n }\n else {\n this.info.apply(this, args);\n }\n }\n };\n Logger.instances = {};\n return Logger;\n }());\n\n var Context = /** @class */ (function () {\n function Context(options, windowBounds) {\n var _a;\n this.windowBounds = windowBounds;\n this.instanceName = \"#\" + Context.instanceCount++;\n this.logger = new Logger({ id: this.instanceName, enabled: options.logging });\n this.cache = (_a = options.cache) !== null && _a !== void 0 ? _a : new Cache(this, options);\n }\n Context.instanceCount = 1;\n return Context;\n }());\n\n var html2canvas = function (element, options) {\n if (options === void 0) { options = {}; }\n return renderElement(element, options);\n };\n if (typeof window !== 'undefined') {\n CacheStorage.setContext(window);\n }\n var renderElement = function (element, opts) { return __awaiter(void 0, void 0, void 0, function () {\n var ownerDocument, defaultView, resourceOptions, contextOptions, windowOptions, windowBounds, context, foreignObjectRendering, cloneOptions, documentCloner, clonedElement, container, _a, width, height, left, top, backgroundColor, renderOptions, canvas, renderer, root, renderer;\n var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;\n return __generator(this, function (_u) {\n switch (_u.label) {\n case 0:\n if (!element || typeof element !== 'object') {\n return [2 /*return*/, Promise.reject('Invalid element provided as first argument')];\n }\n ownerDocument = element.ownerDocument;\n if (!ownerDocument) {\n throw new Error(\"Element is not attached to a Document\");\n }\n defaultView = ownerDocument.defaultView;\n if (!defaultView) {\n throw new Error(\"Document is not attached to a Window\");\n }\n resourceOptions = {\n allowTaint: (_b = opts.allowTaint) !== null && _b !== void 0 ? _b : false,\n imageTimeout: (_c = opts.imageTimeout) !== null && _c !== void 0 ? _c : 15000,\n proxy: opts.proxy,\n useCORS: (_d = opts.useCORS) !== null && _d !== void 0 ? _d : false\n };\n contextOptions = __assign({ logging: (_e = opts.logging) !== null && _e !== void 0 ? _e : true, cache: opts.cache }, resourceOptions);\n windowOptions = {\n windowWidth: (_f = opts.windowWidth) !== null && _f !== void 0 ? _f : defaultView.innerWidth,\n windowHeight: (_g = opts.windowHeight) !== null && _g !== void 0 ? _g : defaultView.innerHeight,\n scrollX: (_h = opts.scrollX) !== null && _h !== void 0 ? _h : defaultView.pageXOffset,\n scrollY: (_j = opts.scrollY) !== null && _j !== void 0 ? _j : defaultView.pageYOffset\n };\n windowBounds = new Bounds(windowOptions.scrollX, windowOptions.scrollY, windowOptions.windowWidth, windowOptions.windowHeight);\n context = new Context(contextOptions, windowBounds);\n foreignObjectRendering = (_k = opts.foreignObjectRendering) !== null && _k !== void 0 ? _k : false;\n cloneOptions = {\n allowTaint: (_l = opts.allowTaint) !== null && _l !== void 0 ? _l : false,\n onclone: opts.onclone,\n ignoreElements: opts.ignoreElements,\n inlineImages: foreignObjectRendering,\n copyStyles: foreignObjectRendering\n };\n context.logger.debug(\"Starting document clone with size \" + windowBounds.width + \"x\" + windowBounds.height + \" scrolled to \" + -windowBounds.left + \",\" + -windowBounds.top);\n documentCloner = new DocumentCloner(context, element, cloneOptions);\n clonedElement = documentCloner.clonedReferenceElement;\n if (!clonedElement) {\n return [2 /*return*/, Promise.reject(\"Unable to find element in cloned iframe\")];\n }\n return [4 /*yield*/, documentCloner.toIFrame(ownerDocument, windowBounds)];\n case 1:\n container = _u.sent();\n _a = isBodyElement(clonedElement) || isHTMLElement(clonedElement)\n ? parseDocumentSize(clonedElement.ownerDocument)\n : parseBounds(context, clonedElement), width = _a.width, height = _a.height, left = _a.left, top = _a.top;\n backgroundColor = parseBackgroundColor(context, clonedElement, opts.backgroundColor);\n renderOptions = {\n canvas: opts.canvas,\n backgroundColor: backgroundColor,\n scale: (_o = (_m = opts.scale) !== null && _m !== void 0 ? _m : defaultView.devicePixelRatio) !== null && _o !== void 0 ? _o : 1,\n x: ((_p = opts.x) !== null && _p !== void 0 ? _p : 0) + left,\n y: ((_q = opts.y) !== null && _q !== void 0 ? _q : 0) + top,\n width: (_r = opts.width) !== null && _r !== void 0 ? _r : Math.ceil(width),\n height: (_s = opts.height) !== null && _s !== void 0 ? _s : Math.ceil(height)\n };\n if (!foreignObjectRendering) return [3 /*break*/, 3];\n context.logger.debug(\"Document cloned, using foreign object rendering\");\n renderer = new ForeignObjectRenderer(context, renderOptions);\n return [4 /*yield*/, renderer.render(clonedElement)];\n case 2:\n canvas = _u.sent();\n return [3 /*break*/, 5];\n case 3:\n context.logger.debug(\"Document cloned, element located at \" + left + \",\" + top + \" with size \" + width + \"x\" + height + \" using computed rendering\");\n context.logger.debug(\"Starting DOM parsing\");\n root = parseTree(context, clonedElement);\n if (backgroundColor === root.styles.backgroundColor) {\n root.styles.backgroundColor = COLORS.TRANSPARENT;\n }\n context.logger.debug(\"Starting renderer for element at \" + renderOptions.x + \",\" + renderOptions.y + \" with size \" + renderOptions.width + \"x\" + renderOptions.height);\n renderer = new CanvasRenderer(context, renderOptions);\n return [4 /*yield*/, renderer.render(root)];\n case 4:\n canvas = _u.sent();\n _u.label = 5;\n case 5:\n if ((_t = opts.removeContainer) !== null && _t !== void 0 ? _t : true) {\n if (!DocumentCloner.destroy(container)) {\n context.logger.error(\"Cannot detach cloned iframe as it is not in the DOM anymore\");\n }\n }\n context.logger.debug(\"Finished rendering\");\n return [2 /*return*/, canvas];\n }\n });\n }); };\n var parseBackgroundColor = function (context, element, backgroundColorOverride) {\n var ownerDocument = element.ownerDocument;\n // http://www.w3.org/TR/css3-background/#special-backgrounds\n var documentBackgroundColor = ownerDocument.documentElement\n ? parseColor(context, getComputedStyle(ownerDocument.documentElement).backgroundColor)\n : COLORS.TRANSPARENT;\n var bodyBackgroundColor = ownerDocument.body\n ? parseColor(context, getComputedStyle(ownerDocument.body).backgroundColor)\n : COLORS.TRANSPARENT;\n var defaultBackgroundColor = typeof backgroundColorOverride === 'string'\n ? parseColor(context, backgroundColorOverride)\n : backgroundColorOverride === null\n ? COLORS.TRANSPARENT\n : 0xffffffff;\n return element === ownerDocument.documentElement\n ? isTransparent(documentBackgroundColor)\n ? isTransparent(bodyBackgroundColor)\n ? defaultBackgroundColor\n : bodyBackgroundColor\n : documentBackgroundColor\n : defaultBackgroundColor;\n };\n\n return html2canvas;\n\n})));\n//# sourceMappingURL=html2canvas.js.map\n","exports.setPublicPath = function setPublicPath(\n systemjsModuleName,\n rootDirectoryLevel\n) {\n if (!rootDirectoryLevel) {\n rootDirectoryLevel = 1;\n }\n if (\n typeof systemjsModuleName !== \"string\" ||\n systemjsModuleName.trim().length === 0\n ) {\n throw Error(\n \"systemjs-webpack-interop: setPublicPath(systemjsModuleName) must be called with a non-empty string 'systemjsModuleName'\"\n );\n }\n\n if (\n typeof rootDirectoryLevel !== \"number\" ||\n rootDirectoryLevel <= 0 ||\n isNaN(rootDirectoryLevel) ||\n !isInteger(rootDirectoryLevel)\n ) {\n throw Error(\n \"systemjs-webpack-interop: setPublicPath(systemjsModuleName, rootDirectoryLevel) must be called with a positive integer 'rootDirectoryLevel'\"\n );\n }\n\n var moduleUrl;\n try {\n moduleUrl = window.System.resolve(systemjsModuleName);\n if (!moduleUrl) {\n throw Error();\n }\n } catch (err) {\n throw Error(\n \"systemjs-webpack-interop: There is no such module '\" +\n systemjsModuleName +\n \"' in the SystemJS registry. Did you misspell the name of your module?\"\n );\n }\n\n __webpack_public_path__ = resolveDirectory(moduleUrl, rootDirectoryLevel);\n};\n\nfunction resolveDirectory(urlString, rootDirectoryLevel) {\n // Our friend IE11 doesn't support new URL()\n // https://github.com/single-spa/single-spa/issues/612\n // https://gist.github.com/jlong/2428561\n\n var a = document.createElement(\"a\");\n a.href = urlString;\n\n var pathname = a.pathname[0] === \"/\" ? a.pathname : \"/\" + a.pathname;\n var numDirsProcessed = 0,\n index = pathname.length;\n while (numDirsProcessed !== rootDirectoryLevel && index >= 0) {\n var char = pathname[--index];\n if (char === \"/\") {\n numDirsProcessed++;\n }\n }\n\n if (numDirsProcessed !== rootDirectoryLevel) {\n throw Error(\n \"systemjs-webpack-interop: rootDirectoryLevel (\" +\n rootDirectoryLevel +\n \") is greater than the number of directories (\" +\n numDirsProcessed +\n \") in the URL path \" +\n urlString\n );\n }\n\n var finalPath = pathname.slice(0, index + 1);\n\n return a.protocol + \"//\" + a.host + finalPath;\n}\n\nexports.resolveDirectory = resolveDirectory;\n\n// borrowed from https://github.com/parshap/js-is-integer/blob/master/index.js\nvar isInteger =\n Number.isInteger ||\n function isInteger(val) {\n return typeof val === \"number\" && isFinite(val) && Math.floor(val) === val;\n };\n","module.exports = __WEBPACK_EXTERNAL_MODULE__425__;","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.prewrap {\n white-space: pre-wrap;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/elements/statsTable/statsTable.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,qBAAqB;AACvB\",\"sourcesContent\":[\".prewrap {\\n white-space: pre-wrap;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\"use strict\";\n\n/* istanbul ignore next */\nfunction insertStyleElement(options) {\n var element = document.createElement(\"style\");\n options.setAttributes(element, options.attributes);\n options.insert(element, options.options);\n return element;\n}\nmodule.exports = insertStyleElement;","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","\"use strict\";\n\n/* istanbul ignore next */\nfunction styleTagTransform(css, styleElement) {\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = css;\n } else {\n while (styleElement.firstChild) {\n styleElement.removeChild(styleElement.firstChild);\n }\n styleElement.appendChild(document.createTextNode(css));\n }\n}\nmodule.exports = styleTagTransform;","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.export-canvas {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.export-canvas-wrapper > div {\n min-width: 100vh;\n}\n\n.export-hideout [data-test-id=\"chart-legends-container\"] {\n max-width: 100% !important;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/export/ExportHideout.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,aAAa;EACb,mBAAmB;EACnB,uBAAuB;AACzB;AACA;EACE,gBAAgB;AAClB;;AAEA;EACE,0BAA0B;AAC5B\",\"sourcesContent\":[\".export-canvas {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n}\\n.export-canvas-wrapper > div {\\n min-width: 100vh;\\n}\\n\\n.export-hideout [data-test-id=\\\"chart-legends-container\\\"] {\\n max-width: 100% !important;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\"use strict\";\n\nmodule.exports = function (item) {\n var content = item[1];\n var cssMapping = item[3];\n if (!cssMapping) {\n return content;\n }\n if (typeof btoa === \"function\") {\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n return [content].concat([sourceMapping]).join(\"\\n\");\n }\n return [content].join(\"\\n\");\n};","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst adler32 = require('./adler32');\nconst crc32 = require('./crc32');\nconst inflate_fast = require('./inffast');\nconst inflate_table = require('./inftrees');\n\nconst CODES = 0;\nconst LENS = 1;\nconst DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_FINISH, Z_BLOCK, Z_TREES,\n Z_OK, Z_STREAM_END, Z_NEED_DICT, Z_STREAM_ERROR, Z_DATA_ERROR, Z_MEM_ERROR, Z_BUF_ERROR,\n Z_DEFLATED\n} = require('./constants');\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nconst HEAD = 16180; /* i: waiting for magic header */\nconst FLAGS = 16181; /* i: waiting for method and flags (gzip) */\nconst TIME = 16182; /* i: waiting for modification time (gzip) */\nconst OS = 16183; /* i: waiting for extra flags and operating system (gzip) */\nconst EXLEN = 16184; /* i: waiting for extra length (gzip) */\nconst EXTRA = 16185; /* i: waiting for extra bytes (gzip) */\nconst NAME = 16186; /* i: waiting for end of file name (gzip) */\nconst COMMENT = 16187; /* i: waiting for end of comment (gzip) */\nconst HCRC = 16188; /* i: waiting for header crc (gzip) */\nconst DICTID = 16189; /* i: waiting for dictionary check value */\nconst DICT = 16190; /* waiting for inflateSetDictionary() call */\nconst TYPE = 16191; /* i: waiting for type bits, including last-flag bit */\nconst TYPEDO = 16192; /* i: same, but skip check to exit inflate on new block */\nconst STORED = 16193; /* i: waiting for stored size (length and complement) */\nconst COPY_ = 16194; /* i/o: same as COPY below, but only first time in */\nconst COPY = 16195; /* i/o: waiting for input or output to copy stored block */\nconst TABLE = 16196; /* i: waiting for dynamic block table lengths */\nconst LENLENS = 16197; /* i: waiting for code length code lengths */\nconst CODELENS = 16198; /* i: waiting for length/lit and distance code lengths */\nconst LEN_ = 16199; /* i: same as LEN below, but only first time in */\nconst LEN = 16200; /* i: waiting for length/lit/eob code */\nconst LENEXT = 16201; /* i: waiting for length extra bits */\nconst DIST = 16202; /* i: waiting for distance code */\nconst DISTEXT = 16203; /* i: waiting for distance extra bits */\nconst MATCH = 16204; /* o: waiting for output space to copy string */\nconst LIT = 16205; /* o: waiting for output space to write literal */\nconst CHECK = 16206; /* i: waiting for 32-bit check value */\nconst LENGTH = 16207; /* i: waiting for 32-bit length (gzip) */\nconst DONE = 16208; /* finished check, done -- remain here until reset */\nconst BAD = 16209; /* got a data error -- remain here until reset */\nconst MEM = 16210; /* got an inflate() memory error -- remain here until reset */\nconst SYNC = 16211; /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nconst ENOUGH_LENS = 852;\nconst ENOUGH_DISTS = 592;\n//const ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nconst MAX_WBITS = 15;\n/* 32K LZ77 window */\nconst DEF_WBITS = MAX_WBITS;\n\n\nconst zswap32 = (q) => {\n\n return (((q >>> 24) & 0xff) +\n ((q >>> 8) & 0xff00) +\n ((q & 0xff00) << 8) +\n ((q & 0xff) << 24));\n};\n\n\nfunction InflateState() {\n this.strm = null; /* pointer back to this zlib stream */\n this.mode = 0; /* current inflate mode */\n this.last = false; /* true if processing last block */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip,\n bit 2 true to validate check value */\n this.havedict = false; /* true if dictionary provided */\n this.flags = 0; /* gzip header method and flags (0 if zlib), or\n -1 if raw or no header yet */\n this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */\n this.check = 0; /* protected copy of check value */\n this.total = 0; /* protected copy of output count */\n // TODO: may be {}\n this.head = null; /* where to save gzip header information */\n\n /* sliding window */\n this.wbits = 0; /* log base 2 of requested window size */\n this.wsize = 0; /* window size or zero if not using window */\n this.whave = 0; /* valid bytes in the window */\n this.wnext = 0; /* window write index */\n this.window = null; /* allocated sliding window, if needed */\n\n /* bit accumulator */\n this.hold = 0; /* input bit accumulator */\n this.bits = 0; /* number of bits in \"in\" */\n\n /* for string and stored block copying */\n this.length = 0; /* literal or length of data to copy */\n this.offset = 0; /* distance back to copy string from */\n\n /* for table and code decoding */\n this.extra = 0; /* extra bits needed */\n\n /* fixed and dynamic code tables */\n this.lencode = null; /* starting table for length/literal codes */\n this.distcode = null; /* starting table for distance codes */\n this.lenbits = 0; /* index bits for lencode */\n this.distbits = 0; /* index bits for distcode */\n\n /* dynamic table building */\n this.ncode = 0; /* number of code length code lengths */\n this.nlen = 0; /* number of length code lengths */\n this.ndist = 0; /* number of distance code lengths */\n this.have = 0; /* number of code lengths in lens[] */\n this.next = null; /* next available space in codes[] */\n\n this.lens = new Uint16Array(320); /* temporary storage for code lengths */\n this.work = new Uint16Array(288); /* work area for code table building */\n\n /*\n because we don't have pointers in js, we use lencode and distcode directly\n as buffers so we don't need codes\n */\n //this.codes = new Int32Array(ENOUGH); /* space for code tables */\n this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */\n this.distdyn = null; /* dynamic table for distance codes (JS specific) */\n this.sane = 0; /* if false, allow invalid distance too far */\n this.back = 0; /* bits back of last unprocessed length/lit */\n this.was = 0; /* initial length of match */\n}\n\n\nconst inflateStateCheck = (strm) => {\n\n if (!strm) {\n return 1;\n }\n const state = strm.state;\n if (!state || state.strm !== strm ||\n state.mode < HEAD || state.mode > SYNC) {\n return 1;\n }\n return 0;\n};\n\n\nconst inflateResetKeep = (strm) => {\n\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR; }\n const state = strm.state;\n strm.total_in = strm.total_out = state.total = 0;\n strm.msg = ''; /*Z_NULL*/\n if (state.wrap) { /* to support ill-conceived Java test suite */\n strm.adler = state.wrap & 1;\n }\n state.mode = HEAD;\n state.last = 0;\n state.havedict = 0;\n state.flags = -1;\n state.dmax = 32768;\n state.head = null/*Z_NULL*/;\n state.hold = 0;\n state.bits = 0;\n //state.lencode = state.distcode = state.next = state.codes;\n state.lencode = state.lendyn = new Int32Array(ENOUGH_LENS);\n state.distcode = state.distdyn = new Int32Array(ENOUGH_DISTS);\n\n state.sane = 1;\n state.back = -1;\n //Tracev((stderr, \"inflate: reset\\n\"));\n return Z_OK;\n};\n\n\nconst inflateReset = (strm) => {\n\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR; }\n const state = strm.state;\n state.wsize = 0;\n state.whave = 0;\n state.wnext = 0;\n return inflateResetKeep(strm);\n\n};\n\n\nconst inflateReset2 = (strm, windowBits) => {\n let wrap;\n\n /* get the state */\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR; }\n const state = strm.state;\n\n /* extract wrap request from windowBits parameter */\n if (windowBits < 0) {\n wrap = 0;\n windowBits = -windowBits;\n }\n else {\n wrap = (windowBits >> 4) + 5;\n if (windowBits < 48) {\n windowBits &= 15;\n }\n }\n\n /* set number of window bits, free window if different */\n if (windowBits && (windowBits < 8 || windowBits > 15)) {\n return Z_STREAM_ERROR;\n }\n if (state.window !== null && state.wbits !== windowBits) {\n state.window = null;\n }\n\n /* update state and reset the rest of it */\n state.wrap = wrap;\n state.wbits = windowBits;\n return inflateReset(strm);\n};\n\n\nconst inflateInit2 = (strm, windowBits) => {\n\n if (!strm) { return Z_STREAM_ERROR; }\n //strm.msg = Z_NULL; /* in case we return an error */\n\n const state = new InflateState();\n\n //if (state === Z_NULL) return Z_MEM_ERROR;\n //Tracev((stderr, \"inflate: allocated\\n\"));\n strm.state = state;\n state.strm = strm;\n state.window = null/*Z_NULL*/;\n state.mode = HEAD; /* to pass state test in inflateReset2() */\n const ret = inflateReset2(strm, windowBits);\n if (ret !== Z_OK) {\n strm.state = null/*Z_NULL*/;\n }\n return ret;\n};\n\n\nconst inflateInit = (strm) => {\n\n return inflateInit2(strm, DEF_WBITS);\n};\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding. Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter. This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time. However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nlet virgin = true;\n\nlet lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\n\nconst fixedtables = (state) => {\n\n /* build fixed huffman tables if first call (may not be thread safe) */\n if (virgin) {\n lenfix = new Int32Array(512);\n distfix = new Int32Array(32);\n\n /* literal/length table */\n let sym = 0;\n while (sym < 144) { state.lens[sym++] = 8; }\n while (sym < 256) { state.lens[sym++] = 9; }\n while (sym < 280) { state.lens[sym++] = 7; }\n while (sym < 288) { state.lens[sym++] = 8; }\n\n inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 });\n\n /* distance table */\n sym = 0;\n while (sym < 32) { state.lens[sym++] = 5; }\n\n inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 });\n\n /* do this just once */\n virgin = false;\n }\n\n state.lencode = lenfix;\n state.lenbits = 9;\n state.distcode = distfix;\n state.distbits = 5;\n};\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning. If window does not exist yet, create it. This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nconst updatewindow = (strm, src, end, copy) => {\n\n let dist;\n const state = strm.state;\n\n /* if it hasn't been done already, allocate space for the window */\n if (state.window === null) {\n state.wsize = 1 << state.wbits;\n state.wnext = 0;\n state.whave = 0;\n\n state.window = new Uint8Array(state.wsize);\n }\n\n /* copy state->wsize or less output bytes into the circular window */\n if (copy >= state.wsize) {\n state.window.set(src.subarray(end - state.wsize, end), 0);\n state.wnext = 0;\n state.whave = state.wsize;\n }\n else {\n dist = state.wsize - state.wnext;\n if (dist > copy) {\n dist = copy;\n }\n //zmemcpy(state->window + state->wnext, end - copy, dist);\n state.window.set(src.subarray(end - copy, end - copy + dist), state.wnext);\n copy -= dist;\n if (copy) {\n //zmemcpy(state->window, end - copy, copy);\n state.window.set(src.subarray(end - copy, end), 0);\n state.wnext = copy;\n state.whave = state.wsize;\n }\n else {\n state.wnext += dist;\n if (state.wnext === state.wsize) { state.wnext = 0; }\n if (state.whave < state.wsize) { state.whave += dist; }\n }\n }\n return 0;\n};\n\n\nconst inflate = (strm, flush) => {\n\n let state;\n let input, output; // input/output buffers\n let next; /* next input INDEX */\n let put; /* next output INDEX */\n let have, left; /* available input and output */\n let hold; /* bit buffer */\n let bits; /* bits in bit buffer */\n let _in, _out; /* save starting available input and output */\n let copy; /* number of stored or match bytes to copy */\n let from; /* where to copy match bytes from */\n let from_source;\n let here = 0; /* current decoding table entry */\n let here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n //let last; /* parent table entry */\n let last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n let len; /* length to copy for repeats, bits to drop */\n let ret; /* return code */\n const hbuf = new Uint8Array(4); /* buffer for gzip header crc calculation */\n let opts;\n\n let n; // temporary variable for NEED_BITS\n\n const order = /* permutation of code lengths */\n new Uint8Array([ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]);\n\n\n if (inflateStateCheck(strm) || !strm.output ||\n (!strm.input && strm.avail_in !== 0)) {\n return Z_STREAM_ERROR;\n }\n\n state = strm.state;\n if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */\n\n\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n _in = have;\n _out = left;\n ret = Z_OK;\n\n inf_leave: // goto emulation\n for (;;) {\n switch (state.mode) {\n case HEAD:\n if (state.wrap === 0) {\n state.mode = TYPEDO;\n break;\n }\n //=== NEEDBITS(16);\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */\n if (state.wbits === 0) {\n state.wbits = 15;\n }\n state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = FLAGS;\n break;\n }\n if (state.head) {\n state.head.done = false;\n }\n if (!(state.wrap & 1) || /* check if zlib header allowed */\n (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n strm.msg = 'incorrect header check';\n state.mode = BAD;\n break;\n }\n if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n len = (hold & 0x0f)/*BITS(4)*/ + 8;\n if (state.wbits === 0) {\n state.wbits = len;\n }\n if (len > 15 || len > state.wbits) {\n strm.msg = 'invalid window size';\n state.mode = BAD;\n break;\n }\n\n // !!! pako patch. Force use `options.windowBits` if passed.\n // Required to always use max window size by default.\n state.dmax = 1 << state.wbits;\n //state.dmax = 1 << len;\n\n state.flags = 0; /* indicate zlib header */\n //Tracev((stderr, \"inflate: zlib header ok\\n\"));\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = hold & 0x200 ? DICTID : TYPE;\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n break;\n case FLAGS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.flags = hold;\n if ((state.flags & 0xff) !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n if (state.flags & 0xe000) {\n strm.msg = 'unknown header flags set';\n state.mode = BAD;\n break;\n }\n if (state.head) {\n state.head.text = ((hold >> 8) & 1);\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = TIME;\n /* falls through */\n case TIME:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.time = hold;\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC4(state.check, hold)\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n hbuf[2] = (hold >>> 16) & 0xff;\n hbuf[3] = (hold >>> 24) & 0xff;\n state.check = crc32(state.check, hbuf, 4, 0);\n //===\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = OS;\n /* falls through */\n case OS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.xflags = (hold & 0xff);\n state.head.os = (hold >> 8);\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = EXLEN;\n /* falls through */\n case EXLEN:\n if (state.flags & 0x0400) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length = hold;\n if (state.head) {\n state.head.extra_len = hold;\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n else if (state.head) {\n state.head.extra = null/*Z_NULL*/;\n }\n state.mode = EXTRA;\n /* falls through */\n case EXTRA:\n if (state.flags & 0x0400) {\n copy = state.length;\n if (copy > have) { copy = have; }\n if (copy) {\n if (state.head) {\n len = state.head.extra_len - state.length;\n if (!state.head.extra) {\n // Use untyped array for more convenient processing later\n state.head.extra = new Uint8Array(state.head.extra_len);\n }\n state.head.extra.set(\n input.subarray(\n next,\n // extra field is limited to 65536 bytes\n // - no need for additional size check\n next + copy\n ),\n /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n len\n );\n //zmemcpy(state.head.extra + len, next,\n // len + copy > state.head.extra_max ?\n // state.head.extra_max - len : copy);\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n state.length -= copy;\n }\n if (state.length) { break inf_leave; }\n }\n state.length = 0;\n state.mode = NAME;\n /* falls through */\n case NAME:\n if (state.flags & 0x0800) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n // TODO: 2 or 1 bytes?\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.name_max*/)) {\n state.head.name += String.fromCharCode(len);\n }\n } while (len && copy < have);\n\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.name = null;\n }\n state.length = 0;\n state.mode = COMMENT;\n /* falls through */\n case COMMENT:\n if (state.flags & 0x1000) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.comm_max*/)) {\n state.head.comment += String.fromCharCode(len);\n }\n } while (len && copy < have);\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.comment = null;\n }\n state.mode = HCRC;\n /* falls through */\n case HCRC:\n if (state.flags & 0x0200) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 4) && hold !== (state.check & 0xffff)) {\n strm.msg = 'header crc mismatch';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n if (state.head) {\n state.head.hcrc = ((state.flags >> 9) & 1);\n state.head.done = true;\n }\n strm.adler = state.check = 0;\n state.mode = TYPE;\n break;\n case DICTID:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n strm.adler = state.check = zswap32(hold);\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = DICT;\n /* falls through */\n case DICT:\n if (state.havedict === 0) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n return Z_NEED_DICT;\n }\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = TYPE;\n /* falls through */\n case TYPE:\n if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case TYPEDO:\n if (state.last) {\n //--- BYTEBITS() ---//\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n state.mode = CHECK;\n break;\n }\n //=== NEEDBITS(3); */\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.last = (hold & 0x01)/*BITS(1)*/;\n //--- DROPBITS(1) ---//\n hold >>>= 1;\n bits -= 1;\n //---//\n\n switch ((hold & 0x03)/*BITS(2)*/) {\n case 0: /* stored block */\n //Tracev((stderr, \"inflate: stored block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = STORED;\n break;\n case 1: /* fixed block */\n fixedtables(state);\n //Tracev((stderr, \"inflate: fixed codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = LEN_; /* decode codes */\n if (flush === Z_TREES) {\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break inf_leave;\n }\n break;\n case 2: /* dynamic block */\n //Tracev((stderr, \"inflate: dynamic codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = TABLE;\n break;\n case 3:\n strm.msg = 'invalid block type';\n state.mode = BAD;\n }\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break;\n case STORED:\n //--- BYTEBITS() ---// /* go to byte boundary */\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n strm.msg = 'invalid stored block lengths';\n state.mode = BAD;\n break;\n }\n state.length = hold & 0xffff;\n //Tracev((stderr, \"inflate: stored length %u\\n\",\n // state.length));\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = COPY_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case COPY_:\n state.mode = COPY;\n /* falls through */\n case COPY:\n copy = state.length;\n if (copy) {\n if (copy > have) { copy = have; }\n if (copy > left) { copy = left; }\n if (copy === 0) { break inf_leave; }\n //--- zmemcpy(put, next, copy); ---\n output.set(input.subarray(next, next + copy), put);\n //---//\n have -= copy;\n next += copy;\n left -= copy;\n put += copy;\n state.length -= copy;\n break;\n }\n //Tracev((stderr, \"inflate: stored end\\n\"));\n state.mode = TYPE;\n break;\n case TABLE:\n //=== NEEDBITS(14); */\n while (bits < 14) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n if (state.nlen > 286 || state.ndist > 30) {\n strm.msg = 'too many length or distance symbols';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracev((stderr, \"inflate: table sizes ok\\n\"));\n state.have = 0;\n state.mode = LENLENS;\n /* falls through */\n case LENLENS:\n while (state.have < state.ncode) {\n //=== NEEDBITS(3);\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n while (state.have < 19) {\n state.lens[order[state.have++]] = 0;\n }\n // We have separate tables & no pointers. 2 commented lines below not needed.\n //state.next = state.codes;\n //state.lencode = state.next;\n // Switch to use dynamic table\n state.lencode = state.lendyn;\n state.lenbits = 7;\n\n opts = { bits: state.lenbits };\n ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n state.lenbits = opts.bits;\n\n if (ret) {\n strm.msg = 'invalid code lengths set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, \"inflate: code lengths ok\\n\"));\n state.have = 0;\n state.mode = CODELENS;\n /* falls through */\n case CODELENS:\n while (state.have < state.nlen + state.ndist) {\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_val < 16) {\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.lens[state.have++] = here_val;\n }\n else {\n if (here_val === 16) {\n //=== NEEDBITS(here.bits + 2);\n n = here_bits + 2;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n if (state.have === 0) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n len = state.lens[state.have - 1];\n copy = 3 + (hold & 0x03);//BITS(2);\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n }\n else if (here_val === 17) {\n //=== NEEDBITS(here.bits + 3);\n n = here_bits + 3;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 3 + (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n else {\n //=== NEEDBITS(here.bits + 7);\n n = here_bits + 7;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 11 + (hold & 0x7f);//BITS(7);\n //--- DROPBITS(7) ---//\n hold >>>= 7;\n bits -= 7;\n //---//\n }\n if (state.have + copy > state.nlen + state.ndist) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n while (copy--) {\n state.lens[state.have++] = len;\n }\n }\n }\n\n /* handle error breaks in while */\n if (state.mode === BAD) { break; }\n\n /* check for end-of-block code (better have one) */\n if (state.lens[256] === 0) {\n strm.msg = 'invalid code -- missing end-of-block';\n state.mode = BAD;\n break;\n }\n\n /* build code tables -- note: do not change the lenbits or distbits\n values here (9 and 6) without reading the comments in inftrees.h\n concerning the ENOUGH constants, which depend on those values */\n state.lenbits = 9;\n\n opts = { bits: state.lenbits };\n ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.lenbits = opts.bits;\n // state.lencode = state.next;\n\n if (ret) {\n strm.msg = 'invalid literal/lengths set';\n state.mode = BAD;\n break;\n }\n\n state.distbits = 6;\n //state.distcode.copy(state.codes);\n // Switch to use dynamic table\n state.distcode = state.distdyn;\n opts = { bits: state.distbits };\n ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.distbits = opts.bits;\n // state.distcode = state.next;\n\n if (ret) {\n strm.msg = 'invalid distances set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, 'inflate: codes ok\\n'));\n state.mode = LEN_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case LEN_:\n state.mode = LEN;\n /* falls through */\n case LEN:\n if (have >= 6 && left >= 258) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n inflate_fast(strm, _out);\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n if (state.mode === TYPE) {\n state.back = -1;\n }\n break;\n }\n state.back = 0;\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if (here_bits <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_op && (here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.lencode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n state.length = here_val;\n if (here_op === 0) {\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n state.mode = LIT;\n break;\n }\n if (here_op & 32) {\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.back = -1;\n state.mode = TYPE;\n break;\n }\n if (here_op & 64) {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break;\n }\n state.extra = here_op & 15;\n state.mode = LENEXT;\n /* falls through */\n case LENEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", state.length));\n state.was = state.length;\n state.mode = DIST;\n /* falls through */\n case DIST:\n for (;;) {\n here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if ((here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.distcode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n if (here_op & 64) {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break;\n }\n state.offset = here_val;\n state.extra = (here_op) & 15;\n state.mode = DISTEXT;\n /* falls through */\n case DISTEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n//#ifdef INFLATE_STRICT\n if (state.offset > state.dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracevv((stderr, \"inflate: distance %u\\n\", state.offset));\n state.mode = MATCH;\n /* falls through */\n case MATCH:\n if (left === 0) { break inf_leave; }\n copy = _out - left;\n if (state.offset > copy) { /* copy from window */\n copy = state.offset - copy;\n if (copy > state.whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// Trace((stderr, \"inflate.c too far\\n\"));\n// copy -= state.whave;\n// if (copy > state.length) { copy = state.length; }\n// if (copy > left) { copy = left; }\n// left -= copy;\n// state.length -= copy;\n// do {\n// output[put++] = 0;\n// } while (--copy);\n// if (state.length === 0) { state.mode = LEN; }\n// break;\n//#endif\n }\n if (copy > state.wnext) {\n copy -= state.wnext;\n from = state.wsize - copy;\n }\n else {\n from = state.wnext - copy;\n }\n if (copy > state.length) { copy = state.length; }\n from_source = state.window;\n }\n else { /* copy from output */\n from_source = output;\n from = put - state.offset;\n copy = state.length;\n }\n if (copy > left) { copy = left; }\n left -= copy;\n state.length -= copy;\n do {\n output[put++] = from_source[from++];\n } while (--copy);\n if (state.length === 0) { state.mode = LEN; }\n break;\n case LIT:\n if (left === 0) { break inf_leave; }\n output[put++] = state.length;\n left--;\n state.mode = LEN;\n break;\n case CHECK:\n if (state.wrap) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n // Use '|' instead of '+' to make sure that result is signed\n hold |= input[next++] << bits;\n bits += 8;\n }\n //===//\n _out -= left;\n strm.total_out += _out;\n state.total += _out;\n if ((state.wrap & 4) && _out) {\n strm.adler = state.check =\n /*UPDATE_CHECK(state.check, put - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));\n\n }\n _out = left;\n // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n if ((state.wrap & 4) && (state.flags ? hold : zswap32(hold)) !== state.check) {\n strm.msg = 'incorrect data check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: check matches trailer\\n\"));\n }\n state.mode = LENGTH;\n /* falls through */\n case LENGTH:\n if (state.wrap && state.flags) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 4) && hold !== (state.total & 0xffffffff)) {\n strm.msg = 'incorrect length check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: length matches trailer\\n\"));\n }\n state.mode = DONE;\n /* falls through */\n case DONE:\n ret = Z_STREAM_END;\n break inf_leave;\n case BAD:\n ret = Z_DATA_ERROR;\n break inf_leave;\n case MEM:\n return Z_MEM_ERROR;\n case SYNC:\n /* falls through */\n default:\n return Z_STREAM_ERROR;\n }\n }\n\n // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n /*\n Return from inflate(), updating the total counts and the check value.\n If there was no progress during the inflate() call, return a buffer\n error. Call updatewindow() to create and/or update the window state.\n Note: a memory error from inflate() is non-recoverable.\n */\n\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n\n if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n (state.mode < CHECK || flush !== Z_FINISH))) {\n if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {\n state.mode = MEM;\n return Z_MEM_ERROR;\n }\n }\n _in -= strm.avail_in;\n _out -= strm.avail_out;\n strm.total_in += _in;\n strm.total_out += _out;\n state.total += _out;\n if ((state.wrap & 4) && _out) {\n strm.adler = state.check = /*UPDATE_CHECK(state.check, strm.next_out - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));\n }\n strm.data_type = state.bits + (state.last ? 64 : 0) +\n (state.mode === TYPE ? 128 : 0) +\n (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {\n ret = Z_BUF_ERROR;\n }\n return ret;\n};\n\n\nconst inflateEnd = (strm) => {\n\n if (inflateStateCheck(strm)) {\n return Z_STREAM_ERROR;\n }\n\n let state = strm.state;\n if (state.window) {\n state.window = null;\n }\n strm.state = null;\n return Z_OK;\n};\n\n\nconst inflateGetHeader = (strm, head) => {\n\n /* check state */\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR; }\n const state = strm.state;\n if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }\n\n /* save header structure */\n state.head = head;\n head.done = false;\n return Z_OK;\n};\n\n\nconst inflateSetDictionary = (strm, dictionary) => {\n const dictLength = dictionary.length;\n\n let state;\n let dictid;\n let ret;\n\n /* check state */\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR; }\n state = strm.state;\n\n if (state.wrap !== 0 && state.mode !== DICT) {\n return Z_STREAM_ERROR;\n }\n\n /* check for correct dictionary identifier */\n if (state.mode === DICT) {\n dictid = 1; /* adler32(0, null, 0)*/\n /* dictid = adler32(dictid, dictionary, dictLength); */\n dictid = adler32(dictid, dictionary, dictLength, 0);\n if (dictid !== state.check) {\n return Z_DATA_ERROR;\n }\n }\n /* copy dictionary to window using updatewindow(), which will amend the\n existing dictionary if appropriate */\n ret = updatewindow(strm, dictionary, dictLength, dictLength);\n if (ret) {\n state.mode = MEM;\n return Z_MEM_ERROR;\n }\n state.havedict = 1;\n // Tracev((stderr, \"inflate: dictionary set\\n\"));\n return Z_OK;\n};\n\n\nmodule.exports.inflateReset = inflateReset;\nmodule.exports.inflateReset2 = inflateReset2;\nmodule.exports.inflateResetKeep = inflateResetKeep;\nmodule.exports.inflateInit = inflateInit;\nmodule.exports.inflateInit2 = inflateInit2;\nmodule.exports.inflate = inflate;\nmodule.exports.inflateEnd = inflateEnd;\nmodule.exports.inflateGetHeader = inflateGetHeader;\nmodule.exports.inflateSetDictionary = inflateSetDictionary;\nmodule.exports.inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nmodule.exports.inflateCodesUsed = inflateCodesUsed;\nmodule.exports.inflateCopy = inflateCopy;\nmodule.exports.inflateGetDictionary = inflateGetDictionary;\nmodule.exports.inflateMark = inflateMark;\nmodule.exports.inflatePrime = inflatePrime;\nmodule.exports.inflateSync = inflateSync;\nmodule.exports.inflateSyncPoint = inflateSyncPoint;\nmodule.exports.inflateUndermine = inflateUndermine;\nmodule.exports.inflateValidate = inflateValidate;\n*/\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.quicklook {\n width: 0;\n}\n.quicklook--expanded {\n width: 500px;\n z-index: 150;\n}\n\n.quicklook-inner {\n transition: opacity 0.2s ease-in-out 0.25s;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/elements/leaderboard/quicklook.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,QAAQ;AACV;AACA;EACE,YAAY;EACZ,YAAY;AACd;;AAEA;EACE,0CAA0C;AAC5C\",\"sourcesContent\":[\".quicklook {\\n width: 0;\\n}\\n.quicklook--expanded {\\n width: 500px;\\n z-index: 150;\\n}\\n\\n.quicklook-inner {\\n transition: opacity 0.2s ease-in-out 0.25s;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Top level file is just a mixin of submodules & constants\n'use strict';\n\nconst { Deflate, deflate, deflateRaw, gzip } = require('./lib/deflate');\n\nconst { Inflate, inflate, inflateRaw, ungzip } = require('./lib/inflate');\n\nconst constants = require('./lib/zlib/constants');\n\nmodule.exports.Deflate = Deflate;\nmodule.exports.deflate = deflate;\nmodule.exports.deflateRaw = deflateRaw;\nmodule.exports.gzip = gzip;\nmodule.exports.Inflate = Inflate;\nmodule.exports.inflate = inflate;\nmodule.exports.inflateRaw = inflateRaw;\nmodule.exports.ungzip = ungzip;\nmodule.exports.constants = constants;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.core-page-header {\n height: var(--core-page-header-height);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/page/heading/header.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,sCAAsC;AACxC\",\"sourcesContent\":[\".core-page-header {\\n height: var(--core-page-header-height);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","module.exports = __WEBPACK_EXTERNAL_MODULE__1867__;","// String encode/decode helpers\n'use strict';\n\n\n// Quick check if we can use fast array to bin string conversion\n//\n// - apply(Array) can fail on Android 2.2\n// - apply(Uint8Array) can fail on iOS 5.1 Safari\n//\nlet STR_APPLY_UIA_OK = true;\n\ntry { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }\n\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nconst _utf8len = new Uint8Array(256);\nfor (let q = 0; q < 256; q++) {\n _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);\n}\n_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start\n\n\n// convert string to array (typed, when possible)\nmodule.exports.string2buf = (str) => {\n if (typeof TextEncoder === 'function' && TextEncoder.prototype.encode) {\n return new TextEncoder().encode(str);\n }\n\n let buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n // count binary size\n for (m_pos = 0; m_pos < str_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n }\n\n // allocate buffer\n buf = new Uint8Array(buf_len);\n\n // convert\n for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n if (c < 0x80) {\n /* one byte */\n buf[i++] = c;\n } else if (c < 0x800) {\n /* two bytes */\n buf[i++] = 0xC0 | (c >>> 6);\n buf[i++] = 0x80 | (c & 0x3f);\n } else if (c < 0x10000) {\n /* three bytes */\n buf[i++] = 0xE0 | (c >>> 12);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n } else {\n /* four bytes */\n buf[i++] = 0xf0 | (c >>> 18);\n buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n }\n }\n\n return buf;\n};\n\n// Helper\nconst buf2binstring = (buf, len) => {\n // On Chrome, the arguments in a function call that are allowed is `65534`.\n // If the length of the buffer is smaller than that, we can use this optimization,\n // otherwise we will take a slower path.\n if (len < 65534) {\n if (buf.subarray && STR_APPLY_UIA_OK) {\n return String.fromCharCode.apply(null, buf.length === len ? buf : buf.subarray(0, len));\n }\n }\n\n let result = '';\n for (let i = 0; i < len; i++) {\n result += String.fromCharCode(buf[i]);\n }\n return result;\n};\n\n\n// convert array to string\nmodule.exports.buf2string = (buf, max) => {\n const len = max || buf.length;\n\n if (typeof TextDecoder === 'function' && TextDecoder.prototype.decode) {\n return new TextDecoder().decode(buf.subarray(0, max));\n }\n\n let i, out;\n\n // Reserve max possible length (2 words per char)\n // NB: by unknown reasons, Array is significantly faster for\n // String.fromCharCode.apply than Uint16Array.\n const utf16buf = new Array(len * 2);\n\n for (out = 0, i = 0; i < len;) {\n let c = buf[i++];\n // quick process ascii\n if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n let c_len = _utf8len[c];\n // skip 5 & 6 byte codes\n if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }\n\n // apply mask on first byte\n c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n // join the rest\n while (c_len > 1 && i < len) {\n c = (c << 6) | (buf[i++] & 0x3f);\n c_len--;\n }\n\n // terminated by end of string?\n if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n if (c < 0x10000) {\n utf16buf[out++] = c;\n } else {\n c -= 0x10000;\n utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n }\n }\n\n return buf2binstring(utf16buf, out);\n};\n\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max - length limit (mandatory);\nmodule.exports.utf8border = (buf, max) => {\n\n max = max || buf.length;\n if (max > buf.length) { max = buf.length; }\n\n // go back from last position, until start of sequence found\n let pos = max - 1;\n while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n // Very small and broken sequence,\n // return max, because we should return something anyway.\n if (pos < 0) { return max; }\n\n // If we came to start of buffer - that means buffer is too small,\n // return max too.\n if (pos === 0) { return max; }\n\n return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst MAXBITS = 15;\nconst ENOUGH_LENS = 852;\nconst ENOUGH_DISTS = 592;\n//const ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nconst CODES = 0;\nconst LENS = 1;\nconst DISTS = 2;\n\nconst lbase = new Uint16Array([ /* Length codes 257..285 base */\n 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n]);\n\nconst lext = new Uint8Array([ /* Length codes 257..285 extra */\n 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n]);\n\nconst dbase = new Uint16Array([ /* Distance codes 0..29 base */\n 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n 8193, 12289, 16385, 24577, 0, 0\n]);\n\nconst dext = new Uint8Array([ /* Distance codes 0..29 extra */\n 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n 23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n 28, 28, 29, 29, 64, 64\n]);\n\nconst inflate_table = (type, lens, lens_index, codes, table, table_index, work, opts) =>\n{\n const bits = opts.bits;\n //here = opts.here; /* table entry for duplication */\n\n let len = 0; /* a code's length in bits */\n let sym = 0; /* index of code symbols */\n let min = 0, max = 0; /* minimum and maximum code lengths */\n let root = 0; /* number of index bits for root table */\n let curr = 0; /* number of index bits for current table */\n let drop = 0; /* code bits to drop for sub-table */\n let left = 0; /* number of prefix codes available */\n let used = 0; /* code entries in table used */\n let huff = 0; /* Huffman code */\n let incr; /* for incrementing code, index */\n let fill; /* index for replicating entries */\n let low; /* low bits for current root entry */\n let mask; /* mask for low root bits */\n let next; /* next available space in table */\n let base = null; /* base value table to use */\n// let shoextra; /* extra bits table to use */\n let match; /* use base and extra for symbol >= match */\n const count = new Uint16Array(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */\n const offs = new Uint16Array(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */\n let extra = null;\n\n let here_bits, here_op, here_val;\n\n /*\n Process a set of code lengths to create a canonical Huffman code. The\n code lengths are lens[0..codes-1]. Each length corresponds to the\n symbols 0..codes-1. The Huffman code is generated by first sorting the\n symbols by length from short to long, and retaining the symbol order\n for codes with equal lengths. Then the code starts with all zero bits\n for the first code of the shortest length, and the codes are integer\n increments for the same length, and zeros are appended as the length\n increases. For the deflate format, these bits are stored backwards\n from their more natural integer increment ordering, and so when the\n decoding tables are built in the large loop below, the integer codes\n are incremented backwards.\n\n This routine assumes, but does not check, that all of the entries in\n lens[] are in the range 0..MAXBITS. The caller must assure this.\n 1..MAXBITS is interpreted as that code length. zero means that that\n symbol does not occur in this code.\n\n The codes are sorted by computing a count of codes for each length,\n creating from that a table of starting indices for each length in the\n sorted table, and then entering the symbols in order in the sorted\n table. The sorted table is work[], with that space being provided by\n the caller.\n\n The length counts are used for other purposes as well, i.e. finding\n the minimum and maximum length codes, determining if there are any\n codes at all, checking for a valid set of lengths, and looking ahead\n at length counts to determine sub-table sizes when building the\n decoding tables.\n */\n\n /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n for (len = 0; len <= MAXBITS; len++) {\n count[len] = 0;\n }\n for (sym = 0; sym < codes; sym++) {\n count[lens[lens_index + sym]]++;\n }\n\n /* bound code lengths, force root to be within code lengths */\n root = bits;\n for (max = MAXBITS; max >= 1; max--) {\n if (count[max] !== 0) { break; }\n }\n if (root > max) {\n root = max;\n }\n if (max === 0) { /* no symbols to code at all */\n //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */\n //table.bits[opts.table_index] = 1; //here.bits = (var char)1;\n //table.val[opts.table_index++] = 0; //here.val = (var short)0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n //table.op[opts.table_index] = 64;\n //table.bits[opts.table_index] = 1;\n //table.val[opts.table_index++] = 0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n opts.bits = 1;\n return 0; /* no symbols, but wait for decoding to report error */\n }\n for (min = 1; min < max; min++) {\n if (count[min] !== 0) { break; }\n }\n if (root < min) {\n root = min;\n }\n\n /* check for an over-subscribed or incomplete set of lengths */\n left = 1;\n for (len = 1; len <= MAXBITS; len++) {\n left <<= 1;\n left -= count[len];\n if (left < 0) {\n return -1;\n } /* over-subscribed */\n }\n if (left > 0 && (type === CODES || max !== 1)) {\n return -1; /* incomplete set */\n }\n\n /* generate offsets into symbol table for each length for sorting */\n offs[1] = 0;\n for (len = 1; len < MAXBITS; len++) {\n offs[len + 1] = offs[len] + count[len];\n }\n\n /* sort symbols by length, by symbol order within each length */\n for (sym = 0; sym < codes; sym++) {\n if (lens[lens_index + sym] !== 0) {\n work[offs[lens[lens_index + sym]]++] = sym;\n }\n }\n\n /*\n Create and fill in decoding tables. In this loop, the table being\n filled is at next and has curr index bits. The code being used is huff\n with length len. That code is converted to an index by dropping drop\n bits off of the bottom. For codes where len is less than drop + curr,\n those top drop + curr - len bits are incremented through all values to\n fill the table with replicated entries.\n\n root is the number of index bits for the root table. When len exceeds\n root, sub-tables are created pointed to by the root entry with an index\n of the low root bits of huff. This is saved in low to check for when a\n new sub-table should be started. drop is zero when the root table is\n being filled, and drop is root when sub-tables are being filled.\n\n When a new sub-table is needed, it is necessary to look ahead in the\n code lengths to determine what size sub-table is needed. The length\n counts are used for this, and so count[] is decremented as codes are\n entered in the tables.\n\n used keeps track of how many table entries have been allocated from the\n provided *table space. It is checked for LENS and DIST tables against\n the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n the initial root table size constants. See the comments in inftrees.h\n for more information.\n\n sym increments through all symbols, and the loop terminates when\n all codes of length max, i.e. all codes, have been processed. This\n routine permits incomplete codes, so another loop after this one fills\n in the rest of the decoding tables with invalid code markers.\n */\n\n /* set up for code type */\n // poor man optimization - use if-else instead of switch,\n // to avoid deopts in old v8\n if (type === CODES) {\n base = extra = work; /* dummy value--not used */\n match = 20;\n\n } else if (type === LENS) {\n base = lbase;\n extra = lext;\n match = 257;\n\n } else { /* DISTS */\n base = dbase;\n extra = dext;\n match = 0;\n }\n\n /* initialize opts for loop */\n huff = 0; /* starting code */\n sym = 0; /* starting code symbol */\n len = min; /* starting code length */\n next = table_index; /* current table to fill in */\n curr = root; /* current table index bits */\n drop = 0; /* current bits to drop from code for index */\n low = -1; /* trigger new sub-table when len > root */\n used = 1 << root; /* use root table entries */\n mask = used - 1; /* mask for comparing low */\n\n /* check available table space */\n if ((type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)) {\n return 1;\n }\n\n /* process all codes and make table entries */\n for (;;) {\n /* create table entry */\n here_bits = len - drop;\n if (work[sym] + 1 < match) {\n here_op = 0;\n here_val = work[sym];\n }\n else if (work[sym] >= match) {\n here_op = extra[work[sym] - match];\n here_val = base[work[sym] - match];\n }\n else {\n here_op = 32 + 64; /* end of block */\n here_val = 0;\n }\n\n /* replicate for those indices with low len bits equal to huff */\n incr = 1 << (len - drop);\n fill = 1 << curr;\n min = fill; /* save offset to next table */\n do {\n fill -= incr;\n table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n } while (fill !== 0);\n\n /* backwards increment the len-bit code huff */\n incr = 1 << (len - 1);\n while (huff & incr) {\n incr >>= 1;\n }\n if (incr !== 0) {\n huff &= incr - 1;\n huff += incr;\n } else {\n huff = 0;\n }\n\n /* go to next symbol, update count, len */\n sym++;\n if (--count[len] === 0) {\n if (len === max) { break; }\n len = lens[lens_index + work[sym]];\n }\n\n /* create new sub-table if needed */\n if (len > root && (huff & mask) !== low) {\n /* if first time, transition to sub-tables */\n if (drop === 0) {\n drop = root;\n }\n\n /* increment past last table */\n next += min; /* here min is 1 << curr */\n\n /* determine length of next table */\n curr = len - drop;\n left = 1 << curr;\n while (curr + drop < max) {\n left -= count[curr + drop];\n if (left <= 0) { break; }\n curr++;\n left <<= 1;\n }\n\n /* check for enough space */\n used += 1 << curr;\n if ((type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)) {\n return 1;\n }\n\n /* point entry in root table to sub-table */\n low = huff & mask;\n /*table.op[low] = curr;\n table.bits[low] = root;\n table.val[low] = next - opts.table_index;*/\n table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n }\n }\n\n /* fill in remaining table entry if code is incomplete (guaranteed to have\n at most one remaining entry, since if the code is incomplete, the\n maximum code length that was allowed to get this far is one bit) */\n if (huff !== 0) {\n //table.op[next + huff] = 64; /* invalid code marker */\n //table.bits[next + huff] = len - drop;\n //table.val[next + huff] = 0;\n table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n }\n\n /* set return parameters */\n //opts.table_index += used;\n opts.bits = root;\n return 0;\n};\n\n\nmodule.exports = inflate_table;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.core-page {\n min-height: calc(100vh - var(--header-height));\n width: calc(100vw - (var(--left-sidebar-width) + var(--right-sidebar-width)));\n max-width: calc(100vw - (var(--left-sidebar-width) + var(--right-sidebar-width)));\n overflow-x: clip;\n overflow-y: visible;\n}\n\n.core-page-container {\n width: calc(100vw - (var(--left-sidebar-width) + var(--right-sidebar-width)));\n max-width: calc(100vw - (var(--left-sidebar-width) + var(--right-sidebar-width)));\n min-height: calc(100vh - var(--header-height));\n overflow-x: clip;\n overflow-y: visible;\n}\n\n.core-page-footer {\n margin-left: -24px;\n margin-right: -24px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/page/page.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,8CAA8C;EAC9C,6EAA6E;EAC7E,iFAAiF;EACjF,gBAAgB;EAChB,mBAAmB;AACrB;;AAEA;EACE,6EAA6E;EAC7E,iFAAiF;EACjF,8CAA8C;EAC9C,gBAAgB;EAChB,mBAAmB;AACrB;;AAEA;EACE,kBAAkB;EAClB,mBAAmB;AACrB\",\"sourcesContent\":[\".core-page {\\n min-height: calc(100vh - var(--header-height));\\n width: calc(100vw - (var(--left-sidebar-width) + var(--right-sidebar-width)));\\n max-width: calc(100vw - (var(--left-sidebar-width) + var(--right-sidebar-width)));\\n overflow-x: clip;\\n overflow-y: visible;\\n}\\n\\n.core-page-container {\\n width: calc(100vw - (var(--left-sidebar-width) + var(--right-sidebar-width)));\\n max-width: calc(100vw - (var(--left-sidebar-width) + var(--right-sidebar-width)));\\n min-height: calc(100vh - var(--header-height));\\n overflow-x: clip;\\n overflow-y: visible;\\n}\\n\\n.core-page-footer {\\n margin-left: -24px;\\n margin-right: -24px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.table-container::-webkit-scrollbar {\n display: none;\n}\n\n/* Hide scrollbar for IE, Edge and Firefox */\n.table-container {\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/design/table2/table.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,aAAa;AACf;;AAEA,4CAA4C;AAC5C;EACE,wBAAwB,EAAE,gBAAgB;EAC1C,qBAAqB,EAAE,YAAY;AACrC\",\"sourcesContent\":[\".table-container::-webkit-scrollbar {\\n display: none;\\n}\\n\\n/* Hide scrollbar for IE, Edge and Firefox */\\n.table-container {\\n -ms-overflow-style: none; /* IE and Edge */\\n scrollbar-width: none; /* Firefox */\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","'use strict';\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst adler32 = (adler, buf, len, pos) => {\n let s1 = (adler & 0xffff) |0,\n s2 = ((adler >>> 16) & 0xffff) |0,\n n = 0;\n\n while (len !== 0) {\n // Set limit ~ twice less than 5552, to keep\n // s2 in 31-bits, because we force signed ints.\n // in other case %= will fail.\n n = len > 2000 ? 2000 : len;\n len -= n;\n\n do {\n s1 = (s1 + buf[pos++]) |0;\n s2 = (s2 + s1) |0;\n } while (--n);\n\n s1 %= 65521;\n s2 %= 65521;\n }\n\n return (s1 | (s2 << 16)) |0;\n};\n\n\nmodule.exports = adler32;\n","'use strict';\n\n\nconst zlib_deflate = require('./zlib/deflate');\nconst utils = require('./utils/common');\nconst strings = require('./utils/strings');\nconst msg = require('./zlib/messages');\nconst ZStream = require('./zlib/zstream');\n\nconst toString = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_NO_FLUSH, Z_SYNC_FLUSH, Z_FULL_FLUSH, Z_FINISH,\n Z_OK, Z_STREAM_END,\n Z_DEFAULT_COMPRESSION,\n Z_DEFAULT_STRATEGY,\n Z_DEFLATED\n} = require('./zlib/constants');\n\n/* ===========================================================================*/\n\n\n/**\n * class Deflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[deflate]],\n * [[deflateRaw]] and [[gzip]].\n **/\n\n/* internal\n * Deflate.chunks -> Array\n *\n * Chunks of output data, if [[Deflate#onData]] not overridden.\n **/\n\n/**\n * Deflate.result -> Uint8Array\n *\n * Compressed result, generated by default [[Deflate#onData]]\n * and [[Deflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Deflate#push]] with `Z_FINISH` / `true` param).\n **/\n\n/**\n * Deflate.err -> Number\n *\n * Error code after deflate finished. 0 (Z_OK) on success.\n * You will not need it in real life, because deflate errors\n * are possible only on wrong options or bad `onData` / `onEnd`\n * custom handlers.\n **/\n\n/**\n * Deflate.msg -> String\n *\n * Error message, if [[Deflate.err]] != 0\n **/\n\n\n/**\n * new Deflate(options)\n * - options (Object): zlib deflate options.\n *\n * Creates new deflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `level`\n * - `windowBits`\n * - `memLevel`\n * - `strategy`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw deflate\n * - `gzip` (Boolean) - create gzip wrapper\n * - `header` (Object) - custom header for gzip\n * - `text` (Boolean) - true if compressed data believed to be text\n * - `time` (Number) - modification time, unix timestamp\n * - `os` (Number) - operation system code\n * - `extra` (Array) - array of bytes with extra data (max 65536)\n * - `name` (String) - file name (binary string)\n * - `comment` (String) - comment (binary string)\n * - `hcrc` (Boolean) - true if header crc should be added\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n * , chunk1 = new Uint8Array([1,2,3,4,5,6,7,8,9])\n * , chunk2 = new Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * const deflate = new pako.Deflate({ level: 3});\n *\n * deflate.push(chunk1, false);\n * deflate.push(chunk2, true); // true -> last chunk\n *\n * if (deflate.err) { throw new Error(deflate.err); }\n *\n * console.log(deflate.result);\n * ```\n **/\nfunction Deflate(options) {\n this.options = utils.assign({\n level: Z_DEFAULT_COMPRESSION,\n method: Z_DEFLATED,\n chunkSize: 16384,\n windowBits: 15,\n memLevel: 8,\n strategy: Z_DEFAULT_STRATEGY\n }, options || {});\n\n let opt = this.options;\n\n if (opt.raw && (opt.windowBits > 0)) {\n opt.windowBits = -opt.windowBits;\n }\n\n else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {\n opt.windowBits += 16;\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new ZStream();\n this.strm.avail_out = 0;\n\n let status = zlib_deflate.deflateInit2(\n this.strm,\n opt.level,\n opt.method,\n opt.windowBits,\n opt.memLevel,\n opt.strategy\n );\n\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n\n if (opt.header) {\n zlib_deflate.deflateSetHeader(this.strm, opt.header);\n }\n\n if (opt.dictionary) {\n let dict;\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n // If we need to compress text, change encoding to utf8.\n dict = strings.string2buf(opt.dictionary);\n } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n dict = new Uint8Array(opt.dictionary);\n } else {\n dict = opt.dictionary;\n }\n\n status = zlib_deflate.deflateSetDictionary(this.strm, dict);\n\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n\n this._dict_set = true;\n }\n}\n\n/**\n * Deflate#push(data[, flush_mode]) -> Boolean\n * - data (Uint8Array|ArrayBuffer|String): input data. Strings will be\n * converted to utf8 byte sequence.\n * - flush_mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with\n * new compressed chunks. Returns `true` on success. The last data block must\n * have `flush_mode` Z_FINISH (or `true`). That will flush internal pending\n * buffers and call [[Deflate#onEnd]].\n *\n * On fail call [[Deflate#onEnd]] with error code and return false.\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nDeflate.prototype.push = function (data, flush_mode) {\n const strm = this.strm;\n const chunkSize = this.options.chunkSize;\n let status, _flush_mode;\n\n if (this.ended) { return false; }\n\n if (flush_mode === ~~flush_mode) _flush_mode = flush_mode;\n else _flush_mode = flush_mode === true ? Z_FINISH : Z_NO_FLUSH;\n\n // Convert data if needed\n if (typeof data === 'string') {\n // If we need to compress text, change encoding to utf8.\n strm.input = strings.string2buf(data);\n } else if (toString.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n for (;;) {\n if (strm.avail_out === 0) {\n strm.output = new Uint8Array(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n\n // Make sure avail_out > 6 to avoid repeating markers\n if ((_flush_mode === Z_SYNC_FLUSH || _flush_mode === Z_FULL_FLUSH) && strm.avail_out <= 6) {\n this.onData(strm.output.subarray(0, strm.next_out));\n strm.avail_out = 0;\n continue;\n }\n\n status = zlib_deflate.deflate(strm, _flush_mode);\n\n // Ended => flush and finish\n if (status === Z_STREAM_END) {\n if (strm.next_out > 0) {\n this.onData(strm.output.subarray(0, strm.next_out));\n }\n status = zlib_deflate.deflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return status === Z_OK;\n }\n\n // Flush if out buffer full\n if (strm.avail_out === 0) {\n this.onData(strm.output);\n continue;\n }\n\n // Flush if requested and has data\n if (_flush_mode > 0 && strm.next_out > 0) {\n this.onData(strm.output.subarray(0, strm.next_out));\n strm.avail_out = 0;\n continue;\n }\n\n if (strm.avail_in === 0) break;\n }\n\n return true;\n};\n\n\n/**\n * Deflate#onData(chunk) -> Void\n * - chunk (Uint8Array): output data.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nDeflate.prototype.onData = function (chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Deflate#onEnd(status) -> Void\n * - status (Number): deflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called once after you tell deflate that the input stream is\n * complete (Z_FINISH). By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nDeflate.prototype.onEnd = function (status) {\n // On success - join\n if (status === Z_OK) {\n this.result = utils.flattenChunks(this.chunks);\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * deflate(data[, options]) -> Uint8Array\n * - data (Uint8Array|ArrayBuffer|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * Compress `data` with deflate algorithm and `options`.\n *\n * Supported options are:\n *\n * - level\n * - windowBits\n * - memLevel\n * - strategy\n * - dictionary\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n * const data = new Uint8Array([1,2,3,4,5,6,7,8,9]);\n *\n * console.log(pako.deflate(data));\n * ```\n **/\nfunction deflate(input, options) {\n const deflator = new Deflate(options);\n\n deflator.push(input, true);\n\n // That will never happens, if you don't cheat with options :)\n if (deflator.err) { throw deflator.msg || msg[deflator.err]; }\n\n return deflator.result;\n}\n\n\n/**\n * deflateRaw(data[, options]) -> Uint8Array\n * - data (Uint8Array|ArrayBuffer|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction deflateRaw(input, options) {\n options = options || {};\n options.raw = true;\n return deflate(input, options);\n}\n\n\n/**\n * gzip(data[, options]) -> Uint8Array\n * - data (Uint8Array|ArrayBuffer|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but create gzip wrapper instead of\n * deflate one.\n **/\nfunction gzip(input, options) {\n options = options || {};\n options.gzip = true;\n return deflate(input, options);\n}\n\n\nmodule.exports.Deflate = Deflate;\nmodule.exports.deflate = deflate;\nmodule.exports.deflateRaw = deflateRaw;\nmodule.exports.gzip = gzip;\nmodule.exports.constants = require('./zlib/constants');\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n/* eslint-disable space-unary-ops */\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n//const Z_FILTERED = 1;\n//const Z_HUFFMAN_ONLY = 2;\n//const Z_RLE = 3;\nconst Z_FIXED = 4;\n//const Z_DEFAULT_STRATEGY = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nconst Z_BINARY = 0;\nconst Z_TEXT = 1;\n//const Z_ASCII = 1; // = Z_TEXT\nconst Z_UNKNOWN = 2;\n\n/*============================================================================*/\n\n\nfunction zero(buf) { let len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nconst STORED_BLOCK = 0;\nconst STATIC_TREES = 1;\nconst DYN_TREES = 2;\n/* The three kinds of block type */\n\nconst MIN_MATCH = 3;\nconst MAX_MATCH = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nconst LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nconst LITERALS = 256;\n/* number of literal bytes 0..255 */\n\nconst L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nconst D_CODES = 30;\n/* number of distance codes */\n\nconst BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\n\nconst HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\n\nconst MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nconst Buf_size = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nconst MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nconst END_BLOCK = 256;\n/* end of block literal code */\n\nconst REP_3_6 = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nconst REPZ_3_10 = 17;\n/* repeat a zero length 3-10 times (3 bits of repeat count) */\n\nconst REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nconst extra_lbits = /* extra bits for each length code */\n new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]);\n\nconst extra_dbits = /* extra bits for each distance code */\n new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]);\n\nconst extra_blbits = /* extra bits for each bit length code */\n new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]);\n\nconst bl_order =\n new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nconst DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1\nconst static_ltree = new Array((L_CODES + 2) * 2);\nzero(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nconst static_dtree = new Array(D_CODES * 2);\nzero(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nconst _dist_code = new Array(DIST_CODE_LEN);\nzero(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nconst _length_code = new Array(MAX_MATCH - MIN_MATCH + 1);\nzero(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nconst base_length = new Array(LENGTH_CODES);\nzero(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nconst base_dist = new Array(D_CODES);\nzero(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n this.static_tree = static_tree; /* static tree or NULL */\n this.extra_bits = extra_bits; /* extra bits for each code or NULL */\n this.extra_base = extra_base; /* base index for extra_bits */\n this.elems = elems; /* max number of elements in the tree */\n this.max_length = max_length; /* max bit length for the codes */\n\n // show if `static_tree` has data or dummy - needed for monomorphic objects\n this.has_stree = static_tree && static_tree.length;\n}\n\n\nlet static_l_desc;\nlet static_d_desc;\nlet static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n this.dyn_tree = dyn_tree; /* the dynamic tree */\n this.max_code = 0; /* largest code with non zero frequency */\n this.stat_desc = stat_desc; /* the corresponding static tree */\n}\n\n\n\nconst d_code = (dist) => {\n\n return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n};\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nconst put_short = (s, w) => {\n// put_byte(s, (uch)((w) & 0xff));\n// put_byte(s, (uch)((ush)(w) >> 8));\n s.pending_buf[s.pending++] = (w) & 0xff;\n s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n};\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nconst send_bits = (s, value, length) => {\n\n if (s.bi_valid > (Buf_size - length)) {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n put_short(s, s.bi_buf);\n s.bi_buf = value >> (Buf_size - s.bi_valid);\n s.bi_valid += length - Buf_size;\n } else {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n s.bi_valid += length;\n }\n};\n\n\nconst send_code = (s, c, tree) => {\n\n send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n};\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nconst bi_reverse = (code, len) => {\n\n let res = 0;\n do {\n res |= code & 1;\n code >>>= 1;\n res <<= 1;\n } while (--len > 0);\n return res >>> 1;\n};\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nconst bi_flush = (s) => {\n\n if (s.bi_valid === 16) {\n put_short(s, s.bi_buf);\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n } else if (s.bi_valid >= 8) {\n s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n s.bi_buf >>= 8;\n s.bi_valid -= 8;\n }\n};\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n * above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n * array bl_count contains the frequencies for each bit length.\n * The length opt_len is updated; static_len is also updated if stree is\n * not null.\n */\nconst gen_bitlen = (s, desc) => {\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n\n const tree = desc.dyn_tree;\n const max_code = desc.max_code;\n const stree = desc.stat_desc.static_tree;\n const has_stree = desc.stat_desc.has_stree;\n const extra = desc.stat_desc.extra_bits;\n const base = desc.stat_desc.extra_base;\n const max_length = desc.stat_desc.max_length;\n let h; /* heap index */\n let n, m; /* iterate over the tree elements */\n let bits; /* bit length */\n let xbits; /* extra bits */\n let f; /* frequency */\n let overflow = 0; /* number of elements with bit length too large */\n\n for (bits = 0; bits <= MAX_BITS; bits++) {\n s.bl_count[bits] = 0;\n }\n\n /* In a first pass, compute the optimal bit lengths (which may\n * overflow in the case of the bit length tree).\n */\n tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {\n n = s.heap[h];\n bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n if (bits > max_length) {\n bits = max_length;\n overflow++;\n }\n tree[n * 2 + 1]/*.Len*/ = bits;\n /* We overwrite tree[n].Dad which is no longer needed */\n\n if (n > max_code) { continue; } /* not a leaf node */\n\n s.bl_count[bits]++;\n xbits = 0;\n if (n >= base) {\n xbits = extra[n - base];\n }\n f = tree[n * 2]/*.Freq*/;\n s.opt_len += f * (bits + xbits);\n if (has_stree) {\n s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n }\n }\n if (overflow === 0) { return; }\n\n // Tracev((stderr,\"\\nbit length overflow\\n\"));\n /* This happens for example on obj2 and pic of the Calgary corpus */\n\n /* Find the first bit length which could increase: */\n do {\n bits = max_length - 1;\n while (s.bl_count[bits] === 0) { bits--; }\n s.bl_count[bits]--; /* move one leaf down the tree */\n s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n s.bl_count[max_length]--;\n /* The brother of the overflow item also moves one step up,\n * but this does not affect bl_count[max_length]\n */\n overflow -= 2;\n } while (overflow > 0);\n\n /* Now recompute all bit lengths, scanning in increasing frequency.\n * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n * lengths instead of fixing only the wrong ones. This idea is taken\n * from 'ar' written by Haruhiko Okumura.)\n */\n for (bits = max_length; bits !== 0; bits--) {\n n = s.bl_count[bits];\n while (n !== 0) {\n m = s.heap[--h];\n if (m > max_code) { continue; }\n if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n // Tracev((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n tree[m * 2 + 1]/*.Len*/ = bits;\n }\n n--;\n }\n }\n};\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n * zero code length.\n */\nconst gen_codes = (tree, max_code, bl_count) => {\n// ct_data *tree; /* the tree to decorate */\n// int max_code; /* largest code with non zero frequency */\n// ushf *bl_count; /* number of codes at each bit length */\n\n const next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */\n let code = 0; /* running code value */\n let bits; /* bit index */\n let n; /* code index */\n\n /* The distribution counts are first used to generate the code values\n * without bit reversal.\n */\n for (bits = 1; bits <= MAX_BITS; bits++) {\n code = (code + bl_count[bits - 1]) << 1;\n next_code[bits] = code;\n }\n /* Check that the bit counts in bl_count are consistent. The last code\n * must be all ones.\n */\n //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,\n // \"inconsistent bit counts\");\n //Tracev((stderr,\"\\ngen_codes: max_code %d \", max_code));\n\n for (n = 0; n <= max_code; n++) {\n let len = tree[n * 2 + 1]/*.Len*/;\n if (len === 0) { continue; }\n /* Now reverse the bits */\n tree[n * 2]/*.Code*/ = bi_reverse(next_code[len]++, len);\n\n //Tracecv(tree != static_ltree, (stderr,\"\\nn %3d %c l %2d c %4x (%x) \",\n // n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));\n }\n};\n\n\n/* ===========================================================================\n * Initialize the various 'constant' tables.\n */\nconst tr_static_init = () => {\n\n let n; /* iterates over tree elements */\n let bits; /* bit counter */\n let length; /* length value */\n let code; /* code value */\n let dist; /* distance index */\n const bl_count = new Array(MAX_BITS + 1);\n /* number of codes at each bit length for an optimal tree */\n\n // do check in _tr_init()\n //if (static_init_done) return;\n\n /* For some embedded targets, global variables are not initialized: */\n/*#ifdef NO_INIT_GLOBAL_POINTERS\n static_l_desc.static_tree = static_ltree;\n static_l_desc.extra_bits = extra_lbits;\n static_d_desc.static_tree = static_dtree;\n static_d_desc.extra_bits = extra_dbits;\n static_bl_desc.extra_bits = extra_blbits;\n#endif*/\n\n /* Initialize the mapping length (0..255) -> length code (0..28) */\n length = 0;\n for (code = 0; code < LENGTH_CODES - 1; code++) {\n base_length[code] = length;\n for (n = 0; n < (1 << extra_lbits[code]); n++) {\n _length_code[length++] = code;\n }\n }\n //Assert (length == 256, \"tr_static_init: length != 256\");\n /* Note that the length 255 (match length 258) can be represented\n * in two different ways: code 284 + 5 bits or code 285, so we\n * overwrite length_code[255] to use the best encoding:\n */\n _length_code[length - 1] = code;\n\n /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n dist = 0;\n for (code = 0; code < 16; code++) {\n base_dist[code] = dist;\n for (n = 0; n < (1 << extra_dbits[code]); n++) {\n _dist_code[dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: dist != 256\");\n dist >>= 7; /* from now on, all distances are divided by 128 */\n for (; code < D_CODES; code++) {\n base_dist[code] = dist << 7;\n for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {\n _dist_code[256 + dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n /* Construct the codes of the static literal tree */\n for (bits = 0; bits <= MAX_BITS; bits++) {\n bl_count[bits] = 0;\n }\n\n n = 0;\n while (n <= 143) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n while (n <= 255) {\n static_ltree[n * 2 + 1]/*.Len*/ = 9;\n n++;\n bl_count[9]++;\n }\n while (n <= 279) {\n static_ltree[n * 2 + 1]/*.Len*/ = 7;\n n++;\n bl_count[7]++;\n }\n while (n <= 287) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n /* Codes 286 and 287 do not exist, but we must include them in the\n * tree construction to get a canonical Huffman tree (longest code\n * all ones)\n */\n gen_codes(static_ltree, L_CODES + 1, bl_count);\n\n /* The static distance tree is trivial: */\n for (n = 0; n < D_CODES; n++) {\n static_dtree[n * 2 + 1]/*.Len*/ = 5;\n static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n }\n\n // Now data ready and we can init static trees\n static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);\n static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS);\n static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS);\n\n //static_init_done = true;\n};\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nconst init_block = (s) => {\n\n let n; /* iterates over tree elements */\n\n /* Initialize the trees. */\n for (n = 0; n < L_CODES; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < D_CODES; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }\n\n s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n s.opt_len = s.static_len = 0;\n s.sym_next = s.matches = 0;\n};\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nconst bi_windup = (s) =>\n{\n if (s.bi_valid > 8) {\n put_short(s, s.bi_buf);\n } else if (s.bi_valid > 0) {\n //put_byte(s, (Byte)s->bi_buf);\n s.pending_buf[s.pending++] = s.bi_buf;\n }\n s.bi_buf = 0;\n s.bi_valid = 0;\n};\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nconst smaller = (tree, n, m, depth) => {\n\n const _n2 = n * 2;\n const _m2 = m * 2;\n return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n};\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nconst pqdownheap = (s, tree, k) => {\n// deflate_state *s;\n// ct_data *tree; /* the tree to restore */\n// int k; /* node to move down */\n\n const v = s.heap[k];\n let j = k << 1; /* left son of k */\n while (j <= s.heap_len) {\n /* Set j to the smallest of the two sons: */\n if (j < s.heap_len &&\n smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n j++;\n }\n /* Exit if v is smaller than both sons */\n if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n /* Exchange v with the smallest son */\n s.heap[k] = s.heap[j];\n k = j;\n\n /* And continue down the tree, setting j to the left son of k */\n j <<= 1;\n }\n s.heap[k] = v;\n};\n\n\n// inlined manually\n// const SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nconst compress_block = (s, ltree, dtree) => {\n// deflate_state *s;\n// const ct_data *ltree; /* literal tree */\n// const ct_data *dtree; /* distance tree */\n\n let dist; /* distance of matched string */\n let lc; /* match length or unmatched char (if dist == 0) */\n let sx = 0; /* running index in sym_buf */\n let code; /* the code to send */\n let extra; /* number of extra bits to send */\n\n if (s.sym_next !== 0) {\n do {\n dist = s.pending_buf[s.sym_buf + sx++] & 0xff;\n dist += (s.pending_buf[s.sym_buf + sx++] & 0xff) << 8;\n lc = s.pending_buf[s.sym_buf + sx++];\n if (dist === 0) {\n send_code(s, lc, ltree); /* send a literal byte */\n //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n } else {\n /* Here, lc is the match length - MIN_MATCH */\n code = _length_code[lc];\n send_code(s, code + LITERALS + 1, ltree); /* send the length code */\n extra = extra_lbits[code];\n if (extra !== 0) {\n lc -= base_length[code];\n send_bits(s, lc, extra); /* send the extra length bits */\n }\n dist--; /* dist is now the match distance - 1 */\n code = d_code(dist);\n //Assert (code < D_CODES, \"bad d_code\");\n\n send_code(s, code, dtree); /* send the distance code */\n extra = extra_dbits[code];\n if (extra !== 0) {\n dist -= base_dist[code];\n send_bits(s, dist, extra); /* send the extra distance bits */\n }\n } /* literal or match pair ? */\n\n /* Check that the overlay between pending_buf and sym_buf is ok: */\n //Assert(s->pending < s->lit_bufsize + sx, \"pendingBuf overflow\");\n\n } while (sx < s.sym_next);\n }\n\n send_code(s, END_BLOCK, ltree);\n};\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n * and corresponding code. The length opt_len is updated; static_len is\n * also updated if stree is not null. The field max_code is set.\n */\nconst build_tree = (s, desc) => {\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n\n const tree = desc.dyn_tree;\n const stree = desc.stat_desc.static_tree;\n const has_stree = desc.stat_desc.has_stree;\n const elems = desc.stat_desc.elems;\n let n, m; /* iterate over heap elements */\n let max_code = -1; /* largest code with non zero frequency */\n let node; /* new node being created */\n\n /* Construct the initial heap, with least frequent element in\n * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n * heap[0] is not used.\n */\n s.heap_len = 0;\n s.heap_max = HEAP_SIZE;\n\n for (n = 0; n < elems; n++) {\n if (tree[n * 2]/*.Freq*/ !== 0) {\n s.heap[++s.heap_len] = max_code = n;\n s.depth[n] = 0;\n\n } else {\n tree[n * 2 + 1]/*.Len*/ = 0;\n }\n }\n\n /* The pkzip format requires that at least one distance code exists,\n * and that at least one bit should be sent even if there is only one\n * possible code. So to avoid special checks later on we force at least\n * two codes of non zero frequency.\n */\n while (s.heap_len < 2) {\n node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n tree[node * 2]/*.Freq*/ = 1;\n s.depth[node] = 0;\n s.opt_len--;\n\n if (has_stree) {\n s.static_len -= stree[node * 2 + 1]/*.Len*/;\n }\n /* node is 0 or 1 so it does not have extra bits */\n }\n desc.max_code = max_code;\n\n /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n * establish sub-heaps of increasing lengths:\n */\n for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n /* Construct the Huffman tree by repeatedly combining the least two\n * frequent nodes.\n */\n node = elems; /* next internal node of the tree */\n do {\n //pqremove(s, tree, n); /* n = node of least frequency */\n /*** pqremove ***/\n n = s.heap[1/*SMALLEST*/];\n s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n pqdownheap(s, tree, 1/*SMALLEST*/);\n /***/\n\n m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n s.heap[--s.heap_max] = m;\n\n /* Create a new node father of n and m */\n tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n /* and insert the new node in the heap */\n s.heap[1/*SMALLEST*/] = node++;\n pqdownheap(s, tree, 1/*SMALLEST*/);\n\n } while (s.heap_len >= 2);\n\n s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n /* At this point, the fields freq and dad are set. We can now\n * generate the bit lengths.\n */\n gen_bitlen(s, desc);\n\n /* The field len is now set, we can generate the bit codes */\n gen_codes(tree, max_code, s.bl_count);\n};\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nconst scan_tree = (s, tree, max_code) => {\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n\n let n; /* iterates over all tree elements */\n let prevlen = -1; /* last emitted length */\n let curlen; /* length of current code */\n\n let nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n let count = 0; /* repeat count of the current code */\n let max_count = 7; /* max repeat count */\n let min_count = 4; /* min repeat count */\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n } else if (curlen !== 0) {\n\n if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n } else if (count <= 10) {\n s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n } else {\n s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n }\n\n count = 0;\n prevlen = curlen;\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n};\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nconst send_tree = (s, tree, max_code) => {\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n\n let n; /* iterates over all tree elements */\n let prevlen = -1; /* last emitted length */\n let curlen; /* length of current code */\n\n let nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n let count = 0; /* repeat count of the current code */\n let max_count = 7; /* max repeat count */\n let min_count = 4; /* min repeat count */\n\n /* tree[max_code+1].Len = -1; */ /* guard already set */\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n } else if (curlen !== 0) {\n if (curlen !== prevlen) {\n send_code(s, curlen, s.bl_tree);\n count--;\n }\n //Assert(count >= 3 && count <= 6, \" 3_6?\");\n send_code(s, REP_3_6, s.bl_tree);\n send_bits(s, count - 3, 2);\n\n } else if (count <= 10) {\n send_code(s, REPZ_3_10, s.bl_tree);\n send_bits(s, count - 3, 3);\n\n } else {\n send_code(s, REPZ_11_138, s.bl_tree);\n send_bits(s, count - 11, 7);\n }\n\n count = 0;\n prevlen = curlen;\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n};\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nconst build_bl_tree = (s) => {\n\n let max_blindex; /* index of last bit length code of non zero freq */\n\n /* Determine the bit length frequencies for literal and distance trees */\n scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n /* Build the bit length tree: */\n build_tree(s, s.bl_desc);\n /* opt_len now includes the length of the tree representations, except\n * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n */\n\n /* Determine the number of bit length codes to send. The pkzip format\n * requires that at least 4 bit length codes be sent. (appnote.txt says\n * 3 but the actual value used is 4.)\n */\n for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {\n if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n break;\n }\n }\n /* Update opt_len to include the bit length tree and counts */\n s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n // s->opt_len, s->static_len));\n\n return max_blindex;\n};\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nconst send_all_trees = (s, lcodes, dcodes, blcodes) => {\n// deflate_state *s;\n// int lcodes, dcodes, blcodes; /* number of codes for each tree */\n\n let rank; /* index in bl_order */\n\n //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n // \"too many codes\");\n //Tracev((stderr, \"\\nbl counts: \"));\n send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n send_bits(s, dcodes - 1, 5);\n send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */\n for (rank = 0; rank < blcodes; rank++) {\n //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n }\n //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n};\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n * a) There are no non-portable control characters belonging to the\n * \"block list\" (0..6, 14..25, 28..31).\n * b) There is at least one printable character belonging to the\n * \"allow list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n * \"gray list\" that is ignored in this detection algorithm:\n * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nconst detect_data_type = (s) => {\n /* block_mask is the bit mask of block-listed bytes\n * set bits 0..6, 14..25, and 28..31\n * 0xf3ffc07f = binary 11110011111111111100000001111111\n */\n let block_mask = 0xf3ffc07f;\n let n;\n\n /* Check for non-textual (\"block-listed\") bytes. */\n for (n = 0; n <= 31; n++, block_mask >>>= 1) {\n if ((block_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {\n return Z_BINARY;\n }\n }\n\n /* Check for textual (\"allow-listed\") bytes. */\n if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n for (n = 32; n < LITERALS; n++) {\n if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n }\n\n /* There are no \"block-listed\" or \"allow-listed\" bytes:\n * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n */\n return Z_BINARY;\n};\n\n\nlet static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nconst _tr_init = (s) =>\n{\n\n if (!static_init_done) {\n tr_static_init();\n static_init_done = true;\n }\n\n s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);\n s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);\n s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n /* Initialize the first block of the first file: */\n init_block(s);\n};\n\n\n/* ===========================================================================\n * Send a stored block\n */\nconst _tr_stored_block = (s, buf, stored_len, last) => {\n//DeflateState *s;\n//charf *buf; /* input block */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n\n send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */\n bi_windup(s); /* align on byte boundary */\n put_short(s, stored_len);\n put_short(s, ~stored_len);\n if (stored_len) {\n s.pending_buf.set(s.window.subarray(buf, buf + stored_len), s.pending);\n }\n s.pending += stored_len;\n};\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nconst _tr_align = (s) => {\n send_bits(s, STATIC_TREES << 1, 3);\n send_code(s, END_BLOCK, static_ltree);\n bi_flush(s);\n};\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and write out the encoded block.\n */\nconst _tr_flush_block = (s, buf, stored_len, last) => {\n//DeflateState *s;\n//charf *buf; /* input block, or NULL if too old */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n\n let opt_lenb, static_lenb; /* opt_len and static_len in bytes */\n let max_blindex = 0; /* index of last bit length code of non zero freq */\n\n /* Build the Huffman trees unless a stored block is forced */\n if (s.level > 0) {\n\n /* Check if the file is binary or text */\n if (s.strm.data_type === Z_UNKNOWN) {\n s.strm.data_type = detect_data_type(s);\n }\n\n /* Construct the literal and distance trees */\n build_tree(s, s.l_desc);\n // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n\n build_tree(s, s.d_desc);\n // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n /* At this point, opt_len and static_len are the total bit lengths of\n * the compressed block data, excluding the tree representations.\n */\n\n /* Build the bit length tree for the above two trees, and get the index\n * in bl_order of the last bit length code to send.\n */\n max_blindex = build_bl_tree(s);\n\n /* Determine the best encoding. Compute the block lengths in bytes. */\n opt_lenb = (s.opt_len + 3 + 7) >>> 3;\n static_lenb = (s.static_len + 3 + 7) >>> 3;\n\n // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n // s->sym_next / 3));\n\n if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n } else {\n // Assert(buf != (char*)0, \"lost buf\");\n opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n }\n\n if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {\n /* 4: two words for the lengths */\n\n /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n * Otherwise we can't have processed more than WSIZE input bytes since\n * the last block flush, because compression would have been\n * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n * transform a block into a stored block.\n */\n _tr_stored_block(s, buf, stored_len, last);\n\n } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {\n\n send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n compress_block(s, static_ltree, static_dtree);\n\n } else {\n send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n compress_block(s, s.dyn_ltree, s.dyn_dtree);\n }\n // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n /* The above check is made mod 2^32, for files larger than 512 MB\n * and uLong implemented on 32 bits.\n */\n init_block(s);\n\n if (last) {\n bi_windup(s);\n }\n // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n // s->compressed_len-7*last));\n};\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nconst _tr_tally = (s, dist, lc) => {\n// deflate_state *s;\n// unsigned dist; /* distance of matched string */\n// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */\n\n s.pending_buf[s.sym_buf + s.sym_next++] = dist;\n s.pending_buf[s.sym_buf + s.sym_next++] = dist >> 8;\n s.pending_buf[s.sym_buf + s.sym_next++] = lc;\n if (dist === 0) {\n /* lc is the unmatched char */\n s.dyn_ltree[lc * 2]/*.Freq*/++;\n } else {\n s.matches++;\n /* Here, lc is the match length - MIN_MATCH */\n dist--; /* dist = match distance - 1 */\n //Assert((ush)dist < (ush)MAX_DIST(s) &&\n // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n // (ush)d_code(dist) < (ush)D_CODES, \"_tr_tally: bad match\");\n\n s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++;\n s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n }\n\n return (s.sym_next === s.sym_end);\n};\n\nmodule.exports._tr_init = _tr_init;\nmodule.exports._tr_stored_block = _tr_stored_block;\nmodule.exports._tr_flush_block = _tr_flush_block;\nmodule.exports._tr_tally = _tr_tally;\nmodule.exports._tr_align = _tr_align;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.wavy-separator {\n --mask: radial-gradient(8.99px at 50% calc(100% + 6px), #0000 calc(99% - 1px), #000 calc(101% - 1px) 99%, #0000 101%)\n calc(50% - 12px) calc(50% - 3.5px + 0.5px) / 24px 7px repeat-x,\n radial-gradient(8.99px at 50% -6px, #0000 calc(99% - 1px), #000 calc(101% - 1px) 99%, #0000 101%) 50%\n calc(50% + 3.5px) / 24px 7px repeat-x;\n -webkit-mask: var(--mask);\n mask: var(--mask);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/elements/billboard/billboard.css\"],\"names\":[],\"mappings\":\"AAAA;EACE;;;2CAGyC;EACzC,yBAAyB;EACzB,iBAAiB;AACnB\",\"sourcesContent\":[\".wavy-separator {\\n --mask: radial-gradient(8.99px at 50% calc(100% + 6px), #0000 calc(99% - 1px), #000 calc(101% - 1px) 99%, #0000 101%)\\n calc(50% - 12px) calc(50% - 3.5px + 0.5px) / 24px 7px repeat-x,\\n radial-gradient(8.99px at 50% -6px, #0000 calc(99% - 1px), #000 calc(101% - 1px) 99%, #0000 101%) 50%\\n calc(50% + 3.5px) / 24px 7px repeat-x;\\n -webkit-mask: var(--mask);\\n mask: var(--mask);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n /* next input byte */\n this.input = null; // JS specific, because we have no pointers\n this.next_in = 0;\n /* number of bytes available at input */\n this.avail_in = 0;\n /* total number of input bytes read so far */\n this.total_in = 0;\n /* next output byte should be put there */\n this.output = null; // JS specific, because we have no pointers\n this.next_out = 0;\n /* remaining free space at output */\n this.avail_out = 0;\n /* total number of bytes output so far */\n this.total_out = 0;\n /* last error message, NULL if no error */\n this.msg = ''/*Z_NULL*/;\n /* not visible by applications */\n this.state = null;\n /* best guess about the data type: binary or text */\n this.data_type = 2/*Z_UNKNOWN*/;\n /* adler32 value of the uncompressed data */\n this.adler = 0;\n}\n\nmodule.exports = ZStream;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.sub-menu {\n max-height: 300px;\n }`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/common/selection.menu/sub.menu.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,iBAAiB;EACnB\",\"sourcesContent\":[\".sub-menu {\\n max-height: 300px;\\n }\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n 2: 'need dictionary', /* Z_NEED_DICT 2 */\n 1: 'stream end', /* Z_STREAM_END 1 */\n 0: '', /* Z_OK 0 */\n '-1': 'file error', /* Z_ERRNO (-1) */\n '-2': 'stream error', /* Z_STREAM_ERROR (-2) */\n '-3': 'data error', /* Z_DATA_ERROR (-3) */\n '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */\n '-5': 'buffer error', /* Z_BUF_ERROR (-5) */\n '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n","module.exports = __WEBPACK_EXTERNAL_MODULE__4726__;","'use strict';\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nconst makeTable = () => {\n let c, table = [];\n\n for (var n = 0; n < 256; n++) {\n c = n;\n for (var k = 0; k < 8; k++) {\n c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n table[n] = c;\n }\n\n return table;\n};\n\n// Create table on load. Just 255 signed longs. Not a problem.\nconst crcTable = new Uint32Array(makeTable());\n\n\nconst crc32 = (crc, buf, len, pos) => {\n const t = crcTable;\n const end = pos + len;\n\n crc ^= -1;\n\n for (let i = pos; i < end; i++) {\n crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n }\n\n return (crc ^ (-1)); // >>> 0;\n};\n\n\nmodule.exports = crc32;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","\"use strict\";\n\n/* istanbul ignore next */\nfunction setAttributesWithoutAttributes(styleElement) {\n var nonce = typeof __webpack_nonce__ !== \"undefined\" ? __webpack_nonce__ : null;\n if (nonce) {\n styleElement.setAttribute(\"nonce\", nonce);\n }\n}\nmodule.exports = setAttributesWithoutAttributes;","\"use strict\";\n\nvar stylesInDOM = [];\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n for (var i = 0; i < stylesInDOM.length; i++) {\n if (stylesInDOM[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n return result;\n}\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var indexByIdentifier = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3],\n supports: item[4],\n layer: item[5]\n };\n if (indexByIdentifier !== -1) {\n stylesInDOM[indexByIdentifier].references++;\n stylesInDOM[indexByIdentifier].updater(obj);\n } else {\n var updater = addElementStyle(obj, options);\n options.byIndex = i;\n stylesInDOM.splice(i, 0, {\n identifier: identifier,\n updater: updater,\n references: 1\n });\n }\n identifiers.push(identifier);\n }\n return identifiers;\n}\nfunction addElementStyle(obj, options) {\n var api = options.domAPI(options);\n api.update(obj);\n var updater = function updater(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {\n return;\n }\n api.update(obj = newObj);\n } else {\n api.remove();\n }\n };\n return updater;\n}\nmodule.exports = function (list, options) {\n options = options || {};\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDOM[index].references--;\n }\n var newLastIdentifiers = modulesToDom(newList, options);\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n var _index = getIndexByIdentifier(_identifier);\n if (stylesInDOM[_index].references === 0) {\n stylesInDOM[_index].updater();\n stylesInDOM.splice(_index, 1);\n }\n }\n lastIdentifiers = newLastIdentifiers;\n };\n};","'use strict';\n\nvar m = require('react-dom');\nif (process.env.NODE_ENV === 'production') {\n exports.createRoot = m.createRoot;\n exports.hydrateRoot = m.hydrateRoot;\n} else {\n var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n exports.createRoot = function(c, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.createRoot(c, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n exports.hydrateRoot = function(c, h, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.hydrateRoot(c, h, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n}\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `:root {\n --core-page-header-height: 70px;\n}\n\n.overflow-clip {\n overflow: clip;\n}\n.overflow-x-clip {\n overflow-x: clip;\n}\n.overflow-y-clip {\n overflow-y: clip;\n}\n.stick-to-app-header {\n position: sticky;\n top: var(--banner-height);\n z-index: 50;\n}\n.stick-to-page-header {\n position: sticky;\n top: calc(var(--banner-height) + var(--core-page-header-height));\n z-index: 51;\n}\ninput[type='checkbox'] {\n appearance: none;\n}\n#newron {\n min-height: auto !important;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,+BAA+B;AACjC;;AAEA;EACE,cAAc;AAChB;AACA;EACE,gBAAgB;AAClB;AACA;EACE,gBAAgB;AAClB;AACA;EACE,gBAAgB;EAChB,yBAAyB;EACzB,WAAW;AACb;AACA;EACE,gBAAgB;EAChB,gEAAgE;EAChE,WAAW;AACb;AACA;EACE,gBAAgB;AAClB;AACA;EACE,2BAA2B;AAC7B\",\"sourcesContent\":[\":root {\\n --core-page-header-height: 70px;\\n}\\n\\n.overflow-clip {\\n overflow: clip;\\n}\\n.overflow-x-clip {\\n overflow-x: clip;\\n}\\n.overflow-y-clip {\\n overflow-y: clip;\\n}\\n.stick-to-app-header {\\n position: sticky;\\n top: var(--banner-height);\\n z-index: 50;\\n}\\n.stick-to-page-header {\\n position: sticky;\\n top: calc(var(--banner-height) + var(--core-page-header-height));\\n z-index: 51;\\n}\\ninput[type='checkbox'] {\\n appearance: none;\\n}\\n#newron {\\n min-height: auto !important;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* temporary workaround to fix box-shadow proposed by design team */\n.shadow-focus *:focus {\n box-shadow: none;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/filters/filterGroupContainer.css\"],\"names\":[],\"mappings\":\"AAAA,oEAAoE;AACpE;EACE,gBAAgB;AAClB\",\"sourcesContent\":[\"/* temporary workaround to fix box-shadow proposed by design team */\\n.shadow-focus *:focus {\\n box-shadow: none;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","module.exports = __WEBPACK_EXTERNAL_MODULE__5897__;","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.modal-backdrop {\n z-index: 8000;\n backdrop-filter: blur(5px);\n background: rgba(0, 10, 20, 0.5);\n}\n\n.modal-wrapper {\n z-index: 9000;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/design/modal/Modal.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,aAAa;EACb,0BAA0B;EAC1B,gCAAgC;AAClC;;AAEA;EACE,aAAa;AACf\",\"sourcesContent\":[\".modal-backdrop {\\n z-index: 8000;\\n backdrop-filter: blur(5px);\\n background: rgba(0, 10, 20, 0.5);\\n}\\n\\n.modal-wrapper {\\n z-index: 9000;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","'use strict';\n\nvar axios = require('axios');\nvar pako = require('pako');\n\nexports.AvailableTemplate = void 0;\n(function (AvailableTemplate) {\n AvailableTemplate[\"Excel\"] = \"Excel\";\n AvailableTemplate[\"Powerpoint\"] = \"Powerpoint\";\n AvailableTemplate[\"Image\"] = \"Image\";\n})(exports.AvailableTemplate || (exports.AvailableTemplate = {}));\n\nexports.ColumnType = void 0;\n(function (ColumnType) {\n ColumnType[ColumnType[\"Text\"] = 1] = \"Text\";\n ColumnType[ColumnType[\"Number\"] = 2] = \"Number\";\n ColumnType[ColumnType[\"Currency\"] = 3] = \"Currency\";\n ColumnType[ColumnType[\"Percentage\"] = 4] = \"Percentage\";\n ColumnType[ColumnType[\"PercentagePoint\"] = 5] = \"PercentagePoint\";\n})(exports.ColumnType || (exports.ColumnType = {}));\n\nexports.PowerpointSlideType = void 0;\n(function (PowerpointSlideType) {\n PowerpointSlideType[\"Image\"] = \"image\";\n PowerpointSlideType[\"Table\"] = \"table\";\n PowerpointSlideType[\"Text\"] = \"text\";\n PowerpointSlideType[\"Divider\"] = \"divider\";\n})(exports.PowerpointSlideType || (exports.PowerpointSlideType = {}));\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol */\r\n\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\nexports.RequestCompression = void 0;\n(function (RequestCompression) {\n RequestCompression[RequestCompression[\"None\"] = 0] = \"None\";\n RequestCompression[RequestCompression[\"GZip\"] = 1] = \"GZip\";\n})(exports.RequestCompression || (exports.RequestCompression = {}));\nconst EXPORT_ENDPOINT = '/export';\nconst compressionTransformer = (data, headers) => {\n if (!headers || !data) {\n return data;\n }\n headers['Content-Encoding'] = 'gzip';\n return pako.gzip(data).buffer;\n};\nfunction getCompressionTransformFn() {\n const defaults = axios.defaults.transformRequest;\n if (defaults instanceof Array) {\n return defaults.concat(compressionTransformer);\n }\n else {\n return compressionTransformer;\n }\n}\nfunction exportFile(data, config) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n let headers = config.headers;\n if ('bearerToken' in config) {\n const authHeader = config.bearerToken.match(/Bearer/) ? config.bearerToken : `Bearer ${config.bearerToken}`;\n headers = Object.assign(Object.assign({}, headers), { Authorization: authHeader });\n }\n let axiosConfig = {\n method: 'POST',\n baseURL: config.baseUrl,\n url: EXPORT_ENDPOINT,\n headers,\n data,\n responseType: 'arraybuffer',\n };\n if (config.requestCompression === exports.RequestCompression.GZip) {\n axiosConfig = Object.assign(Object.assign({}, axiosConfig), { transformRequest: getCompressionTransformFn() });\n }\n try {\n const result = yield axios(axiosConfig);\n const disposition = result.headers['content-disposition'];\n const filename = ((_a = disposition === null || disposition === void 0 ? void 0 : disposition.match(/filename=\"(.*)\"/)) === null || _a === void 0 ? void 0 : _a[1]) || data.name;\n return {\n content: result.data,\n filename,\n };\n }\n catch (error) {\n // axios error contains sensitive data, so we have to clean it up before logging it\n if (error.config) {\n delete error.config;\n }\n throw error;\n }\n });\n}\n\nexports.EXPORT_ENDPOINT = EXPORT_ENDPOINT;\nexports.exportFile = exportFile;\n","module.exports = __WEBPACK_EXTERNAL_MODULE__6267__;","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = [];\n\n // return the list of modules as css string\n list.toString = function toString() {\n return this.map(function (item) {\n var content = \"\";\n var needLayer = typeof item[5] !== \"undefined\";\n if (item[4]) {\n content += \"@supports (\".concat(item[4], \") {\");\n }\n if (item[2]) {\n content += \"@media \".concat(item[2], \" {\");\n }\n if (needLayer) {\n content += \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\");\n }\n content += cssWithMappingToString(item);\n if (needLayer) {\n content += \"}\";\n }\n if (item[2]) {\n content += \"}\";\n }\n if (item[4]) {\n content += \"}\";\n }\n return content;\n }).join(\"\");\n };\n\n // import a list of modules into the list\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === \"string\") {\n modules = [[null, modules, undefined]];\n }\n var alreadyImportedModules = {};\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n if (typeof layer !== \"undefined\") {\n if (typeof item[5] === \"undefined\") {\n item[5] = layer;\n } else {\n item[1] = \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\").concat(item[1], \"}\");\n item[5] = layer;\n }\n }\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = \"@media \".concat(item[2], \" {\").concat(item[1], \"}\");\n item[2] = media;\n }\n }\n if (supports) {\n if (!item[4]) {\n item[4] = \"\".concat(supports);\n } else {\n item[1] = \"@supports (\".concat(item[4], \") {\").concat(item[1], \"}\");\n item[4] = supports;\n }\n }\n list.push(item);\n }\n };\n return list;\n};","/*! Axios v1.8.4 Copyright (c) 2025 Matt Zabriskie and contributors */\n'use strict';\n\nfunction bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n};\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val);\n};\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n};\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n };\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n};\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n};\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n};\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n};\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n};\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n};\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[Symbol.iterator];\n\n const iterator = generator.call(obj);\n\n let result;\n\n while ((result = iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n};\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n};\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n};\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n};\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n };\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n};\n\nconst noop = () => {};\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n};\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n };\n\n return visit(obj, 0);\n};\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported ? ((token, callbacks) => {\n _global.addEventListener(\"message\", ({source, data}) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n }, false);\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n }\n })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n typeof setImmediate === 'function',\n isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\nvar utils$1 = {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap\n};\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n if (response) {\n this.response = response;\n this.status = response.status ? response.status : null;\n }\n}\n\nutils$1.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils$1.toJSONObject(this.config),\n code: this.code,\n status: this.status\n };\n }\n});\n\nconst prototype$1 = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype$1, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype$1);\n\n utils$1.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.cause = error;\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\n// eslint-disable-next-line strict\nvar httpAdapter = null;\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils$1.isPlainObject(thing) || utils$1.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils$1.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils$1.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils$1.toFlatObject(utils$1, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils$1.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils$1.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils$1.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils$1.isSpecCompliantForm(formData);\n\n if (!utils$1.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils$1.isDate(value)) {\n return value.toISOString();\n }\n\n if (!useBlob && utils$1.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils$1.isArrayBuffer(value) || utils$1.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array<String|Number>} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils$1.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils$1.isArray(value) && isFlatArray(value)) ||\n ((utils$1.isFileList(value) || utils$1.endsWith(key, '[]')) && (arr = utils$1.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils$1.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils$1.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils$1.forEach(value, function each(el, key) {\n const result = !(utils$1.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils$1.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils$1.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode$1(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode$1);\n } : encode$1;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nfunction buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n if (utils$1.isFunction(options)) {\n options = {\n serialize: options\n };\n } \n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils$1.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils$1.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nvar InterceptorManager$1 = InterceptorManager;\n\nvar transitionalDefaults = {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n\nvar URLSearchParams$1 = typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n\nvar FormData$1 = typeof FormData !== 'undefined' ? FormData : null;\n\nvar Blob$1 = typeof Blob !== 'undefined' ? Blob : null;\n\nvar platform$1 = {\n isBrowser: true,\n classes: {\n URLSearchParams: URLSearchParams$1,\n FormData: FormData$1,\n Blob: Blob$1\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n\nconst hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nvar utils = /*#__PURE__*/Object.freeze({\n __proto__: null,\n hasBrowserEnv: hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv: hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv: hasStandardBrowserEnv,\n navigator: _navigator,\n origin: origin\n});\n\nvar platform = {\n ...utils,\n ...platform$1\n};\n\nfunction toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils$1.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils$1.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils$1.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils$1.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils$1.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils$1.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils$1.isFormData(formData) && utils$1.isFunction(formData.entries)) {\n const obj = {};\n\n utils$1.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils$1.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils$1.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils$1.isObject(data);\n\n if (isObjectPayload && utils$1.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils$1.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils$1.isArrayBuffer(data) ||\n utils$1.isBuffer(data) ||\n utils$1.isStream(data) ||\n utils$1.isFile(data) ||\n utils$1.isBlob(data) ||\n utils$1.isReadableStream(data)\n ) {\n return data;\n }\n if (utils$1.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils$1.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils$1.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils$1.isResponse(data) || utils$1.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils$1.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils$1.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nvar defaults$1 = defaults;\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils$1.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nvar parseHeaders = rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils$1.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils$1.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils$1.isString(value)) return;\n\n if (utils$1.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils$1.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils$1.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils$1.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils$1.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils$1.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite);\n } else if(utils$1.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils$1.isHeaders(header)) {\n for (const [key, value] of header.entries()) {\n setHeader(value, key, rewrite);\n }\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils$1.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils$1.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils$1.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils$1.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils$1.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils$1.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils$1.forEach(this, (value, header) => {\n const key = utils$1.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils$1.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils$1.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils$1.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils$1.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils$1.freezeMethods(AxiosHeaders);\n\nvar AxiosHeaders$1 = AxiosHeaders;\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nfunction transformData(fns, response) {\n const config = this || defaults$1;\n const context = response || config;\n const headers = AxiosHeaders$1.from(context.headers);\n let data = context.data;\n\n utils$1.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n\nfunction isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils$1.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nfunction settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n\nfunction parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\n/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn.apply(null, args);\n };\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs);\n }, threshold - passed);\n }\n }\n };\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nconst progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n};\n\nconst progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n};\n\nconst asyncDecorator = (fn) => (...args) => utils$1.asap(() => fn(...args));\n\nvar isURLSameOrigin = platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n url = new URL(url, platform.origin);\n\n return (\n origin.protocol === url.protocol &&\n origin.host === url.host &&\n (isMSIE || origin.port === url.port)\n );\n})(\n new URL(platform.origin),\n platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\n\nvar cookies = platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n\n utils$1.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n utils$1.isString(path) && cookie.push('path=' + path);\n\n utils$1.isString(domain) && cookie.push('domain=' + domain);\n\n secure === true && cookie.push('secure');\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nfunction isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nfunction combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nfunction buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n let isRelativeUrl = !isAbsoluteURL(requestedURL);\n if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders$1 ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nfunction mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, prop, caseless) {\n if (utils$1.isPlainObject(target) && utils$1.isPlainObject(source)) {\n return utils$1.merge.call({caseless}, target, source);\n } else if (utils$1.isPlainObject(source)) {\n return utils$1.merge({}, source);\n } else if (utils$1.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, prop , caseless) {\n if (!utils$1.isUndefined(b)) {\n return getMergedValue(a, b, prop , caseless);\n } else if (!utils$1.isUndefined(a)) {\n return getMergedValue(undefined, a, prop , caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils$1.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils$1.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils$1.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, true)\n };\n\n utils$1.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils$1.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n\nvar resolveConfig = (config) => {\n const newConfig = mergeConfig({}, config);\n\n let {data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth} = newConfig;\n\n newConfig.headers = headers = AxiosHeaders$1.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n let contentType;\n\n if (utils$1.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // Let the browser set it\n } else if ((contentType = headers.getContentType()) !== false) {\n // fix semicolon duplication issue for ReactNative FormData implementation\n const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n headers.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n }\n }\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils$1.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n};\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nvar xhrAdapter = isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders$1.from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders$1.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils$1.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils$1.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n};\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n };\n\n let timer = timeout && setTimeout(() => {\n timer = null;\n onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT));\n }, timeout);\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n };\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => utils$1.asap(unsubscribe);\n\n return signal;\n }\n};\n\nvar composeSignals$1 = composeSignals;\n\nconst streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n};\n\nconst readBytes = async function* (iterable, chunkSize) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n};\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n};\n\nconst trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n };\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n};\n\nconst isFetchSupported = typeof fetch === 'function' && typeof Request === 'function' && typeof Response === 'function';\nconst isReadableStreamSupported = isFetchSupported && typeof ReadableStream === 'function';\n\n// used only inside the fetch adapter\nconst encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Response(str).arrayBuffer())\n);\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n};\n\nconst supportsRequestStream = isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n});\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst supportsResponseStream = isReadableStreamSupported &&\n test(() => utils$1.isReadableStream(new Response('').body));\n\n\nconst resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n};\n\nisFetchSupported && (((res) => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = utils$1.isFunction(res[type]) ? (res) => res[type]() :\n (_, config) => {\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n });\n });\n})(new Response));\n\nconst getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if(utils$1.isBlob(body)) {\n return body.size;\n }\n\n if(utils$1.isSpecCompliantForm(body)) {\n const _request = new Request(platform.origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if(utils$1.isArrayBufferView(body) || utils$1.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if(utils$1.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if(utils$1.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n};\n\nconst resolveBodyLength = async (headers, body) => {\n const length = utils$1.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n};\n\nvar fetchAdapter = isFetchSupported && (async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let composedSignal = composeSignals$1([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\n });\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils$1.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader);\n }\n\n if (_request.body) {\n const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!utils$1.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = \"credentials\" in Request.prototype;\n request = new Request(url, {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: isCredentialsSupported ? withCredentials : undefined\n });\n\n let response = await fetch(request);\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils$1.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils$1.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders$1.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n });\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request);\n }\n});\n\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: fetchAdapter\n};\n\nutils$1.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {value});\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {value});\n }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils$1.isFunction(adapter) || adapter === null || adapter === false;\n\nvar adapters = {\n getAdapter: (adapters) => {\n adapters = utils$1.isArray(adapters) ? adapters : [adapters];\n\n const {length} = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n },\n adapters: knownAdapters\n};\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nfunction dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders$1.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults$1.adapter);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders$1.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders$1.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n\nconst VERSION = \"1.8.4\";\n\nconst validators$1 = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators$1[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators$1.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\nvalidators$1.spelling = function spelling(correctSpelling) {\n return (value, opt) => {\n // eslint-disable-next-line no-console\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n return true;\n }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nvar validator = {\n assertOptions,\n validators: validators$1\n};\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager$1(),\n response: new InterceptorManager$1()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy = {};\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack;\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils$1.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n };\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.allowAbsoluteUrls\n if (config.allowAbsoluteUrls !== undefined) ; else if (this.defaults.allowAbsoluteUrls !== undefined) {\n config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n } else {\n config.allowAbsoluteUrls = true;\n }\n\n validator.assertOptions(config, {\n baseUrl: validators.spelling('baseURL'),\n withXsrfToken: validators.spelling('withXSRFToken')\n }, true);\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils$1.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils$1.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders$1.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n i = 0;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils$1.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils$1.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nvar Axios$1 = Axios;\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nvar CancelToken$1 = CancelToken;\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nfunction spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nfunction isAxiosError(payload) {\n return utils$1.isObject(payload) && (payload.isAxiosError === true);\n}\n\nconst HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nvar HttpStatusCode$1 = HttpStatusCode;\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios$1(defaultConfig);\n const instance = bind(Axios$1.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils$1.extend(instance, Axios$1.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils$1.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults$1);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios$1;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken$1;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders$1;\n\naxios.formToJSON = thing => formDataToJSON(utils$1.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode$1;\n\naxios.default = axios;\n\nmodule.exports = axios;\n//# sourceMappingURL=axios.cjs.map\n","module.exports = __WEBPACK_EXTERNAL_MODULE__6556__;","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","'use strict';\n\n\nconst zlib_inflate = require('./zlib/inflate');\nconst utils = require('./utils/common');\nconst strings = require('./utils/strings');\nconst msg = require('./zlib/messages');\nconst ZStream = require('./zlib/zstream');\nconst GZheader = require('./zlib/gzheader');\n\nconst toString = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_NO_FLUSH, Z_FINISH,\n Z_OK, Z_STREAM_END, Z_NEED_DICT, Z_STREAM_ERROR, Z_DATA_ERROR, Z_MEM_ERROR\n} = require('./zlib/constants');\n\n/* ===========================================================================*/\n\n\n/**\n * class Inflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[inflate]]\n * and [[inflateRaw]].\n **/\n\n/* internal\n * inflate.chunks -> Array\n *\n * Chunks of output data, if [[Inflate#onData]] not overridden.\n **/\n\n/**\n * Inflate.result -> Uint8Array|String\n *\n * Uncompressed result, generated by default [[Inflate#onData]]\n * and [[Inflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Inflate#push]] with `Z_FINISH` / `true` param).\n **/\n\n/**\n * Inflate.err -> Number\n *\n * Error code after inflate finished. 0 (Z_OK) on success.\n * Should be checked if broken data possible.\n **/\n\n/**\n * Inflate.msg -> String\n *\n * Error message, if [[Inflate.err]] != 0\n **/\n\n\n/**\n * new Inflate(options)\n * - options (Object): zlib inflate options.\n *\n * Creates new inflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `windowBits`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw inflate\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n * By default, when no options set, autodetect deflate/gzip data format via\n * wrapper header.\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n * const chunk1 = new Uint8Array([1,2,3,4,5,6,7,8,9])\n * const chunk2 = new Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * const inflate = new pako.Inflate({ level: 3});\n *\n * inflate.push(chunk1, false);\n * inflate.push(chunk2, true); // true -> last chunk\n *\n * if (inflate.err) { throw new Error(inflate.err); }\n *\n * console.log(inflate.result);\n * ```\n **/\nfunction Inflate(options) {\n this.options = utils.assign({\n chunkSize: 1024 * 64,\n windowBits: 15,\n to: ''\n }, options || {});\n\n const opt = this.options;\n\n // Force window size for `raw` data, if not set directly,\n // because we have no header for autodetect.\n if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {\n opt.windowBits = -opt.windowBits;\n if (opt.windowBits === 0) { opt.windowBits = -15; }\n }\n\n // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate\n if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&\n !(options && options.windowBits)) {\n opt.windowBits += 32;\n }\n\n // Gzip header has no info about windows size, we can do autodetect only\n // for deflate. So, if window size not set, force it to max when gzip possible\n if ((opt.windowBits > 15) && (opt.windowBits < 48)) {\n // bit 3 (16) -> gzipped data\n // bit 4 (32) -> autodetect gzip/deflate\n if ((opt.windowBits & 15) === 0) {\n opt.windowBits |= 15;\n }\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new ZStream();\n this.strm.avail_out = 0;\n\n let status = zlib_inflate.inflateInit2(\n this.strm,\n opt.windowBits\n );\n\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n\n this.header = new GZheader();\n\n zlib_inflate.inflateGetHeader(this.strm, this.header);\n\n // Setup dictionary\n if (opt.dictionary) {\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n opt.dictionary = strings.string2buf(opt.dictionary);\n } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n opt.dictionary = new Uint8Array(opt.dictionary);\n }\n if (opt.raw) { //In raw mode we need to set the dictionary early\n status = zlib_inflate.inflateSetDictionary(this.strm, opt.dictionary);\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n }\n }\n}\n\n/**\n * Inflate#push(data[, flush_mode]) -> Boolean\n * - data (Uint8Array|ArrayBuffer): input data\n * - flush_mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE\n * flush modes. See constants. Skipped or `false` means Z_NO_FLUSH,\n * `true` means Z_FINISH.\n *\n * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with\n * new output chunks. Returns `true` on success. If end of stream detected,\n * [[Inflate#onEnd]] will be called.\n *\n * `flush_mode` is not needed for normal operation, because end of stream\n * detected automatically. You may try to use it for advanced things, but\n * this functionality was not tested.\n *\n * On fail call [[Inflate#onEnd]] with error code and return false.\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nInflate.prototype.push = function (data, flush_mode) {\n const strm = this.strm;\n const chunkSize = this.options.chunkSize;\n const dictionary = this.options.dictionary;\n let status, _flush_mode, last_avail_out;\n\n if (this.ended) return false;\n\n if (flush_mode === ~~flush_mode) _flush_mode = flush_mode;\n else _flush_mode = flush_mode === true ? Z_FINISH : Z_NO_FLUSH;\n\n // Convert data if needed\n if (toString.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n for (;;) {\n if (strm.avail_out === 0) {\n strm.output = new Uint8Array(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n\n status = zlib_inflate.inflate(strm, _flush_mode);\n\n if (status === Z_NEED_DICT && dictionary) {\n status = zlib_inflate.inflateSetDictionary(strm, dictionary);\n\n if (status === Z_OK) {\n status = zlib_inflate.inflate(strm, _flush_mode);\n } else if (status === Z_DATA_ERROR) {\n // Replace code with more verbose\n status = Z_NEED_DICT;\n }\n }\n\n // Skip snyc markers if more data follows and not raw mode\n while (strm.avail_in > 0 &&\n status === Z_STREAM_END &&\n strm.state.wrap > 0 &&\n data[strm.next_in] !== 0)\n {\n zlib_inflate.inflateReset(strm);\n status = zlib_inflate.inflate(strm, _flush_mode);\n }\n\n switch (status) {\n case Z_STREAM_ERROR:\n case Z_DATA_ERROR:\n case Z_NEED_DICT:\n case Z_MEM_ERROR:\n this.onEnd(status);\n this.ended = true;\n return false;\n }\n\n // Remember real `avail_out` value, because we may patch out buffer content\n // to align utf8 strings boundaries.\n last_avail_out = strm.avail_out;\n\n if (strm.next_out) {\n if (strm.avail_out === 0 || status === Z_STREAM_END) {\n\n if (this.options.to === 'string') {\n\n let next_out_utf8 = strings.utf8border(strm.output, strm.next_out);\n\n let tail = strm.next_out - next_out_utf8;\n let utf8str = strings.buf2string(strm.output, next_out_utf8);\n\n // move tail & realign counters\n strm.next_out = tail;\n strm.avail_out = chunkSize - tail;\n if (tail) strm.output.set(strm.output.subarray(next_out_utf8, next_out_utf8 + tail), 0);\n\n this.onData(utf8str);\n\n } else {\n this.onData(strm.output.length === strm.next_out ? strm.output : strm.output.subarray(0, strm.next_out));\n }\n }\n }\n\n // Must repeat iteration if out buffer is full\n if (status === Z_OK && last_avail_out === 0) continue;\n\n // Finalize if end of stream reached.\n if (status === Z_STREAM_END) {\n status = zlib_inflate.inflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return true;\n }\n\n if (strm.avail_in === 0) break;\n }\n\n return true;\n};\n\n\n/**\n * Inflate#onData(chunk) -> Void\n * - chunk (Uint8Array|String): output data. When string output requested,\n * each chunk will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nInflate.prototype.onData = function (chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Inflate#onEnd(status) -> Void\n * - status (Number): inflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called either after you tell inflate that the input stream is\n * complete (Z_FINISH). By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nInflate.prototype.onEnd = function (status) {\n // On success - join\n if (status === Z_OK) {\n if (this.options.to === 'string') {\n this.result = this.chunks.join('');\n } else {\n this.result = utils.flattenChunks(this.chunks);\n }\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * inflate(data[, options]) -> Uint8Array|String\n * - data (Uint8Array|ArrayBuffer): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Decompress `data` with inflate/ungzip and `options`. Autodetect\n * format via wrapper header by default. That's why we don't provide\n * separate `ungzip` method.\n *\n * Supported options are:\n *\n * - windowBits\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako');\n * const input = pako.deflate(new Uint8Array([1,2,3,4,5,6,7,8,9]));\n * let output;\n *\n * try {\n * output = pako.inflate(input);\n * } catch (err) {\n * console.log(err);\n * }\n * ```\n **/\nfunction inflate(input, options) {\n const inflator = new Inflate(options);\n\n inflator.push(input);\n\n // That will never happens, if you don't cheat with options :)\n if (inflator.err) throw inflator.msg || msg[inflator.err];\n\n return inflator.result;\n}\n\n\n/**\n * inflateRaw(data[, options]) -> Uint8Array|String\n * - data (Uint8Array|ArrayBuffer): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * The same as [[inflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction inflateRaw(input, options) {\n options = options || {};\n options.raw = true;\n return inflate(input, options);\n}\n\n\n/**\n * ungzip(data[, options]) -> Uint8Array|String\n * - data (Uint8Array|ArrayBuffer): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Just shortcut to [[inflate]], because it autodetects format\n * by header.content. Done for convenience.\n **/\n\n\nmodule.exports.Inflate = Inflate;\nmodule.exports.inflate = inflate;\nmodule.exports.inflateRaw = inflateRaw;\nmodule.exports.ungzip = inflate;\nmodule.exports.constants = require('./zlib/constants');\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nconst BAD = 16209; /* got a data error -- remain here until reset */\nconst TYPE = 16191; /* i: waiting for type bits, including last-flag bit */\n\n/*\n Decode literal, length, and distance codes and write out the resulting\n literal and match bytes until either not enough input or output is\n available, an end-of-block is encountered, or a data error is encountered.\n When large enough input and output buffers are supplied to inflate(), for\n example, a 16K input buffer and a 64K output buffer, more than 95% of the\n inflate execution time is spent in this routine.\n\n Entry assumptions:\n\n state.mode === LEN\n strm.avail_in >= 6\n strm.avail_out >= 258\n start >= strm.avail_out\n state.bits < 8\n\n On return, state.mode is one of:\n\n LEN -- ran out of enough output space or enough available input\n TYPE -- reached end of block code, inflate() to interpret next block\n BAD -- error in block data\n\n Notes:\n\n - The maximum input bits used by a length/distance pair is 15 bits for the\n length code, 5 bits for the length extra, 15 bits for the distance code,\n and 13 bits for the distance extra. This totals 48 bits, or six bytes.\n Therefore if strm.avail_in >= 6, then there is enough input to avoid\n checking for available input while decoding.\n\n - The maximum bytes that a single length/distance pair can output is 258\n bytes, which is the maximum length that can be coded. inflate_fast()\n requires strm.avail_out >= 258 for each loop to avoid checking for\n output space.\n */\nmodule.exports = function inflate_fast(strm, start) {\n let _in; /* local strm.input */\n let last; /* have enough input while in < last */\n let _out; /* local strm.output */\n let beg; /* inflate()'s initial strm.output */\n let end; /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n let dmax; /* maximum distance from zlib header */\n//#endif\n let wsize; /* window size or zero if not using window */\n let whave; /* valid bytes in the window */\n let wnext; /* window write index */\n // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n let s_window; /* allocated sliding window, if wsize != 0 */\n let hold; /* local strm.hold */\n let bits; /* local strm.bits */\n let lcode; /* local strm.lencode */\n let dcode; /* local strm.distcode */\n let lmask; /* mask for first level of length codes */\n let dmask; /* mask for first level of distance codes */\n let here; /* retrieved table entry */\n let op; /* code bits, operation, extra bits, or */\n /* window position, window bytes to copy */\n let len; /* match length, unused bytes */\n let dist; /* match distance */\n let from; /* where to copy match from */\n let from_source;\n\n\n let input, output; // JS specific, because we have no pointers\n\n /* copy state to local variables */\n const state = strm.state;\n //here = state.here;\n _in = strm.next_in;\n input = strm.input;\n last = _in + (strm.avail_in - 5);\n _out = strm.next_out;\n output = strm.output;\n beg = _out - (start - strm.avail_out);\n end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n dmax = state.dmax;\n//#endif\n wsize = state.wsize;\n whave = state.whave;\n wnext = state.wnext;\n s_window = state.window;\n hold = state.hold;\n bits = state.bits;\n lcode = state.lencode;\n dcode = state.distcode;\n lmask = (1 << state.lenbits) - 1;\n dmask = (1 << state.distbits) - 1;\n\n\n /* decode literals and length/distances until end-of-block or not enough\n input data or output space */\n\n top:\n do {\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n\n here = lcode[hold & lmask];\n\n dolen:\n for (;;) { // Goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n if (op === 0) { /* literal */\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n output[_out++] = here & 0xffff/*here.val*/;\n }\n else if (op & 16) { /* length base */\n len = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (op) {\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n len += hold & ((1 << op) - 1);\n hold >>>= op;\n bits -= op;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", len));\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n here = dcode[hold & dmask];\n\n dodist:\n for (;;) { // goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n\n if (op & 16) { /* distance base */\n dist = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n }\n dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n if (dist > dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break top;\n }\n//#endif\n hold >>>= op;\n bits -= op;\n //Tracevv((stderr, \"inflate: distance %u\\n\", dist));\n op = _out - beg; /* max distance in output */\n if (dist > op) { /* see if copy from window */\n op = dist - op; /* distance back in window */\n if (op > whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break top;\n }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// if (len <= op - whave) {\n// do {\n// output[_out++] = 0;\n// } while (--len);\n// continue top;\n// }\n// len -= op - whave;\n// do {\n// output[_out++] = 0;\n// } while (--op > whave);\n// if (op === 0) {\n// from = _out - dist;\n// do {\n// output[_out++] = output[from++];\n// } while (--len);\n// continue top;\n// }\n//#endif\n }\n from = 0; // window index\n from_source = s_window;\n if (wnext === 0) { /* very common case */\n from += wsize - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n else if (wnext < op) { /* wrap around window */\n from += wsize + wnext - op;\n op -= wnext;\n if (op < len) { /* some from end of window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = 0;\n if (wnext < len) { /* some from start of window */\n op = wnext;\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n }\n else { /* contiguous in window */\n from += wnext - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n while (len > 2) {\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n len -= 3;\n }\n if (len) {\n output[_out++] = from_source[from++];\n if (len > 1) {\n output[_out++] = from_source[from++];\n }\n }\n }\n else {\n from = _out - dist; /* copy direct from output */\n do { /* minimum length is three */\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n len -= 3;\n } while (len > 2);\n if (len) {\n output[_out++] = output[from++];\n if (len > 1) {\n output[_out++] = output[from++];\n }\n }\n }\n }\n else if ((op & 64) === 0) { /* 2nd level distance code */\n here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dodist;\n }\n else {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n }\n else if ((op & 64) === 0) { /* 2nd level length code */\n here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dolen;\n }\n else if (op & 32) { /* end-of-block */\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.mode = TYPE;\n break top;\n }\n else {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n } while (_in < last && _out < end);\n\n /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n len = bits >> 3;\n _in -= len;\n bits -= len << 3;\n hold &= (1 << bits) - 1;\n\n /* update state and return */\n strm.next_in = _in;\n strm.next_out = _out;\n strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n state.hold = hold;\n state.bits = bits;\n return;\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction GZheader() {\n /* true if compressed data believed to be text */\n this.text = 0;\n /* modification time */\n this.time = 0;\n /* extra flags (not used when writing a gzip file) */\n this.xflags = 0;\n /* operating system */\n this.os = 0;\n /* pointer to extra field or Z_NULL if none */\n this.extra = null;\n /* extra field length (valid if extra != Z_NULL) */\n this.extra_len = 0; // Actually, we don't need it in JS,\n // but leave for few code modifications\n\n //\n // Setup limits is not necessary because in js we should not preallocate memory\n // for inflate use constant limit in 65536 bytes\n //\n\n /* space at extra (only when reading header) */\n // this.extra_max = 0;\n /* pointer to zero-terminated file name or Z_NULL */\n this.name = '';\n /* space at name (only when reading header) */\n // this.name_max = 0;\n /* pointer to zero-terminated comment or Z_NULL */\n this.comment = '';\n /* space at comment (only when reading header) */\n // this.comm_max = 0;\n /* true if there was or will be a header crc */\n this.hcrc = 0;\n /* true when done reading gzip header (not used when writing a gzip file) */\n this.done = false;\n}\n\nmodule.exports = GZheader;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, ``, \"\",{\"version\":3,\"sources\":[],\"names\":[],\"mappings\":\"\",\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\"use strict\";\n\nvar memo = {};\n\n/* istanbul ignore next */\nfunction getTarget(target) {\n if (typeof memo[target] === \"undefined\") {\n var styleTarget = document.querySelector(target);\n\n // Special case to return head of iframe instead of iframe itself\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n memo[target] = styleTarget;\n }\n return memo[target];\n}\n\n/* istanbul ignore next */\nfunction insertBySelector(insert, style) {\n var target = getTarget(insert);\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n target.appendChild(style);\n}\nmodule.exports = insertBySelector;","\"use strict\";\n\n/* istanbul ignore next */\nfunction apply(styleElement, options, obj) {\n var css = \"\";\n if (obj.supports) {\n css += \"@supports (\".concat(obj.supports, \") {\");\n }\n if (obj.media) {\n css += \"@media \".concat(obj.media, \" {\");\n }\n var needLayer = typeof obj.layer !== \"undefined\";\n if (needLayer) {\n css += \"@layer\".concat(obj.layer.length > 0 ? \" \".concat(obj.layer) : \"\", \" {\");\n }\n css += obj.css;\n if (needLayer) {\n css += \"}\";\n }\n if (obj.media) {\n css += \"}\";\n }\n if (obj.supports) {\n css += \"}\";\n }\n var sourceMap = obj.sourceMap;\n if (sourceMap && typeof btoa !== \"undefined\") {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n }\n\n // For old IE\n /* istanbul ignore if */\n options.styleTagTransform(css, styleElement, options.options);\n}\nfunction removeStyleElement(styleElement) {\n // istanbul ignore if\n if (styleElement.parentNode === null) {\n return false;\n }\n styleElement.parentNode.removeChild(styleElement);\n}\n\n/* istanbul ignore next */\nfunction domAPI(options) {\n if (typeof document === \"undefined\") {\n return {\n update: function update() {},\n remove: function remove() {}\n };\n }\n var styleElement = options.insertStyleElement(options);\n return {\n update: function update(obj) {\n apply(styleElement, options, obj);\n },\n remove: function remove() {\n removeStyleElement(styleElement);\n }\n };\n}\nmodule.exports = domAPI;","module.exports = __WEBPACK_EXTERNAL_MODULE__7936__;","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parse = parse;\nexports.serialize = serialize;\n/**\n * RegExp to match cookie-name in RFC 6265 sec 4.1.1\n * This refers out to the obsoleted definition of token in RFC 2616 sec 2.2\n * which has been replaced by the token definition in RFC 7230 appendix B.\n *\n * cookie-name = token\n * token = 1*tchar\n * tchar = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" /\n * \"*\" / \"+\" / \"-\" / \".\" / \"^\" / \"_\" /\n * \"`\" / \"|\" / \"~\" / DIGIT / ALPHA\n *\n * Note: Allowing more characters - https://github.com/jshttp/cookie/issues/191\n * Allow same range as cookie value, except `=`, which delimits end of name.\n */\nconst cookieNameRegExp = /^[\\u0021-\\u003A\\u003C\\u003E-\\u007E]+$/;\n/**\n * RegExp to match cookie-value in RFC 6265 sec 4.1.1\n *\n * cookie-value = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE )\n * cookie-octet = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E\n * ; US-ASCII characters excluding CTLs,\n * ; whitespace DQUOTE, comma, semicolon,\n * ; and backslash\n *\n * Allowing more characters: https://github.com/jshttp/cookie/issues/191\n * Comma, backslash, and DQUOTE are not part of the parsing algorithm.\n */\nconst cookieValueRegExp = /^[\\u0021-\\u003A\\u003C-\\u007E]*$/;\n/**\n * RegExp to match domain-value in RFC 6265 sec 4.1.1\n *\n * domain-value = <subdomain>\n * ; defined in [RFC1034], Section 3.5, as\n * ; enhanced by [RFC1123], Section 2.1\n * <subdomain> = <label> | <subdomain> \".\" <label>\n * <label> = <let-dig> [ [ <ldh-str> ] <let-dig> ]\n * Labels must be 63 characters or less.\n * 'let-dig' not 'letter' in the first char, per RFC1123\n * <ldh-str> = <let-dig-hyp> | <let-dig-hyp> <ldh-str>\n * <let-dig-hyp> = <let-dig> | \"-\"\n * <let-dig> = <letter> | <digit>\n * <letter> = any one of the 52 alphabetic characters A through Z in\n * upper case and a through z in lower case\n * <digit> = any one of the ten digits 0 through 9\n *\n * Keep support for leading dot: https://github.com/jshttp/cookie/issues/173\n *\n * > (Note that a leading %x2E (\".\"), if present, is ignored even though that\n * character is not permitted, but a trailing %x2E (\".\"), if present, will\n * cause the user agent to ignore the attribute.)\n */\nconst domainValueRegExp = /^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i;\n/**\n * RegExp to match path-value in RFC 6265 sec 4.1.1\n *\n * path-value = <any CHAR except CTLs or \";\">\n * CHAR = %x01-7F\n * ; defined in RFC 5234 appendix B.1\n */\nconst pathValueRegExp = /^[\\u0020-\\u003A\\u003D-\\u007E]*$/;\nconst __toString = Object.prototype.toString;\nconst NullObject = /* @__PURE__ */ (() => {\n const C = function () { };\n C.prototype = Object.create(null);\n return C;\n})();\n/**\n * Parse a cookie header.\n *\n * Parse the given cookie header string into an object\n * The object has the various cookies as keys(names) => values\n */\nfunction parse(str, options) {\n const obj = new NullObject();\n const len = str.length;\n // RFC 6265 sec 4.1.1, RFC 2616 2.2 defines a cookie name consists of one char minimum, plus '='.\n if (len < 2)\n return obj;\n const dec = options?.decode || decode;\n let index = 0;\n do {\n const eqIdx = str.indexOf(\"=\", index);\n if (eqIdx === -1)\n break; // No more cookie pairs.\n const colonIdx = str.indexOf(\";\", index);\n const endIdx = colonIdx === -1 ? len : colonIdx;\n if (eqIdx > endIdx) {\n // backtrack on prior semicolon\n index = str.lastIndexOf(\";\", eqIdx - 1) + 1;\n continue;\n }\n const keyStartIdx = startIndex(str, index, eqIdx);\n const keyEndIdx = endIndex(str, eqIdx, keyStartIdx);\n const key = str.slice(keyStartIdx, keyEndIdx);\n // only assign once\n if (obj[key] === undefined) {\n let valStartIdx = startIndex(str, eqIdx + 1, endIdx);\n let valEndIdx = endIndex(str, endIdx, valStartIdx);\n const value = dec(str.slice(valStartIdx, valEndIdx));\n obj[key] = value;\n }\n index = endIdx + 1;\n } while (index < len);\n return obj;\n}\nfunction startIndex(str, index, max) {\n do {\n const code = str.charCodeAt(index);\n if (code !== 0x20 /* */ && code !== 0x09 /* \\t */)\n return index;\n } while (++index < max);\n return max;\n}\nfunction endIndex(str, index, min) {\n while (index > min) {\n const code = str.charCodeAt(--index);\n if (code !== 0x20 /* */ && code !== 0x09 /* \\t */)\n return index + 1;\n }\n return min;\n}\n/**\n * Serialize data into a cookie header.\n *\n * Serialize a name value pair into a cookie string suitable for\n * http headers. An optional options object specifies cookie parameters.\n *\n * serialize('foo', 'bar', { httpOnly: true })\n * => \"foo=bar; httpOnly\"\n */\nfunction serialize(name, val, options) {\n const enc = options?.encode || encodeURIComponent;\n if (!cookieNameRegExp.test(name)) {\n throw new TypeError(`argument name is invalid: ${name}`);\n }\n const value = enc(val);\n if (!cookieValueRegExp.test(value)) {\n throw new TypeError(`argument val is invalid: ${val}`);\n }\n let str = name + \"=\" + value;\n if (!options)\n return str;\n if (options.maxAge !== undefined) {\n if (!Number.isInteger(options.maxAge)) {\n throw new TypeError(`option maxAge is invalid: ${options.maxAge}`);\n }\n str += \"; Max-Age=\" + options.maxAge;\n }\n if (options.domain) {\n if (!domainValueRegExp.test(options.domain)) {\n throw new TypeError(`option domain is invalid: ${options.domain}`);\n }\n str += \"; Domain=\" + options.domain;\n }\n if (options.path) {\n if (!pathValueRegExp.test(options.path)) {\n throw new TypeError(`option path is invalid: ${options.path}`);\n }\n str += \"; Path=\" + options.path;\n }\n if (options.expires) {\n if (!isDate(options.expires) ||\n !Number.isFinite(options.expires.valueOf())) {\n throw new TypeError(`option expires is invalid: ${options.expires}`);\n }\n str += \"; Expires=\" + options.expires.toUTCString();\n }\n if (options.httpOnly) {\n str += \"; HttpOnly\";\n }\n if (options.secure) {\n str += \"; Secure\";\n }\n if (options.partitioned) {\n str += \"; Partitioned\";\n }\n if (options.priority) {\n const priority = typeof options.priority === \"string\"\n ? options.priority.toLowerCase()\n : undefined;\n switch (priority) {\n case \"low\":\n str += \"; Priority=Low\";\n break;\n case \"medium\":\n str += \"; Priority=Medium\";\n break;\n case \"high\":\n str += \"; Priority=High\";\n break;\n default:\n throw new TypeError(`option priority is invalid: ${options.priority}`);\n }\n }\n if (options.sameSite) {\n const sameSite = typeof options.sameSite === \"string\"\n ? options.sameSite.toLowerCase()\n : options.sameSite;\n switch (sameSite) {\n case true:\n case \"strict\":\n str += \"; SameSite=Strict\";\n break;\n case \"lax\":\n str += \"; SameSite=Lax\";\n break;\n case \"none\":\n str += \"; SameSite=None\";\n break;\n default:\n throw new TypeError(`option sameSite is invalid: ${options.sameSite}`);\n }\n }\n return str;\n}\n/**\n * URL-decode string value. Optimized to skip native call when no %.\n */\nfunction decode(str) {\n if (str.indexOf(\"%\") === -1)\n return str;\n try {\n return decodeURIComponent(str);\n }\n catch (e) {\n return str;\n }\n}\n/**\n * Determine if value is a Date.\n */\nfunction isDate(val) {\n return __toString.call(val) === \"[object Date]\";\n}\n//# sourceMappingURL=index.js.map","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst { _tr_init, _tr_stored_block, _tr_flush_block, _tr_tally, _tr_align } = require('./trees');\nconst adler32 = require('./adler32');\nconst crc32 = require('./crc32');\nconst msg = require('./messages');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_NO_FLUSH, Z_PARTIAL_FLUSH, Z_FULL_FLUSH, Z_FINISH, Z_BLOCK,\n Z_OK, Z_STREAM_END, Z_STREAM_ERROR, Z_DATA_ERROR, Z_BUF_ERROR,\n Z_DEFAULT_COMPRESSION,\n Z_FILTERED, Z_HUFFMAN_ONLY, Z_RLE, Z_FIXED, Z_DEFAULT_STRATEGY,\n Z_UNKNOWN,\n Z_DEFLATED\n} = require('./constants');\n\n/*============================================================================*/\n\n\nconst MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nconst MAX_WBITS = 15;\n/* 32K LZ77 window */\nconst DEF_MEM_LEVEL = 8;\n\n\nconst LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nconst LITERALS = 256;\n/* number of literal bytes 0..255 */\nconst L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nconst D_CODES = 30;\n/* number of distance codes */\nconst BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\nconst HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\nconst MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nconst MIN_MATCH = 3;\nconst MAX_MATCH = 258;\nconst MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nconst PRESET_DICT = 0x20;\n\nconst INIT_STATE = 42; /* zlib header -> BUSY_STATE */\n//#ifdef GZIP\nconst GZIP_STATE = 57; /* gzip header -> BUSY_STATE | EXTRA_STATE */\n//#endif\nconst EXTRA_STATE = 69; /* gzip extra block -> NAME_STATE */\nconst NAME_STATE = 73; /* gzip file name -> COMMENT_STATE */\nconst COMMENT_STATE = 91; /* gzip comment -> HCRC_STATE */\nconst HCRC_STATE = 103; /* gzip header CRC -> BUSY_STATE */\nconst BUSY_STATE = 113; /* deflate -> FINISH_STATE */\nconst FINISH_STATE = 666; /* stream complete */\n\nconst BS_NEED_MORE = 1; /* block not completed, need more input or more output */\nconst BS_BLOCK_DONE = 2; /* block flush performed */\nconst BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nconst BS_FINISH_DONE = 4; /* finish done, accept no more input or output */\n\nconst OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nconst err = (strm, errorCode) => {\n strm.msg = msg[errorCode];\n return errorCode;\n};\n\nconst rank = (f) => {\n return ((f) * 2) - ((f) > 4 ? 9 : 0);\n};\n\nconst zero = (buf) => {\n let len = buf.length; while (--len >= 0) { buf[len] = 0; }\n};\n\n/* ===========================================================================\n * Slide the hash table when sliding the window down (could be avoided with 32\n * bit values at the expense of memory usage). We slide even when level == 0 to\n * keep the hash table consistent if we switch back to level > 0 later.\n */\nconst slide_hash = (s) => {\n let n, m;\n let p;\n let wsize = s.w_size;\n\n n = s.hash_size;\n p = n;\n do {\n m = s.head[--p];\n s.head[p] = (m >= wsize ? m - wsize : 0);\n } while (--n);\n n = wsize;\n//#ifndef FASTEST\n p = n;\n do {\n m = s.prev[--p];\n s.prev[p] = (m >= wsize ? m - wsize : 0);\n /* If n is not on any hash chain, prev[n] is garbage but\n * its value will never be used.\n */\n } while (--n);\n//#endif\n};\n\n/* eslint-disable new-cap */\nlet HASH_ZLIB = (s, prev, data) => ((prev << s.hash_shift) ^ data) & s.hash_mask;\n// This hash causes less collisions, https://github.com/nodeca/pako/issues/135\n// But breaks binary compatibility\n//let HASH_FAST = (s, prev, data) => ((prev << 8) + (prev >> 8) + (data << 4)) & s.hash_mask;\nlet HASH = HASH_ZLIB;\n\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output, except for\n * some deflate_stored() output, goes through this function so some\n * applications may wish to modify it to avoid allocating a large\n * strm->next_out buffer and copying into it. (See also read_buf()).\n */\nconst flush_pending = (strm) => {\n const s = strm.state;\n\n //_tr_flush_bits(s);\n let len = s.pending;\n if (len > strm.avail_out) {\n len = strm.avail_out;\n }\n if (len === 0) { return; }\n\n strm.output.set(s.pending_buf.subarray(s.pending_out, s.pending_out + len), strm.next_out);\n strm.next_out += len;\n s.pending_out += len;\n strm.total_out += len;\n strm.avail_out -= len;\n s.pending -= len;\n if (s.pending === 0) {\n s.pending_out = 0;\n }\n};\n\n\nconst flush_block_only = (s, last) => {\n _tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n s.block_start = s.strstart;\n flush_pending(s.strm);\n};\n\n\nconst put_byte = (s, b) => {\n s.pending_buf[s.pending++] = b;\n};\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nconst putShortMSB = (s, b) => {\n\n // put_byte(s, (Byte)(b >> 8));\n// put_byte(s, (Byte)(b & 0xff));\n s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n s.pending_buf[s.pending++] = b & 0xff;\n};\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read. All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nconst read_buf = (strm, buf, start, size) => {\n\n let len = strm.avail_in;\n\n if (len > size) { len = size; }\n if (len === 0) { return 0; }\n\n strm.avail_in -= len;\n\n // zmemcpy(buf, strm->next_in, len);\n buf.set(strm.input.subarray(strm.next_in, strm.next_in + len), start);\n if (strm.state.wrap === 1) {\n strm.adler = adler32(strm.adler, buf, len, start);\n }\n\n else if (strm.state.wrap === 2) {\n strm.adler = crc32(strm.adler, buf, len, start);\n }\n\n strm.next_in += len;\n strm.total_in += len;\n\n return len;\n};\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nconst longest_match = (s, cur_match) => {\n\n let chain_length = s.max_chain_length; /* max hash chain length */\n let scan = s.strstart; /* current string */\n let match; /* matched string */\n let len; /* length of current match */\n let best_len = s.prev_length; /* best match length so far */\n let nice_match = s.nice_match; /* stop if match long enough */\n const limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n const _win = s.window; // shortcut\n\n const wmask = s.w_mask;\n const prev = s.prev;\n\n /* Stop when cur_match becomes <= limit. To simplify the code,\n * we prevent matches with the string of window index 0.\n */\n\n const strend = s.strstart + MAX_MATCH;\n let scan_end1 = _win[scan + best_len - 1];\n let scan_end = _win[scan + best_len];\n\n /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n * It is easy to get rid of this optimization if necessary.\n */\n // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n /* Do not waste too much time if we already have a good match: */\n if (s.prev_length >= s.good_match) {\n chain_length >>= 2;\n }\n /* Do not look for matches beyond the end of the input. This is necessary\n * to make deflate deterministic.\n */\n if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n do {\n // Assert(cur_match < s->strstart, \"no future\");\n match = cur_match;\n\n /* Skip to next match if the match length cannot increase\n * or if the match length is less than 2. Note that the checks below\n * for insufficient lookahead only occur occasionally for performance\n * reasons. Therefore uninitialized memory will be accessed, and\n * conditional jumps will be made that depend on those values.\n * However the length of the match is limited to the lookahead, so\n * the output of deflate is not affected by the uninitialized values.\n */\n\n if (_win[match + best_len] !== scan_end ||\n _win[match + best_len - 1] !== scan_end1 ||\n _win[match] !== _win[scan] ||\n _win[++match] !== _win[scan + 1]) {\n continue;\n }\n\n /* The check at best_len-1 can be removed because it will be made\n * again later. (This heuristic is not always a win.)\n * It is not necessary to compare scan[2] and match[2] since they\n * are always equal when the other bytes match, given that\n * the hash keys are equal and that HASH_BITS >= 8.\n */\n scan += 2;\n match++;\n // Assert(*scan == *match, \"match[2]?\");\n\n /* We check for insufficient lookahead only every 8th comparison;\n * the 256th check will be made at strstart+258.\n */\n do {\n /*jshint noempty:false*/\n } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n scan < strend);\n\n // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n len = MAX_MATCH - (strend - scan);\n scan = strend - MAX_MATCH;\n\n if (len > best_len) {\n s.match_start = cur_match;\n best_len = len;\n if (len >= nice_match) {\n break;\n }\n scan_end1 = _win[scan + best_len - 1];\n scan_end = _win[scan + best_len];\n }\n } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n if (best_len <= s.lookahead) {\n return best_len;\n }\n return s.lookahead;\n};\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n * At least one byte has been read, or avail_in == 0; reads are\n * performed for at least two bytes (required for the zip translate_eol\n * option -- not supported here).\n */\nconst fill_window = (s) => {\n\n const _w_size = s.w_size;\n let n, more, str;\n\n //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n do {\n more = s.window_size - s.lookahead - s.strstart;\n\n // JS ints have 32 bit, block below not needed\n /* Deal with !@#$% 64K limit: */\n //if (sizeof(int) <= 2) {\n // if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n // more = wsize;\n //\n // } else if (more == (unsigned)(-1)) {\n // /* Very unlikely, but possible on 16 bit machine if\n // * strstart == 0 && lookahead == 1 (input done a byte at time)\n // */\n // more--;\n // }\n //}\n\n\n /* If the window is almost full and there is insufficient lookahead,\n * move the upper half to the lower one to make room in the upper half.\n */\n if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n s.window.set(s.window.subarray(_w_size, _w_size + _w_size - more), 0);\n s.match_start -= _w_size;\n s.strstart -= _w_size;\n /* we now have strstart >= MAX_DIST */\n s.block_start -= _w_size;\n if (s.insert > s.strstart) {\n s.insert = s.strstart;\n }\n slide_hash(s);\n more += _w_size;\n }\n if (s.strm.avail_in === 0) {\n break;\n }\n\n /* If there was no sliding:\n * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n * more == window_size - lookahead - strstart\n * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n * => more >= window_size - 2*WSIZE + 2\n * In the BIG_MEM or MMAP case (not yet supported),\n * window_size == input_size + MIN_LOOKAHEAD &&\n * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n * Otherwise, window_size == 2*WSIZE so more >= 2.\n * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n */\n //Assert(more >= 2, \"more < 2\");\n n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n s.lookahead += n;\n\n /* Initialize the hash value now that we have some input: */\n if (s.lookahead + s.insert >= MIN_MATCH) {\n str = s.strstart - s.insert;\n s.ins_h = s.window[str];\n\n /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n s.ins_h = HASH(s, s.ins_h, s.window[str + 1]);\n//#if MIN_MATCH != 3\n// Call update_hash() MIN_MATCH-3 more times\n//#endif\n while (s.insert) {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = HASH(s, s.ins_h, s.window[str + MIN_MATCH - 1]);\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = str;\n str++;\n s.insert--;\n if (s.lookahead + s.insert < MIN_MATCH) {\n break;\n }\n }\n }\n /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n * but this is not important since only literal bytes will be emitted.\n */\n\n } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n /* If the WIN_INIT bytes after the end of the current data have never been\n * written, then zero those bytes in order to avoid memory check reports of\n * the use of uninitialized (or uninitialised as Julian writes) bytes by\n * the longest match routines. Update the high water mark for the next\n * time through here. WIN_INIT is set to MAX_MATCH since the longest match\n * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n */\n// if (s.high_water < s.window_size) {\n// const curr = s.strstart + s.lookahead;\n// let init = 0;\n//\n// if (s.high_water < curr) {\n// /* Previous high water mark below current data -- zero WIN_INIT\n// * bytes or up to end of window, whichever is less.\n// */\n// init = s.window_size - curr;\n// if (init > WIN_INIT)\n// init = WIN_INIT;\n// zmemzero(s->window + curr, (unsigned)init);\n// s->high_water = curr + init;\n// }\n// else if (s->high_water < (ulg)curr + WIN_INIT) {\n// /* High water mark at or above current data, but below current data\n// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n// * to end of window, whichever is less.\n// */\n// init = (ulg)curr + WIN_INIT - s->high_water;\n// if (init > s->window_size - s->high_water)\n// init = s->window_size - s->high_water;\n// zmemzero(s->window + s->high_water, (unsigned)init);\n// s->high_water += init;\n// }\n// }\n//\n// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n// \"not enough room for search\");\n};\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n *\n * In case deflateParams() is used to later switch to a non-zero compression\n * level, s->matches (otherwise unused when storing) keeps track of the number\n * of hash table slides to perform. If s->matches is 1, then one hash table\n * slide will be done when switching. If s->matches is 2, the maximum value\n * allowed here, then the hash table will be cleared, since two or more slides\n * is the same as a clear.\n *\n * deflate_stored() is written to minimize the number of times an input byte is\n * copied. It is most efficient with large input and output buffers, which\n * maximizes the opportunites to have a single copy from next_in to next_out.\n */\nconst deflate_stored = (s, flush) => {\n\n /* Smallest worthy block size when not flushing or finishing. By default\n * this is 32K. This can be as small as 507 bytes for memLevel == 1. For\n * large input and output buffers, the stored block size will be larger.\n */\n let min_block = s.pending_buf_size - 5 > s.w_size ? s.w_size : s.pending_buf_size - 5;\n\n /* Copy as many min_block or larger stored blocks directly to next_out as\n * possible. If flushing, copy the remaining available input to next_out as\n * stored blocks, if there is enough space.\n */\n let len, left, have, last = 0;\n let used = s.strm.avail_in;\n do {\n /* Set len to the maximum size block that we can copy directly with the\n * available input data and output space. Set left to how much of that\n * would be copied from what's left in the window.\n */\n len = 65535/* MAX_STORED */; /* maximum deflate stored block length */\n have = (s.bi_valid + 42) >> 3; /* number of header bytes */\n if (s.strm.avail_out < have) { /* need room for header */\n break;\n }\n /* maximum stored block length that will fit in avail_out: */\n have = s.strm.avail_out - have;\n left = s.strstart - s.block_start; /* bytes left in window */\n if (len > left + s.strm.avail_in) {\n len = left + s.strm.avail_in; /* limit len to the input */\n }\n if (len > have) {\n len = have; /* limit len to the output */\n }\n\n /* If the stored block would be less than min_block in length, or if\n * unable to copy all of the available input when flushing, then try\n * copying to the window and the pending buffer instead. Also don't\n * write an empty block when flushing -- deflate() does that.\n */\n if (len < min_block && ((len === 0 && flush !== Z_FINISH) ||\n flush === Z_NO_FLUSH ||\n len !== left + s.strm.avail_in)) {\n break;\n }\n\n /* Make a dummy stored block in pending to get the header bytes,\n * including any pending bits. This also updates the debugging counts.\n */\n last = flush === Z_FINISH && len === left + s.strm.avail_in ? 1 : 0;\n _tr_stored_block(s, 0, 0, last);\n\n /* Replace the lengths in the dummy stored block with len. */\n s.pending_buf[s.pending - 4] = len;\n s.pending_buf[s.pending - 3] = len >> 8;\n s.pending_buf[s.pending - 2] = ~len;\n s.pending_buf[s.pending - 1] = ~len >> 8;\n\n /* Write the stored block header bytes. */\n flush_pending(s.strm);\n\n//#ifdef ZLIB_DEBUG\n// /* Update debugging counts for the data about to be copied. */\n// s->compressed_len += len << 3;\n// s->bits_sent += len << 3;\n//#endif\n\n /* Copy uncompressed bytes from the window to next_out. */\n if (left) {\n if (left > len) {\n left = len;\n }\n //zmemcpy(s->strm->next_out, s->window + s->block_start, left);\n s.strm.output.set(s.window.subarray(s.block_start, s.block_start + left), s.strm.next_out);\n s.strm.next_out += left;\n s.strm.avail_out -= left;\n s.strm.total_out += left;\n s.block_start += left;\n len -= left;\n }\n\n /* Copy uncompressed bytes directly from next_in to next_out, updating\n * the check value.\n */\n if (len) {\n read_buf(s.strm, s.strm.output, s.strm.next_out, len);\n s.strm.next_out += len;\n s.strm.avail_out -= len;\n s.strm.total_out += len;\n }\n } while (last === 0);\n\n /* Update the sliding window with the last s->w_size bytes of the copied\n * data, or append all of the copied data to the existing window if less\n * than s->w_size bytes were copied. Also update the number of bytes to\n * insert in the hash tables, in the event that deflateParams() switches to\n * a non-zero compression level.\n */\n used -= s.strm.avail_in; /* number of input bytes directly copied */\n if (used) {\n /* If any input was used, then no unused input remains in the window,\n * therefore s->block_start == s->strstart.\n */\n if (used >= s.w_size) { /* supplant the previous history */\n s.matches = 2; /* clear hash */\n //zmemcpy(s->window, s->strm->next_in - s->w_size, s->w_size);\n s.window.set(s.strm.input.subarray(s.strm.next_in - s.w_size, s.strm.next_in), 0);\n s.strstart = s.w_size;\n s.insert = s.strstart;\n }\n else {\n if (s.window_size - s.strstart <= used) {\n /* Slide the window down. */\n s.strstart -= s.w_size;\n //zmemcpy(s->window, s->window + s->w_size, s->strstart);\n s.window.set(s.window.subarray(s.w_size, s.w_size + s.strstart), 0);\n if (s.matches < 2) {\n s.matches++; /* add a pending slide_hash() */\n }\n if (s.insert > s.strstart) {\n s.insert = s.strstart;\n }\n }\n //zmemcpy(s->window + s->strstart, s->strm->next_in - used, used);\n s.window.set(s.strm.input.subarray(s.strm.next_in - used, s.strm.next_in), s.strstart);\n s.strstart += used;\n s.insert += used > s.w_size - s.insert ? s.w_size - s.insert : used;\n }\n s.block_start = s.strstart;\n }\n if (s.high_water < s.strstart) {\n s.high_water = s.strstart;\n }\n\n /* If the last block was written to next_out, then done. */\n if (last) {\n return BS_FINISH_DONE;\n }\n\n /* If flushing and all input has been consumed, then done. */\n if (flush !== Z_NO_FLUSH && flush !== Z_FINISH &&\n s.strm.avail_in === 0 && s.strstart === s.block_start) {\n return BS_BLOCK_DONE;\n }\n\n /* Fill the window with any remaining input. */\n have = s.window_size - s.strstart;\n if (s.strm.avail_in > have && s.block_start >= s.w_size) {\n /* Slide the window down. */\n s.block_start -= s.w_size;\n s.strstart -= s.w_size;\n //zmemcpy(s->window, s->window + s->w_size, s->strstart);\n s.window.set(s.window.subarray(s.w_size, s.w_size + s.strstart), 0);\n if (s.matches < 2) {\n s.matches++; /* add a pending slide_hash() */\n }\n have += s.w_size; /* more space now */\n if (s.insert > s.strstart) {\n s.insert = s.strstart;\n }\n }\n if (have > s.strm.avail_in) {\n have = s.strm.avail_in;\n }\n if (have) {\n read_buf(s.strm, s.window, s.strstart, have);\n s.strstart += have;\n s.insert += have > s.w_size - s.insert ? s.w_size - s.insert : have;\n }\n if (s.high_water < s.strstart) {\n s.high_water = s.strstart;\n }\n\n /* There was not enough avail_out to write a complete worthy or flushed\n * stored block to next_out. Write a stored block to pending instead, if we\n * have enough input for a worthy block, or if flushing and there is enough\n * room for the remaining input as a stored block in the pending buffer.\n */\n have = (s.bi_valid + 42) >> 3; /* number of header bytes */\n /* maximum stored block length that will fit in pending: */\n have = s.pending_buf_size - have > 65535/* MAX_STORED */ ? 65535/* MAX_STORED */ : s.pending_buf_size - have;\n min_block = have > s.w_size ? s.w_size : have;\n left = s.strstart - s.block_start;\n if (left >= min_block ||\n ((left || flush === Z_FINISH) && flush !== Z_NO_FLUSH &&\n s.strm.avail_in === 0 && left <= have)) {\n len = left > have ? have : left;\n last = flush === Z_FINISH && s.strm.avail_in === 0 &&\n len === left ? 1 : 0;\n _tr_stored_block(s, s.block_start, len, last);\n s.block_start += len;\n flush_pending(s.strm);\n }\n\n /* We've done all we can with the available input and output. */\n return last ? BS_FINISH_STARTED : BS_NEED_MORE;\n};\n\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nconst deflate_fast = (s, flush) => {\n\n let hash_head; /* head of the hash chain */\n let bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) {\n break; /* flush the current block */\n }\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n * At this point we have always match_length < MIN_MATCH\n */\n if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n }\n if (s.match_length >= MIN_MATCH) {\n // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n /*** _tr_tally_dist(s, s.strstart - s.match_start,\n s.match_length - MIN_MATCH, bflush); ***/\n bflush = _tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n\n /* Insert new strings in the hash table only if the match length\n * is not too large. This saves time but degrades compression.\n */\n if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n s.match_length--; /* string at strstart already in table */\n do {\n s.strstart++;\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n * always MIN_MATCH bytes ahead.\n */\n } while (--s.match_length !== 0);\n s.strstart++;\n } else\n {\n s.strstart += s.match_length;\n s.match_length = 0;\n s.ins_h = s.window[s.strstart];\n /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + 1]);\n\n//#if MIN_MATCH != 3\n// Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n * matter since it will be recomputed at next deflate call.\n */\n }\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.sym_next) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n};\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nconst deflate_slow = (s, flush) => {\n\n let hash_head; /* head of hash chain */\n let bflush; /* set if current block must be flushed */\n\n let max_insert;\n\n /* Process the input block. */\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n */\n s.prev_length = s.match_length;\n s.prev_match = s.match_start;\n s.match_length = MIN_MATCH - 1;\n\n if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n\n if (s.match_length <= 5 &&\n (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n /* If prev_match is also MIN_MATCH, match_start is garbage\n * but we will ignore the current match anyway.\n */\n s.match_length = MIN_MATCH - 1;\n }\n }\n /* If there was a match at the previous step and the current\n * match is not better, output the previous match:\n */\n if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n max_insert = s.strstart + s.lookahead - MIN_MATCH;\n /* Do not insert strings in hash table beyond this. */\n\n //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n s.prev_length - MIN_MATCH, bflush);***/\n bflush = _tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n /* Insert in hash table all strings up to the end of the match.\n * strstart-1 and strstart are already inserted. If there is not\n * enough lookahead, the last two strings are not inserted in\n * the hash table.\n */\n s.lookahead -= s.prev_length - 1;\n s.prev_length -= 2;\n do {\n if (++s.strstart <= max_insert) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n } while (--s.prev_length !== 0);\n s.match_available = 0;\n s.match_length = MIN_MATCH - 1;\n s.strstart++;\n\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n } else if (s.match_available) {\n /* If there was no match at the previous position, output a\n * single literal. If there was a match but the current match\n * is longer, truncate the previous match to a single literal.\n */\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart - 1]);\n\n if (bflush) {\n /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n flush_block_only(s, false);\n /***/\n }\n s.strstart++;\n s.lookahead--;\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n } else {\n /* There is no previous match to compare with, wait for\n * the next step to decide.\n */\n s.match_available = 1;\n s.strstart++;\n s.lookahead--;\n }\n }\n //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n if (s.match_available) {\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart - 1]);\n\n s.match_available = 0;\n }\n s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.sym_next) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_BLOCK_DONE;\n};\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one. Do not maintain a hash table. (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nconst deflate_rle = (s, flush) => {\n\n let bflush; /* set if current block must be flushed */\n let prev; /* byte at distance one to match */\n let scan, strend; /* scan goes up to strend for length of run */\n\n const _win = s.window;\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the longest run, plus one for the unrolled loop.\n */\n if (s.lookahead <= MAX_MATCH) {\n fill_window(s);\n if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* See how many times the previous byte repeats */\n s.match_length = 0;\n if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n scan = s.strstart - 1;\n prev = _win[scan];\n if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n strend = s.strstart + MAX_MATCH;\n do {\n /*jshint noempty:false*/\n } while (prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n scan < strend);\n s.match_length = MAX_MATCH - (strend - scan);\n if (s.match_length > s.lookahead) {\n s.match_length = s.lookahead;\n }\n }\n //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n }\n\n /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n if (s.match_length >= MIN_MATCH) {\n //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n bflush = _tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n s.strstart += s.match_length;\n s.match_length = 0;\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.sym_next) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n};\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nconst deflate_huff = (s, flush) => {\n\n let bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we have a literal to write. */\n if (s.lookahead === 0) {\n fill_window(s);\n if (s.lookahead === 0) {\n if (flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n break; /* flush the current block */\n }\n }\n\n /* Output a literal byte */\n s.match_length = 0;\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart]);\n s.lookahead--;\n s.strstart++;\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.sym_next) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n};\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n\n this.good_length = good_length;\n this.max_lazy = max_lazy;\n this.nice_length = nice_length;\n this.max_chain = max_chain;\n this.func = func;\n}\n\nconst configuration_table = [\n /* good lazy nice chain */\n new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */\n new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */\n new Config(4, 5, 16, 8, deflate_fast), /* 2 */\n new Config(4, 6, 32, 32, deflate_fast), /* 3 */\n\n new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */\n new Config(8, 16, 32, 32, deflate_slow), /* 5 */\n new Config(8, 16, 128, 128, deflate_slow), /* 6 */\n new Config(8, 32, 128, 256, deflate_slow), /* 7 */\n new Config(32, 128, 258, 1024, deflate_slow), /* 8 */\n new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nconst lm_init = (s) => {\n\n s.window_size = 2 * s.w_size;\n\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n\n /* Set the default configuration parameters:\n */\n s.max_lazy_match = configuration_table[s.level].max_lazy;\n s.good_match = configuration_table[s.level].good_length;\n s.nice_match = configuration_table[s.level].nice_length;\n s.max_chain_length = configuration_table[s.level].max_chain;\n\n s.strstart = 0;\n s.block_start = 0;\n s.lookahead = 0;\n s.insert = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n s.ins_h = 0;\n};\n\n\nfunction DeflateState() {\n this.strm = null; /* pointer back to this zlib stream */\n this.status = 0; /* as the name implies */\n this.pending_buf = null; /* output still pending */\n this.pending_buf_size = 0; /* size of pending_buf */\n this.pending_out = 0; /* next pending byte to output to the stream */\n this.pending = 0; /* nb of bytes in the pending buffer */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.gzhead = null; /* gzip header information to write */\n this.gzindex = 0; /* where in extra, name, or comment */\n this.method = Z_DEFLATED; /* can only be DEFLATED */\n this.last_flush = -1; /* value of flush param for previous deflate call */\n\n this.w_size = 0; /* LZ77 window size (32K by default) */\n this.w_bits = 0; /* log2(w_size) (8..16) */\n this.w_mask = 0; /* w_size - 1 */\n\n this.window = null;\n /* Sliding window. Input bytes are read into the second half of the window,\n * and move to the first half later to keep a dictionary of at least wSize\n * bytes. With this organization, matches are limited to a distance of\n * wSize-MAX_MATCH bytes, but this ensures that IO is always\n * performed with a length multiple of the block size.\n */\n\n this.window_size = 0;\n /* Actual size of window: 2*wSize, except when the user input buffer\n * is directly used as sliding window.\n */\n\n this.prev = null;\n /* Link to older string with same hash index. To limit the size of this\n * array to 64K, this link is maintained only for the last 32K strings.\n * An index in this array is thus a window index modulo 32K.\n */\n\n this.head = null; /* Heads of the hash chains or NIL. */\n\n this.ins_h = 0; /* hash index of string to be inserted */\n this.hash_size = 0; /* number of elements in hash table */\n this.hash_bits = 0; /* log2(hash_size) */\n this.hash_mask = 0; /* hash_size-1 */\n\n this.hash_shift = 0;\n /* Number of bits by which ins_h must be shifted at each input\n * step. It must be such that after MIN_MATCH steps, the oldest\n * byte no longer takes part in the hash key, that is:\n * hash_shift * MIN_MATCH >= hash_bits\n */\n\n this.block_start = 0;\n /* Window position at the beginning of the current output block. Gets\n * negative when the window is moved backwards.\n */\n\n this.match_length = 0; /* length of best match */\n this.prev_match = 0; /* previous match */\n this.match_available = 0; /* set if previous match exists */\n this.strstart = 0; /* start of string to insert */\n this.match_start = 0; /* start of matching string */\n this.lookahead = 0; /* number of valid bytes ahead in window */\n\n this.prev_length = 0;\n /* Length of the best match at previous step. Matches not greater than this\n * are discarded. This is used in the lazy match evaluation.\n */\n\n this.max_chain_length = 0;\n /* To speed up deflation, hash chains are never searched beyond this\n * length. A higher limit improves compression ratio but degrades the\n * speed.\n */\n\n this.max_lazy_match = 0;\n /* Attempt to find a better match only when the current match is strictly\n * smaller than this value. This mechanism is used only for compression\n * levels >= 4.\n */\n // That's alias to max_lazy_match, don't use directly\n //this.max_insert_length = 0;\n /* Insert new strings in the hash table only if the match length is not\n * greater than this length. This saves time but degrades compression.\n * max_insert_length is used only for compression levels <= 3.\n */\n\n this.level = 0; /* compression level (1..9) */\n this.strategy = 0; /* favor or force Huffman coding*/\n\n this.good_match = 0;\n /* Use a faster search when the previous match is longer than this */\n\n this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n /* used by trees.c: */\n\n /* Didn't use ct_data typedef below to suppress compiler warning */\n\n // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */\n // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */\n\n // Use flat array of DOUBLE size, with interleaved fata,\n // because JS does not support effective\n this.dyn_ltree = new Uint16Array(HEAP_SIZE * 2);\n this.dyn_dtree = new Uint16Array((2 * D_CODES + 1) * 2);\n this.bl_tree = new Uint16Array((2 * BL_CODES + 1) * 2);\n zero(this.dyn_ltree);\n zero(this.dyn_dtree);\n zero(this.bl_tree);\n\n this.l_desc = null; /* desc. for literal tree */\n this.d_desc = null; /* desc. for distance tree */\n this.bl_desc = null; /* desc. for bit length tree */\n\n //ush bl_count[MAX_BITS+1];\n this.bl_count = new Uint16Array(MAX_BITS + 1);\n /* number of codes at each bit length for an optimal tree */\n\n //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */\n this.heap = new Uint16Array(2 * L_CODES + 1); /* heap used to build the Huffman trees */\n zero(this.heap);\n\n this.heap_len = 0; /* number of elements in the heap */\n this.heap_max = 0; /* element of largest frequency */\n /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n * The same heap array is used to build all trees.\n */\n\n this.depth = new Uint16Array(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n zero(this.depth);\n /* Depth of each subtree used as tie breaker for trees of equal frequency\n */\n\n this.sym_buf = 0; /* buffer for distances and literals/lengths */\n\n this.lit_bufsize = 0;\n /* Size of match buffer for literals/lengths. There are 4 reasons for\n * limiting lit_bufsize to 64K:\n * - frequencies can be kept in 16 bit counters\n * - if compression is not successful for the first block, all input\n * data is still in the window so we can still emit a stored block even\n * when input comes from standard input. (This can also be done for\n * all blocks if lit_bufsize is not greater than 32K.)\n * - if compression is not successful for a file smaller than 64K, we can\n * even emit a stored file instead of a stored block (saving 5 bytes).\n * This is applicable only for zip (not gzip or zlib).\n * - creating new Huffman trees less frequently may not provide fast\n * adaptation to changes in the input data statistics. (Take for\n * example a binary file with poorly compressible code followed by\n * a highly compressible string table.) Smaller buffer sizes give\n * fast adaptation but have of course the overhead of transmitting\n * trees more frequently.\n * - I can't count above 4\n */\n\n this.sym_next = 0; /* running index in sym_buf */\n this.sym_end = 0; /* symbol table full when sym_next reaches this */\n\n this.opt_len = 0; /* bit length of current block with optimal trees */\n this.static_len = 0; /* bit length of current block with static trees */\n this.matches = 0; /* number of string matches in current block */\n this.insert = 0; /* bytes at end of window left to insert */\n\n\n this.bi_buf = 0;\n /* Output buffer. bits are inserted starting at the bottom (least\n * significant bits).\n */\n this.bi_valid = 0;\n /* Number of valid bits in bi_buf. All bits above the last valid bit\n * are always zero.\n */\n\n // Used for window memory init. We safely ignore it for JS. That makes\n // sense only for pointers and memory check tools.\n //this.high_water = 0;\n /* High water mark offset in window for initialized bytes -- bytes above\n * this are set to zero in order to avoid memory check warnings when\n * longest match routines access bytes past the input. This is then\n * updated to the new high water mark.\n */\n}\n\n\n/* =========================================================================\n * Check for a valid deflate stream state. Return 0 if ok, 1 if not.\n */\nconst deflateStateCheck = (strm) => {\n\n if (!strm) {\n return 1;\n }\n const s = strm.state;\n if (!s || s.strm !== strm || (s.status !== INIT_STATE &&\n//#ifdef GZIP\n s.status !== GZIP_STATE &&\n//#endif\n s.status !== EXTRA_STATE &&\n s.status !== NAME_STATE &&\n s.status !== COMMENT_STATE &&\n s.status !== HCRC_STATE &&\n s.status !== BUSY_STATE &&\n s.status !== FINISH_STATE)) {\n return 1;\n }\n return 0;\n};\n\n\nconst deflateResetKeep = (strm) => {\n\n if (deflateStateCheck(strm)) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n strm.total_in = strm.total_out = 0;\n strm.data_type = Z_UNKNOWN;\n\n const s = strm.state;\n s.pending = 0;\n s.pending_out = 0;\n\n if (s.wrap < 0) {\n s.wrap = -s.wrap;\n /* was made negative by deflate(..., Z_FINISH); */\n }\n s.status =\n//#ifdef GZIP\n s.wrap === 2 ? GZIP_STATE :\n//#endif\n s.wrap ? INIT_STATE : BUSY_STATE;\n strm.adler = (s.wrap === 2) ?\n 0 // crc32(0, Z_NULL, 0)\n :\n 1; // adler32(0, Z_NULL, 0)\n s.last_flush = -2;\n _tr_init(s);\n return Z_OK;\n};\n\n\nconst deflateReset = (strm) => {\n\n const ret = deflateResetKeep(strm);\n if (ret === Z_OK) {\n lm_init(strm.state);\n }\n return ret;\n};\n\n\nconst deflateSetHeader = (strm, head) => {\n\n if (deflateStateCheck(strm) || strm.state.wrap !== 2) {\n return Z_STREAM_ERROR;\n }\n strm.state.gzhead = head;\n return Z_OK;\n};\n\n\nconst deflateInit2 = (strm, level, method, windowBits, memLevel, strategy) => {\n\n if (!strm) { // === Z_NULL\n return Z_STREAM_ERROR;\n }\n let wrap = 1;\n\n if (level === Z_DEFAULT_COMPRESSION) {\n level = 6;\n }\n\n if (windowBits < 0) { /* suppress zlib wrapper */\n wrap = 0;\n windowBits = -windowBits;\n }\n\n else if (windowBits > 15) {\n wrap = 2; /* write gzip wrapper instead */\n windowBits -= 16;\n }\n\n\n if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||\n windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n strategy < 0 || strategy > Z_FIXED || (windowBits === 8 && wrap !== 1)) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n\n if (windowBits === 8) {\n windowBits = 9;\n }\n /* until 256-byte window bug fixed */\n\n const s = new DeflateState();\n\n strm.state = s;\n s.strm = strm;\n s.status = INIT_STATE; /* to pass state test in deflateReset() */\n\n s.wrap = wrap;\n s.gzhead = null;\n s.w_bits = windowBits;\n s.w_size = 1 << s.w_bits;\n s.w_mask = s.w_size - 1;\n\n s.hash_bits = memLevel + 7;\n s.hash_size = 1 << s.hash_bits;\n s.hash_mask = s.hash_size - 1;\n s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n s.window = new Uint8Array(s.w_size * 2);\n s.head = new Uint16Array(s.hash_size);\n s.prev = new Uint16Array(s.w_size);\n\n // Don't need mem init magic for JS.\n //s.high_water = 0; /* nothing written to s->window yet */\n\n s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n /* We overlay pending_buf and sym_buf. This works since the average size\n * for length/distance pairs over any compressed block is assured to be 31\n * bits or less.\n *\n * Analysis: The longest fixed codes are a length code of 8 bits plus 5\n * extra bits, for lengths 131 to 257. The longest fixed distance codes are\n * 5 bits plus 13 extra bits, for distances 16385 to 32768. The longest\n * possible fixed-codes length/distance pair is then 31 bits total.\n *\n * sym_buf starts one-fourth of the way into pending_buf. So there are\n * three bytes in sym_buf for every four bytes in pending_buf. Each symbol\n * in sym_buf is three bytes -- two for the distance and one for the\n * literal/length. As each symbol is consumed, the pointer to the next\n * sym_buf value to read moves forward three bytes. From that symbol, up to\n * 31 bits are written to pending_buf. The closest the written pending_buf\n * bits gets to the next sym_buf symbol to read is just before the last\n * code is written. At that time, 31*(n-2) bits have been written, just\n * after 24*(n-2) bits have been consumed from sym_buf. sym_buf starts at\n * 8*n bits into pending_buf. (Note that the symbol buffer fills when n-1\n * symbols are written.) The closest the writing gets to what is unread is\n * then n+14 bits. Here n is lit_bufsize, which is 16384 by default, and\n * can range from 128 to 32768.\n *\n * Therefore, at a minimum, there are 142 bits of space between what is\n * written and what is read in the overlain buffers, so the symbols cannot\n * be overwritten by the compressed data. That space is actually 139 bits,\n * due to the three-bit fixed-code block header.\n *\n * That covers the case where either Z_FIXED is specified, forcing fixed\n * codes, or when the use of fixed codes is chosen, because that choice\n * results in a smaller compressed block than dynamic codes. That latter\n * condition then assures that the above analysis also covers all dynamic\n * blocks. A dynamic-code block will only be chosen to be emitted if it has\n * fewer bits than a fixed-code block would for the same set of symbols.\n * Therefore its average symbol length is assured to be less than 31. So\n * the compressed data for a dynamic block also cannot overwrite the\n * symbols from which it is being constructed.\n */\n\n s.pending_buf_size = s.lit_bufsize * 4;\n s.pending_buf = new Uint8Array(s.pending_buf_size);\n\n // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n //s->sym_buf = s->pending_buf + s->lit_bufsize;\n s.sym_buf = s.lit_bufsize;\n\n //s->sym_end = (s->lit_bufsize - 1) * 3;\n s.sym_end = (s.lit_bufsize - 1) * 3;\n /* We avoid equality with lit_bufsize*3 because of wraparound at 64K\n * on 16 bit machines and because stored blocks are restricted to\n * 64K-1 bytes.\n */\n\n s.level = level;\n s.strategy = strategy;\n s.method = method;\n\n return deflateReset(strm);\n};\n\nconst deflateInit = (strm, level) => {\n\n return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);\n};\n\n\n/* ========================================================================= */\nconst deflate = (strm, flush) => {\n\n if (deflateStateCheck(strm) || flush > Z_BLOCK || flush < 0) {\n return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;\n }\n\n const s = strm.state;\n\n if (!strm.output ||\n (strm.avail_in !== 0 && !strm.input) ||\n (s.status === FINISH_STATE && flush !== Z_FINISH)) {\n return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);\n }\n\n const old_flush = s.last_flush;\n s.last_flush = flush;\n\n /* Flush as much pending output as possible */\n if (s.pending !== 0) {\n flush_pending(strm);\n if (strm.avail_out === 0) {\n /* Since avail_out is 0, deflate will be called again with\n * more output space, but possibly with both pending and\n * avail_in equal to zero. There won't be anything to do,\n * but this is not an error situation so make sure we\n * return OK instead of BUF_ERROR at next call of deflate:\n */\n s.last_flush = -1;\n return Z_OK;\n }\n\n /* Make sure there is something to do and avoid duplicate consecutive\n * flushes. For repeated and useless calls with Z_FINISH, we keep\n * returning Z_STREAM_END instead of Z_BUF_ERROR.\n */\n } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n flush !== Z_FINISH) {\n return err(strm, Z_BUF_ERROR);\n }\n\n /* User must not provide more input after the first FINISH: */\n if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n return err(strm, Z_BUF_ERROR);\n }\n\n /* Write the header */\n if (s.status === INIT_STATE && s.wrap === 0) {\n s.status = BUSY_STATE;\n }\n if (s.status === INIT_STATE) {\n /* zlib header */\n let header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;\n let level_flags = -1;\n\n if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n level_flags = 0;\n } else if (s.level < 6) {\n level_flags = 1;\n } else if (s.level === 6) {\n level_flags = 2;\n } else {\n level_flags = 3;\n }\n header |= (level_flags << 6);\n if (s.strstart !== 0) { header |= PRESET_DICT; }\n header += 31 - (header % 31);\n\n putShortMSB(s, header);\n\n /* Save the adler32 of the preset dictionary: */\n if (s.strstart !== 0) {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n strm.adler = 1; // adler32(0L, Z_NULL, 0);\n s.status = BUSY_STATE;\n\n /* Compression must start with an empty pending buffer */\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK;\n }\n }\n//#ifdef GZIP\n if (s.status === GZIP_STATE) {\n /* gzip header */\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n put_byte(s, 31);\n put_byte(s, 139);\n put_byte(s, 8);\n if (!s.gzhead) { // s->gzhead == Z_NULL\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, OS_CODE);\n s.status = BUSY_STATE;\n\n /* Compression must start with an empty pending buffer */\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK;\n }\n }\n else {\n put_byte(s, (s.gzhead.text ? 1 : 0) +\n (s.gzhead.hcrc ? 2 : 0) +\n (!s.gzhead.extra ? 0 : 4) +\n (!s.gzhead.name ? 0 : 8) +\n (!s.gzhead.comment ? 0 : 16)\n );\n put_byte(s, s.gzhead.time & 0xff);\n put_byte(s, (s.gzhead.time >> 8) & 0xff);\n put_byte(s, (s.gzhead.time >> 16) & 0xff);\n put_byte(s, (s.gzhead.time >> 24) & 0xff);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, s.gzhead.os & 0xff);\n if (s.gzhead.extra && s.gzhead.extra.length) {\n put_byte(s, s.gzhead.extra.length & 0xff);\n put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n }\n if (s.gzhead.hcrc) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);\n }\n s.gzindex = 0;\n s.status = EXTRA_STATE;\n }\n }\n if (s.status === EXTRA_STATE) {\n if (s.gzhead.extra/* != Z_NULL*/) {\n let beg = s.pending; /* start of bytes to update crc */\n let left = (s.gzhead.extra.length & 0xffff) - s.gzindex;\n while (s.pending + left > s.pending_buf_size) {\n let copy = s.pending_buf_size - s.pending;\n // zmemcpy(s.pending_buf + s.pending,\n // s.gzhead.extra + s.gzindex, copy);\n s.pending_buf.set(s.gzhead.extra.subarray(s.gzindex, s.gzindex + copy), s.pending);\n s.pending = s.pending_buf_size;\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n s.gzindex += copy;\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK;\n }\n beg = 0;\n left -= copy;\n }\n // JS specific: s.gzhead.extra may be TypedArray or Array for backward compatibility\n // TypedArray.slice and TypedArray.from don't exist in IE10-IE11\n let gzhead_extra = new Uint8Array(s.gzhead.extra);\n // zmemcpy(s->pending_buf + s->pending,\n // s->gzhead->extra + s->gzindex, left);\n s.pending_buf.set(gzhead_extra.subarray(s.gzindex, s.gzindex + left), s.pending);\n s.pending += left;\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n s.gzindex = 0;\n }\n s.status = NAME_STATE;\n }\n if (s.status === NAME_STATE) {\n if (s.gzhead.name/* != Z_NULL*/) {\n let beg = s.pending; /* start of bytes to update crc */\n let val;\n do {\n if (s.pending === s.pending_buf_size) {\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK;\n }\n beg = 0;\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.name.length) {\n val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n s.gzindex = 0;\n }\n s.status = COMMENT_STATE;\n }\n if (s.status === COMMENT_STATE) {\n if (s.gzhead.comment/* != Z_NULL*/) {\n let beg = s.pending; /* start of bytes to update crc */\n let val;\n do {\n if (s.pending === s.pending_buf_size) {\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK;\n }\n beg = 0;\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.comment.length) {\n val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n }\n s.status = HCRC_STATE;\n }\n if (s.status === HCRC_STATE) {\n if (s.gzhead.hcrc) {\n if (s.pending + 2 > s.pending_buf_size) {\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK;\n }\n }\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n }\n s.status = BUSY_STATE;\n\n /* Compression must start with an empty pending buffer */\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK;\n }\n }\n//#endif\n\n /* Start a new block or continue the current one.\n */\n if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {\n let bstate = s.level === 0 ? deflate_stored(s, flush) :\n s.strategy === Z_HUFFMAN_ONLY ? deflate_huff(s, flush) :\n s.strategy === Z_RLE ? deflate_rle(s, flush) :\n configuration_table[s.level].func(s, flush);\n\n if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n s.status = FINISH_STATE;\n }\n if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n if (strm.avail_out === 0) {\n s.last_flush = -1;\n /* avoid BUF_ERROR next call, see above */\n }\n return Z_OK;\n /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n * of deflate should use the same flush parameter to make sure\n * that the flush is complete. So we don't have to output an\n * empty block here, this will be done at next call. This also\n * ensures that for a very small output buffer, we emit at most\n * one empty block.\n */\n }\n if (bstate === BS_BLOCK_DONE) {\n if (flush === Z_PARTIAL_FLUSH) {\n _tr_align(s);\n }\n else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */\n\n _tr_stored_block(s, 0, 0, false);\n /* For a full flush, this empty block will be recognized\n * as a special marker by inflate_sync().\n */\n if (flush === Z_FULL_FLUSH) {\n /*** CLEAR_HASH(s); ***/ /* forget history */\n zero(s.head); // Fill with NIL (= 0);\n\n if (s.lookahead === 0) {\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n }\n }\n flush_pending(strm);\n if (strm.avail_out === 0) {\n s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n return Z_OK;\n }\n }\n }\n\n if (flush !== Z_FINISH) { return Z_OK; }\n if (s.wrap <= 0) { return Z_STREAM_END; }\n\n /* Write the trailer */\n if (s.wrap === 2) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n put_byte(s, (strm.adler >> 16) & 0xff);\n put_byte(s, (strm.adler >> 24) & 0xff);\n put_byte(s, strm.total_in & 0xff);\n put_byte(s, (strm.total_in >> 8) & 0xff);\n put_byte(s, (strm.total_in >> 16) & 0xff);\n put_byte(s, (strm.total_in >> 24) & 0xff);\n }\n else\n {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n\n flush_pending(strm);\n /* If avail_out is zero, the application will call deflate again\n * to flush the rest.\n */\n if (s.wrap > 0) { s.wrap = -s.wrap; }\n /* write the trailer only once! */\n return s.pending !== 0 ? Z_OK : Z_STREAM_END;\n};\n\n\nconst deflateEnd = (strm) => {\n\n if (deflateStateCheck(strm)) {\n return Z_STREAM_ERROR;\n }\n\n const status = strm.state.status;\n\n strm.state = null;\n\n return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;\n};\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nconst deflateSetDictionary = (strm, dictionary) => {\n\n let dictLength = dictionary.length;\n\n if (deflateStateCheck(strm)) {\n return Z_STREAM_ERROR;\n }\n\n const s = strm.state;\n const wrap = s.wrap;\n\n if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n return Z_STREAM_ERROR;\n }\n\n /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n if (wrap === 1) {\n /* adler32(strm->adler, dictionary, dictLength); */\n strm.adler = adler32(strm.adler, dictionary, dictLength, 0);\n }\n\n s.wrap = 0; /* avoid computing Adler-32 in read_buf */\n\n /* if dictionary would fill window, just replace the history */\n if (dictLength >= s.w_size) {\n if (wrap === 0) { /* already empty otherwise */\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n /* use the tail */\n // dictionary = dictionary.slice(dictLength - s.w_size);\n let tmpDict = new Uint8Array(s.w_size);\n tmpDict.set(dictionary.subarray(dictLength - s.w_size, dictLength), 0);\n dictionary = tmpDict;\n dictLength = s.w_size;\n }\n /* insert dictionary into window and hash */\n const avail = strm.avail_in;\n const next = strm.next_in;\n const input = strm.input;\n strm.avail_in = dictLength;\n strm.next_in = 0;\n strm.input = dictionary;\n fill_window(s);\n while (s.lookahead >= MIN_MATCH) {\n let str = s.strstart;\n let n = s.lookahead - (MIN_MATCH - 1);\n do {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = HASH(s, s.ins_h, s.window[str + MIN_MATCH - 1]);\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n\n s.head[s.ins_h] = str;\n str++;\n } while (--n);\n s.strstart = str;\n s.lookahead = MIN_MATCH - 1;\n fill_window(s);\n }\n s.strstart += s.lookahead;\n s.block_start = s.strstart;\n s.insert = s.lookahead;\n s.lookahead = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n strm.next_in = next;\n strm.input = input;\n strm.avail_in = avail;\n s.wrap = wrap;\n return Z_OK;\n};\n\n\nmodule.exports.deflateInit = deflateInit;\nmodule.exports.deflateInit2 = deflateInit2;\nmodule.exports.deflateReset = deflateReset;\nmodule.exports.deflateResetKeep = deflateResetKeep;\nmodule.exports.deflateSetHeader = deflateSetHeader;\nmodule.exports.deflate = deflate;\nmodule.exports.deflateEnd = deflateEnd;\nmodule.exports.deflateSetDictionary = deflateSetDictionary;\nmodule.exports.deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nmodule.exports.deflateBound = deflateBound;\nmodule.exports.deflateCopy = deflateCopy;\nmodule.exports.deflateGetDictionary = deflateGetDictionary;\nmodule.exports.deflateParams = deflateParams;\nmodule.exports.deflatePending = deflatePending;\nmodule.exports.deflatePrime = deflatePrime;\nmodule.exports.deflateTune = deflateTune;\n*/\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.indicator-card {\n min-width: 200px;\n max-width: 280px;\n height: 118px;\n width: 100%;\n}\n\n.indicator-card-inner {\n width: 260px;\n height: 118px;\n}\n\n.indicator-card-inner--hovered {\n height: 146px;\n}\n\n.indicator-action-icon {\n height: 32px;\n width: 32px;\n margin-right: -16px;\n margin-top: -16px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/elements/keyIndicators/indicators.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,aAAa;EACb,WAAW;AACb;;AAEA;EACE,YAAY;EACZ,aAAa;AACf;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,YAAY;EACZ,WAAW;EACX,mBAAmB;EACnB,iBAAiB;AACnB\",\"sourcesContent\":[\".indicator-card {\\n min-width: 200px;\\n max-width: 280px;\\n height: 118px;\\n width: 100%;\\n}\\n\\n.indicator-card-inner {\\n width: 260px;\\n height: 118px;\\n}\\n\\n.indicator-card-inner--hovered {\\n height: 146px;\\n}\\n\\n.indicator-action-icon {\\n height: 32px;\\n width: 32px;\\n margin-right: -16px;\\n margin-top: -16px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n\n /* Allowed flush values; see deflate() and inflate() below for details */\n Z_NO_FLUSH: 0,\n Z_PARTIAL_FLUSH: 1,\n Z_SYNC_FLUSH: 2,\n Z_FULL_FLUSH: 3,\n Z_FINISH: 4,\n Z_BLOCK: 5,\n Z_TREES: 6,\n\n /* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\n Z_OK: 0,\n Z_STREAM_END: 1,\n Z_NEED_DICT: 2,\n Z_ERRNO: -1,\n Z_STREAM_ERROR: -2,\n Z_DATA_ERROR: -3,\n Z_MEM_ERROR: -4,\n Z_BUF_ERROR: -5,\n //Z_VERSION_ERROR: -6,\n\n /* compression levels */\n Z_NO_COMPRESSION: 0,\n Z_BEST_SPEED: 1,\n Z_BEST_COMPRESSION: 9,\n Z_DEFAULT_COMPRESSION: -1,\n\n\n Z_FILTERED: 1,\n Z_HUFFMAN_ONLY: 2,\n Z_RLE: 3,\n Z_FIXED: 4,\n Z_DEFAULT_STRATEGY: 0,\n\n /* Possible values of the data_type field (though see inflate()) */\n Z_BINARY: 0,\n Z_TEXT: 1,\n //Z_ASCII: 1, // = Z_TEXT (deprecated)\n Z_UNKNOWN: 2,\n\n /* The deflate compression method */\n Z_DEFLATED: 8\n //Z_NULL: null // Use -1 or null inline, depending on var type\n};\n","'use strict';\n\n\nconst _has = (obj, key) => {\n return Object.prototype.hasOwnProperty.call(obj, key);\n};\n\nmodule.exports.assign = function (obj /*from1, from2, from3, ...*/) {\n const sources = Array.prototype.slice.call(arguments, 1);\n while (sources.length) {\n const source = sources.shift();\n if (!source) { continue; }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be non-object');\n }\n\n for (const p in source) {\n if (_has(source, p)) {\n obj[p] = source[p];\n }\n }\n }\n\n return obj;\n};\n\n\n// Join array of chunks to single array.\nmodule.exports.flattenChunks = (chunks) => {\n // calculate data length\n let len = 0;\n\n for (let i = 0, l = chunks.length; i < l; i++) {\n len += chunks[i].length;\n }\n\n // join chunks\n const result = new Uint8Array(len);\n\n for (let i = 0, pos = 0, l = chunks.length; i < l; i++) {\n let chunk = chunks[i];\n result.set(chunk, pos);\n pos += chunk.length;\n }\n\n return result;\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.y = __system_context__;","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"\";","__webpack_require__.nc = undefined;","const autoPublicPath = require(\"./auto-public-path\").autoPublicPath;\n\nautoPublicPath(1);\n","function e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function t(t){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{};n%2?e(Object(r),!0).forEach((function(e){o(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):e(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e){return(r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function a(e,t){var n;if(\"function\"!=typeof(n=t.domElement?function(){return t.domElement}:t.domElementGetter?t.domElementGetter:e.domElementGetter?e.domElementGetter:function(e){var t=e.appName||e.name;if(!t)throw Error(\"single-spa's dom-element-getter-helpers was not given an application name as a prop, so it can't make a unique dom element container for the react application\");var n=\"single-spa-application:\".concat(t);return function(){var e=document.getElementById(n);return e||((e=document.createElement(\"div\")).id=n,document.body.appendChild(e)),e}}(t)))throw Error(\"single-spa's dom-element-getter-helpers was given an invalid domElementGetter for application or parcel '\".concat(t.name,\"'. Expected a function, received \").concat(r(n)));return function(){var e=n(t);if(!(e instanceof HTMLElement))throw Error(\"single-spa's dom-element-getter-helpers: domElementGetter returned an invalid dom element for application or parcel '\".concat(t.name,\"'. Expected HTMLElement, received \").concat(r(e)));return e}}var c=null;try{c=require(\"react\").createContext()}catch(e){}var u={React:null,ReactDOM:null,ReactDOMClient:null,rootComponent:null,loadRootComponent:null,errorBoundary:null,errorBoundaryClass:null,domElementGetter:null,parcelCanUpdate:!0,suppressComponentDidCatchWarning:!1,domElements:{},renderResults:{},updateResolves:{},unmountResolves:{}};function i(e){if(\"object\"!==n(e))throw new Error(\"single-spa-react requires a configuration object\");var o,r=t(t({},u),e);if(!r.React)throw new Error(\"single-spa-react must be passed opts.React\");if(!r.ReactDOM&&!r.ReactDOMClient)throw new Error(\"single-spa-react must be passed opts.ReactDOM or opts.ReactDOMClient\");r.renderType||(null!==(o=r.ReactDOMClient)&&void 0!==o&&o.createRoot?r.renderType=\"createRoot\":r.renderType=\"render\");if(!r.rootComponent&&!r.loadRootComponent)throw new Error(\"single-spa-react must be passed opts.rootComponent or opts.loadRootComponent\");if(r.errorBoundary&&\"function\"!=typeof r.errorBoundary)throw Error(\"The errorBoundary opt for single-spa-react must either be omitted or be a function that returns React elements\");!c&&r.React.createContext&&(c=r.React.createContext()),r.SingleSpaRoot=function(e){function t(e){t.displayName=\"SingleSpaRoot(\".concat(e.name,\")\")}return t.prototype=Object.create(e.React.Component.prototype),t.prototype.componentDidMount=function(){setTimeout(this.props.mountFinished)},t.prototype.componentWillUnmount=function(){setTimeout(this.props.unmountFinished)},t.prototype.render=function(){return setTimeout(this.props.updateFinished),this.props.children},t}(r);var a={bootstrap:s.bind(null,r),mount:p.bind(null,r),unmount:l.bind(null,r)};return r.parcelCanUpdate&&(a.update=m.bind(null,r)),a}function s(e,t){return e.rootComponent?Promise.resolve():e.loadRootComponent(t).then((function(t){e.rootComponent=t}))}function p(e,t){return new Promise((function(n,o){e.suppressComponentDidCatchWarning||!function(e){if(!(e&&\"string\"==typeof e.version&&e.version.indexOf(\".\")>=0))return!1;var t=e.version.slice(0,e.version.indexOf(\".\"));try{return Number(t)>=16}catch(e){return!1}}(e.React)||e.errorBoundary||e.errorBoundaryClass||(e.rootComponent.prototype?e.rootComponent.prototype.componentDidCatch||console.warn(\"single-spa-react: \".concat(t.name||t.appName||t.childAppName,\"'s rootComponent should implement componentDidCatch to avoid accidentally unmounting the entire single-spa application.\")):console.warn(\"single-spa-react: \".concat(t.name||t.appName||t.childAppName,\"'s rootComponent does not implement an error boundary. If using a functional component, consider providing an opts.errorBoundary to singleSpaReact(opts).\")));var r=y(e,t,(function(){n(this)})),c=a(e,t)(),u=function(e){var t=e.reactDom,n=e.renderType,o=e.elementToRender,r=e.domElement,a=t[n];if(\"function\"!=typeof a)throw new Error('renderType \"'.concat(n,'\" did not return a function.'));switch(n){case\"createRoot\":case\"unstable_createRoot\":case\"createBlockingRoot\":case\"unstable_createBlockingRoot\":var c=a(r);return c.render(o),c;case\"hydrateRoot\":return a(r,o);case\"hydrate\":default:return a(o,r),null}}({elementToRender:r,domElement:c,reactDom:d(e),renderType:f(e)});e.domElements[t.name]=c,e.renderResults[t.name]=u}))}function l(e,t){return new Promise((function(n){e.unmountResolves[t.name]=n;var o=e.renderResults[t.name];o&&o.unmount?o.unmount():d(e).unmountComponentAtNode(e.domElements[t.name]),delete e.domElements[t.name],delete e.renderResults[t.name]}))}function m(e,t){return new Promise((function(n){e.updateResolves[t.name]||(e.updateResolves[t.name]=[]),e.updateResolves[t.name].push(n);var o=y(e,t,null),r=e.renderResults[t.name];if(r&&r.render)r.render(o);else{var c=a(e,t)();d(e).render(o,c)}}))}function d(e){return e.ReactDOMClient||e.ReactDOM}function f(e){return\"function\"==typeof e.renderType?e.renderType():e.renderType}function y(e,n,o){var r=e.React.createElement(e.rootComponent,n),a=c?e.React.createElement(c.Provider,{value:n},r):r;return(e.errorBoundary||n.errorBoundary||e.errorBoundaryClass||n.errorBoundaryClass)&&(e.errorBoundaryClass=e.errorBoundaryClass||n.errorBoundaryClass||function(e,t){function n(t){e.React.Component.apply(this,arguments),this.state={caughtError:null,caughtErrorInfo:null},n.displayName=\"SingleSpaReactErrorBoundary(\".concat(t.name,\")\")}return n.prototype=Object.create(e.React.Component.prototype),n.prototype.render=function(){return this.state.caughtError?(e.errorBoundary||t.errorBoundary)(this.state.caughtError,this.state.caughtErrorInfo,this.props):this.props.children},n.prototype.componentDidCatch=function(e,t){this.setState({caughtError:e,caughtErrorInfo:t})},n}(e,n),a=e.React.createElement(e.errorBoundaryClass,n,a)),a=e.React.createElement(e.SingleSpaRoot,t(t({},n),{},{mountFinished:o,updateFinished:function(){e.updateResolves[n.name]&&(e.updateResolves[n.name].forEach((function(e){return e()})),delete e.updateResolves[n.name])},unmountFinished:function(){e.unmountResolves[n.name]&&(e.unmountResolves[n.name](),delete e.unmountResolves[n.name])}}),a)}export{c as SingleSpaContext,i as default};\n//# sourceMappingURL=single-spa-react.js.map\n","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./styles.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./styles.css\";\n export default content && content.locals ? content.locals : undefined;\n","'use strict';\n\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val);\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[Symbol.iterator];\n\n const iterator = generator.call(obj);\n\n let result;\n\n while ((result = iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported ? ((token, callbacks) => {\n _global.addEventListener(\"message\", ({source, data}) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n }, false);\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n }\n })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n typeof setImmediate === 'function',\n isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n if (response) {\n this.response = response;\n this.status = response.status ? response.status : null;\n }\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.status\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.cause = error;\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array<String|Number>} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n if (utils.isFunction(options)) {\n options = {\n serialize: options\n };\n } \n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n _navigator as navigator,\n origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isHeaders(header)) {\n for (const [key, value] of header.entries()) {\n setHeader(value, key, rewrite);\n }\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn.apply(null, args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n","import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n url = new URL(url, platform.origin);\n\n return (\n origin.protocol === url.protocol &&\n origin.host === url.host &&\n (isMSIE || origin.port === url.port)\n );\n})(\n new URL(platform.origin),\n platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\n","import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n\n utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n utils.isString(path) && cookie.push('path=' + path);\n\n utils.isString(domain) && cookie.push('domain=' + domain);\n\n secure === true && cookie.push('secure');\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n let isRelativeUrl = !isAbsoluteURL(requestedURL);\n if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, prop, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, prop , caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, prop , caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, prop , caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, true)\n };\n\n utils.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let {data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth} = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n let contentType;\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // Let the browser set it\n } else if ((contentType = headers.getContentType()) !== false) {\n // fix semicolon duplication issue for ReactNative FormData implementation\n const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n headers.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n }\n }\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n","import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n timer = null;\n onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => utils.asap(unsubscribe);\n\n return signal;\n }\n}\n\nexport default composeSignals;\n","\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n}\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst isFetchSupported = typeof fetch === 'function' && typeof Request === 'function' && typeof Response === 'function';\nconst isReadableStreamSupported = isFetchSupported && typeof ReadableStream === 'function';\n\n// used only inside the fetch adapter\nconst encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Response(str).arrayBuffer())\n);\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst supportsRequestStream = isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n});\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst supportsResponseStream = isReadableStreamSupported &&\n test(() => utils.isReadableStream(new Response('').body));\n\n\nconst resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n};\n\nisFetchSupported && (((res) => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = utils.isFunction(res[type]) ? (res) => res[type]() :\n (_, config) => {\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n})(new Response));\n\nconst getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if(utils.isBlob(body)) {\n return body.size;\n }\n\n if(utils.isSpecCompliantForm(body)) {\n const _request = new Request(platform.origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if(utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if(utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if(utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n}\n\nconst resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n}\n\nexport default isFetchSupported && (async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\n });\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = \"credentials\" in Request.prototype;\n request = new Request(url, {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: isCredentialsSupported ? withCredentials : undefined\n });\n\n let response = await fetch(request);\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request);\n }\n});\n\n\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: fetchAdapter\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {value});\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {value});\n }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\nexport default {\n getAdapter: (adapters) => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const {length} = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n },\n adapters: knownAdapters\n}\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","export const VERSION = \"1.8.4\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n return (value, opt) => {\n // eslint-disable-next-line no-console\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n return true;\n }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy = {};\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.allowAbsoluteUrls\n if (config.allowAbsoluteUrls !== undefined) {\n // do nothing\n } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n } else {\n config.allowAbsoluteUrls = true;\n }\n\n validator.assertOptions(config, {\n baseUrl: validators.spelling('baseURL'),\n withXsrfToken: validators.spelling('withXSRFToken')\n }, true);\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n i = 0;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","import { AxiosError } from 'axios';\n\nconst errors: string[] = [];\nconst toPathname = (fullUrl: string = ''): string => {\n const url = new URL(fullUrl);\n return url.pathname;\n};\nconst joinStrings = (...rest: string[]): string => {\n return rest.filter(value => !!value).join('<br/>');\n};\n\nexport const recordAxiosError = (error: AxiosError): void => {\n const { response, code, config } = error;\n if (response) {\n const requestData = getValidDataProperty(response.config.data);\n const traceIdString = response.headers.traceparent\n ? `Trace-id: ${requestData.requestId ?? response.headers.traceparent}`\n : undefined;\n const statusCodeString = response.status.toString() ? `Status-code: ${response.status.toString()}` : undefined;\n const pathString = toPathname(response.config.url) ? `Path: ${toPathname(response.config.url)}` : undefined;\n errors.push(joinStrings(traceIdString, statusCodeString, pathString));\n } else if (config) {\n const pathString = toPathname(config.url) ? `Path: ${toPathname(config.url)}` : undefined;\n const statusCodeString = code ? `Status-code: ${code}` : undefined;\n errors.push(joinStrings(pathString, statusCodeString));\n } else {\n errors.push(error.message);\n }\n};\n\nfunction getValidDataProperty(data: string | undefined): Record<string, any> {\n try {\n return JSON.parse(data);\n } catch (_) {\n return {};\n }\n}\nexport const flushErrors = (): string => {\n return errors.splice(0, errors.length).join('');\n};\n","import { Notification } from '@ecosystem/newron-design-system/build/exports/overlays';\n\nexport type Params = Record<string, string[]>;\n\nexport enum Periodicity {\n Monthly = 'Monthly',\n Weekly = 'Weekly',\n}\n\nexport enum ChangeType {\n percent = 'percent',\n absolute = 'absolute',\n}\n\nexport enum CurrencyOption {\n eur = 'eur',\n local = 'local',\n usd = 'usd',\n}\n\nexport enum DataType {\n String = 'String',\n Integer = 'Integer',\n Date = 'Date',\n Decimal = 'Decimal',\n}\n\nexport enum FormatHint {\n Percentage = 'Percentage',\n PercentagePoints = 'PercentagePoints',\n Money = 'Money',\n Index = 'Index',\n MonthYear = 'MonthYear',\n Month = 'Month',\n Year = 'Year',\n WholeMoney = 'WholeMoney',\n}\n\nexport enum SortType {\n Absolute = 'Absolute',\n Change = 'Change',\n Alpha = 'Alpha',\n Date = 'Date',\n}\n\nexport enum SortDirection {\n ascending = 'ascending',\n descending = 'descending',\n}\n\nexport type SortOption = {\n sortType: SortType;\n sortKey: string;\n label: string;\n isDefault?: boolean;\n defaultDirection?: SortDirection;\n};\n\nexport type SortingInfo = {\n columnName: string;\n sortKey: string;\n sortType: SortType;\n direction: SortDirection;\n label: string;\n sortIndex: number;\n};\n\nexport type DataWarningKpi = { name: string; label: string };\n\nexport type DataWarningDetails = { level: string; kpis?: DataWarningKpi[] };\n\nexport type DataWarning = [string, DataWarningDetails];\n\nexport enum GenericWarningScope {\n Global = 'GLOBAL',\n Local = 'LOCAL',\n}\n\nexport type FieldWarning = GenericWarning & {\n relatedFields?: string[];\n};\n\nexport type GenericWarning = {\n level: Notification;\n message: string;\n scope?: GenericWarningScope;\n};\n\nexport enum ColumnType {\n Identifier = 'Identifier',\n Kpi = 'Kpi',\n KpiWithChange = 'KpiWithChange',\n Text = 'Text',\n Date = 'Date',\n Number = 'Number',\n}\n\nexport enum ColumnRelationship {\n Change = 'Change',\n Share = 'Share',\n Description = 'Description',\n QueryArgs = 'QueryArgs',\n Detail = 'Detail',\n}\n\ninterface Column {\n type: ColumnType;\n name: string;\n label: string;\n dataType: DataType;\n arrayLength: number | null;\n belongsTo: string;\n canAggregate: boolean;\n formatHint?: FormatHint;\n sortOptions?: SortOption[];\n customType?: string;\n relatedTo?: string;\n relationship?: ColumnRelationship;\n enrichment?: string;\n isFixed?: boolean;\n isChange?: boolean;\n}\n\nexport interface IdentifierColumn extends Column {\n idField: string;\n identifier: string[];\n subIdentifier?: string[];\n}\n\nexport type KpiColumn = Column;\n\nexport type TextColumn = Column;\n\nexport type DateColumn = Column;\n\nexport type NumberColumn = Column;\n\nexport interface KpiWithChangeColumn extends Column {\n changeName: string;\n changeLabel: string;\n changeFormatHint?: FormatHint;\n changeDataType: DataType;\n}\n\nexport type DataColumn = IdentifierColumn | KpiColumn | KpiWithChangeColumn | TextColumn | DateColumn | NumberColumn;\n\nexport type AvailableDataColumn = DataColumn & {\n enrichment: string;\n};\n\nexport type AvailableColumns = {\n enrichment: string;\n columns: DataColumn[];\n};\n\nexport type DataCellValue = string | number | (number | null)[] | null;\n\nexport type DataRow = {\n values: Record<string, DataCellValue>;\n hasData?: boolean;\n};\n\nexport type DataRows = DataRow[];\n\nexport type Period = {\n periodSeq: number;\n year: number;\n positionInYear: number;\n name: string;\n periodicity: Periodicity;\n};\n\nexport type TimeFrame = {\n periodicity: Periodicity;\n periods: Period[];\n};\n\nexport type GroupByResultType = {\n type: 'group_by';\n groupBy: string[];\n currency: string;\n timeFrame: TimeFrame;\n};\n\nexport type MarketInfoResultType = {\n type: 'market_info';\n timeFrame: TimeFrame;\n};\n\nexport type ResultType = GroupByResultType | MarketInfoResultType;\n\nexport type ResultSet = {\n warnings?: FieldWarning[];\n type: ResultType;\n columns: DataColumn[];\n data: DataRows;\n availableColumns: AvailableColumns[];\n pipeline?: string;\n};\n\nexport type DataResults = {\n requestId: string;\n results: ResultSet[];\n warnings: GenericWarning[];\n};\n\nexport type DataFetchLoading = {\n isDataLoading?: boolean;\n isEnrichDataLoading?: boolean;\n};\n","import { ChartType } from '@ecosystem/newron-client-lib';\nimport { DataType, Params, Period } from '../data';\n\nexport enum HTTPMethod {\n GET = 'GET',\n POST = 'POST',\n}\n\nexport type MarketPeriod = {\n name: string;\n periodicity: string;\n published: string;\n sequence: number;\n value: string;\n};\n\nexport type Entity = {\n value: string;\n label: string;\n periods?: MarketPeriod[];\n options?: any;\n};\n\nexport type OpenMarketOptions = {\n value: string;\n periods: MarketPeriod[];\n countryName: string;\n productName: string;\n};\n\nexport type UpsellProps = {\n openMarketsOptions: OpenMarketOptions[];\n cells: string[];\n};\n\nexport type DynamicTitle = (string | TitleSelector)[];\n\nexport type TitleSelector = {\n menu: SelectionMenu;\n};\n\nexport type SettingsProvider = {\n values: Params;\n dataSettings: string[];\n enablePageLevelNoDataError?: boolean;\n metadata?: {\n tracking?: {\n elementType?: string;\n elementName?: string;\n chartType?: ChartType;\n updateOnContextChange?: boolean;\n paramsMap?: Record<string, string>;\n rowNameField?: string;\n };\n };\n};\n\nexport type MenuItemOption = {\n type: 'MenuItem';\n value: string;\n label: string;\n description?: string;\n disabled?: boolean;\n isCustom?: boolean;\n isFeatureCustom?: boolean;\n isBeta?: boolean;\n isBrand?: boolean;\n};\n\nexport type MenuItemWithContext = {\n type: 'MenuItemContext';\n contextSetting: string;\n label: string;\n value: string;\n disabled?: boolean;\n};\n\nexport type MenuItemSeparator = {\n type: 'MenuSeparator';\n};\n\nexport type MenuItemLabel = {\n type: 'MenuLabel';\n text: string;\n};\n\nexport type MenuItemDataColumns = {\n type: 'DataColumns';\n ofType: DataType[];\n requireArrayLength?: boolean;\n};\n\nexport type MenuItem =\n | MenuItemOption\n | MenuItemDataColumns\n | MenuItemSeparator\n | MenuItemLabel\n | MenuItemWithContext\n | MenuItemSubMenu;\n\nexport type MenuItemSubMenu = {\n type: 'MenuSubMenu';\n label: string;\n items: MenuItem[];\n value?: string;\n disabled?: boolean;\n};\n\nexport type CardSelectorTrackingMetadata = {\n filterName?: string;\n updateOnContextChange?: boolean;\n};\n\nexport type SelectionMenu = {\n customMenuOptions?: Period[];\n paramName: string;\n items: (MenuItem | MenuItemSubMenu)[];\n preventDuplicatesWith?: string[];\n metadata?: { tracking?: CardSelectorTrackingMetadata };\n customizationTraySettings?: CustomizationTraySettings;\n customMenuModalSettings?: CustomMenuModalSettings;\n};\n\nexport type CustomizationTraySettings = {\n trayType: string;\n isCustomizationTrayNeeded: boolean;\n};\n\nexport type Preference = {\n id: string;\n data: ValueSet;\n created_by?: string;\n};\n\nexport type ValueSet = Record<string, Params>;\n\nexport enum PreferenceName {\n segment_price = 'segment_price',\n segment_feature = 'segment_feature',\n}\n\nexport type CustomMenuModalSettings = {\n customComparisonPeriods?: CustomComparisonPeriods;\n customTimeSeriesDuration?: CustomTimeSeriesDuration;\n};\n\nexport type CustomComparisonPeriods = {\n customMenuOptions?: Period[];\n customLimitOption?: string;\n};\n\nexport type CustomTimeSeriesDuration = {\n customMenuLabels: string;\n maxDuration: number;\n};\n","import { SecondFeatureSegmentationConfig, SelectedCustomFeatureContext } from '../../common/selection.menu/types';\nimport { Entity } from './common.types';\nimport { Filters } from './filter.types';\n\nexport enum SettingSelector {\n singleSelect = 'singleSelect',\n radioGroup = 'radioGroup',\n multiSelect = 'multiSelect',\n custom = 'custom',\n}\n\nexport type ContextTrackingMetadata = {\n hasPageView?: boolean;\n};\n\nexport type SettingDefinition = {\n name: string;\n labels?: {\n identifier: string;\n label: string;\n prefix?: string;\n suffix?: string;\n };\n selection: {\n isSelectable: boolean;\n selector?: SettingSelector;\n options?: (Entity | string)[];\n optionsUrl?: string;\n isSecondary?: boolean;\n metadata?: { tracking?: ContextTrackingMetadata };\n };\n isParam: boolean;\n metadata?: { tracking: { propertyName: string; includePropertyValue?: boolean } };\n};\n\nexport type SettingsValues = Record<string, Entity[]>;\n\nexport type ContextSettings = {\n definitions: SettingDefinition[];\n values: SettingsValues;\n};\n\nexport type CustomFeature = {\n [key: string]: CustomFeatureDetails;\n};\n\nexport type CustomFeatureDetails = {\n selectedFeature?: SelectedCustomFeatureContext;\n originMenu?: string;\n customFeatureType?: string;\n secondSegmentationConfig?: SecondFeatureSegmentationConfig;\n};\n\nexport type CustomFeatureContext = { customFeature?: CustomFeature };\n\nexport type Context = {\n settings: ContextSettings;\n filters?: Filters;\n} & CustomFeatureContext;\n","import { Entity } from './common.types';\nimport { Filter } from '@ecosystem/newron-client-lib';\n\nexport type FiltersValues = Record<string, Entity[]>;\n\nexport enum FilterType {\n multiSelect = 'multiSelect',\n numericRange = 'numericRange',\n dateRange = 'dateRange',\n select = 'select',\n}\n\nexport type FiltersGrouped = {\n code: string;\n label: string;\n definitions: FilterDefinition[];\n};\n\nexport type FiltersUngrouped = {\n definitions: FilterDefinition[];\n};\n\nexport type FilterDefinition = {\n name: string;\n label: string;\n type: FilterType;\n placeholder?: string;\n options?: Entity[];\n min?: number;\n max?: number;\n roundTo?: number;\n currency?: string;\n value?: string;\n hierarchy?: {\n enabled: boolean;\n level?: string;\n name?: string;\n parent?: string;\n };\n};\n\nexport type FilterSections = {\n label: string;\n maxFeatureLimit?: number;\n grouped?: FiltersGrouped[];\n ungrouped?: FiltersUngrouped;\n isMain?: boolean;\n};\n\nexport type Filters = {\n sections: FilterSections[];\n values: FiltersValues;\n};\n\nexport interface SavedFilterData {\n values: FiltersValues;\n definitionLabels: Entity[];\n}\n\nexport interface SavedFilter extends Filter {\n data: SavedFilterData;\n}\n","import { UiAction } from './action.types';\nimport { DynamicTitle, SettingsProvider } from './common.types';\nimport { Content, ExportOptions, CollectionOptions } from './content.types';\nimport { DataOptions } from './data.types';\nimport { NoDataInfoType } from '../../bff/content/component';\n\nexport type CallToAction = {\n isPrimary?: boolean;\n label: string;\n action: UiAction;\n};\n\nexport enum DataVizType {\n table = 'table',\n chart = 'chart',\n horizontalBarChart = 'horizontalBarChart',\n verticalBarChart = 'verticalBarChart',\n stackedBarChart = 'stackedBarChart',\n bubbleChart = 'bubbleChart',\n valueWithChangeChart = 'valueWithChangeChart',\n lineChart = 'lineChart',\n}\n\nexport type ComponentHeading = {\n subTitle?: string;\n title?: string | DynamicTitle;\n isCollapsible?: boolean;\n};\n\nexport type ComponentLayout = 'vertical-list' | 'horizontal-list' | 'flex-grid';\n\nexport type Component = {\n name: string;\n heading?: ComponentHeading;\n callsToAction?: CallToAction[];\n dataOptions?: DataOptions;\n contents: {\n fixed?: Content[];\n endpoint?: string;\n aboveFold?: number;\n };\n settings: SettingsProvider;\n asCard?: boolean;\n noDataInfoType?: NoDataInfoType;\n layout?: ComponentLayout;\n exportOptions?: ExportOptions;\n collectionOptions?: CollectionOptions;\n};\n","import { DataOptions } from './data.types';\nimport { InsightContent } from '../../content/collection/types';\nimport { ChartType } from '@ecosystem/newron-client-lib';\n\nexport enum CoreContents {\n unknown = 'unknown',\n dataError = 'dataError',\n timeSeries = 'timeSeries',\n segmentation = 'segmentation',\n multiKpi = 'multiKpi',\n leaderBoard = 'leaderBoard',\n statsTable = 'statsTable',\n keyIndicators = 'keyIndicators',\n kpiTrends = 'kpiTrends',\n billboard = 'billboard',\n alertPanel = 'alertPanel',\n singleKpiTrend = 'singleKpiTrend',\n heatmap = 'heatmap',\n kpiDecompositon = 'kpiDecomposition',\n}\n\nexport enum ExportFormat {\n Xlsx = 'xlsx',\n Pptx = 'pptx',\n Png = 'png',\n}\n\nexport type ExportHeaderSettings = {\n customValues: [string, string][];\n settingValues: { label: string; valueKey: string }[];\n filterValues: { label: string; valueKey: string }[];\n};\n\nexport type ExportOptions = {\n fileName: string;\n contentName?: string;\n fileHeaderSettings?: ExportHeaderSettings;\n};\n\nexport type CollectionOptions = {\n collectionKey: string;\n type: InsightContent['type'];\n dataOptions: InsightContent['dataOptions'];\n chartName: string;\n chartType?: ChartType;\n};\n\nexport type FromSettingsInstruction = {\n type: 'FromSettingsInstruction';\n instruction: string;\n};\n\nexport type StringInstruction = {\n type: 'StringInstruction';\n instruction: string;\n};\n\nexport type StringListInstruction = {\n type: 'StringListInstruction';\n instruction: string[];\n};\n\nexport type BooleanInstruction = {\n type: 'BooleanInstruction';\n instruction: boolean;\n};\n\nexport type NumberInstruction = {\n type: 'NumberInstruction';\n instruction: number;\n};\n\nexport type ObjectInstruction = {\n type: 'ObjectInstruction';\n instruction: unknown;\n};\n\nexport type ContentInstruction =\n | FromSettingsInstruction\n | StringInstruction\n | StringListInstruction\n | BooleanInstruction\n | NumberInstruction\n | ObjectInstruction;\nexport type ContentInstructions = Record<string, ContentInstruction>;\n\nexport type Content = {\n type: string;\n dataOptions?: DataOptions;\n instructions?: ContentInstructions;\n};\n","import { DataResults } from '../data';\nimport { HTTPMethod } from './common.types';\n\nexport type ProviderParams = Record<string, string[] | null>;\n\nexport type DataProvider = {\n providerParams?: ProviderParams;\n endpoint: string;\n requestMethod?: HTTPMethod;\n};\n\nexport enum DataMode {\n isProvider = 'isProvider',\n takeFromProvider = 'takeFromProvider',\n isPresent = 'isPresent',\n}\n\nexport enum SortingDisplayLevel {\n atProvider = 'atProvider',\n atContent = 'atContent',\n}\n\nexport enum SortingLocation {\n onBrowser = 'onBrowser',\n onServer = 'onServer',\n}\n\nexport type SortingOptions = {\n displayLevel: SortingDisplayLevel;\n sortLocation?: SortingLocation;\n};\n\nexport type DataOptions = {\n mode: DataMode;\n providerInfo?: DataProvider;\n data?: DataResults;\n sorting?: SortingOptions;\n};\n","import { Params } from '../data';\nimport { SettingsProvider } from './common.types';\nimport { PageContext } from './page.types';\nimport { Section } from './section.types';\n\nexport type ModalContext = PageContext & {\n modalParams: Params;\n};\n\nexport type ModalSize = 'sm' | 'md' | 'lg' | 'xl';\n\nexport type ModalDsl = {\n title: string;\n size: ModalSize;\n sections: Section[];\n settings?: SettingsProvider;\n name: ModalName;\n};\nexport enum ModalName {\n KeyIndicators = 'key indicators',\n Heatmap = 'heatmap',\n Trends = 'trends',\n}\n","import { Component } from './component.types';\n\nexport enum SectionType {\n unknown = 'unknown',\n column = 'column',\n tabbed = 'tabbed',\n}\n\nexport type BaseSection = {\n type: SectionType;\n title?: string;\n};\n\nexport type SectionTab = {\n name: string;\n label: string;\n path: string;\n};\n\nexport type TabbedSection = BaseSection & {\n tabs: SectionTab[];\n activeTab: string;\n};\n\nexport enum SectionColumnWidth {\n full = 'full',\n half = 'half',\n '1/3' = '1/3',\n '2/3' = '2/3',\n '1/4' = '1/4',\n '3/4' = '3/4',\n}\n\nexport type ColumnSectionColumn = {\n width: SectionColumnWidth;\n component: Component;\n};\n\nexport type ColumnSection = BaseSection & {\n columns: ColumnSectionColumn[];\n};\n\nexport type UnknownSection = BaseSection;\n\nexport type Section = TabbedSection | ColumnSection | UnknownSection;\n","import { ComponentHeading, Context } from '../content';\nimport { Params } from '../data';\n\nexport enum EventName {\n PageViewed = 'Page Viewed',\n PageElementViewed = 'Page Element Viewed',\n ChartInteractions = 'Chart Interactions',\n FilterApplied = 'Filter Applied',\n FilterAppliedDetails = 'Filter Applied Details',\n NavigationClicked = 'Navigation Clicked',\n PageElementClicked = 'Page Element Clicked',\n TableClicked = 'Table Clicked',\n DataExported = 'Data Exported',\n DataExportInitiated = 'Data Export Initiated',\n SearchClicked = 'Search Clicked',\n PageScrolled = 'Page Scrolled',\n}\n\nexport enum EventElementType {\n Button = 'Button',\n Group = 'Group',\n Card = 'Card',\n Link = 'Link',\n Sort = 'Sort',\n Overlay = 'Overlay',\n CheckBox = 'Check Box',\n}\n\nexport enum EventElementCategory {\n CustomFilter = 'Custom Filter',\n SaveFilter = 'Saved Filters',\n CustomPriceFilter = 'Custom Price Filter',\n CustomFeatureFilter = 'Custom Feature Filter',\n DeleteFeatureFilter = 'Delete Feature Filter',\n ShareFeatureFilter = 'Share Feature Filter',\n}\n\nexport enum EventKeyIndicators {\n Market = 'Market',\n Brand = 'Brand',\n}\n\nexport type EventParams = Record<string, string | string[]>;\n\nexport type InternalTrackingMeta = {\n componentContext?: Params;\n componentHeading?: ComponentHeading;\n eventParams: EventParams;\n};\n\nexport type TrackingMeta = {\n pageUrl: string;\n pageContext: Params;\n pageTitle: string;\n} & InternalTrackingMeta;\n\nexport enum TrackingElementType {\n Tooltip = 'Tooltip',\n Selectors = 'Selectors',\n Table = 'Table',\n Chart = 'Chart',\n}\n\nexport type TrackingEventOptions = {\n fireEvent?: boolean;\n context?: Context;\n};\n\nexport type ExternalTrackingFn = (\n event: EventName | string,\n meta: TrackingMeta,\n options?: TrackingEventOptions\n) => void;\nexport type InternalTrackingFn = (\n event: EventName | string,\n meta: InternalTrackingMeta,\n options?: TrackingEventOptions\n) => void;\nexport type BasicTrackingFn = (\n event: EventName | string,\n eventParams?: EventParams,\n options?: TrackingEventOptions\n) => void;\nexport type ExternalGetTrackingTagsFn = (event: EventName | string, meta: TrackingMeta) => EventParams;\nexport type InternalGetTrackingTagsFn = (event: EventName | string, meta: InternalTrackingMeta) => EventParams;\nexport type BasicGetTrackingTagsFn = (event: EventName | string, eventParams?: EventParams) => EventParams;\nexport type PropositionSection = 'Market 2.0' | 'Supply Chain';\n","export enum InsightErrorType {\n SUBSCRIPTION_ERROR = 'SUBSCRIPTION_ERROR',\n BFF_ERROR = 'BFF_ERROR',\n RENDER_ERROR = 'RENDER_ERROR',\n OTHER = 'OTHER',\n}\nexport interface ErrorInfo {\n errorType: InsightErrorType;\n loggerMessage: string;\n userMessage?: string;\n}\n\nexport type ProviderCollectionProps = {\n isLive: boolean;\n onError: (errorInfo: ErrorInfo) => void;\n};\n","import { authentication, isGfkUser, logger } from '@ecosystem/newron-client-lib';\nimport { InsightErrorType, ProviderCollectionProps } from '../data/types';\n\ntype impersonationHeader = {\n 'X-Impersonate-Client': string;\n};\n\nconst WAIT_STEP_MS = 100;\nconst WAIT_MAX_TRIES = 50;\n\nconst readImpersonationStorage = () => JSON.parse(localStorage.getItem('impersonation'));\n\nexport async function clientToImpersonate(collection?: ProviderCollectionProps): Promise<impersonationHeader | null> {\n const user = authentication.getUser();\n if (!isGfkUser(user.userId)) {\n return null;\n }\n\n let tries = 0;\n let storage = readImpersonationStorage();\n while (!storage && tries < WAIT_MAX_TRIES) {\n tries++;\n await new Promise(resolve => setTimeout(resolve, WAIT_STEP_MS));\n storage = readImpersonationStorage();\n }\n\n const clientId = storage?.client_id;\n const clientUserGroupIds = storage?.client_user_group_ids;\n if (clientId && clientUserGroupIds) {\n return {\n 'X-Impersonate-Client': JSON.stringify({\n client_id: clientId,\n client_user_group_ids: clientUserGroupIds,\n }),\n };\n }\n\n const loggerMessage = 'Failed to load impersonation data in time.';\n const userMessage = 'Your subscription does not allow you to see any data, please contact your GfK representative.';\n collection?.onError &&\n collection.onError({\n errorType: InsightErrorType.SUBSCRIPTION_ERROR,\n loggerMessage,\n userMessage,\n });\n logger.error(new Error(loggerMessage));\n return null;\n}\n","const BRAND_NAME = 'GfK';\n\nexport const DEFAULT_ERROR_MESSAGE = `The requested data for this page has failed to load.<br/> Please refresh your browser to try again. If this issue persists, please contact your ${BRAND_NAME} representative.`;\n\nexport const DEFAULT_SECTION_ERROR_MESSAGE = `The requested data for this section has failed to load.<br/> Please refresh your browser to try again. If this issue persists, please contact your ${BRAND_NAME} representative.`;\n\nexport const DEFAULT_ERROR_TITLE = `Unable to load page`;\n","import { DEFAULT_ERROR_MESSAGE } from '../../common/constants/error';\n\nexport class SimpleMessageError extends Error {\n message: string;\n\n constructor(message: string = DEFAULT_ERROR_MESSAGE) {\n super();\n this.message = message;\n }\n}\n","export const FEATURE_TAGS_STORAGE_KEY = 'gfknewron-feature-toggle';\nexport const FEATURE_TAGS_SEPARATOR = ',';\n\nconst makeCamelCase = (str: string) => {\n return str.replace(/[-_]([a-z])/g, g => g[1].toUpperCase());\n};\n\nexport const readFeatureTags = () => {\n const featureTagsString = localStorage.getItem(FEATURE_TAGS_STORAGE_KEY);\n const featureTags = featureTagsString ? featureTagsString.split(FEATURE_TAGS_SEPARATOR).map(tag => tag.trim()) : [];\n return featureTags;\n};\n\nexport const hasFeatureTag = (flag: string) => {\n const featureTags = readFeatureTags();\n return featureTags.includes(flag);\n};\n\nexport const getFeatureTags = () => {\n const featureTags = readFeatureTags();\n return featureTags.reduce((tags, tag) => {\n tags[makeCamelCase(tag)] = true;\n return tags;\n }, {});\n};\n","import { readFeatureTags } from '../tools/featureToggle/utils';\n\nexport async function getFeatureFlagHeaders() {\n const flagsStorage = readFeatureTags();\n\n if (flagsStorage) {\n return { 'Gfk-Flags': flagsStorage.join(',') };\n }\n}\n","import { PageDsl, Params, Content, PageContext, MenuItem, ModalDsl, ModalContext } from '../types';\nimport axios from 'axios';\nimport { authentication } from '@ecosystem/newron-client-lib';\nimport { clientToImpersonate } from './impersonate';\nimport { SimpleMessageError } from '../design/error/simpleMessageError';\nimport { DEFAULT_ERROR_MESSAGE } from '../common/constants/error';\nimport { getFeatureFlagHeaders } from './featureFlags';\n\naxios.defaults.headers.common['Accept'] = 'application/json';\n\nexport type ContextValues = Record<string, string[]>;\n\nasync function getPageDsl(url: string, context: PageContext): Promise<PageDsl> {\n const token = await authentication.getAccessToken();\n\n try {\n const response = await axios.post<PageDsl>(url, context, {\n headers: {\n Authorization: `Bearer ${token}`,\n ...(await clientToImpersonate()),\n ...(await getFeatureFlagHeaders()),\n },\n });\n\n if (!response.data) {\n throw new SimpleMessageError(DEFAULT_ERROR_MESSAGE);\n }\n return response.data;\n } catch (err) {\n throw new SimpleMessageError(err.response?.data ?? DEFAULT_ERROR_MESSAGE);\n }\n}\n\nasync function getModalDsl(url: string, context: ModalContext): Promise<ModalDsl> {\n const token = await authentication.getAccessToken();\n\n try {\n const { data } = await axios.post<ModalDsl>(url, context, {\n headers: {\n Authorization: `Bearer ${token}`,\n ...(await clientToImpersonate()),\n ...(await getFeatureFlagHeaders()),\n },\n });\n return data;\n } catch (err) {\n throw new SimpleMessageError(err?.response?.data || DEFAULT_ERROR_MESSAGE);\n }\n}\n\nasync function getComponentContents(url: string, contentParams: Params = {}): Promise<Content[]> {\n const token = await authentication.getAccessToken();\n\n try {\n const search = new URLSearchParams();\n Object.keys(contentParams).forEach(name => {\n const values = contentParams[name];\n values.forEach(value => {\n search.append(name, value);\n });\n });\n const response = await axios.get<Content[]>(url, {\n headers: {\n Authorization: `Bearer ${token}`,\n ...(await clientToImpersonate()),\n ...(await getFeatureFlagHeaders()),\n },\n params: search,\n });\n if (!response.data) {\n throw new SimpleMessageError(DEFAULT_ERROR_MESSAGE);\n }\n return response.data;\n } catch (err) {\n throw new SimpleMessageError(err?.response?.data || DEFAULT_ERROR_MESSAGE);\n }\n}\n\nasync function getMenuItems(url: string, params: Params): Promise<MenuItem[]> {\n const token = await authentication.getAccessToken();\n\n try {\n const search = new URLSearchParams();\n Object.keys(params).forEach(name => {\n const values = params[name];\n values.forEach(value => {\n search.append(name, value);\n });\n });\n\n const { data } = await axios.get<MenuItem[]>(url, {\n headers: {\n Authorization: `Bearer ${token}`,\n ...(await clientToImpersonate()),\n ...(await getFeatureFlagHeaders()),\n },\n params: search,\n });\n\n return data;\n } catch (err) {\n throw new SimpleMessageError(err?.response?.data || DEFAULT_ERROR_MESSAGE);\n }\n}\n\nexport const pageClient = {\n getPageDsl,\n getModalDsl,\n getComponentContents,\n getMenuItems,\n};\n","import { authentication } from '@ecosystem/newron-client-lib';\nimport { DataResults, HTTPMethod, Params } from '../types';\nimport axios from 'axios';\nimport { clientToImpersonate } from './impersonate';\nimport { SimpleMessageError } from '../design/error/simpleMessageError';\nimport { DEFAULT_SECTION_ERROR_MESSAGE } from '../common/constants/error';\nimport { ProviderCollectionProps } from '../data/types';\nimport { getFeatureFlagHeaders } from './featureFlags';\n\naxios.defaults.headers.common['Accept'] = 'application/json';\n\nasync function getData(\n url: string,\n params: Params,\n requestId: string,\n requestMethod: HTTPMethod = HTTPMethod.GET,\n collection?: ProviderCollectionProps\n): Promise<DataResults | null> {\n const token = await authentication.getAccessToken();\n\n try {\n const response = await request(token, requestId, requestMethod, url, params, collection);\n\n if (!response.data) {\n throw new SimpleMessageError(DEFAULT_SECTION_ERROR_MESSAGE);\n }\n return response.data;\n } catch (err) {\n throw new SimpleMessageError(err?.response?.data || DEFAULT_SECTION_ERROR_MESSAGE);\n }\n}\n\nconst request = async (\n token: string,\n requestId: string,\n requestMethod: HTTPMethod,\n url: string,\n params: Params,\n collection?: ProviderCollectionProps\n) => {\n const headers = {\n Authorization: `Bearer ${token}`,\n ...(await clientToImpersonate(collection)),\n ...(await getFeatureFlagHeaders()),\n };\n\n const paramsWithRequestId: Params = { ...params, requestId: [requestId] };\n\n if (requestMethod === HTTPMethod.POST) {\n return await axios.post<DataResults>(url, paramsWithRequestId, {\n headers,\n });\n } else {\n const search = prepareURLParams(paramsWithRequestId);\n return await axios.get<DataResults>(url, {\n headers,\n params: search,\n });\n }\n};\n\nconst prepareURLParams = (params: Params) => {\n const search = new URLSearchParams();\n Object.keys(params).forEach(name => {\n const values = params[name];\n values.forEach(value => {\n search.append(name, value);\n });\n });\n return search;\n};\n\nexport const dataClient = {\n getData,\n};\n","import { authentication } from '@ecosystem/newron-client-lib';\nimport axios from 'axios';\nimport { Context, Entity, Params } from '../types';\nimport { clientToImpersonate } from './impersonate';\nimport { SimpleMessageError } from '../design/error/simpleMessageError';\nimport { DEFAULT_ERROR_MESSAGE } from '../common/constants/error';\nimport { getFeatureFlagHeaders } from './featureFlags';\n\nasync function getContext(url: string, params: Params): Promise<Context> {\n const token = await authentication.getAccessToken();\n try {\n const search = new URLSearchParams();\n Object.keys(params).forEach(name => {\n const values = params[name];\n values?.forEach(value => {\n search.append(name, value);\n });\n });\n\n const response = await axios.post<Context>(url, params, {\n headers: {\n Authorization: `Bearer ${token}`,\n ...(await clientToImpersonate()),\n ...(await getFeatureFlagHeaders()),\n },\n });\n if (!response.data) {\n throw new SimpleMessageError();\n }\n return response.data;\n } catch (err) {\n if (axios.isAxiosError(err)) {\n throw new SimpleMessageError(err.response?.data);\n }\n throw new SimpleMessageError();\n }\n}\n\nasync function getContextSettingOptions(url: string, params: Params): Promise<(Entity | string)[]> {\n const token = await authentication.getAccessToken();\n try {\n const search = new URLSearchParams();\n Object.keys(params).forEach(name => {\n const values = params[name];\n values?.forEach(value => {\n search.append(name, value);\n });\n });\n\n const storage = JSON.parse(localStorage.getItem('impersonation'));\n if (storage && authentication.getUser().sub.startsWith('oauth2|gfk-aad')) {\n search.append('client_id', storage['client_id']);\n search.append('client_user_group_ids', storage['client_user_group_ids']);\n }\n\n const { data } = await axios.get<(Entity | string)[]>(url, {\n headers: {\n Authorization: `Bearer ${token}`,\n ...(await clientToImpersonate()),\n ...(await getFeatureFlagHeaders()),\n },\n params: search,\n });\n return data;\n } catch (err) {\n throw new SimpleMessageError(err?.response?.data || DEFAULT_ERROR_MESSAGE);\n }\n}\n\nexport const contextClient = {\n getContext,\n getContextSettingOptions,\n};\n","import { authentication } from '@ecosystem/newron-client-lib';\nimport axios from 'axios';\nimport { clientToImpersonate } from './impersonate';\nimport { SimpleMessageError } from '../design/error/simpleMessageError';\n\nconst USERS_API_URL = '/api/users-api/v1/users';\n\ntype Response = {\n // If user is member of user groups that is superset of user groups current client user is part of\n // E.g. user A has groups [A,B]; user B has groups [A,B,C]; user C has groups [A,C] => User B has same access; User C not\n sameAccessUsers: User[];\n\n // Other users of the same client\n otherClientUsers: User[];\n};\n\ntype User = {\n userId: string;\n email: string;\n givenName: string;\n familyName: string;\n};\n\nconst DEFAULT_ERROR_MESSAGE = 'Failed to load client users';\n\nasync function getUsersByAccess(): Promise<Response> {\n const token = await authentication.getAccessToken();\n try {\n const response = await axios.get<Response>(`${USERS_API_URL}/users-by-access`, {\n headers: {\n Authorization: `Bearer ${token}`,\n ...(await clientToImpersonate()),\n },\n });\n if (!response.data) {\n throw new SimpleMessageError(DEFAULT_ERROR_MESSAGE);\n }\n return response.data;\n } catch (err) {\n throw new SimpleMessageError(err?.response?.data || DEFAULT_ERROR_MESSAGE);\n }\n}\n\nasync function getSameAccessUsers(): Promise<User[]> {\n const usersByAccess = await getUsersByAccess();\n return usersByAccess.sameAccessUsers;\n}\n\nexport const userClient = {\n getSameAccessUsers,\n};\n","import { useCallback, useEffect, useRef } from 'react';\n\nexport function useIsMounted() {\n const isMounted = useRef<boolean>(false);\n\n useEffect(() => {\n isMounted.current = true;\n\n return () => {\n isMounted.current = false;\n };\n }, []);\n\n return useCallback(() => isMounted.current, []);\n}\n","export const deepEqual = (obj1: Object, obj2: Object) => {\n if (obj1 === obj2) return true;\n\n // Handle NaN\n if (typeof obj1 === 'number' && typeof obj2 === 'number' && isNaN(obj1) && isNaN(obj2)) {\n return true;\n }\n\n if (typeof obj1 !== 'object' || obj1 === null || typeof obj2 !== 'object' || obj2 === null) {\n return false;\n }\n\n if (Array.isArray(obj1) && Array.isArray(obj2)) {\n if (obj1.length !== obj2.length) return false;\n\n for (let i = 0; i < obj1.length; i++) {\n if (!deepEqual(obj1[i], obj2[i])) {\n return false;\n }\n }\n return true;\n }\n\n if (Array.isArray(obj1) !== Array.isArray(obj2)) {\n return false;\n }\n\n const keys1 = Reflect.ownKeys(obj1);\n const keys2 = Reflect.ownKeys(obj2);\n\n if (keys1.length !== keys2.length) return false;\n\n for (let key of keys1) {\n if (!keys2.includes(key) || !deepEqual(obj1[key], obj2[key])) {\n return false;\n }\n }\n\n return true;\n};\n\n/**\n * Groups the elements of an array according to the string values returned by the key function. The returned object has separate properties for each group, containing arrays with the elements in the group.\n * Same functionality as the new Object.groupBy()\n * @param arr\n * @param fn\n * @returns\n */\nexport const groupBy = <T>(arr: T[], keyFn: (item: T) => string): Record<string, T[]> => {\n return arr.reduce((groups, val) => {\n const key = keyFn(val);\n groups[key] = groups[key] ?? [];\n groups[key].push(val);\n return groups;\n }, {});\n};\n","import { FilterTrayTabId } from '@ecosystem/newron-design-system/build/exports/containers';\nimport { deepEqual } from '../tools/object';\nimport { Context, Entity, GenericWarning, ModalDsl, PageDsl } from '../types';\nimport { CorePageAction } from './actions';\nimport { DataInfo, PageInfo } from './types';\nimport { TrayType } from '../types/content/custom.types';\n\ntype ContextState = {\n settings: Record<string, Entity[]>;\n filters: Record<string, Entity[]>;\n};\n\nexport type CorePageState = {\n pageStamp: number;\n contextState?: ContextState;\n contextLoading?: boolean;\n pendingContextState?: ContextState;\n pageExpired: boolean;\n page?: PageInfo;\n data?: DataInfo;\n dsl?: PageDsl;\n error?: string;\n dslLoading?: boolean;\n dataLoading?: boolean;\n modalDsl?: ModalDsl;\n globalWarnings: GenericWarning[];\n trayType?: TrayType;\n customizationTrayTabId?: FilterTrayTabId;\n isFilterTray?: boolean;\n};\n\nfunction initialState(): CorePageState {\n return {\n pageStamp: -1,\n pageExpired: true,\n globalWarnings: [],\n };\n}\n\nfunction reducer(state: CorePageState, action: CorePageAction): CorePageState {\n const { type, payload } = action;\n\n switch (type) {\n case 'SET_CONTEXT_LOADING':\n return {\n ...state,\n contextLoading: payload,\n };\n case 'SET_CONTEXT_STATE':\n return setContextState(state, payload);\n case 'SET_PAGE':\n return setPageState(state, payload);\n case 'SET_DATA':\n return setDataInfo(state, payload);\n case 'SET_DSL':\n return setPageDsl(state, payload);\n case 'SET_GLOBAL_WARNINGS':\n return setGlobalWarnings(state, payload);\n case 'RESET_GLOBAL_WARNINGS':\n return resetGlobalWarnings(state, true);\n case 'SET_DATA_LOADING':\n return setIsDataLoading(state, payload);\n case 'START_DSL_FETCH':\n return {\n ...state,\n dslLoading: true,\n error: undefined,\n };\n case 'SET_ERROR':\n return {\n ...state,\n dslLoading: false,\n error: payload,\n };\n case 'EXPIRE_PAGE':\n return {\n ...state,\n pageExpired: true,\n error: undefined,\n pendingContextState: state.contextState,\n };\n case 'SET_MODAL_DSL':\n return {\n ...state,\n modalDsl: payload,\n };\n case 'SET_CUSTOMIZATION_TRAY_TYPE':\n return {\n ...state,\n trayType: action.payload,\n };\n case 'SET_CUSTOMIZATION_TRAY_TAB_ID':\n return {\n ...state,\n customizationTrayTabId: payload,\n };\n case 'SET_IS_FILTER_TRAY':\n return {\n ...state,\n isFilterTray: payload,\n };\n }\n}\n\nfunction getUniqueWarnings(allWarnings: GenericWarning[]) {\n const keySplitter = '__key__';\n const getWarningKey = (warning: GenericWarning) => `${warning.message}${keySplitter}${warning.level}`;\n\n const uniqueMessageLevelCombos = new Set(allWarnings.map(getWarningKey));\n\n return Array.from(uniqueMessageLevelCombos).map(key => {\n const [message, level] = key.split(keySplitter);\n return allWarnings.find(warning => warning.message === message && warning.level === level);\n });\n}\n\nfunction resetGlobalWarnings(state: CorePageState, resetWarnings: boolean) {\n if (resetWarnings) {\n return { ...state, globalWarnings: [] };\n }\n\n return { ...state };\n}\n\nfunction setGlobalWarnings(state: CorePageState, globalWarnings: GenericWarning[]) {\n if (!globalWarnings.length) {\n return { ...state };\n }\n\n const allWarnings = [...state.globalWarnings, ...globalWarnings];\n\n return {\n ...state,\n globalWarnings: getUniqueWarnings(allWarnings),\n };\n}\n\nfunction setIsDataLoading(state: CorePageState, payload: boolean): CorePageState {\n return {\n ...state,\n dataLoading: payload,\n };\n}\n\nfunction setPageDsl(state: CorePageState, dsl: PageDsl): CorePageState {\n return {\n ...state,\n pageStamp: Date.now(),\n dsl: dsl,\n dslLoading: false,\n error: undefined,\n pageExpired: false,\n contextState: state.pendingContextState,\n pendingContextState: undefined,\n };\n}\n\nfunction setDataInfo(state: CorePageState, info: DataInfo): CorePageState {\n if (deepEqual(state.data, info)) {\n return state;\n }\n\n return {\n ...state,\n data: info,\n };\n}\n\nfunction setPageState(state: CorePageState, info: PageInfo): CorePageState {\n if (deepEqual(state.page, info)) {\n return state;\n }\n\n return {\n ...state,\n page: info,\n pendingContextState: state.contextState,\n error: undefined,\n pageExpired: true,\n };\n}\n\nfunction setContextState(state: CorePageState, context: Context): CorePageState {\n const { settings, filters } = context;\n const contextState: {\n settings: Record<string, Entity[]>;\n filters: Record<string, Entity[]>;\n } = {\n settings: {\n ...{},\n ...settings.values,\n },\n filters: filters?.values ? { ...{}, ...filters.values } : {},\n };\n\n if (deepEqual(state.contextState, contextState)) {\n return state;\n }\n\n return {\n ...{},\n ...state,\n pendingContextState: contextState,\n error: undefined,\n pageExpired: true,\n };\n}\n\nexport { initialState, reducer };\n","import { authentication } from '@ecosystem/newron-client-lib';\nimport { CustomFeature, Entity } from '../types';\n\nexport const CACHE_SUFFIX = '_context_values_cache';\n\ntype ValueSet = Record<string, Entity[]>;\n\nexport async function store(\n name: string,\n settings: ValueSet,\n filters?: ValueSet,\n customFeature?: CustomFeature\n): Promise<void> {\n const user = authentication.getUser();\n if (!user) {\n return;\n }\n\n localStorage.setItem(\n `${user.sub}:${name}${CACHE_SUFFIX}`,\n JSON.stringify({\n settings,\n filters,\n customFeature,\n })\n );\n}\n\nexport async function retrieve(\n name: string\n): Promise<{ settings: ValueSet; filters?: ValueSet; customFeature?: CustomFeature } | undefined> {\n const user = authentication.getUser();\n if (!user) {\n return;\n }\n\n const str = localStorage.getItem(`${user.sub}:${name}${CACHE_SUFFIX}`);\n if (!str) {\n return;\n }\n\n return JSON.parse(str);\n}\n","import { Proposition } from '@ecosystem/newron-client-collections';\nimport { Context } from '../types';\n\nexport const getParamsForContext = (context: Context) => {\n const params = {};\n const { settings, filters } = context;\n Object.keys(settings?.values || {}).forEach(name => {\n const values = settings.values[name];\n if (values) {\n params[name] = values.map(e => `${e.value}|${e.label}`);\n }\n });\n Object.keys(filters?.values || {}).forEach(name => {\n const values = filters.values[name];\n if (values) {\n params[`f:${name}`] = values.map(e => `${e.value}|${e.label}`);\n }\n });\n return params;\n};\n\nexport const getPropositionFromContext = (context: Context): Proposition => {\n const prop = context.settings.values.proposition?.[0]?.value;\n switch (prop) {\n case Proposition.Market:\n return Proposition.Market;\n case Proposition.DistributionPanel:\n return Proposition.DistributionPanel;\n default:\n return Proposition.Market;\n }\n};\n","import { logger } from '@ecosystem/newron-client-lib';\nimport { contextClient } from '../client';\nimport {\n Context,\n CustomFeature,\n CustomFeatureContext,\n Entity,\n FiltersValues,\n Params,\n SettingDefinition,\n SettingsValues,\n} from '../types';\nimport { store, retrieve } from './cache';\nimport { getParamsForContext } from './utils';\nimport { deepEqual } from '../tools/object';\nimport { ContextSetting } from './edit.provider';\n\ntype SettingsSubscriber = (context: Context) => void;\ntype LoadingSubscriber = (flag: boolean) => void;\ntype EditSubscriber = (setting: SettingDefinition) => void;\ntype ErrorSubscriber = (message: string) => void;\n\n/**\n * Manages the various contexts used by propositions on the platform\n */\nexport class ContextManager {\n private static _instance: ContextManager;\n private settingsSubscribers: SettingsSubscriber[] = [];\n private loadingSubscribers: LoadingSubscriber[] = [];\n private editSubscribers: EditSubscriber[] = [];\n private errorSubscribers: ErrorSubscriber[] = [];\n private contexts: Record<string, Context> = {};\n private contextUrls: Record<string, string> = {};\n private active: string;\n private excludeFiltersForActive: boolean;\n private excludePriceFilterForActive: boolean;\n\n private constructor() {}\n\n /**\n * Registers a new context with the manager and makes it the active context\n * @param name identifier for the context\n * @param url url to fetch context details from\n */\n async registerContext(\n name: string,\n url: string,\n excludeFilters?: boolean,\n excludePriceFilter?: boolean,\n collectionsContext?: {\n settings: SettingsValues;\n filters?: FiltersValues;\n customFeature?: CustomFeature;\n },\n isLiveInsight?: boolean\n ): Promise<void> {\n this.setActive(name, excludeFilters, excludePriceFilter);\n this.contextUrls[name] = url;\n\n const cached = collectionsContext || (await retrieve(name));\n if (cached) {\n const { settings, filters, customFeature } = cached;\n this.contexts[name] = {\n settings: {\n definitions: [],\n values: settings,\n },\n filters: !filters\n ? undefined\n : {\n sections: [],\n values: filters,\n },\n customFeature: customFeature,\n };\n }\n\n const isCollection = !!collectionsContext;\n this.fetchContext(isLiveInsight, isCollection);\n }\n\n /**\n * Gets a context by its name\n * @param name the named Context if found\n * @returns a Context object or undefined if not found\n */\n getByName(name: string): Context | undefined {\n return this.contexts[name];\n }\n\n /**\n * Gets the currently active context\n * @returns the active Context or undefined if there isn't one\n */\n get(): Context | undefined {\n const context = this.contexts[this.active];\n if (!context) {\n return;\n }\n const copyContext = { ...context };\n if (this.excludePriceFilterForActive) {\n this.removePriceFilterFromContext(copyContext);\n return {\n settings: copyContext.settings,\n filters: this.excludeFiltersForActive ? undefined : copyContext.filters,\n customFeature: copyContext.customFeature,\n };\n }\n\n return {\n settings: context.settings,\n filters: this.excludeFiltersForActive ? undefined : context.filters,\n customFeature: copyContext.customFeature,\n };\n }\n\n /**\n * Sets the active context\n * @param name identifier of the context to set as the active context\n */\n setActive(name: string, excludeFilters: boolean = false, excludePriceFilter: boolean = false) {\n this.active = name;\n this.excludeFiltersForActive = excludeFilters;\n this.excludePriceFilterForActive = excludePriceFilter;\n this.notifySettings();\n }\n\n setSettingAsRequiresEdit(name: string) {\n const context = this.get();\n if (!context) {\n return;\n }\n\n const {\n settings: { definitions },\n } = context;\n const toEdit = definitions.find(def => def.name === name);\n\n if (toEdit) {\n this.editSubscribers.forEach(sub => sub(toEdit));\n }\n }\n\n /**\n * Returns the definitions and values for settings on the active context. This function\n * will call the service to get options for any named setting that needs it\n * @param names names of the settings to get\n * @returns\n */\n async getSettings(names: string[]): Promise<Record<string, ContextSetting>> {\n const context = this.get();\n if (!context) {\n throw new Error('no active context');\n }\n\n const {\n settings: { definitions, values },\n } = context;\n\n const defsToGet: SettingDefinition[] = names\n .map(name => definitions.find(def => def.name === name))\n .filter(def => def !== undefined);\n\n if (defsToGet.some(def => !def.selection.options && def.selection.optionsUrl)) {\n const params = this.buildParams();\n const requests: Promise<(Entity | string)[]>[] = [];\n const defNames: string[] = [];\n defsToGet.forEach(def => {\n const {\n name,\n selection: { options, optionsUrl },\n } = def;\n if (optionsUrl && !options) {\n requests.push(\n contextClient.getContextSettingOptions(`${this.contextUrls[this.active]}/${optionsUrl}`, params)\n );\n defNames.push(name);\n }\n });\n const results = await Promise.all(requests);\n results.forEach((options, idx) => {\n const defName = defNames[idx];\n const def = definitions.find(def => def.name === defName);\n def.selection.options = options;\n });\n }\n\n const settings: Record<string, ContextSetting> = {};\n defsToGet.forEach(def => {\n settings[def.name] = {\n definition: {\n ...{},\n ...def,\n },\n values: values[def.name] || [],\n };\n });\n\n return settings;\n }\n\n /**\n * Subscribe to changes in settings/filters definitions and values for the active context\n * @param subscriber callback\n */\n subscribeToSettingsChanges(subscriber: SettingsSubscriber) {\n this.settingsSubscribers.push(subscriber);\n const context = this.get();\n if (context) {\n subscriber({\n ...{},\n ...context,\n });\n }\n }\n\n /**\n *\n * @param subscriber callback you subscribed with\n */\n unsubscribeFromSettingsChanges(subscriber: SettingsSubscriber) {\n this.settingsSubscribers = this.settingsSubscribers.filter(s => s !== subscriber);\n }\n\n subscribeToLoading(subscriber: LoadingSubscriber) {\n this.loadingSubscribers.push(subscriber);\n }\n\n unsubscribeFromLoading(subscriber: LoadingSubscriber) {\n this.loadingSubscribers = this.loadingSubscribers.filter(s => s !== subscriber);\n }\n\n subscribeToEditRequired(subscriber: EditSubscriber) {\n this.editSubscribers.push(subscriber);\n }\n\n unsubscribeFromEditRequired(subscriber: EditSubscriber) {\n this.editSubscribers = this.editSubscribers.filter(s => s !== subscriber);\n }\n\n subscribeToError(subscriber: ErrorSubscriber) {\n this.errorSubscribers.push(subscriber);\n }\n\n unsubscribeFromError(subscriber: ErrorSubscriber) {\n this.errorSubscribers = this.errorSubscribers.filter(s => s !== subscriber);\n }\n\n /**\n * Updates values for settings the active context. Once the updates are applied, the url\n * for the updated context will be called to refetch the context\n * @param updates updated settings values\n * @returns\n */\n updateSettingsValues(updates: Record<string, Entity[]>, isLiveView?: boolean) {\n const context = this.get();\n if (!context) {\n logger.warning('no active context');\n return;\n }\n\n const newValues = {\n ...{},\n ...context.settings.values,\n ...updates,\n };\n if (!isLiveView && deepEqual(context.settings.values, newValues)) {\n return;\n }\n context.settings.values = newValues;\n this.fetchContext(isLiveView);\n }\n\n updateCustomFeatureValues(updates: CustomFeatureContext) {\n let context = this.get();\n if (!context) {\n logger.warning('no active context');\n return;\n }\n\n const updatedCustomFeature = {\n ...context.customFeature,\n ...updates.customFeature,\n };\n\n const newValues = {\n ...context,\n customFeature: updatedCustomFeature,\n };\n context = newValues;\n this.contexts[this.active] = context;\n store(this.active, context.settings.values, context.filters?.values, context.customFeature);\n this.notifySettings();\n }\n\n /**\n * Updates values for filters within the active context\n * @param updates updated filters values\n * @returns\n */\n updateFilterValues(updates: FiltersValues) {\n const context = this.get();\n if (!context) {\n logger.warning('no active context');\n return;\n }\n const newValues: FiltersValues = {\n ...{},\n ...context.filters.values,\n ...updates,\n };\n const toRemove: string[] = [];\n Object.keys(newValues).forEach(key => {\n if (newValues[key].length === 0) {\n toRemove.push(key);\n }\n });\n toRemove.forEach(key => {\n delete newValues[key];\n });\n context.filters.values = newValues;\n store(this.active, context.settings.values, context.filters?.values);\n this.notifySettings();\n }\n\n clearFilterValues() {\n const context = this.get();\n if (!context) {\n logger.warning('no active context');\n return;\n }\n context.filters.values = {};\n store(this.active, context.settings.values, context.filters?.values);\n this.notifySettings();\n }\n\n set(newContext: Context) {\n const context = this.get();\n if (!context) {\n return;\n }\n\n this.contexts[this.active] = { ...newContext };\n store(this.active, newContext.settings.values, newContext.filters?.values);\n this.notifySettings();\n }\n\n /**\n * Notifies all subscribes of the settings in the active context\n */\n private notifySettings() {\n const context = this.get();\n if (!context) {\n return;\n }\n this.settingsSubscribers.forEach(sub =>\n sub({\n ...{},\n ...context,\n })\n );\n }\n\n private notifyLoading(isLoading: boolean) {\n this.loadingSubscribers.forEach(sub => sub(isLoading));\n }\n\n private notifyError(error: string) {\n this.errorSubscribers.forEach(sub => sub(error));\n }\n /**\n * Builds and returns a params object containing the values for settings and filters\n * within a context\n * @param name identifier for the context to build from\n * @returns a Params object\n */\n private buildParams(): Params {\n const params: Params = {};\n const context = this.get();\n if (!context) {\n return params;\n }\n const { settings, filters } = context;\n Object.keys(settings.values).forEach(field => {\n params[field] = settings.values[field].map(e => e.value);\n });\n if (filters) {\n Object.keys(filters.values).forEach(field => {\n params[field] = filters.values[field].map(e => e.value);\n });\n }\n return params;\n }\n\n private removePriceFilterFromContext(context: Context) {\n context.filters.sections.forEach(section => {\n if (section.ungrouped?.definitions) {\n section.ungrouped.definitions = section.ungrouped.definitions.filter(def => def.name !== 'price');\n }\n });\n if (context.filters.values['price']) {\n delete context.filters.values['price'];\n }\n }\n\n /**\n * Fetches a new instance of the active context, stores it and notifies any\n * subscribers to it\n */\n private fetchContext(isLiveInsight: boolean = false, isCollection: boolean = false) {\n let params: Params = {};\n const localContext = this.contexts[this.active];\n if (localContext) {\n params = getParamsForContext(localContext);\n }\n this.notifyLoading(true);\n contextClient\n .getContext(this.contextUrls[this.active], {\n ...params,\n isLive: isLiveInsight ? [String(true)] : undefined,\n })\n .then(context => {\n // if it's not a collection, store the context\n if (!isCollection) {\n this.contexts[this.active] = { customFeature: localContext?.customFeature, ...context };\n store(this.active, context.settings.values, context.filters?.values, localContext?.customFeature);\n }\n this.notifySettings();\n })\n .catch(err => {\n console.error('CAUGHT ERROR ', err);\n this.notifyError(err.message);\n })\n .finally(() => {\n this.notifyLoading(false);\n });\n }\n\n /**\n * instance getter for the singleton ContextManager\n * @returns the single instance of ContextManager\n */\n static getInstance(): ContextManager {\n if (!ContextManager._instance) {\n ContextManager._instance = new ContextManager();\n }\n return ContextManager._instance;\n }\n}\n","import { authentication, logger } from '@ecosystem/newron-client-lib';\nimport axios from 'axios';\nimport { deepEqual } from '../tools/object';\nimport { Preference, ValueSet } from '../types';\nimport { SharePermissionsBody, UserAccess } from '../types/content/custom.types';\n\nconst PREFERENCE_API_URL = '/preference-filters/v1/preferences';\nconst PRODUCT = 'newron';\n\nexport class PreferenceClient {\n private static _instance: PreferenceClient;\n private preferenceCache: Record<string, Preference> = {};\n private uniquePreferenceCache: Record<string, Preference[]> = {};\n\n private constructor() {}\n\n static getInstance(): PreferenceClient {\n if (!PreferenceClient._instance) {\n PreferenceClient._instance = new PreferenceClient();\n }\n return PreferenceClient._instance;\n }\n\n async retrieve(name: string): Promise<ValueSet | undefined> {\n try {\n // return from cache if available\n if (this.preferenceCache[name]) {\n return this.preferenceCache[name].data;\n }\n const token = await authentication.getAccessToken();\n const { data: savedPreferences } = await axios.get<Preference[]>(`${PREFERENCE_API_URL}/${PRODUCT}/${name}`, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n if (savedPreferences.length === 0) {\n return undefined;\n } else {\n const savedPreference = savedPreferences?.[0];\n this.preferenceCache[name] = { ...savedPreference, data: { ...savedPreference.data } };\n return savedPreference.data;\n }\n } catch (err) {\n logger.error(new Error(err), {\n info: 'Failed to retrieve preference data from the server. Using default preferences',\n });\n }\n }\n\n async store(name: string, preference: ValueSet): Promise<ValueSet> {\n const oldPreference = this.preferenceCache[name];\n if (oldPreference && deepEqual(oldPreference.data, preference)) {\n return;\n }\n\n if (Object.keys(preference).length === 0) {\n await this.delete(name, oldPreference.id);\n this.preferenceCache[name] = undefined;\n return;\n }\n\n try {\n const token = await authentication.getAccessToken();\n const savedPreference = !oldPreference\n ? await this.createNew(name, preference, token)\n : await this.updateExisting(name, oldPreference.id, preference, token);\n this.preferenceCache[name] = { ...savedPreference, data: { ...savedPreference.data } };\n\n return savedPreference.data;\n } catch (err) {\n logger.error(new Error(err), {\n info: 'Failed to store preference data on the server. Using default preferences',\n });\n }\n }\n\n async createNew(name: string, preference: ValueSet, token: string): Promise<Preference> {\n const { data } = await axios.post<Preference>(\n `${PREFERENCE_API_URL}/${PRODUCT}/${name}`,\n { data: preference },\n {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n }\n );\n return data;\n }\n\n async updateExisting(\n name: string,\n oldPreferenceId: string,\n preference: ValueSet,\n token: string\n ): Promise<Preference> {\n const { data } = await axios.patch<Preference>(\n `${PREFERENCE_API_URL}/${PRODUCT}/${name}/${oldPreferenceId}`,\n { data: preference },\n {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n }\n );\n return data;\n }\n\n async delete(name: string, id: string): Promise<void> {\n try {\n const token = await authentication.getAccessToken();\n await axios.delete(`${PREFERENCE_API_URL}/${PRODUCT}/${name}/${id}`, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n this.uniquePreferenceCache[name] = this.uniquePreferenceCache[name]?.filter((pref: Preference) => pref.id !== id);\n } catch (err) {\n logger.error(new Error(err), {\n info: 'Failed to delete preference data on the server. Using default preferences',\n });\n }\n }\n\n /**\n * Creates a new unique preference within the given name, with allowMultiple set to true\n * @param name the name\n * @param preference the preference to store\n * @returns the stored preference\n */\n async createNewUnique(name: string, preference: ValueSet): Promise<Preference> {\n try {\n const token = await authentication.getAccessToken();\n const { data } = await axios.post<Preference>(\n `${PREFERENCE_API_URL}/${PRODUCT}/${name}?allowMultiple=true`,\n { data: preference },\n {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n }\n );\n\n this.uniquePreferenceCache[name] = [...this.uniquePreferenceCache[name], data];\n\n return data;\n } catch (err) {\n logger.error(new Error(err), {\n info: 'Failed to store preference data on the server.',\n });\n }\n }\n\n /**\n * Gets all the unique preferences within the given name\n * @param name the name\n * @returns list of stored preferences\n */\n async getAllUnique(name: string): Promise<Preference[] | undefined> {\n if (this.uniquePreferenceCache[name]) {\n return this.uniquePreferenceCache[name];\n }\n\n try {\n const token = await authentication.getAccessToken();\n const { data: savedPreferences } = await axios.get<Preference[]>(`${PREFERENCE_API_URL}/${PRODUCT}/${name}`, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n\n this.uniquePreferenceCache[name] = savedPreferences;\n\n return savedPreferences;\n } catch (err) {\n logger.error(new Error(err), {\n info: 'Failed to retrieve preference data from the server.',\n });\n }\n }\n\n /**\n * Function to get permissions for a preference\n * @param name preference type name\n * @param preferenceId preference id\n * @returns list of users with their access level\n */\n async getPermissions(name: string, preferenceId: string): Promise<UserAccess[]> {\n const token = await authentication.getAccessToken();\n\n const { data } = await axios.get<UserAccess[]>(\n `${PREFERENCE_API_URL}/${PRODUCT}/${name}/${preferenceId}/permissions`,\n {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n }\n );\n return data;\n }\n\n /**\n * Function to add permissions to a preference\n * @param name preference type name\n * @param preferenceId preference id\n * @param permissions list of users with their access level to be sent as body, owner must be included\n * @returns returns OK if successful\n */\n async addPermissions(name: string, preferenceId: string, permissions: SharePermissionsBody[]): Promise<string> {\n const token = await authentication.getAccessToken();\n\n const { data } = await axios.patch<string>(\n `${PREFERENCE_API_URL}/${PRODUCT}/${name}/${preferenceId}/permissions`,\n permissions,\n {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n }\n );\n return data;\n }\n\n /**\n * Function to remove user from a preference\n * @param name preference type name\n * @param preferenceId preference id\n * @param userId user id to be removed\n */\n async deletePermissions(name: string, preferenceId: string, userId: string): Promise<void> {\n try {\n const token = await authentication.getAccessToken();\n await axios.delete(`${PREFERENCE_API_URL}/${PRODUCT}/${name}/${preferenceId}/permissions/${userId}`, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n } catch (err) {\n logger.error(new Error(err), {\n info: 'Failed to unshare.',\n });\n }\n }\n}\n","import { Params, SettingsPayload } from '../types';\nimport { PreferenceClient } from '../client/preference.client';\nimport { deepEqual } from '../tools/object';\nimport { PageInfo } from './types';\n\nexport type PageSettings = Record<string, Params>;\nconst PAGE_KEY = '__page__';\nconst PAGE_SETTINGS_PRE_CACHE = 'settings_pre_cache';\nconst CACHE_SUFFIX = '_page_values';\n\nexport class PageSettingsManager {\n private static _instance: PageSettingsManager;\n private pages: Record<string, PageSettings> = {};\n private active: string;\n private prevPage: string;\n\n private constructor() {}\n\n async registerPage(name: string, syncSettings: PageInfo['syncSettings']): Promise<void> {\n this.prevPage = this.active;\n\n if (!this.pages[name]) {\n const cached = await PreferenceClient.getInstance().retrieve(`${name}${CACHE_SUFFIX}`);\n if (cached) {\n this.pages[name] = cached;\n } else {\n const initValue = {\n [PAGE_KEY]: {},\n };\n await PreferenceClient.getInstance().store(`${name}${CACHE_SUFFIX}`, initValue);\n this.pages[name] = initValue;\n }\n }\n this.active = name;\n\n await this.syncPageSettings(name, syncSettings);\n\n const preCached = this.getPreCachedSettings();\n if (preCached) {\n const storedSettings = this.pages[name];\n const combinedSettings: PageSettings = {};\n Object.keys(storedSettings).forEach(key => {\n const stored = storedSettings[key];\n const cached = preCached[key] || {};\n combinedSettings[key] = {\n ...{},\n ...stored,\n ...cached,\n };\n });\n\n Object.keys(preCached).forEach(key => {\n if (!combinedSettings[key]) {\n combinedSettings[key] = preCached[key];\n }\n });\n\n this.pages[name] = combinedSettings;\n\n PreferenceClient.getInstance().store(`${name}${CACHE_SUFFIX}`, combinedSettings);\n }\n }\n\n async syncPageSettings(name: string, syncSettings: PageInfo['syncSettings']): Promise<void> {\n if (!syncSettings || !this.prevPage || this.prevPage !== syncSettings.fromPage) {\n return;\n }\n const pageSettings = this.pages[name];\n const { fromPage, components } = syncSettings;\n\n const fromPageSettings =\n this.pages[fromPage] || (await PreferenceClient.getInstance().retrieve(`${fromPage}${CACHE_SUFFIX}`));\n if (!fromPageSettings) {\n return;\n }\n\n let settingsChanged = false;\n\n components.forEach(({ from: fromComponent, to: toComponent }) => {\n const fromComponentSettings = fromPageSettings[fromComponent.name];\n const toComponentSettings = pageSettings[toComponent.name];\n\n if (!fromComponentSettings || !toComponentSettings) return;\n\n fromComponent.settings.forEach((setting, index) => {\n if (!deepEqual(fromComponentSettings[setting], toComponentSettings[toComponent.settings[index]])) {\n toComponentSettings[toComponent.settings[index]] = fromComponentSettings[setting];\n settingsChanged = true;\n }\n });\n\n pageSettings[toComponent.name] = toComponentSettings;\n });\n\n if (settingsChanged) {\n this.pages[name] = pageSettings;\n await PreferenceClient.getInstance().store(`${name}${CACHE_SUFFIX}`, pageSettings);\n }\n }\n\n /**\n * Gets the page level settings (if they exist) for the active page\n * @returns\n */\n getPageSettings(): Params | undefined {\n const activePage = this.get();\n return activePage?.[PAGE_KEY];\n }\n\n updatePageSettings(updates: Params, updateCallback?: () => void) {\n const activePage = this.get();\n if (!activePage) {\n return;\n }\n if (Object.keys(updates).length === 0) {\n return;\n }\n const existingSettings = activePage[PAGE_KEY] || {};\n const newSettings = {\n ...{},\n ...existingSettings,\n ...updates,\n };\n activePage[PAGE_KEY] = newSettings;\n if (deepEqual(existingSettings, newSettings)) {\n return;\n }\n updateCallback && updateCallback();\n PreferenceClient.getInstance().store(`${this.active}${CACHE_SUFFIX}`, activePage);\n }\n\n /**\n * Gets the settings for a component on the active page\n * @param name\n * @returns\n */\n getComponentSettings(name: string): Params | undefined {\n const activePage = this.get();\n return activePage?.[name];\n }\n\n updateComponentSettings(name: string, updates: Params, updateCallback: () => void) {\n const activePage = this.get();\n if (!activePage) {\n console.warn('no active page');\n return;\n }\n\n const existingSettings = activePage[name] || {};\n const newSettings = {\n ...{},\n ...existingSettings,\n ...updates,\n };\n const toDelete = Object.keys(newSettings).filter(key => newSettings[key] === null);\n toDelete.forEach(key => {\n delete newSettings[key];\n });\n activePage[name] = newSettings;\n\n if (deepEqual(existingSettings, newSettings)) {\n return;\n }\n updateCallback();\n PreferenceClient.getInstance().store(`${this.active}${CACHE_SUFFIX}`, activePage);\n return true;\n }\n\n /**\n * Gets all settings (page level and all components) for the active page\n * @returns\n */\n get(): PageSettings | undefined {\n return this.pages[this.active];\n }\n\n async set(name: string, newPageSettings: PageSettings) {\n this.active = name;\n this.pages[name] = { ...newPageSettings };\n await PreferenceClient.getInstance().store(`${name}${CACHE_SUFFIX}`, this.pages[name]);\n }\n\n preCacheSettings(settings: SettingsPayload) {\n sessionStorage.setItem(PAGE_SETTINGS_PRE_CACHE, JSON.stringify(settings));\n }\n\n getPreCachedSettings(): PageSettings | undefined {\n const preCachedStr = sessionStorage.getItem(PAGE_SETTINGS_PRE_CACHE);\n sessionStorage.removeItem(PAGE_SETTINGS_PRE_CACHE);\n if (!preCachedStr) {\n return;\n }\n\n const preCached = JSON.parse(preCachedStr) as SettingsPayload;\n let cachedSettings: PageSettings = {};\n if (preCached.page) {\n cachedSettings[PAGE_KEY] = preCached.page;\n }\n if (preCached.components) {\n cachedSettings = {\n ...{},\n ...preCached.components,\n };\n }\n return cachedSettings;\n }\n\n static getInstance(): PageSettingsManager {\n if (!PageSettingsManager._instance) {\n PageSettingsManager._instance = new PageSettingsManager();\n }\n return PageSettingsManager._instance;\n }\n}\n","export function escapeRegExp(str) {\n // eslint-disable-next-line no-useless-escape\n return str.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, '\\\\$1');\n}\n\nexport function makeUrl(base: string, endpoint: string): string {\n const baseHasSlash = base.endsWith('/');\n if (endpoint.startsWith('/')) {\n endpoint = endpoint.substring(1);\n }\n return `${base}${!baseHasSlash ? '/' : ''}${endpoint}`;\n}\n","import { CorePageProviderProps } from '../../page/provider';\nimport { DataOptions, Params } from '../../types';\nimport { InsightRendererProps, Proposition } from '@ecosystem/newron-client-collections';\n\nexport interface InsightContent {\n type: string;\n dataOptions: DataOptions;\n}\n\nexport interface InsightCollection\n extends Pick<InsightRendererProps<InsightData>, 'onLoaded' | 'onExportReady' | 'onError'> {}\n\nexport enum InsightCollectionDataType {\n live = 'live',\n static = 'static',\n}\n\nexport interface InsightData {\n content: InsightContent;\n paramsForData: Params;\n paramsForContext: Params;\n corePageSettings: Omit<CorePageProviderProps, 'children'>;\n componentSettings: Params;\n collection?: InsightCollection;\n dataType: InsightCollectionDataType;\n componentName?: string;\n proposition: Proposition;\n}\n","import { PageView, useRestoreSavedView } from '@ecosystem/newron-client-lib';\nimport { Context, Entity, FiltersValues, Params, SettingsValues } from '../types';\nimport { PageSettings, PageSettingsManager } from '../page/settings';\nimport { useEffect, useRef, useState } from 'react';\nimport { CorePageState } from '../page/reducer';\nimport { ContextManager } from '../context/manager';\nimport { InsightCollectionDataType } from '../content/collection/types';\n\nconst SAVED_VIEW_KEY = 'savedViewKey_marketPortfolio';\nexport type SavedViewType = { version: SavedViewVersion; dataType?: InsightCollectionDataType };\n\nexport enum SavedViewVersion {\n v0 = '0',\n v1 = '1',\n}\n\nexport type UseRestoreSavedViewV1 = SavedViewType & {\n settingValues: SettingsValues;\n filterValues: FiltersValues;\n pageSettings: Record<string, Params>;\n};\n\nexport type UseRestoreSavedViewV0 = SavedViewType & {\n context: Context;\n pageSettings: PageSettings;\n};\n\nconst clearValues = (values: Record<string, Entity[]>) => Object.fromEntries(Object.keys(values).map(key => [key, []]));\n\nexport const useSavedView = ({ page, contextLoading }: Pick<CorePageState, 'contextLoading' | 'page'>) => {\n const [restoreSavedView, setRestoreSavedView] = useState<SavedViewType>();\n const isRestoreSavedViewApplied = useRef(false);\n const [restoreLoading, setRestoreLoading] = useState(true);\n\n const savedView = window.sessionStorage.getItem(SAVED_VIEW_KEY);\n\n const isLiveView = restoreSavedView?.dataType === InsightCollectionDataType.live;\n\n useEffect(() => {\n if (!savedView && restoreLoading) {\n setRestoreLoading(false);\n }\n }, [savedView]);\n\n useEffect(() => {\n if (savedView && restoreLoading === false) {\n window.sessionStorage.removeItem(SAVED_VIEW_KEY);\n }\n }, [restoreLoading]);\n\n useRestoreSavedView((applyViewState: SavedViewType, pageView: Omit<PageView<object>, 'data'>) => {\n setRestoreSavedView({ ...applyViewState, dataType: pageView?.dataType as InsightCollectionDataType });\n });\n\n const applyViewValues = async (\n filterValues: FiltersValues,\n settingsValues: SettingsValues,\n pageSettings: PageSettings\n ) => {\n const contextManager = ContextManager.getInstance();\n const context = contextManager.get();\n\n if (context.filters) {\n const clearAllFilters = clearValues(context.filters.values);\n contextManager.updateFilterValues({ ...clearAllFilters, ...filterValues });\n }\n\n const clearAllSettings = clearValues(context.settings.values);\n contextManager.updateSettingsValues({ ...clearAllSettings, ...settingsValues }, isLiveView);\n await PageSettingsManager.getInstance().set(page.name, pageSettings);\n };\n\n const applyViewV0 = async (view: UseRestoreSavedViewV0) => {\n const {\n context: {\n filters: { values: filterValues },\n settings: { values: settingValues },\n },\n pageSettings,\n } = view;\n\n await applyViewValues(filterValues, settingValues, pageSettings);\n };\n\n const applyViewV1 = async (view: UseRestoreSavedViewV1) => {\n const { filterValues, settingValues, pageSettings } = view;\n\n await applyViewValues(filterValues, settingValues, pageSettings);\n };\n\n const applyView = async () => {\n const viewVersion = restoreSavedView.version ?? SavedViewVersion.v0;\n switch (viewVersion) {\n case SavedViewVersion.v0:\n await applyViewV0(restoreSavedView as UseRestoreSavedViewV0);\n break;\n case SavedViewVersion.v1:\n await applyViewV1(restoreSavedView as UseRestoreSavedViewV1);\n break;\n default:\n throw new Error('Unknown view version');\n }\n };\n\n useEffect(() => {\n let timeoutId;\n\n if (contextLoading === false && restoreSavedView && !isRestoreSavedViewApplied.current) {\n clearTimeout(timeoutId);\n\n applyView()\n .then(() => {\n setRestoreLoading(false);\n })\n .catch(error => {\n console.error('Error in applyView:', error);\n setRestoreLoading(false);\n });\n isRestoreSavedViewApplied.current = true;\n } else {\n clearTimeout(timeoutId);\n\n timeoutId = setTimeout(() => {\n setRestoreLoading(false);\n }, 5000);\n }\n\n return () => {\n clearTimeout(timeoutId);\n };\n }, [contextLoading, restoreSavedView]);\n\n return { restoreLoading, isLiveView };\n};\n","import { Context } from '../types';\nimport { CorePageState } from './reducer';\n\nexport const checkIfCurrencyChanged = (Context: Context, state: CorePageState) => {\n const currentCurrency = Context.settings?.values?.currency_code?.[0]?.value;\n const previousCurrency = state?.contextState?.settings?.currency_code?.[0]?.value;\n return currentCurrency && previousCurrency && currentCurrency !== previousCurrency;\n};\n","import {\n Context,\n PageDsl,\n Params,\n ModalDsl,\n GenericWarning,\n ColumnSection,\n HTTPMethod,\n FiltersValues,\n SettingsValues,\n} from '../types';\nimport React, { ReactNode, useReducer, createContext, useContext, useRef, useEffect, useState, useMemo } from 'react';\nimport { pageClient } from '../client';\nimport { useIsMounted } from '../tools';\nimport { initialState, reducer } from './reducer';\nimport { ContextManager } from '../context/manager';\nimport { PageSettingsManager } from './settings';\nimport { makeUrl } from '../tools/strings';\nimport { DEFAULT_ERROR_MESSAGE } from '../common/constants/error';\nimport { useSavedView } from '../tools/useSavedView';\nimport { PageInfo } from './types';\nimport { ContentElementHasData } from '../content/element';\nimport { FilterTrayTabId } from '@ecosystem/newron-design-system/build/exports/containers';\nimport { checkIfCurrencyChanged } from './utils';\nimport { TrayType } from '../types/content/custom.types';\n\nexport type ComponentHasData = ContentElementHasData;\n\nexport type PageContextType = Omit<CorePageProviderProps, 'children'> & {\n url?: string;\n dsl?: PageDsl;\n error?: string;\n pageStamp: number;\n componentHasDataMap: Record<string, ComponentHasData>;\n setComponentHasData: (componentName: string, value: ComponentHasData) => void;\n allComponentsHaveNoData: boolean;\n someComponentsHaveData: boolean;\n endpoints?: {\n page: string;\n data: string;\n };\n contextParams?: Params;\n contextLoading?: boolean;\n pageParams?: Params;\n dslLoading?: boolean;\n dataLoading?: boolean;\n modalDsl?: ModalDsl;\n globalWarnings: GenericWarning[];\n updatePageSettings: (updates: Params) => void;\n openModal: (name: string, endpoint: string, params?: Params) => void;\n closeModal: () => void;\n setGlobalWarnings: (globalWarnings: GenericWarning[], resetWarnings?: boolean) => void;\n resetGlobalWarnings: () => void;\n setDataLoading: (isDataLoading: boolean, requestId: string) => void;\n trayType?: TrayType;\n setCustomizationTray: (trayType: TrayType) => void;\n customizationTrayTabId?: FilterTrayTabId;\n setCustomizationTrayTabId?: (tabId: FilterTrayTabId) => void;\n isCollections?: boolean;\n isFilterTray?: boolean;\n setIsFilterTray?: (isFilterTray: boolean) => void;\n};\n\nconst stateContext = createContext<PageContextType>({\n pageStamp: -1,\n componentHasDataMap: {},\n globalWarnings: [],\n updatePageSettings: () => {},\n openModal: () => {},\n closeModal: () => {},\n setGlobalWarnings: (_: GenericWarning[]) => {},\n setDataLoading: (_: boolean) => {},\n resetGlobalWarnings: () => {},\n setComponentHasData: () => {},\n allComponentsHaveNoData: true,\n someComponentsHaveData: false,\n collection: { url: '' },\n context: { name: '', url: '' },\n data: { url: '', requestMethod: HTTPMethod.GET },\n page: { name: '', url: '' },\n setCustomizationTray: () => {},\n setCustomizationTrayTabId: () => {},\n setIsFilterTray: () => {},\n});\n\nexport type CorePageProviderProps = {\n children: ReactNode;\n context: {\n name: string;\n url: string;\n excludeFilters?: boolean;\n excludePriceFilter?: boolean;\n };\n page: PageInfo;\n data: {\n url: string;\n requestMethod?: HTTPMethod;\n };\n collection: {\n url: string;\n isLive?: boolean;\n params?: Params;\n };\n};\n\nexport const getCollectionsContext = (collection: {\n params: Record<string, string[]>;\n}): {\n settings: SettingsValues;\n filters?: FiltersValues;\n} => {\n if (collection && collection.params) {\n const filters: FiltersValues = {};\n\n const settings = Object.entries(collection.params).reduce((acc, [key, values]) => {\n acc[key] = values.map(item => {\n const [value, label] = item.split('|');\n return { value, label };\n });\n return acc;\n }, {} as SettingsValues);\n\n // Filter keys starting with 'f:' and add them to the filters object\n Object.entries(collection.params).forEach(([key, values]) => {\n if (key.startsWith('f:')) {\n filters[key] = values.map(item => {\n const [value, label] = item.split('|');\n return { value, label };\n });\n }\n });\n\n return {\n settings,\n filters,\n };\n }\n return null;\n};\n\nfunction CorePageProvider({ children, context, page, data, collection }: CorePageProviderProps) {\n const [state, dispatch] = useReducer(reducer, initialState());\n const [componentHasDataMap, setComponentHasDataMap] = useState<Record<string, ComponentHasData>>({});\n const pagePending = useRef<boolean>(false);\n const isMounted = useIsMounted();\n const pageNameRef = useRef<string>(null);\n const dataLoadingState = useRef<{ [x: string]: boolean }>({});\n\n const dispatchCallback = () => {\n dispatch({\n type: 'EXPIRE_PAGE',\n payload: undefined,\n });\n };\n\n const collectionsContext =\n collection && collection.params ? getCollectionsContext({ params: collection.params }) : null;\n const isCollections = !!collectionsContext;\n\n const { restoreLoading, isLiveView } = useSavedView({ contextLoading: state.contextLoading, page });\n\n /* eslint-disable react-hooks/exhaustive-deps */\n useEffect(() => {\n const loadingSubscriber = (flag: boolean) => {\n dispatch({\n type: 'SET_CONTEXT_LOADING',\n payload: flag,\n });\n };\n const settingsSubscriber = (context: Context) => {\n dispatch({\n type: 'SET_CONTEXT_STATE',\n payload: context,\n });\n };\n const errorSubscriber = (message: string) => {\n dispatch({\n type: 'SET_ERROR',\n payload: message,\n });\n };\n const { name, url, excludeFilters, excludePriceFilter } = context;\n ContextManager.getInstance().subscribeToLoading(loadingSubscriber);\n ContextManager.getInstance().subscribeToError(errorSubscriber);\n ContextManager.getInstance().registerContext(\n name,\n url,\n excludeFilters,\n excludePriceFilter,\n collectionsContext,\n collection?.isLive || isLiveView\n );\n ContextManager.getInstance().subscribeToSettingsChanges(settingsSubscriber);\n return () => {\n ContextManager.getInstance().unsubscribeFromError(errorSubscriber);\n ContextManager.getInstance().unsubscribeFromLoading(loadingSubscriber);\n ContextManager.getInstance().unsubscribeFromSettingsChanges(settingsSubscriber);\n };\n }, [context.name, context.url]);\n\n useEffect(() => {\n if (!page) {\n return;\n }\n dispatch({\n type: 'SET_PAGE',\n payload: page,\n });\n\n if (pageNameRef.current !== page.name) {\n pageNameRef.current = page.name;\n PageSettingsManager.getInstance().registerPage(page.name, page.syncSettings);\n }\n }, [page]);\n\n useEffect(() => {\n if (!data) {\n return;\n }\n dispatch({\n type: 'SET_DATA',\n payload: data,\n });\n }, [data]);\n\n const fetchPageDsl = async () => {\n if (pagePending.current || !state.pendingContextState || restoreLoading) {\n return;\n }\n\n try {\n pagePending.current = true;\n dispatch({\n type: 'START_DSL_FETCH',\n payload: undefined,\n });\n const {\n page: { url },\n pendingContextState: { settings: pendingSettings, filters: pendingFilters },\n } = state;\n\n let settings = pendingSettings;\n let filters = pendingFilters;\n if (collectionsContext) {\n settings = collectionsContext.settings;\n filters = collectionsContext.filters;\n }\n const dslParams = {\n contextParams: {\n ...settings,\n isLive: collection?.isLive ? [{ value: 'true', label: 'Live' }] : [],\n isCurrencyChanged: checkIfCurrencyChanged(ContextManager.getInstance().get(), state)\n ? [{ value: 'true', label: 'CurrencyChanged' }]\n : [],\n },\n filterParams: filters,\n pageParams: PageSettingsManager.getInstance().get(),\n };\n\n const dsl = await pageClient.getPageDsl(url, dslParams);\n if (!isMounted()) {\n return;\n }\n dispatch({\n type: 'SET_DSL',\n payload: dsl,\n });\n\n if (dsl.settings) {\n PageSettingsManager.getInstance().updatePageSettings(dsl.settings.values);\n }\n pagePending.current = false;\n } catch (err) {\n dispatch({\n type: 'SET_ERROR',\n payload: String(err.message || DEFAULT_ERROR_MESSAGE),\n });\n } finally {\n pagePending.current = false;\n }\n };\n\n const updatePageSettings = (updates: Params) => {\n PageSettingsManager.getInstance().updatePageSettings(updates, dispatchCallback);\n };\n\n const openModal = async (name: string, endpoint: string, params: Params = {}) => {\n const {\n page: { url },\n contextState: { settings, filters },\n } = state;\n try {\n const modalDsl = await pageClient.getModalDsl(makeUrl(url, endpoint), {\n contextParams: settings,\n filterParams: filters,\n pageParams: PageSettingsManager.getInstance().get(),\n modalParams: {\n ...{},\n ...params,\n modal: [name],\n },\n });\n dispatch({\n type: 'SET_MODAL_DSL',\n payload: modalDsl,\n });\n } catch (err) {\n console.error(err);\n }\n };\n\n const closeModal = () => {\n dispatch({\n type: 'SET_MODAL_DSL',\n payload: undefined,\n });\n };\n\n const setGlobalWarnings = (globalWarnings: GenericWarning[]) => {\n dispatch({\n type: 'SET_GLOBAL_WARNINGS',\n payload: globalWarnings,\n });\n };\n\n const resetGlobalWarnings = () => {\n dispatch({\n type: 'RESET_GLOBAL_WARNINGS',\n payload: true,\n });\n };\n\n const setCustomizationTray = (trayType: TrayType) => {\n dispatch({\n type: 'SET_CUSTOMIZATION_TRAY_TYPE',\n payload: trayType,\n });\n };\n\n const setCustomizationTrayTabId = (tabId: FilterTrayTabId) => {\n dispatch({\n type: 'SET_CUSTOMIZATION_TRAY_TAB_ID',\n payload: tabId,\n });\n };\n\n const setIsFilterTray = (isFilterTray: boolean) => {\n dispatch({\n type: 'SET_IS_FILTER_TRAY',\n payload: isFilterTray,\n });\n };\n\n /**\n * Sets the data loading state for a given request id.\n * If the data loading state is set to true, the global data loading state is set to true.\n * @param dataLoading - The data loading state.\n * @param requestId - The request id.\n * @returns void\n * */\n const setDataLoading = (dataLoading: boolean, requestId: string) => {\n dataLoadingState.current = {\n ...dataLoadingState.current,\n [requestId]: dataLoading,\n };\n const isGlobalDataLoading = Object.values(dataLoadingState.current).some(Boolean);\n dispatch({\n type: 'SET_DATA_LOADING',\n payload: isGlobalDataLoading,\n });\n\n if (!isGlobalDataLoading) {\n dataLoadingState.current = {};\n }\n };\n if (\n state.page &&\n state.data &&\n state.pageExpired &&\n state.pendingContextState &&\n !state.contextLoading &&\n !state.dslLoading &&\n !restoreLoading\n ) {\n fetchPageDsl();\n if (Object.keys(componentHasDataMap).length) {\n const newComponentHasDataMap = Object.keys(componentHasDataMap).reduce((acc, key) => {\n acc[key] = 'isLoading';\n return acc;\n }, {});\n setComponentHasDataMap(newComponentHasDataMap);\n }\n }\n\n let contextParams: Params | undefined;\n if (state.contextState) {\n const { filters, settings } = state.contextState;\n contextParams = {};\n Object.keys(settings).forEach(key => {\n const setting = settings[key];\n contextParams[key] = setting.map(e => e.value);\n });\n Object.keys(filters).forEach(key => {\n const filter = filters[key];\n contextParams[key] = filter.map(e => e.value);\n });\n }\n\n let pageParams: Params | undefined;\n if (!state.dslLoading && state.dsl?.settings) {\n const {\n settings: { values, dataSettings },\n } = state.dsl;\n pageParams = {};\n dataSettings.forEach(key => {\n pageParams[key] = values[key];\n });\n }\n const allColumnComponents = useMemo(() => {\n return state.dsl?.sections\n .filter(section => section.type === 'column')\n .flatMap(section => {\n const columnSection = section as ColumnSection;\n return columnSection.columns;\n })\n .filter(column => column.component.noDataInfoType !== 'ignore' && column.component.name !== 'alert');\n }, [state.dsl]);\n\n const allComponentsHaveNoData = useMemo(() => {\n return (\n Object.keys(componentHasDataMap).every(\n key => componentHasDataMap[key] === false || componentHasDataMap[key] === 'isWarning'\n ) && Object.keys(componentHasDataMap).length === allColumnComponents?.length\n );\n }, [componentHasDataMap]);\n const someComponentsHaveData = useMemo(() => {\n return (\n Object.keys(componentHasDataMap).some(key => componentHasDataMap[key] === true) &&\n Object.keys(componentHasDataMap).length > 0\n );\n }, [componentHasDataMap]);\n const removeInvisibleComponentsFromDataMap = () => {\n // Extract names of visible components from allColumnSections\n const visibleComponentNames = allColumnComponents.map(column => column.component.name);\n\n // Create a new data map with entries only for visible components\n const filteredDataMap = Object.keys(componentHasDataMap).reduce((acc, componentName) => {\n if (visibleComponentNames.includes(componentName)) {\n acc[componentName] = componentHasDataMap[componentName];\n }\n return acc;\n }, {});\n\n // Update the state with the modified data map\n setComponentHasDataMap(filteredDataMap);\n };\n return (\n <stateContext.Provider\n value={{\n context,\n data,\n collection,\n page,\n url: state.page?.url,\n pageStamp: state.pageStamp,\n dsl: state.dsl,\n error: state.error,\n dataLoading: state.dataLoading,\n componentHasDataMap,\n someComponentsHaveData,\n allComponentsHaveNoData,\n setComponentHasData: (componentName: string, value: ComponentHasData) => {\n removeInvisibleComponentsFromDataMap();\n setComponentHasDataMap(prevState => {\n return {\n ...prevState,\n [componentName]: value,\n };\n });\n },\n endpoints:\n state.page && state.data\n ? {\n page: state.page.url,\n data: state.data.url,\n }\n : undefined,\n contextParams,\n contextLoading: state.contextLoading,\n pageParams,\n dslLoading: state.dslLoading,\n globalWarnings: state.globalWarnings,\n modalDsl: state.modalDsl,\n updatePageSettings,\n openModal,\n closeModal,\n setGlobalWarnings,\n resetGlobalWarnings,\n setDataLoading,\n trayType: state.trayType,\n setCustomizationTray,\n customizationTrayTabId: state.customizationTrayTabId,\n setCustomizationTrayTabId,\n isCollections,\n isFilterTray: state.isFilterTray,\n setIsFilterTray,\n }}\n >\n {children}\n </stateContext.Provider>\n );\n}\n\nfunction useCorePageState() {\n const context = useContext(stateContext);\n if (!context) {\n throw new Error('useCorePageState must be used within a provider');\n }\n return context;\n}\n\nexport { CorePageProvider, useCorePageState };\n","import { UiAction, SettingsPayload, Params } from '../types';\nimport React, { createContext, ReactNode } from 'react';\nimport { RouteManager } from '@ecosystem/newron-client-routes';\nimport { NavigateFunction } from 'react-router/dist/development/index';\nimport { PageSettingsManager } from '../page/settings';\nimport { useCorePageState } from '../page/provider';\n\ntype UiActionsContext = {\n perform: (action: UiAction, valuesOverride?: Params) => void;\n};\n\nexport const uiActionsContext = createContext<UiActionsContext>({\n perform: () => {},\n});\n\ntype Props = {\n children: ReactNode;\n navigate: NavigateFunction;\n};\nfunction UiActionsProvider({ children, navigate }: Props) {\n const { openModal } = useCorePageState();\n\n const navigateToPath = (path: string, settingsPayload?: SettingsPayload) => {\n if (settingsPayload) {\n PageSettingsManager.getInstance().preCacheSettings(settingsPayload);\n }\n navigate(path);\n };\n\n const navigateToRoute = async (slug: string, args?: Record<string, string[]>, settingsPayload?: SettingsPayload) => {\n const route = RouteManager.getInstance().getRoute(slug);\n if (!route) {\n console.error(`no route found for ${slug} - cannot navigate`);\n return;\n }\n const state = await route.state();\n if (state === 'hidden' || state === 'restricted') {\n console.error(`${slug} is not available for the current user - cannot navigate`);\n return;\n }\n const url = route.getUrl(args as any);\n navigateToPath(url, settingsPayload);\n };\n\n const perform = (action: UiAction, valuesOverride?: Params) => {\n overridePayloadValues(action, valuesOverride);\n\n const { type, payload } = action;\n switch (type) {\n case 'NAVIGATE_TO_PATH':\n navigateToPath(payload.path, payload.settings);\n break;\n case 'NAVIGATE_TO_ROUTE':\n navigateToRoute(payload.slug, payload.args, payload.settings);\n break;\n case 'OPEN_MODAL':\n openModal(payload.name, payload.endpoint, payload.params);\n break;\n default:\n // fails type checking if not all actions are accounted for above\n // eslint-disable-next-line no-case-declarations\n const _: never = type;\n }\n };\n\n const overridePayloadValues = (action: UiAction, valuesToOverride?: Params) => {\n if (!valuesToOverride) {\n return;\n }\n\n const { type, payload } = action;\n switch (type) {\n case 'NAVIGATE_TO_PATH':\n case 'NAVIGATE_TO_ROUTE':\n if (payload.settings) {\n Object.keys(valuesToOverride).forEach(key => {\n if (payload.settings.page?.[key]) {\n payload.settings.page[key] = valuesToOverride[key];\n }\n Object.keys(payload.settings.components || {}).forEach(component => {\n if (component[key]) {\n component[key] = valuesToOverride[key];\n }\n });\n });\n }\n break;\n case 'OPEN_MODAL':\n payload.params = {\n ...{},\n ...(payload.params || {}),\n ...(valuesToOverride || {}),\n };\n break;\n default:\n // fails type checking if not all actions are accounted for above\n // eslint-disable-next-line no-case-declarations\n const _: never = type;\n }\n };\n\n return <uiActionsContext.Provider value={{ perform }}>{children}</uiActionsContext.Provider>;\n}\n\nexport { UiActionsProvider };\n","import { useContext } from 'react';\nimport { uiActionsContext } from './provider';\n\nexport function useUiAction() {\n const { perform } = useContext(uiActionsContext);\n return {\n perform,\n };\n}\n","type CacheDataType = any;\ntype CacheResolveType = void;\ntype CacheFindType = Promise<CacheDataType>;\n\nconst cached = new Map();\n\nconst createCache = key => {\n let resolve, reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n cached.set(key, { promise, resolve, reject });\n return { promise };\n};\n\nconst cache = (key: string, data?: CacheDataType): CacheFindType | CacheResolveType => {\n if (key && !data) return cache.find(key);\n if (key && data) cache.resolve(key, data);\n};\n\ncache.resolve = (key, data): CacheResolveType => {\n const query = cached.get(key);\n if (!query?.resolve) {\n createCache(key);\n }\n const { resolve } = cached.get(key);\n resolve(data);\n};\n\ncache.find = (key): CacheFindType => {\n const query = cached.get(key);\n if (query?.promise) {\n return query.promise;\n }\n const { promise } = createCache(key);\n return promise;\n};\n\nexport default cache;\n","import React, { ReactNode, createContext, useCallback, useContext, useMemo } from 'react';\nimport {\n BasicTrackingFn,\n ExternalTrackingFn,\n ExternalGetTrackingTagsFn,\n InternalTrackingFn,\n PageHeading,\n Params,\n InternalGetTrackingTagsFn,\n BasicGetTrackingTagsFn,\n Context,\n} from '../types';\nimport { useCorePageState } from '../page/provider';\nimport { ContextManager } from '../context/manager';\nimport cache from '../cache/cache';\n\ntype AnalyticsContextType = {\n trackPageEvent: BasicTrackingFn;\n getAnalyticTrackingTags: BasicGetTrackingTagsFn;\n};\n\nconst analyticsContext = createContext<AnalyticsContextType>(null);\n\ntype AnalyticsProviderProps = {\n children: ReactNode;\n externalTrackingFn?: ExternalTrackingFn;\n externalGetTrackingTags?: ExternalGetTrackingTagsFn;\n};\n\nconst getTitleFromHeading = (heading: PageHeading): string => {\n if (typeof heading.title === 'string') {\n return heading.title;\n }\n if (heading.title.length === 0) {\n return '';\n }\n if (typeof heading.title[0] === 'string') {\n return heading.title[0];\n }\n return heading.title[0].displayText || '';\n};\n\nconst getPageContext = (context?: Context): Params => {\n const activeContext = context || ContextManager.getInstance().get();\n const pageContext: Params = activeContext\n ? Object.keys(activeContext.settings.values).reduce((acc, key) => {\n const values = activeContext.settings.values[key];\n return {\n ...acc,\n [key]: values.map(entity => entity.value),\n };\n }, {})\n : {};\n return pageContext;\n};\n\nfunction AnalyticsProvider({ children, externalTrackingFn, externalGetTrackingTags }: AnalyticsProviderProps) {\n const { url, dsl, dslLoading, contextLoading, error } = useCorePageState();\n\n const readyForTracking = useMemo(\n () => dslLoading === false && contextLoading === false && !error,\n [dslLoading, contextLoading, error]\n );\n\n /**\n * Sends tracking events to the external tracking function.\n * Page context and other information is automatically included\n */\n const doTrack: InternalTrackingFn = useCallback(\n (eventName, meta, options) => {\n if (!readyForTracking) {\n return;\n }\n\n const pageTitle = dsl?.heading ? getTitleFromHeading(dsl.heading) : '';\n const pageContext = getPageContext(options.context);\n\n if (externalTrackingFn) {\n return externalTrackingFn(eventName, { pageUrl: url, pageTitle, pageContext, ...meta }, options);\n }\n },\n [readyForTracking, externalTrackingFn, url, dsl?.heading]\n );\n\n const doGetTrackingTags: InternalGetTrackingTagsFn = useCallback(\n (eventName, meta) => {\n const pageTitle = dsl?.heading ? getTitleFromHeading(dsl.heading) : '';\n const pageContext = getPageContext();\n if (externalGetTrackingTags) {\n return externalGetTrackingTags(eventName, {\n pageUrl: url,\n pageTitle,\n pageContext,\n ...meta,\n });\n }\n },\n [externalGetTrackingTags, url, dsl?.heading]\n );\n\n const trackPageEvent: BasicTrackingFn = useCallback(\n (eventName, eventParams = {}, options = {}) => {\n return doTrack(eventName, { eventParams }, options);\n },\n [doTrack]\n );\n\n const getAnalyticTrackingTags: BasicGetTrackingTagsFn = useCallback(\n (eventName, eventParams = {}) => {\n return doGetTrackingTags(eventName, { eventParams });\n },\n [doGetTrackingTags]\n );\n\n if (trackPageEvent && readyForTracking) cache('trackPageEvent', trackPageEvent);\n\n const currentContext: AnalyticsContextType = useMemo(() => {\n return {\n trackPageEvent,\n getAnalyticTrackingTags,\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [trackPageEvent, doTrack, getAnalyticTrackingTags]);\n\n return <analyticsContext.Provider value={currentContext}>{children}</analyticsContext.Provider>;\n}\n\nfunction useAnalyticsContext() {\n const context = useContext(analyticsContext);\n if (!context) {\n throw new Error('useAnalyticsContext must be used within an AnalyticsProvider');\n }\n return context;\n}\n\nexport { AnalyticsProvider, useAnalyticsContext };\n","export enum UiDataParams {\n uiEnrichments = 'uiEnrichments',\n}\n\nexport const SUBSCRIPTION_ACESS_ERROR_MESSAGES = [\n `Your subscription plan doesn't cover this insight.`,\n 'Your subscription does not allow you to see any data, please contact your GfK representative.',\n];\n\nexport const DEFAULT_LOCALE = 'en-GB';\n","import {\n AvailableDataColumn,\n ColumnRelationship,\n ColumnType,\n DataColumn,\n DataResults,\n DataRow,\n DataRows,\n FieldWarning,\n DataWarning,\n GroupByResultType,\n IdentifierColumn,\n KpiWithChangeColumn,\n ResultSet,\n TimeFrame,\n DataWarningDetails,\n DataWarningKpi,\n GenericWarningScope,\n} from '../types';\n\nexport class DataStore {\n private groupedResults: ResultSet[];\n\n constructor(private readonly data: DataResults, readonly stamp: number) {}\n\n hasDataResultSetsValues(): boolean {\n return !this.getGroupedSets().every(\n dataset =>\n !dataset.data ||\n !dataset.data.length ||\n dataset.data.every(row =>\n Object.values(row.values).every(rowValue => !Array.isArray(rowValue) || rowValue.every(value => !value))\n )\n );\n }\n\n getGroupedSets(): ResultSet[] {\n if (!this.groupedResults) {\n this.groupedResults = this.data?.results?.filter(set => set.type.type === 'group_by') || [];\n }\n return this.groupedResults;\n }\n\n hasDataInSomeGroupedSets(): boolean {\n return this.getGroupedSets().some(gs => gs.data.some(el => el.hasData));\n }\n\n getGroupedData(groupings: string[], exact: boolean = false): { data: DataRows; timeFrame: TimeFrame }[] {\n groupings = groupings.filter(group => group.length > 0) ?? [];\n\n if (!exact) {\n groupings.sort();\n }\n const match = JSON.stringify(groupings);\n const matches =\n this.getGroupedSets().filter(set => {\n const groupBys = [...(set.type as GroupByResultType).groupBy];\n if (!exact) {\n groupBys.sort();\n }\n return JSON.stringify(groupBys) === match;\n }) ?? [];\n return matches.map(set => ({\n data: set.data,\n timeFrame: set.type.timeFrame,\n }));\n }\n\n hasWarnings(): boolean {\n // check every set for warnings\n return this.data.warnings.length > 0 || this.getGroupedSets().some(set => set.warnings?.length > 0);\n }\n\n getGenericWarnings() {\n return this.data.warnings.filter(warning => warning.scope !== GenericWarningScope.Global);\n }\n\n getDataWarnings(selectedKpis: string[]): DataWarning[] {\n const dataWarnings = new Map<string, DataWarningDetails>();\n this.getGroupedSets().forEach(set => {\n set.warnings?.forEach(warning => {\n const kpiInfo = this.getKpiInfoWithWarnings(warning, selectedKpis, set.columns);\n\n if (!kpiInfo.length) {\n return;\n }\n dataWarnings.set(warning.message, {\n level: warning.level,\n kpis: kpiInfo,\n });\n });\n });\n\n return Array.from(dataWarnings);\n }\n\n private getKpiInfoWithWarnings(\n warning: FieldWarning,\n selectedKpis: string[],\n columns: DataColumn[]\n ): DataWarningKpi[] {\n const relatedFields = selectedKpis.filter(kpi => warning.relatedFields?.includes(kpi));\n if (!relatedFields.length) {\n return [];\n }\n\n const relatedFieldNames = relatedFields.map(field => {\n const { label, name } = columns.find(col => col.name === field) ?? { label: '', name: '' };\n\n return {\n label,\n name,\n };\n });\n\n return relatedFieldNames;\n }\n\n getDataColumns(): DataColumn[] {\n const groupedSets = this.getGroupedSets();\n const groupSetWithColumns = groupedSets.find(set => set.columns);\n return groupSetWithColumns?.columns || [];\n }\n\n getDataColumn(withName: string): DataColumn {\n let column = this.getDataColumns().find(col => col.name === withName);\n if (column) {\n return column;\n }\n column = this.getDataColumns().find(col => (col as KpiWithChangeColumn)?.changeName === withName);\n if (column) {\n const withChangeCol = column as KpiWithChangeColumn;\n return {\n name: withChangeCol.changeName,\n label: withChangeCol.changeLabel,\n arrayLength: withChangeCol.arrayLength,\n belongsTo: withChangeCol.belongsTo,\n canAggregate: withChangeCol.canAggregate,\n type: ColumnType.Kpi,\n isChange: true,\n dataType: withChangeCol.changeDataType,\n formatHint: withChangeCol.changeFormatHint,\n relatedTo: withChangeCol.name,\n relationship: ColumnRelationship.Change,\n } as DataColumn;\n }\n }\n\n getAvailableColumns(): AvailableDataColumn[] {\n const availableColumns = this.getGroupedSets()[0]?.availableColumns;\n if (availableColumns) {\n return availableColumns?.flatMap(avCols =>\n avCols.columns.map(col => ({\n ...col,\n enrichment: avCols.enrichment,\n }))\n );\n }\n return [];\n }\n\n getAllColumns(): DataColumn[] {\n return [...this.getDataColumns(), ...this.getAvailableColumns()];\n }\n\n getCurrency(): string | undefined {\n const grouped = this.getGroupedSets()[0];\n if (!grouped) {\n return;\n }\n return (grouped.type as GroupByResultType).currency;\n }\n\n static getCellsLatestValue(row: DataRow, columnName: string): number | null {\n const value = row.values[columnName];\n let actualValue: number | null = null;\n\n if (typeof value === 'number') {\n actualValue = value;\n } else if (Array.isArray(value)) {\n actualValue = value[value.length - 1];\n }\n\n return actualValue;\n }\n\n static getRowIdentifiers(\n row: DataRow,\n columns: DataColumn[],\n grouping: string\n ): { id: string; name: string; description: string } | undefined {\n let identifierColumn = columns.find(col => col.name === grouping && col.type === ColumnType.Identifier);\n\n if (!identifierColumn) {\n const column = columns.find(col => col.name === grouping);\n if (column) {\n const descriptorColumn = columns.find(\n col => col.relatedTo === column.name && col.relationship === ColumnRelationship.Description\n );\n return {\n id: String(row.values[column.name]),\n name: String(row.values[descriptorColumn?.name || column.name]),\n description: '',\n };\n }\n }\n\n if (!identifierColumn) {\n identifierColumn = columns.find(col => col.type === ColumnType.Identifier);\n }\n\n if (identifierColumn) {\n const { identifier, subIdentifier, idField } = identifierColumn as IdentifierColumn;\n let idTexts: string[] = [];\n identifier.forEach(field => {\n const value = row.values[field];\n if (value) {\n idTexts.push(String(value));\n }\n });\n\n if (idTexts.length === 0) {\n idTexts.push(String(row.values[idField]));\n }\n\n let subTexts: string[] = [];\n if (subIdentifier) {\n subIdentifier.forEach(field => {\n const value = row.values[field];\n if (value) {\n subTexts.push(String(value));\n }\n });\n }\n\n return {\n id: String(row.values[idField]),\n name: idTexts.join(' ').trim(),\n description: subTexts.join(' ').trim(),\n };\n }\n }\n}\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default { randomUUID };\n","let getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n if (!getRandomValues) {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n getRandomValues = crypto.getRandomValues.bind(crypto);\n }\n return getRandomValues(rnds8);\n}\n","import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? rng();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nexport default v4;\n","import { v4 as uuidV4 } from 'uuid';\nimport { DataMode, DataOptions, DataResults, HTTPMethod, Params } from '../types';\nimport { DataAction } from './actions';\nimport { deepEqual } from '../tools/object';\n\nexport type DataState = {\n dataOptions?: DataOptions;\n data?: DataResults;\n dataStamp?: number;\n error?: string;\n isDataOutdated: boolean;\n dataRequestId?: string;\n isDataLoading: boolean;\n isEnrichDataLoading: boolean;\n isDataLoadingFinished: boolean;\n dataParams?: Params;\n endpoint: string;\n paramsForData?: Params;\n requestMethod: HTTPMethod;\n enrichmentError?: string;\n};\n\nexport const initiateState = ({ dataOptions, ...dataStateOptions }: Partial<DataState> = {}): DataState => ({\n isDataLoading: false,\n isEnrichDataLoading: undefined,\n isDataLoadingFinished: false,\n isDataOutdated: false,\n endpoint: dataOptions?.providerInfo?.endpoint || '',\n requestMethod: dataOptions?.providerInfo?.requestMethod || HTTPMethod.GET,\n dataOptions,\n ...dataStateOptions,\n});\n\nexport function reducer(state: DataState, action: DataAction): DataState {\n const { type, payload } = action;\n switch (type) {\n case 'SET_DATA_OPTIONS':\n return setDataOptions(state, payload);\n case 'SET_PARAMS_FOR_DATA':\n return setParamsForData(state, payload);\n case 'START_DATA_FETCH':\n return startFetch(state);\n case 'START_DATA_ENRICH_FETCH':\n return startEnrichFetch(state);\n case 'DATA_FETCH_FAILED':\n return failFetch(state, payload);\n case 'SET_DATA_ACTION':\n return setData(state, payload);\n case 'SET_IS_DATA_LOADING':\n return setIsDataLoading(state, payload);\n case 'SET_ENRICHMENT_ERROR':\n return setEnrichmentError(state, payload);\n default:\n return state;\n }\n}\n\nfunction setDataOptions(state: DataState, options: DataOptions): DataState {\n const { data, mode, providerInfo } = options;\n\n if (mode !== DataMode.isProvider && data !== undefined) {\n return setData(state, data);\n }\n\n const newState: DataState = {\n ...{},\n ...state,\n dataOptions: options,\n endpoint: providerInfo?.endpoint || '',\n requestMethod: providerInfo?.requestMethod || HTTPMethod.GET,\n };\n\n checkForUpdatedParams(newState, providerInfo?.providerParams);\n return newState;\n}\n\nfunction setParamsForData(state: DataState, params: Params): DataState {\n const updatedParams = removeEmptyParams(params);\n const newState: DataState = {\n ...{},\n ...state,\n paramsForData: updatedParams,\n };\n checkForUpdatedParams(newState, undefined, updatedParams);\n return newState;\n}\n\nfunction checkForUpdatedParams(state: DataState, providerParams?: Params, paramsForData?: Params) {\n if (!state.dataOptions || !state.paramsForData) {\n return;\n }\n\n const providerOverrides = providerParams || state.dataOptions.providerInfo?.providerParams || {};\n const paramsToUse = paramsForData || state.paramsForData;\n const candidateParams = {\n ...paramsToUse,\n };\n Object.keys(providerOverrides).forEach(key => {\n const value = providerOverrides[key];\n if (value === null) {\n delete candidateParams[key];\n } else {\n candidateParams[key] = value;\n }\n });\n\n if (!deepEqual(state.dataParams, candidateParams)) {\n state.isDataOutdated = true;\n state.dataParams = candidateParams;\n state.dataRequestId = uuidV4();\n state.error = undefined;\n }\n}\n\nfunction startFetch(state: DataState): DataState {\n return {\n ...{},\n ...state,\n isDataLoadingFinished: false,\n error: undefined,\n };\n}\n\nfunction startEnrichFetch(state: DataState): DataState {\n return {\n ...{},\n ...state,\n isEnrichDataLoading: true,\n };\n}\n\nfunction failFetch(state: DataState, error: string): DataState {\n return {\n ...{},\n ...state,\n error,\n isEnrichDataLoading: false,\n isDataLoadingFinished: true,\n };\n}\n\nfunction setEnrichmentError(state: DataState, payload: string): DataState {\n return {\n ...{},\n ...state,\n isEnrichDataLoading: false,\n isDataLoadingFinished: true,\n enrichmentError: payload,\n };\n}\n\nfunction setData(state: DataState, payload: DataResults | null): DataState {\n const requestId = Array.isArray(payload.requestId) ? payload.requestId[0] : payload.requestId;\n if (requestId !== state.dataRequestId) {\n return state;\n }\n\n return {\n ...{},\n ...state,\n data: payload,\n dataStamp: Date.now(),\n isEnrichDataLoading: false,\n isDataLoadingFinished: true,\n isDataOutdated: false,\n error: undefined,\n };\n}\n\nfunction setIsDataLoading(state: DataState, payload: boolean): DataState {\n return {\n ...{},\n ...state,\n isDataLoading: payload,\n };\n}\n\nfunction removeEmptyParams(params: Params) {\n const updatedParams = { ...params };\n Object.keys(params).forEach(key => {\n if (updatedParams[key] === undefined || updatedParams[key] === null || updatedParams[key].length === 0) {\n delete updatedParams[key];\n }\n });\n return updatedParams;\n}\n","import React, { createContext, ReactNode, useContext, useEffect, useReducer, useRef } from 'react';\nimport { dataClient } from '../client';\nimport { DataStore } from '../data/store';\nimport { useIsMounted } from '../tools';\nimport { useIsVisible } from '../tools/visible.hook';\nimport { DataOptions, GenericWarningScope, Params } from '../types';\nimport { initiateState, reducer } from './reducer';\nimport { makeUrl } from '../tools/strings';\n\nimport { DEFAULT_SECTION_ERROR_MESSAGE } from '../common/constants/error';\nimport { useCorePageState } from '../page/provider';\nimport { UiDataParams, SUBSCRIPTION_ACESS_ERROR_MESSAGES } from './constants';\n\nimport { InsightErrorType, ProviderCollectionProps } from './types';\nimport cache from '../cache/cache';\n\ntype DataContext = {\n data?: DataStore;\n isDataLoading?: boolean;\n isDataLoadingFinished?: boolean;\n isEnrichmentLoading?: boolean;\n isDataOutdated?: boolean;\n error?: string;\n enrichmentError?: string;\n};\n\nconst stateContext = createContext<DataContext>({});\n\ntype Props = {\n children: ReactNode;\n dataOptions?: DataOptions;\n paramsForData: Params;\n urlRoot: string;\n collection?: ProviderCollectionProps;\n};\nfunction DataProviderElement({ children, paramsForData, urlRoot, dataOptions, collection }: Props) {\n const { setGlobalWarnings, setDataLoading } = useCorePageState();\n const [state, dispatch] = useReducer(reducer, { dataOptions }, initiateState);\n const el = useRef<HTMLDivElement>(null);\n const isVisible = useIsVisible(el);\n const isMounted = useIsMounted();\n const dataPending = useRef<{ [x: string]: boolean }>({});\n\n useEffect(() => {\n if (!dataOptions) {\n return;\n }\n dispatch({\n type: 'SET_DATA_OPTIONS',\n payload: dataOptions,\n });\n }, [dataOptions]);\n\n useEffect(() => {\n if (!paramsForData) {\n return;\n }\n dispatch({\n type: 'SET_PARAMS_FOR_DATA',\n payload: collection?.isLive ? { ...paramsForData, isLive: [String(true)] } : paramsForData,\n });\n }, [paramsForData, collection]);\n\n const fetchData = async () => {\n const { dataParams, dataRequestId, endpoint, requestMethod } = state;\n\n if (dataPending.current[dataRequestId]) {\n return;\n }\n\n if (!state.dataOptions) {\n return;\n }\n\n let uiEnrichments: string[] | undefined = [];\n\n try {\n dispatch({\n type: 'SET_IS_DATA_LOADING',\n payload: true,\n });\n setDataLoading(true, dataRequestId);\n\n dispatch({\n type: 'START_DATA_FETCH',\n payload: undefined,\n });\n\n dataPending.current[dataRequestId] = true;\n\n const data = await dataClient.getData(\n makeUrl(urlRoot, endpoint),\n { ...dataParams, uiEnrichments: [] },\n dataRequestId,\n requestMethod,\n collection\n );\n\n cache('data', new DataStore(data, 1));\n\n dispatch({\n type: 'SET_DATA_ACTION',\n payload: data,\n });\n let globalWarnings = data?.warnings?.filter(warning => warning.scope === GenericWarningScope.Global);\n setGlobalWarnings(globalWarnings);\n\n uiEnrichments = dataParams[UiDataParams.uiEnrichments];\n\n if (uiEnrichments?.length) {\n dispatch({\n type: 'START_DATA_ENRICH_FETCH',\n payload: undefined,\n });\n\n const enrichmentData = await dataClient.getData(\n makeUrl(urlRoot, endpoint),\n dataParams,\n dataRequestId,\n requestMethod,\n collection\n );\n dispatch({\n type: 'SET_DATA_ACTION',\n payload: enrichmentData,\n });\n\n let globalWarnings = enrichmentData?.warnings?.filter(warning => warning.scope === GenericWarningScope.Global);\n setGlobalWarnings(globalWarnings);\n }\n } catch (err) {\n const userMessage = String(err?.message || DEFAULT_SECTION_ERROR_MESSAGE);\n // TODO: Find a better way to handle this\n // Used error message from bff to differentiate between different types of error\n // As this was path of least resistance\n if (SUBSCRIPTION_ACESS_ERROR_MESSAGES.includes(userMessage)) {\n collection?.onError &&\n collection.onError({\n errorType: InsightErrorType.SUBSCRIPTION_ERROR,\n loggerMessage: 'DATA_FETCH_FAILED',\n });\n } else {\n collection?.onError &&\n collection.onError({\n errorType: InsightErrorType.BFF_ERROR,\n loggerMessage: 'DATA_FETCH_FAILED',\n userMessage,\n });\n }\n if (uiEnrichments?.length) {\n dispatch({\n type: 'SET_ENRICHMENT_ERROR',\n payload: userMessage,\n });\n } else {\n dispatch({\n type: 'DATA_FETCH_FAILED',\n payload: userMessage,\n });\n }\n } finally {\n dispatch({\n type: 'SET_IS_DATA_LOADING',\n payload: false,\n });\n setDataLoading(false, dataRequestId);\n dataPending.current[dataRequestId] = false;\n }\n };\n\n const shouldElementExist = (!collection && isVisible && isMounted()) || !!collection;\n const shouldFetchData =\n state.dataOptions !== undefined &&\n shouldElementExist &&\n state.isDataOutdated &&\n !dataPending.current[state.dataRequestId] &&\n !state.error &&\n !state.enrichmentError;\n\n if (shouldFetchData) {\n fetchData();\n }\n\n const value: DataContext = {\n data: state.data ? new DataStore(state.data, state.dataStamp) : undefined,\n isDataLoading: state.isDataLoading,\n isDataOutdated: state.isDataOutdated,\n isDataLoadingFinished: state.isDataLoadingFinished,\n isEnrichmentLoading: state.isEnrichDataLoading,\n error: state.error,\n enrichmentError: state.enrichmentError,\n };\n\n return (\n <div ref={el} className=\"data-provider relative w-full max-w-full\">\n {state.dataOptions && <stateContext.Provider value={value}>{children}</stateContext.Provider>}\n {!state.dataOptions && <>{children}</>}\n </div>\n );\n}\n\nfunction useDataState() {\n const context = useContext(stateContext);\n if (!context) {\n throw new Error('useDataState must be used within a provider');\n }\n return context;\n}\n\nexport { DataProviderElement, useDataState };\n","import { useEffect, useState, MutableRefObject } from 'react';\n\nexport function useIsVisible(ref: MutableRefObject<HTMLElement>) {\n const [isIntersecting, setIsIntersecting] = useState<boolean>(false);\n\n useEffect(() => {\n const observer = new IntersectionObserver(([entry]) => {\n setIsIntersecting(entry.isIntersecting);\n });\n\n observer.observe(ref.current);\n return () => {\n observer.disconnect();\n };\n });\n\n return isIntersecting;\n}\n","import React, { ChangeEvent, useRef, useState } from 'react';\nimport { elements, actions } from '@ecosystem/newron-design-system';\n\ntype Props = {\n term?: string;\n placeholder?: string;\n onChange: (term?: string) => void;\n disabled?: boolean;\n};\nfunction SearchInput({ term, placeholder, onChange, disabled }: Props) {\n const [value, setValue] = useState<string>(term || '');\n const [isFocused, setIsFocused] = useState<boolean>(false);\n\n const timer = useRef<ReturnType<typeof setTimeout>>(null);\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n event.preventDefault();\n clearTimeout(timer.current);\n const newValue = event.target.value;\n setValue(newValue);\n\n timer.current = setTimeout(() => {\n onChange(newValue.length === 0 ? undefined : newValue);\n }, 150);\n };\n\n const handleClear = () => {\n setValue('');\n onChange();\n };\n\n const handleFocus = () => {\n setIsFocused(true);\n };\n\n const handleBlur = () => {\n setIsFocused(false);\n };\n\n const { Icon } = elements;\n const { IconButton } = actions;\n\n return (\n <div\n className={`bg-white rounded h-10 border border-default flex items-center px-2 ${\n isFocused ? 'shadow-focus border-stroke-dark' : ''\n }`}\n data-testid=\"search-input\"\n data-test-id=\"search-input\"\n >\n <div className=\"\">\n <Icon>\n <Icon.icons.Search />\n </Icon>\n </div>\n <input\n disabled={disabled}\n type=\"text\"\n placeholder={placeholder}\n className=\"TextInput pl-2\"\n style={{ outline: 0 }}\n value={value}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n autoFocus\n />\n <div className={`${term && term.length ? 'visible' : 'hidden'}`}>\n <IconButton onClick={handleClear}>\n <IconButton.icons.Close />\n </IconButton>\n </div>\n </div>\n );\n}\n\nexport { SearchInput };\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { actions, feedbackV2, inputs, overlays } from '@ecosystem/newron-design-system';\nimport { CustomMenuModalSettings } from '../../../types';\n\nconst { Modal } = overlays;\nconst { Button } = actions;\nconst { NumberInput } = inputs;\nconst { Alert } = feedbackV2;\n\nexport interface CustomTimeSeriesDurationModalProps {\n isOpen: boolean;\n onClose: () => void;\n currentSelectedPeriods?: string[];\n customMenuModalSettings: CustomMenuModalSettings;\n onApply: (value: string) => void;\n}\n\nexport const CustomTimeSeriesModal: React.FC<CustomTimeSeriesDurationModalProps> = ({\n isOpen,\n onClose,\n customMenuModalSettings,\n onApply,\n currentSelectedPeriods,\n}) => {\n const [selectedCustomTimeSeriesValue, setSelectedCustomTimeSeriesValue] = useState<number>(0);\n const [isDisabled, setIsDisabled] = useState<boolean>(false);\n\n const { customMenuLabels, maxDuration } = customMenuModalSettings.customTimeSeriesDuration;\n\n const customTimeSeriesLabel: string[] = customMenuLabels.split('|');\n\n const [_, currentCustomDuration] = currentSelectedPeriods ?? [];\n\n useEffect(() => {\n const currentDuration = parseInt(currentCustomDuration);\n const validCurrentDuration = isNaN(currentDuration) ? 0 : currentDuration;\n setSelectedCustomTimeSeriesValue(validCurrentDuration);\n }, [currentCustomDuration]);\n\n const handleOnChange = useCallback((selectedValue: number) => {\n if (selectedValue < 0 || selectedValue > maxDuration) {\n setIsDisabled(true);\n } else {\n setIsDisabled(false);\n setSelectedCustomTimeSeriesValue(selectedValue);\n }\n }, []);\n\n const handleOnClick = () => {\n onApply(selectedCustomTimeSeriesValue.toString());\n };\n\n return (\n <Modal size=\"md\" isOpen={isOpen} onClose={onClose}>\n <Modal.Header>Custom time series</Modal.Header>\n <div className=\"px-6 pt-4\">\n {isDisabled && (\n <Alert title={`Time series is limited to ${maxDuration} ${customTimeSeriesLabel[1]}`} type={'info'} />\n )}\n </div>\n <div className=\"flex flex-row flex-nowrap px-6 pt-4 pb-6 gap-4\">\n <div className=\"self-center\">{customTimeSeriesLabel[0]}</div>\n <div className=\"w-20 self-center grow-0\">\n <NumberInput\n key={`custom-time-series`}\n value={selectedCustomTimeSeriesValue}\n onChange={handleOnChange}\n testId={`custom-time-series`}\n />\n </div>\n <div className=\"self-center\">{customTimeSeriesLabel[1]}</div>\n </div>\n <Modal.Footer>\n <Button mode=\"secondary\" onClick={onClose} testId=\"modal-cancel-btn\">\n Cancel\n </Button>\n <Button disabled={isDisabled} onClick={handleOnClick} testId=\"modal-apply-btn\">\n Apply\n </Button>\n </Modal.Footer>\n </Modal>\n );\n};\n","import { TrayType } from '../types/content/custom.types';\n\n//List of constant that are used in customPriceClasses\nconst MAX_CUSTOM_CLASSES_NAME_LENGTH = 32;\nconst MIN_CUSTOM_CLASS_TIER_VALUE = 0;\nconst MAX_CUSTOM_CLASS_TIER_VALUE = 1000000000000000;\nconst CLASS_EXISTS = 'Duplicate Class';\nconst LABEL_EXISTS = 'Label already exist';\nconst LABEL_REQUIRED = 'Label is required';\nconst OPTION_REQUIRED = 'Option is required';\n\nconst FEATURE_CUSTOMIZATION: TrayType = 'segment_feature';\nconst PRICE_CUSTOMIZATION: TrayType = 'segment_price';\n\nconst PRICES = { label: 'Price classes' };\nconst FEATURES = { label: 'Feature segments' };\n\nexport default {\n MAX_CUSTOM_CLASSES_NAME_LENGTH,\n MAX_CUSTOM_CLASS_TIER_VALUE,\n MIN_CUSTOM_CLASS_TIER_VALUE,\n CLASS_EXISTS,\n LABEL_EXISTS,\n FEATURE_CUSTOMIZATION,\n PRICE_CUSTOMIZATION,\n PRICES,\n FEATURES,\n LABEL_REQUIRED,\n OPTION_REQUIRED,\n};\n","import { LineData, SlopeData } from '../design/charts';\n\nexport const capitalize = (message: string) => {\n const [firstChar, ...rest] = message;\n return `${firstChar.charAt(0).toUpperCase()}${rest.join('')}`;\n};\n\nexport const createLowerCamelCase = (message: string) => {\n const [first, ...rest] = message.split(' ');\n return `${first.toLocaleLowerCase()}${rest.map(capitalize).join('')}`;\n};\n\nexport function isDefined<T>(value: T | undefined): value is T {\n return value !== undefined;\n}\n\nexport const sanitizeInput = (input: string): string => {\n return input.replace(/\\s+/g, ' ').trim();\n};\n\nexport const checkForHTMLTags = (input: string): string | null => {\n const hasHtmlTags = /<\\/?[a-z][\\s\\S]*>/i.test(input);\n if (hasHtmlTags) {\n return 'HTML tags are not allowed';\n }\n return null;\n};\nexport const checkForValidLabelString = (input: string): string | null => {\n const valid = /^[A-Za-z0-9\\-.,_ ]*$/.test(input);\n if (!valid) {\n return 'Symbols are not allowed';\n }\n return null;\n};\n\n/**\n * Calculate the space needed for a text label based on the number of characters\n * @param text - the text to calculate the space for\n * @returns the space needed for the text label\n */\nexport const calculateSpaceByCharacter = (text: string | null | undefined): number => {\n if (!text) {\n return 0;\n }\n const spacePerCharacter = 9;\n return text.length * spacePerCharacter;\n};\n\n/**\n * Calculate the width needed for the main graph section\n * to ensure the labels are not overlapping\n * @param data - the chart's data\n * @returns the width of the main/middle section graph\n */\nexport const getMainGraphWidth = (data: SlopeData & LineData, includeSideLabel = false) => {\n const gap = includeSideLabel ? 40 : 20;\n const minimumWidth = 80;\n\n const comparisonPeriod = data.labels.length || 1;\n\n const labels = [\n ...(data.summary?.values?.formatted || []),\n ...(data.summary?.changes?.formatted || []),\n ...(data.additionalSummary?.values?.formatted || []),\n ...(data.additionalSummary?.changes?.formatted || []),\n ...(data.labels?.flatMap(label => label) || []),\n ];\n\n const labelsWidth = labels.map(label => calculateSpaceByCharacter(label) / 2);\n const maxLabelWidth = Math.max(...labelsWidth);\n\n let calculatedWidth = (maxLabelWidth + gap) * comparisonPeriod;\n\n if (includeSideLabel) {\n const values = data.sets.flatMap(set => set.values.formatted);\n const valuesWidth = values.map(label => calculateSpaceByCharacter(label) / 2);\n const maxValuesLabelWidth = Math.max(...valuesWidth);\n calculatedWidth += maxValuesLabelWidth;\n }\n\n return Math.max(calculatedWidth, minimumWidth);\n};\n","import { CurrencyOption, DataType, FormatHint } from '../types';\nimport { DEFAULT_LOCALE } from './constants';\n\nenum DenominatorCharacter {\n None = '',\n Thousands = 'k',\n Millions = 'm',\n Billions = 'b',\n Trillions = 't',\n Quadrillions = 'qa',\n}\n\nenum DenominatorValue {\n None = 1,\n Thousands = 1000,\n Millions = 1000000,\n Billions = 1000000000,\n Trillions = 1000000000000,\n Quadrillions = 1000000000000000,\n}\n\nexport type Denominator = [number, string];\n\nexport class Formatting {\n private constructor() {}\n\n static format(\n value: number | string | Date | null,\n options: {\n dataType: DataType;\n formatHint?: FormatHint;\n isChange?: boolean;\n currency?: string;\n denominator?: Denominator;\n hyphenForNull?: boolean;\n }\n ): string | null {\n const { dataType, formatHint, isChange, currency = CurrencyOption.eur, denominator, hyphenForNull } = options;\n\n if (value === null) {\n return hyphenForNull ? '-' : null;\n }\n\n let formatted: string | null = null;\n\n if (formatHint) {\n switch (formatHint) {\n case FormatHint.Money:\n formatted = formatMoney(Number(value), currency, isChange, denominator);\n break;\n case FormatHint.WholeMoney:\n formatted = formatWholeMoney(Number(value), currency, isChange);\n break;\n case FormatHint.Percentage:\n formatted = formatPercentage(Number(value), isChange);\n break;\n case FormatHint.PercentagePoints:\n formatted = formatPercentagePoints(Number(value), isChange);\n break;\n case FormatHint.Index:\n formatted = formatIndexValue(Number(value), isChange);\n break;\n case FormatHint.MonthYear:\n case FormatHint.Month:\n case FormatHint.Year:\n formatted = formatDate(String(value), formatHint);\n break;\n }\n } else {\n switch (dataType) {\n case DataType.Integer:\n formatted = formatInteger(Number(value), isChange, denominator);\n break;\n case DataType.Decimal:\n formatted = formatDecimal(Number(value), isChange, denominator);\n break;\n case DataType.Date:\n formatted = formatDate(String(value));\n break;\n default:\n formatted = String(value);\n break;\n }\n }\n\n if (formatted === null) {\n return hyphenForNull ? '-' : null;\n }\n\n return formatted;\n }\n\n static getCurrencySymbol(code: string): string {\n return getCurrencySymbol(code);\n }\n}\n\nfunction getCurrencySymbol(code: string): string {\n const currencySign =\n new Intl.NumberFormat(DEFAULT_LOCALE, { style: 'currency', currency: code, currencyDisplay: 'narrowSymbol' })\n .formatToParts(0)\n .find(part => part.type === 'currency')?.value || '';\n return currencySign || '';\n}\n\nfunction getDenominator(value: number): Denominator {\n const absValue = Math.abs(value);\n\n if (absValue === Infinity) {\n return [DenominatorValue.None, DenominatorCharacter.None];\n }\n\n if (absValue >= DenominatorValue.Quadrillions) {\n return [DenominatorValue.Quadrillions, DenominatorCharacter.Quadrillions];\n }\n\n if (absValue >= DenominatorValue.Trillions) {\n return [DenominatorValue.Trillions, DenominatorCharacter.Trillions];\n }\n\n if (absValue >= DenominatorValue.Billions) {\n return [DenominatorValue.Billions, DenominatorCharacter.Billions];\n }\n\n if (absValue >= DenominatorValue.Millions) {\n return [DenominatorValue.Millions, DenominatorCharacter.Millions];\n }\n\n if (absValue >= 10000) {\n return [DenominatorValue.Thousands, DenominatorCharacter.Thousands];\n }\n\n return [DenominatorValue.None, DenominatorCharacter.None];\n}\n\nfunction roundToDigits(value: number, fractionDigits: number = 2) {\n const factor = Math.pow(10, fractionDigits);\n return Math.round(value * factor) / factor;\n}\n\nfunction formatNumber(\n value: number,\n options: {\n getFractionDigits: (denom: DenominatorValue) => number;\n denominator?: Denominator;\n isChange?: boolean;\n currency?: string;\n valuePrefix?: string;\n suffix?: string;\n }\n): string {\n const { getFractionDigits, denominator, isChange = false, currency, valuePrefix = '', suffix = '' } = options;\n const denoms = denominator || getDenominator(value);\n const fractionDigits = getFractionDigits(denoms[0]);\n const shrunken = Math.abs(roundToDigits(value / denoms[0], fractionDigits));\n\n const valueString = shrunken.toLocaleString(DEFAULT_LOCALE, {\n minimumFractionDigits: fractionDigits,\n maximumFractionDigits: fractionDigits,\n ...(currency ? { style: 'currency', currency: currency, currencyDisplay: 'narrowSymbol' } : {}),\n });\n\n const isNegative = value < 0;\n const signPrefix = isNegative ? '-' : isChange ? '+' : '';\n return `${signPrefix}${valuePrefix}${valueString}${denominator ? '' : denoms[1]}${suffix}`;\n}\n\nfunction formatMoney(value: number, currency: string, isChange: boolean = false, denominator?: Denominator): string {\n return formatNumber(value, {\n getFractionDigits: denom => (denom === DenominatorValue.None ? 2 : 1),\n denominator,\n isChange,\n currency,\n });\n}\nfunction formatWholeMoney(value: number, currency: string, isChange: boolean = false): string {\n return formatNumber(value, {\n getFractionDigits: denom => (denom === DenominatorValue.None && Number.isInteger(value) ? 0 : 2),\n isChange,\n currency,\n });\n}\n\nfunction formatInteger(value: number, isChange: boolean = false, denominator?: Denominator): string {\n return formatNumber(value, {\n getFractionDigits: denom => (denom === DenominatorValue.None ? 0 : 1),\n denominator,\n isChange,\n });\n}\n\nfunction formatDecimal(value: number, isChange: boolean = false, denominator?: Denominator): string {\n return formatNumber(value, {\n getFractionDigits: denom => (denom === DenominatorValue.None ? 2 : 1),\n denominator,\n isChange,\n });\n}\n\nfunction formatPercentage(value: number, isChange: boolean = false): string {\n let percentValue = value * 100;\n let valuePrefix = '';\n if (isChange && Math.abs(percentValue) > 999) {\n percentValue = percentValue < 0 ? -999 : 999;\n valuePrefix = '>';\n }\n return formatNumber(percentValue, {\n getFractionDigits: () => 1,\n denominator: [DenominatorValue.None, DenominatorCharacter.None],\n isChange,\n valuePrefix,\n suffix: '%',\n });\n}\n\nfunction formatPercentagePoints(value: number, isChange: boolean = false): string {\n const pointsValue = value * 100;\n return formatNumber(pointsValue, {\n getFractionDigits: () => 1,\n denominator: [DenominatorValue.None, DenominatorCharacter.None],\n isChange,\n suffix: 'pp',\n });\n}\n\nfunction formatIndexValue(value: number, isChange: boolean): string {\n return formatNumber(value, {\n getFractionDigits: () => 0,\n denominator: [DenominatorValue.None, DenominatorCharacter.None],\n isChange,\n });\n}\n\nfunction formatDate(value: string, formatHint?: FormatHint): string | null {\n const date = new Date(value);\n\n if (date instanceof Date && isNaN(date.getTime())) {\n return null;\n }\n\n if (formatHint === FormatHint.MonthYear) {\n return new Intl.DateTimeFormat(DEFAULT_LOCALE, {\n month: 'short',\n year: 'numeric',\n }).format(date);\n }\n\n if (formatHint === FormatHint.Month) {\n return new Intl.DateTimeFormat(DEFAULT_LOCALE, {\n month: 'short',\n }).format(date);\n }\n\n if (formatHint === FormatHint.Year) {\n return Intl.DateTimeFormat(DEFAULT_LOCALE, {\n year: 'numeric',\n }).format(date);\n }\n\n return new Intl.DateTimeFormat(DEFAULT_LOCALE, {\n dateStyle: 'long',\n }).format(date);\n}\n","import { PreferenceClient } from '../client/preference.client';\nimport { SelectedCustomFeatureContext } from '../common/selection.menu/types';\nimport { checkForValidLabelString, sanitizeInput } from '../common/util';\nimport { ContextManager } from '../context/manager';\nimport { Formatting } from '../data/formatting';\nimport { PageInfo } from '../page/types';\nimport {\n DataType,\n Entity,\n EventElementCategory,\n EventElementType,\n EventName,\n FilterDefinition,\n FilterSections,\n FiltersValues,\n FilterType,\n FormatHint,\n Params,\n PreferenceName,\n} from '../types';\nimport {\n CustomCategoricalClass,\n CustomClass,\n CustomNumericalClass,\n CustomPriceClass,\n SharePermissionsBody,\n UserAccess,\n} from '../types/content/custom.types';\nimport constants from './constants';\nconst { MIN_CUSTOM_CLASS_TIER_VALUE, MAX_CUSTOM_CLASS_TIER_VALUE, LABEL_EXISTS } = constants;\n\ninterface SelectedFilter {\n [x: string]: { entity: Entity[]; definition: FilterDefinition };\n}\ninterface FeatureFilters {\n [key: string]: {\n maxFeatureLimit: number;\n selectedFilters: SelectedFilter[];\n };\n}\n\nexport const adjustDateRangeFilter = (type: FilterType, filterValue: string) => {\n if (type === FilterType.dateRange) {\n if (filterValue.startsWith('-')) {\n return filterValue.replace(/^-/, 'before ');\n } else if (filterValue.endsWith('-')) {\n return 'after ' + filterValue.replace(/-$/, '');\n }\n }\n // If no hyphen is found, return the original string\n return filterValue;\n};\n\nexport const adjustNumericFilter = (type: FilterType, filterValue: string) => {\n if (type === FilterType.numericRange) {\n if (filterValue.startsWith('-')) {\n return filterValue.replace(/^-/, 'to ');\n } else if (filterValue.endsWith('-')) {\n return 'from ' + filterValue.replace(/-$/, '');\n }\n }\n // If no hyphen is found, return the original string\n return filterValue;\n};\n\nconst initFeatureFilters = (sections: FilterSections[]): FeatureFilters => {\n const result = {};\n sections.forEach(({ label, maxFeatureLimit }) => {\n result[label] = { maxFeatureLimit, selectedFilters: [] };\n });\n return result;\n};\n\nexport const pickFeatureFilters = (allFilters: FiltersValues, sections: FilterSections[]): FeatureFilters => {\n const result = initFeatureFilters(sections);\n\n Object.keys(allFilters).forEach(filter => {\n if (!allFilters[filter].length) {\n return;\n }\n\n let isFilterFound = false;\n sections.forEach(({ label, grouped, ungrouped }) => {\n if (isFilterFound) {\n return;\n }\n\n grouped?.forEach(sectionGrouped => {\n if (isFilterFound) {\n return;\n }\n\n const isFound = sectionGrouped.definitions.find(({ name }) => name === filter);\n if (isFound) {\n result[label].selectedFilters.push({ [`${filter}`]: { entity: allFilters[filter], definition: isFound } });\n isFilterFound = true;\n }\n });\n\n if (!isFilterFound) {\n const isFound = ungrouped?.definitions.find(({ name }) => name === filter);\n if (isFound) {\n result[label].selectedFilters.push({ [`${filter}`]: { entity: allFilters[filter], definition: isFound } });\n isFilterFound = true;\n }\n }\n });\n }, []);\n\n return result;\n};\n\nconst getFilterSpesifications = (selectedFilters: SelectedFilter) => {\n let canRound = true;\n let roundingValue;\n let roundingCurrency;\n Object.values(selectedFilters).forEach(({ entity, definition }) => {\n if (!canRound) {\n return;\n }\n entity.forEach(({ value }) => {\n if (!value) {\n return;\n }\n const [min, max] = value.split('-').map(Number);\n if (\n definition.roundTo &&\n (failsRoundingCriteria(min, definition.roundTo) || failsRoundingCriteria(max, definition.roundTo))\n ) {\n roundingValue = definition.roundTo;\n canRound = false;\n roundingCurrency = definition.currency;\n }\n });\n });\n return { canRound, roundingValue, roundingCurrency };\n};\n\nexport const getRoundingError = (selectedSections: FeatureFilters) => {\n let canFilterRound = true;\n let filterRoundingValue;\n let filterRoundingCurrency;\n Object.keys(selectedSections).forEach(label => {\n selectedSections[label].selectedFilters.forEach(filter => {\n if (!canFilterRound) {\n return;\n }\n const { canRound, roundingValue, roundingCurrency } = getFilterSpesifications(filter);\n canFilterRound = canRound;\n filterRoundingValue = roundingValue;\n filterRoundingCurrency = roundingCurrency;\n });\n });\n if (!canFilterRound) {\n const formatted = Formatting.format(filterRoundingValue, {\n dataType: DataType.Integer,\n formatHint: FormatHint.Money,\n currency: filterRoundingCurrency,\n });\n return `Invalid price range entered. Enter lower and upper price range that can be divided by ${formatted}.`;\n }\n};\nconst getExceedingFilter = ({ maxFeatureLimit, selectedFilters }) => selectedFilters.length > maxFeatureLimit;\n\nexport const getMaxFeatureLimit = (featureFilters: FeatureFilters): number => {\n return Object.values(featureFilters).find(getExceedingFilter).maxFeatureLimit;\n};\n\nexport const getIsConfidentialityError = (featureFilters: FeatureFilters): string => {\n if (Object.values(featureFilters).some(getExceedingFilter)) {\n const maxFeatureLimit = getMaxFeatureLimit(featureFilters);\n const CONFIDENTIALITY_ERROR = `Feature selection is limited to ${maxFeatureLimit} categories.`;\n return CONFIDENTIALITY_ERROR;\n }\n};\n\nexport const getError = (featureFilters: FeatureFilters): string => {\n return getIsConfidentialityError(featureFilters) || getRoundingError(featureFilters);\n};\n\nexport const getJoinedLabel = (values: Entity[]): string => {\n return (values || [])\n .map(e => e.label)\n .sort((a, b) => a.localeCompare(b))\n .join(', ');\n};\n\ntype EventDetails = [\n EventName,\n {\n eventType: EventElementType;\n eventElementCategory: EventElementCategory;\n elementName: string;\n globalFilterApplied: string;\n }\n];\nexport const getFilterEventDetails = (elementName: string, globalFilterApplied: string = 'Yes'): EventDetails => {\n return [\n EventName.PageElementClicked,\n {\n eventType: EventElementType.Button,\n eventElementCategory: EventElementCategory.SaveFilter,\n elementName,\n globalFilterApplied,\n },\n ];\n};\n\nexport const failsRoundingCriteria = (value: number, roundTo: number | undefined | null) => {\n // gymnastics to avoid floating point rounding issues\n // roundTo is limited to 1 decimal place, so 100 is a safe value to multiply by\n //A small threshold (1e-10) is used to compare the result of the modulo operation instead of strict equality to 0. This accounts for small inaccuracies caused by floating-point arithmetic.\n //Performing modulo operations before scaling to avoid floating-point precision errors when dealing with large numbers.\n return roundTo !== undefined && roundTo !== null && Math.abs((value * (1 / roundTo)) % 1) > 1e-10;\n};\n\n/**\n * Retrieves and check if the input is within the range of MIN_CUSTOM_CLASS_TIER_VALUE and MAX_CUSTOM_CLASS_TIER_VALUE.\n * the min or max is return if it does not lie within the range, else the original value is returned\n * @param value Input value\n * @returns Number\n */\nexport const getValidInputWithinRange = (value: number): number => {\n if (value > MAX_CUSTOM_CLASS_TIER_VALUE) {\n return MAX_CUSTOM_CLASS_TIER_VALUE;\n } else if (value < MIN_CUSTOM_CLASS_TIER_VALUE) {\n return MIN_CUSTOM_CLASS_TIER_VALUE;\n }\n return value;\n};\n\n/**\n * Retrieves and check if the input is within the given range, minAllowedValue and maxAllowedValue.\n * the min or max is return if it does not lie within the range, else the original value is returned\n * @param value Input value\n * @param defaultFeatureClass feature classes with min and max value\n * @param classToRender current feature class\n * @param fieldType type of field if max or min\n * @returns Number\n */\nexport const getValidFeaturesInputWithinRange = (\n value: number,\n defaultFeatureClass: CustomNumericalClass,\n classToRender: CustomNumericalClass,\n fieldType: 'min' | 'max'\n): number => {\n if (fieldType === 'min') {\n // Allow values above max but enforce the minimum limit\n if (value < defaultFeatureClass.min || value > defaultFeatureClass.max || value === classToRender.max) {\n return defaultFeatureClass.min;\n }\n } else if (fieldType === 'max') {\n // Allow values below min but enforce the maximum limit\n if (value > defaultFeatureClass.max || value < defaultFeatureClass.min || value === classToRender.min) {\n return defaultFeatureClass.max;\n } else {\n return value;\n }\n }\n // If within valid range, return the value\n return value;\n};\n\n/**\n * Function to determine rounded number input\n * @param input number input\n * @param prevMax number input\n * @param price price class info\n * @returns number\n */\nexport const roundInput = (\n input: number,\n prevMax: number | null,\n nextMax: number | null,\n price\n): { roundedValue: number } => {\n const roundTo = Number(price.roundTo);\n // we aren't using !input as this would return true if input was 0\n if (input === undefined || input === null) return;\n //if input is less than default rounding value then return default round value\n if (input < roundTo) {\n input = roundTo;\n }\n\n const normalizedInput = input / roundTo;\n\n const nearestMultiple = Number((Math.round(normalizedInput) * roundTo).toFixed(2));\n // Rule 1: If `nearestMultiple` is below `prevMax`, sync to `prevMax` and adjust\n if (prevMax && nearestMultiple <= prevMax) {\n let adjustedPrevMax;\n const calculatedValue = Math.ceil(normalizedInput) * roundTo;\n const roundingOffset = calculatedValue === nearestMultiple ? roundTo : 0;\n\n if (nearestMultiple === prevMax) {\n adjustedPrevMax = calculatedValue + roundingOffset;\n } else {\n adjustedPrevMax = nearestMultiple;\n }\n\n adjustedPrevMax = Number(adjustedPrevMax.toFixed(2));\n\n return {\n roundedValue: adjustedPrevMax,\n };\n }\n\n // Rule 2: If `nearestMultiple` is equal to `nextMax`, round down and update\n if (nextMax && nearestMultiple == nextMax) {\n const adjustedNextMin = Number((Math.floor(normalizedInput) * roundTo).toFixed(2));\n return {\n roundedValue: adjustedNextMin, // Ensure rounded value stays within bounds\n };\n }\n\n // Default fallback for unhandled cases\n return {\n roundedValue: nearestMultiple,\n };\n};\n\n/**\n * Retrieve, process and return the price classes from the component settings\n * @param componentSettings - the component settings from PageSettingsManager\n * @param defaultPriceClass - the default price class to use if the component settings does not have any value\n * @returns - the price classes to use on loading the page\n */\nexport const getPriceClassesFromSettings = (componentSettings: Params, defaultPriceClass: CustomPriceClass) => {\n const priceClasses = componentSettings?.customPriceTiers;\n if (!priceClasses || !priceClasses.length) {\n return [defaultPriceClass];\n }\n\n const priceClassesArray = priceClasses[0].split('|').map((priceClass, index, list) => {\n const [strMin, strLabel] = priceClass.split(':');\n return {\n ...defaultPriceClass,\n min: Number(strMin),\n label: strLabel ?? '',\n max: index === list.length - 1 ? null : Number(list[index + 1].split(':')[0]),\n };\n });\n return priceClassesArray;\n};\n\n/**\n * Function to format the price classes to a single string for the params\n * @returns string\n */\nexport const formatPricesForParams = (priceClasses: CustomPriceClass[]) => {\n const startingZero = priceClasses.length === 0 ? '0' : '';\n const subsequentPriceClasses = priceClasses.map(price => `${price.min}:${price.label ?? ''}`).join('|');\n return startingZero.concat(subsequentPriceClasses);\n};\n\n/**\n * Function to check if the user is the creator of the preference\n * @param createdBy creator userId\n * @param userId current userId\n * @returns boolean\n */\nexport const isViewer = (createdBy: string, userId: string) => createdBy !== userId;\n\n/**\n * Validates the custom class details, the name must be unique and not empty\n * @param filterName The unique name of the filter/class\n * @param filterDescription The description of the filter/class\n * @param isNameExistedFn The function to check if the name already exists\n * @returns true/false\n */\nexport const validateSaveCustomClassDetails = (\n filterName: string,\n filterDescription: string,\n isNameExistedFn: (name: string) => boolean\n): boolean => {\n // Validate filterName is not empty and not only spaces\n if (filterName.trim().length === 0) {\n return false;\n }\n // checks if filterDescription does not contain spaces\n if (filterDescription && filterDescription.trim().length === 0) {\n return false;\n }\n // checks if filterName is unique\n if (isNameExistedFn(filterName)) {\n return false;\n }\n // All validations passed\n return true;\n};\n\nexport const cleanString = (str: string): string => {\n str = str.trim();\n str = str.replace(/\\s+/g, ' ');\n return str;\n};\n\n// Recursive function to filter hierarchy based on selected parents\nexport const filterByHierarchy = (\n hierarchyName: string,\n hierarchyLevel: string,\n hierarchyParent: string,\n options: any[],\n filteredOptionsMap: Record<string, any[]> = {},\n values: FiltersValues\n) => {\n const level = parseInt(hierarchyLevel);\n if (level === 1) return options; // Return all options for the first hierarchy level\n\n const parentKey = `${hierarchyName}_${level - 1}`;\n const currentKey = `${hierarchyName}_${level}`;\n\n // Determine selected parents\n const selectedParents = values[parentKey]?.map(v => v.label) ?? filteredOptionsMap[parentKey] ?? [];\n\n // Filter options only if at least one parent is selected\n const filteredOptions =\n selectedParents.length > 0 ? options.filter(option => selectedParents.includes(option[hierarchyParent])) : options; // Keep all options if no parent is explicitly selected\n\n // Reset invalid selections in the current level\n if (values[currentKey]) {\n values[currentKey] = values[currentKey].filter(v => filteredOptions.some(option => option.label === v.label));\n }\n\n // Update filtered options map\n filteredOptionsMap[currentKey] = filteredOptions.map(opt => opt.label);\n\n return filteredOptions;\n};\n\n/**\n * Function to check if label is duplicate\n * @param customClasses list of price classes to validate the input againts\n * @returns boolean\n */\nexport const hasDuplicateLabels = (customClasses: CustomClass[]): boolean => {\n const labels = customClasses.map(customClass => customClass.label).filter(label => !!label);\n return new Set(labels).size !== labels.length;\n};\n\n/**\n * Function to check if the class is a duplicate\n * @param inputClass the input class\n * @param customClasses list of price classes to validate the input againts\n * @returns boolean\n */\nexport const isClassDuplicate = (inputClass: CustomNumericalClass, customClasses: CustomNumericalClass[]): boolean => {\n const existing = customClasses.filter(x => x.min === inputClass.min && x.max === inputClass.max);\n return existing.length > 1;\n};\n\n/**\n * Function to check if label is invalid\n * @param customClassesToValidate list of feature or price classes to validate the input againts\n * @returns boolean\n */\nexport const isLabelValid = (input: string): boolean => {\n const sanitizedInput = sanitizeInput(input); //prevent from saving empty space\n return !checkForValidLabelString(sanitizedInput);\n};\n\n/**\n * Function to validate the label input\n * @param customClassesToValidate list of feature or price classes to validate\n */\nexport const validateLabelInput = (customClassesToValidate: CustomClass[]): boolean => {\n if (hasDuplicateLabels(customClassesToValidate)) {\n return false;\n }\n const areLabelsValid = customClassesToValidate.every(customClass => {\n // if one of the label input is invalid, then disable the apply button and return\n return isLabelValid(customClass.label);\n });\n\n return areLabelsValid;\n};\n\nexport const validateNumberInput = (featureClassesToValidate: CustomNumericalClass[]) => {\n //if at least one feature class is invalid then we will set the setIsDisabled to true\n const hasInvalidClass = featureClassesToValidate.some(featureClass => isRangeInvalid(featureClass));\n //if at least one feature class is duplicate then we will invalidate the input\n const hasDuplicateClass = featureClassesToValidate.some(featureClass =>\n isClassDuplicate(featureClass, featureClassesToValidate)\n );\n const allClassesValid = !hasInvalidClass && !hasDuplicateClass;\n return allClassesValid;\n};\n\n/**\n * Function to check if feature class is invalid\n * @param currentFeatureClass the current feature class\n * @returns boolean\n */\nexport const isRangeInvalid = (currentFeatureClass: CustomNumericalClass): boolean => {\n if (!currentFeatureClass.max) {\n return false;\n }\n\n const isInvalid: boolean = currentFeatureClass.min > currentFeatureClass.max;\n\n return isInvalid;\n};\nexport type FormatFeatureClassInput = {\n selectedFeatureName: string;\n selectedFeatureType: FilterType;\n segmentClasses: CustomNumericalClass[] | CustomCategoricalClass[];\n excludeOthers?: boolean;\n};\n/**\n * Function to format the custom feature segment\n * @param selectedFeature filter definition of selected base feature\n * @param featureClasses\n * @returns\n */\nexport const formatFeatureClassForParams = ({\n selectedFeatureName,\n selectedFeatureType,\n segmentClasses,\n excludeOthers,\n}: FormatFeatureClassInput): string => {\n const name = `name:${selectedFeatureName}|`;\n const subsequentClass =\n segmentClasses\n .map(feature =>\n selectedFeatureType === FilterType.numericRange\n ? `${(feature as CustomNumericalClass).min}:${feature.label ?? ''}`\n : `${(feature as CustomCategoricalClass).selectedOptions}:${feature.label}`\n )\n .join('|') + (selectedFeatureType !== FilterType.numericRange && !excludeOthers ? '|Others' : '');\n return name + subsequentClass;\n};\n\n/**\n * Function to adjust the price classes after deletion\n * @param index the index of the price class to be deleted\n * @param classes the list of price classes to be updated\n * @param classMaxValue the maximum value for class\n * @returns void\n */\nexport const adjustClassesAfterDeletion = (\n index: number,\n classes: CustomPriceClass[] | CustomNumericalClass[],\n classMaxValue?: number\n): CustomPriceClass[] | CustomNumericalClass[] => {\n const updatedClasses = [...classes]; // Make a shallow copy to avoid direct mutation\n const toRemove = classes[index];\n\n if (index === 0) {\n updatedClasses[index + 1] = { ...classes[index + 1], min: 0 };\n return updatedClasses;\n }\n\n if (index === classes.length - 1) {\n updatedClasses[index - 1] = { ...classes[index - 1], max: classMaxValue ?? null };\n return updatedClasses;\n }\n\n updatedClasses[index + 1] = { ...classes[index + 1], min: toRemove.min };\n updatedClasses[index - 1] = { ...classes[index - 1], max: toRemove.min };\n\n return updatedClasses;\n};\n\n/**\n * Get the currently shared users of the saved custom segment\n * @param preferenceId the preferenceId of the saved custom segment\n * @returns the list of shared users\n */\nexport const getSharedUsers = (preferenceId: string, preferenceName: PreferenceName): Promise<UserAccess[]> => {\n return PreferenceClient.getInstance().getPermissions(preferenceName, preferenceId);\n};\n\n/**\n * Share the saved price class to the user\n * @param preferenceId preferenceId of the saved custom segment\n * @param permissionsBody list of users with their access level to be passed in as body\n */\nexport const shareToUser = async (\n preferenceId: string,\n preferenceName: PreferenceName,\n permissionsBody: SharePermissionsBody[]\n) => {\n await PreferenceClient.getInstance().addPermissions(preferenceName, preferenceId, permissionsBody);\n};\n\nexport const updateLabelErrors = <T extends CustomClass>(classes: T[]): T[] => {\n const labelCount: Record<string, number> = {};\n\n // Count occurrences of each label\n for (const cls of classes) {\n if (!cls.label) continue;\n labelCount[cls.label] = (labelCount[cls.label] || 0) + 1;\n }\n\n // Update labelError for each class\n return classes.map(cls => {\n const error = checkForValidLabelString(cls.label);\n return {\n ...cls,\n labelError: error || (labelCount[cls.label] > 1 ? LABEL_EXISTS : undefined),\n };\n }) as T[];\n};\n\ninterface SelectedFeatureDetails {\n isDefaultState: boolean;\n feature?: FilterDefinition;\n retainedFeatureClasses?: CustomNumericalClass[] | CustomCategoricalClass[];\n}\n\nexport const getFeatureClassesFromSettings = (\n componentSettings: Params,\n contextCustomFeature: SelectedCustomFeatureContext,\n filterDefinitions: FilterDefinition[],\n page: PageInfo\n): SelectedFeatureDetails => {\n const selectedBaseFeature = contextCustomFeature?.value;\n const featureClasses = componentSettings?.customFeatureTiers;\n\n if (!selectedBaseFeature || !featureClasses) {\n return { isDefaultState: true };\n }\n\n let selectedFeatureClass = filterDefinitions.find(filterDefinition =>\n featureClasses[0].includes(filterDefinition.name)\n );\n\n if (!selectedFeatureClass) {\n ContextManager.getInstance().updateCustomFeatureValues({\n customFeature: {\n [page.name]: {\n selectedFeature: undefined,\n },\n },\n });\n return { isDefaultState: true };\n }\n selectedFeatureClass = { ...selectedFeatureClass, value: selectedFeatureClass.name };\n\n const isNumericRange = selectedFeatureClass.type === FilterType.numericRange;\n\n const featureClassesArray: CustomNumericalClass[] | CustomCategoricalClass[] = featureClasses[0]\n .split('|')\n .splice(1)\n .filter(featureClass => !featureClass.includes('Others'))\n .map((featureClass, index, list) => {\n const [strMin, strLabel] = featureClass.split(':');\n\n if (isNumericRange) {\n return {\n min: Number(strMin),\n label: strLabel ?? '',\n max: index === list.length - 1 ? null : Number(list[index + 1].split(':')[0]),\n };\n }\n\n return {\n label: strLabel ?? '',\n selectedOptions: strMin.split(','),\n options: selectedFeatureClass.options,\n };\n });\n\n return { isDefaultState: false, feature: selectedFeatureClass, retainedFeatureClasses: featureClassesArray };\n};\n","import React, { createContext, useContext, useState, ReactNode, useEffect, useCallback } from 'react';\nimport { Preference, PreferenceName } from '../../types';\nimport { PreferenceClient } from '../../client/preference.client';\n\ninterface UniquePreferencesContextProps {\n allUniquePreferences: Record<string, Preference[]>;\n refreshPreferences: () => Promise<void>;\n}\n\nconst UniquePreferencesContext = createContext<UniquePreferencesContextProps | undefined>(undefined);\n\nexport const UniquePreferencesProvider: React.FC<{ children: ReactNode }> = ({ children }) => {\n const [allUniquePreferences, setAllUniquePreferences] = useState<Record<string, Preference[]>>();\n\n const fetchAllUniquePreferences = useCallback(async () => {\n const results = await Promise.allSettled([\n PreferenceClient.getInstance().getAllUnique(PreferenceName.segment_price),\n PreferenceClient.getInstance().getAllUnique(PreferenceName.segment_feature),\n ]);\n\n const segmentPricePreferences = results[0].status === 'fulfilled' ? results[0].value : [];\n const segmentFeaturePreferences = results[1].status === 'fulfilled' ? results[1].value : [];\n\n setAllUniquePreferences({\n [PreferenceName.segment_price]: segmentPricePreferences,\n [PreferenceName.segment_feature]: segmentFeaturePreferences,\n });\n }, []);\n\n useEffect(() => {\n fetchAllUniquePreferences();\n }, [fetchAllUniquePreferences]);\n\n return (\n <UniquePreferencesContext.Provider value={{ allUniquePreferences, refreshPreferences: fetchAllUniquePreferences }}>\n {children}\n </UniquePreferencesContext.Provider>\n );\n};\n\nexport const useUniquePreferences = (): UniquePreferencesContextProps => {\n const uniquePreferences = useContext(UniquePreferencesContext);\n if (!uniquePreferences) {\n return { allUniquePreferences: {}, refreshPreferences: async () => {} };\n }\n return uniquePreferences;\n};\n","import { useEffect, useState } from 'react';\nimport { PreferenceClient } from '../client/preference.client';\nimport { Context, FilterDefinition, FilterType, Preference, PreferenceName, ValueSet } from '../types';\nimport {\n CustomNumericalClass,\n SavedCustomFeatureSegments,\n CustomCategoricalClass,\n} from '../types/content/custom.types';\nimport { ContextManager } from '../context/manager';\nimport { isViewer } from './utils';\nimport { useUniquePreferences } from '../context/unique-preferences/unique-preferences.provider';\n\n/**\n * Hook to save and load the saved custom segmentation\n * from the preference client\n * @returns - the list of saved custom segmentation and the functions to save, delete and load the custom segmentations\n */\nexport const useSaveFeatureSegments = () => {\n const preferencesFeatureSegments = PreferenceName.segment_feature;\n const [currentSelectedCell, setCurrentSelectedCell] = useState<string[]>(undefined);\n const [applicableSavedFeatureSegments, setApplicableSavedFeatureSegments] = useState<SavedCustomFeatureSegments[]>(\n []\n );\n const [unapplicableSavedFeatureSegments, setUnapplicableSavedFeatureSegments] = useState<\n SavedCustomFeatureSegments[]\n >([]);\n\n const { allUniquePreferences, refreshPreferences } = useUniquePreferences();\n\n /*\n Here we will need to listen to context changes to update the list of saved custom segmentations.\n We will need to call loadSavedCustomSegmentation when the context changes as it depends on the\n current cell being applied.\n */\n useEffect(() => {\n const subscriber = async (context: Context) => {\n if (!context) {\n return;\n }\n\n const settings = await ContextManager.getInstance().getSettings(['cell']);\n const cells: string[] = settings.cell.values.map(cell => cell.value);\n\n setCurrentSelectedCell(cells);\n };\n\n const context = ContextManager.getInstance().get();\n const section = context?.filters.sections;\n\n const featureList = section?.find(item => item?.label === 'Features')?.ungrouped?.definitions;\n\n (async () => {\n await loadSavedCustomFeatureSegments(featureList);\n })();\n\n ContextManager.getInstance().subscribeToSettingsChanges(subscriber);\n return () => ContextManager.getInstance().unsubscribeFromSettingsChanges(subscriber);\n }, []);\n\n useEffect(() => {\n refreshPreferences();\n }, [refreshPreferences, applicableSavedFeatureSegments, unapplicableSavedFeatureSegments]);\n\n /**\n * Saves the custom feature segments to preference client\n * @param name Name of the custom segmentation\n * @param desc Description of the custom segmentation\n * @param customSegmentation The custom segmentation to save\n * @param min the minimum value within the allowed range of the custom segmentation\n * @param max the maximum value within the allowed range of the custom segmentation\n */\n const saveCustomFeatureSegments = (\n name: string,\n desc: string,\n featureSegmentsLabel: string,\n customSegmentation: string,\n filterType: FilterType,\n min?: number,\n max?: number\n ) => {\n const customFeatSegmentsToSave: ValueSet = {};\n customFeatSegmentsToSave[name] = convertSavedCustomFeatureSegmentsToPreferenceData(\n featureSegmentsLabel,\n desc,\n customSegmentation,\n filterType,\n min,\n max\n );\n PreferenceClient.getInstance()\n .createNewUnique(preferencesFeatureSegments, customFeatSegmentsToSave)\n .then(response => {\n if (response) {\n const newCustomFeatureSegments = convertPreferenceDataToSavedCustomFeatSeg(response);\n setApplicableSavedFeatureSegments([...applicableSavedFeatureSegments, newCustomFeatureSegments]);\n }\n });\n };\n\n /**\n * Convert the response from the preference client to SavedCustomFeatureSegments object\n * @param data - the data retrieved from the preference client\n * @returns - the SavedCustomFeatureSegments object\n */\n const convertPreferenceDataToSavedCustomFeatSeg = (data: Preference): SavedCustomFeatureSegments => {\n if (!data.data || Object.keys(data.data).length === 0) {\n return undefined;\n }\n\n const prefName = Object.keys(data.data)[0];\n const prefData = data.data[prefName];\n const cell = prefData.cell;\n const prefCustomFeatSeg = prefData.customSegmentation[0].split('|');\n const prefCustomFeatSegLabel = prefData.segmentationLabel[0];\n const description = prefData.description[0];\n const maxRange = prefData.max[0];\n const featSegmentName = prefCustomFeatSeg[0].split(':')[1];\n const destructuredCustomFeatSeg = prefCustomFeatSeg.slice(1);\n const filterType = FilterType[prefData.filterType?.[0] as keyof typeof FilterType] || FilterType.numericRange; //default to numeric range to handle existing saved filter without filter type\n const isNumericRange = filterType === FilterType.numericRange;\n const customFeatSegmentArray: CustomNumericalClass[] | CustomCategoricalClass[] = destructuredCustomFeatSeg.map(\n (custSeg, index, list) => {\n const [strKey, strLabel] = custSeg.split(':');\n return {\n min: isNumericRange ? Number(strKey) : undefined,\n label: strLabel,\n max: isNumericRange\n ? index === list.length - 1\n ? Number(maxRange)\n : Number(list[index + 1].split(':')[0])\n : undefined,\n selectedOptions: !isNumericRange ? strKey : undefined, //for categorical only\n options: undefined, //for categorical only pending handling\n };\n }\n );\n\n const savedCustomFeatSeg: SavedCustomFeatureSegments = {\n name: prefName,\n segmentationName: featSegmentName,\n segmentationLabel: prefCustomFeatSegLabel,\n description,\n customSegmentation: customFeatSegmentArray,\n preferenceId: data.id,\n createdBy: data.created_by,\n cells: cell,\n filterType: filterType,\n };\n return savedCustomFeatSeg;\n };\n\n /**\n * Convert the values for saved custom feature segment to from the preference data format\n * @param featureSegmentsLabel the label of the custom feature segment\n * @param desc the description of the saved custom segmentation\n * @param customFeatSegTiers the tiers of the custom feature segment\n * @param min lowest value of the tier\n * @param max highest value of the tier\n * @returns the converted data\n */\n const convertSavedCustomFeatureSegmentsToPreferenceData = (\n featureSegmentsLabel: string,\n desc: string,\n customFeatSegTiers: string,\n filterType: FilterType,\n min: number,\n max: number\n ) => {\n return {\n description: [desc],\n customSegmentation: [customFeatSegTiers],\n //min and max is need for conversion upon retrieval\n min: [min?.toString()],\n max: [max?.toString()],\n cell: currentSelectedCell,\n segmentationLabel: [featureSegmentsLabel],\n filterType: [filterType],\n };\n };\n\n /**\n * Deletes the saved custom feature segments in preference client\n * @param customFeatSegToDelete - the saved custom feature segments to delete\n * @param userId\n */\n const deleteSavedCustomFeatureSegments = async (\n customFeatSegToDelete: SavedCustomFeatureSegments,\n userId: string\n ) => {\n // if the user is the viewer, delete the permissions, otherwise delete the whole preference\n if (isViewer(customFeatSegToDelete.createdBy, userId)) {\n await PreferenceClient.getInstance().deletePermissions(\n preferencesFeatureSegments,\n customFeatSegToDelete.preferenceId,\n userId\n );\n } else {\n await PreferenceClient.getInstance().delete(preferencesFeatureSegments, customFeatSegToDelete.preferenceId);\n }\n const updatedSavedCustomFeatSeg = applicableSavedFeatureSegments.filter(\n customFeatSeg => customFeatSeg.preferenceId !== customFeatSegToDelete.preferenceId\n );\n const updatedUnapplicableSavedCustomFeatSeg = unapplicableSavedFeatureSegments.filter(\n customFeatSeg => customFeatSeg.preferenceId !== customFeatSegToDelete.preferenceId\n );\n setApplicableSavedFeatureSegments(updatedSavedCustomFeatSeg);\n setUnapplicableSavedFeatureSegments(updatedUnapplicableSavedCustomFeatSeg);\n };\n\n /**\n * Loads the saved custom feature segments from the preference client\n * @param featureList\n */\n const loadSavedCustomFeatureSegments = async (featureList: FilterDefinition[]) => {\n const preferenceSegments = allUniquePreferences[preferencesFeatureSegments] || [];\n const applicableSavedFeatSegArray: SavedCustomFeatureSegments[] = [];\n const unApplicableSavedFeatSegArray: SavedCustomFeatureSegments[] = [];\n\n if (!preferenceSegments) {\n return;\n }\n\n //convert from preference to savedCustomSegmentation list\n preferenceSegments.forEach(preference => {\n const featureSegmentation = convertPreferenceDataToSavedCustomFeatSeg(preference);\n\n if (!featureSegmentation) {\n return;\n }\n\n const isApplicableSavedFeatures = featureList.some(\n feature => feature.name === featureSegmentation.segmentationName\n );\n\n //Check if the cells is applicable in this selected context\n if (isApplicableSavedFeatures) {\n applicableSavedFeatSegArray.push(featureSegmentation);\n } else {\n unApplicableSavedFeatSegArray.push(featureSegmentation);\n }\n });\n\n setApplicableSavedFeatureSegments(applicableSavedFeatSegArray);\n setUnapplicableSavedFeatureSegments(unApplicableSavedFeatSegArray);\n };\n\n return {\n applicableSavedFeatureSegments,\n unapplicableSavedFeatureSegments,\n loadSavedCustomFeatureSegments,\n saveCustomFeatureSegments,\n deleteSavedCustomFeatureSegments,\n };\n};\n","import { useEffect, useState } from 'react';\nimport { PreferenceClient } from '../client/preference.client';\nimport { Preference, PreferenceName, ValueSet } from '../types';\nimport { CustomPriceClass, SavedCustomPriceClass } from '../types/content/custom.types';\nimport { getPriceClassesFromSettings, isViewer } from './utils';\nimport { useUniquePreferences } from '../context/unique-preferences/unique-preferences.provider';\n\n/**\n * Hook to save and load the saved custom price classes\n * from the preference client\n * @returns - the saved price classes and the functions to save and load the price classes\n */\nexport const useSavePriceClasses = () => {\n const preferencesCustomPriceClassesName = PreferenceName.segment_price;\n\n const [savedPriceClasses, setSavedPriceClasses] = useState<SavedCustomPriceClass[]>([]);\n const [currentActive, setCurrentActive] = useState<string>('');\n const { allUniquePreferences, refreshPreferences } = useUniquePreferences();\n\n useEffect(() => {\n loadSavedPriceClasses();\n }, []);\n\n useEffect(() => {\n refreshPreferences();\n }, [refreshPreferences, savedPriceClasses]);\n\n /**\n * Convert the response from the preference client\n * to the format that the Custom Price Classes will use\n * @param data - the response returned from the preference client\n * @returns - the formatted price classes\n */\n const convertPreferenceDataToPriceClasses = (data: Preference): SavedCustomPriceClass | undefined => {\n if (!data.data || Object.keys(data.data).length === 0) {\n return undefined;\n }\n\n const prefName = Object.keys(data.data)[0];\n const prefData = data.data[prefName];\n const currency = prefData.currency[0];\n const roundTo = Number(prefData.roundTo[0]);\n const description = prefData.description[0];\n\n const formattedPriceList = getPriceClassesFromSettings(\n { customPriceTiers: prefData.priceClasses },\n { label: '', min: 0, max: roundTo, currency, roundTo }\n );\n\n return {\n name: prefName,\n description,\n priceClasses: formattedPriceList,\n preferenceId: data.id,\n createdBy: data.created_by,\n };\n };\n\n /**\n * Convert the custom price classes to the format that the preference client will use\n * @param desc - the description of the saved custom price class\n * @param priceClasses - the list of saved custom price class\n * @returns - the formatted data\n */\n const convertPriceClassesToPreferenceData = (desc: string, priceClasses: CustomPriceClass[]) => {\n const currency = priceClasses[0].currency;\n const roundTo = priceClasses[0].roundTo;\n let tierValues = '';\n priceClasses.forEach((item, index, list) => {\n tierValues += `${item.min}:${item.label}${index < list.length - 1 ? '|' : ''}`;\n });\n\n return {\n currency: [currency],\n roundTo: [roundTo.toString()],\n description: [desc],\n priceClasses: [tierValues],\n };\n };\n\n /**\n * Save the new saved price class to the preference client\n * @param name - the name of the new saved price class\n * @param desc - the description of the new saved price classes\n * @param customPriceClasses - the custom price classes\n */\n const savePriceClasses = (name: string, desc: string, customPriceClasses: CustomPriceClass[]) => {\n const priceClassToSave: ValueSet = {};\n priceClassToSave[name] = convertPriceClassesToPreferenceData(desc, customPriceClasses);\n\n PreferenceClient.getInstance()\n .createNewUnique(preferencesCustomPriceClassesName, priceClassToSave)\n .then(response => {\n if (!response) {\n return;\n }\n const priceClasses = convertPreferenceDataToPriceClasses(response);\n setSavedPriceClasses([...savedPriceClasses, priceClasses]);\n });\n };\n\n /**\n * Delete the saved price classes filter in preference client\n * @param savedPriceClass - the saved price classes to delete\n * @param userId - the userId of the user\n */\n const deleteSavedPriceClasses = async (savedPriceClass: SavedCustomPriceClass, userId: string) => {\n // if the user is the viewer, delete the permissions, otherwise delete the whole preference\n if (isViewer(savedPriceClass.createdBy, userId)) {\n await PreferenceClient.getInstance().deletePermissions(\n preferencesCustomPriceClassesName,\n savedPriceClass.preferenceId,\n userId\n );\n } else {\n await PreferenceClient.getInstance().delete(preferencesCustomPriceClassesName, savedPriceClass.preferenceId);\n }\n const priceClasses = savedPriceClasses.filter(spc => spc.preferenceId != savedPriceClass.preferenceId);\n setSavedPriceClasses(priceClasses);\n return priceClasses;\n };\n\n /**\n * Load the saved price classes from the preference client\n * and store it within the states\n */\n const loadSavedPriceClasses = () => {\n const priceClasses: SavedCustomPriceClass[] = [];\n if (allUniquePreferences[preferencesCustomPriceClassesName]?.length) {\n allUniquePreferences[preferencesCustomPriceClassesName].forEach(preference => {\n const priceClass = convertPreferenceDataToPriceClasses(preference);\n if (priceClass) {\n priceClasses.push(priceClass);\n }\n });\n }\n setSavedPriceClasses(priceClasses);\n };\n\n /**\n * Set the active saved price classes\n * Called when the user apply a saved price classes\n * @param preferenceId - the preferenceId of the saved price classes\n */\n const setIsActive = (preferenceId: string) => {\n const index = savedPriceClasses.findIndex(item => item.preferenceId === preferenceId);\n setCurrentActive(index > -1 ? preferenceId : '');\n };\n\n return {\n savedPriceClasses,\n currentActive,\n savePriceClasses,\n loadSavedPriceClasses,\n setIsActive,\n deleteSavedPriceClasses,\n convertPriceClassesToPreferenceData,\n convertPreferenceDataToPriceClasses,\n };\n};\n","import React from 'react';\n\ntype AnyEvent = MouseEvent | TouchEvent;\n\nfunction useOnOutsideClick<T extends HTMLElement = HTMLElement>(\n ref: React.RefObject<T>,\n handler: (event: AnyEvent) => void\n) {\n React.useEffect(() => {\n const listener = (event: AnyEvent) => {\n const el = ref.current;\n if (!el || el.contains(event.target as Node)) {\n return;\n }\n\n handler(event);\n };\n\n document.addEventListener('mousedown', listener);\n document.addEventListener('touchstart', listener);\n\n return () => {\n document.removeEventListener('mousedown', listener);\n document.removeEventListener('touchstart', listener);\n };\n }, [ref, handler]);\n}\n\nexport { useOnOutsideClick };\n","import React from 'react';\n\nexport function useScrollIntoView<T extends HTMLElement = HTMLElement>(ref: React.RefObject<T>) {\n React.useEffect(() => {\n if (!ref.current) {\n return;\n }\n ref.current.scrollIntoView({\n behavior: 'auto',\n block: 'nearest',\n inline: 'nearest',\n });\n }, [ref]);\n}\n","import React, { useRef } from 'react';\nimport { elements } from '@ecosystem/newron-design-system';\nimport { useScrollIntoView } from '../../tools/intoview.hook';\nimport { MenuItemWithContext, MenuItemOption } from '../../types';\nimport { ContextManager } from '../../context/manager';\n\ntype Props = {\n item: MenuItemWithContext;\n menuValue: string;\n valuesToPrevent: string[];\n onClick: (item: MenuItemOption) => void;\n};\nfunction MenuItemContextComponent({ item, menuValue, valuesToPrevent, onClick }: Props) {\n const el = useRef<HTMLButtonElement>(null);\n useScrollIntoView(el);\n\n const { label, contextSetting, value, disabled } = item;\n const isSelected = value === menuValue;\n const isDisabled = disabled ? true : valuesToPrevent.includes(value);\n\n const handleValueClick = () => {\n onClick({\n type: 'MenuItem',\n value: value,\n label: label,\n });\n };\n\n const handleEditClick = () => {\n ContextManager.getInstance().setSettingAsRequiresEdit(contextSetting);\n handleValueClick();\n };\n\n const { Icon } = elements;\n\n return (\n <div style={{ minWidth: '180px' }} className=\"flex items-stretch\">\n <button\n className={`text-left pl-2 pr-3 flex-grow flex items-center gap-1 py-3 ${\n isDisabled ? 'cursor-default text-inactive' : 'transition-colors hover:bg-brand-lightest'\n }`}\n onClick={handleValueClick}\n disabled={isDisabled}\n ref={isSelected ? el : undefined}\n >\n <span data-test-id=\"menu-item-tick\" className={`${isSelected ? 'visible' : 'hidden'}`}>\n <Icon color=\"brand\" size=\"sm\">\n <Icon.icons.Check />\n </Icon>\n </span>\n <span className=\"flex-grow nowrap\">{label}</span>\n </button>\n <button\n onClick={handleEditClick}\n className={`m-1 rounded border border-default px-2 ${\n isDisabled ? 'cursor-default text-inactive' : 'transition-colours hover:bg-brand-lightest'\n }`}\n disabled={isDisabled}\n >\n <Icon color={isDisabled ? 'inactive' : 'brand'} size=\"sm\">\n <Icon.icons.Edit />\n </Icon>\n </button>\n </div>\n );\n}\n\nexport { MenuItemContextComponent };\n","import React from 'react';\nimport { elements } from '@ecosystem/newron-design-system';\nimport { MenuItemWithContext } from '../../types';\nimport { ContextManager } from '../../context/manager';\n\nconst { Icon } = elements;\n\ntype MenuContextButtonProps = {\n item: MenuItemWithContext;\n isLoading?: boolean;\n inactive?: boolean;\n};\nfunction MenuContextButton({ item, isLoading, inactive }: MenuContextButtonProps) {\n const { label, contextSetting, disabled } = item;\n\n const isButtonDisabled = disabled || isLoading;\n\n const handleClick = () => {\n ContextManager.getInstance().setSettingAsRequiresEdit(contextSetting);\n };\n\n const baseClassNames = 'relative rounded text-left text-lg p-0 flex items-center transition-colors';\n const enabledClassNames = 'text-brand hover:bg-brand-lightest hover:text-brand-dark';\n const disabledClassNames = 'text-inactive cursor-not-allowed';\n\n const className = `${baseClassNames} ${isButtonDisabled ? disabledClassNames : enabledClassNames}`;\n\n const iconColor = isButtonDisabled ? 'inactive' : 'brand';\n\n if (inactive) {\n return (\n <div className={`${baseClassNames} text-brand`}>\n <span className=\"flex-grow nowrap\">{label}</span>\n </div>\n );\n }\n return (\n <button disabled={isButtonDisabled} onClick={handleClick} style={{ boxShadow: 'none' }} className={className}>\n <span className=\"flex-grow nowrap\">{label}</span>\n <Icon testId=\"icon-chevron-down\" color={iconColor} size=\"sm\">\n <Icon.icons.ChevronDown />\n </Icon>\n </button>\n );\n}\n\nexport { MenuContextButton, MenuContextButtonProps };\n","let defaultOptions = {};\n\nexport function getDefaultOptions() {\n return defaultOptions;\n}\n\nexport function setDefaultOptions(newOptions) {\n defaultOptions = newOptions;\n}\n","/**\n * @module constants\n * @summary Useful constants\n * @description\n * Collection of useful date constants.\n *\n * The constants could be imported from `date-fns/constants`:\n *\n * ```ts\n * import { maxTime, minTime } from \"./constants/date-fns/constants\";\n *\n * function isAllowedTime(time) {\n * return time <= maxTime && time >= minTime;\n * }\n * ```\n */\n\n/**\n * @constant\n * @name daysInWeek\n * @summary Days in 1 week.\n */\nexport const daysInWeek = 7;\n\n/**\n * @constant\n * @name daysInYear\n * @summary Days in 1 year.\n *\n * @description\n * How many days in a year.\n *\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occurs every 4 years, except for years that are divisible by 100 and not divisible by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n */\nexport const daysInYear = 365.2425;\n\n/**\n * @constant\n * @name maxTime\n * @summary Maximum allowed time.\n *\n * @example\n * import { maxTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = 8640000000000001 <= maxTime;\n * //=> false\n *\n * new Date(8640000000000001);\n * //=> Invalid Date\n */\nexport const maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * @constant\n * @name minTime\n * @summary Minimum allowed time.\n *\n * @example\n * import { minTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = -8640000000000001 >= minTime;\n * //=> false\n *\n * new Date(-8640000000000001)\n * //=> Invalid Date\n */\nexport const minTime = -maxTime;\n\n/**\n * @constant\n * @name millisecondsInWeek\n * @summary Milliseconds in 1 week.\n */\nexport const millisecondsInWeek = 604800000;\n\n/**\n * @constant\n * @name millisecondsInDay\n * @summary Milliseconds in 1 day.\n */\nexport const millisecondsInDay = 86400000;\n\n/**\n * @constant\n * @name millisecondsInMinute\n * @summary Milliseconds in 1 minute\n */\nexport const millisecondsInMinute = 60000;\n\n/**\n * @constant\n * @name millisecondsInHour\n * @summary Milliseconds in 1 hour\n */\nexport const millisecondsInHour = 3600000;\n\n/**\n * @constant\n * @name millisecondsInSecond\n * @summary Milliseconds in 1 second\n */\nexport const millisecondsInSecond = 1000;\n\n/**\n * @constant\n * @name minutesInYear\n * @summary Minutes in 1 year.\n */\nexport const minutesInYear = 525600;\n\n/**\n * @constant\n * @name minutesInMonth\n * @summary Minutes in 1 month.\n */\nexport const minutesInMonth = 43200;\n\n/**\n * @constant\n * @name minutesInDay\n * @summary Minutes in 1 day.\n */\nexport const minutesInDay = 1440;\n\n/**\n * @constant\n * @name minutesInHour\n * @summary Minutes in 1 hour.\n */\nexport const minutesInHour = 60;\n\n/**\n * @constant\n * @name monthsInQuarter\n * @summary Months in 1 quarter.\n */\nexport const monthsInQuarter = 3;\n\n/**\n * @constant\n * @name monthsInYear\n * @summary Months in 1 year.\n */\nexport const monthsInYear = 12;\n\n/**\n * @constant\n * @name quartersInYear\n * @summary Quarters in 1 year\n */\nexport const quartersInYear = 4;\n\n/**\n * @constant\n * @name secondsInHour\n * @summary Seconds in 1 hour.\n */\nexport const secondsInHour = 3600;\n\n/**\n * @constant\n * @name secondsInMinute\n * @summary Seconds in 1 minute.\n */\nexport const secondsInMinute = 60;\n\n/**\n * @constant\n * @name secondsInDay\n * @summary Seconds in 1 day.\n */\nexport const secondsInDay = secondsInHour * 24;\n\n/**\n * @constant\n * @name secondsInWeek\n * @summary Seconds in 1 week.\n */\nexport const secondsInWeek = secondsInDay * 7;\n\n/**\n * @constant\n * @name secondsInYear\n * @summary Seconds in 1 year.\n */\nexport const secondsInYear = secondsInDay * daysInYear;\n\n/**\n * @constant\n * @name secondsInMonth\n * @summary Seconds in 1 month\n */\nexport const secondsInMonth = secondsInYear / 12;\n\n/**\n * @constant\n * @name secondsInQuarter\n * @summary Seconds in 1 quarter.\n */\nexport const secondsInQuarter = secondsInMonth * 3;\n\n/**\n * @constant\n * @name constructFromSymbol\n * @summary Symbol enabling Date extensions to inherit properties from the reference date.\n *\n * The symbol is used to enable the `constructFrom` function to construct a date\n * using a reference date and a value. It allows to transfer extra properties\n * from the reference date to the new date. It's useful for extensions like\n * [`TZDate`](https://github.com/date-fns/tz) that accept a time zone as\n * a constructor argument.\n */\nexport const constructFromSymbol = Symbol.for(\"constructDateFrom\");\n","import { constructFromSymbol } from \"./constants.js\";\n\n/**\n * @name constructFrom\n * @category Generic Helpers\n * @summary Constructs a date using the reference date and the value\n *\n * @description\n * The function constructs a new date using the constructor from the reference\n * date and the given value. It helps to build generic functions that accept\n * date extensions.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * Starting from v3.7.0, it allows to construct a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The reference date to take constructor from\n * @param value - The value to create the date\n *\n * @returns Date initialized using the given date and value\n *\n * @example\n * import { constructFrom } from \"./constructFrom/date-fns\";\n *\n * // A function that clones a date preserving the original type\n * function cloneDate<DateType extends Date>(date: DateType): DateType {\n * return constructFrom(\n * date, // Use constructor from the given date\n * date.getTime() // Use the date value to create a new date\n * );\n * }\n */\nexport function constructFrom(date, value) {\n if (typeof date === \"function\") return date(value);\n\n if (date && typeof date === \"object\" && constructFromSymbol in date)\n return date[constructFromSymbol](value);\n\n if (date instanceof Date) return new date.constructor(value);\n\n return new Date(value);\n}\n\n// Fallback for modularized imports:\nexport default constructFrom;\n","import { constructFrom } from \"./constructFrom.js\";\n\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * Starting from v3.7.0, it clones a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param argument - The value to convert\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport function toDate(argument, context) {\n // [TODO] Get rid of `toDate` or `constructFrom`?\n return constructFrom(context || argument, argument);\n}\n\n// Fallback for modularized imports:\nexport default toDate;\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfWeek} function options.\n */\n\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfWeek(date, options) {\n const defaultOptions = getDefaultOptions();\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const _date = toDate(date, options?.in);\n const day = _date.getDay();\n const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n\n _date.setDate(_date.getDate() - diff);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeek;\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { getWeekYear } from \"./getWeekYear.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\n\n/**\n * The {@link startOfWeekYear} function options.\n */\n\n/**\n * @name startOfWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Return the start of a local week-numbering year for the given date.\n *\n * @description\n * Return the start of a local week-numbering year.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week-numbering year\n *\n * @example\n * // The start of an a week-numbering year for 2 July 2005 with default settings:\n * const result = startOfWeekYear(new Date(2005, 6, 2))\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // The start of a week-numbering year for 2 July 2005\n * // if Monday is the first day of week\n * // and 4 January is always in the first week of the year:\n * const result = startOfWeekYear(new Date(2005, 6, 2), {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfWeekYear(date, options) {\n const defaultOptions = getDefaultOptions();\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const year = getWeekYear(date, options);\n const firstWeek = constructFrom(options?.in || date, 0);\n firstWeek.setFullYear(year, 0, firstWeekContainsDate);\n firstWeek.setHours(0, 0, 0, 0);\n const _date = startOfWeek(firstWeek, options);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeekYear;\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getWeekYear} function options.\n */\n\n/**\n * @name getWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Get the local week-numbering year of the given date.\n *\n * @description\n * Get the local week-numbering year of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @param date - The given date\n * @param options - An object with options.\n *\n * @returns The local week-numbering year\n *\n * @example\n * // Which week numbering year is 26 December 2004 with the default settings?\n * const result = getWeekYear(new Date(2004, 11, 26))\n * //=> 2005\n *\n * @example\n * // Which week numbering year is 26 December 2004 if week starts on Saturday?\n * const result = getWeekYear(new Date(2004, 11, 26), { weekStartsOn: 6 })\n * //=> 2004\n *\n * @example\n * // Which week numbering year is 26 December 2004 if the first week contains 4 January?\n * const result = getWeekYear(new Date(2004, 11, 26), { firstWeekContainsDate: 4 })\n * //=> 2004\n */\nexport function getWeekYear(date, options) {\n const _date = toDate(date, options?.in);\n const year = _date.getFullYear();\n\n const defaultOptions = getDefaultOptions();\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const firstWeekOfNextYear = constructFrom(options?.in || date, 0);\n firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate);\n firstWeekOfNextYear.setHours(0, 0, 0, 0);\n const startOfNextYear = startOfWeek(firstWeekOfNextYear, options);\n\n const firstWeekOfThisYear = constructFrom(options?.in || date, 0);\n firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate);\n firstWeekOfThisYear.setHours(0, 0, 0, 0);\n const startOfThisYear = startOfWeek(firstWeekOfThisYear, options);\n\n if (+_date >= +startOfNextYear) {\n return year + 1;\n } else if (+_date >= +startOfThisYear) {\n return year;\n } else {\n return year - 1;\n }\n}\n\n// Fallback for modularized imports:\nexport default getWeekYear;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link addDays} function options.\n */\n\n/**\n * @name addDays\n * @category Day Helpers\n * @summary Add the specified number of days to the given date.\n *\n * @description\n * Add the specified number of days to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of days to be added.\n * @param options - An object with options\n *\n * @returns The new date with the days added\n *\n * @example\n * // Add 10 days to 1 September 2014:\n * const result = addDays(new Date(2014, 8, 1), 10)\n * //=> Thu Sep 11 2014 00:00:00\n */\nexport function addDays(date, amount, options) {\n const _date = toDate(date, options?.in);\n if (isNaN(amount)) return constructFrom(options?.in || date, NaN);\n\n // If 0 days, no-op to avoid changing times in the hour before end of DST\n if (!amount) return _date;\n\n _date.setDate(_date.getDate() + amount);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default addDays;\n","import React from 'react';\nimport { inputs } from '@ecosystem/newron-design-system';\nimport { WeekPickerProps } from '@ecosystem/newron-design-system/build/components/datePicker/weekPicker/WeekPicker';\nimport { WeekPickerParams } from '../types';\nconst { WeekPicker, WeekFormatType } = inputs;\n\ninterface CustomWeekPickerProps {\n defaultStartDate: WeekPickerProps['defaultDate'];\n defaultEndDate: WeekPickerProps['defaultDate'];\n minDate: WeekPickerProps['minDate'];\n maxDate: WeekPickerProps['maxDate'];\n onChange: (type: 'from' | 'to', index: number) => (param: WeekPickerParams) => void;\n index: number;\n}\nexport const CustomWeekPicker: React.FC<CustomWeekPickerProps> = ({\n defaultStartDate,\n defaultEndDate,\n minDate,\n maxDate,\n onChange,\n index,\n}: CustomWeekPickerProps) => {\n const fromOnChangeFn = onChange('from', index);\n const toOnChangeFn = onChange('to', index);\n return (\n <>\n <div>\n <WeekPicker\n label={'Start date'}\n dateFormat={WeekFormatType['Ww yyyy']}\n defaultDate={defaultStartDate}\n minDate={minDate}\n maxDate={maxDate}\n onChange={(value: string) => fromOnChangeFn({ value })}\n name=\"start-date\"\n />\n </div>\n <div>\n <WeekPicker\n label={'End date'}\n dateFormat={WeekFormatType['Ww yyyy']}\n defaultDate={defaultEndDate}\n minDate={minDate}\n maxDate={maxDate}\n onChange={(value: string) => toOnChangeFn({ value })}\n name=\"end-date\"\n />\n </div>\n </>\n );\n};\n","import React from 'react';\nimport { inputs } from '@ecosystem/newron-design-system';\nimport { MonthPickerProps } from '@ecosystem/newron-design-system/build/components/datePicker/monthPicker/MonthPicker';\nimport { MonthPickerParams } from '../types';\n\nconst { MonthPicker, MonthFormatType } = inputs;\n\ninterface CustomMonthPickerProps {\n defaultStartDate: MonthPickerProps['defaultDate'];\n defaultEndDate: MonthPickerProps['defaultDate'];\n minDate: MonthPickerProps['minDate'];\n maxDate: MonthPickerProps['maxDate'];\n onChange: (type: 'from' | 'to', index: number) => (param: MonthPickerParams) => void;\n index: number;\n}\nexport const CustomMonthPicker: React.FC<CustomMonthPickerProps> = ({\n defaultStartDate,\n defaultEndDate,\n minDate,\n maxDate,\n onChange,\n index,\n}: CustomMonthPickerProps) => {\n const fromOnChangeFn = onChange('from', index);\n const toOnChangeFn = onChange('to', index);\n return (\n <>\n <div>\n <MonthPicker\n label={'Start date'}\n dateFormat={MonthFormatType['MMM yyyy']}\n defaultDate={defaultStartDate}\n minDate={minDate}\n maxDate={maxDate}\n onChange={(value: Date, formatted: string) => fromOnChangeFn({ value, formatted })}\n name=\"start-date\"\n />\n </div>\n <div>\n <MonthPicker\n label={'End date'}\n dateFormat={MonthFormatType['MMM yyyy']}\n defaultDate={defaultEndDate}\n minDate={minDate}\n maxDate={maxDate}\n onChange={(value: Date, formatted: string) => toOnChangeFn({ value, formatted })}\n name=\"end-date\"\n />\n </div>\n </>\n );\n};\n","import React from 'react';\n\nfunction MenuSeparatorComponent() {\n return (\n <div\n data-test-id=\"selection-menu-separator\"\n className=\"border-b border-light my-1 mx-2\"\n style={{ height: '1px' }}\n />\n );\n}\n\nexport { MenuSeparatorComponent };\n","import { DEFAULT_ERROR_MESSAGE } from '../../common/constants/error';\n\nexport class GenericError extends Error {\n message: string;\n\n constructor(message: string = DEFAULT_ERROR_MESSAGE) {\n super(message);\n this.message = message;\n }\n}\n","import React, { useMemo, useState } from 'react';\nimport { overlays, actions } from '@ecosystem/newron-design-system';\nimport { CustomMenuModalSettings, Period, Periodicity } from '../../types';\n\nimport { addDays, startOfWeekYear, FirstWeekContainsDate } from 'date-fns';\n\nimport { CustomWeekPicker } from './custom/weekPicker';\nimport { CustomMonthPicker } from './custom/monthPicker';\nimport { MAX_ALLOWED_COMPARISON_PERIODS, WARNING_MESSAGE_ON_APPLY } from './constants';\nimport { MenuSeparatorComponent } from './menu.separator';\nimport { MonthPickerParams, WeekPickerParams } from './types';\nimport { GenericError } from '../../design/error/genericError';\n\nconst { Modal } = overlays;\nconst { Button } = actions;\n\nexport interface CustomModalProps {\n isOpen: boolean;\n onClose: () => void;\n currentSelectedPeriods?: string[];\n customMenuModalSettings: CustomMenuModalSettings;\n onApply: (start: Period[], end: Period[]) => void;\n}\n\ntype PeriodWithDate = Period & { date: Date };\n\ntype ComparisonPeriod = {\n from: PeriodWithDate;\n to: PeriodWithDate;\n};\n\nexport const CustomComparisonModal: React.FC<CustomModalProps> = ({\n isOpen,\n onClose,\n onApply,\n currentSelectedPeriods,\n customMenuModalSettings,\n}: CustomModalProps) => {\n const [_, ...currentCustomPeriods] = currentSelectedPeriods ?? [];\n\n const { customMenuOptions } = customMenuModalSettings.customComparisonPeriods;\n\n const periodOptions = useMemo(() => {\n return customMenuOptions.map(periodOptions => ({\n ...periodOptions,\n date:\n periodOptions.periodicity === Periodicity.Weekly\n ? weekNumberToDate(periodOptions.name)\n : new Date(periodOptions.name),\n }));\n }, [customMenuModalSettings]);\n\n const defaultEnd = periodOptions.at(0);\n const defaultStart = periodOptions.at(1) ?? periodOptions.at(0);\n const selectedCustomPeriods = getCustomSelectedPeriods(currentCustomPeriods, periodOptions);\n const defaultCustomPeriods =\n selectedCustomPeriods.length > 0\n ? getCustomSelectedPeriods(currentCustomPeriods, periodOptions)\n : [{ from: defaultStart, to: defaultEnd }];\n const [comparisonPeriods, setComparisonPeriods] = useState<ComparisonPeriod[]>([...defaultCustomPeriods]);\n\n const handleApply = () => {\n const start = comparisonPeriods.map(({ from }) => from);\n const end = comparisonPeriods.map(({ to }) => to);\n onApply(start, end);\n };\n\n const { date: maxDate } = periodOptions.at(0);\n const { date: minDate } = periodOptions.at(-1);\n\n const handleOnChange = (type: 'from' | 'to', index: number) => (param: MonthPickerParams | WeekPickerParams) => {\n const value = param.value;\n let period;\n if (typeof value === 'string') {\n period = periodOptions.find(period => period.name === (param as WeekPickerParams).value);\n } else {\n period = periodOptions.find(period => period.name === (param as MonthPickerParams).formatted);\n }\n if (!period) {\n throw new GenericError('Comparision period not found in comparison options');\n }\n const newComparisonPeriod = { ...comparisonPeriods[index], [type]: period };\n const copyComparisionPeriod = [...comparisonPeriods];\n copyComparisionPeriod[index] = newComparisonPeriod;\n setComparisonPeriods(copyComparisionPeriod);\n };\n\n const areComparisonPeriodsInvalid = (comparisonPeriods: ComparisonPeriod[]) => {\n return comparisonPeriods.reduce((acc, curr) => {\n const current = !curr.from || !curr.to || curr.from.date > curr.to.date;\n return acc || current;\n }, false);\n };\n const isApplyDisabled = areComparisonPeriodsInvalid(comparisonPeriods);\n\n const addComparisonPeriod = () => {\n const newPeriod: ComparisonPeriod = {\n from: defaultStart,\n to: defaultEnd,\n };\n const newPeriods = [...comparisonPeriods, newPeriod];\n setComparisonPeriods(newPeriods);\n };\n\n const deleteComparisionPeriod = (index: number) => {\n const filteredPeriod = comparisonPeriods.filter((_, i) => i !== index);\n setComparisonPeriods(filteredPeriod);\n };\n const getCustomPicker = (comparisonPeriod: ComparisonPeriod, index: number) => {\n const periodicity = periodOptions[0].periodicity;\n return periodicity === Periodicity.Weekly ? (\n <CustomWeekPicker\n key={`weekly_${index}`}\n defaultStartDate={comparisonPeriod.from.date}\n defaultEndDate={comparisonPeriod.to.date}\n minDate={minDate}\n maxDate={maxDate}\n onChange={handleOnChange}\n index={index}\n />\n ) : (\n <CustomMonthPicker\n key={`monthly_${index}`}\n defaultStartDate={comparisonPeriod.from.date}\n defaultEndDate={comparisonPeriod.to.date}\n minDate={minDate}\n maxDate={maxDate}\n onChange={handleOnChange}\n index={index}\n />\n );\n };\n //temporary check MAX_ALLOWED_COMPARISON_PERIODS for backward compatibility check. Will removed once bff changes merged to master.\n const customLimitOption =\n parseInt(customMenuModalSettings.customComparisonPeriods?.customLimitOption) || MAX_ALLOWED_COMPARISON_PERIODS;\n\n return (\n <Modal size=\"md\" isOpen={isOpen} onClose={onClose} renderInPortal>\n <Modal.Header>Custom Comparison</Modal.Header>\n <div className=\"px-6 pt-4 pb-6 flex-grow-0 modal-body overflow-visible\">\n {comparisonPeriods.map((period, index, cp) => {\n return (\n <React.Fragment key={`custom_fr_${index}`}>\n <div key={index} className={'flex flex-row justify-between items-end gap-1 overflow-visible pb-4'}>\n {getCustomPicker(period, index)}\n {cp.length > 1 ? (\n <Button\n key={`delete_${index}`}\n mode=\"simple\"\n testId={`delete-comparison-btn-${index}`}\n onClick={() => {\n deleteComparisionPeriod(index);\n }}\n label=\"Delete\"\n >\n <Button.Icon>\n <Button.Icon.icons.Delete />\n </Button.Icon>\n </Button>\n ) : null}\n </div>\n\n {customLimitOption > 1 && <MenuSeparatorComponent key={`seperator_${index}`} />}\n </React.Fragment>\n );\n })}\n <div>\n {comparisonPeriods.length < customLimitOption && (\n <Button mode=\"simple\" onClick={addComparisonPeriod} testId=\"add-comparison-btn\">\n Add Comparison period\n </Button>\n )}\n </div>\n {isApplyDisabled && <span className=\"text-ui-red\">{WARNING_MESSAGE_ON_APPLY}</span>}\n </div>\n <Modal.Footer>\n <Button mode=\"secondary\" onClick={onClose} testId=\"modal-cancel-btn\">\n Cancel\n </Button>\n <Button disabled={isApplyDisabled} onClick={handleApply} testId=\"modal-apply-btn\">\n Apply\n </Button>\n </Modal.Footer>\n </Modal>\n );\n};\n\nconst weekNumberToDate = (weekLabel: string): Date => {\n const [week, year] = weekLabel.split(' ');\n const weekNumber = week.replace('W', '');\n const randomDateInYear = new Date(parseInt(year), 5, 5);\n const startOfFirstWeekDate = startOfWeekYear(randomDateInYear, {\n firstWeekContainsDate: 3 as FirstWeekContainsDate,\n });\n const targetDate = addDays(startOfFirstWeekDate, (parseInt(weekNumber) - 1) * 7);\n return targetDate;\n};\n\nconst getCustomSelectedPeriods = (\n currentCustomPeriods: string[],\n periodOptions: PeriodWithDate[]\n): ComparisonPeriod[] => {\n const selected: ComparisonPeriod[] = [];\n\n if (currentCustomPeriods && currentCustomPeriods.length > 0) {\n currentCustomPeriods.forEach((val: string) => {\n const [startSeq, endSeq] = val.split('-');\n const start = periodOptions.find(option => option.periodSeq === parseInt(startSeq));\n const end = periodOptions.find(option => option.periodSeq === parseInt(endSeq));\n if (start && end) {\n selected.push({\n from: start,\n to: end,\n });\n }\n });\n }\n return selected;\n};\n","export const WARNING_MESSAGE_ON_APPLY = 'The end date must be greater than the start date';\nexport const MAX_ALLOWED_COMPARISON_PERIODS = 3;\nexport const MAX_ALLOWED_CUSTOM_CLASSES = 10;\n","import React, { useRef } from 'react';\nimport { elements } from '@ecosystem/newron-design-system';\nimport { useScrollIntoView } from '../../tools/intoview.hook';\nimport { MenuItemOption } from '../../types';\n\nexport type Props = {\n item: MenuItemOption;\n menuValue: string;\n valuesToPrevent: string[];\n onClick: (item: MenuItemOption) => void;\n};\nfunction MenuItemComponent({ item, menuValue, valuesToPrevent, onClick }: Props) {\n const el = useRef<HTMLButtonElement>(null);\n useScrollIntoView(el);\n\n const { label, description, value, disabled, isBrand } = item;\n const isSelected = value === menuValue;\n const isDisabled = disabled || valuesToPrevent.some(val => value.startsWith(val.split('|')[0]));\n\n const { Icon, TruncateText } = elements;\n\n const brandDefaultTextCss = isBrand ? 'text-brand' : 'transition-colors hover:bg-brand-lightest';\n const disableDefaultTextCss = isDisabled ? 'cursor-default text-inactive' : brandDefaultTextCss;\n\n return (\n <button\n style={{ minWidth: '180px' }}\n className={`text-left pl-2 pr-3 w-full flex align-top gap-1 py-3 ${disableDefaultTextCss}`}\n onClick={() => onClick(item)}\n disabled={isDisabled}\n ref={isSelected ? el : undefined}\n >\n <span data-test-id=\"menu-item-tick\" className={`${isSelected ? 'visible' : 'hidden'}`}>\n <Icon color=\"brand\" size=\"sm\">\n <Icon.icons.Check />\n </Icon>\n </span>\n <span className=\"flex-grow\" style={{ maxWidth: '256px' }}>\n <span className=\"flex-row\">\n <TruncateText text={label} type={TruncateText.Type.SPAN} style={{ wordBreak: 'break-all' }} />\n {item.isBeta && (\n <span className=\"badge inline-block font-normal rounded-full bg-darkest text-white text-xs px-1.5 ml-1 mt-0.5\">\n Beta\n </span>\n )}\n </span>\n {description && (\n <span style={{ maxWidth: '256px' }}>\n <TruncateText\n text={description}\n type={TruncateText.Type.SPAN}\n className={`mt-2 text-lighter block text-sm`}\n style={{ wordBreak: 'break-all' }}\n />\n </span>\n )}\n </span>\n </button>\n );\n}\n\nexport { MenuItemComponent };\n","import React from 'react';\nimport { MenuItemLabel } from '../../types';\n\ntype Props = {\n label: MenuItemLabel;\n};\nfunction MenuLabelComponent({ label }: Props) {\n return <div className=\"text-sm text-lighter px-2 py-1\">{label.text}</div>;\n}\n\nexport { MenuLabelComponent };\n","import { MenuItem, MenuItemOption, MenuItemSubMenu } from '../../types';\n\nexport function itemsFilter(item: MenuItem | MenuItemSubMenu, term?: string): boolean {\n if (!term) {\n return true;\n }\n\n if (item.type !== 'MenuItem') {\n return true;\n }\n\n const terms = term.split(' ');\n return terms.every(t => (item as MenuItemOption).label.toLocaleLowerCase().includes(t.toLocaleLowerCase()));\n}\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./sub.menu.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./sub.menu.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, { CSSProperties, Fragment, useRef, useState } from 'react';\nimport { elements } from '@ecosystem/newron-design-system';\nimport { MenuItem, MenuItemOption, MenuItemSubMenu } from '../../types';\nimport { MenuItemComponent } from './menu.item';\nimport { MenuSeparatorComponent } from './menu.separator';\nimport { MenuLabelComponent } from './menu.label';\nimport { itemsFilter } from './shared';\nimport { SearchInput } from '../../design/search/search';\nimport './sub.menu.css';\n\ntype Coords = {\n top: number;\n spaceToBottom: number;\n};\n\ntype SubProps = {\n sub: MenuItemSubMenu;\n menuValue: string;\n valuesToPrevent: string[];\n onClick: (item: MenuItemOption) => void;\n};\nfunction SubMenuComponent({ sub, menuValue, valuesToPrevent, onClick }: SubProps) {\n const [expanded, setExpanded] = useState<boolean>(false);\n const [coords, setCoords] = useState<Coords | undefined>();\n const [searchTerm, setSearchTerm] = useState<string | undefined>();\n\n const el = useRef<HTMLDivElement>(null);\n\n const { label, items, disabled } = sub;\n\n const selectedItem = items.find(item => {\n if (item.type === 'MenuItem') {\n return menuValue === item.value;\n } else if (item.type === 'MenuSubMenu') {\n return item.items.some(subItem => subItem.type === 'MenuItem' && menuValue === subItem.value);\n }\n return false;\n });\n\n const isSelected = selectedItem !== undefined;\n const getSelectionLabel = (selectedItem: MenuItem) => {\n if (selectedItem?.type === 'MenuSubMenu') {\n return (\n (selectedItem as MenuItemSubMenu).items.find(\n item => item.type === 'MenuItem' && menuValue === item.value\n ) as MenuItemOption\n ).label;\n }\n return (selectedItem as MenuItemOption)?.label;\n };\n let selectionLabel = getSelectionLabel(selectedItem);\n\n const openSubMenu = () => {\n if (!el.current || disabled) {\n return;\n }\n\n const btnRect = el.current.children[0].getBoundingClientRect();\n const space = window.innerHeight - btnRect.top;\n\n setCoords({\n top: btnRect.top,\n spaceToBottom: space,\n });\n setExpanded(true);\n };\n\n const closeSubMenu = () => {\n setExpanded(false);\n };\n\n const handleItemClick = (item: MenuItemOption) => {\n onClick(item);\n setSearchTerm(undefined);\n };\n\n const handleSearchChange = (term?: string) => {\n setSearchTerm(term);\n };\n\n let style: CSSProperties | undefined;\n let hasSearch = false;\n const seachHeight = 56;\n if (expanded && coords !== undefined) {\n const itemsCount = items.filter(item => item.type === 'MenuItem').length;\n hasSearch = itemsCount >= 10;\n let roughMenuHeight = itemsCount * 44;\n if (hasSearch) {\n roughMenuHeight += seachHeight;\n }\n\n if (roughMenuHeight > 400) {\n roughMenuHeight = 400;\n }\n\n const parentWidth = el.current.parentElement.getBoundingClientRect().width;\n const left = parentWidth;\n style = {\n left: `${left}px`,\n };\n\n const parentTop = el.current.parentElement.getBoundingClientRect().top;\n if (roughMenuHeight > coords.spaceToBottom) {\n // Handle when the menu is too big to fit in the screen\n const seachPadding = hasSearch ? seachHeight : 0;\n style.marginTop = `${window.innerHeight - parentTop - roughMenuHeight - 24 + seachPadding}px`;\n style.maxHeight = `${roughMenuHeight}px`;\n } else {\n style.marginTop = `${coords.top - parentTop}px`;\n }\n }\n\n const { Icon } = elements;\n\n return (\n <div ref={el} onMouseEnter={openSubMenu} onMouseLeave={closeSubMenu}>\n <button\n style={{ minWidth: '200px' }}\n className={`text-left pl-2 pr-3 w-full flex items-start gap-1 py-3 transition-colors ${\n disabled ? 'text-inactive cursor-default' : 'hover:bg-brand-lightest'\n }`}\n disabled={disabled}\n onClick={openSubMenu}\n >\n <span className={`${isSelected ? 'visible' : 'hidden'}`}>\n <Icon color=\"brand\" size=\"sm\">\n <Icon.icons.Check />\n </Icon>\n </span>\n <span className=\"flex-grow\">\n <span className={'block wrap'}>{label}</span>\n {selectionLabel && <span className=\"block wrap text-lighter text-sm pt-1\">{selectionLabel}</span>}\n </span>\n <Icon size=\"sm\" color={disabled ? 'inactive' : 'default'}>\n <Icon.icons.ChevronRight />\n </Icon>\n </button>\n {expanded && (\n <div\n className=\"absolute flex flex-column bg-white rounded border border-default w-80 left-full top-0\"\n style={style}\n >\n {hasSearch && (\n <div className=\"p-2\">\n <SearchInput term={searchTerm} onChange={handleSearchChange} placeholder=\"Find items\" />\n </div>\n )}\n <div className=\"flex-grow overflow-y-auto overscroll-contain sub-menu\">\n {items\n .filter(item => itemsFilter(item, searchTerm))\n .map((item, idx) => (\n <Fragment key={`menu_item_${idx}`}>\n {item.type === 'MenuItem' && (\n <MenuItemComponent\n item={item}\n menuValue={menuValue}\n valuesToPrevent={valuesToPrevent}\n onClick={handleItemClick}\n />\n )}\n {item.type === 'MenuSubMenu' && (\n <SubMenuComponent\n sub={item}\n menuValue={menuValue}\n valuesToPrevent={valuesToPrevent}\n onClick={handleItemClick}\n />\n )}\n {item.type === 'MenuSeparator' && <MenuSeparatorComponent />}\n {item.type === 'MenuLabel' && <MenuLabelComponent label={item} />}\n </Fragment>\n ))}\n </div>\n </div>\n )}\n </div>\n );\n}\n\nexport { SubMenuComponent };\n","import { containers } from '@ecosystem/newron-design-system';\nimport React, { CSSProperties, Fragment, FunctionComponent, useEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useAnalyticsContext } from '../../analytics/analytics.provider';\nimport { ContextManager } from '../../context/manager';\nimport { UiDataParams } from '../../data';\nimport { useDataState } from '../../data/provider';\nimport { SearchInput } from '../../design/search/search';\nimport { CustomTimeSeriesModal } from '../../elements/timeSeries/custom/timeSeries.custom.modal';\nimport constants from '../../filters/constants';\nimport { useSaveFeatureSegments } from '../../filters/saveFeatureSegments.hook';\nimport { useSavePriceClasses } from '../../filters/savePriceClasses.hook';\nimport { formatFeatureClassForParams, FormatFeatureClassInput, formatPricesForParams } from '../../filters/utils';\nimport { useCorePageState } from '../../page/provider';\nimport { useOnOutsideClick } from '../../tools/outsideclick.hook';\nimport {\n Context,\n DataColumn,\n EventName,\n FilterSections,\n FilterType,\n MenuItem,\n MenuItemDataColumns,\n MenuItemOption,\n MenuItemSubMenu,\n Params,\n Period,\n SelectionMenu,\n TrackingElementType,\n} from '../../types';\nimport { MenuItemContextComponent } from './menu.context';\nimport { MenuContextButton } from './menu.context.button';\nimport { CustomComparisonModal } from './menu.custom.modal';\nimport { MenuItemComponent } from './menu.item';\nimport { MenuLabelComponent } from './menu.label';\nimport { MenuSeparatorComponent } from './menu.separator';\nimport { itemsFilter } from './shared';\nimport { SubMenuComponent } from './sub.menu';\nimport {\n MenuButtonProps,\n MenuColumnOption,\n SecondFeatureSegmentationConfig,\n SelectedCustomFeatureContext,\n} from './types';\n\ntype Coords = {\n top: number;\n left: number;\n btnHeight: number;\n spaceToBottom: number;\n};\n\nconst { FilterTrayTabId } = containers;\n\ntype Props = {\n button: FunctionComponent<MenuButtonProps>;\n buttonLabel?: string;\n menuConfig: SelectionMenu;\n values: Params;\n inactive?: boolean;\n onUpdate: (updates: Params, item: MenuItemOption, menu: SelectionMenu) => void;\n};\nfunction SelectionMenuComponent({ menuConfig, values, onUpdate, button, buttonLabel, inactive }: Props) {\n const [expanded, setExpanded] = useState<boolean>(false);\n const [menuItems, setMenuItems] = useState<(MenuItem | MenuItemSubMenu)[]>([]);\n const [dataColumns, setDataColumns] = useState<MenuColumnOption[]>([]);\n const [searchTerm, setSearchTerm] = useState<string | undefined>();\n const [coords, setCoords] = useState<Coords | undefined>();\n const [selectedCustomFeature, setSelectedCustomFeature] = useState<SelectedCustomFeatureContext>();\n const [originMenu, setOriginMenu] = useState<string>();\n\n const [menuCustomItem, setMenuCustomItem] = useState<MenuItemOption>(null);\n\n const el = useRef<HTMLDivElement>(null);\n const { data, isDataLoading: dataLoading } = useDataState();\n const {\n dslLoading,\n contextLoading,\n setCustomizationTray,\n trayType,\n setCustomizationTrayTabId,\n setIsFilterTray,\n page,\n } = useCorePageState();\n const isLoading = dslLoading || contextLoading || dataLoading;\n\n const { trackPageEvent } = useAnalyticsContext();\n\n const { savedPriceClasses, setIsActive } = useSavePriceClasses();\n\n const { applicableSavedFeatureSegments } = useSaveFeatureSegments();\n const { PRICE_CUSTOMIZATION, FEATURE_CUSTOMIZATION } = constants;\n //temporary initial state for custom numerical feature, to prevent crashing when first selecting 'Custom' feature menu option\n const [sections, setSections] = useState<FilterSections[]>();\n useEffect(() => {\n const subscriber = (context: Context) => {\n if (context) {\n const {\n filters: { sections },\n } = context;\n setSections(sections);\n const menu = context.customFeature?.[page.name];\n const origin = menu?.originMenu;\n setSelectedCustomFeature(menu?.selectedFeature);\n setOriginMenu(origin);\n }\n };\n ContextManager.getInstance().subscribeToSettingsChanges(subscriber);\n return () => ContextManager.getInstance().unsubscribeFromSettingsChanges(subscriber);\n }, []);\n\n const baseFeatures = sections?.find(item => item?.label === 'Features')?.ungrouped?.definitions;\n\n const getInitialFeatureClass = () => {\n if (!sections || !baseFeatures.length) return '';\n\n const firstFeature = baseFeatures[0];\n\n if (firstFeature.type === FilterType.numericRange) {\n return `name:${firstFeature?.name}|${firstFeature?.min}:`;\n } else {\n const featureClasses = {\n label: 'All',\n selectedOptions: firstFeature.options.map(item => item.value),\n options: firstFeature.options,\n };\n const input: FormatFeatureClassInput = {\n selectedFeatureName: firstFeature.name,\n selectedFeatureType: firstFeature.type,\n segmentClasses: [featureClasses],\n };\n return formatFeatureClassForParams(input);\n }\n };\n\n const closeMenu = () => {\n setCoords(undefined);\n setExpanded(false);\n };\n\n const {\n paramName,\n items,\n preventDuplicatesWith = [],\n customizationTraySettings,\n customMenuModalSettings,\n } = menuConfig;\n\n useEffect(() => {\n document.addEventListener('scroll', closeMenu);\n return () => {\n document.removeEventListener('scroll', closeMenu);\n };\n }, []);\n\n useEffect(() => {\n const menuItems: (MenuItem | MenuItemSubMenu)[] = [];\n items.forEach(item => {\n if (item.type === 'DataColumns') {\n const allColumns: DataColumn[] = [...(data?.getDataColumns() || []), ...(data?.getAvailableColumns() || [])];\n const { ofType, requireArrayLength } = item as MenuItemDataColumns;\n const columnOptions: MenuColumnOption[] = allColumns\n .filter(col => {\n let isMatch = ofType.includes(col.dataType);\n if (isMatch && requireArrayLength) {\n isMatch = col.arrayLength !== null;\n }\n return isMatch;\n })\n .map(col => ({\n value: col.name,\n label: col.label,\n enrichment: col.enrichment,\n }));\n\n setDataColumns(columnOptions);\n\n columnOptions.forEach(opt => {\n const menuItem: MenuItemOption = {\n type: 'MenuItem',\n value: opt.value,\n label: opt.label,\n };\n menuItems.push(menuItem);\n });\n } else {\n menuItems.push(item);\n }\n });\n setMenuItems(menuItems);\n }, [data, items]);\n\n const checkIfCustomPriceTier = (item: MenuItemOption) => {\n return item.value.includes('customPriceTier');\n };\n\n const handleButtonClick = () => {\n if (expanded) {\n setExpanded(false);\n return;\n }\n\n if (!document.getElementById('menu-holder')) {\n const element = document.createElement('div');\n element.setAttribute('id', 'menu-holder');\n element.setAttribute('class', 'fixed top-0 left-0 z-index-toast');\n document.body.appendChild(element);\n }\n\n const btnRect = el.current.children[0].getBoundingClientRect();\n const space = window.innerHeight - btnRect.top;\n\n const coords: Coords = {\n top: btnRect.top,\n left: btnRect.left,\n btnHeight: btnRect.height,\n spaceToBottom: space,\n };\n setCoords(coords);\n setExpanded(true);\n };\n\n const handleUpdateSettings = (updates: Params, itemLabel: string, item: MenuItemOption | null) => {\n onUpdate(updates, item, menuConfig);\n trackPageEvent(EventName.FilterApplied, {\n filterName: menuConfig.metadata?.tracking?.filterName ?? paramName,\n filterType: TrackingElementType.Selectors,\n optionChosen: itemLabel,\n });\n };\n\n const handleViewAllClick = (item: MenuItemOption): void => {\n if (checkIfCustomPriceTier(item)) {\n setCustomizationTray(PRICE_CUSTOMIZATION);\n } else {\n setCustomizationTray(FEATURE_CUSTOMIZATION);\n ContextManager.getInstance().updateCustomFeatureValues({\n customFeature: {\n [page.name]: {\n selectedFeature: selectedCustomFeature,\n originMenu: paramName,\n customFeatureType: item.value,\n secondSegmentationConfig: secondSegmentationConfig,\n },\n },\n });\n }\n\n setIsFilterTray(false);\n setCustomizationTrayTabId(FilterTrayTabId.SavedFilters);\n closeMenu();\n };\n const handleItemClick = (item: MenuItemOption) => {\n const hasChanged = item.value !== values[paramName]?.join('');\n if (!hasChanged && !item.isCustom) {\n resetSearchAndMenu();\n return;\n }\n\n if (item.label === 'View all') {\n handleViewAllClick(item);\n return;\n }\n\n const newValues: Params = { ...{}, ...values };\n newValues[paramName] = [item.value];\n\n if (item.isCustom) {\n handleCustomItemSelection(item, newValues);\n } else {\n handleStandardItemSelection(item, newValues);\n }\n\n setSearchTerm(undefined);\n closeMenu();\n };\n\n const resetSearchAndMenu = () => {\n setSearchTerm(undefined);\n closeMenu();\n };\n\n const handleCustomItemSelection = (item: MenuItemOption, newValues: Params) => {\n setMenuCustomItem(item);\n\n //if Custom is selected\n if (item.label === 'Custom') {\n configureCustomMenu(item, newValues);\n return;\n }\n\n //if one of the saved custom price class is selected.\n if (checkIfCustomPriceTier(item)) {\n const selectedCustomPriceClass = savedPriceClasses.find(savedClass => savedClass.name === item.label);\n if (selectedCustomPriceClass) {\n newValues.customPriceTiers = [formatPricesForParams(selectedCustomPriceClass.priceClasses)];\n updateWithCustomPriceClass(newValues, selectedCustomPriceClass, item);\n }\n return;\n }\n\n const selectedCustomFeatureClass = applicableSavedFeatureSegments.find(\n savedClass => savedClass.name === item.label\n );\n\n if (selectedCustomFeatureClass) {\n const input: FormatFeatureClassInput = {\n selectedFeatureName: selectedCustomFeatureClass.segmentationName,\n selectedFeatureType: selectedCustomFeatureClass.filterType,\n segmentClasses: selectedCustomFeatureClass.customSegmentation,\n excludeOthers: false,\n };\n const formattedSavedCustomSeg = formatFeatureClassForParams(input);\n newValues.customFeatureTiers = [formattedSavedCustomSeg];\n updateWithCustomPriceClass(newValues, selectedCustomFeatureClass, item);\n ContextManager.getInstance().updateCustomFeatureValues({\n customFeature: {\n [page.name]: {\n selectedFeature: {\n type: selectedCustomFeatureClass.filterType,\n label: selectedCustomFeatureClass.segmentationLabel,\n value: selectedCustomFeatureClass.segmentationName,\n savedName: selectedCustomFeatureClass.name,\n },\n originMenu: paramName,\n customFeatureType: item.value,\n secondSegmentationConfig: secondSegmentationConfig,\n },\n },\n });\n }\n };\n\n const updateWithCustomPriceClass = (newValues: Params, selectedCustomClass: any, item: MenuItemOption) => {\n setIsActive(selectedCustomClass.preferenceId);\n setCustomizationTray(null);\n handleUpdateSettings(newValues, item.label, item);\n };\n\n const checkIsApplicableSavedFeature = (selectedCustomFeature: SelectedCustomFeatureContext): boolean => {\n return baseFeatures.some(feature => feature.name === selectedCustomFeature.value);\n };\n\n const configureCustomMenu = (item: MenuItemOption, newValues: Params) => {\n const isFeatureCustomMenuItem = item.value.includes('segment_custom_feature');\n setIsFilterTray(false);\n setCustomizationTrayTabId(FilterTrayTabId.Configure);\n\n if (isFeatureCustomMenuItem) {\n setCustomizationTray(FEATURE_CUSTOMIZATION);\n ContextManager.getInstance().updateCustomFeatureValues({\n customFeature: {\n [page.name]: {\n selectedFeature: selectedCustomFeature,\n originMenu: paramName,\n customFeatureType: item.value,\n secondSegmentationConfig: secondSegmentationConfig,\n },\n },\n });\n if (!selectedCustomFeature || !checkIsApplicableSavedFeature(selectedCustomFeature)) {\n newValues.customFeatureTiers = [getInitialFeatureClass()];\n }\n } else {\n setCustomizationTray(PRICE_CUSTOMIZATION);\n }\n\n handleUpdateSettings(newValues, item.label, item);\n };\n\n const handleStandardItemSelection = (item: MenuItemOption, newValues: Params) => {\n if (customizationTraySettings && trayType) {\n setCustomizationTray(null);\n }\n\n const columnForItem = dataColumns.find(col => col.value === item.value);\n if (columnForItem) {\n newValues[UiDataParams.uiEnrichments] = columnForItem.enrichment ? [columnForItem.enrichment] : undefined;\n }\n\n handleUpdateSettings(newValues, item.label, item);\n\n if (originMenu === paramName) {\n ContextManager.getInstance().updateCustomFeatureValues({\n customFeature: {\n [page.name]: {},\n },\n });\n }\n };\n\n const handleSearchChange = (term?: string) => {\n setSearchTerm(term);\n };\n\n const generateCustomLabel = (item: MenuItemOption): string => {\n if (!item.isCustom || !selectedCustomFeature || checkIfCustomPriceTier(item)) {\n item.description = '';\n return item.label;\n }\n const { label, savedName } = selectedCustomFeature;\n\n if (item.label === 'Custom') {\n item.description = label;\n }\n\n return `${savedName || label} (Custom)`;\n };\n\n const myValue = values[paramName]?.[0];\n let displayLabel = buttonLabel || '...';\n\n if (!buttonLabel) {\n const findLabel = (items: (MenuItem | MenuItemSubMenu)[]): string | undefined => {\n for (const item of items) {\n if ((item.type === 'MenuItem' || item.type === 'MenuItemContext') && myValue === item.value) {\n return generateCustomLabel(item as MenuItemOption);\n } else if (item.type === 'MenuSubMenu') {\n const label = findLabel(item.items);\n if (label) return label;\n }\n }\n\n return undefined; // Ensure a return value if no match is found\n };\n displayLabel = findLabel(menuItems) || displayLabel;\n }\n\n const valuesToPrevent: string[] = [];\n preventDuplicatesWith.forEach(key => {\n valuesToPrevent.push(...(values[key] || []));\n });\n\n if (selectedCustomFeature && preventDuplicatesWith.includes(originMenu)) {\n valuesToPrevent.push(selectedCustomFeature.value.split('_')[0]);\n }\n\n const secondSegmentationConfig: SecondFeatureSegmentationConfig = {\n valuesToPrevent: valuesToPrevent,\n preventDuplicatesWith: preventDuplicatesWith,\n };\n\n const ButtonElement = button;\n\n if (menuItems.length === 1 && menuItems[0].type === 'MenuItemContext') {\n return <MenuContextButton isLoading={isLoading} item={menuItems[0]} inactive={inactive} />;\n }\n\n if (inactive) {\n return <div className=\"text-brand\">{displayLabel}</div>;\n }\n\n const handleApply = (start: Period[], end: Period[]) => {\n const newValues: Params = { ...{}, ...values };\n const customSeq = [];\n start.forEach((_, index) => {\n customSeq.push(`${start[index].periodSeq}-${end[index].periodSeq}`);\n });\n newValues[paramName] = [menuCustomItem.value, ...customSeq];\n handleUpdateSettings(newValues, menuCustomItem.label, menuCustomItem);\n setMenuCustomItem(null);\n };\n\n const handleCustomSeriesApply = (value: string) => {\n const newValues: Params = { ...{}, ...values };\n newValues[paramName] = [menuCustomItem.value, value];\n\n handleUpdateSettings(newValues, menuCustomItem.label, menuCustomItem);\n setMenuCustomItem(null);\n };\n\n const handleCustomModalClose = () => {\n // since we are conditionally rendering the DS modal component, we need to reset the overflow when closing the modal\n document.body.style.overflow = 'unset';\n setMenuCustomItem(null);\n };\n\n const isCustomComparisonModalOpen = !!menuCustomItem && !!customMenuModalSettings?.customComparisonPeriods;\n const isCustomTimeSeriesDurationModalOpen =\n !!menuCustomItem && !!customMenuModalSettings && !!customMenuModalSettings?.customTimeSeriesDuration;\n\n const isButtonDisabled = (!menuItems.length && !buttonLabel) || isLoading;\n\n return (\n <>\n <div className=\"relative\" ref={el}>\n <ButtonElement disabled={isButtonDisabled} onClick={handleButtonClick}>\n {displayLabel}\n </ButtonElement>\n {expanded && coords && (\n <>\n {createPortal(\n <MenuList\n value={myValue}\n items={menuItems}\n closeMenu={closeMenu}\n coords={coords}\n onItemClick={handleItemClick}\n onSearchChange={handleSearchChange}\n valuesToPrevent={valuesToPrevent}\n searchTerm={searchTerm}\n />,\n document.getElementById('menu-holder')\n )}\n </>\n )}\n </div>\n {isCustomComparisonModalOpen && (\n <CustomComparisonModal\n isOpen={!!menuCustomItem}\n onClose={handleCustomModalClose}\n onApply={handleApply}\n currentSelectedPeriods={values[paramName]}\n customMenuModalSettings={customMenuModalSettings}\n />\n )}\n\n {isCustomTimeSeriesDurationModalOpen && (\n <CustomTimeSeriesModal\n isOpen={!!menuCustomItem}\n onClose={handleCustomModalClose}\n onApply={handleCustomSeriesApply}\n currentSelectedPeriods={values[paramName]}\n customMenuModalSettings={customMenuModalSettings}\n />\n )}\n </>\n );\n}\n\ntype MenuListProps = {\n value: string;\n items: (MenuItem | MenuItemSubMenu)[];\n coords: Coords;\n closeMenu: () => void;\n onItemClick: (item: MenuItemOption) => void;\n valuesToPrevent: string[];\n searchTerm?: string;\n onSearchChange: (term?: string) => void;\n};\nfunction MenuList({\n value,\n items,\n coords,\n closeMenu,\n onItemClick,\n onSearchChange,\n valuesToPrevent,\n searchTerm,\n}: MenuListProps) {\n const el = useRef<HTMLDivElement>(null);\n const { top, btnHeight, left, spaceToBottom } = coords;\n const isOnlyItems = items.every(item => item.type !== 'MenuSubMenu');\n const itemsCount = items.filter(item => item.type === 'MenuItem').length;\n const hasSearch = isOnlyItems && itemsCount >= 10;\n\n useOnOutsideClick(el, closeMenu);\n\n let roughMenuHeight = itemsCount * 44;\n if (hasSearch) {\n roughMenuHeight += 56;\n }\n\n const outerStyle: CSSProperties = {\n top: `${top}px`,\n left: `${left}px`,\n };\n\n const innerStyle: CSSProperties = {\n marginTop: `${btnHeight + 4}px`,\n };\n\n if (roughMenuHeight > spaceToBottom - btnHeight - 16) {\n innerStyle.maxHeight = `${spaceToBottom - btnHeight - 16}px`;\n }\n\n return (\n <div style={outerStyle} className=\"fixed overscroll-contain z-index-toast\" ref={el}>\n <div\n style={innerStyle}\n className=\"relative h-full flex flex-column text-md border border-default rounded bg-white shadow-sm\"\n >\n {hasSearch && (\n <div className=\"p-2\">\n <SearchInput term={searchTerm} onChange={onSearchChange} placeholder=\"Find items\" />\n </div>\n )}\n <div className={`flex-grow ${isOnlyItems ? 'overflow-y-auto overscroll-contain' : ''}`}>\n {items\n .filter(item => itemsFilter(item, searchTerm))\n .map((item, idx) => (\n <Fragment key={`menu_item_${idx}`}>\n {item.type === 'MenuItem' && (\n <MenuItemComponent\n item={item}\n valuesToPrevent={valuesToPrevent}\n menuValue={value}\n onClick={onItemClick}\n />\n )}\n {item.type === 'MenuItemContext' && (\n <MenuItemContextComponent\n item={item}\n valuesToPrevent={valuesToPrevent}\n menuValue={value}\n onClick={onItemClick}\n />\n )}\n {item.type === 'MenuSubMenu' && (\n <SubMenuComponent\n sub={item}\n menuValue={value}\n valuesToPrevent={valuesToPrevent}\n onClick={onItemClick}\n />\n )}\n {item.type === 'MenuSeparator' && <MenuSeparatorComponent />}\n {item.type === 'MenuLabel' && <MenuLabelComponent label={item} />}\n </Fragment>\n ))}\n </div>\n </div>\n </div>\n );\n}\n\nexport { SelectionMenuComponent };\n","import React from 'react';\nimport { elements } from '@ecosystem/newron-design-system';\nimport { MenuButtonProps } from '../selection.menu';\n\nexport const TitleButton: React.FC<MenuButtonProps> = ({ onClick, children, disabled }) => {\n const { Icon } = elements;\n\n const baseClassNames = 'relative rounded text-left text-lg p-0 flex items-center transition-colors';\n const enabledClassNames = 'text-brand hover:bg-brand-lightest hover:text-brand-dark';\n const disabledClassNames = 'text-inactive cursor-not-allowed';\n\n const className = `${baseClassNames} ${!disabled ? enabledClassNames : disabledClassNames}`;\n\n const iconColor = disabled ? 'inactive' : 'brand';\n\n return (\n <button className={className} style={{ boxShadow: 'none' }} disabled={disabled} onClick={onClick}>\n <span className=\"flex-grow nowrap\">{children}</span>\n <Icon testId=\"icon-chevron-down\" color={iconColor} size=\"sm\">\n <Icon.icons.ChevronDown />\n </Icon>\n </button>\n );\n};\n","import React, { useEffect, useRef, useState } from 'react';\nimport { feedback } from '@ecosystem/newron-design-system';\nimport { useIsMounted } from '../../tools';\n\ntype Props = {\n isActive: boolean;\n withIndicator?: boolean;\n};\nfunction Loading({ isActive, withIndicator = false }: Props) {\n const [masked, setMasked] = useState<boolean>(false);\n const timer = useRef<ReturnType<typeof setTimeout>>(null);\n const isMounted = useIsMounted();\n\n /* eslint-disable react-hooks/exhaustive-deps */\n useEffect(() => {\n clearTimeout(timer.current);\n timer.current = null;\n\n if (!isActive) {\n return;\n }\n\n timer.current = setTimeout(() => {\n if (isMounted()) {\n setMasked(true);\n }\n }, 100);\n }, [isActive]);\n\n if (!isActive) {\n return null;\n }\n\n const { DotsLoader } = feedback;\n return (\n <div data-test-id=\"loading-component\" className=\"absolute inset-0 z-10 flex items-center justify-center\">\n <div className={`absolute inset-0 bg-white transition-opacity ${masked ? 'opacity-50' : 'opacity-0'}`}></div>\n {withIndicator && <DotsLoader testId=\"dots-loader\" />}\n </div>\n );\n}\n\nexport { Loading };\n","import { inputs } from '@ecosystem/newron-design-system';\nimport React, { useEffect, useState } from 'react';\nimport { sanitizeInput } from '../../common/util';\nimport { CustomClass } from '../../types/content/custom.types';\nimport constants from '../constants';\n\nconst { TextInput } = inputs;\nconst { MAX_CUSTOM_CLASSES_NAME_LENGTH } = constants;\n\ntype CustomClassLabelProp = {\n customClasses: CustomClass[];\n labelOnChangeFn: (label: string) => void;\n index: number;\n isLabelOptional: boolean;\n errorMessage?: string;\n};\n\nexport const CustomClassLabel = ({\n customClasses,\n labelOnChangeFn,\n index,\n isLabelOptional,\n errorMessage,\n}: CustomClassLabelProp) => {\n const classToRender = customClasses[index];\n const [labelText, setLabelText] = useState(classToRender.label);\n\n useEffect(() => {\n setLabelText(classToRender.label);\n }, [classToRender]);\n /**\n * Function to handle label change\n * @param input the input\n */\n const handleLabelChange = (input: string): void => {\n const sanitizedInput = sanitizeInput(input);\n setLabelText(sanitizedInput);\n };\n\n return (\n <TextInput\n key={`custom-class-label-${index}`}\n value={labelText}\n onChange={(value: string) => handleLabelChange(value)}\n onBlur={() => labelOnChangeFn(labelText)}\n isInputGroupChild={false}\n placeholder={isLabelOptional ? 'Label (optional)' : 'Label (required)'}\n onFocus={() => {}}\n testId={`custom-class-label-${index}`}\n maxLength={MAX_CUSTOM_CLASSES_NAME_LENGTH}\n errorMessage={errorMessage}\n />\n );\n};\n","import { elements, inputs } from '@ecosystem/newron-design-system';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport constants from '../../constants';\n\nimport { CustomPriceClass } from '../../../types/content/custom.types';\nimport { failsRoundingCriteria, getValidInputWithinRange, isClassDuplicate, roundInput } from '../../utils';\nimport { CustomClassLabel } from '../customClassLabel';\n\nconst { NumberInput } = inputs;\nconst { MAX_CUSTOM_CLASS_TIER_VALUE, MIN_CUSTOM_CLASS_TIER_VALUE } = constants;\nconst { Icon } = elements;\n\ninterface CustomPriceClassesProps {\n index: number;\n priceClasses: CustomPriceClass[]; //to check duplicate\n prevMax: number;\n nextMax: number;\n onPriceChange: (index: number) => (value: number) => void;\n onLabelChange: (index: number) => (label: string) => void;\n labelError?: string;\n}\nexport const CustomPriceClasses: React.FC<CustomPriceClassesProps> = ({\n index,\n priceClasses,\n prevMax,\n nextMax,\n onPriceChange,\n onLabelChange,\n labelError,\n}: CustomPriceClassesProps) => {\n const priceClass = priceClasses[index];\n const [maxValue, setMaxValue] = useState<number>(priceClass.max);\n const [hasError, setHasError] = useState<boolean>(false);\n const priceOnChangeFn = onPriceChange(index);\n\n useEffect(() => {\n //on re-rendering of customClasses if duplicate exist update error state.\n updateClassErrorState(priceClasses);\n\n setMaxValue(Number(priceClass.max?.toFixed(2))); // Update maxValue when classToRender.max changes\n }, [priceClasses, priceClass]);\n\n /**\n * Function to check if the input class has errors exists while re-rendering custom classes.\n * @param customClasses the input\n */\n const updateClassErrorState = useCallback(\n (customClasses: CustomPriceClass[]) => {\n // checked this way as if (classToRender) will return false for 0\n if (priceClass.max !== undefined && priceClass.max !== null) {\n const duplicateClassExist = isClassDuplicate(priceClass, customClasses);\n if (duplicateClassExist || priceClass.max < priceClass.min) {\n setHasError(true);\n return;\n }\n setHasError(false);\n }\n },\n [priceClass]\n );\n\n const handleRangeChange = useCallback(\n (input: number): void => {\n const validInputWithinRange = getValidInputWithinRange(input);\n //Here we will check if the input is within the min and max allowed custom tier\n if (input < validInputWithinRange) {\n setHasError(true);\n setMaxValue(input);\n return;\n }\n setHasError(failsRoundingCriteria(input, priceClass.roundTo));\n setMaxValue(validInputWithinRange);\n },\n [priceClass.roundTo]\n );\n\n const handleRangeBlur = (inputMax: number): void => {\n // we aren't using !input as this would return true if input was 0\n if (inputMax === undefined || inputMax === null) return;\n\n // if roundTo is present we always round the input and remove the error\n priceOnChangeFn(roundInput(inputMax, prevMax, nextMax, priceClass).roundedValue);\n setHasError(false);\n };\n\n /**\n * Function to return what to render in the higher value input, either a infinite sign or a number input\n * @returns JSX.Element\n */\n const renderHigherValue = () => {\n if (index === priceClasses.length - 1) {\n return (\n <div className=\"pl-8 pt-2\">\n <Icon color=\"inactive\" size=\"lg\" testId=\"infinite-icon\">\n <Icon.icons.Infinite />\n </Icon>\n </div>\n );\n }\n return (\n <div className=\"w-2/4\">\n <NumberInput\n key={`max-price-${index}`}\n value={maxValue}\n onChange={input => handleRangeChange(input)}\n onBlur={() => handleRangeBlur(maxValue)}\n testId={`max-price-${index}`}\n hasError={hasError}\n minValue={MIN_CUSTOM_CLASS_TIER_VALUE}\n maxValue={MAX_CUSTOM_CLASS_TIER_VALUE}\n step={Number(priceClass.roundTo)}\n />\n </div>\n );\n };\n\n return (\n <div className=\"pt-5\">\n <div className=\"relative pb-2\" data-test-id={'price'}>\n <div className=\"flex items-start gap-2\">\n <div className=\"w-2/4\">\n <NumberInput\n key={`min-price-${index}`}\n value={priceClass.min}\n disabled={true}\n onChange={() => {}}\n testId={`min-price-${index}`}\n minValue={MIN_CUSTOM_CLASS_TIER_VALUE}\n maxValue={MAX_CUSTOM_CLASS_TIER_VALUE}\n />\n </div>\n\n <span className=\"pt-3\">—</span>\n {renderHigherValue()}\n </div>\n </div>\n <CustomClassLabel\n customClasses={priceClasses}\n labelOnChangeFn={onLabelChange(index)}\n index={index}\n isLabelOptional={true}\n errorMessage={labelError}\n />\n </div>\n );\n};\n","import { ShareModal, authentication, logger } from '@ecosystem/newron-client-lib';\nimport { SharingConfig } from '@ecosystem/newron-client-lib/build/filters/modals';\nimport { ShareUser } from '@ecosystem/newron-client-lib/build/sharing/types';\n\nimport React, { useCallback, useEffect, useState } from 'react';\nimport {\n SavedCustomFeatureSegments,\n SavedCustomPriceClass,\n SharePermissionsBody,\n UserAccess,\n} from '../types/content/custom.types';\nimport { PreferenceName } from '../types';\n\nexport interface ShareCustomModalProps extends SharingConfig {\n /** is the model open or not */\n isOpen: boolean;\n /** the selected saved custom segment to share */\n itemToShare: SavedCustomPriceClass | SavedCustomFeatureSegments;\n /** the PreferenceName */\n preferenceName: PreferenceName;\n /** callback function for closing the modal */\n onClose: () => void;\n /** callback function for when sharing was a success */\n onSuccess?: () => void;\n /** callback function for when sharing failed */\n onShareError?: (error: Error) => void;\n /** function to get the list of currently shared users from preferences endpoint */\n getSharedUsers: (preferenceId: string, preferenceName: PreferenceName) => Promise<UserAccess[]>;\n /** function to share the saved custom segment by updating permissions in preference endpoint */\n shareToUser: (preferenceId: string, permissionsBody: SharePermissionsBody[]) => Promise<void>;\n}\n\nexport const ShareCustomModal = ({\n isOpen,\n itemToShare,\n preferenceName,\n onClose,\n onSuccess,\n onShareError,\n getUsers,\n getSharedUsers,\n shareToUser,\n}: ShareCustomModalProps): JSX.Element => {\n const owner = authentication.getUser();\n const itemType = preferenceName === PreferenceName.segment_price ? 'Price Class' : 'Feature Segment';\n const [currentlySharedUsers, setCurrentlySharedUsers] = useState<ShareUser[]>([]);\n\n /**\n * Function to get the currently shared users\n */\n const getCurrentlySharedUsers = useCallback(async (): Promise<ShareUser[]> => {\n const userAccess: UserAccess[] = await getSharedUsers(itemToShare.preferenceId, preferenceName);\n\n return userAccess.map(user => {\n return {\n accessLevel: user.accessLevel,\n email: user.userInfo.email,\n clientId: owner.clientId,\n familyName: user.userInfo.familyName,\n givenName: user.userInfo.givenName,\n userId: user.userInfo.userId,\n };\n });\n }, [itemToShare, owner.userId]);\n\n // call preferences to get the list of currently shared users\n useEffect(() => {\n if (isOpen) {\n getCurrentlySharedUsers().then(setCurrentlySharedUsers);\n }\n }, [isOpen, owner.userId]);\n\n /**\n * Function to get the available users you are allowed to share with\n */\n const getAvailableUsers = useCallback(async () => {\n const users = await getUsers();\n return users.map(user => ({\n userId: user.userId,\n givenName: user.givenName,\n familyName: user.familyName,\n email: user.email,\n clientId: owner.clientId,\n }));\n }, [getUsers, owner.clientId]);\n\n const onCustomSharedSuccess = useCallback(\n (users: ShareUser[]) => {\n onSuccess();\n logger.info(`Successfully shared custom ${itemType.toLowerCase()}. Total viewers: ${users.length}`);\n },\n [onSuccess]\n );\n\n /**\n * Function to PATCH users to the permissions endpoint\n */\n const onSave = useCallback(\n async (users: ShareUser[]) => {\n const permissionsBody: SharePermissionsBody[] = users.map(user => {\n return {\n userId: user.userId,\n access: user.accessLevel,\n };\n });\n\n onCustomSharedSuccess(users);\n await shareToUser(itemToShare.preferenceId, permissionsBody);\n },\n [itemToShare]\n );\n\n const handleGetUsersError = useCallback(\n (err: Error) => {\n logger.error(err, { action: `Get users to share custom ${itemType.toLowerCase()}`, userId: owner.userId });\n },\n [owner.userId]\n );\n\n const handleShareError = useCallback(\n (e: Error) => {\n logger.error(e, { action: `Sharing custom ${itemType.toLowerCase()}`, userId: owner.userId });\n onShareError && onShareError(e);\n },\n [onShareError]\n );\n\n const handleClose = useCallback(() => {\n onClose();\n }, [onClose]);\n\n return (\n currentlySharedUsers.length > 0 && (\n <ShareModal\n itemName={itemToShare?.name}\n getAvailableUsers={getAvailableUsers}\n users={currentlySharedUsers}\n onClose={handleClose}\n onShareError={handleShareError}\n onGetUsersError={handleGetUsersError}\n onSave={onSave}\n isOpen={isOpen}\n onSuccess={onSuccess}\n itemType={itemType}\n sharableClients={[{ clientId: owner.clientId, clientName: owner.clientName }]}\n />\n )\n );\n};\n","import { useEffect } from 'react';\nimport { ClientSidebar } from '@ecosystem/newron-client-lib';\n\nexport const useSidebar = (key: string) => {\n const { expanded, toggleSidebar, openSidebar, hideSidebar } = ClientSidebar.useSidebar({ key });\n\n useEffect(() => {\n if (expanded) {\n const trayWidth = document.documentElement.style.getPropertyValue('--right-sidebar-width');\n if (trayWidth === '0px') {\n // Only toggle if it's not already expanding\n hideSidebar();\n toggleSidebar();\n }\n requestAnimationFrame(() => {\n window.dispatchEvent(new Event('resize'));\n });\n }\n }, [expanded, toggleSidebar, hideSidebar]);\n\n return { expanded, toggleSidebar, openSidebar, hideSidebar };\n};\n","import { Entity, FilterDefinition, FilterSections } from '../types';\n\nexport type FilterProps = {\n definition: FilterDefinition;\n values?: Entity[];\n disabled: boolean;\n onChange: (name: string, values: Entity[]) => void;\n};\n\nexport type SectionWithDefinitions = [FilterSections, FilterDefinition[]];\n\nexport enum CustomTrayInfo {\n feature = 'feature',\n price = 'price',\n label = 'label',\n}\n\nexport enum CustomSegmentType {\n customPriceClass = 'custom-price',\n customFeatureSegmentation = 'custom-segmentation',\n}\n","import React from 'react';\nimport { overlays, actions } from '@ecosystem/newron-design-system';\nimport { CustomSegmentType } from '../types';\n\nconst { Modal } = overlays;\nconst { Button } = actions;\n\ntype props = {\n /**The header of the modal */\n header: string;\n /** The text description that in the modal*/\n infoText: string;\n /**the subtext of the modal */\n subText: string;\n /** is the modal open or not */\n isOpen: boolean;\n /**modal type - used for data test id*/\n customClassModalType: CustomSegmentType;\n /** callback function for deleting */\n onDelete: () => void;\n /** callback function for closing the modal */\n onClose: () => void;\n};\n\n/**\n * The modal component that is shown when the user press \"Delete\"\n */\nexport const DeleteSavedCustomModal = ({\n header,\n infoText,\n subText,\n isOpen,\n customClassModalType,\n onDelete,\n onClose,\n}: props) => {\n return (\n <Modal isOpen={isOpen} onClose={onClose}>\n <Modal.Header>\n <div className=\"text-2xl\">{header}</div>\n </Modal.Header>\n <Modal.Body>\n <div className=\"mb-4 text-xl\">{infoText}</div>\n <div className=\"mb-2 text-lg text-inactive\">{subText}</div>\n </Modal.Body>\n <Modal.Footer>\n <Button onClick={onClose} mode=\"secondary\" testId={`close-${customClassModalType}-modal-btn`}>\n Cancel\n </Button>\n <Button onClick={onDelete} isDanger={true} testId={`delete-${customClassModalType}-modal-btn`}>\n Delete\n </Button>\n </Modal.Footer>\n </Modal>\n );\n};\n","import { CustomSegmentType } from '../types';\nimport { SavedCustomFeatureSegments, SavedCustomPriceClass } from '../../types/content/custom.types';\nimport { Formatting } from '../../data/formatting';\nimport { ColumnSection, Section, SectionType, SelectionMenu } from '../../types';\n\nexport type SavedCustomSegmentsType = SavedCustomPriceClass | SavedCustomFeatureSegments;\n\ninterface ErrorMessage {\n nameExisted: string;\n}\n\ninterface DeleteSavedModalLabelText {\n header: string;\n infoText: string;\n subText: string;\n}\ninterface SavedCardLabels {\n applyButtonLabels: string;\n deleteButtonLabels: string;\n shareButtonLabels: string;\n testId: string;\n}\n\ninterface SaveModalLabelText {\n header: string;\n placeholder: string;\n}\n\ninterface CustomSegmentsStaticLabels {\n savedModalLabelText: SaveModalLabelText;\n deleteSavedModalLabelText: DeleteSavedModalLabelText;\n savedCardLabels: SavedCardLabels;\n errorMessage: ErrorMessage;\n}\n\nexport const isSavedCustomPriceClass = (\n savedCustomData: SavedCustomSegmentsType\n): savedCustomData is SavedCustomPriceClass => {\n return 'priceClasses' in savedCustomData;\n};\n\nexport const getCustomSegmentsLabelDetails = (\n savedCustomData?: SavedCustomSegmentsType\n): Record<CustomSegmentType, CustomSegmentsStaticLabels> => {\n const currencySymbol =\n savedCustomData && isSavedCustomPriceClass(savedCustomData)\n ? Formatting.getCurrencySymbol(savedCustomData?.priceClasses[0].currency)\n : '';\n\n return {\n [CustomSegmentType.customPriceClass]: {\n savedModalLabelText: {\n header: 'Save price classes',\n placeholder: 'Name of new price classes',\n },\n deleteSavedModalLabelText: {\n header: 'Delete price classes',\n infoText: `Are you sure you want to delete the price classes \"${savedCustomData?.name}\" (${currencySymbol})?`,\n subText: 'Analysis having this price class definition applied are not affected',\n },\n savedCardLabels: {\n applyButtonLabels: 'Apply Saved Custom Price Classes',\n shareButtonLabels: 'Share Saved Custom Price Classes',\n deleteButtonLabels: 'Delete Saved Custom Price Classes',\n testId: 'saved-custom-card',\n },\n errorMessage: {\n nameExisted: 'Price Classes name must be unique',\n },\n },\n [CustomSegmentType.customFeatureSegmentation]: {\n savedModalLabelText: {\n header: 'Save feature segment',\n placeholder: 'Name of new feature segments',\n },\n deleteSavedModalLabelText: {\n header: 'Delete feature segment',\n infoText: `Are you sure you want to delete the feature segment \"${savedCustomData?.name}\"?`,\n subText: 'Analysis having this feature segment definition applied are not affected',\n },\n savedCardLabels: {\n applyButtonLabels: 'Apply Saved Custom Feature Segments',\n shareButtonLabels: 'Share Saved Custom Segmentation',\n deleteButtonLabels: 'Delete Saved Custom Segmentation',\n testId: 'saved-custom-segmentation-card',\n },\n errorMessage: {\n nameExisted: 'New feature segments name must be unique',\n },\n },\n };\n};\n\n/**\n * Retrieves the current tab name or param name from the dsl sections for custom segments\n * @param sections the Sections array from the dsl\n * @param returnType the type of value to return ('name' or 'paramName')\n * @returns the name or param name of the current tab\n */\nexport function getCurrentActiveComponentNameForCustomTray(sections: Section[]): string {\n for (const section of sections) {\n if (section.type !== SectionType.column) continue;\n\n for (const col of (section as ColumnSection).columns) {\n const { heading } = col.component;\n if (typeof heading.title === 'string') continue;\n const menuWithCustomizationTray = heading.title.find(\n titleItem => typeof titleItem !== 'string' && !!(titleItem.menu as SelectionMenu).customizationTraySettings\n );\n if (menuWithCustomizationTray) {\n return col.component.name;\n }\n }\n }\n return '';\n}\n\n/**\n * Compare the list by preferenceId to determine if the saved features list is different\n * @param newSavedFeatureSegments - the new list to be updated to\n * @param currentSavedFeatures - the current list in the component state\n * @returns - whether the saved features list is different\n */\nexport const isDiffSavedFeatures = (\n newSavedFeatureSegments: SavedCustomFeatureSegments[],\n currentSavedFeatures: SavedCustomFeatureSegments[]\n): boolean => {\n if (newSavedFeatureSegments.length !== currentSavedFeatures.length) {\n return true;\n }\n return newSavedFeatureSegments.some((item, index) => item.preferenceId !== currentSavedFeatures[index].preferenceId);\n};\n","import React, { useState } from 'react';\nimport { actions, containers, feedback } from '@ecosystem/newron-design-system';\nimport classNames from 'classnames';\nimport { DeleteSavedCustomModal } from './deleteSavedCustomModal';\nimport { CustomSegmentType } from '../types';\nimport { getCustomSegmentsLabelDetails, isSavedCustomPriceClass, SavedCustomSegmentsType } from './customSegmentsUtils';\nimport { isViewer } from '../utils';\nimport { authentication } from '@ecosystem/newron-client-lib';\nimport { FilterType } from '../../types';\nimport { CustomCategoricalClass, CustomNumericalClass } from '../../types/content/custom.types';\n\nconst { Button } = actions;\nconst { Badge } = feedback;\nconst { Accordion } = containers;\n\ntype Props = {\n /** Custom Segment Type (customPriceClass, customFeatureSegmentation...) */\n customSegmentType: CustomSegmentType;\n /** Save Card Header Label */\n savedCardLabel: string;\n /** saved custom segmentation */\n savedData: SavedCustomSegmentsType;\n /** is current card active or not */\n isActive: boolean;\n /** is current card applicable or not */\n isApplicable: boolean;\n /** callback function for applying */\n handleApply: (savedData: SavedCustomSegmentsType) => void;\n /** callback function for deleting */\n handleDelete: (savedData: SavedCustomSegmentsType, userId?: string) => void;\n /**callback function for sharing */\n handleShare?: (savedData: SavedCustomSegmentsType) => void;\n};\n\n/**\n * The card component used to display the Saved Custom Segmentation for Price Class and Feature Segmentation\n */\nexport const SavedCustomSegmentsCard = ({\n customSegmentType,\n savedCardLabel,\n savedData,\n isActive,\n isApplicable,\n handleApply,\n handleDelete,\n handleShare,\n}: Props) => {\n const owner = authentication.getUser();\n\n const customSegmentDetails = getCustomSegmentsLabelDetails(savedData)[customSegmentType];\n\n const [showDeleteModal, setShowDeleteModal] = useState(false);\n\n //this function is to open/close the modal\n const toggleDeleteModal = () => {\n setShowDeleteModal(prev => !prev);\n };\n\n /**\n * Renders the Delete Modal when the delete button is clicked\n * @returns - the Delete Modal\n */\n const renderDeleteSavedFeatureSegmentsModal = () => {\n return (\n <DeleteSavedCustomModal\n header={customSegmentDetails.deleteSavedModalLabelText.header}\n onClose={toggleDeleteModal}\n infoText={customSegmentDetails.deleteSavedModalLabelText.infoText}\n subText={customSegmentDetails.deleteSavedModalLabelText.subText}\n customClassModalType={customSegmentType}\n isOpen={showDeleteModal}\n onDelete={() => {\n handleDelete(savedData, owner.userId);\n }}\n />\n );\n };\n\n const renderAccordionDetails = (savedData: SavedCustomSegmentsType) => {\n const savedCustomSegmentDetails = isSavedCustomPriceClass(savedData)\n ? savedData.priceClasses\n : savedData.customSegmentation;\n\n const getLabel = (savedCustomSegmentDetail: CustomNumericalClass | CustomCategoricalClass, index: number) => {\n let label = savedCustomSegmentDetail.label;\n\n if (isSavedCustomPriceClass(savedData) || savedData.filterType === FilterType.numericRange) {\n const customNumericClass = savedCustomSegmentDetail as CustomNumericalClass;\n const min = customNumericClass.min != null ? ` (${customNumericClass.min} ` : ' (';\n const lastIndex = savedCustomSegmentDetails.length - 1;\n label += min;\n if (index === lastIndex) {\n label += 'or more)';\n } else {\n label += `up to ${customNumericClass.max})`;\n }\n }\n return label;\n };\n\n return (\n <div className=\"text-xs text-lighter\">\n <span className=\"text-default\">Classes ({savedCustomSegmentDetails.length})</span>\n <ul style={{ listStyle: 'disc inside' }} className=\"pl-2.5\">\n {savedCustomSegmentDetails.map((savedCustomSegmentDetail, index) => {\n return (\n <li key={index} className=\"text-xs\">\n {getLabel(savedCustomSegmentDetail, index)}\n </li>\n );\n })}\n </ul>\n </div>\n );\n };\n\n return (\n <div className=\"relative bg-white border border-default rounded-2 overflow-hidden mb-2\">\n <div\n className={classNames('overflow-hidden px-2 pt-4 pb-1', {\n 'border-brand border-l-4': isActive,\n })}\n >\n <div className=\"mb-1\">\n <Badge state=\"medium\"> {savedCardLabel?.toUpperCase()}</Badge>\n </div>\n <Accordion iconRight flushAlign>\n <Accordion.Item title={savedData.name}>\n <div className=\"text-sm text-lighter pb-1.5\">{savedData.description}</div>\n {renderAccordionDetails(savedData)}\n </Accordion.Item>\n </Accordion>\n <div className=\"flex-row pt-2 justify-between\">\n <div>\n <Button\n label={customSegmentDetails.savedCardLabels.applyButtonLabels}\n testId={`${customSegmentDetails.savedCardLabels.testId}-apply-btn`}\n mode=\"simple\"\n disabled={isActive || !isApplicable}\n onClick={() => handleApply(savedData)}\n >\n <Button.Icon>\n <Button.Icon.icons.Check />\n </Button.Icon>\n Apply\n </Button>\n </div>\n <div className=\"flex-row justify-end gap-1\">\n <div>\n <Button\n label={customSegmentDetails.savedCardLabels.shareButtonLabels}\n testId={`${customSegmentDetails.savedCardLabels.testId}-share-btn`}\n mode=\"simple\"\n onClick={() => {\n handleShare(savedData);\n }}\n disabled={isViewer(savedData.createdBy, owner.userId)}\n >\n <Button.Icon>\n <Button.Icon.icons.Share />\n </Button.Icon>\n </Button>\n </div>\n <div>\n <Button\n label={customSegmentDetails.savedCardLabels.deleteButtonLabels}\n mode=\"simple\"\n onClick={toggleDeleteModal}\n testId={`${customSegmentDetails.savedCardLabels.testId}-delete-btn`}\n >\n <Button.Icon>\n <Button.Icon.icons.Delete />\n </Button.Icon>\n </Button>\n </div>\n </div>\n </div>\n {isActive && <div className=\"absolute top-0 left-0 h-full w-1 bg-brand\" />}\n {renderDeleteSavedFeatureSegmentsModal()}\n </div>\n </div>\n );\n};\n","import React, { useEffect, useState } from 'react';\nimport { cleanString, validateSaveCustomClassDetails } from '../utils';\nimport { actions, inputs, overlays } from '@ecosystem/newron-design-system';\nimport { CustomSegmentType } from '../types';\nimport { getCustomSegmentsLabelDetails } from './customSegmentsUtils';\n\nconst { Modal } = overlays;\nconst { TextInput, TextArea } = inputs;\nconst { Button } = actions;\n\ntype Props = {\n customSegmentType: CustomSegmentType;\n isOpen: boolean;\n existingName: string[];\n onSave: (name: string, desc: string) => void;\n onClose: () => void;\n};\n\n/**\n * The modal component that is shown when the user press \"Save\"\n * in the Customization tray for Price Class and Feature Segmentation.\n */\nexport const SavedCustomSegmentsModal = ({ customSegmentType, isOpen, existingName, onSave, onClose }: Props) => {\n const customSegmentsLabelDetails = getCustomSegmentsLabelDetails()[customSegmentType];\n\n const [customSegmentsName, setCustomSegmentsName] = useState<string>('');\n const [customSegmentsDesc, setCustomSegmentsDesc] = useState<string>('');\n\n useEffect(() => {\n setCustomSegmentsName('');\n setCustomSegmentsDesc('');\n }, [isOpen]);\n\n /**\n * Calls the onSave callback\n * when the user press the save button\n */\n const handleSave = () => {\n onSave(customSegmentsName, customSegmentsDesc);\n };\n\n const isNameExisted = (): boolean => {\n return existingName.includes(customSegmentsName);\n };\n\n /**\n * Check the inserted name for the new price class/feature segment\n * the name must be unique and not empty\n * @returns {boolean} - Returns true if the save button should be disabled\n */\n const isSaveButtonDisabled = (): boolean => {\n return !validateSaveCustomClassDetails(customSegmentsName, customSegmentsDesc, isNameExisted);\n };\n\n const getErrorMessage = (): string | null => {\n const nameExistedErrorMessage = customSegmentsLabelDetails.errorMessage.nameExisted;\n\n return isNameExisted() ? nameExistedErrorMessage : null;\n };\n\n return (\n <Modal isOpen={isOpen} onClose={onClose}>\n <Modal.Header>{customSegmentsLabelDetails.savedModalLabelText.header}</Modal.Header>\n <Modal.Body>\n <TextInput\n value={customSegmentsName}\n placeholder={customSegmentsLabelDetails.savedModalLabelText.placeholder}\n onChange={name => {\n setCustomSegmentsName(cleanString(name));\n }}\n maxLength={32}\n errorMessage={getErrorMessage()}\n testId=\"modal-save-segment-name\"\n />\n <TextArea\n label=\"Description (optional)\"\n placeholder=\"\"\n onChange={desc => {\n setCustomSegmentsDesc(cleanString(desc));\n }}\n maxLength={64}\n value={customSegmentsDesc}\n testId=\"modal-save-segment-desc\"\n />\n </Modal.Body>\n <Modal.Footer>\n <Button onClick={onClose}>Cancel</Button>\n <Button disabled={isSaveButtonDisabled()} onClick={handleSave} testId=\"modal-save-segment-btn\">\n Save\n </Button>\n </Modal.Footer>\n </Modal>\n );\n};\n","import React from 'react';\nimport { actions, elements } from '@ecosystem/newron-design-system';\nconst { Icon } = elements;\nconst { IconButton } = actions;\n\ntype AddClassButtonProps = {\n testId: string;\n onClick: () => void;\n isShowing: boolean;\n};\n\nexport const AddClassButton = ({ testId, onClick, isShowing }: AddClassButtonProps) => {\n if (!isShowing) {\n return null;\n }\n\n return (\n <IconButton testId={testId} onClick={onClick}>\n <Icon.icons.Add />\n </IconButton>\n );\n};\n","import { ClientSidebar } from '@ecosystem/newron-client-lib';\nimport { actions, containers, elements, feedback } from '@ecosystem/newron-design-system';\nimport { FilterTrayTabId as FilterTrayTabIdEnum } from '@ecosystem/newron-design-system/build/exports/containers';\nimport React, { useEffect, useState } from 'react';\nimport { useAnalyticsContext } from '../../../analytics/analytics.provider';\nimport { userClient } from '../../../client/user.client';\nimport { MAX_ALLOWED_CUSTOM_CLASSES } from '../../../common/selection.menu/constants';\nimport { MenuSeparatorComponent } from '../../../common/selection.menu/menu.separator';\nimport { Formatting } from '../../../data/formatting';\nimport { useCorePageState } from '../../../page/provider';\nimport { PageSettingsManager } from '../../../page/settings';\nimport {\n DataType,\n EventElementCategory,\n EventElementType,\n EventName,\n EventParams,\n FilterSections,\n FormatHint,\n Params,\n PreferenceName,\n} from '../../../types';\nimport { CustomPriceClass, SavedCustomPriceClass, SharePermissionsBody } from '../../../types/content/custom.types';\nimport { CustomPriceClasses } from '.././price/customPriceClasses';\nimport { useSavePriceClasses } from '../../savePriceClasses.hook';\nimport { ShareCustomModal } from '../../shareCustomModal';\nimport { useSidebar } from '../useSideBar.hook';\nimport {\n adjustClassesAfterDeletion,\n formatPricesForParams,\n getPriceClassesFromSettings,\n getSharedUsers,\n shareToUser,\n updateLabelErrors,\n validateLabelInput,\n} from '../../utils';\nimport { CustomSegmentType } from '../../types';\nimport { SavedCustomSegmentsCard } from '../savedCustomSegmentsCard';\nimport { SavedCustomSegmentsModal } from '../saveCustomSegmentsModal';\nimport { AddClassButton } from '../addClassButton';\n\nconst { Button, ButtonGroup, IconButton } = actions;\nconst { Icon } = elements;\nconst { FilterTrayTabId, Tray } = containers;\nconst { Badge } = feedback;\n\nfunction EditTrayComponent({ sections, updateSettings, currency }: ComponentProps) {\n const { setCustomizationTray, page, customizationTrayTabId } = useCorePageState();\n const componentSettings = PageSettingsManager.getInstance().getComponentSettings(page.name);\n\n const { expanded, hideSidebar, openSidebar } = useSidebar('custom-price-tiers');\n\n const [activeTab, setActiveTab] = useState<FilterTrayTabIdEnum>(customizationTrayTabId || FilterTrayTabId.Configure);\n\n useEffect(() => {\n setActiveTab(customizationTrayTabId || FilterTrayTabId.Configure);\n }, [customizationTrayTabId]);\n\n const [showSaveModal, setShowSaveModal] = useState(false);\n const { trackPageEvent } = useAnalyticsContext();\n const { savedPriceClasses, currentActive, savePriceClasses, setIsActive, deleteSavedPriceClasses } =\n useSavePriceClasses();\n\n // function used to get the currency and rounding value from the price filter\n const getDefaultPriceSettings = () => {\n const market = sections.find(def => def.label === 'Market');\n return market.ungrouped?.definitions.find(def => def.roundTo);\n };\n\n // create a default price class object, null represent infinite value\n const defaultPriceClass: CustomPriceClass = {\n label: '',\n min: 0,\n max: null,\n roundTo: getDefaultPriceSettings()?.roundTo,\n currency: currency?.toUpperCase(),\n };\n\n const [priceClasses, setPriceClasses] = useState<CustomPriceClass[]>(\n getPriceClassesFromSettings(componentSettings, defaultPriceClass)\n );\n const [isShareModalOpen, setIsShareModalOpen] = useState(false);\n const [priceClassToShare, setPriceClassToShare] = useState<SavedCustomPriceClass>();\n\n //We will need to force the Custom Price Tray to be opened once its rendered.\n useEffect(() => {\n if (!expanded) {\n openSidebar(); // Avoid multiple state changes by checking `expanded`\n }\n }, [expanded, openSidebar]);\n\n useEffect(() => {\n if (currentActive !== '') {\n handleApply();\n }\n }, [currentActive]);\n\n const openSaveModal = () => {\n if (!arePriceClassesValid()) return;\n setShowSaveModal(true);\n };\n\n const handleSave = (name: string, desc: string) => {\n recordAnalyticEventDetails('Save Custom Price Classes', priceClasses);\n savePriceClasses(name, desc, priceClasses);\n handleCancelSave();\n };\n\n const handleCancelSave = () => {\n setShowSaveModal(false);\n };\n\n const handleApply = () => {\n const formattedPrices = formatPricesForParams(priceClasses);\n\n updateSettings({\n ...componentSettings,\n customPriceTiers: [formattedPrices],\n });\n };\n\n /**\n * Function to update relevant states and validate the price classes/label after on change is handled\n * @param priceClassesToUpdate the updated price classes\n * @param type the type of input to validate\n */\n const updatePriceClasses = (priceClassesToUpdate: CustomPriceClass[]) => {\n setPriceClasses(updateLabelErrors(priceClassesToUpdate));\n };\n\n /**\n * Function to handle price change\n * @param index the index of the price class\n * @returns\n */\n const handleOnPriceChange = (index: number) => (value: number) => {\n if (!value) return;\n const normalizedRoundTo = Number(defaultPriceClass.roundTo);\n if (value === normalizedRoundTo) {\n value = priceClasses[index].min + normalizedRoundTo;\n }\n const nextIndex = index + 1;\n const updatedPriceClass = { ...priceClasses[index] };\n let updatedNextMinPriceClass = { ...priceClasses[nextIndex] };\n const copyPriceClass = [...priceClasses];\n updatedPriceClass.max = value;\n //auto update next min value, current max value=next min value\n if (priceClasses.length > nextIndex) {\n updatedNextMinPriceClass = { ...priceClasses[nextIndex] };\n updatedNextMinPriceClass.min = value;\n copyPriceClass[nextIndex] = updatedNextMinPriceClass;\n }\n copyPriceClass[index] = updatedPriceClass;\n const roundedPriceClasses = getRoundedPriceClasses(copyPriceClass, index, defaultPriceClass);\n updatePriceClasses(roundedPriceClasses);\n };\n\n /**\n * Function to handle price change\n * @param index the index of the price class\n * @param copyPriceClass price classes array\n * @returns rounded updated price classes\n */\n const getRoundedPriceClasses = (copyPriceClass: CustomPriceClass[], index: number, defaultPriceClass) => {\n let postIndex = index + 1;\n const normalizedRoundTo = Number(defaultPriceClass.roundTo);\n if (copyPriceClass[index].max < copyPriceClass[index].min) {\n // Iterate through previous indices in a single loop\n while (index >= 0) {\n copyPriceClass[index].max = Number(copyPriceClass[index + 1].min.toFixed(2));\n if (copyPriceClass[index].max <= copyPriceClass[index].min) {\n copyPriceClass[index].min = Number((copyPriceClass[index].max - normalizedRoundTo).toFixed(2));\n }\n index--;\n }\n }\n while (postIndex <= copyPriceClass.length - 1) {\n copyPriceClass[postIndex].min = Number(copyPriceClass[postIndex - 1].max.toFixed(2));\n if (copyPriceClass[postIndex].max <= copyPriceClass[postIndex].min) {\n copyPriceClass[postIndex].max = Number((copyPriceClass[postIndex - 1].max + normalizedRoundTo).toFixed(2));\n }\n postIndex++;\n }\n return copyPriceClass;\n };\n\n /**\n * Function to handle label change\n * @param index the index of the price class\n * @returns\n */\n const handleOnLabelChange = (index: number) => (label: string) => {\n const updatedPriceClass = { ...priceClasses[index] };\n const copyPriceClass = [...priceClasses];\n updatedPriceClass.label = label;\n copyPriceClass[index] = updatedPriceClass;\n updatePriceClasses(copyPriceClass);\n };\n\n /**\n * Function to handle tab change\n * @param tabId the tab id\n */\n const onTabChange = (tabId: FilterTrayTabIdEnum) => {\n setActiveTab(tabId);\n };\n\n /**\n * Function to add price classes\n */\n const addPriceClass = () => {\n //get previous Max value\n const index = priceClasses.length - 1;\n const prevMax = priceClasses[index].min;\n const newMax = prevMax + Number(defaultPriceClass.roundTo);\n\n const newPriceTier: CustomPriceClass = {\n ...defaultPriceClass,\n max: Number(newMax.toFixed(2)),\n min: Number(prevMax.toFixed(2)),\n label: priceClasses[index].label,\n };\n const newMaxTier: CustomPriceClass = {\n ...defaultPriceClass,\n max: null,\n min: Number(newMax.toFixed(2)),\n };\n\n // remove the last element and add the new price tier and the new max tier\n let newPriceClasses = [...priceClasses].slice(0, -1);\n newPriceClasses.push(newPriceTier, newMaxTier);\n setPriceClasses(newPriceClasses);\n };\n\n /**\n * Function to delete a price class\n * @param index the index of the price class to be deleted\n */\n const deletePriceClass = (index: number) => {\n let priceClassesToUpdate: CustomPriceClass[] = adjustClassesAfterDeletion(index, [\n ...priceClasses,\n ]) as CustomPriceClass[];\n // remove the price class based on index\n priceClassesToUpdate = priceClassesToUpdate.filter((_, i) => i !== index);\n setPriceClasses(priceClassesToUpdate);\n };\n\n /**\n * Function to get the round to value and format it into a label\n * @returns round to label to display\n */\n const getRoundToLabel = () => {\n if (defaultPriceClass.roundTo) {\n const formatted = Formatting.format(defaultPriceClass.roundTo, {\n dataType: DataType.Integer,\n formatHint: FormatHint.Money,\n currency: defaultPriceClass.currency,\n });\n if (formatted) {\n return `Enter prices that can be divided by ${formatted}`;\n }\n return ``;\n }\n };\n\n /**\n * Function to render the custom price classes\n * @param index the index of the price class\n * @returns JSX.Element\n */\n const renderCustomPriceClasses = (index: number, labelError?: string) => {\n const prevMax = index > 0 ? priceClasses[index - 1].max : null; // max(X-1)\n const nextMax = index < priceClasses.length - 1 ? priceClasses[index + 1].max : null; // min(X+1)\n return (\n <CustomPriceClasses\n key={`price_${index}`}\n onPriceChange={handleOnPriceChange}\n onLabelChange={handleOnLabelChange}\n index={index}\n prevMax={prevMax}\n nextMax={nextMax}\n priceClasses={priceClasses}\n labelError={labelError}\n />\n );\n };\n\n /**\n * Render the saved price class filter\n * @param priceClass - the saved price class to render\n * @param index - index of the saved price class within the savedPriceClasses array\n * @returns - the Saved Price Class Filter card\n */\n const renderSavedPriceClass = (priceClass: SavedCustomPriceClass, index: number) => {\n const isApplicable =\n priceClass.priceClasses[0]?.currency?.toUpperCase() === defaultPriceClass.currency?.toUpperCase();\n\n return (\n <SavedCustomSegmentsCard\n key={`saved-price-class-${priceClass.name}-${index}`}\n customSegmentType={CustomSegmentType.customPriceClass}\n savedCardLabel={priceClass.priceClasses[0]?.currency}\n savedData={priceClass}\n isActive={currentActive === priceClass.preferenceId}\n isApplicable={isApplicable}\n handleApply={onApplyFromSavedCustomCard}\n handleDelete={onDeleteFromSavedCustomCard}\n handleShare={onShareFromSavedCustomCard}\n />\n );\n };\n\n /**\n * Callback function to handle the when user click Apply in Saved Custom card\n * @param savedPriceClasses the saved price classes\n */\n const onApplyFromSavedCustomCard = (savedPriceClasses: SavedCustomPriceClass) => {\n recordAnalyticEventDetails('Apply Saved Custom Price Classes', savedPriceClasses.priceClasses);\n setPriceClasses(savedPriceClasses.priceClasses);\n setIsActive(savedPriceClasses.preferenceId);\n };\n\n const arePriceClassesValid = (): boolean => {\n const areLabelsValid = validateLabelInput(priceClasses);\n return areLabelsValid;\n };\n\n /**\n * Callback function to handle the event when user click Apply in Customized tab\n */\n const onApplyFromCustomizedTab = () => {\n if (!arePriceClassesValid()) return;\n recordAnalyticEventDetails('Apply Custom Price Classes', priceClasses);\n handleApply();\n setIsActive('');\n };\n\n const onShareFromSavedCustomCard = (savedPriceClasses: SavedCustomPriceClass) => {\n setIsShareModalOpen(true);\n setPriceClassToShare(savedPriceClasses);\n };\n\n /**\n * Render the Save Price Class Modal for when the Save button is clicked\n * @returns - the Save Price Class Modal\n */\n const renderSavePriceClassModal = () => {\n const existingPriceClassNames = savedPriceClasses.map(item => item.name);\n return (\n <SavedCustomSegmentsModal\n customSegmentType={CustomSegmentType.customPriceClass}\n isOpen={showSaveModal}\n existingName={existingPriceClassNames}\n onSave={handleSave}\n onClose={handleCancelSave}\n />\n );\n };\n\n /**\n * Callback function to handle the when user click Delete in Saved Custom card\n * @param savedPriceClass - the saved price classes to delete\n * @param userId - the userId of the user\n */\n const onDeleteFromSavedCustomCard = async (savedPriceClass: SavedCustomPriceClass, userId: string) => {\n recordAnalyticEventDetails('Delete Saved Custom Price Classes', null);\n await deleteSavedPriceClasses(savedPriceClass, userId);\n if (savedPriceClass.preferenceId === currentActive) {\n setIsActive('');\n }\n };\n\n /**\n * Function to record the analytic event details\n * @param event - the event that is being recorded\n * @param priceClassList - the list of price classes\n */\n const recordAnalyticEventDetails = (event: string, priceClassList: CustomPriceClass[] | null) => {\n let params: EventParams = {\n elementType: EventElementType.Button,\n elementCategory: EventElementCategory.CustomPriceFilter,\n elementName: event,\n };\n if (priceClassList) {\n const list = priceClassList.map(priceClass => priceClass.min.toString());\n params.customPriceClasses = list;\n }\n trackPageEvent(EventName.PageElementClicked, params);\n };\n\n const renderSharePriceClassModal = () => {\n return (\n <ShareCustomModal\n isOpen={isShareModalOpen}\n itemToShare={priceClassToShare}\n preferenceName={PreferenceName.segment_price}\n onClose={() => setIsShareModalOpen(false)}\n onSuccess={() => {\n setIsShareModalOpen(false);\n }}\n onShareError={() => {\n setIsShareModalOpen(false);\n }}\n getUsers={userClient.getSameAccessUsers}\n getSharedUsers={getSharedUsers}\n shareToUser={onShareToUser}\n />\n );\n };\n\n /**\n * Function to share the price classes to a user.\n * Called when the user clicks the \"Apply changes\" button in the share modal\n * @param preferenceId - the id of the preference to be shared\n * @param permissionsBody - the permissions body\n */\n const onShareToUser = async (preferenceId: string, permissionsBody: SharePermissionsBody[]) => {\n recordAnalyticEventDetails('Share Saved Custom Price Classes', null);\n await shareToUser(preferenceId, PreferenceName.segment_price, permissionsBody);\n };\n\n return (\n <ClientSidebar.Content>\n <Tray>\n <Tray.Header padding=\"medium\">\n {expanded && <div className=\"flex-grow font-normal text-md text-heading\">Price Classes</div>}\n <IconButton\n size=\"md\"\n variant=\"white\"\n color=\"secondaryInteractive\"\n onClick={() => {\n hideSidebar();\n setCustomizationTray(null);\n }}\n testId=\"price-tray-close-btn\"\n >\n <Icon.icons.Close />\n </IconButton>\n </Tray.Header>\n <Tray.Tabs currentTab={activeTab} onTabChange={onTabChange}>\n <Tray.Tabs.Tab id=\"tab-1\">Customize</Tray.Tabs.Tab>\n <Tray.Tabs.Content id=\"tab-1\">\n <div className=\"pt-4 pb-6 flex-grow-0 modal-body overflow-visible\">\n <div className=\"flex gap-1 pb-4\">\n <Badge>{defaultPriceClass.currency?.toUpperCase()}</Badge>\n </div>\n <div className=\"flex-row gap-2\">\n <div className=\"flex gap-1 self-center\">\n <span className=\"text-heading text-md font-bold\">Classes</span>\n <span className=\"text-inactive text-md\">{`(${priceClasses.length})`}</span>\n </div>\n <span className=\"text-sm text-lighter text-right\">{`${getRoundToLabel()}`}</span>\n </div>\n\n <MenuSeparatorComponent key={`seperator_main`} />\n\n {priceClasses?.map((_, index, cp) => {\n return (\n <React.Fragment key={`fr_${index + cp.length}`}>\n {renderCustomPriceClasses(index, cp[index].labelError)}\n {cp.length > 1 ? (\n <IconButton\n key={`delete_${index}`}\n testId={`delete-price-class-btn-${index}`}\n onClick={() => {\n deletePriceClass(index);\n }}\n >\n <Icon.icons.Remove />\n </IconButton>\n ) : null}\n <MenuSeparatorComponent key={`seperator_${index}`} />\n </React.Fragment>\n );\n })}\n\n <div className=\" flex items-center gap-4 \">\n <div className=\"flex-grow\">\n <div className=\"flex items-center gap-4\">\n <span>\n <AddClassButton\n testId={'add-price-class-btn'}\n onClick={addPriceClass}\n isShowing={priceClasses.length < MAX_ALLOWED_CUSTOM_CLASSES}\n />\n </span>\n </div>\n </div>\n <div className=\"flex\">\n <div className=\"pl-4\">\n <span>\n <p className=\"text-xs text-lighter\">lower value</p>\n <p className=\"text-sm text-inactive\">included</p>\n </span>\n </div>\n <div className=\"pl-4\">\n <p className=\"text-xs text-inactive\">—</p>\n </div>\n <div className=\"pl-4\">\n <span>\n <p className=\"text-xs text-lighter\">higher value</p>\n <p className=\"text-sm text-inactive\">excluded</p>\n </span>\n </div>\n </div>\n </div>\n </div>\n </Tray.Tabs.Content>\n <Tray.Tabs.Tab id=\"tab-2\">Saved</Tray.Tabs.Tab>\n <Tray.Tabs.Content id=\"tab-2\">\n <div>\n <div>\n {savedPriceClasses\n .filter(value => value.priceClasses[0].currency?.toUpperCase() === defaultPriceClass.currency)\n .map(renderSavedPriceClass)}\n </div>\n <div className=\"border-light border-t py-4 mt-5\">\n <div className=\"font-bold\">Unapplicable</div>\n <div className=\"mb-2 text-sm text-lighter\">\n Price classes that can't be applied with the current currency.\n </div>\n {savedPriceClasses\n .filter(value => value.priceClasses[0].currency?.toUpperCase() !== defaultPriceClass.currency)\n .map(renderSavedPriceClass)}\n </div>\n </div>\n </Tray.Tabs.Content>\n </Tray.Tabs>\n {activeTab === FilterTrayTabId.Configure && (\n <Tray.Footer>\n <div className=\"flex-grow\">\n <ButtonGroup>\n <ButtonGroup.PrimaryButton>\n <Button onClick={onApplyFromCustomizedTab} stretch>\n Apply\n </Button>\n </ButtonGroup.PrimaryButton>\n <ButtonGroup.SecondaryButtons>\n <Button onClick={openSaveModal} mode=\"secondary\" stretch>\n Save\n </Button>\n </ButtonGroup.SecondaryButtons>\n </ButtonGroup>\n </div>\n </Tray.Footer>\n )}\n </Tray>\n\n {renderSavePriceClassModal()}\n {renderSharePriceClassModal()}\n </ClientSidebar.Content>\n );\n}\ntype ComponentProps = {\n sections: FilterSections[];\n updateSettings: (updates: Params) => void;\n currency: string;\n};\nexport { EditTrayComponent };\n","import React from 'react';\nimport { inputs } from '@ecosystem/newron-design-system';\nimport { Entity } from '../types';\nimport { FilterProps } from './types';\n\ntype Props = FilterProps & {\n label: string;\n};\n\nconst { Checkbox, CheckboxState } = inputs;\n\nfunction CheckboxFilter({ label, definition: { options, name }, values, disabled, onChange }: Props) {\n const handleChange = (option: Entity) => (state: inputs.CheckboxState) => {\n const entities =\n state === CheckboxState.CHECKED ? [...values, option] : values.filter(value => value.label !== option.label);\n onChange(name, entities);\n };\n\n const getState = (optionValue: string) => {\n return values.some(({ value }) => value === optionValue) ? CheckboxState.CHECKED : CheckboxState.UNCHECKED;\n };\n\n return (\n <>\n <div className=\"text-md font-bold flex-grow text-heading pb-2\">{label}</div>\n {options.map(option => (\n <div key={option.label} className=\"py-2\">\n <Checkbox\n disabled={disabled}\n label={option.label}\n state={getState(option.value)}\n onChange={handleChange(option)}\n />\n </div>\n ))}\n </>\n );\n}\n\nexport { CheckboxFilter };\n","import React from 'react';\nimport { inputs } from '@ecosystem/newron-design-system';\nimport { FilterProps } from './types';\nimport { CheckboxFilter } from './checkbox';\n\n/* TODO: replace Select with MultiSelect once it's ready in @ecosystem/newron-design-system */\nconst { MultiSelect } = inputs;\n\nconst MAX_CHECKBOX_ITEMS = 9;\n\nfunction MultiSelectFilter({ definition, values, disabled, onChange }: FilterProps) {\n const { label: definitionLabel, name, placeholder, options } = definition;\n const value = values?.map(({ value }) => value);\n const label = `${definitionLabel}${value.length ? ` (${value.length})` : ''}`;\n\n const handleSelectChange = (value: string[]) => {\n const entities = value.map(val => options.find(option => option.value === val));\n onChange(name, entities);\n };\n\n if (options.length > MAX_CHECKBOX_ITEMS) {\n return (\n <div data-test-id={label}>\n <MultiSelect\n placeholder={placeholder ?? 'Any'}\n label={label}\n options={options}\n values={value}\n disabled={disabled}\n onChange={handleSelectChange}\n combobox\n name={name}\n />\n </div>\n );\n }\n\n return (\n <div data-test-id={label}>\n <CheckboxFilter label={label} definition={definition} values={values} disabled={disabled} onChange={onChange} />\n </div>\n );\n}\n\nexport { MultiSelectFilter };\n","import React, { useEffect, useState } from 'react';\nimport { inputs } from '@ecosystem/newron-design-system';\nimport { FilterProps } from './types';\nimport { Formatting } from '../data/formatting';\nimport { DataType, FormatHint } from '../types';\nimport { failsRoundingCriteria } from './utils';\n\nconst { NumberInput } = inputs;\n\nfunction NumericRangeFilter({\n definition: { name, label, min: minVal, max: maxVal, roundTo, currency },\n values,\n disabled,\n onChange,\n}: FilterProps) {\n const labelValues = values[0]?.label.split('-');\n const isMinValueEmpty = labelValues?.[0] === undefined || labelValues?.[0] === '';\n const isMaxValueEmpty = labelValues?.[1] === undefined || labelValues?.[1] === '';\n const minValue = isMinValueEmpty ? null : Number(labelValues[0]);\n const maxValue = isMaxValueEmpty ? null : Number(labelValues[1]);\n const [min, setMin] = useState(minValue);\n const [max, setMax] = useState(maxValue);\n\n const [formatted, setFormatted] = useState<string | null>(null);\n\n useEffect(() => {\n if (roundTo) {\n const formatted = Formatting.format(roundTo, {\n dataType: DataType.Integer,\n formatHint: FormatHint.Money,\n currency,\n });\n setFormatted(formatted);\n }\n }, [roundTo, formatted, currency]);\n\n useEffect(\n function handleClearClicked() {\n if (!values.length) {\n setMin(null);\n setMax(null);\n } else {\n setMin(minValue);\n setMax(maxValue);\n }\n },\n [values.length, minValue, maxValue]\n );\n\n const handleMinBlur = () => {\n if (min < 0) {\n setMin(null);\n if (max !== null) {\n onChange(name, [{ value: `-${max ?? ''}`, label: `-${max ?? ''}` }]);\n } else {\n onChange(name, []);\n }\n return;\n }\n\n if (min && min >= 0 && max >= 0 && min > max) {\n const text = `${min}-`;\n setMax(null);\n onChange(name, [{ value: text, label: text }]);\n } else {\n if (min === null && max === null) {\n onChange(name, []);\n } else {\n const text = `${min ?? ''}-${max ?? ''}`;\n onChange(name, [{ value: text, label: text }]);\n }\n }\n };\n\n const handleMaxBlur = () => {\n if (max < 0) {\n setMax(null);\n if (min !== null) {\n onChange(name, [{ value: `${min ?? ''}-`, label: `${min ?? ''}-` }]);\n } else {\n onChange(name, []);\n }\n return;\n } else if (max === 0 && min) {\n const text = '-0';\n setMin(null);\n onChange(name, [{ value: text, label: text }]);\n return;\n }\n\n if (min >= 0 && max && max >= 0 && min > max) {\n const text = `-${max}`;\n setMin(null);\n onChange(name, [{ value: text, label: text }]);\n } else {\n if (min === null && max === null) {\n onChange(name, []);\n } else {\n const text = `${min ?? ''}-${max ?? ''}`;\n onChange(name, [{ value: text, label: text }]);\n }\n }\n };\n\n return (\n <div className=\"relative\" data-test-id={label}>\n <div className={`text-md font-bold flex-grow text-heading ${!formatted ? 'pb-2' : ''}`}>{label}</div>\n {formatted && (\n <span className=\"text-sm text-lighter pb-2\">{`Enter prices that can be divided by ${formatted}`}</span>\n )}\n <div className=\"flex items-start gap-2\">\n <NumberInput\n helperText={`Min: ${minVal ?? 0}`}\n value={min}\n minValue={0}\n disabled={disabled}\n onChange={setMin}\n onBlur={handleMinBlur}\n hasError={failsRoundingCriteria(min, roundTo)}\n step={Number(roundTo)}\n />\n <span className=\"pt-3\">—</span>\n <NumberInput\n helperText={`Max: ${maxVal ?? 0}`}\n value={max}\n minValue={0}\n disabled={disabled}\n onChange={setMax}\n onBlur={handleMaxBlur}\n hasError={failsRoundingCriteria(max, roundTo)}\n step={Number(roundTo)}\n />\n </div>\n </div>\n );\n}\n\nexport { NumericRangeFilter };\n","import React, { useEffect, useRef, useState } from 'react';\nimport { actions } from '@ecosystem/newron-design-system';\nimport { FilterProps } from './types';\nimport { useOnOutsideClick } from '../tools/outsideclick.hook';\nimport { DataType, Entity, FormatHint } from '../types';\nimport { Formatting } from '../data/formatting';\n\nfunction formatMonthYear(date: Date): string {\n return Formatting.format(date, { dataType: DataType.Date, formatHint: FormatHint.MonthYear });\n}\n\nfunction formatMonth(date: Date): string {\n return Formatting.format(date, { dataType: DataType.Date, formatHint: FormatHint.Month });\n}\n\nfunction formatYear(year: number): string {\n return Formatting.format(new Date(new Date().setFullYear(year)), {\n dataType: DataType.Date,\n formatHint: FormatHint.Year,\n });\n}\n\nfunction parseDateAsValue(date?: Date): Entity {\n if (!date) {\n return {\n value: '',\n label: '',\n };\n }\n\n return {\n value: `${date.getFullYear()}${String(date.getMonth() + 1).padStart(2, '0')}${String(date.getDate()).padStart(\n 2,\n '0'\n )}`,\n label: formatMonthYear(date),\n };\n}\n\nfunction parseValueAsDate(value?: string) {\n if (!value) {\n return;\n }\n const year = value.substring(0, 4);\n const month = value.substring(4, 6);\n const date = value.substring(6, 8);\n return new Date(Number(year), Number(month) - 1, Number(date));\n}\n\nfunction DateRangeFilter({ definition: { name, label, min, max }, values = [], disabled, onChange }: FilterProps) {\n const minDate = min ? new Date(min) : undefined;\n const maxDate = max ? new Date(max) : undefined;\n\n const initialStart = parseValueAsDate(values[0]?.value.split('-')[0]);\n const initialEnd = parseValueAsDate(values[0]?.value.split('-')[1]);\n const [start, setStart] = useState(initialStart);\n const [end, setEnd] = useState(initialEnd);\n\n useEffect(\n function handleClearClicked() {\n if (!values.length) {\n setStart(undefined);\n setEnd(undefined);\n }\n },\n [values.length]\n );\n\n const handleStartChange = (month: number, year: number) => {\n const date = new Date(year, month, 1, 12);\n setStart(date);\n if (date > end) {\n setEnd(undefined);\n checkAndUpdate(date, undefined);\n } else {\n checkAndUpdate(date, end);\n }\n };\n\n const handleEndChange = (month: number, year: number) => {\n const date = new Date(year, month + 1, 0, 12);\n setEnd(date);\n if (date < start) {\n setStart(undefined);\n checkAndUpdate(undefined, date);\n } else {\n checkAndUpdate(start, date);\n }\n };\n\n const getDateRangeLabel = (startDateLabel: string, endDateLabel: string) => {\n if (!startDateLabel) {\n return `before ${endDateLabel}`;\n } else if (!endDateLabel) {\n return `after ${startDateLabel}`;\n }\n return `${startDateLabel}-${endDateLabel}`;\n };\n\n const checkAndUpdate = (startDate?: Date, endDate?: Date) => {\n const startValue = parseDateAsValue(startDate);\n const endValue = parseDateAsValue(endDate);\n\n onChange(name, [\n {\n value: `${startValue.value}-${endValue.value}`,\n label: getDateRangeLabel(startValue.label, endValue.label),\n },\n ]);\n };\n\n const minDateTextHelper = minDate ? `Min: ${formatMonthYear(minDate)}` : undefined;\n const maxDateTextHelper = maxDate ? `Max: ${formatMonthYear(maxDate)}` : undefined;\n\n return (\n <div className=\"relative\">\n <div className=\"text-md font-bold flex-grow text-heading pb-2\">{label}</div>\n <div className=\"flex items-start gap-2\">\n <MonthSelector\n value={start}\n onChange={handleStartChange}\n align=\"left\"\n helperText={minDateTextHelper}\n disabled={disabled}\n />\n <span className=\"pt-2\">—</span>\n <MonthSelector\n value={end}\n onChange={handleEndChange}\n align=\"right\"\n helperText={maxDateTextHelper}\n disabled={disabled}\n />\n </div>\n </div>\n );\n}\n\ntype Props = {\n value?: Date;\n onChange: (month: number, year: number) => void;\n align: 'left' | 'right';\n helperText?: string;\n disabled: boolean;\n};\n\nconst { IconButton } = actions;\n\nfunction MonthSelector({ onChange, align, value, helperText, disabled }: Props) {\n const [expanded, setExpanded] = useState<boolean>(false);\n const [year, setYear] = useState<number>();\n const [month, setMonth] = useState<number>();\n\n const el = useRef<HTMLDivElement>(null);\n useOnOutsideClick(el, () => setExpanded(false));\n\n const today = new Date();\n const firstDayOfCurrentMonth = new Date(today.getFullYear(), today.getMonth(), 1);\n const targetDate = value !== undefined ? new Date(value) : firstDayOfCurrentMonth;\n const stringValue = formatMonthYear(targetDate);\n\n const openMenu = () => {\n setYear(targetDate.getFullYear());\n setMonth(targetDate.getMonth());\n setExpanded(true);\n };\n\n const incrementYear = () => {\n if (year < firstDayOfCurrentMonth.getFullYear()) {\n setYear(year + 1);\n }\n };\n\n const decrementYear = () => {\n setYear(year - 1);\n };\n\n const applyMonth = (value: number) => {\n onChange(value, year);\n setExpanded(false);\n };\n\n const months: { value: number; label: string; selectable: boolean; current: boolean }[] = [];\n if (year !== undefined && month !== undefined) {\n months.push(...getMonths(value, targetDate, year));\n }\n\n return (\n <div className=\"relative w-full\" ref={el}>\n <div className=\"flex items-center rounded border border-default border-b bg-white h-10 gap-1\">\n <button\n className={`h-full w-full flex-grow nowrap ${\n disabled ? 'text-lighter bg-medium rounded cursor-not-allowed' : ''\n }`}\n data-test-id={`date-range-${align}`}\n onClick={openMenu}\n disabled={disabled}\n >\n {value ? stringValue : ''}\n </button>\n </div>\n <span className=\"text-lighter mt-1 text-sm text-lighter\">{helperText}</span>\n {expanded && (\n <div\n className={`z-10 absolute bg-white rounded border-light border top-full mt-2 shadow-sm w-56 ${\n align === 'left' ? 'left-0' : 'right-0'\n }`}\n data-test-id=\"date-range-calendar\"\n >\n <div className=\"flex items-center bg-light border-b border-light\">\n <IconButton onClick={decrementYear} color=\"secondaryInteractive\">\n <IconButton.icons.ChevronLeft />\n </IconButton>\n <span className=\"flex-grow text-center\">{formatYear(year)}</span>\n <IconButton onClick={incrementYear} color=\"secondaryInteractive\">\n <IconButton.icons.ChevronRight />\n </IconButton>\n </div>\n <div className=\"grid grid-cols-3\">\n {months.map((month, idx) => (\n <button\n disabled={!month.selectable}\n key={`${idx}-${month.label}-${year}`}\n className={`block px-3 py-2 ${month.selectable ? 'hover:bg-medium' : 'text-lighter cursor-default'} ${\n month.current ? 'text-white bg-brand hover:bg-brand' : ''\n }`}\n onClick={() => applyMonth(month.value)}\n >\n {month.label}\n </button>\n ))}\n </div>\n </div>\n )}\n </div>\n );\n}\n\nexport const getMonths = (value: Date, targetDate: Date, year: number) => {\n const months: { value: number; label: string; selectable: boolean; current: boolean }[] = Array(12)\n .fill(null)\n .map((_, idx) => {\n const date = new Date();\n const firstDayOfCurrentMonth = new Date(date.getFullYear(), date.getMonth(), 1);\n firstDayOfCurrentMonth.setFullYear(year);\n firstDayOfCurrentMonth.setMonth(idx);\n return {\n label: formatMonth(firstDayOfCurrentMonth),\n value: idx,\n selectable:\n year < firstDayOfCurrentMonth.getFullYear() ||\n (year === firstDayOfCurrentMonth.getFullYear() && idx <= firstDayOfCurrentMonth.getMonth()),\n current:\n value &&\n firstDayOfCurrentMonth.getFullYear() === targetDate.getFullYear() &&\n firstDayOfCurrentMonth.getMonth() === targetDate.getMonth(),\n };\n });\n\n return months;\n};\n\nexport { DateRangeFilter };\n","import React from 'react';\nimport { inputsV2 } from '@ecosystem/newron-design-system';\nimport { FilterProps } from './types';\n\nconst { Select } = inputsV2;\n\nfunction SelectFilter({ definition: { label, name, placeholder, options }, values, disabled, onChange }: FilterProps) {\n const handleSelectChange = (value: string) => {\n const entity = options.find(option => option.value === value);\n onChange(name, entity ? [entity] : []);\n };\n\n return (\n <div data-test-id={label}>\n <Select\n placeholder={placeholder ?? 'Any'}\n label={label}\n options={options}\n value={values?.[0]?.value}\n disabled={disabled}\n onChange={handleSelectChange}\n combobox\n />\n </div>\n );\n}\n\nexport { SelectFilter };\n","import React, { FunctionComponent } from 'react';\nimport { Entity, FilterDefinition, FilterType } from '../types';\nimport { FilterProps } from './types';\nimport { MultiSelectFilter } from './multiSelect';\nimport { NumericRangeFilter } from './numericRange';\nimport { DateRangeFilter } from './dateRange';\nimport { SelectFilter } from './select';\n\ntype Props = {\n definition: FilterDefinition;\n values?: Entity[];\n disabled: boolean;\n onChange: (name: string, values: Entity[]) => void;\n};\n\nconst filterElements: Record<FilterType, FunctionComponent<FilterProps>> = {\n multiSelect: MultiSelectFilter,\n numericRange: NumericRangeFilter,\n dateRange: DateRangeFilter,\n select: SelectFilter,\n};\n\nfunction FilterEntry({ definition, values = [], disabled, onChange }: Props) {\n const { type } = definition;\n const Element = filterElements[type];\n\n if (!Element) {\n return null;\n }\n\n return (\n <div className=\"pb-6\" data-test-id={definition.name}>\n <Element definition={definition} values={values} disabled={disabled} onChange={onChange} />\n </div>\n );\n}\n\nexport { FilterEntry };\n","import { elements, inputs } from '@ecosystem/newron-design-system';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { CustomNumericalClass } from '../../../types/content/custom.types';\nimport constants from '../../constants';\nimport { getValidInputWithinRange, isClassDuplicate } from '../../utils';\nimport { CustomClassLabel } from '../customClassLabel';\n\nconst { NumberInput } = inputs;\nconst { Icon } = elements;\n\nconst { CLASS_EXISTS, MAX_CUSTOM_CLASS_TIER_VALUE, MIN_CUSTOM_CLASS_TIER_VALUE } = constants;\n\ninterface CustomFeatureClassesProps {\n index: number;\n featureClasses: CustomNumericalClass[]; //to check duplicate\n onFeatureChange: (index: number) => (value: number) => void;\n onLabelChange: (index: number) => (label: string) => void;\n errorMessage?: string;\n}\nexport const CustomFeatureClasses: React.FC<CustomFeatureClassesProps> = ({\n index,\n featureClasses,\n onFeatureChange,\n onLabelChange,\n errorMessage,\n}: CustomFeatureClassesProps) => {\n const classToRender = featureClasses[index];\n const [maxValue, setMaxValue] = useState<number>(classToRender.max);\n const [minValue, setMinValue] = useState<number>(classToRender.min);\n const [hasError, setHasError] = useState<boolean>(false);\n const [classErrorMessage, setClassErrorMessage] = useState<string>('');\n const featureOnChangeFn = onFeatureChange(index);\n\n useEffect(() => {\n //on re-rendering of customClasses if duplicate exist update error state.\n updateClassErrorState(featureClasses);\n\n setMaxValue(Number(classToRender.max?.toFixed(2))); // Update maxValue when classToRender.max changes\n setMinValue(Number(classToRender.min?.toFixed(2))); // Update minValue when classToRender.min changes\n }, [featureClasses, classToRender]);\n\n /**\n * Function to check if the input class has errors exists while re-rendering custom classes.\n * @param customClasses the input\n */\n const updateClassErrorState = useCallback(\n (customClasses: CustomNumericalClass[]) => {\n setClassErrorMessage('');\n\n // checked this way as if (classToRender) will return false for 0\n if (classToRender.max !== undefined && classToRender.max !== null) {\n const duplicateClassExist = isClassDuplicate(classToRender, customClasses);\n if (duplicateClassExist) {\n setClassErrorMessage(CLASS_EXISTS);\n setHasError(true);\n return;\n }\n if (classToRender.max < classToRender.min) {\n setHasError(true);\n return;\n }\n setHasError(false);\n setClassErrorMessage('');\n }\n },\n [classToRender]\n );\n\n const handleRangeChange = (input: number): void => {\n const validInputWithinRange = getValidInputWithinRange(input);\n\n //Here we will check if the input is within the min and max allowed custom tier\n if (input < validInputWithinRange) {\n setHasError(true);\n setMaxValue(input);\n return;\n }\n\n setMaxValue(validInputWithinRange);\n };\n\n const handleRangeBlur = (inputMin: number, inputMax: number): void => {\n // we aren't using !input as this would return true if input was 0\n if (inputMax === undefined || inputMax === null) return;\n\n // if the input is less than minValue, we set the error\n if (inputMax < minValue) {\n setHasError(true);\n featureOnChangeFn(inputMax);\n return;\n }\n\n // check for duplicate class\n if (isClassDuplicate({ min: inputMin, max: inputMax, label: '' }, featureClasses)) {\n setClassErrorMessage(CLASS_EXISTS);\n setHasError(true);\n featureOnChangeFn(inputMax);\n return;\n }\n\n setClassErrorMessage('');\n setHasError(false);\n featureOnChangeFn(inputMax);\n };\n\n /**\n * Function to return what to render in the higher value input, either a infinite sign or a number input\n * @returns JSX.Element\n */\n const renderHigherValue = () => {\n if (index === featureClasses.length - 1) {\n return (\n <div className=\"pl-8 pt-2\">\n <Icon color=\"inactive\" size=\"lg\" testId=\"infinite-icon\">\n <Icon.icons.Infinite />\n </Icon>\n </div>\n );\n }\n\n return (\n <div className=\"w-2/4\">\n <NumberInput\n key={`max-feature-${index}`}\n value={classToRender.max}\n onChange={input => handleRangeChange(input)}\n onBlur={() => handleRangeBlur(minValue, maxValue)}\n testId={`max-feature-${index}`}\n hasError={hasError}\n errorMessage={classErrorMessage}\n minValue={MIN_CUSTOM_CLASS_TIER_VALUE}\n maxValue={MAX_CUSTOM_CLASS_TIER_VALUE}\n disabled={index === featureClasses.length - 1}\n />\n </div>\n );\n };\n return (\n <div className=\"pt-5\">\n <div className=\"relative pb-2\" data-test-id={'feature'}>\n <div className=\"flex items-start gap-2\">\n <div className=\"w-2/4\">\n <NumberInput\n key={`min-feature-${index}`}\n value={classToRender.min}\n disabled={true}\n onChange={() => {}}\n testId={`min-feature-${index}`}\n minValue={MIN_CUSTOM_CLASS_TIER_VALUE}\n maxValue={MAX_CUSTOM_CLASS_TIER_VALUE}\n />\n </div>\n\n <span className=\"pt-3\">—</span>\n {renderHigherValue()}\n </div>\n </div>\n <CustomClassLabel\n customClasses={featureClasses}\n labelOnChangeFn={onLabelChange(index)}\n index={index}\n isLabelOptional={true}\n errorMessage={errorMessage}\n />\n </div>\n );\n};\n","import { actions, elements } from '@ecosystem/newron-design-system';\nimport React from 'react';\nimport { MAX_ALLOWED_CUSTOM_CLASSES } from '../../../common/selection.menu/constants';\nimport { MenuSeparatorComponent } from '../../../common/selection.menu/menu.separator';\nimport { FilterDefinition } from '../../../types';\nimport { CustomNumericalClass } from '../../../types/content/custom.types';\nimport { adjustClassesAfterDeletion, updateLabelErrors } from '../../utils';\nimport { CustomFeatureClasses } from './customFeatureClasses';\nimport { AddClassButton } from '../addClassButton';\n\nconst { Icon } = elements;\nconst { IconButton } = actions;\n\ninterface NumericFeatureProps {\n selectedFeature: FilterDefinition;\n defaultFeatureClass: CustomNumericalClass;\n featureClasses: CustomNumericalClass[];\n setFeatureClasses: React.Dispatch<React.SetStateAction<CustomNumericalClass[]>>;\n}\nexport const NumericFeature: React.FC<NumericFeatureProps> = ({\n selectedFeature,\n defaultFeatureClass,\n featureClasses,\n setFeatureClasses,\n}: NumericFeatureProps) => {\n /**\n * Function to render the custom feature classes\n * @param index the index of the feature class\n * @returns JSX.Element\n */\n const renderFeatureClasses = (index: number, featureClass: CustomNumericalClass) => {\n return (\n <CustomFeatureClasses\n key={`feature_${index}`}\n onFeatureChange={handleOnFeatureChange}\n onLabelChange={handleOnLabelChange}\n index={index}\n featureClasses={featureClasses}\n errorMessage={featureClass.labelError}\n />\n );\n };\n\n /**\n * Function to handle feature change\n * @param index the index of the feature class\n * @returns\n */\n const handleOnFeatureChange = (index: number) => (value: number) => {\n if (!value) return;\n const nextIndex = index + 1;\n const updatedFeatureClass = { ...featureClasses[index] };\n let updatedNextMinFeatureClass = { ...featureClasses[nextIndex] };\n const copyFeatureClass = [...featureClasses];\n updatedFeatureClass.max = value;\n //auto update next min value, current max value=next min value\n if (featureClasses.length > nextIndex) {\n updatedNextMinFeatureClass = { ...featureClasses[nextIndex] };\n updatedNextMinFeatureClass.min = value;\n copyFeatureClass[nextIndex] = updatedNextMinFeatureClass;\n }\n copyFeatureClass[index] = updatedFeatureClass;\n setFeatureClasses(copyFeatureClass);\n };\n\n /**\n * Function to handle label change\n * @param index the index of the feature class\n * @returns\n */\n const handleOnLabelChange = (index: number) => (label: string) => {\n const updatedFeatureClass = { ...featureClasses[index] };\n const copyFeatureClass = [...featureClasses];\n updatedFeatureClass.label = label;\n copyFeatureClass[index] = updatedFeatureClass;\n updatedFeatureClasses(copyFeatureClass);\n };\n\n const addFeatureClass = () => {\n //get previous Max value\n const index = featureClasses.length - 1;\n const prevMax = featureClasses[index].min;\n const newMax = featureClasses[index].min === 0 ? Number(selectedFeature.min) : Number(selectedFeature.max);\n\n const newFeatureTier: CustomNumericalClass = {\n ...defaultFeatureClass,\n max: Number(newMax.toFixed(2)),\n min: Number(prevMax.toFixed(2)),\n label: '',\n };\n\n const newMaxTier: CustomNumericalClass = {\n ...defaultFeatureClass,\n max: null,\n min: Number(newMax.toFixed(2)),\n label: '',\n };\n\n // remove the last element and add the new feature tier and the new max tier\n let newFeatureClasses = [...featureClasses].slice(0, -1);\n\n newFeatureClasses.push(newFeatureTier, newMaxTier);\n updatedFeatureClasses(newFeatureClasses);\n };\n\n /**\n * Function to delete a feature class\n * @param index the index of the feature class to be deleted\n */\n const deleteFeatureClass = (index: number) => {\n // adjust the feature classes\n const featureClassToUpdate = adjustClassesAfterDeletion(\n index,\n featureClasses,\n Number(selectedFeature.max)\n ) as CustomNumericalClass[];\n // remove the feature class based on index\n const filteredList = featureClassToUpdate.filter((_, i) => i !== index);\n updatedFeatureClasses(filteredList);\n };\n\n const updatedFeatureClasses = (featureClasses: CustomNumericalClass[]) => {\n setFeatureClasses(updateLabelErrors(featureClasses));\n };\n\n return (\n <div>\n {!!featureClasses.length && (\n <div className=\"pt-8 pb-6 flex-grow-0 modal-body overflow-visible\">\n <div className=\"flex-row gap-2\">\n <div className=\"flex gap-1 self-center\">\n <span className=\"text-heading text-md font-bold\">Classes</span>\n <span className=\"text-inactive text-md\">{`(${featureClasses.length})`}</span>\n </div>\n </div>\n\n <MenuSeparatorComponent key={`seperator_main`} />\n {featureClasses.map((_, index, cp) => {\n return (\n <React.Fragment key={`fr_${index + cp.length}`}>\n {renderFeatureClasses(index, featureClasses[index])}\n {cp.length > 1 ? (\n <IconButton\n key={`delete_${index}`}\n testId={`delete-feature-class-btn-${index}`}\n onClick={() => deleteFeatureClass(index)}\n >\n <Icon.icons.Remove />\n </IconButton>\n ) : null}\n <MenuSeparatorComponent key={`seperator_${index}`} />\n </React.Fragment>\n );\n })}\n <div className=\" flex items-center gap-4 \">\n <div className=\"flex-grow\">\n <div className=\"flex items-center gap-4\">\n <span>\n <AddClassButton\n testId={'add-feature-class-btn'}\n onClick={addFeatureClass}\n isShowing={featureClasses.length < MAX_ALLOWED_CUSTOM_CLASSES}\n />\n </span>\n </div>\n </div>\n <div className=\"flex\">\n <div className=\"pl-4\">\n <span>\n <p className=\"text-xs text-lighter\">lower value</p>\n <p className=\"text-sm text-inactive\">included</p>\n </span>\n </div>\n <div className=\"pl-4\">\n <p className=\"text-xs text-inactive\">—</p>\n </div>\n <div className=\"pl-4\">\n <span>\n <p className=\"text-xs text-lighter\">higher value</p>\n <p className=\"text-sm text-inactive\">excluded</p>\n </span>\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n};\n","import { actions, elements, inputs } from '@ecosystem/newron-design-system';\nimport React, { forwardRef, Ref, useImperativeHandle, useState } from 'react';\nimport { MAX_ALLOWED_CUSTOM_CLASSES } from '../../../common/selection.menu/constants';\nimport { MenuSeparatorComponent } from '../../../common/selection.menu/menu.separator';\nimport { FilterDefinition } from '../../../types';\nimport { CustomCategoricalClass } from '../../../types/content/custom.types';\nimport constants from '../../constants';\nimport { CustomClassLabel } from '../customClassLabel';\nimport { AddClassButton } from '../addClassButton';\nimport { updateLabelErrors } from '../../utils';\n\nconst { Icon } = elements;\nconst { IconButton } = actions;\nconst { MultiSelect } = inputs;\nconst { LABEL_REQUIRED, OPTION_REQUIRED } = constants;\n\ninterface CategoricalFeatureRef {\n setTotalAvailableCategories: (availableCategories: number) => void;\n setEmptySelectedOption: (emptySelectedOptionClass: number[]) => void;\n setEmptyLabel: (emptyLabelClass: number[]) => void;\n}\n\ninterface CategoricalFeatureProps {\n featureClasses: CustomCategoricalClass[];\n selectedFeature: FilterDefinition;\n setFeatureClasses: React.Dispatch<React.SetStateAction<CustomCategoricalClass[]>>;\n forwardedRef?: Ref<CategoricalFeatureRef>;\n}\n\nexport const CategoricalFeature = forwardRef<CategoricalFeatureRef, CategoricalFeatureProps>((props, ref) => {\n return <CategoricalFeatureComponent {...props} forwardedRef={ref} />;\n});\nconst CategoricalFeatureComponent: React.FC<CategoricalFeatureProps> = ({\n featureClasses,\n selectedFeature,\n setFeatureClasses,\n forwardedRef,\n}) => {\n const [totalAvailableCategories, setTotalAvailableCategories] = useState<number>(selectedFeature.options.length);\n const [emptySelectedOption, setEmptySelectedOption] = useState<number[]>([]);\n const [emptyLabel, setEmptyLabel] = useState<number[]>([]);\n\n //variables for info message\n const infoMessage1 = `${totalAvailableCategories} ${totalAvailableCategories > 1 ? 'values ' : 'value '}`;\n const infoMessage2 = `custom class ${totalAvailableCategories > 1 ? 'are' : 'is'} inherited`;\n\n useImperativeHandle(forwardedRef, () => ({\n setTotalAvailableCategories: (availableCategories: number) => setTotalAvailableCategories(availableCategories),\n setEmptySelectedOption: (emptySelectedOptionClass: number[]) => setEmptySelectedOption(emptySelectedOptionClass),\n setEmptyLabel: (emptyLabelClass: number[]) => setEmptyLabel(emptyLabelClass),\n }));\n\n const handleOnLabelChange = (index: number) => (label: string) => {\n const updatedFeatureClass = { ...featureClasses[index] };\n const copyFeatureClass = [...featureClasses];\n updatedFeatureClass.label = label;\n copyFeatureClass[index] = updatedFeatureClass;\n updatedFeatureClasses(copyFeatureClass);\n if (emptyLabel.includes(index) && label) {\n setEmptyLabel(emptyLabel.filter(e => e !== index));\n }\n };\n\n const updatedFeatureClasses = (featureClasses: CustomCategoricalClass[]) => {\n setFeatureClasses(updateLabelErrors(featureClasses));\n };\n\n const handleOnFeatureChange = (index: number) => (values: string[], value: string) => {\n const copyFeatureClasses = [...featureClasses];\n copyFeatureClasses[index].selectedOptions = values;\n if (values.includes(value)) {\n //handle selecting category-- remove a selected option from the option list of other class\n copyFeatureClasses.forEach((fc, fcIndex) => {\n if (fcIndex === index) return;\n fc.options = fc.options.filter(option => option.value !== value);\n });\n if (emptySelectedOption.includes(index)) {\n setEmptySelectedOption(emptySelectedOption.filter(e => e !== index));\n }\n } else {\n //handle unselecting category-- add the unselected option to the option list of other class\n const toAddOption = selectedFeature.options.find(option => option.value === value);\n copyFeatureClasses.forEach((fc, fcIndex) => {\n if (fcIndex === index) return;\n const newOptions = [...fc.options, toAddOption];\n // to ensure the order of the options always matches its initial order\n const sortedOptions = selectedFeature.options.filter(option => newOptions.includes(option));\n fc.options = sortedOptions;\n });\n }\n setTotalAvailableCategories(getAvailableCategories().length);\n updatedFeatureClasses(copyFeatureClasses);\n };\n\n const addFeatureClass = () => {\n const newFeatureTier: CustomCategoricalClass = {\n label: '',\n selectedOptions: [],\n options: getAvailableCategories(),\n };\n updatedFeatureClasses([...featureClasses, newFeatureTier]);\n };\n\n const deleteFeatureClass = (index: number) => {\n const featureClassToUpdate = adjustClassesAfterDeletion(index, featureClasses);\n const filteredList = featureClassToUpdate.filter((_, i) => i !== index);\n const selectedCategories = filteredList.flatMap(fc => fc.selectedOptions);\n const unselected = selectedFeature.options.filter(option => !selectedCategories.includes(option.value));\n\n updatedFeatureClasses(filteredList);\n setTotalAvailableCategories(unselected.length);\n };\n\n const adjustClassesAfterDeletion = (index: number, classes: CustomCategoricalClass[]): CustomCategoricalClass[] => {\n const copyFeatureClasses = [...classes];\n const toRemove = classes[index];\n if (toRemove.selectedOptions.length) {\n //add back the selected options from deleted class to all classes option list\n const toAddOptions = selectedFeature.options.filter(option => toRemove.selectedOptions.includes(option.value));\n copyFeatureClasses.forEach((fc, fcIndex) => {\n if (fcIndex === index) return;\n const newOptions = [...fc.options, ...toAddOptions];\n const sortedOptions = selectedFeature.options.filter(option => newOptions.includes(option));\n fc.options = sortedOptions;\n });\n }\n return copyFeatureClasses;\n };\n\n const getAvailableCategories = () => {\n //the options of next classes should be limited to unselected categories\n const selectedCategories = featureClasses.flatMap(fc => fc.selectedOptions);\n return selectedFeature.options.filter(option => !selectedCategories.includes(option.value));\n };\n\n const renderFeatureClasses = (index: number, cp: CustomCategoricalClass) => {\n return (\n <div className=\"pt-5\">\n <div className=\"relative pb-2\" data-test-id={`select-feature-${index}`}>\n <MultiSelect\n name={`featureClasses-${index}`}\n onChange={handleOnFeatureChange(index)}\n options={featureClasses[index].options}\n values={featureClasses[index].selectedOptions}\n placeholder=\"Assign values ...\"\n errorMessage={emptySelectedOption.includes(index) ? OPTION_REQUIRED : ''}\n />\n </div>\n <CustomClassLabel\n customClasses={featureClasses}\n labelOnChangeFn={handleOnLabelChange(index)}\n index={index}\n isLabelOptional={false}\n errorMessage={emptyLabel.includes(index) ? LABEL_REQUIRED : cp.labelError}\n />\n </div>\n );\n };\n\n return (\n <div>\n {!!featureClasses.length && (\n <div className=\"pt-8 pb-6 flex-grow-0 modal-body overflow-visible\">\n <div className=\"flex-row gap-2\">\n <div className=\"flex gap-1 self-center\">\n <span className=\"text-heading text-md font-bold\">Classes</span>\n <span className=\"text-inactive text-md\">{`(${featureClasses.length})`}</span>\n </div>\n </div>\n\n <MenuSeparatorComponent key={`seperator_main`} />\n {featureClasses.map((classItem, index, cp) => {\n return (\n <React.Fragment key={`fr_${index + cp.length}`}>\n {renderFeatureClasses(index, classItem)}\n {cp.length > 1 ? (\n <IconButton\n key={`delete_${index}`}\n testId={`delete-feature-class-btn-${index}`}\n onClick={() => deleteFeatureClass(index)}\n >\n <Icon.icons.Remove />\n </IconButton>\n ) : null}\n <MenuSeparatorComponent key={`seperator_${index}`} />\n </React.Fragment>\n );\n })}\n\n {totalAvailableCategories > 0 && (\n <div className=\"flex justify-between\">\n <AddClassButton\n testId={'add-feature-class-btn'}\n onClick={addFeatureClass}\n isShowing={\n featureClasses.length < MAX_ALLOWED_CUSTOM_CLASSES &&\n featureClasses.length < selectedFeature.options.length\n }\n />\n\n <div className=\"flex flex-column text-inactive\" data-test-id=\"feature-class-info-message\">\n <div className=\"self-end\">\n <span className=\"font-bold text-sm\">{infoMessage1}</span>\n <span className=\"text-xs\">not assigned to a</span>\n </div>\n <div className=\"text-xs self-end\">{infoMessage2}</div>\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n );\n};\n","import { ClientSidebar } from '@ecosystem/newron-client-lib';\nimport { actions, containers, elements } from '@ecosystem/newron-design-system';\nimport { FilterTrayTabId as FilterTrayTabIdEnum } from '@ecosystem/newron-design-system/build/exports/containers';\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { useCorePageState } from '../../../page/provider';\nimport { PageSettingsManager } from '../../../page/settings';\nimport {\n CustomFeatureDetails,\n Entity,\n EventElementCategory,\n EventElementType,\n EventName,\n EventParams,\n FilterDefinition,\n FilterSections,\n FilterType,\n Params,\n PreferenceName,\n} from '../../../types';\nimport {\n CustomCategoricalClass,\n CustomNumericalClass,\n SavedCustomFeatureSegments,\n SharePermissionsBody,\n} from '../../../types/content/custom.types';\nimport { FilterEntry } from '../../filterEntry';\nimport { useSidebar } from '../useSideBar.hook';\nimport { CustomSegmentType } from '../../types';\nimport { NumericFeature } from './renderNumericFeature';\nimport { useAnalyticsContext } from '../../../analytics/analytics.provider';\nimport { CategoricalFeature } from './renderCategoricalFeature';\nimport { useSaveFeatureSegments } from '../../saveFeatureSegments.hook';\nimport { SavedCustomSegmentsCard } from '../savedCustomSegmentsCard';\nimport { SavedCustomSegmentsModal } from '../saveCustomSegmentsModal';\nimport {\n formatFeatureClassForParams,\n FormatFeatureClassInput,\n getFeatureClassesFromSettings,\n getSharedUsers,\n shareToUser,\n validateLabelInput,\n validateNumberInput,\n} from '../../utils';\nimport { ShareCustomModal } from '../../shareCustomModal';\nimport { userClient } from '../../../client/user.client';\nimport { getCurrentActiveComponentNameForCustomTray, isDiffSavedFeatures } from '../customSegmentsUtils';\nimport { ContextManager } from '../../../context/manager';\nimport { SelectedCustomFeatureContext } from '../../../common/selection.menu/types';\n\nconst { Button, ButtonGroup, IconButton } = actions;\nconst { Icon } = elements;\nconst { FilterTrayTabId, Tray } = containers;\n\ntype ComponentProps = {\n sections: FilterSections[];\n updateSettings: (updates: Params) => void;\n contextCustomFeature?: CustomFeatureDetails;\n};\n\nfunction FeatureEditTrayComponent({ sections, updateSettings, contextCustomFeature }: ComponentProps) {\n const { setCustomizationTray, customizationTrayTabId, dsl, page } = useCorePageState();\n const [showSaveCustomFeatureModal, setShowSaveCustomFeatureModal] = useState(false);\n const currentActiveComponentName = getCurrentActiveComponentNameForCustomTray(dsl.sections);\n const componentSettings = PageSettingsManager.getInstance().getComponentSettings(currentActiveComponentName);\n const [defaultFeatureClass, setDefaultFeatureClass] = useState<CustomNumericalClass | CustomCategoricalClass>(null);\n const [featureClasses, setFeatureClasses] = useState<CustomNumericalClass[] | CustomCategoricalClass[]>([]);\n const [selectedFeature, setSelectedFeature] = useState<FilterDefinition>(null);\n const [activeTab, setActiveTab] = useState<FilterTrayTabIdEnum>(customizationTrayTabId || FilterTrayTabId.Configure);\n const { trackPageEvent } = useAnalyticsContext();\n const [isShareModalOpen, setIsShareModalOpen] = useState(false);\n const [featureToShare, setFeatureToShare] = useState<SavedCustomFeatureSegments>();\n const { secondSegmentationConfig, originMenu } = contextCustomFeature;\n\n const {\n applicableSavedFeatureSegments,\n unapplicableSavedFeatureSegments,\n saveCustomFeatureSegments,\n deleteSavedCustomFeatureSegments,\n } = useSaveFeatureSegments();\n\n const shouldCheckForDuplicates = (preventDuplicatesWith: string[]) => {\n return preventDuplicatesWith && !preventDuplicatesWith.includes(originMenu);\n };\n\n /**\n * Function that filters the saved feature segments based on the values that should be prevented by the second segmentation\n * @returns\n */\n const filterSavedFeatureSegments = () => {\n const { valuesToPrevent } = secondSegmentationConfig;\n\n if (valuesToPrevent?.length > 0) {\n const unapplicableBySecondSeg = [];\n const applicableBySecondSeg = applicableSavedFeatureSegments.filter(savedOption => {\n const isUnapplicable = valuesToPrevent.some(value => savedOption.segmentationName.startsWith(value));\n if (isUnapplicable) {\n unapplicableBySecondSeg.push(savedOption);\n }\n return !isUnapplicable;\n });\n\n if (unapplicableBySecondSeg.length > 0) {\n if (isDiffSavedFeatures(applicableBySecondSeg, applicableSavedFeatures)) {\n setApplicableSavedFeatures(applicableBySecondSeg);\n }\n const newUnapplicable = [...unapplicableSavedFeatureSegments, ...unapplicableBySecondSeg];\n if (isDiffSavedFeatures(newUnapplicable, unapplicableSavedFeatures)) {\n setUnapplicableSavedFeatures(newUnapplicable);\n }\n } else {\n setPureApplicableAndNonApplicableSavedFeatures();\n }\n }\n };\n\n const needApplicableFilter = () => {\n if (!secondSegmentationConfig) return false;\n\n const { valuesToPrevent, preventDuplicatesWith } = secondSegmentationConfig;\n if (!shouldCheckForDuplicates(preventDuplicatesWith) || valuesToPrevent?.length === 0) return false;\n\n return true;\n };\n\n const setPureApplicableAndNonApplicableSavedFeatures = () => {\n const shouldUpdateApplicableSavedFeatures = isDiffSavedFeatures(\n applicableSavedFeatureSegments,\n applicableSavedFeatures\n );\n const shouldUpdateUnapplicableSavedFeatures = isDiffSavedFeatures(\n unapplicableSavedFeatureSegments,\n unapplicableSavedFeatures\n );\n if (shouldUpdateApplicableSavedFeatures) {\n setApplicableSavedFeatures(applicableSavedFeatureSegments);\n }\n if (shouldUpdateUnapplicableSavedFeatures) {\n setUnapplicableSavedFeatures(unapplicableSavedFeatureSegments);\n }\n };\n\n const [applicableSavedFeatures, setApplicableSavedFeatures] = useState(applicableSavedFeatureSegments);\n const [unapplicableSavedFeatures, setUnapplicableSavedFeatures] = useState(unapplicableSavedFeatureSegments);\n\n useEffect(() => {\n if (needApplicableFilter()) {\n filterSavedFeatureSegments();\n } else {\n setPureApplicableAndNonApplicableSavedFeatures();\n }\n }, [applicableSavedFeatureSegments, unapplicableSavedFeatureSegments]);\n\n const categoricalFeatureRef = useRef(null);\n\n useEffect(() => {\n setActiveTab(customizationTrayTabId || FilterTrayTabId.Configure);\n }, [customizationTrayTabId]);\n\n const { expanded, hideSidebar, openSidebar } = useSidebar('custom-feature-classes');\n\n //We will need to force the Custom Feature Tray to be opened once its rendered.\n useEffect(() => {\n if (!expanded) {\n openSidebar(); // Avoid multiple state changes by checking `expanded`\n }\n }, [expanded, openSidebar]);\n\n /**\n * Function to handle tab change\n * @param tabId the tab id\n */\n const onTabChange = (tabId: FilterTrayTabIdEnum) => {\n setActiveTab(tabId);\n };\n\n /**\n * Function to handle base feature change\n * This is the internal function to allow calling with `baseFeatures`.\n * @param entity - The selected entity\n * @param features - The features list (optional)\n */\n const handleBaseFeatureChange = (entity: Entity, features?: FilterDefinition[]) => {\n if (!entity) {\n setSelectedFeature(null);\n return;\n }\n\n // Use provided features or the current `baseFeatures` state\n const featureList = features || baseFeatures;\n let baseFeature = featureList?.find(item => item.name === entity.value);\n\n baseFeature = { ...baseFeature, value: baseFeature.name };\n setSelectedFeature(baseFeature);\n\n if (baseFeature?.type === FilterType.numericRange) {\n const initialFeatureClass: CustomNumericalClass = {\n label: '',\n min: 0,\n max: null,\n };\n setDefaultFeatureClass(initialFeatureClass);\n setFeatureClasses([initialFeatureClass]);\n } else {\n const initialFeatureClass: CustomCategoricalClass = {\n label: '',\n selectedOptions: [],\n options: baseFeature.options,\n };\n if (categoricalFeatureRef.current) {\n categoricalFeatureRef.current.setTotalAvailableCategories(baseFeature.options.length);\n }\n setDefaultFeatureClass(initialFeatureClass);\n setFeatureClasses([initialFeatureClass]);\n }\n };\n\n const [baseFeatures, options] = useMemo(() => {\n let ungroupedFeatures = sections?.find(item => item?.label === 'Features')?.ungrouped?.definitions;\n if (ungroupedFeatures.length > 0) {\n const { isDefaultState, feature, retainedFeatureClasses } = getFeatureClassesFromSettings(\n componentSettings,\n contextCustomFeature.selectedFeature,\n ungroupedFeatures,\n page\n );\n\n const initialFeature = isDefaultState ? ungroupedFeatures[0] : feature;\n setSelectedFeature(initialFeature);\n handleBaseFeatureChange(\n {\n label: initialFeature.label,\n value: initialFeature.name,\n },\n ungroupedFeatures\n );\n\n if (!isDefaultState) {\n setFeatureClasses(retainedFeatureClasses);\n }\n }\n return [\n ungroupedFeatures,\n ungroupedFeatures.map(({ label, name }) => ({\n label,\n value: name,\n isDisabled: false,\n })),\n ];\n }, [sections]);\n\n /**\n * Function to get the filtered options based on the second segmentation configuration\n */\n const getFilteredOptions = useMemo(() => {\n if (!secondSegmentationConfig) {\n return options;\n }\n const { valuesToPrevent, preventDuplicatesWith } = secondSegmentationConfig;\n\n if (!shouldCheckForDuplicates(preventDuplicatesWith)) {\n return options;\n }\n\n if (valuesToPrevent?.length > 0) {\n return options.map(option => ({\n ...option,\n isDisabled: valuesToPrevent.some(value => option.value.startsWith(value)),\n }));\n }\n\n return options;\n }, [options, secondSegmentationConfig, originMenu]);\n\n const definitions = useMemo(\n () => ({\n type: 'select',\n name: 'Base Feature Dropdown',\n placeholder: 'Select',\n label: 'Base Feature',\n options: getFilteredOptions,\n }),\n [getFilteredOptions]\n );\n\n const areFeatureClassesValid = () => {\n const areLabelsValid = validateLabelInput(featureClasses);\n if (!areLabelsValid) {\n return false;\n }\n\n if (selectedFeature.type === FilterType.numericRange) {\n const areInputsValid = validateNumberInput(featureClasses as CustomNumericalClass[]);\n return areInputsValid;\n }\n\n if (selectedFeature.type === FilterType.multiSelect) {\n const { hasNoSelectedOptions, hasNoLabel } = validateCategoricalFeatureClasses();\n if (categoricalFeatureRef.current) {\n categoricalFeatureRef.current.setEmptySelectedOption(hasNoSelectedOptions);\n categoricalFeatureRef.current.setEmptyLabel(hasNoLabel);\n }\n if (hasNoLabel.length > 0 || hasNoSelectedOptions.length > 0) {\n return false;\n }\n return true;\n }\n\n return false;\n };\n\n const handleApply = () => {\n if (!areFeatureClassesValid()) return;\n const input: FormatFeatureClassInput = {\n selectedFeatureName: selectedFeature.name,\n selectedFeatureType: selectedFeature.type,\n segmentClasses: featureClasses,\n };\n const formattedTiers = formatFeatureClassForParams(input);\n\n const customFeatureContext: SelectedCustomFeatureContext = {\n type: selectedFeature.type,\n label: selectedFeature.label,\n value: selectedFeature.value,\n };\n ContextManager.getInstance().updateCustomFeatureValues({\n customFeature: {\n [page.name]: {\n selectedFeature: customFeatureContext,\n originMenu: originMenu,\n customFeatureType: contextCustomFeature.customFeatureType,\n secondSegmentationConfig: secondSegmentationConfig,\n },\n },\n });\n\n updateSettings({\n ...componentSettings,\n customFeatureTiers: [formattedTiers],\n });\n };\n const isCardActive = (savedCustomSeg: SavedCustomFeatureSegments) => {\n // Check if the rendered saved custom segmentation is the same as the current applied custom feature tiers\n const input: FormatFeatureClassInput = {\n selectedFeatureName: savedCustomSeg.segmentationName,\n selectedFeatureType: savedCustomSeg.filterType,\n segmentClasses: savedCustomSeg.customSegmentation,\n };\n return componentSettings?.['customFeatureTiers']?.[0] === formatFeatureClassForParams(input);\n };\n /**\n * A currying function to render the saved custom segmentation card\n * @param isApplicable - whether the saved custom segmentation is applicable or not\n * @returns The function to render the saved custom segmentation card\n */\n const renderSavedCustomSegmentsFn =\n (isApplicable: boolean) => (savedCustomSeg: SavedCustomFeatureSegments, index: number) => {\n return (\n <SavedCustomSegmentsCard\n key={`saved-custom-segments-${savedCustomSeg.name}-${index}`}\n customSegmentType={CustomSegmentType.customFeatureSegmentation}\n savedCardLabel={\n baseFeatures?.find(item => item.name === savedCustomSeg.segmentationName)?.label ??\n savedCustomSeg.segmentationLabel\n }\n savedData={savedCustomSeg}\n isActive={isCardActive(savedCustomSeg)}\n isApplicable={isApplicable}\n handleApply={handleApplySavedCustomSegmentation}\n handleDelete={handleDeleteSavedCustomSegmentation}\n handleShare={hanldeShareSavedCustomSegmentation}\n />\n );\n };\n const recordAnalyticEventDetails = (\n event: string,\n category: EventElementCategory,\n featureClassesList: CustomNumericalClass[] | CustomCategoricalClass[],\n filterType?: string,\n label?: string\n ) => {\n let params: EventParams = {\n elementType: EventElementType.Button,\n elementCategory: category,\n elementName: event,\n };\n\n if (category === EventElementCategory.CustomFeatureFilter) {\n params.featuresGroup = label ?? selectedFeature.label;\n }\n\n let list: string[] = [];\n\n // Process featureClassesList if it exists and has elements\n if (featureClassesList && featureClassesList.length > 0 && filterType) {\n if (filterType === FilterType.numericRange) {\n // Handle numeric range - Directly push min and max values\n featureClassesList.forEach(featureClass => {\n list.push(featureClass.min.toString());\n });\n } else {\n // Handle categorical options\n const catFeatures = featureClassesList as CustomCategoricalClass[];\n\n let keys = catFeatures.filter(item => item.selectedOptions).flatMap(item => item.selectedOptions);\n const flattenedkeys = keys.flatMap(item => item.split(','));\n list = getOptionsList(flattenedkeys, label);\n }\n }\n // Only set customFeatureClasses if the list is populated\n if (list.length > 0) {\n params.customFeatureClasses = list;\n }\n // Track the page event with the prepared parameters\n trackPageEvent(EventName.PageElementClicked, params);\n };\n const getOptionsList = (keys, label) => {\n const list: string[] = [];\n const catFeatureOptions = baseFeatures.find(item => item.label === label)?.options;\n catFeatureOptions?.map(item => {\n if (keys.includes(item.value)) {\n list.push(item.label);\n }\n });\n\n return list;\n // }\n };\n\n const onApplyFromCustomizedTab = () => {\n handleApply();\n recordAnalyticEventDetails(\n 'Apply Custom Feature Classes',\n EventElementCategory.CustomFeatureFilter,\n featureClasses,\n selectedFeature.type,\n selectedFeature.label\n );\n };\n const handleApplySavedCustomSegmentation = (savedCustomSeg: SavedCustomFeatureSegments) => {\n recordAnalyticEventDetails(\n 'Apply Custom Feature Classes',\n EventElementCategory.CustomFeatureFilter,\n savedCustomSeg.customSegmentation,\n savedCustomSeg.filterType,\n savedCustomSeg.segmentationLabel\n );\n const input: FormatFeatureClassInput = {\n selectedFeatureName: savedCustomSeg.segmentationName,\n selectedFeatureType: savedCustomSeg.filterType as FilterType,\n segmentClasses: savedCustomSeg.customSegmentation,\n };\n const formattedSavedCustomSeg = formatFeatureClassForParams(input);\n ContextManager.getInstance().updateCustomFeatureValues({\n customFeature: {\n [page.name]: {\n selectedFeature: {\n type: savedCustomSeg.filterType,\n label: savedCustomSeg.name,\n value: savedCustomSeg.segmentationName,\n savedName: savedCustomSeg.name,\n },\n originMenu: originMenu,\n customFeatureType: contextCustomFeature.customFeatureType,\n secondSegmentationConfig: secondSegmentationConfig,\n },\n },\n });\n updateSettings({\n ...componentSettings,\n customFeatureTiers: [formattedSavedCustomSeg],\n [originMenu]: [`${contextCustomFeature.customFeatureType}|${savedCustomSeg.name}`],\n });\n };\n\n const handleDeleteSavedCustomSegmentation = (savedCustomSegToDelete: SavedCustomFeatureSegments, userId: string) => {\n deleteSavedCustomFeatureSegments(savedCustomSegToDelete, userId);\n recordAnalyticEventDetails(\n 'Delete Custom Feature Classes',\n EventElementCategory.DeleteFeatureFilter,\n savedCustomSegToDelete.customSegmentation,\n savedCustomSegToDelete.filterType,\n savedCustomSegToDelete.segmentationLabel\n );\n };\n\n const hanldeShareSavedCustomSegmentation = (savedCustomFeatureSegment: SavedCustomFeatureSegments) => {\n setIsShareModalOpen(true);\n setFeatureToShare(savedCustomFeatureSegment);\n };\n\n const validateCategoricalFeatureClasses = (): { hasNoSelectedOptions: number[]; hasNoLabel: number[] } => {\n const hasNoSelectedOptions: number[] = [];\n const hasNoLabel: number[] = [];\n featureClasses.map((fc, index) => {\n if (!fc.selectedOptions.length) {\n hasNoSelectedOptions.push(index);\n }\n\n if (!fc.label) {\n hasNoLabel.push(index);\n }\n });\n return { hasNoSelectedOptions, hasNoLabel };\n };\n\n const renderFeatureClassComponent = () => {\n if (!selectedFeature) return;\n\n if (selectedFeature.type === FilterType.numericRange) {\n return (\n <NumericFeature\n selectedFeature={selectedFeature}\n defaultFeatureClass={defaultFeatureClass as CustomNumericalClass}\n featureClasses={featureClasses as CustomNumericalClass[]}\n setFeatureClasses={setFeatureClasses}\n />\n );\n }\n return (\n <CategoricalFeature\n selectedFeature={selectedFeature}\n featureClasses={featureClasses as CustomCategoricalClass[]}\n setFeatureClasses={setFeatureClasses}\n ref={categoricalFeatureRef}\n />\n );\n };\n\n const renderSaveCustomFeatureModal = () => {\n return (\n <SavedCustomSegmentsModal\n customSegmentType={CustomSegmentType.customFeatureSegmentation}\n isOpen={showSaveCustomFeatureModal}\n existingName={[\n ...applicableSavedFeatures.map(item => item.name),\n ...unapplicableSavedFeatures.map(item => item.name),\n ]}\n onSave={handleSave}\n onClose={() => {\n setShowSaveCustomFeatureModal(false);\n }}\n />\n );\n };\n const validateAndSave = () => {\n if (!areFeatureClassesValid()) return;\n setShowSaveCustomFeatureModal(true);\n };\n const handleSave = (name: string, desc: string) => {\n recordAnalyticEventDetails(\n 'Save Custom Feature Classes',\n EventElementCategory.CustomFeatureFilter,\n featureClasses,\n selectedFeature.type,\n selectedFeature.label\n );\n // recordAnalyticEventDetails('Save Custom Segmentation', priceClasses);\n //we need to extend the function here to cater for saving categorical feature\n const input: FormatFeatureClassInput = {\n selectedFeatureName: selectedFeature.name,\n selectedFeatureType: selectedFeature.type,\n segmentClasses: featureClasses,\n excludeOthers: true,\n };\n saveCustomFeatureSegments(\n name,\n desc,\n selectedFeature.label,\n formatFeatureClassForParams(input),\n selectedFeature.type,\n selectedFeature?.min,\n selectedFeature?.max\n );\n setShowSaveCustomFeatureModal(false);\n };\n\n const renderShareCustomFeatureModal = () => {\n return (\n <ShareCustomModal\n isOpen={isShareModalOpen}\n itemToShare={featureToShare}\n preferenceName={PreferenceName.segment_feature}\n onClose={() => setIsShareModalOpen(false)}\n onSuccess={() => {\n setIsShareModalOpen(false);\n }}\n onShareError={() => {\n setIsShareModalOpen(false);\n }}\n getUsers={userClient.getSameAccessUsers}\n getSharedUsers={getSharedUsers}\n shareToUser={onShareToUser}\n />\n );\n };\n\n /**\n * Function to share the feature segment to a user.\n * Called when the user clicks the \"Apply changes\" button in the share modal\n * @param preferenceId - the id of the preference to be shared\n * @param permissionsBody - the permissions body\n */\n const onShareToUser = async (preferenceId: string, permissionsBody: SharePermissionsBody[]) => {\n await shareToUser(preferenceId, PreferenceName.segment_feature, permissionsBody);\n recordAnalyticEventDetails('Share Custom Feature Classes', EventElementCategory.ShareFeatureFilter, null, null);\n };\n\n return (\n <ClientSidebar.Content>\n <Tray>\n <Tray.Header padding=\"medium\">\n {expanded && <div className=\"flex-grow font-normal text-md text-heading\">Feature Segments</div>}\n <IconButton\n size=\"md\"\n variant=\"white\"\n color=\"secondaryInteractive\"\n onClick={() => {\n hideSidebar();\n setCustomizationTray(null);\n }}\n testId=\"feature-tray-close-btn\"\n >\n <Icon.icons.Close />\n </IconButton>\n </Tray.Header>\n <Tray.Tabs currentTab={activeTab} onTabChange={onTabChange}>\n <Tray.Tabs.Tab id=\"tab-1\">Customize</Tray.Tabs.Tab>\n <Tray.Tabs.Content id=\"tab-1\">\n <div className=\"pt-4 pb-6 flex-grow-0 modal-body overflow-visible\">\n <FilterEntry\n key={'custom_feature'}\n definition={definitions as FilterDefinition}\n disabled={false}\n values={[selectedFeature as Entity]}\n onChange={(_, [entity]) => handleBaseFeatureChange(entity)}\n />\n <span className=\"text-sm text-lighter line-truncate\" style={{ marginTop: '-20px' }}>\n The feature you want to customize.\n </span>\n {renderFeatureClassComponent()}\n </div>\n </Tray.Tabs.Content>\n <Tray.Tabs.Tab id=\"tab-2\">Saved</Tray.Tabs.Tab>\n <Tray.Tabs.Content id=\"tab-2\">\n <div>\n <div>{applicableSavedFeatures.map(renderSavedCustomSegmentsFn(true))}</div>\n <div className=\"border-light border-t py-4 mt-5\">\n <div className=\"font-bold\">Unapplicable</div>\n <div className=\"mb-2 text-sm text-lighter\">\n Feature segments that can't be applied within the current context.\n </div>\n {unapplicableSavedFeatures.map(renderSavedCustomSegmentsFn(false))}\n </div>\n </div>\n </Tray.Tabs.Content>\n </Tray.Tabs>\n {activeTab === FilterTrayTabId.Configure && (\n <Tray.Footer>\n <div className=\"flex-grow\">\n <ButtonGroup>\n <ButtonGroup.PrimaryButton>\n <Button onClick={onApplyFromCustomizedTab} stretch>\n Apply\n </Button>\n </ButtonGroup.PrimaryButton>\n <ButtonGroup.SecondaryButtons>\n <Button onClick={() => validateAndSave()} mode=\"secondary\" stretch>\n Save\n </Button>\n </ButtonGroup.SecondaryButtons>\n </ButtonGroup>\n </div>\n </Tray.Footer>\n )}\n </Tray>\n {renderSaveCustomFeatureModal()}\n {renderShareCustomFeatureModal()}\n </ClientSidebar.Content>\n );\n}\n\nexport { FeatureEditTrayComponent };\n","import { FilterPanel } from '@ecosystem/newron-client-lib';\nimport React, { useEffect, useState } from 'react';\nimport { ContextManager } from '../../context/manager';\nimport { Loading } from '../../design/loading/Loading';\nimport { useCorePageState } from '../../page/provider';\nimport { Context, CustomFeatureDetails, Params } from '../../types';\nimport { EditTrayComponent } from './price/customPriceTray';\nimport { FeatureEditTrayComponent } from './features/customFeatureTray';\nimport { TrayType } from '../../types/content/custom.types';\n\ninterface TrayComponentProps {\n updateSettings: (updates: Params) => void;\n trayType?: TrayType;\n}\n\nfunction EditTray({ updateSettings }: TrayComponentProps) {\n const [context, setContext] = useState<Context>();\n const [currency, setCurrency] = useState<string>();\n const [contextCustomFeature, setContextCustomFeature] = useState<CustomFeatureDetails>();\n const { trayType, page } = useCorePageState();\n useEffect(() => {\n const subscriber = (context: Context) => {\n if (context) {\n setContext(context);\n }\n if (context?.settings?.values?.resolvedLocalCurrency) {\n setCurrency(context.settings.values.resolvedLocalCurrency[0].value);\n }\n if (context.customFeature) {\n const menu = context.customFeature?.[page.name];\n setContextCustomFeature(menu);\n }\n };\n ContextManager.getInstance().subscribeToSettingsChanges(subscriber);\n return () => ContextManager.getInstance().unsubscribeFromSettingsChanges(subscriber);\n }, []);\n\n if (!context?.filters) {\n return (\n <FilterPanel>\n <Loading isActive withIndicator />\n </FilterPanel>\n );\n }\n\n const {\n filters: { sections },\n } = context;\n if (!sections?.length) {\n return null;\n }\n /**\n * Function to return what to render based on tray type\n * @returns JSX.Element\n */\n const renderTrayComponent = () => {\n switch (trayType) {\n case 'segment_feature':\n return (\n <FeatureEditTrayComponent\n sections={sections}\n updateSettings={updateSettings}\n contextCustomFeature={contextCustomFeature}\n />\n );\n case 'segment_price':\n return <EditTrayComponent sections={sections} updateSettings={updateSettings} currency={currency} />;\n default:\n return null;\n }\n };\n return renderTrayComponent();\n}\n\nexport { EditTray };\n","import React, { Fragment, useEffect, useMemo } from 'react';\nimport { Params, DynamicTitle, TitleSelector } from '../../types';\nimport { SelectionMenuComponent } from '../selection.menu';\nimport { TitleButton } from './title.button';\nimport { EditTray } from '../../filters/customFilters/editTray';\nimport { useCorePageState } from '../../page/provider';\nimport { TrayType } from '../../types/content/custom.types';\n\ntype Props = {\n title: string | DynamicTitle;\n settings: Params;\n inactive?: boolean;\n onChange: (updates: Params) => void;\n};\nfunction DynamicTitleElement({ title, settings, inactive, onChange }: Props) {\n const handleChange = (updates: Params) => {\n onChange(updates);\n };\n\n const entries = useMemo(() => {\n return typeof title === 'string' ? [title] : title;\n }, [title]);\n\n const { setCustomizationTray, isCollections, isFilterTray, setIsFilterTray } = useCorePageState();\n\n const entry = entries.find(\n entry => typeof entry === 'object' && entry.menu.customizationTraySettings\n ) as TitleSelector;\n\n const customizationTraySettings = entry?.menu?.customizationTraySettings;\n\n const isCustomizationTrayNeeded = customizationTraySettings?.isCustomizationTrayNeeded;\n const trayType = customizationTraySettings?.trayType as TrayType;\n\n useEffect(() => {\n if (isCollections) {\n setCustomizationTray(null);\n setIsFilterTray(false);\n return;\n }\n\n if (!isFilterTray) {\n isCustomizationTrayNeeded ? setCustomizationTray(trayType) : setCustomizationTray(null);\n }\n }, [isCustomizationTrayNeeded]);\n\n return (\n <div className=\"flex flex-wrap items-baseline gap-1 text-heading z-60 text-lg\">\n {entries.map((entry, idx) => (\n <Fragment key={`title_${idx}`}>\n {typeof entry === 'string' ? (\n <span className=\"nowrap\">{entry}</span>\n ) : (\n <SelectionMenuComponent\n menuConfig={entry.menu}\n values={settings}\n onUpdate={handleChange}\n button={TitleButton}\n inactive={inactive}\n />\n )}\n </Fragment>\n ))}\n {!!trayType && !isCollections && customizationTraySettings && <EditTray updateSettings={handleChange} />}\n </div>\n );\n}\n\nexport { DynamicTitleElement };\n","import { useMemo } from 'react';\nimport { EventName, EventParams, FilterSections, FiltersValues } from '../types';\nimport { useAnalyticsContext } from '../analytics/analytics.provider';\nimport { ChosenCategoryType } from '../analytics/types';\n\nexport const GLOBAL_FILTER_NAME = 'Global Filter';\n\nexport const useFilterTracking = (sections: FilterSections[]) => {\n const { trackPageEvent } = useAnalyticsContext();\n\n const { labelLookup, groupLabelLookup } = useMemo(() => getLabelLookups(sections), [sections]);\n\n const trackFilterApplied = (filterValues: FiltersValues) => {\n const chosenCategories = getChosenCategories(filterValues, labelLookup);\n const eventParams = getEventParams(filterValues, chosenCategories, groupLabelLookup);\n\n if (eventParams === null) {\n return;\n }\n\n trackPageEvent(EventName.FilterApplied, eventParams);\n\n // for each category chosen, send filter applied details event, distinguishing between premium and non-premium filters\n chosenCategories.forEach(category => {\n const { key } = category;\n const eventParamsFilterDetails: EventParams = getFilterDetails(category, eventParams, !!groupLabelLookup[key]);\n trackPageEvent(EventName.FilterAppliedDetails, eventParamsFilterDetails);\n });\n };\n\n return { trackFilterApplied };\n};\n\nconst getFilterDetails = (category: ChosenCategoryType, eventParams: EventParams, isPremium: boolean) => {\n const { label: categoryChosen, values: optionChosen } = category;\n // groupLabelLookup is a lookup table for premium filters\n\n const { filterSection, ...eventParamsWithoutFilterSection } = eventParams;\n\n return {\n ...eventParamsWithoutFilterSection,\n ...(!isPremium ? {} : { filterSection }),\n categoryChosen,\n optionChosen,\n };\n};\n\nconst getAllDefinitions = (sections: FilterSections[]) =>\n sections.reduce((acc, section) => {\n return [\n ...acc,\n ...(section.ungrouped?.definitions || []),\n ...(section.grouped?.flatMap(group => group.definitions) || []),\n ];\n }, []);\n\nconst getLabelLookup = (sections: FilterSections[]) => {\n const allDefinitions = getAllDefinitions(sections);\n return allDefinitions.reduce((acc, current) => ({ ...acc, [current.name]: current.label }), {});\n};\n\nconst getGroupLabels = (sections: FilterSections[]): { groupLabel: string; name: string }[] =>\n sections.reduce((acc, section) => {\n return [\n ...acc,\n ...(section.grouped?.flatMap(group =>\n group.definitions.map(def => ({ groupLabel: group.label, name: def.name }))\n ) || []),\n ];\n }, []);\n\nconst getGroupLabelLookup = (sections: FilterSections[]) => {\n const groupLabels = getGroupLabels(sections);\n return groupLabels.reduce((acc, current) => ({ ...acc, [current.name]: current.groupLabel }), {});\n};\n\nexport const getLabelLookups = (sections: FilterSections[]) => {\n const labelLookup = getLabelLookup(sections);\n const groupLabelLookup = getGroupLabelLookup(sections);\n return { labelLookup, groupLabelLookup };\n};\n\nexport const getEventParams = (\n filterValues: FiltersValues,\n chosenCategories: { label: string; key: string; values: string[] }[],\n groupLabelLookup: Record<string, string>\n) => {\n const nonEmptyFilterKeys = Object.keys(filterValues).filter(key => filterValues[key].length > 0);\n\n if (nonEmptyFilterKeys.length === 0) {\n return null;\n }\n\n const filterSection = [...new Set(nonEmptyFilterKeys.map(key => groupLabelLookup[key]).filter(Boolean))];\n\n const categoryCombination = chosenCategories.map(category => category.label);\n\n const eventParams: EventParams = {\n categoryCombination,\n filterName: GLOBAL_FILTER_NAME,\n filterType: 'Platform',\n };\n\n if (filterSection.length) {\n eventParams.filterSection = filterSection;\n }\n\n return eventParams;\n};\n\nexport const getChosenCategories = (\n filterValues: FiltersValues,\n labelLookup: Record<string, string>\n): ChosenCategoryType[] => {\n const nonEmptyFilterKeys = Object.keys(filterValues).filter(key => filterValues[key].length > 0);\n\n return nonEmptyFilterKeys.map(key => ({\n key,\n label: labelLookup[key],\n values: filterValues[key].map(value => value.label),\n }));\n};\n","/* eslint-disable no-redeclare */\nimport { ChartType } from '@ecosystem/newron-client-lib';\nimport {\n BasicTrackingFn,\n DataVizType,\n EventElementCategory,\n EventElementType,\n EventName,\n EventParams,\n Params,\n SettingsProvider,\n TrackingElementType,\n} from '../types';\n\nexport const mapDataVizForChartType = (dataVizValue: string | undefined): ChartType | undefined => {\n switch (dataVizValue) {\n case DataVizType.lineChart:\n return 'Line Chart';\n case DataVizType.chart:\n case DataVizType.verticalBarChart:\n case DataVizType.horizontalBarChart:\n case DataVizType.stackedBarChart:\n return 'Bar Chart';\n case DataVizType.bubbleChart:\n return 'Bubble Chart';\n case DataVizType.table:\n return 'Table';\n default:\n return undefined;\n }\n};\n\nexport const mapDataVizForElementType = (dataVizValue: string | undefined): TrackingElementType => {\n switch (dataVizValue) {\n case DataVizType.table:\n return TrackingElementType.Table;\n default:\n return TrackingElementType.Chart;\n }\n};\n\nexport const addChartTypeToEventParams = (eventParams: EventParams, componentSettings: Params) => {\n if (!componentSettings?.dataViz || eventParams.chartType) {\n return eventParams;\n }\n return {\n ...eventParams,\n chartType: mapDataVizForChartType(componentSettings?.dataViz[0] as DataVizType),\n };\n};\n\nexport const trackPageElementClicked = (\n trackFn: BasicTrackingFn | undefined,\n elementName: string,\n extraParams?: {\n elementType?: EventElementType;\n elementCategory?: EventElementCategory;\n [key: string]: string | string[] | undefined;\n }\n): void => {\n extraParams = extraParams || {\n elementType: EventElementType.Button,\n elementCategory: EventElementCategory.CustomFilter,\n };\n\n const { elementType, elementCategory, ...rest } = extraParams;\n\n trackFn &&\n trackFn(EventName.PageElementClicked, {\n elementName,\n elementCategory: elementCategory || EventElementCategory.CustomFilter,\n elementType: elementType || EventElementType.Button,\n ...rest,\n });\n};\n\nexport const getMetadataTrackingParams = (\n metadata: SettingsProvider['metadata'],\n eventParams: EventParams\n): EventParams => {\n if (!metadata?.tracking) {\n return eventParams;\n }\n\n const { paramsMap } = metadata.tracking;\n\n if (!paramsMap) {\n return eventParams;\n }\n Object.keys(paramsMap).forEach(key => {\n const trackingPropertyName = paramsMap[key];\n if (!eventParams[key]) {\n return;\n }\n eventParams[trackingPropertyName] = eventParams[key];\n delete eventParams[key];\n });\n return eventParams;\n};\n\nexport enum TrackGroupTypes {\n AddGroup = 'Add to group',\n RenameGroup = 'Rename Group',\n DeleteGroup = 'Delete Group',\n AddItem = 'Add more items to group',\n RemoveItem = 'Remove item from group',\n}\n\nexport enum TrackTableNavTypes {\n LoadMore = 'Load more',\n Quickview = 'Quick view',\n SelectAll = 'Select All',\n}\n\nexport enum TrackAnalyseTypes {\n top5 = 'Analyse Top 5',\n top10 = 'Analyse Top 10',\n selected = 'Analyse',\n}\n\nexport enum TrackSortTypes {\n sort = 'Table Sort',\n}\n\nexport enum TrackSelectionTypes {\n selectAll = 'Select All',\n}\n\nexport type TableElementTrackTypes =\n | TrackGroupTypes\n | TrackAnalyseTypes\n | TrackSortTypes\n | TrackTableNavTypes\n | TrackSelectionTypes;\n\nexport function trackTableClicked(\n trackFn: BasicTrackingFn | undefined,\n elementName: TrackGroupTypes.AddGroup | TrackGroupTypes.AddItem,\n elementType: EventElementType.Group,\n extraParams: { optionChosen: string[]; numberOfProducts: string }\n): void;\n\nexport function trackTableClicked(\n trackFn: BasicTrackingFn | undefined,\n elementName: TrackAnalyseTypes,\n elementType: EventElementType.Link,\n extraParams: {\n optionChosen: string[];\n numberOfProducts: string;\n selectedGroups: string[];\n numberOfGroups: string;\n includesGroups: string;\n }\n): void;\n\nexport function trackTableClicked(\n trackFn: BasicTrackingFn | undefined,\n elementName: TrackSortTypes.sort,\n elementType: EventElementType.Sort,\n extraParams: { optionChosen: string; column: string }\n): void;\n\nexport function trackTableClicked(\n trackFn: BasicTrackingFn | undefined,\n elementName: TrackGroupTypes.RenameGroup,\n elementType: EventElementType.Group\n): void;\nexport function trackTableClicked(\n trackFn: BasicTrackingFn | undefined,\n elementName: TrackGroupTypes.DeleteGroup,\n elementType: EventElementType.Group\n): void;\nexport function trackTableClicked(\n trackFn: BasicTrackingFn | undefined,\n elementName: TrackGroupTypes.RemoveItem,\n elementType: EventElementType.Group\n): void;\nexport function trackTableClicked(\n trackFn: BasicTrackingFn | undefined,\n elementName: TrackTableNavTypes.LoadMore,\n elementType: EventElementType.Link\n): void;\nexport function trackTableClicked(\n trackFn: BasicTrackingFn | undefined,\n elementName: TrackTableNavTypes.Quickview,\n elementType: EventElementType.Overlay,\n extraParams: { optionChosen: string[] }\n): void;\n\nexport function trackTableClicked(\n trackFn: BasicTrackingFn | undefined,\n elementName: TrackSelectionTypes.selectAll,\n elementType: EventElementType.CheckBox,\n extraParams: { numberOfProducts: string }\n): void;\n\nexport function trackTableClicked(\n trackFn: BasicTrackingFn | undefined,\n elementName: TableElementTrackTypes,\n elementType: EventElementType,\n extraParams: EventParams = {}\n): void {\n trackFn &&\n trackFn(EventName.TableClicked, {\n elementName,\n elementType,\n ...extraParams,\n });\n}\n","export type ChosenCategoryType = {\n label: string;\n key: string;\n values: string[];\n};\n\nexport type EventParamType = Record<string, string | string[]>;\n\nexport enum DataAvailability {\n No = 'No',\n Full = 'Full',\n Partial = 'Partial',\n}\n\nimport { useAnalytics } from '@ecosystem/newron-client-lib';\nimport { EventName, EventParams, PropositionSection, TrackingMeta } from '../types';\n\nexport interface InternalEventParams extends EventParams {\n section: PropositionSection;\n subsection: string;\n pageName: string;\n locationId: string[];\n itemGroup: string[];\n periodicity: string;\n cells: string[];\n numberOfCells: string;\n cellAggregation: 'multicell' | 'singlecell';\n locationIdAggregation: 'many' | 'single';\n itemGroupAggregation: 'many' | 'single';\n proposition: string;\n}\n\nexport interface AnalyticsEvent {\n eventName: string;\n params: InternalEventParams;\n}\n\nexport type MappingFn = (eventName: EventName | string, meta?: TrackingMeta) => InternalEventParams;\nexport type PlatformTrackingFunction = ReturnType<typeof useAnalytics>['track'];\n","import { useCallback } from 'react';\nimport {\n DataVizType,\n DynamicTitle,\n EventName,\n FilterSections,\n Filters,\n MenuItemOption,\n Params,\n SelectionMenu,\n SettingDefinition,\n SettingsValues,\n TitleSelector,\n SettingsProvider,\n Context,\n MenuItemSubMenu,\n} from '../types';\nimport { ContextManager } from '../context/manager';\nimport { EventParams } from '../types/analytics/index';\nimport { DataStore } from '../data/store';\nimport { getChosenCategories, getLabelLookups } from '../filters/filterTracking.hook';\nimport { createLowerCamelCase } from '../common/util';\nimport { mapDataVizForElementType, mapDataVizForChartType } from './utils';\nimport { ChosenCategoryType, DataAvailability, EventParamType } from './types';\nimport { useAnalyticsContext } from './analytics.provider';\n\nexport const getTopSelectors = (settingsValues: SettingsValues, definitions: SettingDefinition[]) => {\n return Object.keys(settingsValues).reduce((acc, curr) => {\n const definition = definitions.find(({ name }) => name === curr);\n // track property if the tracking property name is defined\n const propertyTrackingName = definition?.metadata?.tracking?.propertyName;\n\n if (definition && propertyTrackingName) {\n const { includePropertyValue = false } = definition.metadata.tracking;\n const params = {\n ...acc,\n [propertyTrackingName]: settingsValues[curr][0]?.label,\n };\n if (includePropertyValue) {\n params[`${propertyTrackingName}Values`] = settingsValues[curr][0]?.value;\n }\n return params;\n }\n return acc;\n }, {});\n};\n\nexport const getAppliedFilters = (filters: Filters | undefined) => {\n if (!filters) {\n return { globalFilterApplied: 'No' };\n }\n const { sections, values } = filters;\n if (!Object.keys(values).length || !sections || sections.length === 0) {\n return { globalFilterApplied: 'No' };\n }\n const marketFilters = sections?.find(section => section.label === 'Market');\n const { labelLookup } = getLabelLookups(sections);\n const chosenCategories = getChosenCategories(values, labelLookup);\n\n const filterEventParams: EventParamType = {\n globalFilterApplied: 'Yes',\n };\n\n applyCategoryCombinationFilter(chosenCategories, filterEventParams);\n applyMarketFilters(marketFilters, chosenCategories, filterEventParams);\n\n return filterEventParams;\n};\n\nconst applyCategoryCombinationFilter = (chosenCategories: ChosenCategoryType[], filterEventParams: EventParamType) => {\n const categoryCombination = chosenCategories.map(category => category.label);\n\n filterEventParams['categoryCombination'] = categoryCombination;\n};\n\nconst applyMarketFilters = (\n marketFilters: FilterSections,\n chosenCategories: ChosenCategoryType[],\n filterEventParams: EventParamType\n) => {\n if (!marketFilters) {\n return;\n }\n\n chosenCategories.forEach(category => {\n const { label: categoryChosen, values: optionChosen } = category;\n marketFilters.ungrouped.definitions.forEach(definition => {\n if (definition.label === categoryChosen) {\n filterEventParams[`${createLowerCamelCase(categoryChosen)}Applied`] = optionChosen;\n }\n });\n });\n};\n\nexport const handlePageElementViewed = (\n context: Context,\n data: DataStore,\n componentSettings: Params,\n metadata: SettingsProvider['metadata']\n) => {\n const dataViz = componentSettings?.dataViz?.[0] as DataVizType;\n\n const eventParams: EventParams = {};\n\n const chartType = mapDataVizForChartType(dataViz);\n if (chartType) {\n eventParams.chartType = chartType;\n eventParams.elementType = mapDataVizForElementType(dataViz);\n }\n\n const topSelectors = getTopSelectors(context.settings.values, context.settings.definitions);\n const appliedFilters = getAppliedFilters(context.filters);\n\n const metadataTrackingParams = getMetadataTrackingParams(metadata, componentSettings, data);\n\n const dataAvailability = getDataAvailability(data);\n\n const params = {\n ...dataAvailability,\n ...topSelectors,\n ...appliedFilters,\n ...eventParams,\n ...metadataTrackingParams,\n };\n\n return params;\n};\n\nexport const useTrackPageElementViewed = (title: string | DynamicTitle) => {\n const context = ContextManager.getInstance().get();\n const { trackPageEvent } = useAnalyticsContext();\n\n const trackPageElementViewed = useCallback(\n (data: DataStore, componentSettings: Params, metadata: SettingsProvider['metadata']) => {\n const params = handlePageElementViewed(context, data, componentSettings, metadata);\n const eventParams = getComponentSettingsTrackingNames(componentSettings, title, params);\n trackPageEvent?.(EventName.PageElementViewed, eventParams);\n },\n [context, trackPageEvent, title]\n );\n\n return { trackPageElementViewed };\n};\n\nexport const getComponentSettingsTrackingNames = (\n componentSettings: Params,\n title: string | DynamicTitle,\n eventParams: EventParams\n): EventParams => {\n if (!title || typeof title === 'string') {\n return eventParams;\n }\n Object.keys(componentSettings).forEach(componentSettingKey => {\n const dynamicTitleMenuItems = title.filter(titleItem => typeof titleItem !== 'string');\n\n dynamicTitleMenuItems.forEach((title: TitleSelector) => {\n const { menu } = title;\n const trackingFilterName = menu.metadata?.tracking?.filterName;\n if (menu.paramName === componentSettingKey && trackingFilterName && !eventParams[trackingFilterName]) {\n //find corresponding component settings key from menu items\n const labels = getComponentSettingsValuesLabels(componentSettings, componentSettingKey, menu);\n eventParams = {\n ...eventParams,\n [trackingFilterName]: labels.join(', '),\n };\n }\n });\n });\n return eventParams;\n};\n\nconst getComponentSettingsValuesLabels = (\n componentSettings: Params,\n componentSettingsKey: string,\n menu: SelectionMenu\n): string[] => {\n const labels = componentSettings[componentSettingsKey].map(setting => {\n let menuItem;\n menu.items.forEach((item: MenuItemOption | MenuItemSubMenu) => {\n if (!item) {\n return;\n }\n if (item.type === 'MenuSubMenu') {\n item = item as MenuItemSubMenu;\n item.items.forEach((item: MenuItemOption) => {\n if (item.value === setting) {\n menuItem = item;\n }\n });\n } else if (item.value === setting) {\n menuItem = item;\n }\n });\n return isBrandSegment(setting) ? 'Brand' : menuItem?.label || setting;\n });\n\n return labels;\n};\n\nconst isBrandSegment = (segment: string) => segment === 'brand_name';\n\nexport const getMetadataTrackingParams = (\n metadata: SettingsProvider['metadata'],\n componentSettings: Params,\n data: DataStore\n) => {\n const trackingMetadata = metadata?.tracking;\n if (!trackingMetadata) {\n return {};\n }\n // set elementType, elementName, chartType only if they have a value\n const { paramsMap = [], elementType, elementName, chartType } = trackingMetadata;\n\n const trackingParams = {\n ...(elementType && { elementType }),\n ...(elementName && { elementName }),\n ...(chartType && { chartType }),\n };\n\n // paramMap example: {plColumns: \"elementKpi\", plFeatures:\"features\"}\n Object.keys(paramsMap).forEach(key => {\n const trackingPropertyName = paramsMap[key];\n trackingParams[trackingPropertyName] = componentSettings[key]?.map(\n (value: string) => data.getDataColumn(value)?.label\n );\n });\n\n return { ...trackingParams };\n};\n\nexport const getDataAvailability = (data: DataStore) => {\n if (!data.hasDataResultSetsValues()) {\n return getDataAvailabilityParams(DataAvailability.No);\n }\n\n const hasData = data.hasDataInSomeGroupedSets();\n const dataHaveWarnings = data.hasWarnings();\n\n if (hasData && dataHaveWarnings) {\n return getDataAvailabilityParams(DataAvailability.Partial);\n }\n\n return getDataAvailabilityParams(DataAvailability.Full);\n};\n\nconst getDataAvailabilityParams = (dataAvailability: DataAvailability) => ({ dataAvailability });\n","import React from 'react';\n\ntype Props = {\n height: number | string;\n};\nfunction EmptyState({ height }: Props) {\n return (\n <div\n className=\"m-auto w-100 text-lighter flex-column flex-grow flex items-center justify-center bg-lightest\"\n style={{ height }}\n >\n <div>No data to display with selected options.</div>\n <div>Change filters or set different time frame</div>\n </div>\n );\n}\n\nEmptyState.defaultProps = {\n height: 200,\n};\n\nexport { EmptyState };\n","import React from 'react';\nimport { feedbackV2 } from '@ecosystem/newron-design-system';\nimport { Notification } from '@ecosystem/newron-design-system/build/exports/overlays';\nimport { DataWarning } from '../../types';\nimport { capitalize } from '../../common/util';\n\nconst { Alert } = feedbackV2;\n\ntype WarningSettingsProps = {\n appendKpis?: boolean;\n};\n\ntype WarningsContainerProps = {\n className?: string;\n style?: { [k: string]: any };\n warnings: DataWarning[];\n settings?: WarningSettingsProps;\n};\n\nexport const WarningsDisplay: React.FC<WarningsContainerProps> = ({ warnings, className, style, settings }) => {\n if (!warnings?.length) {\n return null;\n }\n const composedWarnings = composeWarningMessage(warnings, settings);\n return (\n <>\n {composedWarnings.map(({ message, level }, index) => (\n <div className={className} style={style} key={index}>\n <Alert key={index} title={message} type={level as Notification} />\n </div>\n ))}\n </>\n );\n};\n\nconst composeWarningMessage = (warnings: DataWarning[], settings: WarningSettingsProps) => {\n return warnings.map(([message, { kpis, level }]) => {\n if (settings?.appendKpis) {\n const kpisLabel = kpis.map(k => k.label).join(', ');\n return {\n message: `${kpisLabel} ${message}`,\n level,\n };\n }\n\n return {\n message: capitalize(message),\n level,\n };\n });\n};\n","import { WarningsDisplay } from '../../design/warning/warningsDisplay';\nimport React from 'react';\n\nexport const NoDataInfo = () => {\n return (\n <WarningsDisplay\n warnings={[\n [\n 'No data is available due to current filter selection. Change focus brand or brand filters',\n { level: 'info' },\n ],\n ]}\n />\n );\n};\n","\"use client\";\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n\n// src/InView.tsx\nimport * as React from \"react\";\n\n// src/observe.ts\nvar observerMap = /* @__PURE__ */ new Map();\nvar RootIds = /* @__PURE__ */ new WeakMap();\nvar rootId = 0;\nvar unsupportedValue = void 0;\nfunction defaultFallbackInView(inView) {\n unsupportedValue = inView;\n}\nfunction getRootId(root) {\n if (!root) return \"0\";\n if (RootIds.has(root)) return RootIds.get(root);\n rootId += 1;\n RootIds.set(root, rootId.toString());\n return RootIds.get(root);\n}\nfunction optionsToId(options) {\n return Object.keys(options).sort().filter(\n (key) => options[key] !== void 0\n ).map((key) => {\n return `${key}_${key === \"root\" ? getRootId(options.root) : options[key]}`;\n }).toString();\n}\nfunction createObserver(options) {\n const id = optionsToId(options);\n let instance = observerMap.get(id);\n if (!instance) {\n const elements = /* @__PURE__ */ new Map();\n let thresholds;\n const observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n var _a;\n const inView = entry.isIntersecting && thresholds.some((threshold) => entry.intersectionRatio >= threshold);\n if (options.trackVisibility && typeof entry.isVisible === \"undefined\") {\n entry.isVisible = inView;\n }\n (_a = elements.get(entry.target)) == null ? void 0 : _a.forEach((callback) => {\n callback(inView, entry);\n });\n });\n }, options);\n thresholds = observer.thresholds || (Array.isArray(options.threshold) ? options.threshold : [options.threshold || 0]);\n instance = {\n id,\n observer,\n elements\n };\n observerMap.set(id, instance);\n }\n return instance;\n}\nfunction observe(element, callback, options = {}, fallbackInView = unsupportedValue) {\n if (typeof window.IntersectionObserver === \"undefined\" && fallbackInView !== void 0) {\n const bounds = element.getBoundingClientRect();\n callback(fallbackInView, {\n isIntersecting: fallbackInView,\n target: element,\n intersectionRatio: typeof options.threshold === \"number\" ? options.threshold : 0,\n time: 0,\n boundingClientRect: bounds,\n intersectionRect: bounds,\n rootBounds: bounds\n });\n return () => {\n };\n }\n const { id, observer, elements } = createObserver(options);\n const callbacks = elements.get(element) || [];\n if (!elements.has(element)) {\n elements.set(element, callbacks);\n }\n callbacks.push(callback);\n observer.observe(element);\n return function unobserve() {\n callbacks.splice(callbacks.indexOf(callback), 1);\n if (callbacks.length === 0) {\n elements.delete(element);\n observer.unobserve(element);\n }\n if (elements.size === 0) {\n observer.disconnect();\n observerMap.delete(id);\n }\n };\n}\n\n// src/InView.tsx\nfunction isPlainChildren(props) {\n return typeof props.children !== \"function\";\n}\nvar InView = class extends React.Component {\n constructor(props) {\n super(props);\n __publicField(this, \"node\", null);\n __publicField(this, \"_unobserveCb\", null);\n __publicField(this, \"handleNode\", (node) => {\n if (this.node) {\n this.unobserve();\n if (!node && !this.props.triggerOnce && !this.props.skip) {\n this.setState({ inView: !!this.props.initialInView, entry: void 0 });\n }\n }\n this.node = node ? node : null;\n this.observeNode();\n });\n __publicField(this, \"handleChange\", (inView, entry) => {\n if (inView && this.props.triggerOnce) {\n this.unobserve();\n }\n if (!isPlainChildren(this.props)) {\n this.setState({ inView, entry });\n }\n if (this.props.onChange) {\n this.props.onChange(inView, entry);\n }\n });\n this.state = {\n inView: !!props.initialInView,\n entry: void 0\n };\n }\n componentDidMount() {\n this.unobserve();\n this.observeNode();\n }\n componentDidUpdate(prevProps) {\n if (prevProps.rootMargin !== this.props.rootMargin || prevProps.root !== this.props.root || prevProps.threshold !== this.props.threshold || prevProps.skip !== this.props.skip || prevProps.trackVisibility !== this.props.trackVisibility || prevProps.delay !== this.props.delay) {\n this.unobserve();\n this.observeNode();\n }\n }\n componentWillUnmount() {\n this.unobserve();\n }\n observeNode() {\n if (!this.node || this.props.skip) return;\n const {\n threshold,\n root,\n rootMargin,\n trackVisibility,\n delay,\n fallbackInView\n } = this.props;\n this._unobserveCb = observe(\n this.node,\n this.handleChange,\n {\n threshold,\n root,\n rootMargin,\n // @ts-ignore\n trackVisibility,\n // @ts-ignore\n delay\n },\n fallbackInView\n );\n }\n unobserve() {\n if (this._unobserveCb) {\n this._unobserveCb();\n this._unobserveCb = null;\n }\n }\n render() {\n const { children } = this.props;\n if (typeof children === \"function\") {\n const { inView, entry } = this.state;\n return children({ inView, entry, ref: this.handleNode });\n }\n const {\n as,\n triggerOnce,\n threshold,\n root,\n rootMargin,\n onChange,\n skip,\n trackVisibility,\n delay,\n initialInView,\n fallbackInView,\n ...props\n } = this.props;\n return React.createElement(\n as || \"div\",\n { ref: this.handleNode, ...props },\n children\n );\n }\n};\n\n// src/useInView.tsx\nimport * as React2 from \"react\";\nfunction useInView({\n threshold,\n delay,\n trackVisibility,\n rootMargin,\n root,\n triggerOnce,\n skip,\n initialInView,\n fallbackInView,\n onChange\n} = {}) {\n var _a;\n const [ref, setRef] = React2.useState(null);\n const callback = React2.useRef(onChange);\n const [state, setState] = React2.useState({\n inView: !!initialInView,\n entry: void 0\n });\n callback.current = onChange;\n React2.useEffect(\n () => {\n if (skip || !ref) return;\n let unobserve;\n unobserve = observe(\n ref,\n (inView, entry) => {\n setState({\n inView,\n entry\n });\n if (callback.current) callback.current(inView, entry);\n if (entry.isIntersecting && triggerOnce && unobserve) {\n unobserve();\n unobserve = void 0;\n }\n },\n {\n root,\n rootMargin,\n threshold,\n // @ts-ignore\n trackVisibility,\n // @ts-ignore\n delay\n },\n fallbackInView\n );\n return () => {\n if (unobserve) {\n unobserve();\n }\n };\n },\n // We break the rule here, because we aren't including the actual `threshold` variable\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n // If the threshold is an array, convert it to a string, so it won't change between renders.\n Array.isArray(threshold) ? threshold.toString() : threshold,\n ref,\n root,\n rootMargin,\n triggerOnce,\n skip,\n trackVisibility,\n fallbackInView,\n delay\n ]\n );\n const entryTarget = (_a = state.entry) == null ? void 0 : _a.target;\n const previousEntryTarget = React2.useRef(void 0);\n if (!ref && entryTarget && !triggerOnce && !skip && previousEntryTarget.current !== entryTarget) {\n previousEntryTarget.current = entryTarget;\n setState({\n inView: !!initialInView,\n entry: void 0\n });\n }\n const result = [setRef, state.inView, state.entry];\n result.ref = result[0];\n result.inView = result[1];\n result.entry = result[2];\n return result;\n}\nexport {\n InView,\n defaultFallbackInView,\n observe,\n useInView\n};\n//# sourceMappingURL=index.mjs.map","import React, { ReactNode, useState, useCallback, useRef, useEffect } from 'react';\nimport { actions as libActions } from '@ecosystem/newron-design-system';\nimport { BasicTrackingFn, Component, CoreContents, Params, SettingsProvider } from '../types';\nimport { useUiAction } from '../ui.actions';\nimport { DynamicTitleElement } from '../common/dynamic.title/title';\nimport { useTrackPageElementViewed } from '../analytics/trackPageElementViewed.hook';\nimport { useCorePageState } from '../page/provider';\n\nimport { EmptyState } from '../common/no-data-warning/empty-state';\nimport { NoDataInfo } from '../common/no-data-warning/no-data-info';\nimport { useDataState } from '../data/provider';\nimport { useInView } from '../tools/inView.hook';\nimport { deepEqual } from '../tools/object';\n\nconst IN_VIEW_DELAY = 1000;\n\ntype Props = {\n showNoDataInfo: boolean;\n children: ReactNode;\n component: Component;\n settings: Params;\n updateComponentSettings: (updates: Params) => void;\n trackEvent: BasicTrackingFn;\n metadata?: SettingsProvider['metadata'];\n paramsForData: Params;\n};\nfunction ComponentCard({\n children,\n component,\n settings,\n updateComponentSettings,\n metadata,\n showNoDataInfo,\n paramsForData,\n}: Props) {\n const [expanded, setExpanded] = useState<boolean>(true);\n const { data, isDataLoading } = useDataState();\n const threshold = component.contents?.fixed?.[0]?.type === CoreContents.leaderBoard ? 0 : 0.1;\n const { ref, inView } = useInView({ threshold, delay: IN_VIEW_DELAY });\n const currentView = settings?.dataViz?.[0] ?? metadata?.tracking?.elementName;\n const rememberedParams = useRef<Params>(null);\n const rememberedSettings = useRef<Params>(null);\n const rememberedView = useRef<string>(null);\n // sending in the title to get the featureGroups and comparisonPeriods for PageElementViewed\n const { trackPageElementViewed } = useTrackPageElementViewed(component?.heading?.title);\n const { someComponentsHaveData, dsl, dslLoading, contextLoading } = useCorePageState();\n\n const dslOrContextLoading = dslLoading || contextLoading;\n\n const isLoading = isDataLoading || dslOrContextLoading;\n const { perform } = useUiAction();\n\n const { name, heading, callsToAction = [], asCard = true, layout = 'vertical-list' } = component;\n\n const { Button, IconButton } = libActions;\n // flex grid needs figuring out - must use grid however to prevent component wider than page\n const containerCss =\n layout === 'vertical-list'\n ? 'grid grid-cols-1 gap-5'\n : layout === 'horizontal-list'\n ? 'grid grid-rows-1 grid-flow-row xl:grid-flow-col auto-cols-fr gap-4'\n : 'grid grid-flow-row grid-flow-col auto-rows-min auto-cols-fr gap-4';\n\n const hasHeading = heading?.title?.length > 0;\n\n const renderNoDataInfo = useCallback(() => {\n switch (component.noDataInfoType) {\n case 'ignore':\n return null;\n case 'info-alert':\n return <NoDataInfo />;\n case 'default':\n default:\n return <EmptyState />;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const showComponentCard = dsl?.settings?.enablePageLevelNoDataError ? someComponentsHaveData : true;\n\n const hasParamsChanged = !deepEqual(paramsForData, rememberedParams.current);\n const hasSettingsChanged = !deepEqual(settings, rememberedSettings.current);\n\n useEffect(() => {\n if (paramsForData) {\n rememberedParams.current = paramsForData;\n }\n }, [paramsForData]);\n\n useEffect(() => {\n if (settings) {\n rememberedSettings.current = settings;\n }\n }, [settings]);\n\n useEffect(() => {\n /**\n * if metadata.tracking(in bff settingsProvider for spesific view) is not set,\n * metadata tracking is not set for core views because elementType and elementName dynamically changes by dataViz\n * or updateOnContextChange is true, reset rememberedView\n **/\n if (hasParamsChanged) {\n rememberedView.current = 'willResetView';\n return;\n }\n const shouldResetView =\n (!metadata?.tracking || metadata?.tracking?.updateOnContextChange) && (isDataLoading || hasSettingsChanged);\n\n if (shouldResetView && rememberedView.current !== null) {\n rememberedView.current = null;\n }\n }, [metadata?.tracking, isDataLoading, hasParamsChanged, hasSettingsChanged]);\n\n useEffect(() => {\n const hasUpdatedView = currentView && rememberedView.current !== currentView;\n const isVisibleInDom = !isLoading && inView;\n const hasData = !!data;\n const hasSettings = !!settings;\n\n const shouldEventTrigger = hasUpdatedView && isVisibleInDom && hasData && hasSettings;\n\n if (shouldEventTrigger && rememberedView.current !== 'willResetView') {\n trackPageElementViewed(data, settings, metadata);\n rememberedView.current = currentView;\n }\n\n /* TODO: add more properties here depending on event trigger frequency */\n }, [isLoading, rememberedView, currentView, inView, settings, data, metadata, trackPageElementViewed]);\n\n return (\n <div\n className={`component-card h-full w-full max-w-full flex flex-column relative self-stretch gap-2 ${\n asCard ? 'bg-white rounded-2 p-5' : ''\n }`}\n ref={ref}\n >\n {showComponentCard && hasHeading && (\n <div className=\"flex items-center h-10\">\n <div className=\"z-60\">\n {heading.title && expanded && (\n <DynamicTitleElement\n title={heading.title}\n settings={settings}\n onChange={updates => {\n updateComponentSettings(updates);\n }}\n />\n )}\n {heading.subTitle && <span className=\"block text-xs text-lighter\">{heading.subTitle}</span>}\n </div>\n <div className=\"flex-grow flex items-center justify-end\">\n {expanded && <div id={`${name}_header_actions`} className=\"flex items-center justify-end w-full\" />}\n </div>\n {heading.isCollapsible && (\n <div className=\"self-start ml-4\">\n <IconButton onClick={() => setExpanded(!expanded)} size=\"lg\">\n {expanded ? <IconButton.icons.ChevronUp /> : <IconButton.icons.ChevronDown />}\n </IconButton>\n </div>\n )}\n </div>\n )}\n {expanded && (\n <>\n <div style={{ overflowX: 'clip' }} className=\"component-content grid flex-grow relative w-full max-w-full\">\n {showComponentCard && showNoDataInfo && <div id={`no_data_warning`}>{renderNoDataInfo()}</div>}\n <div className={`relative w-full max-w-full ${containerCss}`}>{children}</div>\n </div>\n {showComponentCard && callsToAction.length > 0 && (\n <div className=\"mt-4 flex justify-end\">\n {callsToAction.map((callToAction, idx) => (\n <Button\n mode={callToAction.isPrimary === false ? 'secondary' : 'primary'}\n onClick={() => perform(callToAction.action)}\n key={`cta_${idx}`}\n >\n <Button.Icon>\n <Button.Icon.icons.Analyse />\n </Button.Icon>\n {callToAction.label}\n </Button>\n ))}\n </div>\n )}\n <div id={`${name}_footer`} className={`sticky bottom-0 ${asCard ? 'rounded-bl-2 rounded-br-2' : ''}`} />\n </>\n )}\n </div>\n );\n}\nexport { ComponentCard };\n","import { useEffect, useState } from 'react';\nimport { useInView as useInViewObserver } from 'react-intersection-observer';\n\ntype Props = {\n /** Number between `0` and `1` indicating the percentage that should be visible before triggering. Can also be an `array` of numbers, to create multiple trigger points. */\n threshold?: number;\n /** Number in ms to recheck after the delay if the component is still inView, before returning the `inView` status */\n delay?: number;\n};\n\n/**\n * React Hooks make it easy to monitor the `inView` state of your components.\n * Call the `useInView` hook with the (optional) options:\n * threshold: to control how much of the component have to be in view\n * delay: to recheck after the delay if the component is still inView,\n * before returninf the `inView` status\n *\n * It will return an array containing a `ref` and the `inView` status.\n * Assign the `ref` to the DOM element you want to monitor, and the hook will report the status.\n */\nexport function useInView({ delay = 0, threshold = 0 }: Props): {\n ref: (node?: Element | null) => void;\n inView: boolean;\n} {\n const { ref, inView } = useInViewObserver({ threshold });\n const [inViewDelayFinished, setInViewDelayFinished] = useState(false);\n\n useEffect(() => {\n let inViewTimeout;\n if (inView) {\n clearTimeout(inViewTimeout);\n inViewTimeout = setTimeout(() => {\n setInViewDelayFinished(true);\n }, delay);\n }\n return () => {\n clearTimeout(inViewTimeout);\n };\n }, [inView, delay]);\n\n return { ref, inView: inView && inViewDelayFinished };\n}\n","import React, { createContext, ReactNode, useContext } from 'react';\nimport { Entity, SettingDefinition } from '../types';\nimport { ContextManager } from './manager';\n\nexport type ContextSetting = { definition: SettingDefinition; values: Entity[] };\n\ntype EditContext = {\n getContextSettings: (names: string[]) => Promise<Record<string, ContextSetting>>;\n};\n\nconst editContext = createContext<EditContext>({\n getContextSettings: () => Promise.resolve({}),\n});\n\ntype Props = {\n children: ReactNode;\n};\nfunction EditProvider({ children }: Props) {\n const getContextSettings = (names: string[]): Promise<Record<string, ContextSetting>> => {\n return ContextManager.getInstance().getSettings(names);\n };\n\n return (\n <editContext.Provider\n value={{\n getContextSettings: getContextSettings,\n }}\n >\n {children}\n </editContext.Provider>\n );\n}\n\nfunction useEditContextSettings() {\n const context = useContext(editContext);\n if (!context) {\n throw new Error('useEditContextSettings must be used within a provider');\n }\n return context;\n}\n\nexport { EditProvider, useEditContextSettings };\n","import React, { ReactNode } from 'react';\n\ntype Props = {\n label?: string;\n children: ReactNode;\n};\nfunction ContextSelectorMenu({ label, children }: Props) {\n return (\n <div className=\"absolute left-0 top-full mt-1 z-100\" style={{ minWidth: '100%' }}>\n <div className=\"bg-white rounded border border-light shadow-lg\">\n {label && <div className=\"text-xs font-bold px-3 py-1 border-b border-light\">{label}</div>}\n {children}\n </div>\n </div>\n );\n}\n\nexport { ContextSelectorMenu };\n","import React from 'react';\nimport { feedback, elements } from '@ecosystem/newron-design-system';\nimport { Entity } from '../../types';\n\ntype Props = {\n onItemClick: (entity: Entity) => void;\n options?: (Entity | string)[];\n value?: Entity[];\n isMulti?: boolean;\n};\nfunction SelectionList({ onItemClick, options, isMulti = false, value = [] }: Props) {\n const { DotsLoader } = feedback;\n\n if (!options) {\n return (\n <div className=\"h-40 flex flex-column items-center justify-center\">\n <DotsLoader compact />\n <span className=\"text-xs text-inactive mt-3\">Loading options...</span>\n </div>\n );\n }\n\n return (\n <div className=\"overflow-y-auto overscroll-contain\" style={{ maxHeight: '380px' }}>\n {options.map(opt =>\n typeof opt === 'string' ? (\n <span className=\"block text-sm text-lighter px-2 py-1 bg-medium font-bold\" key={opt}>\n {opt}\n </span>\n ) : (\n <MenuItem\n key={opt.value}\n onClick={() => onItemClick(opt)}\n canBeUnselected={isMulti}\n entity={opt}\n value={value}\n />\n )\n )}\n </div>\n );\n}\n\ntype ItemProps = {\n entity: Entity;\n canBeUnselected: boolean;\n value?: Entity[];\n onClick: () => void;\n};\nfunction MenuItem({ entity, canBeUnselected, onClick, value = [] }: ItemProps) {\n const isActive = value.find(ent => ent.value === entity.value) !== undefined;\n\n const { Icon } = elements;\n\n if (isActive && !canBeUnselected) {\n return (\n <div className=\"py-2 px-4 flex gap-x-2 items-center bg-light\">\n <div className=\"flex-grow\">\n <span className=\"nowrap\">{entity.label}</span>\n </div>\n <Icon>\n <Icon.icons.Check />\n </Icon>\n </div>\n );\n }\n\n return (\n <button\n onClick={onClick}\n className=\"w-full px-4 flex items-center py-2 text-left transition-colors hover:bg-brand-light\"\n >\n <span className=\"flex-grow\">\n <span className=\"nowrap\">{entity.label}</span>\n </span>\n <span className={`${isActive ? 'visible' : 'hidden'}`}>\n <Icon>\n <Icon.icons.Check />\n </Icon>\n </span>\n </button>\n );\n}\n\nexport { SelectionList };\n","import React, { useEffect, useState } from 'react';\nimport { Entity } from '../../types';\nimport { useEditContextSettings } from '../edit.provider';\nimport { ContextSettingSelectorProps } from '../types';\nimport { ContextSelectorMenu } from './menu';\nimport { SelectionList } from './selection.list';\n\nfunction MultiSelect({ definition, values, onChange, onClose }: ContextSettingSelectorProps) {\n const [myOptions, setMyOptions] = useState<(string | Entity)[]>();\n const {\n name,\n selection: { options, optionsUrl },\n } = definition;\n const { getContextSettings } = useEditContextSettings();\n\n /* eslint-disable react-hooks/exhaustive-deps */\n useEffect(() => {\n const fetch = async () => {\n const settings = await getContextSettings([name]);\n const {\n definition: {\n selection: { options },\n },\n } = settings[name];\n if (options) {\n setMyOptions(options);\n }\n };\n\n if (!options && optionsUrl) {\n fetch();\n } else {\n setMyOptions(options);\n }\n }, [options, optionsUrl]);\n\n const handleItemSelect = (value: Entity) => {\n onChange({\n [name]: [value],\n });\n onClose();\n };\n\n return (\n <ContextSelectorMenu>\n <SelectionList options={myOptions} value={values} onItemClick={handleItemSelect} />\n </ContextSelectorMenu>\n );\n}\n\nexport { MultiSelect };\n","import React from 'react';\nimport { inputs } from '@ecosystem/newron-design-system';\nimport { ContextSettingSelectorProps } from '../types';\nimport { Entity } from '../../types';\nimport { ContextSelectorMenu } from './menu';\n\nfunction RadioGroupSelector({ definition, values, onChange, onClose }: ContextSettingSelectorProps) {\n const {\n name,\n selection: { options },\n } = definition;\n if (!options) {\n return <span className=\"py-1 text-ui-red\">!!No configured options!!</span>;\n }\n\n const radioOptions: Entity[] = options.filter(opt => typeof opt !== 'string').map(opt => opt as Entity);\n\n const handleChange = (value: string) => {\n const option = radioOptions.find(opt => opt.value === value);\n if (option) {\n onChange({\n [name]: [option],\n });\n }\n onClose();\n };\n\n const { RadioButtons } = inputs;\n\n return (\n <ContextSelectorMenu>\n <RadioButtons orientation={'horizontal'} onChange={handleChange} value={values[0].value} options={radioOptions} />\n </ContextSelectorMenu>\n );\n}\n\nexport { RadioGroupSelector };\n","import React, { useEffect, useState } from 'react';\nimport { Entity } from '../../types';\nimport { useEditContextSettings } from '../edit.provider';\nimport { ContextSettingSelectorProps } from '../types';\nimport { ContextSelectorMenu } from './menu';\nimport { SelectionList } from './selection.list';\n\nfunction SingleSelect({ definition, values, onChange, onClose }: ContextSettingSelectorProps) {\n const [myOptions, setMyOptions] = useState<(string | Entity)[]>();\n const {\n name,\n selection: { options, optionsUrl },\n } = definition;\n const { getContextSettings } = useEditContextSettings();\n\n /* eslint-disable react-hooks/exhaustive-deps */\n useEffect(() => {\n const fetch = async () => {\n const settings = await getContextSettings([name]);\n const {\n definition: {\n selection: { options },\n },\n } = settings[name];\n if (options) {\n setMyOptions(options);\n }\n };\n\n if (!options && optionsUrl) {\n fetch();\n } else {\n setMyOptions(options);\n }\n }, [options, optionsUrl]);\n\n const handleItemSelect = (value: Entity) => {\n onChange({\n [name]: [value],\n });\n onClose();\n };\n\n return (\n <ContextSelectorMenu>\n <SelectionList options={myOptions} value={values} onItemClick={handleItemSelect} />\n </ContextSelectorMenu>\n );\n}\n\nexport { SingleSelect };\n","import React from 'react';\nimport { ContextSettingSelectorProps } from '../types';\nimport { ContextSelectorMenu } from './menu';\n\nfunction UnknownSelector({ definition }: ContextSettingSelectorProps) {\n const {\n name,\n labels: { identifier },\n } = definition;\n return (\n <ContextSelectorMenu label={identifier}>\n <div className=\"px-6 text-ui-red py-4\">\n No selector registered for <span className=\"font-bold\">'{name}'</span>\n </div>\n </ContextSelectorMenu>\n );\n}\n\nexport { UnknownSelector };\n","import React from 'react';\nimport { DataContentProps } from '../content/types';\nimport { Loading } from '../design/loading/Loading';\n\nfunction DummyContent({ data, isLoading }: DataContentProps) {\n let groups = 0;\n let rows = 0;\n if (data) {\n const groupedSets = data.getGroupedSets();\n groups = groupedSets.length;\n groupedSets.forEach(set => {\n rows += set.data.length;\n });\n }\n return (\n <div className=\"relative py-14 rounded bg-brand-lightest px-4\">\n <Loading isActive={isLoading} withIndicator />\n <p>\n I'm a core dummy data element with data containing {groups} result sets, with around {rows} items of data\n </p>\n </div>\n );\n}\n\nexport { DummyContent };\n","import React from 'react';\nimport { ContentProps } from '../newron-core';\n\nfunction DummyStaticContent(_: ContentProps) {\n return (\n <div className=\"py-14 rounded bg-blue-100 px-4 mb-4\">\n <p>I'm a core dummy static element</p>\n </div>\n );\n}\n\nexport { DummyStaticContent };\n","/*! @license DOMPurify 3.2.4 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.2.4/LICENSE */\n\nconst {\n entries,\n setPrototypeOf,\n isFrozen,\n getPrototypeOf,\n getOwnPropertyDescriptor\n} = Object;\nlet {\n freeze,\n seal,\n create\n} = Object; // eslint-disable-line import/no-mutable-exports\nlet {\n apply,\n construct\n} = typeof Reflect !== 'undefined' && Reflect;\nif (!freeze) {\n freeze = function freeze(x) {\n return x;\n };\n}\nif (!seal) {\n seal = function seal(x) {\n return x;\n };\n}\nif (!apply) {\n apply = function apply(fun, thisValue, args) {\n return fun.apply(thisValue, args);\n };\n}\nif (!construct) {\n construct = function construct(Func, args) {\n return new Func(...args);\n };\n}\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySplice = unapply(Array.prototype.splice);\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\nconst objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\nconst regExpTest = unapply(RegExp.prototype.test);\nconst typeErrorCreate = unconstruct(TypeError);\n/**\n * Creates a new function that calls the given function with a specified thisArg and arguments.\n *\n * @param func - The function to be wrapped and called.\n * @returns A new function that calls the given function with a specified thisArg and arguments.\n */\nfunction unapply(func) {\n return function (thisArg) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n return apply(func, thisArg, args);\n };\n}\n/**\n * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n *\n * @param func - The constructor function to be wrapped and called.\n * @returns A new function that constructs an instance of the given constructor function with the provided arguments.\n */\nfunction unconstruct(func) {\n return function () {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n return construct(func, args);\n };\n}\n/**\n * Add properties to a lookup table\n *\n * @param set - The set to which elements will be added.\n * @param array - The array containing elements to be added to the set.\n * @param transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n * @returns The modified set with added elements.\n */\nfunction addToSet(set, array) {\n let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase;\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n let l = array.length;\n while (l--) {\n let element = array[l];\n if (typeof element === 'string') {\n const lcElement = transformCaseFunc(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n element = lcElement;\n }\n }\n set[element] = true;\n }\n return set;\n}\n/**\n * Clean up an array to harden against CSPP\n *\n * @param array - The array to be cleaned.\n * @returns The cleaned version of the array\n */\nfunction cleanArray(array) {\n for (let index = 0; index < array.length; index++) {\n const isPropertyExist = objectHasOwnProperty(array, index);\n if (!isPropertyExist) {\n array[index] = null;\n }\n }\n return array;\n}\n/**\n * Shallow clone an object\n *\n * @param object - The object to be cloned.\n * @returns A new object that copies the original.\n */\nfunction clone(object) {\n const newObject = create(null);\n for (const [property, value] of entries(object)) {\n const isPropertyExist = objectHasOwnProperty(object, property);\n if (isPropertyExist) {\n if (Array.isArray(value)) {\n newObject[property] = cleanArray(value);\n } else if (value && typeof value === 'object' && value.constructor === Object) {\n newObject[property] = clone(value);\n } else {\n newObject[property] = value;\n }\n }\n }\n return newObject;\n}\n/**\n * This method automatically checks if the prop is function or getter and behaves accordingly.\n *\n * @param object - The object to look up the getter function in its prototype chain.\n * @param prop - The property name for which to find the getter function.\n * @returns The getter function found in the prototype chain or a fallback function.\n */\nfunction lookupGetter(object, prop) {\n while (object !== null) {\n const desc = getOwnPropertyDescriptor(object, prop);\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n object = getPrototypeOf(object);\n }\n function fallbackValue() {\n return null;\n }\n return fallbackValue;\n}\n\nconst html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'select', 'shadow', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']);\nconst svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);\nconst svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']);\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nconst svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);\nconst mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover', 'mprescripts']);\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nconst mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);\nconst text = freeze(['#text']);\n\nconst html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'pattern', 'placeholder', 'playsinline', 'popover', 'popovertarget', 'popovertargetaction', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'wrap', 'xmlns', 'slot']);\nconst svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'amplitude', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'exponent', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'intercept', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'slope', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'tablevalues', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\nconst mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\nconst xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\n// eslint-disable-next-line unicorn/better-regex\nconst MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\nconst ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\nconst TMPLIT_EXPR = seal(/\\$\\{[\\w\\W]*/gm); // eslint-disable-line unicorn/better-regex\nconst DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]+$/); // eslint-disable-line no-useless-escape\nconst ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nconst IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nconst IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nconst ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\nconst DOCTYPE_NAME = seal(/^html$/i);\nconst CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n\nvar EXPRESSIONS = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ARIA_ATTR: ARIA_ATTR,\n ATTR_WHITESPACE: ATTR_WHITESPACE,\n CUSTOM_ELEMENT: CUSTOM_ELEMENT,\n DATA_ATTR: DATA_ATTR,\n DOCTYPE_NAME: DOCTYPE_NAME,\n ERB_EXPR: ERB_EXPR,\n IS_ALLOWED_URI: IS_ALLOWED_URI,\n IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,\n MUSTACHE_EXPR: MUSTACHE_EXPR,\n TMPLIT_EXPR: TMPLIT_EXPR\n});\n\n/* eslint-disable @typescript-eslint/indent */\n// https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\nconst NODE_TYPE = {\n element: 1,\n attribute: 2,\n text: 3,\n cdataSection: 4,\n entityReference: 5,\n // Deprecated\n entityNode: 6,\n // Deprecated\n progressingInstruction: 7,\n comment: 8,\n document: 9,\n documentType: 10,\n documentFragment: 11,\n notation: 12 // Deprecated\n};\nconst getGlobal = function getGlobal() {\n return typeof window === 'undefined' ? null : window;\n};\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param trustedTypes The policy factory.\n * @param purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\nconst _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {\n if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n return null;\n }\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n let suffix = null;\n const ATTR_NAME = 'data-tt-policy-suffix';\n if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n suffix = purifyHostElement.getAttribute(ATTR_NAME);\n }\n const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML(html) {\n return html;\n },\n createScriptURL(scriptUrl) {\n return scriptUrl;\n }\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n return null;\n }\n};\nconst _createHooksMap = function _createHooksMap() {\n return {\n afterSanitizeAttributes: [],\n afterSanitizeElements: [],\n afterSanitizeShadowDOM: [],\n beforeSanitizeAttributes: [],\n beforeSanitizeElements: [],\n beforeSanitizeShadowDOM: [],\n uponSanitizeAttribute: [],\n uponSanitizeElement: [],\n uponSanitizeShadowNode: []\n };\n};\nfunction createDOMPurify() {\n let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n const DOMPurify = root => createDOMPurify(root);\n DOMPurify.version = '3.2.4';\n DOMPurify.removed = [];\n if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document || !window.Element) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n return DOMPurify;\n }\n let {\n document\n } = window;\n const originalDocument = document;\n const currentScript = originalDocument.currentScript;\n const {\n DocumentFragment,\n HTMLTemplateElement,\n Node,\n Element,\n NodeFilter,\n NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n HTMLFormElement,\n DOMParser,\n trustedTypes\n } = window;\n const ElementPrototype = Element.prototype;\n const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n const remove = lookupGetter(ElementPrototype, 'remove');\n const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n const template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n let trustedTypesPolicy;\n let emptyHTML = '';\n const {\n implementation,\n createNodeIterator,\n createDocumentFragment,\n getElementsByTagName\n } = document;\n const {\n importNode\n } = originalDocument;\n let hooks = _createHooksMap();\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined;\n const {\n MUSTACHE_EXPR,\n ERB_EXPR,\n TMPLIT_EXPR,\n DATA_ATTR,\n ARIA_ATTR,\n IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE,\n CUSTOM_ELEMENT\n } = EXPRESSIONS;\n let {\n IS_ALLOWED_URI: IS_ALLOWED_URI$1\n } = EXPRESSIONS;\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n /* allowed element names */\n let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]);\n /* Allowed attribute names */\n let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);\n /*\n * Configure how DOMPurify should handle custom elements and their attributes as well as customized built-in elements.\n * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n */\n let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false\n }\n }));\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n let FORBID_TAGS = null;\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n let FORBID_ATTR = null;\n /* Decide if ARIA attributes are okay */\n let ALLOW_ARIA_ATTR = true;\n /* Decide if custom data attributes are okay */\n let ALLOW_DATA_ATTR = true;\n /* Decide if unknown protocols are okay */\n let ALLOW_UNKNOWN_PROTOCOLS = false;\n /* Decide if self-closing tags in attributes are allowed.\n * Usually removed due to a mXSS issue in jQuery 3.0 */\n let ALLOW_SELF_CLOSE_IN_ATTR = true;\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n let SAFE_FOR_TEMPLATES = false;\n /* Output should be safe even for XML used within HTML and alike.\n * This means, DOMPurify removes comments when containing risky content.\n */\n let SAFE_FOR_XML = true;\n /* Decide if document with <html>... should be returned */\n let WHOLE_DOCUMENT = false;\n /* Track whether config is already set on this instance of DOMPurify. */\n let SET_CONFIG = false;\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n let FORCE_BODY = false;\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n let RETURN_DOM = false;\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n let RETURN_DOM_FRAGMENT = false;\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n let RETURN_TRUSTED_TYPE = false;\n /* Output should be free from DOM clobbering attacks?\n * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n */\n let SANITIZE_DOM = true;\n /* Achieve full DOM Clobbering protection by isolating the namespace of named\n * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n *\n * HTML/DOM spec rules that enable DOM Clobbering:\n * - Named Access on Window (§7.3.3)\n * - DOM Tree Accessors (§3.1.5)\n * - Form Element Parent-Child Relations (§4.10.3)\n * - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n * - HTMLCollection (§4.2.10.2)\n *\n * Namespace isolation is implemented by prefixing `id` and `name` attributes\n * with a constant string, i.e., `user-content-`\n */\n let SANITIZE_NAMED_PROPS = false;\n const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n /* Keep element content when removing element? */\n let KEEP_CONTENT = true;\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n let IN_PLACE = false;\n /* Allow usage of profiles like html, svg and mathMl */\n let USE_PROFILES = {};\n /* Tags to ignore content of when KEEP_CONTENT is true */\n let FORBID_CONTENTS = null;\n const DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n /* Tags that are safe for data: URIs */\n let DATA_URI_TAGS = null;\n const DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n /* Attributes safe for values like \"javascript:\" */\n let URI_SAFE_ATTRIBUTES = null;\n const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);\n const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */\n let NAMESPACE = HTML_NAMESPACE;\n let IS_EMPTY_INPUT = false;\n /* Allowed XHTML+XML namespaces */\n let ALLOWED_NAMESPACES = null;\n const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);\n let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n let HTML_INTEGRATION_POINTS = addToSet({}, ['annotation-xml']);\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erroneously deleted from\n // HTML namespace.\n const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n /* Parsing of strict XHTML documents */\n let PARSER_MEDIA_TYPE = null;\n const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n let transformCaseFunc = null;\n /* Keep a reference to config to pass to hooks */\n let CONFIG = null;\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n const formElement = document.createElement('form');\n const isRegexOrFunction = function isRegexOrFunction(testValue) {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n /**\n * _parseConfig\n *\n * @param cfg optional config literal\n */\n // eslint-disable-next-line complexity\n const _parseConfig = function _parseConfig() {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n /* Shield configuration object from tampering */\n if (!cfg || typeof cfg !== 'object') {\n cfg = {};\n }\n /* Shield configuration object from prototype pollution */\n cfg = clone(cfg);\n PARSER_MEDIA_TYPE =\n // eslint-disable-next-line unicorn/prefer-includes\n SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;\n // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;\n /* Set configuration parameters */\n ALLOWED_TAGS = objectHasOwnProperty(cfg, 'ALLOWED_TAGS') ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR = objectHasOwnProperty(cfg, 'ALLOWED_ATTR') ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;\n ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES') ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;\n URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR, transformCaseFunc) : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS, transformCaseFunc) : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS = objectHasOwnProperty(cfg, 'FORBID_CONTENTS') ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS = objectHasOwnProperty(cfg, 'FORBID_TAGS') ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : {};\n FORBID_ATTR = objectHasOwnProperty(cfg, 'FORBID_ATTR') ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : {};\n USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES') ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n MATHML_TEXT_INTEGRATION_POINTS = cfg.MATHML_TEXT_INTEGRATION_POINTS || MATHML_TEXT_INTEGRATION_POINTS;\n HTML_INTEGRATION_POINTS = cfg.HTML_INTEGRATION_POINTS || HTML_INTEGRATION_POINTS;\n CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n }\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, text);\n ALLOWED_ATTR = [];\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, html$1);\n addToSet(ALLOWED_ATTR, html);\n }\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, svg$1);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, svgFilters);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, mathMl$1);\n addToSet(ALLOWED_ATTR, mathMl);\n addToSet(ALLOWED_ATTR, xml);\n }\n }\n /* Merge configuration parameters */\n if (cfg.ADD_TAGS) {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n }\n if (cfg.ADD_ATTR) {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n }\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n }\n if (cfg.FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n }\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n if (cfg.TRUSTED_TYPES_POLICY) {\n if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');\n }\n if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');\n }\n // Overwrite existing TrustedTypes policy.\n trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n // Sign local variables required by `sanitize`.\n emptyHTML = trustedTypesPolicy.createHTML('');\n } else {\n // Uninitialized policy, attempt to initialize the internal dompurify policy.\n if (trustedTypesPolicy === undefined) {\n trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);\n }\n // If creating the internal policy succeeded sign internal variables.\n if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n emptyHTML = trustedTypesPolicy.createHTML('');\n }\n }\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n CONFIG = cfg;\n };\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]);\n const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);\n /**\n * @param element a DOM element whose namespace is being checked\n * @returns Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n const _checkValidNamespace = function _checkValidNamespace(element) {\n let parent = getParentNode(element);\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: NAMESPACE,\n tagName: 'template'\n };\n }\n const tagName = stringToLowerCase(element.tagName);\n const parentTagName = stringToLowerCase(parent.tagName);\n if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n return false;\n }\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via <svg>. If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n // The only way to switch from MathML to SVG is via`\n // svg if parent is either <annotation-xml> or MathML\n // text integration points.\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n }\n // We only allow elements that are defined in SVG\n // spec. All others are disallowed in SVG namespace.\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n if (element.namespaceURI === MATHML_NAMESPACE) {\n // The only way to switch from HTML namespace to MathML\n // is via <math>. If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n // The only way to switch from SVG to MathML is via\n // <math> and HTML integration points\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n // We only allow elements that are defined in MathML\n // spec. All others are disallowed in MathML namespace.\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n if (element.namespaceURI === HTML_NAMESPACE) {\n // The only way to switch from SVG to HTML is via\n // HTML integration points, and from MathML to HTML\n // is via MathML text integration points\n if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n // We disallow tags that are specific for MathML\n // or SVG and should never appear in HTML namespace\n return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n }\n // For XHTML and XML documents that support custom namespaces\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {\n return true;\n }\n // The code should never reach this place (this means\n // that the element somehow got namespace that is not\n // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n // Return false just in case.\n return false;\n };\n /**\n * _forceRemove\n *\n * @param node a DOM node\n */\n const _forceRemove = function _forceRemove(node) {\n arrayPush(DOMPurify.removed, {\n element: node\n });\n try {\n // eslint-disable-next-line unicorn/prefer-dom-node-remove\n getParentNode(node).removeChild(node);\n } catch (_) {\n remove(node);\n }\n };\n /**\n * _removeAttribute\n *\n * @param name an Attribute name\n * @param element a DOM node\n */\n const _removeAttribute = function _removeAttribute(name, element) {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: element.getAttributeNode(name),\n from: element\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: element\n });\n }\n element.removeAttribute(name);\n // We void attribute values for unremovable \"is\" attributes\n if (name === 'is') {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(element);\n } catch (_) {}\n } else {\n try {\n element.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n /**\n * _initDocument\n *\n * @param dirty - a string of dirty markup\n * @return a DOM, filled with the dirty markup\n */\n const _initDocument = function _initDocument(dirty) {\n /* Create a HTML document */\n let doc = null;\n let leadingWhitespace = null;\n if (FORCE_BODY) {\n dirty = '<remove></remove>' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {\n // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n dirty = '<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>' + dirty + '</body></html>';\n }\n const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n /*\n * Use the DOMParser API by default, fallback later if needs be\n * DOMParser not work for svg when has multiple root element.\n */\n if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n } catch (_) {}\n }\n /* Use createHTMLDocument in case DOMParser is not available */\n if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n } catch (_) {\n // Syntax error if dirtyPayload is invalid xml\n }\n }\n const body = doc.body || doc.documentElement;\n if (dirty && leadingWhitespace) {\n body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n }\n /* Work on whole document or just its body */\n if (NAMESPACE === HTML_NAMESPACE) {\n return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n }\n return WHOLE_DOCUMENT ? doc.documentElement : body;\n };\n /**\n * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n *\n * @param root The root element or node to start traversing on.\n * @return The created NodeIterator\n */\n const _createNodeIterator = function _createNodeIterator(root) {\n return createNodeIterator.call(root.ownerDocument || root, root,\n // eslint-disable-next-line no-bitwise\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);\n };\n /**\n * _isClobbered\n *\n * @param element element to check for clobbering attacks\n * @return true if clobbered, false if safe\n */\n const _isClobbered = function _isClobbered(element) {\n return element instanceof HTMLFormElement && (typeof element.nodeName !== 'string' || typeof element.textContent !== 'string' || typeof element.removeChild !== 'function' || !(element.attributes instanceof NamedNodeMap) || typeof element.removeAttribute !== 'function' || typeof element.setAttribute !== 'function' || typeof element.namespaceURI !== 'string' || typeof element.insertBefore !== 'function' || typeof element.hasChildNodes !== 'function');\n };\n /**\n * Checks whether the given object is a DOM node.\n *\n * @param value object to check whether it's a DOM node\n * @return true is object is a DOM node\n */\n const _isNode = function _isNode(value) {\n return typeof Node === 'function' && value instanceof Node;\n };\n function _executeHooks(hooks, currentNode, data) {\n arrayForEach(hooks, hook => {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n }\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n * @param currentNode to check for permission to exist\n * @return true if node was killed, false if left alive\n */\n const _sanitizeElements = function _sanitizeElements(currentNode) {\n let content = null;\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeElements, currentNode, null);\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Now let's check the element's type and name */\n const tagName = transformCaseFunc(currentNode.nodeName);\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeElement, currentNode, {\n tagName,\n allowedTags: ALLOWED_TAGS\n });\n /* Detect mXSS attempts abusing namespace confusion */\n if (currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\\w]/g, currentNode.innerHTML) && regExpTest(/<[/\\w]/g, currentNode.textContent)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove any occurrence of processing instructions */\n if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove any kind of possibly harmful comments */\n if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\\w]/g, currentNode.data)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove element if anything forbids its presence */\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n /* Check if we have a custom element to handle */\n if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {\n return false;\n }\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) {\n return false;\n }\n }\n /* Keep content except for bad-listed elements */\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n if (childNodes && parentNode) {\n const childCount = childNodes.length;\n for (let i = childCount - 1; i >= 0; --i) {\n const childClone = cloneNode(childNodes[i], true);\n childClone.__removalCount = (currentNode.__removalCount || 0) + 1;\n parentNode.insertBefore(childClone, getNextSibling(currentNode));\n }\n }\n }\n _forceRemove(currentNode);\n return true;\n }\n /* Check whether element has a valid namespace */\n if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Make sure that older browsers don't get fallback-tag mXSS */\n if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Sanitize element content to be template-safe */\n if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {\n /* Get the element's text content */\n content = currentNode.textContent;\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n content = stringReplace(content, expr, ' ');\n });\n if (currentNode.textContent !== content) {\n arrayPush(DOMPurify.removed, {\n element: currentNode.cloneNode()\n });\n currentNode.textContent = content;\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeElements, currentNode, null);\n return false;\n };\n /**\n * _isValidAttribute\n *\n * @param lcTag Lowercase tag name of containing element.\n * @param lcName Lowercase attribute name.\n * @param value Attribute value.\n * @return Returns true if `value` is valid, otherwise false.\n */\n // eslint-disable-next-line complexity\n const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n /* Make sure attribute cannot clobber */\n if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n return false;\n }\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) ; else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n if (\n // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n _isBasicCustomElement(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)) ||\n // Alternative, second condition checks if it's an `is`-attribute, AND\n // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))) ; else {\n return false;\n }\n /* Check value is safe. First, is attr inert? If so, is safe */\n } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if (value) {\n return false;\n } else ;\n return true;\n };\n /**\n * _isBasicCustomElement\n * checks if at least one dash is included in tagName, and it's not the first char\n * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n *\n * @param tagName name of the tag of the node to sanitize\n * @returns Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n */\n const _isBasicCustomElement = function _isBasicCustomElement(tagName) {\n return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT);\n };\n /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param currentNode to sanitize\n */\n const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);\n const {\n attributes\n } = currentNode;\n /* Check if we have attributes; if not we might have a text node */\n if (!attributes || _isClobbered(currentNode)) {\n return;\n }\n const hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR,\n forceKeepAttr: undefined\n };\n let l = attributes.length;\n /* Go backwards over all attributes; safely remove bad ones */\n while (l--) {\n const attr = attributes[l];\n const {\n name,\n namespaceURI,\n value: attrValue\n } = attr;\n const lcName = transformCaseFunc(name);\n let value = name === 'value' ? attrValue : stringTrim(attrValue);\n /* Execute a hook if present */\n hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n _executeHooks(hooks.uponSanitizeAttribute, currentNode, hookEvent);\n value = hookEvent.attrValue;\n /* Full DOM Clobbering protection via namespace isolation,\n * Prefix id and name attributes with `user-content-`\n */\n if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n // Remove the attribute with this value\n _removeAttribute(name, currentNode);\n // Prefix the value and later re-create the attribute with the sanitized value\n value = SANITIZE_NAMED_PROPS_PREFIX + value;\n }\n /* Work around a security issue with comments inside attributes */\n if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|title)/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Did the hooks approve of the attribute? */\n if (hookEvent.forceKeepAttr) {\n continue;\n }\n /* Remove attribute */\n _removeAttribute(name, currentNode);\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n continue;\n }\n /* Work around a security issue in jQuery 3.0 */\n if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Sanitize attribute content to be template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n value = stringReplace(value, expr, ' ');\n });\n }\n /* Is `value` valid for this attribute? */\n const lcTag = transformCaseFunc(currentNode.nodeName);\n if (!_isValidAttribute(lcTag, lcName, value)) {\n continue;\n }\n /* Handle attributes that require Trusted Types */\n if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') {\n if (namespaceURI) ; else {\n switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n case 'TrustedHTML':\n {\n value = trustedTypesPolicy.createHTML(value);\n break;\n }\n case 'TrustedScriptURL':\n {\n value = trustedTypesPolicy.createScriptURL(value);\n break;\n }\n }\n }\n }\n /* Handle invalid data-* attribute set by try-catching it */\n try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n currentNode.setAttribute(name, value);\n }\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n } else {\n arrayPop(DOMPurify.removed);\n }\n } catch (_) {}\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeAttributes, currentNode, null);\n };\n /**\n * _sanitizeShadowDOM\n *\n * @param fragment to iterate over recursively\n */\n const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n let shadowNode = null;\n const shadowIterator = _createNodeIterator(fragment);\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeShadowDOM, fragment, null);\n while (shadowNode = shadowIterator.nextNode()) {\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null);\n /* Sanitize tags and elements */\n _sanitizeElements(shadowNode);\n /* Check attributes next */\n _sanitizeAttributes(shadowNode);\n /* Deep shadow DOM detected */\n if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);\n };\n // eslint-disable-next-line complexity\n DOMPurify.sanitize = function (dirty) {\n let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let body = null;\n let importedNode = null;\n let currentNode = null;\n let returnNode = null;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n IS_EMPTY_INPUT = !dirty;\n if (IS_EMPTY_INPUT) {\n dirty = '<!-->';\n }\n /* Stringify, in case dirty is an object */\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n if (typeof dirty.toString === 'function') {\n dirty = dirty.toString();\n if (typeof dirty !== 'string') {\n throw typeErrorCreate('dirty is not a string, aborting');\n }\n } else {\n throw typeErrorCreate('toString is not a function');\n }\n }\n /* Return dirty HTML if DOMPurify cannot run */\n if (!DOMPurify.isSupported) {\n return dirty;\n }\n /* Assign config vars */\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n /* Clean up removed elements */\n DOMPurify.removed = [];\n /* Check if dirty is correctly typed for IN_PLACE */\n if (typeof dirty === 'string') {\n IN_PLACE = false;\n }\n if (IN_PLACE) {\n /* Do some early pre-sanitization to avoid unsafe root nodes */\n if (dirty.nodeName) {\n const tagName = transformCaseFunc(dirty.nodeName);\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');\n }\n }\n } else if (dirty instanceof Node) {\n /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('<!---->');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === 'BODY') {\n /* Node is already a body, use as is */\n body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n body.appendChild(importedNode);\n }\n } else {\n /* Exit directly if we have nothing to do */\n if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT &&\n // eslint-disable-next-line unicorn/prefer-includes\n dirty.indexOf('<') === -1) {\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n }\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n /* Check we have a DOM node from the data */\n if (!body) {\n return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n }\n }\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n /* Get node iterator */\n const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);\n /* Now start iterating over the created document */\n while (currentNode = nodeIterator.nextNode()) {\n /* Sanitize tags and elements */\n _sanitizeElements(currentNode);\n /* Check attributes next */\n _sanitizeAttributes(currentNode);\n /* Shadow DOM detected, sanitize it */\n if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n }\n /* If we sanitized `dirty` in-place, return it. */\n if (IN_PLACE) {\n return dirty;\n }\n /* Return sanitized string or DOM */\n if (RETURN_DOM) {\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n while (body.firstChild) {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n /*\n AdoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs.\n */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n return returnNode;\n }\n let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n /* Serialize doctype if allowed */\n if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {\n serializedHTML = '<!DOCTYPE ' + body.ownerDocument.doctype.name + '>\\n' + serializedHTML;\n }\n /* Sanitize final string template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n serializedHTML = stringReplace(serializedHTML, expr, ' ');\n });\n }\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n };\n DOMPurify.setConfig = function () {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n _parseConfig(cfg);\n SET_CONFIG = true;\n };\n DOMPurify.clearConfig = function () {\n CONFIG = null;\n SET_CONFIG = false;\n };\n DOMPurify.isValidAttribute = function (tag, attr, value) {\n /* Initialize shared config vars if necessary. */\n if (!CONFIG) {\n _parseConfig({});\n }\n const lcTag = transformCaseFunc(tag);\n const lcName = transformCaseFunc(attr);\n return _isValidAttribute(lcTag, lcName, value);\n };\n DOMPurify.addHook = function (entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n arrayPush(hooks[entryPoint], hookFunction);\n };\n DOMPurify.removeHook = function (entryPoint, hookFunction) {\n if (hookFunction !== undefined) {\n const index = arrayLastIndexOf(hooks[entryPoint], hookFunction);\n return index === -1 ? undefined : arraySplice(hooks[entryPoint], index, 1)[0];\n }\n return arrayPop(hooks[entryPoint]);\n };\n DOMPurify.removeHooks = function (entryPoint) {\n hooks[entryPoint] = [];\n };\n DOMPurify.removeAllHooks = function () {\n hooks = _createHooksMap();\n };\n return DOMPurify;\n}\nvar purify = createDOMPurify();\n\nexport { purify as default };\n//# sourceMappingURL=purify.es.mjs.map\n","import React, { ReactNode } from 'react';\nimport { elements } from '@ecosystem/newron-design-system';\nimport dompurify from 'dompurify';\n\ntype Props = {\n children: ReactNode;\n};\n\nfunction ErrorPanel({ children }: Props) {\n const { Icon } = elements;\n return (\n <div className=\"border border-ui-red rounded flex flex-row p-4 gap-2 bg-white\">\n <div>\n <Icon color=\"error\" size=\"lg\">\n <Icon.icons.Error />\n </Icon>\n </div>\n <div>{children}</div>\n </div>\n );\n}\n\ntype TitleProps = {\n title: string;\n};\nfunction Title({ title }: TitleProps) {\n return <h3 className=\"text-ui-red mb-2\">{title}</h3>;\n}\n\ntype ResponseProps = {\n response: string;\n};\nfunction ServerResponse({ response }: ResponseProps) {\n /**\n * response might have links (<a/>) or new lines <br/>\n * this response are comming from the server and are never from user input.\n */\n const sanitizer = dompurify.sanitize;\n return <p className=\"text-md text-default\" dangerouslySetInnerHTML={{ __html: sanitizer(response) }} />;\n}\n\nErrorPanel.Title = Title;\nErrorPanel.ServerResponse = ServerResponse;\n\nexport { ErrorPanel };\n","import React, { useEffect, useState } from 'react';\nimport { ErrorPanel } from '../../design/error';\nimport { DataContentProps } from '../../content/types';\nimport { DEFAULT_ERROR_MESSAGE, DEFAULT_ERROR_TITLE } from '../../common/constants/error';\nimport { flushErrors } from '../../tools/axios.trace';\n\nfunction DataErrorElement({ error: { title, className, message } }: Readonly<Partial<DataContentProps>>) {\n const [errorString, setErrorString] = useState<string>('');\n const safeMessage = isValidMessage(message) ? message : DEFAULT_ERROR_MESSAGE;\n const safeTitle = isValidMessage(title) ? title : DEFAULT_ERROR_TITLE;\n\n useEffect(() => {\n const errors = flushErrors();\n if (errors.length) {\n setErrorString(errors);\n }\n }, []);\n\n return (\n <div className={className}>\n <ErrorPanel>\n <ErrorPanel.Title title={safeTitle} />\n <ErrorPanel.ServerResponse\n response={\n safeMessage + '<br /><br /><small>' + new Date().toUTCString() + '<br />' + errorString + '</small>'\n }\n />\n </ErrorPanel>\n </div>\n );\n}\nexport { DataErrorElement };\nconst isValidMessage = (message: string): boolean => {\n const inappropriateKeys = ['DOCTYPE', 'html', 'Error'];\n return !inappropriateKeys.some(key => message.includes(key));\n};\n","import { elements } from '@ecosystem/newron-design-system';\nimport React from 'react';\nimport { MenuButtonProps } from '../selection.menu';\n\nfunction TitleSelectorButton({ onClick, children }: MenuButtonProps) {\n const { Icon } = elements;\n return (\n <button\n className=\"text-left text-lg text-brand p-0 flex items-center transition-colors hover:text-brand-dark\"\n onClick={onClick}\n >\n <span className=\"flex-grow\">{children}</span>\n <Icon color=\"brand\" size=\"sm\">\n <Icon.icons.ChevronDown />\n </Icon>\n </button>\n );\n}\n\nexport { TitleSelectorButton };\n","import {\n BooleanInstruction,\n ContentInstruction,\n ContentInstructions,\n FromSettingsInstruction,\n NumberInstruction,\n ObjectInstruction,\n Params,\n StringInstruction,\n StringListInstruction,\n} from '../types';\n\nexport class Instructions {\n constructor(private readonly instructions: ContentInstructions, private readonly settings: Params) {}\n\n hasInstruction(name: string): boolean {\n return this.instructions[name] !== undefined;\n }\n\n getInstruction(name: string): ContentInstruction | undefined {\n return this.instructions[name];\n }\n\n isFromSettings(name: string): boolean {\n return this.getInstruction(name)?.type === 'FromSettingsInstruction';\n }\n\n getSettingsName(name: string): string {\n if (!this.isFromSettings(name)) {\n throw new Error(`instruction ${name} is not from settings type`);\n }\n const instruction = this.getInstruction(name);\n if (!instruction) {\n throw new Error(`instruction ${name} not found`);\n }\n return (instruction as FromSettingsInstruction).instruction;\n }\n\n getString(name: string, defaultValue?: string): string {\n const instruction = this.getInstruction(name);\n if (!instruction) {\n return defaultValue;\n }\n\n if (instruction.type === 'FromSettingsInstruction') {\n let value = this.settings[(instruction as FromSettingsInstruction).instruction]?.[0];\n if (value?.includes('|')) {\n value = value.substring(0, value.indexOf('|'));\n }\n return value;\n } else if (instruction.type === 'StringInstruction') {\n return (instruction as StringInstruction).instruction;\n }\n\n throw new Error(`instruction ${name} is not type string or from settings`);\n }\n\n getStringList(name: string, defaultValue?: string[]): string[] {\n const instruction = this.getInstruction(name);\n if (!instruction) {\n return defaultValue;\n }\n\n if (instruction.type === 'FromSettingsInstruction') {\n return this.settings[(instruction as FromSettingsInstruction).instruction];\n } else if (instruction.type === 'StringListInstruction') {\n return (instruction as StringListInstruction).instruction;\n }\n\n throw new Error(`instruction ${name} is not type string list or from settings`);\n }\n\n getObject(name: string, defaultValue?: unknown): unknown {\n const instruction = this.getInstruction(name);\n if (!instruction) {\n return defaultValue;\n }\n\n if (instruction.type === 'ObjectInstruction') {\n return (instruction as ObjectInstruction).instruction;\n }\n\n throw new Error(`instruction ${name} is not type object`);\n }\n\n getNumber(name: string, defaultValue?: number): number {\n const instruction = this.getInstruction(name);\n if (instruction === undefined) {\n return defaultValue;\n }\n\n if (instruction.type === 'NumberInstruction') {\n return (instruction as NumberInstruction).instruction;\n }\n\n throw new Error(`instruction ${name} is not type number`);\n }\n\n getBoolean(name: string, defaultValue?: boolean): boolean {\n const instruction = this.getInstruction(name);\n if (!instruction) {\n return defaultValue;\n }\n\n if (instruction.type === 'BooleanInstruction') {\n return (instruction as BooleanInstruction).instruction;\n }\n\n throw new Error(`instruction ${name} is not type boolean`);\n }\n}\n","import {\n CallToAction,\n CollectionOptions,\n Component,\n ComponentLayout,\n DynamicTitle,\n ExportOptions,\n Period,\n SettingsProvider,\n} from '../../../types';\nimport { ContentFactory } from '../content';\nimport { DataOptionsFactory } from '../data';\n\nexport type NoDataInfoType = 'ignore' | 'info-alert' | 'default';\n\nexport type ComponentOptions = {\n data?: DataOptionsFactory;\n heading?: {\n subTitle?: string;\n title: string | DynamicTitle;\n isCollapsible?: boolean;\n customPeriodOptions?: Period[];\n };\n callsToAction?: CallToAction[];\n contents: {\n fixed?: ContentFactory[];\n endpoint?: string;\n aboveFold?: number;\n };\n settingsProvider?: SettingsProvider;\n asCard?: boolean;\n noDataInfoType?: NoDataInfoType;\n layout?: ComponentLayout;\n exportOptions?: ExportOptions;\n collectionOptions?: CollectionOptions;\n};\n\nexport class ComponentFactory {\n name: string;\n options: ComponentOptions;\n\n constructor(name: string, options: ComponentOptions) {\n this.name = name;\n this.options = options;\n }\n\n _build(): Component {\n const {\n data,\n noDataInfoType,\n heading,\n callsToAction,\n contents,\n settingsProvider,\n asCard,\n layout,\n exportOptions,\n collectionOptions,\n } = this.options;\n return {\n contents: {\n fixed: contents.fixed?.map(c => c._build()),\n endpoint: contents.endpoint,\n aboveFold: contents.aboveFold,\n },\n heading: heading,\n name: this.name,\n callsToAction,\n settings: settingsProvider || {\n values: {},\n dataSettings: [],\n metadata: {},\n },\n dataOptions: data?._build(),\n asCard,\n noDataInfoType,\n layout,\n exportOptions,\n collectionOptions,\n };\n }\n}\n","import { ModalDsl, ModalName, ModalSize, SettingsProvider } from '../../../types';\nimport { SectionFactory } from '../section';\n\nexport type ModalDslOptions = {\n title: string;\n size: ModalSize;\n sections: SectionFactory[];\n settingsProvider?: SettingsProvider;\n name: ModalName;\n};\n\nexport class ModalDslFactory {\n constructor(private readonly options: ModalDslOptions) {}\n\n build(): ModalDsl {\n const { title, size, sections, settingsProvider, name } = this.options;\n return {\n title,\n size,\n name,\n sections: sections.map(s => s._build()),\n settings: settingsProvider || {\n values: {},\n dataSettings: [],\n metadata: {},\n },\n };\n }\n}\n","import { Content, ContentInstructions } from '../../../types';\nimport { DataOptionsFactory } from '../data/options';\n\nexport type ContentOptions = {\n data?: DataOptionsFactory;\n instructions?: ContentInstructions;\n};\n\nexport class ContentFactory {\n type: string;\n data?: DataOptionsFactory;\n instructions?: ContentInstructions;\n\n /**\n *\n * @param type\n * @param options\n */\n constructor(type: string, options: ContentOptions = {}) {\n this.type = type;\n this.data = options.data;\n this.instructions = options.instructions;\n }\n\n _build(): Content {\n const content: Content = {\n type: this.type,\n instructions: this.instructions,\n };\n\n if (this.data) {\n content.dataOptions = this.data._build();\n }\n\n return content;\n }\n}\n","import { DataMode, DataOptions, DataProvider, DataResults } from '../../../types';\n\nexport class DataOptionsFactory {\n private provider?: DataProvider;\n private data?: DataResults;\n private dataMode: DataMode = DataMode.takeFromProvider;\n\n private constructor() {}\n\n static asProvider(provider?: DataProvider): DataOptionsFactory {\n const cls = new DataOptionsFactory();\n cls.provider = provider;\n cls.dataMode = DataMode.isProvider;\n return cls;\n }\n\n static withData(data: DataResults): DataOptionsFactory {\n const cls = new DataOptionsFactory();\n cls.dataMode = DataMode.isPresent;\n cls.data = data;\n return cls;\n }\n\n static asReceiver(): DataOptionsFactory {\n const cls = new DataOptionsFactory();\n cls.dataMode = DataMode.takeFromProvider;\n return cls;\n }\n\n _build(): DataOptions {\n return {\n mode: this.dataMode,\n providerInfo: this.provider,\n data: this.data,\n };\n }\n}\n","import {\n CollectionOptions,\n ContentInstructions,\n CoreContents,\n ExportOptions,\n FromSettingsInstruction,\n} from '../../../types';\nimport { DataOptionsFactory } from '../data';\nimport { ContentFactory } from './base';\n\nexport type TimeSeriesOptions = {\n data?: DataOptionsFactory;\n xColumn: string | FromSettingsInstruction;\n yColumn: string | FromSettingsInstruction;\n displayAs?: string | FromSettingsInstruction;\n exportOptions?: ExportOptions;\n collectionOptions?: CollectionOptions;\n};\n\nexport class TimeSeriesFactory extends ContentFactory {\n constructor(options: TimeSeriesOptions) {\n const { xColumn, yColumn, displayAs, data, exportOptions, collectionOptions } = options;\n\n const instructions: ContentInstructions = {\n xColumn:\n typeof xColumn === 'string'\n ? {\n type: 'StringInstruction',\n instruction: xColumn,\n }\n : xColumn,\n yColumn:\n typeof yColumn === 'string'\n ? {\n type: 'StringInstruction',\n instruction: yColumn,\n }\n : yColumn,\n ...(exportOptions && {\n export: {\n type: 'ObjectInstruction',\n instruction: exportOptions,\n },\n }),\n ...(collectionOptions && {\n collection: {\n type: 'ObjectInstruction',\n instruction: collectionOptions,\n },\n }),\n };\n\n if (displayAs) {\n instructions.displayAs =\n typeof displayAs === 'string'\n ? {\n type: 'StringInstruction',\n instruction: displayAs,\n }\n : displayAs;\n }\n\n super(CoreContents.timeSeries, {\n data: data || DataOptionsFactory.asReceiver(),\n instructions,\n });\n }\n}\n","import {\n CollectionOptions,\n ContentInstructions,\n CoreContents,\n ExportOptions,\n FromSettingsInstruction,\n} from '../../../types';\nimport { DataOptionsFactory } from '../data';\nimport { ContentFactory } from './base';\n\nexport type SegmentationOptions = {\n data?: DataOptionsFactory;\n displayAs?: string | FromSettingsInstruction;\n yColumn: string | FromSettingsInstruction;\n xColumn: string | FromSettingsInstruction;\n segmentColumn: string | FromSettingsInstruction;\n exportOptions?: ExportOptions;\n collectionOptions?: CollectionOptions;\n};\n\nexport class SegmentationFactory extends ContentFactory {\n constructor(options: SegmentationOptions) {\n const { xColumn, yColumn, data, segmentColumn, displayAs, exportOptions, collectionOptions } = options;\n\n const instructions: ContentInstructions = {\n xColumn:\n typeof xColumn === 'string'\n ? {\n type: 'StringInstruction',\n instruction: xColumn,\n }\n : xColumn,\n yColumn:\n typeof yColumn === 'string'\n ? {\n type: 'StringInstruction',\n instruction: yColumn,\n }\n : yColumn,\n segmentColumn:\n typeof segmentColumn === 'string'\n ? {\n type: 'StringInstruction',\n instruction: segmentColumn,\n }\n : segmentColumn,\n ...(exportOptions && {\n export: {\n type: 'ObjectInstruction',\n instruction: exportOptions,\n },\n }),\n ...(collectionOptions && {\n collection: {\n type: 'ObjectInstruction',\n instruction: collectionOptions,\n },\n }),\n };\n\n if (displayAs) {\n instructions.displayAs =\n typeof displayAs === 'string'\n ? {\n type: 'StringInstruction',\n instruction: displayAs,\n }\n : displayAs;\n }\n\n super(CoreContents.segmentation, {\n data: data || DataOptionsFactory.asReceiver(),\n instructions,\n });\n }\n}\n","import {\n CollectionOptions,\n ContentInstructions,\n CoreContents,\n ExportOptions,\n FromSettingsInstruction,\n} from '../../../types';\nimport { DataOptionsFactory } from '../data';\nimport { ContentFactory } from './base';\n\nexport type MultiKpiOptions = {\n data?: DataOptionsFactory;\n displayAs?: string | FromSettingsInstruction;\n kpis: string[] | FromSettingsInstruction;\n maxKpis?: number;\n xColumn: string | FromSettingsInstruction;\n exportOptions?: ExportOptions;\n collectionOptions?: CollectionOptions;\n};\n\nexport class MultiKpiFactory extends ContentFactory {\n constructor(options: MultiKpiOptions) {\n const { displayAs, xColumn, data, kpis, maxKpis, exportOptions, collectionOptions } = options;\n\n const instructions: ContentInstructions = {\n xColumn:\n typeof xColumn === 'string'\n ? {\n type: 'StringInstruction',\n instruction: xColumn,\n }\n : xColumn,\n kpis: Array.isArray(kpis)\n ? {\n type: 'StringListInstruction',\n instruction: kpis as string[],\n }\n : kpis,\n ...(exportOptions && {\n export: {\n type: 'ObjectInstruction',\n instruction: exportOptions,\n },\n }),\n ...(collectionOptions && {\n collection: {\n type: 'ObjectInstruction',\n instruction: collectionOptions,\n },\n }),\n };\n\n if (displayAs) {\n instructions.displayAs =\n typeof displayAs === 'string'\n ? {\n type: 'StringInstruction',\n instruction: displayAs,\n }\n : displayAs;\n }\n\n if (maxKpis) {\n instructions.maxKpis = {\n type: 'NumberInstruction',\n instruction: maxKpis,\n };\n }\n\n super(CoreContents.multiKpi, {\n data: data || DataOptionsFactory.asReceiver(),\n instructions,\n });\n }\n}\n","import { TableCustomiseOptions, QuickLookOptions, SelectionConfig } from '../../../elements/leaderboard/types';\nimport {\n CollectionOptions,\n ContentInstructions,\n CoreContents,\n ExportOptions,\n FromSettingsInstruction,\n} from '../../../types';\nimport { DataOptionsFactory } from '../data';\nimport { ContentFactory } from './base';\n\nexport type LeaderboardOptions = {\n /** provide options for how to fetch or receive data */\n data?: DataOptionsFactory;\n /** how to identify rows */\n rowIdField: string | FromSettingsInstruction;\n quickLookOptions?: {\n titleField: string;\n preTitleField?: string;\n contents: ContentFactory[];\n };\n exportOptions?: ExportOptions;\n collectionOptions?: CollectionOptions;\n selectionConfig?: SelectionConfig;\n customiseOptions?: TableCustomiseOptions;\n preferencesGroupName: string;\n groupsParam: string;\n};\nexport class LeaderboardFactory extends ContentFactory {\n constructor(options: LeaderboardOptions) {\n const {\n data,\n rowIdField,\n quickLookOptions,\n selectionConfig,\n customiseOptions,\n exportOptions,\n collectionOptions,\n preferencesGroupName,\n groupsParam,\n } = options;\n\n let quickLook: QuickLookOptions | undefined;\n if (quickLookOptions) {\n quickLook = {\n contents: quickLookOptions.contents.map(c => c._build()),\n titleField: quickLookOptions.titleField,\n preTitleField: quickLookOptions.preTitleField,\n };\n }\n\n const instructions: ContentInstructions = {\n rowIdField:\n typeof rowIdField === 'string'\n ? {\n type: 'StringInstruction',\n instruction: rowIdField,\n }\n : rowIdField,\n };\n\n instructions.preferencesGroupName = {\n type: 'StringInstruction',\n instruction: preferencesGroupName,\n };\n\n instructions.groupsParam = {\n type: 'StringInstruction',\n instruction: groupsParam,\n };\n\n if (quickLook) {\n instructions.quickLook = {\n type: 'ObjectInstruction',\n instruction: quickLook,\n };\n }\n\n if (selectionConfig) {\n instructions.selectionConfig = {\n type: 'ObjectInstruction',\n instruction: selectionConfig,\n };\n }\n\n if (customiseOptions) {\n instructions.customiseOptions = {\n type: 'ObjectInstruction',\n instruction: customiseOptions,\n };\n }\n\n if (exportOptions) {\n instructions.export = {\n type: 'ObjectInstruction',\n instruction: exportOptions,\n };\n }\n\n if (collectionOptions) {\n instructions.collection = {\n type: 'ObjectInstruction',\n instruction: collectionOptions,\n };\n }\n super(CoreContents.leaderBoard, {\n data: data || DataOptionsFactory.asReceiver(),\n instructions,\n });\n }\n}\n","import { ContentInstructions, CoreContents, ExportOptions, FromSettingsInstruction } from '../../../types';\nimport { DataOptionsFactory } from '../data';\nimport { ContentFactory } from './base';\n\nexport type StatsTableOptions = {\n data?: DataOptionsFactory;\n title?: string;\n rowIdField: string | FromSettingsInstruction;\n exportOptions?: ExportOptions;\n};\nexport class StatsTableFactory extends ContentFactory {\n constructor(options: StatsTableOptions) {\n const { data, rowIdField, title, exportOptions } = options;\n\n const instructions: ContentInstructions = {\n rowIdField:\n typeof rowIdField === 'string'\n ? {\n type: 'StringInstruction',\n instruction: rowIdField,\n }\n : rowIdField,\n ...(exportOptions && {\n export: {\n type: 'ObjectInstruction',\n instruction: exportOptions,\n },\n }),\n };\n\n if (title) {\n instructions.title = {\n type: 'StringInstruction',\n instruction: title,\n };\n }\n\n super(CoreContents.statsTable, {\n data: data || DataOptionsFactory.asReceiver(),\n instructions,\n });\n }\n}\n","import { IndicatorConfig } from '../../../elements/keyIndicators/types';\nimport { ContentInstructions, CoreContents, FromSettingsInstruction, MenuItem } from '../../../types';\nimport { DataOptionsFactory } from '../data';\nimport { ContentFactory } from './base';\n\nexport type KeyIndicatorOptions = {\n data?: DataOptionsFactory;\n grouping: string | FromSettingsInstruction;\n indicators: IndicatorConfig[];\n fixedItems?: string[] | FromSettingsInstruction;\n limitedItems?: string[] | FromSettingsInstruction;\n limitedOptions?: MenuItem[];\n limitTo?: string[] | FromSettingsInstruction;\n addLinkLabel?: string;\n};\n\nexport class KeyIndicatorsFactory extends ContentFactory {\n constructor(options: KeyIndicatorOptions) {\n const { data, grouping, indicators, fixedItems, limitedItems, limitedOptions, addLinkLabel } = options;\n\n const instructions: ContentInstructions = {\n grouping:\n typeof grouping === 'string'\n ? {\n type: 'StringInstruction',\n instruction: grouping,\n }\n : grouping,\n indicators: {\n type: 'ObjectInstruction',\n instruction: indicators,\n },\n };\n\n if (fixedItems) {\n instructions.fixedItems = Array.isArray(fixedItems)\n ? {\n type: 'StringListInstruction',\n instruction: fixedItems as string[],\n }\n : fixedItems;\n }\n\n if (limitedItems) {\n instructions.limitedItems = Array.isArray(limitedItems)\n ? {\n type: 'StringListInstruction',\n instruction: limitedItems as string[],\n }\n : limitedItems;\n }\n\n if (limitedOptions) {\n instructions.limitedOptions = {\n type: 'ObjectInstruction',\n instruction: limitedOptions,\n };\n }\n\n if (addLinkLabel) {\n instructions.addLinkLabel = {\n type: 'StringInstruction',\n instruction: addLinkLabel,\n };\n }\n\n super(CoreContents.keyIndicators, {\n data: data || DataOptionsFactory.asReceiver(),\n instructions,\n });\n }\n}\n","import { ContentInstructions, CoreContents, FromSettingsInstruction } from '../../../types';\nimport { DataOptionsFactory } from '../data';\nimport { ContentFactory } from './base';\n\nexport type KpiTrendsOptions = {\n data?: DataOptionsFactory;\n grouping: string | FromSettingsInstruction;\n kpis: string[] | FromSettingsInstruction;\n};\n\nexport class KpiTrendsFactory extends ContentFactory {\n constructor(options: KpiTrendsOptions) {\n const { grouping, kpis, data } = options;\n\n const instructions: ContentInstructions = {\n grouping:\n typeof grouping === 'string'\n ? {\n type: 'StringInstruction',\n instruction: grouping,\n }\n : grouping,\n kpis: Array.isArray(kpis)\n ? {\n type: 'StringListInstruction',\n instruction: kpis as string[],\n }\n : kpis,\n };\n\n super(CoreContents.kpiTrends, {\n data: data || DataOptionsFactory.asReceiver(),\n instructions,\n });\n }\n}\n","import { ColumnConfig, Sorting } from '../../../elements/billboard/types';\nimport { ContentInstructions, CoreContents, FromSettingsInstruction } from '../../../types';\nimport { DataOptionsFactory } from '../data';\nimport { ContentFactory } from './base';\n\nexport type BillboardOptions = {\n data?: DataOptionsFactory;\n grouping: string | FromSettingsInstruction;\n columns: ColumnConfig[];\n asCard?: boolean;\n highlight?: string | FromSettingsInstruction;\n highlightColumn?: string | FromSettingsInstruction;\n siblingBuffer?: number;\n title?: string;\n limit?: number;\n sorting?: Sorting;\n};\n\nexport class BillboardFactory extends ContentFactory {\n constructor(options: BillboardOptions) {\n const { data, grouping, highlight, highlightColumn, siblingBuffer, title, limit, sorting, columns, asCard } =\n options;\n\n const instructions: ContentInstructions = {\n grouping:\n typeof grouping === 'string'\n ? {\n type: 'StringInstruction',\n instruction: grouping,\n }\n : grouping,\n columns: {\n type: 'ObjectInstruction',\n instruction: columns,\n },\n title: title\n ? {\n type: 'StringInstruction',\n instruction: title,\n }\n : undefined,\n limit: limit\n ? {\n type: 'NumberInstruction',\n instruction: limit,\n }\n : undefined,\n siblingBuffer: siblingBuffer\n ? {\n type: 'NumberInstruction',\n instruction: siblingBuffer,\n }\n : undefined,\n sorting: sorting\n ? {\n type: 'ObjectInstruction',\n instruction: sorting,\n }\n : undefined,\n };\n\n if (asCard !== undefined) {\n instructions.asCard = {\n type: 'BooleanInstruction',\n instruction: asCard,\n };\n }\n\n if (highlight) {\n instructions.highlight =\n typeof highlight === 'string'\n ? {\n type: 'StringInstruction',\n instruction: highlight,\n }\n : highlight;\n }\n\n if (highlightColumn) {\n instructions.highlightColumn =\n typeof highlightColumn === 'string'\n ? {\n type: 'StringInstruction',\n instruction: highlightColumn,\n }\n : highlightColumn;\n }\n\n super(CoreContents.billboard, {\n data: data || DataOptionsFactory.asReceiver(),\n instructions,\n });\n }\n}\n","import { AlertType } from '../../../elements/alertPanel/types';\nimport { CoreContents } from '../../../types';\nimport { ContentFactory } from './base';\n\nexport type AlertPanelOptions = {\n type: AlertType;\n message: string;\n};\n\nexport class AlertPanelFactory extends ContentFactory {\n constructor(options: AlertPanelOptions) {\n const { type, message } = options;\n\n super(CoreContents.alertPanel, {\n instructions: {\n type: {\n type: 'StringInstruction',\n instruction: type,\n },\n message: {\n type: 'StringInstruction',\n instruction: message,\n },\n },\n });\n }\n}\n","import { TrendClickAction } from '../../../elements/singleKpiTrend/types';\nimport { ContentInstructions, CoreContents, FromSettingsInstruction } from '../../../types';\nimport { DataOptionsFactory } from '../data';\nimport { ContentFactory } from './base';\n\nexport type SingleKpiTrendOptions = {\n data?: DataOptionsFactory;\n title?: string;\n asCard?: boolean;\n grouping: string | FromSettingsInstruction;\n kpi: string;\n secondaryKpi?: string;\n includeTotals?: boolean;\n totalName?: string;\n clickAction?: TrendClickAction;\n};\n\nexport class SingleKpiTrendFactory extends ContentFactory {\n constructor(options: SingleKpiTrendOptions) {\n const { data, title, asCard, grouping, kpi, secondaryKpi, includeTotals, totalName, clickAction } = options;\n\n const instructions: ContentInstructions = {\n grouping:\n typeof grouping === 'string'\n ? {\n type: 'StringInstruction',\n instruction: grouping,\n }\n : grouping,\n kpi: {\n type: 'StringInstruction',\n instruction: kpi,\n },\n asCard: {\n type: 'BooleanInstruction',\n instruction: asCard || false,\n },\n includeTotals: {\n type: 'BooleanInstruction',\n instruction: includeTotals || false,\n },\n };\n\n if (title) {\n instructions.title = {\n type: 'StringInstruction',\n instruction: title,\n };\n }\n\n if (secondaryKpi) {\n instructions.secondaryKpi = {\n type: 'StringInstruction',\n instruction: secondaryKpi,\n };\n }\n\n if (totalName) {\n instructions.totalName = {\n type: 'StringInstruction',\n instruction: totalName,\n };\n }\n\n if (clickAction) {\n instructions.clickAction = {\n type: 'ObjectInstruction',\n instruction: clickAction,\n };\n }\n\n super(CoreContents.singleKpiTrend, {\n data: data || DataOptionsFactory.asReceiver(),\n instructions,\n });\n }\n}\n","import { ContentInstructions, CoreContents, FromSettingsInstruction, UiAction } from '../../../types';\nimport { DataOptionsFactory } from '../data';\nimport { ContentFactory } from './base';\n\nexport type HeatmapOptions = {\n data?: DataOptionsFactory;\n xGrouping: string | FromSettingsInstruction;\n yGrouping: string | FromSettingsInstruction;\n sortX?: boolean;\n sortY?: boolean;\n kpi: string | FromSettingsInstruction;\n clickAction?: UiAction;\n};\n\nexport class HeatmapFactory extends ContentFactory {\n constructor(options: HeatmapOptions) {\n const { data, xGrouping, yGrouping, kpi, sortX, sortY, clickAction } = options;\n\n const instructions: ContentInstructions = {\n xGrouping:\n typeof xGrouping === 'string'\n ? {\n type: 'StringInstruction',\n instruction: xGrouping,\n }\n : xGrouping,\n yGrouping:\n typeof yGrouping === 'string'\n ? {\n type: 'StringInstruction',\n instruction: yGrouping,\n }\n : yGrouping,\n kpi:\n typeof kpi === 'string'\n ? {\n type: 'StringInstruction',\n instruction: kpi,\n }\n : kpi,\n };\n\n if (sortX) {\n instructions.sortX = {\n type: 'BooleanInstruction',\n instruction: sortX,\n };\n }\n\n if (sortY) {\n instructions.sortY = {\n type: 'BooleanInstruction',\n instruction: sortY,\n };\n }\n\n if (clickAction) {\n instructions.clickAction = {\n type: 'ObjectInstruction',\n instruction: clickAction,\n };\n }\n\n super(CoreContents.heatmap, {\n data: data || DataOptionsFactory.asReceiver(),\n instructions,\n });\n }\n}\n","import { ContributionKpiConfig } from '../../../elements/kpiDecomposition/types';\nimport { ContentInstructions, CoreContents } from '../../../types';\nimport { DataOptionsFactory } from '../data';\nimport { ContentFactory } from './base';\n\nexport type KpiDecompositionOptions = {\n data?: DataOptionsFactory;\n periodName: string;\n decomposedKpi: string;\n contributingKpis: ContributionKpiConfig[];\n};\n\nexport class KpiDecompositionFactory extends ContentFactory {\n constructor(options: KpiDecompositionOptions) {\n const { data, decomposedKpi, contributingKpis, periodName } = options;\n\n const instructions: ContentInstructions = {\n periodName:\n typeof periodName === 'string'\n ? {\n type: 'StringInstruction',\n instruction: periodName,\n }\n : periodName,\n decomposedKpi:\n typeof decomposedKpi === 'string'\n ? {\n type: 'StringInstruction',\n instruction: decomposedKpi,\n }\n : decomposedKpi,\n contributingKpis: {\n type: 'ObjectInstruction',\n instruction: contributingKpis,\n },\n };\n\n super(CoreContents.kpiDecompositon, {\n data: data || DataOptionsFactory.asReceiver(),\n instructions,\n });\n }\n}\n","import { PageDsl, PageHeading, SettingsProvider } from '../../../types';\nimport { SectionFactory } from '../section/base';\n\nexport type PageDslOptions = {\n heading: PageHeading;\n sections: SectionFactory[];\n settingsProvider?: SettingsProvider;\n};\n\nexport class PageDslFactory {\n heading: PageHeading;\n sections: SectionFactory[];\n settings: SettingsProvider;\n\n constructor(options: PageDslOptions) {\n this.heading = options.heading;\n this.sections = options.sections;\n this.settings = options.settingsProvider;\n }\n\n build(): PageDsl {\n return {\n heading: this.heading,\n sections: this.sections.map(section => section._build()),\n settings: this.settings || {\n values: {},\n dataSettings: [],\n metadata: {},\n },\n };\n }\n}\n","import { BaseSection, Section, SectionType } from '../../../types';\n\nexport interface SectionOptions {\n title?: string;\n}\n\nexport abstract class SectionFactory {\n private title?: string;\n\n constructor(options: SectionOptions = {}) {\n this.title = options.title;\n }\n\n _build(): Section {\n const base: BaseSection = {\n type: SectionType.unknown,\n title: this.title,\n };\n\n return this.__build(base);\n }\n\n abstract __build(base: BaseSection): Section;\n}\n","import { BaseSection, ColumnSection, SectionColumnWidth, SectionType } from '../../../types';\nimport { ComponentFactory } from '../component';\nimport { SectionFactory, SectionOptions } from './base';\n\nexport type ColumnSectionOptions = {\n columns: Column[];\n options?: SectionOptions;\n};\n\ntype Column = {\n width: SectionColumnWidth;\n component: ComponentFactory;\n};\n\nexport class ColumnSectionFactory extends SectionFactory {\n columns: Column[];\n\n constructor(options: ColumnSectionOptions) {\n super(options.options);\n this.columns = options.columns;\n }\n\n __build(base: BaseSection): ColumnSection {\n return {\n ...base,\n type: SectionType.column,\n columns: this.columns.map(col => ({\n width: col.width,\n component: col.component._build(),\n })),\n };\n }\n}\n","import { BaseSection, SectionTab, SectionType, TabbedSection } from '../../../types';\nimport { SectionFactory, SectionOptions } from './base';\n\nexport type TabbedSectionOptions = {\n tabs: SectionTab[];\n activeTab: string;\n options?: SectionOptions;\n};\n\nexport class TabbedSectionFactory extends SectionFactory {\n tabs: SectionTab[];\n activeTab: string;\n\n constructor(options: TabbedSectionOptions) {\n super(options.options);\n this.tabs = options.tabs;\n this.activeTab = options.activeTab;\n }\n\n __build(base: BaseSection): TabbedSection {\n return {\n ...base,\n type: SectionType.tabbed,\n tabs: this.tabs.map(tab => ({\n name: tab.name,\n label: tab.label,\n path: tab.path,\n })),\n activeTab: this.activeTab,\n };\n }\n}\n","import {\n BooleanInstruction,\n CallToAction,\n FromSettingsInstruction,\n MenuItemDataColumns,\n MenuItemLabel,\n MenuItemOption,\n MenuItemSeparator,\n MenuItemSubMenu,\n NavigateToPathAction,\n NavigateToRouteAction,\n NumberInstruction,\n ObjectInstruction,\n SelectionMenu,\n StringInstruction,\n StringListInstruction,\n TitleSelector,\n SettingsPayload,\n PageTitleSelector,\n OpenModalAction,\n Params,\n MenuItemWithContext,\n} from '../../types';\nimport { ComponentFactory, ComponentOptions } from './component';\nimport { ModalDslFactory, ModalDslOptions } from './modal';\nimport {\n ContentFactory,\n ContentOptions,\n KeyIndicatorOptions,\n KeyIndicatorsFactory,\n LeaderboardFactory,\n LeaderboardOptions,\n MultiKpiFactory,\n MultiKpiOptions,\n SegmentationFactory,\n SegmentationOptions,\n StatsTableFactory,\n StatsTableOptions,\n TimeSeriesFactory,\n TimeSeriesOptions,\n KpiTrendsOptions,\n KpiTrendsFactory,\n BillboardFactory,\n BillboardOptions,\n AlertPanelFactory,\n AlertPanelOptions,\n SingleKpiTrendOptions,\n SingleKpiTrendFactory,\n HeatmapFactory,\n HeatmapOptions,\n KpiDecompositionFactory,\n KpiDecompositionOptions,\n} from './content';\nimport { DataOptionsFactory } from './data';\nimport { PageDslFactory, PageDslOptions } from './page';\nimport { ColumnSectionFactory, ColumnSectionOptions, TabbedSectionFactory, TabbedSectionOptions } from './section';\n\nexport class CoreFactories {\n private constructor() {}\n\n static page = {\n dsl(options: PageDslOptions): PageDslFactory {\n return new PageDslFactory(options);\n },\n title: {\n selector(option: PageTitleSelector) {\n return option;\n },\n },\n };\n\n static modal(options: ModalDslOptions): ModalDslFactory {\n return new ModalDslFactory(options);\n }\n\n static sections = {\n column(options: ColumnSectionOptions) {\n return new ColumnSectionFactory(options);\n },\n tabbed(options: TabbedSectionOptions) {\n return new TabbedSectionFactory(options);\n },\n };\n\n static component = {\n dsl(name: string, options: ComponentOptions): ComponentFactory {\n return new ComponentFactory(name, options);\n },\n title: {\n selector(options: TitleSelector): TitleSelector {\n return options;\n },\n },\n callToAction(options: CallToAction): CallToAction {\n return options;\n },\n };\n\n static data = {\n asProvider: DataOptionsFactory.asProvider,\n withData: DataOptionsFactory.withData,\n asReceiver: DataOptionsFactory.asReceiver,\n };\n\n static content = {\n custom(type: string, options?: ContentOptions): ContentFactory {\n return new ContentFactory(type, options);\n },\n leaderboard(options: LeaderboardOptions): LeaderboardFactory {\n return new LeaderboardFactory(options);\n },\n multiKpi(options: MultiKpiOptions): MultiKpiFactory {\n return new MultiKpiFactory(options);\n },\n segmentation(options: SegmentationOptions): SegmentationFactory {\n return new SegmentationFactory(options);\n },\n statsTable(options: StatsTableOptions): StatsTableFactory {\n return new StatsTableFactory(options);\n },\n timeSeries(options: TimeSeriesOptions): TimeSeriesFactory {\n return new TimeSeriesFactory(options);\n },\n keyIndicators(options: KeyIndicatorOptions): KeyIndicatorsFactory {\n return new KeyIndicatorsFactory(options);\n },\n kpiTrends(options: KpiTrendsOptions): KpiTrendsFactory {\n return new KpiTrendsFactory(options);\n },\n singleKpiTrend(options: SingleKpiTrendOptions): SingleKpiTrendFactory {\n return new SingleKpiTrendFactory(options);\n },\n billboard(options: BillboardOptions): BillboardFactory {\n return new BillboardFactory(options);\n },\n alertPanel(options: AlertPanelOptions): AlertPanelFactory {\n return new AlertPanelFactory(options);\n },\n heatmap(options: HeatmapOptions): HeatmapFactory {\n return new HeatmapFactory(options);\n },\n kpiDecomposition(options: KpiDecompositionOptions): ContentFactory {\n return new KpiDecompositionFactory(options);\n },\n };\n\n static contentInstruction = {\n fromSettingInstruction(settingName: string): FromSettingsInstruction {\n return {\n type: 'FromSettingsInstruction',\n instruction: settingName,\n };\n },\n stringInstruction(value: string): StringInstruction {\n return {\n type: 'StringInstruction',\n instruction: value,\n };\n },\n stringListInstruction(value: string[]): StringListInstruction {\n return {\n type: 'StringListInstruction',\n instruction: value,\n };\n },\n booleanInstruction(value: boolean): BooleanInstruction {\n return {\n type: 'BooleanInstruction',\n instruction: value,\n };\n },\n numberInstruction(value: number): NumberInstruction {\n return {\n type: 'NumberInstruction',\n instruction: value,\n };\n },\n objectInstruction(value: unknown): ObjectInstruction {\n return {\n type: 'ObjectInstruction',\n instruction: value,\n };\n },\n };\n\n static uiAction = {\n navigateToPath(path: string, settings?: SettingsPayload): NavigateToPathAction {\n return {\n type: 'NAVIGATE_TO_PATH',\n payload: {\n path,\n settings,\n },\n };\n },\n navigateToRoute(slug: string, args?: Record<string, string[]>, settings?: SettingsPayload): NavigateToRouteAction {\n return {\n type: 'NAVIGATE_TO_ROUTE',\n payload: {\n slug,\n args,\n settings,\n },\n };\n },\n openModal(name: string, endpoint: string, params?: Params): OpenModalAction {\n return {\n type: 'OPEN_MODAL',\n payload: {\n name,\n endpoint,\n params,\n },\n };\n },\n };\n\n static selectionMenu = {\n menu(options: SelectionMenu): SelectionMenu {\n return options;\n },\n subMenu(options: Omit<MenuItemSubMenu, 'type'>): MenuItemSubMenu {\n return {\n type: 'MenuSubMenu',\n ...options,\n };\n },\n item(options: Omit<MenuItemOption, 'type'>): MenuItemOption {\n return {\n type: 'MenuItem',\n ...options,\n };\n },\n items(options: Omit<MenuItemOption, 'type'>[]): MenuItemOption[] {\n return options.map(option => ({\n type: 'MenuItem',\n ...option,\n }));\n },\n columns(options: Omit<MenuItemDataColumns, 'type'>): MenuItemDataColumns {\n return {\n type: 'DataColumns',\n ...options,\n };\n },\n separator(): MenuItemSeparator {\n return {\n type: 'MenuSeparator',\n };\n },\n label(options: Omit<MenuItemLabel, 'type'>): MenuItemLabel {\n return {\n type: 'MenuLabel',\n ...options,\n };\n },\n itemWithContext(options: Omit<MenuItemWithContext, 'type'>): MenuItemWithContext {\n return {\n type: 'MenuItemContext',\n ...options,\n };\n },\n };\n}\n\nexport type { SectionFactory } from './section';\nexport type { ContentFactory } from './content';\n","import { CoreFactories } from '../../bff';\nimport { Formatting } from '../../data/formatting';\nimport { DataStore } from '../../data/store';\nimport {\n ColumnRelationship,\n ColumnType,\n DataColumn,\n DataRow,\n Entity,\n KpiWithChangeColumn,\n MenuItemOption,\n} from '../../types';\nimport {\n IndicatorColumnConfig,\n IndicatorColumnInfo,\n IndicatorConfig,\n IndicatorInfo,\n IndicatorRow,\n IndicatorSparkInfo,\n} from './types';\n\nexport function makeIndicatorInfo(\n data: DataStore,\n options: {\n configs: IndicatorConfig[];\n grouping: string;\n fixedItems?: string[];\n limitedItems?: string[];\n }\n): { rows: IndicatorRow[]; rowItems: MenuItemOption[] } {\n const { configs, grouping, fixedItems, limitedItems } = options;\n\n const rowNames = new Set<string>();\n const rowIdentifiers: Entity[] = [];\n const dataRows: DataRow[] = [];\n const groupedData = data.getGroupedData([grouping]);\n const candidateRows = groupedData.flatMap(g => g.data);\n\n const addEverything = !fixedItems?.length && !limitedItems?.length;\n\n candidateRows.forEach(row => {\n const checkValue = String(row.values[grouping]);\n\n const isFixed = fixedItems?.includes(checkValue);\n const isLimited = limitedItems?.includes(checkValue);\n\n if (addEverything || isFixed || isLimited) {\n dataRows.push(row);\n }\n\n const [value, label] = getRowIdentifiers(row, data.getDataColumns(), grouping);\n if (!rowNames.has(value)) {\n rowNames.add(value);\n rowIdentifiers.push({\n value,\n label,\n });\n }\n });\n\n const unSortedRows: IndicatorRow[] = [];\n\n dataRows.forEach(row => {\n const [value, label] = getRowIdentifiers(row, data.getDataColumns(), grouping);\n\n const indicatorRow: IndicatorRow = {\n value: value ? value : undefined,\n label,\n indicators: [],\n isFixed: addEverything || fixedItems?.includes(value),\n };\n\n configs.forEach(config => {\n const { column, secondaryColumn, hideChange = false, includeSpark } = config;\n\n const info: IndicatorInfo = {\n mainColumn: makeColumnInfo(row, data, column, hideChange),\n secondaryColumn: secondaryColumn && makeColumnInfo(row, data, secondaryColumn, hideChange),\n sparkLine: includeSpark && makeSparkInfo(row, data, column),\n clickAction: config.clickAction,\n };\n\n indicatorRow.indicators.push(info);\n });\n\n unSortedRows.push(indicatorRow);\n });\n\n const sortedRows: IndicatorRow[] = addEverything ? unSortedRows : [];\n if (!addEverything) {\n fixedItems?.forEach(id => {\n const row = unSortedRows.find(row => row.value === id);\n if (row) {\n row.isFixed = true;\n sortedRows.push(row);\n }\n });\n\n limitedItems?.forEach(id => {\n const row = unSortedRows.find(row => row.value === id);\n if (row) {\n row.isFixed = false;\n sortedRows.push(row);\n }\n });\n }\n\n rowIdentifiers.sort((a, b) => a.label.localeCompare(b.label));\n\n return {\n rows: sortedRows,\n rowItems: CoreFactories.selectionMenu.items(rowIdentifiers),\n };\n}\n\nfunction getRowIdentifiers(\n row: DataRow,\n columns: DataColumn[],\n grouping: string\n): [value: string | undefined, name: string | undefined] {\n let rowValue: string | undefined;\n let rowLabel: string | undefined;\n\n const identifiers = DataStore.getRowIdentifiers(row, columns, grouping);\n if (identifiers) {\n rowValue = identifiers.id;\n rowLabel = identifiers.name;\n } else {\n const groupingColumn = columns.find(col => col.name === grouping);\n if (groupingColumn) {\n rowValue = String(row.values[groupingColumn.name]);\n const descColumn = columns.find(\n col => col.relatedTo === groupingColumn.name && col.relationship === ColumnRelationship.Description\n );\n rowLabel = descColumn ? String(row.values[descColumn.name]) : 'nope';\n }\n }\n\n return [rowValue, rowLabel];\n}\n\nfunction makeSparkInfo(row: DataRow, data: DataStore, config: IndicatorColumnConfig): IndicatorSparkInfo | undefined {\n const { name } = config;\n const column = data.getDataColumns().find(col => col.name === name);\n const currency = data.getCurrency();\n\n if (!column) {\n return;\n }\n\n const values = row.values[column.name];\n if (!Array.isArray(values)) {\n return;\n }\n\n let isNegative = values[values.length - 1] < values[0];\n const startValue = Formatting.format(values[0], {\n dataType: column.dataType,\n formatHint: column.formatHint,\n currency,\n });\n const endValue = Formatting.format(values[values.length - 1], {\n dataType: column.dataType,\n formatHint: column.formatHint,\n currency,\n });\n\n return {\n values,\n isNegative,\n startValue,\n endValue,\n };\n}\n\nfunction makeColumnInfo(\n row: DataRow,\n data: DataStore,\n config: IndicatorColumnConfig,\n hideChange: boolean\n): IndicatorColumnInfo {\n const { name, label } = config;\n const column = data.getDataColumns().find(col => col.name === name);\n const currency = data.getCurrency();\n\n if (!column) {\n return {\n label: label || `${name} NOT FOUND`,\n value: `??`,\n name: name,\n };\n }\n\n const rawValue = DataStore.getCellsLatestValue(row, column.name);\n let textValue = '-';\n let columnLabel = label || column.label;\n\n if (rawValue === null) {\n return {\n label: columnLabel,\n value: textValue,\n name: column.name,\n };\n }\n\n textValue = Formatting.format(rawValue, {\n dataType: column.dataType,\n formatHint: column.formatHint,\n currency,\n });\n\n const info: IndicatorColumnInfo = {\n label: columnLabel,\n value: textValue,\n name: column.name,\n };\n\n if (!hideChange && column.type === ColumnType.KpiWithChange) {\n const withChangeColumn = column as KpiWithChangeColumn;\n const rawChangeValue = DataStore.getCellsLatestValue(row, withChangeColumn.changeName);\n const textChangeValue = Formatting.format(rawChangeValue, {\n dataType: withChangeColumn.changeDataType,\n formatHint: withChangeColumn.changeFormatHint,\n isChange: true,\n currency,\n });\n\n info.changeRaw = rawChangeValue;\n info.changeValue = textChangeValue;\n }\n\n return info;\n}\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./indicators.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./indicators.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, { useEffect, useRef } from 'react';\nimport { IndicatorSparkInfo } from './types';\n\ntype Props = {\n info: IndicatorSparkInfo;\n};\nfunction SparkLine({ info }: Props) {\n const el = useRef<HTMLCanvasElement>(null);\n\n useEffect(() => {\n if (!el.current) {\n return;\n }\n\n const canvas = el.current;\n const canvasRect = canvas.getBoundingClientRect();\n canvas.width = canvasRect.width;\n canvas.height = canvasRect.height;\n canvas.style.width = `${canvasRect.width}px`;\n canvas.style.height = `${canvasRect.height}px`;\n\n const maxValue = Math.max(...info.values);\n const tickLength = (canvas.width - 5) / (info.values.length - 1);\n const ticks: (number | null)[] = [];\n info.values.forEach(value => {\n if (value === null) {\n ticks.push(null);\n } else {\n const tickHeight = (value / maxValue) * canvas.height;\n ticks.push(tickHeight);\n }\n });\n\n const maxTick = Math.max(...ticks);\n const minTick = Math.min(...ticks);\n const offset = (canvas.height - (maxTick - minTick)) / 2;\n\n const ctx = canvas.getContext('2d');\n ctx.lineWidth = 1;\n ctx.lineCap = 'round';\n ctx.lineJoin = 'round';\n ctx.strokeStyle = info.isNegative ? '#BC1C0E' : '#167922';\n ctx.translate(0.5, 0.5); // half the line width to straddle the pixels\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.beginPath();\n\n let x = 0;\n let y = 0;\n ticks.forEach((tick, idx) => {\n if (idx === 0) {\n x = 0;\n y = canvas.height - tick + offset;\n ctx.moveTo(x, y);\n } else {\n x = idx * tickLength;\n y = canvas.height - tick + offset;\n ctx.lineTo(x, y);\n }\n });\n\n ctx.arc(x, y, 1.5, 0, 2 * Math.PI);\n ctx.stroke();\n ctx.translate(-0.5, -0.5); // reset\n }, [info]);\n\n const { isNegative, startValue, endValue } = info;\n\n return (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-lighter\">{startValue}</span>\n <canvas ref={el} className=\"block relative h-6 flex-grow flex-shrink-0\" />\n <span className={`text-sm ${isNegative ? 'text-ui-red' : 'text-ui-green'}`}>{endValue}</span>\n </div>\n );\n}\n\nexport { SparkLine };\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./card.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./card.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, { ReactNode, useState } from 'react';\nimport './card.css';\n\ntype Props = {\n onClick?: () => void;\n linkText?: string;\n children: ReactNode;\n outerCss?: string;\n innerCss?: string;\n asCard?: boolean;\n};\nfunction ClickableCard({ children, linkText, onClick, outerCss, innerCss, asCard = true }: Props) {\n const [hovering, setHovering] = useState<boolean>(false);\n\n return (\n <div\n onClick={onClick}\n role={onClick !== undefined ? 'button' : 'none'}\n className={`block relative ${outerCss || ''}`}\n onMouseEnter={() => setHovering(true)}\n onMouseLeave={() => setHovering(false)}\n >\n <div\n className={`relative transition-all ${asCard ? 'pt-3 px-4 pb-4 rounded-2 bg-white' : ''} ${\n onClick ? 'cursor-pointer' : ''\n } ${onClick && hovering ? 'bg-brand-lightest' : ''} ${innerCss || ''}`}\n >\n {children}\n </div>\n {onClick && (\n <div\n className={`absolute cursor-pointer rounded-bl-2 rounded-br-2 left-0 right-0 top-full text-brand font-bold text-xs bg-brand-lightest transition-all ${\n hovering ? 'h-4 shadow-sm' : 'h-0'\n }`}\n >\n <span\n className={`absolute block bottom-0 left-0 px-4 pb-2 transition-opacity cursor-pointer ${\n hovering ? 'visible opacity-1' : 'hidden opacity-0'\n }`}\n >\n {linkText || 'Clickable'}\n </span>\n </div>\n )}\n </div>\n );\n}\n\nexport { ClickableCard };\n","import React from 'react';\nimport { IndicatorInfo } from './types';\nimport { Loading } from '../../design/loading/Loading';\nimport { SparkLine } from './spark';\nimport { ClickableCard } from '../../design/clickable.card/card';\nimport { useUiAction } from '../../ui.actions';\nimport { useAnalyticsContext } from '../../analytics/analytics.provider';\nimport { trackPageElementClicked } from '../../analytics/utils';\nimport { NBSP } from '../constants';\n\ntype Props = {\n rowValue?: string;\n info?: IndicatorInfo;\n isLoading: boolean;\n isClickable?: boolean;\n};\nfunction IndicatorCard({ info, isLoading, rowValue, isClickable = true }: Props) {\n const { perform } = useUiAction();\n\n const { trackPageEvent } = useAnalyticsContext();\n\n const handleClick = () => {\n if (!info?.clickAction) {\n return;\n }\n\n trackPageElementClicked(trackPageEvent, info.clickAction.tracking.eventName, info.clickAction.tracking);\n\n perform(info.clickAction.action, {\n column: [info.mainColumn.name],\n target: rowValue ? [rowValue] : [],\n });\n };\n\n return (\n <ClickableCard\n outerCss=\"indicator-card\"\n innerCss={`${isLoading ? 'h-28' : ''}`}\n onClick={isClickable && info?.clickAction?.action && !isLoading ? handleClick : undefined}\n linkText={info?.clickAction?.label}\n >\n <Loading isActive={info === undefined || isLoading} withIndicator />\n <div className=\"flex items-stretch justify-between\">\n {info?.mainColumn && (\n <div>\n <div className=\"text-md\">{info.mainColumn.label}</div>\n <div className=\"text-3xl font-bold\">{info.mainColumn.value}</div>\n <div className={`font-bold ${info.mainColumn.changeRaw < 0 ? 'text-ui-red' : 'text-ui-green'}`}>\n {info.mainColumn.changeValue ?? NBSP}\n </div>\n </div>\n )}\n {info?.secondaryColumn && (\n <div className=\"text-right\">\n <div className=\"text-md\">{info.secondaryColumn.label}</div>\n <div className=\"text-3xl\">{info.secondaryColumn.value}</div>\n <div className={`${info.secondaryColumn.changeRaw < 0 ? 'text-ui-red' : 'text-ui-green'}`}>\n {info.secondaryColumn.changeValue ?? NBSP}\n </div>\n </div>\n )}\n </div>\n {info?.sparkLine && <SparkLine info={info.sparkLine} />}\n </ClickableCard>\n );\n}\n\nexport { IndicatorCard };\n","export const NBSP = '\\u00A0';\n","import { FilterSections, FilterDefinition } from '../../types/content/filter.types';\n\nexport const mapDefinitions = (sections: FilterSections[]): FilterDefinition[] => {\n const mappedDefinitions = [];\n sections.forEach(section => {\n mappedDefinitions.push(section.ungrouped?.definitions);\n section.grouped?.forEach(group => {\n mappedDefinitions.push(group.definitions);\n });\n });\n return mappedDefinitions.flat();\n};\n","import { ContextManager } from '../../context/manager';\nimport { mapDefinitions } from './mapDefinitions';\nimport { Entity, ExportHeaderSettings, Filters } from '../../types';\nimport { FilterSections, FilterType } from '../../types//content/filter.types';\nimport { adjustNumericFilter } from '../../filters/utils';\n\nconst getHeaderValues = (\n keys: { label: string; valueKey: string }[],\n contextValues: {\n values: Record<string, Entity[]>;\n definitions?: { name: string; type?: FilterType }[];\n sections?: FilterSections[];\n }\n): [string, string][] => {\n const headerValues: [string, string][] = [];\n\n if (!keys || !contextValues) {\n return headerValues;\n }\n\n keys.forEach(key => {\n const definitions = contextValues.sections ? mapDefinitions(contextValues.sections) : contextValues.definitions;\n const settingDefinition = definitions.find(x => x.name === key.valueKey);\n const settingValue = contextValues.values[key.valueKey];\n if (!settingDefinition) {\n return;\n }\n\n const stringValue = !settingValue ? '' : settingValue.map(x => x.label).join(', ');\n const value = adjustNumericFilter(settingDefinition.type, stringValue);\n headerValues.push([key.label, value]);\n });\n\n return headerValues;\n};\n\nconst getFiltersText = (filters: Filters, headerSettings: ExportHeaderSettings): string => {\n if (!filters) {\n return '';\n }\n const usedFilterKeys = headerSettings.filterValues.map(value => value.valueKey);\n const restFilterKeys = Object.keys(filters.values).filter(name => !usedFilterKeys.includes(name));\n const definitions = mapDefinitions(filters.sections);\n\n const restFilterKeysWithValues = restFilterKeys\n .filter(key => filters.values[key]?.length > 0)\n .map(key => ({\n valueKey: key,\n label: definitions.find(x => x.name === key)?.label,\n }))\n .filter(x => x.label !== undefined);\n\n const restFilterValues = getHeaderValues(restFilterKeysWithValues, filters);\n const filtersText = restFilterValues.map(values => `${values[0]}: ${values[1]}`).join(' | ');\n return filtersText;\n};\n\nexport const getExportContext = (fileHeaderSettings: ExportHeaderSettings | null): [string, string][] => {\n if (!fileHeaderSettings) {\n return [];\n }\n\n const context = ContextManager.getInstance().get();\n const settings = getHeaderValues(fileHeaderSettings.settingValues, context.settings);\n const filters = getHeaderValues(fileHeaderSettings.filterValues, context.filters);\n const restFiltersText = getFiltersText(context.filters, fileHeaderSettings);\n const restFilters: [string, string] = ['Filters', restFiltersText];\n\n return [\n ...(fileHeaderSettings.customValues || []),\n ...(settings || []),\n ...(filters || []),\n ...(context.filters ? [restFilters] : []),\n ];\n};\n","import { DataType, FormatHint } from '../../types';\nimport { ColumnType, DataCell } from '@ecosystem/export-api';\n\nexport const mapValueToDataCell = (\n value: number | string | null,\n formatHint?: FormatHint,\n dataType?: DataType\n): DataCell => {\n if (value === null || value === undefined) {\n return {\n type: ColumnType.Text,\n value: '-',\n };\n }\n\n const defaultFormat = {\n type: typeof value === 'number' ? ColumnType.Number : ColumnType.Text,\n value: value,\n };\n if (formatHint) {\n switch (formatHint) {\n case FormatHint.Money:\n return {\n type: ColumnType.Currency,\n value: value,\n };\n case FormatHint.Percentage:\n return {\n type: ColumnType.Percentage,\n customFormat: '0.0%',\n value: value,\n };\n case FormatHint.PercentagePoints:\n return {\n type: ColumnType.PercentagePoint,\n customFormat: '0.00\"pp\"',\n value: (value as number) * 100,\n };\n default:\n return defaultFormat;\n }\n } else {\n switch (dataType) {\n case DataType.Integer:\n return {\n type: ColumnType.Number,\n customFormat: '#,##0',\n value: value,\n };\n case DataType.Decimal:\n return {\n type: ColumnType.Number,\n customFormat: '0.00',\n value: value,\n };\n default:\n return defaultFormat;\n }\n }\n};\n","export const formatLabel = (label: string | string[]) => (Array.isArray(label) ? label.join(' ') : label);\n","// these aren't really private, but nor are they really useful to document\n\n/**\n * @private\n */\nclass LuxonError extends Error {}\n\n/**\n * @private\n */\nexport class InvalidDateTimeError extends LuxonError {\n constructor(reason) {\n super(`Invalid DateTime: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidIntervalError extends LuxonError {\n constructor(reason) {\n super(`Invalid Interval: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidDurationError extends LuxonError {\n constructor(reason) {\n super(`Invalid Duration: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class ConflictingSpecificationError extends LuxonError {}\n\n/**\n * @private\n */\nexport class InvalidUnitError extends LuxonError {\n constructor(unit) {\n super(`Invalid unit ${unit}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidArgumentError extends LuxonError {}\n\n/**\n * @private\n */\nexport class ZoneIsAbstractError extends LuxonError {\n constructor() {\n super(\"Zone is an abstract class\");\n }\n}\n","/**\n * @private\n */\n\nconst n = \"numeric\",\n s = \"short\",\n l = \"long\";\n\nexport const DATE_SHORT = {\n year: n,\n month: n,\n day: n,\n};\n\nexport const DATE_MED = {\n year: n,\n month: s,\n day: n,\n};\n\nexport const DATE_MED_WITH_WEEKDAY = {\n year: n,\n month: s,\n day: n,\n weekday: s,\n};\n\nexport const DATE_FULL = {\n year: n,\n month: l,\n day: n,\n};\n\nexport const DATE_HUGE = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n};\n\nexport const TIME_SIMPLE = {\n hour: n,\n minute: n,\n};\n\nexport const TIME_WITH_SECONDS = {\n hour: n,\n minute: n,\n second: n,\n};\n\nexport const TIME_WITH_SHORT_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n timeZoneName: s,\n};\n\nexport const TIME_WITH_LONG_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n timeZoneName: l,\n};\n\nexport const TIME_24_SIMPLE = {\n hour: n,\n minute: n,\n hourCycle: \"h23\",\n};\n\nexport const TIME_24_WITH_SECONDS = {\n hour: n,\n minute: n,\n second: n,\n hourCycle: \"h23\",\n};\n\nexport const TIME_24_WITH_SHORT_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n hourCycle: \"h23\",\n timeZoneName: s,\n};\n\nexport const TIME_24_WITH_LONG_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n hourCycle: \"h23\",\n timeZoneName: l,\n};\n\nexport const DATETIME_SHORT = {\n year: n,\n month: n,\n day: n,\n hour: n,\n minute: n,\n};\n\nexport const DATETIME_SHORT_WITH_SECONDS = {\n year: n,\n month: n,\n day: n,\n hour: n,\n minute: n,\n second: n,\n};\n\nexport const DATETIME_MED = {\n year: n,\n month: s,\n day: n,\n hour: n,\n minute: n,\n};\n\nexport const DATETIME_MED_WITH_SECONDS = {\n year: n,\n month: s,\n day: n,\n hour: n,\n minute: n,\n second: n,\n};\n\nexport const DATETIME_MED_WITH_WEEKDAY = {\n year: n,\n month: s,\n day: n,\n weekday: s,\n hour: n,\n minute: n,\n};\n\nexport const DATETIME_FULL = {\n year: n,\n month: l,\n day: n,\n hour: n,\n minute: n,\n timeZoneName: s,\n};\n\nexport const DATETIME_FULL_WITH_SECONDS = {\n year: n,\n month: l,\n day: n,\n hour: n,\n minute: n,\n second: n,\n timeZoneName: s,\n};\n\nexport const DATETIME_HUGE = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n hour: n,\n minute: n,\n timeZoneName: l,\n};\n\nexport const DATETIME_HUGE_WITH_SECONDS = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n hour: n,\n minute: n,\n second: n,\n timeZoneName: l,\n};\n","import { ZoneIsAbstractError } from \"./errors.js\";\n\n/**\n * @interface\n */\nexport default class Zone {\n /**\n * The type of zone\n * @abstract\n * @type {string}\n */\n get type() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * The name of this zone.\n * @abstract\n * @type {string}\n */\n get name() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * The IANA name of this zone.\n * Defaults to `name` if not overwritten by a subclass.\n * @abstract\n * @type {string}\n */\n get ianaName() {\n return this.name;\n }\n\n /**\n * Returns whether the offset is known to be fixed for the whole year.\n * @abstract\n * @type {boolean}\n */\n get isUniversal() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Returns the offset's common name (such as EST) at the specified timestamp\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to get the name\n * @param {Object} opts - Options to affect the format\n * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'.\n * @param {string} opts.locale - What locale to return the offset name in.\n * @return {string}\n */\n offsetName(ts, opts) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Returns the offset's value as a string\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\n formatOffset(ts, format) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return the offset in minutes for this zone at the specified timestamp.\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to compute the offset\n * @return {number}\n */\n offset(ts) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return whether this Zone is equal to another zone\n * @abstract\n * @param {Zone} otherZone - the zone to compare\n * @return {boolean}\n */\n equals(otherZone) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return whether this Zone is valid.\n * @abstract\n * @type {boolean}\n */\n get isValid() {\n throw new ZoneIsAbstractError();\n }\n}\n","import { formatOffset, parseZoneInfo } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * Represents the local zone for this JavaScript environment.\n * @implements {Zone}\n */\nexport default class SystemZone extends Zone {\n /**\n * Get a singleton instance of the local zone\n * @return {SystemZone}\n */\n static get instance() {\n if (singleton === null) {\n singleton = new SystemZone();\n }\n return singleton;\n }\n\n /** @override **/\n get type() {\n return \"system\";\n }\n\n /** @override **/\n get name() {\n return new Intl.DateTimeFormat().resolvedOptions().timeZone;\n }\n\n /** @override **/\n get isUniversal() {\n return false;\n }\n\n /** @override **/\n offsetName(ts, { format, locale }) {\n return parseZoneInfo(ts, format, locale);\n }\n\n /** @override **/\n formatOffset(ts, format) {\n return formatOffset(this.offset(ts), format);\n }\n\n /** @override **/\n offset(ts) {\n return -new Date(ts).getTimezoneOffset();\n }\n\n /** @override **/\n equals(otherZone) {\n return otherZone.type === \"system\";\n }\n\n /** @override **/\n get isValid() {\n return true;\n }\n}\n","import { formatOffset, parseZoneInfo, isUndefined, objToLocalTS } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet dtfCache = {};\nfunction makeDTF(zone) {\n if (!dtfCache[zone]) {\n dtfCache[zone] = new Intl.DateTimeFormat(\"en-US\", {\n hour12: false,\n timeZone: zone,\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n era: \"short\",\n });\n }\n return dtfCache[zone];\n}\n\nconst typeToPos = {\n year: 0,\n month: 1,\n day: 2,\n era: 3,\n hour: 4,\n minute: 5,\n second: 6,\n};\n\nfunction hackyOffset(dtf, date) {\n const formatted = dtf.format(date).replace(/\\u200E/g, \"\"),\n parsed = /(\\d+)\\/(\\d+)\\/(\\d+) (AD|BC),? (\\d+):(\\d+):(\\d+)/.exec(formatted),\n [, fMonth, fDay, fYear, fadOrBc, fHour, fMinute, fSecond] = parsed;\n return [fYear, fMonth, fDay, fadOrBc, fHour, fMinute, fSecond];\n}\n\nfunction partsOffset(dtf, date) {\n const formatted = dtf.formatToParts(date);\n const filled = [];\n for (let i = 0; i < formatted.length; i++) {\n const { type, value } = formatted[i];\n const pos = typeToPos[type];\n\n if (type === \"era\") {\n filled[pos] = value;\n } else if (!isUndefined(pos)) {\n filled[pos] = parseInt(value, 10);\n }\n }\n return filled;\n}\n\nlet ianaZoneCache = {};\n/**\n * A zone identified by an IANA identifier, like America/New_York\n * @implements {Zone}\n */\nexport default class IANAZone extends Zone {\n /**\n * @param {string} name - Zone name\n * @return {IANAZone}\n */\n static create(name) {\n if (!ianaZoneCache[name]) {\n ianaZoneCache[name] = new IANAZone(name);\n }\n return ianaZoneCache[name];\n }\n\n /**\n * Reset local caches. Should only be necessary in testing scenarios.\n * @return {void}\n */\n static resetCache() {\n ianaZoneCache = {};\n dtfCache = {};\n }\n\n /**\n * Returns whether the provided string is a valid specifier. This only checks the string's format, not that the specifier identifies a known zone; see isValidZone for that.\n * @param {string} s - The string to check validity on\n * @example IANAZone.isValidSpecifier(\"America/New_York\") //=> true\n * @example IANAZone.isValidSpecifier(\"Sport~~blorp\") //=> false\n * @deprecated For backward compatibility, this forwards to isValidZone, better use `isValidZone()` directly instead.\n * @return {boolean}\n */\n static isValidSpecifier(s) {\n return this.isValidZone(s);\n }\n\n /**\n * Returns whether the provided string identifies a real zone\n * @param {string} zone - The string to check\n * @example IANAZone.isValidZone(\"America/New_York\") //=> true\n * @example IANAZone.isValidZone(\"Fantasia/Castle\") //=> false\n * @example IANAZone.isValidZone(\"Sport~~blorp\") //=> false\n * @return {boolean}\n */\n static isValidZone(zone) {\n if (!zone) {\n return false;\n }\n try {\n new Intl.DateTimeFormat(\"en-US\", { timeZone: zone }).format();\n return true;\n } catch (e) {\n return false;\n }\n }\n\n constructor(name) {\n super();\n /** @private **/\n this.zoneName = name;\n /** @private **/\n this.valid = IANAZone.isValidZone(name);\n }\n\n /**\n * The type of zone. `iana` for all instances of `IANAZone`.\n * @override\n * @type {string}\n */\n get type() {\n return \"iana\";\n }\n\n /**\n * The name of this zone (i.e. the IANA zone name).\n * @override\n * @type {string}\n */\n get name() {\n return this.zoneName;\n }\n\n /**\n * Returns whether the offset is known to be fixed for the whole year:\n * Always returns false for all IANA zones.\n * @override\n * @type {boolean}\n */\n get isUniversal() {\n return false;\n }\n\n /**\n * Returns the offset's common name (such as EST) at the specified timestamp\n * @override\n * @param {number} ts - Epoch milliseconds for which to get the name\n * @param {Object} opts - Options to affect the format\n * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'.\n * @param {string} opts.locale - What locale to return the offset name in.\n * @return {string}\n */\n offsetName(ts, { format, locale }) {\n return parseZoneInfo(ts, format, locale, this.name);\n }\n\n /**\n * Returns the offset's value as a string\n * @override\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\n formatOffset(ts, format) {\n return formatOffset(this.offset(ts), format);\n }\n\n /**\n * Return the offset in minutes for this zone at the specified timestamp.\n * @override\n * @param {number} ts - Epoch milliseconds for which to compute the offset\n * @return {number}\n */\n offset(ts) {\n const date = new Date(ts);\n\n if (isNaN(date)) return NaN;\n\n const dtf = makeDTF(this.name);\n let [year, month, day, adOrBc, hour, minute, second] = dtf.formatToParts\n ? partsOffset(dtf, date)\n : hackyOffset(dtf, date);\n\n if (adOrBc === \"BC\") {\n year = -Math.abs(year) + 1;\n }\n\n // because we're using hour12 and https://bugs.chromium.org/p/chromium/issues/detail?id=1025564&can=2&q=%2224%3A00%22%20datetimeformat\n const adjustedHour = hour === 24 ? 0 : hour;\n\n const asUTC = objToLocalTS({\n year,\n month,\n day,\n hour: adjustedHour,\n minute,\n second,\n millisecond: 0,\n });\n\n let asTS = +date;\n const over = asTS % 1000;\n asTS -= over >= 0 ? over : 1000 + over;\n return (asUTC - asTS) / (60 * 1000);\n }\n\n /**\n * Return whether this Zone is equal to another zone\n * @override\n * @param {Zone} otherZone - the zone to compare\n * @return {boolean}\n */\n equals(otherZone) {\n return otherZone.type === \"iana\" && otherZone.name === this.name;\n }\n\n /**\n * Return whether this Zone is valid.\n * @override\n * @type {boolean}\n */\n get isValid() {\n return this.valid;\n }\n}\n","import { hasLocaleWeekInfo, hasRelative, padStart, roundTo, validateWeekSettings } from \"./util.js\";\nimport * as English from \"./english.js\";\nimport Settings from \"../settings.js\";\nimport DateTime from \"../datetime.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\n// todo - remap caching\n\nlet intlLFCache = {};\nfunction getCachedLF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let dtf = intlLFCache[key];\n if (!dtf) {\n dtf = new Intl.ListFormat(locString, opts);\n intlLFCache[key] = dtf;\n }\n return dtf;\n}\n\nlet intlDTCache = {};\nfunction getCachedDTF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let dtf = intlDTCache[key];\n if (!dtf) {\n dtf = new Intl.DateTimeFormat(locString, opts);\n intlDTCache[key] = dtf;\n }\n return dtf;\n}\n\nlet intlNumCache = {};\nfunction getCachedINF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let inf = intlNumCache[key];\n if (!inf) {\n inf = new Intl.NumberFormat(locString, opts);\n intlNumCache[key] = inf;\n }\n return inf;\n}\n\nlet intlRelCache = {};\nfunction getCachedRTF(locString, opts = {}) {\n const { base, ...cacheKeyOpts } = opts; // exclude `base` from the options\n const key = JSON.stringify([locString, cacheKeyOpts]);\n let inf = intlRelCache[key];\n if (!inf) {\n inf = new Intl.RelativeTimeFormat(locString, opts);\n intlRelCache[key] = inf;\n }\n return inf;\n}\n\nlet sysLocaleCache = null;\nfunction systemLocale() {\n if (sysLocaleCache) {\n return sysLocaleCache;\n } else {\n sysLocaleCache = new Intl.DateTimeFormat().resolvedOptions().locale;\n return sysLocaleCache;\n }\n}\n\nlet weekInfoCache = {};\nfunction getCachedWeekInfo(locString) {\n let data = weekInfoCache[locString];\n if (!data) {\n const locale = new Intl.Locale(locString);\n // browsers currently implement this as a property, but spec says it should be a getter function\n data = \"getWeekInfo\" in locale ? locale.getWeekInfo() : locale.weekInfo;\n weekInfoCache[locString] = data;\n }\n return data;\n}\n\nfunction parseLocaleString(localeStr) {\n // I really want to avoid writing a BCP 47 parser\n // see, e.g. https://github.com/wooorm/bcp-47\n // Instead, we'll do this:\n\n // a) if the string has no -u extensions, just leave it alone\n // b) if it does, use Intl to resolve everything\n // c) if Intl fails, try again without the -u\n\n // private subtags and unicode subtags have ordering requirements,\n // and we're not properly parsing this, so just strip out the\n // private ones if they exist.\n const xIndex = localeStr.indexOf(\"-x-\");\n if (xIndex !== -1) {\n localeStr = localeStr.substring(0, xIndex);\n }\n\n const uIndex = localeStr.indexOf(\"-u-\");\n if (uIndex === -1) {\n return [localeStr];\n } else {\n let options;\n let selectedStr;\n try {\n options = getCachedDTF(localeStr).resolvedOptions();\n selectedStr = localeStr;\n } catch (e) {\n const smaller = localeStr.substring(0, uIndex);\n options = getCachedDTF(smaller).resolvedOptions();\n selectedStr = smaller;\n }\n\n const { numberingSystem, calendar } = options;\n return [selectedStr, numberingSystem, calendar];\n }\n}\n\nfunction intlConfigString(localeStr, numberingSystem, outputCalendar) {\n if (outputCalendar || numberingSystem) {\n if (!localeStr.includes(\"-u-\")) {\n localeStr += \"-u\";\n }\n\n if (outputCalendar) {\n localeStr += `-ca-${outputCalendar}`;\n }\n\n if (numberingSystem) {\n localeStr += `-nu-${numberingSystem}`;\n }\n return localeStr;\n } else {\n return localeStr;\n }\n}\n\nfunction mapMonths(f) {\n const ms = [];\n for (let i = 1; i <= 12; i++) {\n const dt = DateTime.utc(2009, i, 1);\n ms.push(f(dt));\n }\n return ms;\n}\n\nfunction mapWeekdays(f) {\n const ms = [];\n for (let i = 1; i <= 7; i++) {\n const dt = DateTime.utc(2016, 11, 13 + i);\n ms.push(f(dt));\n }\n return ms;\n}\n\nfunction listStuff(loc, length, englishFn, intlFn) {\n const mode = loc.listingMode();\n\n if (mode === \"error\") {\n return null;\n } else if (mode === \"en\") {\n return englishFn(length);\n } else {\n return intlFn(length);\n }\n}\n\nfunction supportsFastNumbers(loc) {\n if (loc.numberingSystem && loc.numberingSystem !== \"latn\") {\n return false;\n } else {\n return (\n loc.numberingSystem === \"latn\" ||\n !loc.locale ||\n loc.locale.startsWith(\"en\") ||\n new Intl.DateTimeFormat(loc.intl).resolvedOptions().numberingSystem === \"latn\"\n );\n }\n}\n\n/**\n * @private\n */\n\nclass PolyNumberFormatter {\n constructor(intl, forceSimple, opts) {\n this.padTo = opts.padTo || 0;\n this.floor = opts.floor || false;\n\n const { padTo, floor, ...otherOpts } = opts;\n\n if (!forceSimple || Object.keys(otherOpts).length > 0) {\n const intlOpts = { useGrouping: false, ...opts };\n if (opts.padTo > 0) intlOpts.minimumIntegerDigits = opts.padTo;\n this.inf = getCachedINF(intl, intlOpts);\n }\n }\n\n format(i) {\n if (this.inf) {\n const fixed = this.floor ? Math.floor(i) : i;\n return this.inf.format(fixed);\n } else {\n // to match the browser's numberformatter defaults\n const fixed = this.floor ? Math.floor(i) : roundTo(i, 3);\n return padStart(fixed, this.padTo);\n }\n }\n}\n\n/**\n * @private\n */\n\nclass PolyDateFormatter {\n constructor(dt, intl, opts) {\n this.opts = opts;\n this.originalZone = undefined;\n\n let z = undefined;\n if (this.opts.timeZone) {\n // Don't apply any workarounds if a timeZone is explicitly provided in opts\n this.dt = dt;\n } else if (dt.zone.type === \"fixed\") {\n // UTC-8 or Etc/UTC-8 are not part of tzdata, only Etc/GMT+8 and the like.\n // That is why fixed-offset TZ is set to that unless it is:\n // 1. Representing offset 0 when UTC is used to maintain previous behavior and does not become GMT.\n // 2. Unsupported by the browser:\n // - some do not support Etc/\n // - < Etc/GMT-14, > Etc/GMT+12, and 30-minute or 45-minute offsets are not part of tzdata\n const gmtOffset = -1 * (dt.offset / 60);\n const offsetZ = gmtOffset >= 0 ? `Etc/GMT+${gmtOffset}` : `Etc/GMT${gmtOffset}`;\n if (dt.offset !== 0 && IANAZone.create(offsetZ).valid) {\n z = offsetZ;\n this.dt = dt;\n } else {\n // Not all fixed-offset zones like Etc/+4:30 are present in tzdata so\n // we manually apply the offset and substitute the zone as needed.\n z = \"UTC\";\n this.dt = dt.offset === 0 ? dt : dt.setZone(\"UTC\").plus({ minutes: dt.offset });\n this.originalZone = dt.zone;\n }\n } else if (dt.zone.type === \"system\") {\n this.dt = dt;\n } else if (dt.zone.type === \"iana\") {\n this.dt = dt;\n z = dt.zone.name;\n } else {\n // Custom zones can have any offset / offsetName so we just manually\n // apply the offset and substitute the zone as needed.\n z = \"UTC\";\n this.dt = dt.setZone(\"UTC\").plus({ minutes: dt.offset });\n this.originalZone = dt.zone;\n }\n\n const intlOpts = { ...this.opts };\n intlOpts.timeZone = intlOpts.timeZone || z;\n this.dtf = getCachedDTF(intl, intlOpts);\n }\n\n format() {\n if (this.originalZone) {\n // If we have to substitute in the actual zone name, we have to use\n // formatToParts so that the timezone can be replaced.\n return this.formatToParts()\n .map(({ value }) => value)\n .join(\"\");\n }\n return this.dtf.format(this.dt.toJSDate());\n }\n\n formatToParts() {\n const parts = this.dtf.formatToParts(this.dt.toJSDate());\n if (this.originalZone) {\n return parts.map((part) => {\n if (part.type === \"timeZoneName\") {\n const offsetName = this.originalZone.offsetName(this.dt.ts, {\n locale: this.dt.locale,\n format: this.opts.timeZoneName,\n });\n return {\n ...part,\n value: offsetName,\n };\n } else {\n return part;\n }\n });\n }\n return parts;\n }\n\n resolvedOptions() {\n return this.dtf.resolvedOptions();\n }\n}\n\n/**\n * @private\n */\nclass PolyRelFormatter {\n constructor(intl, isEnglish, opts) {\n this.opts = { style: \"long\", ...opts };\n if (!isEnglish && hasRelative()) {\n this.rtf = getCachedRTF(intl, opts);\n }\n }\n\n format(count, unit) {\n if (this.rtf) {\n return this.rtf.format(count, unit);\n } else {\n return English.formatRelativeTime(unit, count, this.opts.numeric, this.opts.style !== \"long\");\n }\n }\n\n formatToParts(count, unit) {\n if (this.rtf) {\n return this.rtf.formatToParts(count, unit);\n } else {\n return [];\n }\n }\n}\n\nconst fallbackWeekSettings = {\n firstDay: 1,\n minimalDays: 4,\n weekend: [6, 7],\n};\n\n/**\n * @private\n */\n\nexport default class Locale {\n static fromOpts(opts) {\n return Locale.create(\n opts.locale,\n opts.numberingSystem,\n opts.outputCalendar,\n opts.weekSettings,\n opts.defaultToEN\n );\n }\n\n static create(locale, numberingSystem, outputCalendar, weekSettings, defaultToEN = false) {\n const specifiedLocale = locale || Settings.defaultLocale;\n // the system locale is useful for human-readable strings but annoying for parsing/formatting known formats\n const localeR = specifiedLocale || (defaultToEN ? \"en-US\" : systemLocale());\n const numberingSystemR = numberingSystem || Settings.defaultNumberingSystem;\n const outputCalendarR = outputCalendar || Settings.defaultOutputCalendar;\n const weekSettingsR = validateWeekSettings(weekSettings) || Settings.defaultWeekSettings;\n return new Locale(localeR, numberingSystemR, outputCalendarR, weekSettingsR, specifiedLocale);\n }\n\n static resetCache() {\n sysLocaleCache = null;\n intlDTCache = {};\n intlNumCache = {};\n intlRelCache = {};\n }\n\n static fromObject({ locale, numberingSystem, outputCalendar, weekSettings } = {}) {\n return Locale.create(locale, numberingSystem, outputCalendar, weekSettings);\n }\n\n constructor(locale, numbering, outputCalendar, weekSettings, specifiedLocale) {\n const [parsedLocale, parsedNumberingSystem, parsedOutputCalendar] = parseLocaleString(locale);\n\n this.locale = parsedLocale;\n this.numberingSystem = numbering || parsedNumberingSystem || null;\n this.outputCalendar = outputCalendar || parsedOutputCalendar || null;\n this.weekSettings = weekSettings;\n this.intl = intlConfigString(this.locale, this.numberingSystem, this.outputCalendar);\n\n this.weekdaysCache = { format: {}, standalone: {} };\n this.monthsCache = { format: {}, standalone: {} };\n this.meridiemCache = null;\n this.eraCache = {};\n\n this.specifiedLocale = specifiedLocale;\n this.fastNumbersCached = null;\n }\n\n get fastNumbers() {\n if (this.fastNumbersCached == null) {\n this.fastNumbersCached = supportsFastNumbers(this);\n }\n\n return this.fastNumbersCached;\n }\n\n listingMode() {\n const isActuallyEn = this.isEnglish();\n const hasNoWeirdness =\n (this.numberingSystem === null || this.numberingSystem === \"latn\") &&\n (this.outputCalendar === null || this.outputCalendar === \"gregory\");\n return isActuallyEn && hasNoWeirdness ? \"en\" : \"intl\";\n }\n\n clone(alts) {\n if (!alts || Object.getOwnPropertyNames(alts).length === 0) {\n return this;\n } else {\n return Locale.create(\n alts.locale || this.specifiedLocale,\n alts.numberingSystem || this.numberingSystem,\n alts.outputCalendar || this.outputCalendar,\n validateWeekSettings(alts.weekSettings) || this.weekSettings,\n alts.defaultToEN || false\n );\n }\n }\n\n redefaultToEN(alts = {}) {\n return this.clone({ ...alts, defaultToEN: true });\n }\n\n redefaultToSystem(alts = {}) {\n return this.clone({ ...alts, defaultToEN: false });\n }\n\n months(length, format = false) {\n return listStuff(this, length, English.months, () => {\n const intl = format ? { month: length, day: \"numeric\" } : { month: length },\n formatStr = format ? \"format\" : \"standalone\";\n if (!this.monthsCache[formatStr][length]) {\n this.monthsCache[formatStr][length] = mapMonths((dt) => this.extract(dt, intl, \"month\"));\n }\n return this.monthsCache[formatStr][length];\n });\n }\n\n weekdays(length, format = false) {\n return listStuff(this, length, English.weekdays, () => {\n const intl = format\n ? { weekday: length, year: \"numeric\", month: \"long\", day: \"numeric\" }\n : { weekday: length },\n formatStr = format ? \"format\" : \"standalone\";\n if (!this.weekdaysCache[formatStr][length]) {\n this.weekdaysCache[formatStr][length] = mapWeekdays((dt) =>\n this.extract(dt, intl, \"weekday\")\n );\n }\n return this.weekdaysCache[formatStr][length];\n });\n }\n\n meridiems() {\n return listStuff(\n this,\n undefined,\n () => English.meridiems,\n () => {\n // In theory there could be aribitrary day periods. We're gonna assume there are exactly two\n // for AM and PM. This is probably wrong, but it's makes parsing way easier.\n if (!this.meridiemCache) {\n const intl = { hour: \"numeric\", hourCycle: \"h12\" };\n this.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map(\n (dt) => this.extract(dt, intl, \"dayperiod\")\n );\n }\n\n return this.meridiemCache;\n }\n );\n }\n\n eras(length) {\n return listStuff(this, length, English.eras, () => {\n const intl = { era: length };\n\n // This is problematic. Different calendars are going to define eras totally differently. What I need is the minimum set of dates\n // to definitely enumerate them.\n if (!this.eraCache[length]) {\n this.eraCache[length] = [DateTime.utc(-40, 1, 1), DateTime.utc(2017, 1, 1)].map((dt) =>\n this.extract(dt, intl, \"era\")\n );\n }\n\n return this.eraCache[length];\n });\n }\n\n extract(dt, intlOpts, field) {\n const df = this.dtFormatter(dt, intlOpts),\n results = df.formatToParts(),\n matching = results.find((m) => m.type.toLowerCase() === field);\n return matching ? matching.value : null;\n }\n\n numberFormatter(opts = {}) {\n // this forcesimple option is never used (the only caller short-circuits on it, but it seems safer to leave)\n // (in contrast, the rest of the condition is used heavily)\n return new PolyNumberFormatter(this.intl, opts.forceSimple || this.fastNumbers, opts);\n }\n\n dtFormatter(dt, intlOpts = {}) {\n return new PolyDateFormatter(dt, this.intl, intlOpts);\n }\n\n relFormatter(opts = {}) {\n return new PolyRelFormatter(this.intl, this.isEnglish(), opts);\n }\n\n listFormatter(opts = {}) {\n return getCachedLF(this.intl, opts);\n }\n\n isEnglish() {\n return (\n this.locale === \"en\" ||\n this.locale.toLowerCase() === \"en-us\" ||\n new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith(\"en-us\")\n );\n }\n\n getWeekSettings() {\n if (this.weekSettings) {\n return this.weekSettings;\n } else if (!hasLocaleWeekInfo()) {\n return fallbackWeekSettings;\n } else {\n return getCachedWeekInfo(this.locale);\n }\n }\n\n getStartOfWeek() {\n return this.getWeekSettings().firstDay;\n }\n\n getMinDaysInFirstWeek() {\n return this.getWeekSettings().minimalDays;\n }\n\n getWeekendDays() {\n return this.getWeekSettings().weekend;\n }\n\n equals(other) {\n return (\n this.locale === other.locale &&\n this.numberingSystem === other.numberingSystem &&\n this.outputCalendar === other.outputCalendar\n );\n }\n\n toString() {\n return `Locale(${this.locale}, ${this.numberingSystem}, ${this.outputCalendar})`;\n }\n}\n","import * as Formats from \"./formats.js\";\nimport { pick } from \"./util.js\";\n\nfunction stringify(obj) {\n return JSON.stringify(obj, Object.keys(obj).sort());\n}\n\n/**\n * @private\n */\n\nexport const monthsLong = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n];\n\nexport const monthsShort = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n];\n\nexport const monthsNarrow = [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"];\n\nexport function months(length) {\n switch (length) {\n case \"narrow\":\n return [...monthsNarrow];\n case \"short\":\n return [...monthsShort];\n case \"long\":\n return [...monthsLong];\n case \"numeric\":\n return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"];\n case \"2-digit\":\n return [\"01\", \"02\", \"03\", \"04\", \"05\", \"06\", \"07\", \"08\", \"09\", \"10\", \"11\", \"12\"];\n default:\n return null;\n }\n}\n\nexport const weekdaysLong = [\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n \"Sunday\",\n];\n\nexport const weekdaysShort = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"];\n\nexport const weekdaysNarrow = [\"M\", \"T\", \"W\", \"T\", \"F\", \"S\", \"S\"];\n\nexport function weekdays(length) {\n switch (length) {\n case \"narrow\":\n return [...weekdaysNarrow];\n case \"short\":\n return [...weekdaysShort];\n case \"long\":\n return [...weekdaysLong];\n case \"numeric\":\n return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\"];\n default:\n return null;\n }\n}\n\nexport const meridiems = [\"AM\", \"PM\"];\n\nexport const erasLong = [\"Before Christ\", \"Anno Domini\"];\n\nexport const erasShort = [\"BC\", \"AD\"];\n\nexport const erasNarrow = [\"B\", \"A\"];\n\nexport function eras(length) {\n switch (length) {\n case \"narrow\":\n return [...erasNarrow];\n case \"short\":\n return [...erasShort];\n case \"long\":\n return [...erasLong];\n default:\n return null;\n }\n}\n\nexport function meridiemForDateTime(dt) {\n return meridiems[dt.hour < 12 ? 0 : 1];\n}\n\nexport function weekdayForDateTime(dt, length) {\n return weekdays(length)[dt.weekday - 1];\n}\n\nexport function monthForDateTime(dt, length) {\n return months(length)[dt.month - 1];\n}\n\nexport function eraForDateTime(dt, length) {\n return eras(length)[dt.year < 0 ? 0 : 1];\n}\n\nexport function formatRelativeTime(unit, count, numeric = \"always\", narrow = false) {\n const units = {\n years: [\"year\", \"yr.\"],\n quarters: [\"quarter\", \"qtr.\"],\n months: [\"month\", \"mo.\"],\n weeks: [\"week\", \"wk.\"],\n days: [\"day\", \"day\", \"days\"],\n hours: [\"hour\", \"hr.\"],\n minutes: [\"minute\", \"min.\"],\n seconds: [\"second\", \"sec.\"],\n };\n\n const lastable = [\"hours\", \"minutes\", \"seconds\"].indexOf(unit) === -1;\n\n if (numeric === \"auto\" && lastable) {\n const isDay = unit === \"days\";\n switch (count) {\n case 1:\n return isDay ? \"tomorrow\" : `next ${units[unit][0]}`;\n case -1:\n return isDay ? \"yesterday\" : `last ${units[unit][0]}`;\n case 0:\n return isDay ? \"today\" : `this ${units[unit][0]}`;\n default: // fall through\n }\n }\n\n const isInPast = Object.is(count, -0) || count < 0,\n fmtValue = Math.abs(count),\n singular = fmtValue === 1,\n lilUnits = units[unit],\n fmtUnit = narrow\n ? singular\n ? lilUnits[1]\n : lilUnits[2] || lilUnits[1]\n : singular\n ? units[unit][0]\n : unit;\n return isInPast ? `${fmtValue} ${fmtUnit} ago` : `in ${fmtValue} ${fmtUnit}`;\n}\n\nexport function formatString(knownFormat) {\n // these all have the offsets removed because we don't have access to them\n // without all the intl stuff this is backfilling\n const filtered = pick(knownFormat, [\n \"weekday\",\n \"era\",\n \"year\",\n \"month\",\n \"day\",\n \"hour\",\n \"minute\",\n \"second\",\n \"timeZoneName\",\n \"hourCycle\",\n ]),\n key = stringify(filtered),\n dateTimeHuge = \"EEEE, LLLL d, yyyy, h:mm a\";\n switch (key) {\n case stringify(Formats.DATE_SHORT):\n return \"M/d/yyyy\";\n case stringify(Formats.DATE_MED):\n return \"LLL d, yyyy\";\n case stringify(Formats.DATE_MED_WITH_WEEKDAY):\n return \"EEE, LLL d, yyyy\";\n case stringify(Formats.DATE_FULL):\n return \"LLLL d, yyyy\";\n case stringify(Formats.DATE_HUGE):\n return \"EEEE, LLLL d, yyyy\";\n case stringify(Formats.TIME_SIMPLE):\n return \"h:mm a\";\n case stringify(Formats.TIME_WITH_SECONDS):\n return \"h:mm:ss a\";\n case stringify(Formats.TIME_WITH_SHORT_OFFSET):\n return \"h:mm a\";\n case stringify(Formats.TIME_WITH_LONG_OFFSET):\n return \"h:mm a\";\n case stringify(Formats.TIME_24_SIMPLE):\n return \"HH:mm\";\n case stringify(Formats.TIME_24_WITH_SECONDS):\n return \"HH:mm:ss\";\n case stringify(Formats.TIME_24_WITH_SHORT_OFFSET):\n return \"HH:mm\";\n case stringify(Formats.TIME_24_WITH_LONG_OFFSET):\n return \"HH:mm\";\n case stringify(Formats.DATETIME_SHORT):\n return \"M/d/yyyy, h:mm a\";\n case stringify(Formats.DATETIME_MED):\n return \"LLL d, yyyy, h:mm a\";\n case stringify(Formats.DATETIME_FULL):\n return \"LLLL d, yyyy, h:mm a\";\n case stringify(Formats.DATETIME_HUGE):\n return dateTimeHuge;\n case stringify(Formats.DATETIME_SHORT_WITH_SECONDS):\n return \"M/d/yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_MED_WITH_SECONDS):\n return \"LLL d, yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_MED_WITH_WEEKDAY):\n return \"EEE, d LLL yyyy, h:mm a\";\n case stringify(Formats.DATETIME_FULL_WITH_SECONDS):\n return \"LLLL d, yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_HUGE_WITH_SECONDS):\n return \"EEEE, LLLL d, yyyy, h:mm:ss a\";\n default:\n return dateTimeHuge;\n }\n}\n","import { formatOffset, signedOffset } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * A zone with a fixed offset (meaning no DST)\n * @implements {Zone}\n */\nexport default class FixedOffsetZone extends Zone {\n /**\n * Get a singleton instance of UTC\n * @return {FixedOffsetZone}\n */\n static get utcInstance() {\n if (singleton === null) {\n singleton = new FixedOffsetZone(0);\n }\n return singleton;\n }\n\n /**\n * Get an instance with a specified offset\n * @param {number} offset - The offset in minutes\n * @return {FixedOffsetZone}\n */\n static instance(offset) {\n return offset === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset);\n }\n\n /**\n * Get an instance of FixedOffsetZone from a UTC offset string, like \"UTC+6\"\n * @param {string} s - The offset string to parse\n * @example FixedOffsetZone.parseSpecifier(\"UTC+6\")\n * @example FixedOffsetZone.parseSpecifier(\"UTC+06\")\n * @example FixedOffsetZone.parseSpecifier(\"UTC-6:00\")\n * @return {FixedOffsetZone}\n */\n static parseSpecifier(s) {\n if (s) {\n const r = s.match(/^utc(?:([+-]\\d{1,2})(?::(\\d{2}))?)?$/i);\n if (r) {\n return new FixedOffsetZone(signedOffset(r[1], r[2]));\n }\n }\n return null;\n }\n\n constructor(offset) {\n super();\n /** @private **/\n this.fixed = offset;\n }\n\n /**\n * The type of zone. `fixed` for all instances of `FixedOffsetZone`.\n * @override\n * @type {string}\n */\n get type() {\n return \"fixed\";\n }\n\n /**\n * The name of this zone.\n * All fixed zones' names always start with \"UTC\" (plus optional offset)\n * @override\n * @type {string}\n */\n get name() {\n return this.fixed === 0 ? \"UTC\" : `UTC${formatOffset(this.fixed, \"narrow\")}`;\n }\n\n /**\n * The IANA name of this zone, i.e. `Etc/UTC` or `Etc/GMT+/-nn`\n *\n * @override\n * @type {string}\n */\n get ianaName() {\n if (this.fixed === 0) {\n return \"Etc/UTC\";\n } else {\n return `Etc/GMT${formatOffset(-this.fixed, \"narrow\")}`;\n }\n }\n\n /**\n * Returns the offset's common name at the specified timestamp.\n *\n * For fixed offset zones this equals to the zone name.\n * @override\n */\n offsetName() {\n return this.name;\n }\n\n /**\n * Returns the offset's value as a string\n * @override\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\n formatOffset(ts, format) {\n return formatOffset(this.fixed, format);\n }\n\n /**\n * Returns whether the offset is known to be fixed for the whole year:\n * Always returns true for all fixed offset zones.\n * @override\n * @type {boolean}\n */\n get isUniversal() {\n return true;\n }\n\n /**\n * Return the offset in minutes for this zone at the specified timestamp.\n *\n * For fixed offset zones, this is constant and does not depend on a timestamp.\n * @override\n * @return {number}\n */\n offset() {\n return this.fixed;\n }\n\n /**\n * Return whether this Zone is equal to another zone (i.e. also fixed and same offset)\n * @override\n * @param {Zone} otherZone - the zone to compare\n * @return {boolean}\n */\n equals(otherZone) {\n return otherZone.type === \"fixed\" && otherZone.fixed === this.fixed;\n }\n\n /**\n * Return whether this Zone is valid:\n * All fixed offset zones are valid.\n * @override\n * @type {boolean}\n */\n get isValid() {\n return true;\n }\n}\n","import Zone from \"../zone.js\";\n\n/**\n * A zone that failed to parse. You should never need to instantiate this.\n * @implements {Zone}\n */\nexport default class InvalidZone extends Zone {\n constructor(zoneName) {\n super();\n /** @private */\n this.zoneName = zoneName;\n }\n\n /** @override **/\n get type() {\n return \"invalid\";\n }\n\n /** @override **/\n get name() {\n return this.zoneName;\n }\n\n /** @override **/\n get isUniversal() {\n return false;\n }\n\n /** @override **/\n offsetName() {\n return null;\n }\n\n /** @override **/\n formatOffset() {\n return \"\";\n }\n\n /** @override **/\n offset() {\n return NaN;\n }\n\n /** @override **/\n equals() {\n return false;\n }\n\n /** @override **/\n get isValid() {\n return false;\n }\n}\n","/**\n * @private\n */\n\nimport Zone from \"../zone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport InvalidZone from \"../zones/invalidZone.js\";\n\nimport { isUndefined, isString, isNumber } from \"./util.js\";\nimport SystemZone from \"../zones/systemZone.js\";\n\nexport function normalizeZone(input, defaultZone) {\n let offset;\n if (isUndefined(input) || input === null) {\n return defaultZone;\n } else if (input instanceof Zone) {\n return input;\n } else if (isString(input)) {\n const lowered = input.toLowerCase();\n if (lowered === \"default\") return defaultZone;\n else if (lowered === \"local\" || lowered === \"system\") return SystemZone.instance;\n else if (lowered === \"utc\" || lowered === \"gmt\") return FixedOffsetZone.utcInstance;\n else return FixedOffsetZone.parseSpecifier(lowered) || IANAZone.create(input);\n } else if (isNumber(input)) {\n return FixedOffsetZone.instance(input);\n } else if (typeof input === \"object\" && \"offset\" in input && typeof input.offset === \"function\") {\n // This is dumb, but the instanceof check above doesn't seem to really work\n // so we're duck checking it\n return input;\n } else {\n return new InvalidZone(input);\n }\n}\n","/*\n This is just a junk drawer, containing anything used across multiple classes.\n Because Luxon is small(ish), this should stay small and we won't worry about splitting\n it up into, say, parsingUtil.js and basicUtil.js and so on. But they are divided up by feature area.\n*/\n\nimport { InvalidArgumentError } from \"../errors.js\";\nimport Settings from \"../settings.js\";\nimport { dayOfWeek, isoWeekdayToLocal } from \"./conversions.js\";\n\n/**\n * @private\n */\n\n// TYPES\n\nexport function isUndefined(o) {\n return typeof o === \"undefined\";\n}\n\nexport function isNumber(o) {\n return typeof o === \"number\";\n}\n\nexport function isInteger(o) {\n return typeof o === \"number\" && o % 1 === 0;\n}\n\nexport function isString(o) {\n return typeof o === \"string\";\n}\n\nexport function isDate(o) {\n return Object.prototype.toString.call(o) === \"[object Date]\";\n}\n\n// CAPABILITIES\n\nexport function hasRelative() {\n try {\n return typeof Intl !== \"undefined\" && !!Intl.RelativeTimeFormat;\n } catch (e) {\n return false;\n }\n}\n\nexport function hasLocaleWeekInfo() {\n try {\n return (\n typeof Intl !== \"undefined\" &&\n !!Intl.Locale &&\n (\"weekInfo\" in Intl.Locale.prototype || \"getWeekInfo\" in Intl.Locale.prototype)\n );\n } catch (e) {\n return false;\n }\n}\n\n// OBJECTS AND ARRAYS\n\nexport function maybeArray(thing) {\n return Array.isArray(thing) ? thing : [thing];\n}\n\nexport function bestBy(arr, by, compare) {\n if (arr.length === 0) {\n return undefined;\n }\n return arr.reduce((best, next) => {\n const pair = [by(next), next];\n if (!best) {\n return pair;\n } else if (compare(best[0], pair[0]) === best[0]) {\n return best;\n } else {\n return pair;\n }\n }, null)[1];\n}\n\nexport function pick(obj, keys) {\n return keys.reduce((a, k) => {\n a[k] = obj[k];\n return a;\n }, {});\n}\n\nexport function hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nexport function validateWeekSettings(settings) {\n if (settings == null) {\n return null;\n } else if (typeof settings !== \"object\") {\n throw new InvalidArgumentError(\"Week settings must be an object\");\n } else {\n if (\n !integerBetween(settings.firstDay, 1, 7) ||\n !integerBetween(settings.minimalDays, 1, 7) ||\n !Array.isArray(settings.weekend) ||\n settings.weekend.some((v) => !integerBetween(v, 1, 7))\n ) {\n throw new InvalidArgumentError(\"Invalid week settings\");\n }\n return {\n firstDay: settings.firstDay,\n minimalDays: settings.minimalDays,\n weekend: Array.from(settings.weekend),\n };\n }\n}\n\n// NUMBERS AND STRINGS\n\nexport function integerBetween(thing, bottom, top) {\n return isInteger(thing) && thing >= bottom && thing <= top;\n}\n\n// x % n but takes the sign of n instead of x\nexport function floorMod(x, n) {\n return x - n * Math.floor(x / n);\n}\n\nexport function padStart(input, n = 2) {\n const isNeg = input < 0;\n let padded;\n if (isNeg) {\n padded = \"-\" + (\"\" + -input).padStart(n, \"0\");\n } else {\n padded = (\"\" + input).padStart(n, \"0\");\n }\n return padded;\n}\n\nexport function parseInteger(string) {\n if (isUndefined(string) || string === null || string === \"\") {\n return undefined;\n } else {\n return parseInt(string, 10);\n }\n}\n\nexport function parseFloating(string) {\n if (isUndefined(string) || string === null || string === \"\") {\n return undefined;\n } else {\n return parseFloat(string);\n }\n}\n\nexport function parseMillis(fraction) {\n // Return undefined (instead of 0) in these cases, where fraction is not set\n if (isUndefined(fraction) || fraction === null || fraction === \"\") {\n return undefined;\n } else {\n const f = parseFloat(\"0.\" + fraction) * 1000;\n return Math.floor(f);\n }\n}\n\nexport function roundTo(number, digits, towardZero = false) {\n const factor = 10 ** digits,\n rounder = towardZero ? Math.trunc : Math.round;\n return rounder(number * factor) / factor;\n}\n\n// DATE BASICS\n\nexport function isLeapYear(year) {\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n\nexport function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n}\n\nexport function daysInMonth(year, month) {\n const modMonth = floorMod(month - 1, 12) + 1,\n modYear = year + (month - modMonth) / 12;\n\n if (modMonth === 2) {\n return isLeapYear(modYear) ? 29 : 28;\n } else {\n return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][modMonth - 1];\n }\n}\n\n// convert a calendar object to a local timestamp (epoch, but with the offset baked in)\nexport function objToLocalTS(obj) {\n let d = Date.UTC(\n obj.year,\n obj.month - 1,\n obj.day,\n obj.hour,\n obj.minute,\n obj.second,\n obj.millisecond\n );\n\n // for legacy reasons, years between 0 and 99 are interpreted as 19XX; revert that\n if (obj.year < 100 && obj.year >= 0) {\n d = new Date(d);\n // set the month and day again, this is necessary because year 2000 is a leap year, but year 100 is not\n // so if obj.year is in 99, but obj.day makes it roll over into year 100,\n // the calculations done by Date.UTC are using year 2000 - which is incorrect\n d.setUTCFullYear(obj.year, obj.month - 1, obj.day);\n }\n return +d;\n}\n\n// adapted from moment.js: https://github.com/moment/moment/blob/000ac1800e620f770f4eb31b5ae908f6167b0ab2/src/lib/units/week-calendar-utils.js\nfunction firstWeekOffset(year, minDaysInFirstWeek, startOfWeek) {\n const fwdlw = isoWeekdayToLocal(dayOfWeek(year, 1, minDaysInFirstWeek), startOfWeek);\n return -fwdlw + minDaysInFirstWeek - 1;\n}\n\nexport function weeksInWeekYear(weekYear, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const weekOffset = firstWeekOffset(weekYear, minDaysInFirstWeek, startOfWeek);\n const weekOffsetNext = firstWeekOffset(weekYear + 1, minDaysInFirstWeek, startOfWeek);\n return (daysInYear(weekYear) - weekOffset + weekOffsetNext) / 7;\n}\n\nexport function untruncateYear(year) {\n if (year > 99) {\n return year;\n } else return year > Settings.twoDigitCutoffYear ? 1900 + year : 2000 + year;\n}\n\n// PARSING\n\nexport function parseZoneInfo(ts, offsetFormat, locale, timeZone = null) {\n const date = new Date(ts),\n intlOpts = {\n hourCycle: \"h23\",\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n };\n\n if (timeZone) {\n intlOpts.timeZone = timeZone;\n }\n\n const modified = { timeZoneName: offsetFormat, ...intlOpts };\n\n const parsed = new Intl.DateTimeFormat(locale, modified)\n .formatToParts(date)\n .find((m) => m.type.toLowerCase() === \"timezonename\");\n return parsed ? parsed.value : null;\n}\n\n// signedOffset('-5', '30') -> -330\nexport function signedOffset(offHourStr, offMinuteStr) {\n let offHour = parseInt(offHourStr, 10);\n\n // don't || this because we want to preserve -0\n if (Number.isNaN(offHour)) {\n offHour = 0;\n }\n\n const offMin = parseInt(offMinuteStr, 10) || 0,\n offMinSigned = offHour < 0 || Object.is(offHour, -0) ? -offMin : offMin;\n return offHour * 60 + offMinSigned;\n}\n\n// COERCION\n\nexport function asNumber(value) {\n const numericValue = Number(value);\n if (typeof value === \"boolean\" || value === \"\" || Number.isNaN(numericValue))\n throw new InvalidArgumentError(`Invalid unit value ${value}`);\n return numericValue;\n}\n\nexport function normalizeObject(obj, normalizer) {\n const normalized = {};\n for (const u in obj) {\n if (hasOwnProperty(obj, u)) {\n const v = obj[u];\n if (v === undefined || v === null) continue;\n normalized[normalizer(u)] = asNumber(v);\n }\n }\n return normalized;\n}\n\n/**\n * Returns the offset's value as a string\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\nexport function formatOffset(offset, format) {\n const hours = Math.trunc(Math.abs(offset / 60)),\n minutes = Math.trunc(Math.abs(offset % 60)),\n sign = offset >= 0 ? \"+\" : \"-\";\n\n switch (format) {\n case \"short\":\n return `${sign}${padStart(hours, 2)}:${padStart(minutes, 2)}`;\n case \"narrow\":\n return `${sign}${hours}${minutes > 0 ? `:${minutes}` : \"\"}`;\n case \"techie\":\n return `${sign}${padStart(hours, 2)}${padStart(minutes, 2)}`;\n default:\n throw new RangeError(`Value format ${format} is out of range for property format`);\n }\n}\n\nexport function timeObject(obj) {\n return pick(obj, [\"hour\", \"minute\", \"second\", \"millisecond\"]);\n}\n","const numberingSystems = {\n arab: \"[\\u0660-\\u0669]\",\n arabext: \"[\\u06F0-\\u06F9]\",\n bali: \"[\\u1B50-\\u1B59]\",\n beng: \"[\\u09E6-\\u09EF]\",\n deva: \"[\\u0966-\\u096F]\",\n fullwide: \"[\\uFF10-\\uFF19]\",\n gujr: \"[\\u0AE6-\\u0AEF]\",\n hanidec: \"[〇|一|二|三|四|五|六|七|八|九]\",\n khmr: \"[\\u17E0-\\u17E9]\",\n knda: \"[\\u0CE6-\\u0CEF]\",\n laoo: \"[\\u0ED0-\\u0ED9]\",\n limb: \"[\\u1946-\\u194F]\",\n mlym: \"[\\u0D66-\\u0D6F]\",\n mong: \"[\\u1810-\\u1819]\",\n mymr: \"[\\u1040-\\u1049]\",\n orya: \"[\\u0B66-\\u0B6F]\",\n tamldec: \"[\\u0BE6-\\u0BEF]\",\n telu: \"[\\u0C66-\\u0C6F]\",\n thai: \"[\\u0E50-\\u0E59]\",\n tibt: \"[\\u0F20-\\u0F29]\",\n latn: \"\\\\d\",\n};\n\nconst numberingSystemsUTF16 = {\n arab: [1632, 1641],\n arabext: [1776, 1785],\n bali: [6992, 7001],\n beng: [2534, 2543],\n deva: [2406, 2415],\n fullwide: [65296, 65303],\n gujr: [2790, 2799],\n khmr: [6112, 6121],\n knda: [3302, 3311],\n laoo: [3792, 3801],\n limb: [6470, 6479],\n mlym: [3430, 3439],\n mong: [6160, 6169],\n mymr: [4160, 4169],\n orya: [2918, 2927],\n tamldec: [3046, 3055],\n telu: [3174, 3183],\n thai: [3664, 3673],\n tibt: [3872, 3881],\n};\n\nconst hanidecChars = numberingSystems.hanidec.replace(/[\\[|\\]]/g, \"\").split(\"\");\n\nexport function parseDigits(str) {\n let value = parseInt(str, 10);\n if (isNaN(value)) {\n value = \"\";\n for (let i = 0; i < str.length; i++) {\n const code = str.charCodeAt(i);\n\n if (str[i].search(numberingSystems.hanidec) !== -1) {\n value += hanidecChars.indexOf(str[i]);\n } else {\n for (const key in numberingSystemsUTF16) {\n const [min, max] = numberingSystemsUTF16[key];\n if (code >= min && code <= max) {\n value += code - min;\n }\n }\n }\n }\n return parseInt(value, 10);\n } else {\n return value;\n }\n}\n\n// cache of {numberingSystem: {append: regex}}\nlet digitRegexCache = {};\nexport function resetDigitRegexCache() {\n digitRegexCache = {};\n}\n\nexport function digitRegex({ numberingSystem }, append = \"\") {\n const ns = numberingSystem || \"latn\";\n\n if (!digitRegexCache[ns]) {\n digitRegexCache[ns] = {};\n }\n if (!digitRegexCache[ns][append]) {\n digitRegexCache[ns][append] = new RegExp(`${numberingSystems[ns]}${append}`);\n }\n\n return digitRegexCache[ns][append];\n}\n","import SystemZone from \"./zones/systemZone.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport Locale from \"./impl/locale.js\";\nimport DateTime from \"./datetime.js\";\n\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\nimport { validateWeekSettings } from \"./impl/util.js\";\nimport { resetDigitRegexCache } from \"./impl/digits.js\";\n\nlet now = () => Date.now(),\n defaultZone = \"system\",\n defaultLocale = null,\n defaultNumberingSystem = null,\n defaultOutputCalendar = null,\n twoDigitCutoffYear = 60,\n throwOnInvalid,\n defaultWeekSettings = null;\n\n/**\n * Settings contains static getters and setters that control Luxon's overall behavior. Luxon is a simple library with few options, but the ones it does have live here.\n */\nexport default class Settings {\n /**\n * Get the callback for returning the current timestamp.\n * @type {function}\n */\n static get now() {\n return now;\n }\n\n /**\n * Set the callback for returning the current timestamp.\n * The function should return a number, which will be interpreted as an Epoch millisecond count\n * @type {function}\n * @example Settings.now = () => Date.now() + 3000 // pretend it is 3 seconds in the future\n * @example Settings.now = () => 0 // always pretend it's Jan 1, 1970 at midnight in UTC time\n */\n static set now(n) {\n now = n;\n }\n\n /**\n * Set the default time zone to create DateTimes in. Does not affect existing instances.\n * Use the value \"system\" to reset this value to the system's time zone.\n * @type {string}\n */\n static set defaultZone(zone) {\n defaultZone = zone;\n }\n\n /**\n * Get the default time zone object currently used to create DateTimes. Does not affect existing instances.\n * The default value is the system's time zone (the one set on the machine that runs this code).\n * @type {Zone}\n */\n static get defaultZone() {\n return normalizeZone(defaultZone, SystemZone.instance);\n }\n\n /**\n * Get the default locale to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultLocale() {\n return defaultLocale;\n }\n\n /**\n * Set the default locale to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultLocale(locale) {\n defaultLocale = locale;\n }\n\n /**\n * Get the default numbering system to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultNumberingSystem() {\n return defaultNumberingSystem;\n }\n\n /**\n * Set the default numbering system to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultNumberingSystem(numberingSystem) {\n defaultNumberingSystem = numberingSystem;\n }\n\n /**\n * Get the default output calendar to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultOutputCalendar() {\n return defaultOutputCalendar;\n }\n\n /**\n * Set the default output calendar to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultOutputCalendar(outputCalendar) {\n defaultOutputCalendar = outputCalendar;\n }\n\n /**\n * @typedef {Object} WeekSettings\n * @property {number} firstDay\n * @property {number} minimalDays\n * @property {number[]} weekend\n */\n\n /**\n * @return {WeekSettings|null}\n */\n static get defaultWeekSettings() {\n return defaultWeekSettings;\n }\n\n /**\n * Allows overriding the default locale week settings, i.e. the start of the week, the weekend and\n * how many days are required in the first week of a year.\n * Does not affect existing instances.\n *\n * @param {WeekSettings|null} weekSettings\n */\n static set defaultWeekSettings(weekSettings) {\n defaultWeekSettings = validateWeekSettings(weekSettings);\n }\n\n /**\n * Get the cutoff year for whether a 2-digit year string is interpreted in the current or previous century. Numbers higher than the cutoff will be considered to mean 19xx and numbers lower or equal to the cutoff will be considered 20xx.\n * @type {number}\n */\n static get twoDigitCutoffYear() {\n return twoDigitCutoffYear;\n }\n\n /**\n * Set the cutoff year for whether a 2-digit year string is interpreted in the current or previous century. Numbers higher than the cutoff will be considered to mean 19xx and numbers lower or equal to the cutoff will be considered 20xx.\n * @type {number}\n * @example Settings.twoDigitCutoffYear = 0 // all 'yy' are interpreted as 20th century\n * @example Settings.twoDigitCutoffYear = 99 // all 'yy' are interpreted as 21st century\n * @example Settings.twoDigitCutoffYear = 50 // '49' -> 2049; '50' -> 1950\n * @example Settings.twoDigitCutoffYear = 1950 // interpreted as 50\n * @example Settings.twoDigitCutoffYear = 2050 // ALSO interpreted as 50\n */\n static set twoDigitCutoffYear(cutoffYear) {\n twoDigitCutoffYear = cutoffYear % 100;\n }\n\n /**\n * Get whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n * @type {boolean}\n */\n static get throwOnInvalid() {\n return throwOnInvalid;\n }\n\n /**\n * Set whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n * @type {boolean}\n */\n static set throwOnInvalid(t) {\n throwOnInvalid = t;\n }\n\n /**\n * Reset Luxon's global caches. Should only be necessary in testing scenarios.\n * @return {void}\n */\n static resetCaches() {\n Locale.resetCache();\n IANAZone.resetCache();\n DateTime.resetCache();\n resetDigitRegexCache();\n }\n}\n","export default class Invalid {\n constructor(reason, explanation) {\n this.reason = reason;\n this.explanation = explanation;\n }\n\n toMessage() {\n if (this.explanation) {\n return `${this.reason}: ${this.explanation}`;\n } else {\n return this.reason;\n }\n }\n}\n","import {\n integerBetween,\n isLeapYear,\n timeObject,\n daysInYear,\n daysInMonth,\n weeksInWeekYear,\n isInteger,\n isUndefined,\n} from \"./util.js\";\nimport Invalid from \"./invalid.js\";\nimport { ConflictingSpecificationError } from \"../errors.js\";\n\nconst nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334],\n leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335];\n\nfunction unitOutOfRange(unit, value) {\n return new Invalid(\n \"unit out of range\",\n `you specified ${value} (of type ${typeof value}) as a ${unit}, which is invalid`\n );\n}\n\nexport function dayOfWeek(year, month, day) {\n const d = new Date(Date.UTC(year, month - 1, day));\n\n if (year < 100 && year >= 0) {\n d.setUTCFullYear(d.getUTCFullYear() - 1900);\n }\n\n const js = d.getUTCDay();\n\n return js === 0 ? 7 : js;\n}\n\nfunction computeOrdinal(year, month, day) {\n return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1];\n}\n\nfunction uncomputeOrdinal(year, ordinal) {\n const table = isLeapYear(year) ? leapLadder : nonLeapLadder,\n month0 = table.findIndex((i) => i < ordinal),\n day = ordinal - table[month0];\n return { month: month0 + 1, day };\n}\n\nexport function isoWeekdayToLocal(isoWeekday, startOfWeek) {\n return ((isoWeekday - startOfWeek + 7) % 7) + 1;\n}\n\n/**\n * @private\n */\n\nexport function gregorianToWeek(gregObj, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const { year, month, day } = gregObj,\n ordinal = computeOrdinal(year, month, day),\n weekday = isoWeekdayToLocal(dayOfWeek(year, month, day), startOfWeek);\n\n let weekNumber = Math.floor((ordinal - weekday + 14 - minDaysInFirstWeek) / 7),\n weekYear;\n\n if (weekNumber < 1) {\n weekYear = year - 1;\n weekNumber = weeksInWeekYear(weekYear, minDaysInFirstWeek, startOfWeek);\n } else if (weekNumber > weeksInWeekYear(year, minDaysInFirstWeek, startOfWeek)) {\n weekYear = year + 1;\n weekNumber = 1;\n } else {\n weekYear = year;\n }\n\n return { weekYear, weekNumber, weekday, ...timeObject(gregObj) };\n}\n\nexport function weekToGregorian(weekData, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const { weekYear, weekNumber, weekday } = weekData,\n weekdayOfJan4 = isoWeekdayToLocal(dayOfWeek(weekYear, 1, minDaysInFirstWeek), startOfWeek),\n yearInDays = daysInYear(weekYear);\n\n let ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 7 + minDaysInFirstWeek,\n year;\n\n if (ordinal < 1) {\n year = weekYear - 1;\n ordinal += daysInYear(year);\n } else if (ordinal > yearInDays) {\n year = weekYear + 1;\n ordinal -= daysInYear(weekYear);\n } else {\n year = weekYear;\n }\n\n const { month, day } = uncomputeOrdinal(year, ordinal);\n return { year, month, day, ...timeObject(weekData) };\n}\n\nexport function gregorianToOrdinal(gregData) {\n const { year, month, day } = gregData;\n const ordinal = computeOrdinal(year, month, day);\n return { year, ordinal, ...timeObject(gregData) };\n}\n\nexport function ordinalToGregorian(ordinalData) {\n const { year, ordinal } = ordinalData;\n const { month, day } = uncomputeOrdinal(year, ordinal);\n return { year, month, day, ...timeObject(ordinalData) };\n}\n\n/**\n * Check if local week units like localWeekday are used in obj.\n * If so, validates that they are not mixed with ISO week units and then copies them to the normal week unit properties.\n * Modifies obj in-place!\n * @param obj the object values\n */\nexport function usesLocalWeekValues(obj, loc) {\n const hasLocaleWeekData =\n !isUndefined(obj.localWeekday) ||\n !isUndefined(obj.localWeekNumber) ||\n !isUndefined(obj.localWeekYear);\n if (hasLocaleWeekData) {\n const hasIsoWeekData =\n !isUndefined(obj.weekday) || !isUndefined(obj.weekNumber) || !isUndefined(obj.weekYear);\n\n if (hasIsoWeekData) {\n throw new ConflictingSpecificationError(\n \"Cannot mix locale-based week fields with ISO-based week fields\"\n );\n }\n if (!isUndefined(obj.localWeekday)) obj.weekday = obj.localWeekday;\n if (!isUndefined(obj.localWeekNumber)) obj.weekNumber = obj.localWeekNumber;\n if (!isUndefined(obj.localWeekYear)) obj.weekYear = obj.localWeekYear;\n delete obj.localWeekday;\n delete obj.localWeekNumber;\n delete obj.localWeekYear;\n return {\n minDaysInFirstWeek: loc.getMinDaysInFirstWeek(),\n startOfWeek: loc.getStartOfWeek(),\n };\n } else {\n return { minDaysInFirstWeek: 4, startOfWeek: 1 };\n }\n}\n\nexport function hasInvalidWeekData(obj, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const validYear = isInteger(obj.weekYear),\n validWeek = integerBetween(\n obj.weekNumber,\n 1,\n weeksInWeekYear(obj.weekYear, minDaysInFirstWeek, startOfWeek)\n ),\n validWeekday = integerBetween(obj.weekday, 1, 7);\n\n if (!validYear) {\n return unitOutOfRange(\"weekYear\", obj.weekYear);\n } else if (!validWeek) {\n return unitOutOfRange(\"week\", obj.weekNumber);\n } else if (!validWeekday) {\n return unitOutOfRange(\"weekday\", obj.weekday);\n } else return false;\n}\n\nexport function hasInvalidOrdinalData(obj) {\n const validYear = isInteger(obj.year),\n validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year));\n\n if (!validYear) {\n return unitOutOfRange(\"year\", obj.year);\n } else if (!validOrdinal) {\n return unitOutOfRange(\"ordinal\", obj.ordinal);\n } else return false;\n}\n\nexport function hasInvalidGregorianData(obj) {\n const validYear = isInteger(obj.year),\n validMonth = integerBetween(obj.month, 1, 12),\n validDay = integerBetween(obj.day, 1, daysInMonth(obj.year, obj.month));\n\n if (!validYear) {\n return unitOutOfRange(\"year\", obj.year);\n } else if (!validMonth) {\n return unitOutOfRange(\"month\", obj.month);\n } else if (!validDay) {\n return unitOutOfRange(\"day\", obj.day);\n } else return false;\n}\n\nexport function hasInvalidTimeData(obj) {\n const { hour, minute, second, millisecond } = obj;\n const validHour =\n integerBetween(hour, 0, 23) ||\n (hour === 24 && minute === 0 && second === 0 && millisecond === 0),\n validMinute = integerBetween(minute, 0, 59),\n validSecond = integerBetween(second, 0, 59),\n validMillisecond = integerBetween(millisecond, 0, 999);\n\n if (!validHour) {\n return unitOutOfRange(\"hour\", hour);\n } else if (!validMinute) {\n return unitOutOfRange(\"minute\", minute);\n } else if (!validSecond) {\n return unitOutOfRange(\"second\", second);\n } else if (!validMillisecond) {\n return unitOutOfRange(\"millisecond\", millisecond);\n } else return false;\n}\n","import * as English from \"./english.js\";\nimport * as Formats from \"./formats.js\";\nimport { padStart } from \"./util.js\";\n\nfunction stringifyTokens(splits, tokenToString) {\n let s = \"\";\n for (const token of splits) {\n if (token.literal) {\n s += token.val;\n } else {\n s += tokenToString(token.val);\n }\n }\n return s;\n}\n\nconst macroTokenToFormatOpts = {\n D: Formats.DATE_SHORT,\n DD: Formats.DATE_MED,\n DDD: Formats.DATE_FULL,\n DDDD: Formats.DATE_HUGE,\n t: Formats.TIME_SIMPLE,\n tt: Formats.TIME_WITH_SECONDS,\n ttt: Formats.TIME_WITH_SHORT_OFFSET,\n tttt: Formats.TIME_WITH_LONG_OFFSET,\n T: Formats.TIME_24_SIMPLE,\n TT: Formats.TIME_24_WITH_SECONDS,\n TTT: Formats.TIME_24_WITH_SHORT_OFFSET,\n TTTT: Formats.TIME_24_WITH_LONG_OFFSET,\n f: Formats.DATETIME_SHORT,\n ff: Formats.DATETIME_MED,\n fff: Formats.DATETIME_FULL,\n ffff: Formats.DATETIME_HUGE,\n F: Formats.DATETIME_SHORT_WITH_SECONDS,\n FF: Formats.DATETIME_MED_WITH_SECONDS,\n FFF: Formats.DATETIME_FULL_WITH_SECONDS,\n FFFF: Formats.DATETIME_HUGE_WITH_SECONDS,\n};\n\n/**\n * @private\n */\n\nexport default class Formatter {\n static create(locale, opts = {}) {\n return new Formatter(locale, opts);\n }\n\n static parseFormat(fmt) {\n // white-space is always considered a literal in user-provided formats\n // the \" \" token has a special meaning (see unitForToken)\n\n let current = null,\n currentFull = \"\",\n bracketed = false;\n const splits = [];\n for (let i = 0; i < fmt.length; i++) {\n const c = fmt.charAt(i);\n if (c === \"'\") {\n if (currentFull.length > 0) {\n splits.push({ literal: bracketed || /^\\s+$/.test(currentFull), val: currentFull });\n }\n current = null;\n currentFull = \"\";\n bracketed = !bracketed;\n } else if (bracketed) {\n currentFull += c;\n } else if (c === current) {\n currentFull += c;\n } else {\n if (currentFull.length > 0) {\n splits.push({ literal: /^\\s+$/.test(currentFull), val: currentFull });\n }\n currentFull = c;\n current = c;\n }\n }\n\n if (currentFull.length > 0) {\n splits.push({ literal: bracketed || /^\\s+$/.test(currentFull), val: currentFull });\n }\n\n return splits;\n }\n\n static macroTokenToFormatOpts(token) {\n return macroTokenToFormatOpts[token];\n }\n\n constructor(locale, formatOpts) {\n this.opts = formatOpts;\n this.loc = locale;\n this.systemLoc = null;\n }\n\n formatWithSystemDefault(dt, opts) {\n if (this.systemLoc === null) {\n this.systemLoc = this.loc.redefaultToSystem();\n }\n const df = this.systemLoc.dtFormatter(dt, { ...this.opts, ...opts });\n return df.format();\n }\n\n dtFormatter(dt, opts = {}) {\n return this.loc.dtFormatter(dt, { ...this.opts, ...opts });\n }\n\n formatDateTime(dt, opts) {\n return this.dtFormatter(dt, opts).format();\n }\n\n formatDateTimeParts(dt, opts) {\n return this.dtFormatter(dt, opts).formatToParts();\n }\n\n formatInterval(interval, opts) {\n const df = this.dtFormatter(interval.start, opts);\n return df.dtf.formatRange(interval.start.toJSDate(), interval.end.toJSDate());\n }\n\n resolvedOptions(dt, opts) {\n return this.dtFormatter(dt, opts).resolvedOptions();\n }\n\n num(n, p = 0) {\n // we get some perf out of doing this here, annoyingly\n if (this.opts.forceSimple) {\n return padStart(n, p);\n }\n\n const opts = { ...this.opts };\n\n if (p > 0) {\n opts.padTo = p;\n }\n\n return this.loc.numberFormatter(opts).format(n);\n }\n\n formatDateTimeFromString(dt, fmt) {\n const knownEnglish = this.loc.listingMode() === \"en\",\n useDateTimeFormatter = this.loc.outputCalendar && this.loc.outputCalendar !== \"gregory\",\n string = (opts, extract) => this.loc.extract(dt, opts, extract),\n formatOffset = (opts) => {\n if (dt.isOffsetFixed && dt.offset === 0 && opts.allowZ) {\n return \"Z\";\n }\n\n return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : \"\";\n },\n meridiem = () =>\n knownEnglish\n ? English.meridiemForDateTime(dt)\n : string({ hour: \"numeric\", hourCycle: \"h12\" }, \"dayperiod\"),\n month = (length, standalone) =>\n knownEnglish\n ? English.monthForDateTime(dt, length)\n : string(standalone ? { month: length } : { month: length, day: \"numeric\" }, \"month\"),\n weekday = (length, standalone) =>\n knownEnglish\n ? English.weekdayForDateTime(dt, length)\n : string(\n standalone ? { weekday: length } : { weekday: length, month: \"long\", day: \"numeric\" },\n \"weekday\"\n ),\n maybeMacro = (token) => {\n const formatOpts = Formatter.macroTokenToFormatOpts(token);\n if (formatOpts) {\n return this.formatWithSystemDefault(dt, formatOpts);\n } else {\n return token;\n }\n },\n era = (length) =>\n knownEnglish ? English.eraForDateTime(dt, length) : string({ era: length }, \"era\"),\n tokenToString = (token) => {\n // Where possible: https://cldr.unicode.org/translation/date-time/date-time-symbols\n switch (token) {\n // ms\n case \"S\":\n return this.num(dt.millisecond);\n case \"u\":\n // falls through\n case \"SSS\":\n return this.num(dt.millisecond, 3);\n // seconds\n case \"s\":\n return this.num(dt.second);\n case \"ss\":\n return this.num(dt.second, 2);\n // fractional seconds\n case \"uu\":\n return this.num(Math.floor(dt.millisecond / 10), 2);\n case \"uuu\":\n return this.num(Math.floor(dt.millisecond / 100));\n // minutes\n case \"m\":\n return this.num(dt.minute);\n case \"mm\":\n return this.num(dt.minute, 2);\n // hours\n case \"h\":\n return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12);\n case \"hh\":\n return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12, 2);\n case \"H\":\n return this.num(dt.hour);\n case \"HH\":\n return this.num(dt.hour, 2);\n // offset\n case \"Z\":\n // like +6\n return formatOffset({ format: \"narrow\", allowZ: this.opts.allowZ });\n case \"ZZ\":\n // like +06:00\n return formatOffset({ format: \"short\", allowZ: this.opts.allowZ });\n case \"ZZZ\":\n // like +0600\n return formatOffset({ format: \"techie\", allowZ: this.opts.allowZ });\n case \"ZZZZ\":\n // like EST\n return dt.zone.offsetName(dt.ts, { format: \"short\", locale: this.loc.locale });\n case \"ZZZZZ\":\n // like Eastern Standard Time\n return dt.zone.offsetName(dt.ts, { format: \"long\", locale: this.loc.locale });\n // zone\n case \"z\":\n // like America/New_York\n return dt.zoneName;\n // meridiems\n case \"a\":\n return meridiem();\n // dates\n case \"d\":\n return useDateTimeFormatter ? string({ day: \"numeric\" }, \"day\") : this.num(dt.day);\n case \"dd\":\n return useDateTimeFormatter ? string({ day: \"2-digit\" }, \"day\") : this.num(dt.day, 2);\n // weekdays - standalone\n case \"c\":\n // like 1\n return this.num(dt.weekday);\n case \"ccc\":\n // like 'Tues'\n return weekday(\"short\", true);\n case \"cccc\":\n // like 'Tuesday'\n return weekday(\"long\", true);\n case \"ccccc\":\n // like 'T'\n return weekday(\"narrow\", true);\n // weekdays - format\n case \"E\":\n // like 1\n return this.num(dt.weekday);\n case \"EEE\":\n // like 'Tues'\n return weekday(\"short\", false);\n case \"EEEE\":\n // like 'Tuesday'\n return weekday(\"long\", false);\n case \"EEEEE\":\n // like 'T'\n return weekday(\"narrow\", false);\n // months - standalone\n case \"L\":\n // like 1\n return useDateTimeFormatter\n ? string({ month: \"numeric\", day: \"numeric\" }, \"month\")\n : this.num(dt.month);\n case \"LL\":\n // like 01, doesn't seem to work\n return useDateTimeFormatter\n ? string({ month: \"2-digit\", day: \"numeric\" }, \"month\")\n : this.num(dt.month, 2);\n case \"LLL\":\n // like Jan\n return month(\"short\", true);\n case \"LLLL\":\n // like January\n return month(\"long\", true);\n case \"LLLLL\":\n // like J\n return month(\"narrow\", true);\n // months - format\n case \"M\":\n // like 1\n return useDateTimeFormatter\n ? string({ month: \"numeric\" }, \"month\")\n : this.num(dt.month);\n case \"MM\":\n // like 01\n return useDateTimeFormatter\n ? string({ month: \"2-digit\" }, \"month\")\n : this.num(dt.month, 2);\n case \"MMM\":\n // like Jan\n return month(\"short\", false);\n case \"MMMM\":\n // like January\n return month(\"long\", false);\n case \"MMMMM\":\n // like J\n return month(\"narrow\", false);\n // years\n case \"y\":\n // like 2014\n return useDateTimeFormatter ? string({ year: \"numeric\" }, \"year\") : this.num(dt.year);\n case \"yy\":\n // like 14\n return useDateTimeFormatter\n ? string({ year: \"2-digit\" }, \"year\")\n : this.num(dt.year.toString().slice(-2), 2);\n case \"yyyy\":\n // like 0012\n return useDateTimeFormatter\n ? string({ year: \"numeric\" }, \"year\")\n : this.num(dt.year, 4);\n case \"yyyyyy\":\n // like 000012\n return useDateTimeFormatter\n ? string({ year: \"numeric\" }, \"year\")\n : this.num(dt.year, 6);\n // eras\n case \"G\":\n // like AD\n return era(\"short\");\n case \"GG\":\n // like Anno Domini\n return era(\"long\");\n case \"GGGGG\":\n return era(\"narrow\");\n case \"kk\":\n return this.num(dt.weekYear.toString().slice(-2), 2);\n case \"kkkk\":\n return this.num(dt.weekYear, 4);\n case \"W\":\n return this.num(dt.weekNumber);\n case \"WW\":\n return this.num(dt.weekNumber, 2);\n case \"n\":\n return this.num(dt.localWeekNumber);\n case \"nn\":\n return this.num(dt.localWeekNumber, 2);\n case \"ii\":\n return this.num(dt.localWeekYear.toString().slice(-2), 2);\n case \"iiii\":\n return this.num(dt.localWeekYear, 4);\n case \"o\":\n return this.num(dt.ordinal);\n case \"ooo\":\n return this.num(dt.ordinal, 3);\n case \"q\":\n // like 1\n return this.num(dt.quarter);\n case \"qq\":\n // like 01\n return this.num(dt.quarter, 2);\n case \"X\":\n return this.num(Math.floor(dt.ts / 1000));\n case \"x\":\n return this.num(dt.ts);\n default:\n return maybeMacro(token);\n }\n };\n\n return stringifyTokens(Formatter.parseFormat(fmt), tokenToString);\n }\n\n formatDurationFromString(dur, fmt) {\n const tokenToField = (token) => {\n switch (token[0]) {\n case \"S\":\n return \"millisecond\";\n case \"s\":\n return \"second\";\n case \"m\":\n return \"minute\";\n case \"h\":\n return \"hour\";\n case \"d\":\n return \"day\";\n case \"w\":\n return \"week\";\n case \"M\":\n return \"month\";\n case \"y\":\n return \"year\";\n default:\n return null;\n }\n },\n tokenToString = (lildur) => (token) => {\n const mapped = tokenToField(token);\n if (mapped) {\n return this.num(lildur.get(mapped), token.length);\n } else {\n return token;\n }\n },\n tokens = Formatter.parseFormat(fmt),\n realTokens = tokens.reduce(\n (found, { literal, val }) => (literal ? found : found.concat(val)),\n []\n ),\n collapsed = dur.shiftTo(...realTokens.map(tokenToField).filter((t) => t));\n return stringifyTokens(tokens, tokenToString(collapsed));\n }\n}\n","import {\n untruncateYear,\n signedOffset,\n parseInteger,\n parseMillis,\n isUndefined,\n parseFloating,\n} from \"./util.js\";\nimport * as English from \"./english.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\n/*\n * This file handles parsing for well-specified formats. Here's how it works:\n * Two things go into parsing: a regex to match with and an extractor to take apart the groups in the match.\n * An extractor is just a function that takes a regex match array and returns a { year: ..., month: ... } object\n * parse() does the work of executing the regex and applying the extractor. It takes multiple regex/extractor pairs to try in sequence.\n * Extractors can take a \"cursor\" representing the offset in the match to look at. This makes it easy to combine extractors.\n * combineExtractors() does the work of combining them, keeping track of the cursor through multiple extractions.\n * Some extractions are super dumb and simpleParse and fromStrings help DRY them.\n */\n\nconst ianaRegex = /[A-Za-z_+-]{1,256}(?::?\\/[A-Za-z0-9_+-]{1,256}(?:\\/[A-Za-z0-9_+-]{1,256})?)?/;\n\nfunction combineRegexes(...regexes) {\n const full = regexes.reduce((f, r) => f + r.source, \"\");\n return RegExp(`^${full}$`);\n}\n\nfunction combineExtractors(...extractors) {\n return (m) =>\n extractors\n .reduce(\n ([mergedVals, mergedZone, cursor], ex) => {\n const [val, zone, next] = ex(m, cursor);\n return [{ ...mergedVals, ...val }, zone || mergedZone, next];\n },\n [{}, null, 1]\n )\n .slice(0, 2);\n}\n\nfunction parse(s, ...patterns) {\n if (s == null) {\n return [null, null];\n }\n\n for (const [regex, extractor] of patterns) {\n const m = regex.exec(s);\n if (m) {\n return extractor(m);\n }\n }\n return [null, null];\n}\n\nfunction simpleParse(...keys) {\n return (match, cursor) => {\n const ret = {};\n let i;\n\n for (i = 0; i < keys.length; i++) {\n ret[keys[i]] = parseInteger(match[cursor + i]);\n }\n return [ret, null, cursor + i];\n };\n}\n\n// ISO and SQL parsing\nconst offsetRegex = /(?:(Z)|([+-]\\d\\d)(?::?(\\d\\d))?)/;\nconst isoExtendedZone = `(?:${offsetRegex.source}?(?:\\\\[(${ianaRegex.source})\\\\])?)?`;\nconst isoTimeBaseRegex = /(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:[.,](\\d{1,30}))?)?)?/;\nconst isoTimeRegex = RegExp(`${isoTimeBaseRegex.source}${isoExtendedZone}`);\nconst isoTimeExtensionRegex = RegExp(`(?:T${isoTimeRegex.source})?`);\nconst isoYmdRegex = /([+-]\\d{6}|\\d{4})(?:-?(\\d\\d)(?:-?(\\d\\d))?)?/;\nconst isoWeekRegex = /(\\d{4})-?W(\\d\\d)(?:-?(\\d))?/;\nconst isoOrdinalRegex = /(\\d{4})-?(\\d{3})/;\nconst extractISOWeekData = simpleParse(\"weekYear\", \"weekNumber\", \"weekDay\");\nconst extractISOOrdinalData = simpleParse(\"year\", \"ordinal\");\nconst sqlYmdRegex = /(\\d{4})-(\\d\\d)-(\\d\\d)/; // dumbed-down version of the ISO one\nconst sqlTimeRegex = RegExp(\n `${isoTimeBaseRegex.source} ?(?:${offsetRegex.source}|(${ianaRegex.source}))?`\n);\nconst sqlTimeExtensionRegex = RegExp(`(?: ${sqlTimeRegex.source})?`);\n\nfunction int(match, pos, fallback) {\n const m = match[pos];\n return isUndefined(m) ? fallback : parseInteger(m);\n}\n\nfunction extractISOYmd(match, cursor) {\n const item = {\n year: int(match, cursor),\n month: int(match, cursor + 1, 1),\n day: int(match, cursor + 2, 1),\n };\n\n return [item, null, cursor + 3];\n}\n\nfunction extractISOTime(match, cursor) {\n const item = {\n hours: int(match, cursor, 0),\n minutes: int(match, cursor + 1, 0),\n seconds: int(match, cursor + 2, 0),\n milliseconds: parseMillis(match[cursor + 3]),\n };\n\n return [item, null, cursor + 4];\n}\n\nfunction extractISOOffset(match, cursor) {\n const local = !match[cursor] && !match[cursor + 1],\n fullOffset = signedOffset(match[cursor + 1], match[cursor + 2]),\n zone = local ? null : FixedOffsetZone.instance(fullOffset);\n return [{}, zone, cursor + 3];\n}\n\nfunction extractIANAZone(match, cursor) {\n const zone = match[cursor] ? IANAZone.create(match[cursor]) : null;\n return [{}, zone, cursor + 1];\n}\n\n// ISO time parsing\n\nconst isoTimeOnly = RegExp(`^T?${isoTimeBaseRegex.source}$`);\n\n// ISO duration parsing\n\nconst isoDuration =\n /^-?P(?:(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)Y)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)M)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)W)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)D)?(?:T(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)H)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)M)?(?:(-?\\d{1,20})(?:[.,](-?\\d{1,20}))?S)?)?)$/;\n\nfunction extractISODuration(match) {\n const [s, yearStr, monthStr, weekStr, dayStr, hourStr, minuteStr, secondStr, millisecondsStr] =\n match;\n\n const hasNegativePrefix = s[0] === \"-\";\n const negativeSeconds = secondStr && secondStr[0] === \"-\";\n\n const maybeNegate = (num, force = false) =>\n num !== undefined && (force || (num && hasNegativePrefix)) ? -num : num;\n\n return [\n {\n years: maybeNegate(parseFloating(yearStr)),\n months: maybeNegate(parseFloating(monthStr)),\n weeks: maybeNegate(parseFloating(weekStr)),\n days: maybeNegate(parseFloating(dayStr)),\n hours: maybeNegate(parseFloating(hourStr)),\n minutes: maybeNegate(parseFloating(minuteStr)),\n seconds: maybeNegate(parseFloating(secondStr), secondStr === \"-0\"),\n milliseconds: maybeNegate(parseMillis(millisecondsStr), negativeSeconds),\n },\n ];\n}\n\n// These are a little braindead. EDT *should* tell us that we're in, say, America/New_York\n// and not just that we're in -240 *right now*. But since I don't think these are used that often\n// I'm just going to ignore that\nconst obsOffsets = {\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60,\n};\n\nfunction fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n const result = {\n year: yearStr.length === 2 ? untruncateYear(parseInteger(yearStr)) : parseInteger(yearStr),\n month: English.monthsShort.indexOf(monthStr) + 1,\n day: parseInteger(dayStr),\n hour: parseInteger(hourStr),\n minute: parseInteger(minuteStr),\n };\n\n if (secondStr) result.second = parseInteger(secondStr);\n if (weekdayStr) {\n result.weekday =\n weekdayStr.length > 3\n ? English.weekdaysLong.indexOf(weekdayStr) + 1\n : English.weekdaysShort.indexOf(weekdayStr) + 1;\n }\n\n return result;\n}\n\n// RFC 2822/5322\nconst rfc2822 =\n /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\\d\\d)(\\d\\d)))$/;\n\nfunction extractRFC2822(match) {\n const [\n ,\n weekdayStr,\n dayStr,\n monthStr,\n yearStr,\n hourStr,\n minuteStr,\n secondStr,\n obsOffset,\n milOffset,\n offHourStr,\n offMinuteStr,\n ] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n\n let offset;\n if (obsOffset) {\n offset = obsOffsets[obsOffset];\n } else if (milOffset) {\n offset = 0;\n } else {\n offset = signedOffset(offHourStr, offMinuteStr);\n }\n\n return [result, new FixedOffsetZone(offset)];\n}\n\nfunction preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^()]*\\)|[\\n\\t]/g, \" \")\n .replace(/(\\s\\s+)/g, \" \")\n .trim();\n}\n\n// http date\n\nconst rfc1123 =\n /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\\d\\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\\d{4}) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n rfc850 =\n /^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\\d\\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n ascii =\n /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \\d|\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) (\\d{4})$/;\n\nfunction extractRFC1123Or850(match) {\n const [, weekdayStr, dayStr, monthStr, yearStr, hourStr, minuteStr, secondStr] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n return [result, FixedOffsetZone.utcInstance];\n}\n\nfunction extractASCII(match) {\n const [, weekdayStr, monthStr, dayStr, hourStr, minuteStr, secondStr, yearStr] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n return [result, FixedOffsetZone.utcInstance];\n}\n\nconst isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex);\nconst isoWeekWithTimeExtensionRegex = combineRegexes(isoWeekRegex, isoTimeExtensionRegex);\nconst isoOrdinalWithTimeExtensionRegex = combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex);\nconst isoTimeCombinedRegex = combineRegexes(isoTimeRegex);\n\nconst extractISOYmdTimeAndOffset = combineExtractors(\n extractISOYmd,\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\nconst extractISOWeekTimeAndOffset = combineExtractors(\n extractISOWeekData,\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\nconst extractISOOrdinalDateAndTime = combineExtractors(\n extractISOOrdinalData,\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\nconst extractISOTimeAndOffset = combineExtractors(\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\n\n/*\n * @private\n */\n\nexport function parseISODate(s) {\n return parse(\n s,\n [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset],\n [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset],\n [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDateAndTime],\n [isoTimeCombinedRegex, extractISOTimeAndOffset]\n );\n}\n\nexport function parseRFC2822Date(s) {\n return parse(preprocessRFC2822(s), [rfc2822, extractRFC2822]);\n}\n\nexport function parseHTTPDate(s) {\n return parse(\n s,\n [rfc1123, extractRFC1123Or850],\n [rfc850, extractRFC1123Or850],\n [ascii, extractASCII]\n );\n}\n\nexport function parseISODuration(s) {\n return parse(s, [isoDuration, extractISODuration]);\n}\n\nconst extractISOTimeOnly = combineExtractors(extractISOTime);\n\nexport function parseISOTimeOnly(s) {\n return parse(s, [isoTimeOnly, extractISOTimeOnly]);\n}\n\nconst sqlYmdWithTimeExtensionRegex = combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex);\nconst sqlTimeCombinedRegex = combineRegexes(sqlTimeRegex);\n\nconst extractISOTimeOffsetAndIANAZone = combineExtractors(\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\n\nexport function parseSQL(s) {\n return parse(\n s,\n [sqlYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset],\n [sqlTimeCombinedRegex, extractISOTimeOffsetAndIANAZone]\n );\n}\n","import { InvalidArgumentError, InvalidDurationError, InvalidUnitError } from \"./errors.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport Invalid from \"./impl/invalid.js\";\nimport Locale from \"./impl/locale.js\";\nimport { parseISODuration, parseISOTimeOnly } from \"./impl/regexParser.js\";\nimport {\n asNumber,\n hasOwnProperty,\n isNumber,\n isUndefined,\n normalizeObject,\n roundTo,\n} from \"./impl/util.js\";\nimport Settings from \"./settings.js\";\nimport DateTime from \"./datetime.js\";\n\nconst INVALID = \"Invalid Duration\";\n\n// unit conversion constants\nexport const lowOrderMatrix = {\n weeks: {\n days: 7,\n hours: 7 * 24,\n minutes: 7 * 24 * 60,\n seconds: 7 * 24 * 60 * 60,\n milliseconds: 7 * 24 * 60 * 60 * 1000,\n },\n days: {\n hours: 24,\n minutes: 24 * 60,\n seconds: 24 * 60 * 60,\n milliseconds: 24 * 60 * 60 * 1000,\n },\n hours: { minutes: 60, seconds: 60 * 60, milliseconds: 60 * 60 * 1000 },\n minutes: { seconds: 60, milliseconds: 60 * 1000 },\n seconds: { milliseconds: 1000 },\n },\n casualMatrix = {\n years: {\n quarters: 4,\n months: 12,\n weeks: 52,\n days: 365,\n hours: 365 * 24,\n minutes: 365 * 24 * 60,\n seconds: 365 * 24 * 60 * 60,\n milliseconds: 365 * 24 * 60 * 60 * 1000,\n },\n quarters: {\n months: 3,\n weeks: 13,\n days: 91,\n hours: 91 * 24,\n minutes: 91 * 24 * 60,\n seconds: 91 * 24 * 60 * 60,\n milliseconds: 91 * 24 * 60 * 60 * 1000,\n },\n months: {\n weeks: 4,\n days: 30,\n hours: 30 * 24,\n minutes: 30 * 24 * 60,\n seconds: 30 * 24 * 60 * 60,\n milliseconds: 30 * 24 * 60 * 60 * 1000,\n },\n\n ...lowOrderMatrix,\n },\n daysInYearAccurate = 146097.0 / 400,\n daysInMonthAccurate = 146097.0 / 4800,\n accurateMatrix = {\n years: {\n quarters: 4,\n months: 12,\n weeks: daysInYearAccurate / 7,\n days: daysInYearAccurate,\n hours: daysInYearAccurate * 24,\n minutes: daysInYearAccurate * 24 * 60,\n seconds: daysInYearAccurate * 24 * 60 * 60,\n milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000,\n },\n quarters: {\n months: 3,\n weeks: daysInYearAccurate / 28,\n days: daysInYearAccurate / 4,\n hours: (daysInYearAccurate * 24) / 4,\n minutes: (daysInYearAccurate * 24 * 60) / 4,\n seconds: (daysInYearAccurate * 24 * 60 * 60) / 4,\n milliseconds: (daysInYearAccurate * 24 * 60 * 60 * 1000) / 4,\n },\n months: {\n weeks: daysInMonthAccurate / 7,\n days: daysInMonthAccurate,\n hours: daysInMonthAccurate * 24,\n minutes: daysInMonthAccurate * 24 * 60,\n seconds: daysInMonthAccurate * 24 * 60 * 60,\n milliseconds: daysInMonthAccurate * 24 * 60 * 60 * 1000,\n },\n ...lowOrderMatrix,\n };\n\n// units ordered by size\nconst orderedUnits = [\n \"years\",\n \"quarters\",\n \"months\",\n \"weeks\",\n \"days\",\n \"hours\",\n \"minutes\",\n \"seconds\",\n \"milliseconds\",\n];\n\nconst reverseUnits = orderedUnits.slice(0).reverse();\n\n// clone really means \"create another instance just like this one, but with these changes\"\nfunction clone(dur, alts, clear = false) {\n // deep merge for vals\n const conf = {\n values: clear ? alts.values : { ...dur.values, ...(alts.values || {}) },\n loc: dur.loc.clone(alts.loc),\n conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy,\n matrix: alts.matrix || dur.matrix,\n };\n return new Duration(conf);\n}\n\nfunction durationToMillis(matrix, vals) {\n let sum = vals.milliseconds ?? 0;\n for (const unit of reverseUnits.slice(1)) {\n if (vals[unit]) {\n sum += vals[unit] * matrix[unit][\"milliseconds\"];\n }\n }\n return sum;\n}\n\n// NB: mutates parameters\nfunction normalizeValues(matrix, vals) {\n // the logic below assumes the overall value of the duration is positive\n // if this is not the case, factor is used to make it so\n const factor = durationToMillis(matrix, vals) < 0 ? -1 : 1;\n\n orderedUnits.reduceRight((previous, current) => {\n if (!isUndefined(vals[current])) {\n if (previous) {\n const previousVal = vals[previous] * factor;\n const conv = matrix[current][previous];\n\n // if (previousVal < 0):\n // lower order unit is negative (e.g. { years: 2, days: -2 })\n // normalize this by reducing the higher order unit by the appropriate amount\n // and increasing the lower order unit\n // this can never make the higher order unit negative, because this function only operates\n // on positive durations, so the amount of time represented by the lower order unit cannot\n // be larger than the higher order unit\n // else:\n // lower order unit is positive (e.g. { years: 2, days: 450 } or { years: -2, days: 450 })\n // in this case we attempt to convert as much as possible from the lower order unit into\n // the higher order one\n //\n // Math.floor takes care of both of these cases, rounding away from 0\n // if previousVal < 0 it makes the absolute value larger\n // if previousVal >= it makes the absolute value smaller\n const rollUp = Math.floor(previousVal / conv);\n vals[current] += rollUp * factor;\n vals[previous] -= rollUp * conv * factor;\n }\n return current;\n } else {\n return previous;\n }\n }, null);\n\n // try to convert any decimals into smaller units if possible\n // for example for { years: 2.5, days: 0, seconds: 0 } we want to get { years: 2, days: 182, hours: 12 }\n orderedUnits.reduce((previous, current) => {\n if (!isUndefined(vals[current])) {\n if (previous) {\n const fraction = vals[previous] % 1;\n vals[previous] -= fraction;\n vals[current] += fraction * matrix[previous][current];\n }\n return current;\n } else {\n return previous;\n }\n }, null);\n}\n\n// Remove all properties with a value of 0 from an object\nfunction removeZeroes(vals) {\n const newVals = {};\n for (const [key, value] of Object.entries(vals)) {\n if (value !== 0) {\n newVals[key] = value;\n }\n }\n return newVals;\n}\n\n/**\n * A Duration object represents a period of time, like \"2 months\" or \"1 day, 1 hour\". Conceptually, it's just a map of units to their quantities, accompanied by some additional configuration and methods for creating, parsing, interrogating, transforming, and formatting them. They can be used on their own or in conjunction with other Luxon types; for example, you can use {@link DateTime#plus} to add a Duration object to a DateTime, producing another DateTime.\n *\n * Here is a brief overview of commonly used methods and getters in Duration:\n *\n * * **Creation** To create a Duration, use {@link Duration.fromMillis}, {@link Duration.fromObject}, or {@link Duration.fromISO}.\n * * **Unit values** See the {@link Duration#years}, {@link Duration#months}, {@link Duration#weeks}, {@link Duration#days}, {@link Duration#hours}, {@link Duration#minutes}, {@link Duration#seconds}, {@link Duration#milliseconds} accessors.\n * * **Configuration** See {@link Duration#locale} and {@link Duration#numberingSystem} accessors.\n * * **Transformation** To create new Durations out of old ones use {@link Duration#plus}, {@link Duration#minus}, {@link Duration#normalize}, {@link Duration#set}, {@link Duration#reconfigure}, {@link Duration#shiftTo}, and {@link Duration#negate}.\n * * **Output** To convert the Duration into other representations, see {@link Duration#as}, {@link Duration#toISO}, {@link Duration#toFormat}, and {@link Duration#toJSON}\n *\n * There's are more methods documented below. In addition, for more information on subtler topics like internationalization and validity, see the external documentation.\n */\nexport default class Duration {\n /**\n * @private\n */\n constructor(config) {\n const accurate = config.conversionAccuracy === \"longterm\" || false;\n let matrix = accurate ? accurateMatrix : casualMatrix;\n\n if (config.matrix) {\n matrix = config.matrix;\n }\n\n /**\n * @access private\n */\n this.values = config.values;\n /**\n * @access private\n */\n this.loc = config.loc || Locale.create();\n /**\n * @access private\n */\n this.conversionAccuracy = accurate ? \"longterm\" : \"casual\";\n /**\n * @access private\n */\n this.invalid = config.invalid || null;\n /**\n * @access private\n */\n this.matrix = matrix;\n /**\n * @access private\n */\n this.isLuxonDuration = true;\n }\n\n /**\n * Create Duration from a number of milliseconds.\n * @param {number} count of milliseconds\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @return {Duration}\n */\n static fromMillis(count, opts) {\n return Duration.fromObject({ milliseconds: count }, opts);\n }\n\n /**\n * Create a Duration from a JavaScript object with keys like 'years' and 'hours'.\n * If this object is empty then a zero milliseconds duration is returned.\n * @param {Object} obj - the object to create the DateTime from\n * @param {number} obj.years\n * @param {number} obj.quarters\n * @param {number} obj.months\n * @param {number} obj.weeks\n * @param {number} obj.days\n * @param {number} obj.hours\n * @param {number} obj.minutes\n * @param {number} obj.seconds\n * @param {number} obj.milliseconds\n * @param {Object} [opts=[]] - options for creating this Duration\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n * @param {string} [opts.matrix=Object] - the custom conversion system to use\n * @return {Duration}\n */\n static fromObject(obj, opts = {}) {\n if (obj == null || typeof obj !== \"object\") {\n throw new InvalidArgumentError(\n `Duration.fromObject: argument expected to be an object, got ${\n obj === null ? \"null\" : typeof obj\n }`\n );\n }\n\n return new Duration({\n values: normalizeObject(obj, Duration.normalizeUnit),\n loc: Locale.fromObject(opts),\n conversionAccuracy: opts.conversionAccuracy,\n matrix: opts.matrix,\n });\n }\n\n /**\n * Create a Duration from DurationLike.\n *\n * @param {Object | number | Duration} durationLike\n * One of:\n * - object with keys like 'years' and 'hours'.\n * - number representing milliseconds\n * - Duration instance\n * @return {Duration}\n */\n static fromDurationLike(durationLike) {\n if (isNumber(durationLike)) {\n return Duration.fromMillis(durationLike);\n } else if (Duration.isDuration(durationLike)) {\n return durationLike;\n } else if (typeof durationLike === \"object\") {\n return Duration.fromObject(durationLike);\n } else {\n throw new InvalidArgumentError(\n `Unknown duration argument ${durationLike} of type ${typeof durationLike}`\n );\n }\n }\n\n /**\n * Create a Duration from an ISO 8601 duration string.\n * @param {string} text - text to parse\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n * @param {string} [opts.matrix=Object] - the preset conversion system to use\n * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n * @example Duration.fromISO('P3Y6M1W4DT12H30M5S').toObject() //=> { years: 3, months: 6, weeks: 1, days: 4, hours: 12, minutes: 30, seconds: 5 }\n * @example Duration.fromISO('PT23H').toObject() //=> { hours: 23 }\n * @example Duration.fromISO('P5Y3M').toObject() //=> { years: 5, months: 3 }\n * @return {Duration}\n */\n static fromISO(text, opts) {\n const [parsed] = parseISODuration(text);\n if (parsed) {\n return Duration.fromObject(parsed, opts);\n } else {\n return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n }\n\n /**\n * Create a Duration from an ISO 8601 time string.\n * @param {string} text - text to parse\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n * @param {string} [opts.matrix=Object] - the conversion system to use\n * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n * @example Duration.fromISOTime('11:22:33.444').toObject() //=> { hours: 11, minutes: 22, seconds: 33, milliseconds: 444 }\n * @example Duration.fromISOTime('11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @example Duration.fromISOTime('T11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @example Duration.fromISOTime('1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @example Duration.fromISOTime('T1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @return {Duration}\n */\n static fromISOTime(text, opts) {\n const [parsed] = parseISOTimeOnly(text);\n if (parsed) {\n return Duration.fromObject(parsed, opts);\n } else {\n return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n }\n\n /**\n * Create an invalid Duration.\n * @param {string} reason - simple string of why this datetime is invalid. Should not contain parameters or anything else data-dependent\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {Duration}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the Duration is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidDurationError(invalid);\n } else {\n return new Duration({ invalid });\n }\n }\n\n /**\n * @private\n */\n static normalizeUnit(unit) {\n const normalized = {\n year: \"years\",\n years: \"years\",\n quarter: \"quarters\",\n quarters: \"quarters\",\n month: \"months\",\n months: \"months\",\n week: \"weeks\",\n weeks: \"weeks\",\n day: \"days\",\n days: \"days\",\n hour: \"hours\",\n hours: \"hours\",\n minute: \"minutes\",\n minutes: \"minutes\",\n second: \"seconds\",\n seconds: \"seconds\",\n millisecond: \"milliseconds\",\n milliseconds: \"milliseconds\",\n }[unit ? unit.toLowerCase() : unit];\n\n if (!normalized) throw new InvalidUnitError(unit);\n\n return normalized;\n }\n\n /**\n * Check if an object is a Duration. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isDuration(o) {\n return (o && o.isLuxonDuration) || false;\n }\n\n /**\n * Get the locale of a Duration, such 'en-GB'\n * @type {string}\n */\n get locale() {\n return this.isValid ? this.loc.locale : null;\n }\n\n /**\n * Get the numbering system of a Duration, such 'beng'. The numbering system is used when formatting the Duration\n *\n * @type {string}\n */\n get numberingSystem() {\n return this.isValid ? this.loc.numberingSystem : null;\n }\n\n /**\n * Returns a string representation of this Duration formatted according to the specified format string. You may use these tokens:\n * * `S` for milliseconds\n * * `s` for seconds\n * * `m` for minutes\n * * `h` for hours\n * * `d` for days\n * * `w` for weeks\n * * `M` for months\n * * `y` for years\n * Notes:\n * * Add padding by repeating the token, e.g. \"yy\" pads the years to two digits, \"hhhh\" pads the hours out to four digits\n * * Tokens can be escaped by wrapping with single quotes.\n * * The duration will be converted to the set of units in the format string using {@link Duration#shiftTo} and the Durations's conversion accuracy setting.\n * @param {string} fmt - the format string\n * @param {Object} opts - options\n * @param {boolean} [opts.floor=true] - floor numerical values\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"y d s\") //=> \"1 6 2\"\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"yy dd sss\") //=> \"01 06 002\"\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"M S\") //=> \"12 518402000\"\n * @return {string}\n */\n toFormat(fmt, opts = {}) {\n // reverse-compat since 1.2; we always round down now, never up, and we do it by default\n const fmtOpts = {\n ...opts,\n floor: opts.round !== false && opts.floor !== false,\n };\n return this.isValid\n ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt)\n : INVALID;\n }\n\n /**\n * Returns a string representation of a Duration with all units included.\n * To modify its behavior, use `listStyle` and any Intl.NumberFormat option, though `unitDisplay` is especially relevant.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#options\n * @param {Object} opts - Formatting options. Accepts the same keys as the options parameter of the native `Intl.NumberFormat` constructor, as well as `listStyle`.\n * @param {string} [opts.listStyle='narrow'] - How to format the merged list. Corresponds to the `style` property of the options parameter of the native `Intl.ListFormat` constructor.\n * @example\n * ```js\n * var dur = Duration.fromObject({ days: 1, hours: 5, minutes: 6 })\n * dur.toHuman() //=> '1 day, 5 hours, 6 minutes'\n * dur.toHuman({ listStyle: \"long\" }) //=> '1 day, 5 hours, and 6 minutes'\n * dur.toHuman({ unitDisplay: \"short\" }) //=> '1 day, 5 hr, 6 min'\n * ```\n */\n toHuman(opts = {}) {\n if (!this.isValid) return INVALID;\n\n const l = orderedUnits\n .map((unit) => {\n const val = this.values[unit];\n if (isUndefined(val)) {\n return null;\n }\n return this.loc\n .numberFormatter({ style: \"unit\", unitDisplay: \"long\", ...opts, unit: unit.slice(0, -1) })\n .format(val);\n })\n .filter((n) => n);\n\n return this.loc\n .listFormatter({ type: \"conjunction\", style: opts.listStyle || \"narrow\", ...opts })\n .format(l);\n }\n\n /**\n * Returns a JavaScript object with this Duration's values.\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toObject() //=> { years: 1, days: 6, seconds: 2 }\n * @return {Object}\n */\n toObject() {\n if (!this.isValid) return {};\n return { ...this.values };\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Duration.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n * @example Duration.fromObject({ years: 3, seconds: 45 }).toISO() //=> 'P3YT45S'\n * @example Duration.fromObject({ months: 4, seconds: 45 }).toISO() //=> 'P4MT45S'\n * @example Duration.fromObject({ months: 5 }).toISO() //=> 'P5M'\n * @example Duration.fromObject({ minutes: 5 }).toISO() //=> 'PT5M'\n * @example Duration.fromObject({ milliseconds: 6 }).toISO() //=> 'PT0.006S'\n * @return {string}\n */\n toISO() {\n // we could use the formatter, but this is an easier way to get the minimum string\n if (!this.isValid) return null;\n\n let s = \"P\";\n if (this.years !== 0) s += this.years + \"Y\";\n if (this.months !== 0 || this.quarters !== 0) s += this.months + this.quarters * 3 + \"M\";\n if (this.weeks !== 0) s += this.weeks + \"W\";\n if (this.days !== 0) s += this.days + \"D\";\n if (this.hours !== 0 || this.minutes !== 0 || this.seconds !== 0 || this.milliseconds !== 0)\n s += \"T\";\n if (this.hours !== 0) s += this.hours + \"H\";\n if (this.minutes !== 0) s += this.minutes + \"M\";\n if (this.seconds !== 0 || this.milliseconds !== 0)\n // this will handle \"floating point madness\" by removing extra decimal places\n // https://stackoverflow.com/questions/588004/is-floating-point-math-broken\n s += roundTo(this.seconds + this.milliseconds / 1000, 3) + \"S\";\n if (s === \"P\") s += \"T0S\";\n return s;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Duration, formatted as a time of day.\n * Note that this will return null if the duration is invalid, negative, or equal to or greater than 24 hours.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example Duration.fromObject({ hours: 11 }).toISOTime() //=> '11:00:00.000'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressMilliseconds: true }) //=> '11:00:00'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressSeconds: true }) //=> '11:00'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ includePrefix: true }) //=> 'T11:00:00.000'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ format: 'basic' }) //=> '110000.000'\n * @return {string}\n */\n toISOTime(opts = {}) {\n if (!this.isValid) return null;\n\n const millis = this.toMillis();\n if (millis < 0 || millis >= 86400000) return null;\n\n opts = {\n suppressMilliseconds: false,\n suppressSeconds: false,\n includePrefix: false,\n format: \"extended\",\n ...opts,\n includeOffset: false,\n };\n\n const dateTime = DateTime.fromMillis(millis, { zone: \"UTC\" });\n return dateTime.toISOTime(opts);\n }\n\n /**\n * Returns an ISO 8601 representation of this Duration appropriate for use in JSON.\n * @return {string}\n */\n toJSON() {\n return this.toISO();\n }\n\n /**\n * Returns an ISO 8601 representation of this Duration appropriate for use in debugging.\n * @return {string}\n */\n toString() {\n return this.toISO();\n }\n\n /**\n * Returns a string representation of this Duration appropriate for the REPL.\n * @return {string}\n */\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n if (this.isValid) {\n return `Duration { values: ${JSON.stringify(this.values)} }`;\n } else {\n return `Duration { Invalid, reason: ${this.invalidReason} }`;\n }\n }\n\n /**\n * Returns an milliseconds value of this Duration.\n * @return {number}\n */\n toMillis() {\n if (!this.isValid) return NaN;\n\n return durationToMillis(this.matrix, this.values);\n }\n\n /**\n * Returns an milliseconds value of this Duration. Alias of {@link toMillis}\n * @return {number}\n */\n valueOf() {\n return this.toMillis();\n }\n\n /**\n * Make this Duration longer by the specified amount. Return a newly-constructed Duration.\n * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @return {Duration}\n */\n plus(duration) {\n if (!this.isValid) return this;\n\n const dur = Duration.fromDurationLike(duration),\n result = {};\n\n for (const k of orderedUnits) {\n if (hasOwnProperty(dur.values, k) || hasOwnProperty(this.values, k)) {\n result[k] = dur.get(k) + this.get(k);\n }\n }\n\n return clone(this, { values: result }, true);\n }\n\n /**\n * Make this Duration shorter by the specified amount. Return a newly-constructed Duration.\n * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @return {Duration}\n */\n minus(duration) {\n if (!this.isValid) return this;\n\n const dur = Duration.fromDurationLike(duration);\n return this.plus(dur.negate());\n }\n\n /**\n * Scale this Duration by the specified amount. Return a newly-constructed Duration.\n * @param {function} fn - The function to apply to each unit. Arity is 1 or 2: the value of the unit and, optionally, the unit name. Must return a number.\n * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits(x => x * 2) //=> { hours: 2, minutes: 60 }\n * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits((x, u) => u === \"hours\" ? x * 2 : x) //=> { hours: 2, minutes: 30 }\n * @return {Duration}\n */\n mapUnits(fn) {\n if (!this.isValid) return this;\n const result = {};\n for (const k of Object.keys(this.values)) {\n result[k] = asNumber(fn(this.values[k], k));\n }\n return clone(this, { values: result }, true);\n }\n\n /**\n * Get the value of unit.\n * @param {string} unit - a unit such as 'minute' or 'day'\n * @example Duration.fromObject({years: 2, days: 3}).get('years') //=> 2\n * @example Duration.fromObject({years: 2, days: 3}).get('months') //=> 0\n * @example Duration.fromObject({years: 2, days: 3}).get('days') //=> 3\n * @return {number}\n */\n get(unit) {\n return this[Duration.normalizeUnit(unit)];\n }\n\n /**\n * \"Set\" the values of specified units. Return a newly-constructed Duration.\n * @param {Object} values - a mapping of units to numbers\n * @example dur.set({ years: 2017 })\n * @example dur.set({ hours: 8, minutes: 30 })\n * @return {Duration}\n */\n set(values) {\n if (!this.isValid) return this;\n\n const mixed = { ...this.values, ...normalizeObject(values, Duration.normalizeUnit) };\n return clone(this, { values: mixed });\n }\n\n /**\n * \"Set\" the locale and/or numberingSystem. Returns a newly-constructed Duration.\n * @example dur.reconfigure({ locale: 'en-GB' })\n * @return {Duration}\n */\n reconfigure({ locale, numberingSystem, conversionAccuracy, matrix } = {}) {\n const loc = this.loc.clone({ locale, numberingSystem });\n const opts = { loc, matrix, conversionAccuracy };\n return clone(this, opts);\n }\n\n /**\n * Return the length of the duration in the specified unit.\n * @param {string} unit - a unit such as 'minutes' or 'days'\n * @example Duration.fromObject({years: 1}).as('days') //=> 365\n * @example Duration.fromObject({years: 1}).as('months') //=> 12\n * @example Duration.fromObject({hours: 60}).as('days') //=> 2.5\n * @return {number}\n */\n as(unit) {\n return this.isValid ? this.shiftTo(unit).get(unit) : NaN;\n }\n\n /**\n * Reduce this Duration to its canonical representation in its current units.\n * Assuming the overall value of the Duration is positive, this means:\n * - excessive values for lower-order units are converted to higher-order units (if possible, see first and second example)\n * - negative lower-order units are converted to higher order units (there must be such a higher order unit, otherwise\n * the overall value would be negative, see third example)\n * - fractional values for higher-order units are converted to lower-order units (if possible, see fourth example)\n *\n * If the overall value is negative, the result of this method is equivalent to `this.negate().normalize().negate()`.\n * @example Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 }\n * @example Duration.fromObject({ days: 5000 }).normalize().toObject() //=> { days: 5000 }\n * @example Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 }\n * @example Duration.fromObject({ years: 2.5, days: 0, hours: 0 }).normalize().toObject() //=> { years: 2, days: 182, hours: 12 }\n * @return {Duration}\n */\n normalize() {\n if (!this.isValid) return this;\n const vals = this.toObject();\n normalizeValues(this.matrix, vals);\n return clone(this, { values: vals }, true);\n }\n\n /**\n * Rescale units to its largest representation\n * @example Duration.fromObject({ milliseconds: 90000 }).rescale().toObject() //=> { minutes: 1, seconds: 30 }\n * @return {Duration}\n */\n rescale() {\n if (!this.isValid) return this;\n const vals = removeZeroes(this.normalize().shiftToAll().toObject());\n return clone(this, { values: vals }, true);\n }\n\n /**\n * Convert this Duration into its representation in a different set of units.\n * @example Duration.fromObject({ hours: 1, seconds: 30 }).shiftTo('minutes', 'milliseconds').toObject() //=> { minutes: 60, milliseconds: 30000 }\n * @return {Duration}\n */\n shiftTo(...units) {\n if (!this.isValid) return this;\n\n if (units.length === 0) {\n return this;\n }\n\n units = units.map((u) => Duration.normalizeUnit(u));\n\n const built = {},\n accumulated = {},\n vals = this.toObject();\n let lastUnit;\n\n for (const k of orderedUnits) {\n if (units.indexOf(k) >= 0) {\n lastUnit = k;\n\n let own = 0;\n\n // anything we haven't boiled down yet should get boiled to this unit\n for (const ak in accumulated) {\n own += this.matrix[ak][k] * accumulated[ak];\n accumulated[ak] = 0;\n }\n\n // plus anything that's already in this unit\n if (isNumber(vals[k])) {\n own += vals[k];\n }\n\n // only keep the integer part for now in the hopes of putting any decimal part\n // into a smaller unit later\n const i = Math.trunc(own);\n built[k] = i;\n accumulated[k] = (own * 1000 - i * 1000) / 1000;\n\n // otherwise, keep it in the wings to boil it later\n } else if (isNumber(vals[k])) {\n accumulated[k] = vals[k];\n }\n }\n\n // anything leftover becomes the decimal for the last unit\n // lastUnit must be defined since units is not empty\n for (const key in accumulated) {\n if (accumulated[key] !== 0) {\n built[lastUnit] +=\n key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key];\n }\n }\n\n normalizeValues(this.matrix, built);\n return clone(this, { values: built }, true);\n }\n\n /**\n * Shift this Duration to all available units.\n * Same as shiftTo(\"years\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\")\n * @return {Duration}\n */\n shiftToAll() {\n if (!this.isValid) return this;\n return this.shiftTo(\n \"years\",\n \"months\",\n \"weeks\",\n \"days\",\n \"hours\",\n \"minutes\",\n \"seconds\",\n \"milliseconds\"\n );\n }\n\n /**\n * Return the negative of this Duration.\n * @example Duration.fromObject({ hours: 1, seconds: 30 }).negate().toObject() //=> { hours: -1, seconds: -30 }\n * @return {Duration}\n */\n negate() {\n if (!this.isValid) return this;\n const negated = {};\n for (const k of Object.keys(this.values)) {\n negated[k] = this.values[k] === 0 ? 0 : -this.values[k];\n }\n return clone(this, { values: negated }, true);\n }\n\n /**\n * Get the years.\n * @type {number}\n */\n get years() {\n return this.isValid ? this.values.years || 0 : NaN;\n }\n\n /**\n * Get the quarters.\n * @type {number}\n */\n get quarters() {\n return this.isValid ? this.values.quarters || 0 : NaN;\n }\n\n /**\n * Get the months.\n * @type {number}\n */\n get months() {\n return this.isValid ? this.values.months || 0 : NaN;\n }\n\n /**\n * Get the weeks\n * @type {number}\n */\n get weeks() {\n return this.isValid ? this.values.weeks || 0 : NaN;\n }\n\n /**\n * Get the days.\n * @type {number}\n */\n get days() {\n return this.isValid ? this.values.days || 0 : NaN;\n }\n\n /**\n * Get the hours.\n * @type {number}\n */\n get hours() {\n return this.isValid ? this.values.hours || 0 : NaN;\n }\n\n /**\n * Get the minutes.\n * @type {number}\n */\n get minutes() {\n return this.isValid ? this.values.minutes || 0 : NaN;\n }\n\n /**\n * Get the seconds.\n * @return {number}\n */\n get seconds() {\n return this.isValid ? this.values.seconds || 0 : NaN;\n }\n\n /**\n * Get the milliseconds.\n * @return {number}\n */\n get milliseconds() {\n return this.isValid ? this.values.milliseconds || 0 : NaN;\n }\n\n /**\n * Returns whether the Duration is invalid. Invalid durations are returned by diff operations\n * on invalid DateTimes or Intervals.\n * @return {boolean}\n */\n get isValid() {\n return this.invalid === null;\n }\n\n /**\n * Returns an error code if this Duration became invalid, or null if the Duration is valid\n * @return {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this Duration became invalid, or null if the Duration is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Equality check\n * Two Durations are equal iff they have the same units and the same values for each unit.\n * @param {Duration} other\n * @return {boolean}\n */\n equals(other) {\n if (!this.isValid || !other.isValid) {\n return false;\n }\n\n if (!this.loc.equals(other.loc)) {\n return false;\n }\n\n function eq(v1, v2) {\n // Consider 0 and undefined as equal\n if (v1 === undefined || v1 === 0) return v2 === undefined || v2 === 0;\n return v1 === v2;\n }\n\n for (const u of orderedUnits) {\n if (!eq(this.values[u], other.values[u])) {\n return false;\n }\n }\n return true;\n }\n}\n","import DateTime, { friendlyDateTime } from \"./datetime.js\";\nimport Duration from \"./duration.js\";\nimport Settings from \"./settings.js\";\nimport { InvalidArgumentError, InvalidIntervalError } from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport * as Formats from \"./impl/formats.js\";\n\nconst INVALID = \"Invalid Interval\";\n\n// checks if the start is equal to or before the end\nfunction validateStartEnd(start, end) {\n if (!start || !start.isValid) {\n return Interval.invalid(\"missing or invalid start\");\n } else if (!end || !end.isValid) {\n return Interval.invalid(\"missing or invalid end\");\n } else if (end < start) {\n return Interval.invalid(\n \"end before start\",\n `The end of an interval must be after its start, but you had start=${start.toISO()} and end=${end.toISO()}`\n );\n } else {\n return null;\n }\n}\n\n/**\n * An Interval object represents a half-open interval of time, where each endpoint is a {@link DateTime}. Conceptually, it's a container for those two endpoints, accompanied by methods for creating, parsing, interrogating, comparing, transforming, and formatting them.\n *\n * Here is a brief overview of the most commonly used methods and getters in Interval:\n *\n * * **Creation** To create an Interval, use {@link Interval.fromDateTimes}, {@link Interval.after}, {@link Interval.before}, or {@link Interval.fromISO}.\n * * **Accessors** Use {@link Interval#start} and {@link Interval#end} to get the start and end.\n * * **Interrogation** To analyze the Interval, use {@link Interval#count}, {@link Interval#length}, {@link Interval#hasSame}, {@link Interval#contains}, {@link Interval#isAfter}, or {@link Interval#isBefore}.\n * * **Transformation** To create other Intervals out of this one, use {@link Interval#set}, {@link Interval#splitAt}, {@link Interval#splitBy}, {@link Interval#divideEqually}, {@link Interval.merge}, {@link Interval.xor}, {@link Interval#union}, {@link Interval#intersection}, or {@link Interval#difference}.\n * * **Comparison** To compare this Interval to another one, use {@link Interval#equals}, {@link Interval#overlaps}, {@link Interval#abutsStart}, {@link Interval#abutsEnd}, {@link Interval#engulfs}\n * * **Output** To convert the Interval into other representations, see {@link Interval#toString}, {@link Interval#toLocaleString}, {@link Interval#toISO}, {@link Interval#toISODate}, {@link Interval#toISOTime}, {@link Interval#toFormat}, and {@link Interval#toDuration}.\n */\nexport default class Interval {\n /**\n * @private\n */\n constructor(config) {\n /**\n * @access private\n */\n this.s = config.start;\n /**\n * @access private\n */\n this.e = config.end;\n /**\n * @access private\n */\n this.invalid = config.invalid || null;\n /**\n * @access private\n */\n this.isLuxonInterval = true;\n }\n\n /**\n * Create an invalid Interval.\n * @param {string} reason - simple string of why this Interval is invalid. Should not contain parameters or anything else data-dependent\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {Interval}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the Interval is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidIntervalError(invalid);\n } else {\n return new Interval({ invalid });\n }\n }\n\n /**\n * Create an Interval from a start DateTime and an end DateTime. Inclusive of the start but not the end.\n * @param {DateTime|Date|Object} start\n * @param {DateTime|Date|Object} end\n * @return {Interval}\n */\n static fromDateTimes(start, end) {\n const builtStart = friendlyDateTime(start),\n builtEnd = friendlyDateTime(end);\n\n const validateError = validateStartEnd(builtStart, builtEnd);\n\n if (validateError == null) {\n return new Interval({\n start: builtStart,\n end: builtEnd,\n });\n } else {\n return validateError;\n }\n }\n\n /**\n * Create an Interval from a start DateTime and a Duration to extend to.\n * @param {DateTime|Date|Object} start\n * @param {Duration|Object|number} duration - the length of the Interval.\n * @return {Interval}\n */\n static after(start, duration) {\n const dur = Duration.fromDurationLike(duration),\n dt = friendlyDateTime(start);\n return Interval.fromDateTimes(dt, dt.plus(dur));\n }\n\n /**\n * Create an Interval from an end DateTime and a Duration to extend backwards to.\n * @param {DateTime|Date|Object} end\n * @param {Duration|Object|number} duration - the length of the Interval.\n * @return {Interval}\n */\n static before(end, duration) {\n const dur = Duration.fromDurationLike(duration),\n dt = friendlyDateTime(end);\n return Interval.fromDateTimes(dt.minus(dur), dt);\n }\n\n /**\n * Create an Interval from an ISO 8601 string.\n * Accepts `<start>/<end>`, `<start>/<duration>`, and `<duration>/<end>` formats.\n * @param {string} text - the ISO string to parse\n * @param {Object} [opts] - options to pass {@link DateTime#fromISO} and optionally {@link Duration#fromISO}\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @return {Interval}\n */\n static fromISO(text, opts) {\n const [s, e] = (text || \"\").split(\"/\", 2);\n if (s && e) {\n let start, startIsValid;\n try {\n start = DateTime.fromISO(s, opts);\n startIsValid = start.isValid;\n } catch (e) {\n startIsValid = false;\n }\n\n let end, endIsValid;\n try {\n end = DateTime.fromISO(e, opts);\n endIsValid = end.isValid;\n } catch (e) {\n endIsValid = false;\n }\n\n if (startIsValid && endIsValid) {\n return Interval.fromDateTimes(start, end);\n }\n\n if (startIsValid) {\n const dur = Duration.fromISO(e, opts);\n if (dur.isValid) {\n return Interval.after(start, dur);\n }\n } else if (endIsValid) {\n const dur = Duration.fromISO(s, opts);\n if (dur.isValid) {\n return Interval.before(end, dur);\n }\n }\n }\n return Interval.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n\n /**\n * Check if an object is an Interval. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isInterval(o) {\n return (o && o.isLuxonInterval) || false;\n }\n\n /**\n * Returns the start of the Interval\n * @type {DateTime}\n */\n get start() {\n return this.isValid ? this.s : null;\n }\n\n /**\n * Returns the end of the Interval\n * @type {DateTime}\n */\n get end() {\n return this.isValid ? this.e : null;\n }\n\n /**\n * Returns whether this Interval's end is at least its start, meaning that the Interval isn't 'backwards'.\n * @type {boolean}\n */\n get isValid() {\n return this.invalidReason === null;\n }\n\n /**\n * Returns an error code if this Interval is invalid, or null if the Interval is valid\n * @type {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this Interval became invalid, or null if the Interval is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Returns the length of the Interval in the specified unit.\n * @param {string} unit - the unit (such as 'hours' or 'days') to return the length in.\n * @return {number}\n */\n length(unit = \"milliseconds\") {\n return this.isValid ? this.toDuration(...[unit]).get(unit) : NaN;\n }\n\n /**\n * Returns the count of minutes, hours, days, months, or years included in the Interval, even in part.\n * Unlike {@link Interval#length} this counts sections of the calendar, not periods of time, e.g. specifying 'day'\n * asks 'what dates are included in this interval?', not 'how many days long is this interval?'\n * @param {string} [unit='milliseconds'] - the unit of time to count.\n * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week; this operation will always use the locale of the start DateTime\n * @return {number}\n */\n count(unit = \"milliseconds\", opts) {\n if (!this.isValid) return NaN;\n const start = this.start.startOf(unit, opts);\n let end;\n if (opts?.useLocaleWeeks) {\n end = this.end.reconfigure({ locale: start.locale });\n } else {\n end = this.end;\n }\n end = end.startOf(unit, opts);\n return Math.floor(end.diff(start, unit).get(unit)) + (end.valueOf() !== this.end.valueOf());\n }\n\n /**\n * Returns whether this Interval's start and end are both in the same unit of time\n * @param {string} unit - the unit of time to check sameness on\n * @return {boolean}\n */\n hasSame(unit) {\n return this.isValid ? this.isEmpty() || this.e.minus(1).hasSame(this.s, unit) : false;\n }\n\n /**\n * Return whether this Interval has the same start and end DateTimes.\n * @return {boolean}\n */\n isEmpty() {\n return this.s.valueOf() === this.e.valueOf();\n }\n\n /**\n * Return whether this Interval's start is after the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n isAfter(dateTime) {\n if (!this.isValid) return false;\n return this.s > dateTime;\n }\n\n /**\n * Return whether this Interval's end is before the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n isBefore(dateTime) {\n if (!this.isValid) return false;\n return this.e <= dateTime;\n }\n\n /**\n * Return whether this Interval contains the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n contains(dateTime) {\n if (!this.isValid) return false;\n return this.s <= dateTime && this.e > dateTime;\n }\n\n /**\n * \"Sets\" the start and/or end dates. Returns a newly-constructed Interval.\n * @param {Object} values - the values to set\n * @param {DateTime} values.start - the starting DateTime\n * @param {DateTime} values.end - the ending DateTime\n * @return {Interval}\n */\n set({ start, end } = {}) {\n if (!this.isValid) return this;\n return Interval.fromDateTimes(start || this.s, end || this.e);\n }\n\n /**\n * Split this Interval at each of the specified DateTimes\n * @param {...DateTime} dateTimes - the unit of time to count.\n * @return {Array}\n */\n splitAt(...dateTimes) {\n if (!this.isValid) return [];\n const sorted = dateTimes\n .map(friendlyDateTime)\n .filter((d) => this.contains(d))\n .sort((a, b) => a.toMillis() - b.toMillis()),\n results = [];\n let { s } = this,\n i = 0;\n\n while (s < this.e) {\n const added = sorted[i] || this.e,\n next = +added > +this.e ? this.e : added;\n results.push(Interval.fromDateTimes(s, next));\n s = next;\n i += 1;\n }\n\n return results;\n }\n\n /**\n * Split this Interval into smaller Intervals, each of the specified length.\n * Left over time is grouped into a smaller interval\n * @param {Duration|Object|number} duration - The length of each resulting interval.\n * @return {Array}\n */\n splitBy(duration) {\n const dur = Duration.fromDurationLike(duration);\n\n if (!this.isValid || !dur.isValid || dur.as(\"milliseconds\") === 0) {\n return [];\n }\n\n let { s } = this,\n idx = 1,\n next;\n\n const results = [];\n while (s < this.e) {\n const added = this.start.plus(dur.mapUnits((x) => x * idx));\n next = +added > +this.e ? this.e : added;\n results.push(Interval.fromDateTimes(s, next));\n s = next;\n idx += 1;\n }\n\n return results;\n }\n\n /**\n * Split this Interval into the specified number of smaller intervals.\n * @param {number} numberOfParts - The number of Intervals to divide the Interval into.\n * @return {Array}\n */\n divideEqually(numberOfParts) {\n if (!this.isValid) return [];\n return this.splitBy(this.length() / numberOfParts).slice(0, numberOfParts);\n }\n\n /**\n * Return whether this Interval overlaps with the specified Interval\n * @param {Interval} other\n * @return {boolean}\n */\n overlaps(other) {\n return this.e > other.s && this.s < other.e;\n }\n\n /**\n * Return whether this Interval's end is adjacent to the specified Interval's start.\n * @param {Interval} other\n * @return {boolean}\n */\n abutsStart(other) {\n if (!this.isValid) return false;\n return +this.e === +other.s;\n }\n\n /**\n * Return whether this Interval's start is adjacent to the specified Interval's end.\n * @param {Interval} other\n * @return {boolean}\n */\n abutsEnd(other) {\n if (!this.isValid) return false;\n return +other.e === +this.s;\n }\n\n /**\n * Returns true if this Interval fully contains the specified Interval, specifically if the intersect (of this Interval and the other Interval) is equal to the other Interval; false otherwise.\n * @param {Interval} other\n * @return {boolean}\n */\n engulfs(other) {\n if (!this.isValid) return false;\n return this.s <= other.s && this.e >= other.e;\n }\n\n /**\n * Return whether this Interval has the same start and end as the specified Interval.\n * @param {Interval} other\n * @return {boolean}\n */\n equals(other) {\n if (!this.isValid || !other.isValid) {\n return false;\n }\n\n return this.s.equals(other.s) && this.e.equals(other.e);\n }\n\n /**\n * Return an Interval representing the intersection of this Interval and the specified Interval.\n * Specifically, the resulting Interval has the maximum start time and the minimum end time of the two Intervals.\n * Returns null if the intersection is empty, meaning, the intervals don't intersect.\n * @param {Interval} other\n * @return {Interval}\n */\n intersection(other) {\n if (!this.isValid) return this;\n const s = this.s > other.s ? this.s : other.s,\n e = this.e < other.e ? this.e : other.e;\n\n if (s >= e) {\n return null;\n } else {\n return Interval.fromDateTimes(s, e);\n }\n }\n\n /**\n * Return an Interval representing the union of this Interval and the specified Interval.\n * Specifically, the resulting Interval has the minimum start time and the maximum end time of the two Intervals.\n * @param {Interval} other\n * @return {Interval}\n */\n union(other) {\n if (!this.isValid) return this;\n const s = this.s < other.s ? this.s : other.s,\n e = this.e > other.e ? this.e : other.e;\n return Interval.fromDateTimes(s, e);\n }\n\n /**\n * Merge an array of Intervals into a equivalent minimal set of Intervals.\n * Combines overlapping and adjacent Intervals.\n * @param {Array} intervals\n * @return {Array}\n */\n static merge(intervals) {\n const [found, final] = intervals\n .sort((a, b) => a.s - b.s)\n .reduce(\n ([sofar, current], item) => {\n if (!current) {\n return [sofar, item];\n } else if (current.overlaps(item) || current.abutsStart(item)) {\n return [sofar, current.union(item)];\n } else {\n return [sofar.concat([current]), item];\n }\n },\n [[], null]\n );\n if (final) {\n found.push(final);\n }\n return found;\n }\n\n /**\n * Return an array of Intervals representing the spans of time that only appear in one of the specified Intervals.\n * @param {Array} intervals\n * @return {Array}\n */\n static xor(intervals) {\n let start = null,\n currentCount = 0;\n const results = [],\n ends = intervals.map((i) => [\n { time: i.s, type: \"s\" },\n { time: i.e, type: \"e\" },\n ]),\n flattened = Array.prototype.concat(...ends),\n arr = flattened.sort((a, b) => a.time - b.time);\n\n for (const i of arr) {\n currentCount += i.type === \"s\" ? 1 : -1;\n\n if (currentCount === 1) {\n start = i.time;\n } else {\n if (start && +start !== +i.time) {\n results.push(Interval.fromDateTimes(start, i.time));\n }\n\n start = null;\n }\n }\n\n return Interval.merge(results);\n }\n\n /**\n * Return an Interval representing the span of time in this Interval that doesn't overlap with any of the specified Intervals.\n * @param {...Interval} intervals\n * @return {Array}\n */\n difference(...intervals) {\n return Interval.xor([this].concat(intervals))\n .map((i) => this.intersection(i))\n .filter((i) => i && !i.isEmpty());\n }\n\n /**\n * Returns a string representation of this Interval appropriate for debugging.\n * @return {string}\n */\n toString() {\n if (!this.isValid) return INVALID;\n return `[${this.s.toISO()} – ${this.e.toISO()})`;\n }\n\n /**\n * Returns a string representation of this Interval appropriate for the REPL.\n * @return {string}\n */\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n if (this.isValid) {\n return `Interval { start: ${this.s.toISO()}, end: ${this.e.toISO()} }`;\n } else {\n return `Interval { Invalid, reason: ${this.invalidReason} }`;\n }\n }\n\n /**\n * Returns a localized string representing this Interval. Accepts the same options as the\n * Intl.DateTimeFormat constructor and any presets defined by Luxon, such as\n * {@link DateTime.DATE_FULL} or {@link DateTime.TIME_SIMPLE}. The exact behavior of this method\n * is browser-specific, but in general it will return an appropriate representation of the\n * Interval in the assigned locale. Defaults to the system's locale if no locale has been\n * specified.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {Object} [formatOpts=DateTime.DATE_SHORT] - Either a DateTime preset or\n * Intl.DateTimeFormat constructor options.\n * @param {Object} opts - Options to override the configuration of the start DateTime.\n * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(); //=> 11/7/2022 – 11/8/2022\n * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL); //=> November 7 – 8, 2022\n * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL, { locale: 'fr-FR' }); //=> 7–8 novembre 2022\n * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString(DateTime.TIME_SIMPLE); //=> 6:00 – 8:00 PM\n * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> Mon, Nov 07, 6:00 – 8:00 p\n * @return {string}\n */\n toLocaleString(formatOpts = Formats.DATE_SHORT, opts = {}) {\n return this.isValid\n ? Formatter.create(this.s.loc.clone(opts), formatOpts).formatInterval(this)\n : INVALID;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Interval.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @param {Object} opts - The same options as {@link DateTime#toISO}\n * @return {string}\n */\n toISO(opts) {\n if (!this.isValid) return INVALID;\n return `${this.s.toISO(opts)}/${this.e.toISO(opts)}`;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of date of this Interval.\n * The time components are ignored.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @return {string}\n */\n toISODate() {\n if (!this.isValid) return INVALID;\n return `${this.s.toISODate()}/${this.e.toISODate()}`;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of time of this Interval.\n * The date components are ignored.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @param {Object} opts - The same options as {@link DateTime#toISO}\n * @return {string}\n */\n toISOTime(opts) {\n if (!this.isValid) return INVALID;\n return `${this.s.toISOTime(opts)}/${this.e.toISOTime(opts)}`;\n }\n\n /**\n * Returns a string representation of this Interval formatted according to the specified format\n * string. **You may not want this.** See {@link Interval#toLocaleString} for a more flexible\n * formatting tool.\n * @param {string} dateFormat - The format string. This string formats the start and end time.\n * See {@link DateTime#toFormat} for details.\n * @param {Object} opts - Options.\n * @param {string} [opts.separator = ' – '] - A separator to place between the start and end\n * representations.\n * @return {string}\n */\n toFormat(dateFormat, { separator = \" – \" } = {}) {\n if (!this.isValid) return INVALID;\n return `${this.s.toFormat(dateFormat)}${separator}${this.e.toFormat(dateFormat)}`;\n }\n\n /**\n * Return a Duration representing the time spanned by this interval.\n * @param {string|string[]} [unit=['milliseconds']] - the unit or units (such as 'hours' or 'days') to include in the duration.\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @example Interval.fromDateTimes(dt1, dt2).toDuration().toObject() //=> { milliseconds: 88489257 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration('days').toObject() //=> { days: 1.0241812152777778 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes']).toObject() //=> { hours: 24, minutes: 34.82095 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes', 'seconds']).toObject() //=> { hours: 24, minutes: 34, seconds: 49.257 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration('seconds').toObject() //=> { seconds: 88489.257 }\n * @return {Duration}\n */\n toDuration(unit, opts) {\n if (!this.isValid) {\n return Duration.invalid(this.invalidReason);\n }\n return this.e.diff(this.s, unit, opts);\n }\n\n /**\n * Run mapFn on the interval start and end, returning a new Interval from the resulting DateTimes\n * @param {function} mapFn\n * @return {Interval}\n * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.toUTC())\n * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.plus({ hours: 2 }))\n */\n mapEndpoints(mapFn) {\n return Interval.fromDateTimes(mapFn(this.s), mapFn(this.e));\n }\n}\n","import DateTime from \"./datetime.js\";\nimport Settings from \"./settings.js\";\nimport Locale from \"./impl/locale.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\n\nimport { hasLocaleWeekInfo, hasRelative } from \"./impl/util.js\";\n\n/**\n * The Info class contains static methods for retrieving general time and date related data. For example, it has methods for finding out if a time zone has a DST, for listing the months in any supported locale, and for discovering which of Luxon features are available in the current environment.\n */\nexport default class Info {\n /**\n * Return whether the specified zone contains a DST.\n * @param {string|Zone} [zone='local'] - Zone to check. Defaults to the environment's local zone.\n * @return {boolean}\n */\n static hasDST(zone = Settings.defaultZone) {\n const proto = DateTime.now().setZone(zone).set({ month: 12 });\n\n return !zone.isUniversal && proto.offset !== proto.set({ month: 6 }).offset;\n }\n\n /**\n * Return whether the specified zone is a valid IANA specifier.\n * @param {string} zone - Zone to check\n * @return {boolean}\n */\n static isValidIANAZone(zone) {\n return IANAZone.isValidZone(zone);\n }\n\n /**\n * Converts the input into a {@link Zone} instance.\n *\n * * If `input` is already a Zone instance, it is returned unchanged.\n * * If `input` is a string containing a valid time zone name, a Zone instance\n * with that name is returned.\n * * If `input` is a string that doesn't refer to a known time zone, a Zone\n * instance with {@link Zone#isValid} == false is returned.\n * * If `input is a number, a Zone instance with the specified fixed offset\n * in minutes is returned.\n * * If `input` is `null` or `undefined`, the default zone is returned.\n * @param {string|Zone|number} [input] - the value to be converted\n * @return {Zone}\n */\n static normalizeZone(input) {\n return normalizeZone(input, Settings.defaultZone);\n }\n\n /**\n * Get the weekday on which the week starts according to the given locale.\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @returns {number} the start of the week, 1 for Monday through 7 for Sunday\n */\n static getStartOfWeek({ locale = null, locObj = null } = {}) {\n return (locObj || Locale.create(locale)).getStartOfWeek();\n }\n\n /**\n * Get the minimum number of days necessary in a week before it is considered part of the next year according\n * to the given locale.\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @returns {number}\n */\n static getMinimumDaysInFirstWeek({ locale = null, locObj = null } = {}) {\n return (locObj || Locale.create(locale)).getMinDaysInFirstWeek();\n }\n\n /**\n * Get the weekdays, which are considered the weekend according to the given locale\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @returns {number[]} an array of weekdays, 1 for Monday through 7 for Sunday\n */\n static getWeekendWeekdays({ locale = null, locObj = null } = {}) {\n // copy the array, because we cache it internally\n return (locObj || Locale.create(locale)).getWeekendDays().slice();\n }\n\n /**\n * Return an array of standalone month names.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @param {string} [opts.outputCalendar='gregory'] - the calendar\n * @example Info.months()[0] //=> 'January'\n * @example Info.months('short')[0] //=> 'Jan'\n * @example Info.months('numeric')[0] //=> '1'\n * @example Info.months('short', { locale: 'fr-CA' } )[0] //=> 'janv.'\n * @example Info.months('numeric', { locale: 'ar' })[0] //=> '١'\n * @example Info.months('long', { outputCalendar: 'islamic' })[0] //=> 'Rabiʻ I'\n * @return {Array}\n */\n static months(\n length = \"long\",\n { locale = null, numberingSystem = null, locObj = null, outputCalendar = \"gregory\" } = {}\n ) {\n return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length);\n }\n\n /**\n * Return an array of format month names.\n * Format months differ from standalone months in that they're meant to appear next to the day of the month. In some languages, that\n * changes the string.\n * See {@link Info#months}\n * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @param {string} [opts.outputCalendar='gregory'] - the calendar\n * @return {Array}\n */\n static monthsFormat(\n length = \"long\",\n { locale = null, numberingSystem = null, locObj = null, outputCalendar = \"gregory\" } = {}\n ) {\n return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length, true);\n }\n\n /**\n * Return an array of standalone week names.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {string} [length='long'] - the length of the weekday representation, such as \"narrow\", \"short\", \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @example Info.weekdays()[0] //=> 'Monday'\n * @example Info.weekdays('short')[0] //=> 'Mon'\n * @example Info.weekdays('short', { locale: 'fr-CA' })[0] //=> 'lun.'\n * @example Info.weekdays('short', { locale: 'ar' })[0] //=> 'الاثنين'\n * @return {Array}\n */\n static weekdays(length = \"long\", { locale = null, numberingSystem = null, locObj = null } = {}) {\n return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length);\n }\n\n /**\n * Return an array of format week names.\n * Format weekdays differ from standalone weekdays in that they're meant to appear next to more date information. In some languages, that\n * changes the string.\n * See {@link Info#weekdays}\n * @param {string} [length='long'] - the length of the month representation, such as \"narrow\", \"short\", \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale=null] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @return {Array}\n */\n static weekdaysFormat(\n length = \"long\",\n { locale = null, numberingSystem = null, locObj = null } = {}\n ) {\n return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length, true);\n }\n\n /**\n * Return an array of meridiems.\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @example Info.meridiems() //=> [ 'AM', 'PM' ]\n * @example Info.meridiems({ locale: 'my' }) //=> [ 'နံနက်', 'ညနေ' ]\n * @return {Array}\n */\n static meridiems({ locale = null } = {}) {\n return Locale.create(locale).meridiems();\n }\n\n /**\n * Return an array of eras, such as ['BC', 'AD']. The locale can be specified, but the calendar system is always Gregorian.\n * @param {string} [length='short'] - the length of the era representation, such as \"short\" or \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @example Info.eras() //=> [ 'BC', 'AD' ]\n * @example Info.eras('long') //=> [ 'Before Christ', 'Anno Domini' ]\n * @example Info.eras('long', { locale: 'fr' }) //=> [ 'avant Jésus-Christ', 'après Jésus-Christ' ]\n * @return {Array}\n */\n static eras(length = \"short\", { locale = null } = {}) {\n return Locale.create(locale, null, \"gregory\").eras(length);\n }\n\n /**\n * Return the set of available features in this environment.\n * Some features of Luxon are not available in all environments. For example, on older browsers, relative time formatting support is not available. Use this function to figure out if that's the case.\n * Keys:\n * * `relative`: whether this environment supports relative time formatting\n * * `localeWeek`: whether this environment supports different weekdays for the start of the week based on the locale\n * @example Info.features() //=> { relative: false, localeWeek: true }\n * @return {Object}\n */\n static features() {\n return { relative: hasRelative(), localeWeek: hasLocaleWeekInfo() };\n }\n}\n","import Duration from \"../duration.js\";\n\nfunction dayDiff(earlier, later) {\n const utcDayStart = (dt) => dt.toUTC(0, { keepLocalTime: true }).startOf(\"day\").valueOf(),\n ms = utcDayStart(later) - utcDayStart(earlier);\n return Math.floor(Duration.fromMillis(ms).as(\"days\"));\n}\n\nfunction highOrderDiffs(cursor, later, units) {\n const differs = [\n [\"years\", (a, b) => b.year - a.year],\n [\"quarters\", (a, b) => b.quarter - a.quarter + (b.year - a.year) * 4],\n [\"months\", (a, b) => b.month - a.month + (b.year - a.year) * 12],\n [\n \"weeks\",\n (a, b) => {\n const days = dayDiff(a, b);\n return (days - (days % 7)) / 7;\n },\n ],\n [\"days\", dayDiff],\n ];\n\n const results = {};\n const earlier = cursor;\n let lowestOrder, highWater;\n\n /* This loop tries to diff using larger units first.\n If we overshoot, we backtrack and try the next smaller unit.\n \"cursor\" starts out at the earlier timestamp and moves closer and closer to \"later\"\n as we use smaller and smaller units.\n highWater keeps track of where we would be if we added one more of the smallest unit,\n this is used later to potentially convert any difference smaller than the smallest higher order unit\n into a fraction of that smallest higher order unit\n */\n for (const [unit, differ] of differs) {\n if (units.indexOf(unit) >= 0) {\n lowestOrder = unit;\n\n results[unit] = differ(cursor, later);\n highWater = earlier.plus(results);\n\n if (highWater > later) {\n // we overshot the end point, backtrack cursor by 1\n results[unit]--;\n cursor = earlier.plus(results);\n\n // if we are still overshooting now, we need to backtrack again\n // this happens in certain situations when diffing times in different zones,\n // because this calculation ignores time zones\n if (cursor > later) {\n // keep the \"overshot by 1\" around as highWater\n highWater = cursor;\n // backtrack cursor by 1\n results[unit]--;\n cursor = earlier.plus(results);\n }\n } else {\n cursor = highWater;\n }\n }\n }\n\n return [cursor, results, highWater, lowestOrder];\n}\n\nexport default function (earlier, later, units, opts) {\n let [cursor, results, highWater, lowestOrder] = highOrderDiffs(earlier, later, units);\n\n const remainingMillis = later - cursor;\n\n const lowerOrderUnits = units.filter(\n (u) => [\"hours\", \"minutes\", \"seconds\", \"milliseconds\"].indexOf(u) >= 0\n );\n\n if (lowerOrderUnits.length === 0) {\n if (highWater < later) {\n highWater = cursor.plus({ [lowestOrder]: 1 });\n }\n\n if (highWater !== cursor) {\n results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor);\n }\n }\n\n const duration = Duration.fromObject(results, opts);\n\n if (lowerOrderUnits.length > 0) {\n return Duration.fromMillis(remainingMillis, opts)\n .shiftTo(...lowerOrderUnits)\n .plus(duration);\n } else {\n return duration;\n }\n}\n","import { parseMillis, isUndefined, untruncateYear, signedOffset, hasOwnProperty } from \"./util.js\";\nimport Formatter from \"./formatter.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport DateTime from \"../datetime.js\";\nimport { digitRegex, parseDigits } from \"./digits.js\";\nimport { ConflictingSpecificationError } from \"../errors.js\";\n\nconst MISSING_FTP = \"missing Intl.DateTimeFormat.formatToParts support\";\n\nfunction intUnit(regex, post = (i) => i) {\n return { regex, deser: ([s]) => post(parseDigits(s)) };\n}\n\nconst NBSP = String.fromCharCode(160);\nconst spaceOrNBSP = `[ ${NBSP}]`;\nconst spaceOrNBSPRegExp = new RegExp(spaceOrNBSP, \"g\");\n\nfunction fixListRegex(s) {\n // make dots optional and also make them literal\n // make space and non breakable space characters interchangeable\n return s.replace(/\\./g, \"\\\\.?\").replace(spaceOrNBSPRegExp, spaceOrNBSP);\n}\n\nfunction stripInsensitivities(s) {\n return s\n .replace(/\\./g, \"\") // ignore dots that were made optional\n .replace(spaceOrNBSPRegExp, \" \") // interchange space and nbsp\n .toLowerCase();\n}\n\nfunction oneOf(strings, startIndex) {\n if (strings === null) {\n return null;\n } else {\n return {\n regex: RegExp(strings.map(fixListRegex).join(\"|\")),\n deser: ([s]) =>\n strings.findIndex((i) => stripInsensitivities(s) === stripInsensitivities(i)) + startIndex,\n };\n }\n}\n\nfunction offset(regex, groups) {\n return { regex, deser: ([, h, m]) => signedOffset(h, m), groups };\n}\n\nfunction simple(regex) {\n return { regex, deser: ([s]) => s };\n}\n\nfunction escapeToken(value) {\n return value.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\");\n}\n\n/**\n * @param token\n * @param {Locale} loc\n */\nfunction unitForToken(token, loc) {\n const one = digitRegex(loc),\n two = digitRegex(loc, \"{2}\"),\n three = digitRegex(loc, \"{3}\"),\n four = digitRegex(loc, \"{4}\"),\n six = digitRegex(loc, \"{6}\"),\n oneOrTwo = digitRegex(loc, \"{1,2}\"),\n oneToThree = digitRegex(loc, \"{1,3}\"),\n oneToSix = digitRegex(loc, \"{1,6}\"),\n oneToNine = digitRegex(loc, \"{1,9}\"),\n twoToFour = digitRegex(loc, \"{2,4}\"),\n fourToSix = digitRegex(loc, \"{4,6}\"),\n literal = (t) => ({ regex: RegExp(escapeToken(t.val)), deser: ([s]) => s, literal: true }),\n unitate = (t) => {\n if (token.literal) {\n return literal(t);\n }\n switch (t.val) {\n // era\n case \"G\":\n return oneOf(loc.eras(\"short\"), 0);\n case \"GG\":\n return oneOf(loc.eras(\"long\"), 0);\n // years\n case \"y\":\n return intUnit(oneToSix);\n case \"yy\":\n return intUnit(twoToFour, untruncateYear);\n case \"yyyy\":\n return intUnit(four);\n case \"yyyyy\":\n return intUnit(fourToSix);\n case \"yyyyyy\":\n return intUnit(six);\n // months\n case \"M\":\n return intUnit(oneOrTwo);\n case \"MM\":\n return intUnit(two);\n case \"MMM\":\n return oneOf(loc.months(\"short\", true), 1);\n case \"MMMM\":\n return oneOf(loc.months(\"long\", true), 1);\n case \"L\":\n return intUnit(oneOrTwo);\n case \"LL\":\n return intUnit(two);\n case \"LLL\":\n return oneOf(loc.months(\"short\", false), 1);\n case \"LLLL\":\n return oneOf(loc.months(\"long\", false), 1);\n // dates\n case \"d\":\n return intUnit(oneOrTwo);\n case \"dd\":\n return intUnit(two);\n // ordinals\n case \"o\":\n return intUnit(oneToThree);\n case \"ooo\":\n return intUnit(three);\n // time\n case \"HH\":\n return intUnit(two);\n case \"H\":\n return intUnit(oneOrTwo);\n case \"hh\":\n return intUnit(two);\n case \"h\":\n return intUnit(oneOrTwo);\n case \"mm\":\n return intUnit(two);\n case \"m\":\n return intUnit(oneOrTwo);\n case \"q\":\n return intUnit(oneOrTwo);\n case \"qq\":\n return intUnit(two);\n case \"s\":\n return intUnit(oneOrTwo);\n case \"ss\":\n return intUnit(two);\n case \"S\":\n return intUnit(oneToThree);\n case \"SSS\":\n return intUnit(three);\n case \"u\":\n return simple(oneToNine);\n case \"uu\":\n return simple(oneOrTwo);\n case \"uuu\":\n return intUnit(one);\n // meridiem\n case \"a\":\n return oneOf(loc.meridiems(), 0);\n // weekYear (k)\n case \"kkkk\":\n return intUnit(four);\n case \"kk\":\n return intUnit(twoToFour, untruncateYear);\n // weekNumber (W)\n case \"W\":\n return intUnit(oneOrTwo);\n case \"WW\":\n return intUnit(two);\n // weekdays\n case \"E\":\n case \"c\":\n return intUnit(one);\n case \"EEE\":\n return oneOf(loc.weekdays(\"short\", false), 1);\n case \"EEEE\":\n return oneOf(loc.weekdays(\"long\", false), 1);\n case \"ccc\":\n return oneOf(loc.weekdays(\"short\", true), 1);\n case \"cccc\":\n return oneOf(loc.weekdays(\"long\", true), 1);\n // offset/zone\n case \"Z\":\n case \"ZZ\":\n return offset(new RegExp(`([+-]${oneOrTwo.source})(?::(${two.source}))?`), 2);\n case \"ZZZ\":\n return offset(new RegExp(`([+-]${oneOrTwo.source})(${two.source})?`), 2);\n // we don't support ZZZZ (PST) or ZZZZZ (Pacific Standard Time) in parsing\n // because we don't have any way to figure out what they are\n case \"z\":\n return simple(/[a-z_+-/]{1,256}?/i);\n // this special-case \"token\" represents a place where a macro-token expanded into a white-space literal\n // in this case we accept any non-newline white-space\n case \" \":\n return simple(/[^\\S\\n\\r]/);\n default:\n return literal(t);\n }\n };\n\n const unit = unitate(token) || {\n invalidReason: MISSING_FTP,\n };\n\n unit.token = token;\n\n return unit;\n}\n\nconst partTypeStyleToTokenVal = {\n year: {\n \"2-digit\": \"yy\",\n numeric: \"yyyyy\",\n },\n month: {\n numeric: \"M\",\n \"2-digit\": \"MM\",\n short: \"MMM\",\n long: \"MMMM\",\n },\n day: {\n numeric: \"d\",\n \"2-digit\": \"dd\",\n },\n weekday: {\n short: \"EEE\",\n long: \"EEEE\",\n },\n dayperiod: \"a\",\n dayPeriod: \"a\",\n hour12: {\n numeric: \"h\",\n \"2-digit\": \"hh\",\n },\n hour24: {\n numeric: \"H\",\n \"2-digit\": \"HH\",\n },\n minute: {\n numeric: \"m\",\n \"2-digit\": \"mm\",\n },\n second: {\n numeric: \"s\",\n \"2-digit\": \"ss\",\n },\n timeZoneName: {\n long: \"ZZZZZ\",\n short: \"ZZZ\",\n },\n};\n\nfunction tokenForPart(part, formatOpts, resolvedOpts) {\n const { type, value } = part;\n\n if (type === \"literal\") {\n const isSpace = /^\\s+$/.test(value);\n return {\n literal: !isSpace,\n val: isSpace ? \" \" : value,\n };\n }\n\n const style = formatOpts[type];\n\n // The user might have explicitly specified hour12 or hourCycle\n // if so, respect their decision\n // if not, refer back to the resolvedOpts, which are based on the locale\n let actualType = type;\n if (type === \"hour\") {\n if (formatOpts.hour12 != null) {\n actualType = formatOpts.hour12 ? \"hour12\" : \"hour24\";\n } else if (formatOpts.hourCycle != null) {\n if (formatOpts.hourCycle === \"h11\" || formatOpts.hourCycle === \"h12\") {\n actualType = \"hour12\";\n } else {\n actualType = \"hour24\";\n }\n } else {\n // tokens only differentiate between 24 hours or not,\n // so we do not need to check hourCycle here, which is less supported anyways\n actualType = resolvedOpts.hour12 ? \"hour12\" : \"hour24\";\n }\n }\n let val = partTypeStyleToTokenVal[actualType];\n if (typeof val === \"object\") {\n val = val[style];\n }\n\n if (val) {\n return {\n literal: false,\n val,\n };\n }\n\n return undefined;\n}\n\nfunction buildRegex(units) {\n const re = units.map((u) => u.regex).reduce((f, r) => `${f}(${r.source})`, \"\");\n return [`^${re}$`, units];\n}\n\nfunction match(input, regex, handlers) {\n const matches = input.match(regex);\n\n if (matches) {\n const all = {};\n let matchIndex = 1;\n for (const i in handlers) {\n if (hasOwnProperty(handlers, i)) {\n const h = handlers[i],\n groups = h.groups ? h.groups + 1 : 1;\n if (!h.literal && h.token) {\n all[h.token.val[0]] = h.deser(matches.slice(matchIndex, matchIndex + groups));\n }\n matchIndex += groups;\n }\n }\n return [matches, all];\n } else {\n return [matches, {}];\n }\n}\n\nfunction dateTimeFromMatches(matches) {\n const toField = (token) => {\n switch (token) {\n case \"S\":\n return \"millisecond\";\n case \"s\":\n return \"second\";\n case \"m\":\n return \"minute\";\n case \"h\":\n case \"H\":\n return \"hour\";\n case \"d\":\n return \"day\";\n case \"o\":\n return \"ordinal\";\n case \"L\":\n case \"M\":\n return \"month\";\n case \"y\":\n return \"year\";\n case \"E\":\n case \"c\":\n return \"weekday\";\n case \"W\":\n return \"weekNumber\";\n case \"k\":\n return \"weekYear\";\n case \"q\":\n return \"quarter\";\n default:\n return null;\n }\n };\n\n let zone = null;\n let specificOffset;\n if (!isUndefined(matches.z)) {\n zone = IANAZone.create(matches.z);\n }\n\n if (!isUndefined(matches.Z)) {\n if (!zone) {\n zone = new FixedOffsetZone(matches.Z);\n }\n specificOffset = matches.Z;\n }\n\n if (!isUndefined(matches.q)) {\n matches.M = (matches.q - 1) * 3 + 1;\n }\n\n if (!isUndefined(matches.h)) {\n if (matches.h < 12 && matches.a === 1) {\n matches.h += 12;\n } else if (matches.h === 12 && matches.a === 0) {\n matches.h = 0;\n }\n }\n\n if (matches.G === 0 && matches.y) {\n matches.y = -matches.y;\n }\n\n if (!isUndefined(matches.u)) {\n matches.S = parseMillis(matches.u);\n }\n\n const vals = Object.keys(matches).reduce((r, k) => {\n const f = toField(k);\n if (f) {\n r[f] = matches[k];\n }\n\n return r;\n }, {});\n\n return [vals, zone, specificOffset];\n}\n\nlet dummyDateTimeCache = null;\n\nfunction getDummyDateTime() {\n if (!dummyDateTimeCache) {\n dummyDateTimeCache = DateTime.fromMillis(1555555555555);\n }\n\n return dummyDateTimeCache;\n}\n\nfunction maybeExpandMacroToken(token, locale) {\n if (token.literal) {\n return token;\n }\n\n const formatOpts = Formatter.macroTokenToFormatOpts(token.val);\n const tokens = formatOptsToTokens(formatOpts, locale);\n\n if (tokens == null || tokens.includes(undefined)) {\n return token;\n }\n\n return tokens;\n}\n\nexport function expandMacroTokens(tokens, locale) {\n return Array.prototype.concat(...tokens.map((t) => maybeExpandMacroToken(t, locale)));\n}\n\n/**\n * @private\n */\n\nexport class TokenParser {\n constructor(locale, format) {\n this.locale = locale;\n this.format = format;\n this.tokens = expandMacroTokens(Formatter.parseFormat(format), locale);\n this.units = this.tokens.map((t) => unitForToken(t, locale));\n this.disqualifyingUnit = this.units.find((t) => t.invalidReason);\n\n if (!this.disqualifyingUnit) {\n const [regexString, handlers] = buildRegex(this.units);\n this.regex = RegExp(regexString, \"i\");\n this.handlers = handlers;\n }\n }\n\n explainFromTokens(input) {\n if (!this.isValid) {\n return { input, tokens: this.tokens, invalidReason: this.invalidReason };\n } else {\n const [rawMatches, matches] = match(input, this.regex, this.handlers),\n [result, zone, specificOffset] = matches\n ? dateTimeFromMatches(matches)\n : [null, null, undefined];\n if (hasOwnProperty(matches, \"a\") && hasOwnProperty(matches, \"H\")) {\n throw new ConflictingSpecificationError(\n \"Can't include meridiem when specifying 24-hour format\"\n );\n }\n return {\n input,\n tokens: this.tokens,\n regex: this.regex,\n rawMatches,\n matches,\n result,\n zone,\n specificOffset,\n };\n }\n }\n\n get isValid() {\n return !this.disqualifyingUnit;\n }\n\n get invalidReason() {\n return this.disqualifyingUnit ? this.disqualifyingUnit.invalidReason : null;\n }\n}\n\nexport function explainFromTokens(locale, input, format) {\n const parser = new TokenParser(locale, format);\n return parser.explainFromTokens(input);\n}\n\nexport function parseFromTokens(locale, input, format) {\n const { result, zone, specificOffset, invalidReason } = explainFromTokens(locale, input, format);\n return [result, zone, specificOffset, invalidReason];\n}\n\nexport function formatOptsToTokens(formatOpts, locale) {\n if (!formatOpts) {\n return null;\n }\n\n const formatter = Formatter.create(locale, formatOpts);\n const df = formatter.dtFormatter(getDummyDateTime());\n const parts = df.formatToParts();\n const resolvedOpts = df.resolvedOptions();\n return parts.map((p) => tokenForPart(p, formatOpts, resolvedOpts));\n}\n","import Duration from \"./duration.js\";\nimport Interval from \"./interval.js\";\nimport Settings from \"./settings.js\";\nimport Info from \"./info.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport FixedOffsetZone from \"./zones/fixedOffsetZone.js\";\nimport Locale from \"./impl/locale.js\";\nimport {\n isUndefined,\n maybeArray,\n isDate,\n isNumber,\n bestBy,\n daysInMonth,\n daysInYear,\n isLeapYear,\n weeksInWeekYear,\n normalizeObject,\n roundTo,\n objToLocalTS,\n padStart,\n} from \"./impl/util.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\nimport diff from \"./impl/diff.js\";\nimport { parseRFC2822Date, parseISODate, parseHTTPDate, parseSQL } from \"./impl/regexParser.js\";\nimport {\n parseFromTokens,\n explainFromTokens,\n formatOptsToTokens,\n expandMacroTokens,\n TokenParser,\n} from \"./impl/tokenParser.js\";\nimport {\n gregorianToWeek,\n weekToGregorian,\n gregorianToOrdinal,\n ordinalToGregorian,\n hasInvalidGregorianData,\n hasInvalidWeekData,\n hasInvalidOrdinalData,\n hasInvalidTimeData,\n usesLocalWeekValues,\n isoWeekdayToLocal,\n} from \"./impl/conversions.js\";\nimport * as Formats from \"./impl/formats.js\";\nimport {\n InvalidArgumentError,\n ConflictingSpecificationError,\n InvalidUnitError,\n InvalidDateTimeError,\n} from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\n\nconst INVALID = \"Invalid DateTime\";\nconst MAX_DATE = 8.64e15;\n\nfunction unsupportedZone(zone) {\n return new Invalid(\"unsupported zone\", `the zone \"${zone.name}\" is not supported`);\n}\n\n// we cache week data on the DT object and this intermediates the cache\n/**\n * @param {DateTime} dt\n */\nfunction possiblyCachedWeekData(dt) {\n if (dt.weekData === null) {\n dt.weekData = gregorianToWeek(dt.c);\n }\n return dt.weekData;\n}\n\n/**\n * @param {DateTime} dt\n */\nfunction possiblyCachedLocalWeekData(dt) {\n if (dt.localWeekData === null) {\n dt.localWeekData = gregorianToWeek(\n dt.c,\n dt.loc.getMinDaysInFirstWeek(),\n dt.loc.getStartOfWeek()\n );\n }\n return dt.localWeekData;\n}\n\n// clone really means, \"make a new object with these modifications\". all \"setters\" really use this\n// to create a new object while only changing some of the properties\nfunction clone(inst, alts) {\n const current = {\n ts: inst.ts,\n zone: inst.zone,\n c: inst.c,\n o: inst.o,\n loc: inst.loc,\n invalid: inst.invalid,\n };\n return new DateTime({ ...current, ...alts, old: current });\n}\n\n// find the right offset a given local time. The o input is our guess, which determines which\n// offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST)\nfunction fixOffset(localTS, o, tz) {\n // Our UTC time is just a guess because our offset is just a guess\n let utcGuess = localTS - o * 60 * 1000;\n\n // Test whether the zone matches the offset for this ts\n const o2 = tz.offset(utcGuess);\n\n // If so, offset didn't change and we're done\n if (o === o2) {\n return [utcGuess, o];\n }\n\n // If not, change the ts by the difference in the offset\n utcGuess -= (o2 - o) * 60 * 1000;\n\n // If that gives us the local time we want, we're done\n const o3 = tz.offset(utcGuess);\n if (o2 === o3) {\n return [utcGuess, o2];\n }\n\n // If it's different, we're in a hole time. The offset has changed, but the we don't adjust the time\n return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)];\n}\n\n// convert an epoch timestamp into a calendar object with the given offset\nfunction tsToObj(ts, offset) {\n ts += offset * 60 * 1000;\n\n const d = new Date(ts);\n\n return {\n year: d.getUTCFullYear(),\n month: d.getUTCMonth() + 1,\n day: d.getUTCDate(),\n hour: d.getUTCHours(),\n minute: d.getUTCMinutes(),\n second: d.getUTCSeconds(),\n millisecond: d.getUTCMilliseconds(),\n };\n}\n\n// convert a calendar object to a epoch timestamp\nfunction objToTS(obj, offset, zone) {\n return fixOffset(objToLocalTS(obj), offset, zone);\n}\n\n// create a new DT instance by adding a duration, adjusting for DSTs\nfunction adjustTime(inst, dur) {\n const oPre = inst.o,\n year = inst.c.year + Math.trunc(dur.years),\n month = inst.c.month + Math.trunc(dur.months) + Math.trunc(dur.quarters) * 3,\n c = {\n ...inst.c,\n year,\n month,\n day:\n Math.min(inst.c.day, daysInMonth(year, month)) +\n Math.trunc(dur.days) +\n Math.trunc(dur.weeks) * 7,\n },\n millisToAdd = Duration.fromObject({\n years: dur.years - Math.trunc(dur.years),\n quarters: dur.quarters - Math.trunc(dur.quarters),\n months: dur.months - Math.trunc(dur.months),\n weeks: dur.weeks - Math.trunc(dur.weeks),\n days: dur.days - Math.trunc(dur.days),\n hours: dur.hours,\n minutes: dur.minutes,\n seconds: dur.seconds,\n milliseconds: dur.milliseconds,\n }).as(\"milliseconds\"),\n localTS = objToLocalTS(c);\n\n let [ts, o] = fixOffset(localTS, oPre, inst.zone);\n\n if (millisToAdd !== 0) {\n ts += millisToAdd;\n // that could have changed the offset by going over a DST, but we want to keep the ts the same\n o = inst.zone.offset(ts);\n }\n\n return { ts, o };\n}\n\n// helper useful in turning the results of parsing into real dates\n// by handling the zone options\nfunction parseDataToDateTime(parsed, parsedZone, opts, format, text, specificOffset) {\n const { setZone, zone } = opts;\n if ((parsed && Object.keys(parsed).length !== 0) || parsedZone) {\n const interpretationZone = parsedZone || zone,\n inst = DateTime.fromObject(parsed, {\n ...opts,\n zone: interpretationZone,\n specificOffset,\n });\n return setZone ? inst : inst.setZone(zone);\n } else {\n return DateTime.invalid(\n new Invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ${format}`)\n );\n }\n}\n\n// if you want to output a technical format (e.g. RFC 2822), this helper\n// helps handle the details\nfunction toTechFormat(dt, format, allowZ = true) {\n return dt.isValid\n ? Formatter.create(Locale.create(\"en-US\"), {\n allowZ,\n forceSimple: true,\n }).formatDateTimeFromString(dt, format)\n : null;\n}\n\nfunction toISODate(o, extended) {\n const longFormat = o.c.year > 9999 || o.c.year < 0;\n let c = \"\";\n if (longFormat && o.c.year >= 0) c += \"+\";\n c += padStart(o.c.year, longFormat ? 6 : 4);\n\n if (extended) {\n c += \"-\";\n c += padStart(o.c.month);\n c += \"-\";\n c += padStart(o.c.day);\n } else {\n c += padStart(o.c.month);\n c += padStart(o.c.day);\n }\n return c;\n}\n\nfunction toISOTime(\n o,\n extended,\n suppressSeconds,\n suppressMilliseconds,\n includeOffset,\n extendedZone\n) {\n let c = padStart(o.c.hour);\n if (extended) {\n c += \":\";\n c += padStart(o.c.minute);\n if (o.c.millisecond !== 0 || o.c.second !== 0 || !suppressSeconds) {\n c += \":\";\n }\n } else {\n c += padStart(o.c.minute);\n }\n\n if (o.c.millisecond !== 0 || o.c.second !== 0 || !suppressSeconds) {\n c += padStart(o.c.second);\n\n if (o.c.millisecond !== 0 || !suppressMilliseconds) {\n c += \".\";\n c += padStart(o.c.millisecond, 3);\n }\n }\n\n if (includeOffset) {\n if (o.isOffsetFixed && o.offset === 0 && !extendedZone) {\n c += \"Z\";\n } else if (o.o < 0) {\n c += \"-\";\n c += padStart(Math.trunc(-o.o / 60));\n c += \":\";\n c += padStart(Math.trunc(-o.o % 60));\n } else {\n c += \"+\";\n c += padStart(Math.trunc(o.o / 60));\n c += \":\";\n c += padStart(Math.trunc(o.o % 60));\n }\n }\n\n if (extendedZone) {\n c += \"[\" + o.zone.ianaName + \"]\";\n }\n return c;\n}\n\n// defaults for unspecified units in the supported calendars\nconst defaultUnitValues = {\n month: 1,\n day: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n },\n defaultWeekUnitValues = {\n weekNumber: 1,\n weekday: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n },\n defaultOrdinalUnitValues = {\n ordinal: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n };\n\n// Units in the supported calendars, sorted by bigness\nconst orderedUnits = [\"year\", \"month\", \"day\", \"hour\", \"minute\", \"second\", \"millisecond\"],\n orderedWeekUnits = [\n \"weekYear\",\n \"weekNumber\",\n \"weekday\",\n \"hour\",\n \"minute\",\n \"second\",\n \"millisecond\",\n ],\n orderedOrdinalUnits = [\"year\", \"ordinal\", \"hour\", \"minute\", \"second\", \"millisecond\"];\n\n// standardize case and plurality in units\nfunction normalizeUnit(unit) {\n const normalized = {\n year: \"year\",\n years: \"year\",\n month: \"month\",\n months: \"month\",\n day: \"day\",\n days: \"day\",\n hour: \"hour\",\n hours: \"hour\",\n minute: \"minute\",\n minutes: \"minute\",\n quarter: \"quarter\",\n quarters: \"quarter\",\n second: \"second\",\n seconds: \"second\",\n millisecond: \"millisecond\",\n milliseconds: \"millisecond\",\n weekday: \"weekday\",\n weekdays: \"weekday\",\n weeknumber: \"weekNumber\",\n weeksnumber: \"weekNumber\",\n weeknumbers: \"weekNumber\",\n weekyear: \"weekYear\",\n weekyears: \"weekYear\",\n ordinal: \"ordinal\",\n }[unit.toLowerCase()];\n\n if (!normalized) throw new InvalidUnitError(unit);\n\n return normalized;\n}\n\nfunction normalizeUnitWithLocalWeeks(unit) {\n switch (unit.toLowerCase()) {\n case \"localweekday\":\n case \"localweekdays\":\n return \"localWeekday\";\n case \"localweeknumber\":\n case \"localweeknumbers\":\n return \"localWeekNumber\";\n case \"localweekyear\":\n case \"localweekyears\":\n return \"localWeekYear\";\n default:\n return normalizeUnit(unit);\n }\n}\n\n// cache offsets for zones based on the current timestamp when this function is\n// first called. When we are handling a datetime from components like (year,\n// month, day, hour) in a time zone, we need a guess about what the timezone\n// offset is so that we can convert into a UTC timestamp. One way is to find the\n// offset of now in the zone. The actual date may have a different offset (for\n// example, if we handle a date in June while we're in December in a zone that\n// observes DST), but we can check and adjust that.\n//\n// When handling many dates, calculating the offset for now every time is\n// expensive. It's just a guess, so we can cache the offset to use even if we\n// are right on a time change boundary (we'll just correct in the other\n// direction). Using a timestamp from first read is a slight optimization for\n// handling dates close to the current date, since those dates will usually be\n// in the same offset (we could set the timestamp statically, instead). We use a\n// single timestamp for all zones to make things a bit more predictable.\n//\n// This is safe for quickDT (used by local() and utc()) because we don't fill in\n// higher-order units from tsNow (as we do in fromObject, this requires that\n// offset is calculated from tsNow).\nfunction guessOffsetForZone(zone) {\n if (!zoneOffsetGuessCache[zone]) {\n if (zoneOffsetTs === undefined) {\n zoneOffsetTs = Settings.now();\n }\n\n zoneOffsetGuessCache[zone] = zone.offset(zoneOffsetTs);\n }\n return zoneOffsetGuessCache[zone];\n}\n\n// this is a dumbed down version of fromObject() that runs about 60% faster\n// but doesn't do any validation, makes a bunch of assumptions about what units\n// are present, and so on.\nfunction quickDT(obj, opts) {\n const zone = normalizeZone(opts.zone, Settings.defaultZone);\n if (!zone.isValid) {\n return DateTime.invalid(unsupportedZone(zone));\n }\n\n const loc = Locale.fromObject(opts);\n\n let ts, o;\n\n // assume we have the higher-order units\n if (!isUndefined(obj.year)) {\n for (const u of orderedUnits) {\n if (isUndefined(obj[u])) {\n obj[u] = defaultUnitValues[u];\n }\n }\n\n const invalid = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj);\n if (invalid) {\n return DateTime.invalid(invalid);\n }\n\n const offsetProvis = guessOffsetForZone(zone);\n [ts, o] = objToTS(obj, offsetProvis, zone);\n } else {\n ts = Settings.now();\n }\n\n return new DateTime({ ts, zone, loc, o });\n}\n\nfunction diffRelative(start, end, opts) {\n const round = isUndefined(opts.round) ? true : opts.round,\n format = (c, unit) => {\n c = roundTo(c, round || opts.calendary ? 0 : 2, true);\n const formatter = end.loc.clone(opts).relFormatter(opts);\n return formatter.format(c, unit);\n },\n differ = (unit) => {\n if (opts.calendary) {\n if (!end.hasSame(start, unit)) {\n return end.startOf(unit).diff(start.startOf(unit), unit).get(unit);\n } else return 0;\n } else {\n return end.diff(start, unit).get(unit);\n }\n };\n\n if (opts.unit) {\n return format(differ(opts.unit), opts.unit);\n }\n\n for (const unit of opts.units) {\n const count = differ(unit);\n if (Math.abs(count) >= 1) {\n return format(count, unit);\n }\n }\n return format(start > end ? -0 : 0, opts.units[opts.units.length - 1]);\n}\n\nfunction lastOpts(argList) {\n let opts = {},\n args;\n if (argList.length > 0 && typeof argList[argList.length - 1] === \"object\") {\n opts = argList[argList.length - 1];\n args = Array.from(argList).slice(0, argList.length - 1);\n } else {\n args = Array.from(argList);\n }\n return [opts, args];\n}\n\n/**\n * Timestamp to use for cached zone offset guesses (exposed for test)\n */\nlet zoneOffsetTs;\n/**\n * Cache for zone offset guesses (exposed for test).\n *\n * This optimizes quickDT via guessOffsetForZone to avoid repeated calls of\n * zone.offset().\n */\nlet zoneOffsetGuessCache = {};\n\n/**\n * A DateTime is an immutable data structure representing a specific date and time and accompanying methods. It contains class and instance methods for creating, parsing, interrogating, transforming, and formatting them.\n *\n * A DateTime comprises of:\n * * A timestamp. Each DateTime instance refers to a specific millisecond of the Unix epoch.\n * * A time zone. Each instance is considered in the context of a specific zone (by default the local system's zone).\n * * Configuration properties that effect how output strings are formatted, such as `locale`, `numberingSystem`, and `outputCalendar`.\n *\n * Here is a brief overview of the most commonly used functionality it provides:\n *\n * * **Creation**: To create a DateTime from its components, use one of its factory class methods: {@link DateTime.local}, {@link DateTime.utc}, and (most flexibly) {@link DateTime.fromObject}. To create one from a standard string format, use {@link DateTime.fromISO}, {@link DateTime.fromHTTP}, and {@link DateTime.fromRFC2822}. To create one from a custom string format, use {@link DateTime.fromFormat}. To create one from a native JS date, use {@link DateTime.fromJSDate}.\n * * **Gregorian calendar and time**: To examine the Gregorian properties of a DateTime individually (i.e as opposed to collectively through {@link DateTime#toObject}), use the {@link DateTime#year}, {@link DateTime#month},\n * {@link DateTime#day}, {@link DateTime#hour}, {@link DateTime#minute}, {@link DateTime#second}, {@link DateTime#millisecond} accessors.\n * * **Week calendar**: For ISO week calendar attributes, see the {@link DateTime#weekYear}, {@link DateTime#weekNumber}, and {@link DateTime#weekday} accessors.\n * * **Configuration** See the {@link DateTime#locale} and {@link DateTime#numberingSystem} accessors.\n * * **Transformation**: To transform the DateTime into other DateTimes, use {@link DateTime#set}, {@link DateTime#reconfigure}, {@link DateTime#setZone}, {@link DateTime#setLocale}, {@link DateTime.plus}, {@link DateTime#minus}, {@link DateTime#endOf}, {@link DateTime#startOf}, {@link DateTime#toUTC}, and {@link DateTime#toLocal}.\n * * **Output**: To convert the DateTime to other representations, use the {@link DateTime#toRelative}, {@link DateTime#toRelativeCalendar}, {@link DateTime#toJSON}, {@link DateTime#toISO}, {@link DateTime#toHTTP}, {@link DateTime#toObject}, {@link DateTime#toRFC2822}, {@link DateTime#toString}, {@link DateTime#toLocaleString}, {@link DateTime#toFormat}, {@link DateTime#toMillis} and {@link DateTime#toJSDate}.\n *\n * There's plenty others documented below. In addition, for more information on subtler topics like internationalization, time zones, alternative calendars, validity, and so on, see the external documentation.\n */\nexport default class DateTime {\n /**\n * @access private\n */\n constructor(config) {\n const zone = config.zone || Settings.defaultZone;\n\n let invalid =\n config.invalid ||\n (Number.isNaN(config.ts) ? new Invalid(\"invalid input\") : null) ||\n (!zone.isValid ? unsupportedZone(zone) : null);\n /**\n * @access private\n */\n this.ts = isUndefined(config.ts) ? Settings.now() : config.ts;\n\n let c = null,\n o = null;\n if (!invalid) {\n const unchanged = config.old && config.old.ts === this.ts && config.old.zone.equals(zone);\n\n if (unchanged) {\n [c, o] = [config.old.c, config.old.o];\n } else {\n // If an offset has been passed and we have not been called from\n // clone(), we can trust it and avoid the offset calculation.\n const ot = isNumber(config.o) && !config.old ? config.o : zone.offset(this.ts);\n c = tsToObj(this.ts, ot);\n invalid = Number.isNaN(c.year) ? new Invalid(\"invalid input\") : null;\n c = invalid ? null : c;\n o = invalid ? null : ot;\n }\n }\n\n /**\n * @access private\n */\n this._zone = zone;\n /**\n * @access private\n */\n this.loc = config.loc || Locale.create();\n /**\n * @access private\n */\n this.invalid = invalid;\n /**\n * @access private\n */\n this.weekData = null;\n /**\n * @access private\n */\n this.localWeekData = null;\n /**\n * @access private\n */\n this.c = c;\n /**\n * @access private\n */\n this.o = o;\n /**\n * @access private\n */\n this.isLuxonDateTime = true;\n }\n\n // CONSTRUCT\n\n /**\n * Create a DateTime for the current instant, in the system's time zone.\n *\n * Use Settings to override these default values if needed.\n * @example DateTime.now().toISO() //~> now in the ISO format\n * @return {DateTime}\n */\n static now() {\n return new DateTime({});\n }\n\n /**\n * Create a local DateTime\n * @param {number} [year] - The calendar year. If omitted (as in, call `local()` with no arguments), the current time will be used\n * @param {number} [month=1] - The month, 1-indexed\n * @param {number} [day=1] - The day of the month, 1-indexed\n * @param {number} [hour=0] - The hour of the day, in 24-hour time\n * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n * @example DateTime.local() //~> now\n * @example DateTime.local({ zone: \"America/New_York\" }) //~> now, in US east coast time\n * @example DateTime.local(2017) //~> 2017-01-01T00:00:00\n * @example DateTime.local(2017, 3) //~> 2017-03-01T00:00:00\n * @example DateTime.local(2017, 3, 12, { locale: \"fr\" }) //~> 2017-03-12T00:00:00, with a French locale\n * @example DateTime.local(2017, 3, 12, 5) //~> 2017-03-12T05:00:00\n * @example DateTime.local(2017, 3, 12, 5, { zone: \"utc\" }) //~> 2017-03-12T05:00:00, in UTC\n * @example DateTime.local(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00\n * @example DateTime.local(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10\n * @example DateTime.local(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765\n * @return {DateTime}\n */\n static local() {\n const [opts, args] = lastOpts(arguments),\n [year, month, day, hour, minute, second, millisecond] = args;\n return quickDT({ year, month, day, hour, minute, second, millisecond }, opts);\n }\n\n /**\n * Create a DateTime in UTC\n * @param {number} [year] - The calendar year. If omitted (as in, call `utc()` with no arguments), the current time will be used\n * @param {number} [month=1] - The month, 1-indexed\n * @param {number} [day=1] - The day of the month\n * @param {number} [hour=0] - The hour of the day, in 24-hour time\n * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n * @param {Object} options - configuration options for the DateTime\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} [options.outputCalendar] - the output calendar to set on the resulting DateTime instance\n * @param {string} [options.numberingSystem] - the numbering system to set on the resulting DateTime instance\n * @param {string} [options.weekSettings] - the week settings to set on the resulting DateTime instance\n * @example DateTime.utc() //~> now\n * @example DateTime.utc(2017) //~> 2017-01-01T00:00:00Z\n * @example DateTime.utc(2017, 3) //~> 2017-03-01T00:00:00Z\n * @example DateTime.utc(2017, 3, 12) //~> 2017-03-12T00:00:00Z\n * @example DateTime.utc(2017, 3, 12, 5) //~> 2017-03-12T05:00:00Z\n * @example DateTime.utc(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00Z\n * @example DateTime.utc(2017, 3, 12, 5, 45, { locale: \"fr\" }) //~> 2017-03-12T05:45:00Z with a French locale\n * @example DateTime.utc(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10Z\n * @example DateTime.utc(2017, 3, 12, 5, 45, 10, 765, { locale: \"fr\" }) //~> 2017-03-12T05:45:10.765Z with a French locale\n * @return {DateTime}\n */\n static utc() {\n const [opts, args] = lastOpts(arguments),\n [year, month, day, hour, minute, second, millisecond] = args;\n\n opts.zone = FixedOffsetZone.utcInstance;\n return quickDT({ year, month, day, hour, minute, second, millisecond }, opts);\n }\n\n /**\n * Create a DateTime from a JavaScript Date object. Uses the default zone.\n * @param {Date} date - a JavaScript Date object\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @return {DateTime}\n */\n static fromJSDate(date, options = {}) {\n const ts = isDate(date) ? date.valueOf() : NaN;\n if (Number.isNaN(ts)) {\n return DateTime.invalid(\"invalid input\");\n }\n\n const zoneToUse = normalizeZone(options.zone, Settings.defaultZone);\n if (!zoneToUse.isValid) {\n return DateTime.invalid(unsupportedZone(zoneToUse));\n }\n\n return new DateTime({\n ts: ts,\n zone: zoneToUse,\n loc: Locale.fromObject(options),\n });\n }\n\n /**\n * Create a DateTime from a number of milliseconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n * @param {number} milliseconds - a number of milliseconds since 1970 UTC\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} options.weekSettings - the week settings to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromMillis(milliseconds, options = {}) {\n if (!isNumber(milliseconds)) {\n throw new InvalidArgumentError(\n `fromMillis requires a numerical input, but received a ${typeof milliseconds} with value ${milliseconds}`\n );\n } else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) {\n // this isn't perfect because we can still end up out of range because of additional shifting, but it's a start\n return DateTime.invalid(\"Timestamp out of range\");\n } else {\n return new DateTime({\n ts: milliseconds,\n zone: normalizeZone(options.zone, Settings.defaultZone),\n loc: Locale.fromObject(options),\n });\n }\n }\n\n /**\n * Create a DateTime from a number of seconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n * @param {number} seconds - a number of seconds since 1970 UTC\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} options.weekSettings - the week settings to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromSeconds(seconds, options = {}) {\n if (!isNumber(seconds)) {\n throw new InvalidArgumentError(\"fromSeconds requires a numerical input\");\n } else {\n return new DateTime({\n ts: seconds * 1000,\n zone: normalizeZone(options.zone, Settings.defaultZone),\n loc: Locale.fromObject(options),\n });\n }\n }\n\n /**\n * Create a DateTime from a JavaScript object with keys like 'year' and 'hour' with reasonable defaults.\n * @param {Object} obj - the object to create the DateTime from\n * @param {number} obj.year - a year, such as 1987\n * @param {number} obj.month - a month, 1-12\n * @param {number} obj.day - a day of the month, 1-31, depending on the month\n * @param {number} obj.ordinal - day of the year, 1-365 or 366\n * @param {number} obj.weekYear - an ISO week year\n * @param {number} obj.weekNumber - an ISO week number, between 1 and 52 or 53, depending on the year\n * @param {number} obj.weekday - an ISO weekday, 1-7, where 1 is Monday and 7 is Sunday\n * @param {number} obj.localWeekYear - a week year, according to the locale\n * @param {number} obj.localWeekNumber - a week number, between 1 and 52 or 53, depending on the year, according to the locale\n * @param {number} obj.localWeekday - a weekday, 1-7, where 1 is the first and 7 is the last day of the week, according to the locale\n * @param {number} obj.hour - hour of the day, 0-23\n * @param {number} obj.minute - minute of the hour, 0-59\n * @param {number} obj.second - second of the minute, 0-59\n * @param {number} obj.millisecond - millisecond of the second, 0-999\n * @param {Object} opts - options for creating this DateTime\n * @param {string|Zone} [opts.zone='local'] - interpret the numbers in the context of a particular zone. Can take any value taken as the first argument to setZone()\n * @param {string} [opts.locale='system\\'s locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @example DateTime.fromObject({ year: 1982, month: 5, day: 25}).toISODate() //=> '1982-05-25'\n * @example DateTime.fromObject({ year: 1982 }).toISODate() //=> '1982-01-01'\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }) //~> today at 10:26:06\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'utc' }),\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'local' })\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'America/New_York' })\n * @example DateTime.fromObject({ weekYear: 2016, weekNumber: 2, weekday: 3 }).toISODate() //=> '2016-01-13'\n * @example DateTime.fromObject({ localWeekYear: 2022, localWeekNumber: 1, localWeekday: 1 }, { locale: \"en-US\" }).toISODate() //=> '2021-12-26'\n * @return {DateTime}\n */\n static fromObject(obj, opts = {}) {\n obj = obj || {};\n const zoneToUse = normalizeZone(opts.zone, Settings.defaultZone);\n if (!zoneToUse.isValid) {\n return DateTime.invalid(unsupportedZone(zoneToUse));\n }\n\n const loc = Locale.fromObject(opts);\n const normalized = normalizeObject(obj, normalizeUnitWithLocalWeeks);\n const { minDaysInFirstWeek, startOfWeek } = usesLocalWeekValues(normalized, loc);\n\n const tsNow = Settings.now(),\n offsetProvis = !isUndefined(opts.specificOffset)\n ? opts.specificOffset\n : zoneToUse.offset(tsNow),\n containsOrdinal = !isUndefined(normalized.ordinal),\n containsGregorYear = !isUndefined(normalized.year),\n containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n containsGregor = containsGregorYear || containsGregorMD,\n definiteWeekDef = normalized.weekYear || normalized.weekNumber;\n\n // cases:\n // just a weekday -> this week's instance of that weekday, no worries\n // (gregorian data or ordinal) + (weekYear or weekNumber) -> error\n // (gregorian month or day) + ordinal -> error\n // otherwise just use weeks or ordinals or gregorian, depending on what's specified\n\n if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n throw new ConflictingSpecificationError(\n \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n );\n }\n\n if (containsGregorMD && containsOrdinal) {\n throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n }\n\n const useWeekData = definiteWeekDef || (normalized.weekday && !containsGregor);\n\n // configure ourselves to deal with gregorian dates or week stuff\n let units,\n defaultValues,\n objNow = tsToObj(tsNow, offsetProvis);\n if (useWeekData) {\n units = orderedWeekUnits;\n defaultValues = defaultWeekUnitValues;\n objNow = gregorianToWeek(objNow, minDaysInFirstWeek, startOfWeek);\n } else if (containsOrdinal) {\n units = orderedOrdinalUnits;\n defaultValues = defaultOrdinalUnitValues;\n objNow = gregorianToOrdinal(objNow);\n } else {\n units = orderedUnits;\n defaultValues = defaultUnitValues;\n }\n\n // set default values for missing stuff\n let foundFirst = false;\n for (const u of units) {\n const v = normalized[u];\n if (!isUndefined(v)) {\n foundFirst = true;\n } else if (foundFirst) {\n normalized[u] = defaultValues[u];\n } else {\n normalized[u] = objNow[u];\n }\n }\n\n // make sure the values we have are in range\n const higherOrderInvalid = useWeekData\n ? hasInvalidWeekData(normalized, minDaysInFirstWeek, startOfWeek)\n : containsOrdinal\n ? hasInvalidOrdinalData(normalized)\n : hasInvalidGregorianData(normalized),\n invalid = higherOrderInvalid || hasInvalidTimeData(normalized);\n\n if (invalid) {\n return DateTime.invalid(invalid);\n }\n\n // compute the actual time\n const gregorian = useWeekData\n ? weekToGregorian(normalized, minDaysInFirstWeek, startOfWeek)\n : containsOrdinal\n ? ordinalToGregorian(normalized)\n : normalized,\n [tsFinal, offsetFinal] = objToTS(gregorian, offsetProvis, zoneToUse),\n inst = new DateTime({\n ts: tsFinal,\n zone: zoneToUse,\n o: offsetFinal,\n loc,\n });\n\n // gregorian data + weekday serves only to validate\n if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) {\n return DateTime.invalid(\n \"mismatched weekday\",\n `you can't specify both a weekday of ${normalized.weekday} and a date of ${inst.toISO()}`\n );\n }\n\n if (!inst.isValid) {\n return DateTime.invalid(inst.invalid);\n }\n\n return inst;\n }\n\n /**\n * Create a DateTime from an ISO 8601 string\n * @param {string} text - the ISO string\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the time to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} [opts.outputCalendar] - the output calendar to set on the resulting DateTime instance\n * @param {string} [opts.numberingSystem] - the numbering system to set on the resulting DateTime instance\n * @param {string} [opts.weekSettings] - the week settings to set on the resulting DateTime instance\n * @example DateTime.fromISO('2016-05-25T09:08:34.123')\n * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00')\n * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00', {setZone: true})\n * @example DateTime.fromISO('2016-05-25T09:08:34.123', {zone: 'utc'})\n * @example DateTime.fromISO('2016-W05-4')\n * @return {DateTime}\n */\n static fromISO(text, opts = {}) {\n const [vals, parsedZone] = parseISODate(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"ISO 8601\", text);\n }\n\n /**\n * Create a DateTime from an RFC 2822 string\n * @param {string} text - the RFC 2822 string\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since the offset is always specified in the string itself, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @example DateTime.fromRFC2822('25 Nov 2016 13:23:12 GMT')\n * @example DateTime.fromRFC2822('Fri, 25 Nov 2016 13:23:12 +0600')\n * @example DateTime.fromRFC2822('25 Nov 2016 13:23 Z')\n * @return {DateTime}\n */\n static fromRFC2822(text, opts = {}) {\n const [vals, parsedZone] = parseRFC2822Date(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"RFC 2822\", text);\n }\n\n /**\n * Create a DateTime from an HTTP header date\n * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n * @param {string} text - the HTTP header date\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since HTTP dates are always in UTC, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n * @param {boolean} [opts.setZone=false] - override the zone with the fixed-offset zone specified in the string. For HTTP dates, this is always UTC, so this option is equivalent to setting the `zone` option to 'utc', but this option is included for consistency with similar methods.\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @example DateTime.fromHTTP('Sun, 06 Nov 1994 08:49:37 GMT')\n * @example DateTime.fromHTTP('Sunday, 06-Nov-94 08:49:37 GMT')\n * @example DateTime.fromHTTP('Sun Nov 6 08:49:37 1994')\n * @return {DateTime}\n */\n static fromHTTP(text, opts = {}) {\n const [vals, parsedZone] = parseHTTPDate(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"HTTP\", opts);\n }\n\n /**\n * Create a DateTime from an input string and format string.\n * Defaults to en-US if no locale has been specified, regardless of the system's locale. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/parsing?id=table-of-tokens).\n * @param {string} text - the string to parse\n * @param {string} fmt - the format the string is expected to be in (see the link below for the formats)\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromFormat(text, fmt, opts = {}) {\n if (isUndefined(text) || isUndefined(fmt)) {\n throw new InvalidArgumentError(\"fromFormat requires an input string and a format\");\n }\n\n const { locale = null, numberingSystem = null } = opts,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true,\n }),\n [vals, parsedZone, specificOffset, invalid] = parseFromTokens(localeToUse, text, fmt);\n if (invalid) {\n return DateTime.invalid(invalid);\n } else {\n return parseDataToDateTime(vals, parsedZone, opts, `format ${fmt}`, text, specificOffset);\n }\n }\n\n /**\n * @deprecated use fromFormat instead\n */\n static fromString(text, fmt, opts = {}) {\n return DateTime.fromFormat(text, fmt, opts);\n }\n\n /**\n * Create a DateTime from a SQL date, time, or datetime\n * Defaults to en-US if no locale has been specified, regardless of the system's locale\n * @param {string} text - the string to parse\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @example DateTime.fromSQL('2017-05-15')\n * @example DateTime.fromSQL('2017-05-15 09:12:34')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342+06:00')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles', { setZone: true })\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342', { zone: 'America/Los_Angeles' })\n * @example DateTime.fromSQL('09:12:34.342')\n * @return {DateTime}\n */\n static fromSQL(text, opts = {}) {\n const [vals, parsedZone] = parseSQL(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"SQL\", text);\n }\n\n /**\n * Create an invalid DateTime.\n * @param {string} reason - simple string of why this DateTime is invalid. Should not contain parameters or anything else data-dependent.\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {DateTime}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the DateTime is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidDateTimeError(invalid);\n } else {\n return new DateTime({ invalid });\n }\n }\n\n /**\n * Check if an object is an instance of DateTime. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isDateTime(o) {\n return (o && o.isLuxonDateTime) || false;\n }\n\n /**\n * Produce the format string for a set of options\n * @param formatOpts\n * @param localeOpts\n * @returns {string}\n */\n static parseFormatForOpts(formatOpts, localeOpts = {}) {\n const tokenList = formatOptsToTokens(formatOpts, Locale.fromObject(localeOpts));\n return !tokenList ? null : tokenList.map((t) => (t ? t.val : null)).join(\"\");\n }\n\n /**\n * Produce the the fully expanded format token for the locale\n * Does NOT quote characters, so quoted tokens will not round trip correctly\n * @param fmt\n * @param localeOpts\n * @returns {string}\n */\n static expandFormat(fmt, localeOpts = {}) {\n const expanded = expandMacroTokens(Formatter.parseFormat(fmt), Locale.fromObject(localeOpts));\n return expanded.map((t) => t.val).join(\"\");\n }\n\n static resetCache() {\n zoneOffsetTs = undefined;\n zoneOffsetGuessCache = {};\n }\n\n // INFO\n\n /**\n * Get the value of unit.\n * @param {string} unit - a unit such as 'minute' or 'day'\n * @example DateTime.local(2017, 7, 4).get('month'); //=> 7\n * @example DateTime.local(2017, 7, 4).get('day'); //=> 4\n * @return {number}\n */\n get(unit) {\n return this[unit];\n }\n\n /**\n * Returns whether the DateTime is valid. Invalid DateTimes occur when:\n * * The DateTime was created from invalid calendar information, such as the 13th month or February 30\n * * The DateTime was created by an operation on another invalid date\n * @type {boolean}\n */\n get isValid() {\n return this.invalid === null;\n }\n\n /**\n * Returns an error code if this DateTime is invalid, or null if the DateTime is valid\n * @type {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this DateTime became invalid, or null if the DateTime is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Get the locale of a DateTime, such 'en-GB'. The locale is used when formatting the DateTime\n *\n * @type {string}\n */\n get locale() {\n return this.isValid ? this.loc.locale : null;\n }\n\n /**\n * Get the numbering system of a DateTime, such 'beng'. The numbering system is used when formatting the DateTime\n *\n * @type {string}\n */\n get numberingSystem() {\n return this.isValid ? this.loc.numberingSystem : null;\n }\n\n /**\n * Get the output calendar of a DateTime, such 'islamic'. The output calendar is used when formatting the DateTime\n *\n * @type {string}\n */\n get outputCalendar() {\n return this.isValid ? this.loc.outputCalendar : null;\n }\n\n /**\n * Get the time zone associated with this DateTime.\n * @type {Zone}\n */\n get zone() {\n return this._zone;\n }\n\n /**\n * Get the name of the time zone.\n * @type {string}\n */\n get zoneName() {\n return this.isValid ? this.zone.name : null;\n }\n\n /**\n * Get the year\n * @example DateTime.local(2017, 5, 25).year //=> 2017\n * @type {number}\n */\n get year() {\n return this.isValid ? this.c.year : NaN;\n }\n\n /**\n * Get the quarter\n * @example DateTime.local(2017, 5, 25).quarter //=> 2\n * @type {number}\n */\n get quarter() {\n return this.isValid ? Math.ceil(this.c.month / 3) : NaN;\n }\n\n /**\n * Get the month (1-12).\n * @example DateTime.local(2017, 5, 25).month //=> 5\n * @type {number}\n */\n get month() {\n return this.isValid ? this.c.month : NaN;\n }\n\n /**\n * Get the day of the month (1-30ish).\n * @example DateTime.local(2017, 5, 25).day //=> 25\n * @type {number}\n */\n get day() {\n return this.isValid ? this.c.day : NaN;\n }\n\n /**\n * Get the hour of the day (0-23).\n * @example DateTime.local(2017, 5, 25, 9).hour //=> 9\n * @type {number}\n */\n get hour() {\n return this.isValid ? this.c.hour : NaN;\n }\n\n /**\n * Get the minute of the hour (0-59).\n * @example DateTime.local(2017, 5, 25, 9, 30).minute //=> 30\n * @type {number}\n */\n get minute() {\n return this.isValid ? this.c.minute : NaN;\n }\n\n /**\n * Get the second of the minute (0-59).\n * @example DateTime.local(2017, 5, 25, 9, 30, 52).second //=> 52\n * @type {number}\n */\n get second() {\n return this.isValid ? this.c.second : NaN;\n }\n\n /**\n * Get the millisecond of the second (0-999).\n * @example DateTime.local(2017, 5, 25, 9, 30, 52, 654).millisecond //=> 654\n * @type {number}\n */\n get millisecond() {\n return this.isValid ? this.c.millisecond : NaN;\n }\n\n /**\n * Get the week year\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2014, 12, 31).weekYear //=> 2015\n * @type {number}\n */\n get weekYear() {\n return this.isValid ? possiblyCachedWeekData(this).weekYear : NaN;\n }\n\n /**\n * Get the week number of the week year (1-52ish).\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2017, 5, 25).weekNumber //=> 21\n * @type {number}\n */\n get weekNumber() {\n return this.isValid ? possiblyCachedWeekData(this).weekNumber : NaN;\n }\n\n /**\n * Get the day of the week.\n * 1 is Monday and 7 is Sunday\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2014, 11, 31).weekday //=> 4\n * @type {number}\n */\n get weekday() {\n return this.isValid ? possiblyCachedWeekData(this).weekday : NaN;\n }\n\n /**\n * Returns true if this date is on a weekend according to the locale, false otherwise\n * @returns {boolean}\n */\n get isWeekend() {\n return this.isValid && this.loc.getWeekendDays().includes(this.weekday);\n }\n\n /**\n * Get the day of the week according to the locale.\n * 1 is the first day of the week and 7 is the last day of the week.\n * If the locale assigns Sunday as the first day of the week, then a date which is a Sunday will return 1,\n * @returns {number}\n */\n get localWeekday() {\n return this.isValid ? possiblyCachedLocalWeekData(this).weekday : NaN;\n }\n\n /**\n * Get the week number of the week year according to the locale. Different locales assign week numbers differently,\n * because the week can start on different days of the week (see localWeekday) and because a different number of days\n * is required for a week to count as the first week of a year.\n * @returns {number}\n */\n get localWeekNumber() {\n return this.isValid ? possiblyCachedLocalWeekData(this).weekNumber : NaN;\n }\n\n /**\n * Get the week year according to the locale. Different locales assign week numbers (and therefor week years)\n * differently, see localWeekNumber.\n * @returns {number}\n */\n get localWeekYear() {\n return this.isValid ? possiblyCachedLocalWeekData(this).weekYear : NaN;\n }\n\n /**\n * Get the ordinal (meaning the day of the year)\n * @example DateTime.local(2017, 5, 25).ordinal //=> 145\n * @type {number|DateTime}\n */\n get ordinal() {\n return this.isValid ? gregorianToOrdinal(this.c).ordinal : NaN;\n }\n\n /**\n * Get the human readable short month name, such as 'Oct'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).monthShort //=> Oct\n * @type {string}\n */\n get monthShort() {\n return this.isValid ? Info.months(\"short\", { locObj: this.loc })[this.month - 1] : null;\n }\n\n /**\n * Get the human readable long month name, such as 'October'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).monthLong //=> October\n * @type {string}\n */\n get monthLong() {\n return this.isValid ? Info.months(\"long\", { locObj: this.loc })[this.month - 1] : null;\n }\n\n /**\n * Get the human readable short weekday, such as 'Mon'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).weekdayShort //=> Mon\n * @type {string}\n */\n get weekdayShort() {\n return this.isValid ? Info.weekdays(\"short\", { locObj: this.loc })[this.weekday - 1] : null;\n }\n\n /**\n * Get the human readable long weekday, such as 'Monday'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).weekdayLong //=> Monday\n * @type {string}\n */\n get weekdayLong() {\n return this.isValid ? Info.weekdays(\"long\", { locObj: this.loc })[this.weekday - 1] : null;\n }\n\n /**\n * Get the UTC offset of this DateTime in minutes\n * @example DateTime.now().offset //=> -240\n * @example DateTime.utc().offset //=> 0\n * @type {number}\n */\n get offset() {\n return this.isValid ? +this.o : NaN;\n }\n\n /**\n * Get the short human name for the zone's current offset, for example \"EST\" or \"EDT\".\n * Defaults to the system's locale if no locale has been specified\n * @type {string}\n */\n get offsetNameShort() {\n if (this.isValid) {\n return this.zone.offsetName(this.ts, {\n format: \"short\",\n locale: this.locale,\n });\n } else {\n return null;\n }\n }\n\n /**\n * Get the long human name for the zone's current offset, for example \"Eastern Standard Time\" or \"Eastern Daylight Time\".\n * Defaults to the system's locale if no locale has been specified\n * @type {string}\n */\n get offsetNameLong() {\n if (this.isValid) {\n return this.zone.offsetName(this.ts, {\n format: \"long\",\n locale: this.locale,\n });\n } else {\n return null;\n }\n }\n\n /**\n * Get whether this zone's offset ever changes, as in a DST.\n * @type {boolean}\n */\n get isOffsetFixed() {\n return this.isValid ? this.zone.isUniversal : null;\n }\n\n /**\n * Get whether the DateTime is in a DST.\n * @type {boolean}\n */\n get isInDST() {\n if (this.isOffsetFixed) {\n return false;\n } else {\n return (\n this.offset > this.set({ month: 1, day: 1 }).offset ||\n this.offset > this.set({ month: 5 }).offset\n );\n }\n }\n\n /**\n * Get those DateTimes which have the same local time as this DateTime, but a different offset from UTC\n * in this DateTime's zone. During DST changes local time can be ambiguous, for example\n * `2023-10-29T02:30:00` in `Europe/Berlin` can have offset `+01:00` or `+02:00`.\n * This method will return both possible DateTimes if this DateTime's local time is ambiguous.\n * @returns {DateTime[]}\n */\n getPossibleOffsets() {\n if (!this.isValid || this.isOffsetFixed) {\n return [this];\n }\n const dayMs = 86400000;\n const minuteMs = 60000;\n const localTS = objToLocalTS(this.c);\n const oEarlier = this.zone.offset(localTS - dayMs);\n const oLater = this.zone.offset(localTS + dayMs);\n\n const o1 = this.zone.offset(localTS - oEarlier * minuteMs);\n const o2 = this.zone.offset(localTS - oLater * minuteMs);\n if (o1 === o2) {\n return [this];\n }\n const ts1 = localTS - o1 * minuteMs;\n const ts2 = localTS - o2 * minuteMs;\n const c1 = tsToObj(ts1, o1);\n const c2 = tsToObj(ts2, o2);\n if (\n c1.hour === c2.hour &&\n c1.minute === c2.minute &&\n c1.second === c2.second &&\n c1.millisecond === c2.millisecond\n ) {\n return [clone(this, { ts: ts1 }), clone(this, { ts: ts2 })];\n }\n return [this];\n }\n\n /**\n * Returns true if this DateTime is in a leap year, false otherwise\n * @example DateTime.local(2016).isInLeapYear //=> true\n * @example DateTime.local(2013).isInLeapYear //=> false\n * @type {boolean}\n */\n get isInLeapYear() {\n return isLeapYear(this.year);\n }\n\n /**\n * Returns the number of days in this DateTime's month\n * @example DateTime.local(2016, 2).daysInMonth //=> 29\n * @example DateTime.local(2016, 3).daysInMonth //=> 31\n * @type {number}\n */\n get daysInMonth() {\n return daysInMonth(this.year, this.month);\n }\n\n /**\n * Returns the number of days in this DateTime's year\n * @example DateTime.local(2016).daysInYear //=> 366\n * @example DateTime.local(2013).daysInYear //=> 365\n * @type {number}\n */\n get daysInYear() {\n return this.isValid ? daysInYear(this.year) : NaN;\n }\n\n /**\n * Returns the number of weeks in this DateTime's year\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2004).weeksInWeekYear //=> 53\n * @example DateTime.local(2013).weeksInWeekYear //=> 52\n * @type {number}\n */\n get weeksInWeekYear() {\n return this.isValid ? weeksInWeekYear(this.weekYear) : NaN;\n }\n\n /**\n * Returns the number of weeks in this DateTime's local week year\n * @example DateTime.local(2020, 6, {locale: 'en-US'}).weeksInLocalWeekYear //=> 52\n * @example DateTime.local(2020, 6, {locale: 'de-DE'}).weeksInLocalWeekYear //=> 53\n * @type {number}\n */\n get weeksInLocalWeekYear() {\n return this.isValid\n ? weeksInWeekYear(\n this.localWeekYear,\n this.loc.getMinDaysInFirstWeek(),\n this.loc.getStartOfWeek()\n )\n : NaN;\n }\n\n /**\n * Returns the resolved Intl options for this DateTime.\n * This is useful in understanding the behavior of formatting methods\n * @param {Object} opts - the same options as toLocaleString\n * @return {Object}\n */\n resolvedLocaleOptions(opts = {}) {\n const { locale, numberingSystem, calendar } = Formatter.create(\n this.loc.clone(opts),\n opts\n ).resolvedOptions(this);\n return { locale, numberingSystem, outputCalendar: calendar };\n }\n\n // TRANSFORM\n\n /**\n * \"Set\" the DateTime's zone to UTC. Returns a newly-constructed DateTime.\n *\n * Equivalent to {@link DateTime#setZone}('utc')\n * @param {number} [offset=0] - optionally, an offset from UTC in minutes\n * @param {Object} [opts={}] - options to pass to `setZone()`\n * @return {DateTime}\n */\n toUTC(offset = 0, opts = {}) {\n return this.setZone(FixedOffsetZone.instance(offset), opts);\n }\n\n /**\n * \"Set\" the DateTime's zone to the host's local zone. Returns a newly-constructed DateTime.\n *\n * Equivalent to `setZone('local')`\n * @return {DateTime}\n */\n toLocal() {\n return this.setZone(Settings.defaultZone);\n }\n\n /**\n * \"Set\" the DateTime's zone to specified zone. Returns a newly-constructed DateTime.\n *\n * By default, the setter keeps the underlying time the same (as in, the same timestamp), but the new instance will report different local times and consider DSTs when making computations, as with {@link DateTime#plus}. You may wish to use {@link DateTime#toLocal} and {@link DateTime#toUTC} which provide simple convenience wrappers for commonly used zones.\n * @param {string|Zone} [zone='local'] - a zone identifier. As a string, that can be any IANA zone supported by the host environment, or a fixed-offset name of the form 'UTC+3', or the strings 'local' or 'utc'. You may also supply an instance of a {@link DateTime#Zone} class.\n * @param {Object} opts - options\n * @param {boolean} [opts.keepLocalTime=false] - If true, adjust the underlying time so that the local time stays the same, but in the target zone. You should rarely need this.\n * @return {DateTime}\n */\n setZone(zone, { keepLocalTime = false, keepCalendarTime = false } = {}) {\n zone = normalizeZone(zone, Settings.defaultZone);\n if (zone.equals(this.zone)) {\n return this;\n } else if (!zone.isValid) {\n return DateTime.invalid(unsupportedZone(zone));\n } else {\n let newTS = this.ts;\n if (keepLocalTime || keepCalendarTime) {\n const offsetGuess = zone.offset(this.ts);\n const asObj = this.toObject();\n [newTS] = objToTS(asObj, offsetGuess, zone);\n }\n return clone(this, { ts: newTS, zone });\n }\n }\n\n /**\n * \"Set\" the locale, numberingSystem, or outputCalendar. Returns a newly-constructed DateTime.\n * @param {Object} properties - the properties to set\n * @example DateTime.local(2017, 5, 25).reconfigure({ locale: 'en-GB' })\n * @return {DateTime}\n */\n reconfigure({ locale, numberingSystem, outputCalendar } = {}) {\n const loc = this.loc.clone({ locale, numberingSystem, outputCalendar });\n return clone(this, { loc });\n }\n\n /**\n * \"Set\" the locale. Returns a newly-constructed DateTime.\n * Just a convenient alias for reconfigure({ locale })\n * @example DateTime.local(2017, 5, 25).setLocale('en-GB')\n * @return {DateTime}\n */\n setLocale(locale) {\n return this.reconfigure({ locale });\n }\n\n /**\n * \"Set\" the values of specified units. Returns a newly-constructed DateTime.\n * You can only set units with this method; for \"setting\" metadata, see {@link DateTime#reconfigure} and {@link DateTime#setZone}.\n *\n * This method also supports setting locale-based week units, i.e. `localWeekday`, `localWeekNumber` and `localWeekYear`.\n * They cannot be mixed with ISO-week units like `weekday`.\n * @param {Object} values - a mapping of units to numbers\n * @example dt.set({ year: 2017 })\n * @example dt.set({ hour: 8, minute: 30 })\n * @example dt.set({ weekday: 5 })\n * @example dt.set({ year: 2005, ordinal: 234 })\n * @return {DateTime}\n */\n set(values) {\n if (!this.isValid) return this;\n\n const normalized = normalizeObject(values, normalizeUnitWithLocalWeeks);\n const { minDaysInFirstWeek, startOfWeek } = usesLocalWeekValues(normalized, this.loc);\n\n const settingWeekStuff =\n !isUndefined(normalized.weekYear) ||\n !isUndefined(normalized.weekNumber) ||\n !isUndefined(normalized.weekday),\n containsOrdinal = !isUndefined(normalized.ordinal),\n containsGregorYear = !isUndefined(normalized.year),\n containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n containsGregor = containsGregorYear || containsGregorMD,\n definiteWeekDef = normalized.weekYear || normalized.weekNumber;\n\n if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n throw new ConflictingSpecificationError(\n \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n );\n }\n\n if (containsGregorMD && containsOrdinal) {\n throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n }\n\n let mixed;\n if (settingWeekStuff) {\n mixed = weekToGregorian(\n { ...gregorianToWeek(this.c, minDaysInFirstWeek, startOfWeek), ...normalized },\n minDaysInFirstWeek,\n startOfWeek\n );\n } else if (!isUndefined(normalized.ordinal)) {\n mixed = ordinalToGregorian({ ...gregorianToOrdinal(this.c), ...normalized });\n } else {\n mixed = { ...this.toObject(), ...normalized };\n\n // if we didn't set the day but we ended up on an overflow date,\n // use the last day of the right month\n if (isUndefined(normalized.day)) {\n mixed.day = Math.min(daysInMonth(mixed.year, mixed.month), mixed.day);\n }\n }\n\n const [ts, o] = objToTS(mixed, this.o, this.zone);\n return clone(this, { ts, o });\n }\n\n /**\n * Add a period of time to this DateTime and return the resulting DateTime\n *\n * Adding hours, minutes, seconds, or milliseconds increases the timestamp by the right number of milliseconds. Adding days, months, or years shifts the calendar, accounting for DSTs and leap years along the way. Thus, `dt.plus({ hours: 24 })` may result in a different time than `dt.plus({ days: 1 })` if there's a DST shift in between.\n * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @example DateTime.now().plus(123) //~> in 123 milliseconds\n * @example DateTime.now().plus({ minutes: 15 }) //~> in 15 minutes\n * @example DateTime.now().plus({ days: 1 }) //~> this time tomorrow\n * @example DateTime.now().plus({ days: -1 }) //~> this time yesterday\n * @example DateTime.now().plus({ hours: 3, minutes: 13 }) //~> in 3 hr, 13 min\n * @example DateTime.now().plus(Duration.fromObject({ hours: 3, minutes: 13 })) //~> in 3 hr, 13 min\n * @return {DateTime}\n */\n plus(duration) {\n if (!this.isValid) return this;\n const dur = Duration.fromDurationLike(duration);\n return clone(this, adjustTime(this, dur));\n }\n\n /**\n * Subtract a period of time to this DateTime and return the resulting DateTime\n * See {@link DateTime#plus}\n * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n @return {DateTime}\n */\n minus(duration) {\n if (!this.isValid) return this;\n const dur = Duration.fromDurationLike(duration).negate();\n return clone(this, adjustTime(this, dur));\n }\n\n /**\n * \"Set\" this DateTime to the beginning of a unit of time.\n * @param {string} unit - The unit to go to the beginning of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week\n * @example DateTime.local(2014, 3, 3).startOf('month').toISODate(); //=> '2014-03-01'\n * @example DateTime.local(2014, 3, 3).startOf('year').toISODate(); //=> '2014-01-01'\n * @example DateTime.local(2014, 3, 3).startOf('week').toISODate(); //=> '2014-03-03', weeks always start on Mondays\n * @example DateTime.local(2014, 3, 3, 5, 30).startOf('day').toISOTime(); //=> '00:00.000-05:00'\n * @example DateTime.local(2014, 3, 3, 5, 30).startOf('hour').toISOTime(); //=> '05:00:00.000-05:00'\n * @return {DateTime}\n */\n startOf(unit, { useLocaleWeeks = false } = {}) {\n if (!this.isValid) return this;\n\n const o = {},\n normalizedUnit = Duration.normalizeUnit(unit);\n switch (normalizedUnit) {\n case \"years\":\n o.month = 1;\n // falls through\n case \"quarters\":\n case \"months\":\n o.day = 1;\n // falls through\n case \"weeks\":\n case \"days\":\n o.hour = 0;\n // falls through\n case \"hours\":\n o.minute = 0;\n // falls through\n case \"minutes\":\n o.second = 0;\n // falls through\n case \"seconds\":\n o.millisecond = 0;\n break;\n case \"milliseconds\":\n break;\n // no default, invalid units throw in normalizeUnit()\n }\n\n if (normalizedUnit === \"weeks\") {\n if (useLocaleWeeks) {\n const startOfWeek = this.loc.getStartOfWeek();\n const { weekday } = this;\n if (weekday < startOfWeek) {\n o.weekNumber = this.weekNumber - 1;\n }\n o.weekday = startOfWeek;\n } else {\n o.weekday = 1;\n }\n }\n\n if (normalizedUnit === \"quarters\") {\n const q = Math.ceil(this.month / 3);\n o.month = (q - 1) * 3 + 1;\n }\n\n return this.set(o);\n }\n\n /**\n * \"Set\" this DateTime to the end (meaning the last millisecond) of a unit of time\n * @param {string} unit - The unit to go to the end of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week\n * @example DateTime.local(2014, 3, 3).endOf('month').toISO(); //=> '2014-03-31T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3).endOf('year').toISO(); //=> '2014-12-31T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3).endOf('week').toISO(); // => '2014-03-09T23:59:59.999-05:00', weeks start on Mondays\n * @example DateTime.local(2014, 3, 3, 5, 30).endOf('day').toISO(); //=> '2014-03-03T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3, 5, 30).endOf('hour').toISO(); //=> '2014-03-03T05:59:59.999-05:00'\n * @return {DateTime}\n */\n endOf(unit, opts) {\n return this.isValid\n ? this.plus({ [unit]: 1 })\n .startOf(unit, opts)\n .minus(1)\n : this;\n }\n\n // OUTPUT\n\n /**\n * Returns a string representation of this DateTime formatted according to the specified format string.\n * **You may not want this.** See {@link DateTime#toLocaleString} for a more flexible formatting tool. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/formatting?id=table-of-tokens).\n * Defaults to en-US if no locale has been specified, regardless of the system's locale.\n * @param {string} fmt - the format string\n * @param {Object} opts - opts to override the configuration options on this DateTime\n * @example DateTime.now().toFormat('yyyy LLL dd') //=> '2017 Apr 22'\n * @example DateTime.now().setLocale('fr').toFormat('yyyy LLL dd') //=> '2017 avr. 22'\n * @example DateTime.now().toFormat('yyyy LLL dd', { locale: \"fr\" }) //=> '2017 avr. 22'\n * @example DateTime.now().toFormat(\"HH 'hours and' mm 'minutes'\") //=> '20 hours and 55 minutes'\n * @return {string}\n */\n toFormat(fmt, opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this, fmt)\n : INVALID;\n }\n\n /**\n * Returns a localized string representing this date. Accepts the same options as the Intl.DateTimeFormat constructor and any presets defined by Luxon, such as `DateTime.DATE_FULL` or `DateTime.TIME_SIMPLE`.\n * The exact behavior of this method is browser-specific, but in general it will return an appropriate representation\n * of the DateTime in the assigned locale.\n * Defaults to the system's locale if no locale has been specified\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param formatOpts {Object} - Intl.DateTimeFormat constructor options and configuration options\n * @param {Object} opts - opts to override the configuration options on this DateTime\n * @example DateTime.now().toLocaleString(); //=> 4/20/2017\n * @example DateTime.now().setLocale('en-gb').toLocaleString(); //=> '20/04/2017'\n * @example DateTime.now().toLocaleString(DateTime.DATE_FULL); //=> 'April 20, 2017'\n * @example DateTime.now().toLocaleString(DateTime.DATE_FULL, { locale: 'fr' }); //=> '28 août 2022'\n * @example DateTime.now().toLocaleString(DateTime.TIME_SIMPLE); //=> '11:32 AM'\n * @example DateTime.now().toLocaleString(DateTime.DATETIME_SHORT); //=> '4/20/2017, 11:32 AM'\n * @example DateTime.now().toLocaleString({ weekday: 'long', month: 'long', day: '2-digit' }); //=> 'Thursday, April 20'\n * @example DateTime.now().toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> 'Thu, Apr 20, 11:27 AM'\n * @example DateTime.now().toLocaleString({ hour: '2-digit', minute: '2-digit', hourCycle: 'h23' }); //=> '11:32'\n * @return {string}\n */\n toLocaleString(formatOpts = Formats.DATE_SHORT, opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.clone(opts), formatOpts).formatDateTime(this)\n : INVALID;\n }\n\n /**\n * Returns an array of format \"parts\", meaning individual tokens along with metadata. This is allows callers to post-process individual sections of the formatted output.\n * Defaults to the system's locale if no locale has been specified\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts\n * @param opts {Object} - Intl.DateTimeFormat constructor options, same as `toLocaleString`.\n * @example DateTime.now().toLocaleParts(); //=> [\n * //=> { type: 'day', value: '25' },\n * //=> { type: 'literal', value: '/' },\n * //=> { type: 'month', value: '05' },\n * //=> { type: 'literal', value: '/' },\n * //=> { type: 'year', value: '1982' }\n * //=> ]\n */\n toLocaleParts(opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this)\n : [];\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.extendedZone=false] - add the time zone format extension\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example DateTime.utc(1983, 5, 25).toISO() //=> '1982-05-25T00:00:00.000Z'\n * @example DateTime.now().toISO() //=> '2017-04-22T20:47:05.335-04:00'\n * @example DateTime.now().toISO({ includeOffset: false }) //=> '2017-04-22T20:47:05.335'\n * @example DateTime.now().toISO({ format: 'basic' }) //=> '20170422T204705.335-0400'\n * @return {string}\n */\n toISO({\n format = \"extended\",\n suppressSeconds = false,\n suppressMilliseconds = false,\n includeOffset = true,\n extendedZone = false,\n } = {}) {\n if (!this.isValid) {\n return null;\n }\n\n const ext = format === \"extended\";\n\n let c = toISODate(this, ext);\n c += \"T\";\n c += toISOTime(this, ext, suppressSeconds, suppressMilliseconds, includeOffset, extendedZone);\n return c;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's date component\n * @param {Object} opts - options\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example DateTime.utc(1982, 5, 25).toISODate() //=> '1982-05-25'\n * @example DateTime.utc(1982, 5, 25).toISODate({ format: 'basic' }) //=> '19820525'\n * @return {string}\n */\n toISODate({ format = \"extended\" } = {}) {\n if (!this.isValid) {\n return null;\n }\n\n return toISODate(this, format === \"extended\");\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's week date\n * @example DateTime.utc(1982, 5, 25).toISOWeekDate() //=> '1982-W21-2'\n * @return {string}\n */\n toISOWeekDate() {\n return toTechFormat(this, \"kkkk-'W'WW-c\");\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's time component\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.extendedZone=true] - add the time zone format extension\n * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime() //=> '07:34:19.361Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34, seconds: 0, milliseconds: 0 }).toISOTime({ suppressSeconds: true }) //=> '07:34Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ format: 'basic' }) //=> '073419.361Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ includePrefix: true }) //=> 'T07:34:19.361Z'\n * @return {string}\n */\n toISOTime({\n suppressMilliseconds = false,\n suppressSeconds = false,\n includeOffset = true,\n includePrefix = false,\n extendedZone = false,\n format = \"extended\",\n } = {}) {\n if (!this.isValid) {\n return null;\n }\n\n let c = includePrefix ? \"T\" : \"\";\n return (\n c +\n toISOTime(\n this,\n format === \"extended\",\n suppressSeconds,\n suppressMilliseconds,\n includeOffset,\n extendedZone\n )\n );\n }\n\n /**\n * Returns an RFC 2822-compatible string representation of this DateTime\n * @example DateTime.utc(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 +0000'\n * @example DateTime.local(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 -0400'\n * @return {string}\n */\n toRFC2822() {\n return toTechFormat(this, \"EEE, dd LLL yyyy HH:mm:ss ZZZ\", false);\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in HTTP headers. The output is always expressed in GMT.\n * Specifically, the string conforms to RFC 1123.\n * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n * @example DateTime.utc(2014, 7, 13).toHTTP() //=> 'Sun, 13 Jul 2014 00:00:00 GMT'\n * @example DateTime.utc(2014, 7, 13, 19).toHTTP() //=> 'Sun, 13 Jul 2014 19:00:00 GMT'\n * @return {string}\n */\n toHTTP() {\n return toTechFormat(this.toUTC(), \"EEE, dd LLL yyyy HH:mm:ss 'GMT'\");\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL Date\n * @example DateTime.utc(2014, 7, 13).toSQLDate() //=> '2014-07-13'\n * @return {string}\n */\n toSQLDate() {\n if (!this.isValid) {\n return null;\n }\n return toISODate(this, true);\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL Time\n * @param {Object} opts - options\n * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00'\n * @example DateTime.utc().toSQL() //=> '05:15:16.345'\n * @example DateTime.now().toSQL() //=> '05:15:16.345 -04:00'\n * @example DateTime.now().toSQL({ includeOffset: false }) //=> '05:15:16.345'\n * @example DateTime.now().toSQL({ includeZone: false }) //=> '05:15:16.345 America/New_York'\n * @return {string}\n */\n toSQLTime({ includeOffset = true, includeZone = false, includeOffsetSpace = true } = {}) {\n let fmt = \"HH:mm:ss.SSS\";\n\n if (includeZone || includeOffset) {\n if (includeOffsetSpace) {\n fmt += \" \";\n }\n if (includeZone) {\n fmt += \"z\";\n } else if (includeOffset) {\n fmt += \"ZZ\";\n }\n }\n\n return toTechFormat(this, fmt, true);\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL DateTime\n * @param {Object} opts - options\n * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00'\n * @example DateTime.utc(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 Z'\n * @example DateTime.local(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 -04:00'\n * @example DateTime.local(2014, 7, 13).toSQL({ includeOffset: false }) //=> '2014-07-13 00:00:00.000'\n * @example DateTime.local(2014, 7, 13).toSQL({ includeZone: true }) //=> '2014-07-13 00:00:00.000 America/New_York'\n * @return {string}\n */\n toSQL(opts = {}) {\n if (!this.isValid) {\n return null;\n }\n\n return `${this.toSQLDate()} ${this.toSQLTime(opts)}`;\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for debugging\n * @return {string}\n */\n toString() {\n return this.isValid ? this.toISO() : INVALID;\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for the REPL.\n * @return {string}\n */\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n if (this.isValid) {\n return `DateTime { ts: ${this.toISO()}, zone: ${this.zone.name}, locale: ${this.locale} }`;\n } else {\n return `DateTime { Invalid, reason: ${this.invalidReason} }`;\n }\n }\n\n /**\n * Returns the epoch milliseconds of this DateTime. Alias of {@link DateTime#toMillis}\n * @return {number}\n */\n valueOf() {\n return this.toMillis();\n }\n\n /**\n * Returns the epoch milliseconds of this DateTime.\n * @return {number}\n */\n toMillis() {\n return this.isValid ? this.ts : NaN;\n }\n\n /**\n * Returns the epoch seconds of this DateTime.\n * @return {number}\n */\n toSeconds() {\n return this.isValid ? this.ts / 1000 : NaN;\n }\n\n /**\n * Returns the epoch seconds (as a whole number) of this DateTime.\n * @return {number}\n */\n toUnixInteger() {\n return this.isValid ? Math.floor(this.ts / 1000) : NaN;\n }\n\n /**\n * Returns an ISO 8601 representation of this DateTime appropriate for use in JSON.\n * @return {string}\n */\n toJSON() {\n return this.toISO();\n }\n\n /**\n * Returns a BSON serializable equivalent to this DateTime.\n * @return {Date}\n */\n toBSON() {\n return this.toJSDate();\n }\n\n /**\n * Returns a JavaScript object with this DateTime's year, month, day, and so on.\n * @param opts - options for generating the object\n * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output\n * @example DateTime.now().toObject() //=> { year: 2017, month: 4, day: 22, hour: 20, minute: 49, second: 42, millisecond: 268 }\n * @return {Object}\n */\n toObject(opts = {}) {\n if (!this.isValid) return {};\n\n const base = { ...this.c };\n\n if (opts.includeConfig) {\n base.outputCalendar = this.outputCalendar;\n base.numberingSystem = this.loc.numberingSystem;\n base.locale = this.loc.locale;\n }\n return base;\n }\n\n /**\n * Returns a JavaScript Date equivalent to this DateTime.\n * @return {Date}\n */\n toJSDate() {\n return new Date(this.isValid ? this.ts : NaN);\n }\n\n // COMPARE\n\n /**\n * Return the difference between two DateTimes as a Duration.\n * @param {DateTime} otherDateTime - the DateTime to compare this one to\n * @param {string|string[]} [unit=['milliseconds']] - the unit or array of units (such as 'hours' or 'days') to include in the duration.\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @example\n * var i1 = DateTime.fromISO('1982-05-25T09:45'),\n * i2 = DateTime.fromISO('1983-10-14T10:30');\n * i2.diff(i1).toObject() //=> { milliseconds: 43807500000 }\n * i2.diff(i1, 'hours').toObject() //=> { hours: 12168.75 }\n * i2.diff(i1, ['months', 'days']).toObject() //=> { months: 16, days: 19.03125 }\n * i2.diff(i1, ['months', 'days', 'hours']).toObject() //=> { months: 16, days: 19, hours: 0.75 }\n * @return {Duration}\n */\n diff(otherDateTime, unit = \"milliseconds\", opts = {}) {\n if (!this.isValid || !otherDateTime.isValid) {\n return Duration.invalid(\"created by diffing an invalid DateTime\");\n }\n\n const durOpts = { locale: this.locale, numberingSystem: this.numberingSystem, ...opts };\n\n const units = maybeArray(unit).map(Duration.normalizeUnit),\n otherIsLater = otherDateTime.valueOf() > this.valueOf(),\n earlier = otherIsLater ? this : otherDateTime,\n later = otherIsLater ? otherDateTime : this,\n diffed = diff(earlier, later, units, durOpts);\n\n return otherIsLater ? diffed.negate() : diffed;\n }\n\n /**\n * Return the difference between this DateTime and right now.\n * See {@link DateTime#diff}\n * @param {string|string[]} [unit=['milliseconds']] - the unit or units units (such as 'hours' or 'days') to include in the duration\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @return {Duration}\n */\n diffNow(unit = \"milliseconds\", opts = {}) {\n return this.diff(DateTime.now(), unit, opts);\n }\n\n /**\n * Return an Interval spanning between this DateTime and another DateTime\n * @param {DateTime} otherDateTime - the other end point of the Interval\n * @return {Interval}\n */\n until(otherDateTime) {\n return this.isValid ? Interval.fromDateTimes(this, otherDateTime) : this;\n }\n\n /**\n * Return whether this DateTime is in the same unit of time as another DateTime.\n * Higher-order units must also be identical for this function to return `true`.\n * Note that time zones are **ignored** in this comparison, which compares the **local** calendar time. Use {@link DateTime#setZone} to convert one of the dates if needed.\n * @param {DateTime} otherDateTime - the other DateTime\n * @param {string} unit - the unit of time to check sameness on\n * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week; only the locale of this DateTime is used\n * @example DateTime.now().hasSame(otherDT, 'day'); //~> true if otherDT is in the same current calendar day\n * @return {boolean}\n */\n hasSame(otherDateTime, unit, opts) {\n if (!this.isValid) return false;\n\n const inputMs = otherDateTime.valueOf();\n const adjustedToZone = this.setZone(otherDateTime.zone, { keepLocalTime: true });\n return (\n adjustedToZone.startOf(unit, opts) <= inputMs && inputMs <= adjustedToZone.endOf(unit, opts)\n );\n }\n\n /**\n * Equality check\n * Two DateTimes are equal if and only if they represent the same millisecond, have the same zone and location, and are both valid.\n * To compare just the millisecond values, use `+dt1 === +dt2`.\n * @param {DateTime} other - the other DateTime\n * @return {boolean}\n */\n equals(other) {\n return (\n this.isValid &&\n other.isValid &&\n this.valueOf() === other.valueOf() &&\n this.zone.equals(other.zone) &&\n this.loc.equals(other.loc)\n );\n }\n\n /**\n * Returns a string representation of a this time relative to now, such as \"in two days\". Can only internationalize if your\n * platform supports Intl.RelativeTimeFormat. Rounds down by default.\n * @param {Object} options - options that affect the output\n * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n * @param {string} [options.style=\"long\"] - the style of units, must be \"long\", \"short\", or \"narrow\"\n * @param {string|string[]} options.unit - use a specific unit or array of units; if omitted, or an array, the method will pick the best unit. Use an array or one of \"years\", \"quarters\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", or \"seconds\"\n * @param {boolean} [options.round=true] - whether to round the numbers in the output.\n * @param {number} [options.padding=0] - padding in milliseconds. This allows you to round up the result if it fits inside the threshold. Don't use in combination with {round: false} because the decimal output will include the padding.\n * @param {string} options.locale - override the locale of this DateTime\n * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n * @example DateTime.now().plus({ days: 1 }).toRelative() //=> \"in 1 day\"\n * @example DateTime.now().setLocale(\"es\").toRelative({ days: 1 }) //=> \"dentro de 1 día\"\n * @example DateTime.now().plus({ days: 1 }).toRelative({ locale: \"fr\" }) //=> \"dans 23 heures\"\n * @example DateTime.now().minus({ days: 2 }).toRelative() //=> \"2 days ago\"\n * @example DateTime.now().minus({ days: 2 }).toRelative({ unit: \"hours\" }) //=> \"48 hours ago\"\n * @example DateTime.now().minus({ hours: 36 }).toRelative({ round: false }) //=> \"1.5 days ago\"\n */\n toRelative(options = {}) {\n if (!this.isValid) return null;\n const base = options.base || DateTime.fromObject({}, { zone: this.zone }),\n padding = options.padding ? (this < base ? -options.padding : options.padding) : 0;\n let units = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\"];\n let unit = options.unit;\n if (Array.isArray(options.unit)) {\n units = options.unit;\n unit = undefined;\n }\n return diffRelative(base, this.plus(padding), {\n ...options,\n numeric: \"always\",\n units,\n unit,\n });\n }\n\n /**\n * Returns a string representation of this date relative to today, such as \"yesterday\" or \"next month\".\n * Only internationalizes on platforms that supports Intl.RelativeTimeFormat.\n * @param {Object} options - options that affect the output\n * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n * @param {string} options.locale - override the locale of this DateTime\n * @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of \"years\", \"quarters\", \"months\", \"weeks\", or \"days\"\n * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar() //=> \"tomorrow\"\n * @example DateTime.now().setLocale(\"es\").plus({ days: 1 }).toRelative() //=> \"\"mañana\"\n * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar({ locale: \"fr\" }) //=> \"demain\"\n * @example DateTime.now().minus({ days: 2 }).toRelativeCalendar() //=> \"2 days ago\"\n */\n toRelativeCalendar(options = {}) {\n if (!this.isValid) return null;\n\n return diffRelative(options.base || DateTime.fromObject({}, { zone: this.zone }), this, {\n ...options,\n numeric: \"auto\",\n units: [\"years\", \"months\", \"days\"],\n calendary: true,\n });\n }\n\n /**\n * Return the min of several date times\n * @param {...DateTime} dateTimes - the DateTimes from which to choose the minimum\n * @return {DateTime} the min DateTime, or undefined if called with no argument\n */\n static min(...dateTimes) {\n if (!dateTimes.every(DateTime.isDateTime)) {\n throw new InvalidArgumentError(\"min requires all arguments be DateTimes\");\n }\n return bestBy(dateTimes, (i) => i.valueOf(), Math.min);\n }\n\n /**\n * Return the max of several date times\n * @param {...DateTime} dateTimes - the DateTimes from which to choose the maximum\n * @return {DateTime} the max DateTime, or undefined if called with no argument\n */\n static max(...dateTimes) {\n if (!dateTimes.every(DateTime.isDateTime)) {\n throw new InvalidArgumentError(\"max requires all arguments be DateTimes\");\n }\n return bestBy(dateTimes, (i) => i.valueOf(), Math.max);\n }\n\n // MISC\n\n /**\n * Explain how a string would be parsed by fromFormat()\n * @param {string} text - the string to parse\n * @param {string} fmt - the format the string is expected to be in (see description)\n * @param {Object} options - options taken by fromFormat()\n * @return {Object}\n */\n static fromFormatExplain(text, fmt, options = {}) {\n const { locale = null, numberingSystem = null } = options,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true,\n });\n return explainFromTokens(localeToUse, text, fmt);\n }\n\n /**\n * @deprecated use fromFormatExplain instead\n */\n static fromStringExplain(text, fmt, options = {}) {\n return DateTime.fromFormatExplain(text, fmt, options);\n }\n\n /**\n * Build a parser for `fmt` using the given locale. This parser can be passed\n * to {@link DateTime.fromFormatParser} to a parse a date in this format. This\n * can be used to optimize cases where many dates need to be parsed in a\n * specific format.\n *\n * @param {String} fmt - the format the string is expected to be in (see\n * description)\n * @param {Object} options - options used to set locale and numberingSystem\n * for parser\n * @returns {TokenParser} - opaque object to be used\n */\n static buildFormatParser(fmt, options = {}) {\n const { locale = null, numberingSystem = null } = options,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true,\n });\n return new TokenParser(localeToUse, fmt);\n }\n\n /**\n * Create a DateTime from an input string and format parser.\n *\n * The format parser must have been created with the same locale as this call.\n *\n * @param {String} text - the string to parse\n * @param {TokenParser} formatParser - parser from {@link DateTime.buildFormatParser}\n * @param {Object} opts - options taken by fromFormat()\n * @returns {DateTime}\n */\n static fromFormatParser(text, formatParser, opts = {}) {\n if (isUndefined(text) || isUndefined(formatParser)) {\n throw new InvalidArgumentError(\n \"fromFormatParser requires an input string and a format parser\"\n );\n }\n const { locale = null, numberingSystem = null } = opts,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true,\n });\n\n if (!localeToUse.equals(formatParser.locale)) {\n throw new InvalidArgumentError(\n `fromFormatParser called with a locale of ${localeToUse}, ` +\n `but the format parser was created for ${formatParser.locale}`\n );\n }\n\n const { result, zone, specificOffset, invalidReason } = formatParser.explainFromTokens(text);\n\n if (invalidReason) {\n return DateTime.invalid(invalidReason);\n } else {\n return parseDataToDateTime(\n result,\n zone,\n opts,\n `format ${formatParser.format}`,\n text,\n specificOffset\n );\n }\n }\n\n // FORMAT PRESETS\n\n /**\n * {@link DateTime#toLocaleString} format like 10/14/1983\n * @type {Object}\n */\n static get DATE_SHORT() {\n return Formats.DATE_SHORT;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Oct 14, 1983'\n * @type {Object}\n */\n static get DATE_MED() {\n return Formats.DATE_MED;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Fri, Oct 14, 1983'\n * @type {Object}\n */\n static get DATE_MED_WITH_WEEKDAY() {\n return Formats.DATE_MED_WITH_WEEKDAY;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'October 14, 1983'\n * @type {Object}\n */\n static get DATE_FULL() {\n return Formats.DATE_FULL;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Tuesday, October 14, 1983'\n * @type {Object}\n */\n static get DATE_HUGE() {\n return Formats.DATE_HUGE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_SIMPLE() {\n return Formats.TIME_SIMPLE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_SECONDS() {\n return Formats.TIME_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_SHORT_OFFSET() {\n return Formats.TIME_WITH_SHORT_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_LONG_OFFSET() {\n return Formats.TIME_WITH_LONG_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_SIMPLE() {\n return Formats.TIME_24_SIMPLE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_SECONDS() {\n return Formats.TIME_24_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 EDT', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_SHORT_OFFSET() {\n return Formats.TIME_24_WITH_SHORT_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 Eastern Daylight Time', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_LONG_OFFSET() {\n return Formats.TIME_24_WITH_LONG_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_SHORT() {\n return Formats.DATETIME_SHORT;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_SHORT_WITH_SECONDS() {\n return Formats.DATETIME_SHORT_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED() {\n return Formats.DATETIME_MED;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30:33 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED_WITH_SECONDS() {\n return Formats.DATETIME_MED_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Fri, 14 Oct 1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED_WITH_WEEKDAY() {\n return Formats.DATETIME_MED_WITH_WEEKDAY;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_FULL() {\n return Formats.DATETIME_FULL;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30:33 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_FULL_WITH_SECONDS() {\n return Formats.DATETIME_FULL_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_HUGE() {\n return Formats.DATETIME_HUGE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30:33 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_HUGE_WITH_SECONDS() {\n return Formats.DATETIME_HUGE_WITH_SECONDS;\n }\n}\n\n/**\n * @private\n */\nexport function friendlyDateTime(dateTimeish) {\n if (DateTime.isDateTime(dateTimeish)) {\n return dateTimeish;\n } else if (dateTimeish && dateTimeish.valueOf && isNumber(dateTimeish.valueOf())) {\n return DateTime.fromJSDate(dateTimeish);\n } else if (dateTimeish && typeof dateTimeish === \"object\") {\n return DateTime.fromObject(dateTimeish);\n } else {\n throw new InvalidArgumentError(\n `Unknown datetime argument: ${dateTimeish}, of type ${typeof dateTimeish}`\n );\n }\n}\n","import DateTime from \"./datetime.js\";\nimport Duration from \"./duration.js\";\nimport Interval from \"./interval.js\";\nimport Info from \"./info.js\";\nimport Zone from \"./zone.js\";\nimport FixedOffsetZone from \"./zones/fixedOffsetZone.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport InvalidZone from \"./zones/invalidZone.js\";\nimport SystemZone from \"./zones/systemZone.js\";\nimport Settings from \"./settings.js\";\n\nconst VERSION = \"3.5.0\";\n\nexport {\n VERSION,\n DateTime,\n Duration,\n Interval,\n Info,\n Zone,\n FixedOffsetZone,\n IANAZone,\n InvalidZone,\n SystemZone,\n Settings,\n};\n","import { PowerpointExportDto, PowerpointSlideType, AvailableTemplate } from '@ecosystem/export-api';\nimport html2canvas from 'html2canvas';\nimport { DateTime } from 'luxon';\nimport { Component, ComponentHeading, DataColumn, ExportOptions, MenuItemOption, Params } from '../../types';\nimport { getExportContext } from './getExportContext';\nimport { logger } from '@ecosystem/newron-client-lib';\n\nconst getComponentTitle = (\n headingTitle: ComponentHeading['title'],\n componentSettings: Params,\n allColumns: DataColumn[]\n) => {\n const componentTitle: string[] = [];\n if (typeof headingTitle != 'string') {\n headingTitle.forEach(titlePart => {\n if (typeof titlePart == 'string') {\n componentTitle.push(titlePart);\n } else {\n const paramName = titlePart.menu.paramName;\n const paramValue = componentSettings[paramName]?.[0];\n titlePart.menu.items.forEach(item => {\n switch (item.type) {\n case 'MenuItem':\n case 'MenuItemContext':\n if (paramValue === (item as MenuItemOption).value) {\n componentTitle.push(item.label);\n }\n break;\n case 'DataColumns': {\n const columns = allColumns.filter(ele => ele.name === paramValue);\n componentTitle.push(columns[0].label);\n break;\n }\n case 'MenuSubMenu': {\n const subMenuItems = item.items as MenuItemOption[];\n const subMenuItem = subMenuItems.find(subItem => subItem.value === paramValue);\n if (subMenuItem) {\n componentTitle.push(subMenuItem.label);\n }\n break;\n }\n default:\n logger.warning('[componentToPptData] Menu type not supported');\n }\n });\n }\n });\n } else {\n componentTitle.push(headingTitle);\n }\n return componentTitle.filter(Boolean).join(' ');\n};\n\nconst componentToPptData = async (\n { fileHeaderSettings, fileName, contentName }: ExportOptions,\n component: Component,\n exportContentRef: HTMLElement[] | HTMLElement,\n componentSettings: Params,\n allColumns: DataColumn[]\n): Promise<PowerpointExportDto> => {\n let slideTitle = getComponentTitle(component?.heading?.title, componentSettings, allColumns) ?? '';\n let slideSubtitle = component?.heading?.subTitle ?? contentName ?? '';\n const pptSlides = [];\n\n const elementRefs = Array.isArray(exportContentRef) ? exportContentRef : [exportContentRef];\n for (const elementRef of elementRefs) {\n const canvas = await html2canvas(elementRef);\n const dataUrl = canvas.toDataURL('image/png');\n\n pptSlides.push({\n type: PowerpointSlideType.Image,\n image: { dataUrl: dataUrl, width: elementRef.scrollWidth, height: elementRef.scrollHeight },\n title: slideTitle,\n subtitle: slideSubtitle,\n context: getExportContext(fileHeaderSettings),\n });\n }\n\n return {\n name: fileName,\n userDateTimeIso8601: DateTime.local().toISO(),\n template: AvailableTemplate.Powerpoint,\n slides: pptSlides,\n };\n};\n\nexport { componentToPptData, getComponentTitle };\n","import html2canvas from 'html2canvas';\nimport { DateTime } from 'luxon';\nimport { AvailableTemplate, PowerpointExportDto, PowerpointSlideType } from '@ecosystem/export-api';\nimport { ComponentHeading, DataColumn, ExportOptions, PageDsl, Params, SectionType, TabbedSection } from '../../types';\nimport { getExportContext } from '..';\nimport { getComponentTitle } from './componentToPptData';\n\ntype PptImage = { dataUrl: string; width: number; height: number };\n\nexport const getPageTitle = (dsl: PageDsl): string | null => {\n const label = dsl?.heading?.title;\n return Array.isArray(label) ? label.map(l => (typeof l === 'string' ? l : l.displayText ?? '')).join(' ') : label;\n};\nexport const getTabTitle = (dsl: PageDsl): string | null => {\n const tabSection = dsl.sections.find(section => section.type === SectionType.tabbed) as TabbedSection;\n const tabTitle = tabSection ? tabSection.tabs.find(tab => tab.name === tabSection.activeTab)?.label : '';\n return tabTitle;\n};\n\nconst getComponentOrPageTitle = (\n dsl: PageDsl,\n componentSettings?: Params,\n allColumns?: DataColumn[],\n componentHeadingTitle?: ComponentHeading['title']\n) => {\n if (componentHeadingTitle && allColumns?.length && componentSettings) {\n return getComponentTitle(componentHeadingTitle, componentSettings, allColumns);\n }\n return getPageTitle(dsl);\n};\n\nconst createSlideTitle = (\n dsl: PageDsl,\n componentSettings?: Params,\n allColumns?: DataColumn[],\n componentHeadingTitle?: ComponentHeading['title']\n) => {\n const title = getComponentOrPageTitle(dsl, componentSettings, allColumns, componentHeadingTitle);\n const tabTitle = getTabTitle(dsl) ?? '';\n return [title, tabTitle].filter(Boolean).join(' - ');\n};\n\nconst chartToPptData = async (\n { fileHeaderSettings, fileName, contentName }: ExportOptions,\n dsl: PageDsl,\n chartLabel: string | null,\n exportContentRef: HTMLElement[] | HTMLElement,\n componentSettings?: Params,\n allColumns?: DataColumn[],\n componentHeadingTitle?: ComponentHeading['title']\n): Promise<PowerpointExportDto> => {\n let slideTitle = createSlideTitle(dsl, componentSettings, allColumns, componentHeadingTitle);\n\n let slideSubtitle = chartLabel || contentName || '';\n if (slideTitle.length > 50 && slideTitle.includes('by')) {\n const splitIndex = slideTitle.indexOf('by');\n if (splitIndex > 30) {\n slideSubtitle = slideTitle.substring(splitIndex).trim();\n slideTitle = slideTitle.substring(0, splitIndex).trim();\n }\n }\n const pptSlides = [];\n\n const elementRefs = Array.isArray(exportContentRef) ? exportContentRef : [exportContentRef];\n for (const elementRef of elementRefs) {\n const canvas = await html2canvas(elementRef, {\n windowWidth: elementRef.scrollWidth + 100,\n });\n\n const dataUrl = canvas.toDataURL('image/png');\n\n pptSlides.push({\n type: PowerpointSlideType.Image,\n image: { dataUrl: dataUrl, width: elementRef.scrollWidth, height: elementRef.scrollHeight },\n title: slideTitle,\n subtitle: slideSubtitle,\n context: getExportContext(fileHeaderSettings),\n });\n }\n\n return {\n name: fileName,\n userDateTimeIso8601: DateTime.local().toISO(),\n template: AvailableTemplate.Powerpoint,\n slides: pptSlides,\n };\n};\n\nconst chartToPptDataForCollections = async (\n exportContentRef: HTMLElement[] | HTMLElement\n): Promise<{ images: PptImage[] }> => {\n const pptSlides: PptImage[] = [];\n\n const elementRefs = Array.isArray(exportContentRef) ? exportContentRef : [exportContentRef];\n for (const elementRef of elementRefs) {\n const canvas = await html2canvas(elementRef, {\n windowWidth: elementRef.scrollWidth + 100,\n });\n\n const dataUrl = canvas.toDataURL('image/png');\n\n pptSlides.push({ dataUrl, width: elementRef.scrollWidth, height: elementRef.scrollHeight });\n }\n\n return {\n images: pptSlides,\n };\n};\n\nexport { chartToPptData, chartToPptDataForCollections };\n","import React, { FunctionComponent, ReactNode, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\n\ntype Props = {\n children: ReactNode;\n};\n\nfunction getExportContainer(name: string): FunctionComponent<Props> {\n return function ExportContainer({ children }: Props): React.ReactPortal | null {\n const [isInDocument, setIsInDocument] = React.useState<boolean>(false);\n\n useEffect(() => {\n if (name) {\n checkInDocument();\n }\n }, [name]);\n\n const checkInDocument = () => {\n const el = document.querySelector(`#${name}_export_content`);\n if (el) {\n setIsInDocument(true);\n return;\n }\n setIsInDocument(false);\n };\n\n if (!isInDocument) {\n return null;\n }\n\n const el = document.querySelector(`#${name}_export_content`);\n if (!el) {\n return null;\n }\n\n return createPortal(children, el);\n };\n}\n\nexport { getExportContainer };\n","import { useEffect } from 'react';\nimport { chartToPptDataForCollections, getPageTitle, getTabTitle } from '../../export/utils/chartToPptData';\nimport { InsightCollection } from '../../content/collection/types';\nimport { ComponentHeading, DataColumn, PageDsl, Params } from '../../types';\nimport { getComponentTitle } from '../../export/utils/componentToPptData';\n\nexport const useOnCollectionExportReady = ({\n collection,\n dsl,\n chartSliceRefs,\n componentName,\n componentSettings,\n allColumns,\n componentHeadingTitle,\n isDataLoading = false,\n}: {\n collection: InsightCollection;\n dsl: PageDsl;\n chartSliceRefs: React.MutableRefObject<HTMLDivElement | HTMLDivElement[]>;\n componentName?: string;\n componentSettings?: Params;\n allColumns?: DataColumn[];\n componentHeadingTitle?: ComponentHeading['title'];\n isDataLoading?: boolean;\n}): void => {\n let chartElementsLength = 0;\n if (Array.isArray(chartSliceRefs.current)) {\n chartElementsLength = chartSliceRefs.current.length;\n } else if (chartSliceRefs.current) {\n chartElementsLength = 1;\n }\n\n useEffect(() => {\n const isComponentReady = chartElementsLength || componentName;\n if (!collection || !dsl || isDataLoading || !isComponentReady) {\n return;\n }\n\n let subtitle = '';\n if (componentHeadingTitle && allColumns.length && componentSettings) {\n subtitle = getComponentTitle(componentHeadingTitle, componentSettings, allColumns);\n } else {\n const pageTitle = getPageTitle(dsl) || '';\n const tabTitle = getTabTitle(dsl) || '';\n\n subtitle = [pageTitle, tabTitle].filter(Boolean).join(' - ');\n }\n const exportPng = async () => {\n if (componentName) {\n const exportSlides = document.querySelectorAll(`.${componentName}-export-slide`);\n exportSlides.forEach((slide, idx) => (chartSliceRefs.current[idx] = slide as HTMLDivElement));\n }\n\n return chartToPptDataForCollections(chartSliceRefs.current);\n };\n\n const timeoutId = setTimeout(() => {\n collection.onExportReady({ exportPng, subtitle });\n }, 1000);\n\n return () => clearTimeout(timeoutId);\n }, [dsl, JSON.stringify(collection), chartElementsLength, isDataLoading]);\n};\n","import React from 'react';\nimport { feedbackV2 } from '@ecosystem/newron-design-system';\nimport { GenericWarning } from '../../types';\n\nconst { Alert } = feedbackV2;\n\ntype GenericWarningsProps = {\n warnings?: GenericWarning[];\n className?: string;\n};\n\nexport default function GenericWarnings({ warnings = [], className = 'mb-4' }: GenericWarningsProps) {\n return (\n <>\n {warnings.map((warning, index) => (\n <div className={className} key={index}>\n <Alert key={warning.message} title={warning.message} type={warning.level} />\n </div>\n ))}\n </>\n );\n}\n","import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { actions } from '@ecosystem/newron-design-system';\nimport { TitleSelectorButton } from '../../common/title.selector';\nimport { Instructions } from '../../content/instructions';\nimport { DataContentProps } from '../../newron-core';\nimport { MenuItem, Params } from '../../types';\nimport { makeIndicatorInfo } from './data';\nimport { IndicatorConfig, IndicatorRow } from './types';\nimport './indicators.css';\nimport { IndicatorCard } from './card';\nimport { SelectionMenuComponent } from '../../common/selection.menu';\nimport { getExportContainer } from '../../export';\nimport { useCorePageState } from '../../page/provider';\nimport { useOnCollectionExportReady } from '../collection/useOnCollectionExportReady';\nimport GenericWarnings from '../../design/warning/GenericWarnings';\n\nfunction KeyIndicators({\n data,\n isLoading,\n instructions = {},\n componentSettings,\n updateSettings,\n componentName,\n collection,\n}: DataContentProps) {\n const [dataStamp, setDataStamp] = useState<number>();\n const [info, setInfo] = useState<IndicatorRow[]>();\n const [selectOptions, setSelectOptions] = useState<MenuItem[]>([]);\n const { dsl, globalWarnings } = useCorePageState();\n const exportRef = useRef<HTMLDivElement[]>([]);\n\n useOnCollectionExportReady({ collection, dsl, chartSliceRefs: exportRef, componentName });\n\n const myInstructions = new Instructions(instructions, componentSettings);\n\n const grouping = myInstructions.getString('grouping');\n const indicators = myInstructions.getObject('indicators') as IndicatorConfig[];\n const fixedItems = myInstructions.getStringList('fixedItems');\n const limitedItems = myInstructions.getStringList('limitedItems');\n const limitedParamName = myInstructions.isFromSettings('limitedItems')\n ? myInstructions.getSettingsName('limitedItems')\n : undefined;\n const limitedOptions = myInstructions.getObject('limitedOptions') as MenuItem[];\n const addLinkLabel = myInstructions.getString('addLinkLabel', 'Add');\n\n const canEditLimited = limitedParamName !== undefined;\n\n const updateData = () => {\n if (!data) {\n return;\n }\n\n const info = makeIndicatorInfo(data, {\n configs: indicators,\n grouping,\n fixedItems,\n limitedItems,\n });\n setInfo(info.rows);\n setSelectOptions(info.rowItems);\n setDataStamp(data.stamp);\n };\n\n /* eslint-disable react-hooks/exhaustive-deps */\n useEffect(() => {\n if (!data || data.stamp === dataStamp) {\n return;\n }\n updateData();\n }, [data]);\n\n /* eslint-disable react-hooks/exhaustive-deps */\n useEffect(() => {\n updateData();\n }, [fixedItems, limitedItems]);\n\n useEffect(() => {\n if (data) {\n collection?.onLoaded();\n }\n }, [data]);\n\n const handleRowChange = (value: string, newValue: string) => {\n if (!canEditLimited) {\n return;\n }\n const newValues = [...limitedItems];\n const index = newValues.findIndex(v => v === value);\n newValues.splice(index, 1, newValue);\n updateSettings({\n [limitedParamName]: newValues,\n });\n };\n\n const handleRowAdd = (value: string[]) => {\n if (!canEditLimited) {\n return;\n }\n const newValues = [...limitedItems, ...value];\n updateSettings({\n [limitedParamName]: newValues,\n });\n };\n\n const handleRowDelete = (value: string) => {\n if (!canEditLimited) {\n return;\n }\n updateSettings({\n [limitedParamName]: limitedItems.filter(v => v !== value),\n });\n };\n\n let toAddSelections: MenuItem[] | undefined;\n if (canEditLimited) {\n const baseList = limitedOptions || selectOptions;\n toAddSelections = baseList.filter(item => {\n if (item.type !== 'MenuItem') {\n return true;\n }\n\n if (!info) {\n return false;\n }\n\n const isInInfo = info.some(row => row.value === item.value);\n if (isInInfo) {\n return false;\n }\n\n const isInOptions = limitedItems.includes(item.value) || fixedItems.includes(item.value);\n if (isInOptions) {\n return false;\n }\n return true;\n });\n if (toAddSelections.length === 0) {\n toAddSelections = undefined;\n }\n }\n\n const getChunkedIndicatorRow = (dataArray: IndicatorRow[]) => {\n const chunkedDataArray = dataArray.reduce((resultArray, item, index) => {\n const chunkIndex = Math.floor(index / 2);\n if (!resultArray[chunkIndex]) {\n resultArray[chunkIndex] = [];\n }\n resultArray[chunkIndex].push(item);\n return resultArray;\n }, []);\n return chunkedDataArray;\n };\n\n const ExportContainer = useMemo(() => getExportContainer(componentName), []);\n\n return (\n <>\n {!info && (\n <div className=\"flex items-stretch flex-nowrap gap-6 mb-6\">\n {indicators.map((_, idx) => (\n <IndicatorCard key={`fake_${idx}`} isLoading />\n ))}\n </div>\n )}\n {info &&\n info.map((row, idx) => (\n <IndicatorsRow\n key={`row_${idx}`}\n row={row}\n isLoading={isLoading}\n selectionItems={limitedOptions || selectOptions}\n onChange={canEditLimited && !collection && handleRowChange}\n onDelete={canEditLimited && !collection && handleRowDelete}\n isClickable={!collection}\n />\n ))}\n {toAddSelections && !collection && (\n <SelectionMenuComponent\n menuConfig={{\n paramName: 'add',\n items: toAddSelections,\n }}\n values={{}}\n onUpdate={updates => handleRowAdd(updates.add)}\n button={TitleSelectorButton}\n buttonLabel={addLinkLabel}\n />\n )}\n <ExportContainer>\n {!info && (\n <div className={`${componentName}-export-slide mx-3 p-5`}>\n <div className=\"flex items-stretch flex-nowrap gap-6 mb-6\">\n {indicators.map((_, idx) => (\n <IndicatorCard key={`fake_${idx}`} isLoading />\n ))}\n </div>\n </div>\n )}\n {info &&\n getChunkedIndicatorRow(info).map((rowItems, idx) => (\n <div\n className={`${componentName}-export-slide p-5 gap-4`}\n key={`slides-${idx}`}\n ref={el => exportRef && (exportRef.current[idx] = el)}\n >\n {globalWarnings && <GenericWarnings warnings={globalWarnings} />}\n {rowItems.map((row, rowIndex) => (\n <IndicatorsRow key={`row_${idx}_${rowIndex}`} row={row} isLoading={isLoading} selectionItems={[]} />\n ))}\n </div>\n ))}\n </ExportContainer>\n </>\n );\n}\n\ntype RowProps = {\n row: IndicatorRow;\n selectionItems: MenuItem[];\n isLoading: boolean;\n onChange?: (origValue: string, newValue: string) => void;\n onDelete?: (value: string) => void;\n isClickable?: boolean;\n};\nfunction IndicatorsRow({ row, selectionItems, isLoading, onChange, onDelete, isClickable }: RowProps) {\n const { indicators, isFixed, label, value } = row;\n const canEdit = !isFixed && onChange;\n\n const handleChange = (updates: Params) => {\n if (!onChange) {\n return;\n }\n const newValue = updates['row'][0];\n onChange(value, newValue);\n };\n\n const handleDelete = () => {\n if (!onDelete) {\n return;\n }\n onDelete(value);\n };\n\n const { IconButton } = actions;\n\n return (\n <div className=\"relative\">\n {row.value !== 'null' && canEdit && (\n <div className=\"pb-2 flex items-center gap-4\">\n <SelectionMenuComponent\n menuConfig={{\n paramName: 'row',\n items: selectionItems,\n }}\n values={{\n row: [value],\n }}\n onUpdate={handleChange}\n button={TitleSelectorButton}\n />\n {onDelete && (\n <IconButton onClick={handleDelete}>\n <IconButton.icons.Delete />\n </IconButton>\n )}\n </div>\n )}\n {value !== 'null' && !canEdit && <div className=\"pb-2 text-lg\">{label}</div>}\n <div className=\"flex items-stretch flex-nowrap gap-5\">\n {indicators.map((ind, idx) => (\n <IndicatorCard\n key={`ind_${idx}`}\n rowValue={row.value}\n info={ind}\n isLoading={isLoading}\n isClickable={isClickable}\n />\n ))}\n </div>\n </div>\n );\n}\n\nexport { KeyIndicators };\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./table.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./table.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, { ReactNode, useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport './table.css';\nimport { BasicTrackingFn, EventElementType, SortDirection, SortingInfo, SortOption, SortType } from '../../types';\nimport { TrackSortTypes, trackTableClicked } from '../../analytics/utils';\nimport { debounce } from '../../export/utils/debounce';\n\nconst SORT_DIRECTION_OPACITY = '100%';\nconst SORT_OPACITY = '30%';\n\nfunction makeBorderCss(borders: string): string {\n let bordersCss = '';\n if (borders.includes('b')) {\n bordersCss += ' border-b';\n }\n if (borders.includes('l')) {\n bordersCss += ' border-l';\n }\n if (borders.includes('r')) {\n bordersCss += ' border-r';\n }\n if (borders.includes('t')) {\n bordersCss += ' border-t';\n }\n return bordersCss;\n}\n\ntype TableProps = {\n children: ReactNode;\n bottomScrollPosition?: number;\n};\nfunction Table({ children, bottomScrollPosition }: TableProps) {\n const tableRef = useRef<HTMLTableElement>(null);\n const [tableEl, setTableEl] = useState<HTMLTableElement>();\n const [scrollbarWidth, setScrollbarWidth] = useState(0);\n\n const debouncedSetScrollbarWidth = useCallback(\n debounce(tableEl => {\n if (tableEl) {\n setScrollbarWidth(tableEl.offsetWidth);\n }\n }, 100),\n []\n );\n\n useEffect(() => {\n if (!tableEl) return;\n\n const observer = new ResizeObserver(() => debouncedSetScrollbarWidth(tableEl));\n observer.observe(tableEl);\n\n return () => observer.disconnect();\n }, [tableEl]);\n\n useEffect(() => {\n if (tableRef.current) {\n setTableEl(tableRef.current);\n }\n }, [tableRef.current]);\n\n return (\n <div style={{ minHeight: 480 }} className=\"relative\">\n <div style={{ minHeight: 'inherit' }} className=\"table-container overflow-x-auto\">\n <table ref={tableRef} className=\"relative w-full text-sm\" style={{ tableLayout: 'auto' }} role=\"grid\">\n {children}\n </table>\n </div>\n <TableScrollbar tableEl={tableEl} width={scrollbarWidth} bottomScrollPosition={bottomScrollPosition} />\n </div>\n );\n}\n\ntype HeaderProps = {\n children: ReactNode;\n withRows?: boolean;\n};\nfunction TableHeader({ children, withRows = true }: HeaderProps) {\n return (\n <thead>\n {withRows && <tr>{children}</tr>}\n {!withRows && <>{children}</>}\n </thead>\n );\n}\n\ntype ColumnProps = {\n children: ReactNode;\n align?: 'left' | 'right' | 'center';\n colSpan?: number;\n rowSpan?: number;\n showHover?: boolean;\n borders?: string;\n minWidth?: boolean;\n width?: string;\n isSorted?: boolean;\n};\nfunction TableColumn({\n children,\n align = 'left',\n borders = 'b',\n minWidth = false,\n colSpan,\n rowSpan,\n isSorted = false,\n showHover = false,\n width,\n}: ColumnProps) {\n return (\n <th\n className={`p-2 top-0 border-light ${showHover && 'hover:bg-dark'} ${makeBorderCss(borders)} ${\n minWidth ? 'w-1' : ''\n } ${isSorted ? 'bg-dark' : 'bg-medium'} ${width || ''}`}\n colSpan={colSpan || 1}\n rowSpan={rowSpan || 1}\n role=\"columnheader\"\n >\n <span\n className={`flex-column ${align === 'left' ? 'items-start' : align === 'right' ? 'items-end' : 'items-center'}`}\n >\n {children}\n </span>\n </th>\n );\n}\n\ntype BodyProps = {\n children: ReactNode;\n};\nfunction TableBody({ children }: BodyProps) {\n return <tbody className=\"bg-white\">{children}</tbody>;\n}\n\ntype RowProps = {\n children: ReactNode;\n important?: boolean;\n border?: string;\n};\nfunction TableRow({ children, important = false, border }: RowProps) {\n return (\n <tr className={`relative ${important ? ' font-bold bg-light' : ''} ${border || ''}`} role=\"row\">\n {children}\n </tr>\n );\n}\n\ntype CellProps = {\n children: ReactNode;\n align?: 'left' | 'right' | 'center';\n borders?: string;\n colSpan?: number;\n rowSpan?: number;\n selected?: boolean;\n important?: boolean;\n isSorted?: boolean;\n onClick?: (e) => void;\n};\nfunction TableCell({\n children,\n borders = 'b',\n align = 'right',\n colSpan,\n rowSpan,\n selected,\n onClick,\n isSorted,\n important,\n}: CellProps) {\n const handleClick = e => {\n if (onClick) {\n onClick(e);\n }\n };\n\n return (\n <td\n className={`relative p-2 border-light ${makeBorderCss(borders)} ${selected ? 'bg-brand-lightest' : ''} ${\n isSorted ? 'bg-light' : ''\n } ${isSorted && important ? 'bg-medium' : ''} ${onClick ? 'cursor-pointer' : ''}`}\n valign=\"middle\"\n align={align}\n colSpan={colSpan || 1}\n rowSpan={rowSpan || 1}\n onClick={handleClick}\n role=\"gridcell\"\n >\n <span\n className={`flex-column ${align === 'left' ? 'items-start' : align === 'right' ? 'items-end' : 'items-center'}`}\n >\n {children}\n </span>\n </td>\n );\n}\n\ntype TableScrollbarProps = {\n tableEl: HTMLTableElement;\n width: number;\n bottomScrollPosition?: number;\n};\nfunction TableScrollbar({ tableEl, bottomScrollPosition = 0, width }: TableScrollbarProps) {\n const innerScrollerRef = useRef(null);\n\n const innerScrollEl = innerScrollerRef.current;\n\n useLayoutEffect(() => {\n if (!tableEl || !innerScrollEl) return;\n\n const containerOnScroll = e => {\n innerScrollEl.parentElement.scrollLeft = e.target.scrollLeft;\n };\n\n const innerScrollOnScroll = e => {\n tableEl.parentElement.scrollLeft = e.target.scrollLeft;\n };\n\n tableEl.parentElement.addEventListener('scroll', containerOnScroll);\n innerScrollEl.parentElement.addEventListener('scroll', innerScrollOnScroll);\n\n return () => {\n tableEl.parentElement.removeEventListener('scroll', containerOnScroll);\n innerScrollEl.parentElement.removeEventListener('scroll', innerScrollOnScroll);\n };\n }, [tableEl?.offsetWidth]);\n\n return (\n <div className=\"sticky h-4 bg-transparent overflow-x-auto \" style={{ bottom: `${bottomScrollPosition}px` }}>\n <div ref={innerScrollerRef} style={{ height: '1px', width: width }}></div>\n </div>\n );\n}\n\ntype SortingProps = {\n children: ReactNode;\n colId: string[];\n colLabel: string;\n options: SortOption[];\n value: SortingInfo;\n columnIndex?: number;\n onSort: (sorting: SortingInfo) => void;\n trackEvent?: BasicTrackingFn;\n position?: 'left' | 'right';\n};\nfunction Sorting({\n children,\n colId,\n colLabel,\n value,\n options,\n columnIndex = 0,\n position = 'left',\n onSort,\n trackEvent,\n}: SortingProps) {\n const [showOptions, setShowOptions] = useState(false);\n const wrapperRef = useRef(null);\n\n const paddingOnItems = 'py-2 px-3';\n const labelCss = 'block text-default';\n const subLabelCss = 'block text-lighter';\n const buttonCss = `flex-grow block text-left ${paddingOnItems} hover:bg-light`;\n\n const onSortClick = (option: SortingInfo) => {\n trackTableClicked(trackEvent, TrackSortTypes.sort, EventElementType.Sort, {\n column: colLabel,\n optionChosen: `${option.sortType} ${option.direction}`,\n });\n onSort(option);\n setShowOptions(false);\n };\n\n const arrowOpacity = (sortDirection: SortDirection) => {\n return (\n colId.includes(value?.sortKey) &&\n value?.sortIndex === columnIndex &&\n value?.direction === sortDirection &&\n SORT_DIRECTION_OPACITY\n );\n };\n\n const getLabelForSortOption = (type: SortType, direction: SortDirection): string => {\n if (type === SortType.Alpha) {\n return direction === SortDirection.ascending ? 'Ascending (A→Z)' : 'Descending (Z→A)';\n } else {\n return direction === SortDirection.ascending ? 'Ascending (0→9)' : 'Descending (9→0)';\n }\n };\n\n const onClickHeader = () => {\n if (options.length > 1) {\n setShowOptions(true);\n return;\n }\n let newDirection: SortDirection =\n options[0].sortType === SortType.Alpha ? SortDirection.ascending : SortDirection.descending;\n if (value.sortKey === options[0].sortKey) {\n newDirection = value.direction === SortDirection.ascending ? SortDirection.descending : SortDirection.ascending;\n }\n onSortClick({\n columnName: colId.join('|'),\n sortKey: options[0].sortKey,\n sortType: options[0].sortType,\n label: options[0].label,\n direction: newDirection,\n sortIndex: columnIndex,\n });\n };\n const upArrowOpacity = arrowOpacity(SortDirection.ascending);\n const downArrowOpacity = arrowOpacity(SortDirection.descending);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (wrapperRef.current && !wrapperRef.current.contains(event.target)) {\n setShowOptions(false);\n }\n };\n\n document.addEventListener('click', handleClickOutside, false);\n return () => {\n document.removeEventListener('click', handleClickOutside, false);\n };\n }, []);\n\n return (\n <div\n role=\"presentation\"\n data-test-id={`sorting-header-${colId.join('-')}`}\n ref={wrapperRef}\n className=\"relative w-full flex justify-between cursor-pointer\"\n onClick={onClickHeader}\n >\n <span>{children}</span>\n <svg role=\"img\" width={24} height={24} xmlns=\"http://www.w3.org/2000/svg\" strokeWidth=\"0\" viewBox=\"0 0 24 24\">\n <path d=\"M7 14L12 20L17 14H7Z\" fill=\"#5C626E\" fillOpacity={upArrowOpacity || SORT_OPACITY} />\n <path d=\"M17 10L12 4L7 10L17 10Z\" fill=\"#5C626E\" fillOpacity={downArrowOpacity || SORT_OPACITY} />\n </svg>\n {showOptions && (\n <div\n role=\"presentation\"\n data-test-id=\"sort-options\"\n style={{ top: 38 }}\n className={`absolute text-left font-normal z-20 border border-default rounded w-60 bg-white ${position}-0 cursor-default shadow-lg`}\n onMouseLeave={() => setShowOptions(false)}\n onClick={e => e.stopPropagation()}\n >\n <div className={`font-bold text-default ${paddingOnItems}`}>Sort by</div>\n <div className=\"pb-2\">\n {options.map((option: SortOption, idx) => {\n const commonSortOptions = {\n columnName: colId.join('|'),\n sortKey: option.sortKey,\n sortType: option.sortType,\n label: option.label,\n };\n return (\n <div key={option.sortKey} className=\"flex flex-column\">\n <button\n data-test-id={`${option.sortKey}-desc`}\n className={buttonCss}\n onClick={() => {\n onSortClick({\n ...commonSortOptions,\n direction: SortDirection.descending,\n sortIndex: columnIndex,\n });\n }}\n >\n <span className={labelCss}>{option.label}</span>\n <span className={subLabelCss}>\n {getLabelForSortOption(option.sortType, SortDirection.descending)}\n </span>\n </button>\n <button\n data-test-id={`${option.sortKey}-asc`}\n className={buttonCss}\n onClick={() => {\n onSortClick({\n ...commonSortOptions,\n direction: SortDirection.ascending,\n sortIndex: columnIndex,\n });\n }}\n >\n <span className={labelCss}>{option.label}</span>\n <span className={subLabelCss}>\n {getLabelForSortOption(option.sortType, SortDirection.ascending)}\n </span>\n </button>\n {/** Hides the divider if last options **/}\n {idx !== options.length - 1 && <hr className={`m-0 border-light mx-3`} />}\n </div>\n );\n })}\n </div>\n </div>\n )}\n </div>\n );\n}\n\nTable.Header = TableHeader;\nTable.Column = TableColumn;\nTable.Body = TableBody;\nTable.Row = TableRow;\nTable.Cell = TableCell;\nTable.Scrollbar = TableScrollbar;\nTable.Sorting = Sorting;\n\nexport { Table };\n","export function debounce(fn, delay) {\n let timer;\n return function (...args) {\n clearTimeout(timer);\n timer = setTimeout(() => fn.apply(this, args), delay);\n };\n}\n","import React from 'react';\n\ntype ValueChangeProps = {\n value?: string;\n raw?: number;\n};\nfunction ValueChange({ value, raw = 0 }: ValueChangeProps) {\n return <span className={`text-xs ${raw < 0 ? 'text-ui-red' : 'text-ui-green'}`}>{value || <span> </span>}</span>;\n}\n\nexport { ValueChange };\n","import { DataRow, IdentifierColumn, SortDirection, SortingInfo, SortType } from '../types';\n\nfunction getNumericValueFromCell(row: DataRow, cellName: string, sortIndex: number): number | null {\n const actualValue = getValueFromRow(row, cellName, sortIndex);\n if (actualValue === null) {\n return null;\n }\n return isNaN(Number(actualValue)) ? null : Number(actualValue);\n}\n\nexport function getValueFromRow(row: DataRow, cellName: string, sortIndex: number): number | string | null {\n const value = row.values[cellName];\n if (typeof value === 'number' || typeof value === 'string') {\n return value;\n } else if (Array.isArray(value)) {\n return value[sortIndex];\n }\n return null;\n}\n\nexport function sortRows(row1: DataRow, row2: DataRow, sorting: SortingInfo): number {\n const { columnName, direction, sortKey, sortType } = sorting;\n const fieldName = sortKey || columnName;\n\n if (sortType === SortType.Alpha) {\n const sortKeys = fieldName.split('|');\n\n let value1: string = '';\n let value2: string = '';\n\n if (sortKeys.length > 1) {\n value1 = sortKeys.reduce((previous, current) => previous + String(row1.values[current]), '');\n value2 = sortKeys.reduce((previous, current) => previous + String(row2.values[current]), '');\n } else {\n value1 = String(row1.values[fieldName]) || '';\n value2 = String(row2.values[fieldName]) || '';\n }\n return direction === SortDirection.ascending ? value1.localeCompare(value2) : value2.localeCompare(value1);\n } else if (sortType === SortType.Date) {\n const value1: Date = new Date(String(row1.values[fieldName]));\n const value2: Date = new Date(String(row2.values[fieldName]));\n if (direction === SortDirection.descending) {\n return value1 >= value2 ? -1 : 1;\n } else {\n return value1 > value2 ? 1 : -1;\n }\n } else {\n const value1: number = getNumericValueFromCell(row1, fieldName, sorting.sortIndex) || 0;\n const value2: number = getNumericValueFromCell(row2, fieldName, sorting.sortIndex) || 0;\n\n if (value1 === value2) {\n return 0;\n }\n\n if (direction === SortDirection.descending) {\n return value1 > value2 ? -1 : 1;\n } else {\n return value1 > value2 ? 1 : -1;\n }\n }\n}\n\nexport function getIdentifiers(\n idColumn: IdentifierColumn,\n row: DataRow\n): {\n id: string;\n name: string;\n description: string;\n identifiers: string[];\n} {\n const { identifier, subIdentifier, idField } = idColumn;\n\n let idTexts: string[] = [];\n identifier?.forEach(field => {\n const value = row.values[field];\n if (value) {\n idTexts.push(String(value));\n }\n });\n\n if (idTexts.length === 0) {\n idTexts.push(String(row.values[idField]));\n }\n\n let subTexts: string[] = [];\n if (subIdentifier) {\n subIdentifier.forEach(field => {\n const value = row.values[field];\n if (value) {\n subTexts.push(String(value));\n }\n });\n }\n\n return {\n id: String(row.values[idField]),\n name: idTexts.join(' ').trim(),\n description: subTexts.join(' ').trim(),\n identifiers: identifier,\n };\n}\n","import { getIdentifiers, getValueFromRow, sortRows } from '../../data/helpers';\nimport { DataStore } from '../../data/store';\nimport { GenericError } from '../../design/error/genericError';\nimport {\n ColumnType,\n DataColumn,\n DataRow,\n DataRows,\n IdentifierColumn,\n KpiWithChangeColumn,\n Params,\n SortingInfo,\n} from '../../types';\n\nexport type LeaderColumn = {\n column: DataColumn;\n subLabels?: (string | string[])[];\n currency: string;\n};\n\nexport type LeaderboardInfo = {\n rowIds: string[];\n columns: LeaderColumn[];\n totalsData?: DataRows;\n rowsData: DataRows;\n defaultSortingInfo?: SortingInfo;\n};\n\nexport type GroupLeaderboardInfo = LeaderboardInfo;\n\nexport type GroupInfo = { name: string; data: DataRows; groupSummary: DataRow; groupModelIds: string[] };\n\nexport function makeLeaderboardData(\n data: DataStore,\n options: {\n rowIdField: string;\n searchTerm?: string;\n visibleColumns: string[];\n },\n sortingInfo?: SortingInfo\n): LeaderboardInfo {\n const { rowIdField, searchTerm, visibleColumns } = options;\n let columns = data.getDataColumns();\n if (visibleColumns.length !== 0) {\n columns = columns.concat(data.getAvailableColumns());\n }\n\n const nameColumn = columns.find(col => col.name === rowIdField) as IdentifierColumn;\n\n const columnsToInclude: string[] = columns\n .filter(col => {\n if (col.name === rowIdField) {\n return false;\n }\n\n if (col.isFixed) {\n return true;\n }\n\n if (visibleColumns && visibleColumns.length) {\n return visibleColumns.includes(col.name);\n }\n\n return true;\n })\n .map(col => col.name);\n\n const dataColumns: DataColumn[] = [];\n columnsToInclude.forEach(name => {\n const col = columns.find(col => col.name === name);\n if (col) {\n dataColumns.push(col);\n }\n });\n\n const defaultSortColumn = columns.find(column => column.sortOptions?.some(sortOption => sortOption.isDefault));\n\n const defaultSortOption = defaultSortColumn?.sortOptions?.find(sortOption => sortOption.isDefault);\n\n if (!defaultSortOption) {\n throw new GenericError('Default sorting not found');\n }\n\n const defaultSorting: SortingInfo = {\n columnName: defaultSortColumn.name,\n label: defaultSortOption.label,\n direction: defaultSortOption.defaultDirection,\n sortKey: defaultSortOption.sortKey,\n sortType: defaultSortOption.sortType,\n sortIndex: dataColumns[0]?.arrayLength - 1,\n };\n\n const currency = data.getCurrency();\n const totalsData = data.getGroupedData([])[0];\n const rowsDataSrc = data.getGroupedData([rowIdField])[0];\n const rowsData: DataRows = [];\n\n const maxMap: Record<string, number[]> = {};\n const kpiCols = dataColumns.filter(col => col.type === ColumnType.Kpi || col.type === ColumnType.KpiWithChange);\n const rowIds: string[] = [];\n\n rowsDataSrc?.data.forEach(row => {\n kpiCols.forEach(col => {\n const values = row.values[col.name] as (null | number)[];\n const highestValue = Math.max(...(values || [0]));\n if (!maxMap[col.name]) {\n maxMap[col.name] = [];\n }\n maxMap[col.name].push(highestValue);\n });\n let isMatch = searchTerm ? false : true;\n if (searchTerm) {\n const { name } = getIdentifiers(nameColumn, row);\n const terms = searchTerm.split(' ');\n isMatch = terms.every(term => name.toLocaleLowerCase().includes(term.toLocaleLowerCase()));\n }\n if (isMatch) {\n rowIds.push(String(row.values[rowIdField]));\n rowsData.push(row);\n }\n });\n\n const leaderColumns: LeaderColumn[] = [\n {\n column: nameColumn,\n currency,\n },\n ...dataColumns.map(col => ({\n column: col,\n subLabels: col.arrayLength !== null ? rowsDataSrc?.timeFrame.periods.map(p => p.name) : undefined,\n currency,\n })),\n ];\n\n const leaderBoardData = {\n rowIds,\n rowsData,\n columns: leaderColumns,\n totalsData: totalsData?.data,\n defaultSortingInfo: defaultSorting,\n };\n return sortLeaderboard(leaderBoardData, sortingInfo);\n}\n\nexport function sortLeaderboard(leaderBoardData: LeaderboardInfo, sorting: SortingInfo) {\n if (!sorting || !leaderBoardData?.rowIds) {\n return leaderBoardData;\n }\n\n const indexedData = leaderBoardData.rowIds.map((rowId, index) => ({\n rowId,\n rowData: leaderBoardData.rowsData[index],\n }));\n\n const sortKeys = sorting.sortKey.split('|');\n const hasSortKeyData = (row: (typeof indexedData)[0]) => {\n if (sortKeys.length > 1) {\n // handling for composite sort key\n // composite key -> only for model name column\n return true;\n }\n return getValueFromRow(row.rowData, sorting?.sortKey, sorting?.sortIndex) !== null;\n };\n\n const sortedData = indexedData.sort((a, b) => {\n // primary on sortGravity\n if (a.rowData.values.sortGravity < b.rowData.values.sortGravity) return -1;\n if (a.rowData.values.sortGravity > b.rowData.values.sortGravity) return 1;\n // secondary on null values\n const isDataInA = hasSortKeyData(a);\n const isDataInB = hasSortKeyData(b);\n if (isDataInA && !isDataInB) return -1;\n if (!isDataInA && isDataInB) return 1;\n // tertiary on actual data\n return sortRows(a.rowData, b.rowData, sorting);\n });\n\n leaderBoardData.rowIds = sortedData.map(row => row.rowId);\n leaderBoardData.rowsData = sortedData.map(row => row.rowData);\n\n return leaderBoardData;\n}\n\nexport function getSortKeysFromColumn(col: LeaderColumn): string[] {\n if (!col.column) {\n return [];\n }\n let sortKeysFromColumn: string[] = [col.column.name];\n\n switch (col.column.type) {\n case ColumnType.Identifier: {\n const properColumn = col.column as IdentifierColumn;\n properColumn?.identifier && sortKeysFromColumn.push(properColumn?.identifier?.join('|'));\n break;\n }\n case ColumnType.KpiWithChange: {\n const properColumn = col.column as KpiWithChangeColumn;\n properColumn?.changeName && sortKeysFromColumn.push(properColumn?.changeName);\n break;\n }\n }\n\n return sortKeysFromColumn;\n}\n\nexport const createDataParamForQuickLook = (paramsForData: Params, groupsParam: string) => {\n //delete groups param\n const { [groupsParam]: _, ...cloneDataParams } = paramsForData;\n return cloneDataParams;\n};\n","import { Content, Entity, UiAction } from '../../types';\n\nexport type QuickLookOptions = {\n titleField: string;\n preTitleField?: string;\n contents: Content[];\n};\n\nexport type SelectionAction = {\n label: string;\n minSelection?: number;\n maxSelection?: number;\n forcedSelection?: number;\n action: UiAction;\n};\n\nexport type SelectionConfig = {\n selectionActions: SelectionAction[];\n outOfRangeMsg?: string;\n};\n\nexport type TableCustomiseOption = {\n label: string;\n paramName: string;\n options: Entity[];\n isMultiSelect?: boolean;\n selectionLimit?: number; // used with multiSelect\n};\n\nexport type TableCustomiseOptions = {\n columnsParam?: string;\n options?: TableCustomiseOption[];\n};\n\nexport enum LeaderboardType {\n Product = 'product',\n Brand = 'brand',\n Region = 'region',\n SegmentFeature = 'segment feature',\n ProductFeature = 'product feature',\n Country = 'country',\n}\n","import { LeaderboardType } from './types';\n\nexport const MAX_GROUP_NAME_LENGTH = 128;\nexport const MAX_GROUP_ITEM_COUNT = 2000;\nexport const MAX_TOTAL_GROUP_ITEM_COUNT = 5500;\nexport const CELL_VALUE_MULTIPLE = 'multiple';\nexport const STICKY_EXCEL_ROW_COUNT = 11;\nexport const DISABLED_LABLES = {\n others: 'Others',\n tradebrandsAndExclusives: 'Tradebrands and exclusives',\n suppressed: 'Suppressed',\n tradebrand: 'Tradebrand',\n};\n\nexport const MODEL_IDS_DELIMITER = ',';\nexport const GROUP_DELIMITER = '|';\nexport const LEADERBOARD_ROWID_MAP = {\n item_id: LeaderboardType.Product,\n brand_name: LeaderboardType.Brand,\n region_name: LeaderboardType.Region,\n segment_feature: LeaderboardType.SegmentFeature,\n product_feature: LeaderboardType.ProductFeature,\n country_code: LeaderboardType.Country,\n};\nexport const MAX_PRICE_CLASSES_NAME_LENGTH = 32;\n","import React, { useState } from 'react';\nimport { actions, overlays, inputs } from '@ecosystem/newron-design-system';\nimport { MAX_GROUP_NAME_LENGTH } from './constants';\nimport { checkForHTMLTags, sanitizeInput } from '../../common/util';\n\nconst { Button } = actions;\nconst { Modal } = overlays;\nconst { TextInput } = inputs;\n\nexport enum ActionType {\n Delete = 'delete',\n Rename = 'rename',\n}\n\ninterface UpdateProductGroupModalProps {\n type: ActionType;\n group: string;\n allGroups: string[];\n isOpen: boolean;\n onClose: (e) => void;\n onAction: (groupName: string) => void;\n}\n\nexport const UpdateProductGroupModal = ({\n group,\n isOpen,\n onClose,\n onAction,\n type,\n allGroups,\n}: UpdateProductGroupModalProps) => {\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [newGroupName, setNewGroupName] = useState<string>(group);\n const [isGroupNameError, setGroupNameError] = useState('');\n\n const submit = async e => {\n e.stopPropagation();\n setIsSubmitting(true);\n const groupName = type === ActionType.Delete ? group : newGroupName;\n onAction(groupName);\n setIsSubmitting(false);\n };\n\n const deleteConfirmationLabel = 'Yes, delete';\n const header = type === ActionType.Delete ? 'Delete group?' : 'Rename group';\n const confirmButtonText = type === ActionType.Delete ? deleteConfirmationLabel : 'Apply';\n const isDanger = confirmButtonText === deleteConfirmationLabel;\n const cancelButtonText = type === ActionType.Delete ? \"Don't delete\" : 'Cancel';\n\n const groupNameExists = allGroups?.some(name => name === newGroupName);\n const isActionRename = type === ActionType.Rename;\n\n const renameDisableButton = newGroupName === group || newGroupName === '' || groupNameExists;\n\n const isConfirmButtonDisabled = isSubmitting || (isActionRename && renameDisableButton) || !!isGroupNameError;\n\n const handleClose = e => {\n setNewGroupName(group);\n onClose(e);\n };\n\n const handleInputChange = (input: string): void => {\n const sanitizedInput = sanitizeInput(input);\n const error = checkForHTMLTags(sanitizedInput);\n if (error) {\n setGroupNameError(error);\n } else {\n setGroupNameError('');\n }\n setNewGroupName(sanitizedInput);\n };\n\n return (\n <Modal isOpen={isOpen}>\n <Modal.Header>\n <h2>{header}</h2>\n </Modal.Header>\n <Modal.Body>\n {type === 'rename' ? (\n <TextInput\n name=\"rename-group\"\n label=\"New name\"\n value={newGroupName}\n placeholder=\"\"\n onChange={handleInputChange}\n maxLength={MAX_GROUP_NAME_LENGTH}\n errorMessage={groupNameExists ? 'Group already exists, try another name' : isGroupNameError}\n />\n ) : (\n <>\n <p className=\"font-bold text-md\">\"{group}\" will be deleted immediately</p>\n <p className=\"text-md\">You can't undo this action</p>\n </>\n )}\n </Modal.Body>\n <Modal.Footer align=\"right\">\n <div className=\"flex gap-4\">\n <div onClick={e => handleClose(e)} aria-hidden=\"true\">\n <Button mode=\"secondary\" onClick={() => {}}>\n {cancelButtonText}\n </Button>\n </div>\n <div onClick={e => submit(e)} aria-hidden=\"true\">\n <Button isDanger={isDanger} disabled={isConfirmButtonDisabled} onClick={() => {}}>\n {confirmButtonText}\n </Button>\n </div>\n </div>\n </Modal.Footer>\n </Modal>\n );\n};\n","import React, { useState } from 'react';\nimport { actions, elements } from '@ecosystem/newron-design-system';\nimport { ActionType, UpdateProductGroupModal } from './updateProductGroupModal';\nconst { Menu } = actions;\nconst { Icon } = elements;\n\ninterface ProductGroupMenuProps {\n group: string;\n allGroups: string[];\n onDelete: (name) => void;\n onEdit: (name) => void;\n disabled?: boolean;\n}\n\nexport const ProductGroupMenu: React.FC<ProductGroupMenuProps> = ({ group, onDelete, onEdit, allGroups, disabled }) => {\n const [showActionGroupModal, setShowActionGroupModal] = useState(false);\n const [actionType, setActionType] = useState(ActionType.Delete);\n const handleClick = e => {\n e.stopPropagation();\n };\n\n const toggleUpdateGroupModal = () => {\n setShowActionGroupModal(prev => !prev);\n };\n\n const handleActionModal = (type: ActionType) => e => {\n e.stopPropagation();\n setActionType(type);\n toggleUpdateGroupModal();\n };\n\n const handleAction = (groupName: string) => {\n if (actionType === ActionType.Delete) {\n onDelete(groupName);\n } else {\n onEdit(groupName);\n }\n toggleUpdateGroupModal();\n };\n\n const handleClose = e => {\n e.stopPropagation();\n toggleUpdateGroupModal();\n };\n\n return (\n <>\n <UpdateProductGroupModal\n type={actionType}\n group={group}\n allGroups={allGroups}\n isOpen={showActionGroupModal}\n onAction={handleAction}\n onClose={handleClose}\n />\n <Menu testId=\"product-group-menu\" isDisabled={disabled}>\n <div onClick={e => handleClick(e)} aria-hidden=\"true\">\n <Menu.MoreButton testId=\"more-button\" />\n </div>\n <Menu.List>\n <div onClick={handleActionModal(ActionType.Rename)} aria-hidden=\"true\">\n <Menu.Item onSelect={() => {}} testId=\"rename-button\">\n <Icon>\n <Icon.icons.AddGroup />\n </Icon>\n Rename\n </Menu.Item>\n </div>\n <div onClick={handleActionModal(ActionType.Delete)} aria-hidden=\"true\">\n <Menu.Item onSelect={() => {}} testId=\"delete-button\">\n <Icon>\n <Icon.icons.Delete />\n </Icon>\n Delete...\n </Menu.Item>\n </div>\n </Menu.List>\n </Menu>\n </>\n );\n};\n","import { Params, SortingInfo, ValueSet } from '../../types';\nimport { GROUP_DELIMITER, MODEL_IDS_DELIMITER } from './constants';\nimport { getSortKeysFromColumn, GroupInfo, LeaderboardInfo, LeaderColumn } from './data';\nimport { TableCustomiseOption } from './types';\nimport { ProductGroup } from './useProductGroups.hook';\n\nexport const createProductGroupsParam = (response: ValueSet) => {\n if (!response) return [];\n const productGroups = Object.keys(response).reduce((acc, group) => {\n acc.push({ groupName: group, modelIds: response[group].modelIds });\n return acc;\n }, []);\n\n return productGroups;\n};\n\nexport const getGroupDataFromLeaderboard = (\n leaderboardData: LeaderboardInfo,\n groups: ProductGroup[],\n rowIdField: string\n): GroupInfo[] => {\n if (!leaderboardData || !groups) return undefined;\n const groupData = leaderboardData.rowIds\n .filter(rowId => groups?.find(group => group.id === rowId))\n .map(rowId => {\n const group = groups?.find(group => group.id === rowId);\n const groupSummary = leaderboardData.rowsData.find(row => row.values[`${rowIdField}`] === group.name);\n const groupProducts = leaderboardData.rowsData.filter(row =>\n group?.modelIds.includes(`${row.values[`${rowIdField}`]}`)\n );\n const updatedGroupProducts = groupProducts.map(row => ({\n ...row,\n values: {\n ...row.values,\n group: group.name, // Add group name as a field into the data\n },\n }));\n return { name: group.name, data: updatedGroupProducts, groupSummary, groupModelIds: group.modelIds };\n });\n // sort by modelIds length\n const sorted = groupData.sort((a, b) => b.groupModelIds.length - a.groupModelIds.length);\n return sorted;\n};\n\nexport const sortingColumnOptions = (col: LeaderColumn, sortIdex: number, sortingInfo: SortingInfo) => {\n const hasSorting = col.column.sortOptions && !col.subLabels?.length;\n const identifier = getSortKeysFromColumn(col);\n const isSorted = hasSorting && identifier.includes(sortingInfo?.sortKey) && sortingInfo?.sortIndex === sortIdex;\n\n return { hasSorting, identifier, isSorted };\n};\n\nexport const getColumnIdentifier = (columns: LeaderColumn[], col: LeaderColumn) =>\n columns.findIndex(cl => `${cl.column.name}.${col.column.label}` === `${col.column.name}.${col.column.label}`);\n\nexport const findRelatedGroup = (rowId: string, groupData: GroupInfo[]) => {\n return groupData?.find(item => item.name === rowId);\n};\n\nexport const getCustomiseOptionLabels = (options: TableCustomiseOption[], optionSettings: Params) => {\n if (!options || !optionSettings) {\n return {};\n }\n return Object.keys(optionSettings).reduce((acc, key) => {\n acc[key] = options\n .filter(option => option.paramName === key)\n .flatMap(option => option.options.filter(opt => optionSettings[key].includes(opt.value)).map(opt => opt.label));\n return acc;\n }, {});\n};\n\n/**\n * leaderboardGroupsIntoParams\n * converts group object into Params type\n * example: {values:[{groupName: 'hello', modelIds: ['1', '2']}] @returns ['hello|1,2']\n */\n\nexport const leaderboardGroupsIntoParams = (values: { groupName: string; modelIds: string[] }[]): string[] => {\n return values.map(group => {\n return leaderboardGroupIntoParams(group);\n });\n};\nexport const leaderboardGroupIntoParams = (value: { groupName: string; modelIds: string[] }): string => {\n const modelIdsStr: string = value.modelIds.join(MODEL_IDS_DELIMITER);\n const groupString = `${value.groupName}${GROUP_DELIMITER}${modelIdsStr}`;\n return groupString;\n};\n\nexport const findLeaderboardItemNamesForTracking = (\n ids: (string | number)[],\n rowIdField: string,\n rowNameField: string,\n leaderboardData?: LeaderboardInfo\n) => {\n if (!leaderboardData) {\n return [];\n }\n return ids.map(\n id => leaderboardData.rowsData.find(data => data.values[rowIdField] == id)?.values[rowNameField] as string\n );\n};\n\nexport const isSegmentFeature = (field: string): boolean => {\n return field.startsWith('segment');\n};\n\nexport const isProductFeature = (field: string): boolean => {\n return field.startsWith('f');\n};\n","import React, { useState } from 'react';\nimport { elements, inputs, actions, feedback } from '@ecosystem/newron-design-system';\nimport { getIdentifiers } from '../../data/helpers';\nimport { Cells, Table } from '../../design/table2';\nimport {\n BasicTrackingFn,\n ColumnType,\n DataCellValue,\n DataRow,\n DataType,\n FormatHint,\n IdentifierColumn,\n KpiWithChangeColumn,\n SortOption,\n SortingInfo,\n} from '../../types';\nimport { getSortKeysFromColumn, GroupInfo, LeaderColumn } from './data';\nimport { CheckboxState } from '@ecosystem/newron-design-system/build/exports/inputs';\nimport { Formatting } from '../../data/formatting';\nimport { ProductGroupMenu } from './productGroupMenu';\nimport { sortingColumnOptions } from './helper';\nimport { CELL_VALUE_MULTIPLE } from './constants';\nimport { LeaderboardType } from './types';\n\nconst { DotsLoader } = feedback;\n\nconst { Icon } = elements;\nconst { IconButton } = actions;\n\ntype HeadersTopProps = {\n columns: LeaderColumn[];\n rowsCount: number;\n selectedCount: number;\n sortingInfo?: SortingInfo;\n sortingFn: (sorting: SortingInfo) => void;\n onSelectAll?: () => void;\n onClearSelect?: () => void;\n trackEvent: BasicTrackingFn;\n};\nfunction HeadersTop({\n columns,\n rowsCount,\n selectedCount,\n onClearSelect,\n onSelectAll,\n sortingFn,\n trackEvent,\n sortingInfo,\n}: HeadersTopProps) {\n const { Checkbox, CheckboxState } = inputs;\n const [showOptions, setShowOptions] = useState(false);\n\n const getCheckState = (): CheckboxState => {\n if (selectedCount > 0 && selectedCount < rowsCount) {\n return CheckboxState.INDETERMINATE;\n } else if (selectedCount > 0 && selectedCount === rowsCount) {\n return CheckboxState.CHECKED;\n }\n return CheckboxState.UNCHECKED;\n };\n\n const handleCheckState = () => {\n if (getCheckState() === CheckboxState.UNCHECKED) {\n onSelectAll();\n } else {\n onClearSelect();\n }\n };\n\n const columnsWithoutNulls = columns.filter(col => !!col.column);\n\n return (\n <>\n {onClearSelect !== undefined && onSelectAll !== undefined && (\n <Table.Column minWidth rowSpan={2} borders=\"b\" align=\"center\">\n <Checkbox state={getCheckState()} onChange={handleCheckState} testId=\"select-all\" />\n </Table.Column>\n )}\n\n {columnsWithoutNulls.map((col, idx) => {\n const { hasSorting, identifier, isSorted } = sortingColumnOptions(col, 0, sortingInfo);\n const position = idx >= columnsWithoutNulls.length - 2 ? 'right' : 'left';\n\n return (\n <Table.Column\n key={col.column.name}\n align=\"left\"\n rowSpan={col.subLabels ? 1 : 2}\n colSpan={col.subLabels?.length || 1}\n borders=\"rb\"\n showHover={hasSorting}\n isSorted={isSorted}\n >\n <div role=\"presentation\" className=\"flex w-full\" onClick={() => setShowOptions(!showOptions)}>\n {hasSorting ? (\n <Table.Sorting\n colId={identifier}\n colLabel={col.column.label}\n value={sortingInfo}\n columnIndex={idx}\n options={col.column.sortOptions}\n onSort={sortingFn}\n position={position}\n trackEvent={trackEvent}\n >\n {col.column.label}\n </Table.Sorting>\n ) : (\n <span>{col.column.label}</span>\n )}\n </div>\n </Table.Column>\n );\n })}\n </>\n );\n}\n\ntype HeadersBottomProps = {\n columns: LeaderColumn[];\n sortingInfo: SortingInfo;\n isLoading: boolean;\n sortingFn: (sorting: SortOption) => void;\n trackEvent: BasicTrackingFn;\n};\nfunction HeadersBottom({ columns, sortingInfo, isLoading, sortingFn, trackEvent }: HeadersBottomProps) {\n const colsToUse = columns.filter(col => col.subLabels);\n\n return (\n <>\n {colsToUse.flatMap(col =>\n col.subLabels.map((label, idx) => {\n const { identifier, isSorted } = sortingColumnOptions(col, idx, sortingInfo);\n const columnPosition = columns.findIndex(\n cl => `${cl.column.name}.${col.column.label}` === `${col.column.name}.${col.column.label}`\n );\n const position = columnPosition >= columns.length - 2 ? 'right' : 'left';\n const isEnrichmentLoading = isLoading && !!col.column.enrichment;\n return (\n <Table.Column\n key={`${col.column.name}_${idx}`}\n align=\"center\"\n showHover={true}\n borders={`b${idx === 0 ? 'l' : idx === col.subLabels.length - 1 ? 'r' : ''}`}\n isSorted={isSorted}\n >\n <Table.Sorting\n colId={identifier}\n colLabel={col.column.label}\n options={col.column.sortOptions}\n onSort={sortingFn}\n value={sortingInfo}\n columnIndex={idx}\n position={position}\n trackEvent={trackEvent}\n >\n {isEnrichmentLoading ? <DotsLoader stretch height={'24px'} /> : <HeaderLabel label={label} />}\n </Table.Sorting>\n </Table.Column>\n );\n })\n )}\n </>\n );\n}\n\ntype LabelProps = {\n label: string | string[];\n};\nfunction HeaderLabel({ label }: LabelProps) {\n if (Array.isArray(label)) {\n return (\n <>\n {label.map(l => (\n <span key={l} className=\"block nowrap\">\n {l}\n </span>\n ))}\n </>\n );\n }\n\n return <span className=\"block nowrap\">{label}</span>;\n}\n\ntype InfoRowProps = {\n column: IdentifierColumn;\n row: DataRow;\n onSelect?: (rowId: string) => void;\n onHighlight?: (rowId: string) => void;\n isSelected?: boolean;\n isHighlighted?: boolean;\n isDisabled?: boolean;\n group?: GroupInfo;\n allGroups?: GroupInfo[];\n onDeleteGroup?: (name: string) => void;\n onDeleteGroupItem?: (name: string, itemId: string) => void;\n onEditGroup?: (oldName: string, newName: string) => void;\n isGroupVisible?: boolean;\n isSorted?: boolean;\n rowIdField: string;\n leaderboardType: LeaderboardType;\n isLoading?: boolean;\n};\nfunction InfoRowCells({\n column,\n row,\n onSelect,\n isSelected,\n isHighlighted,\n onHighlight,\n isDisabled,\n isLoading,\n isSorted,\n group,\n onDeleteGroup,\n onDeleteGroupItem,\n onEditGroup,\n isGroupVisible,\n allGroups,\n rowIdField,\n leaderboardType,\n}: InfoRowProps) {\n const { id, name } = getIdentifiers(column, row);\n\n const groupName = group?.name;\n\n const isGroup = !!groupName;\n\n const handleSelect = () => {\n onSelect(id);\n };\n\n const handleHighlight = () => {\n onHighlight(id);\n };\n\n const { Checkbox, CheckboxState } = inputs;\n\n const handleEditGroupName = newName => {\n onEditGroup(groupName, newName);\n };\n\n const handleRemoveItem = (groupName: string, itemId: string) => (e: React.MouseEvent) => {\n e.stopPropagation();\n onDeleteGroupItem(groupName, itemId);\n };\n\n const getFilteredProductNumber = (difference: number) => {\n return difference > 0 ? ` (${group.groupModelIds.length - group.data.length} filtered)` : '';\n };\n\n const getCountTextForGroups = () => {\n const difference = group.groupModelIds.length - group.data.length;\n\n return `${\n (group.groupModelIds.length > 1\n ? group.groupModelIds.length +\n (leaderboardType === LeaderboardType.Country ? ` countries` : ` ${leaderboardType}s`)\n : `1 ${leaderboardType}`) + getFilteredProductNumber(difference)\n }`;\n };\n\n return (\n <>\n {onSelect !== undefined && (\n <Table.Cell align=\"center\" selected={isSelected}>\n <Checkbox\n onChange={handleSelect}\n state={isSelected ? CheckboxState.CHECKED : CheckboxState.UNCHECKED}\n disabled={isDisabled}\n />\n </Table.Cell>\n )}\n <Table.Cell\n align=\"left\"\n onClick={onHighlight ? handleHighlight : undefined}\n selected={isHighlighted || false}\n isSorted={isSorted}\n >\n <div className=\"flex items-center justify-between gap-4\">\n {isGroup && (\n <Icon size=\"sm\" color=\"brand\">\n {isGroupVisible ? <Icon.icons.FolderOpen /> : <Icon.icons.Folder />}\n </Icon>\n )}\n <div className=\"flex-column w-48\">\n <span className=\"block text-brand overflow-ellipses\">{name}</span>\n {isGroup && <span className=\"block text-inactive font-normal\">{getCountTextForGroups()}</span>}\n </div>\n {row.values.group && (\n <IconButton\n testId=\"remove-group-item\"\n disabled={isLoading}\n onClick={handleRemoveItem(row.values.group.toString(), row.values[`${rowIdField}`].toString())}\n >\n <IconButton.icons.RemoveOutline />\n </IconButton>\n )}\n {isGroup && (\n <ProductGroupMenu\n disabled={isLoading}\n allGroups={allGroups?.map(group => group.name)}\n group={groupName}\n onDelete={onDeleteGroup}\n onEdit={handleEditGroupName}\n />\n )}\n </div>\n </Table.Cell>\n </>\n );\n}\n\ntype DataRowProps = {\n rowId: string;\n columns: LeaderColumn[];\n row: DataRow;\n onHighlight?: (rowId: string) => void;\n isHighlighted?: boolean;\n sortInfo?: SortingInfo;\n};\nfunction DataRowCells({ rowId, columns, row, onHighlight, isHighlighted, sortInfo }: DataRowProps) {\n const dataColumns = columns.slice(1);\n const handleClick = () => {\n onHighlight?.(rowId);\n };\n\n return (\n <>\n {dataColumns.map(col => (\n <DataCell\n key={`${rowId}_${col.column.name}`}\n isSelected={isHighlighted || false}\n column={col}\n row={row}\n rowId={rowId}\n onClick={onHighlight ? handleClick : undefined}\n sortInfo={sortInfo}\n />\n ))}\n </>\n );\n}\n\ntype DataCellProps = {\n column: LeaderColumn;\n row: DataRow;\n rowId: string;\n isSelected: boolean;\n onClick?: () => void;\n sortInfo?: SortingInfo;\n};\nfunction DataCell(props: DataCellProps) {\n const { type } = props.column.column;\n\n switch (type) {\n case ColumnType.Kpi:\n case ColumnType.KpiWithChange:\n return <KpiCell {...props} />;\n case ColumnType.Date:\n return <DateCell {...props} />;\n case ColumnType.Number:\n return <NumberCell {...props} />;\n default:\n return <TextCell {...props} />;\n }\n}\n\nfunction KpiCell({ column, row, rowId, isSelected, onClick, sortInfo }: DataCellProps) {\n const {\n column: { name, arrayLength, dataType, formatHint, type: columnType },\n currency,\n } = column;\n const valuesIndex = Array(arrayLength || 1).fill(null);\n\n let changeValues: DataCellValue | undefined;\n let changeFormatHint: FormatHint | undefined;\n let changeDataType: DataType | undefined;\n if (columnType === ColumnType.KpiWithChange) {\n const changeColumn = column.column as KpiWithChangeColumn;\n changeValues = row.values[changeColumn.changeName];\n changeFormatHint = changeColumn.changeFormatHint;\n changeDataType = changeColumn.changeDataType;\n }\n\n return (\n <>\n {valuesIndex.map((_, idx) => (\n <Table.Cell\n key={`${rowId}_${name}_${idx}`}\n borders={`b${idx === 0 ? 'l' : idx === valuesIndex.length - 1 ? 'r' : ''}`}\n selected={isSelected}\n onClick={onClick}\n important={rowId === 'market'}\n isSorted={getSortKeysFromColumn(column).includes(sortInfo?.sortKey) && sortInfo?.sortIndex === idx}\n >\n {Formatting.format(row.values[name]?.[idx] ?? null, {\n dataType,\n formatHint: formatHint,\n hyphenForNull: true,\n currency,\n })}\n {changeDataType && (\n <Cells.ValueChange\n value={Formatting.format(changeValues?.[idx] ?? null, {\n dataType: changeDataType,\n formatHint: changeFormatHint,\n currency,\n })}\n raw={changeValues?.[idx]}\n />\n )}\n </Table.Cell>\n ))}\n </>\n );\n}\n\nfunction DateCell({ column, row, isSelected, onClick, sortInfo }: DataCellProps) {\n const {\n column: { name, formatHint, dataType },\n currency,\n } = column;\n const value = String(row.values[name] || '-');\n const date = value !== '-' && value !== CELL_VALUE_MULTIPLE ? new Date(value) : undefined;\n const formatted = date ? Formatting.format(date, { formatHint, dataType, currency }) : getFormattedCellValue(value);\n return (\n <Table.Cell\n align=\"left\"\n borders=\"bl\"\n selected={isSelected}\n onClick={onClick}\n isSorted={getSortKeysFromColumn(column).includes(sortInfo?.sortKey)}\n >\n {formatted}\n </Table.Cell>\n );\n}\n\nfunction TextCell({ column, row, isSelected, onClick, sortInfo }: DataCellProps) {\n let text = String(row.values[column.column.name] || '-');\n if (column.column.type === ColumnType.Identifier) {\n const { name, description } = getIdentifiers(column.column as IdentifierColumn, row);\n text = name || description;\n }\n return (\n <Table.Cell\n align=\"left\"\n borders=\"bl\"\n selected={isSelected}\n onClick={onClick}\n isSorted={getSortKeysFromColumn(column).includes(sortInfo?.sortKey)}\n >\n {getFormattedCellValue(text)}\n </Table.Cell>\n );\n}\n\nfunction NumberCell({ column, row, isSelected, onClick, sortInfo }: DataCellProps) {\n const { column: dataColumn, currency } = column;\n const value = row.values[dataColumn.name] ?? null;\n const formatted = !isNaN(Number(value))\n ? Formatting.format(Number(value), {\n dataType: dataColumn.dataType,\n formatHint: dataColumn.formatHint,\n hyphenForNull: true,\n currency,\n })\n : getFormattedCellValue(String(value));\n return (\n <Table.Cell\n align=\"right\"\n borders=\"bl\"\n selected={isSelected}\n onClick={onClick}\n isSorted={getSortKeysFromColumn(column).includes(sortInfo?.sortKey)}\n >\n {formatted}\n </Table.Cell>\n );\n}\n\nfunction getFormattedCellValue(value: string) {\n return value === CELL_VALUE_MULTIPLE ? <span className=\"text-inactive font-normal\"> {value} </span> : value;\n}\n\nexport { HeadersTop, HeadersBottom, InfoRowCells, DataRowCells };\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./quicklook.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./quicklook.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from 'react';\nimport { actions, feedbackV2 } from '@ecosystem/newron-design-system';\nimport './quicklook.css';\nimport { DataRow, Params } from '../../types';\nimport { ContentElement } from '../../content/element';\nimport { QuickLookOptions } from './types';\n\nconst { Alert } = feedbackV2;\n\ntype Props = {\n options: QuickLookOptions;\n rowId?: string;\n row?: DataRow;\n ids: string[];\n onSelect: (rowId: string) => void;\n onClose: () => void;\n updateSettings: (updates: Params) => void;\n paramsForData: Params;\n dataUrlRoot: string;\n componentSettings: Params;\n isDisabled: boolean;\n};\nfunction QuickLook({\n options,\n rowId,\n row,\n ids,\n onSelect,\n onClose,\n dataUrlRoot,\n paramsForData,\n updateSettings,\n componentSettings,\n isDisabled,\n}: Props) {\n const { titleField, preTitleField, contents } = options;\n\n const expanded = rowId !== undefined;\n\n let canMoveUp = false;\n let canMoveDown = false;\n if (expanded && ids) {\n canMoveUp = ids.indexOf(rowId) > 0;\n canMoveDown = ids.indexOf(rowId) < ids.length - 1;\n }\n\n let preTitleText: string | undefined;\n let titleText: string | undefined;\n if (row) {\n titleText = String(row.values[titleField]);\n preTitleText = preTitleField ? String(row.values[preTitleField]) : undefined;\n }\n\n const handleMoveUp = () => {\n const newId = ids[ids.indexOf(rowId) - 1];\n newId && onSelect(newId);\n };\n\n const handleMoveDown = () => {\n const newId = ids[ids.indexOf(rowId) + 1];\n newId && onSelect(newId);\n };\n\n const { IconButton } = actions;\n\n return (\n <div\n className={`quicklook fixed top-0 right-0 bottom-0 bg-white transition-width ${\n expanded ? 'quicklook--expanded border-l border-light shadow-lg' : 'opacity-0'\n }`}\n >\n <div\n className={`quicklook-inner absolute top-0 left-0 right-0 bottom-0 ${expanded ? 'opacity-100' : 'opacity-0'}`}\n >\n {expanded && (\n <div className=\"relative flex-column pt-4 px-3 h-full\">\n <div className=\"flex items-center gap-1 py-2\">\n <span className=\"rounded border border-light\">\n <IconButton onClick={handleMoveUp} disabled={!canMoveUp}>\n <IconButton.icons.ArrowUpward />\n </IconButton>\n </span>\n <span className=\"rounded border border-light\">\n <IconButton onClick={handleMoveDown} disabled={!canMoveDown}>\n <IconButton.icons.ArrowDownward />\n </IconButton>\n </span>\n <span className=\"flex-grow\"></span>\n <IconButton onClick={onClose}>\n <IconButton.icons.Close />\n </IconButton>\n </div>\n <div className=\"flex-grow overflow-y-auto overscroll-contain px-3 mb-6\">\n {preTitleText && <div className=\"text-heading text-lg\">{preTitleText}</div>}\n {titleText && <div className=\"text-heading text-lg font-bold mb-4\">{titleText}</div>}\n {isDisabled ? (\n <Alert title=\"No further data available\" type=\"info\" />\n ) : (\n <div className=\"flex flex-column gap-4 mb-8\">\n {contents.map((content, idx) => (\n <ContentElement\n hideElement={false}\n setContentElementHasData={() => {}}\n key={`${content.type}_${idx}`}\n contentElementId={`${content.type}_${idx}`}\n content={content}\n paramsForData={{\n ...paramsForData,\n id: [rowId],\n cell: (row.values.cells as string)?.split(',') ?? paramsForData.cell,\n }}\n dataUrlRoot={dataUrlRoot}\n updateComponentSettings={updateSettings}\n componentSettings={componentSettings}\n />\n ))}\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport { QuickLook };\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./Modal.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./Modal.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, { useEffect } from 'react';\nimport { actions } from '@ecosystem/newron-design-system';\nimport './Modal.css';\n\nconst { IconButton } = actions;\n\nconst ModalContext = React.createContext<{\n onClose: () => void;\n}>(null);\n\nfunction useModalContext() {\n const context = React.useContext(ModalContext);\n\n if (!context) {\n throw new Error('Modal components cannot be rendered outside of the Modal component');\n }\n\n return context;\n}\n\ntype HeaderProps = {\n children: React.ReactNode;\n};\n\nfunction Header({ children }: HeaderProps) {\n const { onClose } = useModalContext();\n\n return (\n <header className=\"flex items-center justify-between px-6 py-4 border-b border-default rounded-t\">\n <span className=\"text-xl\">{children}</span>\n {onClose && (\n <IconButton testId=\"modal-dismiss-btn\" onClick={onClose}>\n <IconButton.icons.Close />\n </IconButton>\n )}\n </header>\n );\n}\n\ntype BodyProps = {\n children: React.ReactNode;\n overflow?: boolean;\n};\n\nfunction Body({ children, overflow = true }: BodyProps) {\n return <main className={`relative px-6 pt-4 pb-6 flex-grow-0 ${overflow ? 'overflow-auto' : ''}`}>{children}</main>;\n}\n\ntype FooterProps = {\n children: React.ReactNode;\n align?: 'left' | 'right' | 'justify';\n};\n\nfunction Footer({ children, align = 'right' }: FooterProps) {\n return (\n <footer\n className={`flex items-center px-6 py-4 border-t border-default rounded-b ${\n align === 'right' ? 'justify-end' : align === 'justify' ? 'justify-between' : 'justify-start'\n }`}\n >\n {children}\n </footer>\n );\n}\n\ntype Props = {\n children: React.ReactNode;\n onClose: () => void;\n isOpen: boolean;\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';\n};\n\nfunction Modal({ children, onClose, isOpen = false, size = 'md' }: Props) {\n const modalSizes = {\n sm: 'w-100',\n md: 'w-150',\n lg: 'w-200',\n xl: 'w-242',\n full: 'w-full',\n };\n\n useEffect(() => {\n document.body.style.overflow = isOpen ? 'hidden' : 'unset';\n return () => {\n document.body.style.overflow = 'unset';\n };\n }, [isOpen]);\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <>\n <div className=\"modal-wrapper flex items-center justify-center right-0 top-0 left-0 bottom-0 fixed px-12 py-0\">\n <div className={`flex-column bg-white rounded-2 max-h-11/12 ${modalSizes[size]}`}>\n <ModalContext.Provider value={{ onClose }}>{children}</ModalContext.Provider>\n </div>\n </div>\n <div className=\"modal-backdrop fixed top-0 left-0 w-screen h-screen\" />\n </>\n );\n}\n\nModal.Header = Header;\nModal.Body = Body;\nModal.Footer = Footer;\n\nexport { Modal };\n","import React, { useEffect, useState } from 'react';\nimport { actions, inputs } from '@ecosystem/newron-design-system';\nimport { DataStore } from '../../data/store';\nimport { BasicTrackingFn, Params } from '../../types';\nimport { UiDataParams } from '../../data';\nimport { Modal } from '../../design/modal/Modal';\nimport { TableCustomiseOption, TableCustomiseOptions } from './types';\nimport { LeaderColumn } from './data';\nimport { trackPageElementClicked } from '../../analytics/utils';\nimport { getCustomiseOptionLabels } from './helper';\n\ntype ColumnOption = {\n name: string;\n label: string;\n enrichment?: string;\n};\n\ntype Props = {\n onClose: () => void;\n customiseOptions: TableCustomiseOptions;\n settings: Params;\n data: DataStore;\n dataColumns: LeaderColumn[];\n updateSettings: (updates: Params) => void;\n trackEvent?: BasicTrackingFn;\n};\n\n/**\n * Checks whether the length of an options list is limited to a certain length\n * @param option\n * @returns\n */\nconst isOptionLimited = (option: TableCustomiseOption) => {\n return (\n option.isMultiSelect &&\n option.selectionLimit > 0 &&\n option.options.length > 0 &&\n option.options.length > option.selectionLimit\n );\n};\n\nfunction CustomiseTable({ onClose, customiseOptions, settings, data, dataColumns, updateSettings, trackEvent }: Props) {\n const [selectedColumns, setSelectedColumns] = useState<string[] | undefined>();\n const [optionSettings, setOptionsSettings] = useState<Params | undefined>();\n\n const { columnsParam, options } = customiseOptions;\n\n useEffect(() => {\n if (!columnsParam) {\n setSelectedColumns(undefined);\n return;\n }\n\n let selected = settings[columnsParam] || [];\n if (!selected?.length) {\n selected = dataColumns.map(col => col.column.name);\n }\n setSelectedColumns(selected);\n }, [settings, columnsParam, dataColumns]);\n\n useEffect(() => {\n if (!options?.length) {\n return;\n }\n\n const values: Params = {};\n\n options.forEach(option => {\n // ensure persisted values do not exceed current maximum\n const limit = isOptionLimited(option) ? option.selectionLimit : option.options.length;\n\n // only pick the persisted 'checked' values that exist in the available options\n values[option.paramName] =\n settings[option.paramName]?.filter(value => option.options.some(opt => opt.value === value)).slice(0, limit) ||\n [];\n });\n\n setOptionsSettings(values);\n }, [settings, options]);\n\n const columnOptions: ColumnOption[] = data\n .getDataColumns()\n .filter(col => col.isFixed !== true)\n .map(col => ({\n name: col.name,\n label: col.label,\n enrichment: col.enrichment,\n }));\n\n columnOptions.push(\n ...data\n .getAvailableColumns()\n .filter(col => col.isFixed !== true)\n .map(col => ({\n name: col.name,\n label: col.label,\n enrichment: col.enrichment,\n }))\n );\n\n const handleSelect = (name: string) => {\n if (selectedColumns.includes(name)) {\n setSelectedColumns(selectedColumns.filter(v => v !== name));\n } else {\n setSelectedColumns([...selectedColumns, name]);\n }\n };\n\n const handleClose = (trackingElementName: string) => () => {\n onClose();\n trackPageElementClicked(trackEvent, trackingElementName);\n };\n\n const handleOptionUpdate = (paramName: string, values: string[]) => {\n const updated = {\n ...{},\n ...optionSettings,\n [paramName]: values,\n };\n setOptionsSettings(updated);\n };\n\n const handleApply = () => {\n let updates: Params = {};\n const columnsLabels = [];\n if (columnsParam && selectedColumns) {\n const enrichments = new Set<string>();\n const columns: string[] = [];\n selectedColumns.forEach(name => {\n const option = columnOptions.find(opt => opt.name === name);\n if (option) {\n columns.push(option.name);\n columnsLabels.push(option.label);\n option.enrichment && enrichments.add(option.enrichment);\n }\n });\n updates[columnsParam] = columns;\n updates[UiDataParams.uiEnrichments] = Array.from(enrichments);\n }\n if (options && optionSettings) {\n updates = {\n ...updates,\n ...optionSettings,\n };\n }\n const optionLabelsForTracking = getCustomiseOptionLabels(options, optionSettings);\n updateSettings(updates);\n onClose();\n trackPageElementClicked(trackEvent, 'Add and save custom KPIs', {\n [columnsParam]: columnsLabels,\n ...optionLabelsForTracking,\n });\n };\n\n const showColumnSelection = columnsParam !== undefined && selectedColumns !== undefined;\n const showOptions = options !== undefined && optionSettings !== undefined;\n\n const { Button } = actions;\n const { Checkbox, CheckboxState } = inputs;\n\n return (\n <Modal size=\"md\" isOpen onClose={handleClose('Close custom KPIs')}>\n <Modal.Header>Customise table</Modal.Header>\n <Modal.Body>\n <div className=\"grid grid-cols-2 grid-rows-1\">\n {showColumnSelection && (\n <div>\n <div className=\"font-bold mb-2\">Columns</div>\n <div className=\"pb-6\">\n {columnOptions.map(opt => (\n <div className=\"py-1\" key={opt.name}>\n <Checkbox\n onChange={() => handleSelect(opt.name)}\n label={opt.label}\n state={selectedColumns.includes(opt.name) ? CheckboxState.CHECKED : CheckboxState.UNCHECKED}\n />\n </div>\n ))}\n </div>\n </div>\n )}\n {showOptions && (\n <div data-test-id=\"options-section\">\n {options.map(option => (\n <OptionSection\n key={option.paramName}\n option={option}\n values={optionSettings[option.paramName]}\n onChange={handleOptionUpdate}\n />\n ))}\n </div>\n )}\n </div>\n </Modal.Body>\n <Modal.Footer>\n <Button mode=\"secondary\" onClick={handleClose('Cancel custom KPIs')}>\n Cancel\n </Button>\n <Button onClick={handleApply}>Save</Button>\n </Modal.Footer>\n </Modal>\n );\n}\n\ntype OptionProps = {\n option: TableCustomiseOption;\n values: string[];\n onChange: (paramName: string, values: string[]) => void;\n};\nfunction OptionSection({ option, values, onChange }: OptionProps) {\n const { label, paramName, options, isMultiSelect, selectionLimit } = option;\n\n const handleRadioChange = (value: string) => {\n onChange(paramName, [value]);\n };\n\n const handleCheckChange = (value: string) => {\n if (values.includes(value)) {\n onChange(\n paramName,\n values.filter(v => v !== value)\n );\n } else {\n onChange(paramName, [...values, value]);\n }\n };\n\n const { Checkbox, CheckboxState, RadioButtons } = inputs;\n\n const maxReached = isOptionLimited(option) && values.length >= selectionLimit;\n const shouldShowLimit = isOptionLimited(option);\n\n return (\n <div className=\"\">\n <div className=\"font-bold mb-2\">{label}</div>\n <div className=\"pb-6\">\n {!isMultiSelect && <RadioButtons onChange={handleRadioChange} options={options} value={values[0]} />}\n {isMultiSelect && (\n <>\n {shouldShowLimit && (\n <p className=\"py-1\" data-test-id=\"limit-info\">\n Select up to {selectionLimit} items\n </p>\n )}\n {options.length === 0 && <p className=\"py-1\">No items available</p>}\n {options.map(opt => {\n const isChecked = values.includes(opt.value);\n return (\n <div className=\"py-1\" key={opt.value}>\n <Checkbox\n label={opt.label}\n state={isChecked ? CheckboxState.CHECKED : CheckboxState.UNCHECKED}\n onChange={() => handleCheckChange(opt.value)}\n disabled={maxReached && !isChecked}\n />\n </div>\n );\n })}\n </>\n )}\n </div>\n </div>\n );\n}\n\nexport { CustomiseTable };\n","import React from 'react';\nimport { actions } from '@ecosystem/newron-design-system';\nimport { useUiAction } from '../../ui.actions';\nimport { SelectionAction, SelectionConfig } from './types';\nimport { MAX_GROUP_ITEM_COUNT } from './constants';\nimport { BasicTrackingFn, EventElementType } from '../../types';\nimport { LeaderboardInfo } from './data';\nimport { findLeaderboardItemNamesForTracking, leaderboardGroupsIntoParams } from './helper';\nimport { TrackAnalyseTypes, trackTableClicked } from '../../analytics/utils';\nimport { ProductGroup } from './useProductGroups.hook';\n\nexport type Props = {\n rowsCount: number;\n rowIds: string[];\n rowIdField: string;\n rowNameField: string;\n selectedIds: string[];\n onClearSelect: () => void;\n onActionClick: () => void;\n onAddGroupClick: (selectedCount: number) => void;\n config: SelectionConfig;\n trackEvent: BasicTrackingFn;\n leaderboardData: LeaderboardInfo;\n isLoading: boolean;\n groups: ProductGroup[];\n groupsParam: string;\n};\n\nfunction SelectionBar({\n config,\n rowsCount,\n selectedIds,\n rowIds,\n rowIdField,\n rowNameField,\n onClearSelect,\n onActionClick,\n onAddGroupClick,\n trackEvent,\n leaderboardData,\n isLoading,\n groups,\n groupsParam,\n}: Props) {\n const { perform } = useUiAction();\n const selectedCount = selectedIds.length;\n\n const selectedGroups = groups.filter(group => selectedIds.includes(group.id));\n const groupNames = selectedGroups.map(group => group.name);\n const numberOfGroups = `${groupNames.length}`;\n const includesGroups = groupNames.length > 0;\n\n const expandedRowIds = selectedIds.flatMap(selectedId => {\n const group = groups.find(group => group.id === selectedId);\n return group ? group.modelIds : selectedId;\n });\n\n const selectedGroupsAsParam = leaderboardGroupsIntoParams(\n selectedGroups.map(group => {\n return { groupName: group.name, modelIds: group.modelIds };\n })\n );\n\n const handleActionClick = (actionConfig: SelectionAction) => {\n const { forcedSelection } = actionConfig;\n onActionClick();\n perform(actionConfig.action, {\n ids: forcedSelection ? rowIds.slice(0, forcedSelection) : selectedIds,\n [groupsParam]: selectedGroupsAsParam,\n });\n\n const expandedIds = forcedSelection ? rowIds.slice(0, forcedSelection) : expandedRowIds;\n\n const analyseType = TrackAnalyseTypes[actionConfig.action.payload.settings.page.analyseOption[0]];\n const optionChosen = findLeaderboardItemNamesForTracking(expandedIds, rowIdField, rowNameField, leaderboardData);\n\n trackTableClicked(trackEvent, analyseType, EventElementType.Link, {\n optionChosen,\n numberOfProducts: `${optionChosen.length}`,\n selectedGroups: groupNames,\n numberOfGroups,\n includesGroups: `${includesGroups}`,\n });\n };\n\n const activeActions: SelectionAction[] = config.selectionActions.filter(action => {\n const { minSelection = 0, maxSelection } = action;\n const meetsMin = selectedCount >= minSelection;\n const meetsMax = maxSelection === undefined || selectedCount <= maxSelection;\n return meetsMin && meetsMax;\n });\n\n const { Button } = actions;\n\n const disableActionButtons = (rowIds.length === 0 && selectedIds.length === 0) || isLoading;\n\n const showAddToGroupButton = selectedCount > 0 && selectedCount < MAX_GROUP_ITEM_COUNT;\n return (\n <div className=\"bg-medium py-4 px-6 flex flex-row items-center justify-between\">\n <div className=\"flex flex-row items-center\">\n {selectedCount === 0 && <span className=\"inline-block mr-4\">{rowsCount} rows</span>}\n {selectedCount > 0 && (\n <span className=\"inline-block mr-4\">\n {selectedCount} of {rowsCount} rows selected\n </span>\n )}\n {selectedCount > 0 && activeActions.length === 0 && (\n <span className=\"text-lighter\">{config.outOfRangeMsg}</span>\n )}\n {activeActions.map((action, idx) => (\n <Button\n key={`action_${idx}`}\n mode={selectedCount > 0 ? 'secondary' : 'simple'}\n onClick={() => handleActionClick(action)}\n disabled={disableActionButtons}\n >\n {action.label}\n </Button>\n ))}\n {selectedCount > 0 && (\n <Button mode=\"simple\" onClick={onClearSelect}>\n Reset\n </Button>\n )}\n </div>\n {showAddToGroupButton && (\n <div className=\"flex justify-end gap-4\">\n <Button\n key=\"addGroup_button\"\n mode={'secondary'}\n onClick={() => onAddGroupClick(selectedCount)}\n disabled={disableActionButtons || includesGroups}\n >\n <Button.Icon>\n <Button.Icon.icons.AddGroup />\n </Button.Icon>\n Add to group...\n </Button>\n </div>\n )}\n {}\n </div>\n );\n}\n\nexport { SelectionBar };\n","const hasScrollbar = (element: HTMLElement) => {\n return element.scrollHeight > element.clientHeight || element.scrollWidth > element.clientWidth;\n};\n\nconst hasScrollbarRecursive = (element: HTMLElement) => {\n if (hasScrollbar(element)) {\n return true;\n }\n const children = element.children;\n for (let i = 0; i < children.length; i++) {\n if (hasScrollbarRecursive(children[i] as HTMLElement)) {\n return true;\n }\n }\n return false;\n};\n\nexport { hasScrollbar, hasScrollbarRecursive };\n","// import { useAnalytics } from '@ecosystem/newron-client-lib';\nimport { BasicTrackingFn, EventName, EventParams, Params, SettingsProvider } from '../types';\nimport { mapDataVizForChartType, mapDataVizForElementType } from './utils';\nimport { ContextManager } from '../context/manager';\nimport { DataStore } from '../data/store';\nimport {\n getAppliedFilters,\n getDataAvailability,\n getMetadataTrackingParams,\n getTopSelectors,\n} from './trackPageElementViewed.hook';\n\nconst TABLE_TYPE = 'Table';\n\nexport const trackDataExportInitiated = (\n trackEvent: BasicTrackingFn,\n componentSettings: Params,\n componentMetadata?: SettingsProvider['metadata']\n) => {\n // componentMetadata comes from the BFF and is used to override default properties\n const dataViz = getDataVizValue(componentSettings);\n const metadataTrackingName = componentMetadata?.tracking?.elementName ?? '';\n const elementType = componentMetadata?.tracking?.elementType ?? mapDataVizForElementType(dataViz);\n\n const eventParams: EventParams = {\n elementType,\n };\n addElementDetails(eventParams, metadataTrackingName, elementType, dataViz);\n trackEvent(EventName.DataExportInitiated, eventParams);\n};\n\nconst getDataVizValue = (componentSettings: Params): string | undefined => {\n if (!componentSettings.dataViz || componentSettings.dataViz.length === 0) {\n return undefined;\n }\n return componentSettings.dataViz[0];\n};\n\nexport const trackDataExported = (\n trackEvent: BasicTrackingFn,\n componentSettings: Params,\n componentMetadata: SettingsProvider['metadata'],\n optionChosen: string[],\n trackingSourceData: DataStore\n) => {\n const context = ContextManager.getInstance().get();\n const dataAvailability = getDataAvailability(trackingSourceData);\n const topSelectors = getTopSelectors(context.settings.values, context.settings.definitions);\n const appliedFilters = getAppliedFilters(context.filters);\n const metadataTrackingName = componentMetadata?.tracking?.elementName ?? '';\n const dataViz = getDataVizValue(componentSettings);\n const elementType = componentMetadata?.tracking?.elementType ?? mapDataVizForElementType(dataViz);\n const eventParams: EventParams = {\n elementType,\n };\n addElementDetails(eventParams, metadataTrackingName, elementType, dataViz);\n const metadataTrackingParams = getMetadataTrackingParams(componentMetadata, componentSettings, trackingSourceData);\n const params = {\n ...dataAvailability,\n ...topSelectors,\n ...appliedFilters,\n ...eventParams,\n ...metadataTrackingParams,\n optionChosen,\n };\n trackEvent(EventName.DataExported, params);\n};\n\nconst addElementDetails = (\n eventParams: EventParams,\n metadataTrackingName: string,\n elementType: string,\n dataViz: string\n) => {\n if (elementType === TABLE_TYPE) {\n eventParams.tableName = metadataTrackingName;\n } else {\n eventParams.chartType = mapDataVizForChartType(dataViz) ?? TABLE_TYPE;\n eventParams.elementName = metadataTrackingName;\n }\n};\n","import React, { useEffect, useState } from 'react';\nimport { ExportDto, RequestCompression, exportFile } from '@ecosystem/export-api';\nimport { actions, overlays } from '@ecosystem/newron-design-system';\nimport { ExportFormat, ExportModal, authentication, downloadFile, logger } from '@ecosystem/newron-client-lib';\nimport { hasScrollbarRecursive } from '../tools/hasScrollbar';\nimport { BasicTrackingFn, Params, SettingsProvider } from '../types';\nimport { trackDataExportInitiated, trackDataExported } from '../analytics/trackDataExported';\nimport { DataStore } from '../data/store';\nimport { useDataState } from '../data/provider';\nimport { Mode } from '@ecosystem/newron-design-system/build/components/buttons/Button';\n\nconst { Button } = actions;\nconst { Toast } = overlays;\n\nconst exportModalMessage = \"You're about to download the current data set.\";\n\ntype Props = {\n trackingSourceData: DataStore;\n disabled?: boolean;\n exportFormats: ExportFormat[];\n getExportData: (exportFormat: ExportFormat, data?: DataStore) => Promise<ExportDto>;\n exportContentRef?: React.MutableRefObject<HTMLElement[] | HTMLElement>;\n onModalVisibilityChange?: (isVisible: boolean) => void;\n componentSettings: Params;\n componentMetadata?: SettingsProvider['metadata'];\n trackEvent?: BasicTrackingFn;\n hasExternalExportContent?: boolean;\n buttonType?: Mode;\n};\n\nfunction ExportButton({\n trackingSourceData,\n componentSettings,\n disabled,\n exportFormats,\n getExportData,\n exportContentRef,\n onModalVisibilityChange,\n componentMetadata,\n trackEvent,\n hasExternalExportContent = false,\n buttonType,\n}: Props) {\n const [showExportModal, setShowExport] = useState(false);\n const [message, setMessage] = useState<string>(exportModalMessage);\n const [disabledFormats, setDisabledFormats] = useState<ExportFormat[]>([]);\n const [toast, setToast] = useState<{ type: overlays.Notification; message: string }>();\n const { data } = useDataState();\n useEffect(() => {\n if (onModalVisibilityChange) {\n onModalVisibilityChange(showExportModal);\n }\n }, [showExportModal, onModalVisibilityChange]);\n\n const handleExportButtonClick = () => {\n if (exportFormats.some(format => format === ExportFormat.Pptx) && exportContentRef?.current) {\n try {\n const elementRefs = Array.isArray(exportContentRef.current)\n ? exportContentRef.current\n : [exportContentRef.current];\n const hasScrollbar = elementRefs.filter(Boolean).some(hasScrollbarRecursive);\n if (hasScrollbar && !hasExternalExportContent) {\n setDisabledFormats([ExportFormat.Pptx]);\n setMessage(`${exportModalMessage} Powerpoint export is temporarily unavailable.`);\n logger.error(new Error('Powerpoint export not available. Scrollbar in the export image.'), {\n screenHeight: window.screen.height,\n screenWidth: window.screen.width,\n });\n } else if (disabledFormats.length > 0) {\n setDisabledFormats(disabledFormats.filter(format => format !== ExportFormat.Pptx));\n setMessage(exportModalMessage);\n }\n } catch (err) {\n logger.error(err);\n }\n }\n trackEvent && trackDataExportInitiated(trackEvent, componentSettings, componentMetadata);\n setShowExport(true);\n };\n\n const handleDownload = async (selectedExportFormats: ExportFormat[]) => {\n const token = await authentication.getAccessToken();\n const optionChosen: string[] = [];\n for (const exportFormat of selectedExportFormats) {\n const exportData = await getExportData(exportFormat, trackingSourceData ?? data);\n optionChosen.push(exportData.template);\n const file = await exportFile(exportData, {\n baseUrl: '/export',\n bearerToken: token,\n requestCompression: RequestCompression.GZip,\n });\n downloadFile(file);\n }\n trackEvent &&\n trackDataExported(trackEvent, componentSettings, componentMetadata, optionChosen, trackingSourceData ?? data);\n };\n\n return (\n <>\n <Button\n onClick={handleExportButtonClick}\n mode={buttonType ? buttonType : `secondary`}\n disabled={disabled}\n label=\"Export data set\"\n >\n <Button.Icon>\n <Button.Icon.icons.Export />\n </Button.Icon>\n </Button>\n <ExportModal\n isShown={showExportModal}\n title=\"Download data\"\n message={message}\n exportFormats={exportFormats}\n disabledFormats={disabledFormats}\n download={handleDownload}\n onError={err => {\n setToast({ type: 'error', message: 'Something went wrong' });\n setShowExport(false);\n logger.error(err);\n }}\n onClose={() => setShowExport(false)}\n />\n\n {toast && (\n <Toast type={toast.type} onComplete={() => setToast(undefined)}>\n {toast.message}\n </Toast>\n )}\n </>\n );\n}\n\nexport { ExportButton };\n","import {\n DataCellValue,\n DataColumn,\n DataRow,\n ExportFormat,\n ExportOptions,\n IdentifierColumn,\n KpiWithChangeColumn,\n} from '../../types';\nimport { GroupInfo, LeaderboardInfo, LeaderColumn } from './data';\nimport { AvailableTemplate, ColumnType, DataCell, DataTable, ExcelExportDto } from '@ecosystem/export-api';\nimport { getExportContext, mapValueToDataCell } from '../../export';\nimport { TableColumn } from '@ecosystem/export-api/dist/dto/data-table';\nimport { getIdentifiers } from '../../data/helpers';\nimport { Formatting } from '../../data/formatting';\nimport { STICKY_EXCEL_ROW_COUNT } from './constants';\n\nfunction getEmptyValuesArray(length: number): (number | null)[] {\n return Array(length).fill(null);\n}\n\nexport const chartDataToExportData = (\n exportFormat: ExportFormat,\n { fileHeaderSettings, fileName, contentName }: ExportOptions,\n info: LeaderboardInfo,\n groupInfo: GroupInfo[] = [],\n currency: string | undefined,\n rowIdField: string\n): ExcelExportDto => {\n const leaderboardInfo = removeGroupSummariesFromLeaderboardInfo(info, groupInfo, rowIdField);\n switch (exportFormat) {\n case ExportFormat.Xlsx:\n return {\n template: AvailableTemplate.Excel,\n name: fileName,\n worksheets: [\n {\n context: getExportContext(fileHeaderSettings),\n worksheetName: contentName,\n data: createWorksheetData(leaderboardInfo, groupInfo, currency),\n frozen: { ySplit: STICKY_EXCEL_ROW_COUNT },\n },\n ],\n };\n\n default:\n throw new Error('Export format is not supported');\n }\n};\n\nconst removeGroupSummariesFromLeaderboardInfo = (info: LeaderboardInfo, groupInfo: GroupInfo[], rowIdField: string) => {\n const copyLeaderboardInfoData = [...info.rowsData];\n const groupNames = groupInfo.map(group => group.name);\n return {\n ...info,\n rowsData: copyLeaderboardInfoData.filter(data => !groupNames.includes(data.values[rowIdField] as string)),\n };\n};\n\nfunction createHeaderRow(info: LeaderboardInfo): TableColumn[] {\n return info.columns.reduce((acc, current) => {\n const mainHeaderColumns = current.column;\n\n const totalNumberOfColumns = getTotalNumberColumns(current);\n\n for (let i = 0; i < totalNumberOfColumns; i++) {\n acc.push({ header: mainHeaderColumns.label, type: ColumnType.Text, style: { width: 17 } });\n }\n return acc;\n }, []);\n}\n\nfunction createAllMarketRow(info: LeaderboardInfo): DataCell[] {\n const row: DataCell[] = [{ value: 'Market', type: ColumnType.Text }];\n const totalsData = info.totalsData[0].values;\n const restData = info.columns.slice(1);\n\n return restData.reduce((acc, current) => {\n if (!current.column.arrayLength) {\n acc.push({ value: '-', type: ColumnType.Text });\n return acc;\n }\n\n const value = totalsData[current.column.name];\n\n if (!value) {\n const totalNumberOfColumns = getTotalNumberColumns(current);\n for (let i = 0; i < totalNumberOfColumns; i++) {\n acc.push({ value: '-', type: ColumnType.Text });\n }\n return acc;\n }\n\n const mainColumnValues = Object.entries(value).map(([_key, data]) =>\n mapValueToDataCell(data, current.column.formatHint, current.column.dataType)\n );\n acc.push(...mainColumnValues);\n\n const changeValues = getChangeValuesForColumn(totalsData, current.column);\n acc.push(...changeValues);\n return acc;\n }, row);\n}\n\nconst getTotalNumberColumns = (current: LeaderColumn) => {\n const mainHeaderColumns = current.column;\n const subHeaderColumns = current.subLabels;\n const totalNumberOfSubColumns = subHeaderColumns?.length - 1;\n const totalNumberOfColumns = Number.isInteger(mainHeaderColumns.arrayLength)\n ? mainHeaderColumns.arrayLength + totalNumberOfSubColumns\n : 1;\n return totalNumberOfColumns;\n};\n\nfunction getChangeValuesForColumn(data: Record<string, DataCellValue>, currentColumn: DataColumn) {\n const columnName = (currentColumn as KpiWithChangeColumn).changeName;\n const columnValues = data[columnName] || getEmptyValuesArray(currentColumn.arrayLength);\n const changeValues = Object.entries(columnValues).map(([_key, data]) =>\n mapValueToDataCell(data, currentColumn.formatHint, currentColumn.dataType)\n );\n\n // we do not need first column as it is empty values\n const [_firstColumn, ...restColumns] = changeValues;\n\n return restColumns;\n}\n\nconst mergeGroupSummaryWithProducts = (groupData: GroupInfo[]) => {\n // gather all groups with their products\n const groupSummary = groupData\n .map(groupInfo => {\n const groupProducts = groupInfo?.data;\n const groupSummary = groupInfo.groupSummary;\n\n return [getEmptyRow(groupSummary), groupSummary, ...groupProducts];\n })\n .flat();\n return groupSummary;\n};\n\nconst getEmptyRow = (referenceRow: DataRow): DataRow => {\n return {\n values: {\n ...Object.entries(referenceRow.values).reduce((acc, [key, value]) => {\n acc[key] = Array.isArray(value) ? ['', ''] : '';\n return acc;\n }, {}),\n },\n hasData: false,\n };\n};\n\nconst createSummaryForGroups = (info: LeaderboardInfo, groupData: GroupInfo[]) => {\n const groupSummary = mergeGroupSummaryWithProducts(groupData);\n\n const withInfo = {\n ...info,\n rowsData: groupSummary,\n };\n return createDataRows(withInfo);\n};\n\nfunction createDataRows(info: LeaderboardInfo): DataCell[][] {\n return info.rowsData.map(row => {\n const columnValues: DataCell[] = [];\n\n const identifierColumn = info.columns[0].column as IdentifierColumn;\n const identifierName = getIdentifiers(identifierColumn, row).name;\n columnValues.push(mapValueToDataCell(identifierName, null, null));\n\n const columnsWithoutIdentifierColumn = info.columns.slice(1);\n\n return columnsWithoutIdentifierColumn.reduce((acc, current) => {\n if (!current.column.arrayLength) {\n acc.push(\n mapValueToDataCell(\n row.values[current.column.name] as string | number,\n current.column.formatHint,\n current.column.dataType\n )\n );\n return acc;\n }\n\n const value = row.values[current.column.name] || getEmptyValuesArray(current.subLabels.length);\n\n const values = Object.entries(value).map(([_key, data]) =>\n mapValueToDataCell(data, current.column.formatHint, current.column.dataType)\n );\n acc.push(...values);\n\n const changeValues = getChangeValuesForColumn(row.values, current.column);\n acc.push(...changeValues);\n return acc;\n }, columnValues);\n });\n}\n\nfunction createPeriodsRow(info: LeaderboardInfo): DataCell[] {\n return info.columns.reduce((acc, current) => {\n if (!current.column.arrayLength) {\n acc.push({\n value: '',\n type: ColumnType.Text,\n });\n return acc;\n }\n\n const allMainColumnLabels =\n current.subLabels.map(label => ({ value: label.toString(), type: ColumnType.Text })) ?? [];\n acc.push(...allMainColumnLabels);\n\n const [firstPeriod, ...restPeriods] = allMainColumnLabels;\n const allChangeColumnLabels = restPeriods.map((period, index) => {\n const changeLabel = index === 0 ? firstPeriod.value : restPeriods[index - 1].value;\n return { ...period, value: `Change - ${changeLabel} vs ${period.value}` };\n }, []);\n\n acc.push(...allChangeColumnLabels);\n return acc;\n }, []);\n}\nexport const createWorksheetData = (info: LeaderboardInfo, groupInfo: GroupInfo[], currency: string): DataTable => {\n return {\n currencySymbol: ' ' + (Formatting.getCurrencySymbol(currency) || currency) + ' ',\n dataColumns: createHeaderRow(info),\n summaryRows: [createPeriodsRow(info), createAllMarketRow(info)].concat(createSummaryForGroups(info, groupInfo)),\n dataRows: createDataRows(info),\n };\n};\n","import { useCallback, useEffect, useRef } from 'react';\nimport { ContentProps } from '../../newron-core';\n\ntype Props = {\n rowsToDisplay: number;\n selected: string[];\n isLoading: boolean;\n componentSettings: ContentProps['componentSettings'];\n updateSettings: ContentProps['updateSettings'];\n setRowsToDisplay: (rowsCount: number) => void;\n setSelected: (selected: string[]) => void;\n};\n\nexport enum LeaderBoardSettings {\n RowsToDisplay = 'rowsToDisplay',\n SelectedProducts = 'selectedProducts',\n}\n\nexport const useDataFromComponentSettings = ({\n rowsToDisplay,\n selected,\n isLoading,\n componentSettings,\n setRowsToDisplay,\n setSelected,\n updateSettings,\n}: Props) => {\n const isDataFromComponentSettingsCopied = useRef(false);\n\n const storeSelectedProducts = useCallback(\n (shouldClear?: boolean) => {\n updateSettings({\n [LeaderBoardSettings.RowsToDisplay]: shouldClear ? [] : [rowsToDisplay.toString()],\n [LeaderBoardSettings.SelectedProducts]: shouldClear ? [] : selected,\n });\n },\n [rowsToDisplay, selected, updateSettings]\n );\n\n useEffect(\n function copyAndRemoveDataFromComponentSettings() {\n if (!isLoading && !isDataFromComponentSettingsCopied.current) {\n const rowsToDisplay = componentSettings[LeaderBoardSettings.RowsToDisplay];\n const selectedProducts = componentSettings[LeaderBoardSettings.SelectedProducts];\n\n rowsToDisplay?.length && setRowsToDisplay(parseInt(rowsToDisplay[0]));\n selectedProducts?.length && setSelected(selectedProducts);\n\n storeSelectedProducts(true);\n\n isDataFromComponentSettingsCopied.current = true;\n }\n },\n [isLoading, componentSettings, storeSelectedProducts]\n );\n\n return {\n storeSelectedProducts,\n };\n};\n","import { useCallback, useEffect, useMemo, useState } from 'react';\nimport { TrackGroupTypes, trackTableClicked } from '../../analytics/utils';\nimport { PreferenceClient } from '../../client/preference.client';\nimport { BasicTrackingFn, EventElementType, Params, ValueSet } from '../../types';\nimport { LeaderboardInfo } from './data';\nimport { createProductGroupsParam, findLeaderboardItemNamesForTracking, leaderboardGroupsIntoParams } from './helper';\n\nexport interface Props {\n componentSettings: Params;\n preferencesGroupName: string;\n groupsParam: string;\n updateSettings: (settings: Params) => void;\n paramsForData: Params;\n trackEvent: BasicTrackingFn;\n leaderboardData?: LeaderboardInfo;\n}\n\nexport type ProductGroup = {\n id: string;\n name: string;\n modelIds: string[];\n selected: boolean;\n groupType: GroupType;\n};\n\nexport enum GroupType {\n selectGroups = 'Select groups',\n otherGroups = 'Other groups',\n}\n\nexport const useProductGroups = ({\n componentSettings,\n updateSettings,\n preferencesGroupName,\n paramsForData,\n groupsParam,\n trackEvent,\n leaderboardData,\n}: Props) => {\n const [preferences, setPreferences] = useState<ValueSet>({});\n const [groups, setGroups] = useState<ProductGroup[]>();\n const [isGroupModalOpen, setIsGroupModalOpen] = useState<boolean>(false);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const itemGroups = useMemo(() => [...new Set(paramsForData.cell?.map(cell => cell?.split('-')[1]))], [paramsForData]);\n\n const createGroups = ({ leaderboardData }: { leaderboardData?: LeaderboardInfo } = {}): ProductGroup[] => {\n return Object.keys(preferences).map(group => {\n const groupType = !leaderboardData\n ? null\n : leaderboardData.rowIds.some(rowId => rowId === group)\n ? GroupType.selectGroups\n : GroupType.otherGroups;\n\n return {\n id: group,\n name: group,\n modelIds: preferences[group].modelIds,\n selected: false,\n groupType,\n };\n });\n };\n /* eslint-disable react-hooks/exhaustive-deps */\n useEffect(() => {\n getProductGroups();\n }, [preferencesGroupName]);\n\n /* eslint-disable react-hooks/exhaustive-deps */\n useEffect(() => {\n if (!preferences) return;\n const mapped = createGroups();\n\n setGroups(mapped);\n }, [preferences]);\n\n const handleProductGroups = useCallback(\n (value: any) => {\n const paramGroup = leaderboardGroupsIntoParams(value);\n updateSettings({\n ...componentSettings,\n [groupsParam]: paramGroup ? paramGroup : [],\n });\n },\n [componentSettings, updateSettings]\n );\n\n const preferencesStore = (updatedPreferences: ValueSet) => {\n setIsLoading(true);\n setPreferences(updatedPreferences);\n return PreferenceClient.getInstance()\n .store(preferencesGroupName, updatedPreferences)\n .then(response => {\n const productGroups = createProductGroupsParam(response);\n handleProductGroups(productGroups);\n })\n .finally(() => {\n setIsLoading(false);\n });\n };\n\n const createOrUpdateGroup = (names: string[], selected: string[], rowIdField: string, rowNamefield: string) => {\n if (!leaderboardData) return;\n // add selected products to preferences keep the existing ones\n const updatedPreferences: ValueSet = { ...preferences };\n names.forEach(name => {\n const modelIds = [...new Set([...selected, ...(preferences?.[name]?.modelIds || [])])];\n\n updatedPreferences[name] = { modelIds, itemGroups };\n });\n\n const groupType = names.some(name => preferences[name]) ? TrackGroupTypes.AddItem : TrackGroupTypes.AddGroup;\n const selectedNames = findLeaderboardItemNamesForTracking(selected, rowIdField, rowNamefield, leaderboardData);\n trackTableClicked(trackEvent, groupType, EventElementType.Group, {\n optionChosen: selectedNames,\n numberOfProducts: `${selected.length}`,\n });\n\n setPreferences(updatedPreferences);\n preferencesStore(updatedPreferences);\n };\n\n const toggleCreateGroupModal = () => {\n setIsGroupModalOpen(prev => !prev);\n };\n\n const getProductGroups = async () => {\n setIsLoading(true);\n try {\n const response = await PreferenceClient.getInstance().retrieve(preferencesGroupName);\n const productGroups = createProductGroupsParam(response);\n setPreferences(response || {}); // Update preferences state\n handleProductGroups(productGroups); // Handle product groups\n } finally {\n setIsLoading(false);\n }\n };\n\n const deleteGroup = (name: string) => {\n trackTableClicked(trackEvent, TrackGroupTypes.DeleteGroup, EventElementType.Group);\n const updatedPreferences = { ...preferences };\n delete updatedPreferences[name];\n setPreferences(updatedPreferences);\n preferencesStore(updatedPreferences);\n };\n\n const deleteGroupItem = (name: string, itemId: string) => {\n trackTableClicked(trackEvent, TrackGroupTypes.RemoveItem, EventElementType.Group);\n if (preferences[name].modelIds.length === 1) {\n deleteGroup(name);\n return;\n }\n const updatedPreferences = { ...preferences };\n updatedPreferences[name].modelIds = updatedPreferences[name].modelIds.filter(id => id !== itemId);\n setPreferences(updatedPreferences);\n preferencesStore(updatedPreferences);\n };\n\n const updateGroupName = (oldName: string, newName: string) => {\n const updatedPreferences = { ...preferences };\n updatedPreferences[newName] = updatedPreferences[oldName];\n delete updatedPreferences[oldName];\n trackTableClicked(trackEvent, TrackGroupTypes.RenameGroup, EventElementType.Group);\n setPreferences(updatedPreferences);\n preferencesStore(updatedPreferences);\n };\n\n return {\n groups,\n isLoading,\n isGroupModalOpen,\n toggleCreateGroupModal,\n createOrUpdateGroup,\n deleteGroup,\n deleteGroupItem,\n updateGroupName,\n getProductGroups, //exporting for test\n preferencesStore, //exporting for test\n createGroups,\n };\n};\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./createGroupModal.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./createGroupModal.css\";\n export default content && content.locals ? content.locals : undefined;\n","import { actions, inputs, overlays } from '@ecosystem/newron-design-system';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { GroupType, ProductGroup } from './useProductGroups.hook';\nimport { MAX_GROUP_NAME_LENGTH } from './constants';\nimport { checkForHTMLTags, sanitizeInput } from '../../common/util';\n\nimport './createGroupModal.css';\nimport { LeaderboardInfo } from './data';\nimport { groupBy } from '../../tools/object';\nimport { LeaderboardType } from './types';\n\nconst { Modal } = overlays;\nconst { Button } = actions;\nconst { TextInput, RadioButtons, CheckboxGroup, Checkbox, CheckboxState } = inputs;\n\ntype CheckboxValue = {\n name: string;\n id: string;\n state: string;\n groupType: GroupType;\n modelIds: string[];\n};\n\nenum RadioOptions {\n NEW = 'new',\n EXISTING = 'existing',\n}\nexport interface CreateGroupModalProps {\n onClose: () => void;\n isOpen: boolean;\n onCreateGroup: (names?: string[]) => void;\n title: string;\n isLoading?: boolean;\n selected: string[];\n leaderboardData: LeaderboardInfo;\n createGroups: ({ leaderboardData }?: { leaderboardData?: LeaderboardInfo }) => ProductGroup[];\n leaderboardType: LeaderboardType;\n}\n\nconst radioOptions = [\n {\n value: RadioOptions.NEW,\n label: 'New group',\n },\n {\n value: RadioOptions.EXISTING,\n label: 'Existing group',\n },\n];\n\nexport const CreateGroupModal: React.FC<CreateGroupModalProps> = ({\n onClose,\n isOpen,\n onCreateGroup,\n title,\n isLoading,\n selected,\n leaderboardData,\n createGroups,\n leaderboardType,\n}) => {\n const [groups, setGroups] = useState<CheckboxValue[]>([]);\n const [groupName, setGroupName] = useState<string>();\n const [GroupNameError, setGroupNameError] = useState('');\n const [selectedOption, setSelectedOption] = useState<string>(RadioOptions.NEW);\n\n const handleSelectChange = useCallback((value: CheckboxValue[]) => {\n setGroups(groups => {\n value.map(val => {\n //onChange event has to be on the group!?\n const idx = groups.findIndex(group => group.id === val.id);\n groups[idx] = { ...groups[idx], ...val };\n });\n return Array.from(groups);\n });\n }, []);\n\n const handleOptionChange = value => {\n setSelectedOption(value);\n };\n\n useEffect(() => {\n if (!isOpen) return;\n const productGroups = createGroups({ leaderboardData });\n setGroupName('');\n setGroupNameError('');\n setSelectedOption(RadioOptions.NEW);\n setGroups(\n productGroups.map(pg => ({\n ...pg,\n state: selected.every(select => pg.modelIds.includes(select)) ? CheckboxState.CHECKED : CheckboxState.UNCHECKED,\n }))\n );\n }, [leaderboardData, isOpen, selected, createGroups]);\n\n const isGroupNew = selectedOption === RadioOptions.NEW;\n const isGroupExisting = selectedOption === RadioOptions.EXISTING;\n\n const primaryButtonText = isGroupNew ? 'Create group' : 'Add to selected group';\n\n const handleCreateGroup = () => {\n if (isGroupNew) {\n onCreateGroup([groupName.trim()]);\n } else {\n onCreateGroup(groups.filter(group => group.state === CheckboxState.CHECKED).map(group => group.id));\n }\n handleClose();\n };\n\n const groupNameExists = groups?.some(group => group.name.trim() === groupName.trim());\n\n const isGroupNameEmpty = isGroupNew && !groupName;\n const isAnyGroupChecked = groups.some(\n group => group.state === CheckboxState.CHECKED && !selected.every(select => group.modelIds.includes(select))\n );\n const isGroupNameDuplicate = isGroupNew && groupNameExists;\n\n const primaryButtonDisabled =\n isGroupNameEmpty || (!isGroupNew && !isAnyGroupChecked) || isGroupNameDuplicate || !!GroupNameError;\n\n const handleClose = () => {\n setGroupName('');\n setSelectedOption(RadioOptions.NEW);\n onClose();\n };\n\n const groupsByGroupType = groupBy(groups, group => group.groupType);\n\n const handleInputChange = (input: string): void => {\n const sanitizedInput = sanitizeInput(input);\n const error = checkForHTMLTags(sanitizedInput);\n if (error) {\n setGroupNameError(error);\n } else {\n setGroupNameError('');\n }\n setGroupName(sanitizedInput);\n };\n\n return (\n <Modal isOpen={isOpen} onClose={handleClose} size=\"md\">\n <Modal.Header>{title}</Modal.Header>\n <Modal.Body>\n <RadioButtons value={selectedOption} options={radioOptions} onChange={handleOptionChange} />\n <div className=\"mt-4\">\n {isGroupNew && (\n <TextInput\n name=\"new-group\"\n label=\"Group name\"\n placeholder=\"\"\n value={groupName}\n maxLength={MAX_GROUP_NAME_LENGTH}\n onChange={handleInputChange}\n errorMessage={groupNameExists ? 'Group already exists, try another name' : GroupNameError}\n hasError={groupNameExists || !!GroupNameError}\n />\n )}\n {isGroupExisting && (\n <ProductGroups\n groupsByGroupType={groupsByGroupType}\n handleSelectChange={handleSelectChange}\n selected={selected}\n leaderboardType={leaderboardType}\n />\n )}\n </div>\n </Modal.Body>\n <Modal.Footer>\n <Button onClick={handleClose} mode=\"secondary\">\n Cancel\n </Button>\n <Button onClick={handleCreateGroup} mode=\"primary\" disabled={primaryButtonDisabled} isLoading={isLoading}>\n {primaryButtonText}\n </Button>\n </Modal.Footer>\n </Modal>\n );\n};\n\nfunction ProductGroups({ groupsByGroupType, handleSelectChange, selected, leaderboardType }) {\n const groupsByGroupTypeEntries = Object.entries(groupsByGroupType);\n return groupsByGroupTypeEntries.length > 0 ? (\n <>\n {groupsByGroupTypeEntries\n .sort(([groupTypeName]) => (groupTypeName === GroupType.selectGroups ? -1 : 1)) //\"Select groups\" at the top\n .map(([groupTypeName, groups]: [GroupType, CheckboxValue[]]) => (\n <div key={groupTypeName} className=\"groupListPLB\">\n <CheckboxGroup title={groupTypeName} onChange={handleSelectChange}>\n {groupTypeName === GroupType.selectGroups && <GroupDisclaimer leaderboardType={leaderboardType} />}\n {groups.map(group => {\n const rowSelected = selected.every(select => group.modelIds.includes(select));\n return (\n <Checkbox\n id={group.id}\n key={group.id}\n value={group.id}\n name={group.id}\n state={group.state === CheckboxState.CHECKED ? CheckboxState.CHECKED : CheckboxState.UNCHECKED}\n label={group.id}\n disabled={rowSelected}\n />\n );\n })}\n </CheckboxGroup>\n </div>\n ))}\n </>\n ) : (\n <NoGroupMessage leaderboardType={leaderboardType} />\n );\n}\n\nfunction GroupDisclaimer({ leaderboardType }) {\n return (\n <span className=\"selectGroupInfoPLB\">\n {leaderboardType}s that are already in those folders will not be added as duplicates\n </span>\n );\n}\n\nfunction NoGroupMessage({ leaderboardType }) {\n return (\n <>\n <p className=\"font-bold text-md\">You do not have any groups now</p>\n <p className=\"text-md\">Create at least one so that you can add more {leaderboardType}s to it in the future.</p>\n </>\n );\n}\n","import React, { useEffect, useRef, useState } from 'react';\nimport { actions, overlays } from '@ecosystem/newron-design-system';\nimport { Loading } from '../../design/loading/Loading';\nimport { Table } from '../../design/table2';\nimport {\n createDataParamForQuickLook,\n getSortKeysFromColumn,\n GroupInfo,\n LeaderboardInfo,\n makeLeaderboardData,\n sortLeaderboard,\n} from './data';\nimport { EventElementType, ExportFormat, ExportOptions, IdentifierColumn, SortingInfo } from '../../types';\nimport { DataRowCells, HeadersBottom, HeadersTop, InfoRowCells } from './board.parts';\nimport { QuickLook } from './quicklook';\nimport { DataContentProps } from '../../content/types';\nimport { SearchInput } from '../../design/search/search';\nimport { CustomiseTable } from './customise';\nimport { Instructions } from '../../content/instructions';\nimport { SelectionBar } from './selection.bar';\nimport { TableCustomiseOptions, QuickLookOptions, SelectionConfig, LeaderboardType } from './types';\nimport { ExportButton } from '../../export/export.button';\nimport { ExcelExportDto, PowerpointExportDto } from '@ecosystem/export-api';\nimport { chartDataToExportData } from './chartDataToExportData';\nimport { useDataFromComponentSettings } from './useDataFromComponentSettings.hook';\nimport { CreateGroupModal } from './createGroupModal';\nimport { useProductGroups } from './useProductGroups.hook';\nimport {\n getGroupDataFromLeaderboard,\n findLeaderboardItemNamesForTracking,\n isSegmentFeature,\n isProductFeature,\n} from './helper';\nimport { DISABLED_LABLES, LEADERBOARD_ROWID_MAP, MAX_TOTAL_GROUP_ITEM_COUNT } from './constants';\nimport { PageSettingsManager } from '../../page/settings';\nimport { useCorePageState } from '../../page/provider';\nimport { TrackSelectionTypes, TrackTableNavTypes, trackTableClicked } from '../../analytics/utils';\n\nconst { Toast } = overlays;\n\n// TODO - hack for removing 'suppressed'\nconst isDisabled = (rowId: string) => {\n return (\n rowId &&\n Object.values(DISABLED_LABLES).reduce((prev, curr) => {\n return prev || rowId.includes(curr);\n }, false)\n );\n};\n\nconst getLeaderboardType = (rowIdField: string): LeaderboardType => {\n // returns the leaderboard type based on the rowIdField\n // if the rowIdField doesn't match the predefined leaderboard row ids in the map,\n // then check if it's a segment feature or a product feature and return accordingly\n return (\n LEADERBOARD_ROWID_MAP[rowIdField] ||\n (isSegmentFeature(rowIdField) && LeaderboardType.SegmentFeature) ||\n (isProductFeature(rowIdField) && LeaderboardType.ProductFeature)\n );\n};\n\nfunction Leaderboard({\n data,\n isLoading,\n instructions = {},\n paramsForData,\n dataUrlRoot,\n updateSettings,\n ComponentActionsContainer,\n ComponentFooterContainer,\n componentSettings,\n isEnrichmentLoading,\n trackEvent,\n componentMetadata: componentMetaData,\n collection,\n}: DataContentProps) {\n const { updatePageSettings } = useCorePageState();\n const [rowsToDisplay, setRowsToDisplay] = useState<number>(100);\n const [dataStamp, setDataStamp] = useState<number>();\n const [leaderboardData, setLeaderboardData] = useState<LeaderboardInfo>();\n const [groupData, setGroupData] = useState<GroupInfo[]>();\n const [showGroupData, setShowGroupData] = useState<{ name: string; show: boolean }[]>();\n const [searchTerm, setSearchTerm] = useState<string | undefined>();\n\n const [sortingInfo, setSortingInfo] = useState<SortingInfo>(undefined);\n const [defaultSortingInfo, setDefaultSortingInfo] = useState<SortingInfo>();\n\n const [selected, setSelected] = useState<string[]>([]);\n const [disabled, setDisabled] = useState<string[]>([]);\n const [showEdit, setShowEdit] = useState<boolean>(false);\n const [toast, setToast] = useState<{ type: overlays.Notification; message: string }>();\n\n const [highlighted, setHighlighted] = useState<string>();\n const visibleColumnsRef = useRef<string>(null);\n\n const myInstructions = new Instructions(instructions, componentSettings);\n const rowIdField = myInstructions.getString('rowIdField');\n const preferencesGroupName = myInstructions.getString('preferencesGroupName');\n const groupsParam = myInstructions.getString('groupsParam');\n const quickLookOptions = myInstructions.getObject('quickLook') as QuickLookOptions;\n const selectionConfig = myInstructions.getObject('selectionConfig') as SelectionConfig;\n const customiseOptions = myInstructions.getObject('customiseOptions') as TableCustomiseOptions;\n const exportOptions = myInstructions.getObject('export') as ExportOptions;\n\n const rowNameField = componentMetaData?.tracking?.rowNameField;\n\n const isLeaderboardLoading = isLoading || isEnrichmentLoading;\n\n const pageSettingsInstance = PageSettingsManager.getInstance();\n\n const {\n isLoading: isProductGroupLoading,\n groups,\n isGroupModalOpen,\n createOrUpdateGroup,\n deleteGroup,\n deleteGroupItem,\n toggleCreateGroupModal,\n updateGroupName,\n createGroups,\n } = useProductGroups({\n componentSettings,\n updateSettings,\n preferencesGroupName,\n groupsParam,\n paramsForData,\n trackEvent,\n leaderboardData,\n });\n\n let visibleColumns: string[] = [];\n if (customiseOptions?.columnsParam) {\n visibleColumns = componentSettings[customiseOptions.columnsParam] || [];\n }\n\n const { storeSelectedProducts } = useDataFromComponentSettings({\n componentSettings,\n isLoading,\n rowsToDisplay,\n selected,\n setRowsToDisplay,\n setSelected,\n updateSettings,\n });\n\n const updateData = (withSearchTerm?: string) => {\n if (!data || !data.hasDataResultSetsValues()) {\n return;\n }\n const pageSettings = pageSettingsInstance.getPageSettings();\n const updatedRowIdField = pageSettings?.rowIdField?.[0] || rowIdField;\n\n const leaderboardData = makeLeaderboardData(\n data,\n { rowIdField: updatedRowIdField, searchTerm: withSearchTerm, visibleColumns },\n sortingInfo\n );\n\n setDefaultSortingInfo(leaderboardData.defaultSortingInfo);\n\n const groupData = getGroupDataFromLeaderboard(leaderboardData, groups, updatedRowIdField);\n setLeaderboardData(leaderboardData);\n setGroupData(groupData);\n setDataStamp(data.stamp);\n setHighlighted(undefined);\n setSelected([]);\n disableIndividualItem(leaderboardData);\n };\n\n const disableIndividualItem = leaderboardData => {\n //get list of disabled then exclude group from the item list\n const disabledItems = leaderboardData.rowIds.filter(\n rowId => isDisabled(rowId) && !groups.some(group => group.id === rowId)\n );\n setDisabled(disabledItems);\n };\n\n useEffect(() => {\n const pageSettings = pageSettingsInstance.getPageSettings();\n const sortingInfo = pageSettings?.sortingInfo?.[0] ? JSON.parse(pageSettings?.sortingInfo?.[0]) : undefined;\n setSortingInfo(sortingInfo || defaultSortingInfo);\n }, [defaultSortingInfo]);\n\n /* eslint-disable react-hooks/exhaustive-deps */\n useEffect(() => {\n if (!data || data.stamp === dataStamp) {\n return;\n }\n\n const firstDataColumn = data.getDataColumns()[0];\n const newRowIdField = firstDataColumn?.['idField'] ?? rowIdField;\n updateSettings({ rowIdField: [newRowIdField] });\n updatePageSettings({ rowIdField: [newRowIdField] });\n updateData();\n setSearchTerm(undefined);\n }, [data]);\n\n /* eslint-disable react-hooks/exhaustive-deps */\n useEffect(() => {\n if (visibleColumnsRef.current === JSON.stringify(visibleColumns)) {\n return;\n }\n visibleColumnsRef.current = JSON.stringify(visibleColumns);\n updateData();\n }, [visibleColumns]);\n\n useEffect(() => {\n if (!sortingInfo && !sortingInfo?.sortKey) {\n return;\n }\n const infoDataCopy = sortLeaderboard(leaderboardData, sortingInfo);\n setLeaderboardData(infoDataCopy);\n updatePageSettings({\n sortingInfo: [JSON.stringify(sortingInfo)],\n });\n }, [sortingInfo]);\n\n useEffect(() => {\n if (data) {\n collection?.onLoaded();\n }\n }, [data]);\n\n const handleLoadMore = () => {\n if (!leaderboardData) {\n return;\n }\n const newAmount = rowsToDisplay + 100;\n if (newAmount > leaderboardData.rowsData.length) {\n setRowsToDisplay(leaderboardData.rowsData.length);\n } else {\n setRowsToDisplay(newAmount);\n }\n trackTableClicked(trackEvent, TrackTableNavTypes.LoadMore, EventElementType.Link);\n };\n\n const handleSelect = (rowId: string) => {\n if (disabled.includes(rowId)) {\n return;\n }\n if (selected.includes(rowId)) {\n setSelected(selected.filter(v => v !== rowId));\n } else {\n setSelected([...selected, rowId]);\n }\n };\n\n const handleSelectAll = () => {\n if (!leaderboardData) {\n return;\n }\n const selectedRows = leaderboardData.rowIds.filter(rowId => !disabled.includes(rowId));\n setSelected(selectedRows);\n const numberOfProducts = selectedRows.length;\n trackTableClicked(trackEvent, TrackSelectionTypes.selectAll, EventElementType.CheckBox, {\n numberOfProducts: numberOfProducts.toString(),\n });\n };\n\n const handleClearSelect = () => {\n setSelected([]);\n };\n\n const handleHighlight = (rowId: string) => {\n const isCurrentlyHighlighted = rowId === highlighted;\n setHighlighted(isCurrentlyHighlighted ? undefined : rowId);\n\n if (isCurrentlyHighlighted) {\n return;\n }\n\n const highlightedItems = findLeaderboardItemNamesForTracking([rowId], rowIdField, rowNameField, leaderboardData);\n trackTableClicked(trackEvent, TrackTableNavTypes.Quickview, EventElementType.Overlay, {\n optionChosen: highlightedItems,\n });\n };\n\n const handleSearchChange = (term?: string) => {\n setSearchTerm(term);\n updateData(term);\n };\n\n const handleSortLeaderboard = (sorting: SortingInfo) => {\n setSortingInfo(sorting);\n };\n\n const { Button } = actions;\n\n const highlightedRow =\n highlighted !== undefined\n ? leaderboardData.rowsData.find(({ values }) => `${values?.[`${rowIdField}`]}` === highlighted)\n : undefined;\n\n const handleGroupList = (rowId: string) => {\n setShowGroupData(prev => {\n return prev?.find(group => group.name === rowId)\n ? prev?.map(group => {\n if (group.name === rowId) {\n return { name: rowId, show: !group.show };\n }\n return group;\n })\n : [...(prev || []), { name: rowId, show: true }];\n });\n };\n\n const getGroup = (rowId: string) => {\n return groups?.find(group => group.id === rowId);\n };\n\n const findRelatedGroup = (rowId: string) => {\n return groupData?.find(item => item.name === rowId);\n };\n\n const isGroupVisible = (rowId: string) => {\n return showGroupData?.find(group => group.name === rowId)?.show;\n };\n\n const handleCreateOrUpdateGroup = (names: string[]) => {\n createOrUpdateGroup(names, selected, rowIdField, rowNameField);\n handleClearSelect();\n };\n\n const getGroupItemBorderValue = rowId => {\n return isGroupVisible(rowId) ? 'border-light border-t-8 border-l-2' : '';\n };\n\n const getGroupModelsBorderValue = (rowId: string, modelId: number) => {\n const groupName = getGroup(rowId)?.name;\n const isLastItem = findRelatedGroup(groupName)?.data.slice(-1)[0].values[`${rowIdField}`] === modelId;\n return isLastItem ? 'border-light border-b-8 border-l-2' : 'border-light border-l-2';\n };\n\n const onRowHighlight = (rowId: string) => {\n if (getGroup(rowId)) {\n return handleGroupList(rowId);\n } else if (quickLookOptions) {\n return handleHighlight(rowId);\n }\n return undefined;\n };\n\n const getQuicklookIds = () => {\n return leaderboardData?.rowIds.slice(0, rowsToDisplay).filter(id => !groups?.find(group => group.id === id));\n };\n\n const isFirstColumnSorted =\n leaderboardData && getSortKeysFromColumn(leaderboardData.columns[0]).includes(sortingInfo?.sortKey);\n\n const handleAddGroupClick = (selectedCount: number) => {\n const totalItemCountsInGroups = groups.reduce((acc, group) => acc + group.modelIds.length, 0);\n if (totalItemCountsInGroups + selectedCount >= MAX_TOTAL_GROUP_ITEM_COUNT) {\n setToast({\n type: 'error',\n message:\n 'The total number of items exceeds the allowed limit for all groups. Please reduce the number of items or contact with your Gfk representative.',\n });\n return;\n }\n toggleCreateGroupModal();\n };\n\n return (\n <>\n {\n <div>\n <div className=\"relative pt-4 w-full max-w-full\">\n <Loading isActive={isLoading} withIndicator />\n <Table bottomScrollPosition={72}>\n <Table.Header withRows={false}>\n <Table.Row>\n {leaderboardData && (\n <HeadersTop\n onSelectAll={selectionConfig ? handleSelectAll : undefined}\n onClearSelect={selectionConfig ? handleClearSelect : undefined}\n rowsCount={leaderboardData?.rowIds.length || 0}\n selectedCount={selected.length || 0}\n columns={leaderboardData.columns}\n sortingFn={handleSortLeaderboard}\n sortingInfo={sortingInfo}\n trackEvent={trackEvent}\n />\n )}\n </Table.Row>\n <Table.Row>\n {leaderboardData && (\n <HeadersBottom\n columns={leaderboardData.columns}\n sortingFn={handleSortLeaderboard}\n sortingInfo={sortingInfo}\n isLoading={isEnrichmentLoading}\n trackEvent={trackEvent}\n />\n )}\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {leaderboardData && leaderboardData.totalsData && (\n <Table.Row important>\n <Table.Cell colSpan={selectionConfig ? 2 : 1} align=\"left\" important isSorted={isFirstColumnSorted}>\n Market\n </Table.Cell>\n <DataRowCells\n rowId=\"market\"\n columns={leaderboardData.columns}\n row={leaderboardData.totalsData[0]}\n sortInfo={sortingInfo}\n />\n </Table.Row>\n )}\n {leaderboardData &&\n leaderboardData.rowIds.slice(0, rowsToDisplay).map((rowId, idx) => (\n <React.Fragment key={idx}>\n <Table.Row key={`${rowId}_${idx}`} border={getGroupItemBorderValue(rowId)}>\n <InfoRowCells\n isHighlighted={rowId === highlighted}\n onHighlight={onRowHighlight}\n onSelect={selectionConfig ? handleSelect : undefined}\n column={leaderboardData.columns[0].column as IdentifierColumn}\n row={leaderboardData.rowsData[idx]}\n isSelected={selected.includes(rowId)}\n isDisabled={!Array.isArray(groupData) || disabled.includes(rowId)}\n isLoading={isLeaderboardLoading}\n isSorted={isFirstColumnSorted}\n group={findRelatedGroup(rowId)}\n allGroups={groupData}\n onDeleteGroup={deleteGroup}\n onEditGroup={updateGroupName}\n isGroupVisible={isGroupVisible(rowId)}\n rowIdField={rowIdField}\n leaderboardType={getLeaderboardType(rowIdField)}\n />\n <DataRowCells\n rowId={rowId}\n isHighlighted={rowId === highlighted}\n onHighlight={quickLookOptions && !getGroup(rowId) ? handleHighlight : undefined}\n columns={leaderboardData.columns}\n row={leaderboardData.rowsData[idx]}\n sortInfo={sortingInfo}\n />\n </Table.Row>\n {isGroupVisible(rowId) &&\n findRelatedGroup(rowId)?.data.map((row, idx) => (\n <Table.Row\n key={`${row.values[`${rowIdField}`]}_${idx}`}\n border={getGroupModelsBorderValue(rowId, row.values[`${rowIdField}`] as number)}\n >\n <InfoRowCells\n isHighlighted={row.values[`${rowIdField}`] === highlighted}\n onHighlight={onRowHighlight}\n onSelect={selectionConfig ? handleSelect : undefined}\n isSorted={isFirstColumnSorted}\n column={leaderboardData.columns[0].column as IdentifierColumn}\n row={row}\n isLoading={isLeaderboardLoading}\n isSelected={selected.includes(`${row.values[`${rowIdField}`]}`)}\n isDisabled={disabled.includes(`${row.values[`${rowIdField}`]}`)}\n onDeleteGroupItem={deleteGroupItem}\n rowIdField={rowIdField}\n leaderboardType={getLeaderboardType(rowIdField)}\n />\n <DataRowCells\n rowId={`${row.values[`${rowIdField}`]}`}\n columns={leaderboardData.columns}\n row={row}\n sortInfo={sortingInfo}\n />\n </Table.Row>\n ))}\n </React.Fragment>\n ))}\n\n {leaderboardData && leaderboardData.rowIds.length === 0 && searchTerm && (\n <Table.Row>\n <Table.Cell colSpan={99} align=\"center\">\n No matches for your search\n </Table.Cell>\n </Table.Row>\n )}\n </Table.Body>\n </Table>\n\n {leaderboardData && (\n <div className=\"py-4 flex items-center gap-4\">\n <span>\n {rowsToDisplay > leaderboardData.rowIds.length &&\n `${leaderboardData.rowIds.length} out of ${leaderboardData.rowIds.length} items`}\n {rowsToDisplay <= leaderboardData.rowIds.length &&\n `${rowsToDisplay} out of ${leaderboardData.rowIds.length} items`}\n </span>\n {rowsToDisplay < leaderboardData.rowIds.length && (\n <Button mode=\"simple\" onClick={handleLoadMore}>\n Load more\n </Button>\n )}\n </div>\n )}\n </div>\n </div>\n }\n {leaderboardData && quickLookOptions && highlightedRow && (\n <QuickLook\n options={quickLookOptions}\n row={highlightedRow}\n rowId={highlighted}\n ids={getQuicklookIds()}\n onSelect={handleHighlight}\n onClose={() => setHighlighted(undefined)}\n paramsForData={createDataParamForQuickLook(paramsForData, groupsParam)}\n dataUrlRoot={dataUrlRoot}\n updateSettings={updateSettings}\n componentSettings={componentSettings}\n isDisabled={disabled.includes(highlighted)}\n />\n )}\n {leaderboardData && selectionConfig && ComponentFooterContainer && (\n <ComponentFooterContainer>\n <SelectionBar\n isLoading={isLeaderboardLoading}\n config={selectionConfig}\n rowsCount={leaderboardData.rowIds.length}\n selectedIds={selected}\n rowIds={leaderboardData.rowIds.filter(\n id => !disabled.includes(id) && !groupData?.map(data => data.name).includes(id)\n )}\n onClearSelect={handleClearSelect}\n onAddGroupClick={handleAddGroupClick}\n onActionClick={storeSelectedProducts}\n trackEvent={trackEvent}\n rowIdField={rowIdField}\n rowNameField={rowNameField}\n leaderboardData={leaderboardData}\n groups={groups}\n groupsParam={groupsParam}\n />\n </ComponentFooterContainer>\n )}\n {leaderboardData && ComponentActionsContainer && (\n <ComponentActionsContainer>\n {leaderboardData && exportOptions && (\n <ExportButton\n trackingSourceData={data}\n componentSettings={componentSettings}\n componentMetadata={componentMetaData}\n disabled={isLeaderboardLoading}\n exportFormats={[ExportFormat.Xlsx]}\n getExportData={async (exportFormat: ExportFormat): Promise<PowerpointExportDto | ExcelExportDto> => {\n switch (exportFormat) {\n case ExportFormat.Xlsx:\n return chartDataToExportData(\n exportFormat,\n exportOptions,\n leaderboardData,\n groupData,\n data.getCurrency(),\n rowIdField\n );\n default:\n break;\n }\n }}\n trackEvent={trackEvent}\n />\n )}\n {customiseOptions && (\n <Button\n testId=\"customise-btn\"\n disabled={isLeaderboardLoading}\n onClick={() => setShowEdit(true)}\n mode=\"secondary\"\n label=\"settings\"\n >\n <Button.Icon>\n <Button.Icon.icons.Option />\n </Button.Icon>\n </Button>\n )}\n <span className=\"ml-4\">\n <SearchInput\n disabled={isLeaderboardLoading}\n term={searchTerm}\n placeholder=\"Quick search\"\n onChange={handleSearchChange}\n />\n </span>\n </ComponentActionsContainer>\n )}\n {leaderboardData && showEdit && (\n <CustomiseTable\n updateSettings={updateSettings}\n data={data}\n onClose={() => setShowEdit(false)}\n customiseOptions={customiseOptions}\n settings={componentSettings}\n dataColumns={leaderboardData.columns}\n trackEvent={trackEvent}\n />\n )}\n\n <CreateGroupModal\n onCreateGroup={handleCreateOrUpdateGroup}\n onClose={toggleCreateGroupModal}\n isOpen={isGroupModalOpen}\n title={`Add ${selected.length} ${getLeaderboardType(rowIdField)}s to`}\n isLoading={isProductGroupLoading}\n selected={selected}\n leaderboardData={leaderboardData}\n createGroups={createGroups}\n leaderboardType={getLeaderboardType(rowIdField)}\n />\n {toast && (\n <Toast type={toast.type} onComplete={() => setToast(undefined)}>\n {toast.message}\n </Toast>\n )}\n </>\n );\n}\n\nexport { Leaderboard };\n","/*!\n * @kurkle/color v0.3.2\n * https://github.com/kurkle/color#readme\n * (c) 2023 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n return lim(round(v * 2.55), 0, 255);\n}\nfunction b2p(v) {\n return lim(round(v / 2.55), 0, 100);\n}\nfunction n2b(v) {\n return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n return lim(round(v * 100), 0, 100);\n}\n\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n var len = str.length;\n var ret;\n if (str[0] === '#') {\n if (len === 4 || len === 5) {\n ret = {\n r: 255 & map$1[str[1]] * 17,\n g: 255 & map$1[str[2]] * 17,\n b: 255 & map$1[str[3]] * 17,\n a: len === 5 ? map$1[str[4]] * 17 : 255\n };\n } else if (len === 7 || len === 9) {\n ret = {\n r: map$1[str[1]] << 4 | map$1[str[2]],\n g: map$1[str[3]] << 4 | map$1[str[4]],\n b: map$1[str[5]] << 4 | map$1[str[6]],\n a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n };\n }\n }\n return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n var f = isShort(v) ? h1 : h2;\n return v\n ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n : undefined;\n}\n\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n const a = s * Math.min(l, 1 - l);\n const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n const rgb = hsl2rgbn(h, 1, 0.5);\n let i;\n if (w + b > 1) {\n i = 1 / (w + b);\n w *= i;\n b *= i;\n }\n for (i = 0; i < 3; i++) {\n rgb[i] *= 1 - w - b;\n rgb[i] += w;\n }\n return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n if (r === max) {\n return ((g - b) / d) + (g < b ? 6 : 0);\n }\n if (g === max) {\n return (b - r) / d + 2;\n }\n return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n const range = 255;\n const r = v.r / range;\n const g = v.g / range;\n const b = v.b / range;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n let h, s, d;\n if (max !== min) {\n d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n h = hueValue(r, g, b, d, max);\n h = h * 60 + 0.5;\n }\n return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n return (\n Array.isArray(a)\n ? f(a[0], a[1], a[2])\n : f(a, b, c)\n ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n const m = HUE_RE.exec(str);\n let a = 255;\n let v;\n if (!m) {\n return;\n }\n if (m[5] !== v) {\n a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n }\n const h = hue(+m[2]);\n const p1 = +m[3] / 100;\n const p2 = +m[4] / 100;\n if (m[1] === 'hwb') {\n v = hwb2rgb(h, p1, p2);\n } else if (m[1] === 'hsv') {\n v = hsv2rgb(h, p1, p2);\n } else {\n v = hsl2rgb(h, p1, p2);\n }\n return {\n r: v[0],\n g: v[1],\n b: v[2],\n a: a\n };\n}\nfunction rotate(v, deg) {\n var h = rgb2hsl(v);\n h[0] = hue(h[0] + deg);\n h = hsl2rgb(h);\n v.r = h[0];\n v.g = h[1];\n v.b = h[2];\n}\nfunction hslString(v) {\n if (!v) {\n return;\n }\n const a = rgb2hsl(v);\n const h = a[0];\n const s = n2p(a[1]);\n const l = n2p(a[2]);\n return v.a < 255\n ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n : `hsl(${h}, ${s}%, ${l}%)`;\n}\n\nconst map = {\n x: 'dark',\n Z: 'light',\n Y: 're',\n X: 'blu',\n W: 'gr',\n V: 'medium',\n U: 'slate',\n A: 'ee',\n T: 'ol',\n S: 'or',\n B: 'ra',\n C: 'lateg',\n D: 'ights',\n R: 'in',\n Q: 'turquois',\n E: 'hi',\n P: 'ro',\n O: 'al',\n N: 'le',\n M: 'de',\n L: 'yello',\n F: 'en',\n K: 'ch',\n G: 'arks',\n H: 'ea',\n I: 'ightg',\n J: 'wh'\n};\nconst names$1 = {\n OiceXe: 'f0f8ff',\n antiquewEte: 'faebd7',\n aqua: 'ffff',\n aquamarRe: '7fffd4',\n azuY: 'f0ffff',\n beige: 'f5f5dc',\n bisque: 'ffe4c4',\n black: '0',\n blanKedOmond: 'ffebcd',\n Xe: 'ff',\n XeviTet: '8a2be2',\n bPwn: 'a52a2a',\n burlywood: 'deb887',\n caMtXe: '5f9ea0',\n KartYuse: '7fff00',\n KocTate: 'd2691e',\n cSO: 'ff7f50',\n cSnflowerXe: '6495ed',\n cSnsilk: 'fff8dc',\n crimson: 'dc143c',\n cyan: 'ffff',\n xXe: '8b',\n xcyan: '8b8b',\n xgTMnPd: 'b8860b',\n xWay: 'a9a9a9',\n xgYF: '6400',\n xgYy: 'a9a9a9',\n xkhaki: 'bdb76b',\n xmagFta: '8b008b',\n xTivegYF: '556b2f',\n xSange: 'ff8c00',\n xScEd: '9932cc',\n xYd: '8b0000',\n xsOmon: 'e9967a',\n xsHgYF: '8fbc8f',\n xUXe: '483d8b',\n xUWay: '2f4f4f',\n xUgYy: '2f4f4f',\n xQe: 'ced1',\n xviTet: '9400d3',\n dAppRk: 'ff1493',\n dApskyXe: 'bfff',\n dimWay: '696969',\n dimgYy: '696969',\n dodgerXe: '1e90ff',\n fiYbrick: 'b22222',\n flSOwEte: 'fffaf0',\n foYstWAn: '228b22',\n fuKsia: 'ff00ff',\n gaRsbSo: 'dcdcdc',\n ghostwEte: 'f8f8ff',\n gTd: 'ffd700',\n gTMnPd: 'daa520',\n Way: '808080',\n gYF: '8000',\n gYFLw: 'adff2f',\n gYy: '808080',\n honeyMw: 'f0fff0',\n hotpRk: 'ff69b4',\n RdianYd: 'cd5c5c',\n Rdigo: '4b0082',\n ivSy: 'fffff0',\n khaki: 'f0e68c',\n lavFMr: 'e6e6fa',\n lavFMrXsh: 'fff0f5',\n lawngYF: '7cfc00',\n NmoncEffon: 'fffacd',\n ZXe: 'add8e6',\n ZcSO: 'f08080',\n Zcyan: 'e0ffff',\n ZgTMnPdLw: 'fafad2',\n ZWay: 'd3d3d3',\n ZgYF: '90ee90',\n ZgYy: 'd3d3d3',\n ZpRk: 'ffb6c1',\n ZsOmon: 'ffa07a',\n ZsHgYF: '20b2aa',\n ZskyXe: '87cefa',\n ZUWay: '778899',\n ZUgYy: '778899',\n ZstAlXe: 'b0c4de',\n ZLw: 'ffffe0',\n lime: 'ff00',\n limegYF: '32cd32',\n lRF: 'faf0e6',\n magFta: 'ff00ff',\n maPon: '800000',\n VaquamarRe: '66cdaa',\n VXe: 'cd',\n VScEd: 'ba55d3',\n VpurpN: '9370db',\n VsHgYF: '3cb371',\n VUXe: '7b68ee',\n VsprRggYF: 'fa9a',\n VQe: '48d1cc',\n VviTetYd: 'c71585',\n midnightXe: '191970',\n mRtcYam: 'f5fffa',\n mistyPse: 'ffe4e1',\n moccasR: 'ffe4b5',\n navajowEte: 'ffdead',\n navy: '80',\n Tdlace: 'fdf5e6',\n Tive: '808000',\n TivedBb: '6b8e23',\n Sange: 'ffa500',\n SangeYd: 'ff4500',\n ScEd: 'da70d6',\n pOegTMnPd: 'eee8aa',\n pOegYF: '98fb98',\n pOeQe: 'afeeee',\n pOeviTetYd: 'db7093',\n papayawEp: 'ffefd5',\n pHKpuff: 'ffdab9',\n peru: 'cd853f',\n pRk: 'ffc0cb',\n plum: 'dda0dd',\n powMrXe: 'b0e0e6',\n purpN: '800080',\n YbeccapurpN: '663399',\n Yd: 'ff0000',\n Psybrown: 'bc8f8f',\n PyOXe: '4169e1',\n saddNbPwn: '8b4513',\n sOmon: 'fa8072',\n sandybPwn: 'f4a460',\n sHgYF: '2e8b57',\n sHshell: 'fff5ee',\n siFna: 'a0522d',\n silver: 'c0c0c0',\n skyXe: '87ceeb',\n UXe: '6a5acd',\n UWay: '708090',\n UgYy: '708090',\n snow: 'fffafa',\n sprRggYF: 'ff7f',\n stAlXe: '4682b4',\n tan: 'd2b48c',\n teO: '8080',\n tEstN: 'd8bfd8',\n tomato: 'ff6347',\n Qe: '40e0d0',\n viTet: 'ee82ee',\n JHt: 'f5deb3',\n wEte: 'ffffff',\n wEtesmoke: 'f5f5f5',\n Lw: 'ffff00',\n LwgYF: '9acd32'\n};\nfunction unpack() {\n const unpacked = {};\n const keys = Object.keys(names$1);\n const tkeys = Object.keys(map);\n let i, j, k, ok, nk;\n for (i = 0; i < keys.length; i++) {\n ok = nk = keys[i];\n for (j = 0; j < tkeys.length; j++) {\n k = tkeys[j];\n nk = nk.replace(k, map[k]);\n }\n k = parseInt(names$1[ok], 16);\n unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n }\n return unpacked;\n}\n\nlet names;\nfunction nameParse(str) {\n if (!names) {\n names = unpack();\n names.transparent = [0, 0, 0, 0];\n }\n const a = names[str.toLowerCase()];\n return a && {\n r: a[0],\n g: a[1],\n b: a[2],\n a: a.length === 4 ? a[3] : 255\n };\n}\n\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n const m = RGB_RE.exec(str);\n let a = 255;\n let r, g, b;\n if (!m) {\n return;\n }\n if (m[7] !== r) {\n const v = +m[7];\n a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n }\n r = +m[1];\n g = +m[3];\n b = +m[5];\n r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n return {\n r: r,\n g: g,\n b: b,\n a: a\n };\n}\nfunction rgbString(v) {\n return v && (\n v.a < 255\n ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n : `rgb(${v.r}, ${v.g}, ${v.b})`\n );\n}\n\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n const r = from(b2n(rgb1.r));\n const g = from(b2n(rgb1.g));\n const b = from(b2n(rgb1.b));\n return {\n r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n a: rgb1.a + t * (rgb2.a - rgb1.a)\n };\n}\n\nfunction modHSL(v, i, ratio) {\n if (v) {\n let tmp = rgb2hsl(v);\n tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n tmp = hsl2rgb(tmp);\n v.r = tmp[0];\n v.g = tmp[1];\n v.b = tmp[2];\n }\n}\nfunction clone(v, proto) {\n return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n var v = {r: 0, g: 0, b: 0, a: 255};\n if (Array.isArray(input)) {\n if (input.length >= 3) {\n v = {r: input[0], g: input[1], b: input[2], a: 255};\n if (input.length > 3) {\n v.a = n2b(input[3]);\n }\n }\n } else {\n v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n v.a = n2b(v.a);\n }\n return v;\n}\nfunction functionParse(str) {\n if (str.charAt(0) === 'r') {\n return rgbParse(str);\n }\n return hueParse(str);\n}\nclass Color {\n constructor(input) {\n if (input instanceof Color) {\n return input;\n }\n const type = typeof input;\n let v;\n if (type === 'object') {\n v = fromObject(input);\n } else if (type === 'string') {\n v = hexParse(input) || nameParse(input) || functionParse(input);\n }\n this._rgb = v;\n this._valid = !!v;\n }\n get valid() {\n return this._valid;\n }\n get rgb() {\n var v = clone(this._rgb);\n if (v) {\n v.a = b2n(v.a);\n }\n return v;\n }\n set rgb(obj) {\n this._rgb = fromObject(obj);\n }\n rgbString() {\n return this._valid ? rgbString(this._rgb) : undefined;\n }\n hexString() {\n return this._valid ? hexString(this._rgb) : undefined;\n }\n hslString() {\n return this._valid ? hslString(this._rgb) : undefined;\n }\n mix(color, weight) {\n if (color) {\n const c1 = this.rgb;\n const c2 = color.rgb;\n let w2;\n const p = weight === w2 ? 0.5 : weight;\n const w = 2 * p - 1;\n const a = c1.a - c2.a;\n const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n w2 = 1 - w1;\n c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n c1.a = p * c1.a + (1 - p) * c2.a;\n this.rgb = c1;\n }\n return this;\n }\n interpolate(color, t) {\n if (color) {\n this._rgb = interpolate(this._rgb, color._rgb, t);\n }\n return this;\n }\n clone() {\n return new Color(this.rgb);\n }\n alpha(a) {\n this._rgb.a = n2b(a);\n return this;\n }\n clearer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 - ratio;\n return this;\n }\n greyscale() {\n const rgb = this._rgb;\n const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n rgb.r = rgb.g = rgb.b = val;\n return this;\n }\n opaquer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 + ratio;\n return this;\n }\n negate() {\n const v = this._rgb;\n v.r = 255 - v.r;\n v.g = 255 - v.g;\n v.b = 255 - v.b;\n return this;\n }\n lighten(ratio) {\n modHSL(this._rgb, 2, ratio);\n return this;\n }\n darken(ratio) {\n modHSL(this._rgb, 2, -ratio);\n return this;\n }\n saturate(ratio) {\n modHSL(this._rgb, 1, ratio);\n return this;\n }\n desaturate(ratio) {\n modHSL(this._rgb, 1, -ratio);\n return this;\n }\n rotate(deg) {\n rotate(this._rgb, deg);\n return this;\n }\n}\n\nfunction index_esm(input) {\n return new Color(input);\n}\n\nexport { Color, b2n, b2p, index_esm as default, hexParse, hexString, hsl2rgb, hslString, hsv2rgb, hueParse, hwb2rgb, lim, n2b, n2p, nameParse, p2b, rgb2hsl, rgbParse, rgbString, rotate, round };\n","/*!\n * Chart.js v4.4.8\n * https://www.chartjs.org\n * (c) 2025 Chart.js Contributors\n * Released under the MIT License\n */\nimport { Color } from '@kurkle/color';\n\n/**\n * @namespace Chart.helpers\n */ /**\n * An empty function that can be used, for example, for optional callback.\n */ function noop() {\n/* noop */ }\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */ const uid = (()=>{\n let id = 0;\n return ()=>id++;\n})();\n/**\n * Returns true if `value` is neither null nor undefined, else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */ function isNullOrUndef(value) {\n return value === null || value === undefined;\n}\n/**\n * Returns true if `value` is an array (including typed arrays), else returns false.\n * @param value - The value to test.\n * @function\n */ function isArray(value) {\n if (Array.isArray && Array.isArray(value)) {\n return true;\n }\n const type = Object.prototype.toString.call(value);\n if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n return true;\n }\n return false;\n}\n/**\n * Returns true if `value` is an object (excluding null), else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */ function isObject(value) {\n return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value - The value to test.\n */ function isNumberFinite(value) {\n return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n}\n/**\n * Returns `value` if finite, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is not finite.\n */ function finiteOrDefault(value, defaultValue) {\n return isNumberFinite(value) ? value : defaultValue;\n}\n/**\n * Returns `value` if defined, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is undefined.\n */ function valueOrDefault(value, defaultValue) {\n return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 : +value / dimension;\nconst toDimension = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 * dimension : +value;\n/**\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n * @param fn - The function to call.\n * @param args - The arguments with which `fn` should be called.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n */ function callback(fn, args, thisArg) {\n if (fn && typeof fn.call === 'function') {\n return fn.apply(thisArg, args);\n }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n let i, len, keys;\n if (isArray(loopable)) {\n len = loopable.length;\n if (reverse) {\n for(i = len - 1; i >= 0; i--){\n fn.call(thisArg, loopable[i], i);\n }\n } else {\n for(i = 0; i < len; i++){\n fn.call(thisArg, loopable[i], i);\n }\n }\n } else if (isObject(loopable)) {\n keys = Object.keys(loopable);\n len = keys.length;\n for(i = 0; i < len; i++){\n fn.call(thisArg, loopable[keys[i]], keys[i]);\n }\n }\n}\n/**\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n * @param a0 - The array to compare\n * @param a1 - The array to compare\n * @private\n */ function _elementsEqual(a0, a1) {\n let i, ilen, v0, v1;\n if (!a0 || !a1 || a0.length !== a1.length) {\n return false;\n }\n for(i = 0, ilen = a0.length; i < ilen; ++i){\n v0 = a0[i];\n v1 = a1[i];\n if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n return false;\n }\n }\n return true;\n}\n/**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */ function clone(source) {\n if (isArray(source)) {\n return source.map(clone);\n }\n if (isObject(source)) {\n const target = Object.create(null);\n const keys = Object.keys(source);\n const klen = keys.length;\n let k = 0;\n for(; k < klen; ++k){\n target[keys[k]] = clone(source[keys[k]]);\n }\n return target;\n }\n return source;\n}\nfunction isValidKey(key) {\n return [\n '__proto__',\n 'prototype',\n 'constructor'\n ].indexOf(key) === -1;\n}\n/**\n * The default merger when Chart.helpers.merge is called without merger option.\n * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n * @private\n */ function _merger(key, target, source, options) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n merge(tval, sval, options);\n } else {\n target[key] = clone(sval);\n }\n}\nfunction merge(target, source, options) {\n const sources = isArray(source) ? source : [\n source\n ];\n const ilen = sources.length;\n if (!isObject(target)) {\n return target;\n }\n options = options || {};\n const merger = options.merger || _merger;\n let current;\n for(let i = 0; i < ilen; ++i){\n current = sources[i];\n if (!isObject(current)) {\n continue;\n }\n const keys = Object.keys(current);\n for(let k = 0, klen = keys.length; k < klen; ++k){\n merger(keys[k], target, current, options);\n }\n }\n return target;\n}\nfunction mergeIf(target, source) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return merge(target, source, {\n merger: _mergerIf\n });\n}\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */ function _mergerIf(key, target, source) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n mergeIf(tval, sval);\n } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n target[key] = clone(sval);\n }\n}\n/**\n * @private\n */ function _deprecated(scope, value, previous, current) {\n if (value !== undefined) {\n console.warn(scope + ': \"' + previous + '\" is deprecated. Please use \"' + current + '\" instead');\n }\n}\n// resolveObjectKey resolver cache\nconst keyResolvers = {\n // Chart.helpers.core resolveObjectKey should resolve empty key to root object\n '': (v)=>v,\n // default resolvers\n x: (o)=>o.x,\n y: (o)=>o.y\n};\n/**\n * @private\n */ function _splitKey(key) {\n const parts = key.split('.');\n const keys = [];\n let tmp = '';\n for (const part of parts){\n tmp += part;\n if (tmp.endsWith('\\\\')) {\n tmp = tmp.slice(0, -1) + '.';\n } else {\n keys.push(tmp);\n tmp = '';\n }\n }\n return keys;\n}\nfunction _getKeyResolver(key) {\n const keys = _splitKey(key);\n return (obj)=>{\n for (const k of keys){\n if (k === '') {\n break;\n }\n obj = obj && obj[k];\n }\n return obj;\n };\n}\nfunction resolveObjectKey(obj, key) {\n const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n return resolver(obj);\n}\n/**\n * @private\n */ function _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = (value)=>typeof value !== 'undefined';\nconst isFunction = (value)=>typeof value === 'function';\n// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\nconst setsEqual = (a, b)=>{\n if (a.size !== b.size) {\n return false;\n }\n for (const item of a){\n if (!b.has(item)) {\n return false;\n }\n }\n return true;\n};\n/**\n * @param e - The event\n * @private\n */ function _isClickEvent(e) {\n return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n\n/**\n * @alias Chart.helpers.math\n * @namespace\n */ const PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction almostEquals(x, y, epsilon) {\n return Math.abs(x - y) < epsilon;\n}\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */ function niceNum(range) {\n const roundedRange = Math.round(range);\n range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n const niceRange = Math.pow(10, Math.floor(log10(range)));\n const fraction = range / niceRange;\n const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n return niceFraction * niceRange;\n}\n/**\n * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */ function _factorize(value) {\n const result = [];\n const sqrt = Math.sqrt(value);\n let i;\n for(i = 1; i < sqrt; i++){\n if (value % i === 0) {\n result.push(i);\n result.push(value / i);\n }\n }\n if (sqrt === (sqrt | 0)) {\n result.push(sqrt);\n }\n result.sort((a, b)=>a - b).pop();\n return result;\n}\n/**\n * Verifies that attempting to coerce n to string or number won't throw a TypeError.\n */ function isNonPrimitive(n) {\n return typeof n === 'symbol' || typeof n === 'object' && n !== null && !(Symbol.toPrimitive in n || 'toString' in n || 'valueOf' in n);\n}\nfunction isNumber(n) {\n return !isNonPrimitive(n) && !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostWhole(x, epsilon) {\n const rounded = Math.round(x);\n return rounded - epsilon <= x && rounded + epsilon >= x;\n}\n/**\n * @private\n */ function _setMinAndMaxByKey(array, target, property) {\n let i, ilen, value;\n for(i = 0, ilen = array.length; i < ilen; i++){\n value = array[i][property];\n if (!isNaN(value)) {\n target.min = Math.min(target.min, value);\n target.max = Math.max(target.max, value);\n }\n }\n}\nfunction toRadians(degrees) {\n return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n return radians * (180 / PI);\n}\n/**\n * Returns the number of decimal places\n * i.e. the number of digits after the decimal point, of the value of this Number.\n * @param x - A number.\n * @returns The number of decimal places.\n * @private\n */ function _decimalPlaces(x) {\n if (!isNumberFinite(x)) {\n return;\n }\n let e = 1;\n let p = 0;\n while(Math.round(x * e) / e !== x){\n e *= 10;\n p++;\n }\n return p;\n}\n// Gets the angle from vertical upright to the point about a centre.\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n const distanceFromXCenter = anglePoint.x - centrePoint.x;\n const distanceFromYCenter = anglePoint.y - centrePoint.y;\n const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n if (angle < -0.5 * PI) {\n angle += TAU; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n }\n return {\n angle,\n distance: radialDistanceFromCenter\n };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */ function _angleDiff(a, b) {\n return (a - b + PITAU) % TAU - PI;\n}\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */ function _normalizeAngle(a) {\n return (a % TAU + TAU) % TAU;\n}\n/**\n * @private\n */ function _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n const a = _normalizeAngle(angle);\n const s = _normalizeAngle(start);\n const e = _normalizeAngle(end);\n const angleToStart = _normalizeAngle(s - a);\n const angleToEnd = _normalizeAngle(e - a);\n const startToAngle = _normalizeAngle(a - s);\n const endToAngle = _normalizeAngle(a - e);\n return a === s || a === e || sameAngleIsFullCircle && s === e || angleToStart > angleToEnd && startToAngle < endToAngle;\n}\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */ function _limitValue(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\n/**\n * @param {number} value\n * @private\n */ function _int16Range(value) {\n return _limitValue(value, -32768, 32767);\n}\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */ function _isBetween(value, start, end, epsilon = 1e-6) {\n return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n\nfunction _lookup(table, value, cmp) {\n cmp = cmp || ((index)=>table[index] < value);\n let hi = table.length - 1;\n let lo = 0;\n let mid;\n while(hi - lo > 1){\n mid = lo + hi >> 1;\n if (cmp(mid)) {\n lo = mid;\n } else {\n hi = mid;\n }\n }\n return {\n lo,\n hi\n };\n}\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @param last - lookup last index\n * @private\n */ const _lookupByKey = (table, key, value, last)=>_lookup(table, value, last ? (index)=>{\n const ti = table[index][key];\n return ti < value || ti === value && table[index + 1][key] === value;\n } : (index)=>table[index][key] < value);\n/**\n * Reverse binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @private\n */ const _rlookupByKey = (table, key, value)=>_lookup(table, value, (index)=>table[index][key] >= value);\n/**\n * Return subset of `values` between `min` and `max` inclusive.\n * Values are assumed to be in sorted order.\n * @param values - sorted array of values\n * @param min - min value\n * @param max - max value\n */ function _filterBetween(values, min, max) {\n let start = 0;\n let end = values.length;\n while(start < end && values[start] < min){\n start++;\n }\n while(end > start && values[end - 1] > max){\n end--;\n }\n return start > 0 || end < values.length ? values.slice(start, end) : values;\n}\nconst arrayEvents = [\n 'push',\n 'pop',\n 'shift',\n 'splice',\n 'unshift'\n];\nfunction listenArrayEvents(array, listener) {\n if (array._chartjs) {\n array._chartjs.listeners.push(listener);\n return;\n }\n Object.defineProperty(array, '_chartjs', {\n configurable: true,\n enumerable: false,\n value: {\n listeners: [\n listener\n ]\n }\n });\n arrayEvents.forEach((key)=>{\n const method = '_onData' + _capitalize(key);\n const base = array[key];\n Object.defineProperty(array, key, {\n configurable: true,\n enumerable: false,\n value (...args) {\n const res = base.apply(this, args);\n array._chartjs.listeners.forEach((object)=>{\n if (typeof object[method] === 'function') {\n object[method](...args);\n }\n });\n return res;\n }\n });\n });\n}\nfunction unlistenArrayEvents(array, listener) {\n const stub = array._chartjs;\n if (!stub) {\n return;\n }\n const listeners = stub.listeners;\n const index = listeners.indexOf(listener);\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n if (listeners.length > 0) {\n return;\n }\n arrayEvents.forEach((key)=>{\n delete array[key];\n });\n delete array._chartjs;\n}\n/**\n * @param items\n */ function _arrayUnique(items) {\n const set = new Set(items);\n if (set.size === items.length) {\n return items;\n }\n return Array.from(set);\n}\n\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n/**\n* Request animation polyfill\n*/ const requestAnimFrame = function() {\n if (typeof window === 'undefined') {\n return function(callback) {\n return callback();\n };\n }\n return window.requestAnimationFrame;\n}();\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */ function throttled(fn, thisArg) {\n let argsToUse = [];\n let ticking = false;\n return function(...args) {\n // Save the args for use later\n argsToUse = args;\n if (!ticking) {\n ticking = true;\n requestAnimFrame.call(window, ()=>{\n ticking = false;\n fn.apply(thisArg, argsToUse);\n });\n }\n };\n}\n/**\n * Debounces calling `fn` for `delay` ms\n */ function debounce(fn, delay) {\n let timeout;\n return function(...args) {\n if (delay) {\n clearTimeout(timeout);\n timeout = setTimeout(fn, delay, args);\n } else {\n fn.apply(this, args);\n }\n return delay;\n };\n}\n/**\n * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */ const _toLeftRightCenter = (align)=>align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n/**\n * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`\n * @private\n */ const _alignStartEnd = (align, start, end)=>align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n/**\n * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`\n * @private\n */ const _textX = (align, left, right, rtl)=>{\n const check = rtl ? 'left' : 'right';\n return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n/**\n * Return start and count of visible points.\n * @private\n */ function _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n const pointCount = points.length;\n let start = 0;\n let count = pointCount;\n if (meta._sorted) {\n const { iScale , vScale , _parsed } = meta;\n const spanGaps = meta.dataset ? meta.dataset.options ? meta.dataset.options.spanGaps : null : null;\n const axis = iScale.axis;\n const { min , max , minDefined , maxDefined } = iScale.getUserBounds();\n if (minDefined) {\n start = Math.min(// @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, axis, min).lo, // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo);\n if (spanGaps) {\n const distanceToDefinedLo = _parsed.slice(0, start + 1).reverse().findIndex((point)=>!isNullOrUndef(point[vScale.axis]));\n start -= Math.max(0, distanceToDefinedLo);\n }\n start = _limitValue(start, 0, pointCount - 1);\n }\n if (maxDefined) {\n let end = Math.max(// @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, iScale.axis, max, true).hi + 1, // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1);\n if (spanGaps) {\n const distanceToDefinedHi = _parsed.slice(end - 1).findIndex((point)=>!isNullOrUndef(point[vScale.axis]));\n end += Math.max(0, distanceToDefinedHi);\n }\n count = _limitValue(end, start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n }\n return {\n start,\n count\n };\n}\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */ function _scaleRangesChanged(meta) {\n const { xScale , yScale , _scaleRanges } = meta;\n const newRanges = {\n xmin: xScale.min,\n xmax: xScale.max,\n ymin: yScale.min,\n ymax: yScale.max\n };\n if (!_scaleRanges) {\n meta._scaleRanges = newRanges;\n return true;\n }\n const changed = _scaleRanges.xmin !== xScale.min || _scaleRanges.xmax !== xScale.max || _scaleRanges.ymin !== yScale.min || _scaleRanges.ymax !== yScale.max;\n Object.assign(_scaleRanges, newRanges);\n return changed;\n}\n\nconst atEdge = (t)=>t === 0 || t === 1;\nconst elasticIn = (t, s, p)=>-(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p)=>Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easing.effects\n * @see http://www.robertpenner.com/easing/\n */ const effects = {\n linear: (t)=>t,\n easeInQuad: (t)=>t * t,\n easeOutQuad: (t)=>-t * (t - 2),\n easeInOutQuad: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t : -0.5 * (--t * (t - 2) - 1),\n easeInCubic: (t)=>t * t * t,\n easeOutCubic: (t)=>(t -= 1) * t * t + 1,\n easeInOutCubic: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t : 0.5 * ((t -= 2) * t * t + 2),\n easeInQuart: (t)=>t * t * t * t,\n easeOutQuart: (t)=>-((t -= 1) * t * t * t - 1),\n easeInOutQuart: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2),\n easeInQuint: (t)=>t * t * t * t * t,\n easeOutQuint: (t)=>(t -= 1) * t * t * t * t + 1,\n easeInOutQuint: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t * t : 0.5 * ((t -= 2) * t * t * t * t + 2),\n easeInSine: (t)=>-Math.cos(t * HALF_PI) + 1,\n easeOutSine: (t)=>Math.sin(t * HALF_PI),\n easeInOutSine: (t)=>-0.5 * (Math.cos(PI * t) - 1),\n easeInExpo: (t)=>t === 0 ? 0 : Math.pow(2, 10 * (t - 1)),\n easeOutExpo: (t)=>t === 1 ? 1 : -Math.pow(2, -10 * t) + 1,\n easeInOutExpo: (t)=>atEdge(t) ? t : t < 0.5 ? 0.5 * Math.pow(2, 10 * (t * 2 - 1)) : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n easeInCirc: (t)=>t >= 1 ? t : -(Math.sqrt(1 - t * t) - 1),\n easeOutCirc: (t)=>Math.sqrt(1 - (t -= 1) * t),\n easeInOutCirc: (t)=>(t /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n easeInElastic: (t)=>atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n easeOutElastic: (t)=>atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n easeInOutElastic (t) {\n const s = 0.1125;\n const p = 0.45;\n return atEdge(t) ? t : t < 0.5 ? 0.5 * elasticIn(t * 2, s, p) : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n },\n easeInBack (t) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n },\n easeOutBack (t) {\n const s = 1.70158;\n return (t -= 1) * t * ((s + 1) * t + s) + 1;\n },\n easeInOutBack (t) {\n let s = 1.70158;\n if ((t /= 0.5) < 1) {\n return 0.5 * (t * t * (((s *= 1.525) + 1) * t - s));\n }\n return 0.5 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2);\n },\n easeInBounce: (t)=>1 - effects.easeOutBounce(1 - t),\n easeOutBounce (t) {\n const m = 7.5625;\n const d = 2.75;\n if (t < 1 / d) {\n return m * t * t;\n }\n if (t < 2 / d) {\n return m * (t -= 1.5 / d) * t + 0.75;\n }\n if (t < 2.5 / d) {\n return m * (t -= 2.25 / d) * t + 0.9375;\n }\n return m * (t -= 2.625 / d) * t + 0.984375;\n },\n easeInOutBounce: (t)=>t < 0.5 ? effects.easeInBounce(t * 2) * 0.5 : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5\n};\n\nfunction isPatternOrGradient(value) {\n if (value && typeof value === 'object') {\n const type = value.toString();\n return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n }\n return false;\n}\nfunction color(value) {\n return isPatternOrGradient(value) ? value : new Color(value);\n}\nfunction getHoverColor(value) {\n return isPatternOrGradient(value) ? value : new Color(value).saturate(0.5).darken(0.1).hexString();\n}\n\nconst numbers = [\n 'x',\n 'y',\n 'borderWidth',\n 'radius',\n 'tension'\n];\nconst colors = [\n 'color',\n 'borderColor',\n 'backgroundColor'\n];\nfunction applyAnimationsDefaults(defaults) {\n defaults.set('animation', {\n delay: undefined,\n duration: 1000,\n easing: 'easeOutQuart',\n fn: undefined,\n from: undefined,\n loop: undefined,\n to: undefined,\n type: undefined\n });\n defaults.describe('animation', {\n _fallback: false,\n _indexable: false,\n _scriptable: (name)=>name !== 'onProgress' && name !== 'onComplete' && name !== 'fn'\n });\n defaults.set('animations', {\n colors: {\n type: 'color',\n properties: colors\n },\n numbers: {\n type: 'number',\n properties: numbers\n }\n });\n defaults.describe('animations', {\n _fallback: 'animation'\n });\n defaults.set('transitions', {\n active: {\n animation: {\n duration: 400\n }\n },\n resize: {\n animation: {\n duration: 0\n }\n },\n show: {\n animations: {\n colors: {\n from: 'transparent'\n },\n visible: {\n type: 'boolean',\n duration: 0\n }\n }\n },\n hide: {\n animations: {\n colors: {\n to: 'transparent'\n },\n visible: {\n type: 'boolean',\n easing: 'linear',\n fn: (v)=>v | 0\n }\n }\n }\n });\n}\n\nfunction applyLayoutsDefaults(defaults) {\n defaults.set('layout', {\n autoPadding: true,\n padding: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n }\n });\n}\n\nconst intlCache = new Map();\nfunction getNumberFormat(locale, options) {\n options = options || {};\n const cacheKey = locale + JSON.stringify(options);\n let formatter = intlCache.get(cacheKey);\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, options);\n intlCache.set(cacheKey, formatter);\n }\n return formatter;\n}\nfunction formatNumber(num, locale, options) {\n return getNumberFormat(locale, options).format(num);\n}\n\nconst formatters = {\n values (value) {\n return isArray(value) ? value : '' + value;\n },\n numeric (tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const locale = this.chart.options.locale;\n let notation;\n let delta = tickValue;\n if (ticks.length > 1) {\n const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n if (maxTick < 1e-4 || maxTick > 1e+15) {\n notation = 'scientific';\n }\n delta = calculateDelta(tickValue, ticks);\n }\n const logDelta = log10(Math.abs(delta));\n const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n const options = {\n notation,\n minimumFractionDigits: numDecimal,\n maximumFractionDigits: numDecimal\n };\n Object.assign(options, this.options.ticks.format);\n return formatNumber(tickValue, locale, options);\n },\n logarithmic (tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const remain = ticks[index].significand || tickValue / Math.pow(10, Math.floor(log10(tickValue)));\n if ([\n 1,\n 2,\n 3,\n 5,\n 10,\n 15\n ].includes(remain) || index > 0.8 * ticks.length) {\n return formatters.numeric.call(this, tickValue, index, ticks);\n }\n return '';\n }\n};\nfunction calculateDelta(tickValue, ticks) {\n let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n delta = tickValue - Math.floor(tickValue);\n }\n return delta;\n}\n var Ticks = {\n formatters\n};\n\nfunction applyScaleDefaults(defaults) {\n defaults.set('scale', {\n display: true,\n offset: false,\n reverse: false,\n beginAtZero: false,\n bounds: 'ticks',\n clip: true,\n grace: 0,\n grid: {\n display: true,\n lineWidth: 1,\n drawOnChartArea: true,\n drawTicks: true,\n tickLength: 8,\n tickWidth: (_ctx, options)=>options.lineWidth,\n tickColor: (_ctx, options)=>options.color,\n offset: false\n },\n border: {\n display: true,\n dash: [],\n dashOffset: 0.0,\n width: 1\n },\n title: {\n display: false,\n text: '',\n padding: {\n top: 4,\n bottom: 4\n }\n },\n ticks: {\n minRotation: 0,\n maxRotation: 50,\n mirror: false,\n textStrokeWidth: 0,\n textStrokeColor: '',\n padding: 3,\n display: true,\n autoSkip: true,\n autoSkipPadding: 3,\n labelOffset: 0,\n callback: Ticks.formatters.values,\n minor: {},\n major: {},\n align: 'center',\n crossAlign: 'near',\n showLabelBackdrop: false,\n backdropColor: 'rgba(255, 255, 255, 0.75)',\n backdropPadding: 2\n }\n });\n defaults.route('scale.ticks', 'color', '', 'color');\n defaults.route('scale.grid', 'color', '', 'borderColor');\n defaults.route('scale.border', 'color', '', 'borderColor');\n defaults.route('scale.title', 'color', '', 'color');\n defaults.describe('scale', {\n _fallback: false,\n _scriptable: (name)=>!name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n _indexable: (name)=>name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash'\n });\n defaults.describe('scales', {\n _fallback: 'scale'\n });\n defaults.describe('scale.ticks', {\n _scriptable: (name)=>name !== 'backdropPadding' && name !== 'callback',\n _indexable: (name)=>name !== 'backdropPadding'\n });\n}\n\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\n function getScope$1(node, key) {\n if (!key) {\n return node;\n }\n const keys = key.split('.');\n for(let i = 0, n = keys.length; i < n; ++i){\n const k = keys[i];\n node = node[k] || (node[k] = Object.create(null));\n }\n return node;\n}\nfunction set(root, scope, values) {\n if (typeof scope === 'string') {\n return merge(getScope$1(root, scope), values);\n }\n return merge(getScope$1(root, ''), scope);\n}\n class Defaults {\n constructor(_descriptors, _appliers){\n this.animation = undefined;\n this.backgroundColor = 'rgba(0,0,0,0.1)';\n this.borderColor = 'rgba(0,0,0,0.1)';\n this.color = '#666';\n this.datasets = {};\n this.devicePixelRatio = (context)=>context.chart.platform.getDevicePixelRatio();\n this.elements = {};\n this.events = [\n 'mousemove',\n 'mouseout',\n 'click',\n 'touchstart',\n 'touchmove'\n ];\n this.font = {\n family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n size: 12,\n style: 'normal',\n lineHeight: 1.2,\n weight: null\n };\n this.hover = {};\n this.hoverBackgroundColor = (ctx, options)=>getHoverColor(options.backgroundColor);\n this.hoverBorderColor = (ctx, options)=>getHoverColor(options.borderColor);\n this.hoverColor = (ctx, options)=>getHoverColor(options.color);\n this.indexAxis = 'x';\n this.interaction = {\n mode: 'nearest',\n intersect: true,\n includeInvisible: false\n };\n this.maintainAspectRatio = true;\n this.onHover = null;\n this.onClick = null;\n this.parsing = true;\n this.plugins = {};\n this.responsive = true;\n this.scale = undefined;\n this.scales = {};\n this.showLine = true;\n this.drawActiveElementsOnTop = true;\n this.describe(_descriptors);\n this.apply(_appliers);\n }\n set(scope, values) {\n return set(this, scope, values);\n }\n get(scope) {\n return getScope$1(this, scope);\n }\n describe(scope, values) {\n return set(descriptors, scope, values);\n }\n override(scope, values) {\n return set(overrides, scope, values);\n }\n route(scope, name, targetScope, targetName) {\n const scopeObject = getScope$1(this, scope);\n const targetScopeObject = getScope$1(this, targetScope);\n const privateName = '_' + name;\n Object.defineProperties(scopeObject, {\n [privateName]: {\n value: scopeObject[name],\n writable: true\n },\n [name]: {\n enumerable: true,\n get () {\n const local = this[privateName];\n const target = targetScopeObject[targetName];\n if (isObject(local)) {\n return Object.assign({}, target, local);\n }\n return valueOrDefault(local, target);\n },\n set (value) {\n this[privateName] = value;\n }\n }\n });\n }\n apply(appliers) {\n appliers.forEach((apply)=>apply(this));\n }\n}\nvar defaults = /* #__PURE__ */ new Defaults({\n _scriptable: (name)=>!name.startsWith('on'),\n _indexable: (name)=>name !== 'events',\n hover: {\n _fallback: 'interaction'\n },\n interaction: {\n _scriptable: false,\n _indexable: false\n }\n}, [\n applyAnimationsDefaults,\n applyLayoutsDefaults,\n applyScaleDefaults\n]);\n\n/**\n * Converts the given font object into a CSS font string.\n * @param font - A font object.\n * @return The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\n * @private\n */ function toFontString(font) {\n if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n return null;\n }\n return (font.style ? font.style + ' ' : '') + (font.weight ? font.weight + ' ' : '') + font.size + 'px ' + font.family;\n}\n/**\n * @private\n */ function _measureText(ctx, data, gc, longest, string) {\n let textWidth = data[string];\n if (!textWidth) {\n textWidth = data[string] = ctx.measureText(string).width;\n gc.push(string);\n }\n if (textWidth > longest) {\n longest = textWidth;\n }\n return longest;\n}\n/**\n * @private\n */ // eslint-disable-next-line complexity\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n cache = cache || {};\n let data = cache.data = cache.data || {};\n let gc = cache.garbageCollect = cache.garbageCollect || [];\n if (cache.font !== font) {\n data = cache.data = {};\n gc = cache.garbageCollect = [];\n cache.font = font;\n }\n ctx.save();\n ctx.font = font;\n let longest = 0;\n const ilen = arrayOfThings.length;\n let i, j, jlen, thing, nestedThing;\n for(i = 0; i < ilen; i++){\n thing = arrayOfThings[i];\n // Undefined strings and arrays should not be measured\n if (thing !== undefined && thing !== null && !isArray(thing)) {\n longest = _measureText(ctx, data, gc, longest, thing);\n } else if (isArray(thing)) {\n // if it is an array lets measure each element\n // to do maybe simplify this function a bit so we can do this more recursively?\n for(j = 0, jlen = thing.length; j < jlen; j++){\n nestedThing = thing[j];\n // Undefined strings and arrays should not be measured\n if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n longest = _measureText(ctx, data, gc, longest, nestedThing);\n }\n }\n }\n }\n ctx.restore();\n const gcLen = gc.length / 2;\n if (gcLen > arrayOfThings.length) {\n for(i = 0; i < gcLen; i++){\n delete data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n return longest;\n}\n/**\n * Returns the aligned pixel value to avoid anti-aliasing blur\n * @param chart - The chart instance.\n * @param pixel - A pixel value.\n * @param width - The width of the element.\n * @returns The aligned pixel value.\n * @private\n */ function _alignPixel(chart, pixel, width) {\n const devicePixelRatio = chart.currentDevicePixelRatio;\n const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\n/**\n * Clears the entire canvas.\n */ function clearCanvas(canvas, ctx) {\n if (!ctx && !canvas) {\n return;\n }\n ctx = ctx || canvas.getContext('2d');\n ctx.save();\n // canvas.width and canvas.height do not consider the canvas transform,\n // while clearRect does\n ctx.resetTransform();\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.restore();\n}\nfunction drawPoint(ctx, options, x, y) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n drawPointLegend(ctx, options, x, y, null);\n}\n// eslint-disable-next-line complexity\nfunction drawPointLegend(ctx, options, x, y, w) {\n let type, xOffset, yOffset, size, cornerRadius, width, xOffsetW, yOffsetW;\n const style = options.pointStyle;\n const rotation = options.rotation;\n const radius = options.radius;\n let rad = (rotation || 0) * RAD_PER_DEG;\n if (style && typeof style === 'object') {\n type = style.toString();\n if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(rad);\n ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n ctx.restore();\n return;\n }\n }\n if (isNaN(radius) || radius <= 0) {\n return;\n }\n ctx.beginPath();\n switch(style){\n // Default includes circle\n default:\n if (w) {\n ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n } else {\n ctx.arc(x, y, radius, 0, TAU);\n }\n ctx.closePath();\n break;\n case 'triangle':\n width = w ? w / 2 : radius;\n ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n ctx.closePath();\n break;\n case 'rectRounded':\n // NOTE: the rounded rect implementation changed to use `arc` instead of\n // `quadraticCurveTo` since it generates better results when rect is\n // almost a circle. 0.516 (instead of 0.5) produces results with visually\n // closer proportion to the previous impl and it is inscribed in the\n // circle with `radius`. For more details, see the following PRs:\n // https://github.com/chartjs/Chart.js/issues/5597\n // https://github.com/chartjs/Chart.js/issues/5858\n cornerRadius = radius * 0.516;\n size = radius - cornerRadius;\n xOffset = Math.cos(rad + QUARTER_PI) * size;\n xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n yOffset = Math.sin(rad + QUARTER_PI) * size;\n yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n ctx.closePath();\n break;\n case 'rect':\n if (!rotation) {\n size = Math.SQRT1_2 * radius;\n width = w ? w / 2 : size;\n ctx.rect(x - width, y - size, 2 * width, 2 * size);\n break;\n }\n rad += QUARTER_PI;\n /* falls through */ case 'rectRot':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n ctx.closePath();\n break;\n case 'crossRot':\n rad += QUARTER_PI;\n /* falls through */ case 'cross':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'star':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n rad += QUARTER_PI;\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'line':\n xOffset = w ? w / 2 : Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n break;\n case 'dash':\n ctx.moveTo(x, y);\n ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);\n break;\n case false:\n ctx.closePath();\n break;\n }\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n}\n/**\n * Returns true if the point is inside the rectangle\n * @param point - The point to test\n * @param area - The rectangle\n * @param margin - allowed margin\n * @private\n */ function _isPointInArea(point, area, margin) {\n margin = margin || 0.5; // margin - default is to match rounded decimals\n return !area || point && point.x > area.left - margin && point.x < area.right + margin && point.y > area.top - margin && point.y < area.bottom + margin;\n}\nfunction clipArea(ctx, area) {\n ctx.save();\n ctx.beginPath();\n ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n ctx.clip();\n}\nfunction unclipArea(ctx) {\n ctx.restore();\n}\n/**\n * @private\n */ function _steppedLineTo(ctx, previous, target, flip, mode) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n if (mode === 'middle') {\n const midpoint = (previous.x + target.x) / 2.0;\n ctx.lineTo(midpoint, previous.y);\n ctx.lineTo(midpoint, target.y);\n } else if (mode === 'after' !== !!flip) {\n ctx.lineTo(previous.x, target.y);\n } else {\n ctx.lineTo(target.x, previous.y);\n }\n ctx.lineTo(target.x, target.y);\n}\n/**\n * @private\n */ function _bezierCurveTo(ctx, previous, target, flip) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n ctx.bezierCurveTo(flip ? previous.cp1x : previous.cp2x, flip ? previous.cp1y : previous.cp2y, flip ? target.cp2x : target.cp1x, flip ? target.cp2y : target.cp1y, target.x, target.y);\n}\nfunction setRenderOpts(ctx, opts) {\n if (opts.translation) {\n ctx.translate(opts.translation[0], opts.translation[1]);\n }\n if (!isNullOrUndef(opts.rotation)) {\n ctx.rotate(opts.rotation);\n }\n if (opts.color) {\n ctx.fillStyle = opts.color;\n }\n if (opts.textAlign) {\n ctx.textAlign = opts.textAlign;\n }\n if (opts.textBaseline) {\n ctx.textBaseline = opts.textBaseline;\n }\n}\nfunction decorateText(ctx, x, y, line, opts) {\n if (opts.strikethrough || opts.underline) {\n /**\n * Now that IE11 support has been dropped, we can use more\n * of the TextMetrics object. The actual bounding boxes\n * are unflagged in Chrome, Firefox, Edge, and Safari so they\n * can be safely used.\n * See https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics#Browser_compatibility\n */ const metrics = ctx.measureText(line);\n const left = x - metrics.actualBoundingBoxLeft;\n const right = x + metrics.actualBoundingBoxRight;\n const top = y - metrics.actualBoundingBoxAscent;\n const bottom = y + metrics.actualBoundingBoxDescent;\n const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n ctx.strokeStyle = ctx.fillStyle;\n ctx.beginPath();\n ctx.lineWidth = opts.decorationWidth || 2;\n ctx.moveTo(left, yDecoration);\n ctx.lineTo(right, yDecoration);\n ctx.stroke();\n }\n}\nfunction drawBackdrop(ctx, opts) {\n const oldColor = ctx.fillStyle;\n ctx.fillStyle = opts.color;\n ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n ctx.fillStyle = oldColor;\n}\n/**\n * Render text onto the canvas\n */ function renderText(ctx, text, x, y, font, opts = {}) {\n const lines = isArray(text) ? text : [\n text\n ];\n const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n let i, line;\n ctx.save();\n ctx.font = font.string;\n setRenderOpts(ctx, opts);\n for(i = 0; i < lines.length; ++i){\n line = lines[i];\n if (opts.backdrop) {\n drawBackdrop(ctx, opts.backdrop);\n }\n if (stroke) {\n if (opts.strokeColor) {\n ctx.strokeStyle = opts.strokeColor;\n }\n if (!isNullOrUndef(opts.strokeWidth)) {\n ctx.lineWidth = opts.strokeWidth;\n }\n ctx.strokeText(line, x, y, opts.maxWidth);\n }\n ctx.fillText(line, x, y, opts.maxWidth);\n decorateText(ctx, x, y, line, opts);\n y += Number(font.lineHeight);\n }\n ctx.restore();\n}\n/**\n * Add a path of a rectangle with rounded corners to the current sub-path\n * @param ctx - Context\n * @param rect - Bounding rect\n */ function addRoundedRectPath(ctx, rect) {\n const { x , y , w , h , radius } = rect;\n // top left arc\n ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true);\n // line from top left to bottom left\n ctx.lineTo(x, y + h - radius.bottomLeft);\n // bottom left arc\n ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n // line from bottom left to bottom right\n ctx.lineTo(x + w - radius.bottomRight, y + h);\n // bottom right arc\n ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n // line from bottom right to top right\n ctx.lineTo(x + w, y + radius.topRight);\n // top right arc\n ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n // line from top right to top left\n ctx.lineTo(x + radius.topLeft, y);\n}\n\nconst LINE_HEIGHT = /^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/;\nconst FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;\n/**\n * @alias Chart.helpers.options\n * @namespace\n */ /**\n * Converts the given line height `value` in pixels for a specific font `size`.\n * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n * @param size - The font size (in pixels) used to resolve relative `value`.\n * @returns The effective line height in pixels (size * 1.2 if value is invalid).\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n * @since 2.7.0\n */ function toLineHeight(value, size) {\n const matches = ('' + value).match(LINE_HEIGHT);\n if (!matches || matches[1] === 'normal') {\n return size * 1.2;\n }\n value = +matches[2];\n switch(matches[3]){\n case 'px':\n return value;\n case '%':\n value /= 100;\n break;\n }\n return size * value;\n}\nconst numberOrZero = (v)=>+v || 0;\nfunction _readValueToProps(value, props) {\n const ret = {};\n const objProps = isObject(props);\n const keys = objProps ? Object.keys(props) : props;\n const read = isObject(value) ? objProps ? (prop)=>valueOrDefault(value[prop], value[props[prop]]) : (prop)=>value[prop] : ()=>value;\n for (const prop of keys){\n ret[prop] = numberOrZero(read(prop));\n }\n return ret;\n}\n/**\n * Converts the given value into a TRBL object.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left)\n * @since 3.0.0\n */ function toTRBL(value) {\n return _readValueToProps(value, {\n top: 'y',\n right: 'x',\n bottom: 'y',\n left: 'x'\n });\n}\n/**\n * Converts the given value into a TRBL corners object (similar with css border-radius).\n * @param value - If a number, set the value to all TRBL corner components,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)\n * @since 3.0.0\n */ function toTRBLCorners(value) {\n return _readValueToProps(value, [\n 'topLeft',\n 'topRight',\n 'bottomLeft',\n 'bottomRight'\n ]);\n}\n/**\n * Converts the given value into a padding object with pre-computed width/height.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left, width, height)\n * @since 2.7.0\n */ function toPadding(value) {\n const obj = toTRBL(value);\n obj.width = obj.left + obj.right;\n obj.height = obj.top + obj.bottom;\n return obj;\n}\n/**\n * Parses font options and returns the font object.\n * @param options - A object that contains font options to be parsed.\n * @param fallback - A object that contains fallback font options.\n * @return The font object.\n * @private\n */ function toFont(options, fallback) {\n options = options || {};\n fallback = fallback || defaults.font;\n let size = valueOrDefault(options.size, fallback.size);\n if (typeof size === 'string') {\n size = parseInt(size, 10);\n }\n let style = valueOrDefault(options.style, fallback.style);\n if (style && !('' + style).match(FONT_STYLE)) {\n console.warn('Invalid font style specified: \"' + style + '\"');\n style = undefined;\n }\n const font = {\n family: valueOrDefault(options.family, fallback.family),\n lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n size,\n style,\n weight: valueOrDefault(options.weight, fallback.weight),\n string: ''\n };\n font.string = toFontString(font);\n return font;\n}\n/**\n * Evaluates the given `inputs` sequentially and returns the first defined value.\n * @param inputs - An array of values, falling back to the last value.\n * @param context - If defined and the current value is a function, the value\n * is called with `context` as first argument and the result becomes the new input.\n * @param index - If defined and the current value is an array, the value\n * at `index` become the new input.\n * @param info - object to return information about resolution in\n * @param info.cacheable - Will be set to `false` if option is not cacheable.\n * @since 2.7.0\n */ function resolve(inputs, context, index, info) {\n let cacheable = true;\n let i, ilen, value;\n for(i = 0, ilen = inputs.length; i < ilen; ++i){\n value = inputs[i];\n if (value === undefined) {\n continue;\n }\n if (context !== undefined && typeof value === 'function') {\n value = value(context);\n cacheable = false;\n }\n if (index !== undefined && isArray(value)) {\n value = value[index % value.length];\n cacheable = false;\n }\n if (value !== undefined) {\n if (info && !cacheable) {\n info.cacheable = false;\n }\n return value;\n }\n }\n}\n/**\n * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */ function _addGrace(minmax, grace, beginAtZero) {\n const { min , max } = minmax;\n const change = toDimension(grace, (max - min) / 2);\n const keepZero = (value, add)=>beginAtZero && value === 0 ? 0 : value + add;\n return {\n min: keepZero(min, -Math.abs(change)),\n max: keepZero(max, change)\n };\n}\nfunction createContext(parentContext, context) {\n return Object.assign(Object.create(parentContext), context);\n}\n\n/**\n * Creates a Proxy for resolving raw values for options.\n * @param scopes - The option scopes to look for values, in resolution order\n * @param prefixes - The prefixes for values, in resolution order.\n * @param rootScopes - The root option scopes\n * @param fallback - Parent scopes fallback\n * @param getTarget - callback for getting the target for changed values\n * @returns Proxy\n * @private\n */ function _createResolver(scopes, prefixes = [\n ''\n], rootScopes, fallback, getTarget = ()=>scopes[0]) {\n const finalRootScopes = rootScopes || scopes;\n if (typeof fallback === 'undefined') {\n fallback = _resolve('_fallback', scopes);\n }\n const cache = {\n [Symbol.toStringTag]: 'Object',\n _cacheable: true,\n _scopes: scopes,\n _rootScopes: finalRootScopes,\n _fallback: fallback,\n _getTarget: getTarget,\n override: (scope)=>_createResolver([\n scope,\n ...scopes\n ], prefixes, finalRootScopes, fallback)\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */ deleteProperty (target, prop) {\n delete target[prop]; // remove from cache\n delete target._keys; // remove cached keys\n delete scopes[0][prop]; // remove from top level scope\n return true;\n },\n /**\n * A trap for getting property values.\n */ get (target, prop) {\n return _cached(target, prop, ()=>_resolveWithPrefixes(prop, prefixes, scopes, target));\n },\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */ getOwnPropertyDescriptor (target, prop) {\n return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n },\n /**\n * A trap for Object.getPrototypeOf.\n */ getPrototypeOf () {\n return Reflect.getPrototypeOf(scopes[0]);\n },\n /**\n * A trap for the in operator.\n */ has (target, prop) {\n return getKeysFromAllScopes(target).includes(prop);\n },\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */ ownKeys (target) {\n return getKeysFromAllScopes(target);\n },\n /**\n * A trap for setting property values.\n */ set (target, prop, value) {\n const storage = target._storage || (target._storage = getTarget());\n target[prop] = storage[prop] = value; // set to top level scope + cache\n delete target._keys; // remove cached keys\n return true;\n }\n });\n}\n/**\n * Returns an Proxy for resolving option values with context.\n * @param proxy - The Proxy returned by `_createResolver`\n * @param context - Context object for scriptable/indexable options\n * @param subProxy - The proxy provided for scriptable options\n * @param descriptorDefaults - Defaults for descriptors\n * @private\n */ function _attachContext(proxy, context, subProxy, descriptorDefaults) {\n const cache = {\n _cacheable: false,\n _proxy: proxy,\n _context: context,\n _subProxy: subProxy,\n _stack: new Set(),\n _descriptors: _descriptors(proxy, descriptorDefaults),\n setContext: (ctx)=>_attachContext(proxy, ctx, subProxy, descriptorDefaults),\n override: (scope)=>_attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */ deleteProperty (target, prop) {\n delete target[prop]; // remove from cache\n delete proxy[prop]; // remove from proxy\n return true;\n },\n /**\n * A trap for getting property values.\n */ get (target, prop, receiver) {\n return _cached(target, prop, ()=>_resolveWithContext(target, prop, receiver));\n },\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */ getOwnPropertyDescriptor (target, prop) {\n return target._descriptors.allKeys ? Reflect.has(proxy, prop) ? {\n enumerable: true,\n configurable: true\n } : undefined : Reflect.getOwnPropertyDescriptor(proxy, prop);\n },\n /**\n * A trap for Object.getPrototypeOf.\n */ getPrototypeOf () {\n return Reflect.getPrototypeOf(proxy);\n },\n /**\n * A trap for the in operator.\n */ has (target, prop) {\n return Reflect.has(proxy, prop);\n },\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */ ownKeys () {\n return Reflect.ownKeys(proxy);\n },\n /**\n * A trap for setting property values.\n */ set (target, prop, value) {\n proxy[prop] = value; // set to proxy\n delete target[prop]; // remove from cache\n return true;\n }\n });\n}\n/**\n * @private\n */ function _descriptors(proxy, defaults = {\n scriptable: true,\n indexable: true\n}) {\n const { _scriptable =defaults.scriptable , _indexable =defaults.indexable , _allKeys =defaults.allKeys } = proxy;\n return {\n allKeys: _allKeys,\n scriptable: _scriptable,\n indexable: _indexable,\n isScriptable: isFunction(_scriptable) ? _scriptable : ()=>_scriptable,\n isIndexable: isFunction(_indexable) ? _indexable : ()=>_indexable\n };\n}\nconst readKey = (prefix, name)=>prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value)=>isObject(value) && prop !== 'adapters' && (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve) {\n if (Object.prototype.hasOwnProperty.call(target, prop) || prop === 'constructor') {\n return target[prop];\n }\n const value = resolve();\n // cache the resolved value\n target[prop] = value;\n return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n const { _proxy , _context , _subProxy , _descriptors: descriptors } = target;\n let value = _proxy[prop]; // resolve from proxy\n // resolve with context\n if (isFunction(value) && descriptors.isScriptable(prop)) {\n value = _resolveScriptable(prop, value, target, receiver);\n }\n if (isArray(value) && value.length) {\n value = _resolveArray(prop, value, target, descriptors.isIndexable);\n }\n if (needsSubResolver(prop, value)) {\n // if the resolved value is an object, create a sub resolver for it\n value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n }\n return value;\n}\nfunction _resolveScriptable(prop, getValue, target, receiver) {\n const { _proxy , _context , _subProxy , _stack } = target;\n if (_stack.has(prop)) {\n throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n }\n _stack.add(prop);\n let value = getValue(_context, _subProxy || receiver);\n _stack.delete(prop);\n if (needsSubResolver(prop, value)) {\n // When scriptable option returns an object, create a resolver on that.\n value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n }\n return value;\n}\nfunction _resolveArray(prop, value, target, isIndexable) {\n const { _proxy , _context , _subProxy , _descriptors: descriptors } = target;\n if (typeof _context.index !== 'undefined' && isIndexable(prop)) {\n return value[_context.index % value.length];\n } else if (isObject(value[0])) {\n // Array of objects, return array or resolvers\n const arr = value;\n const scopes = _proxy._scopes.filter((s)=>s !== arr);\n value = [];\n for (const item of arr){\n const resolver = createSubResolver(scopes, _proxy, prop, item);\n value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n }\n }\n return value;\n}\nfunction resolveFallback(fallback, prop, value) {\n return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent)=>key === true ? parent : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\n for (const parent of parentScopes){\n const scope = getScope(key, parent);\n if (scope) {\n set.add(scope);\n const fallback = resolveFallback(scope._fallback, key, value);\n if (typeof fallback !== 'undefined' && fallback !== key && fallback !== parentFallback) {\n // When we reach the descriptor that defines a new _fallback, return that.\n // The fallback will resume to that new scope.\n return fallback;\n }\n } else if (scope === false && typeof parentFallback !== 'undefined' && key !== parentFallback) {\n // Fallback to `false` results to `false`, when falling back to different key.\n // For example `interaction` from `hover` or `plugins.tooltip` and `animation` from `animations`\n return null;\n }\n }\n return false;\n}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n const rootScopes = resolver._rootScopes;\n const fallback = resolveFallback(resolver._fallback, prop, value);\n const allScopes = [\n ...parentScopes,\n ...rootScopes\n ];\n const set = new Set();\n set.add(value);\n let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n if (key === null) {\n return false;\n }\n if (typeof fallback !== 'undefined' && fallback !== prop) {\n key = addScopesFromKey(set, allScopes, fallback, key, value);\n if (key === null) {\n return false;\n }\n }\n return _createResolver(Array.from(set), [\n ''\n ], rootScopes, fallback, ()=>subGetTarget(resolver, prop, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n while(key){\n key = addScopes(set, allScopes, key, fallback, item);\n }\n return key;\n}\nfunction subGetTarget(resolver, prop, value) {\n const parent = resolver._getTarget();\n if (!(prop in parent)) {\n parent[prop] = {};\n }\n const target = parent[prop];\n if (isArray(target) && isObject(value)) {\n // For array of objects, the object is used to store updated values\n return value;\n }\n return target || {};\n}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n let value;\n for (const prefix of prefixes){\n value = _resolve(readKey(prefix, prop), scopes);\n if (typeof value !== 'undefined') {\n return needsSubResolver(prop, value) ? createSubResolver(scopes, proxy, prop, value) : value;\n }\n }\n}\nfunction _resolve(key, scopes) {\n for (const scope of scopes){\n if (!scope) {\n continue;\n }\n const value = scope[key];\n if (typeof value !== 'undefined') {\n return value;\n }\n }\n}\nfunction getKeysFromAllScopes(target) {\n let keys = target._keys;\n if (!keys) {\n keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n }\n return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n const set = new Set();\n for (const scope of scopes){\n for (const key of Object.keys(scope).filter((k)=>!k.startsWith('_'))){\n set.add(key);\n }\n }\n return Array.from(set);\n}\nfunction _parseObjectDataRadialScale(meta, data, start, count) {\n const { iScale } = meta;\n const { key ='r' } = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n item = data[index];\n parsed[i] = {\n r: iScale.parse(resolveObjectKey(item, key), index)\n };\n }\n return parsed;\n}\n\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i)=>i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis)=>indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n // Props to Rob Spencer at scaled innovation for his post on splining between points\n // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n // This function must also respect \"skipped\" points\n const previous = firstPoint.skip ? middlePoint : firstPoint;\n const current = middlePoint;\n const next = afterPoint.skip ? middlePoint : afterPoint;\n const d01 = distanceBetweenPoints(current, previous);\n const d12 = distanceBetweenPoints(next, current);\n let s01 = d01 / (d01 + d12);\n let s12 = d12 / (d01 + d12);\n // If all points are the same, s01 & s02 will be inf\n s01 = isNaN(s01) ? 0 : s01;\n s12 = isNaN(s12) ? 0 : s12;\n const fa = t * s01; // scaling factor for triangle Ta\n const fb = t * s12;\n return {\n previous: {\n x: current.x - fa * (next.x - previous.x),\n y: current.y - fa * (next.y - previous.y)\n },\n next: {\n x: current.x + fb * (next.x - previous.x),\n y: current.y + fb * (next.y - previous.y)\n }\n };\n}\n/**\n * Adjust tangents to ensure monotonic properties\n */ function monotoneAdjust(points, deltaK, mK) {\n const pointsLen = points.length;\n let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for(let i = 0; i < pointsLen - 1; ++i){\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent || !pointAfter) {\n continue;\n }\n if (almostEquals(deltaK[i], 0, EPSILON)) {\n mK[i] = mK[i + 1] = 0;\n continue;\n }\n alphaK = mK[i] / deltaK[i];\n betaK = mK[i + 1] / deltaK[i];\n squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n if (squaredMagnitude <= 9) {\n continue;\n }\n tauK = 3 / Math.sqrt(squaredMagnitude);\n mK[i] = alphaK * tauK * deltaK[i];\n mK[i + 1] = betaK * tauK * deltaK[i];\n }\n}\nfunction monotoneCompute(points, mK, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n let delta, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for(let i = 0; i < pointsLen; ++i){\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n const iPixel = pointCurrent[indexAxis];\n const vPixel = pointCurrent[valueAxis];\n if (pointBefore) {\n delta = (iPixel - pointBefore[indexAxis]) / 3;\n pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n }\n if (pointAfter) {\n delta = (pointAfter[indexAxis] - iPixel) / 3;\n pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n }\n }\n}\n/**\n * This function calculates Bézier control points in a similar way than |splineCurve|,\n * but preserves monotonicity of the provided data and ensures no local extremums are added\n * between the dataset discrete points due to the interpolation.\n * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n */ function splineCurveMonotone(points, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n const deltaK = Array(pointsLen).fill(0);\n const mK = Array(pointsLen);\n // Calculate slopes (deltaK) and initialize tangents (mK)\n let i, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for(i = 0; i < pointsLen; ++i){\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n if (pointAfter) {\n const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n }\n mK[i] = !pointBefore ? deltaK[i] : !pointAfter ? deltaK[i - 1] : sign(deltaK[i - 1]) !== sign(deltaK[i]) ? 0 : (deltaK[i - 1] + deltaK[i]) / 2;\n }\n monotoneAdjust(points, deltaK, mK);\n monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\n let i, ilen, point, inArea, inAreaPrev;\n let inAreaNext = _isPointInArea(points[0], area);\n for(i = 0, ilen = points.length; i < ilen; ++i){\n inAreaPrev = inArea;\n inArea = inAreaNext;\n inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n if (!inArea) {\n continue;\n }\n point = points[i];\n if (inAreaPrev) {\n point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n }\n if (inAreaNext) {\n point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n }\n }\n}\n/**\n * @private\n */ function _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n let i, ilen, point, controlPoints;\n // Only consider points that are drawn in case the spanGaps option is used\n if (options.spanGaps) {\n points = points.filter((pt)=>!pt.skip);\n }\n if (options.cubicInterpolationMode === 'monotone') {\n splineCurveMonotone(points, indexAxis);\n } else {\n let prev = loop ? points[points.length - 1] : points[0];\n for(i = 0, ilen = points.length; i < ilen; ++i){\n point = points[i];\n controlPoints = splineCurve(prev, point, points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen], options.tension);\n point.cp1x = controlPoints.previous.x;\n point.cp1y = controlPoints.previous.y;\n point.cp2x = controlPoints.next.x;\n point.cp2y = controlPoints.next.y;\n prev = point;\n }\n }\n if (options.capBezierPoints) {\n capBezierPoints(points, area);\n }\n}\n\n/**\n * @private\n */ function _isDomSupported() {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n/**\n * @private\n */ function _getParentNode(domNode) {\n let parent = domNode.parentNode;\n if (parent && parent.toString() === '[object ShadowRoot]') {\n parent = parent.host;\n }\n return parent;\n}\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */ function parseMaxStyle(styleValue, node, parentProperty) {\n let valueInPixels;\n if (typeof styleValue === 'string') {\n valueInPixels = parseInt(styleValue, 10);\n if (styleValue.indexOf('%') !== -1) {\n // percentage * size in dimension\n valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n }\n } else {\n valueInPixels = styleValue;\n }\n return valueInPixels;\n}\nconst getComputedStyle = (element)=>element.ownerDocument.defaultView.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = [\n 'top',\n 'right',\n 'bottom',\n 'left'\n];\nfunction getPositionedStyle(styles, style, suffix) {\n const result = {};\n suffix = suffix ? '-' + suffix : '';\n for(let i = 0; i < 4; i++){\n const pos = positions[i];\n result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n }\n result.width = result.left + result.right;\n result.height = result.top + result.bottom;\n return result;\n}\nconst useOffsetPos = (x, y, target)=>(x > 0 || y > 0) && (!target || !target.shadowRoot);\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */ function getCanvasPosition(e, canvas) {\n const touches = e.touches;\n const source = touches && touches.length ? touches[0] : e;\n const { offsetX , offsetY } = source;\n let box = false;\n let x, y;\n if (useOffsetPos(offsetX, offsetY, e.target)) {\n x = offsetX;\n y = offsetY;\n } else {\n const rect = canvas.getBoundingClientRect();\n x = source.clientX - rect.left;\n y = source.clientY - rect.top;\n box = true;\n }\n return {\n x,\n y,\n box\n };\n}\n/**\n * Gets an event's x, y coordinates, relative to the chart area\n * @param event\n * @param chart\n * @returns x and y coordinates of the event\n */ function getRelativePosition(event, chart) {\n if ('native' in event) {\n return event;\n }\n const { canvas , currentDevicePixelRatio } = chart;\n const style = getComputedStyle(canvas);\n const borderBox = style.boxSizing === 'border-box';\n const paddings = getPositionedStyle(style, 'padding');\n const borders = getPositionedStyle(style, 'border', 'width');\n const { x , y , box } = getCanvasPosition(event, canvas);\n const xOffset = paddings.left + (box && borders.left);\n const yOffset = paddings.top + (box && borders.top);\n let { width , height } = chart;\n if (borderBox) {\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n return {\n x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n };\n}\nfunction getContainerSize(canvas, width, height) {\n let maxWidth, maxHeight;\n if (width === undefined || height === undefined) {\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n width = canvas.clientWidth;\n height = canvas.clientHeight;\n } else {\n const rect = container.getBoundingClientRect(); // this is the border box of the container\n const containerStyle = getComputedStyle(container);\n const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n const containerPadding = getPositionedStyle(containerStyle, 'padding');\n width = rect.width - containerPadding.width - containerBorder.width;\n height = rect.height - containerPadding.height - containerBorder.height;\n maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n }\n }\n return {\n width,\n height,\n maxWidth: maxWidth || INFINITY,\n maxHeight: maxHeight || INFINITY\n };\n}\nconst round1 = (v)=>Math.round(v * 10) / 10;\n// eslint-disable-next-line complexity\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n const style = getComputedStyle(canvas);\n const margins = getPositionedStyle(style, 'margin');\n const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n let { width , height } = containerSize;\n if (style.boxSizing === 'content-box') {\n const borders = getPositionedStyle(style, 'border', 'width');\n const paddings = getPositionedStyle(style, 'padding');\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n width = Math.max(0, width - margins.width);\n height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);\n width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n if (width && !height) {\n // https://github.com/chartjs/Chart.js/issues/4659\n // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)\n height = round1(width / 2);\n }\n const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n height = containerSize.height;\n width = round1(Math.floor(height * aspectRatio));\n }\n return {\n width,\n height\n };\n}\n/**\n * @param chart\n * @param forceRatio\n * @param forceStyle\n * @returns True if the canvas context size or transformation has changed.\n */ function retinaScale(chart, forceRatio, forceStyle) {\n const pixelRatio = forceRatio || 1;\n const deviceHeight = Math.floor(chart.height * pixelRatio);\n const deviceWidth = Math.floor(chart.width * pixelRatio);\n chart.height = Math.floor(chart.height);\n chart.width = Math.floor(chart.width);\n const canvas = chart.canvas;\n // If no style has been set on the canvas, the render size is used as display size,\n // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n // See https://github.com/chartjs/Chart.js/issues/3575\n if (canvas.style && (forceStyle || !canvas.style.height && !canvas.style.width)) {\n canvas.style.height = `${chart.height}px`;\n canvas.style.width = `${chart.width}px`;\n }\n if (chart.currentDevicePixelRatio !== pixelRatio || canvas.height !== deviceHeight || canvas.width !== deviceWidth) {\n chart.currentDevicePixelRatio = pixelRatio;\n canvas.height = deviceHeight;\n canvas.width = deviceWidth;\n chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n return true;\n }\n return false;\n}\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */ const supportsEventListenerOptions = function() {\n let passiveSupported = false;\n try {\n const options = {\n get passive () {\n passiveSupported = true;\n return false;\n }\n };\n if (_isDomSupported()) {\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n }\n } catch (e) {\n // continue regardless of error\n }\n return passiveSupported;\n}();\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns Size in pixels or undefined if unknown.\n */ function readUsedSize(element, property) {\n const value = getStyle(element, property);\n const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n return matches ? +matches[1] : undefined;\n}\n\n/**\n * @private\n */ function _pointInLine(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: p1.y + t * (p2.y - p1.y)\n };\n}\n/**\n * @private\n */ function _steppedInterpolation(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y : mode === 'after' ? t < 1 ? p1.y : p2.y : t > 0 ? p2.y : p1.y\n };\n}\n/**\n * @private\n */ function _bezierInterpolation(p1, p2, t, mode) {\n const cp1 = {\n x: p1.cp2x,\n y: p1.cp2y\n };\n const cp2 = {\n x: p2.cp1x,\n y: p2.cp1y\n };\n const a = _pointInLine(p1, cp1, t);\n const b = _pointInLine(cp1, cp2, t);\n const c = _pointInLine(cp2, p2, t);\n const d = _pointInLine(a, b, t);\n const e = _pointInLine(b, c, t);\n return _pointInLine(d, e, t);\n}\n\nconst getRightToLeftAdapter = function(rectX, width) {\n return {\n x (x) {\n return rectX + rectX + width - x;\n },\n setWidth (w) {\n width = w;\n },\n textAlign (align) {\n if (align === 'center') {\n return align;\n }\n return align === 'right' ? 'left' : 'right';\n },\n xPlus (x, value) {\n return x - value;\n },\n leftForLtr (x, itemWidth) {\n return x - itemWidth;\n }\n };\n};\nconst getLeftToRightAdapter = function() {\n return {\n x (x) {\n return x;\n },\n setWidth (w) {},\n textAlign (align) {\n return align;\n },\n xPlus (x, value) {\n return x + value;\n },\n leftForLtr (x, _itemWidth) {\n return x;\n }\n };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n let style, original;\n if (direction === 'ltr' || direction === 'rtl') {\n style = ctx.canvas.style;\n original = [\n style.getPropertyValue('direction'),\n style.getPropertyPriority('direction')\n ];\n style.setProperty('direction', direction, 'important');\n ctx.prevTextDirection = original;\n }\n}\nfunction restoreTextDirection(ctx, original) {\n if (original !== undefined) {\n delete ctx.prevTextDirection;\n ctx.canvas.style.setProperty('direction', original[0], original[1]);\n }\n}\n\nfunction propertyFn(property) {\n if (property === 'angle') {\n return {\n between: _angleBetween,\n compare: _angleDiff,\n normalize: _normalizeAngle\n };\n }\n return {\n between: _isBetween,\n compare: (a, b)=>a - b,\n normalize: (x)=>x\n };\n}\nfunction normalizeSegment({ start , end , count , loop , style }) {\n return {\n start: start % count,\n end: end % count,\n loop: loop && (end - start + 1) % count === 0,\n style\n };\n}\nfunction getSegment(segment, points, bounds) {\n const { property , start: startBound , end: endBound } = bounds;\n const { between , normalize } = propertyFn(property);\n const count = points.length;\n let { start , end , loop } = segment;\n let i, ilen;\n if (loop) {\n start += count;\n end += count;\n for(i = 0, ilen = count; i < ilen; ++i){\n if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n break;\n }\n start--;\n end--;\n }\n start %= count;\n end %= count;\n }\n if (end < start) {\n end += count;\n }\n return {\n start,\n end,\n loop,\n style: segment.style\n };\n}\n function _boundSegment(segment, points, bounds) {\n if (!bounds) {\n return [\n segment\n ];\n }\n const { property , start: startBound , end: endBound } = bounds;\n const count = points.length;\n const { compare , between , normalize } = propertyFn(property);\n const { start , end , loop , style } = getSegment(segment, points, bounds);\n const result = [];\n let inside = false;\n let subStart = null;\n let value, point, prevValue;\n const startIsBefore = ()=>between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n const endIsBefore = ()=>compare(endBound, value) === 0 || between(endBound, prevValue, value);\n const shouldStart = ()=>inside || startIsBefore();\n const shouldStop = ()=>!inside || endIsBefore();\n for(let i = start, prev = start; i <= end; ++i){\n point = points[i % count];\n if (point.skip) {\n continue;\n }\n value = normalize(point[property]);\n if (value === prevValue) {\n continue;\n }\n inside = between(value, startBound, endBound);\n if (subStart === null && shouldStart()) {\n subStart = compare(value, startBound) === 0 ? i : prev;\n }\n if (subStart !== null && shouldStop()) {\n result.push(normalizeSegment({\n start: subStart,\n end: i,\n loop,\n count,\n style\n }));\n subStart = null;\n }\n prev = i;\n prevValue = value;\n }\n if (subStart !== null) {\n result.push(normalizeSegment({\n start: subStart,\n end,\n loop,\n count,\n style\n }));\n }\n return result;\n}\n function _boundSegments(line, bounds) {\n const result = [];\n const segments = line.segments;\n for(let i = 0; i < segments.length; i++){\n const sub = _boundSegment(segments[i], line.points, bounds);\n if (sub.length) {\n result.push(...sub);\n }\n }\n return result;\n}\n function findStartAndEnd(points, count, loop, spanGaps) {\n let start = 0;\n let end = count - 1;\n if (loop && !spanGaps) {\n while(start < count && !points[start].skip){\n start++;\n }\n }\n while(start < count && points[start].skip){\n start++;\n }\n start %= count;\n if (loop) {\n end += start;\n }\n while(end > start && points[end % count].skip){\n end--;\n }\n end %= count;\n return {\n start,\n end\n };\n}\n function solidSegments(points, start, max, loop) {\n const count = points.length;\n const result = [];\n let last = start;\n let prev = points[start];\n let end;\n for(end = start + 1; end <= max; ++end){\n const cur = points[end % count];\n if (cur.skip || cur.stop) {\n if (!prev.skip) {\n loop = false;\n result.push({\n start: start % count,\n end: (end - 1) % count,\n loop\n });\n start = last = cur.stop ? end : null;\n }\n } else {\n last = end;\n if (prev.skip) {\n start = end;\n }\n }\n prev = cur;\n }\n if (last !== null) {\n result.push({\n start: start % count,\n end: last % count,\n loop\n });\n }\n return result;\n}\n function _computeSegments(line, segmentOptions) {\n const points = line.points;\n const spanGaps = line.options.spanGaps;\n const count = points.length;\n if (!count) {\n return [];\n }\n const loop = !!line._loop;\n const { start , end } = findStartAndEnd(points, count, loop, spanGaps);\n if (spanGaps === true) {\n return splitByStyles(line, [\n {\n start,\n end,\n loop\n }\n ], points, segmentOptions);\n }\n const max = end < start ? end + count : end;\n const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\n function splitByStyles(line, segments, points, segmentOptions) {\n if (!segmentOptions || !segmentOptions.setContext || !points) {\n return segments;\n }\n return doSplitByStyles(line, segments, points, segmentOptions);\n}\n function doSplitByStyles(line, segments, points, segmentOptions) {\n const chartContext = line._chart.getContext();\n const baseStyle = readStyle(line.options);\n const { _datasetIndex: datasetIndex , options: { spanGaps } } = line;\n const count = points.length;\n const result = [];\n let prevStyle = baseStyle;\n let start = segments[0].start;\n let i = start;\n function addStyle(s, e, l, st) {\n const dir = spanGaps ? -1 : 1;\n if (s === e) {\n return;\n }\n s += count;\n while(points[s % count].skip){\n s -= dir;\n }\n while(points[e % count].skip){\n e += dir;\n }\n if (s % count !== e % count) {\n result.push({\n start: s % count,\n end: e % count,\n loop: l,\n style: st\n });\n prevStyle = st;\n start = e % count;\n }\n }\n for (const segment of segments){\n start = spanGaps ? start : segment.start;\n let prev = points[start % count];\n let style;\n for(i = start + 1; i <= segment.end; i++){\n const pt = points[i % count];\n style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n type: 'segment',\n p0: prev,\n p1: pt,\n p0DataIndex: (i - 1) % count,\n p1DataIndex: i % count,\n datasetIndex\n })));\n if (styleChanged(style, prevStyle)) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n prev = pt;\n prevStyle = style;\n }\n if (start < i - 1) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n }\n return result;\n}\nfunction readStyle(options) {\n return {\n backgroundColor: options.backgroundColor,\n borderCapStyle: options.borderCapStyle,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderJoinStyle: options.borderJoinStyle,\n borderWidth: options.borderWidth,\n borderColor: options.borderColor\n };\n}\nfunction styleChanged(style, prevStyle) {\n if (!prevStyle) {\n return false;\n }\n const cache = [];\n const replacer = function(key, value) {\n if (!isPatternOrGradient(value)) {\n return value;\n }\n if (!cache.includes(value)) {\n cache.push(value);\n }\n return cache.indexOf(value);\n };\n return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);\n}\n\nexport { unclipArea as $, _rlookupByKey as A, _lookupByKey as B, _isPointInArea as C, getAngleFromPoint as D, toPadding as E, each as F, getMaximumSize as G, HALF_PI as H, _getParentNode as I, readUsedSize as J, supportsEventListenerOptions as K, throttled as L, _isDomSupported as M, _factorize as N, finiteOrDefault as O, PI as P, callback as Q, _addGrace as R, _limitValue as S, TAU as T, toDegrees as U, _measureText as V, _int16Range as W, _alignPixel as X, clipArea as Y, renderText as Z, _arrayUnique as _, resolve as a, fontString as a$, toFont as a0, _toLeftRightCenter as a1, _alignStartEnd as a2, overrides as a3, merge as a4, _capitalize as a5, descriptors as a6, isFunction as a7, _attachContext as a8, _createResolver as a9, overrideTextDirection as aA, _textX as aB, restoreTextDirection as aC, drawPointLegend as aD, distanceBetweenPoints as aE, noop as aF, _setMinAndMaxByKey as aG, niceNum as aH, almostWhole as aI, almostEquals as aJ, _decimalPlaces as aK, Ticks as aL, log10 as aM, _longestText as aN, _filterBetween as aO, _lookup as aP, isPatternOrGradient as aQ, getHoverColor as aR, clone as aS, _merger as aT, _mergerIf as aU, _deprecated as aV, _splitKey as aW, toFontString as aX, splineCurve as aY, splineCurveMonotone as aZ, getStyle as a_, _descriptors as aa, mergeIf as ab, uid as ac, debounce as ad, retinaScale as ae, clearCanvas as af, setsEqual as ag, _elementsEqual as ah, _isClickEvent as ai, _isBetween as aj, _readValueToProps as ak, _updateBezierControlPoints as al, _computeSegments as am, _boundSegments as an, _steppedInterpolation as ao, _bezierInterpolation as ap, _pointInLine as aq, _steppedLineTo as ar, _bezierCurveTo as as, drawPoint as at, addRoundedRectPath as au, toTRBL as av, toTRBLCorners as aw, _boundSegment as ax, _normalizeAngle as ay, getRtlAdapter as az, isArray as b, toLineHeight as b0, PITAU as b1, INFINITY as b2, RAD_PER_DEG as b3, QUARTER_PI as b4, TWO_THIRDS_PI as b5, _angleDiff as b6, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, defined as h, isObject as i, createContext as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, _getStartAndCountOfVisiblePoints as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _scaleRangesChanged as w, isNumber as x, _parseObjectDataRadialScale as y, getRelativePosition as z };\n//# sourceMappingURL=helpers.segment.js.map\n","/*!\n * Chart.js v4.4.8\n * https://www.chartjs.org\n * (c) 2025 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, i as isObject, d as defaults, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as defined, s as sign, j as createContext, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as _getStartAndCountOfVisiblePoints, w as _scaleRangesChanged, x as isNumber, y as _parseObjectDataRadialScale, z as getRelativePosition, A as _rlookupByKey, B as _lookupByKey, C as _isPointInArea, D as getAngleFromPoint, E as toPadding, F as each, G as getMaximumSize, I as _getParentNode, J as readUsedSize, K as supportsEventListenerOptions, L as throttled, M as _isDomSupported, N as _factorize, O as finiteOrDefault, Q as callback, R as _addGrace, S as _limitValue, U as toDegrees, V as _measureText, W as _int16Range, X as _alignPixel, Y as clipArea, Z as renderText, $ as unclipArea, a0 as toFont, a1 as _toLeftRightCenter, a2 as _alignStartEnd, a3 as overrides, a4 as merge, a5 as _capitalize, a6 as descriptors, a7 as isFunction, a8 as _attachContext, a9 as _createResolver, aa as _descriptors, ab as mergeIf, ac as uid, ad as debounce, ae as retinaScale, af as clearCanvas, ag as setsEqual, ah as _elementsEqual, ai as _isClickEvent, aj as _isBetween, ak as _readValueToProps, al as _updateBezierControlPoints, am as _computeSegments, an as _boundSegments, ao as _steppedInterpolation, ap as _bezierInterpolation, aq as _pointInLine, ar as _steppedLineTo, as as _bezierCurveTo, at as drawPoint, au as addRoundedRectPath, av as toTRBL, aw as toTRBLCorners, ax as _boundSegment, ay as _normalizeAngle, az as getRtlAdapter, aA as overrideTextDirection, aB as _textX, aC as restoreTextDirection, aD as drawPointLegend, aE as distanceBetweenPoints, aF as noop, aG as _setMinAndMaxByKey, aH as niceNum, aI as almostWhole, aJ as almostEquals, aK as _decimalPlaces, aL as Ticks, aM as log10, aN as _longestText, aO as _filterBetween, aP as _lookup } from './chunks/helpers.segment.js';\nimport '@kurkle/color';\n\nclass Animator {\n constructor(){\n this._request = null;\n this._charts = new Map();\n this._running = false;\n this._lastDate = undefined;\n }\n _notify(chart, anims, date, type) {\n const callbacks = anims.listeners[type];\n const numSteps = anims.duration;\n callbacks.forEach((fn)=>fn({\n chart,\n initial: anims.initial,\n numSteps,\n currentStep: Math.min(date - anims.start, numSteps)\n }));\n }\n _refresh() {\n if (this._request) {\n return;\n }\n this._running = true;\n this._request = requestAnimFrame.call(window, ()=>{\n this._update();\n this._request = null;\n if (this._running) {\n this._refresh();\n }\n });\n }\n _update(date = Date.now()) {\n let remaining = 0;\n this._charts.forEach((anims, chart)=>{\n if (!anims.running || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n let draw = false;\n let item;\n for(; i >= 0; --i){\n item = items[i];\n if (item._active) {\n if (item._total > anims.duration) {\n anims.duration = item._total;\n }\n item.tick(date);\n draw = true;\n } else {\n items[i] = items[items.length - 1];\n items.pop();\n }\n }\n if (draw) {\n chart.draw();\n this._notify(chart, anims, date, 'progress');\n }\n if (!items.length) {\n anims.running = false;\n this._notify(chart, anims, date, 'complete');\n anims.initial = false;\n }\n remaining += items.length;\n });\n this._lastDate = date;\n if (remaining === 0) {\n this._running = false;\n }\n }\n _getAnims(chart) {\n const charts = this._charts;\n let anims = charts.get(chart);\n if (!anims) {\n anims = {\n running: false,\n initial: true,\n items: [],\n listeners: {\n complete: [],\n progress: []\n }\n };\n charts.set(chart, anims);\n }\n return anims;\n }\n listen(chart, event, cb) {\n this._getAnims(chart).listeners[event].push(cb);\n }\n add(chart, items) {\n if (!items || !items.length) {\n return;\n }\n this._getAnims(chart).items.push(...items);\n }\n has(chart) {\n return this._getAnims(chart).items.length > 0;\n }\n start(chart) {\n const anims = this._charts.get(chart);\n if (!anims) {\n return;\n }\n anims.running = true;\n anims.start = Date.now();\n anims.duration = anims.items.reduce((acc, cur)=>Math.max(acc, cur._duration), 0);\n this._refresh();\n }\n running(chart) {\n if (!this._running) {\n return false;\n }\n const anims = this._charts.get(chart);\n if (!anims || !anims.running || !anims.items.length) {\n return false;\n }\n return true;\n }\n stop(chart) {\n const anims = this._charts.get(chart);\n if (!anims || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n for(; i >= 0; --i){\n items[i].cancel();\n }\n anims.items = [];\n this._notify(chart, anims, Date.now(), 'complete');\n }\n remove(chart) {\n return this._charts.delete(chart);\n }\n}\nvar animator = /* #__PURE__ */ new Animator();\n\nconst transparent = 'transparent';\nconst interpolators = {\n boolean (from, to, factor) {\n return factor > 0.5 ? to : from;\n },\n color (from, to, factor) {\n const c0 = color(from || transparent);\n const c1 = c0.valid && color(to || transparent);\n return c1 && c1.valid ? c1.mix(c0, factor).hexString() : to;\n },\n number (from, to, factor) {\n return from + (to - from) * factor;\n }\n};\nclass Animation {\n constructor(cfg, target, prop, to){\n const currentValue = target[prop];\n to = resolve([\n cfg.to,\n to,\n currentValue,\n cfg.from\n ]);\n const from = resolve([\n cfg.from,\n currentValue,\n to\n ]);\n this._active = true;\n this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n this._easing = effects[cfg.easing] || effects.linear;\n this._start = Math.floor(Date.now() + (cfg.delay || 0));\n this._duration = this._total = Math.floor(cfg.duration);\n this._loop = !!cfg.loop;\n this._target = target;\n this._prop = prop;\n this._from = from;\n this._to = to;\n this._promises = undefined;\n }\n active() {\n return this._active;\n }\n update(cfg, to, date) {\n if (this._active) {\n this._notify(false);\n const currentValue = this._target[this._prop];\n const elapsed = date - this._start;\n const remain = this._duration - elapsed;\n this._start = date;\n this._duration = Math.floor(Math.max(remain, cfg.duration));\n this._total += elapsed;\n this._loop = !!cfg.loop;\n this._to = resolve([\n cfg.to,\n to,\n currentValue,\n cfg.from\n ]);\n this._from = resolve([\n cfg.from,\n currentValue,\n to\n ]);\n }\n }\n cancel() {\n if (this._active) {\n this.tick(Date.now());\n this._active = false;\n this._notify(false);\n }\n }\n tick(date) {\n const elapsed = date - this._start;\n const duration = this._duration;\n const prop = this._prop;\n const from = this._from;\n const loop = this._loop;\n const to = this._to;\n let factor;\n this._active = from !== to && (loop || elapsed < duration);\n if (!this._active) {\n this._target[prop] = to;\n this._notify(true);\n return;\n }\n if (elapsed < 0) {\n this._target[prop] = from;\n return;\n }\n factor = elapsed / duration % 2;\n factor = loop && factor > 1 ? 2 - factor : factor;\n factor = this._easing(Math.min(1, Math.max(0, factor)));\n this._target[prop] = this._fn(from, to, factor);\n }\n wait() {\n const promises = this._promises || (this._promises = []);\n return new Promise((res, rej)=>{\n promises.push({\n res,\n rej\n });\n });\n }\n _notify(resolved) {\n const method = resolved ? 'res' : 'rej';\n const promises = this._promises || [];\n for(let i = 0; i < promises.length; i++){\n promises[i][method]();\n }\n }\n}\n\nclass Animations {\n constructor(chart, config){\n this._chart = chart;\n this._properties = new Map();\n this.configure(config);\n }\n configure(config) {\n if (!isObject(config)) {\n return;\n }\n const animationOptions = Object.keys(defaults.animation);\n const animatedProps = this._properties;\n Object.getOwnPropertyNames(config).forEach((key)=>{\n const cfg = config[key];\n if (!isObject(cfg)) {\n return;\n }\n const resolved = {};\n for (const option of animationOptions){\n resolved[option] = cfg[option];\n }\n (isArray(cfg.properties) && cfg.properties || [\n key\n ]).forEach((prop)=>{\n if (prop === key || !animatedProps.has(prop)) {\n animatedProps.set(prop, resolved);\n }\n });\n });\n }\n _animateOptions(target, values) {\n const newOptions = values.options;\n const options = resolveTargetOptions(target, newOptions);\n if (!options) {\n return [];\n }\n const animations = this._createAnimations(options, newOptions);\n if (newOptions.$shared) {\n awaitAll(target.options.$animations, newOptions).then(()=>{\n target.options = newOptions;\n }, ()=>{\n });\n }\n return animations;\n }\n _createAnimations(target, values) {\n const animatedProps = this._properties;\n const animations = [];\n const running = target.$animations || (target.$animations = {});\n const props = Object.keys(values);\n const date = Date.now();\n let i;\n for(i = props.length - 1; i >= 0; --i){\n const prop = props[i];\n if (prop.charAt(0) === '$') {\n continue;\n }\n if (prop === 'options') {\n animations.push(...this._animateOptions(target, values));\n continue;\n }\n const value = values[prop];\n let animation = running[prop];\n const cfg = animatedProps.get(prop);\n if (animation) {\n if (cfg && animation.active()) {\n animation.update(cfg, value, date);\n continue;\n } else {\n animation.cancel();\n }\n }\n if (!cfg || !cfg.duration) {\n target[prop] = value;\n continue;\n }\n running[prop] = animation = new Animation(cfg, target, prop, value);\n animations.push(animation);\n }\n return animations;\n }\n update(target, values) {\n if (this._properties.size === 0) {\n Object.assign(target, values);\n return;\n }\n const animations = this._createAnimations(target, values);\n if (animations.length) {\n animator.add(this._chart, animations);\n return true;\n }\n }\n}\nfunction awaitAll(animations, properties) {\n const running = [];\n const keys = Object.keys(properties);\n for(let i = 0; i < keys.length; i++){\n const anim = animations[keys[i]];\n if (anim && anim.active()) {\n running.push(anim.wait());\n }\n }\n return Promise.all(running);\n}\nfunction resolveTargetOptions(target, newOptions) {\n if (!newOptions) {\n return;\n }\n let options = target.options;\n if (!options) {\n target.options = newOptions;\n return;\n }\n if (options.$shared) {\n target.options = options = Object.assign({}, options, {\n $shared: false,\n $animations: {}\n });\n }\n return options;\n}\n\nfunction scaleClip(scale, allowedOverflow) {\n const opts = scale && scale.options || {};\n const reverse = opts.reverse;\n const min = opts.min === undefined ? allowedOverflow : 0;\n const max = opts.max === undefined ? allowedOverflow : 0;\n return {\n start: reverse ? max : min,\n end: reverse ? min : max\n };\n}\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n if (allowedOverflow === false) {\n return false;\n }\n const x = scaleClip(xScale, allowedOverflow);\n const y = scaleClip(yScale, allowedOverflow);\n return {\n top: y.end,\n right: x.end,\n bottom: y.start,\n left: x.start\n };\n}\nfunction toClip(value) {\n let t, r, b, l;\n if (isObject(value)) {\n t = value.top;\n r = value.right;\n b = value.bottom;\n l = value.left;\n } else {\n t = r = b = l = value;\n }\n return {\n top: t,\n right: r,\n bottom: b,\n left: l,\n disabled: value === false\n };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n const keys = [];\n const metasets = chart._getSortedDatasetMetas(filterVisible);\n let i, ilen;\n for(i = 0, ilen = metasets.length; i < ilen; ++i){\n keys.push(metasets[i].index);\n }\n return keys;\n}\nfunction applyStack(stack, value, dsIndex, options = {}) {\n const keys = stack.keys;\n const singleMode = options.mode === 'single';\n let i, ilen, datasetIndex, otherValue;\n if (value === null) {\n return;\n }\n let found = false;\n for(i = 0, ilen = keys.length; i < ilen; ++i){\n datasetIndex = +keys[i];\n if (datasetIndex === dsIndex) {\n found = true;\n if (options.all) {\n continue;\n }\n break;\n }\n otherValue = stack.values[datasetIndex];\n if (isNumberFinite(otherValue) && (singleMode || value === 0 || sign(value) === sign(otherValue))) {\n value += otherValue;\n }\n }\n if (!found && !options.all) {\n return 0;\n }\n return value;\n}\nfunction convertObjectDataToArray(data, meta) {\n const { iScale , vScale } = meta;\n const iAxisKey = iScale.axis === 'x' ? 'x' : 'y';\n const vAxisKey = vScale.axis === 'x' ? 'x' : 'y';\n const keys = Object.keys(data);\n const adata = new Array(keys.length);\n let i, ilen, key;\n for(i = 0, ilen = keys.length; i < ilen; ++i){\n key = keys[i];\n adata[i] = {\n [iAxisKey]: key,\n [vAxisKey]: data[key]\n };\n }\n return adata;\n}\nfunction isStacked(scale, meta) {\n const stacked = scale && scale.options.stacked;\n return stacked || stacked === undefined && meta.stack !== undefined;\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\nfunction getUserBounds(scale) {\n const { min , max , minDefined , maxDefined } = scale.getUserBounds();\n return {\n min: minDefined ? min : Number.NEGATIVE_INFINITY,\n max: maxDefined ? max : Number.POSITIVE_INFINITY\n };\n}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n return subStack[indexValue] || (subStack[indexValue] = {});\n}\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n for (const meta of vScale.getMatchingVisibleMetas(type).reverse()){\n const value = stack[meta.index];\n if (positive && value > 0 || !positive && value < 0) {\n return meta.index;\n }\n }\n return null;\n}\nfunction updateStacks(controller, parsed) {\n const { chart , _cachedMeta: meta } = controller;\n const stacks = chart._stacks || (chart._stacks = {});\n const { iScale , vScale , index: datasetIndex } = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const key = getStackKey(iScale, vScale, meta);\n const ilen = parsed.length;\n let stack;\n for(let i = 0; i < ilen; ++i){\n const item = parsed[i];\n const { [iAxis]: index , [vAxis]: value } = item;\n const itemStacks = item._stacks || (item._stacks = {});\n stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n stack[datasetIndex] = value;\n stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n const visualValues = stack._visualValues || (stack._visualValues = {});\n visualValues[datasetIndex] = value;\n }\n}\nfunction getFirstScaleId(chart, axis) {\n const scales = chart.scales;\n return Object.keys(scales).filter((key)=>scales[key].axis === axis).shift();\n}\nfunction createDatasetContext(parent, index) {\n return createContext(parent, {\n active: false,\n dataset: undefined,\n datasetIndex: index,\n index,\n mode: 'default',\n type: 'dataset'\n });\n}\nfunction createDataContext(parent, index, element) {\n return createContext(parent, {\n active: false,\n dataIndex: index,\n parsed: undefined,\n raw: undefined,\n element,\n index,\n mode: 'default',\n type: 'data'\n });\n}\nfunction clearStacks(meta, items) {\n const datasetIndex = meta.controller.index;\n const axis = meta.vScale && meta.vScale.axis;\n if (!axis) {\n return;\n }\n items = items || meta._parsed;\n for (const parsed of items){\n const stacks = parsed._stacks;\n if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n return;\n }\n delete stacks[axis][datasetIndex];\n if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {\n delete stacks[axis]._visualValues[datasetIndex];\n }\n }\n}\nconst isDirectUpdateMode = (mode)=>mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared)=>shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart)=>canStack && !meta.hidden && meta._stacked && {\n keys: getSortedDatasetIndices(chart, true),\n values: null\n };\nclass DatasetController {\n static defaults = {};\n static datasetElementType = null;\n static dataElementType = null;\n constructor(chart, datasetIndex){\n this.chart = chart;\n this._ctx = chart.ctx;\n this.index = datasetIndex;\n this._cachedDataOpts = {};\n this._cachedMeta = this.getMeta();\n this._type = this._cachedMeta.type;\n this.options = undefined;\n this._parsing = false;\n this._data = undefined;\n this._objectData = undefined;\n this._sharedOptions = undefined;\n this._drawStart = undefined;\n this._drawCount = undefined;\n this.enableOptionSharing = false;\n this.supportsDecimation = false;\n this.$context = undefined;\n this._syncList = [];\n this.datasetElementType = new.target.datasetElementType;\n this.dataElementType = new.target.dataElementType;\n this.initialize();\n }\n initialize() {\n const meta = this._cachedMeta;\n this.configure();\n this.linkScales();\n meta._stacked = isStacked(meta.vScale, meta);\n this.addElements();\n if (this.options.fill && !this.chart.isPluginEnabled('filler')) {\n console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\");\n }\n }\n updateIndex(datasetIndex) {\n if (this.index !== datasetIndex) {\n clearStacks(this._cachedMeta);\n }\n this.index = datasetIndex;\n }\n linkScales() {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n const chooseId = (axis, x, y, r)=>axis === 'x' ? x : axis === 'r' ? r : y;\n const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n const indexAxis = meta.indexAxis;\n const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n meta.xScale = this.getScaleForId(xid);\n meta.yScale = this.getScaleForId(yid);\n meta.rScale = this.getScaleForId(rid);\n meta.iScale = this.getScaleForId(iid);\n meta.vScale = this.getScaleForId(vid);\n }\n getDataset() {\n return this.chart.data.datasets[this.index];\n }\n getMeta() {\n return this.chart.getDatasetMeta(this.index);\n }\n getScaleForId(scaleID) {\n return this.chart.scales[scaleID];\n }\n _getOtherScale(scale) {\n const meta = this._cachedMeta;\n return scale === meta.iScale ? meta.vScale : meta.iScale;\n }\n reset() {\n this._update('reset');\n }\n _destroy() {\n const meta = this._cachedMeta;\n if (this._data) {\n unlistenArrayEvents(this._data, this);\n }\n if (meta._stacked) {\n clearStacks(meta);\n }\n }\n _dataCheck() {\n const dataset = this.getDataset();\n const data = dataset.data || (dataset.data = []);\n const _data = this._data;\n if (isObject(data)) {\n const meta = this._cachedMeta;\n this._data = convertObjectDataToArray(data, meta);\n } else if (_data !== data) {\n if (_data) {\n unlistenArrayEvents(_data, this);\n const meta = this._cachedMeta;\n clearStacks(meta);\n meta._parsed = [];\n }\n if (data && Object.isExtensible(data)) {\n listenArrayEvents(data, this);\n }\n this._syncList = [];\n this._data = data;\n }\n }\n addElements() {\n const meta = this._cachedMeta;\n this._dataCheck();\n if (this.datasetElementType) {\n meta.dataset = new this.datasetElementType();\n }\n }\n buildOrUpdateElements(resetNewElements) {\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n let stackChanged = false;\n this._dataCheck();\n const oldStacked = meta._stacked;\n meta._stacked = isStacked(meta.vScale, meta);\n if (meta.stack !== dataset.stack) {\n stackChanged = true;\n clearStacks(meta);\n meta.stack = dataset.stack;\n }\n this._resyncElements(resetNewElements);\n if (stackChanged || oldStacked !== meta._stacked) {\n updateStacks(this, meta._parsed);\n meta._stacked = isStacked(meta.vScale, meta);\n }\n }\n configure() {\n const config = this.chart.config;\n const scopeKeys = config.datasetScopeKeys(this._type);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n this.options = config.createResolver(scopes, this.getContext());\n this._parsing = this.options.parsing;\n this._cachedDataOpts = {};\n }\n parse(start, count) {\n const { _cachedMeta: meta , _data: data } = this;\n const { iScale , _stacked } = meta;\n const iAxis = iScale.axis;\n let sorted = start === 0 && count === data.length ? true : meta._sorted;\n let prev = start > 0 && meta._parsed[start - 1];\n let i, cur, parsed;\n if (this._parsing === false) {\n meta._parsed = data;\n meta._sorted = true;\n parsed = data;\n } else {\n if (isArray(data[start])) {\n parsed = this.parseArrayData(meta, data, start, count);\n } else if (isObject(data[start])) {\n parsed = this.parseObjectData(meta, data, start, count);\n } else {\n parsed = this.parsePrimitiveData(meta, data, start, count);\n }\n const isNotInOrderComparedToPrev = ()=>cur[iAxis] === null || prev && cur[iAxis] < prev[iAxis];\n for(i = 0; i < count; ++i){\n meta._parsed[i + start] = cur = parsed[i];\n if (sorted) {\n if (isNotInOrderComparedToPrev()) {\n sorted = false;\n }\n prev = cur;\n }\n }\n meta._sorted = sorted;\n }\n if (_stacked) {\n updateStacks(this, parsed);\n }\n }\n parsePrimitiveData(meta, data, start, count) {\n const { iScale , vScale } = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = new Array(count);\n let i, ilen, index;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n parsed[i] = {\n [iAxis]: singleScale || iScale.parse(labels[index], index),\n [vAxis]: vScale.parse(data[index], index)\n };\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const { xScale , yScale } = meta;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(item[0], index),\n y: yScale.parse(item[1], index)\n };\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const { xScale , yScale } = meta;\n const { xAxisKey ='x' , yAxisKey ='y' } = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n };\n }\n return parsed;\n }\n getParsed(index) {\n return this._cachedMeta._parsed[index];\n }\n getDataElement(index) {\n return this._cachedMeta.data[index];\n }\n applyStack(scale, parsed, mode) {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const value = parsed[scale.axis];\n const stack = {\n keys: getSortedDatasetIndices(chart, true),\n values: parsed._stacks[scale.axis]._visualValues\n };\n return applyStack(stack, value, meta.index, {\n mode\n });\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n const parsedValue = parsed[scale.axis];\n let value = parsedValue === null ? NaN : parsedValue;\n const values = stack && parsed._stacks[scale.axis];\n if (stack && values) {\n stack.values = values;\n value = applyStack(stack, parsedValue, this._cachedMeta.index);\n }\n range.min = Math.min(range.min, value);\n range.max = Math.max(range.max, value);\n }\n getMinMax(scale, canStack) {\n const meta = this._cachedMeta;\n const _parsed = meta._parsed;\n const sorted = meta._sorted && scale === meta.iScale;\n const ilen = _parsed.length;\n const otherScale = this._getOtherScale(scale);\n const stack = createStack(canStack, meta, this.chart);\n const range = {\n min: Number.POSITIVE_INFINITY,\n max: Number.NEGATIVE_INFINITY\n };\n const { min: otherMin , max: otherMax } = getUserBounds(otherScale);\n let i, parsed;\n function _skip() {\n parsed = _parsed[i];\n const otherValue = parsed[otherScale.axis];\n return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n }\n for(i = 0; i < ilen; ++i){\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n if (sorted) {\n break;\n }\n }\n if (sorted) {\n for(i = ilen - 1; i >= 0; --i){\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n break;\n }\n }\n return range;\n }\n getAllParsedValues(scale) {\n const parsed = this._cachedMeta._parsed;\n const values = [];\n let i, ilen, value;\n for(i = 0, ilen = parsed.length; i < ilen; ++i){\n value = parsed[i][scale.axis];\n if (isNumberFinite(value)) {\n values.push(value);\n }\n }\n return values;\n }\n getMaxOverflow() {\n return false;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n };\n }\n _update(mode) {\n const meta = this._cachedMeta;\n this.update(mode || 'default');\n meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n }\n update(mode) {}\n draw() {\n const ctx = this._ctx;\n const chart = this.chart;\n const meta = this._cachedMeta;\n const elements = meta.data || [];\n const area = chart.chartArea;\n const active = [];\n const start = this._drawStart || 0;\n const count = this._drawCount || elements.length - start;\n const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n let i;\n if (meta.dataset) {\n meta.dataset.draw(ctx, area, start, count);\n }\n for(i = start; i < start + count; ++i){\n const element = elements[i];\n if (element.hidden) {\n continue;\n }\n if (element.active && drawActiveElementsOnTop) {\n active.push(element);\n } else {\n element.draw(ctx, area);\n }\n }\n for(i = 0; i < active.length; ++i){\n active[i].draw(ctx, area);\n }\n }\n getStyle(index, active) {\n const mode = active ? 'active' : 'default';\n return index === undefined && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(mode) : this.resolveDataElementOptions(index || 0, mode);\n }\n getContext(index, active, mode) {\n const dataset = this.getDataset();\n let context;\n if (index >= 0 && index < this._cachedMeta.data.length) {\n const element = this._cachedMeta.data[index];\n context = element.$context || (element.$context = createDataContext(this.getContext(), index, element));\n context.parsed = this.getParsed(index);\n context.raw = dataset.data[index];\n context.index = context.dataIndex = index;\n } else {\n context = this.$context || (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n context.dataset = dataset;\n context.index = context.datasetIndex = this.index;\n }\n context.active = !!active;\n context.mode = mode;\n return context;\n }\n resolveDatasetElementOptions(mode) {\n return this._resolveElementOptions(this.datasetElementType.id, mode);\n }\n resolveDataElementOptions(index, mode) {\n return this._resolveElementOptions(this.dataElementType.id, mode, index);\n }\n _resolveElementOptions(elementType, mode = 'default', index) {\n const active = mode === 'active';\n const cache = this._cachedDataOpts;\n const cacheKey = elementType + '-' + mode;\n const cached = cache[cacheKey];\n const sharing = this.enableOptionSharing && defined(index);\n if (cached) {\n return cloneIfNotShared(cached, sharing);\n }\n const config = this.chart.config;\n const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n const prefixes = active ? [\n `${elementType}Hover`,\n 'hover',\n elementType,\n ''\n ] : [\n elementType,\n ''\n ];\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n const names = Object.keys(defaults.elements[elementType]);\n const context = ()=>this.getContext(index, active, mode);\n const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n if (values.$shared) {\n values.$shared = sharing;\n cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n }\n return values;\n }\n _resolveAnimations(index, transition, active) {\n const chart = this.chart;\n const cache = this._cachedDataOpts;\n const cacheKey = `animation-${transition}`;\n const cached = cache[cacheKey];\n if (cached) {\n return cached;\n }\n let options;\n if (chart.options.animation !== false) {\n const config = this.chart.config;\n const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n options = config.createResolver(scopes, this.getContext(index, active, transition));\n }\n const animations = new Animations(chart, options && options.animations);\n if (options && options._cacheable) {\n cache[cacheKey] = Object.freeze(animations);\n }\n return animations;\n }\n getSharedOptions(options) {\n if (!options.$shared) {\n return;\n }\n return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n }\n includeOptions(mode, sharedOptions) {\n return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n }\n _getSharedOptions(start, mode) {\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const previouslySharedOptions = this._sharedOptions;\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions) || sharedOptions !== previouslySharedOptions;\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n return {\n sharedOptions,\n includeOptions\n };\n }\n updateElement(element, index, properties, mode) {\n if (isDirectUpdateMode(mode)) {\n Object.assign(element, properties);\n } else {\n this._resolveAnimations(index, mode).update(element, properties);\n }\n }\n updateSharedOptions(sharedOptions, mode, newOptions) {\n if (sharedOptions && !isDirectUpdateMode(mode)) {\n this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n }\n }\n _setStyle(element, index, mode, active) {\n element.active = active;\n const options = this.getStyle(index, active);\n this._resolveAnimations(index, mode, active).update(element, {\n options: !active && this.getSharedOptions(options) || options\n });\n }\n removeHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', false);\n }\n setHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', true);\n }\n _removeDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', false);\n }\n }\n _setDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', true);\n }\n }\n _resyncElements(resetNewElements) {\n const data = this._data;\n const elements = this._cachedMeta.data;\n for (const [method, arg1, arg2] of this._syncList){\n this[method](arg1, arg2);\n }\n this._syncList = [];\n const numMeta = elements.length;\n const numData = data.length;\n const count = Math.min(numData, numMeta);\n if (count) {\n this.parse(0, count);\n }\n if (numData > numMeta) {\n this._insertElements(numMeta, numData - numMeta, resetNewElements);\n } else if (numData < numMeta) {\n this._removeElements(numData, numMeta - numData);\n }\n }\n _insertElements(start, count, resetNewElements = true) {\n const meta = this._cachedMeta;\n const data = meta.data;\n const end = start + count;\n let i;\n const move = (arr)=>{\n arr.length += count;\n for(i = arr.length - 1; i >= end; i--){\n arr[i] = arr[i - count];\n }\n };\n move(data);\n for(i = start; i < end; ++i){\n data[i] = new this.dataElementType();\n }\n if (this._parsing) {\n move(meta._parsed);\n }\n this.parse(start, count);\n if (resetNewElements) {\n this.updateElements(data, start, count, 'reset');\n }\n }\n updateElements(element, start, count, mode) {}\n _removeElements(start, count) {\n const meta = this._cachedMeta;\n if (this._parsing) {\n const removed = meta._parsed.splice(start, count);\n if (meta._stacked) {\n clearStacks(meta, removed);\n }\n }\n meta.data.splice(start, count);\n }\n _sync(args) {\n if (this._parsing) {\n this._syncList.push(args);\n } else {\n const [method, arg1, arg2] = args;\n this[method](arg1, arg2);\n }\n this.chart._dataChanges.push([\n this.index,\n ...args\n ]);\n }\n _onDataPush() {\n const count = arguments.length;\n this._sync([\n '_insertElements',\n this.getDataset().data.length - count,\n count\n ]);\n }\n _onDataPop() {\n this._sync([\n '_removeElements',\n this._cachedMeta.data.length - 1,\n 1\n ]);\n }\n _onDataShift() {\n this._sync([\n '_removeElements',\n 0,\n 1\n ]);\n }\n _onDataSplice(start, count) {\n if (count) {\n this._sync([\n '_removeElements',\n start,\n count\n ]);\n }\n const newCount = arguments.length - 2;\n if (newCount) {\n this._sync([\n '_insertElements',\n start,\n newCount\n ]);\n }\n }\n _onDataUnshift() {\n this._sync([\n '_insertElements',\n 0,\n arguments.length\n ]);\n }\n}\n\nfunction getAllScaleValues(scale, type) {\n if (!scale._cache.$bar) {\n const visibleMetas = scale.getMatchingVisibleMetas(type);\n let values = [];\n for(let i = 0, ilen = visibleMetas.length; i < ilen; i++){\n values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n }\n scale._cache.$bar = _arrayUnique(values.sort((a, b)=>a - b));\n }\n return scale._cache.$bar;\n}\n function computeMinSampleSize(meta) {\n const scale = meta.iScale;\n const values = getAllScaleValues(scale, meta.type);\n let min = scale._length;\n let i, ilen, curr, prev;\n const updateMinAndPrev = ()=>{\n if (curr === 32767 || curr === -32768) {\n return;\n }\n if (defined(prev)) {\n min = Math.min(min, Math.abs(curr - prev) || min);\n }\n prev = curr;\n };\n for(i = 0, ilen = values.length; i < ilen; ++i){\n curr = scale.getPixelForValue(values[i]);\n updateMinAndPrev();\n }\n prev = undefined;\n for(i = 0, ilen = scale.ticks.length; i < ilen; ++i){\n curr = scale.getPixelForTick(i);\n updateMinAndPrev();\n }\n return min;\n}\n function computeFitCategoryTraits(index, ruler, options, stackCount) {\n const thickness = options.barThickness;\n let size, ratio;\n if (isNullOrUndef(thickness)) {\n size = ruler.min * options.categoryPercentage;\n ratio = options.barPercentage;\n } else {\n size = thickness * stackCount;\n ratio = 1;\n }\n return {\n chunk: size / stackCount,\n ratio,\n start: ruler.pixels[index] - size / 2\n };\n}\n function computeFlexCategoryTraits(index, ruler, options, stackCount) {\n const pixels = ruler.pixels;\n const curr = pixels[index];\n let prev = index > 0 ? pixels[index - 1] : null;\n let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n const percent = options.categoryPercentage;\n if (prev === null) {\n prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n }\n if (next === null) {\n next = curr + curr - prev;\n }\n const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n const size = Math.abs(next - prev) / 2 * percent;\n return {\n chunk: size / stackCount,\n ratio: options.barPercentage,\n start\n };\n}\nfunction parseFloatBar(entry, item, vScale, i) {\n const startValue = vScale.parse(entry[0], i);\n const endValue = vScale.parse(entry[1], i);\n const min = Math.min(startValue, endValue);\n const max = Math.max(startValue, endValue);\n let barStart = min;\n let barEnd = max;\n if (Math.abs(min) > Math.abs(max)) {\n barStart = max;\n barEnd = min;\n }\n item[vScale.axis] = barEnd;\n item._custom = {\n barStart,\n barEnd,\n start: startValue,\n end: endValue,\n min,\n max\n };\n}\nfunction parseValue(entry, item, vScale, i) {\n if (isArray(entry)) {\n parseFloatBar(entry, item, vScale, i);\n } else {\n item[vScale.axis] = vScale.parse(entry, i);\n }\n return item;\n}\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = [];\n let i, ilen, item, entry;\n for(i = start, ilen = start + count; i < ilen; ++i){\n entry = data[i];\n item = {};\n item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n parsed.push(parseValue(entry, item, vScale, i));\n }\n return parsed;\n}\nfunction isFloatBar(custom) {\n return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\nfunction barSign(size, vScale, actualBase) {\n if (size !== 0) {\n return sign(size);\n }\n return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\nfunction borderProps(properties) {\n let reverse, start, end, top, bottom;\n if (properties.horizontal) {\n reverse = properties.base > properties.x;\n start = 'left';\n end = 'right';\n } else {\n reverse = properties.base < properties.y;\n start = 'bottom';\n end = 'top';\n }\n if (reverse) {\n top = 'end';\n bottom = 'start';\n } else {\n top = 'start';\n bottom = 'end';\n }\n return {\n start,\n end,\n reverse,\n top,\n bottom\n };\n}\nfunction setBorderSkipped(properties, options, stack, index) {\n let edge = options.borderSkipped;\n const res = {};\n if (!edge) {\n properties.borderSkipped = res;\n return;\n }\n if (edge === true) {\n properties.borderSkipped = {\n top: true,\n right: true,\n bottom: true,\n left: true\n };\n return;\n }\n const { start , end , reverse , top , bottom } = borderProps(properties);\n if (edge === 'middle' && stack) {\n properties.enableBorderRadius = true;\n if ((stack._top || 0) === index) {\n edge = top;\n } else if ((stack._bottom || 0) === index) {\n edge = bottom;\n } else {\n res[parseEdge(bottom, start, end, reverse)] = true;\n edge = top;\n }\n }\n res[parseEdge(edge, start, end, reverse)] = true;\n properties.borderSkipped = res;\n}\nfunction parseEdge(edge, a, b, reverse) {\n if (reverse) {\n edge = swap(edge, a, b);\n edge = startEnd(edge, b, a);\n } else {\n edge = startEnd(edge, a, b);\n }\n return edge;\n}\nfunction swap(orig, v1, v2) {\n return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n return v === 'start' ? start : v === 'end' ? end : v;\n}\nfunction setInflateAmount(properties, { inflateAmount }, ratio) {\n properties.inflateAmount = inflateAmount === 'auto' ? ratio === 1 ? 0.33 : 0 : inflateAmount;\n}\nclass BarController extends DatasetController {\n static id = 'bar';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'bar',\n categoryPercentage: 0.8,\n barPercentage: 0.9,\n grouped: true,\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'base',\n 'width',\n 'height'\n ]\n }\n }\n };\n static overrides = {\n scales: {\n _index_: {\n type: 'category',\n offset: true,\n grid: {\n offset: true\n }\n },\n _value_: {\n type: 'linear',\n beginAtZero: true\n }\n }\n };\n parsePrimitiveData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseArrayData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseObjectData(meta, data, start, count) {\n const { iScale , vScale } = meta;\n const { xAxisKey ='x' , yAxisKey ='y' } = this._parsing;\n const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n const parsed = [];\n let i, ilen, item, obj;\n for(i = start, ilen = start + count; i < ilen; ++i){\n obj = data[i];\n item = {};\n item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n }\n return parsed;\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n super.updateRangeFromParsed(range, scale, parsed, stack);\n const custom = parsed._custom;\n if (custom && scale === this._cachedMeta.vScale) {\n range.min = Math.min(range.min, custom.min);\n range.max = Math.max(range.max, custom.max);\n }\n }\n getMaxOverflow() {\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const { iScale , vScale } = meta;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const value = isFloatBar(custom) ? '[' + custom.start + ', ' + custom.end + ']' : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n return {\n label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n value\n };\n }\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n const meta = this._cachedMeta;\n meta.stack = this.getDataset().stack;\n }\n update(mode) {\n const meta = this._cachedMeta;\n this.updateElements(meta.data, 0, meta.data.length, mode);\n }\n updateElements(bars, start, count, mode) {\n const reset = mode === 'reset';\n const { index , _cachedMeta: { vScale } } = this;\n const base = vScale.getBasePixel();\n const horizontal = vScale.isHorizontal();\n const ruler = this._getRuler();\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n for(let i = start; i < start + count; i++){\n const parsed = this.getParsed(i);\n const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {\n base,\n head: base\n } : this._calculateBarValuePixels(i);\n const ipixels = this._calculateBarIndexPixels(i, ruler);\n const stack = (parsed._stacks || {})[vScale.axis];\n const properties = {\n horizontal,\n base: vpixels.base,\n enableBorderRadius: !stack || isFloatBar(parsed._custom) || index === stack._top || index === stack._bottom,\n x: horizontal ? vpixels.head : ipixels.center,\n y: horizontal ? ipixels.center : vpixels.head,\n height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n }\n const options = properties.options || bars[i].options;\n setBorderSkipped(properties, options, stack, index);\n setInflateAmount(properties, options, ruler.ratio);\n this.updateElement(bars[i], i, properties, mode);\n }\n }\n _getStacks(last, dataIndex) {\n const { iScale } = this._cachedMeta;\n const metasets = iScale.getMatchingVisibleMetas(this._type).filter((meta)=>meta.controller.options.grouped);\n const stacked = iScale.options.stacked;\n const stacks = [];\n const currentParsed = this._cachedMeta.controller.getParsed(dataIndex);\n const iScaleValue = currentParsed && currentParsed[iScale.axis];\n const skipNull = (meta)=>{\n const parsed = meta._parsed.find((item)=>item[iScale.axis] === iScaleValue);\n const val = parsed && parsed[meta.vScale.axis];\n if (isNullOrUndef(val) || isNaN(val)) {\n return true;\n }\n };\n for (const meta of metasets){\n if (dataIndex !== undefined && skipNull(meta)) {\n continue;\n }\n if (stacked === false || stacks.indexOf(meta.stack) === -1 || stacked === undefined && meta.stack === undefined) {\n stacks.push(meta.stack);\n }\n if (meta.index === last) {\n break;\n }\n }\n if (!stacks.length) {\n stacks.push(undefined);\n }\n return stacks;\n }\n _getStackCount(index) {\n return this._getStacks(undefined, index).length;\n }\n _getStackIndex(datasetIndex, name, dataIndex) {\n const stacks = this._getStacks(datasetIndex, dataIndex);\n const index = name !== undefined ? stacks.indexOf(name) : -1;\n return index === -1 ? stacks.length - 1 : index;\n }\n _getRuler() {\n const opts = this.options;\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const pixels = [];\n let i, ilen;\n for(i = 0, ilen = meta.data.length; i < ilen; ++i){\n pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n }\n const barThickness = opts.barThickness;\n const min = barThickness || computeMinSampleSize(meta);\n return {\n min,\n pixels,\n start: iScale._startPixel,\n end: iScale._endPixel,\n stackCount: this._getStackCount(),\n scale: iScale,\n grouped: opts.grouped,\n ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n };\n }\n _calculateBarValuePixels(index) {\n const { _cachedMeta: { vScale , _stacked , index: datasetIndex } , options: { base: baseValue , minBarLength } } = this;\n const actualBase = baseValue || 0;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const floating = isFloatBar(custom);\n let value = parsed[vScale.axis];\n let start = 0;\n let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n let head, size;\n if (length !== value) {\n start = length - value;\n length = value;\n }\n if (floating) {\n value = custom.barStart;\n length = custom.barEnd - custom.barStart;\n if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n start = 0;\n }\n start += value;\n }\n const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n let base = vScale.getPixelForValue(startValue);\n if (this.chart.getDataVisibility(index)) {\n head = vScale.getPixelForValue(start + length);\n } else {\n head = base;\n }\n size = head - base;\n if (Math.abs(size) < minBarLength) {\n size = barSign(size, vScale, actualBase) * minBarLength;\n if (value === actualBase) {\n base -= size / 2;\n }\n const startPixel = vScale.getPixelForDecimal(0);\n const endPixel = vScale.getPixelForDecimal(1);\n const min = Math.min(startPixel, endPixel);\n const max = Math.max(startPixel, endPixel);\n base = Math.max(Math.min(base, max), min);\n head = base + size;\n if (_stacked && !floating) {\n parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\n }\n }\n if (base === vScale.getPixelForValue(actualBase)) {\n const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n base += halfGrid;\n size -= halfGrid;\n }\n return {\n size,\n base,\n head,\n center: head + size / 2\n };\n }\n _calculateBarIndexPixels(index, ruler) {\n const scale = ruler.scale;\n const options = this.options;\n const skipNull = options.skipNull;\n const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n let center, size;\n if (ruler.grouped) {\n const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n const range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options, stackCount) : computeFitCategoryTraits(index, ruler, options, stackCount);\n const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);\n center = range.start + range.chunk * stackIndex + range.chunk / 2;\n size = Math.min(maxBarThickness, range.chunk * range.ratio);\n } else {\n center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n }\n return {\n base: center - size / 2,\n head: center + size / 2,\n center,\n size\n };\n }\n draw() {\n const meta = this._cachedMeta;\n const vScale = meta.vScale;\n const rects = meta.data;\n const ilen = rects.length;\n let i = 0;\n for(; i < ilen; ++i){\n if (this.getParsed(i)[vScale.axis] !== null && !rects[i].hidden) {\n rects[i].draw(this._ctx);\n }\n }\n }\n}\n\nclass BubbleController extends DatasetController {\n static id = 'bubble';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'borderWidth',\n 'radius'\n ]\n }\n }\n };\n static overrides = {\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n }\n parsePrimitiveData(meta, data, start, count) {\n const parsed = super.parsePrimitiveData(meta, data, start, count);\n for(let i = 0; i < parsed.length; i++){\n parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const parsed = super.parseArrayData(meta, data, start, count);\n for(let i = 0; i < parsed.length; i++){\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const parsed = super.parseObjectData(meta, data, start, count);\n for(let i = 0; i < parsed.length; i++){\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n getMaxOverflow() {\n const data = this._cachedMeta.data;\n let max = 0;\n for(let i = data.length - 1; i >= 0; --i){\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const { xScale , yScale } = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n const r = parsed._custom;\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n };\n }\n update(mode) {\n const points = this._cachedMeta.data;\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const { iScale , vScale } = this._cachedMeta;\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n for(let i = start; i < start + count; i++){\n const point = points[i];\n const parsed = !reset && this.getParsed(i);\n const properties = {};\n const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n properties.skip = isNaN(iPixel) || isNaN(vPixel);\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n if (reset) {\n properties.options.radius = 0;\n }\n }\n this.updateElement(point, i, properties, mode);\n }\n }\n resolveDataElementOptions(index, mode) {\n const parsed = this.getParsed(index);\n let values = super.resolveDataElementOptions(index, mode);\n if (values.$shared) {\n values = Object.assign({}, values, {\n $shared: false\n });\n }\n const radius = values.radius;\n if (mode !== 'active') {\n values.radius = 0;\n }\n values.radius += valueOrDefault(parsed && parsed._custom, radius);\n return values;\n }\n}\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n let ratioX = 1;\n let ratioY = 1;\n let offsetX = 0;\n let offsetY = 0;\n if (circumference < TAU) {\n const startAngle = rotation;\n const endAngle = startAngle + circumference;\n const startX = Math.cos(startAngle);\n const startY = Math.sin(startAngle);\n const endX = Math.cos(endAngle);\n const endY = Math.sin(endAngle);\n const calcMax = (angle, a, b)=>_angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n const calcMin = (angle, a, b)=>_angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n const maxX = calcMax(0, startX, endX);\n const maxY = calcMax(HALF_PI, startY, endY);\n const minX = calcMin(PI, startX, endX);\n const minY = calcMin(PI + HALF_PI, startY, endY);\n ratioX = (maxX - minX) / 2;\n ratioY = (maxY - minY) / 2;\n offsetX = -(maxX + minX) / 2;\n offsetY = -(maxY + minY) / 2;\n }\n return {\n ratioX,\n ratioY,\n offsetX,\n offsetY\n };\n}\nclass DoughnutController extends DatasetController {\n static id = 'doughnut';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: false\n },\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'circumference',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'startAngle',\n 'x',\n 'y',\n 'offset',\n 'borderWidth',\n 'spacing'\n ]\n }\n },\n cutout: '50%',\n rotation: 0,\n circumference: 360,\n radius: '100%',\n spacing: 0,\n indexAxis: 'r'\n };\n static descriptors = {\n _scriptable: (name)=>name !== 'spacing',\n _indexable: (name)=>name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash')\n };\n static overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels (chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const { labels: { pointStyle , color } } = chart.legend.options;\n return data.labels.map((label, i)=>{\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n fontColor: color,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick (e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n }\n };\n constructor(chart, datasetIndex){\n super(chart, datasetIndex);\n this.enableOptionSharing = true;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.offsetX = undefined;\n this.offsetY = undefined;\n }\n linkScales() {}\n parse(start, count) {\n const data = this.getDataset().data;\n const meta = this._cachedMeta;\n if (this._parsing === false) {\n meta._parsed = data;\n } else {\n let getter = (i)=>+data[i];\n if (isObject(data[start])) {\n const { key ='value' } = this._parsing;\n getter = (i)=>+resolveObjectKey(data[i], key);\n }\n let i, ilen;\n for(i = start, ilen = start + count; i < ilen; ++i){\n meta._parsed[i] = getter(i);\n }\n }\n }\n _getRotation() {\n return toRadians(this.options.rotation - 90);\n }\n _getCircumference() {\n return toRadians(this.options.circumference);\n }\n _getRotationExtents() {\n let min = TAU;\n let max = -TAU;\n for(let i = 0; i < this.chart.data.datasets.length; ++i){\n if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {\n const controller = this.chart.getDatasetMeta(i).controller;\n const rotation = controller._getRotation();\n const circumference = controller._getCircumference();\n min = Math.min(min, rotation);\n max = Math.max(max, rotation + circumference);\n }\n }\n return {\n rotation: min,\n circumference: max - min\n };\n }\n update(mode) {\n const chart = this.chart;\n const { chartArea } = chart;\n const meta = this._cachedMeta;\n const arcs = meta.data;\n const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n const chartWeight = this._getRingWeight(this.index);\n const { circumference , rotation } = this._getRotationExtents();\n const { ratioX , ratioY , offsetX , offsetY } = getRatioAndOffset(rotation, circumference, cutout);\n const maxWidth = (chartArea.width - spacing) / ratioX;\n const maxHeight = (chartArea.height - spacing) / ratioY;\n const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n const outerRadius = toDimension(this.options.radius, maxRadius);\n const innerRadius = Math.max(outerRadius * cutout, 0);\n const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n this.offsetX = offsetX * outerRadius;\n this.offsetY = offsetY * outerRadius;\n meta.total = this.calculateTotal();\n this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n _circumference(i, reset) {\n const opts = this.options;\n const meta = this._cachedMeta;\n const circumference = this._getCircumference();\n if (reset && opts.animation.animateRotate || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n return 0;\n }\n return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const centerX = (chartArea.left + chartArea.right) / 2;\n const centerY = (chartArea.top + chartArea.bottom) / 2;\n const animateScale = reset && animationOpts.animateScale;\n const innerRadius = animateScale ? 0 : this.innerRadius;\n const outerRadius = animateScale ? 0 : this.outerRadius;\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n let startAngle = this._getRotation();\n let i;\n for(i = 0; i < start; ++i){\n startAngle += this._circumference(i, reset);\n }\n for(i = start; i < start + count; ++i){\n const circumference = this._circumference(i, reset);\n const arc = arcs[i];\n const properties = {\n x: centerX + this.offsetX,\n y: centerY + this.offsetY,\n startAngle,\n endAngle: startAngle + circumference,\n circumference,\n outerRadius,\n innerRadius\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n }\n startAngle += circumference;\n this.updateElement(arc, i, properties, mode);\n }\n }\n calculateTotal() {\n const meta = this._cachedMeta;\n const metaData = meta.data;\n let total = 0;\n let i;\n for(i = 0; i < metaData.length; i++){\n const value = meta._parsed[i];\n if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n total += Math.abs(value);\n }\n }\n return total;\n }\n calculateCircumference(value) {\n const total = this._cachedMeta.total;\n if (total > 0 && !isNaN(value)) {\n return TAU * (Math.abs(value) / total);\n }\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index], chart.options.locale);\n return {\n label: labels[index] || '',\n value\n };\n }\n getMaxBorderWidth(arcs) {\n let max = 0;\n const chart = this.chart;\n let i, ilen, meta, controller, options;\n if (!arcs) {\n for(i = 0, ilen = chart.data.datasets.length; i < ilen; ++i){\n if (chart.isDatasetVisible(i)) {\n meta = chart.getDatasetMeta(i);\n arcs = meta.data;\n controller = meta.controller;\n break;\n }\n }\n }\n if (!arcs) {\n return 0;\n }\n for(i = 0, ilen = arcs.length; i < ilen; ++i){\n options = controller.resolveDataElementOptions(i);\n if (options.borderAlign !== 'inner') {\n max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n }\n }\n return max;\n }\n getMaxOffset(arcs) {\n let max = 0;\n for(let i = 0, ilen = arcs.length; i < ilen; ++i){\n const options = this.resolveDataElementOptions(i);\n max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n }\n return max;\n }\n _getRingWeightOffset(datasetIndex) {\n let ringWeightOffset = 0;\n for(let i = 0; i < datasetIndex; ++i){\n if (this.chart.isDatasetVisible(i)) {\n ringWeightOffset += this._getRingWeight(i);\n }\n }\n return ringWeightOffset;\n }\n _getRingWeight(datasetIndex) {\n return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n }\n _getVisibleDatasetWeightTotal() {\n return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n }\n}\n\nclass LineController extends DatasetController {\n static id = 'line';\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n showLine: true,\n spanGaps: false\n };\n static overrides = {\n scales: {\n _index_: {\n type: 'category'\n },\n _value_: {\n type: 'linear'\n }\n }\n };\n initialize() {\n this.enableOptionSharing = true;\n this.supportsDecimation = true;\n super.initialize();\n }\n update(mode) {\n const meta = this._cachedMeta;\n const { dataset: line , data: points = [] , _dataset } = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let { start , count } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n this.updateElements(points, start, count, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const { iScale , vScale , _stacked , _dataset } = this._cachedMeta;\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const { spanGaps , segment } = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n const end = start + count;\n const pointsCount = points.length;\n let prevParsed = start > 0 && this.getParsed(start - 1);\n for(let i = 0; i < pointsCount; ++i){\n const point = points[i];\n const properties = directUpdate ? point : {};\n if (i < start || i >= end) {\n properties.skip = true;\n continue;\n }\n const parsed = this.getParsed(i);\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n }\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n const data = meta.data || [];\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n draw() {\n const meta = this._cachedMeta;\n meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n super.draw();\n }\n}\n\nclass PolarAreaController extends DatasetController {\n static id = 'polarArea';\n static defaults = {\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: true\n },\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius'\n ]\n }\n },\n indexAxis: 'r',\n startAngle: 0\n };\n static overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels (chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const { labels: { pointStyle , color } } = chart.legend.options;\n return data.labels.map((label, i)=>{\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n fontColor: color,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick (e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n },\n scales: {\n r: {\n type: 'radialLinear',\n angleLines: {\n display: false\n },\n beginAtZero: true,\n grid: {\n circular: true\n },\n pointLabels: {\n display: false\n },\n startAngle: 0\n }\n }\n };\n constructor(chart, datasetIndex){\n super(chart, datasetIndex);\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n return {\n label: labels[index] || '',\n value\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n update(mode) {\n const arcs = this._cachedMeta.data;\n this._updateRadius();\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n getMinMax() {\n const meta = this._cachedMeta;\n const range = {\n min: Number.POSITIVE_INFINITY,\n max: Number.NEGATIVE_INFINITY\n };\n meta.data.forEach((element, index)=>{\n const parsed = this.getParsed(index).r;\n if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n if (parsed < range.min) {\n range.min = parsed;\n }\n if (parsed > range.max) {\n range.max = parsed;\n }\n }\n });\n return range;\n }\n _updateRadius() {\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n const outerRadius = Math.max(minSize / 2, 0);\n const innerRadius = Math.max(opts.cutoutPercentage ? outerRadius / 100 * opts.cutoutPercentage : 1, 0);\n const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n this.outerRadius = outerRadius - radiusLength * this.index;\n this.innerRadius = this.outerRadius - radiusLength;\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const scale = this._cachedMeta.rScale;\n const centerX = scale.xCenter;\n const centerY = scale.yCenter;\n const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n let angle = datasetStartAngle;\n let i;\n const defaultAngle = 360 / this.countVisibleElements();\n for(i = 0; i < start; ++i){\n angle += this._computeAngle(i, mode, defaultAngle);\n }\n for(i = start; i < start + count; i++){\n const arc = arcs[i];\n let startAngle = angle;\n let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n angle = endAngle;\n if (reset) {\n if (animationOpts.animateScale) {\n outerRadius = 0;\n }\n if (animationOpts.animateRotate) {\n startAngle = endAngle = datasetStartAngle;\n }\n }\n const properties = {\n x: centerX,\n y: centerY,\n innerRadius: 0,\n outerRadius,\n startAngle,\n endAngle,\n options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n };\n this.updateElement(arc, i, properties, mode);\n }\n }\n countVisibleElements() {\n const meta = this._cachedMeta;\n let count = 0;\n meta.data.forEach((element, index)=>{\n if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n count++;\n }\n });\n return count;\n }\n _computeAngle(index, mode, defaultAngle) {\n return this.chart.getDataVisibility(index) ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle) : 0;\n }\n}\n\nclass PieController extends DoughnutController {\n static id = 'pie';\n static defaults = {\n cutout: 0,\n rotation: 0,\n circumference: 360,\n radius: '100%'\n };\n}\n\nclass RadarController extends DatasetController {\n static id = 'radar';\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n indexAxis: 'r',\n showLine: true,\n elements: {\n line: {\n fill: 'start'\n }\n }\n };\n static overrides = {\n aspectRatio: 1,\n scales: {\n r: {\n type: 'radialLinear'\n }\n }\n };\n getLabelAndValue(index) {\n const vScale = this._cachedMeta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: vScale.getLabels()[index],\n value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n update(mode) {\n const meta = this._cachedMeta;\n const line = meta.dataset;\n const points = meta.data || [];\n const labels = meta.iScale.getLabels();\n line.points = points;\n if (mode !== 'resize') {\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n const properties = {\n _loop: true,\n _fullLoop: labels.length === points.length,\n options\n };\n this.updateElement(line, undefined, properties, mode);\n }\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const scale = this._cachedMeta.rScale;\n const reset = mode === 'reset';\n for(let i = start; i < start + count; i++){\n const point = points[i];\n const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n const x = reset ? scale.xCenter : pointPosition.x;\n const y = reset ? scale.yCenter : pointPosition.y;\n const properties = {\n x,\n y,\n angle: pointPosition.angle,\n skip: isNaN(x) || isNaN(y),\n options\n };\n this.updateElement(point, i, properties, mode);\n }\n }\n}\n\nclass ScatterController extends DatasetController {\n static id = 'scatter';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n showLine: false,\n fill: false\n };\n static overrides = {\n interaction: {\n mode: 'point'\n },\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const { xScale , yScale } = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + ')'\n };\n }\n update(mode) {\n const meta = this._cachedMeta;\n const { data: points = [] } = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let { start , count } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n if (this.options.showLine) {\n if (!this.datasetElementType) {\n this.addElements();\n }\n const { dataset: line , _dataset } = meta;\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n const options = this.resolveDatasetElementOptions(mode);\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n } else if (this.datasetElementType) {\n delete meta.dataset;\n this.datasetElementType = false;\n }\n this.updateElements(points, start, count, mode);\n }\n addElements() {\n const { showLine } = this.options;\n if (!this.datasetElementType && showLine) {\n this.datasetElementType = this.chart.registry.getElement('line');\n }\n super.addElements();\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const { iScale , vScale , _stacked , _dataset } = this._cachedMeta;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const { spanGaps , segment } = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n let prevParsed = start > 0 && this.getParsed(start - 1);\n for(let i = start; i < start + count; ++i){\n const point = points[i];\n const parsed = this.getParsed(i);\n const properties = directUpdate ? point : {};\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const data = meta.data || [];\n if (!this.options.showLine) {\n let max = 0;\n for(let i = data.length - 1; i >= 0; --i){\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n}\n\nvar controllers = /*#__PURE__*/Object.freeze({\n__proto__: null,\nBarController: BarController,\nBubbleController: BubbleController,\nDoughnutController: DoughnutController,\nLineController: LineController,\nPieController: PieController,\nPolarAreaController: PolarAreaController,\nRadarController: RadarController,\nScatterController: ScatterController\n});\n\n/**\n * @namespace Chart._adapters\n * @since 2.8.0\n * @private\n */ function abstract() {\n throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */ class DateAdapterBase {\n /**\n * Override default date adapter methods.\n * Accepts type parameter to define options type.\n * @example\n * Chart._adapters._date.override<{myAdapterOption: string}>({\n * init() {\n * console.log(this.options.myAdapterOption);\n * }\n * })\n */ static override(members) {\n Object.assign(DateAdapterBase.prototype, members);\n }\n options;\n constructor(options){\n this.options = options || {};\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n init() {}\n formats() {\n return abstract();\n }\n parse() {\n return abstract();\n }\n format() {\n return abstract();\n }\n add() {\n return abstract();\n }\n diff() {\n return abstract();\n }\n startOf() {\n return abstract();\n }\n endOf() {\n return abstract();\n }\n}\nvar adapters = {\n _date: DateAdapterBase\n};\n\nfunction binarySearch(metaset, axis, value, intersect) {\n const { controller , data , _sorted } = metaset;\n const iScale = controller._cachedMeta.iScale;\n const spanGaps = metaset.dataset ? metaset.dataset.options ? metaset.dataset.options.spanGaps : null : null;\n if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n if (!intersect) {\n const result = lookupMethod(data, axis, value);\n if (spanGaps) {\n const { vScale } = controller._cachedMeta;\n const { _parsed } = metaset;\n const distanceToDefinedLo = _parsed.slice(0, result.lo + 1).reverse().findIndex((point)=>!isNullOrUndef(point[vScale.axis]));\n result.lo -= Math.max(0, distanceToDefinedLo);\n const distanceToDefinedHi = _parsed.slice(result.hi).findIndex((point)=>!isNullOrUndef(point[vScale.axis]));\n result.hi += Math.max(0, distanceToDefinedHi);\n }\n return result;\n } else if (controller._sharedOptions) {\n const el = data[0];\n const range = typeof el.getRange === 'function' && el.getRange(axis);\n if (range) {\n const start = lookupMethod(data, axis, value - range);\n const end = lookupMethod(data, axis, value + range);\n return {\n lo: start.lo,\n hi: end.hi\n };\n }\n }\n }\n return {\n lo: 0,\n hi: data.length - 1\n };\n}\n function evaluateInteractionItems(chart, axis, position, handler, intersect) {\n const metasets = chart.getSortedVisibleDatasetMetas();\n const value = position[axis];\n for(let i = 0, ilen = metasets.length; i < ilen; ++i){\n const { index , data } = metasets[i];\n const { lo , hi } = binarySearch(metasets[i], axis, value, intersect);\n for(let j = lo; j <= hi; ++j){\n const element = data[j];\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\n function getDistanceMetricForAxis(axis) {\n const useX = axis.indexOf('x') !== -1;\n const useY = axis.indexOf('y') !== -1;\n return function(pt1, pt2) {\n const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n };\n}\n function getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n const items = [];\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return items;\n }\n const evaluationFunc = function(element, datasetIndex, index) {\n if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n return;\n }\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n };\n evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n return items;\n}\n function getNearestRadialItems(chart, position, axis, useFinalPosition) {\n let items = [];\n function evaluationFunc(element, datasetIndex, index) {\n const { startAngle , endAngle } = element.getProps([\n 'startAngle',\n 'endAngle'\n ], useFinalPosition);\n const { angle } = getAngleFromPoint(element, {\n x: position.x,\n y: position.y\n });\n if (_angleBetween(angle, startAngle, endAngle)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n function getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n let items = [];\n const distanceMetric = getDistanceMetricForAxis(axis);\n let minDistance = Number.POSITIVE_INFINITY;\n function evaluationFunc(element, datasetIndex, index) {\n const inRange = element.inRange(position.x, position.y, useFinalPosition);\n if (intersect && !inRange) {\n return;\n }\n const center = element.getCenterPoint(useFinalPosition);\n const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n if (!pointInArea && !inRange) {\n return;\n }\n const distance = distanceMetric(position, center);\n if (distance < minDistance) {\n items = [\n {\n element,\n datasetIndex,\n index\n }\n ];\n minDistance = distance;\n } else if (distance === minDistance) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n function getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return [];\n }\n return axis === 'r' && !intersect ? getNearestRadialItems(chart, position, axis, useFinalPosition) : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\n function getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n const items = [];\n const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n let intersectsItem = false;\n evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index)=>{\n if (element[rangeMethod] && element[rangeMethod](position[axis], useFinalPosition)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n }\n });\n if (intersect && !intersectsItem) {\n return [];\n }\n return items;\n}\n var Interaction = {\n evaluateInteractionItems,\n modes: {\n index (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'x';\n const includeInvisible = options.includeInvisible || false;\n const items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n const elements = [];\n if (!items.length) {\n return [];\n }\n chart.getSortedVisibleDatasetMetas().forEach((meta)=>{\n const index = items[0].index;\n const element = meta.data[index];\n if (element && !element.skip) {\n elements.push({\n element,\n datasetIndex: meta.index,\n index\n });\n }\n });\n return elements;\n },\n dataset (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n let items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n if (items.length > 0) {\n const datasetIndex = items[0].datasetIndex;\n const data = chart.getDatasetMeta(datasetIndex).data;\n items = [];\n for(let i = 0; i < data.length; ++i){\n items.push({\n element: data[i],\n datasetIndex,\n index: i\n });\n }\n }\n return items;\n },\n point (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n },\n nearest (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n },\n x (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n },\n y (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n }\n }\n};\n\nconst STATIC_POSITIONS = [\n 'left',\n 'top',\n 'right',\n 'bottom'\n];\nfunction filterByPosition(array, position) {\n return array.filter((v)=>v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n return array.filter((v)=>STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\nfunction sortByWeight(array, reverse) {\n return array.sort((a, b)=>{\n const v0 = reverse ? b : a;\n const v1 = reverse ? a : b;\n return v0.weight === v1.weight ? v0.index - v1.index : v0.weight - v1.weight;\n });\n}\nfunction wrapBoxes(boxes) {\n const layoutBoxes = [];\n let i, ilen, box, pos, stack, stackWeight;\n for(i = 0, ilen = (boxes || []).length; i < ilen; ++i){\n box = boxes[i];\n ({ position: pos , options: { stack , stackWeight =1 } } = box);\n layoutBoxes.push({\n index: i,\n box,\n pos,\n horizontal: box.isHorizontal(),\n weight: box.weight,\n stack: stack && pos + stack,\n stackWeight\n });\n }\n return layoutBoxes;\n}\nfunction buildStacks(layouts) {\n const stacks = {};\n for (const wrap of layouts){\n const { stack , pos , stackWeight } = wrap;\n if (!stack || !STATIC_POSITIONS.includes(pos)) {\n continue;\n }\n const _stack = stacks[stack] || (stacks[stack] = {\n count: 0,\n placed: 0,\n weight: 0,\n size: 0\n });\n _stack.count++;\n _stack.weight += stackWeight;\n }\n return stacks;\n}\n function setLayoutDims(layouts, params) {\n const stacks = buildStacks(layouts);\n const { vBoxMaxWidth , hBoxMaxHeight } = params;\n let i, ilen, layout;\n for(i = 0, ilen = layouts.length; i < ilen; ++i){\n layout = layouts[i];\n const { fullSize } = layout.box;\n const stack = stacks[layout.stack];\n const factor = stack && layout.stackWeight / stack.weight;\n if (layout.horizontal) {\n layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n layout.height = hBoxMaxHeight;\n } else {\n layout.width = vBoxMaxWidth;\n layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n }\n }\n return stacks;\n}\nfunction buildLayoutBoxes(boxes) {\n const layoutBoxes = wrapBoxes(boxes);\n const fullSize = sortByWeight(layoutBoxes.filter((wrap)=>wrap.box.fullSize), true);\n const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n return {\n fullSize,\n leftAndTop: left.concat(top),\n rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n vertical: left.concat(right).concat(centerVertical),\n horizontal: top.concat(bottom).concat(centerHorizontal)\n };\n}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\nfunction updateMaxPadding(maxPadding, boxPadding) {\n maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\nfunction updateDims(chartArea, params, layout, stacks) {\n const { pos , box } = layout;\n const maxPadding = chartArea.maxPadding;\n if (!isObject(pos)) {\n if (layout.size) {\n chartArea[pos] -= layout.size;\n }\n const stack = stacks[layout.stack] || {\n size: 0,\n count: 1\n };\n stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n layout.size = stack.size / stack.count;\n chartArea[pos] += layout.size;\n }\n if (box.getPadding) {\n updateMaxPadding(maxPadding, box.getPadding());\n }\n const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n const widthChanged = newWidth !== chartArea.w;\n const heightChanged = newHeight !== chartArea.h;\n chartArea.w = newWidth;\n chartArea.h = newHeight;\n return layout.horizontal ? {\n same: widthChanged,\n other: heightChanged\n } : {\n same: heightChanged,\n other: widthChanged\n };\n}\nfunction handleMaxPadding(chartArea) {\n const maxPadding = chartArea.maxPadding;\n function updatePos(pos) {\n const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n chartArea[pos] += change;\n return change;\n }\n chartArea.y += updatePos('top');\n chartArea.x += updatePos('left');\n updatePos('right');\n updatePos('bottom');\n}\nfunction getMargins(horizontal, chartArea) {\n const maxPadding = chartArea.maxPadding;\n function marginForPositions(positions) {\n const margin = {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n };\n positions.forEach((pos)=>{\n margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n });\n return margin;\n }\n return horizontal ? marginForPositions([\n 'left',\n 'right'\n ]) : marginForPositions([\n 'top',\n 'bottom'\n ]);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n const refitBoxes = [];\n let i, ilen, layout, box, refit, changed;\n for(i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i){\n layout = boxes[i];\n box = layout.box;\n box.update(layout.width || chartArea.w, layout.height || chartArea.h, getMargins(layout.horizontal, chartArea));\n const { same , other } = updateDims(chartArea, params, layout, stacks);\n refit |= same && refitBoxes.length;\n changed = changed || other;\n if (!box.fullSize) {\n refitBoxes.push(layout);\n }\n }\n return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\nfunction setBoxDims(box, left, top, width, height) {\n box.top = top;\n box.left = left;\n box.right = left + width;\n box.bottom = top + height;\n box.width = width;\n box.height = height;\n}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n const userPadding = params.padding;\n let { x , y } = chartArea;\n for (const layout of boxes){\n const box = layout.box;\n const stack = stacks[layout.stack] || {\n count: 1,\n placed: 0,\n weight: 1\n };\n const weight = layout.stackWeight / stack.weight || 1;\n if (layout.horizontal) {\n const width = chartArea.w * weight;\n const height = stack.size || box.height;\n if (defined(stack.start)) {\n y = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n } else {\n setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n }\n stack.start = y;\n stack.placed += width;\n y = box.bottom;\n } else {\n const height = chartArea.h * weight;\n const width = stack.size || box.width;\n if (defined(stack.start)) {\n x = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n } else {\n setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n }\n stack.start = x;\n stack.placed += height;\n x = box.right;\n }\n }\n chartArea.x = x;\n chartArea.y = y;\n}\nvar layouts = {\n addBox (chart, item) {\n if (!chart.boxes) {\n chart.boxes = [];\n }\n item.fullSize = item.fullSize || false;\n item.position = item.position || 'top';\n item.weight = item.weight || 0;\n item._layers = item._layers || function() {\n return [\n {\n z: 0,\n draw (chartArea) {\n item.draw(chartArea);\n }\n }\n ];\n };\n chart.boxes.push(item);\n },\n removeBox (chart, layoutItem) {\n const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n if (index !== -1) {\n chart.boxes.splice(index, 1);\n }\n },\n configure (chart, item, options) {\n item.fullSize = options.fullSize;\n item.position = options.position;\n item.weight = options.weight;\n },\n update (chart, width, height, minPadding) {\n if (!chart) {\n return;\n }\n const padding = toPadding(chart.options.layout.padding);\n const availableWidth = Math.max(width - padding.width, 0);\n const availableHeight = Math.max(height - padding.height, 0);\n const boxes = buildLayoutBoxes(chart.boxes);\n const verticalBoxes = boxes.vertical;\n const horizontalBoxes = boxes.horizontal;\n each(chart.boxes, (box)=>{\n if (typeof box.beforeLayout === 'function') {\n box.beforeLayout();\n }\n });\n const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap)=>wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n const params = Object.freeze({\n outerWidth: width,\n outerHeight: height,\n padding,\n availableWidth,\n availableHeight,\n vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n hBoxMaxHeight: availableHeight / 2\n });\n const maxPadding = Object.assign({}, padding);\n updateMaxPadding(maxPadding, toPadding(minPadding));\n const chartArea = Object.assign({\n maxPadding,\n w: availableWidth,\n h: availableHeight,\n x: padding.left,\n y: padding.top\n }, padding);\n const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n fitBoxes(boxes.fullSize, chartArea, params, stacks);\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n }\n handleMaxPadding(chartArea);\n placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n chartArea.x += chartArea.w;\n chartArea.y += chartArea.h;\n placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n chart.chartArea = {\n left: chartArea.left,\n top: chartArea.top,\n right: chartArea.left + chartArea.w,\n bottom: chartArea.top + chartArea.h,\n height: chartArea.h,\n width: chartArea.w\n };\n each(boxes.chartArea, (layout)=>{\n const box = layout.box;\n Object.assign(box, chart.chartArea);\n box.update(chartArea.w, chartArea.h, {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n });\n });\n }\n};\n\nclass BasePlatform {\n acquireContext(canvas, aspectRatio) {}\n releaseContext(context) {\n return false;\n }\n addEventListener(chart, type, listener) {}\n removeEventListener(chart, type, listener) {}\n getDevicePixelRatio() {\n return 1;\n }\n getMaximumSize(element, width, height, aspectRatio) {\n width = Math.max(0, width || element.width);\n height = height || element.height;\n return {\n width,\n height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n };\n }\n isAttached(canvas) {\n return true;\n }\n updateConfig(config) {\n }\n}\n\nclass BasicPlatform extends BasePlatform {\n acquireContext(item) {\n return item && item.getContext && item.getContext('2d') || null;\n }\n updateConfig(config) {\n config.options.animation = false;\n }\n}\n\nconst EXPANDO_KEY = '$chartjs';\n const EVENT_TYPES = {\n touchstart: 'mousedown',\n touchmove: 'mousemove',\n touchend: 'mouseup',\n pointerenter: 'mouseenter',\n pointerdown: 'mousedown',\n pointermove: 'mousemove',\n pointerup: 'mouseup',\n pointerleave: 'mouseout',\n pointerout: 'mouseout'\n};\nconst isNullOrEmpty = (value)=>value === null || value === '';\n function initCanvas(canvas, aspectRatio) {\n const style = canvas.style;\n const renderHeight = canvas.getAttribute('height');\n const renderWidth = canvas.getAttribute('width');\n canvas[EXPANDO_KEY] = {\n initial: {\n height: renderHeight,\n width: renderWidth,\n style: {\n display: style.display,\n height: style.height,\n width: style.width\n }\n }\n };\n style.display = style.display || 'block';\n style.boxSizing = style.boxSizing || 'border-box';\n if (isNullOrEmpty(renderWidth)) {\n const displayWidth = readUsedSize(canvas, 'width');\n if (displayWidth !== undefined) {\n canvas.width = displayWidth;\n }\n }\n if (isNullOrEmpty(renderHeight)) {\n if (canvas.style.height === '') {\n canvas.height = canvas.width / (aspectRatio || 2);\n } else {\n const displayHeight = readUsedSize(canvas, 'height');\n if (displayHeight !== undefined) {\n canvas.height = displayHeight;\n }\n }\n }\n return canvas;\n}\nconst eventListenerOptions = supportsEventListenerOptions ? {\n passive: true\n} : false;\nfunction addListener(node, type, listener) {\n if (node) {\n node.addEventListener(type, listener, eventListenerOptions);\n }\n}\nfunction removeListener(chart, type, listener) {\n if (chart && chart.canvas) {\n chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n }\n}\nfunction fromNativeEvent(event, chart) {\n const type = EVENT_TYPES[event.type] || event.type;\n const { x , y } = getRelativePosition(event, chart);\n return {\n type,\n chart,\n native: event,\n x: x !== undefined ? x : null,\n y: y !== undefined ? y : null\n };\n}\nfunction nodeListContains(nodeList, canvas) {\n for (const node of nodeList){\n if (node === canvas || node.contains(canvas)) {\n return true;\n }\n }\n}\nfunction createAttachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver((entries)=>{\n let trigger = false;\n for (const entry of entries){\n trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {\n childList: true,\n subtree: true\n });\n return observer;\n}\nfunction createDetachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver((entries)=>{\n let trigger = false;\n for (const entry of entries){\n trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {\n childList: true,\n subtree: true\n });\n return observer;\n}\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\nfunction onWindowResize() {\n const dpr = window.devicePixelRatio;\n if (dpr === oldDevicePixelRatio) {\n return;\n }\n oldDevicePixelRatio = dpr;\n drpListeningCharts.forEach((resize, chart)=>{\n if (chart.currentDevicePixelRatio !== dpr) {\n resize();\n }\n });\n}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n if (!drpListeningCharts.size) {\n window.addEventListener('resize', onWindowResize);\n }\n drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n drpListeningCharts.delete(chart);\n if (!drpListeningCharts.size) {\n window.removeEventListener('resize', onWindowResize);\n }\n}\nfunction createResizeObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n return;\n }\n const resize = throttled((width, height)=>{\n const w = container.clientWidth;\n listener(width, height);\n if (w < container.clientWidth) {\n listener();\n }\n }, window);\n const observer = new ResizeObserver((entries)=>{\n const entry = entries[0];\n const width = entry.contentRect.width;\n const height = entry.contentRect.height;\n if (width === 0 && height === 0) {\n return;\n }\n resize(width, height);\n });\n observer.observe(container);\n listenDevicePixelRatioChanges(chart, resize);\n return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n if (observer) {\n observer.disconnect();\n }\n if (type === 'resize') {\n unlistenDevicePixelRatioChanges(chart);\n }\n}\nfunction createProxyAndListen(chart, type, listener) {\n const canvas = chart.canvas;\n const proxy = throttled((event)=>{\n if (chart.ctx !== null) {\n listener(fromNativeEvent(event, chart));\n }\n }, chart);\n addListener(canvas, type, proxy);\n return proxy;\n}\n class DomPlatform extends BasePlatform {\n acquireContext(canvas, aspectRatio) {\n const context = canvas && canvas.getContext && canvas.getContext('2d');\n if (context && context.canvas === canvas) {\n initCanvas(canvas, aspectRatio);\n return context;\n }\n return null;\n }\n releaseContext(context) {\n const canvas = context.canvas;\n if (!canvas[EXPANDO_KEY]) {\n return false;\n }\n const initial = canvas[EXPANDO_KEY].initial;\n [\n 'height',\n 'width'\n ].forEach((prop)=>{\n const value = initial[prop];\n if (isNullOrUndef(value)) {\n canvas.removeAttribute(prop);\n } else {\n canvas.setAttribute(prop, value);\n }\n });\n const style = initial.style || {};\n Object.keys(style).forEach((key)=>{\n canvas.style[key] = style[key];\n });\n canvas.width = canvas.width;\n delete canvas[EXPANDO_KEY];\n return true;\n }\n addEventListener(chart, type, listener) {\n this.removeEventListener(chart, type);\n const proxies = chart.$proxies || (chart.$proxies = {});\n const handlers = {\n attach: createAttachObserver,\n detach: createDetachObserver,\n resize: createResizeObserver\n };\n const handler = handlers[type] || createProxyAndListen;\n proxies[type] = handler(chart, type, listener);\n }\n removeEventListener(chart, type) {\n const proxies = chart.$proxies || (chart.$proxies = {});\n const proxy = proxies[type];\n if (!proxy) {\n return;\n }\n const handlers = {\n attach: releaseObserver,\n detach: releaseObserver,\n resize: releaseObserver\n };\n const handler = handlers[type] || removeListener;\n handler(chart, type, proxy);\n proxies[type] = undefined;\n }\n getDevicePixelRatio() {\n return window.devicePixelRatio;\n }\n getMaximumSize(canvas, width, height, aspectRatio) {\n return getMaximumSize(canvas, width, height, aspectRatio);\n }\n isAttached(canvas) {\n const container = canvas && _getParentNode(canvas);\n return !!(container && container.isConnected);\n }\n}\n\nfunction _detectPlatform(canvas) {\n if (!_isDomSupported() || typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) {\n return BasicPlatform;\n }\n return DomPlatform;\n}\n\nclass Element {\n static defaults = {};\n static defaultRoutes = undefined;\n x;\n y;\n active = false;\n options;\n $animations;\n tooltipPosition(useFinalPosition) {\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return {\n x,\n y\n };\n }\n hasValue() {\n return isNumber(this.x) && isNumber(this.y);\n }\n getProps(props, final) {\n const anims = this.$animations;\n if (!final || !anims) {\n // let's not create an object, if not needed\n return this;\n }\n const ret = {};\n props.forEach((prop)=>{\n ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];\n });\n return ret;\n }\n}\n\nfunction autoSkip(scale, ticks) {\n const tickOpts = scale.options.ticks;\n const determinedMaxTicks = determineMaxTicks(scale);\n const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);\n const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n const numMajorIndices = majorIndices.length;\n const first = majorIndices[0];\n const last = majorIndices[numMajorIndices - 1];\n const newTicks = [];\n if (numMajorIndices > ticksLimit) {\n skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n return newTicks;\n }\n const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n if (numMajorIndices > 0) {\n let i, ilen;\n const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n for(i = 0, ilen = numMajorIndices - 1; i < ilen; i++){\n skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n }\n skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n return newTicks;\n }\n skip(ticks, newTicks, spacing);\n return newTicks;\n}\nfunction determineMaxTicks(scale) {\n const offset = scale.options.offset;\n const tickLength = scale._tickSize();\n const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n const maxChart = scale._maxLength / tickLength;\n return Math.floor(Math.min(maxScale, maxChart));\n}\n function calculateSpacing(majorIndices, ticks, ticksLimit) {\n const evenMajorSpacing = getEvenSpacing(majorIndices);\n const spacing = ticks.length / ticksLimit;\n if (!evenMajorSpacing) {\n return Math.max(spacing, 1);\n }\n const factors = _factorize(evenMajorSpacing);\n for(let i = 0, ilen = factors.length - 1; i < ilen; i++){\n const factor = factors[i];\n if (factor > spacing) {\n return factor;\n }\n }\n return Math.max(spacing, 1);\n}\n function getMajorIndices(ticks) {\n const result = [];\n let i, ilen;\n for(i = 0, ilen = ticks.length; i < ilen; i++){\n if (ticks[i].major) {\n result.push(i);\n }\n }\n return result;\n}\n function skipMajors(ticks, newTicks, majorIndices, spacing) {\n let count = 0;\n let next = majorIndices[0];\n let i;\n spacing = Math.ceil(spacing);\n for(i = 0; i < ticks.length; i++){\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = majorIndices[count * spacing];\n }\n }\n}\n function skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n const start = valueOrDefault(majorStart, 0);\n const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n let count = 0;\n let length, i, next;\n spacing = Math.ceil(spacing);\n if (majorEnd) {\n length = majorEnd - majorStart;\n spacing = length / Math.floor(length / spacing);\n }\n next = start;\n while(next < 0){\n count++;\n next = Math.round(start + count * spacing);\n }\n for(i = Math.max(start, 0); i < end; i++){\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = Math.round(start + count * spacing);\n }\n }\n}\n function getEvenSpacing(arr) {\n const len = arr.length;\n let i, diff;\n if (len < 2) {\n return false;\n }\n for(diff = arr[0], i = 1; i < len; ++i){\n if (arr[i] - arr[i - 1] !== diff) {\n return false;\n }\n }\n return diff;\n}\n\nconst reverseAlign = (align)=>align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset)=>edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nconst getTicksLimit = (ticksLength, maxTicksLimit)=>Math.min(maxTicksLimit || ticksLength, ticksLength);\n function sample(arr, numItems) {\n const result = [];\n const increment = arr.length / numItems;\n const len = arr.length;\n let i = 0;\n for(; i < len; i += increment){\n result.push(arr[Math.floor(i)]);\n }\n return result;\n}\n function getPixelForGridLine(scale, index, offsetGridLines) {\n const length = scale.ticks.length;\n const validIndex = Math.min(index, length - 1);\n const start = scale._startPixel;\n const end = scale._endPixel;\n const epsilon = 1e-6;\n let lineValue = scale.getPixelForTick(validIndex);\n let offset;\n if (offsetGridLines) {\n if (length === 1) {\n offset = Math.max(lineValue - start, end - lineValue);\n } else if (index === 0) {\n offset = (scale.getPixelForTick(1) - lineValue) / 2;\n } else {\n offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n }\n lineValue += validIndex < index ? offset : -offset;\n if (lineValue < start - epsilon || lineValue > end + epsilon) {\n return;\n }\n }\n return lineValue;\n}\n function garbageCollect(caches, length) {\n each(caches, (cache)=>{\n const gc = cache.gc;\n const gcLen = gc.length / 2;\n let i;\n if (gcLen > length) {\n for(i = 0; i < gcLen; ++i){\n delete cache.data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n });\n}\n function getTickMarkLength(options) {\n return options.drawTicks ? options.tickLength : 0;\n}\n function getTitleHeight(options, fallback) {\n if (!options.display) {\n return 0;\n }\n const font = toFont(options.font, fallback);\n const padding = toPadding(options.padding);\n const lines = isArray(options.text) ? options.text.length : 1;\n return lines * font.lineHeight + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n return createContext(parent, {\n scale,\n type: 'scale'\n });\n}\nfunction createTickContext(parent, index, tick) {\n return createContext(parent, {\n tick,\n index,\n type: 'tick'\n });\n}\nfunction titleAlign(align, position, reverse) {\n let ret = _toLeftRightCenter(align);\n if (reverse && position !== 'right' || !reverse && position === 'right') {\n ret = reverseAlign(ret);\n }\n return ret;\n}\nfunction titleArgs(scale, offset, position, align) {\n const { top , left , bottom , right , chart } = scale;\n const { chartArea , scales } = chart;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n const height = bottom - top;\n const width = right - left;\n if (scale.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n } else if (position === 'center') {\n titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n } else {\n titleY = offsetFromEdge(scale, position, offset);\n }\n maxWidth = right - left;\n } else {\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n } else if (position === 'center') {\n titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n } else {\n titleX = offsetFromEdge(scale, position, offset);\n }\n titleY = _alignStartEnd(align, bottom, top);\n rotation = position === 'left' ? -HALF_PI : HALF_PI;\n }\n return {\n titleX,\n titleY,\n maxWidth,\n rotation\n };\n}\nclass Scale extends Element {\n constructor(cfg){\n super();\n this.id = cfg.id;\n this.type = cfg.type;\n this.options = undefined;\n this.ctx = cfg.ctx;\n this.chart = cfg.chart;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this._margins = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n this.maxWidth = undefined;\n this.maxHeight = undefined;\n this.paddingTop = undefined;\n this.paddingBottom = undefined;\n this.paddingLeft = undefined;\n this.paddingRight = undefined;\n this.axis = undefined;\n this.labelRotation = undefined;\n this.min = undefined;\n this.max = undefined;\n this._range = undefined;\n this.ticks = [];\n this._gridLineItems = null;\n this._labelItems = null;\n this._labelSizes = null;\n this._length = 0;\n this._maxLength = 0;\n this._longestTextCache = {};\n this._startPixel = undefined;\n this._endPixel = undefined;\n this._reversePixels = false;\n this._userMax = undefined;\n this._userMin = undefined;\n this._suggestedMax = undefined;\n this._suggestedMin = undefined;\n this._ticksLength = 0;\n this._borderValue = 0;\n this._cache = {};\n this._dataLimitsCached = false;\n this.$context = undefined;\n }\n init(options) {\n this.options = options.setContext(this.getContext());\n this.axis = options.axis;\n this._userMin = this.parse(options.min);\n this._userMax = this.parse(options.max);\n this._suggestedMin = this.parse(options.suggestedMin);\n this._suggestedMax = this.parse(options.suggestedMax);\n }\n parse(raw, index) {\n return raw;\n }\n getUserBounds() {\n let { _userMin , _userMax , _suggestedMin , _suggestedMax } = this;\n _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n return {\n min: finiteOrDefault(_userMin, _suggestedMin),\n max: finiteOrDefault(_userMax, _suggestedMax),\n minDefined: isNumberFinite(_userMin),\n maxDefined: isNumberFinite(_userMax)\n };\n }\n getMinMax(canStack) {\n let { min , max , minDefined , maxDefined } = this.getUserBounds();\n let range;\n if (minDefined && maxDefined) {\n return {\n min,\n max\n };\n }\n const metas = this.getMatchingVisibleMetas();\n for(let i = 0, ilen = metas.length; i < ilen; ++i){\n range = metas[i].controller.getMinMax(this, canStack);\n if (!minDefined) {\n min = Math.min(min, range.min);\n }\n if (!maxDefined) {\n max = Math.max(max, range.max);\n }\n }\n min = maxDefined && min > max ? max : min;\n max = minDefined && min > max ? min : max;\n return {\n min: finiteOrDefault(min, finiteOrDefault(max, min)),\n max: finiteOrDefault(max, finiteOrDefault(min, max))\n };\n }\n getPadding() {\n return {\n left: this.paddingLeft || 0,\n top: this.paddingTop || 0,\n right: this.paddingRight || 0,\n bottom: this.paddingBottom || 0\n };\n }\n getTicks() {\n return this.ticks;\n }\n getLabels() {\n const data = this.chart.data;\n return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n }\n getLabelItems(chartArea = this.chart.chartArea) {\n const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n return items;\n }\n beforeLayout() {\n this._cache = {};\n this._dataLimitsCached = false;\n }\n beforeUpdate() {\n callback(this.options.beforeUpdate, [\n this\n ]);\n }\n update(maxWidth, maxHeight, margins) {\n const { beginAtZero , grace , ticks: tickOpts } = this.options;\n const sampleSize = tickOpts.sampleSize;\n this.beforeUpdate();\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins = Object.assign({\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, margins);\n this.ticks = null;\n this._labelSizes = null;\n this._gridLineItems = null;\n this._labelItems = null;\n this.beforeSetDimensions();\n this.setDimensions();\n this.afterSetDimensions();\n this._maxLength = this.isHorizontal() ? this.width + margins.left + margins.right : this.height + margins.top + margins.bottom;\n if (!this._dataLimitsCached) {\n this.beforeDataLimits();\n this.determineDataLimits();\n this.afterDataLimits();\n this._range = _addGrace(this, grace, beginAtZero);\n this._dataLimitsCached = true;\n }\n this.beforeBuildTicks();\n this.ticks = this.buildTicks() || [];\n this.afterBuildTicks();\n const samplingEnabled = sampleSize < this.ticks.length;\n this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n this.configure();\n this.beforeCalculateLabelRotation();\n this.calculateLabelRotation();\n this.afterCalculateLabelRotation();\n if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n this.ticks = autoSkip(this, this.ticks);\n this._labelSizes = null;\n this.afterAutoSkip();\n }\n if (samplingEnabled) {\n this._convertTicksToLabels(this.ticks);\n }\n this.beforeFit();\n this.fit();\n this.afterFit();\n this.afterUpdate();\n }\n configure() {\n let reversePixels = this.options.reverse;\n let startPixel, endPixel;\n if (this.isHorizontal()) {\n startPixel = this.left;\n endPixel = this.right;\n } else {\n startPixel = this.top;\n endPixel = this.bottom;\n reversePixels = !reversePixels;\n }\n this._startPixel = startPixel;\n this._endPixel = endPixel;\n this._reversePixels = reversePixels;\n this._length = endPixel - startPixel;\n this._alignToPixels = this.options.alignToPixels;\n }\n afterUpdate() {\n callback(this.options.afterUpdate, [\n this\n ]);\n }\n beforeSetDimensions() {\n callback(this.options.beforeSetDimensions, [\n this\n ]);\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = 0;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = 0;\n this.bottom = this.height;\n }\n this.paddingLeft = 0;\n this.paddingTop = 0;\n this.paddingRight = 0;\n this.paddingBottom = 0;\n }\n afterSetDimensions() {\n callback(this.options.afterSetDimensions, [\n this\n ]);\n }\n _callHooks(name) {\n this.chart.notifyPlugins(name, this.getContext());\n callback(this.options[name], [\n this\n ]);\n }\n beforeDataLimits() {\n this._callHooks('beforeDataLimits');\n }\n determineDataLimits() {}\n afterDataLimits() {\n this._callHooks('afterDataLimits');\n }\n beforeBuildTicks() {\n this._callHooks('beforeBuildTicks');\n }\n buildTicks() {\n return [];\n }\n afterBuildTicks() {\n this._callHooks('afterBuildTicks');\n }\n beforeTickToLabelConversion() {\n callback(this.options.beforeTickToLabelConversion, [\n this\n ]);\n }\n generateTickLabels(ticks) {\n const tickOpts = this.options.ticks;\n let i, ilen, tick;\n for(i = 0, ilen = ticks.length; i < ilen; i++){\n tick = ticks[i];\n tick.label = callback(tickOpts.callback, [\n tick.value,\n i,\n ticks\n ], this);\n }\n }\n afterTickToLabelConversion() {\n callback(this.options.afterTickToLabelConversion, [\n this\n ]);\n }\n beforeCalculateLabelRotation() {\n callback(this.options.beforeCalculateLabelRotation, [\n this\n ]);\n }\n calculateLabelRotation() {\n const options = this.options;\n const tickOpts = options.ticks;\n const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);\n const minRotation = tickOpts.minRotation || 0;\n const maxRotation = tickOpts.maxRotation;\n let labelRotation = minRotation;\n let tickWidth, maxHeight, maxLabelDiagonal;\n if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n this.labelRotation = minRotation;\n return;\n }\n const labelSizes = this._getLabelSizes();\n const maxLabelWidth = labelSizes.widest.width;\n const maxLabelHeight = labelSizes.highest.height;\n const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n if (maxLabelWidth + 6 > tickWidth) {\n tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n maxHeight = this.maxHeight - getTickMarkLength(options.grid) - tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n labelRotation = toDegrees(Math.min(Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)), Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))));\n labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n }\n this.labelRotation = labelRotation;\n }\n afterCalculateLabelRotation() {\n callback(this.options.afterCalculateLabelRotation, [\n this\n ]);\n }\n afterAutoSkip() {}\n beforeFit() {\n callback(this.options.beforeFit, [\n this\n ]);\n }\n fit() {\n const minSize = {\n width: 0,\n height: 0\n };\n const { chart , options: { ticks: tickOpts , title: titleOpts , grid: gridOpts } } = this;\n const display = this._isVisible();\n const isHorizontal = this.isHorizontal();\n if (display) {\n const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n if (isHorizontal) {\n minSize.width = this.maxWidth;\n minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n } else {\n minSize.height = this.maxHeight;\n minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n }\n if (tickOpts.display && this.ticks.length) {\n const { first , last , widest , highest } = this._getLabelSizes();\n const tickPadding = tickOpts.padding * 2;\n const angleRadians = toRadians(this.labelRotation);\n const cos = Math.cos(angleRadians);\n const sin = Math.sin(angleRadians);\n if (isHorizontal) {\n const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n } else {\n const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n }\n this._calculatePadding(first, last, sin, cos);\n }\n }\n this._handleMargins();\n if (isHorizontal) {\n this.width = this._length = chart.width - this._margins.left - this._margins.right;\n this.height = minSize.height;\n } else {\n this.width = minSize.width;\n this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n }\n }\n _calculatePadding(first, last, sin, cos) {\n const { ticks: { align , padding } , position } = this.options;\n const isRotated = this.labelRotation !== 0;\n const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n if (this.isHorizontal()) {\n const offsetLeft = this.getPixelForTick(0) - this.left;\n const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n let paddingLeft = 0;\n let paddingRight = 0;\n if (isRotated) {\n if (labelsBelowTicks) {\n paddingLeft = cos * first.width;\n paddingRight = sin * last.height;\n } else {\n paddingLeft = sin * first.height;\n paddingRight = cos * last.width;\n }\n } else if (align === 'start') {\n paddingRight = last.width;\n } else if (align === 'end') {\n paddingLeft = first.width;\n } else if (align !== 'inner') {\n paddingLeft = first.width / 2;\n paddingRight = last.width / 2;\n }\n this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n } else {\n let paddingTop = last.height / 2;\n let paddingBottom = first.height / 2;\n if (align === 'start') {\n paddingTop = 0;\n paddingBottom = first.height;\n } else if (align === 'end') {\n paddingTop = last.height;\n paddingBottom = 0;\n }\n this.paddingTop = paddingTop + padding;\n this.paddingBottom = paddingBottom + padding;\n }\n }\n _handleMargins() {\n if (this._margins) {\n this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n this._margins.top = Math.max(this.paddingTop, this._margins.top);\n this._margins.right = Math.max(this.paddingRight, this._margins.right);\n this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n }\n }\n afterFit() {\n callback(this.options.afterFit, [\n this\n ]);\n }\n isHorizontal() {\n const { axis , position } = this.options;\n return position === 'top' || position === 'bottom' || axis === 'x';\n }\n isFullSize() {\n return this.options.fullSize;\n }\n _convertTicksToLabels(ticks) {\n this.beforeTickToLabelConversion();\n this.generateTickLabels(ticks);\n let i, ilen;\n for(i = 0, ilen = ticks.length; i < ilen; i++){\n if (isNullOrUndef(ticks[i].label)) {\n ticks.splice(i, 1);\n ilen--;\n i--;\n }\n }\n this.afterTickToLabelConversion();\n }\n _getLabelSizes() {\n let labelSizes = this._labelSizes;\n if (!labelSizes) {\n const sampleSize = this.options.ticks.sampleSize;\n let ticks = this.ticks;\n if (sampleSize < ticks.length) {\n ticks = sample(ticks, sampleSize);\n }\n this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);\n }\n return labelSizes;\n }\n _computeLabelSizes(ticks, length, maxTicksLimit) {\n const { ctx , _longestTextCache: caches } = this;\n const widths = [];\n const heights = [];\n const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));\n let widestLabelSize = 0;\n let highestLabelSize = 0;\n let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n for(i = 0; i < length; i += increment){\n label = ticks[i].label;\n tickFont = this._resolveTickFontOptions(i);\n ctx.font = fontString = tickFont.string;\n cache = caches[fontString] = caches[fontString] || {\n data: {},\n gc: []\n };\n lineHeight = tickFont.lineHeight;\n width = height = 0;\n if (!isNullOrUndef(label) && !isArray(label)) {\n width = _measureText(ctx, cache.data, cache.gc, width, label);\n height = lineHeight;\n } else if (isArray(label)) {\n for(j = 0, jlen = label.length; j < jlen; ++j){\n nestedLabel = label[j];\n if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n height += lineHeight;\n }\n }\n }\n widths.push(width);\n heights.push(height);\n widestLabelSize = Math.max(width, widestLabelSize);\n highestLabelSize = Math.max(height, highestLabelSize);\n }\n garbageCollect(caches, length);\n const widest = widths.indexOf(widestLabelSize);\n const highest = heights.indexOf(highestLabelSize);\n const valueAt = (idx)=>({\n width: widths[idx] || 0,\n height: heights[idx] || 0\n });\n return {\n first: valueAt(0),\n last: valueAt(length - 1),\n widest: valueAt(widest),\n highest: valueAt(highest),\n widths,\n heights\n };\n }\n getLabelForValue(value) {\n return value;\n }\n getPixelForValue(value, index) {\n return NaN;\n }\n getValueForPixel(pixel) {}\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getPixelForDecimal(decimal) {\n if (this._reversePixels) {\n decimal = 1 - decimal;\n }\n const pixel = this._startPixel + decimal * this._length;\n return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n }\n getDecimalForPixel(pixel) {\n const decimal = (pixel - this._startPixel) / this._length;\n return this._reversePixels ? 1 - decimal : decimal;\n }\n getBasePixel() {\n return this.getPixelForValue(this.getBaseValue());\n }\n getBaseValue() {\n const { min , max } = this;\n return min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0;\n }\n getContext(index) {\n const ticks = this.ticks || [];\n if (index >= 0 && index < ticks.length) {\n const tick = ticks[index];\n return tick.$context || (tick.$context = createTickContext(this.getContext(), index, tick));\n }\n return this.$context || (this.$context = createScaleContext(this.chart.getContext(), this));\n }\n _tickSize() {\n const optionTicks = this.options.ticks;\n const rot = toRadians(this.labelRotation);\n const cos = Math.abs(Math.cos(rot));\n const sin = Math.abs(Math.sin(rot));\n const labelSizes = this._getLabelSizes();\n const padding = optionTicks.autoSkipPadding || 0;\n const w = labelSizes ? labelSizes.widest.width + padding : 0;\n const h = labelSizes ? labelSizes.highest.height + padding : 0;\n return this.isHorizontal() ? h * cos > w * sin ? w / cos : h / sin : h * sin < w * cos ? h / cos : w / sin;\n }\n _isVisible() {\n const display = this.options.display;\n if (display !== 'auto') {\n return !!display;\n }\n return this.getMatchingVisibleMetas().length > 0;\n }\n _computeGridLineItems(chartArea) {\n const axis = this.axis;\n const chart = this.chart;\n const options = this.options;\n const { grid , position , border } = options;\n const offset = grid.offset;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const ticksLength = ticks.length + (offset ? 1 : 0);\n const tl = getTickMarkLength(grid);\n const items = [];\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = borderOpts.display ? borderOpts.width : 0;\n const axisHalfWidth = axisWidth / 2;\n const alignBorderValue = function(pixel) {\n return _alignPixel(chart, pixel, axisWidth);\n };\n let borderValue, i, lineValue, alignedLineValue;\n let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n if (position === 'top') {\n borderValue = alignBorderValue(this.bottom);\n ty1 = this.bottom - tl;\n ty2 = borderValue - axisHalfWidth;\n y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n y2 = chartArea.bottom;\n } else if (position === 'bottom') {\n borderValue = alignBorderValue(this.top);\n y1 = chartArea.top;\n y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n ty1 = borderValue + axisHalfWidth;\n ty2 = this.top + tl;\n } else if (position === 'left') {\n borderValue = alignBorderValue(this.right);\n tx1 = this.right - tl;\n tx2 = borderValue - axisHalfWidth;\n x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n x2 = chartArea.right;\n } else if (position === 'right') {\n borderValue = alignBorderValue(this.left);\n x1 = chartArea.left;\n x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n tx1 = borderValue + axisHalfWidth;\n tx2 = this.left + tl;\n } else if (axis === 'x') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n y1 = chartArea.top;\n y2 = chartArea.bottom;\n ty1 = borderValue + axisHalfWidth;\n ty2 = ty1 + tl;\n } else if (axis === 'y') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n tx1 = borderValue - axisHalfWidth;\n tx2 = tx1 - tl;\n x1 = chartArea.left;\n x2 = chartArea.right;\n }\n const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n const step = Math.max(1, Math.ceil(ticksLength / limit));\n for(i = 0; i < ticksLength; i += step){\n const context = this.getContext(i);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n const lineWidth = optsAtIndex.lineWidth;\n const lineColor = optsAtIndex.color;\n const borderDash = optsAtIndexBorder.dash || [];\n const borderDashOffset = optsAtIndexBorder.dashOffset;\n const tickWidth = optsAtIndex.tickWidth;\n const tickColor = optsAtIndex.tickColor;\n const tickBorderDash = optsAtIndex.tickBorderDash || [];\n const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n lineValue = getPixelForGridLine(this, i, offset);\n if (lineValue === undefined) {\n continue;\n }\n alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n if (isHorizontal) {\n tx1 = tx2 = x1 = x2 = alignedLineValue;\n } else {\n ty1 = ty2 = y1 = y2 = alignedLineValue;\n }\n items.push({\n tx1,\n ty1,\n tx2,\n ty2,\n x1,\n y1,\n x2,\n y2,\n width: lineWidth,\n color: lineColor,\n borderDash,\n borderDashOffset,\n tickWidth,\n tickColor,\n tickBorderDash,\n tickBorderDashOffset\n });\n }\n this._ticksLength = ticksLength;\n this._borderValue = borderValue;\n return items;\n }\n _computeLabelItems(chartArea) {\n const axis = this.axis;\n const options = this.options;\n const { position , ticks: optionTicks } = options;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const { align , crossAlign , padding , mirror } = optionTicks;\n const tl = getTickMarkLength(options.grid);\n const tickAndPadding = tl + padding;\n const hTickAndPadding = mirror ? -padding : tickAndPadding;\n const rotation = -toRadians(this.labelRotation);\n const items = [];\n let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n let textBaseline = 'middle';\n if (position === 'top') {\n y = this.bottom - hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'bottom') {\n y = this.top + hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'left') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (position === 'right') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (axis === 'x') {\n if (position === 'center') {\n y = (chartArea.top + chartArea.bottom) / 2 + tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n }\n textAlign = this._getXAxisLabelAlignment();\n } else if (axis === 'y') {\n if (position === 'center') {\n x = (chartArea.left + chartArea.right) / 2 - tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n x = this.chart.scales[positionAxisID].getPixelForValue(value);\n }\n textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n }\n if (axis === 'y') {\n if (align === 'start') {\n textBaseline = 'top';\n } else if (align === 'end') {\n textBaseline = 'bottom';\n }\n }\n const labelSizes = this._getLabelSizes();\n for(i = 0, ilen = ticks.length; i < ilen; ++i){\n tick = ticks[i];\n label = tick.label;\n const optsAtIndex = optionTicks.setContext(this.getContext(i));\n pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n font = this._resolveTickFontOptions(i);\n lineHeight = font.lineHeight;\n lineCount = isArray(label) ? label.length : 1;\n const halfCount = lineCount / 2;\n const color = optsAtIndex.color;\n const strokeColor = optsAtIndex.textStrokeColor;\n const strokeWidth = optsAtIndex.textStrokeWidth;\n let tickTextAlign = textAlign;\n if (isHorizontal) {\n x = pixel;\n if (textAlign === 'inner') {\n if (i === ilen - 1) {\n tickTextAlign = !this.options.reverse ? 'right' : 'left';\n } else if (i === 0) {\n tickTextAlign = !this.options.reverse ? 'left' : 'right';\n } else {\n tickTextAlign = 'center';\n }\n }\n if (position === 'top') {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = -lineCount * lineHeight + lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n } else {\n textOffset = -labelSizes.highest.height + lineHeight / 2;\n }\n } else {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n } else {\n textOffset = labelSizes.highest.height - lineCount * lineHeight;\n }\n }\n if (mirror) {\n textOffset *= -1;\n }\n if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {\n x += lineHeight / 2 * Math.sin(rotation);\n }\n } else {\n y = pixel;\n textOffset = (1 - lineCount) * lineHeight / 2;\n }\n let backdrop;\n if (optsAtIndex.showLabelBackdrop) {\n const labelPadding = toPadding(optsAtIndex.backdropPadding);\n const height = labelSizes.heights[i];\n const width = labelSizes.widths[i];\n let top = textOffset - labelPadding.top;\n let left = 0 - labelPadding.left;\n switch(textBaseline){\n case 'middle':\n top -= height / 2;\n break;\n case 'bottom':\n top -= height;\n break;\n }\n switch(textAlign){\n case 'center':\n left -= width / 2;\n break;\n case 'right':\n left -= width;\n break;\n case 'inner':\n if (i === ilen - 1) {\n left -= width;\n } else if (i > 0) {\n left -= width / 2;\n }\n break;\n }\n backdrop = {\n left,\n top,\n width: width + labelPadding.width,\n height: height + labelPadding.height,\n color: optsAtIndex.backdropColor\n };\n }\n items.push({\n label,\n font,\n textOffset,\n options: {\n rotation,\n color,\n strokeColor,\n strokeWidth,\n textAlign: tickTextAlign,\n textBaseline,\n translation: [\n x,\n y\n ],\n backdrop\n }\n });\n }\n return items;\n }\n _getXAxisLabelAlignment() {\n const { position , ticks } = this.options;\n const rotation = -toRadians(this.labelRotation);\n if (rotation) {\n return position === 'top' ? 'left' : 'right';\n }\n let align = 'center';\n if (ticks.align === 'start') {\n align = 'left';\n } else if (ticks.align === 'end') {\n align = 'right';\n } else if (ticks.align === 'inner') {\n align = 'inner';\n }\n return align;\n }\n _getYAxisLabelAlignment(tl) {\n const { position , ticks: { crossAlign , mirror , padding } } = this.options;\n const labelSizes = this._getLabelSizes();\n const tickAndPadding = tl + padding;\n const widest = labelSizes.widest.width;\n let textAlign;\n let x;\n if (position === 'left') {\n if (mirror) {\n x = this.right + padding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x += widest;\n }\n } else {\n x = this.right - tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= widest / 2;\n } else {\n textAlign = 'left';\n x = this.left;\n }\n }\n } else if (position === 'right') {\n if (mirror) {\n x = this.left + padding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= widest / 2;\n } else {\n textAlign = 'left';\n x -= widest;\n }\n } else {\n x = this.left + tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x = this.right;\n }\n }\n } else {\n textAlign = 'right';\n }\n return {\n textAlign,\n x\n };\n }\n _computeLabelArea() {\n if (this.options.ticks.mirror) {\n return;\n }\n const chart = this.chart;\n const position = this.options.position;\n if (position === 'left' || position === 'right') {\n return {\n top: 0,\n left: this.left,\n bottom: chart.height,\n right: this.right\n };\n }\n if (position === 'top' || position === 'bottom') {\n return {\n top: this.top,\n left: 0,\n bottom: this.bottom,\n right: chart.width\n };\n }\n }\n drawBackground() {\n const { ctx , options: { backgroundColor } , left , top , width , height } = this;\n if (backgroundColor) {\n ctx.save();\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(left, top, width, height);\n ctx.restore();\n }\n }\n getLineWidthForValue(value) {\n const grid = this.options.grid;\n if (!this._isVisible() || !grid.display) {\n return 0;\n }\n const ticks = this.ticks;\n const index = ticks.findIndex((t)=>t.value === value);\n if (index >= 0) {\n const opts = grid.setContext(this.getContext(index));\n return opts.lineWidth;\n }\n return 0;\n }\n drawGrid(chartArea) {\n const grid = this.options.grid;\n const ctx = this.ctx;\n const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n let i, ilen;\n const drawLine = (p1, p2, style)=>{\n if (!style.width || !style.color) {\n return;\n }\n ctx.save();\n ctx.lineWidth = style.width;\n ctx.strokeStyle = style.color;\n ctx.setLineDash(style.borderDash || []);\n ctx.lineDashOffset = style.borderDashOffset;\n ctx.beginPath();\n ctx.moveTo(p1.x, p1.y);\n ctx.lineTo(p2.x, p2.y);\n ctx.stroke();\n ctx.restore();\n };\n if (grid.display) {\n for(i = 0, ilen = items.length; i < ilen; ++i){\n const item = items[i];\n if (grid.drawOnChartArea) {\n drawLine({\n x: item.x1,\n y: item.y1\n }, {\n x: item.x2,\n y: item.y2\n }, item);\n }\n if (grid.drawTicks) {\n drawLine({\n x: item.tx1,\n y: item.ty1\n }, {\n x: item.tx2,\n y: item.ty2\n }, {\n color: item.tickColor,\n width: item.tickWidth,\n borderDash: item.tickBorderDash,\n borderDashOffset: item.tickBorderDashOffset\n });\n }\n }\n }\n }\n drawBorder() {\n const { chart , ctx , options: { border , grid } } = this;\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = border.display ? borderOpts.width : 0;\n if (!axisWidth) {\n return;\n }\n const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n const borderValue = this._borderValue;\n let x1, x2, y1, y2;\n if (this.isHorizontal()) {\n x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n y1 = y2 = borderValue;\n } else {\n y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n x1 = x2 = borderValue;\n }\n ctx.save();\n ctx.lineWidth = borderOpts.width;\n ctx.strokeStyle = borderOpts.color;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n ctx.restore();\n }\n drawLabels(chartArea) {\n const optionTicks = this.options.ticks;\n if (!optionTicks.display) {\n return;\n }\n const ctx = this.ctx;\n const area = this._computeLabelArea();\n if (area) {\n clipArea(ctx, area);\n }\n const items = this.getLabelItems(chartArea);\n for (const item of items){\n const renderTextOptions = item.options;\n const tickFont = item.font;\n const label = item.label;\n const y = item.textOffset;\n renderText(ctx, label, 0, y, tickFont, renderTextOptions);\n }\n if (area) {\n unclipArea(ctx);\n }\n }\n drawTitle() {\n const { ctx , options: { position , title , reverse } } = this;\n if (!title.display) {\n return;\n }\n const font = toFont(title.font);\n const padding = toPadding(title.padding);\n const align = title.align;\n let offset = font.lineHeight / 2;\n if (position === 'bottom' || position === 'center' || isObject(position)) {\n offset += padding.bottom;\n if (isArray(title.text)) {\n offset += font.lineHeight * (title.text.length - 1);\n }\n } else {\n offset += padding.top;\n }\n const { titleX , titleY , maxWidth , rotation } = titleArgs(this, offset, position, align);\n renderText(ctx, title.text, 0, 0, font, {\n color: title.color,\n maxWidth,\n rotation,\n textAlign: titleAlign(align, position, reverse),\n textBaseline: 'middle',\n translation: [\n titleX,\n titleY\n ]\n });\n }\n draw(chartArea) {\n if (!this._isVisible()) {\n return;\n }\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawBorder();\n this.drawTitle();\n this.drawLabels(chartArea);\n }\n _layers() {\n const opts = this.options;\n const tz = opts.ticks && opts.ticks.z || 0;\n const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n const bz = valueOrDefault(opts.border && opts.border.z, 0);\n if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n return [\n {\n z: tz,\n draw: (chartArea)=>{\n this.draw(chartArea);\n }\n }\n ];\n }\n return [\n {\n z: gz,\n draw: (chartArea)=>{\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawTitle();\n }\n },\n {\n z: bz,\n draw: ()=>{\n this.drawBorder();\n }\n },\n {\n z: tz,\n draw: (chartArea)=>{\n this.drawLabels(chartArea);\n }\n }\n ];\n }\n getMatchingVisibleMetas(type) {\n const metas = this.chart.getSortedVisibleDatasetMetas();\n const axisID = this.axis + 'AxisID';\n const result = [];\n let i, ilen;\n for(i = 0, ilen = metas.length; i < ilen; ++i){\n const meta = metas[i];\n if (meta[axisID] === this.id && (!type || meta.type === type)) {\n result.push(meta);\n }\n }\n return result;\n }\n _resolveTickFontOptions(index) {\n const opts = this.options.ticks.setContext(this.getContext(index));\n return toFont(opts.font);\n }\n _maxDigits() {\n const fontSize = this._resolveTickFontOptions(0).lineHeight;\n return (this.isHorizontal() ? this.width : this.height) / fontSize;\n }\n}\n\nclass TypedRegistry {\n constructor(type, scope, override){\n this.type = type;\n this.scope = scope;\n this.override = override;\n this.items = Object.create(null);\n }\n isForType(type) {\n return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n }\n register(item) {\n const proto = Object.getPrototypeOf(item);\n let parentScope;\n if (isIChartComponent(proto)) {\n parentScope = this.register(proto);\n }\n const items = this.items;\n const id = item.id;\n const scope = this.scope + '.' + id;\n if (!id) {\n throw new Error('class does not have id: ' + item);\n }\n if (id in items) {\n return scope;\n }\n items[id] = item;\n registerDefaults(item, scope, parentScope);\n if (this.override) {\n defaults.override(item.id, item.overrides);\n }\n return scope;\n }\n get(id) {\n return this.items[id];\n }\n unregister(item) {\n const items = this.items;\n const id = item.id;\n const scope = this.scope;\n if (id in items) {\n delete items[id];\n }\n if (scope && id in defaults[scope]) {\n delete defaults[scope][id];\n if (this.override) {\n delete overrides[id];\n }\n }\n }\n}\nfunction registerDefaults(item, scope, parentScope) {\n const itemDefaults = merge(Object.create(null), [\n parentScope ? defaults.get(parentScope) : {},\n defaults.get(scope),\n item.defaults\n ]);\n defaults.set(scope, itemDefaults);\n if (item.defaultRoutes) {\n routeDefaults(scope, item.defaultRoutes);\n }\n if (item.descriptors) {\n defaults.describe(scope, item.descriptors);\n }\n}\nfunction routeDefaults(scope, routes) {\n Object.keys(routes).forEach((property)=>{\n const propertyParts = property.split('.');\n const sourceName = propertyParts.pop();\n const sourceScope = [\n scope\n ].concat(propertyParts).join('.');\n const parts = routes[property].split('.');\n const targetName = parts.pop();\n const targetScope = parts.join('.');\n defaults.route(sourceScope, sourceName, targetScope, targetName);\n });\n}\nfunction isIChartComponent(proto) {\n return 'id' in proto && 'defaults' in proto;\n}\n\nclass Registry {\n constructor(){\n this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n this.elements = new TypedRegistry(Element, 'elements');\n this.plugins = new TypedRegistry(Object, 'plugins');\n this.scales = new TypedRegistry(Scale, 'scales');\n this._typedRegistries = [\n this.controllers,\n this.scales,\n this.elements\n ];\n }\n add(...args) {\n this._each('register', args);\n }\n remove(...args) {\n this._each('unregister', args);\n }\n addControllers(...args) {\n this._each('register', args, this.controllers);\n }\n addElements(...args) {\n this._each('register', args, this.elements);\n }\n addPlugins(...args) {\n this._each('register', args, this.plugins);\n }\n addScales(...args) {\n this._each('register', args, this.scales);\n }\n getController(id) {\n return this._get(id, this.controllers, 'controller');\n }\n getElement(id) {\n return this._get(id, this.elements, 'element');\n }\n getPlugin(id) {\n return this._get(id, this.plugins, 'plugin');\n }\n getScale(id) {\n return this._get(id, this.scales, 'scale');\n }\n removeControllers(...args) {\n this._each('unregister', args, this.controllers);\n }\n removeElements(...args) {\n this._each('unregister', args, this.elements);\n }\n removePlugins(...args) {\n this._each('unregister', args, this.plugins);\n }\n removeScales(...args) {\n this._each('unregister', args, this.scales);\n }\n _each(method, args, typedRegistry) {\n [\n ...args\n ].forEach((arg)=>{\n const reg = typedRegistry || this._getRegistryForType(arg);\n if (typedRegistry || reg.isForType(arg) || reg === this.plugins && arg.id) {\n this._exec(method, reg, arg);\n } else {\n each(arg, (item)=>{\n const itemReg = typedRegistry || this._getRegistryForType(item);\n this._exec(method, itemReg, item);\n });\n }\n });\n }\n _exec(method, registry, component) {\n const camelMethod = _capitalize(method);\n callback(component['before' + camelMethod], [], component);\n registry[method](component);\n callback(component['after' + camelMethod], [], component);\n }\n _getRegistryForType(type) {\n for(let i = 0; i < this._typedRegistries.length; i++){\n const reg = this._typedRegistries[i];\n if (reg.isForType(type)) {\n return reg;\n }\n }\n return this.plugins;\n }\n _get(id, typedRegistry, type) {\n const item = typedRegistry.get(id);\n if (item === undefined) {\n throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n }\n return item;\n }\n}\nvar registry = /* #__PURE__ */ new Registry();\n\nclass PluginService {\n constructor(){\n this._init = [];\n }\n notify(chart, hook, args, filter) {\n if (hook === 'beforeInit') {\n this._init = this._createDescriptors(chart, true);\n this._notify(this._init, chart, 'install');\n }\n const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n const result = this._notify(descriptors, chart, hook, args);\n if (hook === 'afterDestroy') {\n this._notify(descriptors, chart, 'stop');\n this._notify(this._init, chart, 'uninstall');\n }\n return result;\n }\n _notify(descriptors, chart, hook, args) {\n args = args || {};\n for (const descriptor of descriptors){\n const plugin = descriptor.plugin;\n const method = plugin[hook];\n const params = [\n chart,\n args,\n descriptor.options\n ];\n if (callback(method, params, plugin) === false && args.cancelable) {\n return false;\n }\n }\n return true;\n }\n invalidate() {\n if (!isNullOrUndef(this._cache)) {\n this._oldCache = this._cache;\n this._cache = undefined;\n }\n }\n _descriptors(chart) {\n if (this._cache) {\n return this._cache;\n }\n const descriptors = this._cache = this._createDescriptors(chart);\n this._notifyStateChanges(chart);\n return descriptors;\n }\n _createDescriptors(chart, all) {\n const config = chart && chart.config;\n const options = valueOrDefault(config.options && config.options.plugins, {});\n const plugins = allPlugins(config);\n return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n }\n _notifyStateChanges(chart) {\n const previousDescriptors = this._oldCache || [];\n const descriptors = this._cache;\n const diff = (a, b)=>a.filter((x)=>!b.some((y)=>x.plugin.id === y.plugin.id));\n this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n }\n}\n function allPlugins(config) {\n const localIds = {};\n const plugins = [];\n const keys = Object.keys(registry.plugins.items);\n for(let i = 0; i < keys.length; i++){\n plugins.push(registry.getPlugin(keys[i]));\n }\n const local = config.plugins || [];\n for(let i = 0; i < local.length; i++){\n const plugin = local[i];\n if (plugins.indexOf(plugin) === -1) {\n plugins.push(plugin);\n localIds[plugin.id] = true;\n }\n }\n return {\n plugins,\n localIds\n };\n}\nfunction getOpts(options, all) {\n if (!all && options === false) {\n return null;\n }\n if (options === true) {\n return {};\n }\n return options;\n}\nfunction createDescriptors(chart, { plugins , localIds }, options, all) {\n const result = [];\n const context = chart.getContext();\n for (const plugin of plugins){\n const id = plugin.id;\n const opts = getOpts(options[id], all);\n if (opts === null) {\n continue;\n }\n result.push({\n plugin,\n options: pluginOpts(chart.config, {\n plugin,\n local: localIds[id]\n }, opts, context)\n });\n }\n return result;\n}\nfunction pluginOpts(config, { plugin , local }, opts, context) {\n const keys = config.pluginScopeKeys(plugin);\n const scopes = config.getOptionScopes(opts, keys);\n if (local && plugin.defaults) {\n scopes.push(plugin.defaults);\n }\n return config.createResolver(scopes, context, [\n ''\n ], {\n scriptable: false,\n indexable: false,\n allKeys: true\n });\n}\n\nfunction getIndexAxis(type, options) {\n const datasetDefaults = defaults.datasets[type] || {};\n const datasetOptions = (options.datasets || {})[type] || {};\n return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n let axis = id;\n if (id === '_index_') {\n axis = indexAxis;\n } else if (id === '_value_') {\n axis = indexAxis === 'x' ? 'y' : 'x';\n }\n return axis;\n}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n return axis === indexAxis ? '_index_' : '_value_';\n}\nfunction idMatchesAxis(id) {\n if (id === 'x' || id === 'y' || id === 'r') {\n return id;\n }\n}\nfunction axisFromPosition(position) {\n if (position === 'top' || position === 'bottom') {\n return 'x';\n }\n if (position === 'left' || position === 'right') {\n return 'y';\n }\n}\nfunction determineAxis(id, ...scaleOptions) {\n if (idMatchesAxis(id)) {\n return id;\n }\n for (const opts of scaleOptions){\n const axis = opts.axis || axisFromPosition(opts.position) || id.length > 1 && idMatchesAxis(id[0].toLowerCase());\n if (axis) {\n return axis;\n }\n }\n throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`);\n}\nfunction getAxisFromDataset(id, axis, dataset) {\n if (dataset[axis + 'AxisID'] === id) {\n return {\n axis\n };\n }\n}\nfunction retrieveAxisFromDatasets(id, config) {\n if (config.data && config.data.datasets) {\n const boundDs = config.data.datasets.filter((d)=>d.xAxisID === id || d.yAxisID === id);\n if (boundDs.length) {\n return getAxisFromDataset(id, 'x', boundDs[0]) || getAxisFromDataset(id, 'y', boundDs[0]);\n }\n }\n return {};\n}\nfunction mergeScaleConfig(config, options) {\n const chartDefaults = overrides[config.type] || {\n scales: {}\n };\n const configScales = options.scales || {};\n const chartIndexAxis = getIndexAxis(config.type, options);\n const scales = Object.create(null);\n Object.keys(configScales).forEach((id)=>{\n const scaleConf = configScales[id];\n if (!isObject(scaleConf)) {\n return console.error(`Invalid scale configuration for scale: ${id}`);\n }\n if (scaleConf._proxy) {\n return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n }\n const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]);\n const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n const defaultScaleOptions = chartDefaults.scales || {};\n scales[id] = mergeIf(Object.create(null), [\n {\n axis\n },\n scaleConf,\n defaultScaleOptions[axis],\n defaultScaleOptions[defaultId]\n ]);\n });\n config.data.datasets.forEach((dataset)=>{\n const type = dataset.type || config.type;\n const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n const datasetDefaults = overrides[type] || {};\n const defaultScaleOptions = datasetDefaults.scales || {};\n Object.keys(defaultScaleOptions).forEach((defaultID)=>{\n const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n const id = dataset[axis + 'AxisID'] || axis;\n scales[id] = scales[id] || Object.create(null);\n mergeIf(scales[id], [\n {\n axis\n },\n configScales[id],\n defaultScaleOptions[defaultID]\n ]);\n });\n });\n Object.keys(scales).forEach((key)=>{\n const scale = scales[key];\n mergeIf(scale, [\n defaults.scales[scale.type],\n defaults.scale\n ]);\n });\n return scales;\n}\nfunction initOptions(config) {\n const options = config.options || (config.options = {});\n options.plugins = valueOrDefault(options.plugins, {});\n options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n data = data || {};\n data.datasets = data.datasets || [];\n data.labels = data.labels || [];\n return data;\n}\nfunction initConfig(config) {\n config = config || {};\n config.data = initData(config.data);\n initOptions(config);\n return config;\n}\nconst keyCache = new Map();\nconst keysCached = new Set();\nfunction cachedKeys(cacheKey, generate) {\n let keys = keyCache.get(cacheKey);\n if (!keys) {\n keys = generate();\n keyCache.set(cacheKey, keys);\n keysCached.add(keys);\n }\n return keys;\n}\nconst addIfFound = (set, obj, key)=>{\n const opts = resolveObjectKey(obj, key);\n if (opts !== undefined) {\n set.add(opts);\n }\n};\nclass Config {\n constructor(config){\n this._config = initConfig(config);\n this._scopeCache = new Map();\n this._resolverCache = new Map();\n }\n get platform() {\n return this._config.platform;\n }\n get type() {\n return this._config.type;\n }\n set type(type) {\n this._config.type = type;\n }\n get data() {\n return this._config.data;\n }\n set data(data) {\n this._config.data = initData(data);\n }\n get options() {\n return this._config.options;\n }\n set options(options) {\n this._config.options = options;\n }\n get plugins() {\n return this._config.plugins;\n }\n update() {\n const config = this._config;\n this.clearCache();\n initOptions(config);\n }\n clearCache() {\n this._scopeCache.clear();\n this._resolverCache.clear();\n }\n datasetScopeKeys(datasetType) {\n return cachedKeys(datasetType, ()=>[\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n datasetAnimationScopeKeys(datasetType, transition) {\n return cachedKeys(`${datasetType}.transition.${transition}`, ()=>[\n [\n `datasets.${datasetType}.transitions.${transition}`,\n `transitions.${transition}`\n ],\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n datasetElementScopeKeys(datasetType, elementType) {\n return cachedKeys(`${datasetType}-${elementType}`, ()=>[\n [\n `datasets.${datasetType}.elements.${elementType}`,\n `datasets.${datasetType}`,\n `elements.${elementType}`,\n ''\n ]\n ]);\n }\n pluginScopeKeys(plugin) {\n const id = plugin.id;\n const type = this.type;\n return cachedKeys(`${type}-plugin-${id}`, ()=>[\n [\n `plugins.${id}`,\n ...plugin.additionalOptionScopes || []\n ]\n ]);\n }\n _cachedScopes(mainScope, resetCache) {\n const _scopeCache = this._scopeCache;\n let cache = _scopeCache.get(mainScope);\n if (!cache || resetCache) {\n cache = new Map();\n _scopeCache.set(mainScope, cache);\n }\n return cache;\n }\n getOptionScopes(mainScope, keyLists, resetCache) {\n const { options , type } = this;\n const cache = this._cachedScopes(mainScope, resetCache);\n const cached = cache.get(keyLists);\n if (cached) {\n return cached;\n }\n const scopes = new Set();\n keyLists.forEach((keys)=>{\n if (mainScope) {\n scopes.add(mainScope);\n keys.forEach((key)=>addIfFound(scopes, mainScope, key));\n }\n keys.forEach((key)=>addIfFound(scopes, options, key));\n keys.forEach((key)=>addIfFound(scopes, overrides[type] || {}, key));\n keys.forEach((key)=>addIfFound(scopes, defaults, key));\n keys.forEach((key)=>addIfFound(scopes, descriptors, key));\n });\n const array = Array.from(scopes);\n if (array.length === 0) {\n array.push(Object.create(null));\n }\n if (keysCached.has(keyLists)) {\n cache.set(keyLists, array);\n }\n return array;\n }\n chartOptionScopes() {\n const { options , type } = this;\n return [\n options,\n overrides[type] || {},\n defaults.datasets[type] || {},\n {\n type\n },\n defaults,\n descriptors\n ];\n }\n resolveNamedOptions(scopes, names, context, prefixes = [\n ''\n ]) {\n const result = {\n $shared: true\n };\n const { resolver , subPrefixes } = getResolver(this._resolverCache, scopes, prefixes);\n let options = resolver;\n if (needContext(resolver, names)) {\n result.$shared = false;\n context = isFunction(context) ? context() : context;\n const subResolver = this.createResolver(scopes, context, subPrefixes);\n options = _attachContext(resolver, context, subResolver);\n }\n for (const prop of names){\n result[prop] = options[prop];\n }\n return result;\n }\n createResolver(scopes, context, prefixes = [\n ''\n ], descriptorDefaults) {\n const { resolver } = getResolver(this._resolverCache, scopes, prefixes);\n return isObject(context) ? _attachContext(resolver, context, undefined, descriptorDefaults) : resolver;\n }\n}\nfunction getResolver(resolverCache, scopes, prefixes) {\n let cache = resolverCache.get(scopes);\n if (!cache) {\n cache = new Map();\n resolverCache.set(scopes, cache);\n }\n const cacheKey = prefixes.join();\n let cached = cache.get(cacheKey);\n if (!cached) {\n const resolver = _createResolver(scopes, prefixes);\n cached = {\n resolver,\n subPrefixes: prefixes.filter((p)=>!p.toLowerCase().includes('hover'))\n };\n cache.set(cacheKey, cached);\n }\n return cached;\n}\nconst hasFunction = (value)=>isObject(value) && Object.getOwnPropertyNames(value).some((key)=>isFunction(value[key]));\nfunction needContext(proxy, names) {\n const { isScriptable , isIndexable } = _descriptors(proxy);\n for (const prop of names){\n const scriptable = isScriptable(prop);\n const indexable = isIndexable(prop);\n const value = (indexable || scriptable) && proxy[prop];\n if (scriptable && (isFunction(value) || hasFunction(value)) || indexable && isArray(value)) {\n return true;\n }\n }\n return false;\n}\n\nvar version = \"4.4.8\";\n\nconst KNOWN_POSITIONS = [\n 'top',\n 'bottom',\n 'left',\n 'right',\n 'chartArea'\n];\nfunction positionIsHorizontal(position, axis) {\n return position === 'top' || position === 'bottom' || KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x';\n}\nfunction compare2Level(l1, l2) {\n return function(a, b) {\n return a[l1] === b[l1] ? a[l2] - b[l2] : a[l1] - b[l1];\n };\n}\nfunction onAnimationsComplete(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n chart.notifyPlugins('afterRender');\n callback(animationOptions && animationOptions.onComplete, [\n context\n ], chart);\n}\nfunction onAnimationProgress(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n callback(animationOptions && animationOptions.onProgress, [\n context\n ], chart);\n}\n function getCanvas(item) {\n if (_isDomSupported() && typeof item === 'string') {\n item = document.getElementById(item);\n } else if (item && item.length) {\n item = item[0];\n }\n if (item && item.canvas) {\n item = item.canvas;\n }\n return item;\n}\nconst instances = {};\nconst getChart = (key)=>{\n const canvas = getCanvas(key);\n return Object.values(instances).filter((c)=>c.canvas === canvas).pop();\n};\nfunction moveNumericKeys(obj, start, move) {\n const keys = Object.keys(obj);\n for (const key of keys){\n const intKey = +key;\n if (intKey >= start) {\n const value = obj[key];\n delete obj[key];\n if (move > 0 || intKey > start) {\n obj[intKey + move] = value;\n }\n }\n }\n}\n function determineLastEvent(e, lastEvent, inChartArea, isClick) {\n if (!inChartArea || e.type === 'mouseout') {\n return null;\n }\n if (isClick) {\n return lastEvent;\n }\n return e;\n}\nfunction getSizeForArea(scale, chartArea, field) {\n return scale.options.clip ? scale[field] : chartArea[field];\n}\nfunction getDatasetArea(meta, chartArea) {\n const { xScale , yScale } = meta;\n if (xScale && yScale) {\n return {\n left: getSizeForArea(xScale, chartArea, 'left'),\n right: getSizeForArea(xScale, chartArea, 'right'),\n top: getSizeForArea(yScale, chartArea, 'top'),\n bottom: getSizeForArea(yScale, chartArea, 'bottom')\n };\n }\n return chartArea;\n}\nclass Chart {\n static defaults = defaults;\n static instances = instances;\n static overrides = overrides;\n static registry = registry;\n static version = version;\n static getChart = getChart;\n static register(...items) {\n registry.add(...items);\n invalidatePlugins();\n }\n static unregister(...items) {\n registry.remove(...items);\n invalidatePlugins();\n }\n constructor(item, userConfig){\n const config = this.config = new Config(userConfig);\n const initialCanvas = getCanvas(item);\n const existingChart = getChart(initialCanvas);\n if (existingChart) {\n throw new Error('Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' + ' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.');\n }\n const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n this.platform.updateConfig(config);\n const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n const canvas = context && context.canvas;\n const height = canvas && canvas.height;\n const width = canvas && canvas.width;\n this.id = uid();\n this.ctx = context;\n this.canvas = canvas;\n this.width = width;\n this.height = height;\n this._options = options;\n this._aspectRatio = this.aspectRatio;\n this._layers = [];\n this._metasets = [];\n this._stacks = undefined;\n this.boxes = [];\n this.currentDevicePixelRatio = undefined;\n this.chartArea = undefined;\n this._active = [];\n this._lastEvent = undefined;\n this._listeners = {};\n this._responsiveListeners = undefined;\n this._sortedMetasets = [];\n this.scales = {};\n this._plugins = new PluginService();\n this.$proxies = {};\n this._hiddenIndices = {};\n this.attached = false;\n this._animationsDisabled = undefined;\n this.$context = undefined;\n this._doResize = debounce((mode)=>this.update(mode), options.resizeDelay || 0);\n this._dataChanges = [];\n instances[this.id] = this;\n if (!context || !canvas) {\n console.error(\"Failed to create chart: can't acquire context from the given item\");\n return;\n }\n animator.listen(this, 'complete', onAnimationsComplete);\n animator.listen(this, 'progress', onAnimationProgress);\n this._initialize();\n if (this.attached) {\n this.update();\n }\n }\n get aspectRatio() {\n const { options: { aspectRatio , maintainAspectRatio } , width , height , _aspectRatio } = this;\n if (!isNullOrUndef(aspectRatio)) {\n return aspectRatio;\n }\n if (maintainAspectRatio && _aspectRatio) {\n return _aspectRatio;\n }\n return height ? width / height : null;\n }\n get data() {\n return this.config.data;\n }\n set data(data) {\n this.config.data = data;\n }\n get options() {\n return this._options;\n }\n set options(options) {\n this.config.options = options;\n }\n get registry() {\n return registry;\n }\n _initialize() {\n this.notifyPlugins('beforeInit');\n if (this.options.responsive) {\n this.resize();\n } else {\n retinaScale(this, this.options.devicePixelRatio);\n }\n this.bindEvents();\n this.notifyPlugins('afterInit');\n return this;\n }\n clear() {\n clearCanvas(this.canvas, this.ctx);\n return this;\n }\n stop() {\n animator.stop(this);\n return this;\n }\n resize(width, height) {\n if (!animator.running(this)) {\n this._resize(width, height);\n } else {\n this._resizeBeforeDraw = {\n width,\n height\n };\n }\n }\n _resize(width, height) {\n const options = this.options;\n const canvas = this.canvas;\n const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n const mode = this.width ? 'resize' : 'attach';\n this.width = newSize.width;\n this.height = newSize.height;\n this._aspectRatio = this.aspectRatio;\n if (!retinaScale(this, newRatio, true)) {\n return;\n }\n this.notifyPlugins('resize', {\n size: newSize\n });\n callback(options.onResize, [\n this,\n newSize\n ], this);\n if (this.attached) {\n if (this._doResize(mode)) {\n this.render();\n }\n }\n }\n ensureScalesHaveIDs() {\n const options = this.options;\n const scalesOptions = options.scales || {};\n each(scalesOptions, (axisOptions, axisID)=>{\n axisOptions.id = axisID;\n });\n }\n buildOrUpdateScales() {\n const options = this.options;\n const scaleOpts = options.scales;\n const scales = this.scales;\n const updated = Object.keys(scales).reduce((obj, id)=>{\n obj[id] = false;\n return obj;\n }, {});\n let items = [];\n if (scaleOpts) {\n items = items.concat(Object.keys(scaleOpts).map((id)=>{\n const scaleOptions = scaleOpts[id];\n const axis = determineAxis(id, scaleOptions);\n const isRadial = axis === 'r';\n const isHorizontal = axis === 'x';\n return {\n options: scaleOptions,\n dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n };\n }));\n }\n each(items, (item)=>{\n const scaleOptions = item.options;\n const id = scaleOptions.id;\n const axis = determineAxis(id, scaleOptions);\n const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n scaleOptions.position = item.dposition;\n }\n updated[id] = true;\n let scale = null;\n if (id in scales && scales[id].type === scaleType) {\n scale = scales[id];\n } else {\n const scaleClass = registry.getScale(scaleType);\n scale = new scaleClass({\n id,\n type: scaleType,\n ctx: this.ctx,\n chart: this\n });\n scales[scale.id] = scale;\n }\n scale.init(scaleOptions, options);\n });\n each(updated, (hasUpdated, id)=>{\n if (!hasUpdated) {\n delete scales[id];\n }\n });\n each(scales, (scale)=>{\n layouts.configure(this, scale, scale.options);\n layouts.addBox(this, scale);\n });\n }\n _updateMetasets() {\n const metasets = this._metasets;\n const numData = this.data.datasets.length;\n const numMeta = metasets.length;\n metasets.sort((a, b)=>a.index - b.index);\n if (numMeta > numData) {\n for(let i = numData; i < numMeta; ++i){\n this._destroyDatasetMeta(i);\n }\n metasets.splice(numData, numMeta - numData);\n }\n this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n }\n _removeUnreferencedMetasets() {\n const { _metasets: metasets , data: { datasets } } = this;\n if (metasets.length > datasets.length) {\n delete this._stacks;\n }\n metasets.forEach((meta, index)=>{\n if (datasets.filter((x)=>x === meta._dataset).length === 0) {\n this._destroyDatasetMeta(index);\n }\n });\n }\n buildOrUpdateControllers() {\n const newControllers = [];\n const datasets = this.data.datasets;\n let i, ilen;\n this._removeUnreferencedMetasets();\n for(i = 0, ilen = datasets.length; i < ilen; i++){\n const dataset = datasets[i];\n let meta = this.getDatasetMeta(i);\n const type = dataset.type || this.config.type;\n if (meta.type && meta.type !== type) {\n this._destroyDatasetMeta(i);\n meta = this.getDatasetMeta(i);\n }\n meta.type = type;\n meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n meta.order = dataset.order || 0;\n meta.index = i;\n meta.label = '' + dataset.label;\n meta.visible = this.isDatasetVisible(i);\n if (meta.controller) {\n meta.controller.updateIndex(i);\n meta.controller.linkScales();\n } else {\n const ControllerClass = registry.getController(type);\n const { datasetElementType , dataElementType } = defaults.datasets[type];\n Object.assign(ControllerClass, {\n dataElementType: registry.getElement(dataElementType),\n datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n });\n meta.controller = new ControllerClass(this, i);\n newControllers.push(meta.controller);\n }\n }\n this._updateMetasets();\n return newControllers;\n }\n _resetElements() {\n each(this.data.datasets, (dataset, datasetIndex)=>{\n this.getDatasetMeta(datasetIndex).controller.reset();\n }, this);\n }\n reset() {\n this._resetElements();\n this.notifyPlugins('reset');\n }\n update(mode) {\n const config = this.config;\n config.update();\n const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n const animsDisabled = this._animationsDisabled = !options.animation;\n this._updateScales();\n this._checkEventBindings();\n this._updateHiddenIndices();\n this._plugins.invalidate();\n if (this.notifyPlugins('beforeUpdate', {\n mode,\n cancelable: true\n }) === false) {\n return;\n }\n const newControllers = this.buildOrUpdateControllers();\n this.notifyPlugins('beforeElementsUpdate');\n let minPadding = 0;\n for(let i = 0, ilen = this.data.datasets.length; i < ilen; i++){\n const { controller } = this.getDatasetMeta(i);\n const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n controller.buildOrUpdateElements(reset);\n minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n }\n minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n this._updateLayout(minPadding);\n if (!animsDisabled) {\n each(newControllers, (controller)=>{\n controller.reset();\n });\n }\n this._updateDatasets(mode);\n this.notifyPlugins('afterUpdate', {\n mode\n });\n this._layers.sort(compare2Level('z', '_idx'));\n const { _active , _lastEvent } = this;\n if (_lastEvent) {\n this._eventHandler(_lastEvent, true);\n } else if (_active.length) {\n this._updateHoverStyles(_active, _active, true);\n }\n this.render();\n }\n _updateScales() {\n each(this.scales, (scale)=>{\n layouts.removeBox(this, scale);\n });\n this.ensureScalesHaveIDs();\n this.buildOrUpdateScales();\n }\n _checkEventBindings() {\n const options = this.options;\n const existingEvents = new Set(Object.keys(this._listeners));\n const newEvents = new Set(options.events);\n if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n this.unbindEvents();\n this.bindEvents();\n }\n }\n _updateHiddenIndices() {\n const { _hiddenIndices } = this;\n const changes = this._getUniformDataChanges() || [];\n for (const { method , start , count } of changes){\n const move = method === '_removeElements' ? -count : count;\n moveNumericKeys(_hiddenIndices, start, move);\n }\n }\n _getUniformDataChanges() {\n const _dataChanges = this._dataChanges;\n if (!_dataChanges || !_dataChanges.length) {\n return;\n }\n this._dataChanges = [];\n const datasetCount = this.data.datasets.length;\n const makeSet = (idx)=>new Set(_dataChanges.filter((c)=>c[0] === idx).map((c, i)=>i + ',' + c.splice(1).join(',')));\n const changeSet = makeSet(0);\n for(let i = 1; i < datasetCount; i++){\n if (!setsEqual(changeSet, makeSet(i))) {\n return;\n }\n }\n return Array.from(changeSet).map((c)=>c.split(',')).map((a)=>({\n method: a[1],\n start: +a[2],\n count: +a[3]\n }));\n }\n _updateLayout(minPadding) {\n if (this.notifyPlugins('beforeLayout', {\n cancelable: true\n }) === false) {\n return;\n }\n layouts.update(this, this.width, this.height, minPadding);\n const area = this.chartArea;\n const noArea = area.width <= 0 || area.height <= 0;\n this._layers = [];\n each(this.boxes, (box)=>{\n if (noArea && box.position === 'chartArea') {\n return;\n }\n if (box.configure) {\n box.configure();\n }\n this._layers.push(...box._layers());\n }, this);\n this._layers.forEach((item, index)=>{\n item._idx = index;\n });\n this.notifyPlugins('afterLayout');\n }\n _updateDatasets(mode) {\n if (this.notifyPlugins('beforeDatasetsUpdate', {\n mode,\n cancelable: true\n }) === false) {\n return;\n }\n for(let i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n this.getDatasetMeta(i).controller.configure();\n }\n for(let i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n this._updateDataset(i, isFunction(mode) ? mode({\n datasetIndex: i\n }) : mode);\n }\n this.notifyPlugins('afterDatasetsUpdate', {\n mode\n });\n }\n _updateDataset(index, mode) {\n const meta = this.getDatasetMeta(index);\n const args = {\n meta,\n index,\n mode,\n cancelable: true\n };\n if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n return;\n }\n meta.controller._update(mode);\n args.cancelable = false;\n this.notifyPlugins('afterDatasetUpdate', args);\n }\n render() {\n if (this.notifyPlugins('beforeRender', {\n cancelable: true\n }) === false) {\n return;\n }\n if (animator.has(this)) {\n if (this.attached && !animator.running(this)) {\n animator.start(this);\n }\n } else {\n this.draw();\n onAnimationsComplete({\n chart: this\n });\n }\n }\n draw() {\n let i;\n if (this._resizeBeforeDraw) {\n const { width , height } = this._resizeBeforeDraw;\n this._resizeBeforeDraw = null;\n this._resize(width, height);\n }\n this.clear();\n if (this.width <= 0 || this.height <= 0) {\n return;\n }\n if (this.notifyPlugins('beforeDraw', {\n cancelable: true\n }) === false) {\n return;\n }\n const layers = this._layers;\n for(i = 0; i < layers.length && layers[i].z <= 0; ++i){\n layers[i].draw(this.chartArea);\n }\n this._drawDatasets();\n for(; i < layers.length; ++i){\n layers[i].draw(this.chartArea);\n }\n this.notifyPlugins('afterDraw');\n }\n _getSortedDatasetMetas(filterVisible) {\n const metasets = this._sortedMetasets;\n const result = [];\n let i, ilen;\n for(i = 0, ilen = metasets.length; i < ilen; ++i){\n const meta = metasets[i];\n if (!filterVisible || meta.visible) {\n result.push(meta);\n }\n }\n return result;\n }\n getSortedVisibleDatasetMetas() {\n return this._getSortedDatasetMetas(true);\n }\n _drawDatasets() {\n if (this.notifyPlugins('beforeDatasetsDraw', {\n cancelable: true\n }) === false) {\n return;\n }\n const metasets = this.getSortedVisibleDatasetMetas();\n for(let i = metasets.length - 1; i >= 0; --i){\n this._drawDataset(metasets[i]);\n }\n this.notifyPlugins('afterDatasetsDraw');\n }\n _drawDataset(meta) {\n const ctx = this.ctx;\n const clip = meta._clip;\n const useClip = !clip.disabled;\n const area = getDatasetArea(meta, this.chartArea);\n const args = {\n meta,\n index: meta.index,\n cancelable: true\n };\n if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n return;\n }\n if (useClip) {\n clipArea(ctx, {\n left: clip.left === false ? 0 : area.left - clip.left,\n right: clip.right === false ? this.width : area.right + clip.right,\n top: clip.top === false ? 0 : area.top - clip.top,\n bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom\n });\n }\n meta.controller.draw();\n if (useClip) {\n unclipArea(ctx);\n }\n args.cancelable = false;\n this.notifyPlugins('afterDatasetDraw', args);\n }\n isPointInArea(point) {\n return _isPointInArea(point, this.chartArea, this._minPadding);\n }\n getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n const method = Interaction.modes[mode];\n if (typeof method === 'function') {\n return method(this, e, options, useFinalPosition);\n }\n return [];\n }\n getDatasetMeta(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n const metasets = this._metasets;\n let meta = metasets.filter((x)=>x && x._dataset === dataset).pop();\n if (!meta) {\n meta = {\n type: null,\n data: [],\n dataset: null,\n controller: null,\n hidden: null,\n xAxisID: null,\n yAxisID: null,\n order: dataset && dataset.order || 0,\n index: datasetIndex,\n _dataset: dataset,\n _parsed: [],\n _sorted: false\n };\n metasets.push(meta);\n }\n return meta;\n }\n getContext() {\n return this.$context || (this.$context = createContext(null, {\n chart: this,\n type: 'chart'\n }));\n }\n getVisibleDatasetCount() {\n return this.getSortedVisibleDatasetMetas().length;\n }\n isDatasetVisible(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n if (!dataset) {\n return false;\n }\n const meta = this.getDatasetMeta(datasetIndex);\n return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n }\n setDatasetVisibility(datasetIndex, visible) {\n const meta = this.getDatasetMeta(datasetIndex);\n meta.hidden = !visible;\n }\n toggleDataVisibility(index) {\n this._hiddenIndices[index] = !this._hiddenIndices[index];\n }\n getDataVisibility(index) {\n return !this._hiddenIndices[index];\n }\n _updateVisibility(datasetIndex, dataIndex, visible) {\n const mode = visible ? 'show' : 'hide';\n const meta = this.getDatasetMeta(datasetIndex);\n const anims = meta.controller._resolveAnimations(undefined, mode);\n if (defined(dataIndex)) {\n meta.data[dataIndex].hidden = !visible;\n this.update();\n } else {\n this.setDatasetVisibility(datasetIndex, visible);\n anims.update(meta, {\n visible\n });\n this.update((ctx)=>ctx.datasetIndex === datasetIndex ? mode : undefined);\n }\n }\n hide(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, false);\n }\n show(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, true);\n }\n _destroyDatasetMeta(datasetIndex) {\n const meta = this._metasets[datasetIndex];\n if (meta && meta.controller) {\n meta.controller._destroy();\n }\n delete this._metasets[datasetIndex];\n }\n _stop() {\n let i, ilen;\n this.stop();\n animator.remove(this);\n for(i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n this._destroyDatasetMeta(i);\n }\n }\n destroy() {\n this.notifyPlugins('beforeDestroy');\n const { canvas , ctx } = this;\n this._stop();\n this.config.clearCache();\n if (canvas) {\n this.unbindEvents();\n clearCanvas(canvas, ctx);\n this.platform.releaseContext(ctx);\n this.canvas = null;\n this.ctx = null;\n }\n delete instances[this.id];\n this.notifyPlugins('afterDestroy');\n }\n toBase64Image(...args) {\n return this.canvas.toDataURL(...args);\n }\n bindEvents() {\n this.bindUserEvents();\n if (this.options.responsive) {\n this.bindResponsiveEvents();\n } else {\n this.attached = true;\n }\n }\n bindUserEvents() {\n const listeners = this._listeners;\n const platform = this.platform;\n const _add = (type, listener)=>{\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const listener = (e, x, y)=>{\n e.offsetX = x;\n e.offsetY = y;\n this._eventHandler(e);\n };\n each(this.options.events, (type)=>_add(type, listener));\n }\n bindResponsiveEvents() {\n if (!this._responsiveListeners) {\n this._responsiveListeners = {};\n }\n const listeners = this._responsiveListeners;\n const platform = this.platform;\n const _add = (type, listener)=>{\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const _remove = (type, listener)=>{\n if (listeners[type]) {\n platform.removeEventListener(this, type, listener);\n delete listeners[type];\n }\n };\n const listener = (width, height)=>{\n if (this.canvas) {\n this.resize(width, height);\n }\n };\n let detached;\n const attached = ()=>{\n _remove('attach', attached);\n this.attached = true;\n this.resize();\n _add('resize', listener);\n _add('detach', detached);\n };\n detached = ()=>{\n this.attached = false;\n _remove('resize', listener);\n this._stop();\n this._resize(0, 0);\n _add('attach', attached);\n };\n if (platform.isAttached(this.canvas)) {\n attached();\n } else {\n detached();\n }\n }\n unbindEvents() {\n each(this._listeners, (listener, type)=>{\n this.platform.removeEventListener(this, type, listener);\n });\n this._listeners = {};\n each(this._responsiveListeners, (listener, type)=>{\n this.platform.removeEventListener(this, type, listener);\n });\n this._responsiveListeners = undefined;\n }\n updateHoverStyle(items, mode, enabled) {\n const prefix = enabled ? 'set' : 'remove';\n let meta, item, i, ilen;\n if (mode === 'dataset') {\n meta = this.getDatasetMeta(items[0].datasetIndex);\n meta.controller['_' + prefix + 'DatasetHoverStyle']();\n }\n for(i = 0, ilen = items.length; i < ilen; ++i){\n item = items[i];\n const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n if (controller) {\n controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n }\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements) {\n const lastActive = this._active || [];\n const active = activeElements.map(({ datasetIndex , index })=>{\n const meta = this.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('No dataset found at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index\n };\n });\n const changed = !_elementsEqual(active, lastActive);\n if (changed) {\n this._active = active;\n this._lastEvent = null;\n this._updateHoverStyles(active, lastActive);\n }\n }\n notifyPlugins(hook, args, filter) {\n return this._plugins.notify(this, hook, args, filter);\n }\n isPluginEnabled(pluginId) {\n return this._plugins._cache.filter((p)=>p.plugin.id === pluginId).length === 1;\n }\n _updateHoverStyles(active, lastActive, replay) {\n const hoverOptions = this.options.hover;\n const diff = (a, b)=>a.filter((x)=>!b.some((y)=>x.datasetIndex === y.datasetIndex && x.index === y.index));\n const deactivated = diff(lastActive, active);\n const activated = replay ? active : diff(active, lastActive);\n if (deactivated.length) {\n this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n }\n if (activated.length && hoverOptions.mode) {\n this.updateHoverStyle(activated, hoverOptions.mode, true);\n }\n }\n _eventHandler(e, replay) {\n const args = {\n event: e,\n replay,\n cancelable: true,\n inChartArea: this.isPointInArea(e)\n };\n const eventFilter = (plugin)=>(plugin.options.events || this.options.events).includes(e.native.type);\n if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n return;\n }\n const changed = this._handleEvent(e, replay, args.inChartArea);\n args.cancelable = false;\n this.notifyPlugins('afterEvent', args, eventFilter);\n if (changed || args.changed) {\n this.render();\n }\n return this;\n }\n _handleEvent(e, replay, inChartArea) {\n const { _active: lastActive = [] , options } = this;\n const useFinalPosition = replay;\n const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n const isClick = _isClickEvent(e);\n const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n if (inChartArea) {\n this._lastEvent = null;\n callback(options.onHover, [\n e,\n active,\n this\n ], this);\n if (isClick) {\n callback(options.onClick, [\n e,\n active,\n this\n ], this);\n }\n }\n const changed = !_elementsEqual(active, lastActive);\n if (changed || replay) {\n this._active = active;\n this._updateHoverStyles(active, lastActive, replay);\n }\n this._lastEvent = lastEvent;\n return changed;\n }\n _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive;\n }\n const hoverOptions = this.options.hover;\n return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n }\n}\nfunction invalidatePlugins() {\n return each(Chart.instances, (chart)=>chart._plugins.invalidate());\n}\n\nfunction clipArc(ctx, element, endAngle) {\n const { startAngle , pixelMargin , x , y , outerRadius , innerRadius } = element;\n let angleMargin = pixelMargin / outerRadius;\n // Draw an inner border by clipping the arc and drawing a double-width border\n // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n if (innerRadius > pixelMargin) {\n angleMargin = pixelMargin / innerRadius;\n ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n } else {\n ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n }\n ctx.closePath();\n ctx.clip();\n}\nfunction toRadiusCorners(value) {\n return _readValueToProps(value, [\n 'outerStart',\n 'outerEnd',\n 'innerStart',\n 'innerEnd'\n ]);\n}\n/**\n * Parse border radius from the provided options\n */ function parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n const o = toRadiusCorners(arc.options.borderRadius);\n const halfThickness = (outerRadius - innerRadius) / 2;\n const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n // Outer limits are complicated. We want to compute the available angular distance at\n // a radius of outerRadius - borderRadius because for small angular distances, this term limits.\n // We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.\n //\n // If the borderRadius is large, that value can become negative.\n // This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius\n // we know that the thickness term will dominate and compute the limits at that point\n const computeOuterLimit = (val)=>{\n const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n };\n return {\n outerStart: computeOuterLimit(o.outerStart),\n outerEnd: computeOuterLimit(o.outerEnd),\n innerStart: _limitValue(o.innerStart, 0, innerLimit),\n innerEnd: _limitValue(o.innerEnd, 0, innerLimit)\n };\n}\n/**\n * Convert (r, 𝜃) to (x, y)\n */ function rThetaToXY(r, theta, x, y) {\n return {\n x: x + r * Math.cos(theta),\n y: y + r * Math.sin(theta)\n };\n}\n/**\n * Path the arc, respecting border radius by separating into left and right halves.\n *\n * Start End\n *\n * 1--->a--->2 Outer\n * / \\\n * 8 3\n * | |\n * | |\n * 7 4\n * \\ /\n * 6<---b<---5 Inner\n */ function pathArc(ctx, element, offset, spacing, end, circular) {\n const { x , y , startAngle: start , pixelMargin , innerRadius: innerR } = element;\n const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n let spacingOffset = 0;\n const alpha = end - start;\n if (spacing) {\n // When spacing is present, it is the same for all items\n // So we adjust the start and end angle of the arc such that\n // the distance is the same as it would be without the spacing\n const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n const adjustedAngle = avNogSpacingRadius !== 0 ? alpha * avNogSpacingRadius / (avNogSpacingRadius + spacing) : alpha;\n spacingOffset = (alpha - adjustedAngle) / 2;\n }\n const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n const angleOffset = (alpha - beta) / 2;\n const startAngle = start + angleOffset + spacingOffset;\n const endAngle = end - angleOffset - spacingOffset;\n const { outerStart , outerEnd , innerStart , innerEnd } = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);\n const outerStartAdjustedRadius = outerRadius - outerStart;\n const outerEndAdjustedRadius = outerRadius - outerEnd;\n const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n const innerStartAdjustedRadius = innerRadius + innerStart;\n const innerEndAdjustedRadius = innerRadius + innerEnd;\n const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n ctx.beginPath();\n if (circular) {\n // The first arc segments from point 1 to point a to point 2\n const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;\n ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);\n ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);\n // The corner segment from point 2 to point 3\n if (outerEnd > 0) {\n const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n }\n // The line from point 3 to point 4\n const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n ctx.lineTo(p4.x, p4.y);\n // The corner segment from point 4 to point 5\n if (innerEnd > 0) {\n const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n }\n // The inner arc from point 5 to point b to point 6\n const innerMidAdjustedAngle = (endAngle - innerEnd / innerRadius + (startAngle + innerStart / innerRadius)) / 2;\n ctx.arc(x, y, innerRadius, endAngle - innerEnd / innerRadius, innerMidAdjustedAngle, true);\n ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + innerStart / innerRadius, true);\n // The corner segment from point 6 to point 7\n if (innerStart > 0) {\n const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n }\n // The line from point 7 to point 8\n const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n ctx.lineTo(p8.x, p8.y);\n // The corner segment from point 8 to point 1\n if (outerStart > 0) {\n const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n }\n } else {\n ctx.moveTo(x, y);\n const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerStartX, outerStartY);\n const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerEndX, outerEndY);\n }\n ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing, circular) {\n const { fullCircles , startAngle , circumference } = element;\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for(let i = 0; i < fullCircles; ++i){\n ctx.fill();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.fill();\n return endAngle;\n}\nfunction drawBorder(ctx, element, offset, spacing, circular) {\n const { fullCircles , startAngle , circumference , options } = element;\n const { borderWidth , borderJoinStyle , borderDash , borderDashOffset } = options;\n const inner = options.borderAlign === 'inner';\n if (!borderWidth) {\n return;\n }\n ctx.setLineDash(borderDash || []);\n ctx.lineDashOffset = borderDashOffset;\n if (inner) {\n ctx.lineWidth = borderWidth * 2;\n ctx.lineJoin = borderJoinStyle || 'round';\n } else {\n ctx.lineWidth = borderWidth;\n ctx.lineJoin = borderJoinStyle || 'bevel';\n }\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for(let i = 0; i < fullCircles; ++i){\n ctx.stroke();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n if (inner) {\n clipArc(ctx, element, endAngle);\n }\n if (!fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.stroke();\n }\n}\nclass ArcElement extends Element {\n static id = 'arc';\n static defaults = {\n borderAlign: 'center',\n borderColor: '#fff',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: undefined,\n borderRadius: 0,\n borderWidth: 2,\n offset: 0,\n spacing: 0,\n angle: undefined,\n circular: true\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor'\n };\n static descriptors = {\n _scriptable: true,\n _indexable: (name)=>name !== 'borderDash'\n };\n circumference;\n endAngle;\n fullCircles;\n innerRadius;\n outerRadius;\n pixelMargin;\n startAngle;\n constructor(cfg){\n super();\n this.options = undefined;\n this.circumference = undefined;\n this.startAngle = undefined;\n this.endAngle = undefined;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.pixelMargin = 0;\n this.fullCircles = 0;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(chartX, chartY, useFinalPosition) {\n const point = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n const { angle , distance } = getAngleFromPoint(point, {\n x: chartX,\n y: chartY\n });\n const { startAngle , endAngle , innerRadius , outerRadius , circumference } = this.getProps([\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'circumference'\n ], useFinalPosition);\n const rAdjust = (this.options.spacing + this.options.borderWidth) / 2;\n const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n const nonZeroBetween = _angleBetween(angle, startAngle, endAngle) && startAngle !== endAngle;\n const betweenAngles = _circumference >= TAU || nonZeroBetween;\n const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n return betweenAngles && withinRadius;\n }\n getCenterPoint(useFinalPosition) {\n const { x , y , startAngle , endAngle , innerRadius , outerRadius } = this.getProps([\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius'\n ], useFinalPosition);\n const { offset , spacing } = this.options;\n const halfAngle = (startAngle + endAngle) / 2;\n const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n return {\n x: x + Math.cos(halfAngle) * halfRadius,\n y: y + Math.sin(halfAngle) * halfRadius\n };\n }\n tooltipPosition(useFinalPosition) {\n return this.getCenterPoint(useFinalPosition);\n }\n draw(ctx) {\n const { options , circumference } = this;\n const offset = (options.offset || 0) / 4;\n const spacing = (options.spacing || 0) / 2;\n const circular = options.circular;\n this.pixelMargin = options.borderAlign === 'inner' ? 0.33 : 0;\n this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n return;\n }\n ctx.save();\n const halfAngle = (this.startAngle + this.endAngle) / 2;\n ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);\n const fix = 1 - Math.sin(Math.min(PI, circumference || 0));\n const radiusOffset = offset * fix;\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n drawArc(ctx, this, radiusOffset, spacing, circular);\n drawBorder(ctx, this, radiusOffset, spacing, circular);\n ctx.restore();\n }\n}\n\nfunction setStyle(ctx, options, style = options) {\n ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\nfunction lineTo(ctx, previous, target) {\n ctx.lineTo(target.x, target.y);\n}\n function getLineMethod(options) {\n if (options.stepped) {\n return _steppedLineTo;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierCurveTo;\n }\n return lineTo;\n}\nfunction pathVars(points, segment, params = {}) {\n const count = points.length;\n const { start: paramsStart = 0 , end: paramsEnd = count - 1 } = params;\n const { start: segmentStart , end: segmentEnd } = segment;\n const start = Math.max(paramsStart, segmentStart);\n const end = Math.min(paramsEnd, segmentEnd);\n const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n return {\n count,\n start,\n loop: segment.loop,\n ilen: end < start && !outside ? count + end - start : end - start\n };\n}\n function pathSegment(ctx, line, segment, params) {\n const { points , options } = line;\n const { count , start , loop , ilen } = pathVars(points, segment, params);\n const lineMethod = getLineMethod(options);\n let { move =true , reverse } = params || {};\n let i, point, prev;\n for(i = 0; i <= ilen; ++i){\n point = points[(start + (reverse ? ilen - i : i)) % count];\n if (point.skip) {\n continue;\n } else if (move) {\n ctx.moveTo(point.x, point.y);\n move = false;\n } else {\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n prev = point;\n }\n if (loop) {\n point = points[(start + (reverse ? ilen : 0)) % count];\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n return !!loop;\n}\n function fastPathSegment(ctx, line, segment, params) {\n const points = line.points;\n const { count , start , ilen } = pathVars(points, segment, params);\n const { move =true , reverse } = params || {};\n let avgX = 0;\n let countX = 0;\n let i, point, prevX, minY, maxY, lastY;\n const pointIndex = (index)=>(start + (reverse ? ilen - index : index)) % count;\n const drawX = ()=>{\n if (minY !== maxY) {\n ctx.lineTo(avgX, maxY);\n ctx.lineTo(avgX, minY);\n ctx.lineTo(avgX, lastY);\n }\n };\n if (move) {\n point = points[pointIndex(0)];\n ctx.moveTo(point.x, point.y);\n }\n for(i = 0; i <= ilen; ++i){\n point = points[pointIndex(i)];\n if (point.skip) {\n continue;\n }\n const x = point.x;\n const y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n } else if (y > maxY) {\n maxY = y;\n }\n avgX = (countX * avgX + x) / ++countX;\n } else {\n drawX();\n ctx.lineTo(x, y);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n }\n lastY = y;\n }\n drawX();\n}\n function _getSegmentMethod(line) {\n const opts = line.options;\n const borderDash = opts.borderDash && opts.borderDash.length;\n const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n return useFastPath ? fastPathSegment : pathSegment;\n}\n function _getInterpolationMethod(options) {\n if (options.stepped) {\n return _steppedInterpolation;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierInterpolation;\n }\n return _pointInLine;\n}\nfunction strokePathWithCache(ctx, line, start, count) {\n let path = line._path;\n if (!path) {\n path = line._path = new Path2D();\n if (line.path(path, start, count)) {\n path.closePath();\n }\n }\n setStyle(ctx, line.options);\n ctx.stroke(path);\n}\nfunction strokePathDirect(ctx, line, start, count) {\n const { segments , options } = line;\n const segmentMethod = _getSegmentMethod(line);\n for (const segment of segments){\n setStyle(ctx, options, segment.style);\n ctx.beginPath();\n if (segmentMethod(ctx, line, segment, {\n start,\n end: start + count - 1\n })) {\n ctx.closePath();\n }\n ctx.stroke();\n }\n}\nconst usePath2D = typeof Path2D === 'function';\nfunction draw(ctx, line, start, count) {\n if (usePath2D && !line.options.segment) {\n strokePathWithCache(ctx, line, start, count);\n } else {\n strokePathDirect(ctx, line, start, count);\n }\n}\nclass LineElement extends Element {\n static id = 'line';\n static defaults = {\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderWidth: 3,\n capBezierPoints: true,\n cubicInterpolationMode: 'default',\n fill: false,\n spanGaps: false,\n stepped: false,\n tension: 0\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n static descriptors = {\n _scriptable: true,\n _indexable: (name)=>name !== 'borderDash' && name !== 'fill'\n };\n constructor(cfg){\n super();\n this.animated = true;\n this.options = undefined;\n this._chart = undefined;\n this._loop = undefined;\n this._fullLoop = undefined;\n this._path = undefined;\n this._points = undefined;\n this._segments = undefined;\n this._decimated = false;\n this._pointsUpdated = false;\n this._datasetIndex = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n updateControlPoints(chartArea, indexAxis) {\n const options = this.options;\n if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n const loop = options.spanGaps ? this._loop : this._fullLoop;\n _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n this._pointsUpdated = true;\n }\n }\n set points(points) {\n this._points = points;\n delete this._segments;\n delete this._path;\n this._pointsUpdated = false;\n }\n get points() {\n return this._points;\n }\n get segments() {\n return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n }\n first() {\n const segments = this.segments;\n const points = this.points;\n return segments.length && points[segments[0].start];\n }\n last() {\n const segments = this.segments;\n const points = this.points;\n const count = segments.length;\n return count && points[segments[count - 1].end];\n }\n interpolate(point, property) {\n const options = this.options;\n const value = point[property];\n const points = this.points;\n const segments = _boundSegments(this, {\n property,\n start: value,\n end: value\n });\n if (!segments.length) {\n return;\n }\n const result = [];\n const _interpolate = _getInterpolationMethod(options);\n let i, ilen;\n for(i = 0, ilen = segments.length; i < ilen; ++i){\n const { start , end } = segments[i];\n const p1 = points[start];\n const p2 = points[end];\n if (p1 === p2) {\n result.push(p1);\n continue;\n }\n const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n const interpolated = _interpolate(p1, p2, t, options.stepped);\n interpolated[property] = point[property];\n result.push(interpolated);\n }\n return result.length === 1 ? result[0] : result;\n }\n pathSegment(ctx, segment, params) {\n const segmentMethod = _getSegmentMethod(this);\n return segmentMethod(ctx, this, segment, params);\n }\n path(ctx, start, count) {\n const segments = this.segments;\n const segmentMethod = _getSegmentMethod(this);\n let loop = this._loop;\n start = start || 0;\n count = count || this.points.length - start;\n for (const segment of segments){\n loop &= segmentMethod(ctx, this, segment, {\n start,\n end: start + count - 1\n });\n }\n return !!loop;\n }\n draw(ctx, chartArea, start, count) {\n const options = this.options || {};\n const points = this.points || [];\n if (points.length && options.borderWidth) {\n ctx.save();\n draw(ctx, this, start, count);\n ctx.restore();\n }\n if (this.animated) {\n this._pointsUpdated = false;\n this._path = undefined;\n }\n }\n}\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n const options = el.options;\n const { [axis]: value } = el.getProps([\n axis\n ], useFinalPosition);\n return Math.abs(pos - value) < options.radius + options.hitRadius;\n}\nclass PointElement extends Element {\n static id = 'point';\n parsed;\n skip;\n stop;\n /**\n * @type {any}\n */ static defaults = {\n borderWidth: 1,\n hitRadius: 1,\n hoverBorderWidth: 1,\n hoverRadius: 4,\n pointStyle: 'circle',\n radius: 3,\n rotation: 0\n };\n /**\n * @type {any}\n */ static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n constructor(cfg){\n super();\n this.options = undefined;\n this.parsed = undefined;\n this.skip = undefined;\n this.stop = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n const options = this.options;\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2) < Math.pow(options.hitRadius + options.radius, 2);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange$1(this, mouseX, 'x', useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange$1(this, mouseY, 'y', useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return {\n x,\n y\n };\n }\n size(options) {\n options = options || this.options || {};\n let radius = options.radius || 0;\n radius = Math.max(radius, radius && options.hoverRadius || 0);\n const borderWidth = radius && options.borderWidth || 0;\n return (radius + borderWidth) * 2;\n }\n draw(ctx, area) {\n const options = this.options;\n if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n return;\n }\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.fillStyle = options.backgroundColor;\n drawPoint(ctx, options, this.x, this.y);\n }\n getRange() {\n const options = this.options || {};\n // @ts-expect-error Fallbacks should never be hit in practice\n return options.radius + options.hitRadius;\n }\n}\n\nfunction getBarBounds(bar, useFinalPosition) {\n const { x , y , base , width , height } = bar.getProps([\n 'x',\n 'y',\n 'base',\n 'width',\n 'height'\n ], useFinalPosition);\n let left, right, top, bottom, half;\n if (bar.horizontal) {\n half = height / 2;\n left = Math.min(x, base);\n right = Math.max(x, base);\n top = y - half;\n bottom = y + half;\n } else {\n half = width / 2;\n left = x - half;\n right = x + half;\n top = Math.min(y, base);\n bottom = Math.max(y, base);\n }\n return {\n left,\n top,\n right,\n bottom\n };\n}\nfunction skipOrLimit(skip, value, min, max) {\n return skip ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n const value = bar.options.borderWidth;\n const skip = bar.borderSkipped;\n const o = toTRBL(value);\n return {\n t: skipOrLimit(skip.top, o.top, 0, maxH),\n r: skipOrLimit(skip.right, o.right, 0, maxW),\n b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n l: skipOrLimit(skip.left, o.left, 0, maxW)\n };\n}\nfunction parseBorderRadius(bar, maxW, maxH) {\n const { enableBorderRadius } = bar.getProps([\n 'enableBorderRadius'\n ]);\n const value = bar.options.borderRadius;\n const o = toTRBLCorners(value);\n const maxR = Math.min(maxW, maxH);\n const skip = bar.borderSkipped;\n const enableBorder = enableBorderRadius || isObject(value);\n return {\n topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n };\n}\nfunction boundingRects(bar) {\n const bounds = getBarBounds(bar);\n const width = bounds.right - bounds.left;\n const height = bounds.bottom - bounds.top;\n const border = parseBorderWidth(bar, width / 2, height / 2);\n const radius = parseBorderRadius(bar, width / 2, height / 2);\n return {\n outer: {\n x: bounds.left,\n y: bounds.top,\n w: width,\n h: height,\n radius\n },\n inner: {\n x: bounds.left + border.l,\n y: bounds.top + border.t,\n w: width - border.l - border.r,\n h: height - border.t - border.b,\n radius: {\n topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r))\n }\n }\n };\n}\nfunction inRange(bar, x, y, useFinalPosition) {\n const skipX = x === null;\n const skipY = y === null;\n const skipBoth = skipX && skipY;\n const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n return bounds && (skipX || _isBetween(x, bounds.left, bounds.right)) && (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n function addNormalRectPath(ctx, rect) {\n ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\nfunction inflateRect(rect, amount, refRect = {}) {\n const x = rect.x !== refRect.x ? -amount : 0;\n const y = rect.y !== refRect.y ? -amount : 0;\n const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n return {\n x: rect.x + x,\n y: rect.y + y,\n w: rect.w + w,\n h: rect.h + h,\n radius: rect.radius\n };\n}\nclass BarElement extends Element {\n static id = 'bar';\n static defaults = {\n borderSkipped: 'start',\n borderWidth: 0,\n borderRadius: 0,\n inflateAmount: 'auto',\n pointStyle: undefined\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n constructor(cfg){\n super();\n this.options = undefined;\n this.horizontal = undefined;\n this.base = undefined;\n this.width = undefined;\n this.height = undefined;\n this.inflateAmount = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n draw(ctx) {\n const { inflateAmount , options: { borderColor , backgroundColor } } = this;\n const { inner , outer } = boundingRects(this);\n const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n ctx.save();\n if (outer.w !== inner.w || outer.h !== inner.h) {\n ctx.beginPath();\n addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n ctx.clip();\n addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n ctx.fillStyle = borderColor;\n ctx.fill('evenodd');\n }\n ctx.beginPath();\n addRectPath(ctx, inflateRect(inner, inflateAmount));\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n return inRange(this, mouseX, mouseY, useFinalPosition);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange(this, mouseX, null, useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange(this, null, mouseY, useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const { x , y , base , horizontal } = this.getProps([\n 'x',\n 'y',\n 'base',\n 'horizontal'\n ], useFinalPosition);\n return {\n x: horizontal ? (x + base) / 2 : x,\n y: horizontal ? y : (y + base) / 2\n };\n }\n getRange(axis) {\n return axis === 'x' ? this.width / 2 : this.height / 2;\n }\n}\n\nvar elements = /*#__PURE__*/Object.freeze({\n__proto__: null,\nArcElement: ArcElement,\nBarElement: BarElement,\nLineElement: LineElement,\nPointElement: PointElement\n});\n\nconst BORDER_COLORS = [\n 'rgb(54, 162, 235)',\n 'rgb(255, 99, 132)',\n 'rgb(255, 159, 64)',\n 'rgb(255, 205, 86)',\n 'rgb(75, 192, 192)',\n 'rgb(153, 102, 255)',\n 'rgb(201, 203, 207)' // grey\n];\n// Border colors with 50% transparency\nconst BACKGROUND_COLORS = /* #__PURE__ */ BORDER_COLORS.map((color)=>color.replace('rgb(', 'rgba(').replace(')', ', 0.5)'));\nfunction getBorderColor(i) {\n return BORDER_COLORS[i % BORDER_COLORS.length];\n}\nfunction getBackgroundColor(i) {\n return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length];\n}\nfunction colorizeDefaultDataset(dataset, i) {\n dataset.borderColor = getBorderColor(i);\n dataset.backgroundColor = getBackgroundColor(i);\n return ++i;\n}\nfunction colorizeDoughnutDataset(dataset, i) {\n dataset.backgroundColor = dataset.data.map(()=>getBorderColor(i++));\n return i;\n}\nfunction colorizePolarAreaDataset(dataset, i) {\n dataset.backgroundColor = dataset.data.map(()=>getBackgroundColor(i++));\n return i;\n}\nfunction getColorizer(chart) {\n let i = 0;\n return (dataset, datasetIndex)=>{\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n if (controller instanceof DoughnutController) {\n i = colorizeDoughnutDataset(dataset, i);\n } else if (controller instanceof PolarAreaController) {\n i = colorizePolarAreaDataset(dataset, i);\n } else if (controller) {\n i = colorizeDefaultDataset(dataset, i);\n }\n };\n}\nfunction containsColorsDefinitions(descriptors) {\n let k;\n for(k in descriptors){\n if (descriptors[k].borderColor || descriptors[k].backgroundColor) {\n return true;\n }\n }\n return false;\n}\nfunction containsColorsDefinition(descriptor) {\n return descriptor && (descriptor.borderColor || descriptor.backgroundColor);\n}\nfunction containsDefaultColorsDefenitions() {\n return defaults.borderColor !== 'rgba(0,0,0,0.1)' || defaults.backgroundColor !== 'rgba(0,0,0,0.1)';\n}\nvar plugin_colors = {\n id: 'colors',\n defaults: {\n enabled: true,\n forceOverride: false\n },\n beforeLayout (chart, _args, options) {\n if (!options.enabled) {\n return;\n }\n const { data: { datasets } , options: chartOptions } = chart.config;\n const { elements } = chartOptions;\n const containsColorDefenition = containsColorsDefinitions(datasets) || containsColorsDefinition(chartOptions) || elements && containsColorsDefinitions(elements) || containsDefaultColorsDefenitions();\n if (!options.forceOverride && containsColorDefenition) {\n return;\n }\n const colorizer = getColorizer(chart);\n datasets.forEach(colorizer);\n }\n};\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n const samples = options.samples || availableWidth;\n if (samples >= count) {\n return data.slice(start, start + count);\n }\n const decimated = [];\n const bucketWidth = (count - 2) / (samples - 2);\n let sampledIndex = 0;\n const endIndex = start + count - 1;\n let a = start;\n let i, maxAreaPoint, maxArea, area, nextA;\n decimated[sampledIndex++] = data[a];\n for(i = 0; i < samples - 2; i++){\n let avgX = 0;\n let avgY = 0;\n let j;\n const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n const avgRangeLength = avgRangeEnd - avgRangeStart;\n for(j = avgRangeStart; j < avgRangeEnd; j++){\n avgX += data[j].x;\n avgY += data[j].y;\n }\n avgX /= avgRangeLength;\n avgY /= avgRangeLength;\n const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n const { x: pointAx , y: pointAy } = data[a];\n maxArea = area = -1;\n for(j = rangeOffs; j < rangeTo; j++){\n area = 0.5 * Math.abs((pointAx - avgX) * (data[j].y - pointAy) - (pointAx - data[j].x) * (avgY - pointAy));\n if (area > maxArea) {\n maxArea = area;\n maxAreaPoint = data[j];\n nextA = j;\n }\n }\n decimated[sampledIndex++] = maxAreaPoint;\n a = nextA;\n }\n decimated[sampledIndex++] = data[endIndex];\n return decimated;\n}\nfunction minMaxDecimation(data, start, count, availableWidth) {\n let avgX = 0;\n let countX = 0;\n let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n const decimated = [];\n const endIndex = start + count - 1;\n const xMin = data[start].x;\n const xMax = data[endIndex].x;\n const dx = xMax - xMin;\n for(i = start; i < start + count; ++i){\n point = data[i];\n x = (point.x - xMin) / dx * availableWidth;\n y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n minIndex = i;\n } else if (y > maxY) {\n maxY = y;\n maxIndex = i;\n }\n avgX = (countX * avgX + point.x) / ++countX;\n } else {\n const lastIndex = i - 1;\n if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n const intermediateIndex1 = Math.min(minIndex, maxIndex);\n const intermediateIndex2 = Math.max(minIndex, maxIndex);\n if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex1],\n x: avgX\n });\n }\n if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex2],\n x: avgX\n });\n }\n }\n if (i > 0 && lastIndex !== startIndex) {\n decimated.push(data[lastIndex]);\n }\n decimated.push(point);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n minIndex = maxIndex = startIndex = i;\n }\n }\n return decimated;\n}\nfunction cleanDecimatedDataset(dataset) {\n if (dataset._decimated) {\n const data = dataset._data;\n delete dataset._decimated;\n delete dataset._data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n writable: true,\n value: data\n });\n }\n}\nfunction cleanDecimatedData(chart) {\n chart.data.datasets.forEach((dataset)=>{\n cleanDecimatedDataset(dataset);\n });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n const pointCount = points.length;\n let start = 0;\n let count;\n const { iScale } = meta;\n const { min , max , minDefined , maxDefined } = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n return {\n start,\n count\n };\n}\nvar plugin_decimation = {\n id: 'decimation',\n defaults: {\n algorithm: 'min-max',\n enabled: false\n },\n beforeElementsUpdate: (chart, args, options)=>{\n if (!options.enabled) {\n cleanDecimatedData(chart);\n return;\n }\n const availableWidth = chart.width;\n chart.data.datasets.forEach((dataset, datasetIndex)=>{\n const { _data , indexAxis } = dataset;\n const meta = chart.getDatasetMeta(datasetIndex);\n const data = _data || dataset.data;\n if (resolve([\n indexAxis,\n chart.options.indexAxis\n ]) === 'y') {\n return;\n }\n if (!meta.controller.supportsDecimation) {\n return;\n }\n const xAxis = chart.scales[meta.xAxisID];\n if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n return;\n }\n if (chart.options.parsing) {\n return;\n }\n let { start , count } = getStartAndCountOfVisiblePointsSimplified(meta, data);\n const threshold = options.threshold || 4 * availableWidth;\n if (count <= threshold) {\n cleanDecimatedDataset(dataset);\n return;\n }\n if (isNullOrUndef(_data)) {\n dataset._data = data;\n delete dataset.data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n get: function() {\n return this._decimated;\n },\n set: function(d) {\n this._data = d;\n }\n });\n }\n let decimated;\n switch(options.algorithm){\n case 'lttb':\n decimated = lttbDecimation(data, start, count, availableWidth, options);\n break;\n case 'min-max':\n decimated = minMaxDecimation(data, start, count, availableWidth);\n break;\n default:\n throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n }\n dataset._decimated = decimated;\n });\n },\n destroy (chart) {\n cleanDecimatedData(chart);\n }\n};\n\nfunction _segments(line, target, property) {\n const segments = line.segments;\n const points = line.points;\n const tpoints = target.points;\n const parts = [];\n for (const segment of segments){\n let { start , end } = segment;\n end = _findSegmentEnd(start, end, points);\n const bounds = _getBounds(property, points[start], points[end], segment.loop);\n if (!target.segments) {\n parts.push({\n source: segment,\n target: bounds,\n start: points[start],\n end: points[end]\n });\n continue;\n }\n const targetSegments = _boundSegments(target, bounds);\n for (const tgt of targetSegments){\n const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n const fillSources = _boundSegment(segment, points, subBounds);\n for (const fillSource of fillSources){\n parts.push({\n source: fillSource,\n target: tgt,\n start: {\n [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n },\n end: {\n [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n }\n });\n }\n }\n }\n return parts;\n}\nfunction _getBounds(property, first, last, loop) {\n if (loop) {\n return;\n }\n let start = first[property];\n let end = last[property];\n if (property === 'angle') {\n start = _normalizeAngle(start);\n end = _normalizeAngle(end);\n }\n return {\n property,\n start,\n end\n };\n}\nfunction _pointsFromSegments(boundary, line) {\n const { x =null , y =null } = boundary || {};\n const linePoints = line.points;\n const points = [];\n line.segments.forEach(({ start , end })=>{\n end = _findSegmentEnd(start, end, linePoints);\n const first = linePoints[start];\n const last = linePoints[end];\n if (y !== null) {\n points.push({\n x: first.x,\n y\n });\n points.push({\n x: last.x,\n y\n });\n } else if (x !== null) {\n points.push({\n x,\n y: first.y\n });\n points.push({\n x,\n y: last.y\n });\n }\n });\n return points;\n}\nfunction _findSegmentEnd(start, end, points) {\n for(; end > start; end--){\n const point = points[end];\n if (!isNaN(point.x) && !isNaN(point.y)) {\n break;\n }\n }\n return end;\n}\nfunction _getEdge(a, b, prop, fn) {\n if (a && b) {\n return fn(a[prop], b[prop]);\n }\n return a ? a[prop] : b ? b[prop] : 0;\n}\n\nfunction _createBoundaryLine(boundary, line) {\n let points = [];\n let _loop = false;\n if (isArray(boundary)) {\n _loop = true;\n points = boundary;\n } else {\n points = _pointsFromSegments(boundary, line);\n }\n return points.length ? new LineElement({\n points,\n options: {\n tension: 0\n },\n _loop,\n _fullLoop: _loop\n }) : null;\n}\nfunction _shouldApplyFill(source) {\n return source && source.fill !== false;\n}\n\nfunction _resolveTarget(sources, index, propagate) {\n const source = sources[index];\n let fill = source.fill;\n const visited = [\n index\n ];\n let target;\n if (!propagate) {\n return fill;\n }\n while(fill !== false && visited.indexOf(fill) === -1){\n if (!isNumberFinite(fill)) {\n return fill;\n }\n target = sources[fill];\n if (!target) {\n return false;\n }\n if (target.visible) {\n return fill;\n }\n visited.push(fill);\n fill = target.fill;\n }\n return false;\n}\n function _decodeFill(line, index, count) {\n const fill = parseFillOption(line);\n if (isObject(fill)) {\n return isNaN(fill.value) ? false : fill;\n }\n let target = parseFloat(fill);\n if (isNumberFinite(target) && Math.floor(target) === target) {\n return decodeTargetIndex(fill[0], index, target, count);\n }\n return [\n 'origin',\n 'start',\n 'end',\n 'stack',\n 'shape'\n ].indexOf(fill) >= 0 && fill;\n}\nfunction decodeTargetIndex(firstCh, index, target, count) {\n if (firstCh === '-' || firstCh === '+') {\n target = index + target;\n }\n if (target === index || target < 0 || target >= count) {\n return false;\n }\n return target;\n}\n function _getTargetPixel(fill, scale) {\n let pixel = null;\n if (fill === 'start') {\n pixel = scale.bottom;\n } else if (fill === 'end') {\n pixel = scale.top;\n } else if (isObject(fill)) {\n pixel = scale.getPixelForValue(fill.value);\n } else if (scale.getBasePixel) {\n pixel = scale.getBasePixel();\n }\n return pixel;\n}\n function _getTargetValue(fill, scale, startValue) {\n let value;\n if (fill === 'start') {\n value = startValue;\n } else if (fill === 'end') {\n value = scale.options.reverse ? scale.min : scale.max;\n } else if (isObject(fill)) {\n value = fill.value;\n } else {\n value = scale.getBaseValue();\n }\n return value;\n}\n function parseFillOption(line) {\n const options = line.options;\n const fillOption = options.fill;\n let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n if (fill === undefined) {\n fill = !!options.backgroundColor;\n }\n if (fill === false || fill === null) {\n return false;\n }\n if (fill === true) {\n return 'origin';\n }\n return fill;\n}\n\nfunction _buildStackLine(source) {\n const { scale , index , line } = source;\n const points = [];\n const segments = line.segments;\n const sourcePoints = line.points;\n const linesBelow = getLinesBelow(scale, index);\n linesBelow.push(_createBoundaryLine({\n x: null,\n y: scale.bottom\n }, line));\n for(let i = 0; i < segments.length; i++){\n const segment = segments[i];\n for(let j = segment.start; j <= segment.end; j++){\n addPointsBelow(points, sourcePoints[j], linesBelow);\n }\n }\n return new LineElement({\n points,\n options: {}\n });\n}\n function getLinesBelow(scale, index) {\n const below = [];\n const metas = scale.getMatchingVisibleMetas('line');\n for(let i = 0; i < metas.length; i++){\n const meta = metas[i];\n if (meta.index === index) {\n break;\n }\n if (!meta.hidden) {\n below.unshift(meta.dataset);\n }\n }\n return below;\n}\n function addPointsBelow(points, sourcePoint, linesBelow) {\n const postponed = [];\n for(let j = 0; j < linesBelow.length; j++){\n const line = linesBelow[j];\n const { first , last , point } = findPoint(line, sourcePoint, 'x');\n if (!point || first && last) {\n continue;\n }\n if (first) {\n postponed.unshift(point);\n } else {\n points.push(point);\n if (!last) {\n break;\n }\n }\n }\n points.push(...postponed);\n}\n function findPoint(line, sourcePoint, property) {\n const point = line.interpolate(sourcePoint, property);\n if (!point) {\n return {};\n }\n const pointValue = point[property];\n const segments = line.segments;\n const linePoints = line.points;\n let first = false;\n let last = false;\n for(let i = 0; i < segments.length; i++){\n const segment = segments[i];\n const firstValue = linePoints[segment.start][property];\n const lastValue = linePoints[segment.end][property];\n if (_isBetween(pointValue, firstValue, lastValue)) {\n first = pointValue === firstValue;\n last = pointValue === lastValue;\n break;\n }\n }\n return {\n first,\n last,\n point\n };\n}\n\nclass simpleArc {\n constructor(opts){\n this.x = opts.x;\n this.y = opts.y;\n this.radius = opts.radius;\n }\n pathSegment(ctx, bounds, opts) {\n const { x , y , radius } = this;\n bounds = bounds || {\n start: 0,\n end: TAU\n };\n ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n return !opts.bounds;\n }\n interpolate(point) {\n const { x , y , radius } = this;\n const angle = point.angle;\n return {\n x: x + Math.cos(angle) * radius,\n y: y + Math.sin(angle) * radius,\n angle\n };\n }\n}\n\nfunction _getTarget(source) {\n const { chart , fill , line } = source;\n if (isNumberFinite(fill)) {\n return getLineByIndex(chart, fill);\n }\n if (fill === 'stack') {\n return _buildStackLine(source);\n }\n if (fill === 'shape') {\n return true;\n }\n const boundary = computeBoundary(source);\n if (boundary instanceof simpleArc) {\n return boundary;\n }\n return _createBoundaryLine(boundary, line);\n}\n function getLineByIndex(chart, index) {\n const meta = chart.getDatasetMeta(index);\n const visible = meta && chart.isDatasetVisible(index);\n return visible ? meta.dataset : null;\n}\nfunction computeBoundary(source) {\n const scale = source.scale || {};\n if (scale.getPointPositionForValue) {\n return computeCircularBoundary(source);\n }\n return computeLinearBoundary(source);\n}\nfunction computeLinearBoundary(source) {\n const { scale ={} , fill } = source;\n const pixel = _getTargetPixel(fill, scale);\n if (isNumberFinite(pixel)) {\n const horizontal = scale.isHorizontal();\n return {\n x: horizontal ? pixel : null,\n y: horizontal ? null : pixel\n };\n }\n return null;\n}\nfunction computeCircularBoundary(source) {\n const { scale , fill } = source;\n const options = scale.options;\n const length = scale.getLabels().length;\n const start = options.reverse ? scale.max : scale.min;\n const value = _getTargetValue(fill, scale, start);\n const target = [];\n if (options.grid.circular) {\n const center = scale.getPointPositionForValue(0, start);\n return new simpleArc({\n x: center.x,\n y: center.y,\n radius: scale.getDistanceFromCenterForValue(value)\n });\n }\n for(let i = 0; i < length; ++i){\n target.push(scale.getPointPositionForValue(i, value));\n }\n return target;\n}\n\nfunction _drawfill(ctx, source, area) {\n const target = _getTarget(source);\n const { line , scale , axis } = source;\n const lineOpts = line.options;\n const fillOption = lineOpts.fill;\n const color = lineOpts.backgroundColor;\n const { above =color , below =color } = fillOption || {};\n if (target && line.points.length) {\n clipArea(ctx, area);\n doFill(ctx, {\n line,\n target,\n above,\n below,\n area,\n scale,\n axis\n });\n unclipArea(ctx);\n }\n}\nfunction doFill(ctx, cfg) {\n const { line , target , above , below , area , scale } = cfg;\n const property = line._loop ? 'angle' : cfg.axis;\n ctx.save();\n if (property === 'x' && below !== above) {\n clipVertical(ctx, target, area.top);\n fill(ctx, {\n line,\n target,\n color: above,\n scale,\n property\n });\n ctx.restore();\n ctx.save();\n clipVertical(ctx, target, area.bottom);\n }\n fill(ctx, {\n line,\n target,\n color: below,\n scale,\n property\n });\n ctx.restore();\n}\nfunction clipVertical(ctx, target, clipY) {\n const { segments , points } = target;\n let first = true;\n let lineLoop = false;\n ctx.beginPath();\n for (const segment of segments){\n const { start , end } = segment;\n const firstPoint = points[start];\n const lastPoint = points[_findSegmentEnd(start, end, points)];\n if (first) {\n ctx.moveTo(firstPoint.x, firstPoint.y);\n first = false;\n } else {\n ctx.lineTo(firstPoint.x, clipY);\n ctx.lineTo(firstPoint.x, firstPoint.y);\n }\n lineLoop = !!target.pathSegment(ctx, segment, {\n move: lineLoop\n });\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(lastPoint.x, clipY);\n }\n }\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\n}\nfunction fill(ctx, cfg) {\n const { line , target , property , color , scale } = cfg;\n const segments = _segments(line, target, property);\n for (const { source: src , target: tgt , start , end } of segments){\n const { style: { backgroundColor =color } = {} } = src;\n const notShape = target !== true;\n ctx.save();\n ctx.fillStyle = backgroundColor;\n clipBounds(ctx, scale, notShape && _getBounds(property, start, end));\n ctx.beginPath();\n const lineLoop = !!line.pathSegment(ctx, src);\n let loop;\n if (notShape) {\n if (lineLoop) {\n ctx.closePath();\n } else {\n interpolatedLineTo(ctx, target, end, property);\n }\n const targetLoop = !!target.pathSegment(ctx, tgt, {\n move: lineLoop,\n reverse: true\n });\n loop = lineLoop && targetLoop;\n if (!loop) {\n interpolatedLineTo(ctx, target, start, property);\n }\n }\n ctx.closePath();\n ctx.fill(loop ? 'evenodd' : 'nonzero');\n ctx.restore();\n }\n}\nfunction clipBounds(ctx, scale, bounds) {\n const { top , bottom } = scale.chart.chartArea;\n const { property , start , end } = bounds || {};\n if (property === 'x') {\n ctx.beginPath();\n ctx.rect(start, top, end - start, bottom - top);\n ctx.clip();\n }\n}\nfunction interpolatedLineTo(ctx, target, point, property) {\n const interpolatedPoint = target.interpolate(point, property);\n if (interpolatedPoint) {\n ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n }\n}\n\nvar index = {\n id: 'filler',\n afterDatasetsUpdate (chart, _args, options) {\n const count = (chart.data.datasets || []).length;\n const sources = [];\n let meta, i, line, source;\n for(i = 0; i < count; ++i){\n meta = chart.getDatasetMeta(i);\n line = meta.dataset;\n source = null;\n if (line && line.options && line instanceof LineElement) {\n source = {\n visible: chart.isDatasetVisible(i),\n index: i,\n fill: _decodeFill(line, i, count),\n chart,\n axis: meta.controller.options.indexAxis,\n scale: meta.vScale,\n line\n };\n }\n meta.$filler = source;\n sources.push(source);\n }\n for(i = 0; i < count; ++i){\n source = sources[i];\n if (!source || source.fill === false) {\n continue;\n }\n source.fill = _resolveTarget(sources, i, options.propagate);\n }\n },\n beforeDraw (chart, _args, options) {\n const draw = options.drawTime === 'beforeDraw';\n const metasets = chart.getSortedVisibleDatasetMetas();\n const area = chart.chartArea;\n for(let i = metasets.length - 1; i >= 0; --i){\n const source = metasets[i].$filler;\n if (!source) {\n continue;\n }\n source.line.updateControlPoints(area, source.axis);\n if (draw && source.fill) {\n _drawfill(chart.ctx, source, area);\n }\n }\n },\n beforeDatasetsDraw (chart, _args, options) {\n if (options.drawTime !== 'beforeDatasetsDraw') {\n return;\n }\n const metasets = chart.getSortedVisibleDatasetMetas();\n for(let i = metasets.length - 1; i >= 0; --i){\n const source = metasets[i].$filler;\n if (_shouldApplyFill(source)) {\n _drawfill(chart.ctx, source, chart.chartArea);\n }\n }\n },\n beforeDatasetDraw (chart, args, options) {\n const source = args.meta.$filler;\n if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n return;\n }\n _drawfill(chart.ctx, source, chart.chartArea);\n },\n defaults: {\n propagate: true,\n drawTime: 'beforeDatasetDraw'\n }\n};\n\nconst getBoxSize = (labelOpts, fontSize)=>{\n let { boxHeight =fontSize , boxWidth =fontSize } = labelOpts;\n if (labelOpts.usePointStyle) {\n boxHeight = Math.min(boxHeight, fontSize);\n boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n }\n return {\n boxWidth,\n boxHeight,\n itemHeight: Math.max(fontSize, boxHeight)\n };\n};\nconst itemsEqual = (a, b)=>a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends Element {\n constructor(config){\n super();\n this._added = false;\n this.legendHitBoxes = [];\n this._hoveredItem = null;\n this.doughnutMode = false;\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this.legendItems = undefined;\n this.columnSizes = undefined;\n this.lineWidths = undefined;\n this.maxHeight = undefined;\n this.maxWidth = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.height = undefined;\n this.width = undefined;\n this._margins = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight, margins) {\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins;\n this.setDimensions();\n this.buildLabels();\n this.fit();\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = this._margins.left;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = this._margins.top;\n this.bottom = this.height;\n }\n }\n buildLabels() {\n const labelOpts = this.options.labels || {};\n let legendItems = callback(labelOpts.generateLabels, [\n this.chart\n ], this) || [];\n if (labelOpts.filter) {\n legendItems = legendItems.filter((item)=>labelOpts.filter(item, this.chart.data));\n }\n if (labelOpts.sort) {\n legendItems = legendItems.sort((a, b)=>labelOpts.sort(a, b, this.chart.data));\n }\n if (this.options.reverse) {\n legendItems.reverse();\n }\n this.legendItems = legendItems;\n }\n fit() {\n const { options , ctx } = this;\n if (!options.display) {\n this.width = this.height = 0;\n return;\n }\n const labelOpts = options.labels;\n const labelFont = toFont(labelOpts.font);\n const fontSize = labelFont.size;\n const titleHeight = this._computeTitleHeight();\n const { boxWidth , itemHeight } = getBoxSize(labelOpts, fontSize);\n let width, height;\n ctx.font = labelFont.string;\n if (this.isHorizontal()) {\n width = this.maxWidth;\n height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n } else {\n height = this.maxHeight;\n width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;\n }\n this.width = Math.min(width, options.maxWidth || this.maxWidth);\n this.height = Math.min(height, options.maxHeight || this.maxHeight);\n }\n _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n const { ctx , maxWidth , options: { labels: { padding } } } = this;\n const hitboxes = this.legendHitBoxes = [];\n const lineWidths = this.lineWidths = [\n 0\n ];\n const lineHeight = itemHeight + padding;\n let totalHeight = titleHeight;\n ctx.textAlign = 'left';\n ctx.textBaseline = 'middle';\n let row = -1;\n let top = -lineHeight;\n this.legendItems.forEach((legendItem, i)=>{\n const itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;\n if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n totalHeight += lineHeight;\n lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n top += lineHeight;\n row++;\n }\n hitboxes[i] = {\n left: 0,\n top,\n row,\n width: itemWidth,\n height: itemHeight\n };\n lineWidths[lineWidths.length - 1] += itemWidth + padding;\n });\n return totalHeight;\n }\n _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {\n const { ctx , maxHeight , options: { labels: { padding } } } = this;\n const hitboxes = this.legendHitBoxes = [];\n const columnSizes = this.columnSizes = [];\n const heightLimit = maxHeight - titleHeight;\n let totalWidth = padding;\n let currentColWidth = 0;\n let currentColHeight = 0;\n let left = 0;\n let col = 0;\n this.legendItems.forEach((legendItem, i)=>{\n const { itemWidth , itemHeight } = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);\n if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n totalWidth += currentColWidth + padding;\n columnSizes.push({\n width: currentColWidth,\n height: currentColHeight\n });\n left += currentColWidth + padding;\n col++;\n currentColWidth = currentColHeight = 0;\n }\n hitboxes[i] = {\n left,\n top: currentColHeight,\n col,\n width: itemWidth,\n height: itemHeight\n };\n currentColWidth = Math.max(currentColWidth, itemWidth);\n currentColHeight += itemHeight + padding;\n });\n totalWidth += currentColWidth;\n columnSizes.push({\n width: currentColWidth,\n height: currentColHeight\n });\n return totalWidth;\n }\n adjustHitBoxes() {\n if (!this.options.display) {\n return;\n }\n const titleHeight = this._computeTitleHeight();\n const { legendHitBoxes: hitboxes , options: { align , labels: { padding } , rtl } } = this;\n const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n if (this.isHorizontal()) {\n let row = 0;\n let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n for (const hitbox of hitboxes){\n if (row !== hitbox.row) {\n row = hitbox.row;\n left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n }\n hitbox.top += this.top + titleHeight + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n left += hitbox.width + padding;\n }\n } else {\n let col = 0;\n let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n for (const hitbox of hitboxes){\n if (hitbox.col !== col) {\n col = hitbox.col;\n top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n }\n hitbox.top = top;\n hitbox.left += this.left + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n top += hitbox.height + padding;\n }\n }\n }\n isHorizontal() {\n return this.options.position === 'top' || this.options.position === 'bottom';\n }\n draw() {\n if (this.options.display) {\n const ctx = this.ctx;\n clipArea(ctx, this);\n this._draw();\n unclipArea(ctx);\n }\n }\n _draw() {\n const { options: opts , columnSizes , lineWidths , ctx } = this;\n const { align , labels: labelOpts } = opts;\n const defaultColor = defaults.color;\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const labelFont = toFont(labelOpts.font);\n const { padding } = labelOpts;\n const fontSize = labelFont.size;\n const halfFontSize = fontSize / 2;\n let cursor;\n this.drawTitle();\n ctx.textAlign = rtlHelper.textAlign('left');\n ctx.textBaseline = 'middle';\n ctx.lineWidth = 0.5;\n ctx.font = labelFont.string;\n const { boxWidth , boxHeight , itemHeight } = getBoxSize(labelOpts, fontSize);\n const drawLegendBox = function(x, y, legendItem) {\n if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n return;\n }\n ctx.save();\n const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n if (labelOpts.usePointStyle) {\n const drawOptions = {\n radius: boxHeight * Math.SQRT2 / 2,\n pointStyle: legendItem.pointStyle,\n rotation: legendItem.rotation,\n borderWidth: lineWidth\n };\n const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n const centerY = y + halfFontSize;\n drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n } else {\n const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n const borderRadius = toTRBLCorners(legendItem.borderRadius);\n ctx.beginPath();\n if (Object.values(borderRadius).some((v)=>v !== 0)) {\n addRoundedRectPath(ctx, {\n x: xBoxLeft,\n y: yBoxTop,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius\n });\n } else {\n ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n }\n ctx.fill();\n if (lineWidth !== 0) {\n ctx.stroke();\n }\n }\n ctx.restore();\n };\n const fillText = function(x, y, legendItem) {\n renderText(ctx, legendItem.text, x, y + itemHeight / 2, labelFont, {\n strikethrough: legendItem.hidden,\n textAlign: rtlHelper.textAlign(legendItem.textAlign)\n });\n };\n const isHorizontal = this.isHorizontal();\n const titleHeight = this._computeTitleHeight();\n if (isHorizontal) {\n cursor = {\n x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n y: this.top + padding + titleHeight,\n line: 0\n };\n } else {\n cursor = {\n x: this.left + padding,\n y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n line: 0\n };\n }\n overrideTextDirection(this.ctx, opts.textDirection);\n const lineHeight = itemHeight + padding;\n this.legendItems.forEach((legendItem, i)=>{\n ctx.strokeStyle = legendItem.fontColor;\n ctx.fillStyle = legendItem.fontColor;\n const textWidth = ctx.measureText(legendItem.text).width;\n const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n const width = boxWidth + halfFontSize + textWidth;\n let x = cursor.x;\n let y = cursor.y;\n rtlHelper.setWidth(this.width);\n if (isHorizontal) {\n if (i > 0 && x + width + padding > this.right) {\n y = cursor.y += lineHeight;\n cursor.line++;\n x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n }\n } else if (i > 0 && y + lineHeight > this.bottom) {\n x = cursor.x = x + columnSizes[cursor.line].width + padding;\n cursor.line++;\n y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n }\n const realX = rtlHelper.x(x);\n drawLegendBox(realX, y, legendItem);\n x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n fillText(rtlHelper.x(x), y, legendItem);\n if (isHorizontal) {\n cursor.x += width + padding;\n } else if (typeof legendItem.text !== 'string') {\n const fontLineHeight = labelFont.lineHeight;\n cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight) + padding;\n } else {\n cursor.y += lineHeight;\n }\n });\n restoreTextDirection(this.ctx, opts.textDirection);\n }\n drawTitle() {\n const opts = this.options;\n const titleOpts = opts.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n if (!titleOpts.display) {\n return;\n }\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const ctx = this.ctx;\n const position = titleOpts.position;\n const halfFontSize = titleFont.size / 2;\n const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n let y;\n let left = this.left;\n let maxWidth = this.width;\n if (this.isHorizontal()) {\n maxWidth = Math.max(...this.lineWidths);\n y = this.top + topPaddingPlusHalfFontSize;\n left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n } else {\n const maxHeight = this.columnSizes.reduce((acc, size)=>Math.max(acc, size.height), 0);\n y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n }\n const x = _alignStartEnd(position, left, left + maxWidth);\n ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n ctx.textBaseline = 'middle';\n ctx.strokeStyle = titleOpts.color;\n ctx.fillStyle = titleOpts.color;\n ctx.font = titleFont.string;\n renderText(ctx, titleOpts.text, x, y, titleFont);\n }\n _computeTitleHeight() {\n const titleOpts = this.options.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n }\n _getLegendItemAt(x, y) {\n let i, hitBox, lh;\n if (_isBetween(x, this.left, this.right) && _isBetween(y, this.top, this.bottom)) {\n lh = this.legendHitBoxes;\n for(i = 0; i < lh.length; ++i){\n hitBox = lh[i];\n if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width) && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n return this.legendItems[i];\n }\n }\n }\n return null;\n }\n handleEvent(e) {\n const opts = this.options;\n if (!isListened(e.type, opts)) {\n return;\n }\n const hoveredItem = this._getLegendItemAt(e.x, e.y);\n if (e.type === 'mousemove' || e.type === 'mouseout') {\n const previous = this._hoveredItem;\n const sameItem = itemsEqual(previous, hoveredItem);\n if (previous && !sameItem) {\n callback(opts.onLeave, [\n e,\n previous,\n this\n ], this);\n }\n this._hoveredItem = hoveredItem;\n if (hoveredItem && !sameItem) {\n callback(opts.onHover, [\n e,\n hoveredItem,\n this\n ], this);\n }\n } else if (hoveredItem) {\n callback(opts.onClick, [\n e,\n hoveredItem,\n this\n ], this);\n }\n }\n}\nfunction calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {\n const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);\n const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);\n return {\n itemWidth,\n itemHeight\n };\n}\nfunction calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {\n let legendItemText = legendItem.text;\n if (legendItemText && typeof legendItemText !== 'string') {\n legendItemText = legendItemText.reduce((a, b)=>a.length > b.length ? a : b);\n }\n return boxWidth + labelFont.size / 2 + ctx.measureText(legendItemText).width;\n}\nfunction calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {\n let itemHeight = _itemHeight;\n if (typeof legendItem.text !== 'string') {\n itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);\n }\n return itemHeight;\n}\nfunction calculateLegendItemHeight(legendItem, fontLineHeight) {\n const labelHeight = legendItem.text ? legendItem.text.length : 0;\n return fontLineHeight * labelHeight;\n}\nfunction isListened(type, opts) {\n if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n return true;\n }\n if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n return true;\n }\n return false;\n}\nvar plugin_legend = {\n id: 'legend',\n _element: Legend,\n start (chart, _args, options) {\n const legend = chart.legend = new Legend({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, legend, options);\n layouts.addBox(chart, legend);\n },\n stop (chart) {\n layouts.removeBox(chart, chart.legend);\n delete chart.legend;\n },\n beforeUpdate (chart, _args, options) {\n const legend = chart.legend;\n layouts.configure(chart, legend, options);\n legend.options = options;\n },\n afterUpdate (chart) {\n const legend = chart.legend;\n legend.buildLabels();\n legend.adjustHitBoxes();\n },\n afterEvent (chart, args) {\n if (!args.replay) {\n chart.legend.handleEvent(args.event);\n }\n },\n defaults: {\n display: true,\n position: 'top',\n align: 'center',\n fullSize: true,\n reverse: false,\n weight: 1000,\n onClick (e, legendItem, legend) {\n const index = legendItem.datasetIndex;\n const ci = legend.chart;\n if (ci.isDatasetVisible(index)) {\n ci.hide(index);\n legendItem.hidden = true;\n } else {\n ci.show(index);\n legendItem.hidden = false;\n }\n },\n onHover: null,\n onLeave: null,\n labels: {\n color: (ctx)=>ctx.chart.options.color,\n boxWidth: 40,\n padding: 10,\n generateLabels (chart) {\n const datasets = chart.data.datasets;\n const { labels: { usePointStyle , pointStyle , textAlign , color , useBorderRadius , borderRadius } } = chart.legend.options;\n return chart._getSortedDatasetMetas().map((meta)=>{\n const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n const borderWidth = toPadding(style.borderWidth);\n return {\n text: datasets[meta.index].label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !meta.visible,\n lineCap: style.borderCapStyle,\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: (borderWidth.width + borderWidth.height) / 4,\n strokeStyle: style.borderColor,\n pointStyle: pointStyle || style.pointStyle,\n rotation: style.rotation,\n textAlign: textAlign || style.textAlign,\n borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n datasetIndex: meta.index\n };\n }, this);\n }\n },\n title: {\n color: (ctx)=>ctx.chart.options.color,\n display: false,\n position: 'center',\n text: ''\n }\n },\n descriptors: {\n _scriptable: (name)=>!name.startsWith('on'),\n labels: {\n _scriptable: (name)=>![\n 'generateLabels',\n 'filter',\n 'sort'\n ].includes(name)\n }\n }\n};\n\nclass Title extends Element {\n constructor(config){\n super();\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this._padding = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight) {\n const opts = this.options;\n this.left = 0;\n this.top = 0;\n if (!opts.display) {\n this.width = this.height = this.right = this.bottom = 0;\n return;\n }\n this.width = this.right = maxWidth;\n this.height = this.bottom = maxHeight;\n const lineCount = isArray(opts.text) ? opts.text.length : 1;\n this._padding = toPadding(opts.padding);\n const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n if (this.isHorizontal()) {\n this.height = textSize;\n } else {\n this.width = textSize;\n }\n }\n isHorizontal() {\n const pos = this.options.position;\n return pos === 'top' || pos === 'bottom';\n }\n _drawArgs(offset) {\n const { top , left , bottom , right , options } = this;\n const align = options.align;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n if (this.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n titleY = top + offset;\n maxWidth = right - left;\n } else {\n if (options.position === 'left') {\n titleX = left + offset;\n titleY = _alignStartEnd(align, bottom, top);\n rotation = PI * -0.5;\n } else {\n titleX = right - offset;\n titleY = _alignStartEnd(align, top, bottom);\n rotation = PI * 0.5;\n }\n maxWidth = bottom - top;\n }\n return {\n titleX,\n titleY,\n maxWidth,\n rotation\n };\n }\n draw() {\n const ctx = this.ctx;\n const opts = this.options;\n if (!opts.display) {\n return;\n }\n const fontOpts = toFont(opts.font);\n const lineHeight = fontOpts.lineHeight;\n const offset = lineHeight / 2 + this._padding.top;\n const { titleX , titleY , maxWidth , rotation } = this._drawArgs(offset);\n renderText(ctx, opts.text, 0, 0, fontOpts, {\n color: opts.color,\n maxWidth,\n rotation,\n textAlign: _toLeftRightCenter(opts.align),\n textBaseline: 'middle',\n translation: [\n titleX,\n titleY\n ]\n });\n }\n}\nfunction createTitle(chart, titleOpts) {\n const title = new Title({\n ctx: chart.ctx,\n options: titleOpts,\n chart\n });\n layouts.configure(chart, title, titleOpts);\n layouts.addBox(chart, title);\n chart.titleBlock = title;\n}\nvar plugin_title = {\n id: 'title',\n _element: Title,\n start (chart, _args, options) {\n createTitle(chart, options);\n },\n stop (chart) {\n const titleBlock = chart.titleBlock;\n layouts.removeBox(chart, titleBlock);\n delete chart.titleBlock;\n },\n beforeUpdate (chart, _args, options) {\n const title = chart.titleBlock;\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'bold'\n },\n fullSize: true,\n padding: 10,\n position: 'top',\n text: '',\n weight: 2000\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false\n }\n};\n\nconst map = new WeakMap();\nvar plugin_subtitle = {\n id: 'subtitle',\n start (chart, _args, options) {\n const title = new Title({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, title, options);\n layouts.addBox(chart, title);\n map.set(chart, title);\n },\n stop (chart) {\n layouts.removeBox(chart, map.get(chart));\n map.delete(chart);\n },\n beforeUpdate (chart, _args, options) {\n const title = map.get(chart);\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'normal'\n },\n fullSize: true,\n padding: 0,\n position: 'top',\n text: '',\n weight: 1500\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false\n }\n};\n\nconst positioners = {\n average (items) {\n if (!items.length) {\n return false;\n }\n let i, len;\n let xSet = new Set();\n let y = 0;\n let count = 0;\n for(i = 0, len = items.length; i < len; ++i){\n const el = items[i].element;\n if (el && el.hasValue()) {\n const pos = el.tooltipPosition();\n xSet.add(pos.x);\n y += pos.y;\n ++count;\n }\n }\n if (count === 0 || xSet.size === 0) {\n return false;\n }\n const xAverage = [\n ...xSet\n ].reduce((a, b)=>a + b) / xSet.size;\n return {\n x: xAverage,\n y: y / count\n };\n },\n nearest (items, eventPosition) {\n if (!items.length) {\n return false;\n }\n let x = eventPosition.x;\n let y = eventPosition.y;\n let minDistance = Number.POSITIVE_INFINITY;\n let i, len, nearestElement;\n for(i = 0, len = items.length; i < len; ++i){\n const el = items[i].element;\n if (el && el.hasValue()) {\n const center = el.getCenterPoint();\n const d = distanceBetweenPoints(eventPosition, center);\n if (d < minDistance) {\n minDistance = d;\n nearestElement = el;\n }\n }\n }\n if (nearestElement) {\n const tp = nearestElement.tooltipPosition();\n x = tp.x;\n y = tp.y;\n }\n return {\n x,\n y\n };\n }\n};\nfunction pushOrConcat(base, toPush) {\n if (toPush) {\n if (isArray(toPush)) {\n Array.prototype.push.apply(base, toPush);\n } else {\n base.push(toPush);\n }\n }\n return base;\n}\n function splitNewlines(str) {\n if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n return str.split('\\n');\n }\n return str;\n}\n function createTooltipItem(chart, item) {\n const { element , datasetIndex , index } = item;\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n const { label , value } = controller.getLabelAndValue(index);\n return {\n chart,\n label,\n parsed: controller.getParsed(index),\n raw: chart.data.datasets[datasetIndex].data[index],\n formattedValue: value,\n dataset: controller.getDataset(),\n dataIndex: index,\n datasetIndex,\n element\n };\n}\n function getTooltipSize(tooltip, options) {\n const ctx = tooltip.chart.ctx;\n const { body , footer , title } = tooltip;\n const { boxWidth , boxHeight } = options;\n const bodyFont = toFont(options.bodyFont);\n const titleFont = toFont(options.titleFont);\n const footerFont = toFont(options.footerFont);\n const titleLineCount = title.length;\n const footerLineCount = footer.length;\n const bodyLineItemCount = body.length;\n const padding = toPadding(options.padding);\n let height = padding.height;\n let width = 0;\n let combinedBodyLength = body.reduce((count, bodyItem)=>count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n if (titleLineCount) {\n height += titleLineCount * titleFont.lineHeight + (titleLineCount - 1) * options.titleSpacing + options.titleMarginBottom;\n }\n if (combinedBodyLength) {\n const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n height += bodyLineItemCount * bodyLineHeight + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + (combinedBodyLength - 1) * options.bodySpacing;\n }\n if (footerLineCount) {\n height += options.footerMarginTop + footerLineCount * footerFont.lineHeight + (footerLineCount - 1) * options.footerSpacing;\n }\n let widthPadding = 0;\n const maxLineWidth = function(line) {\n width = Math.max(width, ctx.measureText(line).width + widthPadding);\n };\n ctx.save();\n ctx.font = titleFont.string;\n each(tooltip.title, maxLineWidth);\n ctx.font = bodyFont.string;\n each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n widthPadding = options.displayColors ? boxWidth + 2 + options.boxPadding : 0;\n each(body, (bodyItem)=>{\n each(bodyItem.before, maxLineWidth);\n each(bodyItem.lines, maxLineWidth);\n each(bodyItem.after, maxLineWidth);\n });\n widthPadding = 0;\n ctx.font = footerFont.string;\n each(tooltip.footer, maxLineWidth);\n ctx.restore();\n width += padding.width;\n return {\n width,\n height\n };\n}\nfunction determineYAlign(chart, size) {\n const { y , height } = size;\n if (y < height / 2) {\n return 'top';\n } else if (y > chart.height - height / 2) {\n return 'bottom';\n }\n return 'center';\n}\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n const { x , width } = size;\n const caret = options.caretSize + options.caretPadding;\n if (xAlign === 'left' && x + width + caret > chart.width) {\n return true;\n }\n if (xAlign === 'right' && x - width - caret < 0) {\n return true;\n }\n}\nfunction determineXAlign(chart, options, size, yAlign) {\n const { x , width } = size;\n const { width: chartWidth , chartArea: { left , right } } = chart;\n let xAlign = 'center';\n if (yAlign === 'center') {\n xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n } else if (x <= width / 2) {\n xAlign = 'left';\n } else if (x >= chartWidth - width / 2) {\n xAlign = 'right';\n }\n if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n xAlign = 'center';\n }\n return xAlign;\n}\n function determineAlignment(chart, options, size) {\n const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n return {\n xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n yAlign\n };\n}\nfunction alignX(size, xAlign) {\n let { x , width } = size;\n if (xAlign === 'right') {\n x -= width;\n } else if (xAlign === 'center') {\n x -= width / 2;\n }\n return x;\n}\nfunction alignY(size, yAlign, paddingAndSize) {\n let { y , height } = size;\n if (yAlign === 'top') {\n y += paddingAndSize;\n } else if (yAlign === 'bottom') {\n y -= height + paddingAndSize;\n } else {\n y -= height / 2;\n }\n return y;\n}\n function getBackgroundPoint(options, size, alignment, chart) {\n const { caretSize , caretPadding , cornerRadius } = options;\n const { xAlign , yAlign } = alignment;\n const paddingAndSize = caretSize + caretPadding;\n const { topLeft , topRight , bottomLeft , bottomRight } = toTRBLCorners(cornerRadius);\n let x = alignX(size, xAlign);\n const y = alignY(size, yAlign, paddingAndSize);\n if (yAlign === 'center') {\n if (xAlign === 'left') {\n x += paddingAndSize;\n } else if (xAlign === 'right') {\n x -= paddingAndSize;\n }\n } else if (xAlign === 'left') {\n x -= Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x += Math.max(topRight, bottomRight) + caretSize;\n }\n return {\n x: _limitValue(x, 0, chart.width - size.width),\n y: _limitValue(y, 0, chart.height - size.height)\n };\n}\nfunction getAlignedX(tooltip, align, options) {\n const padding = toPadding(options.padding);\n return align === 'center' ? tooltip.x + tooltip.width / 2 : align === 'right' ? tooltip.x + tooltip.width - padding.right : tooltip.x + padding.left;\n}\n function getBeforeAfterBodyLines(callback) {\n return pushOrConcat([], splitNewlines(callback));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n return createContext(parent, {\n tooltip,\n tooltipItems,\n type: 'tooltip'\n });\n}\nfunction overrideCallbacks(callbacks, context) {\n const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n return override ? callbacks.override(override) : callbacks;\n}\nconst defaultCallbacks = {\n beforeTitle: noop,\n title (tooltipItems) {\n if (tooltipItems.length > 0) {\n const item = tooltipItems[0];\n const labels = item.chart.data.labels;\n const labelCount = labels ? labels.length : 0;\n if (this && this.options && this.options.mode === 'dataset') {\n return item.dataset.label || '';\n } else if (item.label) {\n return item.label;\n } else if (labelCount > 0 && item.dataIndex < labelCount) {\n return labels[item.dataIndex];\n }\n }\n return '';\n },\n afterTitle: noop,\n beforeBody: noop,\n beforeLabel: noop,\n label (tooltipItem) {\n if (this && this.options && this.options.mode === 'dataset') {\n return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n }\n let label = tooltipItem.dataset.label || '';\n if (label) {\n label += ': ';\n }\n const value = tooltipItem.formattedValue;\n if (!isNullOrUndef(value)) {\n label += value;\n }\n return label;\n },\n labelColor (tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n borderColor: options.borderColor,\n backgroundColor: options.backgroundColor,\n borderWidth: options.borderWidth,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderRadius: 0\n };\n },\n labelTextColor () {\n return this.options.bodyColor;\n },\n labelPointStyle (tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n pointStyle: options.pointStyle,\n rotation: options.rotation\n };\n },\n afterLabel: noop,\n afterBody: noop,\n beforeFooter: noop,\n footer: noop,\n afterFooter: noop\n};\n function invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n const result = callbacks[name].call(ctx, arg);\n if (typeof result === 'undefined') {\n return defaultCallbacks[name].call(ctx, arg);\n }\n return result;\n}\nclass Tooltip extends Element {\n static positioners = positioners;\n constructor(config){\n super();\n this.opacity = 0;\n this._active = [];\n this._eventPosition = undefined;\n this._size = undefined;\n this._cachedAnimations = undefined;\n this._tooltipItems = [];\n this.$animations = undefined;\n this.$context = undefined;\n this.chart = config.chart;\n this.options = config.options;\n this.dataPoints = undefined;\n this.title = undefined;\n this.beforeBody = undefined;\n this.body = undefined;\n this.afterBody = undefined;\n this.footer = undefined;\n this.xAlign = undefined;\n this.yAlign = undefined;\n this.x = undefined;\n this.y = undefined;\n this.height = undefined;\n this.width = undefined;\n this.caretX = undefined;\n this.caretY = undefined;\n this.labelColors = undefined;\n this.labelPointStyles = undefined;\n this.labelTextColors = undefined;\n }\n initialize(options) {\n this.options = options;\n this._cachedAnimations = undefined;\n this.$context = undefined;\n }\n _resolveAnimations() {\n const cached = this._cachedAnimations;\n if (cached) {\n return cached;\n }\n const chart = this.chart;\n const options = this.options.setContext(this.getContext());\n const opts = options.enabled && chart.options.animation && options.animations;\n const animations = new Animations(this.chart, opts);\n if (opts._cacheable) {\n this._cachedAnimations = Object.freeze(animations);\n }\n return animations;\n }\n getContext() {\n return this.$context || (this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n }\n getTitle(context, options) {\n const { callbacks } = options;\n const beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);\n const title = invokeCallbackWithFallback(callbacks, 'title', this, context);\n const afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n lines = pushOrConcat(lines, splitNewlines(title));\n lines = pushOrConcat(lines, splitNewlines(afterTitle));\n return lines;\n }\n getBeforeBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems));\n }\n getBody(tooltipItems, options) {\n const { callbacks } = options;\n const bodyItems = [];\n each(tooltipItems, (context)=>{\n const bodyItem = {\n before: [],\n lines: [],\n after: []\n };\n const scoped = overrideCallbacks(callbacks, context);\n pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', this, context)));\n pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', this, context));\n pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', this, context)));\n bodyItems.push(bodyItem);\n });\n return bodyItems;\n }\n getAfterBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems));\n }\n getFooter(tooltipItems, options) {\n const { callbacks } = options;\n const beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);\n const footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);\n const afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n lines = pushOrConcat(lines, splitNewlines(footer));\n lines = pushOrConcat(lines, splitNewlines(afterFooter));\n return lines;\n }\n _createItems(options) {\n const active = this._active;\n const data = this.chart.data;\n const labelColors = [];\n const labelPointStyles = [];\n const labelTextColors = [];\n let tooltipItems = [];\n let i, len;\n for(i = 0, len = active.length; i < len; ++i){\n tooltipItems.push(createTooltipItem(this.chart, active[i]));\n }\n if (options.filter) {\n tooltipItems = tooltipItems.filter((element, index, array)=>options.filter(element, index, array, data));\n }\n if (options.itemSort) {\n tooltipItems = tooltipItems.sort((a, b)=>options.itemSort(a, b, data));\n }\n each(tooltipItems, (context)=>{\n const scoped = overrideCallbacks(options.callbacks, context);\n labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', this, context));\n labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', this, context));\n labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', this, context));\n });\n this.labelColors = labelColors;\n this.labelPointStyles = labelPointStyles;\n this.labelTextColors = labelTextColors;\n this.dataPoints = tooltipItems;\n return tooltipItems;\n }\n update(changed, replay) {\n const options = this.options.setContext(this.getContext());\n const active = this._active;\n let properties;\n let tooltipItems = [];\n if (!active.length) {\n if (this.opacity !== 0) {\n properties = {\n opacity: 0\n };\n }\n } else {\n const position = positioners[options.position].call(this, active, this._eventPosition);\n tooltipItems = this._createItems(options);\n this.title = this.getTitle(tooltipItems, options);\n this.beforeBody = this.getBeforeBody(tooltipItems, options);\n this.body = this.getBody(tooltipItems, options);\n this.afterBody = this.getAfterBody(tooltipItems, options);\n this.footer = this.getFooter(tooltipItems, options);\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, size);\n const alignment = determineAlignment(this.chart, options, positionAndSize);\n const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n properties = {\n opacity: 1,\n x: backgroundPoint.x,\n y: backgroundPoint.y,\n width: size.width,\n height: size.height,\n caretX: position.x,\n caretY: position.y\n };\n }\n this._tooltipItems = tooltipItems;\n this.$context = undefined;\n if (properties) {\n this._resolveAnimations().update(this, properties);\n }\n if (changed && options.external) {\n options.external.call(this, {\n chart: this.chart,\n tooltip: this,\n replay\n });\n }\n }\n drawCaret(tooltipPoint, ctx, size, options) {\n const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n ctx.lineTo(caretPosition.x1, caretPosition.y1);\n ctx.lineTo(caretPosition.x2, caretPosition.y2);\n ctx.lineTo(caretPosition.x3, caretPosition.y3);\n }\n getCaretPosition(tooltipPoint, size, options) {\n const { xAlign , yAlign } = this;\n const { caretSize , cornerRadius } = options;\n const { topLeft , topRight , bottomLeft , bottomRight } = toTRBLCorners(cornerRadius);\n const { x: ptX , y: ptY } = tooltipPoint;\n const { width , height } = size;\n let x1, x2, x3, y1, y2, y3;\n if (yAlign === 'center') {\n y2 = ptY + height / 2;\n if (xAlign === 'left') {\n x1 = ptX;\n x2 = x1 - caretSize;\n y1 = y2 + caretSize;\n y3 = y2 - caretSize;\n } else {\n x1 = ptX + width;\n x2 = x1 + caretSize;\n y1 = y2 - caretSize;\n y3 = y2 + caretSize;\n }\n x3 = x1;\n } else {\n if (xAlign === 'left') {\n x2 = ptX + Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n } else {\n x2 = this.caretX;\n }\n if (yAlign === 'top') {\n y1 = ptY;\n y2 = y1 - caretSize;\n x1 = x2 - caretSize;\n x3 = x2 + caretSize;\n } else {\n y1 = ptY + height;\n y2 = y1 + caretSize;\n x1 = x2 + caretSize;\n x3 = x2 - caretSize;\n }\n y3 = y1;\n }\n return {\n x1,\n x2,\n x3,\n y1,\n y2,\n y3\n };\n }\n drawTitle(pt, ctx, options) {\n const title = this.title;\n const length = title.length;\n let titleFont, titleSpacing, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.titleAlign, options);\n ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n ctx.textBaseline = 'middle';\n titleFont = toFont(options.titleFont);\n titleSpacing = options.titleSpacing;\n ctx.fillStyle = options.titleColor;\n ctx.font = titleFont.string;\n for(i = 0; i < length; ++i){\n ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n pt.y += titleFont.lineHeight + titleSpacing;\n if (i + 1 === length) {\n pt.y += options.titleMarginBottom - titleSpacing;\n }\n }\n }\n }\n _drawColorBox(ctx, pt, i, rtlHelper, options) {\n const labelColor = this.labelColors[i];\n const labelPointStyle = this.labelPointStyles[i];\n const { boxHeight , boxWidth } = options;\n const bodyFont = toFont(options.bodyFont);\n const colorX = getAlignedX(this, 'left', options);\n const rtlColorX = rtlHelper.x(colorX);\n const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n const colorY = pt.y + yOffSet;\n if (options.usePointStyle) {\n const drawOptions = {\n radius: Math.min(boxWidth, boxHeight) / 2,\n pointStyle: labelPointStyle.pointStyle,\n rotation: labelPointStyle.rotation,\n borderWidth: 1\n };\n const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n const centerY = colorY + boxHeight / 2;\n ctx.strokeStyle = options.multiKeyBackground;\n ctx.fillStyle = options.multiKeyBackground;\n drawPoint(ctx, drawOptions, centerX, centerY);\n ctx.strokeStyle = labelColor.borderColor;\n ctx.fillStyle = labelColor.backgroundColor;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : labelColor.borderWidth || 1;\n ctx.strokeStyle = labelColor.borderColor;\n ctx.setLineDash(labelColor.borderDash || []);\n ctx.lineDashOffset = labelColor.borderDashOffset || 0;\n const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);\n const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);\n const borderRadius = toTRBLCorners(labelColor.borderRadius);\n if (Object.values(borderRadius).some((v)=>v !== 0)) {\n ctx.beginPath();\n ctx.fillStyle = options.multiKeyBackground;\n addRoundedRectPath(ctx, {\n x: outerX,\n y: colorY,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius\n });\n ctx.fill();\n ctx.stroke();\n ctx.fillStyle = labelColor.backgroundColor;\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: innerX,\n y: colorY + 1,\n w: boxWidth - 2,\n h: boxHeight - 2,\n radius: borderRadius\n });\n ctx.fill();\n } else {\n ctx.fillStyle = options.multiKeyBackground;\n ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n ctx.fillStyle = labelColor.backgroundColor;\n ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n }\n }\n ctx.fillStyle = this.labelTextColors[i];\n }\n drawBody(pt, ctx, options) {\n const { body } = this;\n const { bodySpacing , bodyAlign , displayColors , boxHeight , boxWidth , boxPadding } = options;\n const bodyFont = toFont(options.bodyFont);\n let bodyLineHeight = bodyFont.lineHeight;\n let xLinePadding = 0;\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n const fillLineOfText = function(line) {\n ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n pt.y += bodyLineHeight + bodySpacing;\n };\n const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n let bodyItem, textColor, lines, i, j, ilen, jlen;\n ctx.textAlign = bodyAlign;\n ctx.textBaseline = 'middle';\n ctx.font = bodyFont.string;\n pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n ctx.fillStyle = options.bodyColor;\n each(this.beforeBody, fillLineOfText);\n xLinePadding = displayColors && bodyAlignForCalculation !== 'right' ? bodyAlign === 'center' ? boxWidth / 2 + boxPadding : boxWidth + 2 + boxPadding : 0;\n for(i = 0, ilen = body.length; i < ilen; ++i){\n bodyItem = body[i];\n textColor = this.labelTextColors[i];\n ctx.fillStyle = textColor;\n each(bodyItem.before, fillLineOfText);\n lines = bodyItem.lines;\n if (displayColors && lines.length) {\n this._drawColorBox(ctx, pt, i, rtlHelper, options);\n bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n }\n for(j = 0, jlen = lines.length; j < jlen; ++j){\n fillLineOfText(lines[j]);\n bodyLineHeight = bodyFont.lineHeight;\n }\n each(bodyItem.after, fillLineOfText);\n }\n xLinePadding = 0;\n bodyLineHeight = bodyFont.lineHeight;\n each(this.afterBody, fillLineOfText);\n pt.y -= bodySpacing;\n }\n drawFooter(pt, ctx, options) {\n const footer = this.footer;\n const length = footer.length;\n let footerFont, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.footerAlign, options);\n pt.y += options.footerMarginTop;\n ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n ctx.textBaseline = 'middle';\n footerFont = toFont(options.footerFont);\n ctx.fillStyle = options.footerColor;\n ctx.font = footerFont.string;\n for(i = 0; i < length; ++i){\n ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n pt.y += footerFont.lineHeight + options.footerSpacing;\n }\n }\n }\n drawBackground(pt, ctx, tooltipSize, options) {\n const { xAlign , yAlign } = this;\n const { x , y } = pt;\n const { width , height } = tooltipSize;\n const { topLeft , topRight , bottomLeft , bottomRight } = toTRBLCorners(options.cornerRadius);\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.beginPath();\n ctx.moveTo(x + topLeft, y);\n if (yAlign === 'top') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width - topRight, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n if (yAlign === 'center' && xAlign === 'right') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width, y + height - bottomRight);\n ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n if (yAlign === 'bottom') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + bottomLeft, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n if (yAlign === 'center' && xAlign === 'left') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x, y + topLeft);\n ctx.quadraticCurveTo(x, y, x + topLeft, y);\n ctx.closePath();\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n }\n _updateAnimationTarget(options) {\n const chart = this.chart;\n const anims = this.$animations;\n const animX = anims && anims.x;\n const animY = anims && anims.y;\n if (animX || animY) {\n const position = positioners[options.position].call(this, this._active, this._eventPosition);\n if (!position) {\n return;\n }\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, this._size);\n const alignment = determineAlignment(chart, options, positionAndSize);\n const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n if (animX._to !== point.x || animY._to !== point.y) {\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n this.width = size.width;\n this.height = size.height;\n this.caretX = position.x;\n this.caretY = position.y;\n this._resolveAnimations().update(this, point);\n }\n }\n }\n _willRender() {\n return !!this.opacity;\n }\n draw(ctx) {\n const options = this.options.setContext(this.getContext());\n let opacity = this.opacity;\n if (!opacity) {\n return;\n }\n this._updateAnimationTarget(options);\n const tooltipSize = {\n width: this.width,\n height: this.height\n };\n const pt = {\n x: this.x,\n y: this.y\n };\n opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n const padding = toPadding(options.padding);\n const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n if (options.enabled && hasTooltipContent) {\n ctx.save();\n ctx.globalAlpha = opacity;\n this.drawBackground(pt, ctx, tooltipSize, options);\n overrideTextDirection(ctx, options.textDirection);\n pt.y += padding.top;\n this.drawTitle(pt, ctx, options);\n this.drawBody(pt, ctx, options);\n this.drawFooter(pt, ctx, options);\n restoreTextDirection(ctx, options.textDirection);\n ctx.restore();\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements, eventPosition) {\n const lastActive = this._active;\n const active = activeElements.map(({ datasetIndex , index })=>{\n const meta = this.chart.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('Cannot find a dataset at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index\n };\n });\n const changed = !_elementsEqual(lastActive, active);\n const positionChanged = this._positionChanged(active, eventPosition);\n if (changed || positionChanged) {\n this._active = active;\n this._eventPosition = eventPosition;\n this._ignoreReplayEvents = true;\n this.update(true);\n }\n }\n handleEvent(e, replay, inChartArea = true) {\n if (replay && this._ignoreReplayEvents) {\n return false;\n }\n this._ignoreReplayEvents = false;\n const options = this.options;\n const lastActive = this._active || [];\n const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n const positionChanged = this._positionChanged(active, e);\n const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n if (changed) {\n this._active = active;\n if (options.enabled || options.external) {\n this._eventPosition = {\n x: e.x,\n y: e.y\n };\n this.update(true, replay);\n }\n }\n return changed;\n }\n _getActiveElements(e, lastActive, replay, inChartArea) {\n const options = this.options;\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive.filter((i)=>this.chart.data.datasets[i.datasetIndex] && this.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== undefined);\n }\n const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n if (options.reverse) {\n active.reverse();\n }\n return active;\n }\n _positionChanged(active, e) {\n const { caretX , caretY , options } = this;\n const position = positioners[options.position].call(this, active, e);\n return position !== false && (caretX !== position.x || caretY !== position.y);\n }\n}\nvar plugin_tooltip = {\n id: 'tooltip',\n _element: Tooltip,\n positioners,\n afterInit (chart, _args, options) {\n if (options) {\n chart.tooltip = new Tooltip({\n chart,\n options\n });\n }\n },\n beforeUpdate (chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n reset (chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n afterDraw (chart) {\n const tooltip = chart.tooltip;\n if (tooltip && tooltip._willRender()) {\n const args = {\n tooltip\n };\n if (chart.notifyPlugins('beforeTooltipDraw', {\n ...args,\n cancelable: true\n }) === false) {\n return;\n }\n tooltip.draw(chart.ctx);\n chart.notifyPlugins('afterTooltipDraw', args);\n }\n },\n afterEvent (chart, args) {\n if (chart.tooltip) {\n const useFinalPosition = args.replay;\n if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n args.changed = true;\n }\n }\n },\n defaults: {\n enabled: true,\n external: null,\n position: 'average',\n backgroundColor: 'rgba(0,0,0,0.8)',\n titleColor: '#fff',\n titleFont: {\n weight: 'bold'\n },\n titleSpacing: 2,\n titleMarginBottom: 6,\n titleAlign: 'left',\n bodyColor: '#fff',\n bodySpacing: 2,\n bodyFont: {},\n bodyAlign: 'left',\n footerColor: '#fff',\n footerSpacing: 2,\n footerMarginTop: 6,\n footerFont: {\n weight: 'bold'\n },\n footerAlign: 'left',\n padding: 6,\n caretPadding: 2,\n caretSize: 5,\n cornerRadius: 6,\n boxHeight: (ctx, opts)=>opts.bodyFont.size,\n boxWidth: (ctx, opts)=>opts.bodyFont.size,\n multiKeyBackground: '#fff',\n displayColors: true,\n boxPadding: 0,\n borderColor: 'rgba(0,0,0,0)',\n borderWidth: 0,\n animation: {\n duration: 400,\n easing: 'easeOutQuart'\n },\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'width',\n 'height',\n 'caretX',\n 'caretY'\n ]\n },\n opacity: {\n easing: 'linear',\n duration: 200\n }\n },\n callbacks: defaultCallbacks\n },\n defaultRoutes: {\n bodyFont: 'font',\n footerFont: 'font',\n titleFont: 'font'\n },\n descriptors: {\n _scriptable: (name)=>name !== 'filter' && name !== 'itemSort' && name !== 'external',\n _indexable: false,\n callbacks: {\n _scriptable: false,\n _indexable: false\n },\n animation: {\n _fallback: false\n },\n animations: {\n _fallback: 'animation'\n }\n },\n additionalOptionScopes: [\n 'interaction'\n ]\n};\n\nvar plugins = /*#__PURE__*/Object.freeze({\n__proto__: null,\nColors: plugin_colors,\nDecimation: plugin_decimation,\nFiller: index,\nLegend: plugin_legend,\nSubTitle: plugin_subtitle,\nTitle: plugin_title,\nTooltip: plugin_tooltip\n});\n\nconst addIfString = (labels, raw, index, addedLabels)=>{\n if (typeof raw === 'string') {\n index = labels.push(raw) - 1;\n addedLabels.unshift({\n index,\n label: raw\n });\n } else if (isNaN(raw)) {\n index = null;\n }\n return index;\n};\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n const first = labels.indexOf(raw);\n if (first === -1) {\n return addIfString(labels, raw, index, addedLabels);\n }\n const last = labels.lastIndexOf(raw);\n return first !== last ? index : first;\n}\nconst validIndex = (index, max)=>index === null ? null : _limitValue(Math.round(index), 0, max);\nfunction _getLabelForValue(value) {\n const labels = this.getLabels();\n if (value >= 0 && value < labels.length) {\n return labels[value];\n }\n return value;\n}\nclass CategoryScale extends Scale {\n static id = 'category';\n static defaults = {\n ticks: {\n callback: _getLabelForValue\n }\n };\n constructor(cfg){\n super(cfg);\n this._startValue = undefined;\n this._valueRange = 0;\n this._addedLabels = [];\n }\n init(scaleOptions) {\n const added = this._addedLabels;\n if (added.length) {\n const labels = this.getLabels();\n for (const { index , label } of added){\n if (labels[index] === label) {\n labels.splice(index, 1);\n }\n }\n this._addedLabels = [];\n }\n super.init(scaleOptions);\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n const labels = this.getLabels();\n index = isFinite(index) && labels[index] === raw ? index : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n return validIndex(index, labels.length - 1);\n }\n determineDataLimits() {\n const { minDefined , maxDefined } = this.getUserBounds();\n let { min , max } = this.getMinMax(true);\n if (this.options.bounds === 'ticks') {\n if (!minDefined) {\n min = 0;\n }\n if (!maxDefined) {\n max = this.getLabels().length - 1;\n }\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const min = this.min;\n const max = this.max;\n const offset = this.options.offset;\n const ticks = [];\n let labels = this.getLabels();\n labels = min === 0 && max === labels.length - 1 ? labels : labels.slice(min, max + 1);\n this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n this._startValue = this.min - (offset ? 0.5 : 0);\n for(let value = min; value <= max; value++){\n ticks.push({\n value\n });\n }\n return ticks;\n }\n getLabelForValue(value) {\n return _getLabelForValue.call(this, value);\n }\n configure() {\n super.configure();\n if (!this.isHorizontal()) {\n this._reversePixels = !this._reversePixels;\n }\n }\n getPixelForValue(value) {\n if (typeof value !== 'number') {\n value = this.parse(value);\n }\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getValueForPixel(pixel) {\n return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n }\n getBasePixel() {\n return this.bottom;\n }\n}\n\nfunction generateTicks$1(generationOptions, dataRange) {\n const ticks = [];\n const MIN_SPACING = 1e-14;\n const { bounds , step , min , max , precision , count , maxTicks , maxDigits , includeBounds } = generationOptions;\n const unit = step || 1;\n const maxSpaces = maxTicks - 1;\n const { min: rmin , max: rmax } = dataRange;\n const minDefined = !isNullOrUndef(min);\n const maxDefined = !isNullOrUndef(max);\n const countDefined = !isNullOrUndef(count);\n const minSpacing = (rmax - rmin) / (maxDigits + 1);\n let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n let factor, niceMin, niceMax, numSpaces;\n if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n return [\n {\n value: rmin\n },\n {\n value: rmax\n }\n ];\n }\n numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n if (numSpaces > maxSpaces) {\n spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n }\n if (!isNullOrUndef(precision)) {\n factor = Math.pow(10, precision);\n spacing = Math.ceil(spacing * factor) / factor;\n }\n if (bounds === 'ticks') {\n niceMin = Math.floor(rmin / spacing) * spacing;\n niceMax = Math.ceil(rmax / spacing) * spacing;\n } else {\n niceMin = rmin;\n niceMax = rmax;\n }\n if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n spacing = (max - min) / numSpaces;\n niceMin = min;\n niceMax = max;\n } else if (countDefined) {\n niceMin = minDefined ? min : niceMin;\n niceMax = maxDefined ? max : niceMax;\n numSpaces = count - 1;\n spacing = (niceMax - niceMin) / numSpaces;\n } else {\n numSpaces = (niceMax - niceMin) / spacing;\n if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n numSpaces = Math.round(numSpaces);\n } else {\n numSpaces = Math.ceil(numSpaces);\n }\n }\n const decimalPlaces = Math.max(_decimalPlaces(spacing), _decimalPlaces(niceMin));\n factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n niceMin = Math.round(niceMin * factor) / factor;\n niceMax = Math.round(niceMax * factor) / factor;\n let j = 0;\n if (minDefined) {\n if (includeBounds && niceMin !== min) {\n ticks.push({\n value: min\n });\n if (niceMin < min) {\n j++;\n }\n if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n j++;\n }\n } else if (niceMin < min) {\n j++;\n }\n }\n for(; j < numSpaces; ++j){\n const tickValue = Math.round((niceMin + j * spacing) * factor) / factor;\n if (maxDefined && tickValue > max) {\n break;\n }\n ticks.push({\n value: tickValue\n });\n }\n if (maxDefined && includeBounds && niceMax !== max) {\n if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n ticks[ticks.length - 1].value = max;\n } else {\n ticks.push({\n value: max\n });\n }\n } else if (!maxDefined || niceMax === max) {\n ticks.push({\n value: niceMax\n });\n }\n return ticks;\n}\nfunction relativeLabelSize(value, minSpacing, { horizontal , minRotation }) {\n const rad = toRadians(minRotation);\n const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n const length = 0.75 * minSpacing * ('' + value).length;\n return Math.min(minSpacing / ratio, length);\n}\nclass LinearScaleBase extends Scale {\n constructor(cfg){\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._endValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n return null;\n }\n return +raw;\n }\n handleTickRangeOptions() {\n const { beginAtZero } = this.options;\n const { minDefined , maxDefined } = this.getUserBounds();\n let { min , max } = this;\n const setMin = (v)=>min = minDefined ? min : v;\n const setMax = (v)=>max = maxDefined ? max : v;\n if (beginAtZero) {\n const minSign = sign(min);\n const maxSign = sign(max);\n if (minSign < 0 && maxSign < 0) {\n setMax(0);\n } else if (minSign > 0 && maxSign > 0) {\n setMin(0);\n }\n }\n if (min === max) {\n let offset = max === 0 ? 1 : Math.abs(max * 0.05);\n setMax(max + offset);\n if (!beginAtZero) {\n setMin(min - offset);\n }\n }\n this.min = min;\n this.max = max;\n }\n getTickLimit() {\n const tickOpts = this.options.ticks;\n let { maxTicksLimit , stepSize } = tickOpts;\n let maxTicks;\n if (stepSize) {\n maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n if (maxTicks > 1000) {\n console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n maxTicks = 1000;\n }\n } else {\n maxTicks = this.computeTickLimit();\n maxTicksLimit = maxTicksLimit || 11;\n }\n if (maxTicksLimit) {\n maxTicks = Math.min(maxTicksLimit, maxTicks);\n }\n return maxTicks;\n }\n computeTickLimit() {\n return Number.POSITIVE_INFINITY;\n }\n buildTicks() {\n const opts = this.options;\n const tickOpts = opts.ticks;\n let maxTicks = this.getTickLimit();\n maxTicks = Math.max(2, maxTicks);\n const numericGeneratorOptions = {\n maxTicks,\n bounds: opts.bounds,\n min: opts.min,\n max: opts.max,\n precision: tickOpts.precision,\n step: tickOpts.stepSize,\n count: tickOpts.count,\n maxDigits: this._maxDigits(),\n horizontal: this.isHorizontal(),\n minRotation: tickOpts.minRotation || 0,\n includeBounds: tickOpts.includeBounds !== false\n };\n const dataRange = this._range || this;\n const ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n configure() {\n const ticks = this.ticks;\n let start = this.min;\n let end = this.max;\n super.configure();\n if (this.options.offset && ticks.length) {\n const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n start -= offset;\n end += offset;\n }\n this._startValue = start;\n this._endValue = end;\n this._valueRange = end - start;\n }\n getLabelForValue(value) {\n return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n}\n\nclass LinearScale extends LinearScaleBase {\n static id = 'linear';\n static defaults = {\n ticks: {\n callback: Ticks.formatters.numeric\n }\n };\n determineDataLimits() {\n const { min , max } = this.getMinMax(true);\n this.min = isNumberFinite(min) ? min : 0;\n this.max = isNumberFinite(max) ? max : 1;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n const horizontal = this.isHorizontal();\n const length = horizontal ? this.width : this.height;\n const minRotation = toRadians(this.options.ticks.minRotation);\n const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n const tickFont = this._resolveTickFontOptions(0);\n return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n }\n getPixelForValue(value) {\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n }\n}\n\nconst log10Floor = (v)=>Math.floor(log10(v));\nconst changeExponent = (v, m)=>Math.pow(10, log10Floor(v) + m);\nfunction isMajor(tickVal) {\n const remain = tickVal / Math.pow(10, log10Floor(tickVal));\n return remain === 1;\n}\nfunction steps(min, max, rangeExp) {\n const rangeStep = Math.pow(10, rangeExp);\n const start = Math.floor(min / rangeStep);\n const end = Math.ceil(max / rangeStep);\n return end - start;\n}\nfunction startExp(min, max) {\n const range = max - min;\n let rangeExp = log10Floor(range);\n while(steps(min, max, rangeExp) > 10){\n rangeExp++;\n }\n while(steps(min, max, rangeExp) < 10){\n rangeExp--;\n }\n return Math.min(rangeExp, log10Floor(min));\n}\n function generateTicks(generationOptions, { min , max }) {\n min = finiteOrDefault(generationOptions.min, min);\n const ticks = [];\n const minExp = log10Floor(min);\n let exp = startExp(min, max);\n let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n const stepSize = Math.pow(10, exp);\n const base = minExp > exp ? Math.pow(10, minExp) : 0;\n const start = Math.round((min - base) * precision) / precision;\n const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;\n let significand = Math.floor((start - offset) / Math.pow(10, exp));\n let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);\n while(value < max){\n ticks.push({\n value,\n major: isMajor(value),\n significand\n });\n if (significand >= 10) {\n significand = significand < 15 ? 15 : 20;\n } else {\n significand++;\n }\n if (significand >= 20) {\n exp++;\n significand = 2;\n precision = exp >= 0 ? 1 : precision;\n }\n value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;\n }\n const lastTick = finiteOrDefault(generationOptions.max, value);\n ticks.push({\n value: lastTick,\n major: isMajor(lastTick),\n significand\n });\n return ticks;\n}\nclass LogarithmicScale extends Scale {\n static id = 'logarithmic';\n static defaults = {\n ticks: {\n callback: Ticks.formatters.logarithmic,\n major: {\n enabled: true\n }\n }\n };\n constructor(cfg){\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n const value = LinearScaleBase.prototype.parse.apply(this, [\n raw,\n index\n ]);\n if (value === 0) {\n this._zero = true;\n return undefined;\n }\n return isNumberFinite(value) && value > 0 ? value : null;\n }\n determineDataLimits() {\n const { min , max } = this.getMinMax(true);\n this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n if (this.options.beginAtZero) {\n this._zero = true;\n }\n if (this._zero && this.min !== this._suggestedMin && !isNumberFinite(this._userMin)) {\n this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);\n }\n this.handleTickRangeOptions();\n }\n handleTickRangeOptions() {\n const { minDefined , maxDefined } = this.getUserBounds();\n let min = this.min;\n let max = this.max;\n const setMin = (v)=>min = minDefined ? min : v;\n const setMax = (v)=>max = maxDefined ? max : v;\n if (min === max) {\n if (min <= 0) {\n setMin(1);\n setMax(10);\n } else {\n setMin(changeExponent(min, -1));\n setMax(changeExponent(max, +1));\n }\n }\n if (min <= 0) {\n setMin(changeExponent(max, -1));\n }\n if (max <= 0) {\n setMax(changeExponent(min, +1));\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const opts = this.options;\n const generationOptions = {\n min: this._userMin,\n max: this._userMax\n };\n const ticks = generateTicks(generationOptions, this);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n getLabelForValue(value) {\n return value === undefined ? '0' : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n configure() {\n const start = this.min;\n super.configure();\n this._startValue = log10(start);\n this._valueRange = log10(this.max) - log10(start);\n }\n getPixelForValue(value) {\n if (value === undefined || value === 0) {\n value = this.min;\n }\n if (value === null || isNaN(value)) {\n return NaN;\n }\n return this.getPixelForDecimal(value === this.min ? 0 : (log10(value) - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n const decimal = this.getDecimalForPixel(pixel);\n return Math.pow(10, this._startValue + decimal * this._valueRange);\n }\n}\n\nfunction getTickBackdropHeight(opts) {\n const tickOpts = opts.ticks;\n if (tickOpts.display && opts.display) {\n const padding = toPadding(tickOpts.backdropPadding);\n return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n }\n return 0;\n}\nfunction measureLabelSize(ctx, font, label) {\n label = isArray(label) ? label : [\n label\n ];\n return {\n w: _longestText(ctx, font.string, label),\n h: label.length * font.lineHeight\n };\n}\nfunction determineLimits(angle, pos, size, min, max) {\n if (angle === min || angle === max) {\n return {\n start: pos - size / 2,\n end: pos + size / 2\n };\n } else if (angle < min || angle > max) {\n return {\n start: pos - size,\n end: pos\n };\n }\n return {\n start: pos,\n end: pos + size\n };\n}\n function fitWithPointLabels(scale) {\n const orig = {\n l: scale.left + scale._padding.left,\n r: scale.right - scale._padding.right,\n t: scale.top + scale._padding.top,\n b: scale.bottom - scale._padding.bottom\n };\n const limits = Object.assign({}, orig);\n const labelSizes = [];\n const padding = [];\n const valueCount = scale._pointLabels.length;\n const pointLabelOpts = scale.options.pointLabels;\n const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n for(let i = 0; i < valueCount; i++){\n const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n padding[i] = opts.padding;\n const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n const plFont = toFont(opts.font);\n const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n labelSizes[i] = textSize;\n const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n const angle = Math.round(toDegrees(angleRadians));\n const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n }\n scale.setCenterPoint(orig.l - limits.l, limits.r - orig.r, orig.t - limits.t, limits.b - orig.b);\n scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n const sin = Math.abs(Math.sin(angle));\n const cos = Math.abs(Math.cos(angle));\n let x = 0;\n let y = 0;\n if (hLimits.start < orig.l) {\n x = (orig.l - hLimits.start) / sin;\n limits.l = Math.min(limits.l, orig.l - x);\n } else if (hLimits.end > orig.r) {\n x = (hLimits.end - orig.r) / sin;\n limits.r = Math.max(limits.r, orig.r + x);\n }\n if (vLimits.start < orig.t) {\n y = (orig.t - vLimits.start) / cos;\n limits.t = Math.min(limits.t, orig.t - y);\n } else if (vLimits.end > orig.b) {\n y = (vLimits.end - orig.b) / cos;\n limits.b = Math.max(limits.b, orig.b + y);\n }\n}\nfunction createPointLabelItem(scale, index, itemOpts) {\n const outerDistance = scale.drawingArea;\n const { extra , additionalAngle , padding , size } = itemOpts;\n const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);\n const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n const y = yForAngle(pointLabelPosition.y, size.h, angle);\n const textAlign = getTextAlignForAngle(angle);\n const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n return {\n visible: true,\n x: pointLabelPosition.x,\n y,\n textAlign,\n left,\n top: y,\n right: left + size.w,\n bottom: y + size.h\n };\n}\nfunction isNotOverlapped(item, area) {\n if (!area) {\n return true;\n }\n const { left , top , right , bottom } = item;\n const apexesInArea = _isPointInArea({\n x: left,\n y: top\n }, area) || _isPointInArea({\n x: left,\n y: bottom\n }, area) || _isPointInArea({\n x: right,\n y: top\n }, area) || _isPointInArea({\n x: right,\n y: bottom\n }, area);\n return !apexesInArea;\n}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n const items = [];\n const valueCount = scale._pointLabels.length;\n const opts = scale.options;\n const { centerPointLabels , display } = opts.pointLabels;\n const itemOpts = {\n extra: getTickBackdropHeight(opts) / 2,\n additionalAngle: centerPointLabels ? PI / valueCount : 0\n };\n let area;\n for(let i = 0; i < valueCount; i++){\n itemOpts.padding = padding[i];\n itemOpts.size = labelSizes[i];\n const item = createPointLabelItem(scale, i, itemOpts);\n items.push(item);\n if (display === 'auto') {\n item.visible = isNotOverlapped(item, area);\n if (item.visible) {\n area = item;\n }\n }\n }\n return items;\n}\nfunction getTextAlignForAngle(angle) {\n if (angle === 0 || angle === 180) {\n return 'center';\n } else if (angle < 180) {\n return 'left';\n }\n return 'right';\n}\nfunction leftForTextAlign(x, w, align) {\n if (align === 'right') {\n x -= w;\n } else if (align === 'center') {\n x -= w / 2;\n }\n return x;\n}\nfunction yForAngle(y, h, angle) {\n if (angle === 90 || angle === 270) {\n y -= h / 2;\n } else if (angle > 270 || angle < 90) {\n y -= h;\n }\n return y;\n}\nfunction drawPointLabelBox(ctx, opts, item) {\n const { left , top , right , bottom } = item;\n const { backdropColor } = opts;\n if (!isNullOrUndef(backdropColor)) {\n const borderRadius = toTRBLCorners(opts.borderRadius);\n const padding = toPadding(opts.backdropPadding);\n ctx.fillStyle = backdropColor;\n const backdropLeft = left - padding.left;\n const backdropTop = top - padding.top;\n const backdropWidth = right - left + padding.width;\n const backdropHeight = bottom - top + padding.height;\n if (Object.values(borderRadius).some((v)=>v !== 0)) {\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: backdropLeft,\n y: backdropTop,\n w: backdropWidth,\n h: backdropHeight,\n radius: borderRadius\n });\n ctx.fill();\n } else {\n ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n }\n }\n}\nfunction drawPointLabels(scale, labelCount) {\n const { ctx , options: { pointLabels } } = scale;\n for(let i = labelCount - 1; i >= 0; i--){\n const item = scale._pointLabelItems[i];\n if (!item.visible) {\n continue;\n }\n const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n drawPointLabelBox(ctx, optsAtIndex, item);\n const plFont = toFont(optsAtIndex.font);\n const { x , y , textAlign } = item;\n renderText(ctx, scale._pointLabels[i], x, y + plFont.lineHeight / 2, plFont, {\n color: optsAtIndex.color,\n textAlign: textAlign,\n textBaseline: 'middle'\n });\n }\n}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n const { ctx } = scale;\n if (circular) {\n ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n } else {\n let pointPosition = scale.getPointPosition(0, radius);\n ctx.moveTo(pointPosition.x, pointPosition.y);\n for(let i = 1; i < labelCount; i++){\n pointPosition = scale.getPointPosition(i, radius);\n ctx.lineTo(pointPosition.x, pointPosition.y);\n }\n }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {\n const ctx = scale.ctx;\n const circular = gridLineOpts.circular;\n const { color , lineWidth } = gridLineOpts;\n if (!circular && !labelCount || !color || !lineWidth || radius < 0) {\n return;\n }\n ctx.save();\n ctx.strokeStyle = color;\n ctx.lineWidth = lineWidth;\n ctx.setLineDash(borderOpts.dash || []);\n ctx.lineDashOffset = borderOpts.dashOffset;\n ctx.beginPath();\n pathRadiusLine(scale, radius, circular, labelCount);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n}\nfunction createPointLabelContext(parent, index, label) {\n return createContext(parent, {\n label,\n index,\n type: 'pointLabel'\n });\n}\nclass RadialLinearScale extends LinearScaleBase {\n static id = 'radialLinear';\n static defaults = {\n display: true,\n animate: true,\n position: 'chartArea',\n angleLines: {\n display: true,\n lineWidth: 1,\n borderDash: [],\n borderDashOffset: 0.0\n },\n grid: {\n circular: false\n },\n startAngle: 0,\n ticks: {\n showLabelBackdrop: true,\n callback: Ticks.formatters.numeric\n },\n pointLabels: {\n backdropColor: undefined,\n backdropPadding: 2,\n display: true,\n font: {\n size: 10\n },\n callback (label) {\n return label;\n },\n padding: 5,\n centerPointLabels: false\n }\n };\n static defaultRoutes = {\n 'angleLines.color': 'borderColor',\n 'pointLabels.color': 'color',\n 'ticks.color': 'color'\n };\n static descriptors = {\n angleLines: {\n _fallback: 'grid'\n }\n };\n constructor(cfg){\n super(cfg);\n this.xCenter = undefined;\n this.yCenter = undefined;\n this.drawingArea = undefined;\n this._pointLabels = [];\n this._pointLabelItems = [];\n }\n setDimensions() {\n const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n const w = this.width = this.maxWidth - padding.width;\n const h = this.height = this.maxHeight - padding.height;\n this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n this.drawingArea = Math.floor(Math.min(w, h) / 2);\n }\n determineDataLimits() {\n const { min , max } = this.getMinMax(false);\n this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n }\n generateTickLabels(ticks) {\n LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n this._pointLabels = this.getLabels().map((value, index)=>{\n const label = callback(this.options.pointLabels.callback, [\n value,\n index\n ], this);\n return label || label === 0 ? label : '';\n }).filter((v, i)=>this.chart.getDataVisibility(i));\n }\n fit() {\n const opts = this.options;\n if (opts.display && opts.pointLabels.display) {\n fitWithPointLabels(this);\n } else {\n this.setCenterPoint(0, 0, 0, 0);\n }\n }\n setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n }\n getIndexAngle(index) {\n const angleMultiplier = TAU / (this._pointLabels.length || 1);\n const startAngle = this.options.startAngle || 0;\n return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n }\n getDistanceFromCenterForValue(value) {\n if (isNullOrUndef(value)) {\n return NaN;\n }\n const scalingFactor = this.drawingArea / (this.max - this.min);\n if (this.options.reverse) {\n return (this.max - value) * scalingFactor;\n }\n return (value - this.min) * scalingFactor;\n }\n getValueForDistanceFromCenter(distance) {\n if (isNullOrUndef(distance)) {\n return NaN;\n }\n const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n }\n getPointLabelContext(index) {\n const pointLabels = this._pointLabels || [];\n if (index >= 0 && index < pointLabels.length) {\n const pointLabel = pointLabels[index];\n return createPointLabelContext(this.getContext(), index, pointLabel);\n }\n }\n getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n return {\n x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n angle\n };\n }\n getPointPositionForValue(index, value) {\n return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n }\n getBasePosition(index) {\n return this.getPointPositionForValue(index || 0, this.getBaseValue());\n }\n getPointLabelPosition(index) {\n const { left , top , right , bottom } = this._pointLabelItems[index];\n return {\n left,\n top,\n right,\n bottom\n };\n }\n drawBackground() {\n const { backgroundColor , grid: { circular } } = this.options;\n if (backgroundColor) {\n const ctx = this.ctx;\n ctx.save();\n ctx.beginPath();\n pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n ctx.closePath();\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n }\n drawGrid() {\n const ctx = this.ctx;\n const opts = this.options;\n const { angleLines , grid , border } = opts;\n const labelCount = this._pointLabels.length;\n let i, offset, position;\n if (opts.pointLabels.display) {\n drawPointLabels(this, labelCount);\n }\n if (grid.display) {\n this.ticks.forEach((tick, index)=>{\n if (index !== 0 || index === 0 && this.min < 0) {\n offset = this.getDistanceFromCenterForValue(tick.value);\n const context = this.getContext(index);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);\n }\n });\n }\n if (angleLines.display) {\n ctx.save();\n for(i = labelCount - 1; i >= 0; i--){\n const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n const { color , lineWidth } = optsAtIndex;\n if (!lineWidth || !color) {\n continue;\n }\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = color;\n ctx.setLineDash(optsAtIndex.borderDash);\n ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n offset = this.getDistanceFromCenterForValue(opts.reverse ? this.min : this.max);\n position = this.getPointPosition(i, offset);\n ctx.beginPath();\n ctx.moveTo(this.xCenter, this.yCenter);\n ctx.lineTo(position.x, position.y);\n ctx.stroke();\n }\n ctx.restore();\n }\n }\n drawBorder() {}\n drawLabels() {\n const ctx = this.ctx;\n const opts = this.options;\n const tickOpts = opts.ticks;\n if (!tickOpts.display) {\n return;\n }\n const startAngle = this.getIndexAngle(0);\n let offset, width;\n ctx.save();\n ctx.translate(this.xCenter, this.yCenter);\n ctx.rotate(startAngle);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n this.ticks.forEach((tick, index)=>{\n if (index === 0 && this.min >= 0 && !opts.reverse) {\n return;\n }\n const optsAtIndex = tickOpts.setContext(this.getContext(index));\n const tickFont = toFont(optsAtIndex.font);\n offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n if (optsAtIndex.showLabelBackdrop) {\n ctx.font = tickFont.string;\n width = ctx.measureText(tick.label).width;\n ctx.fillStyle = optsAtIndex.backdropColor;\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillRect(-width / 2 - padding.left, -offset - tickFont.size / 2 - padding.top, width + padding.width, tickFont.size + padding.height);\n }\n renderText(ctx, tick.label, 0, -offset, tickFont, {\n color: optsAtIndex.color,\n strokeColor: optsAtIndex.textStrokeColor,\n strokeWidth: optsAtIndex.textStrokeWidth\n });\n });\n ctx.restore();\n }\n drawTitle() {}\n}\n\nconst INTERVALS = {\n millisecond: {\n common: true,\n size: 1,\n steps: 1000\n },\n second: {\n common: true,\n size: 1000,\n steps: 60\n },\n minute: {\n common: true,\n size: 60000,\n steps: 60\n },\n hour: {\n common: true,\n size: 3600000,\n steps: 24\n },\n day: {\n common: true,\n size: 86400000,\n steps: 30\n },\n week: {\n common: false,\n size: 604800000,\n steps: 4\n },\n month: {\n common: true,\n size: 2.628e9,\n steps: 12\n },\n quarter: {\n common: false,\n size: 7.884e9,\n steps: 4\n },\n year: {\n common: true,\n size: 3.154e10\n }\n};\n const UNITS = /* #__PURE__ */ Object.keys(INTERVALS);\n function sorter(a, b) {\n return a - b;\n}\n function parse(scale, input) {\n if (isNullOrUndef(input)) {\n return null;\n }\n const adapter = scale._adapter;\n const { parser , round , isoWeekday } = scale._parseOpts;\n let value = input;\n if (typeof parser === 'function') {\n value = parser(value);\n }\n if (!isNumberFinite(value)) {\n value = typeof parser === 'string' ? adapter.parse(value, parser) : adapter.parse(value);\n }\n if (value === null) {\n return null;\n }\n if (round) {\n value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true) ? adapter.startOf(value, 'isoWeek', isoWeekday) : adapter.startOf(value, round);\n }\n return +value;\n}\n function determineUnitForAutoTicks(minUnit, min, max, capacity) {\n const ilen = UNITS.length;\n for(let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i){\n const interval = INTERVALS[UNITS[i]];\n const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n return UNITS[i];\n }\n }\n return UNITS[ilen - 1];\n}\n function determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n for(let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--){\n const unit = UNITS[i];\n if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n return unit;\n }\n }\n return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n function determineMajorUnit(unit) {\n for(let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i){\n if (INTERVALS[UNITS[i]].common) {\n return UNITS[i];\n }\n }\n}\n function addTick(ticks, time, timestamps) {\n if (!timestamps) {\n ticks[time] = true;\n } else if (timestamps.length) {\n const { lo , hi } = _lookup(timestamps, time);\n const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n ticks[timestamp] = true;\n }\n}\n function setMajorTicks(scale, ticks, map, majorUnit) {\n const adapter = scale._adapter;\n const first = +adapter.startOf(ticks[0].value, majorUnit);\n const last = ticks[ticks.length - 1].value;\n let major, index;\n for(major = first; major <= last; major = +adapter.add(major, 1, majorUnit)){\n index = map[major];\n if (index >= 0) {\n ticks[index].major = true;\n }\n }\n return ticks;\n}\n function ticksFromTimestamps(scale, values, majorUnit) {\n const ticks = [];\n const map = {};\n const ilen = values.length;\n let i, value;\n for(i = 0; i < ilen; ++i){\n value = values[i];\n map[value] = i;\n ticks.push({\n value,\n major: false\n });\n }\n return ilen === 0 || !majorUnit ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nclass TimeScale extends Scale {\n static id = 'time';\n static defaults = {\n bounds: 'data',\n adapters: {},\n time: {\n parser: false,\n unit: false,\n round: false,\n isoWeekday: false,\n minUnit: 'millisecond',\n displayFormats: {}\n },\n ticks: {\n source: 'auto',\n callback: false,\n major: {\n enabled: false\n }\n }\n };\n constructor(props){\n super(props);\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n this._unit = 'day';\n this._majorUnit = undefined;\n this._offsets = {};\n this._normalized = false;\n this._parseOpts = undefined;\n }\n init(scaleOpts, opts = {}) {\n const time = scaleOpts.time || (scaleOpts.time = {});\n const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n adapter.init(opts);\n mergeIf(time.displayFormats, adapter.formats());\n this._parseOpts = {\n parser: time.parser,\n round: time.round,\n isoWeekday: time.isoWeekday\n };\n super.init(scaleOpts);\n this._normalized = opts.normalized;\n }\n parse(raw, index) {\n if (raw === undefined) {\n return null;\n }\n return parse(this, raw);\n }\n beforeLayout() {\n super.beforeLayout();\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n }\n determineDataLimits() {\n const options = this.options;\n const adapter = this._adapter;\n const unit = options.time.unit || 'day';\n let { min , max , minDefined , maxDefined } = this.getUserBounds();\n function _applyBounds(bounds) {\n if (!minDefined && !isNaN(bounds.min)) {\n min = Math.min(min, bounds.min);\n }\n if (!maxDefined && !isNaN(bounds.max)) {\n max = Math.max(max, bounds.max);\n }\n }\n if (!minDefined || !maxDefined) {\n _applyBounds(this._getLabelBounds());\n if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n _applyBounds(this.getMinMax(false));\n }\n }\n min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n this.min = Math.min(min, max - 1);\n this.max = Math.max(min + 1, max);\n }\n _getLabelBounds() {\n const arr = this.getLabelTimestamps();\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n if (arr.length) {\n min = arr[0];\n max = arr[arr.length - 1];\n }\n return {\n min,\n max\n };\n }\n buildTicks() {\n const options = this.options;\n const timeOpts = options.time;\n const tickOpts = options.ticks;\n const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n if (options.bounds === 'ticks' && timestamps.length) {\n this.min = this._userMin || timestamps[0];\n this.max = this._userMax || timestamps[timestamps.length - 1];\n }\n const min = this.min;\n const max = this.max;\n const ticks = _filterBetween(timestamps, min, max);\n this._unit = timeOpts.unit || (tickOpts.autoSkip ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min)) : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined : determineMajorUnit(this._unit);\n this.initOffsets(timestamps);\n if (options.reverse) {\n ticks.reverse();\n }\n return ticksFromTimestamps(this, ticks, this._majorUnit);\n }\n afterAutoSkip() {\n if (this.options.offsetAfterAutoskip) {\n this.initOffsets(this.ticks.map((tick)=>+tick.value));\n }\n }\n initOffsets(timestamps = []) {\n let start = 0;\n let end = 0;\n let first, last;\n if (this.options.offset && timestamps.length) {\n first = this.getDecimalForValue(timestamps[0]);\n if (timestamps.length === 1) {\n start = 1 - first;\n } else {\n start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n }\n last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n if (timestamps.length === 1) {\n end = last;\n } else {\n end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n }\n }\n const limit = timestamps.length < 3 ? 0.5 : 0.25;\n start = _limitValue(start, 0, limit);\n end = _limitValue(end, 0, limit);\n this._offsets = {\n start,\n end,\n factor: 1 / (start + 1 + end)\n };\n }\n _generate() {\n const adapter = this._adapter;\n const min = this.min;\n const max = this.max;\n const options = this.options;\n const timeOpts = options.time;\n const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n const stepSize = valueOrDefault(options.ticks.stepSize, 1);\n const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n const hasWeekday = isNumber(weekday) || weekday === true;\n const ticks = {};\n let first = min;\n let time, count;\n if (hasWeekday) {\n first = +adapter.startOf(first, 'isoWeek', weekday);\n }\n first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n }\n const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n for(time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++){\n addTick(ticks, time, timestamps);\n }\n if (time === max || options.bounds === 'ticks' || count === 1) {\n addTick(ticks, time, timestamps);\n }\n return Object.keys(ticks).sort(sorter).map((x)=>+x);\n }\n getLabelForValue(value) {\n const adapter = this._adapter;\n const timeOpts = this.options.time;\n if (timeOpts.tooltipFormat) {\n return adapter.format(value, timeOpts.tooltipFormat);\n }\n return adapter.format(value, timeOpts.displayFormats.datetime);\n }\n format(value, format) {\n const options = this.options;\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const fmt = format || formats[unit];\n return this._adapter.format(value, fmt);\n }\n _tickFormatFunction(time, index, ticks, format) {\n const options = this.options;\n const formatter = options.ticks.callback;\n if (formatter) {\n return callback(formatter, [\n time,\n index,\n ticks\n ], this);\n }\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const majorUnit = this._majorUnit;\n const minorFormat = unit && formats[unit];\n const majorFormat = majorUnit && formats[majorUnit];\n const tick = ticks[index];\n const major = majorUnit && majorFormat && tick && tick.major;\n return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n }\n generateTickLabels(ticks) {\n let i, ilen, tick;\n for(i = 0, ilen = ticks.length; i < ilen; ++i){\n tick = ticks[i];\n tick.label = this._tickFormatFunction(tick.value, i, ticks);\n }\n }\n getDecimalForValue(value) {\n return value === null ? NaN : (value - this.min) / (this.max - this.min);\n }\n getPixelForValue(value) {\n const offsets = this._offsets;\n const pos = this.getDecimalForValue(value);\n return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return this.min + pos * (this.max - this.min);\n }\n _getLabelSize(label) {\n const ticksOpts = this.options.ticks;\n const tickLabelWidth = this.ctx.measureText(label).width;\n const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n const cosRotation = Math.cos(angle);\n const sinRotation = Math.sin(angle);\n const tickFontSize = this._resolveTickFontOptions(0).size;\n return {\n w: tickLabelWidth * cosRotation + tickFontSize * sinRotation,\n h: tickLabelWidth * sinRotation + tickFontSize * cosRotation\n };\n }\n _getLabelCapacity(exampleTime) {\n const timeOpts = this.options.time;\n const displayFormats = timeOpts.displayFormats;\n const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [\n exampleTime\n ], this._majorUnit), format);\n const size = this._getLabelSize(exampleLabel);\n const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n return capacity > 0 ? capacity : 1;\n }\n getDataTimestamps() {\n let timestamps = this._cache.data || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const metas = this.getMatchingVisibleMetas();\n if (this._normalized && metas.length) {\n return this._cache.data = metas[0].controller.getAllParsedValues(this);\n }\n for(i = 0, ilen = metas.length; i < ilen; ++i){\n timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n }\n return this._cache.data = this.normalize(timestamps);\n }\n getLabelTimestamps() {\n const timestamps = this._cache.labels || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const labels = this.getLabels();\n for(i = 0, ilen = labels.length; i < ilen; ++i){\n timestamps.push(parse(this, labels[i]));\n }\n return this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps);\n }\n normalize(values) {\n return _arrayUnique(values.sort(sorter));\n }\n}\n\nfunction interpolate(table, val, reverse) {\n let lo = 0;\n let hi = table.length - 1;\n let prevSource, nextSource, prevTarget, nextTarget;\n if (reverse) {\n if (val >= table[lo].pos && val <= table[hi].pos) {\n ({ lo , hi } = _lookupByKey(table, 'pos', val));\n }\n ({ pos: prevSource , time: prevTarget } = table[lo]);\n ({ pos: nextSource , time: nextTarget } = table[hi]);\n } else {\n if (val >= table[lo].time && val <= table[hi].time) {\n ({ lo , hi } = _lookupByKey(table, 'time', val));\n }\n ({ time: prevSource , pos: prevTarget } = table[lo]);\n ({ time: nextSource , pos: nextTarget } = table[hi]);\n }\n const span = nextSource - prevSource;\n return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n static id = 'timeseries';\n static defaults = TimeScale.defaults;\n constructor(props){\n super(props);\n this._table = [];\n this._minPos = undefined;\n this._tableRange = undefined;\n }\n initOffsets() {\n const timestamps = this._getTimestampsForTable();\n const table = this._table = this.buildLookupTable(timestamps);\n this._minPos = interpolate(table, this.min);\n this._tableRange = interpolate(table, this.max) - this._minPos;\n super.initOffsets(timestamps);\n }\n buildLookupTable(timestamps) {\n const { min , max } = this;\n const items = [];\n const table = [];\n let i, ilen, prev, curr, next;\n for(i = 0, ilen = timestamps.length; i < ilen; ++i){\n curr = timestamps[i];\n if (curr >= min && curr <= max) {\n items.push(curr);\n }\n }\n if (items.length < 2) {\n return [\n {\n time: min,\n pos: 0\n },\n {\n time: max,\n pos: 1\n }\n ];\n }\n for(i = 0, ilen = items.length; i < ilen; ++i){\n next = items[i + 1];\n prev = items[i - 1];\n curr = items[i];\n if (Math.round((next + prev) / 2) !== curr) {\n table.push({\n time: curr,\n pos: i / (ilen - 1)\n });\n }\n }\n return table;\n }\n _generate() {\n const min = this.min;\n const max = this.max;\n let timestamps = super.getDataTimestamps();\n if (!timestamps.includes(min) || !timestamps.length) {\n timestamps.splice(0, 0, min);\n }\n if (!timestamps.includes(max) || timestamps.length === 1) {\n timestamps.push(max);\n }\n return timestamps.sort((a, b)=>a - b);\n }\n _getTimestampsForTable() {\n let timestamps = this._cache.all || [];\n if (timestamps.length) {\n return timestamps;\n }\n const data = this.getDataTimestamps();\n const label = this.getLabelTimestamps();\n if (data.length && label.length) {\n timestamps = this.normalize(data.concat(label));\n } else {\n timestamps = data.length ? data : label;\n }\n timestamps = this._cache.all = timestamps;\n return timestamps;\n }\n getDecimalForValue(value) {\n return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n }\n}\n\nvar scales = /*#__PURE__*/Object.freeze({\n__proto__: null,\nCategoryScale: CategoryScale,\nLinearScale: LinearScale,\nLogarithmicScale: LogarithmicScale,\nRadialLinearScale: RadialLinearScale,\nTimeScale: TimeScale,\nTimeSeriesScale: TimeSeriesScale\n});\n\nconst registerables = [\n controllers,\n elements,\n plugins,\n scales\n];\n\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, plugin_colors as Colors, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, index as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, defaults, elements, layouts, plugins, registerables, registry, scales };\n//# sourceMappingURL=chart.js.map\n","import {Chart, registerables} from '../dist/chart.js';\n\nChart.register(...registerables);\n\nexport * from '../dist/chart.js';\nexport default Chart;\n","/*!\n * chartjs-plugin-datalabels v2.2.0\n * https://chartjs-plugin-datalabels.netlify.app\n * (c) 2017-2022 chartjs-plugin-datalabels contributors\n * Released under the MIT license\n */\nimport { isNullOrUndef, merge, toFont, resolve, toPadding, valueOrDefault, callback, isObject, each } from 'chart.js/helpers';\nimport { defaults as defaults$1, ArcElement, PointElement, BarElement } from 'chart.js';\n\nvar devicePixelRatio = (function() {\n if (typeof window !== 'undefined') {\n if (window.devicePixelRatio) {\n return window.devicePixelRatio;\n }\n\n // devicePixelRatio is undefined on IE10\n // https://stackoverflow.com/a/20204180/8837887\n // https://github.com/chartjs/chartjs-plugin-datalabels/issues/85\n var screen = window.screen;\n if (screen) {\n return (screen.deviceXDPI || 1) / (screen.logicalXDPI || 1);\n }\n }\n\n return 1;\n}());\n\nvar utils = {\n // @todo move this in Chart.helpers.toTextLines\n toTextLines: function(inputs) {\n var lines = [];\n var input;\n\n inputs = [].concat(inputs);\n while (inputs.length) {\n input = inputs.pop();\n if (typeof input === 'string') {\n lines.unshift.apply(lines, input.split('\\n'));\n } else if (Array.isArray(input)) {\n inputs.push.apply(inputs, input);\n } else if (!isNullOrUndef(inputs)) {\n lines.unshift('' + input);\n }\n }\n\n return lines;\n },\n\n // @todo move this in Chart.helpers.canvas.textSize\n // @todo cache calls of measureText if font doesn't change?!\n textSize: function(ctx, lines, font) {\n var items = [].concat(lines);\n var ilen = items.length;\n var prev = ctx.font;\n var width = 0;\n var i;\n\n ctx.font = font.string;\n\n for (i = 0; i < ilen; ++i) {\n width = Math.max(ctx.measureText(items[i]).width, width);\n }\n\n ctx.font = prev;\n\n return {\n height: ilen * font.lineHeight,\n width: width\n };\n },\n\n /**\n * Returns value bounded by min and max. This is equivalent to max(min, min(value, max)).\n * @todo move this method in Chart.helpers.bound\n * https://doc.qt.io/qt-5/qtglobal.html#qBound\n */\n bound: function(min, value, max) {\n return Math.max(min, Math.min(value, max));\n },\n\n /**\n * Returns an array of pair [value, state] where state is:\n * * -1: value is only in a0 (removed)\n * * 1: value is only in a1 (added)\n */\n arrayDiff: function(a0, a1) {\n var prev = a0.slice();\n var updates = [];\n var i, j, ilen, v;\n\n for (i = 0, ilen = a1.length; i < ilen; ++i) {\n v = a1[i];\n j = prev.indexOf(v);\n\n if (j === -1) {\n updates.push([v, 1]);\n } else {\n prev.splice(j, 1);\n }\n }\n\n for (i = 0, ilen = prev.length; i < ilen; ++i) {\n updates.push([prev[i], -1]);\n }\n\n return updates;\n },\n\n /**\n * https://github.com/chartjs/chartjs-plugin-datalabels/issues/70\n */\n rasterize: function(v) {\n return Math.round(v * devicePixelRatio) / devicePixelRatio;\n }\n};\n\nfunction orient(point, origin) {\n var x0 = origin.x;\n var y0 = origin.y;\n\n if (x0 === null) {\n return {x: 0, y: -1};\n }\n if (y0 === null) {\n return {x: 1, y: 0};\n }\n\n var dx = point.x - x0;\n var dy = point.y - y0;\n var ln = Math.sqrt(dx * dx + dy * dy);\n\n return {\n x: ln ? dx / ln : 0,\n y: ln ? dy / ln : -1\n };\n}\n\nfunction aligned(x, y, vx, vy, align) {\n switch (align) {\n case 'center':\n vx = vy = 0;\n break;\n case 'bottom':\n vx = 0;\n vy = 1;\n break;\n case 'right':\n vx = 1;\n vy = 0;\n break;\n case 'left':\n vx = -1;\n vy = 0;\n break;\n case 'top':\n vx = 0;\n vy = -1;\n break;\n case 'start':\n vx = -vx;\n vy = -vy;\n break;\n case 'end':\n // keep natural orientation\n break;\n default:\n // clockwise rotation (in degree)\n align *= (Math.PI / 180);\n vx = Math.cos(align);\n vy = Math.sin(align);\n break;\n }\n\n return {\n x: x,\n y: y,\n vx: vx,\n vy: vy\n };\n}\n\n// Line clipping (Cohen–Sutherland algorithm)\n// https://en.wikipedia.org/wiki/Cohen–Sutherland_algorithm\n\nvar R_INSIDE = 0;\nvar R_LEFT = 1;\nvar R_RIGHT = 2;\nvar R_BOTTOM = 4;\nvar R_TOP = 8;\n\nfunction region(x, y, rect) {\n var res = R_INSIDE;\n\n if (x < rect.left) {\n res |= R_LEFT;\n } else if (x > rect.right) {\n res |= R_RIGHT;\n }\n if (y < rect.top) {\n res |= R_TOP;\n } else if (y > rect.bottom) {\n res |= R_BOTTOM;\n }\n\n return res;\n}\n\nfunction clipped(segment, area) {\n var x0 = segment.x0;\n var y0 = segment.y0;\n var x1 = segment.x1;\n var y1 = segment.y1;\n var r0 = region(x0, y0, area);\n var r1 = region(x1, y1, area);\n var r, x, y;\n\n // eslint-disable-next-line no-constant-condition\n while (true) {\n if (!(r0 | r1) || (r0 & r1)) {\n // both points inside or on the same side: no clipping\n break;\n }\n\n // at least one point is outside\n r = r0 || r1;\n\n if (r & R_TOP) {\n x = x0 + (x1 - x0) * (area.top - y0) / (y1 - y0);\n y = area.top;\n } else if (r & R_BOTTOM) {\n x = x0 + (x1 - x0) * (area.bottom - y0) / (y1 - y0);\n y = area.bottom;\n } else if (r & R_RIGHT) {\n y = y0 + (y1 - y0) * (area.right - x0) / (x1 - x0);\n x = area.right;\n } else if (r & R_LEFT) {\n y = y0 + (y1 - y0) * (area.left - x0) / (x1 - x0);\n x = area.left;\n }\n\n if (r === r0) {\n x0 = x;\n y0 = y;\n r0 = region(x0, y0, area);\n } else {\n x1 = x;\n y1 = y;\n r1 = region(x1, y1, area);\n }\n }\n\n return {\n x0: x0,\n x1: x1,\n y0: y0,\n y1: y1\n };\n}\n\nfunction compute$1(range, config) {\n var anchor = config.anchor;\n var segment = range;\n var x, y;\n\n if (config.clamp) {\n segment = clipped(segment, config.area);\n }\n\n if (anchor === 'start') {\n x = segment.x0;\n y = segment.y0;\n } else if (anchor === 'end') {\n x = segment.x1;\n y = segment.y1;\n } else {\n x = (segment.x0 + segment.x1) / 2;\n y = (segment.y0 + segment.y1) / 2;\n }\n\n return aligned(x, y, range.vx, range.vy, config.align);\n}\n\nvar positioners = {\n arc: function(el, config) {\n var angle = (el.startAngle + el.endAngle) / 2;\n var vx = Math.cos(angle);\n var vy = Math.sin(angle);\n var r0 = el.innerRadius;\n var r1 = el.outerRadius;\n\n return compute$1({\n x0: el.x + vx * r0,\n y0: el.y + vy * r0,\n x1: el.x + vx * r1,\n y1: el.y + vy * r1,\n vx: vx,\n vy: vy\n }, config);\n },\n\n point: function(el, config) {\n var v = orient(el, config.origin);\n var rx = v.x * el.options.radius;\n var ry = v.y * el.options.radius;\n\n return compute$1({\n x0: el.x - rx,\n y0: el.y - ry,\n x1: el.x + rx,\n y1: el.y + ry,\n vx: v.x,\n vy: v.y\n }, config);\n },\n\n bar: function(el, config) {\n var v = orient(el, config.origin);\n var x = el.x;\n var y = el.y;\n var sx = 0;\n var sy = 0;\n\n if (el.horizontal) {\n x = Math.min(el.x, el.base);\n sx = Math.abs(el.base - el.x);\n } else {\n y = Math.min(el.y, el.base);\n sy = Math.abs(el.base - el.y);\n }\n\n return compute$1({\n x0: x,\n y0: y + sy,\n x1: x + sx,\n y1: y,\n vx: v.x,\n vy: v.y\n }, config);\n },\n\n fallback: function(el, config) {\n var v = orient(el, config.origin);\n\n return compute$1({\n x0: el.x,\n y0: el.y,\n x1: el.x + (el.width || 0),\n y1: el.y + (el.height || 0),\n vx: v.x,\n vy: v.y\n }, config);\n }\n};\n\nvar rasterize = utils.rasterize;\n\nfunction boundingRects(model) {\n var borderWidth = model.borderWidth || 0;\n var padding = model.padding;\n var th = model.size.height;\n var tw = model.size.width;\n var tx = -tw / 2;\n var ty = -th / 2;\n\n return {\n frame: {\n x: tx - padding.left - borderWidth,\n y: ty - padding.top - borderWidth,\n w: tw + padding.width + borderWidth * 2,\n h: th + padding.height + borderWidth * 2\n },\n text: {\n x: tx,\n y: ty,\n w: tw,\n h: th\n }\n };\n}\n\nfunction getScaleOrigin(el, context) {\n var scale = context.chart.getDatasetMeta(context.datasetIndex).vScale;\n\n if (!scale) {\n return null;\n }\n\n if (scale.xCenter !== undefined && scale.yCenter !== undefined) {\n return {x: scale.xCenter, y: scale.yCenter};\n }\n\n var pixel = scale.getBasePixel();\n return el.horizontal ?\n {x: pixel, y: null} :\n {x: null, y: pixel};\n}\n\nfunction getPositioner(el) {\n if (el instanceof ArcElement) {\n return positioners.arc;\n }\n if (el instanceof PointElement) {\n return positioners.point;\n }\n if (el instanceof BarElement) {\n return positioners.bar;\n }\n return positioners.fallback;\n}\n\nfunction drawRoundedRect(ctx, x, y, w, h, radius) {\n var HALF_PI = Math.PI / 2;\n\n if (radius) {\n var r = Math.min(radius, h / 2, w / 2);\n var left = x + r;\n var top = y + r;\n var right = x + w - r;\n var bottom = y + h - r;\n\n ctx.moveTo(x, top);\n if (left < right && top < bottom) {\n ctx.arc(left, top, r, -Math.PI, -HALF_PI);\n ctx.arc(right, top, r, -HALF_PI, 0);\n ctx.arc(right, bottom, r, 0, HALF_PI);\n ctx.arc(left, bottom, r, HALF_PI, Math.PI);\n } else if (left < right) {\n ctx.moveTo(left, y);\n ctx.arc(right, top, r, -HALF_PI, HALF_PI);\n ctx.arc(left, top, r, HALF_PI, Math.PI + HALF_PI);\n } else if (top < bottom) {\n ctx.arc(left, top, r, -Math.PI, 0);\n ctx.arc(left, bottom, r, 0, Math.PI);\n } else {\n ctx.arc(left, top, r, -Math.PI, Math.PI);\n }\n ctx.closePath();\n ctx.moveTo(x, y);\n } else {\n ctx.rect(x, y, w, h);\n }\n}\n\nfunction drawFrame(ctx, rect, model) {\n var bgColor = model.backgroundColor;\n var borderColor = model.borderColor;\n var borderWidth = model.borderWidth;\n\n if (!bgColor && (!borderColor || !borderWidth)) {\n return;\n }\n\n ctx.beginPath();\n\n drawRoundedRect(\n ctx,\n rasterize(rect.x) + borderWidth / 2,\n rasterize(rect.y) + borderWidth / 2,\n rasterize(rect.w) - borderWidth,\n rasterize(rect.h) - borderWidth,\n model.borderRadius);\n\n ctx.closePath();\n\n if (bgColor) {\n ctx.fillStyle = bgColor;\n ctx.fill();\n }\n\n if (borderColor && borderWidth) {\n ctx.strokeStyle = borderColor;\n ctx.lineWidth = borderWidth;\n ctx.lineJoin = 'miter';\n ctx.stroke();\n }\n}\n\nfunction textGeometry(rect, align, font) {\n var h = font.lineHeight;\n var w = rect.w;\n var x = rect.x;\n var y = rect.y + h / 2;\n\n if (align === 'center') {\n x += w / 2;\n } else if (align === 'end' || align === 'right') {\n x += w;\n }\n\n return {\n h: h,\n w: w,\n x: x,\n y: y\n };\n}\n\nfunction drawTextLine(ctx, text, cfg) {\n var shadow = ctx.shadowBlur;\n var stroked = cfg.stroked;\n var x = rasterize(cfg.x);\n var y = rasterize(cfg.y);\n var w = rasterize(cfg.w);\n\n if (stroked) {\n ctx.strokeText(text, x, y, w);\n }\n\n if (cfg.filled) {\n if (shadow && stroked) {\n // Prevent drawing shadow on both the text stroke and fill, so\n // if the text is stroked, remove the shadow for the text fill.\n ctx.shadowBlur = 0;\n }\n\n ctx.fillText(text, x, y, w);\n\n if (shadow && stroked) {\n ctx.shadowBlur = shadow;\n }\n }\n}\n\nfunction drawText(ctx, lines, rect, model) {\n var align = model.textAlign;\n var color = model.color;\n var filled = !!color;\n var font = model.font;\n var ilen = lines.length;\n var strokeColor = model.textStrokeColor;\n var strokeWidth = model.textStrokeWidth;\n var stroked = strokeColor && strokeWidth;\n var i;\n\n if (!ilen || (!filled && !stroked)) {\n return;\n }\n\n // Adjust coordinates based on text alignment and line height\n rect = textGeometry(rect, align, font);\n\n ctx.font = font.string;\n ctx.textAlign = align;\n ctx.textBaseline = 'middle';\n ctx.shadowBlur = model.textShadowBlur;\n ctx.shadowColor = model.textShadowColor;\n\n if (filled) {\n ctx.fillStyle = color;\n }\n if (stroked) {\n ctx.lineJoin = 'round';\n ctx.lineWidth = strokeWidth;\n ctx.strokeStyle = strokeColor;\n }\n\n for (i = 0, ilen = lines.length; i < ilen; ++i) {\n drawTextLine(ctx, lines[i], {\n stroked: stroked,\n filled: filled,\n w: rect.w,\n x: rect.x,\n y: rect.y + rect.h * i\n });\n }\n}\n\nvar Label = function(config, ctx, el, index) {\n var me = this;\n\n me._config = config;\n me._index = index;\n me._model = null;\n me._rects = null;\n me._ctx = ctx;\n me._el = el;\n};\n\nmerge(Label.prototype, {\n /**\n * @private\n */\n _modelize: function(display, lines, config, context) {\n var me = this;\n var index = me._index;\n var font = toFont(resolve([config.font, {}], context, index));\n var color = resolve([config.color, defaults$1.color], context, index);\n\n return {\n align: resolve([config.align, 'center'], context, index),\n anchor: resolve([config.anchor, 'center'], context, index),\n area: context.chart.chartArea,\n backgroundColor: resolve([config.backgroundColor, null], context, index),\n borderColor: resolve([config.borderColor, null], context, index),\n borderRadius: resolve([config.borderRadius, 0], context, index),\n borderWidth: resolve([config.borderWidth, 0], context, index),\n clamp: resolve([config.clamp, false], context, index),\n clip: resolve([config.clip, false], context, index),\n color: color,\n display: display,\n font: font,\n lines: lines,\n offset: resolve([config.offset, 4], context, index),\n opacity: resolve([config.opacity, 1], context, index),\n origin: getScaleOrigin(me._el, context),\n padding: toPadding(resolve([config.padding, 4], context, index)),\n positioner: getPositioner(me._el),\n rotation: resolve([config.rotation, 0], context, index) * (Math.PI / 180),\n size: utils.textSize(me._ctx, lines, font),\n textAlign: resolve([config.textAlign, 'start'], context, index),\n textShadowBlur: resolve([config.textShadowBlur, 0], context, index),\n textShadowColor: resolve([config.textShadowColor, color], context, index),\n textStrokeColor: resolve([config.textStrokeColor, color], context, index),\n textStrokeWidth: resolve([config.textStrokeWidth, 0], context, index)\n };\n },\n\n update: function(context) {\n var me = this;\n var model = null;\n var rects = null;\n var index = me._index;\n var config = me._config;\n var value, label, lines;\n\n // We first resolve the display option (separately) to avoid computing\n // other options in case the label is hidden (i.e. display: false).\n var display = resolve([config.display, true], context, index);\n\n if (display) {\n value = context.dataset.data[index];\n label = valueOrDefault(callback(config.formatter, [value, context]), value);\n lines = isNullOrUndef(label) ? [] : utils.toTextLines(label);\n\n if (lines.length) {\n model = me._modelize(display, lines, config, context);\n rects = boundingRects(model);\n }\n }\n\n me._model = model;\n me._rects = rects;\n },\n\n geometry: function() {\n return this._rects ? this._rects.frame : {};\n },\n\n rotation: function() {\n return this._model ? this._model.rotation : 0;\n },\n\n visible: function() {\n return this._model && this._model.opacity;\n },\n\n model: function() {\n return this._model;\n },\n\n draw: function(chart, center) {\n var me = this;\n var ctx = chart.ctx;\n var model = me._model;\n var rects = me._rects;\n var area;\n\n if (!this.visible()) {\n return;\n }\n\n ctx.save();\n\n if (model.clip) {\n area = model.area;\n ctx.beginPath();\n ctx.rect(\n area.left,\n area.top,\n area.right - area.left,\n area.bottom - area.top);\n ctx.clip();\n }\n\n ctx.globalAlpha = utils.bound(0, model.opacity, 1);\n ctx.translate(rasterize(center.x), rasterize(center.y));\n ctx.rotate(model.rotation);\n\n drawFrame(ctx, rects.frame, model);\n drawText(ctx, model.lines, rects.text, model);\n\n ctx.restore();\n }\n});\n\nvar MIN_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991; // eslint-disable-line es/no-number-minsafeinteger\nvar MAX_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991; // eslint-disable-line es/no-number-maxsafeinteger\n\nfunction rotated(point, center, angle) {\n var cos = Math.cos(angle);\n var sin = Math.sin(angle);\n var cx = center.x;\n var cy = center.y;\n\n return {\n x: cx + cos * (point.x - cx) - sin * (point.y - cy),\n y: cy + sin * (point.x - cx) + cos * (point.y - cy)\n };\n}\n\nfunction projected(points, axis) {\n var min = MAX_INTEGER;\n var max = MIN_INTEGER;\n var origin = axis.origin;\n var i, pt, vx, vy, dp;\n\n for (i = 0; i < points.length; ++i) {\n pt = points[i];\n vx = pt.x - origin.x;\n vy = pt.y - origin.y;\n dp = axis.vx * vx + axis.vy * vy;\n min = Math.min(min, dp);\n max = Math.max(max, dp);\n }\n\n return {\n min: min,\n max: max\n };\n}\n\nfunction toAxis(p0, p1) {\n var vx = p1.x - p0.x;\n var vy = p1.y - p0.y;\n var ln = Math.sqrt(vx * vx + vy * vy);\n\n return {\n vx: (p1.x - p0.x) / ln,\n vy: (p1.y - p0.y) / ln,\n origin: p0,\n ln: ln\n };\n}\n\nvar HitBox = function() {\n this._rotation = 0;\n this._rect = {\n x: 0,\n y: 0,\n w: 0,\n h: 0\n };\n};\n\nmerge(HitBox.prototype, {\n center: function() {\n var r = this._rect;\n return {\n x: r.x + r.w / 2,\n y: r.y + r.h / 2\n };\n },\n\n update: function(center, rect, rotation) {\n this._rotation = rotation;\n this._rect = {\n x: rect.x + center.x,\n y: rect.y + center.y,\n w: rect.w,\n h: rect.h\n };\n },\n\n contains: function(point) {\n var me = this;\n var margin = 1;\n var rect = me._rect;\n\n point = rotated(point, me.center(), -me._rotation);\n\n return !(point.x < rect.x - margin\n || point.y < rect.y - margin\n || point.x > rect.x + rect.w + margin * 2\n || point.y > rect.y + rect.h + margin * 2);\n },\n\n // Separating Axis Theorem\n // https://gamedevelopment.tutsplus.com/tutorials/collision-detection-using-the-separating-axis-theorem--gamedev-169\n intersects: function(other) {\n var r0 = this._points();\n var r1 = other._points();\n var axes = [\n toAxis(r0[0], r0[1]),\n toAxis(r0[0], r0[3])\n ];\n var i, pr0, pr1;\n\n if (this._rotation !== other._rotation) {\n // Only separate with r1 axis if the rotation is different,\n // else it's enough to separate r0 and r1 with r0 axis only!\n axes.push(\n toAxis(r1[0], r1[1]),\n toAxis(r1[0], r1[3])\n );\n }\n\n for (i = 0; i < axes.length; ++i) {\n pr0 = projected(r0, axes[i]);\n pr1 = projected(r1, axes[i]);\n\n if (pr0.max < pr1.min || pr1.max < pr0.min) {\n return false;\n }\n }\n\n return true;\n },\n\n /**\n * @private\n */\n _points: function() {\n var me = this;\n var rect = me._rect;\n var angle = me._rotation;\n var center = me.center();\n\n return [\n rotated({x: rect.x, y: rect.y}, center, angle),\n rotated({x: rect.x + rect.w, y: rect.y}, center, angle),\n rotated({x: rect.x + rect.w, y: rect.y + rect.h}, center, angle),\n rotated({x: rect.x, y: rect.y + rect.h}, center, angle)\n ];\n }\n});\n\nfunction coordinates(el, model, geometry) {\n var point = model.positioner(el, model);\n var vx = point.vx;\n var vy = point.vy;\n\n if (!vx && !vy) {\n // if aligned center, we don't want to offset the center point\n return {x: point.x, y: point.y};\n }\n\n var w = geometry.w;\n var h = geometry.h;\n\n // take in account the label rotation\n var rotation = model.rotation;\n var dx = Math.abs(w / 2 * Math.cos(rotation)) + Math.abs(h / 2 * Math.sin(rotation));\n var dy = Math.abs(w / 2 * Math.sin(rotation)) + Math.abs(h / 2 * Math.cos(rotation));\n\n // scale the unit vector (vx, vy) to get at least dx or dy equal to\n // w or h respectively (else we would calculate the distance to the\n // ellipse inscribed in the bounding rect)\n var vs = 1 / Math.max(Math.abs(vx), Math.abs(vy));\n dx *= vx * vs;\n dy *= vy * vs;\n\n // finally, include the explicit offset\n dx += model.offset * vx;\n dy += model.offset * vy;\n\n return {\n x: point.x + dx,\n y: point.y + dy\n };\n}\n\nfunction collide(labels, collider) {\n var i, j, s0, s1;\n\n // IMPORTANT Iterate in the reverse order since items at the end of the\n // list have an higher weight/priority and thus should be less impacted\n // by the overlapping strategy.\n\n for (i = labels.length - 1; i >= 0; --i) {\n s0 = labels[i].$layout;\n\n for (j = i - 1; j >= 0 && s0._visible; --j) {\n s1 = labels[j].$layout;\n\n if (s1._visible && s0._box.intersects(s1._box)) {\n collider(s0, s1);\n }\n }\n }\n\n return labels;\n}\n\nfunction compute(labels) {\n var i, ilen, label, state, geometry, center, proxy;\n\n // Initialize labels for overlap detection\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n label = labels[i];\n state = label.$layout;\n\n if (state._visible) {\n // Chart.js 3 removed el._model in favor of getProps(), making harder to\n // abstract reading values in positioners. Also, using string arrays to\n // read values (i.e. var {a,b,c} = el.getProps([\"a\",\"b\",\"c\"])) would make\n // positioners inefficient in the normal case (i.e. not the final values)\n // and the code a bit ugly, so let's use a Proxy instead.\n proxy = new Proxy(label._el, {get: (el, p) => el.getProps([p], true)[p]});\n\n geometry = label.geometry();\n center = coordinates(proxy, label.model(), geometry);\n state._box.update(center, geometry, label.rotation());\n }\n }\n\n // Auto hide overlapping labels\n return collide(labels, function(s0, s1) {\n var h0 = s0._hidable;\n var h1 = s1._hidable;\n\n if ((h0 && h1) || h1) {\n s1._visible = false;\n } else if (h0) {\n s0._visible = false;\n }\n });\n}\n\nvar layout = {\n prepare: function(datasets) {\n var labels = [];\n var i, j, ilen, jlen, label;\n\n for (i = 0, ilen = datasets.length; i < ilen; ++i) {\n for (j = 0, jlen = datasets[i].length; j < jlen; ++j) {\n label = datasets[i][j];\n labels.push(label);\n label.$layout = {\n _box: new HitBox(),\n _hidable: false,\n _visible: true,\n _set: i,\n _idx: label._index\n };\n }\n }\n\n // TODO New `z` option: labels with a higher z-index are drawn\n // of top of the ones with a lower index. Lowest z-index labels\n // are also discarded first when hiding overlapping labels.\n labels.sort(function(a, b) {\n var sa = a.$layout;\n var sb = b.$layout;\n\n return sa._idx === sb._idx\n ? sb._set - sa._set\n : sb._idx - sa._idx;\n });\n\n this.update(labels);\n\n return labels;\n },\n\n update: function(labels) {\n var dirty = false;\n var i, ilen, label, model, state;\n\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n label = labels[i];\n model = label.model();\n state = label.$layout;\n state._hidable = model && model.display === 'auto';\n state._visible = label.visible();\n dirty |= state._hidable;\n }\n\n if (dirty) {\n compute(labels);\n }\n },\n\n lookup: function(labels, point) {\n var i, state;\n\n // IMPORTANT Iterate in the reverse order since items at the end of\n // the list have an higher z-index, thus should be picked first.\n\n for (i = labels.length - 1; i >= 0; --i) {\n state = labels[i].$layout;\n\n if (state && state._visible && state._box.contains(point)) {\n return labels[i];\n }\n }\n\n return null;\n },\n\n draw: function(chart, labels) {\n var i, ilen, label, state, geometry, center;\n\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n label = labels[i];\n state = label.$layout;\n\n if (state._visible) {\n geometry = label.geometry();\n center = coordinates(label._el, label.model(), geometry);\n state._box.update(center, geometry, label.rotation());\n label.draw(chart, center);\n }\n }\n }\n};\n\nvar formatter = function(value) {\n if (isNullOrUndef(value)) {\n return null;\n }\n\n var label = value;\n var keys, klen, k;\n if (isObject(value)) {\n if (!isNullOrUndef(value.label)) {\n label = value.label;\n } else if (!isNullOrUndef(value.r)) {\n label = value.r;\n } else {\n label = '';\n keys = Object.keys(value);\n for (k = 0, klen = keys.length; k < klen; ++k) {\n label += (k !== 0 ? ', ' : '') + keys[k] + ': ' + value[keys[k]];\n }\n }\n }\n\n return '' + label;\n};\n\n/**\n * IMPORTANT: make sure to also update tests and TypeScript definition\n * files (`/test/specs/defaults.spec.js` and `/types/options.d.ts`)\n */\n\nvar defaults = {\n align: 'center',\n anchor: 'center',\n backgroundColor: null,\n borderColor: null,\n borderRadius: 0,\n borderWidth: 0,\n clamp: false,\n clip: false,\n color: undefined,\n display: true,\n font: {\n family: undefined,\n lineHeight: 1.2,\n size: undefined,\n style: undefined,\n weight: null\n },\n formatter: formatter,\n labels: undefined,\n listeners: {},\n offset: 4,\n opacity: 1,\n padding: {\n top: 4,\n right: 4,\n bottom: 4,\n left: 4\n },\n rotation: 0,\n textAlign: 'start',\n textStrokeColor: undefined,\n textStrokeWidth: 0,\n textShadowBlur: 0,\n textShadowColor: undefined\n};\n\n/**\n * @see https://github.com/chartjs/Chart.js/issues/4176\n */\n\nvar EXPANDO_KEY = '$datalabels';\nvar DEFAULT_KEY = '$default';\n\nfunction configure(dataset, options) {\n var override = dataset.datalabels;\n var listeners = {};\n var configs = [];\n var labels, keys;\n\n if (override === false) {\n return null;\n }\n if (override === true) {\n override = {};\n }\n\n options = merge({}, [options, override]);\n labels = options.labels || {};\n keys = Object.keys(labels);\n delete options.labels;\n\n if (keys.length) {\n keys.forEach(function(key) {\n if (labels[key]) {\n configs.push(merge({}, [\n options,\n labels[key],\n {_key: key}\n ]));\n }\n });\n } else {\n // Default label if no \"named\" label defined.\n configs.push(options);\n }\n\n // listeners: {<event-type>: {<label-key>: <fn>}}\n listeners = configs.reduce(function(target, config) {\n each(config.listeners || {}, function(fn, event) {\n target[event] = target[event] || {};\n target[event][config._key || DEFAULT_KEY] = fn;\n });\n\n delete config.listeners;\n return target;\n }, {});\n\n return {\n labels: configs,\n listeners: listeners\n };\n}\n\nfunction dispatchEvent(chart, listeners, label, event) {\n if (!listeners) {\n return;\n }\n\n var context = label.$context;\n var groups = label.$groups;\n var callback$1;\n\n if (!listeners[groups._set]) {\n return;\n }\n\n callback$1 = listeners[groups._set][groups._key];\n if (!callback$1) {\n return;\n }\n\n if (callback(callback$1, [context, event]) === true) {\n // Users are allowed to tweak the given context by injecting values that can be\n // used in scriptable options to display labels differently based on the current\n // event (e.g. highlight an hovered label). That's why we update the label with\n // the output context and schedule a new chart render by setting it dirty.\n chart[EXPANDO_KEY]._dirty = true;\n label.update(context);\n }\n}\n\nfunction dispatchMoveEvents(chart, listeners, previous, label, event) {\n var enter, leave;\n\n if (!previous && !label) {\n return;\n }\n\n if (!previous) {\n enter = true;\n } else if (!label) {\n leave = true;\n } else if (previous !== label) {\n leave = enter = true;\n }\n\n if (leave) {\n dispatchEvent(chart, listeners.leave, previous, event);\n }\n if (enter) {\n dispatchEvent(chart, listeners.enter, label, event);\n }\n}\n\nfunction handleMoveEvents(chart, event) {\n var expando = chart[EXPANDO_KEY];\n var listeners = expando._listeners;\n var previous, label;\n\n if (!listeners.enter && !listeners.leave) {\n return;\n }\n\n if (event.type === 'mousemove') {\n label = layout.lookup(expando._labels, event);\n } else if (event.type !== 'mouseout') {\n return;\n }\n\n previous = expando._hovered;\n expando._hovered = label;\n dispatchMoveEvents(chart, listeners, previous, label, event);\n}\n\nfunction handleClickEvents(chart, event) {\n var expando = chart[EXPANDO_KEY];\n var handlers = expando._listeners.click;\n var label = handlers && layout.lookup(expando._labels, event);\n if (label) {\n dispatchEvent(chart, handlers, label, event);\n }\n}\n\nvar plugin = {\n id: 'datalabels',\n\n defaults: defaults,\n\n beforeInit: function(chart) {\n chart[EXPANDO_KEY] = {\n _actives: []\n };\n },\n\n beforeUpdate: function(chart) {\n var expando = chart[EXPANDO_KEY];\n expando._listened = false;\n expando._listeners = {}; // {<event-type>: {<dataset-index>: {<label-key>: <fn>}}}\n expando._datasets = []; // per dataset labels: [Label[]]\n expando._labels = []; // layouted labels: Label[]\n },\n\n afterDatasetUpdate: function(chart, args, options) {\n var datasetIndex = args.index;\n var expando = chart[EXPANDO_KEY];\n var labels = expando._datasets[datasetIndex] = [];\n var visible = chart.isDatasetVisible(datasetIndex);\n var dataset = chart.data.datasets[datasetIndex];\n var config = configure(dataset, options);\n var elements = args.meta.data || [];\n var ctx = chart.ctx;\n var i, j, ilen, jlen, cfg, key, el, label;\n\n ctx.save();\n\n for (i = 0, ilen = elements.length; i < ilen; ++i) {\n el = elements[i];\n el[EXPANDO_KEY] = [];\n\n if (visible && el && chart.getDataVisibility(i) && !el.skip) {\n for (j = 0, jlen = config.labels.length; j < jlen; ++j) {\n cfg = config.labels[j];\n key = cfg._key;\n\n label = new Label(cfg, ctx, el, i);\n label.$groups = {\n _set: datasetIndex,\n _key: key || DEFAULT_KEY\n };\n label.$context = {\n active: false,\n chart: chart,\n dataIndex: i,\n dataset: dataset,\n datasetIndex: datasetIndex\n };\n\n label.update(label.$context);\n el[EXPANDO_KEY].push(label);\n labels.push(label);\n }\n }\n }\n\n ctx.restore();\n\n // Store listeners at the chart level and per event type to optimize\n // cases where no listeners are registered for a specific event.\n merge(expando._listeners, config.listeners, {\n merger: function(event, target, source) {\n target[event] = target[event] || {};\n target[event][args.index] = source[event];\n expando._listened = true;\n }\n });\n },\n\n afterUpdate: function(chart) {\n chart[EXPANDO_KEY]._labels = layout.prepare(chart[EXPANDO_KEY]._datasets);\n },\n\n // Draw labels on top of all dataset elements\n // https://github.com/chartjs/chartjs-plugin-datalabels/issues/29\n // https://github.com/chartjs/chartjs-plugin-datalabels/issues/32\n afterDatasetsDraw: function(chart) {\n layout.draw(chart, chart[EXPANDO_KEY]._labels);\n },\n\n beforeEvent: function(chart, args) {\n // If there is no listener registered for this chart, `listened` will be false,\n // meaning we can immediately ignore the incoming event and avoid useless extra\n // computation for users who don't implement label interactions.\n if (chart[EXPANDO_KEY]._listened) {\n var event = args.event;\n switch (event.type) {\n case 'mousemove':\n case 'mouseout':\n handleMoveEvents(chart, event);\n break;\n case 'click':\n handleClickEvents(chart, event);\n break;\n }\n }\n },\n\n afterEvent: function(chart) {\n var expando = chart[EXPANDO_KEY];\n var previous = expando._actives;\n var actives = expando._actives = chart.getActiveElements();\n var updates = utils.arrayDiff(previous, actives);\n var i, ilen, j, jlen, update, label, labels;\n\n for (i = 0, ilen = updates.length; i < ilen; ++i) {\n update = updates[i];\n if (update[1]) {\n labels = update[0].element[EXPANDO_KEY] || [];\n for (j = 0, jlen = labels.length; j < jlen; ++j) {\n label = labels[j];\n label.$context.active = (update[1] === 1);\n label.update(label.$context);\n }\n }\n }\n\n if (expando._dirty || updates.length) {\n layout.update(expando._labels);\n chart.render();\n }\n\n delete expando._dirty;\n }\n};\n\nexport { plugin as default };\n","export const ChartColors = {\n negativeChange: '#bc1c0e',\n positiveChange: '#167922',\n neutral: '#4368bd',\n panelBg: '#dadde3',\n text: '#414752',\n othersBg: '#dadde3',\n};\n\nexport const HIDE_LABELS_DATASET_SIZE = 26;\n","import { Plugin } from 'chart.js';\nimport { ChartColors } from './constants';\nimport { DataSet, FloatingLabelConfig } from './types';\nimport { LabelPosition } from './stackedBarChart';\n\nconst DEFAULT_FONT_SIZE = '14px';\nconst DEFAULT_FONT = 'Lato';\n\nexport function floatingBarLabelsPlugin(labels: FloatingLabelConfig[]): Plugin {\n return {\n id: 'floatingBarLabels',\n afterDatasetDraw(chart) {\n const {\n ctx,\n data,\n scales: { x, y },\n } = chart;\n const font = `${DEFAULT_FONT_SIZE} ${DEFAULT_FONT}`;\n const boldFont = `bold ${font}`;\n const lineHeight = 19;\n ctx.textAlign = 'left';\n\n const segmentWidth = x.getPixelForValue(1) - x.getPixelForValue(0);\n const barPercentage =\n 'barPercentage' in chart.config.data.datasets[0] ? chart.config.data.datasets[0].barPercentage : 1;\n const barWidth = segmentWidth * barPercentage;\n\n labels.forEach((label, idx) => {\n if (!label) {\n return;\n }\n const leftPadding = x.getPixelForValue(idx);\n const xAnchor = leftPadding - barWidth / 2;\n\n const barData = data.datasets[0].data[idx];\n const yBottomAnchor = y.getPixelForValue(Math.min(barData[0], barData[1])) + 20;\n const yTopAnchor = y.getPixelForValue(Math.max(barData[0], barData[1])) - 10;\n\n [...label.topLabel].reverse().forEach(({ value, textColor, bold = false }, idx) => {\n ctx.font = bold ? boldFont : font;\n ctx.fillStyle = textColor;\n ctx.fillText(value, xAnchor, yTopAnchor - lineHeight * idx);\n });\n\n if (label.bottomLabel) {\n label.bottomLabel.forEach(({ value, textColor, bold = false }, idx) => {\n ctx.font = bold ? boldFont : font;\n ctx.fillStyle = textColor;\n ctx.fillText(value, xAnchor, yBottomAnchor + lineHeight * idx);\n });\n }\n });\n },\n };\n}\n\nexport function lineToNextBarPlugin(): Plugin {\n return {\n id: 'lineToNextBar',\n afterDatasetDraw(chart) {\n const {\n ctx,\n data,\n scales: { x, y },\n } = chart;\n\n const segmentWidth = x.getPixelForValue(1) - x.getPixelForValue(0);\n const barPercentage =\n 'barPercentage' in chart.config.data.datasets[0] ? chart.config.data.datasets[0].barPercentage : 1;\n const barWidth = segmentWidth * barPercentage;\n\n const backgroundColor = chart.config.data.datasets[0].backgroundColor;\n data.datasets[0].data.forEach((item, idx) => {\n if (!item || idx === data.datasets[0].data.length - 1) {\n return;\n }\n\n const nextItem = data.datasets[0].data[idx + 1];\n if (!nextItem) {\n return;\n }\n\n const startX = x.getPixelForValue(idx) + barWidth / 2;\n const startY = y.getPixelForValue(item[1]);\n\n const endX = x.getPixelForValue(idx + 1) - barWidth / 2;\n const endY = startY;\n\n ctx.beginPath();\n ctx.setLineDash([2, 3]);\n ctx.moveTo(startX, startY);\n ctx.lineTo(endX, endY);\n ctx.strokeStyle = backgroundColor[idx];\n ctx.stroke();\n });\n },\n };\n}\n\nexport function summaryLabelsPlugin(data: DataSet, position: LabelPosition = LabelPosition.TOP): Plugin {\n return {\n id: 'summaryLabels',\n afterDatasetDraw(chart) {\n const {\n ctx,\n scales: { x, y },\n } = chart;\n const { values, changes } = data;\n // ctx.textAlign = 'left';\n ctx.font = `${DEFAULT_FONT_SIZE} ${DEFAULT_FONT}`;\n\n ctx.fillStyle = ChartColors.text;\n ctx.textAlign = 'center';\n values.formatted.forEach((value, idx) => {\n if (value !== null && value !== 'null') {\n ctx.fillText(value, x.getPixelForValue(idx), position === LabelPosition.TOP ? 16 : y.getBasePixel() + 85);\n }\n });\n if (changes) {\n changes.formatted.forEach((value, idx) => {\n if (value !== null && value !== 'null') {\n const color = changes.textColor[idx];\n ctx.font = `${DEFAULT_FONT_SIZE} ${DEFAULT_FONT}`;\n ctx.fillStyle = color;\n ctx.fillText(value, x.getPixelForValue(idx), position === LabelPosition.TOP ? 35 : y.getBasePixel() + 110);\n }\n });\n }\n },\n };\n}\n\nexport function lineThroughPointsPlugin(): Plugin {\n return {\n id: 'lineThroughPointsPlugin',\n afterDraw(chart) {\n const {\n ctx,\n chartArea: { top, bottom },\n } = chart;\n\n if (chart.tooltip && chart.tooltip.getActiveElements().length) {\n const activePoint = chart.tooltip.getActiveElements()[0];\n const xCord = activePoint.element.x;\n\n // Draw a line\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(xCord, top);\n ctx.lineTo(xCord, bottom);\n ctx.lineWidth = 2;\n ctx.strokeStyle = 'grey';\n ctx.setLineDash([2, 2]);\n ctx.stroke();\n ctx.restore();\n }\n },\n };\n}\n","import { ChartTypeRegistry, Point, BubbleDataPoint, TooltipModel, Chart } from 'chart.js';\nimport { Tooltip } from './types';\n\nconst getOrCreateTooltip = (chart: Chart) => {\n let tooltipEl = chart.canvas.parentNode.querySelector('div');\n\n if (!tooltipEl) {\n //Change color names?\n tooltipEl = document.createElement('div');\n tooltipEl.style.background = 'white';\n tooltipEl.style.pointerEvents = 'none';\n tooltipEl.style.borderStyle = 'solid';\n tooltipEl.style.borderWidth = '1px';\n tooltipEl.style.borderColor = '#808080';\n tooltipEl.style.position = 'absolute';\n tooltipEl.style.transform = 'translate(-50%, 0)';\n tooltipEl.style.transition = 'all .1s ease';\n //Is it ok to use zIndex?\n tooltipEl.style.zIndex = '99';\n\n const table = document.createElement('table');\n\n tooltipEl.appendChild(table);\n chart.canvas.parentNode.appendChild(tooltipEl);\n }\n\n return tooltipEl;\n};\n\nexport type ContextType = {\n chart: Chart<keyof ChartTypeRegistry, (number | [number, number] | Point | BubbleDataPoint)[], unknown>;\n tooltip: TooltipModel<keyof ChartTypeRegistry>;\n};\n\nexport const externalTooltipHandler = (context: ContextType, tooltipHelper: Tooltip) => {\n const { chart, tooltip } = context;\n const {\n data: { datasets },\n } = chart;\n const tooltipEl = getOrCreateTooltip(chart);\n\n // Hide if no tooltip\n if (tooltip.opacity === 0) {\n tooltipEl.style.opacity = '0';\n return;\n }\n\n const titleLines = tooltip.title || [];\n\n const tableHead = document.createElement('thead');\n\n const textSize = '12px';\n\n titleLines.forEach(title => {\n const tr = document.createElement('tr');\n tr.style.borderWidth = '0px 0px 1px 0px';\n tr.style.borderStyle = 'solid';\n tr.style.borderColor = 'grey';\n\n const th = document.createElement('th');\n th.style.textAlign = 'left';\n th.style.color = 'grey';\n th.style.fontSize = textSize;\n th.style.paddingBottom = '4px';\n th.style.fontWeight = '900';\n\n const text = document.createTextNode(title);\n\n th.appendChild(text);\n tr.appendChild(th);\n tableHead.appendChild(tr);\n });\n\n const tooltipIndex = tooltip.dataPoints[0].dataIndex;\n\n const tableBody = document.createElement('tbody');\n\n //Reverse mutates the actual dataset, so create array to stop this behaviour\n [...datasets].reverse().forEach(set => {\n const { label, data, borderColor } = set;\n const value = Array.isArray(data[tooltipIndex]) ? data[tooltipIndex][0] : data[tooltipIndex];\n const color = borderColor[tooltipIndex];\n\n //Circle colour\n const span = document.createElement('span');\n span.style.background = color;\n span.style.borderRadius = '10px';\n span.style.marginTop = '4px';\n span.style.marginRight = '10px';\n span.style.height = '10px';\n span.style.width = '10px';\n span.style.display = 'inline-block';\n\n const tr = document.createElement('tr');\n tr.style.backgroundColor = 'inherit';\n\n const td = document.createElement('td');\n td.style.paddingTop = '4px';\n td.style.color = 'grey';\n td.style.fontWeight = '500';\n\n const container = document.createElement('div');\n const textContainer = document.createElement('div');\n\n container.style.display = 'flex';\n container.style.fontSize = textSize;\n textContainer.style.display = 'flex';\n textContainer.style.justifyContent = 'space-between';\n textContainer.style.width = '100%';\n\n const valueDiv = document.createElement('div');\n valueDiv.textContent = tooltipHelper?.valueFormatter(value);\n valueDiv.style.fontWeight = 'bold';\n\n const labelDiv = document.createElement('div');\n labelDiv.textContent = label;\n labelDiv.style.paddingRight = '16px';\n\n textContainer.appendChild(labelDiv);\n textContainer.appendChild(valueDiv);\n\n container.appendChild(span);\n container.appendChild(textContainer);\n\n td.appendChild(container);\n tr.appendChild(td);\n tableBody.appendChild(tr);\n });\n\n const tableRoot = tooltipEl.querySelector('table');\n\n while (tableRoot.firstChild) {\n tableRoot.firstChild.remove();\n }\n\n tableRoot.appendChild(tableHead);\n tableRoot.appendChild(tableBody);\n\n //Tooltip stays in canvas\n const offset = 100;\n const positionX = tooltip.caretX;\n const positionY = offset;\n\n if (![0, 1].includes(tooltipIndex) && tooltip.caretX > chart.width - tooltip.width - offset) {\n tooltipEl.style.left = `${positionX - offset}px`;\n } else {\n tooltipEl.style.left = `${positionX + offset}px`;\n }\n\n tooltipEl.style.opacity = '1';\n tooltipEl.style.top = `${positionY}px`;\n tooltipEl.style.padding = `${tooltip.options.padding}px ${tooltip.options.padding}px`;\n};\n\nexport const renderTooltip = (context: ContextType) => {\n let fadeOutTimeout: number | null = null;\n\n const tooltipModel = context.tooltip;\n let tooltipEl = document.getElementById('chart-tooltip');\n\n if (!tooltipEl) {\n tooltipEl = document.createElement('div');\n tooltipEl.id = 'chart-tooltip';\n tooltipEl.style.position = 'absolute';\n tooltipEl.style.background = 'rgba(0, 0, 0, 0.8)';\n tooltipEl.style.color = 'white';\n tooltipEl.style.borderRadius = '6px';\n tooltipEl.style.padding = '6px';\n tooltipEl.style.fontSize = '14px';\n tooltipEl.style.pointerEvents = 'none';\n // Smooth transitions for opacity and position\n tooltipEl.style.transition = 'opacity 0.3s ease-in-out, top 0.3s ease-in-out, left 0.3s ease-in-out';\n document.body.appendChild(tooltipEl);\n }\n // (Re)append the arrow element after setting innerHTML\n\n let arrowEl = tooltipEl.querySelector('.tooltip-arrow');\n if (!arrowEl) {\n arrowEl = document.createElement('div');\n arrowEl.className = 'tooltip-arrow';\n }\n // If the tooltip should be hidden, fade it out\n if (tooltipModel.opacity === 0) {\n tooltipEl.style.opacity = '0';\n return;\n }\n\n // Build the tooltip content (excluding the arrow)\n const title = tooltipModel.title || [];\n let innerHtml = `<div style=\"font-weight: bold; margin-bottom: 4px;\">${title[0]}</div>`;\n tooltipModel.body.forEach(body => {\n const color = tooltipModel.labelColors[0].backgroundColor;\n innerHtml += `\n <div style=\"display: flex; align-items: center;\">\n <span style=\"background-color: ${color}; width: 12px; height: 12px; display: inline-block; margin-right: 5px;\"></span>\n <span>${body.lines[0]}</span>\n </div>\n `;\n });\n // If there is a pending fade-out, cancel it\n if (fadeOutTimeout) {\n clearTimeout(fadeOutTimeout);\n }\n\n // Update content\n tooltipEl.innerHTML = innerHtml;\n tooltipEl.appendChild(arrowEl);\n\n updateTooltipPosition(tooltipEl, arrowEl as HTMLElement, context);\n\n // Ensure tooltip is visible immediately\n tooltipEl.style.opacity = '1';\n};\n\nfunction updateTooltipPosition(tooltipEl: HTMLElement, arrowEl: HTMLElement, context: ContextType) {\n const tooltipModel = context.tooltip;\n const canvasRect = context.chart.canvas.getBoundingClientRect();\n\n // Calculate the initial left and top positions based on caret coordinates.\n let left = canvasRect.left + window.scrollX + tooltipModel.caretX;\n const top = canvasRect.top + window.scrollY + tooltipModel.caretY - 10;\n\n // Prevent the tooltip from overflowing off the right edge of the window.\n const tooltipWidth = tooltipEl.offsetWidth;\n const extraTooltipSpace = 20;\n const availableSpaceRight = window.innerWidth - left;\n if (availableSpaceRight < tooltipWidth + extraTooltipSpace) {\n left = left - tooltipWidth;\n arrowEl.removeAttribute('style');\n arrowEl.style.backgroundColor = 'lightblue';\n arrowEl.style.position = 'absolute';\n arrowEl.style.width = '0';\n arrowEl.style.height = '0';\n arrowEl.style.backgroundColor = 'transparent';\n arrowEl.style.borderBottom = '5px solid transparent';\n arrowEl.style.borderTop = '5px solid transparent';\n arrowEl.style.borderLeft = '5px solid rgba(0, 0, 0, 0.8)';\n arrowEl.style.borderRight = 'none';\n arrowEl.style.left = '100%';\n } else {\n arrowEl.removeAttribute('style');\n arrowEl.style.backgroundColor = 'lightblue';\n arrowEl.style.position = 'absolute';\n arrowEl.style.width = '0';\n arrowEl.style.height = '0';\n arrowEl.style.backgroundColor = 'transparent';\n arrowEl.style.borderTop = '5px solid transparent';\n arrowEl.style.borderBottom = '5px solid transparent';\n arrowEl.style.borderRight = '5px solid rgba(0, 0, 0, 0.8)';\n arrowEl.style.borderLeft = 'none';\n arrowEl.style.left = '-5px';\n }\n\n tooltipEl.style.left = `${left}px`;\n tooltipEl.style.top = `${top}px`;\n}\n","import React, { useEffect, useRef, useState } from 'react';\nimport Chart from 'chart.js/auto';\nimport { Plugin } from 'chart.js';\nimport ChartDataLabels, { Context } from 'chartjs-plugin-datalabels';\nimport { ScaleOptions, DataSet, Tooltip } from './types';\nimport { summaryLabelsPlugin } from './plugins';\nimport { HIDE_LABELS_DATASET_SIZE } from './constants';\nimport { calculateSpaceByCharacter } from '../../common/util';\nimport { ChangeType } from '../../types';\nimport { ContextType, renderTooltip } from './tooltip';\n\nexport enum LabelPosition {\n TOP = 'top',\n BOTTOM = 'bottom',\n}\n\nexport const CHANGE_TYPE_AND_LABEL_POSITION_MAP = {\n [ChangeType.absolute]: LabelPosition.TOP,\n [ChangeType.percent]: LabelPosition.BOTTOM,\n};\n\nexport type StackedScaleOptions = ScaleOptions & {\n stacked: boolean;\n useMax?: number;\n};\n\nexport type StackedDataSet = DataSet & {\n stack?: string;\n};\n\nexport type StackedData = {\n labels: (string[] | string)[];\n sets: StackedDataSet[];\n summary?: DataSet;\n additionalSummary?: DataSet;\n};\n\nexport type StackedBarChartOptions = {\n xScale?: ScaleOptions;\n yScale?: StackedScaleOptions;\n data?: StackedData;\n tooltip?: Tooltip;\n changesOnLastStack?: boolean;\n compactView?: boolean;\n};\n\ntype Props = {\n options: StackedBarChartOptions;\n trackTooltipEvent: () => void;\n canvasId?: string;\n};\nfunction StackedBarChart({ options = {}, trackTooltipEvent, canvasId }: Props) {\n const [width, setWidth] = useState<string>('176px');\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const hoverTimeoutRef = useRef();\n const chartRef = useRef<Chart | null>(null);\n const optionsRef = useRef<string>(null);\n\n /**\n * Return the longests label from the changes array\n * @param sets - the sets within the chart data\n * @returns the longest change label\n */\n const getLongestChangeLabel = (sets: any[]): string => {\n return sets.reduce((acc, set) => {\n if (!set.changes) {\n return acc;\n }\n const longestChange = set.changes.formatted.reduce((acc: string, change: string | null) => {\n if (change && change.length > acc.length) {\n return change;\n }\n return acc;\n }, '');\n if (longestChange.length > acc.length) {\n return longestChange;\n }\n return acc;\n }, '');\n };\n\n useEffect(() => {\n const { data } = options;\n if (!canvasRef.current || !data || optionsRef.current === JSON.stringify(options)) {\n return;\n }\n\n optionsRef.current = JSON.stringify(options);\n\n if (chartRef.current) {\n chartRef.current.destroy();\n chartRef.current = null;\n }\n\n const {\n data: { sets, summary, additionalSummary },\n changesOnLastStack,\n compactView,\n } = options;\n\n let changeLabelSpace = 0;\n if (compactView) {\n setWidth('100%');\n } else {\n let calculatedWidth = sets[0]?.values.raw.length * 88;\n if (changesOnLastStack) {\n changeLabelSpace = calculateSpaceByCharacter(getLongestChangeLabel(sets));\n calculatedWidth += changeLabelSpace;\n }\n setWidth(`${calculatedWidth}px`);\n }\n const hideAllLabels = compactView || sets[0]?.values.raw.length >= HIDE_LABELS_DATASET_SIZE;\n\n const plugins: Plugin[] = [ChartDataLabels];\n if (summary && !hideAllLabels) {\n plugins.push(summaryLabelsPlugin(summary, CHANGE_TYPE_AND_LABEL_POSITION_MAP[summary.changeType]));\n }\n if (additionalSummary && !hideAllLabels) {\n const summaryLabel = summaryLabelsPlugin(\n additionalSummary,\n CHANGE_TYPE_AND_LABEL_POSITION_MAP[additionalSummary.changeType]\n );\n plugins.push(summaryLabel);\n }\n const timeoutId = hoverTimeoutRef.current;\n //configure chart settings\n configChart(plugins, hideAllLabels, changeLabelSpace);\n\n return () => {\n clearTimeout(timeoutId);\n };\n }, [options, trackTooltipEvent]);\n\n const configChart = (plugins, hideAllLabels, changeLabelSpace) => {\n const {\n xScale,\n yScale,\n data: { labels, sets, summary, additionalSummary },\n changesOnLastStack,\n tooltip,\n } = options;\n\n chartRef.current = new Chart(canvasRef.current, {\n plugins: plugins,\n type: 'bar',\n data: {\n labels: labels,\n datasets: [...sets].reverse().map(set => ({\n label: set.label,\n data: set.values.raw,\n borderColor: set.values.fillColor,\n backgroundColor: set.values.fillColor,\n stack: set.stack,\n datalabels: {\n labels: {\n value: {\n color: set.values.textColor,\n formatter: (_: unknown, ctx: Context) => set.values.formatted[ctx.dataIndex],\n font: {\n weight: 'bold',\n },\n display: (ctx: Context) => {\n return handleLabelValueDisplay(ctx, hideAllLabels, yScale, sets, set);\n },\n clamp: true,\n },\n changes: {\n display: (ctx: Context) => {\n return handleLabelChangesDisplay(ctx, hideAllLabels, yScale, sets, set, changesOnLastStack);\n },\n color: (changesOnLastStack && set.changes?.textColor) || [],\n formatter: (_: unknown, ctx: Context) => set.changes?.formatted[ctx.dataIndex] || '',\n align: 'right',\n anchor: 'center',\n offset: 40,\n },\n },\n },\n })),\n },\n options: {\n responsive: true,\n onHover: (_event, _activeElements, chart) => {\n onHoverActivity(chart, hoverTimeoutRef);\n },\n maintainAspectRatio: false,\n layout: {\n padding: {\n top: !summary ? 0 : 65,\n right: changeLabelSpace,\n bottom: additionalSummary ? 65 : 0,\n },\n },\n plugins: {\n tooltip: {\n enabled: false, // Disable default tooltip rendering\n external: function (context: ContextType) {\n //render custom tooltip\n renderTooltip(context);\n },\n position: 'nearest',\n callbacks: {\n label: item => {\n return handleTooltipLabelCallback(item, tooltip);\n },\n },\n },\n legend: {\n display: false,\n },\n },\n scales: {\n x: {\n stacked: true,\n border: {\n display: false,\n },\n grid: {\n display: false,\n },\n title: {\n display: xScale?.title !== undefined,\n text: xScale?.title || '',\n },\n ticks: {\n callback: function (value: string | number, index: number) {\n return handleXTicksCallback(value, index, hideAllLabels, xScale, labels);\n },\n autoSkip: false,\n maxRotation: 0,\n },\n },\n y: {\n stacked: yScale?.stacked,\n border: {\n display: false,\n },\n grid: {\n display: hideAllLabels,\n },\n title: {\n display: yScale?.title !== undefined,\n text: yScale?.title || '',\n align: 'end',\n },\n beginAtZero: true,\n ticks: {\n display: hideAllLabels,\n callback: function (value: string | number) {\n return handleYTicksCallback(value, yScale);\n },\n },\n grace: -1,\n min: 0,\n max: yScale?.useMax,\n },\n },\n },\n });\n };\n\n const calHeight = (yScale, sets, ctx, lSet) => {\n const sumAtIndex =\n yScale?.useMax ||\n sets.reduce((acc, set) => {\n acc += set.values.raw[ctx.dataIndex];\n return acc;\n }, 0);\n const perc = lSet.values.raw[ctx.dataIndex] / sumAtIndex;\n const height = ctx.chart.chartArea.height * perc;\n return height > 20;\n };\n\n const handleLabelChangesDisplay = (ctx, hideAllLabels, yScale, sets, lSet, changesOnLastStack) => {\n if (hideAllLabels || !changesOnLastStack || !lSet.changes) {\n return false;\n }\n return calHeight(yScale, sets, ctx, lSet);\n };\n\n const handleLabelValueDisplay = (ctx, hideAllLabels, yScale, sets, lSet) => {\n if (hideAllLabels) {\n return false;\n }\n return calHeight(yScale, sets, ctx, lSet);\n };\n\n const handleTooltipLabelCallback = (item, tooltip) => {\n let formattedValue = item.formattedValue;\n if (tooltip?.valueFormatter) {\n formattedValue = tooltip?.valueFormatter(Number(item.raw));\n }\n return `${item.dataset.label}: ${formattedValue}`;\n };\n\n const handleYTicksCallback = (value: string | number, yScale) => {\n if (yScale?.formatter) {\n return yScale.formatter(value);\n } else {\n return value;\n }\n };\n\n const handleXTicksCallback = (value: string | number, index: number, hideAllLabels, xScale, labels) => {\n if (hideAllLabels && index % 4 !== 0) {\n return '';\n }\n\n if (xScale?.formatter) {\n return xScale.formatter(value);\n } else {\n return labels[index];\n }\n };\n\n const onHoverActivity = (chart, hoverTimeoutRef) => {\n clearTimeout(hoverTimeoutRef.current);\n hoverTimeoutRef.current = setTimeout(() => {\n const activeElements = chart.getActiveElements();\n if (activeElements.length > 0) {\n trackTooltipEvent();\n }\n }, 1000);\n };\n\n return (\n <div className=\"h-full\" style={{ width }}>\n <canvas id={canvasId} className=\"h-full\" ref={canvasRef} />\n </div>\n );\n}\n\nexport { StackedBarChart };\n","import React from 'react';\nimport { actions } from '@ecosystem/newron-design-system';\nimport { FEATURE_TAGS_STORAGE_KEY } from './utils';\n\nconst { Button } = actions;\n\ntype Props = {\n featureTag: string;\n tagOn: boolean;\n toggleFeatureTag: (featureTag: string) => void;\n};\n\nfunction FeatureToggleButton({ featureTag, tagOn, toggleFeatureTag }: Props) {\n const featureTags = localStorage.getItem(FEATURE_TAGS_STORAGE_KEY);\n\n return (\n <>\n {featureTags && (\n <div className={`flex fixed bottom-0 right-0 mb-2 mr-20 p-2 bg-white rounded`}>\n <Button onClick={() => toggleFeatureTag(featureTag)} mode={tagOn ? 'primary' : 'secondary'}>\n {featureTag}\n </Button>\n </div>\n )}\n </>\n );\n}\n\nexport { FeatureToggleButton };\n","import { useEffect, useState } from 'react';\nimport { FEATURE_TAGS_SEPARATOR, FEATURE_TAGS_STORAGE_KEY, readFeatureTags } from './utils';\n\nexport function useFeatureToggle(featureTag: string) {\n const [featureTags, setFeatureTags] = useState<string[]>([]);\n const [featureTagOn, setFeatureTagOn] = useState(false);\n\n useEffect(() => {\n const featureTags = readFeatureTags();\n setFeatureTags(featureTags);\n }, []);\n\n useEffect(() => {\n setFeatureTagOn(featureTags.some(tag => tag === featureTag));\n }, [featureTags, featureTag]);\n\n const toggleFeatureTag = (featureTag: string): void => {\n const newValue = !featureTagOn;\n setFeatureTagOn(newValue);\n\n const featureTags = readFeatureTags().filter(tag => tag !== featureTag);\n const newFeatureTags = [...featureTags, ...(newValue ? [featureTag] : [])].join(FEATURE_TAGS_SEPARATOR);\n localStorage.setItem(FEATURE_TAGS_STORAGE_KEY, newFeatureTags);\n };\n\n return { value: featureTagOn, toggleFeatureTag };\n}\n","import React, { useEffect, useRef, useState } from 'react';\nimport Chart, { Plugin } from 'chart.js/auto';\nimport { ScaleOptions, DataSet, Tooltip } from './types';\nimport { lineThroughPointsPlugin, summaryLabelsPlugin } from './plugins';\n\nimport { charts } from '@ecosystem/newron-design-system';\nimport { FeatureToggleButton, useFeatureToggle } from '../../tools/featureToggle';\nimport { LineChartGroup } from '@ecosystem/newron-design-system/build/exports/datavis';\nimport { getMainGraphWidth } from '../../common/util';\nimport { ContextType, renderTooltip } from './tooltip';\n\nconst { LineChart: VisxLineChart, ChartScaleType, LegendPosition } = charts;\n\nexport type LineData = {\n labels: (string[] | string)[];\n sets: DataSet[];\n summary?: DataSet;\n};\n\nexport type LineChartOptions = {\n xScale?: ScaleOptions;\n yScale?: ScaleOptions;\n data?: LineData;\n tooltip?: Tooltip;\n compactView?: boolean;\n};\n\ntype Props = {\n options: LineChartOptions;\n trackTooltipEvent: () => void;\n};\n\nfunction LineChart({ options = {}, trackTooltipEvent }: Props) {\n const [width, setWidth] = useState<string>();\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const chartRef = useRef<Chart | null>(null);\n const optionsRef = useRef<string>(null);\n const visxOptionsRef = useRef<string>(null);\n\n const [chartData, setChartdata] = useState<LineChartGroup[]>();\n const { xScale, yScale, data, tooltip, compactView } = options;\n const { value: useVisx, toggleFeatureTag } = useFeatureToggle('visx-linechart');\n const { value: useToggleButton } = useFeatureToggle('visx-linechart-toggle');\n\n const tooltipFormat = item => {\n const formattedValue = tooltip?.valueFormatter ? tooltip.valueFormatter(Number(item.raw)) : item.formattedValue;\n return `${item.dataset.label}: ${formattedValue}`;\n };\n\n /* eslint-disable react-hooks/exhaustive-deps */\n useEffect(() => {\n if (useVisx) {\n return;\n }\n\n if (!canvasRef.current || !data || optionsRef.current === JSON.stringify(options)) {\n return;\n }\n\n const { sets, labels, summary } = data;\n\n optionsRef.current = JSON.stringify(options);\n\n if (chartRef.current) {\n chartRef.current.destroy();\n chartRef.current = null;\n }\n\n if (compactView) {\n setWidth('100%');\n } else {\n const chartWidth = getMainGraphWidth(data, true);\n setWidth(`${chartWidth}px`);\n }\n\n const plugins: Plugin[] = [lineThroughPointsPlugin()];\n if (summary && !compactView) {\n plugins.push(summaryLabelsPlugin(summary));\n }\n\n let hoverTimeout;\n\n chartRef.current = new Chart(canvasRef.current, {\n plugins: plugins,\n type: 'line',\n data: {\n labels,\n datasets: sets.map(set => ({\n label: set.label,\n data: set.values.raw,\n borderColor: set.values.fillColor,\n backgroundColor: set.values.fillColor,\n pointRadius: compactView ? 2 : undefined,\n spanGaps: true,\n segment: {\n borderDash: ctx => (ctx.p0.skip || ctx.p1.skip ? [4, 4] : undefined),\n borderWidth: ctx => (ctx.p0.skip || ctx.p1.skip ? 1 : undefined),\n },\n })),\n },\n options: {\n onHover: (_event, _activeElements, chart) => {\n clearTimeout(hoverTimeout);\n hoverTimeout = setTimeout(() => {\n const activeElements = chart.getActiveElements();\n if (activeElements.length > 0) {\n trackTooltipEvent();\n }\n }, 1000);\n },\n responsive: true,\n maintainAspectRatio: false,\n layout: {\n padding: {\n top: !summary ? 0 : 65,\n right: !summary ? 0 : 50,\n },\n },\n plugins: {\n tooltip: {\n callbacks: {\n label: tooltipFormat,\n },\n enabled: false, // Disable default tooltip rendering of linechart\n\n external: function (lContext: ContextType) {\n //render custom tooltip for line chart\n renderTooltip(lContext);\n },\n },\n legend: {\n display: false,\n },\n },\n interaction: {\n mode: 'nearest',\n intersect: false,\n },\n scales: {\n x: {\n border: {\n display: false,\n },\n grid: {\n display: true,\n },\n title: {\n display: xScale?.title !== undefined,\n text: xScale?.title || '',\n },\n ticks: {\n callback: function (value: string | number, index: number) {\n if (compactView && index % 4 !== 0) {\n return '';\n }\n if (xScale?.formatter) {\n return xScale.formatter(value);\n } else {\n return labels[index];\n }\n },\n autoSkip: false,\n maxRotation: 0,\n },\n },\n y: {\n border: {\n display: false,\n },\n grid: {\n display: true,\n },\n title: {\n display: yScale?.title !== undefined,\n text: yScale?.title || '',\n align: 'end',\n },\n beginAtZero: true,\n ticks: {\n display: yScale?.displayTicks === false ? false : true,\n callback: function (value: string | number) {\n if (yScale?.formatter) {\n return yScale.formatter(value);\n } else {\n return value;\n }\n },\n },\n grace: 0,\n },\n },\n },\n });\n\n return () => {\n clearTimeout(hoverTimeout);\n };\n }, [options, useVisx]);\n\n /* eslint-disable react-hooks/exhaustive-deps */\n useEffect(() => {\n if (!useVisx) {\n return;\n }\n\n if (!data || visxOptionsRef.current === JSON.stringify(options)) {\n return;\n }\n\n const { sets } = data;\n\n visxOptionsRef.current = JSON.stringify(options);\n\n const lineChartData = sets\n .filter(set => set.values.raw.length > 0)\n .map(set => {\n return {\n groupName: set.label,\n data: set.values.raw\n .map((value, idx) => ({\n x: idx,\n y: value,\n }))\n .filter(point => point.y !== null),\n };\n });\n setChartdata(lineChartData);\n }, [options, useVisx]);\n\n const formatLabel = (label: string | string[], formatter?: (value: string | number) => string) => {\n const labelParts = Array.isArray(label) ? label : [label];\n return labelParts.map(labelPart => (formatter ? formatter(labelPart) : labelPart)).join(' ');\n };\n\n return (\n <div data-testid=\"line-chart-core\" data-test-id=\"line-chart-core\" className=\"h-full\" style={{ width }}>\n {useToggleButton && (\n <FeatureToggleButton featureTag=\"visx-linechart\" tagOn={useVisx} toggleFeatureTag={toggleFeatureTag} />\n )}\n {<canvas className=\"h-full\" ref={canvasRef} style={{ display: useVisx ? 'none' : 'block' }} />}\n {useVisx && chartData && (\n <VisxLineChart\n data={chartData}\n fillContainer={true}\n height={500}\n width={2000} // TODO: refactor when sizing bug is fixed (use fillContainer instead, but it doesn't work now)\n xScaleType={ChartScaleType.Linear}\n yScaleType={ChartScaleType.Linear}\n tooltipProps={{\n header: (points, xKey) => {\n const idx = points[0][xKey];\n const label = data.labels[idx];\n return formatLabel(label, options.xScale?.formatter);\n },\n valueFormat: options.tooltip.valueFormatter,\n }}\n axesConfig={{\n xBottom: {\n label: xScale?.title,\n hideAxisLine: true,\n hideZero: false,\n tickSpacing: 130,\n tickLabelClassName: 'text-sm',\n tickFormat: idx => {\n const label = data.labels[idx];\n return formatLabel(label, options.xScale?.formatter);\n },\n hideTicks: !xScale?.displayTicks,\n },\n yLeft: {\n label: yScale?.title,\n hideAxisLine: true,\n hideZero: false,\n tickLabelClassName: 'text-sm',\n tickFormat: value => {\n if (yScale?.displayTicks === false) {\n return '';\n }\n return options.yScale?.formatter ? options.yScale.formatter(value) : value;\n },\n hideTicks: !yScale?.displayTicks,\n },\n }}\n showMarkers={!compactView}\n isColumnGridShown={false}\n customLineColors={data.sets.map(set => set.values.fillColor[0])}\n legendPosition={LegendPosition.Hide}\n />\n )}\n </div>\n );\n}\n\nexport { LineChart };\n","import React, { useEffect, useRef, useState } from 'react';\nimport Chart, { Plugin } from 'chart.js/auto';\nimport ChartDataLabels, { Context } from 'chartjs-plugin-datalabels';\nimport { ScaleOptions, DataSet, Tooltip } from './types';\nimport { summaryLabelsPlugin } from './plugins';\nimport { calculateSpaceByCharacter, getMainGraphWidth } from '../../common/util';\nimport { CHANGE_TYPE_AND_LABEL_POSITION_MAP } from './stackedBarChart';\nimport { ContextType, renderTooltip } from './tooltip';\n\nexport type SlopeData = {\n labels: (string[] | string)[];\n sets: DataSet[];\n summary?: DataSet;\n additionalSummary?: DataSet;\n};\n\nexport type SlopeScaleOptions = ScaleOptions & {\n useMax?: number;\n};\n\nexport type SlopeChartOptions = {\n xScale?: ScaleOptions;\n yScale?: SlopeScaleOptions;\n data?: SlopeData;\n tooltip?: Tooltip;\n};\n\ntype Props = {\n options: SlopeChartOptions;\n trackTooltipEvent: () => void;\n};\nfunction SlopeChart({ options, trackTooltipEvent }: Props) {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const chartRef = useRef<Chart | null>(null);\n const optionsRef = useRef<string>(null);\n const [fullChartWidth, setFullChartWidth] = useState<number>(240);\n\n const {\n xScale,\n yScale,\n data: { labels, sets, summary, additionalSummary },\n tooltip,\n } = options;\n\n const tooltipFormat = item => {\n const formattedValue = tooltip?.valueFormatter ? tooltip.valueFormatter(Number(item.raw)) : item.formattedValue;\n return `${item.dataset.label}: ${formattedValue}`;\n };\n\n useEffect(() => {\n const { data } = options;\n\n if (!canvasRef.current || !data || optionsRef.current === JSON.stringify(options)) {\n return;\n }\n\n optionsRef.current = JSON.stringify(options);\n\n if (chartRef.current) {\n chartRef.current.destroy();\n chartRef.current = null;\n }\n\n const plugins: Plugin[] = [ChartDataLabels];\n if (summary) {\n plugins.push(summaryLabelsPlugin(summary, CHANGE_TYPE_AND_LABEL_POSITION_MAP[summary.changeType]));\n }\n if (additionalSummary) {\n const summaryLabel = summaryLabelsPlugin(\n additionalSummary,\n CHANGE_TYPE_AND_LABEL_POSITION_MAP[additionalSummary.changeType]\n );\n plugins.push(summaryLabel);\n }\n let hoverTimeout;\n\n /**\n * Calculate the maximum space needed for the labels\n * on the left and right side of the graph\n * @param data - the chart's data\n * @returns the width needed for the labels on the left and right side of the graph\n */\n const getSideLabelWidth = (data: SlopeData) => {\n const labels = data.sets.flatMap(set => set.values.formatted);\n const labelsWidth = labels.map(label => calculateSpaceByCharacter(label));\n\n return Math.max(...labelsWidth);\n };\n\n const datalabelsOffset = 8;\n const sideLabelWidth = getSideLabelWidth(data);\n const leftLabelWidth = sideLabelWidth + datalabelsOffset;\n const rightLabelWidth = sideLabelWidth + 2 * datalabelsOffset;\n const fullwidth = getMainGraphWidth(data) + leftLabelWidth + rightLabelWidth;\n\n //In case of no comparison there will be only one vertical axix so width can be divided by half\n const noComparisonPeriod = labels.length === 1;\n const updatedFullWidth = noComparisonPeriod ? fullwidth / 2 : fullwidth;\n setFullChartWidth(updatedFullWidth);\n\n chartRef.current = new Chart(canvasRef.current, {\n plugins: plugins,\n type: 'line',\n data: {\n labels,\n datasets: sets.map(set => ({\n label: set.label,\n data: set.values.raw,\n borderColor: set.values.fillColor,\n backgroundColor: set.values.fillColor,\n datalabels: {\n // color: set.values.textColor,\n formatter: (_: unknown, ctx: Context) => set.values.formatted[ctx.dataIndex],\n offset: datalabelsOffset,\n anchor: 'center',\n align: (ctx: Context) => (ctx.dataIndex === 0 ? 'left' : 'right'),\n display: 'auto',\n },\n pointStyle: 'rect',\n pointRadius: 5,\n })),\n },\n options: {\n onHover: (_event, _activeElements, chart) => {\n clearTimeout(hoverTimeout);\n hoverTimeout = setTimeout(() => {\n const activeElements = chart.getActiveElements();\n if (activeElements.length > 0) {\n trackTooltipEvent();\n }\n }, 1000);\n },\n responsive: true,\n maintainAspectRatio: false,\n layout: {\n padding: {\n top: !summary ? 0 : 65,\n left: leftLabelWidth,\n right: noComparisonPeriod ? 0 : rightLabelWidth,\n },\n },\n plugins: {\n tooltip: {\n enabled: false, // Disable default tooltip rendering of slopechart\n external: function (sContext: ContextType) {\n //render custom tooltip for slopechart\n\n renderTooltip(sContext);\n },\n callbacks: {\n label: tooltipFormat,\n },\n },\n legend: {\n display: false,\n },\n },\n interaction: {\n mode: 'nearest',\n intersect: false,\n },\n scales: {\n x: {\n border: {\n display: false,\n },\n grid: {\n display: true,\n },\n title: {\n display: xScale?.title !== undefined,\n text: xScale?.title || '',\n },\n ticks: {\n callback: function (value: string | number, index: number) {\n if (xScale?.formatter) {\n return xScale.formatter(value);\n } else {\n return labels[index];\n }\n },\n maxRotation: 0,\n },\n },\n y: {\n border: {\n display: false,\n },\n grid: {\n display: false,\n },\n title: {\n display: false,\n },\n beginAtZero: true,\n ticks: {\n display: false,\n },\n grace: 0,\n min: 0,\n max: yScale?.useMax,\n offset: yScale?.useMax !== undefined,\n },\n },\n },\n });\n return () => {\n clearTimeout(hoverTimeout);\n };\n }, [options]);\n\n return (\n <div className=\"h-full\" style={{ width: fullChartWidth }}>\n <canvas className=\"h-full w-full\" ref={canvasRef} />\n </div>\n );\n}\n\nexport { SlopeChart };\n","import React, { useState, useRef, useEffect, Fragment } from 'react';\n\nexport type TrendValue = {\n raw: number | null;\n formatted: string;\n secondaryFormatted?: string;\n};\n\nexport type TrendRow = {\n label: string;\n values: TrendValue[];\n isTotals?: boolean;\n};\n\nexport type TrendsInfo = {\n rows: TrendRow[];\n periods: string[];\n};\n\ntype Props = {\n info: TrendsInfo;\n};\nfunction KpiTrendChart({ info }: Props) {\n const [index, setIndex] = useState<number | undefined>();\n const { rows, periods } = info;\n\n const handleMouseOver = (index: number) => {\n setIndex(index);\n };\n\n return (\n <div className=\"relative\" onMouseLeave={() => setIndex(undefined)}>\n {rows.map((row, idx) => (\n <Row key={idx} row={row} index={index} onMouseOver={handleMouseOver} />\n ))}\n <Periods periods={periods} index={index} />\n </div>\n );\n}\n\ntype RowProps = {\n row: TrendRow;\n onMouseOver: (index: number) => void;\n index?: number;\n};\nfunction Row({ row, index, onMouseOver }: RowProps) {\n const canvas = useRef<HTMLCanvasElement>(null);\n const { label, values, isTotals = false } = row;\n\n useEffect(() => {\n if (!canvas.current) {\n return;\n }\n\n const canvasEl = canvas.current;\n const canvasRect = canvasEl.getBoundingClientRect();\n\n canvasEl.width = canvasRect.width;\n canvasEl.height = canvasRect.height;\n\n const maxValue = Math.max(...values.map(v => v.raw));\n const tickLength = canvasEl.width / (values.length - 1);\n const ticks: (number | null)[] = [];\n values.forEach(value => {\n if (value === null) {\n ticks.push(null);\n } else {\n const tickHeight = (value.raw / maxValue) * canvasEl.height;\n ticks.push(tickHeight);\n }\n });\n\n const maxTick = Math.max(...ticks);\n const minTick = Math.min(...ticks);\n const offset = (canvasEl.height - (maxTick - minTick)) / 2;\n\n const ctx = canvasEl.getContext('2d');\n ctx.lineWidth = 1;\n ctx.lineCap = 'round';\n ctx.lineJoin = 'round';\n ctx.strokeStyle = isTotals ? '#879BCC' : '#4368BD';\n ctx.fillStyle = isTotals ? '#DBE0EB' : '#AFBBDB';\n\n ctx.translate(0.5, 0.5); // half the line width to straddle the pixels\n ctx.clearRect(0, 0, canvasEl.width, canvasEl.height);\n ctx.beginPath();\n\n const line = new Path2D();\n const area = new Path2D();\n area.moveTo(0, canvasEl.height);\n\n let x = 0;\n let y = 0;\n ticks.forEach((tick, idx) => {\n if (idx === 0) {\n x = 0;\n y = canvasEl.height - tick + offset;\n line.moveTo(x, y);\n area.lineTo(x, y);\n } else {\n x = idx * tickLength;\n y = canvasEl.height - tick + offset;\n line.lineTo(x, y);\n area.lineTo(x, y);\n }\n });\n\n area.lineTo(x, canvasEl.height);\n area.closePath();\n\n ctx.fill(area);\n ctx.stroke(line);\n\n ctx.translate(-0.5, -0.5); // reset\n }, [values, isTotals]);\n\n const displayValue = index !== undefined;\n\n const overlaysArray = Array(row.values.length).fill(null);\n return (\n <div className=\"relative flex flex-row items-stretch h-16 border-b border-light\">\n <div className=\"w-1/4 flex-shrink-0 flex flex-column justify-end leading-tight\">\n {!displayValue && <span className=\"block nowrap overflow-ellipses\">{label}</span>}\n {displayValue && <span className=\"block text-xs text-lighter nowrap overflow-ellipses\">{label}</span>}\n {displayValue && (\n <span className=\"block\">\n {values[index]?.formatted || '-'}{' '}\n <span className=\"text-sm text-lighter\">{values[index]?.secondaryFormatted || ''}</span>\n </span>\n )}\n </div>\n <div className=\"flex-grow relative pt-2\">\n <canvas ref={canvas} className=\"block z-1 relative h-full w-full\" />\n <div className=\"absolute inset-0 flex flex-row\">\n {overlaysArray.map((_, idx) => (\n <Fragment key={`${row.label}_${idx}`}>\n {idx === 0 && (\n <div\n onMouseEnter={() => onMouseOver(idx)}\n className={`flex-1 h-full border-l border-transparent ${index === idx ? 'border-brand' : ''}`}\n />\n )}\n {idx === overlaysArray.length - 1 && (\n <div\n onMouseEnter={() => onMouseOver(idx)}\n className={`flex-1 h-full border-r border-transparent ${index === idx ? 'border-brand' : ''}`}\n />\n )}\n {idx > 0 && idx < overlaysArray.length - 1 && (\n <>\n <div\n onMouseEnter={() => onMouseOver(idx)}\n className={`flex-1 h-full border-r border-transparent ${index === idx ? 'border-brand' : ''}`}\n />\n <div onMouseEnter={() => onMouseOver(idx)} className={`flex-1 h-full`} />\n </>\n )}\n </Fragment>\n ))}\n </div>\n </div>\n </div>\n );\n}\n\ntype PeriodProps = {\n periods: string[];\n index?: number;\n};\nfunction Periods({ periods, index }: PeriodProps) {\n const overlaysArray = Array(periods.length).fill(null);\n\n return (\n <div className=\"relative flex flex-row\">\n <div className=\"w-1/4 flex-shrink-0\"> </div>\n <div className=\"relative flex-grow\">\n {index === undefined && (\n <div className=\"flex flex-row justify-between text-lighter\">\n <span>{periods[0]}</span>\n <span>{periods[periods.length - 1]}</span>\n </div>\n )}\n {index !== undefined && (\n <div className=\"absolute inset-0 flex flex-row\">\n {overlaysArray.map((_, idx) => (\n <Fragment key={`pov_${idx}`}>\n {idx === 0 && (\n <div\n className={`flex-1 relative overflow-visible h-full border-l border-transparent ${\n index === idx ? 'border-brand' : ''\n }`}\n >\n {index === idx && <div className=\"absolute nowrap text-brand left-0 pl-1\">{periods[idx]}</div>}\n </div>\n )}\n {idx === overlaysArray.length - 1 && (\n <div\n className={`flex-1 relative overflow-visible h-full border-r border-transparent ${\n index === idx ? 'border-brand' : ''\n }`}\n >\n {index === overlaysArray.length - 1 && (\n <div className=\"absolute nowrap text-brand right-0 pr-1\">{periods[idx]}</div>\n )}\n </div>\n )}\n {idx > 0 && idx < overlaysArray.length - 1 && (\n <>\n <div\n className={`flex-1 relative h-full border-r border-transparent ${\n index === idx ? 'border-brand' : ''\n }`}\n >\n {index == idx && (\n <div\n className={`absolute nowrap text-brand ${\n idx <= overlaysArray.length / 2 ? 'left-full pl-1' : 'right-0 pr-1'\n }`}\n >\n {periods[idx]}\n </div>\n )}\n </div>\n <div className={`flex-1 relative h-full`} />\n </>\n )}\n </Fragment>\n ))}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport { KpiTrendChart };\n","import { Chart } from 'chart.js';\n\nChart.defaults.font.size = 14;\nChart.defaults.font.family = 'Lato';\nChart.defaults.layout.padding = { top: 16, left: 0 };\nChart.defaults.plugins.legend.maxWidth = 190;\n\n// percentage of width each bar should take up of its category\nChart.defaults.datasets.bar.categoryPercentage = 0.95;\nChart.defaults.datasets.bar.barPercentage = 0.9;\n// Chart.defaults.datasets.bar.barThickness = 'flex';\n\nexport { HorizontalBarChart } from './horizontalBarChart';\nexport type { BarChartOptions } from './horizontalBarChart';\n\nexport { StackedBarChart } from './stackedBarChart';\nexport type { StackedBarChartOptions, StackedData, StackedDataSet, StackedScaleOptions } from './stackedBarChart';\n\nexport { LineChart } from './lineChart';\nexport type { LineChartOptions, LineData } from './lineChart';\n\nexport { SlopeChart } from './slopeChart';\nexport type { SlopeData, SlopeChartOptions } from './slopeChart';\n\nexport type { Data, DataSet, ScaleOptions } from './types';\n\nexport { KpiTrendChart } from './kpiTrend';\nexport type { TrendsInfo, TrendRow, TrendValue } from './kpiTrend';\n\nexport { ChartColors } from './constants';\n","import { ChartColors as LibChartColors } from '@ecosystem/newron-design-system/build/exports/colors';\nimport { colors } from '@ecosystem/newron-design-system';\nimport { ChartColors, DataSet } from '../../design/charts';\nimport {\n ChangeType,\n ColumnRelationship,\n DataColumn,\n DataRow,\n DataType,\n DataWarning,\n Entity,\n FormatHint,\n IdentifierColumn,\n KpiWithChangeColumn,\n} from '../../types';\nimport { DataStore } from '../../data/store';\nimport { Formatting } from '../../data/formatting';\n\nexport enum MarketKpi {\n Revenue = 'revenue',\n Units = 'units',\n ShareRevenue = 'share_revenue',\n ShareUnits = 'share_units',\n AveragePrice = 'average_price',\n PriceIndex = 'price_index',\n}\n\nexport type ChartData = {\n yColumn: DataColumn;\n updatedYColumn?: DataColumn;\n dataSets: DataSet[];\n totalsDataSet?: DataSet;\n dataLabels: (string | string[])[];\n hasData?: boolean;\n warnings?: DataWarning[];\n};\n\nexport class ColorHelper {\n private helper: LibChartColors;\n private brandColors: Record<string, string> = {};\n private defaultColors: Record<string, string> = {};\n private isBrands = false;\n\n constructor(xColumnName: string, xRowValues: string[]) {\n this.helper = colors.ChartColors.getInstance();\n if (xColumnName.includes('brand')) {\n this.brandColors = this.helper.getBrandColorMap(xRowValues);\n this.isBrands = true;\n } else {\n xRowValues.forEach((value, index) => {\n this.defaultColors[value] = this.helper.standardColors[this.getStandardColorIndex(index)];\n });\n }\n }\n\n getStandardColorIndex(index: number) {\n // only 30 colours available!!\n return Math.min(index, this.helper.standardColors.length - 1);\n }\n\n getColors(rowXValue: string, index: number, bgColor?: string): [bgColor: string, textColor: string] {\n let backgroundColor = bgColor || '';\n if (rowXValue.toLocaleLowerCase() === 'others') {\n backgroundColor = ChartColors.othersBg;\n } else if (this.isBrands) {\n backgroundColor = this.brandColors[rowXValue];\n if (!backgroundColor) {\n backgroundColor = this.helper.standardColors[this.getStandardColorIndex(index)];\n }\n } else {\n backgroundColor = this.defaultColors[rowXValue];\n if (!backgroundColor) {\n backgroundColor = this.helper.standardColors[this.getStandardColorIndex(index)];\n }\n }\n\n return [backgroundColor, this.helper.getContrastTextColor(backgroundColor)];\n }\n}\n\nexport function getColumnsForChart(columns: DataColumn[]): Entity[] {\n return columns\n .filter(col => (col.dataType === DataType.Decimal || col.dataType === DataType.Integer) && col.arrayLength !== null)\n .map(col => ({\n value: col.name,\n label: col.label,\n }));\n}\n\nexport function makeDataSet(\n row: DataRow,\n options: {\n xColumn: DataColumn;\n yColumn: DataColumn;\n withChange: boolean;\n index: number;\n colorHelper: ColorHelper;\n bgColor?: string;\n }\n): DataSet {\n const { xColumn, yColumn, withChange, index, colorHelper, bgColor } = options;\n const set: DataSet = {\n values: {\n raw: [],\n formatted: [],\n fillColor: [],\n textColor: [],\n },\n };\n\n if (withChange) {\n set.changes = {\n raw: [],\n formatted: [],\n textColor: [],\n };\n }\n\n const name = String(row.values[xColumn.name]);\n const [backgroundColor, textColor] = colorHelper.getColors(name, index, bgColor);\n const ids = DataStore.getRowIdentifiers(row, [xColumn], '');\n\n const labels = (ids ? ids.name : name).split('|');\n const mainLabel = labels?.[0];\n const subLabel = labels?.[1];\n\n set.label = mainLabel;\n set.subLabel = subLabel;\n set.uniqueId = name;\n\n set.changeType = [FormatHint.Percentage, FormatHint.Index].includes(yColumn.formatHint)\n ? ChangeType.percent\n : ChangeType.absolute;\n const values = row.values[yColumn.name] as (number | null)[];\n values?.forEach(val => {\n set.values.raw.push(val);\n set.values.fillColor.push(backgroundColor);\n set.values.textColor.push(textColor);\n });\n\n if (withChange) {\n const changeCol = yColumn as KpiWithChangeColumn;\n const changeValues = row.values[changeCol.changeName] as (number | null)[];\n changeValues?.forEach(val => {\n set.changes.raw.push(val);\n set.changes.textColor.push(getChangeColor(val));\n });\n }\n\n return set;\n}\n\nexport function formatDataSets(\n valueSets: DataSet[],\n options: {\n yColumn: DataColumn;\n currency: string;\n }\n) {\n const { yColumn, currency } = options;\n const { dataType, formatHint } = yColumn;\n const { changeDataType, changeFormatHint } = yColumn as KpiWithChangeColumn;\n\n valueSets.forEach(set => {\n set.values.raw.forEach(value => {\n const formatted = Formatting.format(value, {\n dataType,\n formatHint,\n currency,\n });\n set.values.formatted.push(formatted);\n });\n if (set.changes) {\n set.changes.raw.forEach(value => {\n const formatted = Formatting.format(value, {\n dataType: changeDataType,\n formatHint: changeFormatHint,\n isChange: true,\n currency,\n });\n set.changes.formatted.push(formatted);\n });\n }\n });\n}\n\nexport function formatScaleValue(value: string | number, options: { yColumn: DataColumn }): string {\n const {\n yColumn: { dataType, formatHint },\n } = options;\n\n const formatted = Formatting.format(Number(value), {\n dataType: dataType,\n // change format hint to hide the currency symbol\n formatHint: formatHint !== FormatHint.Money ? formatHint : undefined,\n });\n return formatted;\n}\n\nexport function formatTooltipValue(value: string | number, options: { yColumn: DataColumn; currency: string }): string {\n const {\n yColumn: { dataType, formatHint },\n currency,\n } = options;\n\n const formatted = Formatting.format(Number(value), {\n dataType: dataType,\n formatHint: formatHint,\n currency,\n });\n return formatted;\n}\n\nexport function hasDataSetValues(sets: DataSet[]): boolean {\n return !sets.every(dataset => dataset.values.raw.every(value => value === null));\n}\n\nexport function getWarningsOfColumn(columnName: string, fieldWarnings?: DataWarning[]): DataWarning[] {\n return fieldWarnings?.filter(([, { kpis }]: DataWarning) => kpis.some(({ name }) => name === columnName)) ?? [];\n}\n\nexport function getChangeColor(value: number): string {\n return value < 0 ? ChartColors.negativeChange : ChartColors.positiveChange;\n}\n\nexport function findDescriptionColumn(columns: DataColumn[], xColumnName: string): DataColumn | undefined {\n const xColumn = columns.find(col => col.name === xColumnName);\n\n if ((xColumn as IdentifierColumn)?.idField) {\n return xColumn;\n }\n\n const descriptionColumn = columns.find(\n col => col.relatedTo === xColumnName && col.relationship === ColumnRelationship.Description\n );\n\n if (descriptionColumn) {\n return descriptionColumn;\n }\n\n return xColumn;\n}\n","import { DataColumn, DataRow, DataRows, KpiWithChangeColumn, DataWarning } from '../../types';\nimport { ChartColors, DataSet } from '../../design/charts';\nimport {\n ChartData,\n ColorHelper,\n findDescriptionColumn,\n formatDataSets,\n getWarningsOfColumn,\n hasDataSetValues,\n makeDataSet,\n} from './common';\n\nexport function createChartData(\n data: { rows: DataRows; totals?: DataRow; columns: DataColumn[]; fieldWarnings?: DataWarning[] },\n options: {\n yColumnName: string;\n xColumnName: string;\n currency: string;\n setPerRow?: boolean;\n includeTotals?: boolean;\n colorHelper?: ColorHelper;\n updatedYColumn?: DataColumn;\n }\n): ChartData | undefined {\n const { rows, columns, totals, fieldWarnings } = data;\n const {\n yColumnName,\n xColumnName,\n updatedYColumn,\n currency,\n setPerRow = true,\n includeTotals = true,\n colorHelper,\n } = options;\n const xColumn = findDescriptionColumn(columns, xColumnName);\n\n const yColumn = columns.find(col => col.name === yColumnName);\n if (!xColumn || !yColumn) {\n return;\n }\n\n const myColorHelper = colorHelper\n ? colorHelper\n : new ColorHelper(\n xColumnName,\n rows.map(r => String(r.values[xColumn.name]))\n );\n const withChange = (yColumn as KpiWithChangeColumn)?.changeName !== undefined;\n\n const dataSets: DataSet[] = [];\n let totalsDataSet: DataSet | undefined;\n let dataLabels: string[] = [];\n\n if (setPerRow) {\n rows.forEach((row, index) => {\n dataSets.push(\n makeDataSet(row, {\n xColumn,\n yColumn,\n index,\n withChange,\n colorHelper: myColorHelper,\n })\n );\n });\n } else {\n dataLabels = [];\n const dataSet: DataSet = {\n values: {\n raw: [],\n formatted: [],\n fillColor: [],\n textColor: [],\n },\n };\n if (withChange) {\n dataSet.changes = {\n raw: [],\n formatted: [],\n textColor: [],\n };\n }\n\n const rowSets = rows.map((row, index) =>\n makeDataSet(row, {\n xColumn,\n yColumn,\n index,\n withChange,\n colorHelper: myColorHelper,\n })\n );\n rowSets.forEach(rowSet => {\n dataLabels.push(rowSet.label);\n const idx = rowSet.values.raw.length - 1;\n dataSet.values.raw.push(rowSet.values.raw[idx]);\n dataSet.values.fillColor.push(rowSet.values.fillColor[idx]);\n dataSet.values.textColor.push(rowSet.values.textColor[idx]);\n\n if (withChange) {\n dataSet.changes?.raw.push(rowSet.changes?.raw[idx]);\n dataSet.changes?.textColor.push(rowSet.changes?.textColor[idx]);\n }\n });\n\n dataSets.push(dataSet);\n }\n\n if (includeTotals && totals) {\n totalsDataSet = makeDataSet(totals, {\n xColumn,\n yColumn: updatedYColumn || yColumn,\n withChange,\n colorHelper: myColorHelper,\n index: 0,\n bgColor: ChartColors.panelBg,\n });\n }\n if (totalsDataSet) {\n formatDataSets([totalsDataSet], { yColumn: updatedYColumn || yColumn, currency });\n }\n\n formatDataSets(dataSets, { yColumn, currency });\n\n const hasData = hasDataSetValues(dataSets);\n\n const warnings = getWarningsOfColumn(yColumn.name, fieldWarnings);\n\n return {\n hasData,\n yColumn,\n updatedYColumn,\n dataSets,\n totalsDataSet,\n dataLabels,\n warnings,\n };\n}\n","import { DataColumn, DataType } from '../../types';\n\nexport function validColumnsFilter(col: DataColumn): boolean {\n return (col.dataType === DataType.Decimal || col.dataType === DataType.Integer) && col.arrayLength !== null;\n}\n","import React from 'react';\nimport { DataSet } from './types';\nimport { LabelPosition } from './stackedBarChart';\nimport { feedback } from '@ecosystem/newron-design-system';\n\ntype Props = {\n data: DataSet[];\n totalsLabel?: string;\n totalsChangeLabel?: string;\n additionalTotalsLabel?: string;\n additionalTotalsChangeLabel?: string;\n css?: string;\n additionalLabelPosition?: LabelPosition;\n};\nfunction Legend({\n css,\n data,\n totalsLabel,\n totalsChangeLabel,\n additionalTotalsLabel,\n additionalTotalsChangeLabel,\n additionalLabelPosition = LabelPosition.BOTTOM,\n}: Props) {\n const uniqueIds = new Set<string>();\n const items: { uniqueId: string; label: string; subLabel?: string; color: string }[] = [];\n const CHARACTER_LIMIT = 16;\n\n const { Tooltip } = feedback;\n\n data?.forEach(set => {\n const idValue = set.uniqueId || set.label;\n if (!uniqueIds.has(idValue)) {\n uniqueIds.add(idValue);\n items.push({\n uniqueId: idValue,\n label: set.label,\n subLabel: set.subLabel,\n color: set.values.fillColor[0],\n });\n }\n });\n\n const legendCss = `flex ${additionalTotalsChangeLabel ? 'pb-6' : ''} ${\n additionalLabelPosition === LabelPosition.BOTTOM ? 'flex-column' : 'flex-column-reverse'\n } ${css || ''}`;\n\n return (\n <div className={legendCss}>\n {totalsLabel && totalsChangeLabel && (\n <div className=\"text-sm\">\n <div>{totalsLabel}</div>\n <div>{totalsChangeLabel}</div>\n </div>\n )}\n <div\n data-test-id={'chart-legends-container'}\n className=\"flex-grow flex flex-column gap-1 justify-center min-w-40 max-w-44\"\n >\n {items.map(item => {\n const isLongLabel = item.label.length > CHARACTER_LIMIT;\n\n return (\n <div key={item.uniqueId}>\n <Tooltip placement={'top'}>\n {isLongLabel && (\n <Tooltip.Content>\n <span className={'break-all'}>{item.label}</span>\n </Tooltip.Content>\n )}\n <div className=\"flex items-start gap-2\">\n <span className=\"w-4 min-w-4 h-3 inline-block mt-1\" style={{ backgroundColor: item.color }} />\n <span data-test-id={'chart-legends-label'} className=\"text-sm leading-tight truncate\">\n {item.label}\n </span>\n </div>\n {item?.subLabel && (\n <div className=\"flex pl-6\">\n <span className={'text-xs text-lighter'}>{item.subLabel}</span>\n </div>\n )}\n </Tooltip>\n </div>\n );\n })}\n </div>\n {additionalTotalsLabel && additionalTotalsChangeLabel && (\n <div className=\"text-sm\">\n <div>{additionalTotalsLabel}</div>\n <div>{additionalTotalsChangeLabel}</div>\n </div>\n )}\n </div>\n );\n}\n\nexport { Legend };\n","import React from 'react';\nimport { elements } from '@ecosystem/newron-design-system';\nimport { Entity } from '../../types';\n\ntype Props = {\n isOpen: boolean;\n options: Entity[];\n isMulti?: boolean;\n onItemClick: (value: string) => void;\n value: string | string[];\n};\nfunction SelectionMenu({ isOpen, options, isMulti, onItemClick, value }: Props) {\n if (!isOpen) {\n return null;\n }\n\n return (\n <div\n style={{ maxHeight: '240px' }}\n className=\"absolute left-0 text-md top-full mt-1 z-10 w-content bg-white rounded border border-light font-normal overflow-y-auto overscroll-contain\"\n >\n {options.map(opt => (\n <MenuItem\n key={opt.value}\n option={opt}\n isActive={opt.value === value}\n canBeUnselected={isMulti}\n onClick={() => onItemClick(opt.value)}\n />\n ))}\n </div>\n );\n}\n\ntype ItemProps = {\n option: Entity;\n isActive: boolean;\n canBeUnselected?: boolean;\n onClick: () => void;\n};\nfunction MenuItem({ option, isActive, onClick, canBeUnselected = false }: ItemProps) {\n const { Icon } = elements;\n\n if (isActive && !canBeUnselected) {\n return (\n <div className=\"py-2 px-4 flex items-center\">\n <div className=\"flex-grow\">{option.label}</div>\n <Icon>\n <Icon.icons.Check />\n </Icon>\n </div>\n );\n }\n\n return (\n <button\n onClick={onClick}\n className=\"w-full px-4 flex items-center gap-1 py-2 text-left transition-colors hover:bg-brand-light\"\n >\n <span className=\"flex-grow nowrap\">{option.label}</span>\n <span className={isActive ? 'visible' : 'hidden'}>\n <Icon>\n <Icon.icons.Check />\n </Icon>\n </span>\n </button>\n );\n}\n\nexport { SelectionMenu };\n","import { Entity } from '../../types';\nimport { elements } from '@ecosystem/newron-design-system';\nimport React, { ReactNode, useRef, useState } from 'react';\nimport { useOnOutsideClick } from '../../tools/outsideclick.hook';\nimport { SelectionMenu } from '../menus';\nimport { YColumnSelection } from './types';\n\ntype TitleProps = {\n title: string;\n selections?: YColumnSelection;\n children?: ReactNode;\n};\nfunction ChartTitle({ title, selections, children }: TitleProps) {\n const menuElement = useRef<HTMLDivElement>(null);\n const [menuOpen, setMenuOpen] = useState<boolean>(false);\n\n useOnOutsideClick(menuElement, () => setMenuOpen(false));\n\n const handleChange = (value: string) => {\n if (selections?.onChange) {\n selections.onChange(value);\n }\n setMenuOpen(false);\n };\n\n let columnOptions: Entity[] = selections?.options || [];\n\n const { Icon } = elements;\n\n return (\n <div className=\"flex items-center justify-center gap-2 font-bold text-md pb-4 min-h-10 h-10 pt-2\">\n {!selections && <span className=\"font-bold\">{title}</span>}\n {selections && (\n <div className=\"relative\" ref={menuElement}>\n <button\n className=\"px-2 h-8 font-bold flex items-center gap-1 justify-start rounded border border-light\"\n onClick={() => setMenuOpen(true)}\n >\n <span>{title}</span>\n <Icon color=\"brand\">\n <Icon.icons.ChevronDown />\n </Icon>\n </button>\n <SelectionMenu\n onItemClick={handleChange}\n options={columnOptions}\n isOpen={menuOpen}\n value={selections.value}\n />\n </div>\n )}\n {children && children}\n </div>\n );\n}\n\nfunction legendLabelSplitter(label: string, lineLength: number = 12): string {\n if (label.length <= lineLength) {\n return label;\n }\n const spaceBreak = label.indexOf(' ', lineLength - 3);\n if (spaceBreak > 0) {\n return [label.substring(0, spaceBreak), label.substring(spaceBreak + 1)].join('\\n');\n }\n return label;\n}\n\nexport { ChartTitle, legendLabelSplitter };\n","export const NO_DATA_WARNING = 'No data available for your selected filters, try modifying your selections.';\n","import React from 'react';\nimport { feedbackV2 } from '@ecosystem/newron-design-system';\nimport { NO_DATA_WARNING } from '../../common/constants/warningMessages';\n\nconst { Alert } = feedbackV2;\n\nexport interface EmptyDataWarningProps {\n className?: string;\n message?: string;\n style?: { [k: string]: string | number };\n}\n\nexport const EmptyDataWarning: React.FC<EmptyDataWarningProps> = ({ className, message = NO_DATA_WARNING, style }) => {\n return (\n <div className={`h-full pt-15 ${className}`} style={style}>\n <Alert title={message} type=\"warn\" />\n </div>\n );\n};\n","import React, { ForwardedRef } from 'react';\nimport {\n LineChart,\n LineChartOptions,\n SlopeChart,\n SlopeChartOptions,\n StackedBarChart,\n StackedBarChartOptions,\n} from '../../design/charts';\nimport { Legend } from '../../design/charts/legend';\nimport { Loading } from '../../design/loading/Loading';\nimport { ChartTitle } from '../../design/charts/parts';\nimport { ChartData } from '../data/common';\nimport { EmptyState } from '../../common/no-data-warning/empty-state';\nimport { DataWarning } from '../../types';\nimport { EmptyDataWarning } from '../../design/warning/emptyDataWarning';\nimport { WarningsDisplay } from '../../design/warning/warningsDisplay';\nimport { Formatting } from '../../data/formatting';\nimport { DataErrorElement } from '../error/error';\nimport { DEFAULT_ERROR_MESSAGE } from '../../common/constants/error';\n\ntype Props = {\n data: ChartData[];\n currency: string;\n trackTooltipEvent: () => void;\n isLoading?: boolean;\n isEnrichmentLoading?: boolean;\n enrichmentError?: string;\n};\nconst MultiKpiChart = React.forwardRef<HTMLDivElement, Props>(\n (\n { data, currency, trackTooltipEvent, isLoading, isEnrichmentLoading, enrichmentError }: Props,\n ref: ForwardedRef<HTMLDivElement>\n ) => {\n const includeTotals = data[0]?.totalsDataSet !== undefined;\n let totalsLabel = includeTotals ? 'Market totals' : undefined;\n let totalsChangeLabel = includeTotals ? 'Change' : undefined;\n let isEmptyData = false;\n\n const loading = isLoading || isEnrichmentLoading;\n\n return (\n <div ref={ref} className=\"relative w-full\">\n <div className=\"relative flex overflow-x-auto w-full\">\n <div className=\"w-full flex flex-rows items-stretch gap-2\">\n {!isEmptyData && (\n <Legend\n css=\"pt-10\"\n data={data.find(item => !!item.dataSets)?.dataSets}\n totalsLabel={totalsLabel}\n totalsChangeLabel={totalsChangeLabel}\n />\n )}\n <div className=\"relative flex-grow flex flex-row items-stretch overflow-x-auto\">\n {!isEmptyData &&\n data.map((set, idx) => (\n <KpiChart\n isLoading={loading}\n key={`${set?.yColumn.label}_${idx}`}\n data={set}\n currency={currency}\n trackTooltipEvent={trackTooltipEvent}\n enrichmentError={enrichmentError}\n />\n ))}\n {isEmptyData && <EmptyState height=\"500px\" />}\n </div>\n </div>\n </div>\n </div>\n );\n }\n);\n\ntype KpiChartProps = {\n data: ChartData;\n currency: string;\n isLoading: boolean;\n trackTooltipEvent: () => void;\n enrichmentError?: string;\n};\n\nfunction KpiChart({ data, currency, trackTooltipEvent, isLoading, enrichmentError }: KpiChartProps) {\n const { yColumn, dataSets, totalsDataSet, dataLabels } = data;\n let Chart: JSX.Element | null = null;\n const isSeries = data.dataLabels?.length > 2;\n\n const formatTooltipValue = (value: string | number): string => {\n return Formatting.format(Number(value), {\n dataType: yColumn.dataType,\n formatHint: yColumn.formatHint,\n currency,\n });\n };\n\n if (yColumn?.canAggregate) {\n const chartOptions: StackedBarChartOptions = {\n yScale: {\n stacked: true,\n },\n data: {\n sets: dataSets,\n summary: totalsDataSet,\n labels: dataLabels,\n },\n tooltip: {\n valueFormatter: value => formatTooltipValue(value),\n },\n changesOnLastStack: !isSeries,\n };\n Chart = <StackedBarChart options={chartOptions} trackTooltipEvent={trackTooltipEvent} />;\n } else {\n if (isSeries) {\n const lineChartOptions: LineChartOptions = {\n yScale: {\n formatter: value => formatTooltipValue(value),\n },\n data: {\n sets: dataSets,\n summary: totalsDataSet,\n labels: dataLabels,\n },\n tooltip: {\n valueFormatter: value => formatTooltipValue(value),\n },\n };\n Chart = <LineChart options={lineChartOptions} trackTooltipEvent={trackTooltipEvent} />;\n } else {\n const slopeChartOptions: SlopeChartOptions = {\n data: {\n sets: dataSets,\n summary: totalsDataSet,\n labels: dataLabels,\n },\n tooltip: {\n valueFormatter: value => formatTooltipValue(value),\n },\n };\n Chart = <SlopeChart options={slopeChartOptions} trackTooltipEvent={trackTooltipEvent} />;\n }\n }\n\n return (\n <div className=\"relative px-4\">\n <div className=\"relative flex-column\" style={{ height: '500px' }}>\n {!data?.hasData && <Loading isActive={isLoading} withIndicator />}\n <ChartTitle title={yColumn.label} />\n <ChartWarnings\n isLoading={isLoading}\n hasData={data?.hasData}\n warnings={data?.warnings}\n enrichmentError={enrichmentError}\n />\n {data?.hasData && <div className=\"flex-grow\">{Chart}</div>}\n </div>\n </div>\n );\n}\n\nexport const ChartWarnings: React.FC<{\n warnings?: DataWarning[];\n hasData?: boolean;\n isLoading: boolean;\n enrichmentError: string;\n}> = ({ hasData, warnings, isLoading, enrichmentError }) => {\n if (hasData || isLoading) {\n return null;\n }\n if (enrichmentError) {\n const errorInfo = {\n message: DEFAULT_ERROR_MESSAGE,\n className: 'pt-10',\n title: 'Unable to get data.',\n };\n return <DataErrorElement error={errorInfo} />;\n }\n\n if (warnings?.length > 0) {\n return <WarningsDisplay warnings={warnings} className=\"pt-15\" style={{ maxWidth: 300 }} />;\n }\n\n return <EmptyDataWarning style={{ maxWidth: 300 }} />;\n};\n\nexport { MultiKpiChart };\n","import React, { ForwardedRef, forwardRef, useState } from 'react';\nimport { actions } from '@ecosystem/newron-design-system';\nimport { Cells, Table } from '../../design/table2';\nimport { DataColumn } from '../../types';\nimport { ChartData } from '../data/common';\nimport { Loading } from '../../design/loading/Loading';\n\ntype Props = {\n periodCount: number;\n data: ChartData[];\n xColumn: DataColumn;\n isEnrichmentLoading: boolean;\n};\nconst MultiKpiTable = forwardRef<HTMLDivElement, Props>(\n ({ data, xColumn, periodCount, isEnrichmentLoading }, ref: ForwardedRef<HTMLDivElement>) => {\n const [rowsToDisplay, setRowsToDisplay] = useState<number>(100);\n\n const firstData = data.filter(d => d.hasData)[0];\n const rowNames = firstData?.dataSets.map(s => s.label);\n const rowSubLabels = firstData?.dataSets.map(s => s.subLabel);\n const rowCount = firstData?.dataSets.length;\n const includeTotals = firstData?.totalsDataSet !== undefined;\n\n const handleLoadMore = () => {\n const newAmount = rowsToDisplay + 100;\n if (newAmount > rowCount) {\n setRowsToDisplay(rowCount);\n } else {\n setRowsToDisplay(newAmount);\n }\n };\n\n const { Button } = actions;\n\n return (\n <div ref={ref} className=\"relative w-full\">\n <Table>\n <Table.Header withRows={false}>\n <tr>\n <Table.Column rowSpan={2}>{xColumn?.label}</Table.Column>\n {data.map((set, idx) => (\n <KpiHeadersTop key={`ht_${idx}`} series={set} periodCount={periodCount} />\n ))}\n </tr>\n <tr>\n {data.map((set, idx) => (\n <KpiHeadersBottom\n key={`ht_${idx}`}\n series={set}\n isLoading={isEnrichmentLoading}\n periodCount={periodCount}\n />\n ))}\n </tr>\n </Table.Header>\n <Table.Body>\n {includeTotals && (\n <Table.Row important>\n <Table.Cell align=\"left\">Market</Table.Cell>\n {data.map((set, idx) => (\n <KpiCells key={`sum_${idx}`} series={set} rowIndex=\"totals\" periodCount={periodCount} />\n ))}\n </Table.Row>\n )}\n {rowNames?.slice(0, rowsToDisplay).map((rowName, rIdx) => (\n <Table.Row key={`r_${rowName}`}>\n <Table.Cell align=\"left\">\n <>\n <span>{rowName}</span>\n {rowSubLabels[rIdx] && <span className=\"text-xs text-lighter\">{rowSubLabels[rIdx]}</span>}\n </>\n </Table.Cell>\n {data.map((set, idx) => (\n <KpiCells\n key={`r_${rowName}_${rIdx}_${idx}`}\n series={set}\n rowIndex={rIdx}\n periodCount={periodCount}\n />\n ))}\n </Table.Row>\n ))}\n </Table.Body>\n </Table>\n <div className=\"py-4 flex items-center gap-4\">\n <span className=\"\">\n {rowsToDisplay > rowCount && `${rowCount} out of ${rowCount} items`}\n {rowsToDisplay <= rowCount && `${rowsToDisplay} out of ${rowCount} items`}\n </span>\n {rowsToDisplay <= rowCount && <Button onClick={handleLoadMore}>Load more</Button>}\n </div>\n </div>\n );\n }\n);\n\ntype KpiHeadersProps = {\n series: ChartData;\n periodCount: number;\n isLoading?: boolean;\n};\n\nfunction KpiHeadersTop({ series, periodCount }: KpiHeadersProps) {\n return (\n <Table.Column align=\"center\" borders=\"lrb\" colSpan={periodCount}>\n {series.yColumn.label}\n </Table.Column>\n );\n}\n\nfunction KpiHeadersBottom({ series, isLoading, periodCount }: KpiHeadersProps) {\n return (\n <>\n {series.dataLabels.length > 0 ? (\n series.dataLabels.map((label, idx) => (\n <Table.Column\n align=\"center\"\n key={`sr_${idx}`}\n borders={`b${idx === 0 ? 'l' : idx === series.dataLabels.length - 1 ? 'r' : ''}`}\n >\n <HeaderLabel label={label} />\n </Table.Column>\n ))\n ) : (\n <Table.Column align=\"center\" colSpan={periodCount}>\n <Loading isActive={isLoading} withIndicator />\n </Table.Column>\n )}\n </>\n );\n}\n\ntype LabelProps = {\n label: string | string[];\n};\nfunction HeaderLabel({ label }: LabelProps) {\n if (Array.isArray(label)) {\n return (\n <>\n {label.map(l => (\n <span key={l} className=\"block nowrap\">\n {l}\n </span>\n ))}\n </>\n );\n }\n\n return <span className=\"block nowrap\">{label}</span>;\n}\n\ntype KpiCellsProps = {\n rowIndex: number | 'totals';\n series: ChartData;\n periodCount: number;\n};\nfunction KpiCells({ rowIndex, series, periodCount }: KpiCellsProps) {\n const seriesData = rowIndex === 'totals' ? series?.totalsDataSet : series?.dataSets?.[rowIndex];\n return (\n <>\n {Array(periodCount)\n .fill(null)\n .map((_, idx) => (\n <Table.Cell\n borders={`b${idx === 0 ? 'l' : idx === periodCount - 1 ? 'r' : ''}`}\n key={`row_${rowIndex}_${seriesData?.label}_${idx}`}\n >\n {seriesData?.values?.formatted[idx] || '-'}\n\n {seriesData && seriesData.changes && (\n <Cells.ValueChange value={seriesData.changes.formatted[idx]} raw={seriesData.changes.raw[idx]} />\n )}\n </Table.Cell>\n ))}\n </>\n );\n}\n\nexport { MultiKpiTable };\n","import React, { useState } from 'react';\nimport { actions, inputs } from '@ecosystem/newron-design-system';\nimport { Modal } from '../../design/modal/Modal';\nimport { DataStore } from '../../data/store';\nimport { BasicTrackingFn, Params } from '../../types';\nimport { UiDataParams } from '../../data';\nimport { trackPageElementClicked } from '../../analytics/utils';\nimport { validColumnsFilter } from './helper';\n\ntype KpiOption = {\n value: string;\n label: string;\n enrichment?: string;\n};\n\ntype Props = {\n onClose: () => void;\n paramName: string;\n currentKpis: string[];\n data: DataStore;\n updateSettings: (updates: Params) => void;\n maxCount: number;\n onRearrange?: (event: Event) => void;\n trackEvent?: BasicTrackingFn;\n};\nfunction CustomiseKpis({\n onClose,\n onRearrange,\n paramName,\n currentKpis,\n data,\n updateSettings,\n maxCount,\n trackEvent,\n}: Props) {\n const [selected, setSelected] = useState<string[]>(currentKpis);\n\n const options: KpiOption[] = data\n .getDataColumns()\n .filter(validColumnsFilter)\n .map(col => ({\n value: col.name,\n label: col.label,\n enrichment: col.enrichment,\n }));\n\n options.push(\n ...data\n .getAvailableColumns()\n .filter(validColumnsFilter)\n .map(col => ({\n value: col.name,\n label: col.label,\n enrichment: col.enrichment,\n }))\n );\n const selectedOptions: KpiOption[] = [];\n selected.forEach(value => {\n const option = options.find(opt => opt.value === value);\n if (option) {\n selectedOptions.push(option);\n }\n });\n\n const handleRearrange = event => {\n const newArray: string[] = [];\n const newIndexOrder = event.newIndexOrder;\n newIndexOrder.forEach((index: number) => {\n newArray.push(selected[index]);\n });\n setSelected(newArray);\n onRearrange?.(event);\n };\n\n const handleDelete = (index: number) => {\n const newSelected = [...selected];\n newSelected.splice(index, 1);\n setSelected(newSelected);\n };\n\n const handleAdd = () => {\n const toAdd = options.find(opt => !selected.includes(opt.value));\n if (toAdd) {\n const newSelected = [...selected];\n newSelected.push(toAdd.value);\n setSelected(newSelected);\n }\n };\n\n const handleChange = (index: number, value: string) => {\n const newSelected = [...selected];\n newSelected.splice(index, 1, value);\n setSelected(newSelected);\n };\n\n const handleClose = () => {\n onClose();\n trackPageElementClicked(trackEvent, 'Close custom KPIs');\n };\n\n const handleCancel = () => {\n onClose();\n trackPageElementClicked(trackEvent, 'Cancel custom KPIs');\n };\n\n const handleApply = () => {\n const columns: string[] = [];\n const labels: string[] = [];\n selected.forEach(name => {\n const option = options.find(opt => opt.value === name);\n if (option) {\n columns.push(option.value);\n labels.push(option.label);\n }\n });\n\n // filter out any undefined enrichments\n const enrichments = selectedOptions.map(opt => opt.enrichment).filter(Boolean);\n const uniqueEnrichments = [...new Set(enrichments)];\n\n const updates = {\n [paramName]: columns,\n [UiDataParams.uiEnrichments]: uniqueEnrichments,\n };\n updateSettings(updates);\n onClose();\n trackPageElementClicked(trackEvent, 'Add and save custom KPIs', { [paramName]: labels });\n };\n\n const hasChanged = currentKpis != selected;\n const hasMaxCount = maxCount > 0;\n\n const { Button, DragAndDrop } = actions;\n\n return (\n <Modal size=\"sm\" isOpen onClose={handleClose}>\n <Modal.Header>Customise KPIs</Modal.Header>\n <Modal.Body>\n <div className=\"relative\" style={{ minHeight: '496px' }}>\n {hasMaxCount && <div className=\"font-bold mb-2\">Add up to {maxCount} KPIs</div>}\n <div className=\"pb-6\">\n <DragAndDrop onChange={handleRearrange} onKeyDown={() => {}}>\n {selectedOptions.map((opt, idx) => (\n <div\n data-test-id={`${opt.value}_${idx}`}\n data-testid={`${opt.value}_${idx}`}\n key={`${opt.value}_${idx}`}\n className=\"pl-8 py-1\"\n >\n <KpiEntry\n option={opt}\n options={options}\n onDelete={selected.length > 1 ? () => handleDelete(idx) : undefined}\n onChange={value => handleChange(idx, value)}\n />\n </div>\n ))}\n </DragAndDrop>\n {(!hasMaxCount || selected.length < maxCount) && (\n <div className=\"mt-2\">\n <Button onClick={handleAdd}>Add</Button>\n </div>\n )}\n </div>\n </div>\n </Modal.Body>\n <Modal.Footer>\n <Button mode=\"secondary\" onClick={handleCancel} testId=\"modal-cancel-btn\">\n Cancel\n </Button>\n <Button disabled={!hasChanged} onClick={handleApply} testId=\"modal-apply-btn\">\n Save\n </Button>\n </Modal.Footer>\n </Modal>\n );\n}\n\ntype EntryProps = {\n option: KpiOption;\n onDelete?: () => void;\n onChange: (name: string) => void;\n options: KpiOption[];\n};\nfunction KpiEntry({ option, options, onDelete, onChange }: EntryProps) {\n const handleDelete = () => {\n if (onDelete) {\n onDelete();\n }\n };\n\n const handleChange = (value: string | string[] | null) => {\n if (typeof value !== 'string') {\n return;\n }\n onChange(value);\n };\n\n const { Select } = inputs;\n const { IconButton } = actions;\n return (\n <div className=\"relative flex items-center gap-2 mr-2\">\n <div className=\"flex-grow\">\n <Select options={options} value={option.value} onChange={handleChange} />\n </div>\n <IconButton testId={`${option.value}-delete-btn`} onClick={handleDelete} disabled={onDelete === undefined}>\n <IconButton.icons.RemoveOutline />\n </IconButton>\n </div>\n );\n}\n\nexport { CustomiseKpis };\n","import { DataVizType } from '../types';\nimport { actions, elements } from '@ecosystem/newron-design-system';\nimport React, { cloneElement } from 'react';\n\nconst { Icon } = elements;\nconst { ToggleButtons } = actions;\n\nconst iconMap: Record<DataVizType, JSX.Element> = {\n table: <Icon.icons.Table />,\n chart: <Icon.icons.BarChartVert />,\n horizontalBarChart: <Icon.icons.BarChartHoriz />,\n stackedBarChart: <Icon.icons.BarChartVert />,\n lineChart: <Icon.icons.LineChart />,\n verticalBarChart: <Icon.icons.BarChartVert />,\n bubbleChart: <Icon.icons.BubbleChart />,\n valueWithChangeChart: <Icon.icons.BarChartVert />,\n};\n\ntype Props = {\n options: DataVizType[];\n value: DataVizType;\n onChange: (value: DataVizType) => void;\n};\n\nfunction DataVizToggle({ options, value, onChange }: Props) {\n if (!options.length) {\n return null;\n }\n\n return (\n <ToggleButtons onChange={onChange} value={value}>\n {options.map(opt => (\n <ToggleButtons.Option key={opt} id={opt}>\n <Icon>{cloneElement(iconMap[opt])}</Icon>\n </ToggleButtons.Option>\n ))}\n </ToggleButtons>\n );\n}\n\nexport { DataVizToggle };\n","import { DataColumn, ExportFormat, ExportOptions, KpiWithChangeColumn } from '../../types';\nimport { ChartData } from '../data/common';\nimport { AvailableTemplate, ExcelExportDto, DataTable, ColumnType, DataCell } from '@ecosystem/export-api';\nimport { formatLabel, getExportContext, mapValueToDataCell } from '../../export';\nimport { Formatting } from '../../data/formatting';\n\n// This will hide from the first index the changes between two data labels\n// This is a useful feature to have because the period that the user is focusing on usually has no changes\nconst HIDE_DATA_LABEL_CHANGE = 1;\nconst getEmptyValuesArray = (data: ChartData): (number | null)[] => data.dataLabels.map(() => null);\n\nconst createWorksheetData = (chartData: ChartData[], xColumn: DataColumn, currency: string): DataTable => {\n const dataColumns = chartData.flatMap(data => {\n const yColumn = data.dataLabels.map(label => ({\n header: `${data.yColumn.label}\\n${formatLabel(label)}`,\n type: ColumnType.Text,\n }));\n\n const focusPeriod = data.dataLabels[0];\n\n //Can convert data.yColumn to KpiWithChange, but doesn't have changeLabel as a type, only changeName\n const yColumnWithChange = data.dataLabels\n .map(label => ({\n header: `${data.yColumn.label} change\\n${formatLabel(focusPeriod)} vs ${formatLabel(label)}`,\n type: ColumnType.Text,\n }))\n .splice(HIDE_DATA_LABEL_CHANGE);\n\n return [...yColumn, ...yColumnWithChange];\n });\n\n const totalDataRows = [\n { type: ColumnType.Text, value: 'Market' },\n ...chartData.flatMap(data => {\n const valuesSet = data.totalsDataSet?.values.raw.length\n ? data.totalsDataSet.values.raw\n : getEmptyValuesArray(data);\n const valuesDataSet = data.totalsDataSet\n ? valuesSet.map(value => mapValueToDataCell(value, data.yColumn.formatHint, data.yColumn.dataType))\n : [];\n\n const changesSet = data.totalsDataSet?.changes?.raw.length\n ? data.totalsDataSet?.changes?.raw\n : getEmptyValuesArray(data);\n const changesDataSet = data.totalsDataSet\n ? changesSet\n .map(change =>\n mapValueToDataCell(change, (data.yColumn as KpiWithChangeColumn).changeFormatHint, data.yColumn.dataType)\n )\n .splice(HIDE_DATA_LABEL_CHANGE)\n : [];\n\n return [...valuesDataSet, ...changesDataSet];\n }),\n ];\n\n const columnLabels = chartData[0].dataSets.map(set => ({ type: ColumnType.Text, value: set.label }));\n\n //Explicity set value: number | string for column label\n const rowsPerKpi: DataCell[][][] = chartData.map(data =>\n data.dataSets.map(set => {\n const valuesSet = set.values?.raw.length ? set.values.raw : getEmptyValuesArray(data);\n const values = valuesSet.map(value => mapValueToDataCell(value, data.yColumn.formatHint, data.yColumn.dataType));\n\n const changesSet = set.changes?.raw.length ? set.changes.raw : getEmptyValuesArray(data);\n const changes = changesSet\n .map(change =>\n mapValueToDataCell(change, (data.yColumn as KpiWithChangeColumn).changeFormatHint, data.yColumn.dataType)\n )\n .splice(HIDE_DATA_LABEL_CHANGE);\n\n return [...values, ...changes];\n })\n );\n\n const multiKpi = (rowsPerKpi: DataCell[][][]) => {\n return columnLabels.map((label, index) => {\n return [label, ...rowsPerKpi.flatMap(row => row[index])];\n });\n };\n\n const singleKpi = (rowsPerKpi: DataCell[][]) => rowsPerKpi.map((row, index) => [columnLabels[index], ...row]);\n\n //Combines rows from an KPI into one row\n const dataRows = rowsPerKpi.length === 1 ? singleKpi(rowsPerKpi[0]) : multiKpi(rowsPerKpi);\n\n return {\n currencySymbol: Formatting.getCurrencySymbol(currency) || currency,\n dataColumns: [{ type: ColumnType.Text, header: xColumn.label }, ...dataColumns],\n dataRows: dataRows,\n columnWidths: [\n { columnNumber: 1, width: 20 },\n ...dataColumns.map((_, index: number) => ({ columnNumber: index + 2, width: 20 })),\n ],\n summaryRows: [totalDataRows],\n };\n};\n\nexport const chartDataToExportData = (\n exportFormat: ExportFormat,\n { fileHeaderSettings, fileName }: ExportOptions,\n chartData: ChartData[],\n xColumn: DataColumn,\n currency: string\n): ExcelExportDto => {\n switch (exportFormat) {\n case ExportFormat.Xlsx:\n return {\n template: AvailableTemplate.Excel,\n name: fileName,\n worksheets: [\n {\n context: getExportContext(fileHeaderSettings),\n worksheetName: 'scorecard',\n data: createWorksheetData(chartData, xColumn, currency),\n },\n ],\n };\n\n default:\n }\n};\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./ExportHideout.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./ExportHideout.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, { ReactNode } from 'react';\nimport './ExportHideout.css';\ntype Props = {\n children: ReactNode;\n};\n/**\n * The hideout renders children in an invisible way (h-0 w-0)\n * on the area big enough (2000x1000 px, can be increased if necessary) to not cause scrollbar on the content.\n * It is used to make a DOM snapshot for the ppt export that would include the whole content\n */\nfunction ExportHideout({ children }: Props) {\n return (\n <div className=\"export-hideout h-0 w-0 overflow-hidden\">\n <div className=\"export-canvas w-screen\">\n <div className=\"export-canvas-wrapper w-fit h-fit\">{children}</div>\n </div>\n </div>\n );\n}\n\nexport { ExportHideout };\n","export const splitIntoChunks = <T>(arr: T[], chunkSize: number): Array<Array<T>> => {\n const chunks = [];\n for (let i = 0; i < arr.length; i += chunkSize) {\n chunks.push(arr.slice(i, i + chunkSize));\n }\n return chunks;\n};\n","import { useCallback, useEffect, useState } from 'react';\nimport { EventName, Params, TrackingElementType } from '../types';\nimport { useAnalyticsContext } from './analytics.provider';\nimport { mapDataVizForChartType } from './utils';\n\n/**\n * chartName is only used when isCollection is truthy as it will only used on collection page\n */\nexport const useTrackChartTooltipEvent = (componentSettings: Params, isCollection?: boolean, chartName?: string) => {\n const [trackTooltip, setTrackTooltip] = useState<boolean>(false);\n const [chartTooltipTracked, setChartTooltipTracked] = useState<boolean>(false);\n const { trackPageEvent } = useAnalyticsContext();\n\n const trackChartEvent = useCallback(() => {\n const collectionProps = isCollection && {\n section: 'Collections',\n subsection: 'Collections Details',\n pageName: 'Collections Details',\n };\n\n const dataVizValue = componentSettings.dataViz?.[0];\n const chartType = mapDataVizForChartType(dataVizValue);\n\n trackPageEvent &&\n trackPageEvent(EventName.ChartInteractions, {\n elementType: TrackingElementType.Tooltip,\n elementName: 'Chart hover',\n chartType,\n elementKPI: componentSettings.scKpis,\n ...(isCollection && chartName && { chartName }),\n ...collectionProps,\n });\n }, [chartName, componentSettings, isCollection, trackPageEvent]);\n\n useEffect(() => {\n if (chartTooltipTracked) {\n return;\n }\n if (trackTooltip) {\n trackChartEvent();\n setChartTooltipTracked(true);\n }\n }, [trackChartEvent, trackTooltip, chartTooltipTracked]);\n\n useEffect(() => {\n setChartTooltipTracked(false);\n setTrackTooltip(false);\n }, [componentSettings]);\n\n const trackTooltipEvent = () => {\n setTrackTooltip(true);\n };\n\n return { trackTooltipEvent };\n};\n","import { hasFeatureTag } from '../../tools/featureToggle/utils';\nimport { PageSettingsManager } from '../settings';\n\nexport const shouldDisableGroupAnalyticsSharing = () => {\n const pageSettings = PageSettingsManager.getInstance().get();\n const shareGroupedAnalytics = hasFeatureTag('m2-share-grouped-analytics');\n const groups = pageSettings?.__page__.lbGroups || pageSettings?.__page__.plGroups || [];\n const groupNames = groups.map(group => group.split('|')[0]) || [];\n const isGroupChosen = pageSettings?.__page__.ids?.some(id => groupNames.includes(id));\n return isGroupChosen && !shareGroupedAnalytics;\n};\n","import { ContextManager } from '../context/manager';\nimport { PageSettingsManager } from '../page/settings';\nimport { SavedViewVersion } from './useSavedView';\n\nexport const createViewStateFn = () => {\n const contextManager = ContextManager.getInstance();\n const context = contextManager.get();\n\n const filterValues = context.filters?.values || {};\n const settingValues = context.settings?.values;\n const pageSettings = PageSettingsManager.getInstance().get();\n\n return {\n version: SavedViewVersion.v1,\n filterValues,\n settingValues,\n pageSettings,\n };\n};\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { actions } from '@ecosystem/newron-design-system';\nimport { AddInsightToCollectionsButton } from '@ecosystem/newron-client-collections';\nimport { ExcelExportDto, PowerpointExportDto } from '@ecosystem/export-api';\n\nimport { Loading } from '../../design/loading/Loading';\nimport {\n DataColumn,\n DataVizType,\n ExportFormat,\n ExportOptions,\n DataWarning,\n CollectionOptions,\n EventElementCategory,\n} from '../../types';\nimport { ChartData } from '../data/common';\nimport { DataContentProps } from '../../content/types';\nimport { makeMultiKpiData } from './data';\nimport { MultiKpiChart } from './multiKpi.chart';\nimport { MultiKpiTable } from './multiKpi.table';\nimport { Instructions } from '../../content/instructions';\nimport { CustomiseKpis } from './customise';\nimport { DataVizToggle } from '../../components/dataviz.toggle';\nimport { chartDataToExportData } from './chartDataToExportData';\nimport { ExportButton } from '../../export/export.button';\nimport { useCorePageState } from '../../page/provider';\nimport { chartToPptData } from '../../export';\nimport { ExportHideout } from '../../export/ExportHideout';\nimport { WarningsDisplay } from '../../design/warning/warningsDisplay';\nimport { splitIntoChunks } from '../../tools/arrays';\nimport { InsightCollectionDataType, InsightData } from '../../content/collection/types';\nimport { useOnCollectionExportReady } from '../collection/useOnCollectionExportReady';\nimport { useTrackChartTooltipEvent } from '../../analytics/trackChartInteractions.hook';\nimport { mapDataVizForChartType, trackPageElementClicked } from '../../analytics/utils';\nimport GenericWarnings from '../../design/warning/GenericWarnings';\nimport { shouldDisableGroupAnalyticsSharing } from '../../page/heading/utils';\nimport { createViewStateFn } from '../../tools/createViewState';\n\nconst { Button } = actions;\n\nfunction MultiKpi({\n data,\n isLoading,\n isEnrichmentLoading,\n enrichmentError,\n instructions = {},\n componentSettings,\n componentMetadata: componentMetaData,\n ComponentActionsContainer,\n collection,\n paramsForData,\n paramsForContext,\n trackEvent,\n updateSettings,\n componentHeadingTitle,\n proposition,\n}: DataContentProps) {\n const [showEdit, setShowEdit] = useState<boolean>(false);\n const [dataStamp, setDataStamp] = useState<number>();\n const [chartData, setChartData] = useState<ChartData[] | undefined>();\n const [warnings, setWarnings] = useState<DataWarning[]>();\n const [currency, setCurrency] = useState<string>();\n const [exportModalOpen, setExportModalOpen] = useState(false);\n const chartSliceRefs = useRef<HTMLDivElement[]>([]);\n const { dsl, page, context, data: dataInfo, collection: collectionInfo, globalWarnings } = useCorePageState();\n\n const allColumns = data?.getAllColumns() ?? [];\n const isMultiKpiLoading = isLoading || isEnrichmentLoading;\n\n useOnCollectionExportReady({\n collection,\n dsl,\n chartSliceRefs,\n componentSettings,\n allColumns,\n componentHeadingTitle,\n isDataLoading: isMultiKpiLoading,\n });\n\n const myInstructions = new Instructions(instructions, componentSettings);\n\n const xColumnName = myInstructions.getString('xColumn');\n const selectedKpis = myInstructions.getStringList('kpis');\n const maxKpis = myInstructions.getNumber('maxKpis', 0);\n const kpisParamName = myInstructions.isFromSettings('kpis') ? myInstructions.getSettingsName('kpis') : undefined;\n const exportOptions = myInstructions.getObject('export') as ExportOptions;\n const collectionOptions = myInstructions.getObject('collection') as CollectionOptions;\n\n const displayAs = componentSettings.dataViz?.length\n ? (componentSettings.dataViz[0] as DataVizType)\n : DataVizType.chart;\n const canEditKpis = kpisParamName !== undefined;\n const dataColumns: DataColumn[] = data ? [...data.getDataColumns(), ...data.getAvailableColumns()] : [];\n\n const xColumn = dataColumns.find(col => col.name === xColumnName);\n\n const { trackTooltipEvent } = useTrackChartTooltipEvent(\n componentSettings,\n !!collection,\n collectionOptions?.chartName\n );\n\n const disableCollectionButton = shouldDisableGroupAnalyticsSharing();\n\n const updateData = () => {\n if (!data) {\n return;\n }\n const dataWarnings = data.getDataWarnings(selectedKpis);\n\n const selectedKpiColumns = selectedKpis\n .map(kpi => {\n return dataColumns.find(col => col.name === kpi);\n })\n .filter(column => !!column);\n\n const chartData = makeMultiKpiData(data, {\n kpis: selectedKpis,\n requestedColumns: selectedKpiColumns,\n xColumnName,\n dataWarnings,\n });\n\n if (chartData) {\n setWarnings(dataWarnings);\n setChartData(chartData);\n setCurrency(data.getCurrency());\n setDataStamp(data.stamp);\n }\n };\n\n const handleDataVizChange = useCallback(\n (value: DataVizType) => {\n updateSettings({\n ...componentSettings,\n dataViz: [value],\n });\n trackPageElementClicked(trackEvent, mapDataVizForChartType(value), {\n elementCategory: mapDataVizForChartType(value) as EventElementCategory,\n });\n },\n [componentSettings, updateSettings, trackEvent]\n );\n\n if (!componentSettings.dataViz?.length) {\n updateSettings({\n ...componentSettings,\n dataViz: [displayAs],\n });\n }\n\n const handleEditClick = () => {\n setShowEdit(true);\n trackPageElementClicked(trackEvent, 'Click custom KPIs button');\n };\n\n /* eslint-disable react-hooks/exhaustive-deps */\n useEffect(() => {\n if (!data || data.stamp === dataStamp) {\n return;\n }\n updateData();\n }, [data]);\n\n /* eslint-disable react-hooks/exhaustive-deps */\n useEffect(() => {\n updateData();\n }, [selectedKpis]);\n\n useEffect(() => {\n if (!exportModalOpen) {\n chartSliceRefs.current = [];\n }\n }, [exportModalOpen]);\n\n useEffect(() => {\n if (data) {\n collection?.onLoaded();\n }\n }, [data]);\n\n if (!data) {\n return null;\n }\n\n const getExportData = async (exportFormat: ExportFormat): Promise<PowerpointExportDto | ExcelExportDto> => {\n switch (exportFormat) {\n case ExportFormat.Xlsx:\n return chartDataToExportData(exportFormat, exportOptions, chartData, xColumn, currency);\n\n case ExportFormat.Pptx:\n return await chartToPptData(\n exportOptions,\n dsl,\n '',\n chartSliceRefs.current,\n componentSettings,\n allColumns,\n componentHeadingTitle\n );\n\n default:\n break;\n }\n };\n\n const warningsToBeDisplayedOnTop =\n displayAs !== 'table' ? getWarningsBelongingOnTopOfChart(warnings, chartData) : warnings;\n const warningSettings = { appendKpis: true };\n\n const calculatePeriodCount = (): number => {\n const periodCount = data?.getGroupedSets().find(set => !!set.data)?.type.timeFrame.periods.length;\n return periodCount || 0;\n };\n\n return (\n <>\n {<WarningsDisplay warnings={warningsToBeDisplayedOnTop} settings={warningSettings} />}\n {chartData && ComponentActionsContainer && (\n <ComponentActionsContainer>\n {collectionOptions && collectionInfo && (\n <AddInsightToCollectionsButton<InsightData, {}>\n type={collectionOptions.collectionKey}\n selectDataType\n proposition={proposition}\n disabled={isMultiKpiLoading || disableCollectionButton}\n createInsightDataFn={(dataType: InsightCollectionDataType) => ({\n content: {\n type: collectionOptions.type,\n dataOptions: collectionOptions.dataOptions,\n },\n proposition: proposition,\n paramsForData,\n paramsForContext,\n dataType,\n corePageSettings: { context, data: dataInfo, page, collection: collectionInfo },\n componentSettings,\n })}\n createViewStateFn={createViewStateFn}\n />\n )}\n {exportOptions && (\n <ExportButton\n trackingSourceData={data}\n componentSettings={componentSettings}\n componentMetadata={componentMetaData}\n disabled={isMultiKpiLoading}\n exportFormats={[ExportFormat.Xlsx, ExportFormat.Pptx]}\n getExportData={getExportData}\n exportContentRef={chartSliceRefs}\n onModalVisibilityChange={isVisible => setExportModalOpen(isVisible)}\n trackEvent={trackEvent}\n />\n )}\n {canEditKpis && (\n <Button\n disabled={isMultiKpiLoading}\n onClick={handleEditClick}\n mode=\"secondary\"\n label=\"select\"\n testId=\"edit-kpi-btn\"\n >\n <Button.Icon>\n <Button.Icon.icons.Option />\n </Button.Icon>\n </Button>\n )}\n <DataVizToggle\n options={[DataVizType.chart, DataVizType.table]}\n value={displayAs}\n onChange={handleDataVizChange}\n />\n </ComponentActionsContainer>\n )}\n <div className=\"multi-kpi relative pt-4 w-full max-w-full\">\n <Loading isActive={isLoading} />\n {displayAs === 'table' && chartData && (\n <>\n <MultiKpiTable\n isEnrichmentLoading={isEnrichmentLoading}\n periodCount={calculatePeriodCount()}\n data={chartData}\n xColumn={xColumn}\n />\n {(collection || exportModalOpen) && (\n <>\n {splitIntoChunks<ChartData>(chartData, 5).map((chartDataSlice, idx) => (\n <ExportHideout key={idx}>\n <div ref={element => (chartSliceRefs.current[idx] = element)}>\n {globalWarnings && <GenericWarnings warnings={globalWarnings} />}\n {<WarningsDisplay warnings={warningsToBeDisplayedOnTop} settings={warningSettings} />}\n <MultiKpiTable\n isEnrichmentLoading={isEnrichmentLoading}\n periodCount={calculatePeriodCount()}\n data={chartDataSlice}\n xColumn={xColumn}\n />\n </div>\n </ExportHideout>\n ))}\n </>\n )}\n </>\n )}\n {displayAs !== 'table' && chartData && (\n <>\n <MultiKpiChart\n isEnrichmentLoading={isEnrichmentLoading}\n isLoading={isLoading}\n data={chartData}\n currency={currency}\n enrichmentError={enrichmentError}\n trackTooltipEvent={trackTooltipEvent}\n />\n {(collection || exportModalOpen) && (\n <>\n {splitIntoChunks<ChartData>(chartData, 5).map((chartDataSlice, idx) => (\n <ExportHideout key={idx}>\n <div ref={element => (chartSliceRefs.current[idx] = element)}>\n {globalWarnings && <GenericWarnings warnings={globalWarnings} />}\n {<WarningsDisplay warnings={warningsToBeDisplayedOnTop} settings={warningSettings} />}\n <MultiKpiChart data={chartDataSlice} currency={currency} trackTooltipEvent={trackTooltipEvent} />\n </div>\n </ExportHideout>\n ))}\n </>\n )}\n </>\n )}\n\n {chartData && showEdit && (\n <CustomiseKpis\n onClose={() => setShowEdit(false)}\n currentKpis={selectedKpis}\n data={data}\n maxCount={maxKpis}\n paramName={kpisParamName}\n updateSettings={updateSettings}\n trackEvent={trackEvent}\n />\n )}\n </div>\n </>\n );\n}\n\n/*\n * Get warnings that belong on top of the chart\n * @param warnings - warnings to filter\n * @param chartData - chart data to check if warnings are relevant\n * @returns warnings that belong on top of the chart\n * */\nconst getWarningsBelongingOnTopOfChart = (warnings: DataWarning[] = [], chartData: ChartData[]) => {\n return warnings.filter(([, { kpis }]) => {\n const warningKpisHaveData =\n kpis.length === 0 || kpis.some(({ name }) => chartData.find(chart => chart.yColumn.name === name)?.hasData);\n return warningKpisHaveData;\n });\n};\n\nexport { MultiKpi };\n","import { DataStore } from '../../data/store';\nimport { DataColumn, DataWarning } from '../../types';\nimport { createChartData } from '../data/chartData';\nimport { ChartData, ColorHelper } from '../data/common';\nimport { validColumnsFilter } from './helper';\n\nexport function makeMultiKpiData(\n data: DataStore,\n options: {\n kpis: string[];\n xColumnName: string;\n dataWarnings: DataWarning[];\n requestedColumns: DataColumn[];\n }\n): ChartData[] | undefined {\n const { kpis, xColumnName, requestedColumns } = options;\n\n if (!data) {\n return;\n }\n\n const columns = data.getDataColumns();\n\n const xData = data.getGroupedData([xColumnName])[0];\n const totalsData = data.getGroupedData([])[0];\n const currency = data.getCurrency();\n const fieldWarnings = data.getDataWarnings(kpis);\n\n if (!xData || !totalsData) {\n return;\n }\n\n const colorHelper = new ColorHelper(\n xColumnName,\n xData.data.map(r => String(r.values[xColumnName]))\n );\n\n const datas: ChartData[] = [];\n\n // make sure we have valid columns only (sync functionality can add invalid columns)\n const kpiColumns = requestedColumns.filter(validColumnsFilter);\n\n kpiColumns.forEach(column => {\n const kpiData = createChartData(\n { rows: xData.data, columns, totals: totalsData.data[0], fieldWarnings },\n {\n yColumnName: column.name,\n xColumnName,\n currency,\n includeTotals: true,\n setPerRow: true,\n colorHelper,\n }\n );\n if (kpiData) {\n kpiData.dataLabels = xData.timeFrame.periods.map(v => (Array.isArray(v.name) ? v.name : v.name.split(' ')));\n datas.push(kpiData);\n } else {\n datas.push({\n yColumn: column,\n dataLabels: [],\n } as ChartData);\n }\n });\n\n return datas.length > 0 ? datas : undefined;\n}\n","import { getIdentifiers } from '../../data/helpers';\nimport { DataStore } from '../../data/store';\nimport { ChartColors, DataSet } from '../../design/charts';\nimport {\n ColumnRelationship,\n ColumnType,\n DataColumn,\n DataRow,\n DataType,\n FormatHint,\n IdentifierColumn,\n KpiWithChangeColumn,\n} from '../../types';\nimport { ColorHelper, formatDataSets, makeDataSet, MarketKpi } from '../data/common';\n\nexport type SegmentDataSet = {\n label: string;\n dataSets: DataSet[];\n totals?: DataSet;\n additionalTotals?: DataSet;\n};\n\nexport type SegmentedChartData = {\n yLabel: string;\n yType: DataType;\n xLabel: string;\n maxYRange: number;\n segmentDataSets: SegmentDataSet[];\n dataLabels: (string | string[])[];\n totalsLabel?: string;\n totalsChangeLabel?: string;\n additionalTotalsLabel?: string;\n additionalTotalsChangeLabel?: string;\n};\n\nconst ADDITIONAL_KPI_MAP = {\n [MarketKpi.Revenue]: MarketKpi.ShareRevenue,\n [MarketKpi.Units]: MarketKpi.ShareUnits,\n [MarketKpi.ShareRevenue]: MarketKpi.Revenue,\n [MarketKpi.ShareUnits]: MarketKpi.Units,\n [MarketKpi.PriceIndex]: MarketKpi.AveragePrice,\n};\n\nexport function makeSegmentedChartData(\n data: DataStore,\n options: {\n xColumnName: string;\n yColumnName: string;\n segmentName: string;\n }\n): SegmentedChartData | undefined {\n const { xColumnName, yColumnName, segmentName } = options;\n const columns = data.getDataColumns();\n\n const xColumn = columns.find(col => col.name === xColumnName);\n const yColumn = columns.find(col => col.name === yColumnName);\n const withChange = (yColumn as KpiWithChangeColumn)?.changeName !== undefined;\n const segmentColumn = columns.find(col => col.name === segmentName);\n\n const additionalKPI = ADDITIONAL_KPI_MAP[yColumnName];\n const additionalYColumn = columns.find(col => col.name === additionalKPI);\n\n if ([xColumn, yColumn, segmentColumn].some(col => col === undefined)) {\n return;\n }\n\n let xDescColumn: DataColumn = xColumn;\n let segmentDescColumn: DataColumn = segmentColumn;\n if (xColumn.type !== ColumnType.Identifier) {\n const descCol = columns.find(\n col => col.relatedTo === xColumnName && col.relationship === ColumnRelationship.Description\n );\n xDescColumn = descCol || xColumn;\n }\n\n if (segmentColumn.type !== ColumnType.Identifier) {\n const descCol = columns.find(\n col => col.relatedTo === segmentName && col.relationship === ColumnRelationship.Description\n );\n segmentDescColumn = descCol || segmentColumn;\n }\n\n const totalsData = data.getGroupedData([])[0];\n const xData = data.getGroupedData([xColumnName])[0];\n const segmentData = data.getGroupedData([segmentName])[0];\n const segmentedData = data.getGroupedData([segmentName, xColumnName])[0];\n\n const colorHelper = new ColorHelper(\n xColumnName,\n xData.data.map(row => String(row.values[xColumnName]))\n );\n\n const summaryDataSet: SegmentDataSet = {\n label: 'Totals',\n dataSets: xData.data.map((row, index) => {\n const set = makeDataSet(row, {\n xColumn,\n yColumn,\n withChange,\n index,\n colorHelper,\n });\n set.label = getRowLabel(row, xDescColumn);\n return set;\n }),\n };\n\n const segmentValues: string[] = [];\n const segmentLabels: string[] = [];\n segmentData.data.forEach(row => {\n segmentValues.push(String(row.values[segmentName]));\n segmentLabels.push(getRowLabel(row, segmentDescColumn));\n });\n\n const segmentDataSets: SegmentDataSet[] = [];\n const segmentSums: number[] = [];\n const segmentMaxValue: number[] = [];\n segmentValues.forEach((segment, sIdx) => {\n const segmentDataSet: SegmentDataSet = {\n label: segmentLabels[sIdx],\n dataSets: [],\n };\n\n segmentSums.push(0);\n const sums: number[] = [];\n let maxSegmentValue = 0;\n\n xData.data.forEach((row, rIdx) => {\n const xRowName = String(row.values[xColumnName]);\n const segmentRowForX = segmentedData.data.find(\n r => String(r.values[segmentName]) === segment && String(r.values[xColumnName]) === xRowName\n );\n\n if (segmentRowForX) {\n const dataSet = makeDataSet(segmentRowForX, {\n xColumn,\n yColumn,\n withChange,\n index: rIdx,\n colorHelper,\n });\n dataSet.label = getRowLabel(row, xDescColumn);\n segmentDataSet.dataSets.push(dataSet);\n dataSet.values.raw.forEach((rawValue, rawIdx) => {\n sums[rawIdx] = sums[rawIdx] ? sums[rawIdx] + rawValue : rawValue;\n });\n maxSegmentValue = Math.max(maxSegmentValue, ...dataSet.values.raw);\n }\n });\n segmentDataSets.push(segmentDataSet);\n segmentSums[sIdx] = Math.max(...sums);\n segmentMaxValue[sIdx] = maxSegmentValue;\n });\n\n const includeTotals = !!totalsData;\n\n if (includeTotals) {\n summaryDataSet.totals = makeDataSet(totalsData.data[0], {\n xColumn,\n yColumn,\n index: 0,\n colorHelper,\n withChange,\n bgColor: ChartColors.panelBg,\n });\n\n if (additionalYColumn) {\n summaryDataSet.additionalTotals = makeDataSet(totalsData.data[0], {\n xColumn,\n yColumn: additionalYColumn,\n index: 0,\n colorHelper,\n withChange,\n bgColor: ChartColors.panelBg,\n });\n }\n segmentValues.forEach((segment, sIdx) => {\n const segmentRow = segmentData.data.find(row => String(row.values[segmentName]) === segment);\n segmentDataSets[sIdx].totals = makeDataSet(segmentRow, {\n xColumn,\n yColumn,\n index: 0,\n colorHelper,\n withChange,\n bgColor: ChartColors.panelBg,\n });\n\n if (additionalYColumn) {\n segmentDataSets[sIdx].additionalTotals = makeDataSet(segmentRow, {\n xColumn,\n yColumn: additionalYColumn,\n index: 0,\n colorHelper,\n withChange,\n bgColor: ChartColors.panelBg,\n });\n }\n });\n }\n\n formatSegmentDataSets(segmentDataSets, summaryDataSet, {\n yColumn,\n additionalYColumn,\n currency: data.getCurrency(),\n includeTotals,\n });\n\n const maxYRange = yColumn.canAggregate ? Math.max(...segmentSums) : Math.max(...segmentMaxValue);\n\n return {\n yLabel: yColumn.label,\n yType: yColumn.dataType,\n xLabel: xColumn.label,\n segmentDataSets: [summaryDataSet, ...segmentDataSets],\n maxYRange: yColumn.formatHint === FormatHint.Percentage ? 1 : maxYRange,\n dataLabels: xData.timeFrame.periods.map(p => (typeof p.name === 'string' ? p.name.split(' ') : p.name)),\n totalsLabel: includeTotals && yColumn.name !== MarketKpi.PriceIndex ? `Market ${yColumn.label}` : undefined,\n totalsChangeLabel: includeTotals && yColumn.name !== MarketKpi.PriceIndex ? 'Change' : undefined,\n additionalTotalsLabel: includeTotals && additionalYColumn ? `Market ${additionalYColumn.label}` : undefined,\n additionalTotalsChangeLabel: includeTotals && additionalYColumn ? 'Change' : undefined,\n };\n}\n\nfunction formatSegmentDataSets(\n segmentDataSets: SegmentDataSet[],\n summaryDataSet: SegmentDataSet,\n options: {\n yColumn: DataColumn;\n additionalYColumn: DataColumn;\n currency: string;\n includeTotals: boolean;\n }\n) {\n const { yColumn, additionalYColumn, currency, includeTotals } = options;\n\n formatDataSets(\n segmentDataSets.flatMap(s => s.dataSets),\n { yColumn, currency }\n );\n\n formatDataSets(summaryDataSet.dataSets, {\n yColumn,\n currency,\n });\n\n if (includeTotals) {\n formatDataSets(\n segmentDataSets.map(s => s.totals),\n {\n yColumn,\n currency,\n }\n );\n formatDataSets([summaryDataSet.totals], {\n yColumn,\n currency,\n });\n if (additionalYColumn) {\n formatDataSets(\n segmentDataSets.map(s => s.additionalTotals),\n {\n yColumn: additionalYColumn,\n currency,\n }\n );\n formatDataSets([summaryDataSet.additionalTotals], {\n yColumn: additionalYColumn,\n currency,\n });\n }\n }\n}\n\nfunction getRowLabel(row: DataRow, column: DataColumn): string {\n if (column.type === ColumnType.Identifier) {\n return labelToString(getIdentifiers(column as IdentifierColumn, row).name);\n }\n return labelToString(String(row.values[column.name]));\n}\n\nexport function getDataPeriodCount(chartData: SegmentedChartData): number {\n return chartData.dataLabels.length;\n}\n\nexport function labelToString(label: string | string[]): string {\n return Array.isArray(label) ? label.join(' ').split('|')[0] : label.split('|')[0];\n}\n\nfunction checkSetHasChanges(set: DataSet): boolean {\n return set.changes !== undefined;\n}\n\nexport function checkChartDataHasChanges(chartData: SegmentedChartData): boolean {\n return chartData.segmentDataSets.some(segmentDataSet => segmentDataSet.dataSets.some(set => checkSetHasChanges(set)));\n}\n","import React, { ForwardedRef } from 'react';\nimport { feedback } from '@ecosystem/newron-design-system';\nimport { SegmentedChartData } from './data';\nimport { DataColumn, FormatHint } from '../../types';\nimport { Legend } from '../../design/charts/legend';\nimport { SlopeChart, SlopeChartOptions, StackedBarChart } from '../../design/charts';\nimport { formatScaleValue, formatTooltipValue } from '../data/common';\nimport { LabelPosition } from '../../design/charts/stackedBarChart';\n\ntype SegmentEntry = {\n Chart: JSX.Element;\n title: string;\n};\n\ntype Props = {\n chartData: SegmentedChartData;\n yColumn: DataColumn;\n currency: string;\n trackTooltipEvent: () => void;\n};\n\nconst { Tooltip } = feedback;\n\nconst SegmentationChart = React.forwardRef<HTMLDivElement, Props>(\n ({ chartData, yColumn, currency, trackTooltipEvent }: Props, ref: ForwardedRef<HTMLDivElement>) => {\n const { segmentDataSets, maxYRange, dataLabels } = chartData;\n let info;\n let segmentEntries: SegmentEntry[] = [];\n if (yColumn.canAggregate) {\n segmentEntries = segmentDataSets.map((set, index) => {\n const options = {\n yScale: {\n stacked: true,\n formatter: value => formatScaleValue(value, { yColumn }),\n useMax: index !== 0 ? maxYRange : undefined,\n },\n tooltip: {\n valueFormatter: value => formatTooltipValue(value, { yColumn, currency }),\n },\n data: {\n labels: dataLabels,\n sets: set.dataSets,\n summary: set.totals,\n additionalSummary: set.additionalTotals,\n },\n };\n const entry: SegmentEntry = {\n title: set.label,\n Chart: <StackedBarChart options={options} trackTooltipEvent={trackTooltipEvent} />,\n };\n return entry;\n });\n } else {\n segmentEntries = segmentDataSets.map((set, index) => {\n const options: SlopeChartOptions = {\n yScale: {\n formatter: value => formatScaleValue(value, { yColumn }),\n useMax: index !== 0 ? maxYRange : undefined,\n },\n tooltip: {\n valueFormatter: value => formatTooltipValue(value, { yColumn, currency }),\n },\n data: {\n labels: dataLabels,\n sets: set.dataSets,\n summary: set.totals,\n additionalSummary: set.additionalTotals,\n },\n };\n\n const entry: SegmentEntry = {\n title: set.label,\n Chart: <SlopeChart options={options} trackTooltipEvent={trackTooltipEvent} />,\n };\n return entry;\n });\n }\n\n info = {\n summaryEntry: segmentEntries[0],\n segmentEntries: segmentEntries.slice(1),\n chartData,\n };\n\n return (\n <div ref={ref} className=\"w-full flex flex-rows gap-2\" style={{ height: '500px' }}>\n {info && (\n <Legend\n css=\"pt-10\"\n data={info.chartData.segmentDataSets[0].dataSets}\n totalsLabel={info.chartData.totalsLabel}\n totalsChangeLabel={info.chartData.totalsChangeLabel}\n additionalTotalsLabel={info.chartData.additionalTotalsLabel}\n additionalTotalsChangeLabel={info.chartData.additionalTotalsChangeLabel}\n additionalLabelPosition={\n [FormatHint.Percentage, FormatHint.Index].includes(yColumn.formatHint)\n ? LabelPosition.TOP\n : LabelPosition.BOTTOM\n }\n />\n )}\n <>\n {info && <SegmentChart entry={info.summaryEntry} isSummary />}\n {info && (\n <div className=\"relative flex-grow flex items-stretch overflow-x-auto\">\n {info.segmentEntries.map((entry, idx) => (\n <SegmentChart key={`segment_${idx}`} entry={entry} />\n ))}\n </div>\n )}\n </>\n {/* {isEmptyData && <EmptyState height=\"100%\" />} */}\n </div>\n );\n }\n);\n\ntype SegmentChartProps = {\n entry: SegmentEntry;\n isSummary?: boolean;\n};\nfunction SegmentChart({ entry, isSummary }: SegmentChartProps) {\n const { title, Chart } = entry;\n const isLongLabel = title.length > 30;\n return (\n <div\n className={`chart-container relative flex flex-column h-full items-center pb-6 ${\n isSummary ? 'border-r border-light pr-4' : ''\n }`}\n >\n <Tooltip placement=\"top\">\n <div className={`${isSummary && 'px-8'} ${isLongLabel && 'truncate'} text-center text-sm h-10 max-w-44 mx-1`}>\n {title}\n </div>\n {isLongLabel && <Tooltip.Content>{title}</Tooltip.Content>}\n </Tooltip>\n <div className=\"flex-grow\">{Chart}</div>\n </div>\n );\n}\n\nexport { SegmentationChart };\n","import React, { forwardRef, useState } from 'react';\nimport { actions } from '@ecosystem/newron-design-system';\nimport { Cells, Table } from '../../design/table2';\nimport { DataColumn } from '../../types';\nimport { SegmentDataSet, SegmentedChartData, getDataPeriodCount } from './data';\n\ntype Props = {\n data: SegmentedChartData;\n xColumn: DataColumn;\n};\nconst SegmentationTable = forwardRef<HTMLDivElement, Props>(({ data, xColumn }, ref) => {\n const [rowsToDisplay, setRowsToDisplay] = useState<number>(100);\n\n const firstData = data.segmentDataSets[0];\n const rowCount = firstData.dataSets.length;\n const includeTotals = firstData.dataSets !== undefined;\n\n const handleLoadMore = () => {\n const newAmount = rowsToDisplay + 100;\n if (newAmount > rowCount) {\n setRowsToDisplay(rowCount);\n } else {\n setRowsToDisplay(newAmount);\n }\n };\n\n const colSpan = data.segmentDataSets.length * data.dataLabels.length;\n\n const PERIOD_COUNT = getDataPeriodCount(data);\n\n const { Button } = actions;\n\n return (\n <div ref={ref} className=\"relative w-full\">\n <Table>\n <Table.Header withRows={false}>\n <tr>\n <Table.Column colSpan={1}> </Table.Column>\n <Table.Column align=\"center\" borders=\"lrb\" colSpan={colSpan}>\n {data.yLabel}\n </Table.Column>\n </tr>\n <tr>\n <Table.Column rowSpan={2}>{xColumn.label}</Table.Column>\n {data.segmentDataSets.map((set, idx) => (\n <SegmentationHeadersTop key={`ht_${idx}`} set={set} dataLabels={data.dataLabels} />\n ))}\n </tr>\n <tr>\n {data.segmentDataSets.map((set, idx) => (\n <SegmentationHeadersBottom key={`ht_${idx}`} set={set} dataLabels={data.dataLabels} />\n ))}\n </tr>\n </Table.Header>\n <Table.Body>\n {includeTotals && (\n <Table.Row important>\n <Table.Cell align=\"left\">Market</Table.Cell>\n {data.segmentDataSets.map((set, idx) => (\n <SegmentationCell key={`sum_${idx}`} set={set} rowDataSetId=\"totals\" periodCount={PERIOD_COUNT} />\n ))}\n </Table.Row>\n )}\n {firstData.dataSets\n .filter(s => !!s.uniqueId)\n .slice(0, rowsToDisplay)\n .map((dataSet, rIdx) => (\n <Table.Row key={`r_${dataSet.uniqueId}`}>\n <Table.Cell align=\"left\">{dataSet.label}</Table.Cell>\n {data.segmentDataSets.map((set, idx) => (\n <SegmentationCell\n key={`r_${dataSet.uniqueId}_${rIdx}_${idx}`}\n set={set}\n rowDataSetId={dataSet.uniqueId}\n periodCount={PERIOD_COUNT}\n />\n ))}\n </Table.Row>\n ))}\n </Table.Body>\n </Table>\n <div className=\"py-4 flex items-center gap-4\">\n <span className=\"\">\n {rowsToDisplay > rowCount && `${rowCount} out of ${rowCount} items`}\n {rowsToDisplay <= rowCount && `${rowsToDisplay} out of ${rowCount} items`}\n </span>\n {rowsToDisplay <= rowCount && <Button onClick={handleLoadMore}>Load more</Button>}\n </div>\n </div>\n );\n});\n\ntype SegmentationHeadersProps = {\n label?: string;\n set?: SegmentDataSet;\n dataLabels?: (string | string[])[];\n};\n\nfunction SegmentationHeadersTop({ label, set, dataLabels }: SegmentationHeadersProps) {\n return (\n <Table.Column align=\"center\" borders=\"lrb\" colSpan={dataLabels.length}>\n {set?.label || label}\n </Table.Column>\n );\n}\n\nfunction SegmentationHeadersBottom({ dataLabels }: SegmentationHeadersProps) {\n return (\n <>\n {dataLabels.map((label, idx) => (\n <Table.Column\n align=\"center\"\n key={`sr_${idx}`}\n borders={`b${idx === 0 ? 'l' : idx === dataLabels.length - 1 ? 'r' : ''}`}\n >\n <HeaderLabel label={label} />\n </Table.Column>\n ))}\n </>\n );\n}\n\ntype LabelProps = {\n label: string | string[];\n};\nfunction HeaderLabel({ label }: LabelProps) {\n if (Array.isArray(label)) {\n return (\n <>\n {label.map(l => (\n <span key={l} className=\"block nowrap\">\n {l}\n </span>\n ))}\n </>\n );\n }\n\n return <span className=\"block nowrap\">{label}</span>;\n}\n\ntype SegmentationCellProps = {\n rowDataSetId: 'totals' | string;\n set: SegmentDataSet;\n periodCount: number;\n};\nfunction SegmentationCell({ rowDataSetId, set, periodCount }: SegmentationCellProps) {\n const setData = rowDataSetId === 'totals' ? set.totals : set.dataSets.find(set => set.uniqueId === rowDataSetId);\n\n return (\n <>\n {Array(periodCount)\n .fill(null)\n .map((_, idx) => (\n <Table.Cell\n borders={`b${idx === 0 ? 'l' : idx === periodCount - 1 ? 'r' : ''}`}\n key={`row_${rowDataSetId}_${setData?.label}_${idx}`}\n >\n {setData !== undefined ? setData.values.formatted[idx] || '-' : '-'}\n {setData !== undefined && (\n <Cells.ValueChange value={setData.changes?.formatted[idx]} raw={setData.changes?.raw[idx]} />\n )}\n </Table.Cell>\n ))}\n </>\n );\n}\n\nexport { SegmentationTable };\n","import { DataColumn, ExportFormat, ExportOptions, KpiWithChangeColumn } from '../../types';\nimport { AvailableTemplate, ColumnType, DataCell, DataTable, ExcelExportDto } from '@ecosystem/export-api';\nimport { SegmentedChartData, checkChartDataHasChanges, labelToString } from './data';\nimport { TableColumn } from '@ecosystem/export-api/dist/dto/data-table';\nimport { getExportContext, mapValueToDataCell } from '../../export';\nimport { Formatting } from '../../data/formatting';\n\nexport const chartDataToExportData = (\n exportFormat: ExportFormat,\n { fileHeaderSettings, fileName }: ExportOptions,\n chartData: SegmentedChartData,\n xColumn: DataColumn,\n yColumn: DataColumn,\n currency: string\n): ExcelExportDto => {\n switch (exportFormat) {\n case ExportFormat.Xlsx:\n return {\n template: AvailableTemplate.Excel,\n name: fileName,\n worksheets: [\n {\n context: getExportContext(fileHeaderSettings),\n worksheetName: 'segmentation',\n data: createWorksheetData(chartData, xColumn, yColumn, currency),\n },\n ],\n };\n default:\n throw new Error(\"Export format isn't supported\");\n }\n};\n\nconst createSecondHeaderRow = (chartData: SegmentedChartData, xColumn: DataColumn, yColumn: DataColumn): DataCell[] => {\n const hasChanges = checkChartDataHasChanges(chartData);\n return [\n {\n type: ColumnType.Text,\n value: yColumn.label,\n },\n {\n type: ColumnType.Text,\n value: xColumn.label,\n },\n ...chartData.segmentDataSets.reduce(acc => {\n acc.push(\n ...chartData.dataLabels.map(label => ({\n type: ColumnType.Text,\n value: labelToString(label),\n }))\n );\n if (hasChanges) {\n acc.push(\n ...chartData.dataLabels\n .map((label, idx, all) => ({\n type: ColumnType.Text,\n value: idx > 0 ? `${yColumn.label} Change ${labelToString(all[idx - 1])} vs ${labelToString(label)}` : '',\n }))\n .filter(entry => entry.value !== '')\n );\n }\n return acc;\n }, []),\n ];\n};\n\nconst createFirstHeaderRow = (chartData: SegmentedChartData, xColumn: DataColumn): TableColumn[] => {\n const periodCount = chartData.dataLabels.length;\n const hasChanges = checkChartDataHasChanges(chartData);\n const requiredColumns = hasChanges ? 2 * periodCount - 1 : periodCount;\n return [\n { type: ColumnType.Text, header: 'KPI' },\n { type: ColumnType.Text, header: xColumn.label },\n ...chartData.segmentDataSets.reduce((acc, current) => {\n for (let i = 0; i < requiredColumns; i++) {\n acc.push({ style: { width: 17 }, type: ColumnType.Text, header: current.label });\n }\n return acc;\n }, []),\n ];\n};\n\nconst createTotalMarketRow = (chartData: SegmentedChartData, xColumn: DataColumn, yColumn: DataColumn) => {\n const changeFormatHint = (yColumn as KpiWithChangeColumn).changeFormatHint;\n const hasChanges = checkChartDataHasChanges(chartData);\n return [\n [\n {\n type: ColumnType.Text,\n value: yColumn.label,\n },\n {\n type: ColumnType.Text,\n value: 'Market',\n },\n ...chartData.segmentDataSets.reduce((acc, current) => {\n acc.push(\n ...chartData.dataLabels.map((_label, idx) => {\n const value = current.totals?.values.raw[idx];\n return mapValueToDataCell(value, yColumn.formatHint, yColumn.dataType);\n })\n );\n if (hasChanges) {\n acc.push(\n ...chartData.dataLabels.slice(1).map((_label, idx) => {\n const value = current.totals?.changes?.raw[idx + 1];\n return mapValueToDataCell(value, changeFormatHint, yColumn.dataType);\n })\n );\n }\n return acc;\n }, []),\n ],\n ];\n};\n\nconst createDataRows = (chartData: SegmentedChartData, xColumn: DataColumn, yColumn: DataColumn) => {\n const allXColumnIds = chartData.segmentDataSets.reduce((acc, current) => {\n current.dataSets.forEach(dataSet => (acc[dataSet.uniqueId] = true));\n return acc;\n }, {});\n\n const changeFormatHint = (yColumn as KpiWithChangeColumn).changeFormatHint;\n const hasChanges = checkChartDataHasChanges(chartData);\n\n const final = [\n ...Object.keys(allXColumnIds).map(id => {\n return chartData.segmentDataSets.reduce((acc, current) => {\n const dataSet = current.dataSets.find(dataSet => dataSet.uniqueId === id);\n if (acc.length === 0) {\n acc.push({ type: ColumnType.Text, value: yColumn.label });\n acc.push({ type: ColumnType.Text, value: dataSet.label });\n }\n acc.push(\n ...chartData.dataLabels.map((_label, idx) => {\n const value = dataSet?.values.raw[idx];\n return mapValueToDataCell(value, yColumn.formatHint, yColumn.dataType);\n })\n );\n if (hasChanges) {\n acc.push(\n ...chartData.dataLabels.slice(1).map((_label, idx) => {\n const value = dataSet?.changes?.raw[idx + 1];\n return mapValueToDataCell(value, changeFormatHint, yColumn.dataType);\n })\n );\n }\n return acc;\n }, [] as Array<DataCell>);\n }),\n ];\n return final;\n};\nexport const createWorksheetData = (\n chartData: SegmentedChartData,\n xColumn: DataColumn,\n yColumn: DataColumn,\n currency: string\n): DataTable => {\n return {\n currencySymbol: ' ' + (Formatting.getCurrencySymbol(currency) || currency) + ' ',\n dataColumns: createFirstHeaderRow(chartData, xColumn),\n summaryRows: [\n createSecondHeaderRow(chartData, xColumn, yColumn),\n ...(chartData.segmentDataSets[0].totals ? createTotalMarketRow(chartData, xColumn, yColumn) : []),\n ],\n dataRows: createDataRows(chartData, xColumn, yColumn),\n };\n};\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { AddInsightToCollectionsButton } from '@ecosystem/newron-client-collections';\nimport { ExcelExportDto, PowerpointExportDto } from '@ecosystem/export-api';\n\nimport {\n CollectionOptions,\n DataColumn,\n DataVizType,\n EventElementCategory,\n ExportFormat,\n ExportOptions,\n} from '../../types';\nimport { ChartTitle } from '../../design/charts/parts';\nimport { Loading } from '../../design/loading/Loading';\nimport { DataContentProps } from '../../content/types';\nimport { makeSegmentedChartData, SegmentedChartData } from './data';\nimport { Instructions } from '../../content/instructions';\nimport { SegmentationChart } from './segmentation.chart';\nimport { SegmentationTable } from './segmentation.table';\nimport { DataVizToggle } from '../../components/dataviz.toggle';\nimport { splitIntoChunks } from '../../tools/arrays';\nimport { useCorePageState } from '../../page/provider';\nimport { chartToPptData } from '../../export';\nimport { chartDataToExportData } from './chartDataToExportData';\nimport { ExportButton } from '../../export/export.button';\nimport { ExportHideout } from '../../export/ExportHideout';\nimport { InsightCollectionDataType, InsightData } from '../../content/collection/types';\nimport { useOnCollectionExportReady } from '../collection/useOnCollectionExportReady';\nimport { useTrackChartTooltipEvent } from '../../analytics/trackChartInteractions.hook';\nimport { mapDataVizForChartType, trackPageElementClicked } from '../../analytics/utils';\nimport GenericWarnings from '../../design/warning/GenericWarnings';\nimport { createViewStateFn } from '../../tools/createViewState';\nimport { shouldDisableGroupAnalyticsSharing } from '../../page/heading/utils';\n\nfunction Segmentation({\n data,\n instructions = {},\n isLoading,\n componentSettings,\n ComponentActionsContainer,\n collection,\n paramsForData,\n paramsForContext,\n updateSettings,\n trackEvent,\n componentMetadata,\n componentHeadingTitle,\n proposition,\n}: DataContentProps) {\n const [dataStamp, setDataStamp] = useState<number>();\n const [chartData, setChartData] = useState<SegmentedChartData>();\n const [yColumn, setYColumn] = useState<DataColumn>();\n const [xColumn, setXColumn] = useState<DataColumn>();\n const [currency, setCurrency] = useState<string>();\n\n const [exportModalOpen, setExportModalOpen] = useState(false);\n const chartSliceRefs = useRef<HTMLDivElement[]>([]);\n const { dsl, page, context, data: dataInfo, collection: collectionInfo, globalWarnings } = useCorePageState();\n\n const allColumns = data?.getAllColumns() ?? [];\n\n useOnCollectionExportReady({ collection, dsl, chartSliceRefs, componentSettings, allColumns, componentHeadingTitle });\n\n const myInstructions = new Instructions(instructions, componentSettings);\n\n const yColumnName = myInstructions.getString('yColumn');\n const xColumnName = myInstructions.getString('xColumn');\n const segmentName = myInstructions.getString('segmentColumn');\n const exportOptions = myInstructions.getObject('export') as ExportOptions;\n const collectionOptions = myInstructions.getObject('collection') as CollectionOptions;\n\n const disableCollectionButton = shouldDisableGroupAnalyticsSharing();\n\n const { trackTooltipEvent } = useTrackChartTooltipEvent(\n componentSettings,\n !!collection,\n collectionOptions?.chartName\n );\n\n const displayAs = componentSettings.dataViz?.length\n ? (componentSettings.dataViz[0] as DataVizType)\n : DataVizType.chart;\n\n const updateData = () => {\n if (!data) {\n return;\n }\n const yColumn = data.getDataColumns().find(col => col.name === yColumnName);\n const xColumn = data.getDataColumns().find(col => col.name === xColumnName);\n const chartData = makeSegmentedChartData(data, {\n yColumnName: yColumnName,\n xColumnName,\n segmentName,\n });\n\n setCurrency(data.getCurrency());\n setYColumn(yColumn);\n setXColumn(xColumn);\n setChartData(chartData);\n setDataStamp(data.stamp);\n };\n\n const handleDataVizChange = useCallback(\n (value: DataVizType) => {\n updateSettings({\n ...componentSettings,\n dataViz: [value],\n });\n trackPageElementClicked(trackEvent, mapDataVizForChartType(value), {\n elementCategory: mapDataVizForChartType(value) as EventElementCategory,\n });\n },\n [componentSettings, updateSettings, trackEvent]\n );\n\n if (!componentSettings.dataViz?.length) {\n updateSettings({\n ...componentSettings,\n dataViz: [displayAs],\n });\n }\n\n const sliceChartData = (data: SegmentedChartData, sliceSize: number): SegmentedChartData[] => {\n const [totals, ...segmentDataSets] = data.segmentDataSets;\n\n return splitIntoChunks(segmentDataSets, sliceSize).map(chunk => ({\n ...chartData,\n segmentDataSets: [totals, ...chunk],\n }));\n };\n\n /* eslint-disable react-hooks/exhaustive-deps */\n useEffect(() => {\n if (!data || data.stamp === dataStamp) {\n return;\n }\n updateData();\n }, [data]);\n\n useEffect(() => {\n if (data) {\n collection?.onLoaded();\n }\n }, [data]);\n\n /* eslint-disable react-hooks/exhaustive-deps */\n useEffect(() => {\n updateData();\n }, [yColumnName]);\n\n useEffect(() => {\n if (!exportModalOpen) {\n chartSliceRefs.current = [];\n }\n }, [exportModalOpen]);\n\n if ((!collection && !data) || !chartData) {\n return null;\n }\n\n const getExportData = async (exportFormat: ExportFormat): Promise<PowerpointExportDto | ExcelExportDto> => {\n switch (exportFormat) {\n case ExportFormat.Xlsx:\n return chartDataToExportData(exportFormat, exportOptions, chartData, xColumn, yColumn, currency);\n\n case ExportFormat.Pptx:\n return await chartToPptData(\n exportOptions,\n dsl,\n chartData.yLabel,\n chartSliceRefs.current,\n componentSettings,\n allColumns,\n componentHeadingTitle\n );\n\n default:\n break;\n }\n };\n return (\n <>\n {chartData && ComponentActionsContainer && (\n <ComponentActionsContainer>\n {collectionOptions && collectionInfo && (\n <AddInsightToCollectionsButton<InsightData, {}>\n type={collectionOptions.collectionKey}\n selectDataType\n proposition={proposition}\n disabled={isLoading || disableCollectionButton}\n createInsightDataFn={(dataType: InsightCollectionDataType) => ({\n content: {\n type: collectionOptions.type,\n dataOptions: collectionOptions.dataOptions,\n },\n paramsForData,\n paramsForContext,\n proposition,\n dataType,\n corePageSettings: { context, data: dataInfo, page, collection: collectionInfo },\n componentSettings,\n })}\n createViewStateFn={createViewStateFn}\n />\n )}\n {exportOptions && (\n <ExportButton\n trackingSourceData={data}\n componentSettings={componentSettings}\n componentMetadata={componentMetadata}\n disabled={isLoading}\n exportFormats={[ExportFormat.Xlsx, ExportFormat.Pptx]}\n getExportData={getExportData}\n exportContentRef={chartSliceRefs}\n onModalVisibilityChange={isVisible => setExportModalOpen(isVisible)}\n trackEvent={trackEvent}\n />\n )}\n <DataVizToggle\n options={[DataVizType.chart, DataVizType.table]}\n value={displayAs}\n onChange={handleDataVizChange}\n />\n </ComponentActionsContainer>\n )}\n <div className=\"segmentation relative pt-4 w-full max-w-full\">\n <Loading isActive={isLoading} withIndicator />\n {displayAs === 'table' && chartData && (\n // <SegmentationTable data={chartData} xColumn={xColumn} />\n <>\n <SegmentationTable data={chartData} xColumn={xColumn} />\n {(exportModalOpen || collection) && (\n <>\n {sliceChartData(chartData, 5).map((chartDataSlice, idx) => (\n <ExportHideout key={idx}>\n <div ref={element => (chartSliceRefs.current[idx] = element)}>\n {globalWarnings && <GenericWarnings warnings={globalWarnings} />}\n <SegmentationTable data={chartDataSlice} xColumn={xColumn} />\n </div>\n </ExportHideout>\n ))}\n </>\n )}\n </>\n )}\n {displayAs === 'chart' && chartData && (\n <>\n <ChartTitle title={chartData?.yLabel} />\n <SegmentationChart\n yColumn={yColumn}\n chartData={chartData}\n currency={currency}\n trackTooltipEvent={trackTooltipEvent}\n />\n {(exportModalOpen || collection) && (\n <>\n {sliceChartData(chartData, 5).map((chartDataSlice, idx) => (\n <ExportHideout key={idx}>\n <div ref={element => (chartSliceRefs.current[idx] = element)}>\n {globalWarnings && <GenericWarnings warnings={globalWarnings} />}\n <SegmentationChart\n ref={element => (chartSliceRefs.current[idx] = element)}\n yColumn={yColumn}\n chartData={chartDataSlice}\n currency={currency}\n trackTooltipEvent={trackTooltipEvent}\n />\n </div>\n </ExportHideout>\n ))}\n </>\n )}\n </>\n )}\n </div>\n </>\n );\n}\n\nexport { Segmentation };\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./statsTable.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./statsTable.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, { useEffect, useRef, useState } from 'react';\nimport { inputs } from '@ecosystem/newron-design-system';\nimport { Instructions } from '../../content/instructions';\nimport { getIdentifiers } from '../../data/helpers';\nimport { Loading } from '../../design/loading/Loading';\nimport { DataContentProps } from '../../newron-core';\nimport { ColumnType, DataCellValue, DataColumn, ExportFormat, ExportOptions, IdentifierColumn } from '../../types';\nimport { ExportButton } from '../../export/export.button';\nimport { statsToExportData } from './statsToExportData';\nimport { ExcelExportDto, PowerpointExportDto } from '@ecosystem/export-api';\nimport { chartToPptData } from '../../export';\nimport { useCorePageState } from '../../page/provider';\nimport { ExportHideout } from '../../export/ExportHideout';\nimport { splitIntoChunks } from '../../tools/arrays';\nimport { PageSettingsManager } from '../../page/settings';\nimport { Formatting } from '../../data/formatting';\n\nimport './statsTable.css';\n\nexport type StatRow = {\n label: string;\n values: string[];\n};\n\nfunction StatsTable({\n data,\n isLoading,\n instructions,\n componentSettings,\n ComponentActionsContainer,\n componentMetadata,\n trackEvent,\n componentHeadingTitle,\n}: DataContentProps) {\n const [dataStamp, setDataStamp] = useState<number>();\n const [namesRow, setNamesRow] = useState<StatRow>();\n const [statsRows, setStatsRows] = useState<StatRow[]>([]);\n const [itemCount, setItemCount] = useState<number>(1);\n const [currency, setCurrency] = useState<string>();\n\n const [exportModalOpen, setExportModalOpen] = useState(false);\n const chartSliceRefs = useRef<HTMLDivElement[]>([]);\n const { dsl, updatePageSettings } = useCorePageState();\n\n const pageSettings = PageSettingsManager.getInstance().getPageSettings();\n const hideCommon = pageSettings?.hideCommon?.[0] === 'true';\n const myInstructions = new Instructions(instructions, componentSettings);\n\n const rowIdField = myInstructions.getString('rowIdField');\n const title = myInstructions.hasInstruction('title') ? myInstructions.getString('title') : undefined;\n const exportOptions = myInstructions.getObject('export') as ExportOptions;\n\n const format = (value: DataCellValue, column: DataColumn): string => {\n if (value === null) {\n return '-';\n }\n\n if (column.type === ColumnType.Date) {\n return Formatting.format(String(value), { formatHint: column.formatHint, dataType: column.dataType });\n }\n\n return String(value);\n };\n\n /* eslint-disable react-hooks/exhaustive-deps */\n useEffect(() => {\n if (!data || data.stamp === dataStamp) {\n return;\n }\n\n const dataSrc = data.getGroupedData([rowIdField])[0];\n if (!dataSrc) {\n return;\n }\n\n const nameColumn = data.getDataColumns().find(col => col.name === rowIdField);\n if (!nameColumn) {\n return;\n }\n const namesRow: StatRow = {\n label: 'name',\n values: dataSrc.data.map(row => {\n const { name } = getIdentifiers(nameColumn as IdentifierColumn, row);\n return name;\n }),\n };\n\n const statsRows: StatRow[] = [];\n data\n .getDataColumns()\n .filter(col => col.name !== rowIdField && col.arrayLength === null)\n .forEach(col => {\n const statRow: StatRow = {\n label: col.label,\n values: [],\n };\n dataSrc.data.forEach(row => {\n const value = row.values[col.name];\n const formatted = format(value, col);\n statRow.values.push(formatted);\n });\n statsRows.push(statRow);\n });\n\n setCurrency(data.getCurrency());\n setNamesRow(namesRow);\n setStatsRows(statsRows);\n setDataStamp(data.stamp);\n setItemCount(dataSrc.data.length);\n }, [data, rowIdField]);\n\n const isMultiItems = itemCount > 1;\n const showHideCommon = isMultiItems && ComponentActionsContainer;\n\n const rows = !hideCommon\n ? statsRows\n : statsRows.filter(row => !row.values.every((value, _, list) => value === list[0]));\n const dimmedRows = !hideCommon\n ? []\n : statsRows.filter(row => row.values.every((value, _, list) => value === list[0]));\n\n const getExportData = async (exportFormat: ExportFormat): Promise<PowerpointExportDto | ExcelExportDto> => {\n const allColumns = data.getAllColumns();\n switch (exportFormat) {\n case ExportFormat.Xlsx:\n return statsToExportData(exportOptions, namesRow, rows, dimmedRows, currency);\n\n case ExportFormat.Pptx:\n return await chartToPptData(\n exportOptions,\n dsl,\n null,\n chartSliceRefs.current,\n componentSettings,\n allColumns,\n componentHeadingTitle\n );\n\n default:\n break;\n }\n };\n\n const sliceStatsData = (\n namesRow: StatRow,\n rows: StatRow[],\n dimmedRows: StatRow[]\n ): { namesRow: StatRow; rows: StatRow[]; dimmedRows: StatRow[] }[] => {\n const slices: { namesRow: StatRow; rows: StatRow[]; dimmedRows: StatRow[] }[] = [];\n const slideSize = 5;\n splitIntoChunks(namesRow.values, slideSize).forEach((namesSlice, idx) => {\n const slideStart = idx * slideSize;\n const slideEnd = (idx + 1) * slideSize;\n slices.push({\n namesRow: { ...namesRow, values: namesSlice },\n rows: rows.map(row => ({ ...row, values: row.values.slice(slideStart, slideEnd) })),\n dimmedRows: dimmedRows.map(row => ({\n ...row,\n values: row.values.slice(slideStart, slideEnd),\n })),\n });\n });\n return slices;\n };\n\n const { Checkbox, CheckboxState } = inputs;\n\n const StatsHeader = ({ namesRow, isMultiItems }: { namesRow: StatRow; isMultiItems: boolean }): JSX.Element => (\n <thead>\n <tr className=\"bg-medium\">\n <th className=\"bg-medium sticky left-0 z-2\"> </th>\n {namesRow.values.map(name => (\n <th key={name} className={`py-2 ${isMultiItems ? 'pr-8' : ''}`} align=\"left\">\n {name}\n </th>\n ))}\n </tr>\n </thead>\n );\n\n const StatsRow = ({\n row,\n isMultiItems,\n dimmed = false,\n }: {\n row: StatRow;\n isMultiItems: boolean;\n dimmed?: boolean;\n }): JSX.Element => (\n <tr key={`row_${row.label}`} className=\"border-b border-light\">\n <td className={`py-1 bg-white font-bold pr-6 sticky left-0 z-2 ${dimmed ? 'text-inactive' : ''}`}>{row.label}</td>\n {row.values.map((value, idx) => (\n <td\n key={`row_${row.label}_${idx}_${value}`}\n className={`prewrap ${isMultiItems ? 'pr-8' : ''} ${dimmed ? 'text-inactive' : ''}`}\n align={isMultiItems ? 'left' : 'right'}\n >\n {value}\n </td>\n ))}\n </tr>\n );\n\n const renderStatsTable = (\n isMultiItems,\n namesRow,\n rows,\n dimmedRows,\n ref?: (HTMLTableElement) => void\n ): JSX.Element => (\n <table ref={ref} className=\"w-full text-md relative nowrap\" style={{ minWidth: 'fit-content' }}>\n {isMultiItems && namesRow && <StatsHeader namesRow={namesRow} isMultiItems={isMultiItems}></StatsHeader>}\n <tbody>\n {rows.map((row, idx) => (\n <StatsRow key={idx} row={row} isMultiItems={isMultiItems}></StatsRow>\n ))}\n {dimmedRows.length > 0 && (\n <tr>\n <td colSpan={dimmedRows[0].values.length + 1} className=\"h-2 bg-medium\"></td>\n </tr>\n )}\n {dimmedRows.map((row, idx) => (\n <StatsRow key={idx} row={row} isMultiItems={isMultiItems} dimmed></StatsRow>\n ))}\n </tbody>\n </table>\n );\n\n return (\n <div className=\"relative w-full max-w-full overflow-x-auto pb-4\">\n <Loading isActive={isLoading} withIndicator />\n {title && <div className=\"font-bold pb-3\">{title}</div>}\n {renderStatsTable(isMultiItems, namesRow, rows, dimmedRows)}\n {exportModalOpen && namesRow && (\n <>\n {sliceStatsData(namesRow, rows, dimmedRows).map((slice, idx) => (\n <ExportHideout key={idx}>\n {renderStatsTable(\n isMultiItems,\n slice.namesRow,\n slice.rows,\n slice.dimmedRows,\n element => (chartSliceRefs.current[idx] = element)\n )}\n </ExportHideout>\n ))}\n </>\n )}\n {showHideCommon && (\n <ComponentActionsContainer>\n <span className=\"ml-4 mr-auto\">\n <Checkbox\n onChange={() => updatePageSettings({ hideCommon: [`${!hideCommon}`] })}\n state={hideCommon ? CheckboxState.CHECKED : CheckboxState.UNCHECKED}\n label=\"Show differences only\"\n />\n </span>\n {data && exportOptions && (\n <ExportButton\n trackingSourceData={data}\n componentMetadata={componentMetadata}\n componentSettings={componentSettings}\n disabled={isLoading}\n exportFormats={[ExportFormat.Xlsx, ExportFormat.Pptx]}\n getExportData={getExportData}\n exportContentRef={chartSliceRefs}\n onModalVisibilityChange={isVisible => setExportModalOpen(isVisible)}\n trackEvent={trackEvent}\n />\n )}\n </ComponentActionsContainer>\n )}\n </div>\n );\n}\n\nexport { StatsTable };\n","import { AvailableTemplate, ColumnType, DataCell, ExcelExportDto, TableColumn } from '@ecosystem/export-api';\nimport { ExportOptions } from '../../types';\nimport { StatRow } from './statsTable';\nimport { getExportContext } from '../../export';\nimport { Formatting } from '../../data/formatting';\n\nexport const statsToExportData = (\n { fileHeaderSettings, fileName, contentName }: ExportOptions,\n namesRow: StatRow,\n rows: StatRow[],\n dimmedRows: StatRow[],\n currency: string\n): ExcelExportDto => {\n const dataColumns: TableColumn[] = [''].concat(namesRow.values).map((name, idx) => ({\n type: ColumnType.Text,\n header: name,\n style: { width: 20, fontWeight: idx === 0 ? 'bold' : 'normal' },\n }));\n\n const dataRows: DataCell[][] = rows\n .concat(dimmedRows)\n .map(row => [row.label].concat(row.values).map(value => ({ type: ColumnType.Text, value })));\n\n const exportData: ExcelExportDto = {\n template: AvailableTemplate.Excel,\n name: fileName,\n worksheets: [\n {\n context: getExportContext(fileHeaderSettings),\n worksheetName: contentName,\n data: {\n dataColumns,\n dataRows,\n currencySymbol: Formatting.getCurrencySymbol(currency),\n },\n },\n ],\n };\n return exportData;\n};\n","import { DataStore } from '../../data/store';\nimport { DataSet } from '../../design/charts';\nimport { createChartData } from '../data/chartData';\nimport { ChartData, ColorHelper, findDescriptionColumn, MarketKpi } from '../data/common';\n\nexport type SeriesAndSummaryData = {\n series: ChartData;\n summary?: ChartData;\n};\n\nexport type RowDataSets = {\n uniqueId: string;\n label: string;\n seriesSet: DataSet;\n summarySet?: DataSet;\n};\n\nconst GROWTH_KPI_MAP = {\n [MarketKpi.ShareRevenue]: MarketKpi.Revenue,\n [MarketKpi.ShareUnits]: MarketKpi.Units,\n [MarketKpi.PriceIndex]: MarketKpi.AveragePrice,\n};\n\nexport function makeTimeSeriesData(\n data: DataStore,\n options: {\n xColumnName: string;\n yColumnName: string;\n }\n): { series: ChartData; summary?: ChartData; exportSeries: ChartData[] } | undefined {\n const { xColumnName, yColumnName } = options;\n const columns = data.getDataColumns();\n\n const xColumn = findDescriptionColumn(columns, xColumnName);\n\n const yColumn = columns.find(col => col.name === yColumnName);\n if (!xColumn || !yColumn) {\n return;\n }\n\n const updatedYColumnName = GROWTH_KPI_MAP[yColumnName] || yColumnName;\n const updatedYColumn = columns.find(col => col.name === updatedYColumnName);\n\n const totalsGroupedData = data.getGroupedData([]);\n const totalsSeriesData = totalsGroupedData.length === 1 ? totalsGroupedData[0] : totalsGroupedData[1];\n const totalsSummaryData = totalsGroupedData.length === 1 ? undefined : totalsGroupedData[0];\n\n const xGroupedData = data.getGroupedData([xColumnName]);\n const xSeriesData = xGroupedData.length === 1 ? xGroupedData[0] : xGroupedData[1];\n const xSummaryData = xGroupedData.length === 1 ? undefined : xGroupedData[0];\n\n const xSummaryColumnNames = xSummaryData ? xSummaryData.data.map(item => item.values[xColumn.name]) : [];\n const xSeriesColumnNames = xSeriesData.data.map(item => item.values[xColumn.name]);\n\n const columnNames = Array.from(new Set([...xSummaryColumnNames, ...xSeriesColumnNames]));\n const includeTotals = ((totalsSeriesData?.data[0]?.values[updatedYColumnName] as Array<number | null>) || [])?.some(\n item => item !== null\n );\n\n const colorHelper = new ColorHelper(\n xColumnName,\n columnNames.map(cn => String(cn))\n );\n\n const seriesData = createChartData(\n { rows: xSeriesData.data, columns, totals: totalsSeriesData?.data[0] },\n {\n xColumnName,\n yColumnName,\n currency: data.getCurrency(),\n includeTotals,\n setPerRow: true,\n colorHelper,\n updatedYColumn,\n }\n );\n\n if (!seriesData) {\n return;\n }\n seriesData.dataLabels = xSeriesData.timeFrame.periods.map(v => (Array.isArray(v.name) ? v.name : v.name.split(' ')));\n\n const exportSeriesData = splitChartData(seriesData);\n\n let summaryData: ChartData | undefined;\n if (totalsSummaryData && xSummaryData) {\n summaryData = createChartData(\n { rows: xSummaryData.data, columns, totals: totalsSummaryData.data[0] },\n {\n yColumnName,\n xColumnName,\n currency: data.getCurrency(),\n includeTotals,\n setPerRow: true,\n colorHelper,\n updatedYColumn,\n }\n );\n summaryData.dataLabels = xSummaryData.timeFrame.periods.map(v => v.name);\n }\n\n return {\n series: seriesData,\n summary: summaryData,\n exportSeries: exportSeriesData,\n };\n}\n\nfunction splitChartData(chartData: ChartData): ChartData[] {\n if (!chartData.hasData) {\n return [];\n }\n\n const chunks: ChartData[] = [];\n const chunkSize = 13; // Size of each chunk\n\n const { totalsDataSet, dataLabels, dataSets } = chartData;\n\n const rawValuesLength = dataSets[0].values.raw.length;\n\n for (let i = 0; i < rawValuesLength; i += chunkSize) {\n const chunkedData: ChartData = {\n ...chartData,\n dataSets: dataSets.map(dataSet => {\n const {\n values: { raw, formatted, fillColor, textColor },\n changes,\n } = dataSet;\n\n return {\n ...dataSet,\n values: {\n raw: raw.slice(i, i + chunkSize),\n formatted: formatted.slice(i, i + chunkSize),\n fillColor: fillColor.slice(i, i + chunkSize),\n textColor: textColor.slice(i, i + chunkSize),\n },\n changes: changes && {\n raw: changes.raw.slice(i, i + chunkSize),\n formatted: changes.formatted.slice(i, i + chunkSize),\n textColor: changes.textColor.slice(i, i + chunkSize),\n },\n };\n }),\n totalsDataSet: totalsDataSet && {\n ...totalsDataSet,\n changes: totalsDataSet.changes && {\n raw: totalsDataSet.changes.raw.slice(i, i + chunkSize),\n formatted: totalsDataSet.changes.formatted.slice(i, i + chunkSize),\n textColor: totalsDataSet.changes.textColor.slice(i, i + chunkSize),\n },\n values: {\n raw: totalsDataSet.values.raw.slice(i, i + chunkSize),\n formatted: totalsDataSet.values.formatted.slice(i, i + chunkSize),\n fillColor: totalsDataSet.values.fillColor.slice(i, i + chunkSize),\n textColor: totalsDataSet.values.textColor.slice(i, i + chunkSize),\n },\n },\n dataLabels: dataLabels.slice(i, i + chunkSize),\n };\n\n chunks.push(chunkedData);\n }\n\n return chunks;\n}\n\nexport function getRowDataSets(chartData: SeriesAndSummaryData): RowDataSets[] {\n return chartData.series.dataSets.map(set => {\n const summarySet = chartData.summary?.dataSets.find(\n summarySet =>\n (set.uniqueId && summarySet.uniqueId === set.uniqueId) || (set.label && summarySet.label === set.label)\n );\n return {\n uniqueId: set.uniqueId,\n label: set.label,\n seriesSet: set,\n summarySet,\n };\n });\n}\n\n/**\n * Returns an array of null values to use as a filler when there is no summary data set\n * @param chartData\n * @returns\n */\nexport function getNullFillerRow(chartData?: ChartData): number[] {\n const [firstSet] = chartData?.dataSets || [];\n if (!firstSet) {\n return [];\n }\n return Array(firstSet.values.raw.length).fill(null);\n}\n","import React, { ForwardedRef } from 'react';\nimport { DataVizType } from '../../types';\nimport {\n StackedBarChart,\n StackedBarChartOptions,\n LineChart,\n LineChartOptions,\n SlopeChartOptions,\n SlopeChart,\n} from '../../design/charts';\nimport { ChartData, formatScaleValue, formatTooltipValue } from '../data/common';\nimport { Legend } from '../../design/charts/legend';\nimport { EmptyState } from '../../common/no-data-warning/empty-state';\n\ntype Props = {\n series: ChartData;\n summary?: ChartData;\n currency: string;\n displayAs: DataVizType;\n trackTooltipEvent: () => void;\n};\nconst TimeSeriesChart = React.forwardRef<HTMLDivElement, Props>(\n ({ series, summary, currency, displayAs, trackTooltipEvent }: Props, ref: ForwardedRef<HTMLDivElement>) => {\n const { dataSets, totalsDataSet, dataLabels, yColumn, updatedYColumn } = series;\n\n let SummaryChart: JSX.Element | null = null;\n let Chart: JSX.Element | null = null;\n const includeTotals = totalsDataSet !== undefined;\n const totalsLabel = includeTotals ? `Market ${updatedYColumn?.label || yColumn.label}` : undefined;\n const totalsChangeLabel = includeTotals ? 'Change vs same period prior year' : undefined;\n\n if (yColumn.canAggregate && displayAs !== DataVizType.lineChart) {\n const stackedChartOptions: StackedBarChartOptions = {\n yScale: {\n stacked: true,\n formatter: value => formatScaleValue(value, { yColumn }),\n },\n tooltip: {\n valueFormatter: value => formatTooltipValue(value, { yColumn, currency }),\n },\n data: {\n labels: dataLabels,\n sets: dataSets,\n summary: totalsDataSet,\n },\n compactView: dataLabels.length >= 26,\n };\n Chart = <StackedBarChart options={stackedChartOptions} trackTooltipEvent={trackTooltipEvent} />;\n } else {\n const lineChartOptions: LineChartOptions = {\n yScale: {\n formatter: value => formatScaleValue(value, { yColumn }),\n },\n tooltip: {\n valueFormatter: value => formatTooltipValue(value, { yColumn, currency }),\n },\n data: {\n labels: dataLabels,\n sets: dataSets,\n summary: totalsDataSet,\n },\n compactView: dataLabels.length >= 26,\n };\n Chart = <LineChart options={lineChartOptions} trackTooltipEvent={trackTooltipEvent} />;\n }\n\n if (summary) {\n const { dataSets, totalsDataSet, dataLabels, yColumn } = summary;\n if (yColumn.canAggregate) {\n const summaryStackedChartOptions: StackedBarChartOptions = {\n yScale: {\n stacked: true,\n formatter: value => formatScaleValue(value, { yColumn }),\n },\n tooltip: {\n valueFormatter: value => formatTooltipValue(value, { yColumn, currency }),\n },\n data: {\n labels: dataLabels,\n sets: dataSets,\n summary: totalsDataSet,\n },\n };\n SummaryChart = <StackedBarChart options={summaryStackedChartOptions} trackTooltipEvent={trackTooltipEvent} />;\n } else {\n const summarySlopeOptions: SlopeChartOptions = {\n yScale: {\n formatter: value => formatScaleValue(value, { yColumn }),\n },\n tooltip: {\n valueFormatter: value => formatTooltipValue(value, { yColumn, currency }),\n },\n data: {\n labels: dataLabels,\n sets: dataSets,\n summary: totalsDataSet,\n },\n };\n SummaryChart = <SlopeChart options={summarySlopeOptions} trackTooltipEvent={trackTooltipEvent} />;\n }\n }\n\n //checks the hasData prop which is ommited in DP\n const isSeriesDataEmpty = 'hasData' in series ? !series.hasData : false;\n const isSummaryDataEmpty = summary && ('hasData' in summary ? !summary.hasData : false);\n\n return (\n <div ref={ref} className=\"relative overflow-x-auto w-full\">\n <div className=\"w-full flex flex-rows items-stretch gap-2\" style={{ height: '500px' }}>\n {!isSeriesDataEmpty && !isSummaryDataEmpty && (\n <>\n <Legend data={series.dataSets} totalsLabel={totalsLabel} totalsChangeLabel={totalsChangeLabel} />\n {SummaryChart && <div className=\"relative border-r border-light pr-4\">{SummaryChart}</div>}\n <div className=\"relative flex-grow overflow-x-auto overflow-y-hidden\">{Chart}</div>\n </>\n )}\n {isSeriesDataEmpty && isSummaryDataEmpty && <EmptyState height=\"100%\" />}\n </div>\n </div>\n );\n }\n);\n\nexport { TimeSeriesChart };\n","import { actions } from '@ecosystem/newron-design-system';\nimport React, { forwardRef, useState } from 'react';\nimport { Table, Cells } from '../../design/table2';\nimport { ChartData } from '../data/common';\nimport { DataColumn, FormatHint } from '../../types';\nimport { getNullFillerRow, getRowDataSets } from './data';\nimport { DataSet } from '../../design/charts';\n\nconst { Button } = actions;\n\ntype Props = {\n series: ChartData;\n summary?: ChartData;\n xColumn: DataColumn;\n};\nconst TimeSeriesTable = forwardRef<HTMLDivElement, Props>(({ series, summary, xColumn }, ref) => {\n const [rowsToDisplay, setRowsToDisplay] = useState<number>(100);\n\n const rowDataSets = getRowDataSets({ series, summary });\n const summaryFiller = getNullFillerRow(summary);\n\n const rowCount = rowDataSets.length;\n const includeTotals =\n series.totalsDataSet !== undefined &&\n ![FormatHint.Percentage, FormatHint.Index].includes(series.yColumn.formatHint);\n\n const handleLoadMore = () => {\n const newAmount = rowsToDisplay + 100;\n if (newAmount > rowCount) {\n setRowsToDisplay(rowCount);\n } else {\n setRowsToDisplay(newAmount);\n }\n };\n\n return (\n <div ref={ref} className=\"relative w-full\">\n <Table>\n <Table.Header withRows={false}>\n <tr>\n <Table.Column rowSpan={2}>{xColumn.label}</Table.Column>\n <SeriesHeadersTop series={series} summary={summary} />\n </tr>\n <tr>\n <SeriesHeadersBottom series={series} summary={summary} />\n </tr>\n </Table.Header>\n <Table.Body>\n {includeTotals && (\n <Table.Row important>\n <Table.Cell align=\"left\">Market</Table.Cell>\n <SeriesCells\n series={series.totalsDataSet}\n summary={summary?.totalsDataSet}\n uniqueId=\"totals\"\n summaryFiller={summaryFiller}\n />\n </Table.Row>\n )}\n {rowDataSets.slice(0, rowsToDisplay).map(set => (\n <Table.Row key={`r_${set.uniqueId}`}>\n <Table.Cell align=\"left\">{set.label}</Table.Cell>\n <SeriesCells\n series={set.seriesSet}\n summary={set.summarySet}\n uniqueId={set.uniqueId}\n summaryFiller={summaryFiller}\n />\n </Table.Row>\n ))}\n </Table.Body>\n </Table>\n <div className=\"py-4 flex items-center gap-4\">\n <span className=\"\">\n {rowsToDisplay > rowCount && `${rowCount} out of ${rowCount} items`}\n {rowsToDisplay <= rowCount && `${rowsToDisplay} out of ${rowCount} items`}\n </span>\n {rowsToDisplay <= rowCount && <Button onClick={handleLoadMore}>Load more</Button>}\n </div>\n </div>\n );\n});\n\ntype SeriesHeadersProps = {\n series: ChartData;\n summary?: ChartData;\n};\nfunction SeriesHeadersTop({ series, summary }: SeriesHeadersProps) {\n return (\n <>\n {summary && (\n <Table.Column align=\"center\" borders=\"lrb\" colSpan={summary.dataLabels.length}>\n {summary.yColumn.label}\n </Table.Column>\n )}\n <Table.Column align=\"center\" borders=\"lrb\" colSpan={series.dataLabels.length}>\n {series.yColumn.label}\n </Table.Column>\n </>\n );\n}\n\nfunction SeriesHeadersBottom({ series, summary }: SeriesHeadersProps) {\n return (\n <>\n {summary &&\n summary.dataLabels.map((label, idx) => (\n <Table.Column\n align=\"center\"\n key={`sum_${idx}`}\n borders={`b${idx === 0 ? 'l' : idx === summary.dataLabels.length - 1 ? 'r' : ''}`}\n >\n <HeaderLabel label={label} />\n </Table.Column>\n ))}\n {series.dataLabels.map((label, idx) => (\n <Table.Column\n align=\"center\"\n key={`sr_${idx}`}\n borders={`b${idx === 0 ? 'l' : idx === series.dataLabels.length - 1 ? 'r' : ''}`}\n >\n <HeaderLabel label={label} />\n </Table.Column>\n ))}\n </>\n );\n}\n\ntype LabelProps = {\n label: string | string[];\n};\nfunction HeaderLabel({ label }: LabelProps) {\n if (Array.isArray(label)) {\n return (\n <>\n {label.map(l => (\n <span key={l} className=\"block nowrap\">\n {l}\n </span>\n ))}\n </>\n );\n }\n\n return <span className=\"block nowrap\">{label}</span>;\n}\n\ntype SeriesCellsProps = {\n uniqueId: string;\n series?: DataSet;\n summary?: DataSet;\n summaryFiller: number[];\n};\n\nfunction SeriesCells({ uniqueId, series, summary, summaryFiller }: SeriesCellsProps) {\n return (\n <>\n {summary &&\n summary.values.formatted.map((value, idx) => (\n <Table.Cell\n borders={`b${idx === 0 ? 'l' : idx === summary.values.formatted.length - 1 ? 'r' : ''}`}\n key={`row_${uniqueId}_summary_${idx}`}\n >\n {value || '-'}\n <Cells.ValueChange value={summary.changes?.formatted[idx]} raw={summary.changes?.raw[idx]} />\n </Table.Cell>\n ))}\n {!summary &&\n summaryFiller.map((_value, idx) => (\n <Table.Cell\n borders={`b${idx === 0 ? 'l' : idx === summaryFiller.length - 1 ? 'r' : ''}`}\n key={`row_${uniqueId}_summary_${idx}`}\n >\n {'-'}\n <Cells.ValueChange value={''} raw={0} />\n </Table.Cell>\n ))}\n {series.values.formatted.map((value, idx) => (\n <Table.Cell\n borders={`b${idx === 0 ? 'l' : idx === series.values.formatted.length - 1 ? 'r' : ''}`}\n key={`row_${uniqueId}_series_${idx}`}\n >\n {value || '-'}\n <Cells.ValueChange value={series.changes?.formatted[idx]} raw={series.changes?.raw[idx]} />\n </Table.Cell>\n ))}\n </>\n );\n}\n\nexport { TimeSeriesTable };\n","import { AvailableTemplate, ColumnType, DataTable, ExcelExportDto } from '@ecosystem/export-api';\nimport { DataColumn, ExportOptions, KpiWithChangeColumn } from '../../types';\n\nimport { formatLabel, getExportContext, mapValueToDataCell } from '../../export';\nimport { Formatting } from '../../data/formatting';\nimport { RowDataSets, SeriesAndSummaryData, getNullFillerRow, getRowDataSets } from './data';\n\nexport const chartDataToExcelData = (\n { fileHeaderSettings, fileName }: ExportOptions,\n chartData: SeriesAndSummaryData,\n xColumn: DataColumn,\n yColumn: DataColumn,\n currency: string\n): ExcelExportDto => {\n const exportData: ExcelExportDto = {\n template: AvailableTemplate.Excel,\n name: fileName,\n worksheets: [\n {\n context: getExportContext(fileHeaderSettings ?? null),\n worksheetName: 'time series',\n data: createWorksheetData(chartData, xColumn, yColumn, currency),\n },\n ],\n };\n return exportData;\n};\n\nfunction createSummaryColumns(chartData: SeriesAndSummaryData) {\n return (chartData.summary?.dataLabels || []).map(summaryLabel => ({\n type: ColumnType.Text,\n header: (Array.isArray(summaryLabel) ? summaryLabel : [summaryLabel]).join('-'),\n style: { width: 20 },\n }));\n}\n\nfunction createSeriesColumns(chartData: SeriesAndSummaryData) {\n return (chartData.series.dataLabels || []).map(dataLabel => ({\n type: ColumnType.Text,\n header: formatLabel(dataLabel),\n style: {\n width: 17,\n },\n }));\n}\n\nfunction createTotalsRow(chartData: SeriesAndSummaryData, yColumn: KpiWithChangeColumn) {\n return [\n {\n type: ColumnType.Text,\n value: yColumn.label,\n },\n {\n type: ColumnType.Text,\n value: 'Market',\n },\n ...(chartData.summary?.totalsDataSet?.values.raw.map(value =>\n mapValueToDataCell(value, yColumn.formatHint, yColumn.dataType)\n ) || []),\n ...(chartData.series.totalsDataSet?.values.raw.map(value =>\n mapValueToDataCell(value, yColumn.formatHint, yColumn.dataType)\n ) || []),\n ];\n}\nfunction createSeriesRows(\n rowDataSets: RowDataSets[],\n yColumnWithChange: KpiWithChangeColumn,\n summaryFiller: number[],\n seriesFiller: number[]\n) {\n return rowDataSets.map(set => {\n return [\n {\n type: ColumnType.Text,\n value: yColumnWithChange.label,\n },\n {\n type: ColumnType.Text,\n value: set.label,\n },\n ...(set.summarySet?.values.raw || summaryFiller).map(value =>\n mapValueToDataCell(value, yColumnWithChange.formatHint, yColumnWithChange.dataType)\n ),\n ...(set.seriesSet.values.raw || seriesFiller).map(value =>\n mapValueToDataCell(value, yColumnWithChange.formatHint, yColumnWithChange.dataType)\n ),\n ];\n });\n}\n\nfunction createTotalChangesRow(chartData: SeriesAndSummaryData, yColumnWithChange: KpiWithChangeColumn) {\n return [\n {\n type: ColumnType.Text,\n value: yColumnWithChange.label + ' change',\n },\n {\n type: ColumnType.Text,\n value: 'Market',\n },\n ...(chartData.summary?.totalsDataSet?.changes?.raw.map(value =>\n mapValueToDataCell(value, yColumnWithChange.changeFormatHint, yColumnWithChange.dataType)\n ) || []),\n ...(chartData.series.totalsDataSet?.changes?.raw.map(value =>\n mapValueToDataCell(value, yColumnWithChange.changeFormatHint, yColumnWithChange.dataType)\n ) || []),\n ];\n}\n\nfunction createChangeSeriesRows(\n rowDataSets: RowDataSets[],\n yColumnWithChange: KpiWithChangeColumn,\n summaryFiller: number[],\n seriesFiller: number[]\n) {\n return rowDataSets.map(set => {\n return [\n {\n type: ColumnType.Text,\n value: yColumnWithChange.label + ' change',\n },\n {\n type: ColumnType.Text,\n value: set.label,\n },\n ...(set.summarySet?.changes?.raw || summaryFiller).map(value =>\n mapValueToDataCell(value, yColumnWithChange.changeFormatHint, yColumnWithChange.dataType)\n ),\n ...(set.seriesSet?.changes?.raw || seriesFiller).map(value =>\n mapValueToDataCell(value, yColumnWithChange.changeFormatHint, yColumnWithChange.dataType)\n ),\n ];\n });\n}\n\nexport const createWorksheetData = (\n chartData: SeriesAndSummaryData,\n xColumn: DataColumn,\n yColumn: DataColumn,\n currency: string\n): DataTable => {\n const includeTotals = chartData.series.totalsDataSet !== undefined;\n const yColumnWithChange = yColumn as KpiWithChangeColumn;\n\n const rowDataSets = getRowDataSets(chartData);\n const summaryFiller = getNullFillerRow(chartData.summary);\n const seriesFiller = getNullFillerRow(chartData.series);\n\n return {\n currencySymbol: Formatting.getCurrencySymbol(currency) || currency,\n dataColumns: [\n { type: ColumnType.Text, header: 'KPI' },\n { type: ColumnType.Text, header: xColumn.label },\n\n ...(chartData.summary ? createSummaryColumns(chartData) : []),\n ...createSeriesColumns(chartData),\n ],\n dataRows: [\n includeTotals ? createTotalsRow(chartData, yColumnWithChange) : [],\n ...createSeriesRows(rowDataSets, yColumnWithChange, summaryFiller, seriesFiller),\n includeTotals ? createTotalChangesRow(chartData, yColumnWithChange) : [],\n ...createChangeSeriesRows(rowDataSets, yColumnWithChange, summaryFiller, seriesFiller),\n ].filter(Boolean),\n };\n};\n","import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { AddInsightToCollectionsButton } from '@ecosystem/newron-client-collections';\nimport { ExcelExportDto, PowerpointExportDto } from '@ecosystem/export-api';\n\nimport { Loading } from '../../design/loading/Loading';\nimport {\n DataColumn,\n DataVizType,\n ExportFormat,\n ExportOptions,\n DataWarning,\n CollectionOptions,\n EventElementCategory,\n} from '../../types';\nimport { ChartData } from '../data/common';\nimport { DataContentProps } from '../../content/types';\nimport { makeTimeSeriesData } from './data';\nimport { TimeSeriesChart } from './timeSeries.chart';\nimport { TimeSeriesTable } from './timeSeries.table';\nimport { Instructions } from '../../content/instructions';\nimport { DataVizToggle } from '../../components/dataviz.toggle';\nimport { ExportButton } from '../../export/export.button';\nimport { chartDataToExcelData } from './chartDataToExportData';\nimport { useCorePageState } from '../../page/provider';\nimport { chartToPptData } from '../../export/utils/chartToPptData';\nimport { ChartTitle } from '../../design/charts/parts';\nimport { ExportHideout } from '../../export/ExportHideout';\nimport { WarningsDisplay } from '../../design/warning/warningsDisplay';\nimport { InsightCollectionDataType, InsightData } from '../../content/collection/types';\nimport { useOnCollectionExportReady } from '../collection/useOnCollectionExportReady';\nimport { useTrackChartTooltipEvent } from '../../analytics/trackChartInteractions.hook';\nimport { mapDataVizForChartType, trackPageElementClicked } from '../../analytics/utils';\nimport GenericWarnings from '../../design/warning/GenericWarnings';\nimport { createViewStateFn } from '../../tools/createViewState';\nimport { shouldDisableGroupAnalyticsSharing } from '../../page/heading/utils';\n\nconst dataVizTypesWithoutChart = [DataVizType.lineChart, DataVizType.table];\nconst dataVizTypesWithChart = [DataVizType.chart, ...dataVizTypesWithoutChart];\nconst defaultDataVizType = DataVizType.chart;\n\nexport type TimeSeriesChartData = {\n series: ChartData;\n summary?: ChartData;\n exportSeries?: ChartData[];\n};\n\nfunction TimeSeries({\n data,\n isLoading,\n isEnrichmentLoading,\n instructions = {},\n componentSettings,\n paramsForData,\n paramsForContext,\n ComponentActionsContainer,\n collection,\n updateSettings,\n trackEvent,\n componentMetadata,\n componentHeadingTitle,\n proposition,\n}: DataContentProps) {\n const [dataStamp, setDataStamp] = useState<number>();\n const [chartData, setChartData] = useState<TimeSeriesChartData>();\n const [xColumn, setXColumn] = useState<DataColumn>();\n const [yColumn, setYColumn] = useState<DataColumn>();\n const [warnings, setWarnings] = useState<DataWarning[]>();\n const [currency, setCurrency] = useState<string>();\n const chartSliceRefs = useRef<HTMLDivElement[]>([]);\n\n const [exportModalOpen, setExportModalOpen] = useState(false);\n const { dsl, page, context, data: dataInfo, collection: collectionInfo, globalWarnings } = useCorePageState();\n\n const allColumns = data?.getAllColumns() ?? [];\n\n useOnCollectionExportReady({ collection, dsl, chartSliceRefs, componentSettings, allColumns, componentHeadingTitle });\n\n const myInstructions = new Instructions(instructions, componentSettings);\n\n const xColumnName = myInstructions.getString('xColumn');\n const yColumnName = myInstructions.getString('yColumn');\n const exportOptions = myInstructions.getObject('export') as ExportOptions;\n const collectionOptions = myInstructions.getObject('collection') as CollectionOptions;\n\n const disableCollectionButton = shouldDisableGroupAnalyticsSharing();\n\n const { trackTooltipEvent } = useTrackChartTooltipEvent(\n componentSettings,\n !!collection,\n collectionOptions?.chartName\n );\n\n const selectedKpis = componentSettings.kpi;\n\n const displayAs = componentSettings.dataViz?.length ? (componentSettings.dataViz[0] as DataVizType) : undefined;\n\n const updateData = () => {\n if (!data) {\n return;\n }\n\n const chartData = makeTimeSeriesData(data, {\n xColumnName,\n yColumnName,\n });\n if (chartData) {\n setCurrency(data.getCurrency());\n setWarnings(data.getDataWarnings(selectedKpis));\n setChartData(chartData);\n setDataStamp(data.stamp);\n setXColumn(data.getDataColumns().find(col => col.name === xColumnName));\n setYColumn(data.getDataColumns().find(col => col.name === yColumnName));\n }\n };\n\n const handleDataVizChange = useCallback(\n (value: DataVizType) => {\n updateSettings({\n ...componentSettings,\n dataViz: [value],\n });\n trackPageElementClicked(trackEvent, mapDataVizForChartType(value), {\n elementCategory: mapDataVizForChartType(value) as EventElementCategory,\n });\n },\n [componentSettings, updateSettings, trackEvent]\n );\n\n /* eslint-disable react-hooks/exhaustive-deps */\n useEffect(() => {\n if (data) {\n collection?.onLoaded();\n }\n }, [data]);\n\n const canAggregate = useMemo(() => {\n return chartData ? chartData.series.yColumn.canAggregate : undefined;\n }, [chartData]);\n\n /* eslint-disable react-hooks/exhaustive-deps */\n useEffect(() => {\n if (!data || data.stamp === dataStamp) {\n return;\n }\n updateData();\n }, [data]);\n\n useEffect(() => {\n if (!exportModalOpen) {\n chartSliceRefs.current = [];\n }\n }, [exportModalOpen]);\n\n /* eslint-disable react-hooks/exhaustive-deps */\n useEffect(() => {\n updateData();\n }, [yColumnName]);\n\n useEffect(() => {\n if (canAggregate === undefined) {\n return;\n }\n\n let requiredValue = displayAs || defaultDataVizType;\n\n if (!canAggregate && requiredValue === DataVizType.chart) {\n requiredValue = DataVizType.lineChart;\n }\n\n if (requiredValue !== displayAs) {\n handleDataVizChange(requiredValue);\n }\n }, [displayAs, canAggregate, handleDataVizChange]);\n\n const getExportData = async (exportFormat: ExportFormat): Promise<PowerpointExportDto | ExcelExportDto> => {\n const allColumns = [...data.getAvailableColumns(), ...data.getDataColumns()];\n switch (exportFormat) {\n case ExportFormat.Xlsx:\n return chartDataToExcelData(exportOptions, chartData, xColumn, yColumn, currency);\n\n case ExportFormat.Pptx:\n return await chartToPptData(\n exportOptions,\n dsl,\n chartData.series.yColumn.label,\n chartSliceRefs.current,\n componentSettings,\n allColumns,\n componentHeadingTitle\n );\n\n default:\n break;\n }\n };\n\n const warningSettings = { appendKpis: true };\n\n const exportSeriesByChartType = (chartData: TimeSeriesChartData, displayAs: DataVizType) => {\n if (displayAs === DataVizType.lineChart) {\n return [chartData.series];\n } else {\n return chartData.exportSeries;\n }\n };\n const getTrackingTags = () => {\n return {\n section: 'some section',\n subsection: 'some subsection',\n pageName: 'some page name',\n itemGroup: 'some item group',\n locationId: 'some location id',\n };\n };\n return (\n <>\n <WarningsDisplay warnings={warnings} className=\"pt-15\" settings={warningSettings} />\n {chartData && ComponentActionsContainer && (\n <ComponentActionsContainer>\n {collectionOptions && collectionInfo && (\n <AddInsightToCollectionsButton<InsightData, {}>\n type={collectionOptions.collectionKey}\n selectDataType\n proposition={proposition}\n disabled={isLoading || disableCollectionButton}\n createInsightDataFn={(dataType: InsightCollectionDataType) => ({\n content: {\n type: collectionOptions.type,\n dataOptions: collectionOptions.dataOptions,\n },\n paramsForData,\n paramsForContext,\n proposition,\n dataType,\n corePageSettings: { context, data: dataInfo, page, collection: collectionInfo },\n componentSettings,\n })}\n getTrackingTags={getTrackingTags}\n createViewStateFn={createViewStateFn}\n />\n )}\n {exportOptions && (\n <ExportButton\n trackingSourceData={data}\n componentSettings={componentSettings}\n componentMetadata={componentMetadata}\n disabled={isLoading}\n exportFormats={[ExportFormat.Xlsx, ExportFormat.Pptx]}\n getExportData={getExportData}\n exportContentRef={chartSliceRefs}\n onModalVisibilityChange={isVisible => setExportModalOpen(isVisible)}\n trackEvent={trackEvent}\n />\n )}\n {displayAs && canAggregate !== undefined && (\n <DataVizToggle\n options={canAggregate ? dataVizTypesWithChart : dataVizTypesWithoutChart}\n value={displayAs}\n onChange={handleDataVizChange}\n />\n )}\n </ComponentActionsContainer>\n )}\n <div className=\"timeseries relative pt-4 w-full max-w-full\">\n <Loading isActive={isLoading || isEnrichmentLoading} withIndicator />\n {chartData && displayAs === DataVizType.table && (\n // <TimeSeriesTable series={chartData.series} summary={chartData.summary} xColumn={xColumn} />\n <>\n <TimeSeriesTable series={chartData.series} summary={chartData.summary} xColumn={xColumn} />\n {(exportModalOpen || collection) && (\n <>\n {exportSeriesByChartType(chartData, displayAs).map((series, index) => (\n <ExportHideout key={index}>\n <div ref={element => (chartSliceRefs.current[index] = element)}>\n {globalWarnings && <GenericWarnings warnings={globalWarnings} />}\n <WarningsDisplay warnings={warnings} className=\"pt-15\" settings={warningSettings} />\n <TimeSeriesTable series={series} summary={chartData.summary} xColumn={xColumn} />\n </div>\n </ExportHideout>\n ))}\n </>\n )}\n </>\n )}\n {chartData && displayAs && displayAs !== DataVizType.table && (\n <>\n <ChartTitle title={chartData.series.yColumn.label} />\n <TimeSeriesChart\n displayAs={displayAs}\n series={chartData.series}\n summary={chartData.summary}\n currency={currency}\n trackTooltipEvent={trackTooltipEvent}\n />\n {(exportModalOpen || collection) && (\n <>\n {exportSeriesByChartType(chartData, displayAs).map((series, index) => (\n <ExportHideout key={index}>\n <div ref={element => (chartSliceRefs.current[index] = element)}>\n {globalWarnings && <GenericWarnings warnings={globalWarnings} />}\n <WarningsDisplay warnings={warnings} className=\"pt-15\" settings={warningSettings} />\n <TimeSeriesChart\n displayAs={displayAs}\n series={series}\n summary={chartData.summary}\n currency={currency}\n trackTooltipEvent={trackTooltipEvent}\n />\n </div>\n </ExportHideout>\n ))}\n </>\n )}\n </>\n )}\n </div>\n </>\n );\n}\nexport { TimeSeries };\n","import React from 'react';\nimport { ContentProps } from '../../content/types';\n\nfunction UnknownElement({ type }: ContentProps) {\n return (\n <div className=\"border border-ui-red rounded px-6 text-ui-red py-4\">\n No element found in register with name <span className=\"font-bold\">'{type}'</span>\n </div>\n );\n}\n\nexport { UnknownElement };\n","import React, { useEffect, useState } from 'react';\nimport { DataContentProps } from '../../newron-core';\nimport { Instructions } from '../../content/instructions';\nimport { Loading } from '../../design/loading/Loading';\nimport { makeTrendsInfo } from './data';\nimport { TrendsInfo, KpiTrendChart } from '../../design/charts';\n\nfunction KpiTrends({ data, isLoading, instructions = {}, componentSettings }: DataContentProps) {\n const [dataStamp, setDataStamp] = useState<number>();\n const [info, setInfo] = useState<TrendsInfo>();\n\n const myInstructions = new Instructions(instructions, componentSettings);\n\n const grouping = myInstructions.getString('grouping');\n const kpis = myInstructions.getStringList('kpis');\n\n useEffect(() => {\n if (!data || dataStamp === data.stamp) {\n return;\n }\n const info = makeTrendsInfo(data, grouping, kpis);\n setInfo(info);\n setDataStamp(data.stamp);\n }, [data, grouping, kpis, dataStamp]);\n\n return (\n <>\n <div className=\"relative\">\n <Loading isActive={isLoading} withIndicator />\n {info && <KpiTrendChart info={info} />}\n </div>\n </>\n );\n}\n\nexport { KpiTrends };\n","import { Formatting } from '../../data/formatting';\nimport { DataStore } from '../../data/store';\nimport { TrendRow, TrendValue, TrendsInfo } from '../../design/charts';\nimport { DataColumn } from '../../types';\n\nexport function makeTrendsInfo(data: DataStore, grouping: string, columnNames: string[]): TrendsInfo | undefined {\n const dataColumns: DataColumn[] = [];\n columnNames.forEach(name => {\n const column = data.getDataColumns().find(col => col.name === name);\n if (column && column?.arrayLength !== null) {\n dataColumns.push(column);\n }\n });\n\n const dataSrc = data.getGroupedData([grouping])[0];\n if (!dataSrc || dataSrc.data.length === 0) {\n return;\n }\n const rows: TrendRow[] = [];\n dataColumns.forEach(column => {\n const values = dataSrc.data[0].values[column.name] as (number | null)[];\n let valuesList: TrendValue[] = values\n ? values.map(value => ({\n raw: value,\n formatted: Formatting.format(value, {\n dataType: column.dataType,\n formatHint: column.formatHint,\n currency: data.getCurrency(),\n }),\n }))\n : Array(column.arrayLength)\n .fill(null)\n .map(_ => ({\n raw: null,\n formatted: '-',\n }));\n\n rows.push({\n label: column.label,\n values: valuesList,\n });\n });\n\n return {\n rows,\n periods: dataSrc.timeFrame.periods.map(p => p.name),\n };\n}\n","import { Formatting } from '../../data/formatting';\nimport { DataStore } from '../../data/store';\nimport { DataColumn, DataRow, DataType, FormatHint, KpiWithChangeColumn } from '../../types';\nimport { BoardInfo, BoardRow, ColumnConfig, Sorting, ValueColor } from './types';\n\ntype RowBase = {\n id: string;\n name: string;\n highlight: string;\n sortValue: number;\n values: (number | string | null)[];\n rank: number;\n};\n\ntype ColumnInfo = {\n name: string;\n label: string;\n isChange: boolean;\n formatHint?: FormatHint;\n currency: string;\n dataType: DataType;\n arrayLength: number | null;\n};\n\nexport function makeBillboardInfo(\n data: DataStore,\n options: {\n title?: string;\n grouping: string;\n highlight: string;\n highlightColumn?: string;\n siblingBuffer: number;\n limit: number;\n columnConfigs: ColumnConfig[];\n sorting?: Sorting;\n }\n): BoardInfo {\n const { title, grouping, highlight, highlightColumn, limit, sorting, columnConfigs, siblingBuffer } = options;\n const groupedData = data.getGroupedData([grouping])[0] ?? { data: [] };\n const columns = data.getDataColumns();\n const currency = data.getCurrency();\n\n const board: BoardInfo = {\n title,\n rows: [],\n columns: [],\n };\n\n if (groupedData.data.length === 0) {\n return board;\n }\n\n const columnInfos = columnConfigs.map(config => getColumnInfo(columns, currency, config));\n\n const baseRows: RowBase[] = groupedData.data.map(row => {\n const identifiers = DataStore.getRowIdentifiers(row, columns, grouping);\n return {\n id: identifiers.id,\n name: identifiers.name,\n highlight: highlightColumn ? String(row.values[highlightColumn]) : identifiers.id,\n sortValue: sorting ? DataStore.getCellsLatestValue(row, sorting.by) : undefined,\n values: columnInfos.map(inf => getValue(row, inf)),\n rank: -1,\n };\n });\n\n if (sorting) {\n baseRows.sort((a, b) => (sorting.direction === 'asc' ? a.sortValue - b.sortValue : b.sortValue - a.sortValue));\n }\n\n baseRows.forEach((row, idx) => {\n row.rank = idx + 1;\n });\n\n const limitedRows = baseRows.slice(0, limit);\n\n let outOfStackRows: RowBase[] | undefined;\n if (!limitedRows.find(row => row.highlight === highlight)) {\n const outOfStackIndex = baseRows.findIndex(row => row.highlight === highlight);\n if (outOfStackIndex !== -1) {\n const startIndex =\n outOfStackIndex - siblingBuffer > limitedRows.length ? outOfStackIndex - siblingBuffer : limitedRows.length;\n const endIndex = outOfStackIndex + siblingBuffer + 1;\n outOfStackRows = baseRows.slice(startIndex, endIndex);\n }\n }\n\n let haveHighlighted = false;\n board.rows = [];\n limitedRows.forEach(row => {\n const matchesHighlight = row.highlight === highlight;\n board.rows.push(makeBoardRow(row, !haveHighlighted && matchesHighlight, columnInfos));\n if (matchesHighlight) {\n haveHighlighted = true;\n }\n });\n\n if (outOfStackRows) {\n board.outOfStackRows = [];\n outOfStackRows.forEach(row => {\n const matchesHighlight = row.highlight === highlight;\n board.outOfStackRows.push(makeBoardRow(row, !haveHighlighted && matchesHighlight, columnInfos));\n if (matchesHighlight) {\n haveHighlighted = true;\n }\n });\n }\n\n board.columns = columnInfos.map(inf => inf.label);\n return board;\n}\n\nfunction getValue(row: DataRow, columnInfo: ColumnInfo): number | string | null {\n const value = row.values[columnInfo.name];\n if (Array.isArray(value)) {\n return value[value.length - 1];\n }\n\n return value;\n}\n\nfunction makeBoardRow(row: RowBase, isHighlighted: boolean, columnInfos: ColumnInfo[]): BoardRow {\n return {\n label: row.name,\n id: row.id,\n rank: row.rank,\n isHighlighted: isHighlighted,\n columns: columnInfos.map((inf, idx) => ({\n value: Formatting.format(row.values[idx], {\n dataType: inf.dataType,\n formatHint: inf.formatHint,\n isChange: inf.isChange,\n hyphenForNull: true,\n currency: inf.currency,\n }),\n color: getValueColor(row.values[idx], inf.isChange),\n name: '',\n })),\n };\n}\n\nfunction getValueColor(value: number | string | null, isChange: boolean): ValueColor {\n if (typeof value === 'string' || value === null) {\n return 'text-inactive';\n }\n if (!isChange) {\n return 'text-default';\n }\n return value < 0 ? 'text-ui-red' : 'text-ui-green';\n}\n\nfunction getColumnInfo(columns: DataColumn[], currency: string, config?: ColumnConfig): ColumnInfo | undefined {\n if (!config) {\n return;\n }\n\n const column = columns.find(col => col.name === config.name);\n if (column) {\n return {\n name: column.name,\n label: config.label || column.label,\n dataType: column.dataType,\n formatHint: column.formatHint,\n isChange: false,\n arrayLength: column.arrayLength,\n currency,\n };\n }\n\n const changeColumn = columns.find(\n col => (col as KpiWithChangeColumn)?.changeName === config.name\n ) as KpiWithChangeColumn;\n if (changeColumn) {\n return {\n name: changeColumn.changeName,\n label: config.label || changeColumn.changeName,\n dataType: changeColumn.changeDataType,\n formatHint: changeColumn.changeFormatHint,\n isChange: true,\n arrayLength: changeColumn.arrayLength,\n currency,\n };\n }\n}\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./billboard.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./billboard.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { DataContentProps } from '../../newron-core';\nimport { Instructions } from '../../content/instructions';\nimport { BoardInfo, BoardRow, ColumnConfig, Sorting } from './types';\nimport { makeBillboardInfo } from './data';\nimport { Loading } from '../../design/loading/Loading';\nimport { getExportContainer } from '../../export';\nimport './billboard.css';\nimport { useCorePageState } from '../../page/provider';\nimport { useOnCollectionExportReady } from '../collection/useOnCollectionExportReady';\nimport GenericWarnings from '../../design/warning/GenericWarnings';\n\nfunction Billboard({\n data,\n isLoading,\n instructions = {},\n componentSettings,\n componentName,\n collection,\n componentHeadingTitle,\n}: DataContentProps) {\n const [dataStamp, setDataStamp] = useState<number>();\n const [info, setInfo] = useState<BoardInfo>();\n const { dsl, globalWarnings } = useCorePageState();\n const exportRef = useRef<HTMLDivElement[]>([]);\n\n const allColumns = data?.getAllColumns() ?? [];\n\n useOnCollectionExportReady({\n collection,\n dsl,\n chartSliceRefs: exportRef,\n componentName,\n componentSettings,\n allColumns,\n componentHeadingTitle,\n });\n\n const moBillboardKpi = componentSettings?.moBillboardKpi;\n\n const [prevMoBillboardKpi, setPrevMoBillboardKpi] = useState(moBillboardKpi);\n\n const kpiName = moBillboardKpi?.length ? moBillboardKpi[0] : 'Unknown name';\n const kpiLabel = data?.getDataColumn(kpiName)?.label || 'Unknown label';\n\n const myInstructions = new Instructions(instructions, componentSettings);\n\n const grouping = myInstructions.getString('grouping');\n const highlight = myInstructions.getString('highlight');\n const highlightColumn = myInstructions.getString('highlightColumn');\n const siblingBuffer = myInstructions.getNumber('siblingBuffer', 1);\n let title = myInstructions.getString('title');\n const limit = myInstructions.getNumber('limit', 10);\n const sortingInstructions = myInstructions.getObject('sorting') as Sorting;\n const asCard = myInstructions.getBoolean('asCard', true);\n const firstCol = myInstructions.getObject('firstColumn') as ColumnConfig;\n const secondCol = myInstructions.getObject('secondColumn') as ColumnConfig;\n let columns = myInstructions.getObject('columns', []) as ColumnConfig[];\n\n if (title) {\n title = myInstructions.getString('title').replace('[colName]', kpiLabel);\n }\n\n if (moBillboardKpi) {\n columns = columns.map((col: ColumnConfig) => {\n if (col.name === 'first_activity') {\n return col;\n }\n return {\n name: col.name.includes('change_') ? `change_${kpiName}` : kpiName,\n label: col.name.includes('change_') ? col.label : kpiLabel,\n };\n });\n }\n\n const sorting = {\n by: sortingInstructions?.by.includes('change_') ? `change_${kpiName}` : kpiName,\n direction: sortingInstructions?.direction || 'desc',\n } as Sorting;\n\n if (firstCol) {\n columns.push(firstCol);\n }\n if (secondCol) {\n columns.push(secondCol);\n }\n\n if (moBillboardKpi !== prevMoBillboardKpi) {\n setPrevMoBillboardKpi(moBillboardKpi);\n setDataStamp(0);\n }\n\n /* eslint-disable react-hooks/exhaustive-deps */\n useEffect(() => {\n if (!data || data.stamp === dataStamp) {\n return;\n }\n\n const info = makeBillboardInfo(data, {\n title,\n grouping,\n highlight,\n highlightColumn,\n sorting,\n columnConfigs: columns,\n limit,\n siblingBuffer,\n });\n\n setInfo(info);\n setDataStamp(data.stamp);\n }, [data, grouping, highlight, highlightColumn, title, limit, sorting, columns]);\n\n useEffect(() => {\n if (data) {\n collection?.onLoaded();\n }\n }, [data]);\n\n const getBillboard = (info: BoardInfo) => {\n return (\n <>\n {info.title && <div className=\"text-lg pb-2\">{info.title}</div>}\n <table className=\"w-full\">\n <thead>\n <tr>\n <th />\n {info.columns.map(col => (\n <th className=\"w-1 font-normal text-lighter text-sm pl-6 nowrap\" align=\"right\" key={col}>\n {col}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {info.rows.length === 0 && (\n <tr>\n <td>\n <span>No data available for your selected filters, try modifying your selections.</span>\n </td>\n </tr>\n )}\n {info.rows.map((row, idx) => (\n <BoardTableRow key={`${row.id}_${idx}`} row={row} isLast={idx === info.rows.length - 1} />\n ))}\n {info.outOfStackRows && (\n <tr>\n <td colSpan={3}>\n <span className=\"block wavy-separator h-2 bg-dark\" />\n </td>\n </tr>\n )}\n {info.outOfStackRows?.map((row, idx) => (\n <BoardTableRow key={`${row.id}_${idx}`} row={row} isLast={idx === info.outOfStackRows.length - 1} />\n ))}\n </tbody>\n </table>\n </>\n );\n };\n\n const ExportContainer = useMemo(() => getExportContainer(componentName), []);\n\n return (\n <>\n <div className={`billboard flex-1 h-full relative min-w-72 ${asCard ? 'bg-white rounded-2 p-4' : ''}`}>\n <Loading isActive={isLoading} withIndicator />\n {info && getBillboard(info)}\n <ExportContainer>\n {info && (\n <div className={`${componentName}-export-slide`} ref={el => (exportRef.current = [el])}>\n {globalWarnings && <GenericWarnings warnings={globalWarnings} />}\n {getBillboard(info)}\n </div>\n )}\n </ExportContainer>\n </div>\n </>\n );\n}\n\ntype RowProps = {\n row: BoardRow;\n isLast: boolean;\n};\nfunction BoardTableRow({ row, isLast }: RowProps) {\n const { label, rank, columns, isHighlighted } = row;\n return (\n <tr className={`${!isLast ? 'border-b border-light' : ''}`}>\n <td className=\"py-2\">\n <span className={`flex flex-row gap-2 align-baseline ${isHighlighted ? 'font-bold' : ''}`}>\n <span>{rank}.</span>\n <span className=\"flex-1 break-word\">{label}</span>\n </span>\n </td>\n {columns.map((column, idx) => (\n <td key={`${row.id}_col${idx}`} align=\"right\" className={`text-lg font-bold pl-6 py-2 nowrap ${column.color}`}>\n {column.value}\n </td>\n ))}\n </tr>\n );\n}\n\nexport { Billboard };\n","import React from 'react';\nimport { feedbackV2 } from '@ecosystem/newron-design-system';\nimport { ContentProps } from '../../newron-core';\nimport { Instructions } from '../../content/instructions';\nimport { AlertType } from './types';\n\nconst { Alert } = feedbackV2;\n\nfunction AlertPanel({ instructions = {}, componentSettings }: ContentProps) {\n const myInstructions = new Instructions(instructions, componentSettings);\n const type = (myInstructions.getString('type') || 'info') as AlertType;\n const message = myInstructions.getString('message') || 'No message configured';\n\n return <Alert title={message} type={type} />;\n}\n\nexport { AlertPanel };\n","import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { DataContentProps, useUiAction } from '../../newron-core';\nimport { Instructions } from '../../content/instructions';\nimport { Loading } from '../../design/loading/Loading';\nimport { KpiTrendChart, TrendsInfo } from '../../design/charts';\nimport { makeTrendInfo } from './data';\nimport { ClickableCard } from '../../design/clickable.card/card';\nimport { TrendClickAction } from './types';\nimport { getExportContainer } from '../../export';\nimport { useOnCollectionExportReady } from '../collection/useOnCollectionExportReady';\nimport { useCorePageState } from '../../page/provider';\n\nfunction SingleKpiTrend({\n data,\n isLoading,\n instructions = {},\n componentSettings,\n componentName,\n collection,\n}: DataContentProps) {\n const [dataStamp, setDataStamp] = useState<number>();\n const [chartInfo, setChartInfo] = useState<{ info: TrendsInfo; title?: string }>();\n const { perform } = useUiAction();\n const { dsl } = useCorePageState();\n const exportRef = useRef<HTMLDivElement[]>([]);\n\n useOnCollectionExportReady({ collection, dsl, chartSliceRefs: exportRef, componentName });\n\n const myInstructions = new Instructions(instructions, componentSettings);\n\n const title = myInstructions.getString('title');\n const asCard = myInstructions.getBoolean('asCard', false);\n const grouping = myInstructions.getString('grouping');\n const kpi = myInstructions.getString('kpi');\n const secondaryKpi = myInstructions.getString('secondaryKpi');\n const includeTotals = myInstructions.getBoolean('includeTotals', false);\n const totalName = myInstructions.getString('totalName');\n const clickAction = myInstructions.getObject('clickAction') as TrendClickAction;\n\n useEffect(() => {\n if (!data || dataStamp === data.stamp) {\n return;\n }\n const chartInfo = makeTrendInfo(data, { grouping, kpi, secondaryKpi, includeTotals, totalName, title });\n setChartInfo(chartInfo);\n setDataStamp(data.stamp);\n }, [data, grouping, kpi, secondaryKpi, includeTotals, totalName, title, dataStamp]);\n\n useEffect(() => {\n if (data) {\n collection?.onLoaded();\n }\n }, [data]);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const ExportContainer = useMemo(() => getExportContainer(componentName), []);\n\n const handleClick = () => {\n perform(clickAction.action, {\n kpi: [kpi],\n });\n };\n return (\n <ClickableCard\n outerCss=\"single-trend-card\"\n innerCss={`${isLoading ? 'h-52' : ''}`}\n asCard={asCard}\n onClick={clickAction && !isLoading ? handleClick : undefined}\n linkText={clickAction?.label}\n >\n <Loading isActive={isLoading} withIndicator />\n {chartInfo?.title && <div className=\"pb-1\">{chartInfo.title}</div>}\n {chartInfo && <KpiTrendChart info={chartInfo.info} />}\n {chartInfo && (\n <ExportContainer>\n <div className={`${componentName}-export-slide`} ref={el => (exportRef.current = [el])}>\n {chartInfo?.title && <div className=\"pb-1\">{chartInfo.title}</div>}\n {<KpiTrendChart info={chartInfo.info} />}\n </div>\n </ExportContainer>\n )}\n </ClickableCard>\n );\n}\n\nexport { SingleKpiTrend };\n","import { Formatting } from '../../data/formatting';\nimport { DataStore } from '../../data/store';\nimport { TrendRow, TrendValue, TrendsInfo } from '../../design/charts';\n\nexport function makeTrendInfo(\n data: DataStore,\n options: {\n grouping: string;\n kpi: string;\n secondaryKpi?: string;\n includeTotals: boolean;\n totalName?: string;\n title?: string;\n }\n): { info: TrendsInfo; title?: string } | undefined {\n const { grouping, kpi, secondaryKpi, includeTotals, totalName, title } = options;\n\n const currency = data.getCurrency();\n const column = data.getDataColumn(kpi);\n const secondaryColumn = secondaryKpi ? data.getDataColumn(secondaryKpi) : undefined;\n\n const dataSrc = data.getGroupedData([grouping])[0];\n if (!column || !dataSrc) {\n return;\n }\n\n const rows: TrendRow[] = [];\n\n if (includeTotals) {\n const totalsData = data.getGroupedData([])[0];\n if (totalsData) {\n const values = totalsData.data[0]?.values[column.name] as (number | null)[];\n const valuesList: TrendValue[] = values\n ? values.map(value => ({\n raw: value,\n formatted: Formatting.format(value, {\n dataType: column.dataType,\n formatHint: column.formatHint,\n currency,\n }),\n }))\n : Array(column.arrayLength)\n .fill(null)\n .map(_ => ({\n raw: null,\n formatted: '-',\n }));\n\n rows.push({\n label: totalName || 'Market',\n isTotals: true,\n values: valuesList,\n });\n }\n }\n\n dataSrc.data.forEach(dataRow => {\n const { name } = DataStore.getRowIdentifiers(dataRow, data.getDataColumns(), grouping);\n const values = dataRow.values[column.name] as (number | null)[];\n const secondaryValues = secondaryColumn ? (dataRow.values[secondaryColumn.name] as (number | null)[]) : undefined;\n const currency = data.getCurrency();\n\n const valuesList: TrendValue[] = values\n ? values.map((value, idx) => ({\n raw: value,\n formatted: Formatting.format(value, {\n dataType: column.dataType,\n formatHint: column.formatHint,\n currency,\n }),\n secondaryFormatted: secondaryValues\n ? Formatting.format(secondaryValues[idx], {\n dataType: secondaryColumn.dataType,\n formatHint: secondaryColumn.formatHint,\n currency,\n })\n : undefined,\n }))\n : Array(column.arrayLength)\n .fill(null)\n .map(_ => ({\n raw: null,\n formatted: '-',\n }));\n\n rows.push({\n label: name,\n values: valuesList,\n });\n });\n\n return {\n info: {\n rows,\n periods: dataSrc.timeFrame.periods.map(p => p.name),\n },\n title,\n };\n}\n","import React, { useState } from 'react';\nimport { elements } from '@ecosystem/newron-design-system';\nimport { Entity } from '../../types';\n\nconst { Icon } = elements;\n\nexport enum HeatmapScale {\n neutral = 'neutral',\n positive1 = 'positive1',\n positive2 = 'positive2',\n positive3 = 'positive3',\n positive4 = 'positive4',\n negative1 = 'negative1',\n negative2 = 'negative2',\n negative3 = 'negative3',\n negative4 = 'negative4',\n}\n\nexport type HeatmapCell = {\n raw: number;\n formatted: string;\n scale: HeatmapScale;\n xName: string;\n yName: string;\n isMissing: boolean;\n};\n\nexport type HeatmapRow = {\n name: string;\n label: string;\n cells: HeatmapCell[];\n};\n\nexport type HeatmapColumn = {\n name: string;\n label: string;\n};\n\nexport type HeatmapInfo = {\n columns: HeatmapColumn[];\n rows: HeatmapRow[];\n};\n\nconst colorMap: Record<HeatmapScale, string> = {\n neutral: 'bg-white text-default',\n positive1: 'bg-green-100 text-default',\n positive2: 'bg-green-200 text-default',\n positive3: 'bg-green-300 text-default',\n positive4: 'bg-green-400 text-default',\n negative1: 'bg-red-100 text-default',\n negative2: 'bg-red-200 text-white',\n negative3: 'bg-red-300 text-white',\n negative4: 'bg-red-400 text-white',\n};\n\ntype Props = {\n info: HeatmapInfo;\n onCellClick?: (xValue: Entity, yValue: Entity) => void;\n limitRows?: number;\n};\nfunction HeatmapTable({ info, onCellClick, limitRows }: Props) {\n const { columns, rows } = info;\n\n const handleCellClick = (rowIdx: number, colIdx: number) => {\n const col = columns[colIdx];\n const row = rows[rowIdx];\n\n onCellClick(\n {\n value: row.name,\n label: row.label,\n },\n {\n value: col.name,\n label: col.label,\n }\n );\n };\n\n let rowsToShow = rows;\n if (limitRows) {\n rowsToShow = rows.slice(0, limitRows);\n }\n return (\n <div className=\"relative max-w-full w-full overflow-x-auto rounded-2\">\n <table className=\"\">\n <thead>\n <tr>\n <th className=\"w-56 sticky left-0 bg-white\" />\n {columns.map((col, idx) => (\n <th\n align=\"left\"\n className={`${idx === 0 ? 'font-bold' : ''} text-sm font-normal px-3 py-2 w-40 min-w-40`}\n key={col.name}\n >\n {col.label}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rowsToShow.map((row, rIdx) => (\n <tr key={row.name} className={`h-11 ${rIdx === 0 ? 'font-bold' : ''}`}>\n <td className=\"h-11 relative overflow-hidden sticky left-0 bg-white\">\n <span className=\"text-sm max-h-11 px-3 nowrap overflow-ellipses relative\">{row.label}</span>\n </td>\n {row.cells.map((cell, cIdx) => (\n <EntryCell\n key={`${row.name}_${cell.yName}`}\n onClick={onCellClick ? () => handleCellClick(rIdx, cIdx) : undefined}\n cell={cell}\n isTotals={rIdx === 0 || cIdx === 0}\n />\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n\ntype CellProps = {\n cell: HeatmapCell;\n isTotals?: boolean;\n onClick?: () => void;\n};\nfunction EntryCell({ cell, isTotals, onClick }: CellProps) {\n const [hovered, setHovered] = useState<boolean>(false);\n const { formatted, isMissing, scale } = cell;\n\n let css = '';\n if (isMissing) {\n css = 'text-inactive';\n } else {\n const bgColor = colorMap[scale];\n css = `${bgColor} ${isTotals ? 'font-bold' : 'font-normal'}`;\n }\n\n return (\n <td className=\"h-11\">\n {(!onClick || isMissing) && (\n <span className={`px-3 h-11 flex flex-row items-center text-xl ${css}`}>{formatted}</span>\n )}\n {onClick && !isMissing && (\n <button\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n className={`px-3 h-11 w-full text-left flex flex-row items-center gap-2 cursor-pointer border-b border-transparent ${css} transition-colors hover:bg-white hover:text-brand hover:border-brand`}\n onClick={onClick}\n >\n <span className=\"flex-1 no-wrap\">{formatted}</span>\n <span className={`transition-opacity ${hovered ? 'opacity-100' : 'opacity-0'}`}>\n <Icon color=\"brand\" size=\"sm\">\n <Icon.icons.Expand />\n </Icon>\n </span>\n </button>\n )}\n </td>\n );\n}\n\nexport { HeatmapTable };\n","import { Formatting } from '../../data/formatting';\nimport { DataStore } from '../../data/store';\nimport { HeatmapInfo, HeatmapColumn, HeatmapRow, HeatmapCell, HeatmapScale } from '../../design/charts/heatmap';\nimport { DataColumn, DataRow, DataRows, Entity } from '../../types';\n\ntype ValueRange = {\n from: number;\n to: number;\n scale: HeatmapScale;\n};\n\nfunction makeHeatmapData(\n data: DataStore,\n options: {\n xGrouping: string;\n yGrouping: string;\n sortX: boolean;\n sortY: boolean;\n kpi: string;\n }\n): HeatmapInfo | undefined {\n const { xGrouping, yGrouping, kpi, sortX, sortY } = options;\n\n const kpiColumn = data.getDataColumns().find(col => col.name === kpi);\n const marketTotal = data.getGroupedData([])[0];\n const xTotals = data.getGroupedData([xGrouping])[0];\n const yTotals = data.getGroupedData([yGrouping])[0];\n const combinedRows = data.getGroupedData([xGrouping, yGrouping], true)[0];\n\n if (!xTotals || !yTotals || !combinedRows) {\n return;\n }\n\n const currency = data.getCurrency();\n const xIdentifiers = getRowsIdentifiers(xTotals.data, xGrouping, data.getDataColumns());\n const yIdentifiers = getRowsIdentifiers(yTotals.data, yGrouping, data.getDataColumns());\n\n if (sortX) {\n xIdentifiers.sort((a, b) => a.label.localeCompare(b.label));\n }\n if (sortY) {\n yIdentifiers.sort((a, b) => a.label.localeCompare(b.label));\n }\n\n const heatMapColumns: HeatmapColumn[] = [];\n heatMapColumns.push(\n {\n name: 'all',\n label: 'Total',\n },\n ...yIdentifiers.map(yId => ({\n name: yId.value,\n label: yId.label,\n }))\n );\n\n const heatMapRows: HeatmapRow[] = [];\n\n const xTotalRow: HeatmapRow = {\n name: 'all',\n label: 'Total',\n cells: [makeHeatmapCell(kpiColumn, 'all', 'all', currency, marketTotal.data[0])],\n };\n yIdentifiers.forEach(yId => {\n const yTotal = yTotals.data.find(row => String(row.values[yGrouping]) === yId.value);\n xTotalRow.cells.push(makeHeatmapCell(kpiColumn, 'all', yId.value, currency, yTotal));\n });\n\n heatMapRows.push(xTotalRow);\n\n xIdentifiers.forEach(xId => {\n const heatMapRow: HeatmapRow = {\n name: xId.value,\n label: xId.label,\n cells: [],\n };\n\n const xTotal = xTotals.data.find(row => String(row.values[xGrouping]) === xId.value);\n heatMapRow.cells.push(makeHeatmapCell(kpiColumn, xId.value, 'all', currency, xTotal));\n\n yIdentifiers.forEach(yId => {\n const combinedRow = combinedRows.data.find(\n row => String(row.values[xGrouping]) === xId.value && String(row.values[yGrouping]) === yId.value\n );\n heatMapRow.cells.push(makeHeatmapCell(kpiColumn, xId.value, yId.value, currency, combinedRow));\n });\n\n heatMapRows.push(heatMapRow);\n });\n\n let upper = 0;\n let lower = 0;\n heatMapRows.forEach(row => {\n row.cells.forEach(cell => {\n if (cell.raw > upper) {\n upper = cell.raw;\n }\n if (cell.raw < lower) {\n lower = cell.raw;\n }\n });\n });\n\n const ranges = makeScaledRanges(lower, upper);\n\n heatMapRows.forEach(row => {\n row.cells.forEach(cell => {\n if (cell.raw === 0) {\n cell.scale = HeatmapScale.neutral;\n } else {\n let range: ValueRange | undefined;\n if (cell.raw < 0) {\n range = ranges.find(r => cell.raw <= r.from && cell.raw >= r.to);\n } else {\n range = ranges.find(r => cell.raw >= r.from && cell.raw <= r.to);\n }\n cell.scale = range?.scale || HeatmapScale.neutral;\n }\n });\n });\n\n return {\n rows: heatMapRows,\n columns: heatMapColumns,\n };\n}\n\nfunction makeScaledRanges(lower: number, upper: number): ValueRange[] {\n const upperStep = upper / 4;\n const lowerStep = lower / 4;\n const lowerRanges: ValueRange[] = [];\n const upperRanges: ValueRange[] = [];\n\n for (let i = 1; i < 5; i++) {\n lowerRanges.push({\n from: (i - 1) * lowerStep,\n to: i * lowerStep,\n scale: `negative${i}` as HeatmapScale,\n });\n upperRanges.push({\n from: (i - 1) * upperStep,\n to: i * upperStep,\n scale: `positive${i}` as HeatmapScale,\n });\n }\n\n return [...lowerRanges, ...upperRanges];\n}\n\nfunction makeHeatmapCell(\n kpiColumn: DataColumn,\n xName: string,\n yName: string,\n currency: string,\n row?: DataRow\n): HeatmapCell {\n if (!row) {\n return {\n isMissing: true,\n formatted: 'n.a',\n raw: 0,\n scale: HeatmapScale.neutral,\n xName,\n yName,\n };\n }\n\n const value = DataStore.getCellsLatestValue(row, kpiColumn.name);\n if (value === null) {\n return {\n isMissing: true,\n formatted: '-',\n raw: 0,\n scale: HeatmapScale.neutral,\n xName,\n yName,\n };\n }\n\n return {\n isMissing: false,\n formatted: Formatting.format(value, {\n dataType: kpiColumn.dataType,\n formatHint: kpiColumn.formatHint,\n isChange: kpiColumn.isChange,\n currency,\n }),\n raw: value,\n scale: HeatmapScale.negative4,\n xName,\n yName,\n };\n}\n\nfunction getRowsIdentifiers(rows: DataRows, field: string, columns: DataColumn[]): Entity[] {\n return rows.map(row => {\n const { id, name } = DataStore.getRowIdentifiers(row, columns, field);\n return {\n value: id,\n label: name,\n };\n });\n}\n\nexport { makeHeatmapData };\n","import { HeatmapColumn, HeatmapInfo, HeatmapRow } from '../../design/charts/heatmap';\n\nconst getSlicedArray = (columns: HeatmapColumn[] | HeatmapRow[]) => {\n const totalInfoColumn = columns[0];\n const resultArray = [];\n for (let index = 1; index < columns.length; index += 5) {\n const columnSlice = [totalInfoColumn];\n columnSlice.push(...columns.slice(index, index + 5));\n resultArray.push(columnSlice);\n }\n return resultArray;\n};\n\nexport const getSlicedHeatmapInfo = (dataArray: HeatmapInfo): HeatmapInfo[] => {\n if (dataArray.columns.length <= 6 && dataArray.rows.length <= 6) {\n return [dataArray];\n }\n\n const slicedHeatmapInfo = [];\n const slicedColumns = dataArray.columns.length > 6 ? getSlicedArray(dataArray.columns) : [dataArray.columns];\n const slicedRows = dataArray.rows.length > 6 ? getSlicedArray(dataArray.rows) : [dataArray.rows];\n\n slicedRows.forEach(tableRows => {\n slicedHeatmapInfo.push(\n ...slicedColumns.map(columnsSlice => {\n const marketNames = columnsSlice.map(({ name }) => name);\n return {\n columns: columnsSlice,\n rows: tableRows.map(row => ({\n ...row,\n cells: row.cells.filter(cell => marketNames.includes(cell.yName)),\n })),\n };\n })\n );\n });\n return slicedHeatmapInfo;\n};\n","import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { actions } from '@ecosystem/newron-design-system';\nimport { DataContentProps, useUiAction } from '../../newron-core';\nimport { Instructions } from '../../content/instructions';\nimport { Loading } from '../../design/loading/Loading';\nimport { makeHeatmapData } from './data';\nimport { HeatmapInfo, HeatmapTable } from '../../design/charts/heatmap';\nimport { DataType, Entity, UiAction } from '../../types';\nimport { getExportContainer } from '../../export';\nimport { getSlicedHeatmapInfo } from './heatmap.utils';\nimport { useCorePageState } from '../../page/provider';\nimport { useOnCollectionExportReady } from '../collection/useOnCollectionExportReady';\nimport GenericWarnings from '../../design/warning/GenericWarnings';\n\nconst { Button } = actions;\n\nfunction Heatmap({\n data,\n isLoading,\n componentSettings,\n updateSettings,\n instructions = {},\n componentName,\n collection,\n componentHeadingTitle,\n}: DataContentProps) {\n const [dataStamp, setDataStamp] = useState<number>();\n const [info, setInfo] = useState<HeatmapInfo | undefined>();\n const [limitRows, setLimitRows] = useState<number>(8);\n const { dsl, globalWarnings } = useCorePageState();\n const exportRef = useRef<HTMLDivElement[]>([]);\n\n const allColumns = data?.getAllColumns() ?? [];\n\n useOnCollectionExportReady({\n collection,\n dsl,\n chartSliceRefs: exportRef,\n componentName,\n componentSettings,\n allColumns,\n componentHeadingTitle,\n });\n\n const { perform } = useUiAction();\n\n const myInstructions = new Instructions(instructions, componentSettings);\n\n const xGrouping = myInstructions.getString('xGrouping');\n const sortX = myInstructions.getBoolean('sortX', false);\n const yGrouping = myInstructions.getString('yGrouping');\n const sortY = myInstructions.getBoolean('sortY', false);\n const kpi = myInstructions.getString('kpi');\n const clickAction = myInstructions.getObject('clickAction') as UiAction;\n\n const updateData = () => {\n if (!data) {\n return;\n }\n\n if (!data.getDataColumns().find(col => col.name === kpi)) {\n const defaultColumn = data\n .getDataColumns()\n .find(\n col => (col.dataType === DataType.Decimal || col.dataType === DataType.Integer) && col.arrayLength !== null\n );\n if (!defaultColumn) {\n console.warn(`column ${kpi} is not valid for heatmap and no alternative could be found`);\n return;\n }\n const kpiParam = myInstructions.getSettingsName('kpi');\n if (!kpiParam) {\n console.warn(\n `column ${kpi} is not valid for heatmap, trying to change to ${defaultColumn.name} but kpi is not set via settings`\n );\n return;\n }\n updateSettings({\n [kpiParam]: [defaultColumn.name],\n });\n return;\n }\n\n const info = makeHeatmapData(data, {\n xGrouping,\n yGrouping,\n sortX,\n sortY,\n kpi,\n });\n setInfo(info);\n setDataStamp(data.stamp);\n };\n\n /* eslint-disable react-hooks/exhaustive-deps */\n useEffect(() => {\n if (!data || dataStamp === data.stamp) {\n return;\n }\n updateData();\n setLimitRows(8);\n }, [data, dataStamp]);\n\n /* eslint-disable react-hooks/exhaustive-deps */\n useEffect(() => {\n updateData();\n }, [kpi]);\n\n useEffect(() => {\n if (data) {\n collection?.onLoaded();\n }\n }, [data]);\n\n const handleClick = (xValue: Entity, yValue: Entity) => {\n if (!clickAction) {\n return;\n }\n\n perform(clickAction, {\n xGrouping: [xGrouping],\n yGrouping: [yGrouping],\n xValue: [xValue.value],\n xLabel: [xValue.label],\n yValue: [yValue.value],\n yLabel: [yValue.label],\n kpi: [kpi],\n });\n };\n\n const ExportContainer = useMemo(() => getExportContainer(componentName), []);\n\n return (\n <>\n {\n <div className={`heatmap relative w-full max-w-full bg-white rounded-2 ${isLoading ? 'min-h-56' : ''}`}>\n <Loading isActive={isLoading} withIndicator />\n {info && (\n <HeatmapTable info={info} limitRows={limitRows} onCellClick={clickAction ? handleClick : undefined} />\n )}\n {info && info.rows.length > limitRows && (\n <Button mode=\"simple\" onClick={() => setLimitRows(10000)}>\n Show {info.rows.length - limitRows} more\n </Button>\n )}\n <ExportContainer>\n {info &&\n getSlicedHeatmapInfo(info).map((table, idx) => (\n <div\n className={`${componentName}-export-slide`}\n key={`heatmap-table-${idx}`}\n ref={el => (exportRef.current[idx] = el)}\n >\n {globalWarnings && <GenericWarnings warnings={globalWarnings} />}\n <HeatmapTable info={table} onCellClick={clickAction ? handleClick : undefined} />\n </div>\n ))}\n </ExportContainer>\n </div>\n }\n </>\n );\n}\n\nexport { Heatmap };\n","import React, { useEffect, useRef } from 'react';\nimport Chart, { Plugin } from 'chart.js/auto';\nimport { DecompositionChartData } from './types';\nimport { floatingBarLabelsPlugin, lineToNextBarPlugin } from './plugins';\n\nexport type Props = {\n info: DecompositionChartData[];\n};\n\nfunction DecompositionChart({ info }: Props) {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const chartRef = useRef<Chart | null>(null);\n const infoRef = useRef<string>(null);\n\n useEffect(() => {\n if (!canvasRef.current) {\n return;\n }\n\n if (!canvasRef.current || !info || infoRef.current === JSON.stringify(info)) {\n return;\n }\n\n infoRef.current = JSON.stringify(info);\n\n if (chartRef.current) {\n chartRef.current.destroy();\n chartRef.current = null;\n }\n\n const plugins: Plugin[] = [lineToNextBarPlugin(), floatingBarLabelsPlugin(info.map(item => item.floatingLabel))];\n\n chartRef.current = new Chart(canvasRef.current, {\n plugins: plugins,\n type: 'bar',\n data: {\n labels: info.map(item => item.xLabel),\n datasets: [\n {\n data: info.map(item => item.data),\n backgroundColor: info.map(item => item.fillColor),\n hoverBackgroundColor: info.map(item => item.fillColor),\n barPercentage: 0.8,\n categoryPercentage: 1,\n minBarLength: 1,\n },\n ],\n },\n options: {\n animation: false,\n layout: { padding: { top: 35, bottom: 30 } }, // to fit floating labels\n responsive: true,\n maintainAspectRatio: false,\n plugins: {\n legend: {\n display: false,\n },\n tooltip: null,\n },\n scales: {\n y: {\n display: false,\n },\n x: {\n grid: {\n display: false,\n },\n border: {\n display: false,\n },\n },\n },\n },\n });\n }, [info]);\n\n return (\n <div style={{ maxHeight: '330px' }}>\n <canvas className=\"h-full w-full\" ref={canvasRef} />\n </div>\n );\n}\nexport { DecompositionChart };\n","import { DataStore } from '../../data/store';\nimport { ContributionKpiConfig } from './types';\nimport { error } from '@ecosystem/newron-client-lib';\nimport { ChartColors } from '../../design/charts';\nimport { DataColumn, DataRow, KpiWithChangeColumn } from '../../types';\nimport { Formatting } from '../../data/formatting';\nimport { getChangeColor } from '../data/common';\nimport { DecompositionChartData } from '../../design/charts/types';\nimport { KpiDecompositionInfo } from './kpiDecomposition';\n\nconst formatValue = (value: number, column: DataColumn, currency) =>\n Formatting.format(value, {\n dataType: column.dataType,\n formatHint: column.formatHint,\n isChange: false,\n currency,\n hyphenForNull: true,\n });\n\nconst formatChange = (value: number, column: DataColumn, currency) =>\n Formatting.format(value, {\n dataType: column.dataType,\n formatHint: column.formatHint,\n isChange: true,\n currency,\n hyphenForNull: true,\n });\n\nexport function makeDecompositionInfo(\n data: DataStore,\n options: {\n decomposedKpi: string;\n contributionKpis: ContributionKpiConfig[];\n }\n): KpiDecompositionInfo | undefined {\n const { decomposedKpi, contributionKpis } = options;\n\n const kpiColumn = data.getDataColumn(decomposedKpi);\n const kpiChangeColumn = data.getDataColumn((kpiColumn as KpiWithChangeColumn)?.changeName);\n if (!kpiColumn || !kpiChangeColumn) {\n return;\n }\n\n const columns = data.getDataColumns();\n const missingKpis = contributionKpis\n .flatMap(kpi => [kpi.kpi, kpi.kpiContribution])\n .filter(kpi => !columns.some(col => col.name === kpi));\n\n if (missingKpis.length > 0) {\n error(new Error(`Some of the kpis for the kpi decomposition are missing: ${missingKpis.join(', ')})`));\n return;\n }\n\n const resultSets = data.getGroupedSets();\n const dataRows = resultSets?.[0]?.data;\n const dataRow = dataRows?.[0];\n if (resultSets.length !== 1 || dataRows?.length !== 1) {\n error(\n new Error(\n `Kpi decomposition must have only one grouped result with only one data row (received ${resultSets.length} results with ${dataRows?.length} rows in the first one)`\n )\n );\n return;\n }\n const labels = resultSets[0].type.timeFrame.periods.map(p => p.name);\n const currency = data.getCurrency();\n const rawValues = dataRow.values[kpiColumn.name] as number[];\n const changeValues = dataRow.values[kpiChangeColumn.name] as number[];\n\n const formattedValues = rawValues.map(value => formatValue(value, kpiColumn, currency));\n const formattedChangeValues = changeValues.map(value => formatChange(value, kpiChangeColumn, currency));\n\n const contributingKpiInfo = mapToContributingKpiInfo(data, dataRow, kpiColumn, contributionKpis);\n const isKpiQualityOk = !contributingKpiInfo.some(v => +v.floatingLabel.topLabel[0].value.replace(/\\D/g, '') === 0);\n\n const chartData: DecompositionChartData[] = [\n {\n xLabel: labels[0],\n floatingLabel: {\n topLabel: [{ value: formattedValues[0], textColor: ChartColors.neutral, bold: true }],\n },\n data: [0, rawValues[0]],\n fillColor: ChartColors.neutral,\n },\n ...contributingKpiInfo,\n {\n xLabel: labels[1],\n floatingLabel: {\n topLabel: [\n { value: formattedValues[1], textColor: ChartColors.neutral, bold: true },\n { value: formattedChangeValues[1], textColor: getChangeColor(changeValues[1]) },\n ],\n },\n data: [0, rawValues[1]],\n fillColor: ChartColors.neutral,\n },\n ];\n\n return {\n info: chartData,\n kpiChange: changeValues[1],\n labels: labels,\n kpiChangeFormatted: formattedChangeValues[1],\n isKpiQualityOk,\n };\n}\n\nfunction mapToContributingKpiInfo(\n data: DataStore,\n dataRow: DataRow,\n decomposedKpi: DataColumn,\n contributionKpis: ContributionKpiConfig[]\n): DecompositionChartData[] {\n const decomposedKpiRawValues = dataRow.values[decomposedKpi.name] as number[];\n let seed = decomposedKpiRawValues[0];\n\n const decompositionConfig: DecompositionChartData[] = [];\n\n contributionKpis.forEach((contributionKpiConfig: ContributionKpiConfig) => {\n const config = mapToChartConfigData(data, dataRow, contributionKpiConfig, seed);\n decompositionConfig.push(config);\n seed = config.data[1];\n });\n\n return decompositionConfig;\n}\n\nfunction mapToChartConfigData(\n data: DataStore,\n dataRow: DataRow,\n contributionKpi: ContributionKpiConfig,\n seed: number\n): DecompositionChartData {\n const currency = data.getCurrency();\n\n const kpiColumn = data.getDataColumn(contributionKpi.kpi);\n const kpiChangeColumn = data.getDataColumn((kpiColumn as KpiWithChangeColumn).changeName);\n const kpiContributionColumn = data.getDataColumn(contributionKpi.kpiContribution);\n\n const rawValues = dataRow.values[kpiColumn.name] as number[];\n const changeValues = dataRow.values[kpiChangeColumn.name] as number[];\n const contributionValues = dataRow.values[kpiContributionColumn.name] as number[];\n\n const formattedKpiValue = formatValue(rawValues[1], kpiColumn, currency);\n const formattedChangeValue = formatChange(changeValues[1], kpiChangeColumn, currency);\n\n const contributionValue = contributionValues[1];\n const formattedContributionValue = formatChange(contributionValues[1], kpiContributionColumn, currency);\n\n return {\n xLabel: '',\n floatingLabel: {\n topLabel: [{ value: formattedContributionValue, textColor: getChangeColor(contributionValue), bold: true }],\n bottomLabel: [\n { value: kpiColumn.label, textColor: ChartColors.text },\n { value: formattedKpiValue, textColor: ChartColors.text },\n { value: formattedChangeValue, textColor: getChangeColor(changeValues[1]) },\n ],\n },\n data: [seed, seed + contributionValue],\n fillColor: getChangeColor(contributionValue),\n };\n}\n","import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { Instructions } from '../../content/instructions';\nimport { DataContentProps } from '../../newron-core';\nimport { DecompositionChart } from '../../design/charts/decompositionChart';\nimport { Loading } from '../../design/loading/Loading';\nimport { DecompositionChartData } from '../../design/charts/types';\nimport { ContributionKpiConfig } from './types';\nimport { makeDecompositionInfo } from './data';\nimport { DataWarning } from '../../types';\nimport GenericWarnings from '../../design/warning/GenericWarnings';\nimport { getExportContainer } from '../../export';\nimport { useCorePageState } from '../../page/provider';\nimport { useOnCollectionExportReady } from '../collection/useOnCollectionExportReady';\n\nexport type KpiDecompositionInfo = {\n info: DecompositionChartData[];\n kpiChange: number;\n kpiChangeFormatted: string;\n labels: string[];\n isKpiQualityOk: boolean;\n};\n\nfunction KpiDecomposition({\n data,\n isLoading,\n instructions = {},\n componentSettings,\n hasContentHaveData,\n componentName,\n collection,\n componentHeadingTitle,\n}: DataContentProps) {\n const [dataStamp, setDataStamp] = useState<number>();\n const [info, setInfo] = useState<KpiDecompositionInfo | undefined>();\n const [kpiLabel, setKpiLabel] = useState<string>();\n const [warnings, setWarnings] = useState<DataWarning[]>([]);\n const { dsl, globalWarnings } = useCorePageState();\n const exportRef = useRef<HTMLDivElement[]>([]);\n\n const allColumns = data?.getAllColumns() ?? [];\n\n useOnCollectionExportReady({\n collection,\n dsl,\n chartSliceRefs: exportRef,\n componentName,\n componentSettings,\n allColumns,\n componentHeadingTitle,\n });\n\n const myInstructions = new Instructions(instructions, componentSettings);\n const decomposedKpi = myInstructions.getString('decomposedKpi');\n const periodName = myInstructions.getString('periodName');\n const contributionKpis = myInstructions.getObject('contributingKpis') as ContributionKpiConfig[];\n\n const updateData = () => {\n if (!data) {\n return;\n }\n\n setDataStamp(data.stamp);\n const dataWarnings = data.getDataWarnings([decomposedKpi, ...(contributionKpis?.map(({ kpi }) => kpi) || [])]);\n if (dataWarnings && dataWarnings.length > 0) {\n setWarnings(dataWarnings);\n hasContentHaveData && hasContentHaveData('isWarning');\n return;\n } else if (warnings.length) {\n setWarnings([]);\n }\n const kpiColumn = data.getDataColumn(decomposedKpi);\n setKpiLabel(kpiColumn?.label);\n\n const info = makeDecompositionInfo(data, { decomposedKpi, contributionKpis });\n setInfo(info);\n };\n\n /* eslint-disable react-hooks/exhaustive-deps */\n useEffect(() => {\n if (!data || data.stamp === dataStamp) {\n return;\n }\n updateData();\n }, [data]);\n\n useEffect(() => {\n if (data) {\n collection?.onLoaded();\n }\n }, [data]);\n\n const ExportContainer = useMemo(() => getExportContainer(componentName), []);\n\n return (\n <div className={'kpi-decomposition bg-white rounded-2 p-4 '} style={{ minWidth: '620px', maxWidth: '1100px' }}>\n <Loading isActive={isLoading} withIndicator />\n {warnings.length !== 0 || info?.isKpiQualityOk === false ? (\n <GenericWarnings\n className=\"\"\n warnings={[\n {\n level: 'warn',\n message:\n 'Revenue decomposition is not available for your selected market or channel, try modifying your selections',\n },\n ]}\n />\n ) : info ? (\n <>\n <DecompositionChart info={info.info} />\n <p>\n The combined impact of changes above caused {info.kpiChange > 0 ? 'an' : 'a'}\n <span className=\"font-bold\">\n {` ${info.kpiChange > 0 ? 'increase' : 'decrease'} in total ${kpiLabel.toLowerCase()} of ${\n info.kpiChangeFormatted\n } in ${periodName || `${info.labels[1]} compared with ${info.labels[0]}`}`}\n </span>\n .\n </p>\n </>\n ) : null}\n <ExportContainer>\n <div className={`${componentName}-export-slide `} ref={el => (exportRef.current = [el])}>\n {warnings.length !== 0 || info?.isKpiQualityOk === false ? (\n <GenericWarnings\n className=\"\"\n warnings={[\n {\n level: 'warn',\n message:\n 'Revenue decomposition is not available for your selected market or channel, try modifying your selections',\n },\n ]}\n />\n ) : info ? (\n <>\n {globalWarnings && <GenericWarnings warnings={globalWarnings} />}\n <DecompositionChart info={info.info} />\n <p>\n The combined impact of changes above caused {info.kpiChange > 0 ? 'an' : 'a'}\n <span className=\"font-bold\">\n {` ${info.kpiChange > 0 ? 'increase' : 'decrease'} in total ${kpiLabel.toLowerCase()} of ${\n info.kpiChangeFormatted\n } in ${periodName || `${info.labels[1]} compared with ${info.labels[0]}`}`}\n </span>\n .\n </p>\n </>\n ) : null}\n </div>\n </ExportContainer>\n </div>\n );\n}\n\nexport { KpiDecomposition };\n","import { FunctionComponent } from 'react';\nimport { MultiSelect } from '../context/selectors/multi.select';\nimport { RadioGroupSelector } from '../context/selectors/radio.group';\nimport { SingleSelect } from '../context/selectors/single.select';\nimport { UnknownSelector } from '../context/selectors/unknown';\nimport { ContextSettingSelectorProps } from '../context/types';\nimport { DummyContent } from '../elements/dummy';\nimport { DummyStaticContent } from '../elements/dummy.static';\nimport { DataErrorElement } from '../elements/error/error';\nimport { KeyIndicators } from '../elements/keyIndicators/indicators';\nimport { Leaderboard } from '../elements/leaderboard/leaderboard';\nimport { MultiKpi } from '../elements/multiKpi/multiKpi';\nimport { Segmentation } from '../elements/segmentation/segmentation';\nimport { StatsTable } from '../elements/statsTable/statsTable';\nimport { TimeSeries } from '../elements/timeSeries/timeSeries';\nimport { UnknownElement } from '../elements/unknown/unknown';\nimport { CoreContents, SettingSelector } from '../types';\nimport { ContentProps } from './types';\nimport { KpiTrends } from '../elements/kpiTrends/trends';\nimport { Billboard } from '../elements/billboard/billboard';\nimport { AlertPanel } from '../elements/alertPanel/alertPanel';\nimport { SingleKpiTrend } from '../elements/singleKpiTrend/trend';\nimport { Heatmap } from '../elements/heatmap/heatmap';\nimport { KpiDecomposition } from '../elements/kpiDecomposition/kpiDecomposition';\n\n// register all content elements - components that are used to render content\n// this is just a registry and the rendering is done in the ContentElement component in element.tsx\nexport class ContentProviderRegister {\n private static _instance: ContentProviderRegister;\n\n private contextSettingSelectors: Record<string, FunctionComponent<ContextSettingSelectorProps>> = {};\n private contents: Record<string, FunctionComponent<ContentProps>> = {};\n\n private constructor() {}\n\n registerContent(element: FunctionComponent<ContentProps>, identifier: string) {\n this.contents[identifier] = element;\n }\n\n getContent(identifier): FunctionComponent<ContentProps> {\n return this.contents[identifier] || UnknownElement;\n }\n\n registerContextSettingSelector(element: FunctionComponent<ContextSettingSelectorProps>, identifier: string) {\n this.contextSettingSelectors[identifier] = element;\n }\n\n getContextSettingsSelector(\n ofType: SettingSelector,\n identifier: string\n ): FunctionComponent<ContextSettingSelectorProps> {\n let selector: FunctionComponent<ContextSettingSelectorProps> | undefined;\n if (ofType === SettingSelector.custom) {\n selector = this.contextSettingSelectors[identifier];\n } else {\n selector = this.contextSettingSelectors[ofType];\n }\n return selector || UnknownSelector;\n }\n\n static getInstance(): ContentProviderRegister {\n if (!ContentProviderRegister._instance) {\n ContentProviderRegister._instance = new ContentProviderRegister();\n prefill();\n }\n return ContentProviderRegister._instance;\n }\n}\n\nfunction prefill() {\n ContentProviderRegister.getInstance().registerContent(DataErrorElement, CoreContents.dataError);\n ContentProviderRegister.getInstance().registerContent(TimeSeries, CoreContents.timeSeries);\n ContentProviderRegister.getInstance().registerContent(Segmentation, CoreContents.segmentation);\n ContentProviderRegister.getInstance().registerContent(MultiKpi, CoreContents.multiKpi);\n ContentProviderRegister.getInstance().registerContent(Leaderboard, CoreContents.leaderBoard);\n ContentProviderRegister.getInstance().registerContent(StatsTable, CoreContents.statsTable);\n ContentProviderRegister.getInstance().registerContent(KeyIndicators, CoreContents.keyIndicators);\n ContentProviderRegister.getInstance().registerContent(KpiTrends, CoreContents.kpiTrends);\n ContentProviderRegister.getInstance().registerContent(Billboard, CoreContents.billboard);\n ContentProviderRegister.getInstance().registerContent(AlertPanel, CoreContents.alertPanel);\n ContentProviderRegister.getInstance().registerContent(SingleKpiTrend, CoreContents.singleKpiTrend);\n ContentProviderRegister.getInstance().registerContent(Heatmap, CoreContents.heatmap);\n ContentProviderRegister.getInstance().registerContent(KpiDecomposition, CoreContents.kpiDecompositon);\n\n ContentProviderRegister.getInstance().registerContent(DummyContent, 'dummy');\n ContentProviderRegister.getInstance().registerContent(DummyStaticContent, 'dummy-static');\n\n // context selectors - highligted brand modal\n ContentProviderRegister.getInstance().registerContextSettingSelector(SingleSelect, SettingSelector.singleSelect);\n ContentProviderRegister.getInstance().registerContextSettingSelector(MultiSelect, SettingSelector.multiSelect);\n ContentProviderRegister.getInstance().registerContextSettingSelector(RadioGroupSelector, SettingSelector.radioGroup);\n}\n","import React, { FunctionComponent, ReactNode, useEffect, useState } from 'react';\nimport { DataProviderElement, useDataState } from '../data/provider';\nimport { ContentProviderRegister } from '../content/register';\nimport { BasicTrackingFn, ComponentHeading, Content, CoreContents, DataMode, Params, SettingsProvider } from '../types';\nimport { DataContentProps } from './types';\nimport { Loading } from '../design/loading/Loading';\nimport { ContextManager } from '../context/manager';\nimport { getParamsForContext, getPropositionFromContext } from '../context/utils';\n\ntype Props = {\n contentElementId: string;\n hideElement: boolean;\n setContentElementHasData: (contentElementId: string, hasData: ContentElementHasData) => void;\n content: Content;\n updateComponentSettings: (updates: Params) => void;\n paramsForData: Params;\n dataUrlRoot: string;\n dslOrContextLoading?: boolean;\n componentActions?: FunctionComponent<{ children: ReactNode }>;\n componentFooter?: FunctionComponent<{ children: ReactNode }>;\n componentSettings: Params;\n trackEvent?: BasicTrackingFn;\n componentMetadata?: SettingsProvider['metadata'];\n componentName?: string;\n componentHeadingTitle?: ComponentHeading['title'];\n};\n\nexport type ContentElementHasData = boolean | 'isLoading' | 'isWarning';\n\nfunction ContentElement(props: Props) {\n const {\n content,\n updateComponentSettings,\n paramsForData,\n dataUrlRoot,\n componentActions,\n componentFooter,\n componentSettings,\n trackEvent,\n componentMetadata,\n componentName,\n componentHeadingTitle,\n } = props;\n const { type, dataOptions } = content;\n const context = ContextManager.getInstance().get();\n const paramsForContext = getParamsForContext(context);\n const proposition = getPropositionFromContext(context);\n if (!dataOptions) {\n const Element = ContentProviderRegister.getInstance().getContent(type);\n return (\n <Element\n updateSettings={updateComponentSettings}\n paramsForData={paramsForData}\n paramsForContext={paramsForContext}\n dataUrlRoot={dataUrlRoot}\n ComponentActionsContainer={componentActions}\n ComponentFooterContainer={componentFooter}\n componentSettings={componentSettings}\n trackEvent={trackEvent}\n componentMetadata={componentMetadata}\n componentName={componentName}\n componentHeadingTitle={componentHeadingTitle}\n proposition={proposition}\n {...content}\n />\n );\n }\n\n if (dataOptions.mode === DataMode.takeFromProvider) {\n return <DataReceivingContentElement {...props} />;\n }\n\n return (\n <DataProviderElement dataOptions={dataOptions} paramsForData={paramsForData} urlRoot={dataUrlRoot}>\n <DataReceivingContentElement {...props} />\n </DataProviderElement>\n );\n}\n\nfunction DataReceivingContentElement({\n content,\n contentElementId,\n updateComponentSettings,\n paramsForData,\n dataUrlRoot,\n componentActions,\n componentFooter,\n componentSettings,\n componentMetadata,\n trackEvent,\n setContentElementHasData,\n hideElement,\n componentName,\n componentHeadingTitle,\n}: Props) {\n const { type } = content;\n const context = ContextManager.getInstance().get();\n const paramsForContext = getParamsForContext(context);\n const proposition = getPropositionFromContext(context);\n const { error, data, isDataLoadingFinished, isEnrichmentLoading, enrichmentError } = useDataState();\n const [overrideElementHasData, setOverrideElementHasData] = useState({});\n\n const Element = ContentProviderRegister.getInstance().getContent(\n !error ? type : CoreContents.dataError\n ) as FunctionComponent<DataContentProps>;\n\n useEffect(() => {\n if (!isDataLoadingFinished) {\n setContentElementHasData(contentElementId, 'isLoading');\n return;\n }\n if (overrideElementHasData[contentElementId] !== undefined) {\n setContentElementHasData(contentElementId, overrideElementHasData[contentElementId]);\n return;\n }\n setContentElementHasData(contentElementId, data ? data.hasDataInSomeGroupedSets() : false);\n }, [isDataLoadingFinished, overrideElementHasData]);\n\n if (hideElement) {\n return <></>;\n }\n\n const hasContentHaveData = (value: boolean | string) => {\n setOverrideElementHasData({ ...overrideElementHasData, [contentElementId]: value });\n };\n\n return (\n <>\n <Loader isLoading={!isDataLoadingFinished} />\n <Element\n {...content}\n updateSettings={updateComponentSettings}\n dataStamp={1}\n data={data}\n error={{\n message: error,\n title: 'Unable to load section',\n className: 'pt-4',\n }}\n isLoading={!isDataLoadingFinished}\n isEnrichmentLoading={isEnrichmentLoading}\n enrichmentError={enrichmentError}\n paramsForData={paramsForData}\n paramsForContext={paramsForContext}\n dataUrlRoot={dataUrlRoot}\n ComponentActionsContainer={componentActions}\n ComponentFooterContainer={componentFooter}\n componentSettings={componentSettings}\n componentMetadata={componentMetadata}\n trackEvent={trackEvent}\n hasContentHaveData={hasContentHaveData}\n componentName={componentName}\n componentHeadingTitle={componentHeadingTitle}\n proposition={proposition}\n />\n </>\n );\n}\n\nconst Loader: React.FC<{ isLoading: boolean }> = ({ isLoading }) => {\n if (!isLoading) {\n return null;\n }\n return (\n <div className=\"timeseries relative pt-4 overflow-x-auto w-full max-w-full\">\n <Loading isActive={isLoading} withIndicator />\n </div>\n );\n};\n\nexport { ContentElement };\n","import React, { FunctionComponent, useEffect, useRef } from 'react';\nimport { createPortal } from 'react-dom';\n\ntype Props = {\n children: React.ReactNode;\n};\nfunction componentFooter(name: string): FunctionComponent<Props> {\n return function ComponentActions({ children }: Props): React.ReactPortal | null {\n const [isInDocument, setIsInDocument] = React.useState<boolean>(false);\n const timer = useRef<ReturnType<typeof setTimeout>>(null);\n const tries = useRef<number>(0);\n\n /* eslint-disable react-hooks/exhaustive-deps */\n useEffect(() => {\n checkInDocument();\n }, []);\n\n const checkInDocument = () => {\n clearTimeout(timer.current);\n if (tries.current > 10) {\n return;\n }\n const el = document.querySelector(`#${name}_footer`);\n if (el) {\n setIsInDocument(true);\n return;\n }\n\n setIsInDocument(false);\n tries.current = tries.current + 1;\n timer.current = setTimeout(checkInDocument, 50);\n };\n\n if (!isInDocument) {\n return null;\n }\n\n const el = document.querySelector(`#${name}_footer`);\n if (!el) {\n return null;\n }\n\n return createPortal(children, el);\n };\n}\n\nexport { componentFooter };\n","'use client';\nimport { createContext, Component, createElement, useContext, useState, useMemo, forwardRef } from 'react';\n\nconst ErrorBoundaryContext = createContext(null);\n\nconst initialState = {\n didCatch: false,\n error: null\n};\nclass ErrorBoundary extends Component {\n constructor(props) {\n super(props);\n this.resetErrorBoundary = this.resetErrorBoundary.bind(this);\n this.state = initialState;\n }\n static getDerivedStateFromError(error) {\n return {\n didCatch: true,\n error\n };\n }\n resetErrorBoundary() {\n const {\n error\n } = this.state;\n if (error !== null) {\n var _this$props$onReset, _this$props;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n (_this$props$onReset = (_this$props = this.props).onReset) === null || _this$props$onReset === void 0 ? void 0 : _this$props$onReset.call(_this$props, {\n args,\n reason: \"imperative-api\"\n });\n this.setState(initialState);\n }\n }\n componentDidCatch(error, info) {\n var _this$props$onError, _this$props2;\n (_this$props$onError = (_this$props2 = this.props).onError) === null || _this$props$onError === void 0 ? void 0 : _this$props$onError.call(_this$props2, error, info);\n }\n componentDidUpdate(prevProps, prevState) {\n const {\n didCatch\n } = this.state;\n const {\n resetKeys\n } = this.props;\n\n // There's an edge case where if the thing that triggered the error happens to *also* be in the resetKeys array,\n // we'd end up resetting the error boundary immediately.\n // This would likely trigger a second error to be thrown.\n // So we make sure that we don't check the resetKeys on the first call of cDU after the error is set.\n\n if (didCatch && prevState.error !== null && hasArrayChanged(prevProps.resetKeys, resetKeys)) {\n var _this$props$onReset2, _this$props3;\n (_this$props$onReset2 = (_this$props3 = this.props).onReset) === null || _this$props$onReset2 === void 0 ? void 0 : _this$props$onReset2.call(_this$props3, {\n next: resetKeys,\n prev: prevProps.resetKeys,\n reason: \"keys\"\n });\n this.setState(initialState);\n }\n }\n render() {\n const {\n children,\n fallbackRender,\n FallbackComponent,\n fallback\n } = this.props;\n const {\n didCatch,\n error\n } = this.state;\n let childToRender = children;\n if (didCatch) {\n const props = {\n error,\n resetErrorBoundary: this.resetErrorBoundary\n };\n if (typeof fallbackRender === \"function\") {\n childToRender = fallbackRender(props);\n } else if (FallbackComponent) {\n childToRender = createElement(FallbackComponent, props);\n } else if (fallback !== undefined) {\n childToRender = fallback;\n } else {\n throw error;\n }\n }\n return createElement(ErrorBoundaryContext.Provider, {\n value: {\n didCatch,\n error,\n resetErrorBoundary: this.resetErrorBoundary\n }\n }, childToRender);\n }\n}\nfunction hasArrayChanged() {\n let a = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n let b = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n return a.length !== b.length || a.some((item, index) => !Object.is(item, b[index]));\n}\n\nfunction assertErrorBoundaryContext(value) {\n if (value == null || typeof value.didCatch !== \"boolean\" || typeof value.resetErrorBoundary !== \"function\") {\n throw new Error(\"ErrorBoundaryContext not found\");\n }\n}\n\nfunction useErrorBoundary() {\n const context = useContext(ErrorBoundaryContext);\n assertErrorBoundaryContext(context);\n const [state, setState] = useState({\n error: null,\n hasError: false\n });\n const memoized = useMemo(() => ({\n resetBoundary: () => {\n context.resetErrorBoundary();\n setState({\n error: null,\n hasError: false\n });\n },\n showBoundary: error => setState({\n error,\n hasError: true\n })\n }), [context.resetErrorBoundary]);\n if (state.hasError) {\n throw state.error;\n }\n return memoized;\n}\n\nfunction withErrorBoundary(component, errorBoundaryProps) {\n const Wrapped = forwardRef((props, ref) => createElement(ErrorBoundary, errorBoundaryProps, createElement(component, {\n ...props,\n ref\n })));\n\n // Format for display in DevTools\n const name = component.displayName || component.name || \"Unknown\";\n Wrapped.displayName = \"withErrorBoundary(\".concat(name, \")\");\n return Wrapped;\n}\n\nexport { ErrorBoundary, ErrorBoundaryContext, useErrorBoundary, withErrorBoundary };\n","import React from 'react';\nimport { ErrorBoundary, FallbackProps } from 'react-error-boundary';\nimport { feedbackV2 } from '@ecosystem/newron-design-system';\nimport { logger } from '@ecosystem/newron-client-lib';\n\nconst ErrorFallback = ({ error }: FallbackProps) => {\n logger.error(error, {\n componentStack: error.stack,\n });\n\n return (\n <div className=\"newron-content\">\n <div className=\"my-4\">\n <feedbackV2.Alert\n title={\n <>\n The requested data for this page has failed to load.\n <br /> Please refresh your browser to try again. If this issue persists, please contact your GfK\n representative.\n </>\n }\n type=\"error\"\n />\n </div>\n </div>\n );\n};\n\ninterface LocalErrorBoundaryProps {\n children: React.ReactNode;\n}\n\nconst LocalErrorBoundary: React.FC<LocalErrorBoundaryProps> = ({ children }) => {\n return <ErrorBoundary FallbackComponent={ErrorFallback}>{children}</ErrorBoundary>;\n};\n\nexport default LocalErrorBoundary;\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { BasicTrackingFn, Component, Content, EventName, EventParams, Params } from '../types';\nimport { ComponentCard } from './component.card';\nimport { ComponentHasData, useCorePageState } from '../page/provider';\nimport { PageSettingsManager } from '../page/settings';\nimport { DataProviderElement, useDataState } from '../data/provider';\nimport { pageClient } from '../client';\nimport { useIsMounted } from '../tools';\nimport { ContentElement, ContentElementHasData } from '../content/element';\nimport { UiDataParams } from '../data';\nimport { componentActions } from './component.actions';\nimport { componentFooter } from './component.footer';\nimport { makeUrl } from '../tools/strings';\nimport { useAnalyticsContext } from '../analytics/analytics.provider';\nimport GenericWarnings from '../design/warning/GenericWarnings';\nimport { getComponentSettingsTrackingNames } from '../analytics/trackPageElementViewed.hook';\nimport { addChartTypeToEventParams, getMetadataTrackingParams } from '../analytics/utils';\nimport LocalErrorBoundary from './LocalErrorBoundary';\nimport { ExportButton } from '../export/export.button';\nimport { ExportFormat } from '@ecosystem/newron-client-lib';\nimport { PowerpointExportDto } from '@ecosystem/export-api';\nimport { ExportHideout } from '../export/ExportHideout';\nimport { componentToPptData } from '../export';\nimport { DataStore } from '../data/store';\nimport { AddInsightToCollectionsButton } from '@ecosystem/newron-client-collections';\nimport { InsightCollectionDataType } from '../content/collection/types';\nimport { getParamsForContext, getPropositionFromContext } from '../context/utils';\nimport { ContextManager } from '../context/manager';\nimport { createViewStateFn } from '../tools/createViewState';\n\ntype Props = {\n component: Component;\n};\n\nfunction ComponentElement({ component }: Props) {\n const [componentSettings, setComponentSettings] = useState<Params>();\n const [componentContents, setComponentContents] = useState<Content[]>();\n const [componentContextParams, setComponentContextParams] = useState<Params>();\n const [componentPageParams, setComponentPageParams] = useState<Params>();\n const { data } = useDataState();\n const cardElementRefs = useRef<HTMLDivElement[]>([]);\n\n const contentsPending = useRef<boolean>(false);\n const isMounted = useIsMounted();\n\n const {\n someComponentsHaveData,\n setComponentHasData,\n componentHasDataMap,\n endpoints,\n contextParams,\n pageParams,\n dslLoading,\n contextLoading,\n dataLoading,\n page,\n data: dataInfo,\n context,\n collection: collectionInfo,\n } = useCorePageState();\n const { trackPageEvent } = useAnalyticsContext();\n const [contentElementHasDataMap, setContentElementHasDataMap] = useState<Record<string, ContentElementHasData>>({});\n\n const atLeastOneContentElementHasData = () => {\n return Object.keys(contentElementHasDataMap).some(\n key => contentElementHasDataMap[key] === true || contentElementHasDataMap[key] === 'isWarning'\n );\n };\n const atLeastOneContentElementIsLoading = () => {\n return Object.keys(contentElementHasDataMap).some(key => contentElementHasDataMap[key] === 'isLoading');\n };\n\n const allComponentsHaveWarning = () => {\n return Object.keys(contentElementHasDataMap).every(key => contentElementHasDataMap[key] === 'isWarning');\n };\n\n useEffect(() => {\n if (componentContents?.length === 0) {\n setComponentHasData(component.name, false);\n return;\n }\n if (atLeastOneContentElementHasData()) {\n setComponentHasData(component.name, true);\n return;\n }\n if (atLeastOneContentElementIsLoading()) {\n setComponentHasData(component.name, 'isLoading');\n return;\n }\n setComponentHasData(component.name, false);\n }, [contentElementHasDataMap, componentContents]);\n\n const componentHasData = (): ComponentHasData => {\n return componentHasDataMap[component.name];\n };\n\n const {\n name,\n dataOptions,\n settings: { values, dataSettings, metadata },\n contents,\n heading,\n exportOptions,\n collectionOptions,\n } = component;\n\n useEffect(() => {\n setComponentContents(component.contents.fixed || []);\n }, [component.contents.fixed]);\n\n const handleUpdateSettings = (updates: Params) => {\n const newSettings = {\n ...{},\n ...componentSettings,\n ...updates,\n };\n setComponentSettings(newSettings);\n const fetchContentsCallback = () => {\n if (contents.endpoint && !contents.fixed) {\n fetchContents(newSettings);\n }\n };\n PageSettingsManager.getInstance().updateComponentSettings(name, newSettings, fetchContentsCallback);\n };\n\n const fetchContents = async (settings: Params) => {\n const { endpoint } = contents;\n if (!endpoint) {\n return;\n }\n\n if (contentsPending.current) {\n return;\n }\n\n try {\n contentsPending.current = true;\n const contents = await pageClient.getComponentContents(makeUrl(endpoints.page, endpoint), {\n ...{},\n ...contextParams,\n ...settings,\n });\n if (isMounted()) {\n setComponentContents(contents);\n }\n // eslint-disable-next-line no-useless-catch\n } catch (err) {\n throw err;\n } finally {\n contentsPending.current = false;\n }\n };\n\n /* eslint-disable react-hooks/exhaustive-deps */\n useEffect(() => {\n if (dslLoading) {\n return;\n }\n const cached = PageSettingsManager.getInstance().getComponentSettings(name) || {};\n handleUpdateSettings({\n ...cached,\n ...values,\n });\n }, [name, values, dslLoading]);\n\n /* eslint-disable react-hooks/exhaustive-deps */\n useEffect(() => {\n if (dslLoading) {\n return;\n }\n setComponentContextParams(contextParams);\n }, [contextParams]);\n\n useEffect(() => {\n if (dslLoading) {\n return;\n }\n setComponentPageParams(pageParams);\n }, [pageParams]);\n\n const paramsForData: Params = {\n ...{},\n ...componentContextParams,\n ...componentPageParams,\n };\n\n const contextParamsData = ContextManager.getInstance().get();\n const proposition = getPropositionFromContext(contextParamsData);\n const paramsForContext: Params = getParamsForContext(contextParamsData);\n\n if (componentSettings && componentContextParams) {\n dataSettings.forEach(name => {\n if (componentSettings[name]) {\n paramsForData[name] = componentSettings[name];\n }\n });\n Object.keys(UiDataParams).forEach(name => {\n if (componentSettings[name]) {\n paramsForData[name] = componentSettings[name];\n }\n });\n }\n\n const trackContentEvents: BasicTrackingFn = useCallback(\n (eventName: EventName, eventParams: EventParams) => {\n if (eventName === EventName.ChartInteractions) {\n eventParams = addChartTypeToEventParams(eventParams, componentSettings);\n }\n if (eventName === EventName.PageElementViewed) {\n eventParams = getComponentSettingsTrackingNames(componentSettings, heading.title, eventParams);\n }\n if (eventName === EventName.DataExported) {\n eventParams = getComponentSettingsTrackingNames(componentSettings, heading.title, eventParams);\n }\n if (eventName === EventName.PageElementClicked) {\n eventParams = getMetadataTrackingParams(metadata, eventParams);\n }\n trackPageEvent(eventName, eventParams);\n },\n [trackPageEvent, componentSettings]\n );\n\n const setContentElementHasData = (contentElementId, hasData) => {\n setContentElementHasDataMap(prevState => {\n return {\n ...prevState,\n [contentElementId]: hasData,\n };\n });\n };\n\n const hideEmptyState = () => {\n const emptyState = 'hideEmptyState';\n return !componentSettings[emptyState]?.[0];\n };\n\n const areActionsEnabled = () => {\n return !allComponentsHaveWarning() && componentHasData();\n };\n const getExportData = async (_exportFormat: ExportFormat, data: DataStore): Promise<PowerpointExportDto> => {\n const allColumns = data.getAllColumns();\n const exportSlides = document.querySelectorAll(`.${name}-export-slide`);\n exportSlides.forEach((slide, idx) => (cardElementRefs.current[idx] = slide as HTMLDivElement));\n return await componentToPptData(exportOptions, component, cardElementRefs.current, componentSettings, allColumns);\n };\n\n if (!componentSettings || !componentContextParams) {\n return null;\n }\n\n const ComponentActionsContainer = heading !== undefined ? componentActions(name) : undefined;\n return (\n <LocalErrorBoundary>\n <DataProviderElement dataOptions={dataOptions} paramsForData={paramsForData} urlRoot={endpoints.data}>\n {someComponentsHaveData && !!data && <GenericWarnings warnings={data.getGenericWarnings()} />}\n {exportOptions && (\n <ExportHideout>\n <div id={`${name}_export_content`} ref={element => (cardElementRefs.current = [element])} />\n </ExportHideout>\n )}\n <ComponentCard\n component={component}\n showNoDataInfo={hideEmptyState() && componentHasData() === false}\n settings={componentSettings}\n updateComponentSettings={handleUpdateSettings}\n trackEvent={trackContentEvents}\n metadata={metadata}\n paramsForData={paramsForData}\n >\n {ComponentActionsContainer && areActionsEnabled() && (\n <ComponentActionsContainer>\n {collectionOptions && (\n <AddInsightToCollectionsButton\n type={collectionOptions.collectionKey}\n selectDataType\n proposition={proposition}\n disabled={dataLoading}\n createInsightDataFn={(dataType: InsightCollectionDataType) => ({\n content: {\n type: collectionOptions.type,\n dataOptions: collectionOptions.dataOptions,\n },\n paramsForData,\n paramsForContext,\n dataType,\n corePageSettings: { context, data: dataInfo, page, collection: collectionInfo },\n componentSettings,\n })}\n createViewStateFn={createViewStateFn}\n />\n )}\n\n {exportOptions && (\n <ExportButton\n trackingSourceData={data}\n componentSettings={componentSettings}\n exportFormats={[ExportFormat.Pptx]}\n getExportData={getExportData}\n disabled={atLeastOneContentElementIsLoading()}\n exportContentRef={cardElementRefs}\n hasExternalExportContent={true}\n trackEvent={trackContentEvents}\n componentMetadata={metadata}\n />\n )}\n </ComponentActionsContainer>\n )}\n {componentContents?.map((content, idx) => (\n <ContentElement\n key={`${name}_content_${idx}`}\n contentElementId={`${name}_content_${idx}`}\n hideElement={componentHasData() === false}\n setContentElementHasData={setContentElementHasData}\n content={content}\n updateComponentSettings={handleUpdateSettings}\n paramsForData={paramsForData}\n dslOrContextLoading={dslLoading || contextLoading}\n dataUrlRoot={endpoints.data}\n componentActions={ComponentActionsContainer}\n componentFooter={componentFooter(name)}\n componentSettings={componentSettings}\n trackEvent={trackContentEvents}\n componentMetadata={metadata}\n componentName={name}\n componentHeadingTitle={component?.heading?.title}\n />\n ))}\n </ComponentCard>\n </DataProviderElement>\n </LocalErrorBoundary>\n );\n}\n\nexport { ComponentElement };\n","import React, { FunctionComponent, useEffect, useRef } from 'react';\nimport { createPortal } from 'react-dom';\n\ntype Props = {\n children: React.ReactNode;\n};\nfunction componentActions(name: string): FunctionComponent<Props> {\n return function ComponentActions({ children }: Props): React.ReactPortal | null {\n const [isInDocument, setIsInDocument] = React.useState<boolean>(false);\n const timer = useRef<ReturnType<typeof setTimeout>>(null);\n const tries = useRef<number>(0);\n\n /* eslint-disable react-hooks/exhaustive-deps */\n useEffect(() => {\n checkInDocument();\n }, []);\n\n const checkInDocument = () => {\n clearTimeout(timer.current);\n if (tries.current > 10) {\n return;\n }\n const el = document.querySelector(`#${name}_header_actions`);\n if (el) {\n setIsInDocument(true);\n return;\n }\n\n setIsInDocument(false);\n tries.current = tries.current + 1;\n timer.current = setTimeout(checkInDocument, 50);\n };\n\n if (!isInDocument) {\n return null;\n }\n\n const el = document.querySelector(`#${name}_header_actions`);\n if (!el) {\n return null;\n }\n\n return createPortal(children, el);\n };\n}\n\nexport { componentActions };\n","import React from 'react';\nimport { ColumnSection, SectionColumnWidth } from '../types';\nimport { ComponentElement } from '../components';\nimport { SectionProps } from './tools';\n\n// grid grid-flow-row auto-rows-max grid-cols-1 md:grid-cols-3 lg:grid-cols-9 xl:grid-cols-12\nconst cssMap: Record<SectionColumnWidth, string> = {\n full: 'full-column relative w-full', // 'col-span-1 md:col-span-4 lg:col-span-8 xl:col-span-12',\n half: 'half-column relative w-full lg:w-1/2 self-stretch',\n '1/3': 'third-column relative w-full lg:w-1/3',\n '2/3': 'two-third-column relative w-full lg:w-2/3',\n '1/4': 'quarter-column relative w-full lg:w-1/4',\n '3/4': 'three-quarter-column relative w-full lg:w-3/4',\n};\n\nfunction ColumnSectionElement({ section }: SectionProps) {\n const { columns, type } = section as ColumnSection;\n return (\n <div className=\"core-page-column-section relative w-full max-w-full flex flex-column lg:flex-row gap-2 md:gap-3 lg:gap-4 xl:gap-6\">\n {columns.map((col, idx) => (\n <div className={cssMap[col.width]} key={`${type}_${col.component.name}_${idx}`}>\n <ComponentElement component={col.component} />\n </div>\n ))}\n </div>\n );\n}\n\nexport { ColumnSectionElement };\n","import React from 'react';\nimport { TabbedSection, SectionTab, UiAction, EventName } from '../types';\nimport { useUiAction } from '../ui.actions';\nimport { SectionProps } from './tools';\nimport { useAnalyticsContext } from '../analytics/analytics.provider';\nimport { useCorePageState } from '../page/provider';\n\nfunction TabbedSectionElement({ section }: SectionProps) {\n const { tabs, activeTab } = section as TabbedSection;\n const { dsl, dataLoading } = useCorePageState();\n\n const { perform } = useUiAction();\n\n const { trackPageEvent } = useAnalyticsContext();\n\n const handleTabClick = (tab: SectionTab) => {\n trackPageEvent(EventName.NavigationClicked, {\n linkName: tab.label,\n navigationSource: `${dsl.heading.title} ${getTabLabelFromTabs(tabs, activeTab)}`,\n });\n\n const uiAction: UiAction = {\n type: 'NAVIGATE_TO_PATH',\n payload: {\n path: tab.path,\n },\n };\n perform(uiAction);\n };\n\n const baseClassNames = 'text-left p-4 border-b';\n const activeClassNames = 'text-brand border-brand border-b-2 ';\n const inactiveClassNames = 'border-light cursor transition-colors';\n const disabledClassNames = 'text-inactive cursor-not-allowed';\n const enabledClassNames = 'hover:bg-medium';\n\n const getClassName = (tab: SectionTab) => {\n return `${baseClassNames} ${tab.name === activeTab ? activeClassNames : inactiveClassNames} ${\n dataLoading ? disabledClassNames : enabledClassNames\n }`;\n };\n\n return (\n <div className=\"relative flex items-stretch pb-1\">\n {tabs.map(tab => (\n <button disabled={dataLoading} className={getClassName(tab)} key={tab.name} onClick={() => handleTabClick(tab)}>\n {tab.label}\n </button>\n ))}\n <span className=\"flex-grow inline-block border-b border-light\"> </span>\n </div>\n );\n}\n\nexport { TabbedSectionElement };\n\nconst getTabLabelFromTabs = (tabs: SectionTab[], activeTab: string) => {\n return tabs.find(tab => tab.name === activeTab).label;\n};\n","import { Section, SectionType } from '../types';\nimport { FunctionComponent } from 'react';\nimport { ColumnSectionElement } from './column';\nimport { TabbedSectionElement } from './tabbed';\nimport { UnknownSection } from './unknown';\n\nexport type SectionProps = {\n section: Section;\n};\n\nconst sectionsMap: Record<SectionType, FunctionComponent<SectionProps>> = {\n tabbed: TabbedSectionElement,\n column: ColumnSectionElement,\n unknown: UnknownSection,\n};\n\nexport function getSectionElement(section: Section): FunctionComponent<SectionProps> {\n return sectionsMap[section.type];\n}\n","import React from 'react';\nimport { SectionProps } from './tools';\n\nfunction UnknownSection(_: SectionProps) {\n return (\n <div className=\"border border-ui-red rounded px-6 text-ui-red py-4\">\n You're seeing this message because you have forgot to define a section properly in your service\n </div>\n );\n}\n\nexport { UnknownSection };\n","import { Section } from '../types';\nimport React from 'react';\nimport { getSectionElement } from './tools';\n\ntype ElementProps = {\n section: Section;\n};\nfunction SectionElement({ section }: ElementProps) {\n const { title } = section;\n const Element = getSectionElement(section);\n\n return (\n <>\n {title && (\n <div className=\"flex items-center gap-2\">\n <h1 className=\"font-bold text-2xl my-0 flex-grow\">{title}</h1>\n </div>\n )}\n <Element section={section} />\n </>\n );\n}\n\nexport { SectionElement };\n","import { Section } from '../types';\nimport React from 'react';\nimport { SectionElement } from './element';\n\ntype Props = {\n sections: Section[];\n};\nfunction Sections({ sections }: Props) {\n if (!sections) {\n return null;\n }\n return (\n <div className=\"core-page-sections relative w-full max-w-full flex flex-column gap-8\">\n {sections.map((section, idx) => (\n <SectionElement key={`section_${idx}`} section={section} />\n ))}\n </div>\n );\n}\n\nexport { Sections };\n","import React, { Fragment } from 'react';\nimport { elements } from '@ecosystem/newron-design-system';\nimport { PageTitleSelector, Params } from '../../types';\nimport { MenuButtonProps, SelectionMenuComponent } from '../../common/selection.menu';\n\ntype Props = {\n title: string | (string | PageTitleSelector)[];\n pageParams: Params;\n updateSettings: (updates: Params) => void;\n};\nfunction PageTitle({ title, pageParams, updateSettings }: Props) {\n const titleParts = typeof title === 'string' ? [title] : title;\n\n const handleParamsChange = (updates: Params) => {\n updateSettings({\n ...{},\n ...pageParams,\n ...updates,\n });\n };\n\n return (\n <div className=\"text-xl text-heading flex items-baseline gap-2 my-0\">\n {titleParts.map((part, idx) => (\n <Fragment key={`pt_${idx}`}>\n {typeof part === 'string' && <span className=\"font-bold\">{part}</span>}\n {typeof part !== 'string' && (\n <SelectionMenuComponent\n menuConfig={part.menu}\n values={pageParams || {}}\n onUpdate={handleParamsChange}\n button={TitleButton}\n buttonLabel={part.displayText}\n />\n )}\n </Fragment>\n ))}\n </div>\n );\n}\n\nfunction TitleButton({ onClick, children }: MenuButtonProps) {\n const { Icon } = elements;\n\n return (\n <button\n className=\"text-left text-brand p-0 flex items-center transition-colors hover:text-brand-dark\"\n onClick={onClick}\n >\n {children}\n <Icon color=\"brand\">\n <Icon.icons.ChevronDown />\n </Icon>\n </button>\n );\n}\n\nexport { PageTitle };\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./header.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./header.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, { useEffect, useState } from 'react';\nimport {\n FilterToggleButton,\n ClientDrawer,\n CopySavedViewLinkButton,\n SavedViewButtonsTrackingTags,\n} from '@ecosystem/newron-client-lib';\nimport { Context, EventName, PageHeading, Params, UiAction } from '../../types';\nimport { ContextManager } from '../../context/manager';\nimport { PageTitle } from './title';\nimport { useUiAction } from '../../ui.actions';\nimport { SavedViewVersion, UseRestoreSavedViewV1 } from '../../tools/useSavedView';\nimport { PageSettingsManager } from '../settings';\nimport './header.css';\nimport { useAnalyticsContext } from '../../analytics/analytics.provider';\nimport { getFilterEventDetails } from '../../filters/utils';\nimport { getAppliedFilters } from '../../analytics/trackPageElementViewed.hook';\nimport { shouldDisableGroupAnalyticsSharing } from './utils';\nimport { PageInfo } from '../types';\nimport { useCorePageState } from '../provider';\n\ntype Props = {\n heading: PageHeading;\n pageParams: Params;\n updateSettings: (updates: Params) => void;\n page: PageInfo;\n};\nfunction Heading({ heading, updateSettings, pageParams }: Props) {\n const { trayType, setCustomizationTray, setIsFilterTray } = useCorePageState();\n const [usesFilters, setUsesFilters] = useState<boolean | undefined>();\n const { perform } = useUiAction();\n const { openDrawer, closeDrawer } = ClientDrawer.useClientDrawer();\n const { getAnalyticTrackingTags, trackPageEvent } = useAnalyticsContext();\n const context = ContextManager.getInstance().get();\n const disableCopyLinkButton = shouldDisableGroupAnalyticsSharing();\n\n useEffect(() => {\n const subscriber = (context: Context) => {\n if (context) {\n setUsesFilters(context.filters?.sections.length > 0);\n }\n };\n ContextManager.getInstance().subscribeToSettingsChanges(subscriber);\n return () => ContextManager.getInstance().unsubscribeFromSettingsChanges(subscriber);\n }, []);\n\n /* eslint-disable react-hooks/exhaustive-deps */\n useEffect(() => {\n if (usesFilters === false) {\n closeDrawer();\n }\n }, [usesFilters]);\n\n if (!heading) {\n return null;\n }\n\n const { title, backLink } = heading;\n\n const handleBack = () => {\n const uiAction: UiAction = {\n type: 'NAVIGATE_TO_PATH',\n payload: {\n path: backLink.path,\n },\n };\n perform(uiAction);\n };\n\n const handleCreateViewState = (): UseRestoreSavedViewV1 => {\n const context = ContextManager.getInstance().get();\n return {\n version: SavedViewVersion.v1,\n settingValues: context.settings.values,\n filterValues: context.filters?.values || {},\n pageSettings: PageSettingsManager.getInstance().get(),\n };\n };\n\n const getCopyLinkTrackingTags = (): SavedViewButtonsTrackingTags => {\n return getAnalyticTrackingTags(EventName.PageElementClicked, {\n elementType: 'Link',\n elementCategory: 'Copy Link',\n elementName: 'Copy Link',\n });\n };\n\n const filterToggleButtonOnClick = (expanded: boolean) => {\n // if the page is in custom tier view, and the custom price tray is open, 'close' it and open the filter tray over it\n if (trayType) {\n setCustomizationTray(null);\n setIsFilterTray(true);\n openDrawer();\n }\n if (!expanded) {\n setIsFilterTray(true);\n return;\n }\n\n const globalFilterApplied = getAppliedFilters(context.filters).globalFilterApplied;\n const globalFilterAppliedValue = Array.isArray(globalFilterApplied) ? globalFilterApplied[0] : globalFilterApplied;\n\n trackPageEvent(...getFilterEventDetails('Save filter', globalFilterAppliedValue));\n };\n\n return (\n <div className=\"core-page-header flex items-center gap-4 stick-to-app-header bg-light\">\n <div className=\"flex-grow\">\n {backLink && (\n <button onClick={handleBack} className=\"text-left text-sm text-brand hover:underline hover:text-brand-dark\">\n {backLink.label || 'Back'}\n </button>\n )}\n <div className=\"flex items-center gap-4\">\n <PageTitle title={title} pageParams={pageParams} updateSettings={updateSettings} />\n </div>\n </div>\n <div className=\"flex\">\n {!disableCopyLinkButton && (\n <CopySavedViewLinkButton\n createViewStateFn={handleCreateViewState}\n getTrackingTags={getCopyLinkTrackingTags}\n />\n )}\n {usesFilters && (\n <div className=\"flex-grow flex items-center justify-end pl-4\">\n <FilterToggleButton onClick={filterToggleButtonOnClick} />\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport { Heading };\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./page.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./page.css\";\n export default content && content.locals ? content.locals : undefined;\n","/**\n * react-router v7.4.1\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nvar __typeError = (msg) => {\n throw TypeError(msg);\n};\nvar __accessCheck = (obj, member, msg) => member.has(obj) || __typeError(\"Cannot \" + msg);\nvar __privateGet = (obj, member, getter) => (__accessCheck(obj, member, \"read from private field\"), getter ? getter.call(obj) : member.get(obj));\nvar __privateAdd = (obj, member, value) => member.has(obj) ? __typeError(\"Cannot add the same private member more than once\") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n\n// lib/router/history.ts\nvar Action = /* @__PURE__ */ ((Action2) => {\n Action2[\"Pop\"] = \"POP\";\n Action2[\"Push\"] = \"PUSH\";\n Action2[\"Replace\"] = \"REPLACE\";\n return Action2;\n})(Action || {});\nvar PopStateEventType = \"popstate\";\nfunction createMemoryHistory(options = {}) {\n let { initialEntries = [\"/\"], initialIndex, v5Compat = false } = options;\n let entries;\n entries = initialEntries.map(\n (entry, index2) => createMemoryLocation(\n entry,\n typeof entry === \"string\" ? null : entry.state,\n index2 === 0 ? \"default\" : void 0\n )\n );\n let index = clampIndex(\n initialIndex == null ? entries.length - 1 : initialIndex\n );\n let action = \"POP\" /* Pop */;\n let listener = null;\n function clampIndex(n) {\n return Math.min(Math.max(n, 0), entries.length - 1);\n }\n function getCurrentLocation() {\n return entries[index];\n }\n function createMemoryLocation(to, state = null, key) {\n let location = createLocation(\n entries ? getCurrentLocation().pathname : \"/\",\n to,\n state,\n key\n );\n warning(\n location.pathname.charAt(0) === \"/\",\n `relative pathnames are not supported in memory history: ${JSON.stringify(\n to\n )}`\n );\n return location;\n }\n function createHref2(to) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n let history = {\n get index() {\n return index;\n },\n get action() {\n return action;\n },\n get location() {\n return getCurrentLocation();\n },\n createHref: createHref2,\n createURL(to) {\n return new URL(createHref2(to), \"http://localhost\");\n },\n encodeLocation(to) {\n let path = typeof to === \"string\" ? parsePath(to) : to;\n return {\n pathname: path.pathname || \"\",\n search: path.search || \"\",\n hash: path.hash || \"\"\n };\n },\n push(to, state) {\n action = \"PUSH\" /* Push */;\n let nextLocation = createMemoryLocation(to, state);\n index += 1;\n entries.splice(index, entries.length, nextLocation);\n if (v5Compat && listener) {\n listener({ action, location: nextLocation, delta: 1 });\n }\n },\n replace(to, state) {\n action = \"REPLACE\" /* Replace */;\n let nextLocation = createMemoryLocation(to, state);\n entries[index] = nextLocation;\n if (v5Compat && listener) {\n listener({ action, location: nextLocation, delta: 0 });\n }\n },\n go(delta) {\n action = \"POP\" /* Pop */;\n let nextIndex = clampIndex(index + delta);\n let nextLocation = entries[nextIndex];\n index = nextIndex;\n if (listener) {\n listener({ action, location: nextLocation, delta });\n }\n },\n listen(fn) {\n listener = fn;\n return () => {\n listener = null;\n };\n }\n };\n return history;\n}\nfunction createBrowserHistory(options = {}) {\n function createBrowserLocation(window2, globalHistory) {\n let { pathname, search, hash } = window2.location;\n return createLocation(\n \"\",\n { pathname, search, hash },\n // state defaults to `null` because `window.history.state` does\n globalHistory.state && globalHistory.state.usr || null,\n globalHistory.state && globalHistory.state.key || \"default\"\n );\n }\n function createBrowserHref(window2, to) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n return getUrlBasedHistory(\n createBrowserLocation,\n createBrowserHref,\n null,\n options\n );\n}\nfunction createHashHistory(options = {}) {\n function createHashLocation(window2, globalHistory) {\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\"\n } = parsePath(window2.location.hash.substring(1));\n if (!pathname.startsWith(\"/\") && !pathname.startsWith(\".\")) {\n pathname = \"/\" + pathname;\n }\n return createLocation(\n \"\",\n { pathname, search, hash },\n // state defaults to `null` because `window.history.state` does\n globalHistory.state && globalHistory.state.usr || null,\n globalHistory.state && globalHistory.state.key || \"default\"\n );\n }\n function createHashHref(window2, to) {\n let base = window2.document.querySelector(\"base\");\n let href2 = \"\";\n if (base && base.getAttribute(\"href\")) {\n let url = window2.location.href;\n let hashIndex = url.indexOf(\"#\");\n href2 = hashIndex === -1 ? url : url.slice(0, hashIndex);\n }\n return href2 + \"#\" + (typeof to === \"string\" ? to : createPath(to));\n }\n function validateHashLocation(location, to) {\n warning(\n location.pathname.charAt(0) === \"/\",\n `relative pathnames are not supported in hash history.push(${JSON.stringify(\n to\n )})`\n );\n }\n return getUrlBasedHistory(\n createHashLocation,\n createHashHref,\n validateHashLocation,\n options\n );\n}\nfunction invariant(value, message) {\n if (value === false || value === null || typeof value === \"undefined\") {\n throw new Error(message);\n }\n}\nfunction warning(cond, message) {\n if (!cond) {\n if (typeof console !== \"undefined\") console.warn(message);\n try {\n throw new Error(message);\n } catch (e) {\n }\n }\n}\nfunction createKey() {\n return Math.random().toString(36).substring(2, 10);\n}\nfunction getHistoryState(location, index) {\n return {\n usr: location.state,\n key: location.key,\n idx: index\n };\n}\nfunction createLocation(current, to, state = null, key) {\n let location = {\n pathname: typeof current === \"string\" ? current : current.pathname,\n search: \"\",\n hash: \"\",\n ...typeof to === \"string\" ? parsePath(to) : to,\n state,\n // TODO: This could be cleaned up. push/replace should probably just take\n // full Locations now and avoid the need to run through this flow at all\n // But that's a pretty big refactor to the current test suite so going to\n // keep as is for the time being and just let any incoming keys take precedence\n key: to && to.key || key || createKey()\n };\n return location;\n}\nfunction createPath({\n pathname = \"/\",\n search = \"\",\n hash = \"\"\n}) {\n if (search && search !== \"?\")\n pathname += search.charAt(0) === \"?\" ? search : \"?\" + search;\n if (hash && hash !== \"#\")\n pathname += hash.charAt(0) === \"#\" ? hash : \"#\" + hash;\n return pathname;\n}\nfunction parsePath(path) {\n let parsedPath = {};\n if (path) {\n let hashIndex = path.indexOf(\"#\");\n if (hashIndex >= 0) {\n parsedPath.hash = path.substring(hashIndex);\n path = path.substring(0, hashIndex);\n }\n let searchIndex = path.indexOf(\"?\");\n if (searchIndex >= 0) {\n parsedPath.search = path.substring(searchIndex);\n path = path.substring(0, searchIndex);\n }\n if (path) {\n parsedPath.pathname = path;\n }\n }\n return parsedPath;\n}\nfunction getUrlBasedHistory(getLocation, createHref2, validateLocation, options = {}) {\n let { window: window2 = document.defaultView, v5Compat = false } = options;\n let globalHistory = window2.history;\n let action = \"POP\" /* Pop */;\n let listener = null;\n let index = getIndex();\n if (index == null) {\n index = 0;\n globalHistory.replaceState({ ...globalHistory.state, idx: index }, \"\");\n }\n function getIndex() {\n let state = globalHistory.state || { idx: null };\n return state.idx;\n }\n function handlePop() {\n action = \"POP\" /* Pop */;\n let nextIndex = getIndex();\n let delta = nextIndex == null ? null : nextIndex - index;\n index = nextIndex;\n if (listener) {\n listener({ action, location: history.location, delta });\n }\n }\n function push(to, state) {\n action = \"PUSH\" /* Push */;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n index = getIndex() + 1;\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n try {\n globalHistory.pushState(historyState, \"\", url);\n } catch (error) {\n if (error instanceof DOMException && error.name === \"DataCloneError\") {\n throw error;\n }\n window2.location.assign(url);\n }\n if (v5Compat && listener) {\n listener({ action, location: history.location, delta: 1 });\n }\n }\n function replace2(to, state) {\n action = \"REPLACE\" /* Replace */;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n index = getIndex();\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n globalHistory.replaceState(historyState, \"\", url);\n if (v5Compat && listener) {\n listener({ action, location: history.location, delta: 0 });\n }\n }\n function createURL(to) {\n let base = window2.location.origin !== \"null\" ? window2.location.origin : window2.location.href;\n let href2 = typeof to === \"string\" ? to : createPath(to);\n href2 = href2.replace(/ $/, \"%20\");\n invariant(\n base,\n `No window.location.(origin|href) available to create URL for href: ${href2}`\n );\n return new URL(href2, base);\n }\n let history = {\n get action() {\n return action;\n },\n get location() {\n return getLocation(window2, globalHistory);\n },\n listen(fn) {\n if (listener) {\n throw new Error(\"A history only accepts one active listener\");\n }\n window2.addEventListener(PopStateEventType, handlePop);\n listener = fn;\n return () => {\n window2.removeEventListener(PopStateEventType, handlePop);\n listener = null;\n };\n },\n createHref(to) {\n return createHref2(window2, to);\n },\n createURL,\n encodeLocation(to) {\n let url = createURL(to);\n return {\n pathname: url.pathname,\n search: url.search,\n hash: url.hash\n };\n },\n push,\n replace: replace2,\n go(n) {\n return globalHistory.go(n);\n }\n };\n return history;\n}\n\n// lib/router/utils.ts\nfunction unstable_createContext(defaultValue) {\n return { defaultValue };\n}\nvar _map;\nvar unstable_RouterContextProvider = class {\n constructor(init) {\n __privateAdd(this, _map, /* @__PURE__ */ new Map());\n if (init) {\n for (let [context, value] of init) {\n this.set(context, value);\n }\n }\n }\n get(context) {\n if (__privateGet(this, _map).has(context)) {\n return __privateGet(this, _map).get(context);\n }\n if (context.defaultValue !== void 0) {\n return context.defaultValue;\n }\n throw new Error(\"No value found for context\");\n }\n set(context, value) {\n __privateGet(this, _map).set(context, value);\n }\n};\n_map = new WeakMap();\nvar unsupportedLazyRouteFunctionKeys = /* @__PURE__ */ new Set([\n \"lazy\",\n \"caseSensitive\",\n \"path\",\n \"id\",\n \"index\",\n \"unstable_middleware\",\n \"unstable_lazyMiddleware\",\n \"children\"\n]);\nfunction isIndexRoute(route) {\n return route.index === true;\n}\nfunction convertRoutesToDataRoutes(routes, mapRouteProperties2, parentPath = [], manifest = {}) {\n return routes.map((route, index) => {\n let treePath = [...parentPath, String(index)];\n let id = typeof route.id === \"string\" ? route.id : treePath.join(\"-\");\n invariant(\n route.index !== true || !route.children,\n `Cannot specify children on an index route`\n );\n invariant(\n !manifest[id],\n `Found a route id collision on id \"${id}\". Route id's must be globally unique within Data Router usages`\n );\n if (isIndexRoute(route)) {\n let indexRoute = {\n ...route,\n ...mapRouteProperties2(route),\n id\n };\n manifest[id] = indexRoute;\n return indexRoute;\n } else {\n let pathOrLayoutRoute = {\n ...route,\n ...mapRouteProperties2(route),\n id,\n children: void 0\n };\n manifest[id] = pathOrLayoutRoute;\n if (route.children) {\n pathOrLayoutRoute.children = convertRoutesToDataRoutes(\n route.children,\n mapRouteProperties2,\n treePath,\n manifest\n );\n }\n return pathOrLayoutRoute;\n }\n });\n}\nfunction matchRoutes(routes, locationArg, basename = \"/\") {\n return matchRoutesImpl(routes, locationArg, basename, false);\n}\nfunction matchRoutesImpl(routes, locationArg, basename, allowPartial) {\n let location = typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n let pathname = stripBasename(location.pathname || \"/\", basename);\n if (pathname == null) {\n return null;\n }\n let branches = flattenRoutes(routes);\n rankRouteBranches(branches);\n let matches = null;\n for (let i = 0; matches == null && i < branches.length; ++i) {\n let decoded = decodePath(pathname);\n matches = matchRouteBranch(\n branches[i],\n decoded,\n allowPartial\n );\n }\n return matches;\n}\nfunction convertRouteMatchToUiMatch(match, loaderData) {\n let { route, pathname, params } = match;\n return {\n id: route.id,\n pathname,\n params,\n data: loaderData[route.id],\n handle: route.handle\n };\n}\nfunction flattenRoutes(routes, branches = [], parentsMeta = [], parentPath = \"\") {\n let flattenRoute = (route, index, relativePath) => {\n let meta = {\n relativePath: relativePath === void 0 ? route.path || \"\" : relativePath,\n caseSensitive: route.caseSensitive === true,\n childrenIndex: index,\n route\n };\n if (meta.relativePath.startsWith(\"/\")) {\n invariant(\n meta.relativePath.startsWith(parentPath),\n `Absolute route path \"${meta.relativePath}\" nested under path \"${parentPath}\" is not valid. An absolute child route path must start with the combined path of all its parent routes.`\n );\n meta.relativePath = meta.relativePath.slice(parentPath.length);\n }\n let path = joinPaths([parentPath, meta.relativePath]);\n let routesMeta = parentsMeta.concat(meta);\n if (route.children && route.children.length > 0) {\n invariant(\n // Our types know better, but runtime JS may not!\n // @ts-expect-error\n route.index !== true,\n `Index routes must not have child routes. Please remove all child routes from route path \"${path}\".`\n );\n flattenRoutes(route.children, branches, routesMeta, path);\n }\n if (route.path == null && !route.index) {\n return;\n }\n branches.push({\n path,\n score: computeScore(path, route.index),\n routesMeta\n });\n };\n routes.forEach((route, index) => {\n if (route.path === \"\" || !route.path?.includes(\"?\")) {\n flattenRoute(route, index);\n } else {\n for (let exploded of explodeOptionalSegments(route.path)) {\n flattenRoute(route, index, exploded);\n }\n }\n });\n return branches;\n}\nfunction explodeOptionalSegments(path) {\n let segments = path.split(\"/\");\n if (segments.length === 0) return [];\n let [first, ...rest] = segments;\n let isOptional = first.endsWith(\"?\");\n let required = first.replace(/\\?$/, \"\");\n if (rest.length === 0) {\n return isOptional ? [required, \"\"] : [required];\n }\n let restExploded = explodeOptionalSegments(rest.join(\"/\"));\n let result = [];\n result.push(\n ...restExploded.map(\n (subpath) => subpath === \"\" ? required : [required, subpath].join(\"/\")\n )\n );\n if (isOptional) {\n result.push(...restExploded);\n }\n return result.map(\n (exploded) => path.startsWith(\"/\") && exploded === \"\" ? \"/\" : exploded\n );\n}\nfunction rankRouteBranches(branches) {\n branches.sort(\n (a, b) => a.score !== b.score ? b.score - a.score : compareIndexes(\n a.routesMeta.map((meta) => meta.childrenIndex),\n b.routesMeta.map((meta) => meta.childrenIndex)\n )\n );\n}\nvar paramRe = /^:[\\w-]+$/;\nvar dynamicSegmentValue = 3;\nvar indexRouteValue = 2;\nvar emptySegmentValue = 1;\nvar staticSegmentValue = 10;\nvar splatPenalty = -2;\nvar isSplat = (s) => s === \"*\";\nfunction computeScore(path, index) {\n let segments = path.split(\"/\");\n let initialScore = segments.length;\n if (segments.some(isSplat)) {\n initialScore += splatPenalty;\n }\n if (index) {\n initialScore += indexRouteValue;\n }\n return segments.filter((s) => !isSplat(s)).reduce(\n (score, segment) => score + (paramRe.test(segment) ? dynamicSegmentValue : segment === \"\" ? emptySegmentValue : staticSegmentValue),\n initialScore\n );\n}\nfunction compareIndexes(a, b) {\n let siblings = a.length === b.length && a.slice(0, -1).every((n, i) => n === b[i]);\n return siblings ? (\n // If two routes are siblings, we should try to match the earlier sibling\n // first. This allows people to have fine-grained control over the matching\n // behavior by simply putting routes with identical paths in the order they\n // want them tried.\n a[a.length - 1] - b[b.length - 1]\n ) : (\n // Otherwise, it doesn't really make sense to rank non-siblings by index,\n // so they sort equally.\n 0\n );\n}\nfunction matchRouteBranch(branch, pathname, allowPartial = false) {\n let { routesMeta } = branch;\n let matchedParams = {};\n let matchedPathname = \"/\";\n let matches = [];\n for (let i = 0; i < routesMeta.length; ++i) {\n let meta = routesMeta[i];\n let end = i === routesMeta.length - 1;\n let remainingPathname = matchedPathname === \"/\" ? pathname : pathname.slice(matchedPathname.length) || \"/\";\n let match = matchPath(\n { path: meta.relativePath, caseSensitive: meta.caseSensitive, end },\n remainingPathname\n );\n let route = meta.route;\n if (!match && end && allowPartial && !routesMeta[routesMeta.length - 1].route.index) {\n match = matchPath(\n {\n path: meta.relativePath,\n caseSensitive: meta.caseSensitive,\n end: false\n },\n remainingPathname\n );\n }\n if (!match) {\n return null;\n }\n Object.assign(matchedParams, match.params);\n matches.push({\n // TODO: Can this as be avoided?\n params: matchedParams,\n pathname: joinPaths([matchedPathname, match.pathname]),\n pathnameBase: normalizePathname(\n joinPaths([matchedPathname, match.pathnameBase])\n ),\n route\n });\n if (match.pathnameBase !== \"/\") {\n matchedPathname = joinPaths([matchedPathname, match.pathnameBase]);\n }\n }\n return matches;\n}\nfunction generatePath(originalPath, params = {}) {\n let path = originalPath;\n if (path.endsWith(\"*\") && path !== \"*\" && !path.endsWith(\"/*\")) {\n warning(\n false,\n `Route path \"${path}\" will be treated as if it were \"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must always follow a \\`/\\` in the pattern. To get rid of this warning, please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n );\n path = path.replace(/\\*$/, \"/*\");\n }\n const prefix = path.startsWith(\"/\") ? \"/\" : \"\";\n const stringify = (p) => p == null ? \"\" : typeof p === \"string\" ? p : String(p);\n const segments = path.split(/\\/+/).map((segment, index, array) => {\n const isLastSegment = index === array.length - 1;\n if (isLastSegment && segment === \"*\") {\n const star = \"*\";\n return stringify(params[star]);\n }\n const keyMatch = segment.match(/^:([\\w-]+)(\\??)$/);\n if (keyMatch) {\n const [, key, optional] = keyMatch;\n let param = params[key];\n invariant(optional === \"?\" || param != null, `Missing \":${key}\" param`);\n return stringify(param);\n }\n return segment.replace(/\\?$/g, \"\");\n }).filter((segment) => !!segment);\n return prefix + segments.join(\"/\");\n}\nfunction matchPath(pattern, pathname) {\n if (typeof pattern === \"string\") {\n pattern = { path: pattern, caseSensitive: false, end: true };\n }\n let [matcher, compiledParams] = compilePath(\n pattern.path,\n pattern.caseSensitive,\n pattern.end\n );\n let match = pathname.match(matcher);\n if (!match) return null;\n let matchedPathname = match[0];\n let pathnameBase = matchedPathname.replace(/(.)\\/+$/, \"$1\");\n let captureGroups = match.slice(1);\n let params = compiledParams.reduce(\n (memo2, { paramName, isOptional }, index) => {\n if (paramName === \"*\") {\n let splatValue = captureGroups[index] || \"\";\n pathnameBase = matchedPathname.slice(0, matchedPathname.length - splatValue.length).replace(/(.)\\/+$/, \"$1\");\n }\n const value = captureGroups[index];\n if (isOptional && !value) {\n memo2[paramName] = void 0;\n } else {\n memo2[paramName] = (value || \"\").replace(/%2F/g, \"/\");\n }\n return memo2;\n },\n {}\n );\n return {\n params,\n pathname: matchedPathname,\n pathnameBase,\n pattern\n };\n}\nfunction compilePath(path, caseSensitive = false, end = true) {\n warning(\n path === \"*\" || !path.endsWith(\"*\") || path.endsWith(\"/*\"),\n `Route path \"${path}\" will be treated as if it were \"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must always follow a \\`/\\` in the pattern. To get rid of this warning, please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n );\n let params = [];\n let regexpSource = \"^\" + path.replace(/\\/*\\*?$/, \"\").replace(/^\\/*/, \"/\").replace(/[\\\\.*+^${}|()[\\]]/g, \"\\\\$&\").replace(\n /\\/:([\\w-]+)(\\?)?/g,\n (_, paramName, isOptional) => {\n params.push({ paramName, isOptional: isOptional != null });\n return isOptional ? \"/?([^\\\\/]+)?\" : \"/([^\\\\/]+)\";\n }\n );\n if (path.endsWith(\"*\")) {\n params.push({ paramName: \"*\" });\n regexpSource += path === \"*\" || path === \"/*\" ? \"(.*)$\" : \"(?:\\\\/(.+)|\\\\/*)$\";\n } else if (end) {\n regexpSource += \"\\\\/*$\";\n } else if (path !== \"\" && path !== \"/\") {\n regexpSource += \"(?:(?=\\\\/|$))\";\n } else {\n }\n let matcher = new RegExp(regexpSource, caseSensitive ? void 0 : \"i\");\n return [matcher, params];\n}\nfunction decodePath(value) {\n try {\n return value.split(\"/\").map((v) => decodeURIComponent(v).replace(/\\//g, \"%2F\")).join(\"/\");\n } catch (error) {\n warning(\n false,\n `The URL path \"${value}\" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${error}).`\n );\n return value;\n }\n}\nfunction stripBasename(pathname, basename) {\n if (basename === \"/\") return pathname;\n if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {\n return null;\n }\n let startIndex = basename.endsWith(\"/\") ? basename.length - 1 : basename.length;\n let nextChar = pathname.charAt(startIndex);\n if (nextChar && nextChar !== \"/\") {\n return null;\n }\n return pathname.slice(startIndex) || \"/\";\n}\nfunction resolvePath(to, fromPathname = \"/\") {\n let {\n pathname: toPathname,\n search = \"\",\n hash = \"\"\n } = typeof to === \"string\" ? parsePath(to) : to;\n let pathname = toPathname ? toPathname.startsWith(\"/\") ? toPathname : resolvePathname(toPathname, fromPathname) : fromPathname;\n return {\n pathname,\n search: normalizeSearch(search),\n hash: normalizeHash(hash)\n };\n}\nfunction resolvePathname(relativePath, fromPathname) {\n let segments = fromPathname.replace(/\\/+$/, \"\").split(\"/\");\n let relativeSegments = relativePath.split(\"/\");\n relativeSegments.forEach((segment) => {\n if (segment === \"..\") {\n if (segments.length > 1) segments.pop();\n } else if (segment !== \".\") {\n segments.push(segment);\n }\n });\n return segments.length > 1 ? segments.join(\"/\") : \"/\";\n}\nfunction getInvalidPathError(char, field, dest, path) {\n return `Cannot include a '${char}' character in a manually specified \\`to.${field}\\` field [${JSON.stringify(\n path\n )}]. Please separate it out to the \\`to.${dest}\\` field. Alternatively you may provide the full path as a string in <Link to=\"...\"> and the router will parse it for you.`;\n}\nfunction getPathContributingMatches(matches) {\n return matches.filter(\n (match, index) => index === 0 || match.route.path && match.route.path.length > 0\n );\n}\nfunction getResolveToMatches(matches) {\n let pathMatches = getPathContributingMatches(matches);\n return pathMatches.map(\n (match, idx) => idx === pathMatches.length - 1 ? match.pathname : match.pathnameBase\n );\n}\nfunction resolveTo(toArg, routePathnames, locationPathname, isPathRelative = false) {\n let to;\n if (typeof toArg === \"string\") {\n to = parsePath(toArg);\n } else {\n to = { ...toArg };\n invariant(\n !to.pathname || !to.pathname.includes(\"?\"),\n getInvalidPathError(\"?\", \"pathname\", \"search\", to)\n );\n invariant(\n !to.pathname || !to.pathname.includes(\"#\"),\n getInvalidPathError(\"#\", \"pathname\", \"hash\", to)\n );\n invariant(\n !to.search || !to.search.includes(\"#\"),\n getInvalidPathError(\"#\", \"search\", \"hash\", to)\n );\n }\n let isEmptyPath = toArg === \"\" || to.pathname === \"\";\n let toPathname = isEmptyPath ? \"/\" : to.pathname;\n let from;\n if (toPathname == null) {\n from = locationPathname;\n } else {\n let routePathnameIndex = routePathnames.length - 1;\n if (!isPathRelative && toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n while (toSegments[0] === \"..\") {\n toSegments.shift();\n routePathnameIndex -= 1;\n }\n to.pathname = toSegments.join(\"/\");\n }\n from = routePathnameIndex >= 0 ? routePathnames[routePathnameIndex] : \"/\";\n }\n let path = resolvePath(to, from);\n let hasExplicitTrailingSlash = toPathname && toPathname !== \"/\" && toPathname.endsWith(\"/\");\n let hasCurrentTrailingSlash = (isEmptyPath || toPathname === \".\") && locationPathname.endsWith(\"/\");\n if (!path.pathname.endsWith(\"/\") && (hasExplicitTrailingSlash || hasCurrentTrailingSlash)) {\n path.pathname += \"/\";\n }\n return path;\n}\nvar joinPaths = (paths) => paths.join(\"/\").replace(/\\/\\/+/g, \"/\");\nvar normalizePathname = (pathname) => pathname.replace(/\\/+$/, \"\").replace(/^\\/*/, \"/\");\nvar normalizeSearch = (search) => !search || search === \"?\" ? \"\" : search.startsWith(\"?\") ? search : \"?\" + search;\nvar normalizeHash = (hash) => !hash || hash === \"#\" ? \"\" : hash.startsWith(\"#\") ? hash : \"#\" + hash;\nvar DataWithResponseInit = class {\n constructor(data2, init) {\n this.type = \"DataWithResponseInit\";\n this.data = data2;\n this.init = init || null;\n }\n};\nfunction data(data2, init) {\n return new DataWithResponseInit(\n data2,\n typeof init === \"number\" ? { status: init } : init\n );\n}\nvar redirect = (url, init = 302) => {\n let responseInit = init;\n if (typeof responseInit === \"number\") {\n responseInit = { status: responseInit };\n } else if (typeof responseInit.status === \"undefined\") {\n responseInit.status = 302;\n }\n let headers = new Headers(responseInit.headers);\n headers.set(\"Location\", url);\n return new Response(null, { ...responseInit, headers });\n};\nvar redirectDocument = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Reload-Document\", \"true\");\n return response;\n};\nvar replace = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Replace\", \"true\");\n return response;\n};\nvar ErrorResponseImpl = class {\n constructor(status, statusText, data2, internal = false) {\n this.status = status;\n this.statusText = statusText || \"\";\n this.internal = internal;\n if (data2 instanceof Error) {\n this.data = data2.toString();\n this.error = data2;\n } else {\n this.data = data2;\n }\n }\n};\nfunction isRouteErrorResponse(error) {\n return error != null && typeof error.status === \"number\" && typeof error.statusText === \"string\" && typeof error.internal === \"boolean\" && \"data\" in error;\n}\n\n// lib/router/router.ts\nvar validMutationMethodsArr = [\n \"POST\",\n \"PUT\",\n \"PATCH\",\n \"DELETE\"\n];\nvar validMutationMethods = new Set(\n validMutationMethodsArr\n);\nvar validRequestMethodsArr = [\n \"GET\",\n ...validMutationMethodsArr\n];\nvar validRequestMethods = new Set(validRequestMethodsArr);\nvar redirectStatusCodes = /* @__PURE__ */ new Set([301, 302, 303, 307, 308]);\nvar redirectPreserveMethodStatusCodes = /* @__PURE__ */ new Set([307, 308]);\nvar IDLE_NAVIGATION = {\n state: \"idle\",\n location: void 0,\n formMethod: void 0,\n formAction: void 0,\n formEncType: void 0,\n formData: void 0,\n json: void 0,\n text: void 0\n};\nvar IDLE_FETCHER = {\n state: \"idle\",\n data: void 0,\n formMethod: void 0,\n formAction: void 0,\n formEncType: void 0,\n formData: void 0,\n json: void 0,\n text: void 0\n};\nvar IDLE_BLOCKER = {\n state: \"unblocked\",\n proceed: void 0,\n reset: void 0,\n location: void 0\n};\nvar ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\nvar defaultMapRouteProperties = (route) => ({\n hasErrorBoundary: Boolean(route.hasErrorBoundary)\n});\nvar TRANSITIONS_STORAGE_KEY = \"remix-router-transitions\";\nvar ResetLoaderDataSymbol = Symbol(\"ResetLoaderData\");\nfunction createRouter(init) {\n const routerWindow = init.window ? init.window : typeof window !== \"undefined\" ? window : void 0;\n const isBrowser2 = typeof routerWindow !== \"undefined\" && typeof routerWindow.document !== \"undefined\" && typeof routerWindow.document.createElement !== \"undefined\";\n invariant(\n init.routes.length > 0,\n \"You must provide a non-empty routes array to createRouter\"\n );\n let mapRouteProperties2 = init.mapRouteProperties || defaultMapRouteProperties;\n let manifest = {};\n let dataRoutes = convertRoutesToDataRoutes(\n init.routes,\n mapRouteProperties2,\n void 0,\n manifest\n );\n let inFlightDataRoutes;\n let basename = init.basename || \"/\";\n let dataStrategyImpl = init.dataStrategy || defaultDataStrategyWithMiddleware;\n let future = {\n unstable_middleware: false,\n ...init.future\n };\n let unlistenHistory = null;\n let subscribers = /* @__PURE__ */ new Set();\n let savedScrollPositions2 = null;\n let getScrollRestorationKey2 = null;\n let getScrollPosition = null;\n let initialScrollRestored = init.hydrationData != null;\n let initialMatches = matchRoutes(dataRoutes, init.history.location, basename);\n let initialMatchesIsFOW = false;\n let initialErrors = null;\n if (initialMatches == null && !init.patchRoutesOnNavigation) {\n let error = getInternalRouterError(404, {\n pathname: init.history.location.pathname\n });\n let { matches, route } = getShortCircuitMatches(dataRoutes);\n initialMatches = matches;\n initialErrors = { [route.id]: error };\n }\n if (initialMatches && !init.hydrationData) {\n let fogOfWar = checkFogOfWar(\n initialMatches,\n dataRoutes,\n init.history.location.pathname\n );\n if (fogOfWar.active) {\n initialMatches = null;\n }\n }\n let initialized;\n if (!initialMatches) {\n initialized = false;\n initialMatches = [];\n let fogOfWar = checkFogOfWar(\n null,\n dataRoutes,\n init.history.location.pathname\n );\n if (fogOfWar.active && fogOfWar.matches) {\n initialMatchesIsFOW = true;\n initialMatches = fogOfWar.matches;\n }\n } else if (initialMatches.some((m) => m.route.lazy)) {\n initialized = false;\n } else if (!initialMatches.some((m) => m.route.loader)) {\n initialized = true;\n } else {\n let loaderData = init.hydrationData ? init.hydrationData.loaderData : null;\n let errors = init.hydrationData ? init.hydrationData.errors : null;\n if (errors) {\n let idx = initialMatches.findIndex(\n (m) => errors[m.route.id] !== void 0\n );\n initialized = initialMatches.slice(0, idx + 1).every((m) => !shouldLoadRouteOnHydration(m.route, loaderData, errors));\n } else {\n initialized = initialMatches.every(\n (m) => !shouldLoadRouteOnHydration(m.route, loaderData, errors)\n );\n }\n }\n let router;\n let state = {\n historyAction: init.history.action,\n location: init.history.location,\n matches: initialMatches,\n initialized,\n navigation: IDLE_NAVIGATION,\n // Don't restore on initial updateState() if we were SSR'd\n restoreScrollPosition: init.hydrationData != null ? false : null,\n preventScrollReset: false,\n revalidation: \"idle\",\n loaderData: init.hydrationData && init.hydrationData.loaderData || {},\n actionData: init.hydrationData && init.hydrationData.actionData || null,\n errors: init.hydrationData && init.hydrationData.errors || initialErrors,\n fetchers: /* @__PURE__ */ new Map(),\n blockers: /* @__PURE__ */ new Map()\n };\n let pendingAction = \"POP\" /* Pop */;\n let pendingPreventScrollReset = false;\n let pendingNavigationController;\n let pendingViewTransitionEnabled = false;\n let appliedViewTransitions = /* @__PURE__ */ new Map();\n let removePageHideEventListener = null;\n let isUninterruptedRevalidation = false;\n let isRevalidationRequired = false;\n let cancelledFetcherLoads = /* @__PURE__ */ new Set();\n let fetchControllers = /* @__PURE__ */ new Map();\n let incrementingLoadId = 0;\n let pendingNavigationLoadId = -1;\n let fetchReloadIds = /* @__PURE__ */ new Map();\n let fetchRedirectIds = /* @__PURE__ */ new Set();\n let fetchLoadMatches = /* @__PURE__ */ new Map();\n let activeFetchers = /* @__PURE__ */ new Map();\n let fetchersQueuedForDeletion = /* @__PURE__ */ new Set();\n let blockerFunctions = /* @__PURE__ */ new Map();\n let unblockBlockerHistoryUpdate = void 0;\n let pendingRevalidationDfd = null;\n function initialize() {\n unlistenHistory = init.history.listen(\n ({ action: historyAction, location, delta }) => {\n if (unblockBlockerHistoryUpdate) {\n unblockBlockerHistoryUpdate();\n unblockBlockerHistoryUpdate = void 0;\n return;\n }\n warning(\n blockerFunctions.size === 0 || delta != null,\n \"You are trying to use a blocker on a POP navigation to a location that was not created by @remix-run/router. This will fail silently in production. This can happen if you are navigating outside the router via `window.history.pushState`/`window.location.hash` instead of using router navigation APIs. This can also happen if you are using createHashRouter and the user manually changes the URL.\"\n );\n let blockerKey = shouldBlockNavigation({\n currentLocation: state.location,\n nextLocation: location,\n historyAction\n });\n if (blockerKey && delta != null) {\n let nextHistoryUpdatePromise = new Promise((resolve) => {\n unblockBlockerHistoryUpdate = resolve;\n });\n init.history.go(delta * -1);\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location,\n proceed() {\n updateBlocker(blockerKey, {\n state: \"proceeding\",\n proceed: void 0,\n reset: void 0,\n location\n });\n nextHistoryUpdatePromise.then(() => init.history.go(delta));\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey, IDLE_BLOCKER);\n updateState({ blockers });\n }\n });\n return;\n }\n return startNavigation(historyAction, location);\n }\n );\n if (isBrowser2) {\n restoreAppliedTransitions(routerWindow, appliedViewTransitions);\n let _saveAppliedTransitions = () => persistAppliedTransitions(routerWindow, appliedViewTransitions);\n routerWindow.addEventListener(\"pagehide\", _saveAppliedTransitions);\n removePageHideEventListener = () => routerWindow.removeEventListener(\"pagehide\", _saveAppliedTransitions);\n }\n if (!state.initialized) {\n startNavigation(\"POP\" /* Pop */, state.location, {\n initialHydration: true\n });\n }\n return router;\n }\n function dispose() {\n if (unlistenHistory) {\n unlistenHistory();\n }\n if (removePageHideEventListener) {\n removePageHideEventListener();\n }\n subscribers.clear();\n pendingNavigationController && pendingNavigationController.abort();\n state.fetchers.forEach((_, key) => deleteFetcher(key));\n state.blockers.forEach((_, key) => deleteBlocker(key));\n }\n function subscribe(fn) {\n subscribers.add(fn);\n return () => subscribers.delete(fn);\n }\n function updateState(newState, opts = {}) {\n state = {\n ...state,\n ...newState\n };\n let unmountedFetchers = [];\n let mountedFetchers = [];\n state.fetchers.forEach((fetcher, key) => {\n if (fetcher.state === \"idle\") {\n if (fetchersQueuedForDeletion.has(key)) {\n unmountedFetchers.push(key);\n } else {\n mountedFetchers.push(key);\n }\n }\n });\n fetchersQueuedForDeletion.forEach((key) => {\n if (!state.fetchers.has(key) && !fetchControllers.has(key)) {\n unmountedFetchers.push(key);\n }\n });\n [...subscribers].forEach(\n (subscriber) => subscriber(state, {\n deletedFetchers: unmountedFetchers,\n viewTransitionOpts: opts.viewTransitionOpts,\n flushSync: opts.flushSync === true\n })\n );\n unmountedFetchers.forEach((key) => deleteFetcher(key));\n mountedFetchers.forEach((key) => state.fetchers.delete(key));\n }\n function completeNavigation(location, newState, { flushSync } = {}) {\n let isActionReload = state.actionData != null && state.navigation.formMethod != null && isMutationMethod(state.navigation.formMethod) && state.navigation.state === \"loading\" && location.state?._isRedirect !== true;\n let actionData;\n if (newState.actionData) {\n if (Object.keys(newState.actionData).length > 0) {\n actionData = newState.actionData;\n } else {\n actionData = null;\n }\n } else if (isActionReload) {\n actionData = state.actionData;\n } else {\n actionData = null;\n }\n let loaderData = newState.loaderData ? mergeLoaderData(\n state.loaderData,\n newState.loaderData,\n newState.matches || [],\n newState.errors\n ) : state.loaderData;\n let blockers = state.blockers;\n if (blockers.size > 0) {\n blockers = new Map(blockers);\n blockers.forEach((_, k) => blockers.set(k, IDLE_BLOCKER));\n }\n let preventScrollReset = pendingPreventScrollReset === true || state.navigation.formMethod != null && isMutationMethod(state.navigation.formMethod) && location.state?._isRedirect !== true;\n if (inFlightDataRoutes) {\n dataRoutes = inFlightDataRoutes;\n inFlightDataRoutes = void 0;\n }\n if (isUninterruptedRevalidation) {\n } else if (pendingAction === \"POP\" /* Pop */) {\n } else if (pendingAction === \"PUSH\" /* Push */) {\n init.history.push(location, location.state);\n } else if (pendingAction === \"REPLACE\" /* Replace */) {\n init.history.replace(location, location.state);\n }\n let viewTransitionOpts;\n if (pendingAction === \"POP\" /* Pop */) {\n let priorPaths = appliedViewTransitions.get(state.location.pathname);\n if (priorPaths && priorPaths.has(location.pathname)) {\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location\n };\n } else if (appliedViewTransitions.has(location.pathname)) {\n viewTransitionOpts = {\n currentLocation: location,\n nextLocation: state.location\n };\n }\n } else if (pendingViewTransitionEnabled) {\n let toPaths = appliedViewTransitions.get(state.location.pathname);\n if (toPaths) {\n toPaths.add(location.pathname);\n } else {\n toPaths = /* @__PURE__ */ new Set([location.pathname]);\n appliedViewTransitions.set(state.location.pathname, toPaths);\n }\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location\n };\n }\n updateState(\n {\n ...newState,\n // matches, errors, fetchers go through as-is\n actionData,\n loaderData,\n historyAction: pendingAction,\n location,\n initialized: true,\n navigation: IDLE_NAVIGATION,\n revalidation: \"idle\",\n restoreScrollPosition: getSavedScrollPosition(\n location,\n newState.matches || state.matches\n ),\n preventScrollReset,\n blockers\n },\n {\n viewTransitionOpts,\n flushSync: flushSync === true\n }\n );\n pendingAction = \"POP\" /* Pop */;\n pendingPreventScrollReset = false;\n pendingViewTransitionEnabled = false;\n isUninterruptedRevalidation = false;\n isRevalidationRequired = false;\n pendingRevalidationDfd?.resolve();\n pendingRevalidationDfd = null;\n }\n async function navigate(to, opts) {\n if (typeof to === \"number\") {\n init.history.go(to);\n return;\n }\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n to,\n opts?.fromRouteId,\n opts?.relative\n );\n let { path, submission, error } = normalizeNavigateOptions(\n false,\n normalizedPath,\n opts\n );\n let currentLocation = state.location;\n let nextLocation = createLocation(state.location, path, opts && opts.state);\n nextLocation = {\n ...nextLocation,\n ...init.history.encodeLocation(nextLocation)\n };\n let userReplace = opts && opts.replace != null ? opts.replace : void 0;\n let historyAction = \"PUSH\" /* Push */;\n if (userReplace === true) {\n historyAction = \"REPLACE\" /* Replace */;\n } else if (userReplace === false) {\n } else if (submission != null && isMutationMethod(submission.formMethod) && submission.formAction === state.location.pathname + state.location.search) {\n historyAction = \"REPLACE\" /* Replace */;\n }\n let preventScrollReset = opts && \"preventScrollReset\" in opts ? opts.preventScrollReset === true : void 0;\n let flushSync = (opts && opts.flushSync) === true;\n let blockerKey = shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction\n });\n if (blockerKey) {\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location: nextLocation,\n proceed() {\n updateBlocker(blockerKey, {\n state: \"proceeding\",\n proceed: void 0,\n reset: void 0,\n location: nextLocation\n });\n navigate(to, opts);\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey, IDLE_BLOCKER);\n updateState({ blockers });\n }\n });\n return;\n }\n await startNavigation(historyAction, nextLocation, {\n submission,\n // Send through the formData serialization error if we have one so we can\n // render at the right error boundary after we match routes\n pendingError: error,\n preventScrollReset,\n replace: opts && opts.replace,\n enableViewTransition: opts && opts.viewTransition,\n flushSync\n });\n }\n function revalidate() {\n if (!pendingRevalidationDfd) {\n pendingRevalidationDfd = createDeferred();\n }\n interruptActiveLoads();\n updateState({ revalidation: \"loading\" });\n let promise = pendingRevalidationDfd.promise;\n if (state.navigation.state === \"submitting\") {\n return promise;\n }\n if (state.navigation.state === \"idle\") {\n startNavigation(state.historyAction, state.location, {\n startUninterruptedRevalidation: true\n });\n return promise;\n }\n startNavigation(\n pendingAction || state.historyAction,\n state.navigation.location,\n {\n overrideNavigation: state.navigation,\n // Proxy through any rending view transition\n enableViewTransition: pendingViewTransitionEnabled === true\n }\n );\n return promise;\n }\n async function startNavigation(historyAction, location, opts) {\n pendingNavigationController && pendingNavigationController.abort();\n pendingNavigationController = null;\n pendingAction = historyAction;\n isUninterruptedRevalidation = (opts && opts.startUninterruptedRevalidation) === true;\n saveScrollPosition(state.location, state.matches);\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n pendingViewTransitionEnabled = (opts && opts.enableViewTransition) === true;\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let loadingNavigation = opts && opts.overrideNavigation;\n let matches = opts?.initialHydration && state.matches && state.matches.length > 0 && !initialMatchesIsFOW ? (\n // `matchRoutes()` has already been called if we're in here via `router.initialize()`\n state.matches\n ) : matchRoutes(routesToUse, location, basename);\n let flushSync = (opts && opts.flushSync) === true;\n if (matches && state.initialized && !isRevalidationRequired && isHashChangeOnly(state.location, location) && !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))) {\n completeNavigation(location, { matches }, { flushSync });\n return;\n }\n let fogOfWar = checkFogOfWar(matches, routesToUse, location.pathname);\n if (fogOfWar.active && fogOfWar.matches) {\n matches = fogOfWar.matches;\n }\n if (!matches) {\n let { error, notFoundMatches, route } = handleNavigational404(\n location.pathname\n );\n completeNavigation(\n location,\n {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error\n }\n },\n { flushSync }\n );\n return;\n }\n pendingNavigationController = new AbortController();\n let request = createClientSideRequest(\n init.history,\n location,\n pendingNavigationController.signal,\n opts && opts.submission\n );\n let scopedContext = new unstable_RouterContextProvider(\n init.unstable_getContext ? await init.unstable_getContext() : void 0\n );\n let pendingActionResult;\n if (opts && opts.pendingError) {\n pendingActionResult = [\n findNearestBoundary(matches).route.id,\n { type: \"error\" /* error */, error: opts.pendingError }\n ];\n } else if (opts && opts.submission && isMutationMethod(opts.submission.formMethod)) {\n let actionResult = await handleAction(\n request,\n location,\n opts.submission,\n matches,\n scopedContext,\n fogOfWar.active,\n { replace: opts.replace, flushSync }\n );\n if (actionResult.shortCircuited) {\n return;\n }\n if (actionResult.pendingActionResult) {\n let [routeId, result] = actionResult.pendingActionResult;\n if (isErrorResult(result) && isRouteErrorResponse(result.error) && result.error.status === 404) {\n pendingNavigationController = null;\n completeNavigation(location, {\n matches: actionResult.matches,\n loaderData: {},\n errors: {\n [routeId]: result.error\n }\n });\n return;\n }\n }\n matches = actionResult.matches || matches;\n pendingActionResult = actionResult.pendingActionResult;\n loadingNavigation = getLoadingNavigation(location, opts.submission);\n flushSync = false;\n fogOfWar.active = false;\n request = createClientSideRequest(\n init.history,\n request.url,\n request.signal\n );\n }\n let {\n shortCircuited,\n matches: updatedMatches,\n loaderData,\n errors\n } = await handleLoaders(\n request,\n location,\n matches,\n scopedContext,\n fogOfWar.active,\n loadingNavigation,\n opts && opts.submission,\n opts && opts.fetcherSubmission,\n opts && opts.replace,\n opts && opts.initialHydration === true,\n flushSync,\n pendingActionResult\n );\n if (shortCircuited) {\n return;\n }\n pendingNavigationController = null;\n completeNavigation(location, {\n matches: updatedMatches || matches,\n ...getActionDataForCommit(pendingActionResult),\n loaderData,\n errors\n });\n }\n async function handleAction(request, location, submission, matches, scopedContext, isFogOfWar, opts = {}) {\n interruptActiveLoads();\n let navigation = getSubmittingNavigation(location, submission);\n updateState({ navigation }, { flushSync: opts.flushSync === true });\n if (isFogOfWar) {\n let discoverResult = await discoverRoutes(\n matches,\n location.pathname,\n request.signal\n );\n if (discoverResult.type === \"aborted\") {\n return { shortCircuited: true };\n } else if (discoverResult.type === \"error\") {\n let boundaryId = findNearestBoundary(discoverResult.partialMatches).route.id;\n return {\n matches: discoverResult.partialMatches,\n pendingActionResult: [\n boundaryId,\n {\n type: \"error\" /* error */,\n error: discoverResult.error\n }\n ]\n };\n } else if (!discoverResult.matches) {\n let { notFoundMatches, error, route } = handleNavigational404(\n location.pathname\n );\n return {\n matches: notFoundMatches,\n pendingActionResult: [\n route.id,\n {\n type: \"error\" /* error */,\n error\n }\n ]\n };\n } else {\n matches = discoverResult.matches;\n }\n }\n let result;\n let actionMatch = getTargetMatch(matches, location);\n if (!actionMatch.route.action && !actionMatch.route.lazy) {\n result = {\n type: \"error\" /* error */,\n error: getInternalRouterError(405, {\n method: request.method,\n pathname: location.pathname,\n routeId: actionMatch.route.id\n })\n };\n } else {\n let results = await callDataStrategy(\n \"action\",\n request,\n [actionMatch],\n matches,\n scopedContext,\n null\n );\n result = results[actionMatch.route.id];\n if (!result) {\n for (let match of matches) {\n if (results[match.route.id]) {\n result = results[match.route.id];\n break;\n }\n }\n }\n if (request.signal.aborted) {\n return { shortCircuited: true };\n }\n }\n if (isRedirectResult(result)) {\n let replace2;\n if (opts && opts.replace != null) {\n replace2 = opts.replace;\n } else {\n let location2 = normalizeRedirectLocation(\n result.response.headers.get(\"Location\"),\n new URL(request.url),\n basename\n );\n replace2 = location2 === state.location.pathname + state.location.search;\n }\n await startRedirectNavigation(request, result, true, {\n submission,\n replace: replace2\n });\n return { shortCircuited: true };\n }\n if (isErrorResult(result)) {\n let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);\n if ((opts && opts.replace) !== true) {\n pendingAction = \"PUSH\" /* Push */;\n }\n return {\n matches,\n pendingActionResult: [boundaryMatch.route.id, result]\n };\n }\n return {\n matches,\n pendingActionResult: [actionMatch.route.id, result]\n };\n }\n async function handleLoaders(request, location, matches, scopedContext, isFogOfWar, overrideNavigation, submission, fetcherSubmission, replace2, initialHydration, flushSync, pendingActionResult) {\n let loadingNavigation = overrideNavigation || getLoadingNavigation(location, submission);\n let activeSubmission = submission || fetcherSubmission || getSubmissionFromNavigation(loadingNavigation);\n let shouldUpdateNavigationState = !isUninterruptedRevalidation && !initialHydration;\n if (isFogOfWar) {\n if (shouldUpdateNavigationState) {\n let actionData = getUpdatedActionData(pendingActionResult);\n updateState(\n {\n navigation: loadingNavigation,\n ...actionData !== void 0 ? { actionData } : {}\n },\n {\n flushSync\n }\n );\n }\n let discoverResult = await discoverRoutes(\n matches,\n location.pathname,\n request.signal\n );\n if (discoverResult.type === \"aborted\") {\n return { shortCircuited: true };\n } else if (discoverResult.type === \"error\") {\n let boundaryId = findNearestBoundary(discoverResult.partialMatches).route.id;\n return {\n matches: discoverResult.partialMatches,\n loaderData: {},\n errors: {\n [boundaryId]: discoverResult.error\n }\n };\n } else if (!discoverResult.matches) {\n let { error, notFoundMatches, route } = handleNavigational404(\n location.pathname\n );\n return {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error\n }\n };\n } else {\n matches = discoverResult.matches;\n }\n }\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n activeSubmission,\n location,\n initialHydration === true,\n isRevalidationRequired,\n cancelledFetcherLoads,\n fetchersQueuedForDeletion,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n pendingActionResult\n );\n pendingNavigationLoadId = ++incrementingLoadId;\n if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) {\n let updatedFetchers2 = markFetchRedirectsDone();\n completeNavigation(\n location,\n {\n matches,\n loaderData: {},\n // Commit pending error if we're short circuiting\n errors: pendingActionResult && isErrorResult(pendingActionResult[1]) ? { [pendingActionResult[0]]: pendingActionResult[1].error } : null,\n ...getActionDataForCommit(pendingActionResult),\n ...updatedFetchers2 ? { fetchers: new Map(state.fetchers) } : {}\n },\n { flushSync }\n );\n return { shortCircuited: true };\n }\n if (shouldUpdateNavigationState) {\n let updates = {};\n if (!isFogOfWar) {\n updates.navigation = loadingNavigation;\n let actionData = getUpdatedActionData(pendingActionResult);\n if (actionData !== void 0) {\n updates.actionData = actionData;\n }\n }\n if (revalidatingFetchers.length > 0) {\n updates.fetchers = getUpdatedRevalidatingFetchers(revalidatingFetchers);\n }\n updateState(updates, { flushSync });\n }\n revalidatingFetchers.forEach((rf) => {\n abortFetcher(rf.key);\n if (rf.controller) {\n fetchControllers.set(rf.key, rf.controller);\n }\n });\n let abortPendingFetchRevalidations = () => revalidatingFetchers.forEach((f) => abortFetcher(f.key));\n if (pendingNavigationController) {\n pendingNavigationController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\n let { loaderResults, fetcherResults } = await callLoadersAndMaybeResolveData(\n matches,\n matchesToLoad,\n revalidatingFetchers,\n request,\n scopedContext\n );\n if (request.signal.aborted) {\n return { shortCircuited: true };\n }\n if (pendingNavigationController) {\n pendingNavigationController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\n revalidatingFetchers.forEach((rf) => fetchControllers.delete(rf.key));\n let redirect2 = findRedirect(loaderResults);\n if (redirect2) {\n await startRedirectNavigation(request, redirect2.result, true, {\n replace: replace2\n });\n return { shortCircuited: true };\n }\n redirect2 = findRedirect(fetcherResults);\n if (redirect2) {\n fetchRedirectIds.add(redirect2.key);\n await startRedirectNavigation(request, redirect2.result, true, {\n replace: replace2\n });\n return { shortCircuited: true };\n }\n let { loaderData, errors } = processLoaderData(\n state,\n matches,\n loaderResults,\n pendingActionResult,\n revalidatingFetchers,\n fetcherResults\n );\n if (initialHydration && state.errors) {\n errors = { ...state.errors, ...errors };\n }\n let updatedFetchers = markFetchRedirectsDone();\n let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);\n let shouldUpdateFetchers = updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0;\n return {\n matches,\n loaderData,\n errors,\n ...shouldUpdateFetchers ? { fetchers: new Map(state.fetchers) } : {}\n };\n }\n function getUpdatedActionData(pendingActionResult) {\n if (pendingActionResult && !isErrorResult(pendingActionResult[1])) {\n return {\n [pendingActionResult[0]]: pendingActionResult[1].data\n };\n } else if (state.actionData) {\n if (Object.keys(state.actionData).length === 0) {\n return null;\n } else {\n return state.actionData;\n }\n }\n }\n function getUpdatedRevalidatingFetchers(revalidatingFetchers) {\n revalidatingFetchers.forEach((rf) => {\n let fetcher = state.fetchers.get(rf.key);\n let revalidatingFetcher = getLoadingFetcher(\n void 0,\n fetcher ? fetcher.data : void 0\n );\n state.fetchers.set(rf.key, revalidatingFetcher);\n });\n return new Map(state.fetchers);\n }\n async function fetch2(key, routeId, href2, opts) {\n abortFetcher(key);\n let flushSync = (opts && opts.flushSync) === true;\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n href2,\n routeId,\n opts?.relative\n );\n let matches = matchRoutes(routesToUse, normalizedPath, basename);\n let fogOfWar = checkFogOfWar(matches, routesToUse, normalizedPath);\n if (fogOfWar.active && fogOfWar.matches) {\n matches = fogOfWar.matches;\n }\n if (!matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: normalizedPath }),\n { flushSync }\n );\n return;\n }\n let { path, submission, error } = normalizeNavigateOptions(\n true,\n normalizedPath,\n opts\n );\n if (error) {\n setFetcherError(key, routeId, error, { flushSync });\n return;\n }\n let match = getTargetMatch(matches, path);\n let scopedContext = new unstable_RouterContextProvider(\n init.unstable_getContext ? await init.unstable_getContext() : void 0\n );\n let preventScrollReset = (opts && opts.preventScrollReset) === true;\n if (submission && isMutationMethod(submission.formMethod)) {\n await handleFetcherAction(\n key,\n routeId,\n path,\n match,\n matches,\n scopedContext,\n fogOfWar.active,\n flushSync,\n preventScrollReset,\n submission\n );\n return;\n }\n fetchLoadMatches.set(key, { routeId, path });\n await handleFetcherLoader(\n key,\n routeId,\n path,\n match,\n matches,\n scopedContext,\n fogOfWar.active,\n flushSync,\n preventScrollReset,\n submission\n );\n }\n async function handleFetcherAction(key, routeId, path, match, requestMatches, scopedContext, isFogOfWar, flushSync, preventScrollReset, submission) {\n interruptActiveLoads();\n fetchLoadMatches.delete(key);\n function detectAndHandle405Error(m) {\n if (!m.route.action && !m.route.lazy) {\n let error = getInternalRouterError(405, {\n method: submission.formMethod,\n pathname: path,\n routeId\n });\n setFetcherError(key, routeId, error, { flushSync });\n return true;\n }\n return false;\n }\n if (!isFogOfWar && detectAndHandle405Error(match)) {\n return;\n }\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(key, getSubmittingFetcher(submission, existingFetcher), {\n flushSync\n });\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal,\n submission\n );\n if (isFogOfWar) {\n let discoverResult = await discoverRoutes(\n requestMatches,\n path,\n fetchRequest.signal,\n key\n );\n if (discoverResult.type === \"aborted\") {\n return;\n } else if (discoverResult.type === \"error\") {\n setFetcherError(key, routeId, discoverResult.error, { flushSync });\n return;\n } else if (!discoverResult.matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: path }),\n { flushSync }\n );\n return;\n } else {\n requestMatches = discoverResult.matches;\n match = getTargetMatch(requestMatches, path);\n if (detectAndHandle405Error(match)) {\n return;\n }\n }\n }\n fetchControllers.set(key, abortController);\n let originatingLoadId = incrementingLoadId;\n let actionResults = await callDataStrategy(\n \"action\",\n fetchRequest,\n [match],\n requestMatches,\n scopedContext,\n key\n );\n let actionResult = actionResults[match.route.id];\n if (fetchRequest.signal.aborted) {\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n return;\n }\n if (fetchersQueuedForDeletion.has(key)) {\n if (isRedirectResult(actionResult) || isErrorResult(actionResult)) {\n updateFetcherState(key, getDoneFetcher(void 0));\n return;\n }\n } else {\n if (isRedirectResult(actionResult)) {\n fetchControllers.delete(key);\n if (pendingNavigationLoadId > originatingLoadId) {\n updateFetcherState(key, getDoneFetcher(void 0));\n return;\n } else {\n fetchRedirectIds.add(key);\n updateFetcherState(key, getLoadingFetcher(submission));\n return startRedirectNavigation(fetchRequest, actionResult, false, {\n fetcherSubmission: submission,\n preventScrollReset\n });\n }\n }\n if (isErrorResult(actionResult)) {\n setFetcherError(key, routeId, actionResult.error);\n return;\n }\n }\n let nextLocation = state.navigation.location || state.location;\n let revalidationRequest = createClientSideRequest(\n init.history,\n nextLocation,\n abortController.signal\n );\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let matches = state.navigation.state !== \"idle\" ? matchRoutes(routesToUse, state.navigation.location, basename) : state.matches;\n invariant(matches, \"Didn't find any matches after fetcher action\");\n let loadId = ++incrementingLoadId;\n fetchReloadIds.set(key, loadId);\n let loadFetcher = getLoadingFetcher(submission, actionResult.data);\n state.fetchers.set(key, loadFetcher);\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n submission,\n nextLocation,\n false,\n isRevalidationRequired,\n cancelledFetcherLoads,\n fetchersQueuedForDeletion,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n [match.route.id, actionResult]\n );\n revalidatingFetchers.filter((rf) => rf.key !== key).forEach((rf) => {\n let staleKey = rf.key;\n let existingFetcher2 = state.fetchers.get(staleKey);\n let revalidatingFetcher = getLoadingFetcher(\n void 0,\n existingFetcher2 ? existingFetcher2.data : void 0\n );\n state.fetchers.set(staleKey, revalidatingFetcher);\n abortFetcher(staleKey);\n if (rf.controller) {\n fetchControllers.set(staleKey, rf.controller);\n }\n });\n updateState({ fetchers: new Map(state.fetchers) });\n let abortPendingFetchRevalidations = () => revalidatingFetchers.forEach((rf) => abortFetcher(rf.key));\n abortController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n let { loaderResults, fetcherResults } = await callLoadersAndMaybeResolveData(\n matches,\n matchesToLoad,\n revalidatingFetchers,\n revalidationRequest,\n scopedContext\n );\n if (abortController.signal.aborted) {\n return;\n }\n abortController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n fetchReloadIds.delete(key);\n fetchControllers.delete(key);\n revalidatingFetchers.forEach((r) => fetchControllers.delete(r.key));\n let redirect2 = findRedirect(loaderResults);\n if (redirect2) {\n return startRedirectNavigation(\n revalidationRequest,\n redirect2.result,\n false,\n { preventScrollReset }\n );\n }\n redirect2 = findRedirect(fetcherResults);\n if (redirect2) {\n fetchRedirectIds.add(redirect2.key);\n return startRedirectNavigation(\n revalidationRequest,\n redirect2.result,\n false,\n { preventScrollReset }\n );\n }\n let { loaderData, errors } = processLoaderData(\n state,\n matches,\n loaderResults,\n void 0,\n revalidatingFetchers,\n fetcherResults\n );\n if (state.fetchers.has(key)) {\n let doneFetcher = getDoneFetcher(actionResult.data);\n state.fetchers.set(key, doneFetcher);\n }\n abortStaleFetchLoads(loadId);\n if (state.navigation.state === \"loading\" && loadId > pendingNavigationLoadId) {\n invariant(pendingAction, \"Expected pending action\");\n pendingNavigationController && pendingNavigationController.abort();\n completeNavigation(state.navigation.location, {\n matches,\n loaderData,\n errors,\n fetchers: new Map(state.fetchers)\n });\n } else {\n updateState({\n errors,\n loaderData: mergeLoaderData(\n state.loaderData,\n loaderData,\n matches,\n errors\n ),\n fetchers: new Map(state.fetchers)\n });\n isRevalidationRequired = false;\n }\n }\n async function handleFetcherLoader(key, routeId, path, match, matches, scopedContext, isFogOfWar, flushSync, preventScrollReset, submission) {\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(\n key,\n getLoadingFetcher(\n submission,\n existingFetcher ? existingFetcher.data : void 0\n ),\n { flushSync }\n );\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal\n );\n if (isFogOfWar) {\n let discoverResult = await discoverRoutes(\n matches,\n path,\n fetchRequest.signal,\n key\n );\n if (discoverResult.type === \"aborted\") {\n return;\n } else if (discoverResult.type === \"error\") {\n setFetcherError(key, routeId, discoverResult.error, { flushSync });\n return;\n } else if (!discoverResult.matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: path }),\n { flushSync }\n );\n return;\n } else {\n matches = discoverResult.matches;\n match = getTargetMatch(matches, path);\n }\n }\n fetchControllers.set(key, abortController);\n let originatingLoadId = incrementingLoadId;\n let results = await callDataStrategy(\n \"loader\",\n fetchRequest,\n [match],\n matches,\n scopedContext,\n key\n );\n let result = results[match.route.id];\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n if (fetchRequest.signal.aborted) {\n return;\n }\n if (fetchersQueuedForDeletion.has(key)) {\n updateFetcherState(key, getDoneFetcher(void 0));\n return;\n }\n if (isRedirectResult(result)) {\n if (pendingNavigationLoadId > originatingLoadId) {\n updateFetcherState(key, getDoneFetcher(void 0));\n return;\n } else {\n fetchRedirectIds.add(key);\n await startRedirectNavigation(fetchRequest, result, false, {\n preventScrollReset\n });\n return;\n }\n }\n if (isErrorResult(result)) {\n setFetcherError(key, routeId, result.error);\n return;\n }\n updateFetcherState(key, getDoneFetcher(result.data));\n }\n async function startRedirectNavigation(request, redirect2, isNavigation, {\n submission,\n fetcherSubmission,\n preventScrollReset,\n replace: replace2\n } = {}) {\n if (redirect2.response.headers.has(\"X-Remix-Revalidate\")) {\n isRevalidationRequired = true;\n }\n let location = redirect2.response.headers.get(\"Location\");\n invariant(location, \"Expected a Location header on the redirect Response\");\n location = normalizeRedirectLocation(\n location,\n new URL(request.url),\n basename\n );\n let redirectLocation = createLocation(state.location, location, {\n _isRedirect: true\n });\n if (isBrowser2) {\n let isDocumentReload = false;\n if (redirect2.response.headers.has(\"X-Remix-Reload-Document\")) {\n isDocumentReload = true;\n } else if (ABSOLUTE_URL_REGEX.test(location)) {\n const url = init.history.createURL(location);\n isDocumentReload = // Hard reload if it's an absolute URL to a new origin\n url.origin !== routerWindow.location.origin || // Hard reload if it's an absolute URL that does not match our basename\n stripBasename(url.pathname, basename) == null;\n }\n if (isDocumentReload) {\n if (replace2) {\n routerWindow.location.replace(location);\n } else {\n routerWindow.location.assign(location);\n }\n return;\n }\n }\n pendingNavigationController = null;\n let redirectNavigationType = replace2 === true || redirect2.response.headers.has(\"X-Remix-Replace\") ? \"REPLACE\" /* Replace */ : \"PUSH\" /* Push */;\n let { formMethod, formAction, formEncType } = state.navigation;\n if (!submission && !fetcherSubmission && formMethod && formAction && formEncType) {\n submission = getSubmissionFromNavigation(state.navigation);\n }\n let activeSubmission = submission || fetcherSubmission;\n if (redirectPreserveMethodStatusCodes.has(redirect2.response.status) && activeSubmission && isMutationMethod(activeSubmission.formMethod)) {\n await startNavigation(redirectNavigationType, redirectLocation, {\n submission: {\n ...activeSubmission,\n formAction: location\n },\n // Preserve these flags across redirects\n preventScrollReset: preventScrollReset || pendingPreventScrollReset,\n enableViewTransition: isNavigation ? pendingViewTransitionEnabled : void 0\n });\n } else {\n let overrideNavigation = getLoadingNavigation(\n redirectLocation,\n submission\n );\n await startNavigation(redirectNavigationType, redirectLocation, {\n overrideNavigation,\n // Send fetcher submissions through for shouldRevalidate\n fetcherSubmission,\n // Preserve these flags across redirects\n preventScrollReset: preventScrollReset || pendingPreventScrollReset,\n enableViewTransition: isNavigation ? pendingViewTransitionEnabled : void 0\n });\n }\n }\n async function callDataStrategy(type, request, matchesToLoad, matches, scopedContext, fetcherKey) {\n let results;\n let dataResults = {};\n try {\n results = await callDataStrategyImpl(\n dataStrategyImpl,\n type,\n request,\n matchesToLoad,\n matches,\n fetcherKey,\n manifest,\n mapRouteProperties2,\n scopedContext\n );\n } catch (e) {\n matchesToLoad.forEach((m) => {\n dataResults[m.route.id] = {\n type: \"error\" /* error */,\n error: e\n };\n });\n return dataResults;\n }\n for (let [routeId, result] of Object.entries(results)) {\n if (isRedirectDataStrategyResult(result)) {\n let response = result.result;\n dataResults[routeId] = {\n type: \"redirect\" /* redirect */,\n response: normalizeRelativeRoutingRedirectResponse(\n response,\n request,\n routeId,\n matches,\n basename\n )\n };\n } else {\n dataResults[routeId] = await convertDataStrategyResultToDataResult(\n result\n );\n }\n }\n return dataResults;\n }\n async function callLoadersAndMaybeResolveData(matches, matchesToLoad, fetchersToLoad, request, scopedContext) {\n let loaderResultsPromise = callDataStrategy(\n \"loader\",\n request,\n matchesToLoad,\n matches,\n scopedContext,\n null\n );\n let fetcherResultsPromise = Promise.all(\n fetchersToLoad.map(async (f) => {\n if (f.matches && f.match && f.controller) {\n let results = await callDataStrategy(\n \"loader\",\n createClientSideRequest(init.history, f.path, f.controller.signal),\n [f.match],\n f.matches,\n scopedContext,\n f.key\n );\n let result = results[f.match.route.id];\n return { [f.key]: result };\n } else {\n return Promise.resolve({\n [f.key]: {\n type: \"error\" /* error */,\n error: getInternalRouterError(404, {\n pathname: f.path\n })\n }\n });\n }\n })\n );\n let loaderResults = await loaderResultsPromise;\n let fetcherResults = (await fetcherResultsPromise).reduce(\n (acc, r) => Object.assign(acc, r),\n {}\n );\n return {\n loaderResults,\n fetcherResults\n };\n }\n function interruptActiveLoads() {\n isRevalidationRequired = true;\n fetchLoadMatches.forEach((_, key) => {\n if (fetchControllers.has(key)) {\n cancelledFetcherLoads.add(key);\n }\n abortFetcher(key);\n });\n }\n function updateFetcherState(key, fetcher, opts = {}) {\n state.fetchers.set(key, fetcher);\n updateState(\n { fetchers: new Map(state.fetchers) },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n function setFetcherError(key, routeId, error, opts = {}) {\n let boundaryMatch = findNearestBoundary(state.matches, routeId);\n deleteFetcher(key);\n updateState(\n {\n errors: {\n [boundaryMatch.route.id]: error\n },\n fetchers: new Map(state.fetchers)\n },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n function getFetcher(key) {\n activeFetchers.set(key, (activeFetchers.get(key) || 0) + 1);\n if (fetchersQueuedForDeletion.has(key)) {\n fetchersQueuedForDeletion.delete(key);\n }\n return state.fetchers.get(key) || IDLE_FETCHER;\n }\n function deleteFetcher(key) {\n let fetcher = state.fetchers.get(key);\n if (fetchControllers.has(key) && !(fetcher && fetcher.state === \"loading\" && fetchReloadIds.has(key))) {\n abortFetcher(key);\n }\n fetchLoadMatches.delete(key);\n fetchReloadIds.delete(key);\n fetchRedirectIds.delete(key);\n fetchersQueuedForDeletion.delete(key);\n cancelledFetcherLoads.delete(key);\n state.fetchers.delete(key);\n }\n function queueFetcherForDeletion(key) {\n let count = (activeFetchers.get(key) || 0) - 1;\n if (count <= 0) {\n activeFetchers.delete(key);\n fetchersQueuedForDeletion.add(key);\n } else {\n activeFetchers.set(key, count);\n }\n updateState({ fetchers: new Map(state.fetchers) });\n }\n function abortFetcher(key) {\n let controller = fetchControllers.get(key);\n if (controller) {\n controller.abort();\n fetchControllers.delete(key);\n }\n }\n function markFetchersDone(keys) {\n for (let key of keys) {\n let fetcher = getFetcher(key);\n let doneFetcher = getDoneFetcher(fetcher.data);\n state.fetchers.set(key, doneFetcher);\n }\n }\n function markFetchRedirectsDone() {\n let doneKeys = [];\n let updatedFetchers = false;\n for (let key of fetchRedirectIds) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, `Expected fetcher: ${key}`);\n if (fetcher.state === \"loading\") {\n fetchRedirectIds.delete(key);\n doneKeys.push(key);\n updatedFetchers = true;\n }\n }\n markFetchersDone(doneKeys);\n return updatedFetchers;\n }\n function abortStaleFetchLoads(landedId) {\n let yeetedKeys = [];\n for (let [key, id] of fetchReloadIds) {\n if (id < landedId) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, `Expected fetcher: ${key}`);\n if (fetcher.state === \"loading\") {\n abortFetcher(key);\n fetchReloadIds.delete(key);\n yeetedKeys.push(key);\n }\n }\n }\n markFetchersDone(yeetedKeys);\n return yeetedKeys.length > 0;\n }\n function getBlocker(key, fn) {\n let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n if (blockerFunctions.get(key) !== fn) {\n blockerFunctions.set(key, fn);\n }\n return blocker;\n }\n function deleteBlocker(key) {\n state.blockers.delete(key);\n blockerFunctions.delete(key);\n }\n function updateBlocker(key, newBlocker) {\n let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n invariant(\n blocker.state === \"unblocked\" && newBlocker.state === \"blocked\" || blocker.state === \"blocked\" && newBlocker.state === \"blocked\" || blocker.state === \"blocked\" && newBlocker.state === \"proceeding\" || blocker.state === \"blocked\" && newBlocker.state === \"unblocked\" || blocker.state === \"proceeding\" && newBlocker.state === \"unblocked\",\n `Invalid blocker state transition: ${blocker.state} -> ${newBlocker.state}`\n );\n let blockers = new Map(state.blockers);\n blockers.set(key, newBlocker);\n updateState({ blockers });\n }\n function shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction\n }) {\n if (blockerFunctions.size === 0) {\n return;\n }\n if (blockerFunctions.size > 1) {\n warning(false, \"A router only supports one blocker at a time\");\n }\n let entries = Array.from(blockerFunctions.entries());\n let [blockerKey, blockerFunction] = entries[entries.length - 1];\n let blocker = state.blockers.get(blockerKey);\n if (blocker && blocker.state === \"proceeding\") {\n return;\n }\n if (blockerFunction({ currentLocation, nextLocation, historyAction })) {\n return blockerKey;\n }\n }\n function handleNavigational404(pathname) {\n let error = getInternalRouterError(404, { pathname });\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let { matches, route } = getShortCircuitMatches(routesToUse);\n return { notFoundMatches: matches, route, error };\n }\n function enableScrollRestoration(positions, getPosition, getKey) {\n savedScrollPositions2 = positions;\n getScrollPosition = getPosition;\n getScrollRestorationKey2 = getKey || null;\n if (!initialScrollRestored && state.navigation === IDLE_NAVIGATION) {\n initialScrollRestored = true;\n let y = getSavedScrollPosition(state.location, state.matches);\n if (y != null) {\n updateState({ restoreScrollPosition: y });\n }\n }\n return () => {\n savedScrollPositions2 = null;\n getScrollPosition = null;\n getScrollRestorationKey2 = null;\n };\n }\n function getScrollKey(location, matches) {\n if (getScrollRestorationKey2) {\n let key = getScrollRestorationKey2(\n location,\n matches.map((m) => convertRouteMatchToUiMatch(m, state.loaderData))\n );\n return key || location.key;\n }\n return location.key;\n }\n function saveScrollPosition(location, matches) {\n if (savedScrollPositions2 && getScrollPosition) {\n let key = getScrollKey(location, matches);\n savedScrollPositions2[key] = getScrollPosition();\n }\n }\n function getSavedScrollPosition(location, matches) {\n if (savedScrollPositions2) {\n let key = getScrollKey(location, matches);\n let y = savedScrollPositions2[key];\n if (typeof y === \"number\") {\n return y;\n }\n }\n return null;\n }\n function checkFogOfWar(matches, routesToUse, pathname) {\n if (init.patchRoutesOnNavigation) {\n if (!matches) {\n let fogMatches = matchRoutesImpl(\n routesToUse,\n pathname,\n basename,\n true\n );\n return { active: true, matches: fogMatches || [] };\n } else {\n if (Object.keys(matches[0].params).length > 0) {\n let partialMatches = matchRoutesImpl(\n routesToUse,\n pathname,\n basename,\n true\n );\n return { active: true, matches: partialMatches };\n }\n }\n }\n return { active: false, matches: null };\n }\n async function discoverRoutes(matches, pathname, signal, fetcherKey) {\n if (!init.patchRoutesOnNavigation) {\n return { type: \"success\", matches };\n }\n let partialMatches = matches;\n while (true) {\n let isNonHMR = inFlightDataRoutes == null;\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let localManifest = manifest;\n try {\n await init.patchRoutesOnNavigation({\n signal,\n path: pathname,\n matches: partialMatches,\n fetcherKey,\n patch: (routeId, children) => {\n if (signal.aborted) return;\n patchRoutesImpl(\n routeId,\n children,\n routesToUse,\n localManifest,\n mapRouteProperties2\n );\n }\n });\n } catch (e) {\n return { type: \"error\", error: e, partialMatches };\n } finally {\n if (isNonHMR && !signal.aborted) {\n dataRoutes = [...dataRoutes];\n }\n }\n if (signal.aborted) {\n return { type: \"aborted\" };\n }\n let newMatches = matchRoutes(routesToUse, pathname, basename);\n if (newMatches) {\n return { type: \"success\", matches: newMatches };\n }\n let newPartialMatches = matchRoutesImpl(\n routesToUse,\n pathname,\n basename,\n true\n );\n if (!newPartialMatches || partialMatches.length === newPartialMatches.length && partialMatches.every(\n (m, i) => m.route.id === newPartialMatches[i].route.id\n )) {\n return { type: \"success\", matches: null };\n }\n partialMatches = newPartialMatches;\n }\n }\n function _internalSetRoutes(newRoutes) {\n manifest = {};\n inFlightDataRoutes = convertRoutesToDataRoutes(\n newRoutes,\n mapRouteProperties2,\n void 0,\n manifest\n );\n }\n function patchRoutes(routeId, children) {\n let isNonHMR = inFlightDataRoutes == null;\n let routesToUse = inFlightDataRoutes || dataRoutes;\n patchRoutesImpl(\n routeId,\n children,\n routesToUse,\n manifest,\n mapRouteProperties2\n );\n if (isNonHMR) {\n dataRoutes = [...dataRoutes];\n updateState({});\n }\n }\n router = {\n get basename() {\n return basename;\n },\n get future() {\n return future;\n },\n get state() {\n return state;\n },\n get routes() {\n return dataRoutes;\n },\n get window() {\n return routerWindow;\n },\n initialize,\n subscribe,\n enableScrollRestoration,\n navigate,\n fetch: fetch2,\n revalidate,\n // Passthrough to history-aware createHref used by useHref so we get proper\n // hash-aware URLs in DOM paths\n createHref: (to) => init.history.createHref(to),\n encodeLocation: (to) => init.history.encodeLocation(to),\n getFetcher,\n deleteFetcher: queueFetcherForDeletion,\n dispose,\n getBlocker,\n deleteBlocker,\n patchRoutes,\n _internalFetchControllers: fetchControllers,\n // TODO: Remove setRoutes, it's temporary to avoid dealing with\n // updating the tree while validating the update algorithm.\n _internalSetRoutes\n };\n return router;\n}\nfunction createStaticHandler(routes, opts) {\n invariant(\n routes.length > 0,\n \"You must provide a non-empty routes array to createStaticHandler\"\n );\n let manifest = {};\n let basename = (opts ? opts.basename : null) || \"/\";\n let mapRouteProperties2 = opts?.mapRouteProperties || defaultMapRouteProperties;\n let dataRoutes = convertRoutesToDataRoutes(\n routes,\n mapRouteProperties2,\n void 0,\n manifest\n );\n async function query(request, {\n requestContext,\n filterMatchesToLoad,\n skipLoaderErrorBubbling,\n skipRevalidation,\n dataStrategy,\n unstable_respond: respond\n } = {}) {\n let url = new URL(request.url);\n let method = request.method;\n let location = createLocation(\"\", createPath(url), null, \"default\");\n let matches = matchRoutes(dataRoutes, location, basename);\n requestContext = requestContext != null ? requestContext : new unstable_RouterContextProvider();\n if (!isValidMethod(method) && method !== \"HEAD\") {\n let error = getInternalRouterError(405, { method });\n let { matches: methodNotAllowedMatches, route } = getShortCircuitMatches(dataRoutes);\n let staticContext = {\n basename,\n location,\n matches: methodNotAllowedMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {}\n };\n return respond ? respond(staticContext) : staticContext;\n } else if (!matches) {\n let error = getInternalRouterError(404, { pathname: location.pathname });\n let { matches: notFoundMatches, route } = getShortCircuitMatches(dataRoutes);\n let staticContext = {\n basename,\n location,\n matches: notFoundMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {}\n };\n return respond ? respond(staticContext) : staticContext;\n }\n if (respond && matches.some(\n (m) => m.route.unstable_middleware || m.route.unstable_lazyMiddleware\n )) {\n invariant(\n requestContext instanceof unstable_RouterContextProvider,\n \"When using middleware in `staticHandler.query()`, any provided `requestContext` must be an instance of `unstable_RouterContextProvider`\"\n );\n try {\n await loadLazyMiddlewareForMatches(matches, manifest);\n let renderedStaticContext;\n let response = await runMiddlewarePipeline(\n {\n request,\n matches,\n params: matches[0].params,\n // If we're calling middleware then it must be enabled so we can cast\n // this to the proper type knowing it's not an `AppLoadContext`\n context: requestContext\n },\n true,\n async () => {\n let result2 = await queryImpl(\n request,\n location,\n matches,\n requestContext,\n dataStrategy || null,\n skipLoaderErrorBubbling === true,\n null,\n filterMatchesToLoad || null,\n skipRevalidation === true\n );\n if (isResponse(result2)) {\n return result2;\n }\n renderedStaticContext = { location, basename, ...result2 };\n let res = await respond(renderedStaticContext);\n return res;\n },\n async (error, routeId) => {\n if (isResponse(error)) {\n return error;\n }\n if (renderedStaticContext) {\n if (routeId in renderedStaticContext.loaderData) {\n renderedStaticContext.loaderData[routeId] = void 0;\n }\n return respond(\n getStaticContextFromError(\n dataRoutes,\n renderedStaticContext,\n error,\n findNearestBoundary(matches, routeId).route.id\n )\n );\n } else {\n let loaderIdx = matches.findIndex((m) => m.route.loader);\n let boundary = loaderIdx >= 0 ? findNearestBoundary(matches, matches[loaderIdx].route.id) : findNearestBoundary(matches);\n return respond({\n matches,\n location,\n basename,\n loaderData: {},\n actionData: null,\n errors: {\n [boundary.route.id]: error\n },\n statusCode: isRouteErrorResponse(error) ? error.status : 500,\n actionHeaders: {},\n loaderHeaders: {}\n });\n }\n }\n );\n invariant(isResponse(response), \"Expected a response in query()\");\n return response;\n } catch (e) {\n if (isResponse(e)) {\n return e;\n }\n throw e;\n }\n }\n let result = await queryImpl(\n request,\n location,\n matches,\n requestContext,\n dataStrategy || null,\n skipLoaderErrorBubbling === true,\n null,\n filterMatchesToLoad || null,\n skipRevalidation === true\n );\n if (isResponse(result)) {\n return result;\n }\n return { location, basename, ...result };\n }\n async function queryRoute(request, {\n routeId,\n requestContext,\n dataStrategy,\n unstable_respond: respond\n } = {}) {\n let url = new URL(request.url);\n let method = request.method;\n let location = createLocation(\"\", createPath(url), null, \"default\");\n let matches = matchRoutes(dataRoutes, location, basename);\n requestContext = requestContext != null ? requestContext : new unstable_RouterContextProvider();\n if (!isValidMethod(method) && method !== \"HEAD\" && method !== \"OPTIONS\") {\n throw getInternalRouterError(405, { method });\n } else if (!matches) {\n throw getInternalRouterError(404, { pathname: location.pathname });\n }\n let match = routeId ? matches.find((m) => m.route.id === routeId) : getTargetMatch(matches, location);\n if (routeId && !match) {\n throw getInternalRouterError(403, {\n pathname: location.pathname,\n routeId\n });\n } else if (!match) {\n throw getInternalRouterError(404, { pathname: location.pathname });\n }\n if (respond && matches.some(\n (m) => m.route.unstable_middleware || m.route.unstable_lazyMiddleware\n )) {\n invariant(\n requestContext instanceof unstable_RouterContextProvider,\n \"When using middleware in `staticHandler.queryRoute()`, any provided `requestContext` must be an instance of `unstable_RouterContextProvider`\"\n );\n await loadLazyMiddlewareForMatches(matches, manifest);\n let response = await runMiddlewarePipeline(\n {\n request,\n matches,\n params: matches[0].params,\n // If we're calling middleware then it must be enabled so we can cast\n // this to the proper type knowing it's not an `AppLoadContext`\n context: requestContext\n },\n true,\n async () => {\n let result2 = await queryImpl(\n request,\n location,\n matches,\n requestContext,\n dataStrategy || null,\n false,\n match,\n null,\n false\n );\n if (isResponse(result2)) {\n return respond(result2);\n }\n let error2 = result2.errors ? Object.values(result2.errors)[0] : void 0;\n if (error2 !== void 0) {\n throw error2;\n }\n let value = result2.actionData ? Object.values(result2.actionData)[0] : Object.values(result2.loaderData)[0];\n return typeof value === \"string\" ? new Response(value) : Response.json(value);\n },\n (error2) => {\n if (isResponse(error2)) {\n return respond(error2);\n }\n return new Response(String(error2), {\n status: 500,\n statusText: \"Unexpected Server Error\"\n });\n }\n );\n return response;\n }\n let result = await queryImpl(\n request,\n location,\n matches,\n requestContext,\n dataStrategy || null,\n false,\n match,\n null,\n false\n );\n if (isResponse(result)) {\n return result;\n }\n let error = result.errors ? Object.values(result.errors)[0] : void 0;\n if (error !== void 0) {\n throw error;\n }\n if (result.actionData) {\n return Object.values(result.actionData)[0];\n }\n if (result.loaderData) {\n return Object.values(result.loaderData)[0];\n }\n return void 0;\n }\n async function queryImpl(request, location, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, routeMatch, filterMatchesToLoad, skipRevalidation) {\n invariant(\n request.signal,\n \"query()/queryRoute() requests must contain an AbortController signal\"\n );\n try {\n if (isMutationMethod(request.method)) {\n let result2 = await submit(\n request,\n matches,\n routeMatch || getTargetMatch(matches, location),\n requestContext,\n dataStrategy,\n skipLoaderErrorBubbling,\n routeMatch != null,\n filterMatchesToLoad,\n skipRevalidation\n );\n return result2;\n }\n let result = await loadRouteData(\n request,\n matches,\n requestContext,\n dataStrategy,\n skipLoaderErrorBubbling,\n routeMatch,\n filterMatchesToLoad\n );\n return isResponse(result) ? result : {\n ...result,\n actionData: null,\n actionHeaders: {}\n };\n } catch (e) {\n if (isDataStrategyResult(e) && isResponse(e.result)) {\n if (e.type === \"error\" /* error */) {\n throw e.result;\n }\n return e.result;\n }\n if (isRedirectResponse(e)) {\n return e;\n }\n throw e;\n }\n }\n async function submit(request, matches, actionMatch, requestContext, dataStrategy, skipLoaderErrorBubbling, isRouteRequest, filterMatchesToLoad, skipRevalidation) {\n let result;\n if (!actionMatch.route.action && !actionMatch.route.lazy) {\n let error = getInternalRouterError(405, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: actionMatch.route.id\n });\n if (isRouteRequest) {\n throw error;\n }\n result = {\n type: \"error\" /* error */,\n error\n };\n } else {\n let results = await callDataStrategy(\n \"action\",\n request,\n [actionMatch],\n matches,\n isRouteRequest,\n requestContext,\n dataStrategy\n );\n result = results[actionMatch.route.id];\n if (request.signal.aborted) {\n throwStaticHandlerAbortedError(request, isRouteRequest);\n }\n }\n if (isRedirectResult(result)) {\n throw new Response(null, {\n status: result.response.status,\n headers: {\n Location: result.response.headers.get(\"Location\")\n }\n });\n }\n if (isRouteRequest) {\n if (isErrorResult(result)) {\n throw result.error;\n }\n return {\n matches: [actionMatch],\n loaderData: {},\n actionData: { [actionMatch.route.id]: result.data },\n errors: null,\n // Note: statusCode + headers are unused here since queryRoute will\n // return the raw Response or value\n statusCode: 200,\n loaderHeaders: {},\n actionHeaders: {}\n };\n }\n if (skipRevalidation) {\n if (isErrorResult(result)) {\n let boundaryMatch = skipLoaderErrorBubbling ? actionMatch : findNearestBoundary(matches, actionMatch.route.id);\n return {\n statusCode: isRouteErrorResponse(result.error) ? result.error.status : result.statusCode != null ? result.statusCode : 500,\n actionData: null,\n actionHeaders: {\n ...result.headers ? { [actionMatch.route.id]: result.headers } : {}\n },\n matches,\n loaderData: {},\n errors: {\n [boundaryMatch.route.id]: result.error\n },\n loaderHeaders: {}\n };\n } else {\n return {\n actionData: {\n [actionMatch.route.id]: result.data\n },\n actionHeaders: result.headers ? { [actionMatch.route.id]: result.headers } : {},\n matches,\n loaderData: {},\n errors: null,\n statusCode: result.statusCode || 200,\n loaderHeaders: {}\n };\n }\n }\n let loaderRequest = new Request(request.url, {\n headers: request.headers,\n redirect: request.redirect,\n signal: request.signal\n });\n if (isErrorResult(result)) {\n let boundaryMatch = skipLoaderErrorBubbling ? actionMatch : findNearestBoundary(matches, actionMatch.route.id);\n let handlerContext2 = await loadRouteData(\n loaderRequest,\n matches,\n requestContext,\n dataStrategy,\n skipLoaderErrorBubbling,\n null,\n filterMatchesToLoad,\n [boundaryMatch.route.id, result]\n );\n return {\n ...handlerContext2,\n statusCode: isRouteErrorResponse(result.error) ? result.error.status : result.statusCode != null ? result.statusCode : 500,\n actionData: null,\n actionHeaders: {\n ...result.headers ? { [actionMatch.route.id]: result.headers } : {}\n }\n };\n }\n let handlerContext = await loadRouteData(\n loaderRequest,\n matches,\n requestContext,\n dataStrategy,\n skipLoaderErrorBubbling,\n null,\n filterMatchesToLoad\n );\n return {\n ...handlerContext,\n actionData: {\n [actionMatch.route.id]: result.data\n },\n // action status codes take precedence over loader status codes\n ...result.statusCode ? { statusCode: result.statusCode } : {},\n actionHeaders: result.headers ? { [actionMatch.route.id]: result.headers } : {}\n };\n }\n async function loadRouteData(request, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, routeMatch, filterMatchesToLoad, pendingActionResult) {\n let isRouteRequest = routeMatch != null;\n if (isRouteRequest && !routeMatch?.route.loader && !routeMatch?.route.lazy) {\n throw getInternalRouterError(400, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: routeMatch?.route.id\n });\n }\n let requestMatches = routeMatch ? [routeMatch] : pendingActionResult && isErrorResult(pendingActionResult[1]) ? getLoaderMatchesUntilBoundary(matches, pendingActionResult[0]) : matches;\n let matchesToLoad = requestMatches.filter(\n (m) => (m.route.loader || m.route.lazy) && (!filterMatchesToLoad || filterMatchesToLoad(m))\n );\n if (matchesToLoad.length === 0) {\n return {\n matches,\n // Add a null for all matched routes for proper revalidation on the client\n loaderData: matches.reduce(\n (acc, m) => Object.assign(acc, { [m.route.id]: null }),\n {}\n ),\n errors: pendingActionResult && isErrorResult(pendingActionResult[1]) ? {\n [pendingActionResult[0]]: pendingActionResult[1].error\n } : null,\n statusCode: 200,\n loaderHeaders: {}\n };\n }\n let results = await callDataStrategy(\n \"loader\",\n request,\n matchesToLoad,\n matches,\n isRouteRequest,\n requestContext,\n dataStrategy\n );\n if (request.signal.aborted) {\n throwStaticHandlerAbortedError(request, isRouteRequest);\n }\n let handlerContext = processRouteLoaderData(\n matches,\n results,\n pendingActionResult,\n true,\n skipLoaderErrorBubbling\n );\n let executedLoaders = new Set(\n matchesToLoad.map((match) => match.route.id)\n );\n matches.forEach((match) => {\n if (!executedLoaders.has(match.route.id)) {\n handlerContext.loaderData[match.route.id] = null;\n }\n });\n return {\n ...handlerContext,\n matches\n };\n }\n async function callDataStrategy(type, request, matchesToLoad, matches, isRouteRequest, requestContext, dataStrategy) {\n let results = await callDataStrategyImpl(\n dataStrategy || defaultDataStrategy,\n type,\n request,\n matchesToLoad,\n matches,\n null,\n manifest,\n mapRouteProperties2,\n requestContext\n );\n let dataResults = {};\n await Promise.all(\n matches.map(async (match) => {\n if (!(match.route.id in results)) {\n return;\n }\n let result = results[match.route.id];\n if (isRedirectDataStrategyResult(result)) {\n let response = result.result;\n throw normalizeRelativeRoutingRedirectResponse(\n response,\n request,\n match.route.id,\n matches,\n basename\n );\n }\n if (isResponse(result.result) && isRouteRequest) {\n throw result;\n }\n dataResults[match.route.id] = await convertDataStrategyResultToDataResult(result);\n })\n );\n return dataResults;\n }\n return {\n dataRoutes,\n query,\n queryRoute\n };\n}\nfunction getStaticContextFromError(routes, handlerContext, error, boundaryId) {\n let errorBoundaryId = boundaryId || handlerContext._deepestRenderedBoundaryId || routes[0].id;\n return {\n ...handlerContext,\n statusCode: isRouteErrorResponse(error) ? error.status : 500,\n errors: {\n [errorBoundaryId]: error\n }\n };\n}\nfunction throwStaticHandlerAbortedError(request, isRouteRequest) {\n if (request.signal.reason !== void 0) {\n throw request.signal.reason;\n }\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(\n `${method}() call aborted without an \\`AbortSignal.reason\\`: ${request.method} ${request.url}`\n );\n}\nfunction isSubmissionNavigation(opts) {\n return opts != null && (\"formData\" in opts && opts.formData != null || \"body\" in opts && opts.body !== void 0);\n}\nfunction normalizeTo(location, matches, basename, to, fromRouteId, relative) {\n let contextualMatches;\n let activeRouteMatch;\n if (fromRouteId) {\n contextualMatches = [];\n for (let match of matches) {\n contextualMatches.push(match);\n if (match.route.id === fromRouteId) {\n activeRouteMatch = match;\n break;\n }\n }\n } else {\n contextualMatches = matches;\n activeRouteMatch = matches[matches.length - 1];\n }\n let path = resolveTo(\n to ? to : \".\",\n getResolveToMatches(contextualMatches),\n stripBasename(location.pathname, basename) || location.pathname,\n relative === \"path\"\n );\n if (to == null) {\n path.search = location.search;\n path.hash = location.hash;\n }\n if ((to == null || to === \"\" || to === \".\") && activeRouteMatch) {\n let nakedIndex = hasNakedIndexQuery(path.search);\n if (activeRouteMatch.route.index && !nakedIndex) {\n path.search = path.search ? path.search.replace(/^\\?/, \"?index&\") : \"?index\";\n } else if (!activeRouteMatch.route.index && nakedIndex) {\n let params = new URLSearchParams(path.search);\n let indexValues = params.getAll(\"index\");\n params.delete(\"index\");\n indexValues.filter((v) => v).forEach((v) => params.append(\"index\", v));\n let qs = params.toString();\n path.search = qs ? `?${qs}` : \"\";\n }\n }\n if (basename !== \"/\") {\n path.pathname = path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n return createPath(path);\n}\nfunction normalizeNavigateOptions(isFetcher, path, opts) {\n if (!opts || !isSubmissionNavigation(opts)) {\n return { path };\n }\n if (opts.formMethod && !isValidMethod(opts.formMethod)) {\n return {\n path,\n error: getInternalRouterError(405, { method: opts.formMethod })\n };\n }\n let getInvalidBodyError = () => ({\n path,\n error: getInternalRouterError(400, { type: \"invalid-body\" })\n });\n let rawFormMethod = opts.formMethod || \"get\";\n let formMethod = rawFormMethod.toUpperCase();\n let formAction = stripHashFromPath(path);\n if (opts.body !== void 0) {\n if (opts.formEncType === \"text/plain\") {\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n let text = typeof opts.body === \"string\" ? opts.body : opts.body instanceof FormData || opts.body instanceof URLSearchParams ? (\n // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#plain-text-form-data\n Array.from(opts.body.entries()).reduce(\n (acc, [name, value]) => `${acc}${name}=${value}\n`,\n \"\"\n )\n ) : String(opts.body);\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: void 0,\n json: void 0,\n text\n }\n };\n } else if (opts.formEncType === \"application/json\") {\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n try {\n let json = typeof opts.body === \"string\" ? JSON.parse(opts.body) : opts.body;\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: void 0,\n json,\n text: void 0\n }\n };\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n }\n invariant(\n typeof FormData === \"function\",\n \"FormData is not available in this environment\"\n );\n let searchParams;\n let formData;\n if (opts.formData) {\n searchParams = convertFormDataToSearchParams(opts.formData);\n formData = opts.formData;\n } else if (opts.body instanceof FormData) {\n searchParams = convertFormDataToSearchParams(opts.body);\n formData = opts.body;\n } else if (opts.body instanceof URLSearchParams) {\n searchParams = opts.body;\n formData = convertSearchParamsToFormData(searchParams);\n } else if (opts.body == null) {\n searchParams = new URLSearchParams();\n formData = new FormData();\n } else {\n try {\n searchParams = new URLSearchParams(opts.body);\n formData = convertSearchParamsToFormData(searchParams);\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n let submission = {\n formMethod,\n formAction,\n formEncType: opts && opts.formEncType || \"application/x-www-form-urlencoded\",\n formData,\n json: void 0,\n text: void 0\n };\n if (isMutationMethod(submission.formMethod)) {\n return { path, submission };\n }\n let parsedPath = parsePath(path);\n if (isFetcher && parsedPath.search && hasNakedIndexQuery(parsedPath.search)) {\n searchParams.append(\"index\", \"\");\n }\n parsedPath.search = `?${searchParams}`;\n return { path: createPath(parsedPath), submission };\n}\nfunction getLoaderMatchesUntilBoundary(matches, boundaryId, includeBoundary = false) {\n let index = matches.findIndex((m) => m.route.id === boundaryId);\n if (index >= 0) {\n return matches.slice(0, includeBoundary ? index + 1 : index);\n }\n return matches;\n}\nfunction getMatchesToLoad(history, state, matches, submission, location, initialHydration, isRevalidationRequired, cancelledFetcherLoads, fetchersQueuedForDeletion, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, pendingActionResult) {\n let actionResult = pendingActionResult ? isErrorResult(pendingActionResult[1]) ? pendingActionResult[1].error : pendingActionResult[1].data : void 0;\n let currentUrl = history.createURL(state.location);\n let nextUrl = history.createURL(location);\n let boundaryMatches = matches;\n if (initialHydration && state.errors) {\n boundaryMatches = getLoaderMatchesUntilBoundary(\n matches,\n Object.keys(state.errors)[0],\n true\n );\n } else if (pendingActionResult && isErrorResult(pendingActionResult[1])) {\n boundaryMatches = getLoaderMatchesUntilBoundary(\n matches,\n pendingActionResult[0]\n );\n }\n let actionStatus = pendingActionResult ? pendingActionResult[1].statusCode : void 0;\n let shouldSkipRevalidation = actionStatus && actionStatus >= 400;\n let navigationMatches = boundaryMatches.filter((match, index) => {\n let { route } = match;\n if (route.lazy) {\n return true;\n }\n if (route.loader == null) {\n return false;\n }\n if (initialHydration) {\n return shouldLoadRouteOnHydration(route, state.loaderData, state.errors);\n }\n if (isNewLoader(state.loaderData, state.matches[index], match)) {\n return true;\n }\n let currentRouteMatch = state.matches[index];\n let nextRouteMatch = match;\n return shouldRevalidateLoader(match, {\n currentUrl,\n currentParams: currentRouteMatch.params,\n nextUrl,\n nextParams: nextRouteMatch.params,\n ...submission,\n actionResult,\n actionStatus,\n defaultShouldRevalidate: shouldSkipRevalidation ? false : (\n // Forced revalidation due to submission, useRevalidator, or X-Remix-Revalidate\n isRevalidationRequired || currentUrl.pathname + currentUrl.search === nextUrl.pathname + nextUrl.search || // Search params affect all loaders\n currentUrl.search !== nextUrl.search || isNewRouteInstance(currentRouteMatch, nextRouteMatch)\n )\n });\n });\n let revalidatingFetchers = [];\n fetchLoadMatches.forEach((f, key) => {\n if (initialHydration || !matches.some((m) => m.route.id === f.routeId) || fetchersQueuedForDeletion.has(key)) {\n return;\n }\n let fetcherMatches = matchRoutes(routesToUse, f.path, basename);\n if (!fetcherMatches) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: null,\n match: null,\n controller: null\n });\n return;\n }\n let fetcher = state.fetchers.get(key);\n let fetcherMatch = getTargetMatch(fetcherMatches, f.path);\n let shouldRevalidate = false;\n if (fetchRedirectIds.has(key)) {\n shouldRevalidate = false;\n } else if (cancelledFetcherLoads.has(key)) {\n cancelledFetcherLoads.delete(key);\n shouldRevalidate = true;\n } else if (fetcher && fetcher.state !== \"idle\" && fetcher.data === void 0) {\n shouldRevalidate = isRevalidationRequired;\n } else {\n shouldRevalidate = shouldRevalidateLoader(fetcherMatch, {\n currentUrl,\n currentParams: state.matches[state.matches.length - 1].params,\n nextUrl,\n nextParams: matches[matches.length - 1].params,\n ...submission,\n actionResult,\n actionStatus,\n defaultShouldRevalidate: shouldSkipRevalidation ? false : isRevalidationRequired\n });\n }\n if (shouldRevalidate) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: fetcherMatches,\n match: fetcherMatch,\n controller: new AbortController()\n });\n }\n });\n return [navigationMatches, revalidatingFetchers];\n}\nfunction shouldLoadRouteOnHydration(route, loaderData, errors) {\n if (route.lazy) {\n return true;\n }\n if (!route.loader) {\n return false;\n }\n let hasData = loaderData != null && loaderData[route.id] !== void 0;\n let hasError = errors != null && errors[route.id] !== void 0;\n if (!hasData && hasError) {\n return false;\n }\n if (typeof route.loader === \"function\" && route.loader.hydrate === true) {\n return true;\n }\n return !hasData && !hasError;\n}\nfunction isNewLoader(currentLoaderData, currentMatch, match) {\n let isNew = (\n // [a] -> [a, b]\n !currentMatch || // [a, b] -> [a, c]\n match.route.id !== currentMatch.route.id\n );\n let isMissingData = !currentLoaderData.hasOwnProperty(match.route.id);\n return isNew || isMissingData;\n}\nfunction isNewRouteInstance(currentMatch, match) {\n let currentPath = currentMatch.route.path;\n return (\n // param change for this match, /users/123 -> /users/456\n currentMatch.pathname !== match.pathname || // splat param changed, which is not present in match.path\n // e.g. /files/images/avatar.jpg -> files/finances.xls\n currentPath != null && currentPath.endsWith(\"*\") && currentMatch.params[\"*\"] !== match.params[\"*\"]\n );\n}\nfunction shouldRevalidateLoader(loaderMatch, arg) {\n if (loaderMatch.route.shouldRevalidate) {\n let routeChoice = loaderMatch.route.shouldRevalidate(arg);\n if (typeof routeChoice === \"boolean\") {\n return routeChoice;\n }\n }\n return arg.defaultShouldRevalidate;\n}\nfunction patchRoutesImpl(routeId, children, routesToUse, manifest, mapRouteProperties2) {\n let childrenToPatch;\n if (routeId) {\n let route = manifest[routeId];\n invariant(\n route,\n `No route found to patch children into: routeId = ${routeId}`\n );\n if (!route.children) {\n route.children = [];\n }\n childrenToPatch = route.children;\n } else {\n childrenToPatch = routesToUse;\n }\n let uniqueChildren = children.filter(\n (newRoute) => !childrenToPatch.some(\n (existingRoute) => isSameRoute(newRoute, existingRoute)\n )\n );\n let newRoutes = convertRoutesToDataRoutes(\n uniqueChildren,\n mapRouteProperties2,\n [routeId || \"_\", \"patch\", String(childrenToPatch?.length || \"0\")],\n manifest\n );\n childrenToPatch.push(...newRoutes);\n}\nfunction isSameRoute(newRoute, existingRoute) {\n if (\"id\" in newRoute && \"id\" in existingRoute && newRoute.id === existingRoute.id) {\n return true;\n }\n if (!(newRoute.index === existingRoute.index && newRoute.path === existingRoute.path && newRoute.caseSensitive === existingRoute.caseSensitive)) {\n return false;\n }\n if ((!newRoute.children || newRoute.children.length === 0) && (!existingRoute.children || existingRoute.children.length === 0)) {\n return true;\n }\n return newRoute.children.every(\n (aChild, i) => existingRoute.children?.some((bChild) => isSameRoute(aChild, bChild))\n );\n}\nvar lazyRouteFunctionCache = /* @__PURE__ */ new WeakMap();\nasync function loadLazyRouteModule(route, mapRouteProperties2, manifest) {\n let routeToUpdate = manifest[route.id];\n invariant(routeToUpdate, \"No route found in manifest\");\n if (!route.lazy) {\n return;\n }\n let cachedPromise = lazyRouteFunctionCache.get(routeToUpdate);\n if (cachedPromise) {\n await cachedPromise;\n return;\n }\n let lazyRoutePromise = route.lazy().then((lazyRoute) => {\n let routeUpdates = {};\n for (let lazyRouteProperty in lazyRoute) {\n let staticRouteValue = routeToUpdate[lazyRouteProperty];\n let isPropertyStaticallyDefined = staticRouteValue !== void 0 && // This property isn't static since it should always be updated based\n // on the route updates\n lazyRouteProperty !== \"hasErrorBoundary\";\n warning(\n !isPropertyStaticallyDefined,\n `Route \"${routeToUpdate.id}\" has a static property \"${lazyRouteProperty}\" defined but its lazy function is also returning a value for this property. The lazy route property \"${lazyRouteProperty}\" will be ignored.`\n );\n warning(\n !unsupportedLazyRouteFunctionKeys.has(\n lazyRouteProperty\n ),\n \"Route property \" + lazyRouteProperty + \" is not a supported property to be returned from a lazy route function. This property will be ignored.\"\n );\n if (!isPropertyStaticallyDefined && !unsupportedLazyRouteFunctionKeys.has(\n lazyRouteProperty\n )) {\n routeUpdates[lazyRouteProperty] = lazyRoute[lazyRouteProperty];\n }\n }\n Object.assign(routeToUpdate, routeUpdates);\n Object.assign(routeToUpdate, {\n // To keep things framework agnostic, we use the provided `mapRouteProperties`\n // function to set the framework-aware properties (`element`/`hasErrorBoundary`)\n // since the logic will differ between frameworks.\n ...mapRouteProperties2(routeToUpdate),\n lazy: void 0\n });\n });\n lazyRouteFunctionCache.set(routeToUpdate, lazyRoutePromise);\n await lazyRoutePromise;\n}\nasync function loadLazyMiddleware(route, manifest) {\n if (!route.unstable_lazyMiddleware) {\n return;\n }\n let routeToUpdate = manifest[route.id];\n invariant(routeToUpdate, \"No route found in manifest\");\n if (routeToUpdate.unstable_middleware) {\n warning(\n false,\n `Route \"${routeToUpdate.id}\" has a static property \"unstable_middleware\" defined. The \"unstable_lazyMiddleware\" function will be ignored.`\n );\n } else {\n let middleware = await route.unstable_lazyMiddleware();\n if (!route.unstable_lazyMiddleware) {\n return;\n }\n if (!routeToUpdate.unstable_middleware) {\n routeToUpdate.unstable_middleware = middleware;\n }\n }\n routeToUpdate.unstable_lazyMiddleware = void 0;\n}\nfunction loadLazyMiddlewareForMatches(matches, manifest) {\n let promises = matches.map(\n (m) => m.route.unstable_lazyMiddleware ? loadLazyMiddleware(m.route, manifest) : void 0\n ).filter(Boolean);\n return promises.length > 0 ? Promise.all(promises) : void 0;\n}\nasync function defaultDataStrategy(args) {\n let matchesToLoad = args.matches.filter((m) => m.shouldLoad);\n let keyedResults = {};\n let results = await Promise.all(matchesToLoad.map((m) => m.resolve()));\n results.forEach((result, i) => {\n keyedResults[matchesToLoad[i].route.id] = result;\n });\n return keyedResults;\n}\nasync function defaultDataStrategyWithMiddleware(args) {\n if (!args.matches.some((m) => m.route.unstable_middleware)) {\n return defaultDataStrategy(args);\n }\n return runMiddlewarePipeline(\n args,\n false,\n () => defaultDataStrategy(args),\n (error, routeId) => ({ [routeId]: { type: \"error\", result: error } })\n );\n}\nasync function runMiddlewarePipeline(args, propagateResult, handler, errorHandler) {\n let { matches, request, params, context } = args;\n let middlewareState = {\n handlerResult: void 0\n };\n try {\n let tuples = matches.flatMap(\n (m) => m.route.unstable_middleware ? m.route.unstable_middleware.map((fn) => [m.route.id, fn]) : []\n );\n let result = await callRouteMiddleware(\n { request, params, context },\n tuples,\n propagateResult,\n middlewareState,\n handler\n );\n return propagateResult ? result : middlewareState.handlerResult;\n } catch (e) {\n if (!middlewareState.middlewareError) {\n throw e;\n }\n let result = await errorHandler(\n middlewareState.middlewareError.error,\n middlewareState.middlewareError.routeId\n );\n if (propagateResult || !middlewareState.handlerResult) {\n return result;\n }\n return Object.assign(middlewareState.handlerResult, result);\n }\n}\nasync function callRouteMiddleware(args, middlewares, propagateResult, middlewareState, handler, idx = 0) {\n let { request } = args;\n if (request.signal.aborted) {\n if (request.signal.reason) {\n throw request.signal.reason;\n }\n throw new Error(\n `Request aborted without an \\`AbortSignal.reason\\`: ${request.method} ${request.url}`\n );\n }\n let tuple = middlewares[idx];\n if (!tuple) {\n middlewareState.handlerResult = await handler();\n return middlewareState.handlerResult;\n }\n let [routeId, middleware] = tuple;\n let nextCalled = false;\n let nextResult = void 0;\n let next = async () => {\n if (nextCalled) {\n throw new Error(\"You may only call `next()` once per middleware\");\n }\n nextCalled = true;\n let result = await callRouteMiddleware(\n args,\n middlewares,\n propagateResult,\n middlewareState,\n handler,\n idx + 1\n );\n if (propagateResult) {\n nextResult = result;\n return nextResult;\n }\n };\n try {\n let result = await middleware(\n {\n request: args.request,\n params: args.params,\n context: args.context\n },\n next\n );\n if (nextCalled) {\n if (result === void 0) {\n return nextResult;\n } else {\n return result;\n }\n } else {\n return next();\n }\n } catch (error) {\n if (!middlewareState.middlewareError) {\n middlewareState.middlewareError = { routeId, error };\n } else if (middlewareState.middlewareError.error !== error) {\n middlewareState.middlewareError = { routeId, error };\n }\n throw error;\n }\n}\nasync function callDataStrategyImpl(dataStrategyImpl, type, request, matchesToLoad, matches, fetcherKey, manifest, mapRouteProperties2, scopedContext) {\n let loadMiddlewarePromise = loadLazyMiddlewareForMatches(matches, manifest);\n let loadRouteDefinitionsPromises = matches.map(\n (m) => m.route.lazy ? loadLazyRouteModule(m.route, mapRouteProperties2, manifest) : void 0\n );\n if (loadMiddlewarePromise) {\n await loadMiddlewarePromise;\n }\n let dsMatches = matches.map((match, i) => {\n let loadRoutePromise = loadRouteDefinitionsPromises[i];\n let shouldLoad = matchesToLoad.some((m) => m.route.id === match.route.id);\n let resolve = async (handlerOverride) => {\n if (handlerOverride && request.method === \"GET\" && (match.route.lazy || match.route.loader)) {\n shouldLoad = true;\n }\n return shouldLoad ? callLoaderOrAction(\n type,\n request,\n match,\n loadRoutePromise,\n handlerOverride,\n scopedContext\n ) : Promise.resolve({ type: \"data\" /* data */, result: void 0 });\n };\n return {\n ...match,\n shouldLoad,\n resolve\n };\n });\n let results = await dataStrategyImpl({\n matches: dsMatches,\n request,\n params: matches[0].params,\n fetcherKey,\n context: scopedContext\n });\n try {\n await Promise.all(loadRouteDefinitionsPromises);\n } catch (e) {\n }\n return results;\n}\nasync function callLoaderOrAction(type, request, match, loadRoutePromise, handlerOverride, scopedContext) {\n let result;\n let onReject;\n let runHandler = (handler) => {\n let reject;\n let abortPromise = new Promise((_, r) => reject = r);\n onReject = () => reject();\n request.signal.addEventListener(\"abort\", onReject);\n let actualHandler = (ctx) => {\n if (typeof handler !== \"function\") {\n return Promise.reject(\n new Error(\n `You cannot call the handler for a route which defines a boolean \"${type}\" [routeId: ${match.route.id}]`\n )\n );\n }\n return handler(\n {\n request,\n params: match.params,\n context: scopedContext\n },\n ...ctx !== void 0 ? [ctx] : []\n );\n };\n let handlerPromise = (async () => {\n try {\n let val = await (handlerOverride ? handlerOverride((ctx) => actualHandler(ctx)) : actualHandler());\n return { type: \"data\", result: val };\n } catch (e) {\n return { type: \"error\", result: e };\n }\n })();\n return Promise.race([handlerPromise, abortPromise]);\n };\n try {\n let handler = match.route[type];\n if (loadRoutePromise) {\n if (handler) {\n let handlerError;\n let [value] = await Promise.all([\n // If the handler throws, don't let it immediately bubble out,\n // since we need to let the lazy() execution finish so we know if this\n // route has a boundary that can handle the error\n runHandler(handler).catch((e) => {\n handlerError = e;\n }),\n loadRoutePromise\n ]);\n if (handlerError !== void 0) {\n throw handlerError;\n }\n result = value;\n } else {\n await loadRoutePromise;\n handler = match.route[type];\n if (handler) {\n result = await runHandler(handler);\n } else if (type === \"action\") {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(405, {\n method: request.method,\n pathname,\n routeId: match.route.id\n });\n } else {\n return { type: \"data\" /* data */, result: void 0 };\n }\n }\n } else if (!handler) {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(404, {\n pathname\n });\n } else {\n result = await runHandler(handler);\n }\n } catch (e) {\n return { type: \"error\" /* error */, result: e };\n } finally {\n if (onReject) {\n request.signal.removeEventListener(\"abort\", onReject);\n }\n }\n return result;\n}\nasync function convertDataStrategyResultToDataResult(dataStrategyResult) {\n let { result, type } = dataStrategyResult;\n if (isResponse(result)) {\n let data2;\n try {\n let contentType = result.headers.get(\"Content-Type\");\n if (contentType && /\\bapplication\\/json\\b/.test(contentType)) {\n if (result.body == null) {\n data2 = null;\n } else {\n data2 = await result.json();\n }\n } else {\n data2 = await result.text();\n }\n } catch (e) {\n return { type: \"error\" /* error */, error: e };\n }\n if (type === \"error\" /* error */) {\n return {\n type: \"error\" /* error */,\n error: new ErrorResponseImpl(result.status, result.statusText, data2),\n statusCode: result.status,\n headers: result.headers\n };\n }\n return {\n type: \"data\" /* data */,\n data: data2,\n statusCode: result.status,\n headers: result.headers\n };\n }\n if (type === \"error\" /* error */) {\n if (isDataWithResponseInit(result)) {\n if (result.data instanceof Error) {\n return {\n type: \"error\" /* error */,\n error: result.data,\n statusCode: result.init?.status,\n headers: result.init?.headers ? new Headers(result.init.headers) : void 0\n };\n }\n return {\n type: \"error\" /* error */,\n error: new ErrorResponseImpl(\n result.init?.status || 500,\n void 0,\n result.data\n ),\n statusCode: isRouteErrorResponse(result) ? result.status : void 0,\n headers: result.init?.headers ? new Headers(result.init.headers) : void 0\n };\n }\n return {\n type: \"error\" /* error */,\n error: result,\n statusCode: isRouteErrorResponse(result) ? result.status : void 0\n };\n }\n if (isDataWithResponseInit(result)) {\n return {\n type: \"data\" /* data */,\n data: result.data,\n statusCode: result.init?.status,\n headers: result.init?.headers ? new Headers(result.init.headers) : void 0\n };\n }\n return { type: \"data\" /* data */, data: result };\n}\nfunction normalizeRelativeRoutingRedirectResponse(response, request, routeId, matches, basename) {\n let location = response.headers.get(\"Location\");\n invariant(\n location,\n \"Redirects returned/thrown from loaders/actions must have a Location header\"\n );\n if (!ABSOLUTE_URL_REGEX.test(location)) {\n let trimmedMatches = matches.slice(\n 0,\n matches.findIndex((m) => m.route.id === routeId) + 1\n );\n location = normalizeTo(\n new URL(request.url),\n trimmedMatches,\n basename,\n location\n );\n response.headers.set(\"Location\", location);\n }\n return response;\n}\nfunction normalizeRedirectLocation(location, currentUrl, basename) {\n if (ABSOLUTE_URL_REGEX.test(location)) {\n let normalizedLocation = location;\n let url = normalizedLocation.startsWith(\"//\") ? new URL(currentUrl.protocol + normalizedLocation) : new URL(normalizedLocation);\n let isSameBasename = stripBasename(url.pathname, basename) != null;\n if (url.origin === currentUrl.origin && isSameBasename) {\n return url.pathname + url.search + url.hash;\n }\n }\n return location;\n}\nfunction createClientSideRequest(history, location, signal, submission) {\n let url = history.createURL(stripHashFromPath(location)).toString();\n let init = { signal };\n if (submission && isMutationMethod(submission.formMethod)) {\n let { formMethod, formEncType } = submission;\n init.method = formMethod.toUpperCase();\n if (formEncType === \"application/json\") {\n init.headers = new Headers({ \"Content-Type\": formEncType });\n init.body = JSON.stringify(submission.json);\n } else if (formEncType === \"text/plain\") {\n init.body = submission.text;\n } else if (formEncType === \"application/x-www-form-urlencoded\" && submission.formData) {\n init.body = convertFormDataToSearchParams(submission.formData);\n } else {\n init.body = submission.formData;\n }\n }\n return new Request(url, init);\n}\nfunction convertFormDataToSearchParams(formData) {\n let searchParams = new URLSearchParams();\n for (let [key, value] of formData.entries()) {\n searchParams.append(key, typeof value === \"string\" ? value : value.name);\n }\n return searchParams;\n}\nfunction convertSearchParamsToFormData(searchParams) {\n let formData = new FormData();\n for (let [key, value] of searchParams.entries()) {\n formData.append(key, value);\n }\n return formData;\n}\nfunction processRouteLoaderData(matches, results, pendingActionResult, isStaticHandler = false, skipLoaderErrorBubbling = false) {\n let loaderData = {};\n let errors = null;\n let statusCode;\n let foundError = false;\n let loaderHeaders = {};\n let pendingError = pendingActionResult && isErrorResult(pendingActionResult[1]) ? pendingActionResult[1].error : void 0;\n matches.forEach((match) => {\n if (!(match.route.id in results)) {\n return;\n }\n let id = match.route.id;\n let result = results[id];\n invariant(\n !isRedirectResult(result),\n \"Cannot handle redirect results in processLoaderData\"\n );\n if (isErrorResult(result)) {\n let error = result.error;\n if (pendingError !== void 0) {\n error = pendingError;\n pendingError = void 0;\n }\n errors = errors || {};\n if (skipLoaderErrorBubbling) {\n errors[id] = error;\n } else {\n let boundaryMatch = findNearestBoundary(matches, id);\n if (errors[boundaryMatch.route.id] == null) {\n errors[boundaryMatch.route.id] = error;\n }\n }\n if (!isStaticHandler) {\n loaderData[id] = ResetLoaderDataSymbol;\n }\n if (!foundError) {\n foundError = true;\n statusCode = isRouteErrorResponse(result.error) ? result.error.status : 500;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n } else {\n loaderData[id] = result.data;\n if (result.statusCode && result.statusCode !== 200 && !foundError) {\n statusCode = result.statusCode;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n }\n });\n if (pendingError !== void 0 && pendingActionResult) {\n errors = { [pendingActionResult[0]]: pendingError };\n loaderData[pendingActionResult[0]] = void 0;\n }\n return {\n loaderData,\n errors,\n statusCode: statusCode || 200,\n loaderHeaders\n };\n}\nfunction processLoaderData(state, matches, results, pendingActionResult, revalidatingFetchers, fetcherResults) {\n let { loaderData, errors } = processRouteLoaderData(\n matches,\n results,\n pendingActionResult\n );\n revalidatingFetchers.forEach((rf) => {\n let { key, match, controller } = rf;\n let result = fetcherResults[key];\n invariant(result, \"Did not find corresponding fetcher result\");\n if (controller && controller.signal.aborted) {\n return;\n } else if (isErrorResult(result)) {\n let boundaryMatch = findNearestBoundary(state.matches, match?.route.id);\n if (!(errors && errors[boundaryMatch.route.id])) {\n errors = {\n ...errors,\n [boundaryMatch.route.id]: result.error\n };\n }\n state.fetchers.delete(key);\n } else if (isRedirectResult(result)) {\n invariant(false, \"Unhandled fetcher revalidation redirect\");\n } else {\n let doneFetcher = getDoneFetcher(result.data);\n state.fetchers.set(key, doneFetcher);\n }\n });\n return { loaderData, errors };\n}\nfunction mergeLoaderData(loaderData, newLoaderData, matches, errors) {\n let mergedLoaderData = Object.entries(newLoaderData).filter(([, v]) => v !== ResetLoaderDataSymbol).reduce((merged, [k, v]) => {\n merged[k] = v;\n return merged;\n }, {});\n for (let match of matches) {\n let id = match.route.id;\n if (!newLoaderData.hasOwnProperty(id) && loaderData.hasOwnProperty(id) && match.route.loader) {\n mergedLoaderData[id] = loaderData[id];\n }\n if (errors && errors.hasOwnProperty(id)) {\n break;\n }\n }\n return mergedLoaderData;\n}\nfunction getActionDataForCommit(pendingActionResult) {\n if (!pendingActionResult) {\n return {};\n }\n return isErrorResult(pendingActionResult[1]) ? {\n // Clear out prior actionData on errors\n actionData: {}\n } : {\n actionData: {\n [pendingActionResult[0]]: pendingActionResult[1].data\n }\n };\n}\nfunction findNearestBoundary(matches, routeId) {\n let eligibleMatches = routeId ? matches.slice(0, matches.findIndex((m) => m.route.id === routeId) + 1) : [...matches];\n return eligibleMatches.reverse().find((m) => m.route.hasErrorBoundary === true) || matches[0];\n}\nfunction getShortCircuitMatches(routes) {\n let route = routes.length === 1 ? routes[0] : routes.find((r) => r.index || !r.path || r.path === \"/\") || {\n id: `__shim-error-route__`\n };\n return {\n matches: [\n {\n params: {},\n pathname: \"\",\n pathnameBase: \"\",\n route\n }\n ],\n route\n };\n}\nfunction getInternalRouterError(status, {\n pathname,\n routeId,\n method,\n type,\n message\n} = {}) {\n let statusText = \"Unknown Server Error\";\n let errorMessage = \"Unknown @remix-run/router error\";\n if (status === 400) {\n statusText = \"Bad Request\";\n if (method && pathname && routeId) {\n errorMessage = `You made a ${method} request to \"${pathname}\" but did not provide a \\`loader\\` for route \"${routeId}\", so there is no way to handle the request.`;\n } else if (type === \"invalid-body\") {\n errorMessage = \"Unable to encode submission body\";\n }\n } else if (status === 403) {\n statusText = \"Forbidden\";\n errorMessage = `Route \"${routeId}\" does not match URL \"${pathname}\"`;\n } else if (status === 404) {\n statusText = \"Not Found\";\n errorMessage = `No route matches URL \"${pathname}\"`;\n } else if (status === 405) {\n statusText = \"Method Not Allowed\";\n if (method && pathname && routeId) {\n errorMessage = `You made a ${method.toUpperCase()} request to \"${pathname}\" but did not provide an \\`action\\` for route \"${routeId}\", so there is no way to handle the request.`;\n } else if (method) {\n errorMessage = `Invalid request method \"${method.toUpperCase()}\"`;\n }\n }\n return new ErrorResponseImpl(\n status || 500,\n statusText,\n new Error(errorMessage),\n true\n );\n}\nfunction findRedirect(results) {\n let entries = Object.entries(results);\n for (let i = entries.length - 1; i >= 0; i--) {\n let [key, result] = entries[i];\n if (isRedirectResult(result)) {\n return { key, result };\n }\n }\n}\nfunction stripHashFromPath(path) {\n let parsedPath = typeof path === \"string\" ? parsePath(path) : path;\n return createPath({ ...parsedPath, hash: \"\" });\n}\nfunction isHashChangeOnly(a, b) {\n if (a.pathname !== b.pathname || a.search !== b.search) {\n return false;\n }\n if (a.hash === \"\") {\n return b.hash !== \"\";\n } else if (a.hash === b.hash) {\n return true;\n } else if (b.hash !== \"\") {\n return true;\n }\n return false;\n}\nfunction isDataStrategyResult(result) {\n return result != null && typeof result === \"object\" && \"type\" in result && \"result\" in result && (result.type === \"data\" /* data */ || result.type === \"error\" /* error */);\n}\nfunction isRedirectDataStrategyResult(result) {\n return isResponse(result.result) && redirectStatusCodes.has(result.result.status);\n}\nfunction isErrorResult(result) {\n return result.type === \"error\" /* error */;\n}\nfunction isRedirectResult(result) {\n return (result && result.type) === \"redirect\" /* redirect */;\n}\nfunction isDataWithResponseInit(value) {\n return typeof value === \"object\" && value != null && \"type\" in value && \"data\" in value && \"init\" in value && value.type === \"DataWithResponseInit\";\n}\nfunction isResponse(value) {\n return value != null && typeof value.status === \"number\" && typeof value.statusText === \"string\" && typeof value.headers === \"object\" && typeof value.body !== \"undefined\";\n}\nfunction isRedirectStatusCode(statusCode) {\n return redirectStatusCodes.has(statusCode);\n}\nfunction isRedirectResponse(result) {\n return isResponse(result) && isRedirectStatusCode(result.status) && result.headers.has(\"Location\");\n}\nfunction isValidMethod(method) {\n return validRequestMethods.has(method.toUpperCase());\n}\nfunction isMutationMethod(method) {\n return validMutationMethods.has(method.toUpperCase());\n}\nfunction hasNakedIndexQuery(search) {\n return new URLSearchParams(search).getAll(\"index\").some((v) => v === \"\");\n}\nfunction getTargetMatch(matches, location) {\n let search = typeof location === \"string\" ? parsePath(location).search : location.search;\n if (matches[matches.length - 1].route.index && hasNakedIndexQuery(search || \"\")) {\n return matches[matches.length - 1];\n }\n let pathMatches = getPathContributingMatches(matches);\n return pathMatches[pathMatches.length - 1];\n}\nfunction getSubmissionFromNavigation(navigation) {\n let { formMethod, formAction, formEncType, text, formData, json } = navigation;\n if (!formMethod || !formAction || !formEncType) {\n return;\n }\n if (text != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: void 0,\n json: void 0,\n text\n };\n } else if (formData != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData,\n json: void 0,\n text: void 0\n };\n } else if (json !== void 0) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: void 0,\n json,\n text: void 0\n };\n }\n}\nfunction getLoadingNavigation(location, submission) {\n if (submission) {\n let navigation = {\n state: \"loading\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text\n };\n return navigation;\n } else {\n let navigation = {\n state: \"loading\",\n location,\n formMethod: void 0,\n formAction: void 0,\n formEncType: void 0,\n formData: void 0,\n json: void 0,\n text: void 0\n };\n return navigation;\n }\n}\nfunction getSubmittingNavigation(location, submission) {\n let navigation = {\n state: \"submitting\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text\n };\n return navigation;\n}\nfunction getLoadingFetcher(submission, data2) {\n if (submission) {\n let fetcher = {\n state: \"loading\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data: data2\n };\n return fetcher;\n } else {\n let fetcher = {\n state: \"loading\",\n formMethod: void 0,\n formAction: void 0,\n formEncType: void 0,\n formData: void 0,\n json: void 0,\n text: void 0,\n data: data2\n };\n return fetcher;\n }\n}\nfunction getSubmittingFetcher(submission, existingFetcher) {\n let fetcher = {\n state: \"submitting\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data: existingFetcher ? existingFetcher.data : void 0\n };\n return fetcher;\n}\nfunction getDoneFetcher(data2) {\n let fetcher = {\n state: \"idle\",\n formMethod: void 0,\n formAction: void 0,\n formEncType: void 0,\n formData: void 0,\n json: void 0,\n text: void 0,\n data: data2\n };\n return fetcher;\n}\nfunction restoreAppliedTransitions(_window, transitions) {\n try {\n let sessionPositions = _window.sessionStorage.getItem(\n TRANSITIONS_STORAGE_KEY\n );\n if (sessionPositions) {\n let json = JSON.parse(sessionPositions);\n for (let [k, v] of Object.entries(json || {})) {\n if (v && Array.isArray(v)) {\n transitions.set(k, new Set(v || []));\n }\n }\n }\n } catch (e) {\n }\n}\nfunction persistAppliedTransitions(_window, transitions) {\n if (transitions.size > 0) {\n let json = {};\n for (let [k, v] of transitions) {\n json[k] = [...v];\n }\n try {\n _window.sessionStorage.setItem(\n TRANSITIONS_STORAGE_KEY,\n JSON.stringify(json)\n );\n } catch (error) {\n warning(\n false,\n `Failed to save applied view transitions in sessionStorage (${error}).`\n );\n }\n }\n}\nfunction createDeferred() {\n let resolve;\n let reject;\n let promise = new Promise((res, rej) => {\n resolve = async (val) => {\n res(val);\n try {\n await promise;\n } catch (e) {\n }\n };\n reject = async (error) => {\n rej(error);\n try {\n await promise;\n } catch (e) {\n }\n };\n });\n return {\n promise,\n //@ts-ignore\n resolve,\n //@ts-ignore\n reject\n };\n}\n\n// lib/components.tsx\nimport * as React3 from \"react\";\n\n// lib/context.ts\nimport * as React from \"react\";\nvar DataRouterContext = React.createContext(null);\nDataRouterContext.displayName = \"DataRouter\";\nvar DataRouterStateContext = React.createContext(null);\nDataRouterStateContext.displayName = \"DataRouterState\";\nvar ViewTransitionContext = React.createContext({\n isTransitioning: false\n});\nViewTransitionContext.displayName = \"ViewTransition\";\nvar FetchersContext = React.createContext(\n /* @__PURE__ */ new Map()\n);\nFetchersContext.displayName = \"Fetchers\";\nvar AwaitContext = React.createContext(null);\nAwaitContext.displayName = \"Await\";\nvar NavigationContext = React.createContext(\n null\n);\nNavigationContext.displayName = \"Navigation\";\nvar LocationContext = React.createContext(\n null\n);\nLocationContext.displayName = \"Location\";\nvar RouteContext = React.createContext({\n outlet: null,\n matches: [],\n isDataRoute: false\n});\nRouteContext.displayName = \"Route\";\nvar RouteErrorContext = React.createContext(null);\nRouteErrorContext.displayName = \"RouteError\";\n\n// lib/hooks.tsx\nimport * as React2 from \"react\";\nvar ENABLE_DEV_WARNINGS = true;\nfunction useHref(to, { relative } = {}) {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useHref() may be used only in the context of a <Router> component.`\n );\n let { basename, navigator: navigator2 } = React2.useContext(NavigationContext);\n let { hash, pathname, search } = useResolvedPath(to, { relative });\n let joinedPathname = pathname;\n if (basename !== \"/\") {\n joinedPathname = pathname === \"/\" ? basename : joinPaths([basename, pathname]);\n }\n return navigator2.createHref({ pathname: joinedPathname, search, hash });\n}\nfunction useInRouterContext() {\n return React2.useContext(LocationContext) != null;\n}\nfunction useLocation() {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useLocation() may be used only in the context of a <Router> component.`\n );\n return React2.useContext(LocationContext).location;\n}\nfunction useNavigationType() {\n return React2.useContext(LocationContext).navigationType;\n}\nfunction useMatch(pattern) {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useMatch() may be used only in the context of a <Router> component.`\n );\n let { pathname } = useLocation();\n return React2.useMemo(\n () => matchPath(pattern, decodePath(pathname)),\n [pathname, pattern]\n );\n}\nvar navigateEffectWarning = `You should call navigate() in a React.useEffect(), not when your component is first rendered.`;\nfunction useIsomorphicLayoutEffect(cb) {\n let isStatic = React2.useContext(NavigationContext).static;\n if (!isStatic) {\n React2.useLayoutEffect(cb);\n }\n}\nfunction useNavigate() {\n let { isDataRoute } = React2.useContext(RouteContext);\n return isDataRoute ? useNavigateStable() : useNavigateUnstable();\n}\nfunction useNavigateUnstable() {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useNavigate() may be used only in the context of a <Router> component.`\n );\n let dataRouterContext = React2.useContext(DataRouterContext);\n let { basename, navigator: navigator2 } = React2.useContext(NavigationContext);\n let { matches } = React2.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n let routePathnamesJson = JSON.stringify(getResolveToMatches(matches));\n let activeRef = React2.useRef(false);\n useIsomorphicLayoutEffect(() => {\n activeRef.current = true;\n });\n let navigate = React2.useCallback(\n (to, options = {}) => {\n warning(activeRef.current, navigateEffectWarning);\n if (!activeRef.current) return;\n if (typeof to === \"number\") {\n navigator2.go(to);\n return;\n }\n let path = resolveTo(\n to,\n JSON.parse(routePathnamesJson),\n locationPathname,\n options.relative === \"path\"\n );\n if (dataRouterContext == null && basename !== \"/\") {\n path.pathname = path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n (!!options.replace ? navigator2.replace : navigator2.push)(\n path,\n options.state,\n options\n );\n },\n [\n basename,\n navigator2,\n routePathnamesJson,\n locationPathname,\n dataRouterContext\n ]\n );\n return navigate;\n}\nvar OutletContext = React2.createContext(null);\nfunction useOutletContext() {\n return React2.useContext(OutletContext);\n}\nfunction useOutlet(context) {\n let outlet = React2.useContext(RouteContext).outlet;\n if (outlet) {\n return /* @__PURE__ */ React2.createElement(OutletContext.Provider, { value: context }, outlet);\n }\n return outlet;\n}\nfunction useParams() {\n let { matches } = React2.useContext(RouteContext);\n let routeMatch = matches[matches.length - 1];\n return routeMatch ? routeMatch.params : {};\n}\nfunction useResolvedPath(to, { relative } = {}) {\n let { matches } = React2.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n let routePathnamesJson = JSON.stringify(getResolveToMatches(matches));\n return React2.useMemo(\n () => resolveTo(\n to,\n JSON.parse(routePathnamesJson),\n locationPathname,\n relative === \"path\"\n ),\n [to, routePathnamesJson, locationPathname, relative]\n );\n}\nfunction useRoutes(routes, locationArg) {\n return useRoutesImpl(routes, locationArg);\n}\nfunction useRoutesImpl(routes, locationArg, dataRouterState, future) {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useRoutes() may be used only in the context of a <Router> component.`\n );\n let { navigator: navigator2, static: isStatic } = React2.useContext(NavigationContext);\n let { matches: parentMatches } = React2.useContext(RouteContext);\n let routeMatch = parentMatches[parentMatches.length - 1];\n let parentParams = routeMatch ? routeMatch.params : {};\n let parentPathname = routeMatch ? routeMatch.pathname : \"/\";\n let parentPathnameBase = routeMatch ? routeMatch.pathnameBase : \"/\";\n let parentRoute = routeMatch && routeMatch.route;\n if (ENABLE_DEV_WARNINGS) {\n let parentPath = parentRoute && parentRoute.path || \"\";\n warningOnce(\n parentPathname,\n !parentRoute || parentPath.endsWith(\"*\") || parentPath.endsWith(\"*?\"),\n `You rendered descendant <Routes> (or called \\`useRoutes()\\`) at \"${parentPathname}\" (under <Route path=\"${parentPath}\">) but the parent route path has no trailing \"*\". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render.\n\nPlease change the parent <Route path=\"${parentPath}\"> to <Route path=\"${parentPath === \"/\" ? \"*\" : `${parentPath}/*`}\">.`\n );\n }\n let locationFromContext = useLocation();\n let location;\n if (locationArg) {\n let parsedLocationArg = typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n invariant(\n parentPathnameBase === \"/\" || parsedLocationArg.pathname?.startsWith(parentPathnameBase),\n `When overriding the location using \\`<Routes location>\\` or \\`useRoutes(routes, location)\\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is \"${parentPathnameBase}\" but pathname \"${parsedLocationArg.pathname}\" was given in the \\`location\\` prop.`\n );\n location = parsedLocationArg;\n } else {\n location = locationFromContext;\n }\n let pathname = location.pathname || \"/\";\n let remainingPathname = pathname;\n if (parentPathnameBase !== \"/\") {\n let parentSegments = parentPathnameBase.replace(/^\\//, \"\").split(\"/\");\n let segments = pathname.replace(/^\\//, \"\").split(\"/\");\n remainingPathname = \"/\" + segments.slice(parentSegments.length).join(\"/\");\n }\n let matches = !isStatic && dataRouterState && dataRouterState.matches && dataRouterState.matches.length > 0 ? dataRouterState.matches : matchRoutes(routes, { pathname: remainingPathname });\n if (ENABLE_DEV_WARNINGS) {\n warning(\n parentRoute || matches != null,\n `No routes matched location \"${location.pathname}${location.search}${location.hash}\" `\n );\n warning(\n matches == null || matches[matches.length - 1].route.element !== void 0 || matches[matches.length - 1].route.Component !== void 0 || matches[matches.length - 1].route.lazy !== void 0,\n `Matched leaf route at location \"${location.pathname}${location.search}${location.hash}\" does not have an element or Component. This means it will render an <Outlet /> with a null value by default resulting in an \"empty\" page.`\n );\n }\n let renderedMatches = _renderMatches(\n matches && matches.map(\n (match) => Object.assign({}, match, {\n params: Object.assign({}, parentParams, match.params),\n pathname: joinPaths([\n parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator2.encodeLocation ? navigator2.encodeLocation(match.pathname).pathname : match.pathname\n ]),\n pathnameBase: match.pathnameBase === \"/\" ? parentPathnameBase : joinPaths([\n parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator2.encodeLocation ? navigator2.encodeLocation(match.pathnameBase).pathname : match.pathnameBase\n ])\n })\n ),\n parentMatches,\n dataRouterState,\n future\n );\n if (locationArg && renderedMatches) {\n return /* @__PURE__ */ React2.createElement(\n LocationContext.Provider,\n {\n value: {\n location: {\n pathname: \"/\",\n search: \"\",\n hash: \"\",\n state: null,\n key: \"default\",\n ...location\n },\n navigationType: \"POP\" /* Pop */\n }\n },\n renderedMatches\n );\n }\n return renderedMatches;\n}\nfunction DefaultErrorComponent() {\n let error = useRouteError();\n let message = isRouteErrorResponse(error) ? `${error.status} ${error.statusText}` : error instanceof Error ? error.message : JSON.stringify(error);\n let stack = error instanceof Error ? error.stack : null;\n let lightgrey = \"rgba(200,200,200, 0.5)\";\n let preStyles = { padding: \"0.5rem\", backgroundColor: lightgrey };\n let codeStyles = { padding: \"2px 4px\", backgroundColor: lightgrey };\n let devInfo = null;\n if (ENABLE_DEV_WARNINGS) {\n console.error(\n \"Error handled by React Router default ErrorBoundary:\",\n error\n );\n devInfo = /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(\"p\", null, \"\\u{1F4BF} Hey developer \\u{1F44B}\"), /* @__PURE__ */ React2.createElement(\"p\", null, \"You can provide a way better UX than this when your app throws errors by providing your own \", /* @__PURE__ */ React2.createElement(\"code\", { style: codeStyles }, \"ErrorBoundary\"), \" or\", \" \", /* @__PURE__ */ React2.createElement(\"code\", { style: codeStyles }, \"errorElement\"), \" prop on your route.\"));\n }\n return /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(\"h2\", null, \"Unexpected Application Error!\"), /* @__PURE__ */ React2.createElement(\"h3\", { style: { fontStyle: \"italic\" } }, message), stack ? /* @__PURE__ */ React2.createElement(\"pre\", { style: preStyles }, stack) : null, devInfo);\n}\nvar defaultErrorElement = /* @__PURE__ */ React2.createElement(DefaultErrorComponent, null);\nvar RenderErrorBoundary = class extends React2.Component {\n constructor(props) {\n super(props);\n this.state = {\n location: props.location,\n revalidation: props.revalidation,\n error: props.error\n };\n }\n static getDerivedStateFromError(error) {\n return { error };\n }\n static getDerivedStateFromProps(props, state) {\n if (state.location !== props.location || state.revalidation !== \"idle\" && props.revalidation === \"idle\") {\n return {\n error: props.error,\n location: props.location,\n revalidation: props.revalidation\n };\n }\n return {\n error: props.error !== void 0 ? props.error : state.error,\n location: state.location,\n revalidation: props.revalidation || state.revalidation\n };\n }\n componentDidCatch(error, errorInfo) {\n console.error(\n \"React Router caught the following error during render\",\n error,\n errorInfo\n );\n }\n render() {\n return this.state.error !== void 0 ? /* @__PURE__ */ React2.createElement(RouteContext.Provider, { value: this.props.routeContext }, /* @__PURE__ */ React2.createElement(\n RouteErrorContext.Provider,\n {\n value: this.state.error,\n children: this.props.component\n }\n )) : this.props.children;\n }\n};\nfunction RenderedRoute({ routeContext, match, children }) {\n let dataRouterContext = React2.useContext(DataRouterContext);\n if (dataRouterContext && dataRouterContext.static && dataRouterContext.staticContext && (match.route.errorElement || match.route.ErrorBoundary)) {\n dataRouterContext.staticContext._deepestRenderedBoundaryId = match.route.id;\n }\n return /* @__PURE__ */ React2.createElement(RouteContext.Provider, { value: routeContext }, children);\n}\nfunction _renderMatches(matches, parentMatches = [], dataRouterState = null, future = null) {\n if (matches == null) {\n if (!dataRouterState) {\n return null;\n }\n if (dataRouterState.errors) {\n matches = dataRouterState.matches;\n } else if (parentMatches.length === 0 && !dataRouterState.initialized && dataRouterState.matches.length > 0) {\n matches = dataRouterState.matches;\n } else {\n return null;\n }\n }\n let renderedMatches = matches;\n let errors = dataRouterState?.errors;\n if (errors != null) {\n let errorIndex = renderedMatches.findIndex(\n (m) => m.route.id && errors?.[m.route.id] !== void 0\n );\n invariant(\n errorIndex >= 0,\n `Could not find a matching route for errors on route IDs: ${Object.keys(\n errors\n ).join(\",\")}`\n );\n renderedMatches = renderedMatches.slice(\n 0,\n Math.min(renderedMatches.length, errorIndex + 1)\n );\n }\n let renderFallback = false;\n let fallbackIndex = -1;\n if (dataRouterState) {\n for (let i = 0; i < renderedMatches.length; i++) {\n let match = renderedMatches[i];\n if (match.route.HydrateFallback || match.route.hydrateFallbackElement) {\n fallbackIndex = i;\n }\n if (match.route.id) {\n let { loaderData, errors: errors2 } = dataRouterState;\n let needsToRunLoader = match.route.loader && !loaderData.hasOwnProperty(match.route.id) && (!errors2 || errors2[match.route.id] === void 0);\n if (match.route.lazy || needsToRunLoader) {\n renderFallback = true;\n if (fallbackIndex >= 0) {\n renderedMatches = renderedMatches.slice(0, fallbackIndex + 1);\n } else {\n renderedMatches = [renderedMatches[0]];\n }\n break;\n }\n }\n }\n }\n return renderedMatches.reduceRight((outlet, match, index) => {\n let error;\n let shouldRenderHydrateFallback = false;\n let errorElement = null;\n let hydrateFallbackElement = null;\n if (dataRouterState) {\n error = errors && match.route.id ? errors[match.route.id] : void 0;\n errorElement = match.route.errorElement || defaultErrorElement;\n if (renderFallback) {\n if (fallbackIndex < 0 && index === 0) {\n warningOnce(\n \"route-fallback\",\n false,\n \"No `HydrateFallback` element provided to render during initial hydration\"\n );\n shouldRenderHydrateFallback = true;\n hydrateFallbackElement = null;\n } else if (fallbackIndex === index) {\n shouldRenderHydrateFallback = true;\n hydrateFallbackElement = match.route.hydrateFallbackElement || null;\n }\n }\n }\n let matches2 = parentMatches.concat(renderedMatches.slice(0, index + 1));\n let getChildren = () => {\n let children;\n if (error) {\n children = errorElement;\n } else if (shouldRenderHydrateFallback) {\n children = hydrateFallbackElement;\n } else if (match.route.Component) {\n children = /* @__PURE__ */ React2.createElement(match.route.Component, null);\n } else if (match.route.element) {\n children = match.route.element;\n } else {\n children = outlet;\n }\n return /* @__PURE__ */ React2.createElement(\n RenderedRoute,\n {\n match,\n routeContext: {\n outlet,\n matches: matches2,\n isDataRoute: dataRouterState != null\n },\n children\n }\n );\n };\n return dataRouterState && (match.route.ErrorBoundary || match.route.errorElement || index === 0) ? /* @__PURE__ */ React2.createElement(\n RenderErrorBoundary,\n {\n location: dataRouterState.location,\n revalidation: dataRouterState.revalidation,\n component: errorElement,\n error,\n children: getChildren(),\n routeContext: { outlet: null, matches: matches2, isDataRoute: true }\n }\n ) : getChildren();\n }, null);\n}\nfunction getDataRouterConsoleError(hookName) {\n return `${hookName} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`;\n}\nfunction useDataRouterContext(hookName) {\n let ctx = React2.useContext(DataRouterContext);\n invariant(ctx, getDataRouterConsoleError(hookName));\n return ctx;\n}\nfunction useDataRouterState(hookName) {\n let state = React2.useContext(DataRouterStateContext);\n invariant(state, getDataRouterConsoleError(hookName));\n return state;\n}\nfunction useRouteContext(hookName) {\n let route = React2.useContext(RouteContext);\n invariant(route, getDataRouterConsoleError(hookName));\n return route;\n}\nfunction useCurrentRouteId(hookName) {\n let route = useRouteContext(hookName);\n let thisRoute = route.matches[route.matches.length - 1];\n invariant(\n thisRoute.route.id,\n `${hookName} can only be used on routes that contain a unique \"id\"`\n );\n return thisRoute.route.id;\n}\nfunction useRouteId() {\n return useCurrentRouteId(\"useRouteId\" /* UseRouteId */);\n}\nfunction useNavigation() {\n let state = useDataRouterState(\"useNavigation\" /* UseNavigation */);\n return state.navigation;\n}\nfunction useRevalidator() {\n let dataRouterContext = useDataRouterContext(\"useRevalidator\" /* UseRevalidator */);\n let state = useDataRouterState(\"useRevalidator\" /* UseRevalidator */);\n return React2.useMemo(\n () => ({\n async revalidate() {\n await dataRouterContext.router.revalidate();\n },\n state: state.revalidation\n }),\n [dataRouterContext.router, state.revalidation]\n );\n}\nfunction useMatches() {\n let { matches, loaderData } = useDataRouterState(\n \"useMatches\" /* UseMatches */\n );\n return React2.useMemo(\n () => matches.map((m) => convertRouteMatchToUiMatch(m, loaderData)),\n [matches, loaderData]\n );\n}\nfunction useLoaderData() {\n let state = useDataRouterState(\"useLoaderData\" /* UseLoaderData */);\n let routeId = useCurrentRouteId(\"useLoaderData\" /* UseLoaderData */);\n return state.loaderData[routeId];\n}\nfunction useRouteLoaderData(routeId) {\n let state = useDataRouterState(\"useRouteLoaderData\" /* UseRouteLoaderData */);\n return state.loaderData[routeId];\n}\nfunction useActionData() {\n let state = useDataRouterState(\"useActionData\" /* UseActionData */);\n let routeId = useCurrentRouteId(\"useLoaderData\" /* UseLoaderData */);\n return state.actionData ? state.actionData[routeId] : void 0;\n}\nfunction useRouteError() {\n let error = React2.useContext(RouteErrorContext);\n let state = useDataRouterState(\"useRouteError\" /* UseRouteError */);\n let routeId = useCurrentRouteId(\"useRouteError\" /* UseRouteError */);\n if (error !== void 0) {\n return error;\n }\n return state.errors?.[routeId];\n}\nfunction useAsyncValue() {\n let value = React2.useContext(AwaitContext);\n return value?._data;\n}\nfunction useAsyncError() {\n let value = React2.useContext(AwaitContext);\n return value?._error;\n}\nvar blockerId = 0;\nfunction useBlocker(shouldBlock) {\n let { router, basename } = useDataRouterContext(\"useBlocker\" /* UseBlocker */);\n let state = useDataRouterState(\"useBlocker\" /* UseBlocker */);\n let [blockerKey, setBlockerKey] = React2.useState(\"\");\n let blockerFunction = React2.useCallback(\n (arg) => {\n if (typeof shouldBlock !== \"function\") {\n return !!shouldBlock;\n }\n if (basename === \"/\") {\n return shouldBlock(arg);\n }\n let { currentLocation, nextLocation, historyAction } = arg;\n return shouldBlock({\n currentLocation: {\n ...currentLocation,\n pathname: stripBasename(currentLocation.pathname, basename) || currentLocation.pathname\n },\n nextLocation: {\n ...nextLocation,\n pathname: stripBasename(nextLocation.pathname, basename) || nextLocation.pathname\n },\n historyAction\n });\n },\n [basename, shouldBlock]\n );\n React2.useEffect(() => {\n let key = String(++blockerId);\n setBlockerKey(key);\n return () => router.deleteBlocker(key);\n }, [router]);\n React2.useEffect(() => {\n if (blockerKey !== \"\") {\n router.getBlocker(blockerKey, blockerFunction);\n }\n }, [router, blockerKey, blockerFunction]);\n return blockerKey && state.blockers.has(blockerKey) ? state.blockers.get(blockerKey) : IDLE_BLOCKER;\n}\nfunction useNavigateStable() {\n let { router } = useDataRouterContext(\"useNavigate\" /* UseNavigateStable */);\n let id = useCurrentRouteId(\"useNavigate\" /* UseNavigateStable */);\n let activeRef = React2.useRef(false);\n useIsomorphicLayoutEffect(() => {\n activeRef.current = true;\n });\n let navigate = React2.useCallback(\n async (to, options = {}) => {\n warning(activeRef.current, navigateEffectWarning);\n if (!activeRef.current) return;\n if (typeof to === \"number\") {\n router.navigate(to);\n } else {\n await router.navigate(to, { fromRouteId: id, ...options });\n }\n },\n [router, id]\n );\n return navigate;\n}\nvar alreadyWarned = {};\nfunction warningOnce(key, cond, message) {\n if (!cond && !alreadyWarned[key]) {\n alreadyWarned[key] = true;\n warning(false, message);\n }\n}\n\n// lib/server-runtime/warnings.ts\nvar alreadyWarned2 = {};\nfunction warnOnce(condition, message) {\n if (!condition && !alreadyWarned2[message]) {\n alreadyWarned2[message] = true;\n console.warn(message);\n }\n}\n\n// lib/components.tsx\nvar ENABLE_DEV_WARNINGS2 = true;\nfunction mapRouteProperties(route) {\n let updates = {\n // Note: this check also occurs in createRoutesFromChildren so update\n // there if you change this -- please and thank you!\n hasErrorBoundary: route.hasErrorBoundary || route.ErrorBoundary != null || route.errorElement != null\n };\n if (route.Component) {\n if (ENABLE_DEV_WARNINGS2) {\n if (route.element) {\n warning(\n false,\n \"You should not include both `Component` and `element` on your route - `Component` will be used.\"\n );\n }\n }\n Object.assign(updates, {\n element: React3.createElement(route.Component),\n Component: void 0\n });\n }\n if (route.HydrateFallback) {\n if (ENABLE_DEV_WARNINGS2) {\n if (route.hydrateFallbackElement) {\n warning(\n false,\n \"You should not include both `HydrateFallback` and `hydrateFallbackElement` on your route - `HydrateFallback` will be used.\"\n );\n }\n }\n Object.assign(updates, {\n hydrateFallbackElement: React3.createElement(route.HydrateFallback),\n HydrateFallback: void 0\n });\n }\n if (route.ErrorBoundary) {\n if (ENABLE_DEV_WARNINGS2) {\n if (route.errorElement) {\n warning(\n false,\n \"You should not include both `ErrorBoundary` and `errorElement` on your route - `ErrorBoundary` will be used.\"\n );\n }\n }\n Object.assign(updates, {\n errorElement: React3.createElement(route.ErrorBoundary),\n ErrorBoundary: void 0\n });\n }\n return updates;\n}\nfunction createMemoryRouter(routes, opts) {\n return createRouter({\n basename: opts?.basename,\n unstable_getContext: opts?.unstable_getContext,\n future: opts?.future,\n history: createMemoryHistory({\n initialEntries: opts?.initialEntries,\n initialIndex: opts?.initialIndex\n }),\n hydrationData: opts?.hydrationData,\n routes,\n mapRouteProperties,\n dataStrategy: opts?.dataStrategy,\n patchRoutesOnNavigation: opts?.patchRoutesOnNavigation\n }).initialize();\n}\nvar Deferred = class {\n constructor() {\n this.status = \"pending\";\n this.promise = new Promise((resolve, reject) => {\n this.resolve = (value) => {\n if (this.status === \"pending\") {\n this.status = \"resolved\";\n resolve(value);\n }\n };\n this.reject = (reason) => {\n if (this.status === \"pending\") {\n this.status = \"rejected\";\n reject(reason);\n }\n };\n });\n }\n};\nfunction RouterProvider({\n router,\n flushSync: reactDomFlushSyncImpl\n}) {\n let [state, setStateImpl] = React3.useState(router.state);\n let [pendingState, setPendingState] = React3.useState();\n let [vtContext, setVtContext] = React3.useState({\n isTransitioning: false\n });\n let [renderDfd, setRenderDfd] = React3.useState();\n let [transition, setTransition] = React3.useState();\n let [interruption, setInterruption] = React3.useState();\n let fetcherData = React3.useRef(/* @__PURE__ */ new Map());\n let setState = React3.useCallback(\n (newState, { deletedFetchers, flushSync, viewTransitionOpts }) => {\n newState.fetchers.forEach((fetcher, key) => {\n if (fetcher.data !== void 0) {\n fetcherData.current.set(key, fetcher.data);\n }\n });\n deletedFetchers.forEach((key) => fetcherData.current.delete(key));\n warnOnce(\n flushSync === false || reactDomFlushSyncImpl != null,\n 'You provided the `flushSync` option to a router update, but you are not using the `<RouterProvider>` from `react-router/dom` so `ReactDOM.flushSync()` is unavailable. Please update your app to `import { RouterProvider } from \"react-router/dom\"` and ensure you have `react-dom` installed as a dependency to use the `flushSync` option.'\n );\n let isViewTransitionAvailable = router.window != null && router.window.document != null && typeof router.window.document.startViewTransition === \"function\";\n warnOnce(\n viewTransitionOpts == null || isViewTransitionAvailable,\n \"You provided the `viewTransition` option to a router update, but you do not appear to be running in a DOM environment as `window.startViewTransition` is not available.\"\n );\n if (!viewTransitionOpts || !isViewTransitionAvailable) {\n if (reactDomFlushSyncImpl && flushSync) {\n reactDomFlushSyncImpl(() => setStateImpl(newState));\n } else {\n React3.startTransition(() => setStateImpl(newState));\n }\n return;\n }\n if (reactDomFlushSyncImpl && flushSync) {\n reactDomFlushSyncImpl(() => {\n if (transition) {\n renderDfd && renderDfd.resolve();\n transition.skipTransition();\n }\n setVtContext({\n isTransitioning: true,\n flushSync: true,\n currentLocation: viewTransitionOpts.currentLocation,\n nextLocation: viewTransitionOpts.nextLocation\n });\n });\n let t = router.window.document.startViewTransition(() => {\n reactDomFlushSyncImpl(() => setStateImpl(newState));\n });\n t.finished.finally(() => {\n reactDomFlushSyncImpl(() => {\n setRenderDfd(void 0);\n setTransition(void 0);\n setPendingState(void 0);\n setVtContext({ isTransitioning: false });\n });\n });\n reactDomFlushSyncImpl(() => setTransition(t));\n return;\n }\n if (transition) {\n renderDfd && renderDfd.resolve();\n transition.skipTransition();\n setInterruption({\n state: newState,\n currentLocation: viewTransitionOpts.currentLocation,\n nextLocation: viewTransitionOpts.nextLocation\n });\n } else {\n setPendingState(newState);\n setVtContext({\n isTransitioning: true,\n flushSync: false,\n currentLocation: viewTransitionOpts.currentLocation,\n nextLocation: viewTransitionOpts.nextLocation\n });\n }\n },\n [router.window, reactDomFlushSyncImpl, transition, renderDfd]\n );\n React3.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n React3.useEffect(() => {\n if (vtContext.isTransitioning && !vtContext.flushSync) {\n setRenderDfd(new Deferred());\n }\n }, [vtContext]);\n React3.useEffect(() => {\n if (renderDfd && pendingState && router.window) {\n let newState = pendingState;\n let renderPromise = renderDfd.promise;\n let transition2 = router.window.document.startViewTransition(async () => {\n React3.startTransition(() => setStateImpl(newState));\n await renderPromise;\n });\n transition2.finished.finally(() => {\n setRenderDfd(void 0);\n setTransition(void 0);\n setPendingState(void 0);\n setVtContext({ isTransitioning: false });\n });\n setTransition(transition2);\n }\n }, [pendingState, renderDfd, router.window]);\n React3.useEffect(() => {\n if (renderDfd && pendingState && state.location.key === pendingState.location.key) {\n renderDfd.resolve();\n }\n }, [renderDfd, transition, state.location, pendingState]);\n React3.useEffect(() => {\n if (!vtContext.isTransitioning && interruption) {\n setPendingState(interruption.state);\n setVtContext({\n isTransitioning: true,\n flushSync: false,\n currentLocation: interruption.currentLocation,\n nextLocation: interruption.nextLocation\n });\n setInterruption(void 0);\n }\n }, [vtContext.isTransitioning, interruption]);\n let navigator2 = React3.useMemo(() => {\n return {\n createHref: router.createHref,\n encodeLocation: router.encodeLocation,\n go: (n) => router.navigate(n),\n push: (to, state2, opts) => router.navigate(to, {\n state: state2,\n preventScrollReset: opts?.preventScrollReset\n }),\n replace: (to, state2, opts) => router.navigate(to, {\n replace: true,\n state: state2,\n preventScrollReset: opts?.preventScrollReset\n })\n };\n }, [router]);\n let basename = router.basename || \"/\";\n let dataRouterContext = React3.useMemo(\n () => ({\n router,\n navigator: navigator2,\n static: false,\n basename\n }),\n [router, navigator2, basename]\n );\n return /* @__PURE__ */ React3.createElement(React3.Fragment, null, /* @__PURE__ */ React3.createElement(DataRouterContext.Provider, { value: dataRouterContext }, /* @__PURE__ */ React3.createElement(DataRouterStateContext.Provider, { value: state }, /* @__PURE__ */ React3.createElement(FetchersContext.Provider, { value: fetcherData.current }, /* @__PURE__ */ React3.createElement(ViewTransitionContext.Provider, { value: vtContext }, /* @__PURE__ */ React3.createElement(\n Router,\n {\n basename,\n location: state.location,\n navigationType: state.historyAction,\n navigator: navigator2\n },\n /* @__PURE__ */ React3.createElement(\n MemoizedDataRoutes,\n {\n routes: router.routes,\n future: router.future,\n state\n }\n )\n ))))), null);\n}\nvar MemoizedDataRoutes = React3.memo(DataRoutes);\nfunction DataRoutes({\n routes,\n future,\n state\n}) {\n return useRoutesImpl(routes, void 0, state, future);\n}\nfunction MemoryRouter({\n basename,\n children,\n initialEntries,\n initialIndex\n}) {\n let historyRef = React3.useRef();\n if (historyRef.current == null) {\n historyRef.current = createMemoryHistory({\n initialEntries,\n initialIndex,\n v5Compat: true\n });\n }\n let history = historyRef.current;\n let [state, setStateImpl] = React3.useState({\n action: history.action,\n location: history.location\n });\n let setState = React3.useCallback(\n (newState) => {\n React3.startTransition(() => setStateImpl(newState));\n },\n [setStateImpl]\n );\n React3.useLayoutEffect(() => history.listen(setState), [history, setState]);\n return /* @__PURE__ */ React3.createElement(\n Router,\n {\n basename,\n children,\n location: state.location,\n navigationType: state.action,\n navigator: history\n }\n );\n}\nfunction Navigate({\n to,\n replace: replace2,\n state,\n relative\n}) {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of\n // the router loaded. We can help them understand how to avoid that.\n `<Navigate> may be used only in the context of a <Router> component.`\n );\n let { static: isStatic } = React3.useContext(NavigationContext);\n warning(\n !isStatic,\n `<Navigate> must not be used on the initial render in a <StaticRouter>. This is a no-op, but you should modify your code so the <Navigate> is only ever rendered in response to some user interaction or state change.`\n );\n let { matches } = React3.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n let navigate = useNavigate();\n let path = resolveTo(\n to,\n getResolveToMatches(matches),\n locationPathname,\n relative === \"path\"\n );\n let jsonPath = JSON.stringify(path);\n React3.useEffect(() => {\n navigate(JSON.parse(jsonPath), { replace: replace2, state, relative });\n }, [navigate, jsonPath, relative, replace2, state]);\n return null;\n}\nfunction Outlet(props) {\n return useOutlet(props.context);\n}\nfunction Route(_props) {\n invariant(\n false,\n `A <Route> is only ever to be used as the child of <Routes> element, never rendered directly. Please wrap your <Route> in a <Routes>.`\n );\n}\nfunction Router({\n basename: basenameProp = \"/\",\n children = null,\n location: locationProp,\n navigationType = \"POP\" /* Pop */,\n navigator: navigator2,\n static: staticProp = false\n}) {\n invariant(\n !useInRouterContext(),\n `You cannot render a <Router> inside another <Router>. You should never have more than one in your app.`\n );\n let basename = basenameProp.replace(/^\\/*/, \"/\");\n let navigationContext = React3.useMemo(\n () => ({\n basename,\n navigator: navigator2,\n static: staticProp,\n future: {}\n }),\n [basename, navigator2, staticProp]\n );\n if (typeof locationProp === \"string\") {\n locationProp = parsePath(locationProp);\n }\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n state = null,\n key = \"default\"\n } = locationProp;\n let locationContext = React3.useMemo(() => {\n let trailingPathname = stripBasename(pathname, basename);\n if (trailingPathname == null) {\n return null;\n }\n return {\n location: {\n pathname: trailingPathname,\n search,\n hash,\n state,\n key\n },\n navigationType\n };\n }, [basename, pathname, search, hash, state, key, navigationType]);\n warning(\n locationContext != null,\n `<Router basename=\"${basename}\"> is not able to match the URL \"${pathname}${search}${hash}\" because it does not start with the basename, so the <Router> won't render anything.`\n );\n if (locationContext == null) {\n return null;\n }\n return /* @__PURE__ */ React3.createElement(NavigationContext.Provider, { value: navigationContext }, /* @__PURE__ */ React3.createElement(LocationContext.Provider, { children, value: locationContext }));\n}\nfunction Routes({\n children,\n location\n}) {\n return useRoutes(createRoutesFromChildren(children), location);\n}\nfunction Await({\n children,\n errorElement,\n resolve\n}) {\n return /* @__PURE__ */ React3.createElement(AwaitErrorBoundary, { resolve, errorElement }, /* @__PURE__ */ React3.createElement(ResolveAwait, null, children));\n}\nvar AwaitErrorBoundary = class extends React3.Component {\n constructor(props) {\n super(props);\n this.state = { error: null };\n }\n static getDerivedStateFromError(error) {\n return { error };\n }\n componentDidCatch(error, errorInfo) {\n console.error(\n \"<Await> caught the following error during render\",\n error,\n errorInfo\n );\n }\n render() {\n let { children, errorElement, resolve } = this.props;\n let promise = null;\n let status = 0 /* pending */;\n if (!(resolve instanceof Promise)) {\n status = 1 /* success */;\n promise = Promise.resolve();\n Object.defineProperty(promise, \"_tracked\", { get: () => true });\n Object.defineProperty(promise, \"_data\", { get: () => resolve });\n } else if (this.state.error) {\n status = 2 /* error */;\n let renderError = this.state.error;\n promise = Promise.reject().catch(() => {\n });\n Object.defineProperty(promise, \"_tracked\", { get: () => true });\n Object.defineProperty(promise, \"_error\", { get: () => renderError });\n } else if (resolve._tracked) {\n promise = resolve;\n status = \"_error\" in promise ? 2 /* error */ : \"_data\" in promise ? 1 /* success */ : 0 /* pending */;\n } else {\n status = 0 /* pending */;\n Object.defineProperty(resolve, \"_tracked\", { get: () => true });\n promise = resolve.then(\n (data2) => Object.defineProperty(resolve, \"_data\", { get: () => data2 }),\n (error) => Object.defineProperty(resolve, \"_error\", { get: () => error })\n );\n }\n if (status === 2 /* error */ && !errorElement) {\n throw promise._error;\n }\n if (status === 2 /* error */) {\n return /* @__PURE__ */ React3.createElement(AwaitContext.Provider, { value: promise, children: errorElement });\n }\n if (status === 1 /* success */) {\n return /* @__PURE__ */ React3.createElement(AwaitContext.Provider, { value: promise, children });\n }\n throw promise;\n }\n};\nfunction ResolveAwait({\n children\n}) {\n let data2 = useAsyncValue();\n let toRender = typeof children === \"function\" ? children(data2) : children;\n return /* @__PURE__ */ React3.createElement(React3.Fragment, null, toRender);\n}\nfunction createRoutesFromChildren(children, parentPath = []) {\n let routes = [];\n React3.Children.forEach(children, (element, index) => {\n if (!React3.isValidElement(element)) {\n return;\n }\n let treePath = [...parentPath, index];\n if (element.type === React3.Fragment) {\n routes.push.apply(\n routes,\n createRoutesFromChildren(element.props.children, treePath)\n );\n return;\n }\n invariant(\n element.type === Route,\n `[${typeof element.type === \"string\" ? element.type : element.type.name}] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>`\n );\n invariant(\n !element.props.index || !element.props.children,\n \"An index route cannot have child routes.\"\n );\n let route = {\n id: element.props.id || treePath.join(\"-\"),\n caseSensitive: element.props.caseSensitive,\n element: element.props.element,\n Component: element.props.Component,\n index: element.props.index,\n path: element.props.path,\n loader: element.props.loader,\n action: element.props.action,\n hydrateFallbackElement: element.props.hydrateFallbackElement,\n HydrateFallback: element.props.HydrateFallback,\n errorElement: element.props.errorElement,\n ErrorBoundary: element.props.ErrorBoundary,\n hasErrorBoundary: element.props.hasErrorBoundary === true || element.props.ErrorBoundary != null || element.props.errorElement != null,\n shouldRevalidate: element.props.shouldRevalidate,\n handle: element.props.handle,\n lazy: element.props.lazy\n };\n if (element.props.children) {\n route.children = createRoutesFromChildren(\n element.props.children,\n treePath\n );\n }\n routes.push(route);\n });\n return routes;\n}\nvar createRoutesFromElements = createRoutesFromChildren;\nfunction renderMatches(matches) {\n return _renderMatches(matches);\n}\n\n// lib/dom/lib.tsx\nimport * as React10 from \"react\";\n\n// lib/dom/dom.ts\nvar defaultMethod = \"get\";\nvar defaultEncType = \"application/x-www-form-urlencoded\";\nfunction isHtmlElement(object) {\n return object != null && typeof object.tagName === \"string\";\n}\nfunction isButtonElement(object) {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"button\";\n}\nfunction isFormElement(object) {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"form\";\n}\nfunction isInputElement(object) {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"input\";\n}\nfunction isModifiedEvent(event) {\n return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\nfunction shouldProcessLinkClick(event, target) {\n return event.button === 0 && // Ignore everything but left clicks\n (!target || target === \"_self\") && // Let browser handle \"target=_blank\" etc.\n !isModifiedEvent(event);\n}\nfunction createSearchParams(init = \"\") {\n return new URLSearchParams(\n typeof init === \"string\" || Array.isArray(init) || init instanceof URLSearchParams ? init : Object.keys(init).reduce((memo2, key) => {\n let value = init[key];\n return memo2.concat(\n Array.isArray(value) ? value.map((v) => [key, v]) : [[key, value]]\n );\n }, [])\n );\n}\nfunction getSearchParamsForLocation(locationSearch, defaultSearchParams) {\n let searchParams = createSearchParams(locationSearch);\n if (defaultSearchParams) {\n defaultSearchParams.forEach((_, key) => {\n if (!searchParams.has(key)) {\n defaultSearchParams.getAll(key).forEach((value) => {\n searchParams.append(key, value);\n });\n }\n });\n }\n return searchParams;\n}\nvar _formDataSupportsSubmitter = null;\nfunction isFormDataSubmitterSupported() {\n if (_formDataSupportsSubmitter === null) {\n try {\n new FormData(\n document.createElement(\"form\"),\n // @ts-expect-error if FormData supports the submitter parameter, this will throw\n 0\n );\n _formDataSupportsSubmitter = false;\n } catch (e) {\n _formDataSupportsSubmitter = true;\n }\n }\n return _formDataSupportsSubmitter;\n}\nvar supportedFormEncTypes = /* @__PURE__ */ new Set([\n \"application/x-www-form-urlencoded\",\n \"multipart/form-data\",\n \"text/plain\"\n]);\nfunction getFormEncType(encType) {\n if (encType != null && !supportedFormEncTypes.has(encType)) {\n warning(\n false,\n `\"${encType}\" is not a valid \\`encType\\` for \\`<Form>\\`/\\`<fetcher.Form>\\` and will default to \"${defaultEncType}\"`\n );\n return null;\n }\n return encType;\n}\nfunction getFormSubmissionInfo(target, basename) {\n let method;\n let action;\n let encType;\n let formData;\n let body;\n if (isFormElement(target)) {\n let attr = target.getAttribute(\"action\");\n action = attr ? stripBasename(attr, basename) : null;\n method = target.getAttribute(\"method\") || defaultMethod;\n encType = getFormEncType(target.getAttribute(\"enctype\")) || defaultEncType;\n formData = new FormData(target);\n } else if (isButtonElement(target) || isInputElement(target) && (target.type === \"submit\" || target.type === \"image\")) {\n let form = target.form;\n if (form == null) {\n throw new Error(\n `Cannot submit a <button> or <input type=\"submit\"> without a <form>`\n );\n }\n let attr = target.getAttribute(\"formaction\") || form.getAttribute(\"action\");\n action = attr ? stripBasename(attr, basename) : null;\n method = target.getAttribute(\"formmethod\") || form.getAttribute(\"method\") || defaultMethod;\n encType = getFormEncType(target.getAttribute(\"formenctype\")) || getFormEncType(form.getAttribute(\"enctype\")) || defaultEncType;\n formData = new FormData(form, target);\n if (!isFormDataSubmitterSupported()) {\n let { name, type, value } = target;\n if (type === \"image\") {\n let prefix = name ? `${name}.` : \"\";\n formData.append(`${prefix}x`, \"0\");\n formData.append(`${prefix}y`, \"0\");\n } else if (name) {\n formData.append(name, value);\n }\n }\n } else if (isHtmlElement(target)) {\n throw new Error(\n `Cannot submit element that is not <form>, <button>, or <input type=\"submit|image\">`\n );\n } else {\n method = defaultMethod;\n action = null;\n encType = defaultEncType;\n body = target;\n }\n if (formData && encType === \"text/plain\") {\n body = formData;\n formData = void 0;\n }\n return { action, method: method.toLowerCase(), encType, formData, body };\n}\n\n// lib/dom/ssr/components.tsx\nimport * as React9 from \"react\";\n\n// lib/dom/ssr/invariant.ts\nfunction invariant2(value, message) {\n if (value === false || value === null || typeof value === \"undefined\") {\n throw new Error(message);\n }\n}\n\n// lib/dom/ssr/routeModules.ts\nasync function loadRouteModule(route, routeModulesCache) {\n if (route.id in routeModulesCache) {\n return routeModulesCache[route.id];\n }\n try {\n let routeModule = await import(\n /* @vite-ignore */\n /* webpackIgnore: true */\n route.module\n );\n routeModulesCache[route.id] = routeModule;\n return routeModule;\n } catch (error) {\n console.error(\n `Error loading route module \\`${route.module}\\`, reloading page...`\n );\n console.error(error);\n if (window.__reactRouterContext && window.__reactRouterContext.isSpaMode && // @ts-expect-error\n import.meta.hot) {\n throw error;\n }\n window.location.reload();\n return new Promise(() => {\n });\n }\n}\n\n// lib/dom/ssr/links.ts\nfunction getKeyedLinksForMatches(matches, routeModules, manifest) {\n let descriptors = matches.map((match) => {\n let module = routeModules[match.route.id];\n let route = manifest.routes[match.route.id];\n return [\n route && route.css ? route.css.map((href2) => ({ rel: \"stylesheet\", href: href2 })) : [],\n module?.links?.() || []\n ];\n }).flat(2);\n let preloads = getModuleLinkHrefs(matches, manifest);\n return dedupeLinkDescriptors(descriptors, preloads);\n}\nfunction getRouteCssDescriptors(route) {\n if (!route.css) return [];\n return route.css.map((href2) => ({ rel: \"stylesheet\", href: href2 }));\n}\nasync function prefetchRouteCss(route) {\n if (!route.css) return;\n let descriptors = getRouteCssDescriptors(route);\n await Promise.all(descriptors.map(prefetchStyleLink));\n}\nasync function prefetchStyleLinks(route, routeModule) {\n if (!route.css && !routeModule.links || !isPreloadSupported()) return;\n let descriptors = [];\n if (route.css) {\n descriptors.push(...getRouteCssDescriptors(route));\n }\n if (routeModule.links) {\n descriptors.push(...routeModule.links());\n }\n if (descriptors.length === 0) return;\n let styleLinks = [];\n for (let descriptor of descriptors) {\n if (!isPageLinkDescriptor(descriptor) && descriptor.rel === \"stylesheet\") {\n styleLinks.push({\n ...descriptor,\n rel: \"preload\",\n as: \"style\"\n });\n }\n }\n await Promise.all(styleLinks.map(prefetchStyleLink));\n}\nasync function prefetchStyleLink(descriptor) {\n return new Promise((resolve) => {\n if (descriptor.media && !window.matchMedia(descriptor.media).matches || document.querySelector(\n `link[rel=\"stylesheet\"][href=\"${descriptor.href}\"]`\n )) {\n return resolve();\n }\n let link = document.createElement(\"link\");\n Object.assign(link, descriptor);\n function removeLink() {\n if (document.head.contains(link)) {\n document.head.removeChild(link);\n }\n }\n link.onload = () => {\n removeLink();\n resolve();\n };\n link.onerror = () => {\n removeLink();\n resolve();\n };\n document.head.appendChild(link);\n });\n}\nfunction isPageLinkDescriptor(object) {\n return object != null && typeof object.page === \"string\";\n}\nfunction isHtmlLinkDescriptor(object) {\n if (object == null) {\n return false;\n }\n if (object.href == null) {\n return object.rel === \"preload\" && typeof object.imageSrcSet === \"string\" && typeof object.imageSizes === \"string\";\n }\n return typeof object.rel === \"string\" && typeof object.href === \"string\";\n}\nasync function getKeyedPrefetchLinks(matches, manifest, routeModules) {\n let links = await Promise.all(\n matches.map(async (match) => {\n let route = manifest.routes[match.route.id];\n if (route) {\n let mod = await loadRouteModule(route, routeModules);\n return mod.links ? mod.links() : [];\n }\n return [];\n })\n );\n return dedupeLinkDescriptors(\n links.flat(1).filter(isHtmlLinkDescriptor).filter((link) => link.rel === \"stylesheet\" || link.rel === \"preload\").map(\n (link) => link.rel === \"stylesheet\" ? { ...link, rel: \"prefetch\", as: \"style\" } : { ...link, rel: \"prefetch\" }\n )\n );\n}\nfunction getNewMatchesForLinks(page, nextMatches, currentMatches, manifest, location, mode) {\n let isNew = (match, index) => {\n if (!currentMatches[index]) return true;\n return match.route.id !== currentMatches[index].route.id;\n };\n let matchPathChanged = (match, index) => {\n return (\n // param change, /users/123 -> /users/456\n currentMatches[index].pathname !== match.pathname || // splat param changed, which is not present in match.path\n // e.g. /files/images/avatar.jpg -> files/finances.xls\n currentMatches[index].route.path?.endsWith(\"*\") && currentMatches[index].params[\"*\"] !== match.params[\"*\"]\n );\n };\n if (mode === \"assets\") {\n return nextMatches.filter(\n (match, index) => isNew(match, index) || matchPathChanged(match, index)\n );\n }\n if (mode === \"data\") {\n return nextMatches.filter((match, index) => {\n let manifestRoute = manifest.routes[match.route.id];\n if (!manifestRoute || !manifestRoute.hasLoader) {\n return false;\n }\n if (isNew(match, index) || matchPathChanged(match, index)) {\n return true;\n }\n if (match.route.shouldRevalidate) {\n let routeChoice = match.route.shouldRevalidate({\n currentUrl: new URL(\n location.pathname + location.search + location.hash,\n window.origin\n ),\n currentParams: currentMatches[0]?.params || {},\n nextUrl: new URL(page, window.origin),\n nextParams: match.params,\n defaultShouldRevalidate: true\n });\n if (typeof routeChoice === \"boolean\") {\n return routeChoice;\n }\n }\n return true;\n });\n }\n return [];\n}\nfunction getModuleLinkHrefs(matches, manifest, { includeHydrateFallback } = {}) {\n return dedupeHrefs(\n matches.map((match) => {\n let route = manifest.routes[match.route.id];\n if (!route) return [];\n let hrefs = [route.module];\n if (route.clientActionModule) {\n hrefs = hrefs.concat(route.clientActionModule);\n }\n if (route.clientLoaderModule) {\n hrefs = hrefs.concat(route.clientLoaderModule);\n }\n if (includeHydrateFallback && route.hydrateFallbackModule) {\n hrefs = hrefs.concat(route.hydrateFallbackModule);\n }\n if (route.imports) {\n hrefs = hrefs.concat(route.imports);\n }\n return hrefs;\n }).flat(1)\n );\n}\nfunction dedupeHrefs(hrefs) {\n return [...new Set(hrefs)];\n}\nfunction sortKeys(obj) {\n let sorted = {};\n let keys = Object.keys(obj).sort();\n for (let key of keys) {\n sorted[key] = obj[key];\n }\n return sorted;\n}\nfunction dedupeLinkDescriptors(descriptors, preloads) {\n let set = /* @__PURE__ */ new Set();\n let preloadsSet = new Set(preloads);\n return descriptors.reduce((deduped, descriptor) => {\n let alreadyModulePreload = preloads && !isPageLinkDescriptor(descriptor) && descriptor.as === \"script\" && descriptor.href && preloadsSet.has(descriptor.href);\n if (alreadyModulePreload) {\n return deduped;\n }\n let key = JSON.stringify(sortKeys(descriptor));\n if (!set.has(key)) {\n set.add(key);\n deduped.push({ key, link: descriptor });\n }\n return deduped;\n }, []);\n}\nvar _isPreloadSupported;\nfunction isPreloadSupported() {\n if (_isPreloadSupported !== void 0) {\n return _isPreloadSupported;\n }\n let el = document.createElement(\"link\");\n _isPreloadSupported = el.relList.supports(\"preload\");\n el = null;\n return _isPreloadSupported;\n}\n\n// lib/dom/ssr/markup.ts\nvar ESCAPE_LOOKUP = {\n \"&\": \"\\\\u0026\",\n \">\": \"\\\\u003e\",\n \"<\": \"\\\\u003c\",\n \"\\u2028\": \"\\\\u2028\",\n \"\\u2029\": \"\\\\u2029\"\n};\nvar ESCAPE_REGEX = /[&><\\u2028\\u2029]/g;\nfunction escapeHtml(html) {\n return html.replace(ESCAPE_REGEX, (match) => ESCAPE_LOOKUP[match]);\n}\nfunction createHtml(html) {\n return { __html: html };\n}\n\n// lib/dom/ssr/single-fetch.tsx\nimport * as React4 from \"react\";\nimport { decode } from \"turbo-stream\";\n\n// lib/dom/ssr/data.ts\nasync function createRequestInit(request) {\n let init = { signal: request.signal };\n if (request.method !== \"GET\") {\n init.method = request.method;\n let contentType = request.headers.get(\"Content-Type\");\n if (contentType && /\\bapplication\\/json\\b/.test(contentType)) {\n init.headers = { \"Content-Type\": contentType };\n init.body = JSON.stringify(await request.json());\n } else if (contentType && /\\btext\\/plain\\b/.test(contentType)) {\n init.headers = { \"Content-Type\": contentType };\n init.body = await request.text();\n } else if (contentType && /\\bapplication\\/x-www-form-urlencoded\\b/.test(contentType)) {\n init.body = new URLSearchParams(await request.text());\n } else {\n init.body = await request.formData();\n }\n }\n return init;\n}\n\n// lib/dom/ssr/single-fetch.tsx\nvar SingleFetchRedirectSymbol = Symbol(\"SingleFetchRedirect\");\nfunction StreamTransfer({\n context,\n identifier,\n reader,\n textDecoder,\n nonce\n}) {\n if (!context.renderMeta || !context.renderMeta.didRenderScripts) {\n return null;\n }\n if (!context.renderMeta.streamCache) {\n context.renderMeta.streamCache = {};\n }\n let { streamCache } = context.renderMeta;\n let promise = streamCache[identifier];\n if (!promise) {\n promise = streamCache[identifier] = reader.read().then((result) => {\n streamCache[identifier].result = {\n done: result.done,\n value: textDecoder.decode(result.value, { stream: true })\n };\n }).catch((e) => {\n streamCache[identifier].error = e;\n });\n }\n if (promise.error) {\n throw promise.error;\n }\n if (promise.result === void 0) {\n throw promise;\n }\n let { done, value } = promise.result;\n let scriptTag = value ? /* @__PURE__ */ React4.createElement(\n \"script\",\n {\n nonce,\n dangerouslySetInnerHTML: {\n __html: `window.__reactRouterContext.streamController.enqueue(${escapeHtml(\n JSON.stringify(value)\n )});`\n }\n }\n ) : null;\n if (done) {\n return /* @__PURE__ */ React4.createElement(React4.Fragment, null, scriptTag, /* @__PURE__ */ React4.createElement(\n \"script\",\n {\n nonce,\n dangerouslySetInnerHTML: {\n __html: `window.__reactRouterContext.streamController.close();`\n }\n }\n ));\n } else {\n return /* @__PURE__ */ React4.createElement(React4.Fragment, null, scriptTag, /* @__PURE__ */ React4.createElement(React4.Suspense, null, /* @__PURE__ */ React4.createElement(\n StreamTransfer,\n {\n context,\n identifier: identifier + 1,\n reader,\n textDecoder,\n nonce\n }\n )));\n }\n}\nfunction handleMiddlewareError(error, routeId) {\n return { [routeId]: { type: \"error\", result: error } };\n}\nfunction getSingleFetchDataStrategy(manifest, routeModules, ssr, basename, getRouter) {\n return async (args) => {\n let { request, matches, fetcherKey } = args;\n if (request.method !== \"GET\") {\n return runMiddlewarePipeline(\n args,\n false,\n () => singleFetchActionStrategy(request, matches, basename),\n handleMiddlewareError\n );\n }\n if (!ssr) {\n let foundRevalidatingServerLoader = matches.some(\n (m) => m.shouldLoad && manifest.routes[m.route.id]?.hasLoader && !manifest.routes[m.route.id]?.hasClientLoader\n );\n if (!foundRevalidatingServerLoader) {\n return runMiddlewarePipeline(\n args,\n false,\n () => nonSsrStrategy(manifest, request, matches, basename),\n handleMiddlewareError\n );\n }\n }\n if (fetcherKey) {\n return runMiddlewarePipeline(\n args,\n false,\n () => singleFetchLoaderFetcherStrategy(request, matches, basename),\n handleMiddlewareError\n );\n }\n return runMiddlewarePipeline(\n args,\n false,\n () => singleFetchLoaderNavigationStrategy(\n manifest,\n routeModules,\n ssr,\n getRouter(),\n request,\n matches,\n basename\n ),\n handleMiddlewareError\n );\n };\n}\nasync function singleFetchActionStrategy(request, matches, basename) {\n let actionMatch = matches.find((m) => m.shouldLoad);\n invariant2(actionMatch, \"No action match found\");\n let actionStatus = void 0;\n let result = await actionMatch.resolve(async (handler) => {\n let result2 = await handler(async () => {\n let url = singleFetchUrl(request.url, basename);\n let init = await createRequestInit(request);\n let { data: data2, status } = await fetchAndDecode(url, init);\n actionStatus = status;\n return unwrapSingleFetchResult(\n data2,\n actionMatch.route.id\n );\n });\n return result2;\n });\n if (isResponse(result.result) || isRouteErrorResponse(result.result)) {\n return { [actionMatch.route.id]: result };\n }\n return {\n [actionMatch.route.id]: {\n type: result.type,\n result: data(result.result, actionStatus)\n }\n };\n}\nasync function nonSsrStrategy(manifest, request, matches, basename) {\n let matchesToLoad = matches.filter((m) => m.shouldLoad);\n let url = stripIndexParam(singleFetchUrl(request.url, basename));\n let init = await createRequestInit(request);\n let results = {};\n await Promise.all(\n matchesToLoad.map(\n (m) => m.resolve(async (handler) => {\n try {\n let result = manifest.routes[m.route.id]?.hasClientLoader ? await fetchSingleLoader(handler, url, init, m.route.id) : await handler();\n results[m.route.id] = { type: \"data\", result };\n } catch (e) {\n results[m.route.id] = { type: \"error\", result: e };\n }\n })\n )\n );\n return results;\n}\nasync function singleFetchLoaderNavigationStrategy(manifest, routeModules, ssr, router, request, matches, basename) {\n let routesParams = /* @__PURE__ */ new Set();\n let foundOptOutRoute = false;\n let routeDfds = matches.map(() => createDeferred2());\n let routesLoadedPromise = Promise.all(routeDfds.map((d) => d.promise));\n let singleFetchDfd = createDeferred2();\n let url = stripIndexParam(singleFetchUrl(request.url, basename));\n let init = await createRequestInit(request);\n let results = {};\n let resolvePromise = Promise.all(\n matches.map(\n async (m, i) => m.resolve(async (handler) => {\n routeDfds[i].resolve();\n let manifestRoute = manifest.routes[m.route.id];\n if (!m.shouldLoad) {\n if (!router.state.initialized) {\n return;\n }\n if (m.route.id in router.state.loaderData && manifestRoute && m.route.shouldRevalidate) {\n if (manifestRoute.hasLoader) {\n foundOptOutRoute = true;\n }\n return;\n }\n }\n if (manifestRoute && manifestRoute.hasClientLoader) {\n if (manifestRoute.hasLoader) {\n foundOptOutRoute = true;\n }\n try {\n let result = await fetchSingleLoader(\n handler,\n url,\n init,\n m.route.id\n );\n results[m.route.id] = { type: \"data\", result };\n } catch (e) {\n results[m.route.id] = { type: \"error\", result: e };\n }\n return;\n }\n if (manifestRoute && manifestRoute.hasLoader) {\n routesParams.add(m.route.id);\n }\n try {\n let result = await handler(async () => {\n let data2 = await singleFetchDfd.promise;\n return unwrapSingleFetchResults(data2, m.route.id);\n });\n results[m.route.id] = {\n type: \"data\",\n result\n };\n } catch (e) {\n results[m.route.id] = {\n type: \"error\",\n result: e\n };\n }\n })\n )\n );\n await routesLoadedPromise;\n if ((!router.state.initialized || routesParams.size === 0) && !window.__reactRouterHdrActive) {\n singleFetchDfd.resolve({});\n } else {\n try {\n if (ssr && foundOptOutRoute && routesParams.size > 0) {\n url.searchParams.set(\n \"_routes\",\n matches.filter((m) => routesParams.has(m.route.id)).map((m) => m.route.id).join(\",\")\n );\n }\n let data2 = await fetchAndDecode(url, init);\n singleFetchDfd.resolve(data2.data);\n } catch (e) {\n singleFetchDfd.reject(e);\n }\n }\n await resolvePromise;\n return results;\n}\nasync function singleFetchLoaderFetcherStrategy(request, matches, basename) {\n let fetcherMatch = matches.find((m) => m.shouldLoad);\n invariant2(fetcherMatch, \"No fetcher match found\");\n let result = await fetcherMatch.resolve(async (handler) => {\n let url = stripIndexParam(singleFetchUrl(request.url, basename));\n let init = await createRequestInit(request);\n return fetchSingleLoader(handler, url, init, fetcherMatch.route.id);\n });\n return { [fetcherMatch.route.id]: result };\n}\nfunction fetchSingleLoader(handler, url, init, routeId) {\n return handler(async () => {\n let singleLoaderUrl = new URL(url);\n singleLoaderUrl.searchParams.set(\"_routes\", routeId);\n let { data: data2 } = await fetchAndDecode(singleLoaderUrl, init);\n return unwrapSingleFetchResults(data2, routeId);\n });\n}\nfunction stripIndexParam(url) {\n let indexValues = url.searchParams.getAll(\"index\");\n url.searchParams.delete(\"index\");\n let indexValuesToKeep = [];\n for (let indexValue of indexValues) {\n if (indexValue) {\n indexValuesToKeep.push(indexValue);\n }\n }\n for (let toKeep of indexValuesToKeep) {\n url.searchParams.append(\"index\", toKeep);\n }\n return url;\n}\nfunction singleFetchUrl(reqUrl, basename) {\n let url = typeof reqUrl === \"string\" ? new URL(\n reqUrl,\n // This can be called during the SSR flow via PrefetchPageLinksImpl so\n // don't assume window is available\n typeof window === \"undefined\" ? \"server://singlefetch/\" : window.location.origin\n ) : reqUrl;\n if (url.pathname === \"/\") {\n url.pathname = \"_root.data\";\n } else if (basename && stripBasename(url.pathname, basename) === \"/\") {\n url.pathname = `${basename.replace(/\\/$/, \"\")}/_root.data`;\n } else {\n url.pathname = `${url.pathname.replace(/\\/$/, \"\")}.data`;\n }\n return url;\n}\nasync function fetchAndDecode(url, init) {\n let res = await fetch(url, init);\n if (res.status === 404 && !res.headers.has(\"X-Remix-Response\")) {\n throw new ErrorResponseImpl(404, \"Not Found\", true);\n }\n const NO_BODY_STATUS_CODES2 = /* @__PURE__ */ new Set([100, 101, 204, 205]);\n if (NO_BODY_STATUS_CODES2.has(res.status)) {\n if (!init.method || init.method === \"GET\") {\n return { status: res.status, data: {} };\n } else {\n return { status: res.status, data: { data: void 0 } };\n }\n }\n invariant2(res.body, \"No response body to decode\");\n try {\n let decoded = await decodeViaTurboStream(res.body, window);\n return { status: res.status, data: decoded.value };\n } catch (e) {\n throw new Error(\"Unable to decode turbo-stream response\");\n }\n}\nfunction decodeViaTurboStream(body, global2) {\n return decode(body, {\n plugins: [\n (type, ...rest) => {\n if (type === \"SanitizedError\") {\n let [name, message, stack] = rest;\n let Constructor = Error;\n if (name && name in global2 && typeof global2[name] === \"function\") {\n Constructor = global2[name];\n }\n let error = new Constructor(message);\n error.stack = stack;\n return { value: error };\n }\n if (type === \"ErrorResponse\") {\n let [data2, status, statusText] = rest;\n return {\n value: new ErrorResponseImpl(status, statusText, data2)\n };\n }\n if (type === \"SingleFetchRedirect\") {\n return { value: { [SingleFetchRedirectSymbol]: rest[0] } };\n }\n if (type === \"SingleFetchClassInstance\") {\n return { value: rest[0] };\n }\n if (type === \"SingleFetchFallback\") {\n return { value: void 0 };\n }\n }\n ]\n });\n}\nfunction unwrapSingleFetchResults(results, routeId) {\n let redirect2 = results[SingleFetchRedirectSymbol];\n if (redirect2) {\n return unwrapSingleFetchResult(redirect2, routeId);\n }\n return results[routeId] !== void 0 ? unwrapSingleFetchResult(results[routeId], routeId) : null;\n}\nfunction unwrapSingleFetchResult(result, routeId) {\n if (\"error\" in result) {\n throw result.error;\n } else if (\"redirect\" in result) {\n let headers = {};\n if (result.revalidate) {\n headers[\"X-Remix-Revalidate\"] = \"yes\";\n }\n if (result.reload) {\n headers[\"X-Remix-Reload-Document\"] = \"yes\";\n }\n if (result.replace) {\n headers[\"X-Remix-Replace\"] = \"yes\";\n }\n throw redirect(result.redirect, { status: result.status, headers });\n } else if (\"data\" in result) {\n return result.data;\n } else {\n throw new Error(`No response found for routeId \"${routeId}\"`);\n }\n}\nfunction createDeferred2() {\n let resolve;\n let reject;\n let promise = new Promise((res, rej) => {\n resolve = async (val) => {\n res(val);\n try {\n await promise;\n } catch (e) {\n }\n };\n reject = async (error) => {\n rej(error);\n try {\n await promise;\n } catch (e) {\n }\n };\n });\n return {\n promise,\n //@ts-ignore\n resolve,\n //@ts-ignore\n reject\n };\n}\n\n// lib/dom/ssr/fog-of-war.ts\nimport * as React8 from \"react\";\n\n// lib/dom/ssr/routes.tsx\nimport * as React7 from \"react\";\n\n// lib/dom/ssr/errorBoundaries.tsx\nimport * as React5 from \"react\";\nvar RemixErrorBoundary = class extends React5.Component {\n constructor(props) {\n super(props);\n this.state = { error: props.error || null, location: props.location };\n }\n static getDerivedStateFromError(error) {\n return { error };\n }\n static getDerivedStateFromProps(props, state) {\n if (state.location !== props.location) {\n return { error: props.error || null, location: props.location };\n }\n return { error: props.error || state.error, location: state.location };\n }\n render() {\n if (this.state.error) {\n return /* @__PURE__ */ React5.createElement(\n RemixRootDefaultErrorBoundary,\n {\n error: this.state.error,\n isOutsideRemixApp: true\n }\n );\n } else {\n return this.props.children;\n }\n }\n};\nfunction RemixRootDefaultErrorBoundary({\n error,\n isOutsideRemixApp\n}) {\n console.error(error);\n let heyDeveloper = /* @__PURE__ */ React5.createElement(\n \"script\",\n {\n dangerouslySetInnerHTML: {\n __html: `\n console.log(\n \"\\u{1F4BF} Hey developer \\u{1F44B}. You can provide a way better UX than this when your app throws errors. Check out https://remix.run/guides/errors for more information.\"\n );\n `\n }\n }\n );\n if (isRouteErrorResponse(error)) {\n return /* @__PURE__ */ React5.createElement(BoundaryShell, { title: \"Unhandled Thrown Response!\" }, /* @__PURE__ */ React5.createElement(\"h1\", { style: { fontSize: \"24px\" } }, error.status, \" \", error.statusText), heyDeveloper);\n }\n let errorInstance;\n if (error instanceof Error) {\n errorInstance = error;\n } else {\n let errorString = error == null ? \"Unknown Error\" : typeof error === \"object\" && \"toString\" in error ? error.toString() : JSON.stringify(error);\n errorInstance = new Error(errorString);\n }\n return /* @__PURE__ */ React5.createElement(\n BoundaryShell,\n {\n title: \"Application Error!\",\n isOutsideRemixApp\n },\n /* @__PURE__ */ React5.createElement(\"h1\", { style: { fontSize: \"24px\" } }, \"Application Error\"),\n /* @__PURE__ */ React5.createElement(\n \"pre\",\n {\n style: {\n padding: \"2rem\",\n background: \"hsla(10, 50%, 50%, 0.1)\",\n color: \"red\",\n overflow: \"auto\"\n }\n },\n errorInstance.stack\n ),\n heyDeveloper\n );\n}\nfunction BoundaryShell({\n title,\n renderScripts,\n isOutsideRemixApp,\n children\n}) {\n let { routeModules } = useFrameworkContext();\n if (routeModules.root?.Layout && !isOutsideRemixApp) {\n return children;\n }\n return /* @__PURE__ */ React5.createElement(\"html\", { lang: \"en\" }, /* @__PURE__ */ React5.createElement(\"head\", null, /* @__PURE__ */ React5.createElement(\"meta\", { charSet: \"utf-8\" }), /* @__PURE__ */ React5.createElement(\n \"meta\",\n {\n name: \"viewport\",\n content: \"width=device-width,initial-scale=1,viewport-fit=cover\"\n }\n ), /* @__PURE__ */ React5.createElement(\"title\", null, title)), /* @__PURE__ */ React5.createElement(\"body\", null, /* @__PURE__ */ React5.createElement(\"main\", { style: { fontFamily: \"system-ui, sans-serif\", padding: \"2rem\" } }, children, renderScripts ? /* @__PURE__ */ React5.createElement(Scripts, null) : null)));\n}\n\n// lib/dom/ssr/fallback.tsx\nimport * as React6 from \"react\";\nfunction RemixRootDefaultHydrateFallback() {\n return /* @__PURE__ */ React6.createElement(BoundaryShell, { title: \"Loading...\", renderScripts: true }, /* @__PURE__ */ React6.createElement(\n \"script\",\n {\n dangerouslySetInnerHTML: {\n __html: `\n console.log(\n \"\\u{1F4BF} Hey developer \\u{1F44B}. You can provide a way better UX than this \" +\n \"when your app is loading JS modules and/or running \\`clientLoader\\` \" +\n \"functions. Check out https://remix.run/route/hydrate-fallback \" +\n \"for more information.\"\n );\n `\n }\n }\n ));\n}\n\n// lib/dom/ssr/routes.tsx\nfunction groupRoutesByParentId(manifest) {\n let routes = {};\n Object.values(manifest).forEach((route) => {\n if (route) {\n let parentId = route.parentId || \"\";\n if (!routes[parentId]) {\n routes[parentId] = [];\n }\n routes[parentId].push(route);\n }\n });\n return routes;\n}\nfunction getRouteComponents(route, routeModule, isSpaMode) {\n let Component4 = getRouteModuleComponent(routeModule);\n let HydrateFallback = routeModule.HydrateFallback && (!isSpaMode || route.id === \"root\") ? routeModule.HydrateFallback : route.id === \"root\" ? RemixRootDefaultHydrateFallback : void 0;\n let ErrorBoundary = routeModule.ErrorBoundary ? routeModule.ErrorBoundary : route.id === \"root\" ? () => /* @__PURE__ */ React7.createElement(RemixRootDefaultErrorBoundary, { error: useRouteError() }) : void 0;\n if (route.id === \"root\" && routeModule.Layout) {\n return {\n ...Component4 ? {\n element: /* @__PURE__ */ React7.createElement(routeModule.Layout, null, /* @__PURE__ */ React7.createElement(Component4, null))\n } : { Component: Component4 },\n ...ErrorBoundary ? {\n errorElement: /* @__PURE__ */ React7.createElement(routeModule.Layout, null, /* @__PURE__ */ React7.createElement(ErrorBoundary, null))\n } : { ErrorBoundary },\n ...HydrateFallback ? {\n hydrateFallbackElement: /* @__PURE__ */ React7.createElement(routeModule.Layout, null, /* @__PURE__ */ React7.createElement(HydrateFallback, null))\n } : { HydrateFallback }\n };\n }\n return { Component: Component4, ErrorBoundary, HydrateFallback };\n}\nfunction createServerRoutes(manifest, routeModules, future, isSpaMode, parentId = \"\", routesByParentId = groupRoutesByParentId(manifest), spaModeLazyPromise = Promise.resolve({ Component: () => null })) {\n return (routesByParentId[parentId] || []).map((route) => {\n let routeModule = routeModules[route.id];\n invariant2(\n routeModule,\n \"No `routeModule` available to create server routes\"\n );\n let dataRoute = {\n ...getRouteComponents(route, routeModule, isSpaMode),\n caseSensitive: route.caseSensitive,\n id: route.id,\n index: route.index,\n path: route.path,\n handle: routeModule.handle,\n // For SPA Mode, all routes are lazy except root. However we tell the\n // router root is also lazy here too since we don't need a full\n // implementation - we just need a `lazy` prop to tell the RR rendering\n // where to stop which is always at the root route in SPA mode\n lazy: isSpaMode ? () => spaModeLazyPromise : void 0,\n // For partial hydration rendering, we need to indicate when the route\n // has a loader/clientLoader, but it won't ever be called during the static\n // render, so just give it a no-op function so we can render down to the\n // proper fallback\n loader: route.hasLoader || route.hasClientLoader ? () => null : void 0\n // We don't need middleware/action/shouldRevalidate on these routes since\n // they're for a static render\n };\n let children = createServerRoutes(\n manifest,\n routeModules,\n future,\n isSpaMode,\n route.id,\n routesByParentId,\n spaModeLazyPromise\n );\n if (children.length > 0) dataRoute.children = children;\n return dataRoute;\n });\n}\nfunction createClientRoutesWithHMRRevalidationOptOut(needsRevalidation, manifest, routeModulesCache, initialState, ssr, isSpaMode) {\n return createClientRoutes(\n manifest,\n routeModulesCache,\n initialState,\n ssr,\n isSpaMode,\n \"\",\n groupRoutesByParentId(manifest),\n needsRevalidation\n );\n}\nfunction preventInvalidServerHandlerCall(type, route) {\n if (type === \"loader\" && !route.hasLoader || type === \"action\" && !route.hasAction) {\n let fn = type === \"action\" ? \"serverAction()\" : \"serverLoader()\";\n let msg = `You are trying to call ${fn} on a route that does not have a server ${type} (routeId: \"${route.id}\")`;\n console.error(msg);\n throw new ErrorResponseImpl(400, \"Bad Request\", new Error(msg), true);\n }\n}\nfunction noActionDefinedError(type, routeId) {\n let article = type === \"clientAction\" ? \"a\" : \"an\";\n let msg = `Route \"${routeId}\" does not have ${article} ${type}, but you are trying to submit to it. To fix this, please add ${article} \\`${type}\\` function to the route`;\n console.error(msg);\n throw new ErrorResponseImpl(405, \"Method Not Allowed\", new Error(msg), true);\n}\nfunction createClientRoutes(manifest, routeModulesCache, initialState, ssr, isSpaMode, parentId = \"\", routesByParentId = groupRoutesByParentId(manifest), needsRevalidation) {\n return (routesByParentId[parentId] || []).map((route) => {\n let routeModule = routeModulesCache[route.id];\n function fetchServerHandler(singleFetch) {\n invariant2(\n typeof singleFetch === \"function\",\n \"No single fetch function available for route handler\"\n );\n return singleFetch();\n }\n function fetchServerLoader(singleFetch) {\n if (!route.hasLoader) return Promise.resolve(null);\n return fetchServerHandler(singleFetch);\n }\n function fetchServerAction(singleFetch) {\n if (!route.hasAction) {\n throw noActionDefinedError(\"action\", route.id);\n }\n return fetchServerHandler(singleFetch);\n }\n function prefetchModule(modulePath) {\n import(\n /* @vite-ignore */\n /* webpackIgnore: true */\n modulePath\n );\n }\n function prefetchRouteModuleChunks(route2) {\n if (route2.clientActionModule) {\n prefetchModule(route2.clientActionModule);\n }\n if (route2.clientLoaderModule) {\n prefetchModule(route2.clientLoaderModule);\n }\n }\n async function prefetchStylesAndCallHandler(handler) {\n let cachedModule = routeModulesCache[route.id];\n let linkPrefetchPromise = cachedModule ? prefetchStyleLinks(route, cachedModule) : Promise.resolve();\n try {\n return handler();\n } finally {\n await linkPrefetchPromise;\n }\n }\n let dataRoute = {\n id: route.id,\n index: route.index,\n path: route.path\n };\n if (routeModule) {\n Object.assign(dataRoute, {\n ...dataRoute,\n ...getRouteComponents(route, routeModule, isSpaMode),\n unstable_middleware: routeModule.unstable_clientMiddleware,\n handle: routeModule.handle,\n shouldRevalidate: getShouldRevalidateFunction(\n routeModule,\n route,\n ssr,\n needsRevalidation\n )\n });\n let hasInitialData = initialState && initialState.loaderData && route.id in initialState.loaderData;\n let initialData = hasInitialData ? initialState?.loaderData?.[route.id] : void 0;\n let hasInitialError = initialState && initialState.errors && route.id in initialState.errors;\n let initialError = hasInitialError ? initialState?.errors?.[route.id] : void 0;\n let isHydrationRequest = needsRevalidation == null && (routeModule.clientLoader?.hydrate === true || !route.hasLoader);\n dataRoute.loader = async ({ request, params, context }, singleFetch) => {\n try {\n let result = await prefetchStylesAndCallHandler(async () => {\n invariant2(\n routeModule,\n \"No `routeModule` available for critical-route loader\"\n );\n if (!routeModule.clientLoader) {\n return fetchServerLoader(singleFetch);\n }\n return routeModule.clientLoader({\n request,\n params,\n context,\n async serverLoader() {\n preventInvalidServerHandlerCall(\"loader\", route);\n if (isHydrationRequest) {\n if (hasInitialData) {\n return initialData;\n }\n if (hasInitialError) {\n throw initialError;\n }\n }\n return fetchServerLoader(singleFetch);\n }\n });\n });\n return result;\n } finally {\n isHydrationRequest = false;\n }\n };\n dataRoute.loader.hydrate = shouldHydrateRouteLoader(\n route,\n routeModule,\n isSpaMode\n );\n dataRoute.action = ({ request, params, context }, singleFetch) => {\n return prefetchStylesAndCallHandler(async () => {\n invariant2(\n routeModule,\n \"No `routeModule` available for critical-route action\"\n );\n if (!routeModule.clientAction) {\n if (isSpaMode) {\n throw noActionDefinedError(\"clientAction\", route.id);\n }\n return fetchServerAction(singleFetch);\n }\n return routeModule.clientAction({\n request,\n params,\n context,\n async serverAction() {\n preventInvalidServerHandlerCall(\"action\", route);\n return fetchServerAction(singleFetch);\n }\n });\n });\n };\n } else {\n if (!route.hasClientLoader) {\n dataRoute.loader = (_, singleFetch) => prefetchStylesAndCallHandler(() => {\n return fetchServerLoader(singleFetch);\n });\n } else if (route.clientLoaderModule) {\n dataRoute.loader = async (args, singleFetch) => {\n invariant2(route.clientLoaderModule);\n let { clientLoader } = await import(\n /* @vite-ignore */\n /* webpackIgnore: true */\n route.clientLoaderModule\n );\n return clientLoader({\n ...args,\n async serverLoader() {\n preventInvalidServerHandlerCall(\"loader\", route);\n return fetchServerLoader(singleFetch);\n }\n });\n };\n }\n if (!route.hasClientAction) {\n dataRoute.action = (_, singleFetch) => prefetchStylesAndCallHandler(() => {\n if (isSpaMode) {\n throw noActionDefinedError(\"clientAction\", route.id);\n }\n return fetchServerAction(singleFetch);\n });\n } else if (route.clientActionModule) {\n dataRoute.action = async (args, singleFetch) => {\n invariant2(route.clientActionModule);\n prefetchRouteModuleChunks(route);\n let { clientAction } = await import(\n /* @vite-ignore */\n /* webpackIgnore: true */\n route.clientActionModule\n );\n return clientAction({\n ...args,\n async serverAction() {\n preventInvalidServerHandlerCall(\"action\", route);\n return fetchServerAction(singleFetch);\n }\n });\n };\n }\n if (route.hasClientMiddleware) {\n dataRoute.unstable_lazyMiddleware = async () => {\n invariant2(route);\n let clientMiddlewareModule = await import(\n /* @vite-ignore */\n /* webpackIgnore: true */\n route.clientMiddlewareModule || route.module\n );\n invariant2(\n clientMiddlewareModule?.unstable_clientMiddleware,\n \"No `unstable_clientMiddleware` export in chunk\"\n );\n return clientMiddlewareModule.unstable_clientMiddleware;\n };\n }\n dataRoute.lazy = async () => {\n if (route.clientLoaderModule || route.clientActionModule) {\n await new Promise((resolve) => setTimeout(resolve, 0));\n }\n let modPromise = loadRouteModuleWithBlockingLinks(\n route,\n routeModulesCache\n );\n prefetchRouteModuleChunks(route);\n let mod = await modPromise;\n let lazyRoute = { ...mod };\n if (mod.clientLoader) {\n let clientLoader = mod.clientLoader;\n lazyRoute.loader = (args, singleFetch) => clientLoader({\n ...args,\n async serverLoader() {\n preventInvalidServerHandlerCall(\"loader\", route);\n return fetchServerLoader(singleFetch);\n }\n });\n }\n if (mod.clientAction) {\n let clientAction = mod.clientAction;\n lazyRoute.action = (args, singleFetch) => clientAction({\n ...args,\n async serverAction() {\n preventInvalidServerHandlerCall(\"action\", route);\n return fetchServerAction(singleFetch);\n }\n });\n }\n return {\n ...lazyRoute.loader ? { loader: lazyRoute.loader } : {},\n ...lazyRoute.action ? { action: lazyRoute.action } : {},\n hasErrorBoundary: lazyRoute.hasErrorBoundary,\n shouldRevalidate: getShouldRevalidateFunction(\n lazyRoute,\n route,\n ssr,\n needsRevalidation\n ),\n handle: lazyRoute.handle,\n // No need to wrap these in layout since the root route is never\n // loaded via route.lazy()\n Component: lazyRoute.Component,\n ErrorBoundary: lazyRoute.ErrorBoundary\n };\n };\n }\n let children = createClientRoutes(\n manifest,\n routeModulesCache,\n initialState,\n ssr,\n isSpaMode,\n route.id,\n routesByParentId,\n needsRevalidation\n );\n if (children.length > 0) dataRoute.children = children;\n return dataRoute;\n });\n}\nfunction getShouldRevalidateFunction(route, manifestRoute, ssr, needsRevalidation) {\n if (needsRevalidation) {\n return wrapShouldRevalidateForHdr(\n manifestRoute.id,\n route.shouldRevalidate,\n needsRevalidation\n );\n }\n if (!ssr && manifestRoute.hasLoader && !manifestRoute.hasClientLoader) {\n if (route.shouldRevalidate) {\n let fn = route.shouldRevalidate;\n return (opts) => fn({ ...opts, defaultShouldRevalidate: false });\n } else {\n return () => false;\n }\n }\n if (ssr && route.shouldRevalidate) {\n let fn = route.shouldRevalidate;\n return (opts) => fn({ ...opts, defaultShouldRevalidate: true });\n }\n return route.shouldRevalidate;\n}\nfunction wrapShouldRevalidateForHdr(routeId, routeShouldRevalidate, needsRevalidation) {\n let handledRevalidation = false;\n return (arg) => {\n if (!handledRevalidation) {\n handledRevalidation = true;\n return needsRevalidation.has(routeId);\n }\n return routeShouldRevalidate ? routeShouldRevalidate(arg) : arg.defaultShouldRevalidate;\n };\n}\nasync function loadRouteModuleWithBlockingLinks(route, routeModules) {\n let routeModulePromise = loadRouteModule(route, routeModules);\n let prefetchRouteCssPromise = prefetchRouteCss(route);\n let routeModule = await routeModulePromise;\n await Promise.all([\n prefetchRouteCssPromise,\n prefetchStyleLinks(route, routeModule)\n ]);\n return {\n Component: getRouteModuleComponent(routeModule),\n ErrorBoundary: routeModule.ErrorBoundary,\n unstable_clientMiddleware: routeModule.unstable_clientMiddleware,\n clientAction: routeModule.clientAction,\n clientLoader: routeModule.clientLoader,\n handle: routeModule.handle,\n links: routeModule.links,\n meta: routeModule.meta,\n shouldRevalidate: routeModule.shouldRevalidate\n };\n}\nfunction getRouteModuleComponent(routeModule) {\n if (routeModule.default == null) return void 0;\n let isEmptyObject = typeof routeModule.default === \"object\" && Object.keys(routeModule.default).length === 0;\n if (!isEmptyObject) {\n return routeModule.default;\n }\n}\nfunction shouldHydrateRouteLoader(route, routeModule, isSpaMode) {\n return isSpaMode && route.id !== \"root\" || routeModule.clientLoader != null && (routeModule.clientLoader.hydrate === true || route.hasLoader !== true);\n}\n\n// lib/dom/ssr/fog-of-war.ts\nvar nextPaths = /* @__PURE__ */ new Set();\nvar discoveredPathsMaxSize = 1e3;\nvar discoveredPaths = /* @__PURE__ */ new Set();\nvar URL_LIMIT = 7680;\nfunction isFogOfWarEnabled(ssr) {\n return ssr === true;\n}\nfunction getPartialManifest(manifest, router) {\n let routeIds = new Set(router.state.matches.map((m) => m.route.id));\n let segments = router.state.location.pathname.split(\"/\").filter(Boolean);\n let paths = [\"/\"];\n segments.pop();\n while (segments.length > 0) {\n paths.push(`/${segments.join(\"/\")}`);\n segments.pop();\n }\n paths.forEach((path) => {\n let matches = matchRoutes(router.routes, path, router.basename);\n if (matches) {\n matches.forEach((m) => routeIds.add(m.route.id));\n }\n });\n let initialRoutes = [...routeIds].reduce(\n (acc, id) => Object.assign(acc, { [id]: manifest.routes[id] }),\n {}\n );\n return {\n ...manifest,\n routes: initialRoutes\n };\n}\nfunction getPatchRoutesOnNavigationFunction(manifest, routeModules, ssr, isSpaMode, basename) {\n if (!isFogOfWarEnabled(ssr)) {\n return void 0;\n }\n return async ({ path, patch, signal, fetcherKey }) => {\n if (discoveredPaths.has(path)) {\n return;\n }\n await fetchAndApplyManifestPatches(\n [path],\n fetcherKey ? window.location.href : path,\n manifest,\n routeModules,\n ssr,\n isSpaMode,\n basename,\n patch,\n signal\n );\n };\n}\nfunction useFogOFWarDiscovery(router, manifest, routeModules, ssr, isSpaMode) {\n React8.useEffect(() => {\n if (!isFogOfWarEnabled(ssr) || navigator.connection?.saveData === true) {\n return;\n }\n function registerElement(el) {\n let path = el.tagName === \"FORM\" ? el.getAttribute(\"action\") : el.getAttribute(\"href\");\n if (!path) {\n return;\n }\n let pathname = el.tagName === \"A\" ? el.pathname : new URL(path, window.location.origin).pathname;\n if (!discoveredPaths.has(pathname)) {\n nextPaths.add(pathname);\n }\n }\n async function fetchPatches() {\n document.querySelectorAll(\"a[data-discover], form[data-discover]\").forEach(registerElement);\n let lazyPaths = Array.from(nextPaths.keys()).filter((path) => {\n if (discoveredPaths.has(path)) {\n nextPaths.delete(path);\n return false;\n }\n return true;\n });\n if (lazyPaths.length === 0) {\n return;\n }\n try {\n await fetchAndApplyManifestPatches(\n lazyPaths,\n null,\n manifest,\n routeModules,\n ssr,\n isSpaMode,\n router.basename,\n router.patchRoutes\n );\n } catch (e) {\n console.error(\"Failed to fetch manifest patches\", e);\n }\n }\n let debouncedFetchPatches = debounce(fetchPatches, 100);\n fetchPatches();\n let observer = new MutationObserver(() => debouncedFetchPatches());\n observer.observe(document.documentElement, {\n subtree: true,\n childList: true,\n attributes: true,\n attributeFilter: [\"data-discover\", \"href\", \"action\"]\n });\n return () => observer.disconnect();\n }, [ssr, isSpaMode, manifest, routeModules, router]);\n}\nvar MANIFEST_VERSION_STORAGE_KEY = \"react-router-manifest-version\";\nasync function fetchAndApplyManifestPatches(paths, errorReloadPath, manifest, routeModules, ssr, isSpaMode, basename, patchRoutes, signal) {\n let manifestPath = `${basename != null ? basename : \"/\"}/__manifest`.replace(\n /\\/+/g,\n \"/\"\n );\n let url = new URL(manifestPath, window.location.origin);\n paths.sort().forEach((path) => url.searchParams.append(\"p\", path));\n url.searchParams.set(\"version\", manifest.version);\n if (url.toString().length > URL_LIMIT) {\n nextPaths.clear();\n return;\n }\n let serverPatches;\n try {\n let res = await fetch(url, { signal });\n if (!res.ok) {\n throw new Error(`${res.status} ${res.statusText}`);\n } else if (res.status === 204 && res.headers.has(\"X-Remix-Reload-Document\")) {\n if (!errorReloadPath) {\n console.warn(\n \"Detected a manifest version mismatch during eager route discovery. The next navigation/fetch to an undiscovered route will result in a new document navigation to sync up with the latest manifest.\"\n );\n return;\n }\n if (sessionStorage.getItem(MANIFEST_VERSION_STORAGE_KEY) === manifest.version) {\n console.error(\n \"Unable to discover routes due to manifest version mismatch.\"\n );\n return;\n }\n sessionStorage.setItem(MANIFEST_VERSION_STORAGE_KEY, manifest.version);\n window.location.href = errorReloadPath;\n throw new Error(\"Detected manifest version mismatch, reloading...\");\n } else if (res.status >= 400) {\n throw new Error(await res.text());\n }\n sessionStorage.removeItem(MANIFEST_VERSION_STORAGE_KEY);\n serverPatches = await res.json();\n } catch (e) {\n if (signal?.aborted) return;\n throw e;\n }\n let knownRoutes = new Set(Object.keys(manifest.routes));\n let patches = Object.values(serverPatches).reduce((acc, route) => {\n if (route && !knownRoutes.has(route.id)) {\n acc[route.id] = route;\n }\n return acc;\n }, {});\n Object.assign(manifest.routes, patches);\n paths.forEach((p) => addToFifoQueue(p, discoveredPaths));\n let parentIds = /* @__PURE__ */ new Set();\n Object.values(patches).forEach((patch) => {\n if (patch && (!patch.parentId || !patches[patch.parentId])) {\n parentIds.add(patch.parentId);\n }\n });\n parentIds.forEach(\n (parentId) => patchRoutes(\n parentId || null,\n createClientRoutes(patches, routeModules, null, ssr, isSpaMode, parentId)\n )\n );\n}\nfunction addToFifoQueue(path, queue) {\n if (queue.size >= discoveredPathsMaxSize) {\n let first = queue.values().next().value;\n queue.delete(first);\n }\n queue.add(path);\n}\nfunction debounce(callback, wait) {\n let timeoutId;\n return (...args) => {\n window.clearTimeout(timeoutId);\n timeoutId = window.setTimeout(() => callback(...args), wait);\n };\n}\n\n// lib/dom/ssr/components.tsx\nfunction useDataRouterContext2() {\n let context = React9.useContext(DataRouterContext);\n invariant2(\n context,\n \"You must render this element inside a <DataRouterContext.Provider> element\"\n );\n return context;\n}\nfunction useDataRouterStateContext() {\n let context = React9.useContext(DataRouterStateContext);\n invariant2(\n context,\n \"You must render this element inside a <DataRouterStateContext.Provider> element\"\n );\n return context;\n}\nvar FrameworkContext = React9.createContext(void 0);\nFrameworkContext.displayName = \"FrameworkContext\";\nfunction useFrameworkContext() {\n let context = React9.useContext(FrameworkContext);\n invariant2(\n context,\n \"You must render this element inside a <HydratedRouter> element\"\n );\n return context;\n}\nfunction usePrefetchBehavior(prefetch, theirElementProps) {\n let frameworkContext = React9.useContext(FrameworkContext);\n let [maybePrefetch, setMaybePrefetch] = React9.useState(false);\n let [shouldPrefetch, setShouldPrefetch] = React9.useState(false);\n let { onFocus, onBlur, onMouseEnter, onMouseLeave, onTouchStart } = theirElementProps;\n let ref = React9.useRef(null);\n React9.useEffect(() => {\n if (prefetch === \"render\") {\n setShouldPrefetch(true);\n }\n if (prefetch === \"viewport\") {\n let callback = (entries) => {\n entries.forEach((entry) => {\n setShouldPrefetch(entry.isIntersecting);\n });\n };\n let observer = new IntersectionObserver(callback, { threshold: 0.5 });\n if (ref.current) observer.observe(ref.current);\n return () => {\n observer.disconnect();\n };\n }\n }, [prefetch]);\n React9.useEffect(() => {\n if (maybePrefetch) {\n let id = setTimeout(() => {\n setShouldPrefetch(true);\n }, 100);\n return () => {\n clearTimeout(id);\n };\n }\n }, [maybePrefetch]);\n let setIntent = () => {\n setMaybePrefetch(true);\n };\n let cancelIntent = () => {\n setMaybePrefetch(false);\n setShouldPrefetch(false);\n };\n if (!frameworkContext) {\n return [false, ref, {}];\n }\n if (prefetch !== \"intent\") {\n return [shouldPrefetch, ref, {}];\n }\n return [\n shouldPrefetch,\n ref,\n {\n onFocus: composeEventHandlers(onFocus, setIntent),\n onBlur: composeEventHandlers(onBlur, cancelIntent),\n onMouseEnter: composeEventHandlers(onMouseEnter, setIntent),\n onMouseLeave: composeEventHandlers(onMouseLeave, cancelIntent),\n onTouchStart: composeEventHandlers(onTouchStart, setIntent)\n }\n ];\n}\nfunction composeEventHandlers(theirHandler, ourHandler) {\n return (event) => {\n theirHandler && theirHandler(event);\n if (!event.defaultPrevented) {\n ourHandler(event);\n }\n };\n}\nfunction getActiveMatches(matches, errors, isSpaMode) {\n if (isSpaMode && !isHydrated) {\n return [matches[0]];\n }\n if (errors) {\n let errorIdx = matches.findIndex((m) => errors[m.route.id] !== void 0);\n return matches.slice(0, errorIdx + 1);\n }\n return matches;\n}\nfunction Links() {\n let { isSpaMode, manifest, routeModules, criticalCss } = useFrameworkContext();\n let { errors, matches: routerMatches } = useDataRouterStateContext();\n let matches = getActiveMatches(routerMatches, errors, isSpaMode);\n let keyedLinks = React9.useMemo(\n () => getKeyedLinksForMatches(matches, routeModules, manifest),\n [matches, routeModules, manifest]\n );\n return /* @__PURE__ */ React9.createElement(React9.Fragment, null, typeof criticalCss === \"string\" ? /* @__PURE__ */ React9.createElement(\"style\", { dangerouslySetInnerHTML: { __html: criticalCss } }) : null, typeof criticalCss === \"object\" ? /* @__PURE__ */ React9.createElement(\"link\", { rel: \"stylesheet\", href: criticalCss.href }) : null, keyedLinks.map(\n ({ key, link }) => isPageLinkDescriptor(link) ? /* @__PURE__ */ React9.createElement(PrefetchPageLinks, { key, ...link }) : /* @__PURE__ */ React9.createElement(\"link\", { key, ...link })\n ));\n}\nfunction PrefetchPageLinks({\n page,\n ...dataLinkProps\n}) {\n let { router } = useDataRouterContext2();\n let matches = React9.useMemo(\n () => matchRoutes(router.routes, page, router.basename),\n [router.routes, page, router.basename]\n );\n if (!matches) {\n return null;\n }\n return /* @__PURE__ */ React9.createElement(PrefetchPageLinksImpl, { page, matches, ...dataLinkProps });\n}\nfunction useKeyedPrefetchLinks(matches) {\n let { manifest, routeModules } = useFrameworkContext();\n let [keyedPrefetchLinks, setKeyedPrefetchLinks] = React9.useState([]);\n React9.useEffect(() => {\n let interrupted = false;\n void getKeyedPrefetchLinks(matches, manifest, routeModules).then(\n (links) => {\n if (!interrupted) {\n setKeyedPrefetchLinks(links);\n }\n }\n );\n return () => {\n interrupted = true;\n };\n }, [matches, manifest, routeModules]);\n return keyedPrefetchLinks;\n}\nfunction PrefetchPageLinksImpl({\n page,\n matches: nextMatches,\n ...linkProps\n}) {\n let location = useLocation();\n let { manifest, routeModules } = useFrameworkContext();\n let { basename } = useDataRouterContext2();\n let { loaderData, matches } = useDataRouterStateContext();\n let newMatchesForData = React9.useMemo(\n () => getNewMatchesForLinks(\n page,\n nextMatches,\n matches,\n manifest,\n location,\n \"data\"\n ),\n [page, nextMatches, matches, manifest, location]\n );\n let newMatchesForAssets = React9.useMemo(\n () => getNewMatchesForLinks(\n page,\n nextMatches,\n matches,\n manifest,\n location,\n \"assets\"\n ),\n [page, nextMatches, matches, manifest, location]\n );\n let dataHrefs = React9.useMemo(() => {\n if (page === location.pathname + location.search + location.hash) {\n return [];\n }\n let routesParams = /* @__PURE__ */ new Set();\n let foundOptOutRoute = false;\n nextMatches.forEach((m) => {\n let manifestRoute = manifest.routes[m.route.id];\n if (!manifestRoute || !manifestRoute.hasLoader) {\n return;\n }\n if (!newMatchesForData.some((m2) => m2.route.id === m.route.id) && m.route.id in loaderData && routeModules[m.route.id]?.shouldRevalidate) {\n foundOptOutRoute = true;\n } else if (manifestRoute.hasClientLoader) {\n foundOptOutRoute = true;\n } else {\n routesParams.add(m.route.id);\n }\n });\n if (routesParams.size === 0) {\n return [];\n }\n let url = singleFetchUrl(page, basename);\n if (foundOptOutRoute && routesParams.size > 0) {\n url.searchParams.set(\n \"_routes\",\n nextMatches.filter((m) => routesParams.has(m.route.id)).map((m) => m.route.id).join(\",\")\n );\n }\n return [url.pathname + url.search];\n }, [\n basename,\n loaderData,\n location,\n manifest,\n newMatchesForData,\n nextMatches,\n page,\n routeModules\n ]);\n let moduleHrefs = React9.useMemo(\n () => getModuleLinkHrefs(newMatchesForAssets, manifest),\n [newMatchesForAssets, manifest]\n );\n let keyedPrefetchLinks = useKeyedPrefetchLinks(newMatchesForAssets);\n return /* @__PURE__ */ React9.createElement(React9.Fragment, null, dataHrefs.map((href2) => /* @__PURE__ */ React9.createElement(\"link\", { key: href2, rel: \"prefetch\", as: \"fetch\", href: href2, ...linkProps })), moduleHrefs.map((href2) => /* @__PURE__ */ React9.createElement(\"link\", { key: href2, rel: \"modulepreload\", href: href2, ...linkProps })), keyedPrefetchLinks.map(({ key, link }) => (\n // these don't spread `linkProps` because they are full link descriptors\n // already with their own props\n /* @__PURE__ */ React9.createElement(\"link\", { key, ...link })\n )));\n}\nfunction Meta() {\n let { isSpaMode, routeModules } = useFrameworkContext();\n let {\n errors,\n matches: routerMatches,\n loaderData\n } = useDataRouterStateContext();\n let location = useLocation();\n let _matches = getActiveMatches(routerMatches, errors, isSpaMode);\n let error = null;\n if (errors) {\n error = errors[_matches[_matches.length - 1].route.id];\n }\n let meta = [];\n let leafMeta = null;\n let matches = [];\n for (let i = 0; i < _matches.length; i++) {\n let _match = _matches[i];\n let routeId = _match.route.id;\n let data2 = loaderData[routeId];\n let params = _match.params;\n let routeModule = routeModules[routeId];\n let routeMeta = [];\n let match = {\n id: routeId,\n data: data2,\n meta: [],\n params: _match.params,\n pathname: _match.pathname,\n handle: _match.route.handle,\n error\n };\n matches[i] = match;\n if (routeModule?.meta) {\n routeMeta = typeof routeModule.meta === \"function\" ? routeModule.meta({\n data: data2,\n params,\n location,\n matches,\n error\n }) : Array.isArray(routeModule.meta) ? [...routeModule.meta] : routeModule.meta;\n } else if (leafMeta) {\n routeMeta = [...leafMeta];\n }\n routeMeta = routeMeta || [];\n if (!Array.isArray(routeMeta)) {\n throw new Error(\n \"The route at \" + _match.route.path + \" returns an invalid value. All route meta functions must return an array of meta objects.\\n\\nTo reference the meta function API, see https://remix.run/route/meta\"\n );\n }\n match.meta = routeMeta;\n matches[i] = match;\n meta = [...routeMeta];\n leafMeta = meta;\n }\n return /* @__PURE__ */ React9.createElement(React9.Fragment, null, meta.flat().map((metaProps) => {\n if (!metaProps) {\n return null;\n }\n if (\"tagName\" in metaProps) {\n let { tagName, ...rest } = metaProps;\n if (!isValidMetaTag(tagName)) {\n console.warn(\n `A meta object uses an invalid tagName: ${tagName}. Expected either 'link' or 'meta'`\n );\n return null;\n }\n let Comp = tagName;\n return /* @__PURE__ */ React9.createElement(Comp, { key: JSON.stringify(rest), ...rest });\n }\n if (\"title\" in metaProps) {\n return /* @__PURE__ */ React9.createElement(\"title\", { key: \"title\" }, String(metaProps.title));\n }\n if (\"charset\" in metaProps) {\n metaProps.charSet ?? (metaProps.charSet = metaProps.charset);\n delete metaProps.charset;\n }\n if (\"charSet\" in metaProps && metaProps.charSet != null) {\n return typeof metaProps.charSet === \"string\" ? /* @__PURE__ */ React9.createElement(\"meta\", { key: \"charSet\", charSet: metaProps.charSet }) : null;\n }\n if (\"script:ld+json\" in metaProps) {\n try {\n let json = JSON.stringify(metaProps[\"script:ld+json\"]);\n return /* @__PURE__ */ React9.createElement(\n \"script\",\n {\n key: `script:ld+json:${json}`,\n type: \"application/ld+json\",\n dangerouslySetInnerHTML: { __html: json }\n }\n );\n } catch (err) {\n return null;\n }\n }\n return /* @__PURE__ */ React9.createElement(\"meta\", { key: JSON.stringify(metaProps), ...metaProps });\n }));\n}\nfunction isValidMetaTag(tagName) {\n return typeof tagName === \"string\" && /^(meta|link)$/.test(tagName);\n}\nvar isHydrated = false;\nfunction Scripts(props) {\n let { manifest, serverHandoffString, isSpaMode, ssr, renderMeta } = useFrameworkContext();\n let { router, static: isStatic, staticContext } = useDataRouterContext2();\n let { matches: routerMatches } = useDataRouterStateContext();\n let enableFogOfWar = isFogOfWarEnabled(ssr);\n if (renderMeta) {\n renderMeta.didRenderScripts = true;\n }\n let matches = getActiveMatches(routerMatches, null, isSpaMode);\n React9.useEffect(() => {\n isHydrated = true;\n }, []);\n let initialScripts = React9.useMemo(() => {\n let streamScript = \"window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamController = controller;}}).pipeThrough(new TextEncoderStream());\";\n let contextScript = staticContext ? `window.__reactRouterContext = ${serverHandoffString};${streamScript}` : \" \";\n let routeModulesScript = !isStatic ? \" \" : `${manifest.hmr?.runtime ? `import ${JSON.stringify(manifest.hmr.runtime)};` : \"\"}${!enableFogOfWar ? `import ${JSON.stringify(manifest.url)}` : \"\"};\n${matches.map((match, routeIndex) => {\n let routeVarName = `route${routeIndex}`;\n let manifestEntry = manifest.routes[match.route.id];\n invariant2(manifestEntry, `Route ${match.route.id} not found in manifest`);\n let {\n clientActionModule,\n clientLoaderModule,\n clientMiddlewareModule,\n hydrateFallbackModule,\n module\n } = manifestEntry;\n let chunks = [\n ...clientActionModule ? [\n {\n module: clientActionModule,\n varName: `${routeVarName}_clientAction`\n }\n ] : [],\n ...clientLoaderModule ? [\n {\n module: clientLoaderModule,\n varName: `${routeVarName}_clientLoader`\n }\n ] : [],\n ...clientMiddlewareModule ? [\n {\n module: clientMiddlewareModule,\n varName: `${routeVarName}_clientMiddleware`\n }\n ] : [],\n ...hydrateFallbackModule ? [\n {\n module: hydrateFallbackModule,\n varName: `${routeVarName}_HydrateFallback`\n }\n ] : [],\n { module, varName: `${routeVarName}_main` }\n ];\n if (chunks.length === 1) {\n return `import * as ${routeVarName} from ${JSON.stringify(module)};`;\n }\n let chunkImportsSnippet = chunks.map((chunk) => `import * as ${chunk.varName} from \"${chunk.module}\";`).join(\"\\n\");\n let mergedChunksSnippet = `const ${routeVarName} = {${chunks.map((chunk) => `...${chunk.varName}`).join(\",\")}};`;\n return [chunkImportsSnippet, mergedChunksSnippet].join(\"\\n\");\n }).join(\"\\n\")}\n ${enableFogOfWar ? (\n // Inline a minimal manifest with the SSR matches\n `window.__reactRouterManifest = ${JSON.stringify(\n getPartialManifest(manifest, router),\n null,\n 2\n )};`\n ) : \"\"}\n window.__reactRouterRouteModules = {${matches.map((match, index) => `${JSON.stringify(match.route.id)}:route${index}`).join(\",\")}};\n\nimport(${JSON.stringify(manifest.entry.module)});`;\n return /* @__PURE__ */ React9.createElement(React9.Fragment, null, /* @__PURE__ */ React9.createElement(\n \"script\",\n {\n ...props,\n suppressHydrationWarning: true,\n dangerouslySetInnerHTML: createHtml(contextScript),\n type: void 0\n }\n ), /* @__PURE__ */ React9.createElement(\n \"script\",\n {\n ...props,\n suppressHydrationWarning: true,\n dangerouslySetInnerHTML: createHtml(routeModulesScript),\n type: \"module\",\n async: true\n }\n ));\n }, []);\n let preloads = isHydrated ? [] : manifest.entry.imports.concat(\n getModuleLinkHrefs(matches, manifest, {\n includeHydrateFallback: true\n })\n );\n return isHydrated ? null : /* @__PURE__ */ React9.createElement(React9.Fragment, null, !enableFogOfWar ? /* @__PURE__ */ React9.createElement(\n \"link\",\n {\n rel: \"modulepreload\",\n href: manifest.url,\n crossOrigin: props.crossOrigin\n }\n ) : null, /* @__PURE__ */ React9.createElement(\n \"link\",\n {\n rel: \"modulepreload\",\n href: manifest.entry.module,\n crossOrigin: props.crossOrigin\n }\n ), dedupe(preloads).map((path) => /* @__PURE__ */ React9.createElement(\n \"link\",\n {\n key: path,\n rel: \"modulepreload\",\n href: path,\n crossOrigin: props.crossOrigin\n }\n )), initialScripts);\n}\nfunction dedupe(array) {\n return [...new Set(array)];\n}\nfunction mergeRefs(...refs) {\n return (value) => {\n refs.forEach((ref) => {\n if (typeof ref === \"function\") {\n ref(value);\n } else if (ref != null) {\n ref.current = value;\n }\n });\n };\n}\n\n// lib/dom/lib.tsx\nvar isBrowser = typeof window !== \"undefined\" && typeof window.document !== \"undefined\" && typeof window.document.createElement !== \"undefined\";\ntry {\n if (isBrowser) {\n window.__reactRouterVersion = \"7.4.1\";\n }\n} catch (e) {\n}\nfunction createBrowserRouter(routes, opts) {\n return createRouter({\n basename: opts?.basename,\n unstable_getContext: opts?.unstable_getContext,\n future: opts?.future,\n history: createBrowserHistory({ window: opts?.window }),\n hydrationData: opts?.hydrationData || parseHydrationData(),\n routes,\n mapRouteProperties,\n dataStrategy: opts?.dataStrategy,\n patchRoutesOnNavigation: opts?.patchRoutesOnNavigation,\n window: opts?.window\n }).initialize();\n}\nfunction createHashRouter(routes, opts) {\n return createRouter({\n basename: opts?.basename,\n unstable_getContext: opts?.unstable_getContext,\n future: opts?.future,\n history: createHashHistory({ window: opts?.window }),\n hydrationData: opts?.hydrationData || parseHydrationData(),\n routes,\n mapRouteProperties,\n dataStrategy: opts?.dataStrategy,\n patchRoutesOnNavigation: opts?.patchRoutesOnNavigation,\n window: opts?.window\n }).initialize();\n}\nfunction parseHydrationData() {\n let state = window?.__staticRouterHydrationData;\n if (state && state.errors) {\n state = {\n ...state,\n errors: deserializeErrors(state.errors)\n };\n }\n return state;\n}\nfunction deserializeErrors(errors) {\n if (!errors) return null;\n let entries = Object.entries(errors);\n let serialized = {};\n for (let [key, val] of entries) {\n if (val && val.__type === \"RouteErrorResponse\") {\n serialized[key] = new ErrorResponseImpl(\n val.status,\n val.statusText,\n val.data,\n val.internal === true\n );\n } else if (val && val.__type === \"Error\") {\n if (val.__subType) {\n let ErrorConstructor = window[val.__subType];\n if (typeof ErrorConstructor === \"function\") {\n try {\n let error = new ErrorConstructor(val.message);\n error.stack = \"\";\n serialized[key] = error;\n } catch (e) {\n }\n }\n }\n if (serialized[key] == null) {\n let error = new Error(val.message);\n error.stack = \"\";\n serialized[key] = error;\n }\n } else {\n serialized[key] = val;\n }\n }\n return serialized;\n}\nfunction BrowserRouter({\n basename,\n children,\n window: window2\n}) {\n let historyRef = React10.useRef();\n if (historyRef.current == null) {\n historyRef.current = createBrowserHistory({ window: window2, v5Compat: true });\n }\n let history = historyRef.current;\n let [state, setStateImpl] = React10.useState({\n action: history.action,\n location: history.location\n });\n let setState = React10.useCallback(\n (newState) => {\n React10.startTransition(() => setStateImpl(newState));\n },\n [setStateImpl]\n );\n React10.useLayoutEffect(() => history.listen(setState), [history, setState]);\n return /* @__PURE__ */ React10.createElement(\n Router,\n {\n basename,\n children,\n location: state.location,\n navigationType: state.action,\n navigator: history\n }\n );\n}\nfunction HashRouter({ basename, children, window: window2 }) {\n let historyRef = React10.useRef();\n if (historyRef.current == null) {\n historyRef.current = createHashHistory({ window: window2, v5Compat: true });\n }\n let history = historyRef.current;\n let [state, setStateImpl] = React10.useState({\n action: history.action,\n location: history.location\n });\n let setState = React10.useCallback(\n (newState) => {\n React10.startTransition(() => setStateImpl(newState));\n },\n [setStateImpl]\n );\n React10.useLayoutEffect(() => history.listen(setState), [history, setState]);\n return /* @__PURE__ */ React10.createElement(\n Router,\n {\n basename,\n children,\n location: state.location,\n navigationType: state.action,\n navigator: history\n }\n );\n}\nfunction HistoryRouter({\n basename,\n children,\n history\n}) {\n let [state, setStateImpl] = React10.useState({\n action: history.action,\n location: history.location\n });\n let setState = React10.useCallback(\n (newState) => {\n React10.startTransition(() => setStateImpl(newState));\n },\n [setStateImpl]\n );\n React10.useLayoutEffect(() => history.listen(setState), [history, setState]);\n return /* @__PURE__ */ React10.createElement(\n Router,\n {\n basename,\n children,\n location: state.location,\n navigationType: state.action,\n navigator: history\n }\n );\n}\nHistoryRouter.displayName = \"unstable_HistoryRouter\";\nvar ABSOLUTE_URL_REGEX2 = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\nvar Link = React10.forwardRef(\n function LinkWithRef({\n onClick,\n discover = \"render\",\n prefetch = \"none\",\n relative,\n reloadDocument,\n replace: replace2,\n state,\n target,\n to,\n preventScrollReset,\n viewTransition,\n ...rest\n }, forwardedRef) {\n let { basename } = React10.useContext(NavigationContext);\n let isAbsolute = typeof to === \"string\" && ABSOLUTE_URL_REGEX2.test(to);\n let absoluteHref;\n let isExternal = false;\n if (typeof to === \"string\" && isAbsolute) {\n absoluteHref = to;\n if (isBrowser) {\n try {\n let currentUrl = new URL(window.location.href);\n let targetUrl = to.startsWith(\"//\") ? new URL(currentUrl.protocol + to) : new URL(to);\n let path = stripBasename(targetUrl.pathname, basename);\n if (targetUrl.origin === currentUrl.origin && path != null) {\n to = path + targetUrl.search + targetUrl.hash;\n } else {\n isExternal = true;\n }\n } catch (e) {\n warning(\n false,\n `<Link to=\"${to}\"> contains an invalid URL which will probably break when clicked - please update to a valid URL path.`\n );\n }\n }\n }\n let href2 = useHref(to, { relative });\n let [shouldPrefetch, prefetchRef, prefetchHandlers] = usePrefetchBehavior(\n prefetch,\n rest\n );\n let internalOnClick = useLinkClickHandler(to, {\n replace: replace2,\n state,\n target,\n preventScrollReset,\n relative,\n viewTransition\n });\n function handleClick(event) {\n if (onClick) onClick(event);\n if (!event.defaultPrevented) {\n internalOnClick(event);\n }\n }\n let link = (\n // eslint-disable-next-line jsx-a11y/anchor-has-content\n /* @__PURE__ */ React10.createElement(\n \"a\",\n {\n ...rest,\n ...prefetchHandlers,\n href: absoluteHref || href2,\n onClick: isExternal || reloadDocument ? onClick : handleClick,\n ref: mergeRefs(forwardedRef, prefetchRef),\n target,\n \"data-discover\": !isAbsolute && discover === \"render\" ? \"true\" : void 0\n }\n )\n );\n return shouldPrefetch && !isAbsolute ? /* @__PURE__ */ React10.createElement(React10.Fragment, null, link, /* @__PURE__ */ React10.createElement(PrefetchPageLinks, { page: href2 })) : link;\n }\n);\nLink.displayName = \"Link\";\nvar NavLink = React10.forwardRef(\n function NavLinkWithRef({\n \"aria-current\": ariaCurrentProp = \"page\",\n caseSensitive = false,\n className: classNameProp = \"\",\n end = false,\n style: styleProp,\n to,\n viewTransition,\n children,\n ...rest\n }, ref) {\n let path = useResolvedPath(to, { relative: rest.relative });\n let location = useLocation();\n let routerState = React10.useContext(DataRouterStateContext);\n let { navigator: navigator2, basename } = React10.useContext(NavigationContext);\n let isTransitioning = routerState != null && // Conditional usage is OK here because the usage of a data router is static\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useViewTransitionState(path) && viewTransition === true;\n let toPathname = navigator2.encodeLocation ? navigator2.encodeLocation(path).pathname : path.pathname;\n let locationPathname = location.pathname;\n let nextLocationPathname = routerState && routerState.navigation && routerState.navigation.location ? routerState.navigation.location.pathname : null;\n if (!caseSensitive) {\n locationPathname = locationPathname.toLowerCase();\n nextLocationPathname = nextLocationPathname ? nextLocationPathname.toLowerCase() : null;\n toPathname = toPathname.toLowerCase();\n }\n if (nextLocationPathname && basename) {\n nextLocationPathname = stripBasename(nextLocationPathname, basename) || nextLocationPathname;\n }\n const endSlashPosition = toPathname !== \"/\" && toPathname.endsWith(\"/\") ? toPathname.length - 1 : toPathname.length;\n let isActive = locationPathname === toPathname || !end && locationPathname.startsWith(toPathname) && locationPathname.charAt(endSlashPosition) === \"/\";\n let isPending = nextLocationPathname != null && (nextLocationPathname === toPathname || !end && nextLocationPathname.startsWith(toPathname) && nextLocationPathname.charAt(toPathname.length) === \"/\");\n let renderProps = {\n isActive,\n isPending,\n isTransitioning\n };\n let ariaCurrent = isActive ? ariaCurrentProp : void 0;\n let className;\n if (typeof classNameProp === \"function\") {\n className = classNameProp(renderProps);\n } else {\n className = [\n classNameProp,\n isActive ? \"active\" : null,\n isPending ? \"pending\" : null,\n isTransitioning ? \"transitioning\" : null\n ].filter(Boolean).join(\" \");\n }\n let style = typeof styleProp === \"function\" ? styleProp(renderProps) : styleProp;\n return /* @__PURE__ */ React10.createElement(\n Link,\n {\n ...rest,\n \"aria-current\": ariaCurrent,\n className,\n ref,\n style,\n to,\n viewTransition\n },\n typeof children === \"function\" ? children(renderProps) : children\n );\n }\n);\nNavLink.displayName = \"NavLink\";\nvar Form = React10.forwardRef(\n ({\n discover = \"render\",\n fetcherKey,\n navigate,\n reloadDocument,\n replace: replace2,\n state,\n method = defaultMethod,\n action,\n onSubmit,\n relative,\n preventScrollReset,\n viewTransition,\n ...props\n }, forwardedRef) => {\n let submit = useSubmit();\n let formAction = useFormAction(action, { relative });\n let formMethod = method.toLowerCase() === \"get\" ? \"get\" : \"post\";\n let isAbsolute = typeof action === \"string\" && ABSOLUTE_URL_REGEX2.test(action);\n let submitHandler = (event) => {\n onSubmit && onSubmit(event);\n if (event.defaultPrevented) return;\n event.preventDefault();\n let submitter = event.nativeEvent.submitter;\n let submitMethod = submitter?.getAttribute(\"formmethod\") || method;\n submit(submitter || event.currentTarget, {\n fetcherKey,\n method: submitMethod,\n navigate,\n replace: replace2,\n state,\n relative,\n preventScrollReset,\n viewTransition\n });\n };\n return /* @__PURE__ */ React10.createElement(\n \"form\",\n {\n ref: forwardedRef,\n method: formMethod,\n action: formAction,\n onSubmit: reloadDocument ? onSubmit : submitHandler,\n ...props,\n \"data-discover\": !isAbsolute && discover === \"render\" ? \"true\" : void 0\n }\n );\n }\n);\nForm.displayName = \"Form\";\nfunction ScrollRestoration({\n getKey,\n storageKey,\n ...props\n}) {\n let remixContext = React10.useContext(FrameworkContext);\n let { basename } = React10.useContext(NavigationContext);\n let location = useLocation();\n let matches = useMatches();\n useScrollRestoration({ getKey, storageKey });\n let ssrKey = React10.useMemo(\n () => {\n if (!remixContext || !getKey) return null;\n let userKey = getScrollRestorationKey(\n location,\n matches,\n basename,\n getKey\n );\n return userKey !== location.key ? userKey : null;\n },\n // Nah, we only need this the first time for the SSR render\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n );\n if (!remixContext || remixContext.isSpaMode) {\n return null;\n }\n let restoreScroll = ((storageKey2, restoreKey) => {\n if (!window.history.state || !window.history.state.key) {\n let key = Math.random().toString(32).slice(2);\n window.history.replaceState({ key }, \"\");\n }\n try {\n let positions = JSON.parse(sessionStorage.getItem(storageKey2) || \"{}\");\n let storedY = positions[restoreKey || window.history.state.key];\n if (typeof storedY === \"number\") {\n window.scrollTo(0, storedY);\n }\n } catch (error) {\n console.error(error);\n sessionStorage.removeItem(storageKey2);\n }\n }).toString();\n return /* @__PURE__ */ React10.createElement(\n \"script\",\n {\n ...props,\n suppressHydrationWarning: true,\n dangerouslySetInnerHTML: {\n __html: `(${restoreScroll})(${JSON.stringify(\n storageKey || SCROLL_RESTORATION_STORAGE_KEY\n )}, ${JSON.stringify(ssrKey)})`\n }\n }\n );\n}\nScrollRestoration.displayName = \"ScrollRestoration\";\nfunction getDataRouterConsoleError2(hookName) {\n return `${hookName} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`;\n}\nfunction useDataRouterContext3(hookName) {\n let ctx = React10.useContext(DataRouterContext);\n invariant(ctx, getDataRouterConsoleError2(hookName));\n return ctx;\n}\nfunction useDataRouterState2(hookName) {\n let state = React10.useContext(DataRouterStateContext);\n invariant(state, getDataRouterConsoleError2(hookName));\n return state;\n}\nfunction useLinkClickHandler(to, {\n target,\n replace: replaceProp,\n state,\n preventScrollReset,\n relative,\n viewTransition\n} = {}) {\n let navigate = useNavigate();\n let location = useLocation();\n let path = useResolvedPath(to, { relative });\n return React10.useCallback(\n (event) => {\n if (shouldProcessLinkClick(event, target)) {\n event.preventDefault();\n let replace2 = replaceProp !== void 0 ? replaceProp : createPath(location) === createPath(path);\n navigate(to, {\n replace: replace2,\n state,\n preventScrollReset,\n relative,\n viewTransition\n });\n }\n },\n [\n location,\n navigate,\n path,\n replaceProp,\n state,\n target,\n to,\n preventScrollReset,\n relative,\n viewTransition\n ]\n );\n}\nfunction useSearchParams(defaultInit) {\n warning(\n typeof URLSearchParams !== \"undefined\",\n `You cannot use the \\`useSearchParams\\` hook in a browser that does not support the URLSearchParams API. If you need to support Internet Explorer 11, we recommend you load a polyfill such as https://github.com/ungap/url-search-params.`\n );\n let defaultSearchParamsRef = React10.useRef(createSearchParams(defaultInit));\n let hasSetSearchParamsRef = React10.useRef(false);\n let location = useLocation();\n let searchParams = React10.useMemo(\n () => (\n // Only merge in the defaults if we haven't yet called setSearchParams.\n // Once we call that we want those to take precedence, otherwise you can't\n // remove a param with setSearchParams({}) if it has an initial value\n getSearchParamsForLocation(\n location.search,\n hasSetSearchParamsRef.current ? null : defaultSearchParamsRef.current\n )\n ),\n [location.search]\n );\n let navigate = useNavigate();\n let setSearchParams = React10.useCallback(\n (nextInit, navigateOptions) => {\n const newSearchParams = createSearchParams(\n typeof nextInit === \"function\" ? nextInit(searchParams) : nextInit\n );\n hasSetSearchParamsRef.current = true;\n navigate(\"?\" + newSearchParams, navigateOptions);\n },\n [navigate, searchParams]\n );\n return [searchParams, setSearchParams];\n}\nvar fetcherId = 0;\nvar getUniqueFetcherId = () => `__${String(++fetcherId)}__`;\nfunction useSubmit() {\n let { router } = useDataRouterContext3(\"useSubmit\" /* UseSubmit */);\n let { basename } = React10.useContext(NavigationContext);\n let currentRouteId = useRouteId();\n return React10.useCallback(\n async (target, options = {}) => {\n let { action, method, encType, formData, body } = getFormSubmissionInfo(\n target,\n basename\n );\n if (options.navigate === false) {\n let key = options.fetcherKey || getUniqueFetcherId();\n await router.fetch(key, currentRouteId, options.action || action, {\n preventScrollReset: options.preventScrollReset,\n formData,\n body,\n formMethod: options.method || method,\n formEncType: options.encType || encType,\n flushSync: options.flushSync\n });\n } else {\n await router.navigate(options.action || action, {\n preventScrollReset: options.preventScrollReset,\n formData,\n body,\n formMethod: options.method || method,\n formEncType: options.encType || encType,\n replace: options.replace,\n state: options.state,\n fromRouteId: currentRouteId,\n flushSync: options.flushSync,\n viewTransition: options.viewTransition\n });\n }\n },\n [router, basename, currentRouteId]\n );\n}\nfunction useFormAction(action, { relative } = {}) {\n let { basename } = React10.useContext(NavigationContext);\n let routeContext = React10.useContext(RouteContext);\n invariant(routeContext, \"useFormAction must be used inside a RouteContext\");\n let [match] = routeContext.matches.slice(-1);\n let path = { ...useResolvedPath(action ? action : \".\", { relative }) };\n let location = useLocation();\n if (action == null) {\n path.search = location.search;\n let params = new URLSearchParams(path.search);\n let indexValues = params.getAll(\"index\");\n let hasNakedIndexParam = indexValues.some((v) => v === \"\");\n if (hasNakedIndexParam) {\n params.delete(\"index\");\n indexValues.filter((v) => v).forEach((v) => params.append(\"index\", v));\n let qs = params.toString();\n path.search = qs ? `?${qs}` : \"\";\n }\n }\n if ((!action || action === \".\") && match.route.index) {\n path.search = path.search ? path.search.replace(/^\\?/, \"?index&\") : \"?index\";\n }\n if (basename !== \"/\") {\n path.pathname = path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n return createPath(path);\n}\nfunction useFetcher({\n key\n} = {}) {\n let { router } = useDataRouterContext3(\"useFetcher\" /* UseFetcher */);\n let state = useDataRouterState2(\"useFetcher\" /* UseFetcher */);\n let fetcherData = React10.useContext(FetchersContext);\n let route = React10.useContext(RouteContext);\n let routeId = route.matches[route.matches.length - 1]?.route.id;\n invariant(fetcherData, `useFetcher must be used inside a FetchersContext`);\n invariant(route, `useFetcher must be used inside a RouteContext`);\n invariant(\n routeId != null,\n `useFetcher can only be used on routes that contain a unique \"id\"`\n );\n let defaultKey = React10.useId();\n let [fetcherKey, setFetcherKey] = React10.useState(key || defaultKey);\n if (key && key !== fetcherKey) {\n setFetcherKey(key);\n }\n React10.useEffect(() => {\n router.getFetcher(fetcherKey);\n return () => router.deleteFetcher(fetcherKey);\n }, [router, fetcherKey]);\n let load = React10.useCallback(\n async (href2, opts) => {\n invariant(routeId, \"No routeId available for fetcher.load()\");\n await router.fetch(fetcherKey, routeId, href2, opts);\n },\n [fetcherKey, routeId, router]\n );\n let submitImpl = useSubmit();\n let submit = React10.useCallback(\n async (target, opts) => {\n await submitImpl(target, {\n ...opts,\n navigate: false,\n fetcherKey\n });\n },\n [fetcherKey, submitImpl]\n );\n let FetcherForm = React10.useMemo(() => {\n let FetcherForm2 = React10.forwardRef(\n (props, ref) => {\n return /* @__PURE__ */ React10.createElement(Form, { ...props, navigate: false, fetcherKey, ref });\n }\n );\n FetcherForm2.displayName = \"fetcher.Form\";\n return FetcherForm2;\n }, [fetcherKey]);\n let fetcher = state.fetchers.get(fetcherKey) || IDLE_FETCHER;\n let data2 = fetcherData.get(fetcherKey);\n let fetcherWithComponents = React10.useMemo(\n () => ({\n Form: FetcherForm,\n submit,\n load,\n ...fetcher,\n data: data2\n }),\n [FetcherForm, submit, load, fetcher, data2]\n );\n return fetcherWithComponents;\n}\nfunction useFetchers() {\n let state = useDataRouterState2(\"useFetchers\" /* UseFetchers */);\n return Array.from(state.fetchers.entries()).map(([key, fetcher]) => ({\n ...fetcher,\n key\n }));\n}\nvar SCROLL_RESTORATION_STORAGE_KEY = \"react-router-scroll-positions\";\nvar savedScrollPositions = {};\nfunction getScrollRestorationKey(location, matches, basename, getKey) {\n let key = null;\n if (getKey) {\n if (basename !== \"/\") {\n key = getKey(\n {\n ...location,\n pathname: stripBasename(location.pathname, basename) || location.pathname\n },\n matches\n );\n } else {\n key = getKey(location, matches);\n }\n }\n if (key == null) {\n key = location.key;\n }\n return key;\n}\nfunction useScrollRestoration({\n getKey,\n storageKey\n} = {}) {\n let { router } = useDataRouterContext3(\"useScrollRestoration\" /* UseScrollRestoration */);\n let { restoreScrollPosition, preventScrollReset } = useDataRouterState2(\n \"useScrollRestoration\" /* UseScrollRestoration */\n );\n let { basename } = React10.useContext(NavigationContext);\n let location = useLocation();\n let matches = useMatches();\n let navigation = useNavigation();\n React10.useEffect(() => {\n window.history.scrollRestoration = \"manual\";\n return () => {\n window.history.scrollRestoration = \"auto\";\n };\n }, []);\n usePageHide(\n React10.useCallback(() => {\n if (navigation.state === \"idle\") {\n let key = getScrollRestorationKey(location, matches, basename, getKey);\n savedScrollPositions[key] = window.scrollY;\n }\n try {\n sessionStorage.setItem(\n storageKey || SCROLL_RESTORATION_STORAGE_KEY,\n JSON.stringify(savedScrollPositions)\n );\n } catch (error) {\n warning(\n false,\n `Failed to save scroll positions in sessionStorage, <ScrollRestoration /> will not work properly (${error}).`\n );\n }\n window.history.scrollRestoration = \"auto\";\n }, [navigation.state, getKey, basename, location, matches, storageKey])\n );\n if (typeof document !== \"undefined\") {\n React10.useLayoutEffect(() => {\n try {\n let sessionPositions = sessionStorage.getItem(\n storageKey || SCROLL_RESTORATION_STORAGE_KEY\n );\n if (sessionPositions) {\n savedScrollPositions = JSON.parse(sessionPositions);\n }\n } catch (e) {\n }\n }, [storageKey]);\n React10.useLayoutEffect(() => {\n let disableScrollRestoration = router?.enableScrollRestoration(\n savedScrollPositions,\n () => window.scrollY,\n getKey ? (location2, matches2) => getScrollRestorationKey(location2, matches2, basename, getKey) : void 0\n );\n return () => disableScrollRestoration && disableScrollRestoration();\n }, [router, basename, getKey]);\n React10.useLayoutEffect(() => {\n if (restoreScrollPosition === false) {\n return;\n }\n if (typeof restoreScrollPosition === \"number\") {\n window.scrollTo(0, restoreScrollPosition);\n return;\n }\n if (location.hash) {\n let el = document.getElementById(\n decodeURIComponent(location.hash.slice(1))\n );\n if (el) {\n el.scrollIntoView();\n return;\n }\n }\n if (preventScrollReset === true) {\n return;\n }\n window.scrollTo(0, 0);\n }, [location, restoreScrollPosition, preventScrollReset]);\n }\n}\nfunction useBeforeUnload(callback, options) {\n let { capture } = options || {};\n React10.useEffect(() => {\n let opts = capture != null ? { capture } : void 0;\n window.addEventListener(\"beforeunload\", callback, opts);\n return () => {\n window.removeEventListener(\"beforeunload\", callback, opts);\n };\n }, [callback, capture]);\n}\nfunction usePageHide(callback, options) {\n let { capture } = options || {};\n React10.useEffect(() => {\n let opts = capture != null ? { capture } : void 0;\n window.addEventListener(\"pagehide\", callback, opts);\n return () => {\n window.removeEventListener(\"pagehide\", callback, opts);\n };\n }, [callback, capture]);\n}\nfunction usePrompt({\n when,\n message\n}) {\n let blocker = useBlocker(when);\n React10.useEffect(() => {\n if (blocker.state === \"blocked\") {\n let proceed = window.confirm(message);\n if (proceed) {\n setTimeout(blocker.proceed, 0);\n } else {\n blocker.reset();\n }\n }\n }, [blocker, message]);\n React10.useEffect(() => {\n if (blocker.state === \"blocked\" && !when) {\n blocker.reset();\n }\n }, [blocker, when]);\n}\nfunction useViewTransitionState(to, opts = {}) {\n let vtContext = React10.useContext(ViewTransitionContext);\n invariant(\n vtContext != null,\n \"`useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`. Did you accidentally import `RouterProvider` from `react-router`?\"\n );\n let { basename } = useDataRouterContext3(\n \"useViewTransitionState\" /* useViewTransitionState */\n );\n let path = useResolvedPath(to, { relative: opts.relative });\n if (!vtContext.isTransitioning) {\n return false;\n }\n let currentPath = stripBasename(vtContext.currentLocation.pathname, basename) || vtContext.currentLocation.pathname;\n let nextPath = stripBasename(vtContext.nextLocation.pathname, basename) || vtContext.nextLocation.pathname;\n return matchPath(path.pathname, nextPath) != null || matchPath(path.pathname, currentPath) != null;\n}\n\n// lib/dom/server.tsx\nimport * as React11 from \"react\";\nfunction StaticRouter({\n basename,\n children,\n location: locationProp = \"/\"\n}) {\n if (typeof locationProp === \"string\") {\n locationProp = parsePath(locationProp);\n }\n let action = \"POP\" /* Pop */;\n let location = {\n pathname: locationProp.pathname || \"/\",\n search: locationProp.search || \"\",\n hash: locationProp.hash || \"\",\n state: locationProp.state != null ? locationProp.state : null,\n key: locationProp.key || \"default\"\n };\n let staticNavigator = getStatelessNavigator();\n return /* @__PURE__ */ React11.createElement(\n Router,\n {\n basename,\n children,\n location,\n navigationType: action,\n navigator: staticNavigator,\n static: true\n }\n );\n}\nfunction StaticRouterProvider({\n context,\n router,\n hydrate = true,\n nonce\n}) {\n invariant(\n router && context,\n \"You must provide `router` and `context` to <StaticRouterProvider>\"\n );\n let dataRouterContext = {\n router,\n navigator: getStatelessNavigator(),\n static: true,\n staticContext: context,\n basename: context.basename || \"/\"\n };\n let fetchersContext = /* @__PURE__ */ new Map();\n let hydrateScript = \"\";\n if (hydrate !== false) {\n let data2 = {\n loaderData: context.loaderData,\n actionData: context.actionData,\n errors: serializeErrors(context.errors)\n };\n let json = htmlEscape(JSON.stringify(JSON.stringify(data2)));\n hydrateScript = `window.__staticRouterHydrationData = JSON.parse(${json});`;\n }\n let { state } = dataRouterContext.router;\n return /* @__PURE__ */ React11.createElement(React11.Fragment, null, /* @__PURE__ */ React11.createElement(DataRouterContext.Provider, { value: dataRouterContext }, /* @__PURE__ */ React11.createElement(DataRouterStateContext.Provider, { value: state }, /* @__PURE__ */ React11.createElement(FetchersContext.Provider, { value: fetchersContext }, /* @__PURE__ */ React11.createElement(ViewTransitionContext.Provider, { value: { isTransitioning: false } }, /* @__PURE__ */ React11.createElement(\n Router,\n {\n basename: dataRouterContext.basename,\n location: state.location,\n navigationType: state.historyAction,\n navigator: dataRouterContext.navigator,\n static: dataRouterContext.static\n },\n /* @__PURE__ */ React11.createElement(\n DataRoutes2,\n {\n routes: router.routes,\n future: router.future,\n state\n }\n )\n ))))), hydrateScript ? /* @__PURE__ */ React11.createElement(\n \"script\",\n {\n suppressHydrationWarning: true,\n nonce,\n dangerouslySetInnerHTML: { __html: hydrateScript }\n }\n ) : null);\n}\nfunction DataRoutes2({\n routes,\n future,\n state\n}) {\n return useRoutesImpl(routes, void 0, state, future);\n}\nfunction serializeErrors(errors) {\n if (!errors) return null;\n let entries = Object.entries(errors);\n let serialized = {};\n for (let [key, val] of entries) {\n if (isRouteErrorResponse(val)) {\n serialized[key] = { ...val, __type: \"RouteErrorResponse\" };\n } else if (val instanceof Error) {\n serialized[key] = {\n message: val.message,\n __type: \"Error\",\n // If this is a subclass (i.e., ReferenceError), send up the type so we\n // can re-create the same type during hydration.\n ...val.name !== \"Error\" ? {\n __subType: val.name\n } : {}\n };\n } else {\n serialized[key] = val;\n }\n }\n return serialized;\n}\nfunction getStatelessNavigator() {\n return {\n createHref,\n encodeLocation,\n push(to) {\n throw new Error(\n `You cannot use navigator.push() on the server because it is a stateless environment. This error was probably triggered when you did a \\`navigate(${JSON.stringify(to)})\\` somewhere in your app.`\n );\n },\n replace(to) {\n throw new Error(\n `You cannot use navigator.replace() on the server because it is a stateless environment. This error was probably triggered when you did a \\`navigate(${JSON.stringify(to)}, { replace: true })\\` somewhere in your app.`\n );\n },\n go(delta) {\n throw new Error(\n `You cannot use navigator.go() on the server because it is a stateless environment. This error was probably triggered when you did a \\`navigate(${delta})\\` somewhere in your app.`\n );\n },\n back() {\n throw new Error(\n `You cannot use navigator.back() on the server because it is a stateless environment.`\n );\n },\n forward() {\n throw new Error(\n `You cannot use navigator.forward() on the server because it is a stateless environment.`\n );\n }\n };\n}\nfunction createStaticHandler2(routes, opts) {\n return createStaticHandler(routes, {\n ...opts,\n mapRouteProperties\n });\n}\nfunction createStaticRouter(routes, context, opts = {}) {\n let manifest = {};\n let dataRoutes = convertRoutesToDataRoutes(\n routes,\n mapRouteProperties,\n void 0,\n manifest\n );\n let matches = context.matches.map((match) => {\n let route = manifest[match.route.id] || match.route;\n return {\n ...match,\n route\n };\n });\n let msg = (method) => `You cannot use router.${method}() on the server because it is a stateless environment`;\n return {\n get basename() {\n return context.basename;\n },\n get future() {\n return {\n unstable_middleware: false,\n ...opts?.future\n };\n },\n get state() {\n return {\n historyAction: \"POP\" /* Pop */,\n location: context.location,\n matches,\n loaderData: context.loaderData,\n actionData: context.actionData,\n errors: context.errors,\n initialized: true,\n navigation: IDLE_NAVIGATION,\n restoreScrollPosition: null,\n preventScrollReset: false,\n revalidation: \"idle\",\n fetchers: /* @__PURE__ */ new Map(),\n blockers: /* @__PURE__ */ new Map()\n };\n },\n get routes() {\n return dataRoutes;\n },\n get window() {\n return void 0;\n },\n initialize() {\n throw msg(\"initialize\");\n },\n subscribe() {\n throw msg(\"subscribe\");\n },\n enableScrollRestoration() {\n throw msg(\"enableScrollRestoration\");\n },\n navigate() {\n throw msg(\"navigate\");\n },\n fetch() {\n throw msg(\"fetch\");\n },\n revalidate() {\n throw msg(\"revalidate\");\n },\n createHref,\n encodeLocation,\n getFetcher() {\n return IDLE_FETCHER;\n },\n deleteFetcher() {\n throw msg(\"deleteFetcher\");\n },\n dispose() {\n throw msg(\"dispose\");\n },\n getBlocker() {\n return IDLE_BLOCKER;\n },\n deleteBlocker() {\n throw msg(\"deleteBlocker\");\n },\n patchRoutes() {\n throw msg(\"patchRoutes\");\n },\n _internalFetchControllers: /* @__PURE__ */ new Map(),\n _internalSetRoutes() {\n throw msg(\"_internalSetRoutes\");\n }\n };\n}\nfunction createHref(to) {\n return typeof to === \"string\" ? to : createPath(to);\n}\nfunction encodeLocation(to) {\n let href2 = typeof to === \"string\" ? to : createPath(to);\n href2 = href2.replace(/ $/, \"%20\");\n let encoded = ABSOLUTE_URL_REGEX3.test(href2) ? new URL(href2) : new URL(href2, \"http://localhost\");\n return {\n pathname: encoded.pathname,\n search: encoded.search,\n hash: encoded.hash\n };\n}\nvar ABSOLUTE_URL_REGEX3 = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\nvar ESCAPE_LOOKUP2 = {\n \"&\": \"\\\\u0026\",\n \">\": \"\\\\u003e\",\n \"<\": \"\\\\u003c\",\n \"\\u2028\": \"\\\\u2028\",\n \"\\u2029\": \"\\\\u2029\"\n};\nvar ESCAPE_REGEX2 = /[&><\\u2028\\u2029]/g;\nfunction htmlEscape(str) {\n return str.replace(ESCAPE_REGEX2, (match) => ESCAPE_LOOKUP2[match]);\n}\n\n// lib/dom/ssr/server.tsx\nimport * as React12 from \"react\";\nfunction ServerRouter({\n context,\n url,\n nonce\n}) {\n if (typeof url === \"string\") {\n url = new URL(url);\n }\n let { manifest, routeModules, criticalCss, serverHandoffString } = context;\n let routes = createServerRoutes(\n manifest.routes,\n routeModules,\n context.future,\n context.isSpaMode\n );\n context.staticHandlerContext.loaderData = {\n ...context.staticHandlerContext.loaderData\n };\n for (let match of context.staticHandlerContext.matches) {\n let routeId = match.route.id;\n let route = routeModules[routeId];\n let manifestRoute = context.manifest.routes[routeId];\n if (route && manifestRoute && shouldHydrateRouteLoader(manifestRoute, route, context.isSpaMode) && (route.HydrateFallback || !manifestRoute.hasLoader)) {\n delete context.staticHandlerContext.loaderData[routeId];\n }\n }\n let router = createStaticRouter(routes, context.staticHandlerContext);\n return /* @__PURE__ */ React12.createElement(React12.Fragment, null, /* @__PURE__ */ React12.createElement(\n FrameworkContext.Provider,\n {\n value: {\n manifest,\n routeModules,\n criticalCss,\n serverHandoffString,\n future: context.future,\n ssr: context.ssr,\n isSpaMode: context.isSpaMode,\n serializeError: context.serializeError,\n renderMeta: context.renderMeta\n }\n },\n /* @__PURE__ */ React12.createElement(RemixErrorBoundary, { location: router.state.location }, /* @__PURE__ */ React12.createElement(\n StaticRouterProvider,\n {\n router,\n context: context.staticHandlerContext,\n hydrate: false\n }\n ))\n ), context.serverHandoffStream ? /* @__PURE__ */ React12.createElement(React12.Suspense, null, /* @__PURE__ */ React12.createElement(\n StreamTransfer,\n {\n context,\n identifier: 0,\n reader: context.serverHandoffStream.getReader(),\n textDecoder: new TextDecoder(),\n nonce\n }\n )) : null);\n}\n\n// lib/dom/ssr/routes-test-stub.tsx\nimport * as React13 from \"react\";\nfunction createRoutesStub(routes, unstable_getContext) {\n return function RoutesTestStub({\n initialEntries,\n initialIndex,\n hydrationData,\n future\n }) {\n let routerRef = React13.useRef();\n let remixContextRef = React13.useRef();\n if (routerRef.current == null) {\n remixContextRef.current = {\n future: {\n unstable_middleware: future?.unstable_middleware === true\n },\n manifest: {\n routes: {},\n entry: { imports: [], module: \"\" },\n url: \"\",\n version: \"\"\n },\n routeModules: {},\n ssr: false,\n isSpaMode: false\n };\n let patched = processRoutes(\n // @ts-expect-error `StubRouteObject` is stricter about `loader`/`action`\n // types compared to `AgnosticRouteObject`\n convertRoutesToDataRoutes(routes, (r) => r),\n remixContextRef.current.manifest,\n remixContextRef.current.routeModules\n );\n routerRef.current = createMemoryRouter(patched, {\n unstable_getContext,\n initialEntries,\n initialIndex,\n hydrationData\n });\n }\n return /* @__PURE__ */ React13.createElement(FrameworkContext.Provider, { value: remixContextRef.current }, /* @__PURE__ */ React13.createElement(RouterProvider, { router: routerRef.current }));\n };\n}\nfunction processRoutes(routes, manifest, routeModules, parentId) {\n return routes.map((route) => {\n if (!route.id) {\n throw new Error(\n \"Expected a route.id in @remix-run/testing processRoutes() function\"\n );\n }\n let newRoute = {\n id: route.id,\n path: route.path,\n index: route.index,\n Component: route.Component,\n HydrateFallback: route.HydrateFallback,\n ErrorBoundary: route.ErrorBoundary,\n action: route.action,\n loader: route.loader,\n handle: route.handle,\n shouldRevalidate: route.shouldRevalidate\n };\n let entryRoute = {\n id: route.id,\n path: route.path,\n index: route.index,\n parentId,\n hasAction: route.action != null,\n hasLoader: route.loader != null,\n // When testing routes, you should be stubbing loader/action/middleware,\n // not trying to re-implement the full loader/clientLoader/SSR/hydration\n // flow. That is better tested via E2E tests.\n hasClientAction: false,\n hasClientLoader: false,\n hasClientMiddleware: false,\n hasErrorBoundary: route.ErrorBoundary != null,\n // any need for these?\n module: \"build/stub-path-to-module.js\",\n clientActionModule: void 0,\n clientLoaderModule: void 0,\n clientMiddlewareModule: void 0,\n hydrateFallbackModule: void 0\n };\n manifest.routes[newRoute.id] = entryRoute;\n routeModules[route.id] = {\n default: route.Component || Outlet,\n ErrorBoundary: route.ErrorBoundary || void 0,\n handle: route.handle,\n links: route.links,\n meta: route.meta,\n shouldRevalidate: route.shouldRevalidate\n };\n if (route.children) {\n newRoute.children = processRoutes(\n route.children,\n manifest,\n routeModules,\n newRoute.id\n );\n }\n return newRoute;\n });\n}\n\n// lib/server-runtime/cookies.ts\nimport { parse, serialize } from \"cookie\";\n\n// lib/server-runtime/crypto.ts\nvar encoder = new TextEncoder();\nvar sign = async (value, secret) => {\n let data2 = encoder.encode(value);\n let key = await createKey2(secret, [\"sign\"]);\n let signature = await crypto.subtle.sign(\"HMAC\", key, data2);\n let hash = btoa(String.fromCharCode(...new Uint8Array(signature))).replace(\n /=+$/,\n \"\"\n );\n return value + \".\" + hash;\n};\nvar unsign = async (cookie, secret) => {\n let index = cookie.lastIndexOf(\".\");\n let value = cookie.slice(0, index);\n let hash = cookie.slice(index + 1);\n let data2 = encoder.encode(value);\n let key = await createKey2(secret, [\"verify\"]);\n let signature = byteStringToUint8Array(atob(hash));\n let valid = await crypto.subtle.verify(\"HMAC\", key, signature, data2);\n return valid ? value : false;\n};\nvar createKey2 = async (secret, usages) => crypto.subtle.importKey(\n \"raw\",\n encoder.encode(secret),\n { name: \"HMAC\", hash: \"SHA-256\" },\n false,\n usages\n);\nfunction byteStringToUint8Array(byteString) {\n let array = new Uint8Array(byteString.length);\n for (let i = 0; i < byteString.length; i++) {\n array[i] = byteString.charCodeAt(i);\n }\n return array;\n}\n\n// lib/server-runtime/cookies.ts\nvar createCookie = (name, cookieOptions = {}) => {\n let { secrets = [], ...options } = {\n path: \"/\",\n sameSite: \"lax\",\n ...cookieOptions\n };\n warnOnceAboutExpiresCookie(name, options.expires);\n return {\n get name() {\n return name;\n },\n get isSigned() {\n return secrets.length > 0;\n },\n get expires() {\n return typeof options.maxAge !== \"undefined\" ? new Date(Date.now() + options.maxAge * 1e3) : options.expires;\n },\n async parse(cookieHeader, parseOptions) {\n if (!cookieHeader) return null;\n let cookies = parse(cookieHeader, { ...options, ...parseOptions });\n if (name in cookies) {\n let value = cookies[name];\n if (typeof value === \"string\" && value !== \"\") {\n let decoded = await decodeCookieValue(value, secrets);\n return decoded;\n } else {\n return \"\";\n }\n } else {\n return null;\n }\n },\n async serialize(value, serializeOptions) {\n return serialize(\n name,\n value === \"\" ? \"\" : await encodeCookieValue(value, secrets),\n {\n ...options,\n ...serializeOptions\n }\n );\n }\n };\n};\nvar isCookie = (object) => {\n return object != null && typeof object.name === \"string\" && typeof object.isSigned === \"boolean\" && typeof object.parse === \"function\" && typeof object.serialize === \"function\";\n};\nasync function encodeCookieValue(value, secrets) {\n let encoded = encodeData(value);\n if (secrets.length > 0) {\n encoded = await sign(encoded, secrets[0]);\n }\n return encoded;\n}\nasync function decodeCookieValue(value, secrets) {\n if (secrets.length > 0) {\n for (let secret of secrets) {\n let unsignedValue = await unsign(value, secret);\n if (unsignedValue !== false) {\n return decodeData(unsignedValue);\n }\n }\n return null;\n }\n return decodeData(value);\n}\nfunction encodeData(value) {\n return btoa(myUnescape(encodeURIComponent(JSON.stringify(value))));\n}\nfunction decodeData(value) {\n try {\n return JSON.parse(decodeURIComponent(myEscape(atob(value))));\n } catch (error) {\n return {};\n }\n}\nfunction myEscape(value) {\n let str = value.toString();\n let result = \"\";\n let index = 0;\n let chr, code;\n while (index < str.length) {\n chr = str.charAt(index++);\n if (/[\\w*+\\-./@]/.exec(chr)) {\n result += chr;\n } else {\n code = chr.charCodeAt(0);\n if (code < 256) {\n result += \"%\" + hex(code, 2);\n } else {\n result += \"%u\" + hex(code, 4).toUpperCase();\n }\n }\n }\n return result;\n}\nfunction hex(code, length) {\n let result = code.toString(16);\n while (result.length < length) result = \"0\" + result;\n return result;\n}\nfunction myUnescape(value) {\n let str = value.toString();\n let result = \"\";\n let index = 0;\n let chr, part;\n while (index < str.length) {\n chr = str.charAt(index++);\n if (chr === \"%\") {\n if (str.charAt(index) === \"u\") {\n part = str.slice(index + 1, index + 5);\n if (/^[\\da-f]{4}$/i.exec(part)) {\n result += String.fromCharCode(parseInt(part, 16));\n index += 5;\n continue;\n }\n } else {\n part = str.slice(index, index + 2);\n if (/^[\\da-f]{2}$/i.exec(part)) {\n result += String.fromCharCode(parseInt(part, 16));\n index += 2;\n continue;\n }\n }\n }\n result += chr;\n }\n return result;\n}\nfunction warnOnceAboutExpiresCookie(name, expires) {\n warnOnce(\n !expires,\n `The \"${name}\" cookie has an \"expires\" property set. This will cause the expires value to not be updated when the session is committed. Instead, you should set the expires value when serializing the cookie. You can use \\`commitSession(session, { expires })\\` if using a session storage object, or \\`cookie.serialize(\"value\", { expires })\\` if you're using the cookie directly.`\n );\n}\n\n// lib/server-runtime/entry.ts\nfunction createEntryRouteModules(manifest) {\n return Object.keys(manifest).reduce((memo2, routeId) => {\n let route = manifest[routeId];\n if (route) {\n memo2[routeId] = route.module;\n }\n return memo2;\n }, {});\n}\n\n// lib/server-runtime/mode.ts\nvar ServerMode = /* @__PURE__ */ ((ServerMode2) => {\n ServerMode2[\"Development\"] = \"development\";\n ServerMode2[\"Production\"] = \"production\";\n ServerMode2[\"Test\"] = \"test\";\n return ServerMode2;\n})(ServerMode || {});\nfunction isServerMode(value) {\n return value === \"development\" /* Development */ || value === \"production\" /* Production */ || value === \"test\" /* Test */;\n}\n\n// lib/server-runtime/errors.ts\nfunction sanitizeError(error, serverMode) {\n if (error instanceof Error && serverMode !== \"development\" /* Development */) {\n let sanitized = new Error(\"Unexpected Server Error\");\n sanitized.stack = void 0;\n return sanitized;\n }\n return error;\n}\nfunction sanitizeErrors(errors, serverMode) {\n return Object.entries(errors).reduce((acc, [routeId, error]) => {\n return Object.assign(acc, { [routeId]: sanitizeError(error, serverMode) });\n }, {});\n}\nfunction serializeError(error, serverMode) {\n let sanitized = sanitizeError(error, serverMode);\n return {\n message: sanitized.message,\n stack: sanitized.stack\n };\n}\nfunction serializeErrors2(errors, serverMode) {\n if (!errors) return null;\n let entries = Object.entries(errors);\n let serialized = {};\n for (let [key, val] of entries) {\n if (isRouteErrorResponse(val)) {\n serialized[key] = { ...val, __type: \"RouteErrorResponse\" };\n } else if (val instanceof Error) {\n let sanitized = sanitizeError(val, serverMode);\n serialized[key] = {\n message: sanitized.message,\n stack: sanitized.stack,\n __type: \"Error\",\n // If this is a subclass (i.e., ReferenceError), send up the type so we\n // can re-create the same type during hydration. This will only apply\n // in dev mode since all production errors are sanitized to normal\n // Error instances\n ...sanitized.name !== \"Error\" ? {\n __subType: sanitized.name\n } : {}\n };\n } else {\n serialized[key] = val;\n }\n }\n return serialized;\n}\n\n// lib/server-runtime/routeMatching.ts\nfunction matchServerRoutes(routes, pathname, basename) {\n let matches = matchRoutes(\n routes,\n pathname,\n basename\n );\n if (!matches) return null;\n return matches.map((match) => ({\n params: match.params,\n pathname: match.pathname,\n route: match.route\n }));\n}\n\n// lib/server-runtime/data.ts\nasync function callRouteHandler(handler, args) {\n let result = await handler({\n request: stripRoutesParam(stripIndexParam2(args.request)),\n params: args.params,\n context: args.context\n });\n if (isDataWithResponseInit(result) && result.init && result.init.status && isRedirectStatusCode(result.init.status)) {\n throw new Response(null, result.init);\n }\n return result;\n}\nfunction stripIndexParam2(request) {\n let url = new URL(request.url);\n let indexValues = url.searchParams.getAll(\"index\");\n url.searchParams.delete(\"index\");\n let indexValuesToKeep = [];\n for (let indexValue of indexValues) {\n if (indexValue) {\n indexValuesToKeep.push(indexValue);\n }\n }\n for (let toKeep of indexValuesToKeep) {\n url.searchParams.append(\"index\", toKeep);\n }\n let init = {\n method: request.method,\n body: request.body,\n headers: request.headers,\n signal: request.signal\n };\n if (init.body) {\n init.duplex = \"half\";\n }\n return new Request(url.href, init);\n}\nfunction stripRoutesParam(request) {\n let url = new URL(request.url);\n url.searchParams.delete(\"_routes\");\n let init = {\n method: request.method,\n body: request.body,\n headers: request.headers,\n signal: request.signal\n };\n if (init.body) {\n init.duplex = \"half\";\n }\n return new Request(url.href, init);\n}\n\n// lib/server-runtime/invariant.ts\nfunction invariant3(value, message) {\n if (value === false || value === null || typeof value === \"undefined\") {\n console.error(\n \"The following error is a bug in React Router; please open an issue! https://github.com/remix-run/react-router/issues/new/choose\"\n );\n throw new Error(message);\n }\n}\n\n// lib/server-runtime/routes.ts\nfunction groupRoutesByParentId2(manifest) {\n let routes = {};\n Object.values(manifest).forEach((route) => {\n if (route) {\n let parentId = route.parentId || \"\";\n if (!routes[parentId]) {\n routes[parentId] = [];\n }\n routes[parentId].push(route);\n }\n });\n return routes;\n}\nfunction createRoutes(manifest, parentId = \"\", routesByParentId = groupRoutesByParentId2(manifest)) {\n return (routesByParentId[parentId] || []).map((route) => ({\n ...route,\n children: createRoutes(manifest, route.id, routesByParentId)\n }));\n}\nfunction createStaticHandlerDataRoutes(manifest, future, parentId = \"\", routesByParentId = groupRoutesByParentId2(manifest)) {\n return (routesByParentId[parentId] || []).map((route) => {\n let commonRoute = {\n // Always include root due to default boundaries\n hasErrorBoundary: route.id === \"root\" || route.module.ErrorBoundary != null,\n id: route.id,\n path: route.path,\n unstable_middleware: route.module.unstable_middleware,\n // Need to use RR's version in the param typed here to permit the optional\n // context even though we know it'll always be provided in remix\n loader: route.module.loader ? async (args) => {\n if (args.request.headers.has(\"X-React-Router-Prerender-Data\")) {\n const preRenderedData = args.request.headers.get(\n \"X-React-Router-Prerender-Data\"\n );\n let encoded = preRenderedData ? decodeURI(preRenderedData) : preRenderedData;\n invariant3(encoded, \"Missing prerendered data for route\");\n let uint8array = new TextEncoder().encode(encoded);\n let stream = new ReadableStream({\n start(controller) {\n controller.enqueue(uint8array);\n controller.close();\n }\n });\n let decoded = await decodeViaTurboStream(stream, global);\n let data2 = decoded.value;\n invariant3(\n data2 && route.id in data2,\n \"Unable to decode prerendered data\"\n );\n let result = data2[route.id];\n invariant3(\"data\" in result, \"Unable to process prerendered data\");\n return result.data;\n }\n let val = await callRouteHandler(route.module.loader, args);\n return val;\n } : void 0,\n action: route.module.action ? (args) => callRouteHandler(route.module.action, args) : void 0,\n handle: route.module.handle\n };\n return route.index ? {\n index: true,\n ...commonRoute\n } : {\n caseSensitive: route.caseSensitive,\n children: createStaticHandlerDataRoutes(\n manifest,\n future,\n route.id,\n routesByParentId\n ),\n ...commonRoute\n };\n });\n}\n\n// lib/server-runtime/markup.ts\nvar ESCAPE_LOOKUP3 = {\n \"&\": \"\\\\u0026\",\n \">\": \"\\\\u003e\",\n \"<\": \"\\\\u003c\",\n \"\\u2028\": \"\\\\u2028\",\n \"\\u2029\": \"\\\\u2029\"\n};\nvar ESCAPE_REGEX3 = /[&><\\u2028\\u2029]/g;\nfunction escapeHtml2(html) {\n return html.replace(ESCAPE_REGEX3, (match) => ESCAPE_LOOKUP3[match]);\n}\n\n// lib/server-runtime/serverHandoff.ts\nfunction createServerHandoffString(serverHandoff) {\n return escapeHtml2(JSON.stringify(serverHandoff));\n}\n\n// lib/server-runtime/dev.ts\nvar globalDevServerHooksKey = \"__reactRouterDevServerHooks\";\nfunction setDevServerHooks(devServerHooks) {\n globalThis[globalDevServerHooksKey] = devServerHooks;\n}\nfunction getDevServerHooks() {\n return globalThis[globalDevServerHooksKey];\n}\n\n// lib/server-runtime/single-fetch.ts\nimport { encode } from \"turbo-stream\";\n\n// lib/server-runtime/headers.ts\nimport { splitCookiesString } from \"set-cookie-parser\";\nfunction getDocumentHeaders(build, context) {\n let boundaryIdx = context.errors ? context.matches.findIndex((m) => context.errors[m.route.id]) : -1;\n let matches = boundaryIdx >= 0 ? context.matches.slice(0, boundaryIdx + 1) : context.matches;\n let errorHeaders;\n if (boundaryIdx >= 0) {\n let { actionHeaders, actionData, loaderHeaders, loaderData } = context;\n context.matches.slice(boundaryIdx).some((match) => {\n let id = match.route.id;\n if (actionHeaders[id] && (!actionData || !actionData.hasOwnProperty(id))) {\n errorHeaders = actionHeaders[id];\n } else if (loaderHeaders[id] && !loaderData.hasOwnProperty(id)) {\n errorHeaders = loaderHeaders[id];\n }\n return errorHeaders != null;\n });\n }\n return matches.reduce((parentHeaders, match, idx) => {\n let { id } = match.route;\n let route = build.routes[id];\n invariant3(route, `Route with id \"${id}\" not found in build`);\n let routeModule = route.module;\n let loaderHeaders = context.loaderHeaders[id] || new Headers();\n let actionHeaders = context.actionHeaders[id] || new Headers();\n let includeErrorHeaders = errorHeaders != null && idx === matches.length - 1;\n let includeErrorCookies = includeErrorHeaders && errorHeaders !== loaderHeaders && errorHeaders !== actionHeaders;\n if (routeModule.headers == null) {\n let headers2 = new Headers(parentHeaders);\n if (includeErrorCookies) {\n prependCookies(errorHeaders, headers2);\n }\n prependCookies(actionHeaders, headers2);\n prependCookies(loaderHeaders, headers2);\n return headers2;\n }\n let headers = new Headers(\n routeModule.headers ? typeof routeModule.headers === \"function\" ? routeModule.headers({\n loaderHeaders,\n parentHeaders,\n actionHeaders,\n errorHeaders: includeErrorHeaders ? errorHeaders : void 0\n }) : routeModule.headers : void 0\n );\n if (includeErrorCookies) {\n prependCookies(errorHeaders, headers);\n }\n prependCookies(actionHeaders, headers);\n prependCookies(loaderHeaders, headers);\n prependCookies(parentHeaders, headers);\n return headers;\n }, new Headers());\n}\nfunction prependCookies(parentHeaders, childHeaders) {\n let parentSetCookieString = parentHeaders.get(\"Set-Cookie\");\n if (parentSetCookieString) {\n let cookies = splitCookiesString(parentSetCookieString);\n let childCookies = new Set(childHeaders.getSetCookie());\n cookies.forEach((cookie) => {\n if (!childCookies.has(cookie)) {\n childHeaders.append(\"Set-Cookie\", cookie);\n }\n });\n }\n}\n\n// lib/server-runtime/single-fetch.ts\nvar NO_BODY_STATUS_CODES = /* @__PURE__ */ new Set([100, 101, 204, 205, 304]);\nvar SINGLE_FETCH_REDIRECT_STATUS = 202;\nasync function singleFetchAction(build, serverMode, staticHandler, request, handlerUrl, loadContext, handleError) {\n try {\n let respond2 = function(context) {\n let headers = getDocumentHeaders(build, context);\n if (isRedirectStatusCode(context.statusCode) && headers.has(\"Location\")) {\n return generateSingleFetchResponse(request, build, serverMode, {\n result: getSingleFetchRedirect(\n context.statusCode,\n headers,\n build.basename\n ),\n headers,\n status: SINGLE_FETCH_REDIRECT_STATUS\n });\n }\n if (context.errors) {\n Object.values(context.errors).forEach((err) => {\n if (!isRouteErrorResponse(err) || err.error) {\n handleError(err);\n }\n });\n context.errors = sanitizeErrors(context.errors, serverMode);\n }\n let singleFetchResult;\n if (context.errors) {\n singleFetchResult = { error: Object.values(context.errors)[0] };\n } else {\n singleFetchResult = {\n data: Object.values(context.actionData || {})[0]\n };\n }\n return generateSingleFetchResponse(request, build, serverMode, {\n result: singleFetchResult,\n headers,\n status: context.statusCode\n });\n };\n var respond = respond2;\n let handlerRequest = new Request(handlerUrl, {\n method: request.method,\n body: request.body,\n headers: request.headers,\n signal: request.signal,\n ...request.body ? { duplex: \"half\" } : void 0\n });\n let result = await staticHandler.query(handlerRequest, {\n requestContext: loadContext,\n skipLoaderErrorBubbling: true,\n skipRevalidation: true,\n unstable_respond: respond2\n });\n if (!isResponse(result)) {\n result = respond2(result);\n }\n if (isRedirectResponse(result)) {\n return generateSingleFetchResponse(request, build, serverMode, {\n result: getSingleFetchRedirect(\n result.status,\n result.headers,\n build.basename\n ),\n headers: result.headers,\n status: SINGLE_FETCH_REDIRECT_STATUS\n });\n }\n return result;\n } catch (error) {\n handleError(error);\n return generateSingleFetchResponse(request, build, serverMode, {\n result: { error },\n headers: new Headers(),\n status: 500\n });\n }\n}\nasync function singleFetchLoaders(build, serverMode, staticHandler, request, handlerUrl, loadContext, handleError) {\n try {\n let respond2 = function(context) {\n let headers = getDocumentHeaders(build, context);\n if (isRedirectStatusCode(context.statusCode) && headers.has(\"Location\")) {\n return generateSingleFetchResponse(request, build, serverMode, {\n result: {\n [SingleFetchRedirectSymbol]: getSingleFetchRedirect(\n context.statusCode,\n headers,\n build.basename\n )\n },\n headers,\n status: SINGLE_FETCH_REDIRECT_STATUS\n });\n }\n if (context.errors) {\n Object.values(context.errors).forEach((err) => {\n if (!isRouteErrorResponse(err) || err.error) {\n handleError(err);\n }\n });\n context.errors = sanitizeErrors(context.errors, serverMode);\n }\n let results = {};\n let loadedMatches = new Set(\n context.matches.filter(\n (m) => loadRouteIds ? loadRouteIds.has(m.route.id) : m.route.loader != null\n ).map((m) => m.route.id)\n );\n if (context.errors) {\n for (let [id, error] of Object.entries(context.errors)) {\n results[id] = { error };\n }\n }\n for (let [id, data2] of Object.entries(context.loaderData)) {\n if (!(id in results) && loadedMatches.has(id)) {\n results[id] = { data: data2 };\n }\n }\n return generateSingleFetchResponse(request, build, serverMode, {\n result: results,\n headers,\n status: context.statusCode\n });\n };\n var respond = respond2;\n let handlerRequest = new Request(handlerUrl, {\n headers: request.headers,\n signal: request.signal\n });\n let routesParam = new URL(request.url).searchParams.get(\"_routes\");\n let loadRouteIds = routesParam ? new Set(routesParam.split(\",\")) : null;\n let result = await staticHandler.query(handlerRequest, {\n requestContext: loadContext,\n filterMatchesToLoad: (m) => !loadRouteIds || loadRouteIds.has(m.route.id),\n skipLoaderErrorBubbling: true,\n unstable_respond: respond2\n });\n if (!isResponse(result)) {\n result = respond2(result);\n }\n if (isRedirectResponse(result)) {\n return generateSingleFetchResponse(request, build, serverMode, {\n result: {\n [SingleFetchRedirectSymbol]: getSingleFetchRedirect(\n result.status,\n result.headers,\n build.basename\n )\n },\n headers: result.headers,\n status: SINGLE_FETCH_REDIRECT_STATUS\n });\n }\n return result;\n } catch (error) {\n handleError(error);\n return generateSingleFetchResponse(request, build, serverMode, {\n result: { root: { error } },\n headers: new Headers(),\n status: 500\n });\n }\n}\nfunction generateSingleFetchResponse(request, build, serverMode, {\n result,\n headers,\n status\n}) {\n let resultHeaders = new Headers(headers);\n resultHeaders.set(\"X-Remix-Response\", \"yes\");\n if (NO_BODY_STATUS_CODES.has(status)) {\n return new Response(null, { status, headers: resultHeaders });\n }\n resultHeaders.set(\"Content-Type\", \"text/x-script\");\n return new Response(\n encodeViaTurboStream(\n result,\n request.signal,\n build.entry.module.streamTimeout,\n serverMode\n ),\n {\n status: status || 200,\n headers: resultHeaders\n }\n );\n}\nfunction getSingleFetchRedirect(status, headers, basename) {\n let redirect2 = headers.get(\"Location\");\n if (basename) {\n redirect2 = stripBasename(redirect2, basename) || redirect2;\n }\n return {\n redirect: redirect2,\n status,\n revalidate: (\n // Technically X-Remix-Revalidate isn't needed here - that was an implementation\n // detail of ?_data requests as our way to tell the front end to revalidate when\n // we didn't have a response body to include that information in.\n // With single fetch, we tell the front end via this revalidate boolean field.\n // However, we're respecting it for now because it may be something folks have\n // used in their own responses\n // TODO(v3): Consider removing or making this official public API\n headers.has(\"X-Remix-Revalidate\") || headers.has(\"Set-Cookie\")\n ),\n reload: headers.has(\"X-Remix-Reload-Document\"),\n replace: headers.has(\"X-Remix-Replace\")\n };\n}\nfunction encodeViaTurboStream(data2, requestSignal, streamTimeout, serverMode) {\n let controller = new AbortController();\n let timeoutId = setTimeout(\n () => controller.abort(new Error(\"Server Timeout\")),\n typeof streamTimeout === \"number\" ? streamTimeout : 4950\n );\n requestSignal.addEventListener(\"abort\", () => clearTimeout(timeoutId));\n return encode(data2, {\n signal: controller.signal,\n plugins: [\n (value) => {\n if (value instanceof Error) {\n let { name, message, stack } = serverMode === \"production\" /* Production */ ? sanitizeError(value, serverMode) : value;\n return [\"SanitizedError\", name, message, stack];\n }\n if (value instanceof ErrorResponseImpl) {\n let { data: data3, status, statusText } = value;\n return [\"ErrorResponse\", data3, status, statusText];\n }\n if (value && typeof value === \"object\" && SingleFetchRedirectSymbol in value) {\n return [\"SingleFetchRedirect\", value[SingleFetchRedirectSymbol]];\n }\n }\n ],\n postPlugins: [\n (value) => {\n if (!value) return;\n if (typeof value !== \"object\") return;\n return [\n \"SingleFetchClassInstance\",\n Object.fromEntries(Object.entries(value))\n ];\n },\n () => [\"SingleFetchFallback\"]\n ]\n });\n}\n\n// lib/server-runtime/server.ts\nfunction derive(build, mode) {\n let routes = createRoutes(build.routes);\n let dataRoutes = createStaticHandlerDataRoutes(build.routes, build.future);\n let serverMode = isServerMode(mode) ? mode : \"production\" /* Production */;\n let staticHandler = createStaticHandler(dataRoutes, {\n basename: build.basename\n });\n let errorHandler = build.entry.module.handleError || ((error, { request }) => {\n if (serverMode !== \"test\" /* Test */ && !request.signal.aborted) {\n console.error(\n // @ts-expect-error This is \"private\" from users but intended for internal use\n isRouteErrorResponse(error) && error.error ? error.error : error\n );\n }\n });\n return {\n routes,\n dataRoutes,\n serverMode,\n staticHandler,\n errorHandler\n };\n}\nvar createRequestHandler = (build, mode) => {\n let _build;\n let routes;\n let serverMode;\n let staticHandler;\n let errorHandler;\n return async function requestHandler(request, initialContext) {\n _build = typeof build === \"function\" ? await build() : build;\n let loadContext = _build.future.unstable_middleware ? new unstable_RouterContextProvider(\n initialContext\n ) : initialContext || {};\n if (typeof build === \"function\") {\n let derived = derive(_build, mode);\n routes = derived.routes;\n serverMode = derived.serverMode;\n staticHandler = derived.staticHandler;\n errorHandler = derived.errorHandler;\n } else if (!routes || !serverMode || !staticHandler || !errorHandler) {\n let derived = derive(_build, mode);\n routes = derived.routes;\n serverMode = derived.serverMode;\n staticHandler = derived.staticHandler;\n errorHandler = derived.errorHandler;\n }\n let url = new URL(request.url);\n let normalizedBasename = _build.basename || \"/\";\n let normalizedPath = url.pathname;\n if (stripBasename(normalizedPath, normalizedBasename) === \"/_root.data\") {\n normalizedPath = normalizedBasename;\n } else if (normalizedPath.endsWith(\".data\")) {\n normalizedPath = normalizedPath.replace(/\\.data$/, \"\");\n }\n if (stripBasename(normalizedPath, normalizedBasename) !== \"/\" && normalizedPath.endsWith(\"/\")) {\n normalizedPath = normalizedPath.slice(0, -1);\n }\n let params = {};\n let handleError = (error) => {\n if (mode === \"development\" /* Development */) {\n getDevServerHooks()?.processRequestError?.(error);\n }\n errorHandler(error, {\n context: loadContext,\n params,\n request\n });\n };\n if (!_build.ssr) {\n if (_build.prerender.length === 0) {\n request.headers.set(\"X-React-Router-SPA-Mode\", \"yes\");\n } else if (!_build.prerender.includes(normalizedPath) && !_build.prerender.includes(normalizedPath + \"/\")) {\n if (url.pathname.endsWith(\".data\")) {\n errorHandler(\n new ErrorResponseImpl(\n 404,\n \"Not Found\",\n `Refusing to SSR the path \\`${normalizedPath}\\` because \\`ssr:false\\` is set and the path is not included in the \\`prerender\\` config, so in production the path will be a 404.`\n ),\n {\n context: loadContext,\n params,\n request\n }\n );\n return new Response(\"Not Found\", {\n status: 404,\n statusText: \"Not Found\"\n });\n } else {\n request.headers.set(\"X-React-Router-SPA-Mode\", \"yes\");\n }\n }\n }\n let manifestUrl = `${normalizedBasename}/__manifest`.replace(/\\/+/g, \"/\");\n if (url.pathname === manifestUrl) {\n try {\n let res = await handleManifestRequest(_build, routes, url);\n return res;\n } catch (e) {\n handleError(e);\n return new Response(\"Unknown Server Error\", { status: 500 });\n }\n }\n let matches = matchServerRoutes(routes, url.pathname, _build.basename);\n if (matches && matches.length > 0) {\n Object.assign(params, matches[0].params);\n }\n let response;\n if (url.pathname.endsWith(\".data\")) {\n let handlerUrl = new URL(request.url);\n handlerUrl.pathname = normalizedPath;\n let singleFetchMatches = matchServerRoutes(\n routes,\n handlerUrl.pathname,\n _build.basename\n );\n response = await handleSingleFetchRequest(\n serverMode,\n _build,\n staticHandler,\n request,\n handlerUrl,\n loadContext,\n handleError\n );\n if (_build.entry.module.handleDataRequest) {\n response = await _build.entry.module.handleDataRequest(response, {\n context: loadContext,\n params: singleFetchMatches ? singleFetchMatches[0].params : {},\n request\n });\n if (isRedirectResponse(response)) {\n let result = getSingleFetchRedirect(\n response.status,\n response.headers,\n _build.basename\n );\n if (request.method === \"GET\") {\n result = {\n [SingleFetchRedirectSymbol]: result\n };\n }\n let headers = new Headers(response.headers);\n headers.set(\"Content-Type\", \"text/x-script\");\n return new Response(\n encodeViaTurboStream(\n result,\n request.signal,\n _build.entry.module.streamTimeout,\n serverMode\n ),\n {\n status: SINGLE_FETCH_REDIRECT_STATUS,\n headers\n }\n );\n }\n }\n } else if (!request.headers.has(\"X-React-Router-SPA-Mode\") && matches && matches[matches.length - 1].route.module.default == null && matches[matches.length - 1].route.module.ErrorBoundary == null) {\n response = await handleResourceRequest(\n serverMode,\n _build,\n staticHandler,\n matches.slice(-1)[0].route.id,\n request,\n loadContext,\n handleError\n );\n } else {\n let { pathname } = url;\n let criticalCss = void 0;\n if (_build.unstable_getCriticalCss) {\n criticalCss = await _build.unstable_getCriticalCss({ pathname });\n } else if (mode === \"development\" /* Development */ && getDevServerHooks()?.getCriticalCss) {\n criticalCss = await getDevServerHooks()?.getCriticalCss?.(pathname);\n }\n response = await handleDocumentRequest(\n serverMode,\n _build,\n staticHandler,\n request,\n loadContext,\n handleError,\n criticalCss\n );\n }\n if (request.method === \"HEAD\") {\n return new Response(null, {\n headers: response.headers,\n status: response.status,\n statusText: response.statusText\n });\n }\n return response;\n };\n};\nasync function handleManifestRequest(build, routes, url) {\n if (build.assets.version !== url.searchParams.get(\"version\")) {\n return new Response(null, {\n status: 204,\n headers: {\n \"X-Remix-Reload-Document\": \"true\"\n }\n });\n }\n let patches = {};\n if (url.searchParams.has(\"p\")) {\n let paths = /* @__PURE__ */ new Set();\n url.searchParams.getAll(\"p\").forEach((path) => {\n if (!path.startsWith(\"/\")) {\n path = `/${path}`;\n }\n let segments = path.split(\"/\").slice(1);\n segments.forEach((_, i) => {\n let partialPath = segments.slice(0, i + 1).join(\"/\");\n paths.add(`/${partialPath}`);\n });\n });\n for (let path of paths) {\n let matches = matchServerRoutes(routes, path, build.basename);\n if (matches) {\n for (let match of matches) {\n let routeId = match.route.id;\n let route = build.assets.routes[routeId];\n if (route) {\n patches[routeId] = route;\n }\n }\n }\n }\n return Response.json(patches, {\n headers: {\n \"Cache-Control\": \"public, max-age=31536000, immutable\"\n }\n });\n }\n return new Response(\"Invalid Request\", { status: 400 });\n}\nasync function handleSingleFetchRequest(serverMode, build, staticHandler, request, handlerUrl, loadContext, handleError) {\n let response = request.method !== \"GET\" ? await singleFetchAction(\n build,\n serverMode,\n staticHandler,\n request,\n handlerUrl,\n loadContext,\n handleError\n ) : await singleFetchLoaders(\n build,\n serverMode,\n staticHandler,\n request,\n handlerUrl,\n loadContext,\n handleError\n );\n return response;\n}\nasync function handleDocumentRequest(serverMode, build, staticHandler, request, loadContext, handleError, criticalCss) {\n let isSpaMode = request.headers.has(\"X-React-Router-SPA-Mode\");\n try {\n let response = await staticHandler.query(request, {\n requestContext: loadContext,\n unstable_respond: build.future.unstable_middleware ? (ctx) => renderHtml(ctx, isSpaMode) : void 0\n });\n return isResponse(response) ? response : renderHtml(response, isSpaMode);\n } catch (error) {\n handleError(error);\n return new Response(null, { status: 500 });\n }\n async function renderHtml(context, isSpaMode2) {\n if (isResponse(context)) {\n return context;\n }\n let headers = getDocumentHeaders(build, context);\n if (NO_BODY_STATUS_CODES.has(context.statusCode)) {\n return new Response(null, { status: context.statusCode, headers });\n }\n if (context.errors) {\n Object.values(context.errors).forEach((err) => {\n if (!isRouteErrorResponse(err) || err.error) {\n handleError(err);\n }\n });\n context.errors = sanitizeErrors(context.errors, serverMode);\n }\n let state = {\n loaderData: context.loaderData,\n actionData: context.actionData,\n errors: serializeErrors2(context.errors, serverMode)\n };\n let entryContext = {\n manifest: build.assets,\n routeModules: createEntryRouteModules(build.routes),\n staticHandlerContext: context,\n criticalCss,\n serverHandoffString: createServerHandoffString({\n basename: build.basename,\n criticalCss,\n future: build.future,\n ssr: build.ssr,\n isSpaMode: isSpaMode2\n }),\n serverHandoffStream: encodeViaTurboStream(\n state,\n request.signal,\n build.entry.module.streamTimeout,\n serverMode\n ),\n renderMeta: {},\n future: build.future,\n ssr: build.ssr,\n isSpaMode: isSpaMode2,\n serializeError: (err) => serializeError(err, serverMode)\n };\n let handleDocumentRequestFunction = build.entry.module.default;\n try {\n return await handleDocumentRequestFunction(\n request,\n context.statusCode,\n headers,\n entryContext,\n loadContext\n );\n } catch (error) {\n handleError(error);\n let errorForSecondRender = error;\n if (isResponse(error)) {\n try {\n let data2 = await unwrapResponse(error);\n errorForSecondRender = new ErrorResponseImpl(\n error.status,\n error.statusText,\n data2\n );\n } catch (e) {\n }\n }\n context = getStaticContextFromError(\n staticHandler.dataRoutes,\n context,\n errorForSecondRender\n );\n if (context.errors) {\n context.errors = sanitizeErrors(context.errors, serverMode);\n }\n let state2 = {\n loaderData: context.loaderData,\n actionData: context.actionData,\n errors: serializeErrors2(context.errors, serverMode)\n };\n entryContext = {\n ...entryContext,\n staticHandlerContext: context,\n serverHandoffString: createServerHandoffString({\n basename: build.basename,\n future: build.future,\n ssr: build.ssr,\n isSpaMode: isSpaMode2\n }),\n serverHandoffStream: encodeViaTurboStream(\n state2,\n request.signal,\n build.entry.module.streamTimeout,\n serverMode\n ),\n renderMeta: {}\n };\n try {\n return await handleDocumentRequestFunction(\n request,\n context.statusCode,\n headers,\n entryContext,\n loadContext\n );\n } catch (error2) {\n handleError(error2);\n return returnLastResortErrorResponse(error2, serverMode);\n }\n }\n }\n}\nasync function handleResourceRequest(serverMode, build, staticHandler, routeId, request, loadContext, handleError) {\n try {\n let response = await staticHandler.queryRoute(request, {\n routeId,\n requestContext: loadContext,\n unstable_respond: build.future.unstable_middleware ? (ctx) => ctx : void 0\n });\n if (isResponse(response)) {\n return response;\n }\n if (typeof response === \"string\") {\n return new Response(response);\n }\n return Response.json(response);\n } catch (error) {\n if (isResponse(error)) {\n error.headers.set(\"X-Remix-Catch\", \"yes\");\n return error;\n }\n if (isRouteErrorResponse(error)) {\n if (error) {\n handleError(error);\n }\n return errorResponseToJson(error, serverMode);\n }\n if (error instanceof Error && error.message === \"Expected a response from queryRoute\") {\n let newError = new Error(\n \"Expected a Response to be returned from resource route handler\"\n );\n handleError(newError);\n return returnLastResortErrorResponse(newError, serverMode);\n }\n handleError(error);\n return returnLastResortErrorResponse(error, serverMode);\n }\n}\nfunction errorResponseToJson(errorResponse, serverMode) {\n return Response.json(\n serializeError(\n // @ts-expect-error This is \"private\" from users but intended for internal use\n errorResponse.error || new Error(\"Unexpected Server Error\"),\n serverMode\n ),\n {\n status: errorResponse.status,\n statusText: errorResponse.statusText,\n headers: {\n \"X-Remix-Error\": \"yes\"\n }\n }\n );\n}\nfunction returnLastResortErrorResponse(error, serverMode) {\n let message = \"Unexpected Server Error\";\n if (serverMode !== \"production\" /* Production */) {\n message += `\n\n${String(error)}`;\n }\n return new Response(message, {\n status: 500,\n headers: {\n \"Content-Type\": \"text/plain\"\n }\n });\n}\nfunction unwrapResponse(response) {\n let contentType = response.headers.get(\"Content-Type\");\n return contentType && /\\bapplication\\/json\\b/.test(contentType) ? response.body == null ? null : response.json() : response.text();\n}\n\n// lib/server-runtime/sessions.ts\nfunction flash(name) {\n return `__flash_${name}__`;\n}\nvar createSession = (initialData = {}, id = \"\") => {\n let map = new Map(Object.entries(initialData));\n return {\n get id() {\n return id;\n },\n get data() {\n return Object.fromEntries(map);\n },\n has(name) {\n return map.has(name) || map.has(flash(name));\n },\n get(name) {\n if (map.has(name)) return map.get(name);\n let flashName = flash(name);\n if (map.has(flashName)) {\n let value = map.get(flashName);\n map.delete(flashName);\n return value;\n }\n return void 0;\n },\n set(name, value) {\n map.set(name, value);\n },\n flash(name, value) {\n map.set(flash(name), value);\n },\n unset(name) {\n map.delete(name);\n }\n };\n};\nvar isSession = (object) => {\n return object != null && typeof object.id === \"string\" && typeof object.data !== \"undefined\" && typeof object.has === \"function\" && typeof object.get === \"function\" && typeof object.set === \"function\" && typeof object.flash === \"function\" && typeof object.unset === \"function\";\n};\nfunction createSessionStorage({\n cookie: cookieArg,\n createData,\n readData,\n updateData,\n deleteData\n}) {\n let cookie = isCookie(cookieArg) ? cookieArg : createCookie(cookieArg?.name || \"__session\", cookieArg);\n warnOnceAboutSigningSessionCookie(cookie);\n return {\n async getSession(cookieHeader, options) {\n let id = cookieHeader && await cookie.parse(cookieHeader, options);\n let data2 = id && await readData(id);\n return createSession(data2 || {}, id || \"\");\n },\n async commitSession(session, options) {\n let { id, data: data2 } = session;\n let expires = options?.maxAge != null ? new Date(Date.now() + options.maxAge * 1e3) : options?.expires != null ? options.expires : cookie.expires;\n if (id) {\n await updateData(id, data2, expires);\n } else {\n id = await createData(data2, expires);\n }\n return cookie.serialize(id, options);\n },\n async destroySession(session, options) {\n await deleteData(session.id);\n return cookie.serialize(\"\", {\n ...options,\n maxAge: void 0,\n expires: /* @__PURE__ */ new Date(0)\n });\n }\n };\n}\nfunction warnOnceAboutSigningSessionCookie(cookie) {\n warnOnce(\n cookie.isSigned,\n `The \"${cookie.name}\" cookie is not signed, but session cookies should be signed to prevent tampering on the client before they are sent back to the server. See https://remix.run/utils/cookies#signing-cookies for more information.`\n );\n}\n\n// lib/server-runtime/sessions/cookieStorage.ts\nfunction createCookieSessionStorage({ cookie: cookieArg } = {}) {\n let cookie = isCookie(cookieArg) ? cookieArg : createCookie(cookieArg?.name || \"__session\", cookieArg);\n warnOnceAboutSigningSessionCookie(cookie);\n return {\n async getSession(cookieHeader, options) {\n return createSession(\n cookieHeader && await cookie.parse(cookieHeader, options) || {}\n );\n },\n async commitSession(session, options) {\n let serializedCookie = await cookie.serialize(session.data, options);\n if (serializedCookie.length > 4096) {\n throw new Error(\n \"Cookie length will exceed browser maximum. Length: \" + serializedCookie.length\n );\n }\n return serializedCookie;\n },\n async destroySession(_session, options) {\n return cookie.serialize(\"\", {\n ...options,\n maxAge: void 0,\n expires: /* @__PURE__ */ new Date(0)\n });\n }\n };\n}\n\n// lib/server-runtime/sessions/memoryStorage.ts\nfunction createMemorySessionStorage({ cookie } = {}) {\n let map = /* @__PURE__ */ new Map();\n return createSessionStorage({\n cookie,\n async createData(data2, expires) {\n let id = Math.random().toString(36).substring(2, 10);\n map.set(id, { data: data2, expires });\n return id;\n },\n async readData(id) {\n if (map.has(id)) {\n let { data: data2, expires } = map.get(id);\n if (!expires || expires > /* @__PURE__ */ new Date()) {\n return data2;\n }\n if (expires) map.delete(id);\n }\n return null;\n },\n async updateData(id, data2, expires) {\n map.set(id, { data: data2, expires });\n },\n async deleteData(id) {\n map.delete(id);\n }\n });\n}\n\n// lib/href.ts\nfunction href(path, ...args) {\n let params = args[0];\n return path.split(\"/\").map((segment) => {\n const match = segment.match(/^:([\\w-]+)(\\?)?/);\n if (!match) return segment;\n const param = match[1];\n const value = params ? params[param] : void 0;\n const isRequired = match[2] === void 0;\n if (isRequired && value === void 0) {\n throw Error(\n `Path '${path}' requires param '${param}' but it was not provided`\n );\n }\n return value;\n }).filter((segment) => segment !== void 0).join(\"/\");\n}\n\n// lib/dom/ssr/errors.ts\nfunction deserializeErrors2(errors) {\n if (!errors) return null;\n let entries = Object.entries(errors);\n let serialized = {};\n for (let [key, val] of entries) {\n if (val && val.__type === \"RouteErrorResponse\") {\n serialized[key] = new ErrorResponseImpl(\n val.status,\n val.statusText,\n val.data,\n val.internal === true\n );\n } else if (val && val.__type === \"Error\") {\n if (val.__subType) {\n let ErrorConstructor = window[val.__subType];\n if (typeof ErrorConstructor === \"function\") {\n try {\n let error = new ErrorConstructor(val.message);\n error.stack = val.stack;\n serialized[key] = error;\n } catch (e) {\n }\n }\n }\n if (serialized[key] == null) {\n let error = new Error(val.message);\n error.stack = val.stack;\n serialized[key] = error;\n }\n } else {\n serialized[key] = val;\n }\n }\n return serialized;\n}\n\nexport {\n Action,\n createBrowserHistory,\n invariant,\n createPath,\n parsePath,\n unstable_createContext,\n unstable_RouterContextProvider,\n matchRoutes,\n generatePath,\n matchPath,\n resolvePath,\n data,\n redirect,\n redirectDocument,\n replace,\n ErrorResponseImpl,\n isRouteErrorResponse,\n IDLE_NAVIGATION,\n IDLE_FETCHER,\n IDLE_BLOCKER,\n createRouter,\n DataRouterContext,\n DataRouterStateContext,\n ViewTransitionContext,\n FetchersContext,\n NavigationContext,\n LocationContext,\n RouteContext,\n useHref,\n useInRouterContext,\n useLocation,\n useNavigationType,\n useMatch,\n useNavigate,\n useOutletContext,\n useOutlet,\n useParams,\n useResolvedPath,\n useRoutes,\n useNavigation,\n useRevalidator,\n useMatches,\n useLoaderData,\n useRouteLoaderData,\n useActionData,\n useRouteError,\n useAsyncValue,\n useAsyncError,\n useBlocker,\n mapRouteProperties,\n createMemoryRouter,\n RouterProvider,\n MemoryRouter,\n Navigate,\n Outlet,\n Route,\n Router,\n Routes,\n Await,\n createRoutesFromChildren,\n createRoutesFromElements,\n renderMatches,\n createSearchParams,\n SingleFetchRedirectSymbol,\n getSingleFetchDataStrategy,\n decodeViaTurboStream,\n RemixErrorBoundary,\n createClientRoutesWithHMRRevalidationOptOut,\n createClientRoutes,\n shouldHydrateRouteLoader,\n getPatchRoutesOnNavigationFunction,\n useFogOFWarDiscovery,\n FrameworkContext,\n Links,\n PrefetchPageLinks,\n Meta,\n Scripts,\n createBrowserRouter,\n createHashRouter,\n BrowserRouter,\n HashRouter,\n HistoryRouter,\n Link,\n NavLink,\n Form,\n ScrollRestoration,\n useLinkClickHandler,\n useSearchParams,\n useSubmit,\n useFormAction,\n useFetcher,\n useFetchers,\n useScrollRestoration,\n useBeforeUnload,\n usePrompt,\n useViewTransitionState,\n StaticRouter,\n StaticRouterProvider,\n createStaticHandler2 as createStaticHandler,\n createStaticRouter,\n ServerRouter,\n createRoutesStub,\n createCookie,\n isCookie,\n ServerMode,\n setDevServerHooks,\n createRequestHandler,\n createSession,\n isSession,\n createSessionStorage,\n createCookieSessionStorage,\n createMemorySessionStorage,\n href,\n deserializeErrors2 as deserializeErrors\n};\n","import React from 'react';\nimport { Entity, FilterDefinition, FiltersValues } from '../types';\nimport { FilterEntry } from './filterEntry';\n\ninterface FilterGroupComponentProps {\n code: string;\n label: string;\n definitions: FilterDefinition[];\n values: FiltersValues;\n onChange: (name: string, values: Entity[]) => void;\n getIsDisabled: (definitionName: string) => boolean;\n}\n\nfunction FilterGroups(props: FilterGroupComponentProps) {\n if (props.definitions.length === 0) {\n return null;\n }\n\n return (\n <>\n {props.definitions.map(def => (\n <FilterEntry\n key={def.name}\n definition={def}\n values={props.values[def.name]}\n disabled={props.getIsDisabled(def.name)}\n onChange={props.onChange}\n />\n ))}\n </>\n );\n}\n\nexport { FilterGroups };\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./filterGroupContainer.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./filterGroupContainer.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from 'react';\nimport { Entity, FiltersGrouped, FiltersValues } from '../types';\nimport { containers } from '@ecosystem/newron-design-system';\nimport { FilterGroups } from './filterGroups';\nimport './filterGroupContainer.css';\n\ninterface FilterGroupContainerProps {\n grouped: FiltersGrouped[];\n values: FiltersValues;\n onChange: (name: string, values: Entity[]) => void;\n getIsDisabled: (definitionName: string) => boolean;\n}\n\nconst { Accordion } = containers;\n\nfunction FilterGroupContainer({ grouped, values, onChange, getIsDisabled }: FilterGroupContainerProps) {\n return (\n <div className=\"mb-6\">\n <Accordion iconRight={true} flushAlign={true}>\n {grouped.map(group => (\n <Accordion.Item key={group.code} title={group.label}>\n <FilterGroups\n code={group.code}\n label={group.label}\n definitions={group.definitions}\n values={values}\n onChange={onChange}\n getIsDisabled={getIsDisabled}\n />\n </Accordion.Item>\n ))}\n </Accordion>\n </div>\n );\n}\n\nexport { FilterGroupContainer };\n","import React, { useMemo } from 'react';\nimport { Entity, FilterSections, FiltersValues } from '../types';\nimport { FilterEntry } from './filterEntry';\nimport { FilterGroupContainer } from './filterGroupContainer';\nimport { filterByHierarchy } from './utils';\n\ninterface FilterSectionComponentProps {\n section: FilterSections;\n values: FiltersValues;\n onChange: (name: string, values: Entity[]) => void;\n getIsDisabled: (definitionName: string) => boolean;\n}\n\nfunction FilterSection({ section, onChange, getIsDisabled, values }: FilterSectionComponentProps) {\n // Filter section definitions dynamically for hierarchy*\n const filteredDefinitions = useMemo(() => {\n let filteredOptionsMap: Record<string, any> = {};\n return section.ungrouped.definitions.map(def => {\n if (def?.hierarchy?.enabled) {\n const filteredOptions = filterByHierarchy(\n def.hierarchy.name,\n def.hierarchy.level,\n def.hierarchy.parent,\n def.options || [],\n filteredOptionsMap,\n values\n );\n return { ...def, options: filteredOptions };\n }\n return def;\n });\n }, [values, section]);\n\n return (\n <>\n <h3 className={`mb-6 font-normal ${section.label === 'Features' && 'border-t border-light pt-4'}`}>\n {section.label}\n </h3>\n {section?.grouped?.length > 0 && (\n <FilterGroupContainer\n grouped={section.grouped}\n values={values}\n onChange={onChange}\n getIsDisabled={getIsDisabled}\n />\n )}\n {filteredDefinitions.length > 0 &&\n filteredDefinitions.map(def => (\n <FilterEntry\n key={def.name}\n definition={def}\n values={values[def.name]}\n disabled={getIsDisabled(def.name)}\n onChange={onChange}\n />\n ))}\n </>\n );\n}\n\nexport { FilterSection };\n","import { useCallback, useState } from 'react';\nimport { SavedFilter } from '../types';\nimport { FilterContext, getFilters, useLogging } from '@ecosystem/newron-client-lib';\n\nexport enum ErrorType {\n FAILED_TO_LOAD = 'FAILED_TO_LOAD',\n}\n\nexport type SavedFiltersReturnType = {\n /** saved filters context */\n filterContext: FilterContext;\n /** saved filters, undefined until fetch is called */\n savedFilters: SavedFilter[];\n /** function to trigger loading of saved filters */\n fetch: () => Promise<void>;\n /** if filters are loading */\n loading: boolean;\n /** if there was an error */\n error?: ErrorType;\n};\n\nexport const useSavedFilters = (filterContext: FilterContext) => {\n const { error: logError } = useLogging();\n\n const [savedFilters, setSavedFilters] = useState<SavedFilter[]>(undefined);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<ErrorType>();\n\n const loadFilters = useCallback(async () => {\n setLoading(true);\n try {\n const savedFilters = await getFilters<SavedFilter>(filterContext);\n setSavedFilters(savedFilters);\n setError(null);\n } catch (err) {\n logError(err);\n setError(ErrorType.FAILED_TO_LOAD);\n } finally {\n setLoading(false);\n }\n }, [logError, filterContext]);\n\n return {\n filterContext,\n fetch: loadFilters,\n savedFilters,\n loading,\n error,\n };\n};\n","import React, { ReactNode, createContext, useContext, useState } from 'react';\nimport { useSavedFilters, SavedFiltersReturnType } from './savedFilters.hook';\nimport { FilterContext } from '@ecosystem/newron-client-lib';\n\ntype SavedFiltersContextType = SavedFiltersReturnType & {\n newFilterId: string;\n setNewFilterId: (filterId: string) => void;\n};\n\nconst savedFiltersContext = createContext<SavedFiltersContextType>(null);\n\ntype SavedFiltersProviderProps = {\n filterContext: FilterContext;\n children: ReactNode;\n};\n\nfunction SavedFiltersProvider({ filterContext, children }: SavedFiltersProviderProps) {\n const currentContext = useSavedFilters(filterContext);\n const [newFilterId, setNewFilterId] = useState<string>();\n\n return (\n <savedFiltersContext.Provider value={{ ...currentContext, newFilterId, setNewFilterId }}>\n {children}\n </savedFiltersContext.Provider>\n );\n}\n\nfunction useSavedFiltersContext() {\n const context = useContext(savedFiltersContext);\n\n return { saveFilterEnabled: !!context, ...(context ?? {}) };\n}\n\nexport { SavedFiltersProvider, useSavedFiltersContext };\n","import React, { useEffect, useState } from 'react';\nimport {\n ApplyAction,\n DeleteAction,\n DeleteFilterModal,\n EmptyFilters,\n FilterCard,\n ShareAction,\n ShareFilterModal,\n canShareFilter,\n deleteFilter,\n} from '@ecosystem/newron-client-lib';\nimport { feedbackV2, overlays } from '@ecosystem/newron-design-system';\nimport { Loading } from '../design/loading/Loading';\nimport { ContextManager } from '../context/manager';\nimport { mapDefinitions } from '../export/utils/mapDefinitions';\nimport { Context, Entity, FilterDefinition, SavedFilter } from '../types';\nimport { useSavedFiltersContext } from './savedFilters.provider';\nimport { getJoinedLabel, getFilterEventDetails } from './utils';\nimport { userClient } from '../client';\nimport { useAnalyticsContext } from '../analytics/analytics.provider';\n\nconst FAILED_TO_LOAD_ALERT =\n 'There has been an error loading saved filters. Please refresh your browser to try again. If this issue persists, please contact your GfK representative.';\nconst REGION_KEYWORD = 'region';\n\nconst { Alert } = feedbackV2;\nconst { Toast } = overlays;\n\ntype FilterCriteria = Entity & { name: string; isApplicable: boolean; sortIdx: number };\ntype SortableFilterDefinition = FilterDefinition & { sortIdx: number };\n\nconst mapToFilterCriteria = (\n filter: SavedFilter,\n definitionsMap: Record<string, SortableFilterDefinition>\n): FilterCriteria[] => {\n if (!filter.data.values) {\n return [];\n }\n const lastIdx = Object.keys(definitionsMap).length;\n return Object.keys(filter.data.values)\n .map(name => {\n const definition = definitionsMap?.[name];\n if (definition) {\n return {\n label: definition.label,\n name: name,\n sortIdx: definition.sortIdx,\n isApplicable: true,\n value: getJoinedLabel(filter.data.values[name]),\n };\n } else {\n const cachedName = filter.data.definitionLabels?.find(label => label.value === name);\n return {\n label: cachedName?.label || name,\n name: name,\n sortIdx: lastIdx,\n isApplicable: false,\n value: getJoinedLabel(filter.data.values[name]),\n };\n }\n })\n .sort((a, b) => a.sortIdx - b.sortIdx);\n};\n\nconst getRegionFilterOptionsValuesByKey = (key: string) => {\n const allFilters = ContextManager.getInstance().get().filters.sections;\n // combine all ungrouped definition arrays in allFilters\n const filters = allFilters.reduce((acc, section) => {\n const ungrouped = section.ungrouped.definitions;\n acc.push(...ungrouped);\n return acc;\n }, []);\n\n if (!filters || !filters.length) {\n return [];\n }\n\n const regionFilter = filters.find(def => def.name === key);\n\n if (!regionFilter) {\n return [];\n }\n\n const regionOptions = regionFilter.options;\n const regionOptionsValues = (regionOptions || []).map(entity => entity.value);\n return regionOptionsValues;\n};\n\nfunction SavedFilters() {\n const { savedFilters, loading, error, fetch, newFilterId, setNewFilterId } = useSavedFiltersContext();\n const [deleteModalOpen, setDeleteModalOpen] = useState(false);\n const [shareModalOpen, setShareModalOpen] = useState(false);\n const [selectedFilter, setSelectedFilter] = useState<SavedFilter>();\n const [definitionsMap, setDefinitionsMap] = useState<Record<string, SortableFilterDefinition>>();\n const [showNoNewFilterToast, setShowNoNewFilterToast] = useState(false);\n const { trackPageEvent } = useAnalyticsContext();\n\n const contextSubscriber = (context: Context) => {\n if (!context?.filters?.sections?.length) {\n return;\n }\n\n const sections = context.filters.sections;\n const definitionsEntries = mapDefinitions(sections).map((def, idx) => [def.name, { ...def, sortIdx: idx }]);\n const definitionsMap = Object.fromEntries(definitionsEntries);\n setDefinitionsMap(definitionsMap);\n };\n\n useEffect(() => {\n fetch();\n }, [fetch]);\n\n useEffect(() => {\n ContextManager.getInstance().subscribeToSettingsChanges(contextSubscriber);\n return () => ContextManager.getInstance().unsubscribeFromSettingsChanges(contextSubscriber);\n }, []);\n\n /* eslint-disable react-hooks/exhaustive-deps */\n useEffect(() => {\n return () => {\n setNewFilterId(null);\n };\n }, []);\n\n useEffect(() => {\n if (newFilterId && !!savedFilters) {\n const hasNewFilter = savedFilters.some(filter => filter.id === newFilterId);\n if (!hasNewFilter) {\n setShowNoNewFilterToast(true);\n setNewFilterId(null);\n }\n }\n }, [newFilterId, savedFilters]);\n\n const handleDeleteSelectedFilter = async () => {\n await deleteFilter(selectedFilter);\n setDeleteModalOpen(false);\n setSelectedFilter(undefined);\n await fetch();\n trackPageEvent(...getFilterEventDetails('Delete Saved Filter'));\n };\n\n if (!definitionsMap) {\n return null;\n }\n\n const isFilterAvailable = (filter: SavedFilter) =>\n Object.keys(filter.data.values).every(key => {\n if (!key.includes(REGION_KEYWORD)) {\n return Object.prototype.hasOwnProperty.call(definitionsMap, key);\n }\n // get all regions from the current region filter\n const regionOptionsValues = getRegionFilterOptionsValuesByKey(key);\n if (regionOptionsValues.length === 0) {\n return false;\n }\n let result = true;\n const savedFilterValues = filter.data.values[key].map(entity => entity.value);\n // if the region filter options doesn't include at least one of the saved filter value,\n // then the saved filter should not be available\n for (const savedFilterValue of savedFilterValues) {\n if (!regionOptionsValues.includes(savedFilterValue)) {\n result = false;\n continue;\n }\n }\n return result;\n });\n\n const unavailableFilters =\n savedFilters?.length > 0\n ? //eslint-disable-next-line\n savedFilters.filter(filter => !isFilterAvailable(filter))\n : [];\n\n const availableFilteres =\n savedFilters?.length > 0\n ? //eslint-disable-next-line\n savedFilters.filter(filter => isFilterAvailable(filter))\n : [];\n\n return (\n <>\n <Loading isActive={loading} withIndicator />\n {!!error && <Alert title={FAILED_TO_LOAD_ALERT} type=\"error\" />}\n {!error && !loading && savedFilters?.length === 0 && <EmptyFilters />}\n {availableFilteres.length > 0 && (\n <FilterCardWrapper\n filters={availableFilteres}\n definitionsMap={definitionsMap}\n setDeleteModalOpen={setDeleteModalOpen}\n setShareModalOpen={setShareModalOpen}\n setSelectedFilter={setSelectedFilter}\n newFilterId={newFilterId}\n setNewFilterId={setNewFilterId}\n />\n )}\n {unavailableFilters.length > 0 && (\n <UnavailableSection\n filters={unavailableFilters}\n definitionsMap={definitionsMap}\n setDeleteModalOpen={setDeleteModalOpen}\n setShareModalOpen={setShareModalOpen}\n setSelectedFilter={setSelectedFilter}\n newFilterId={newFilterId}\n setNewFilterId={setNewFilterId}\n />\n )}\n <DeleteFilterModal\n isOpen={deleteModalOpen}\n itemToDelete={selectedFilter}\n getUsers={userClient.getSameAccessUsers}\n onClose={() => {\n setDeleteModalOpen(false);\n setSelectedFilter(undefined);\n }}\n onDelete={handleDeleteSelectedFilter}\n />\n <ShareFilterModal\n isOpen={shareModalOpen}\n itemToShare={selectedFilter}\n onClose={() => {\n setShareModalOpen(false);\n setSelectedFilter(undefined);\n }}\n getUsers={userClient.getSameAccessUsers}\n onSuccess={() => {\n fetch();\n }}\n />\n {showNoNewFilterToast && (\n <Toast type=\"error\" onComplete={() => setShowNoNewFilterToast(undefined)}>\n This filter is no longer available because it was either deleted or unshared\n </Toast>\n )}\n </>\n );\n}\n\nfunction UnavailableSection({\n filters,\n definitionsMap,\n setDeleteModalOpen,\n setShareModalOpen,\n setSelectedFilter,\n newFilterId,\n setNewFilterId,\n}) {\n return (\n <>\n <hr className=\"mt-4\" />\n <div className=\"py-4\">\n <h4 className=\"font-normal\">Unavailable</h4>\n <p className=\"text-xs text-gray-100\" style={{ color: '#9499A3' }}>\n These saved filters can not be applied in the selected market\n </p>\n </div>\n <hr className=\"mb-4\" />\n <FilterCardWrapper\n filters={filters}\n definitionsMap={definitionsMap}\n setDeleteModalOpen={setDeleteModalOpen}\n setShareModalOpen={setShareModalOpen}\n setSelectedFilter={setSelectedFilter}\n newFilterId={newFilterId}\n setNewFilterId={setNewFilterId}\n />\n </>\n );\n}\n\nfunction FilterCardWrapper({\n filters,\n definitionsMap,\n setDeleteModalOpen,\n setShareModalOpen,\n setSelectedFilter,\n newFilterId,\n setNewFilterId,\n}) {\n const handleApply = (filter: SavedFilter) => {\n const clearAllDefnitions = Object.keys(definitionsMap).reduce((acc, name) => {\n acc[name] = [];\n return acc;\n }, {});\n ContextManager.getInstance().updateFilterValues({ ...clearAllDefnitions, ...filter.data.values });\n };\n\n const getTrackingTags = elementName => () => ({\n elementName,\n elementType: 'Button',\n elementCategory: 'Saved Filters',\n });\n\n return filters.map((filter, idx) => {\n const filterCriteria = mapToFilterCriteria(filter, definitionsMap);\n const canShare = canShareFilter(filter);\n const isNew = filter.id === newFilterId;\n\n if (isNew) {\n const element = document.querySelector(`[data-test-id='filter-${filter.id}']`);\n element && element.scrollIntoView({ behavior: 'smooth' });\n }\n\n // if have region filter, check if region is applicable by checking the current\n // available filters against the values, if not disable it\n filterCriteria.forEach(criteria => {\n const name = criteria.name;\n\n if (!name.includes(REGION_KEYWORD)) {\n return;\n }\n const regionOptionsValues = getRegionFilterOptionsValuesByKey(name);\n if (regionOptionsValues.length <= 0) {\n return;\n }\n const savedFilterValues = filter.data.values[name].map(entity => entity.value);\n for (const savedFilterValue of savedFilterValues) {\n if (!regionOptionsValues.includes(savedFilterValue)) {\n criteria.isApplicable = false;\n }\n }\n });\n\n return (\n <FilterCard key={idx} filter={filter} status={isNew ? 'new' : null}>\n <FilterCard.Content>\n {filterCriteria.map((entity, idx) => (\n <div key={idx} className={`${!entity.isApplicable && 'text-inactive'}`}>\n <span className=\"text-xs\">{`${entity.label}: `}</span>\n <span className=\"font-bold text-xs\">{entity.value}</span>\n </div>\n ))}\n </FilterCard.Content>\n <FilterCard.Footer>\n <FilterCard.Footer.Actions>\n <ApplyAction\n onClick={() => {\n handleApply(filter);\n isNew && setNewFilterId(null);\n }}\n disabled={filterCriteria.some(x => !x.isApplicable)}\n getTrackingTags={getTrackingTags('Apply Saved Filter')}\n />\n <DeleteAction\n onClick={() => {\n setSelectedFilter(filter);\n setDeleteModalOpen(true);\n isNew && setNewFilterId(null);\n }}\n />\n <ShareAction\n onClick={() => {\n setSelectedFilter(filter);\n setShareModalOpen(true);\n }}\n disabled={!canShare}\n getTrackingTags={getTrackingTags('Share Saved Filter')}\n />\n </FilterCard.Footer.Actions>\n </FilterCard.Footer>\n </FilterCard>\n );\n });\n}\n\nexport { SavedFilters };\n","import React, { useEffect, useState } from 'react';\nimport { actions, containers } from '@ecosystem/newron-design-system';\nimport { Context, Entity, FilterSections, FiltersValues } from '../types';\nimport { ContextManager } from '../context/manager';\nimport { FilterSection } from './filterSection';\nimport { Loading } from '../design/loading/Loading';\nimport { ClientDrawer, FilterPanel } from '@ecosystem/newron-client-lib';\nimport { useFilterTracking } from './filterTracking.hook';\nimport { getError, pickFeatureFilters } from './utils';\nimport { SavedFilters } from './savedFilters';\nimport { useSavedFiltersContext } from './savedFilters.provider';\nimport { FilterTrayTabId as FilterTrayTabIdEnum } from '@ecosystem/newron-design-system/build/exports/containers';\n\nconst { Button } = actions;\nconst { FilterTray, FilterTrayTabId } = containers;\n\nfunction FiltersPanel() {\n const [context, setContext] = useState<Context>();\n\n useEffect(() => {\n const subscriber = (context: Context) => {\n if (context) {\n setContext(context);\n }\n };\n ContextManager.getInstance().subscribeToSettingsChanges(subscriber);\n return () => ContextManager.getInstance().unsubscribeFromSettingsChanges(subscriber);\n }, []);\n\n if (!context?.filters) {\n return (\n <FilterPanel>\n <Loading isActive withIndicator />\n </FilterPanel>\n );\n }\n\n const {\n filters: { sections, values },\n } = context;\n if (!sections?.length) {\n return null;\n }\n\n return <FiltersPanelComponent sections={sections} values={values} />;\n}\n\ntype ComponentProps = {\n sections: FilterSections[];\n values: FiltersValues;\n};\n\nfunction FiltersPanelComponent({ sections, values }: ComponentProps) {\n const [filterValues, setFilterValues] = useState<FiltersValues>(values);\n const [activeTab, setActiveTab] = useState<FilterTrayTabIdEnum>(FilterTrayTabId.Configure);\n const { trackFilterApplied } = useFilterTracking(sections);\n const { saveFilterEnabled, newFilterId } = useSavedFiltersContext();\n const { openDrawer, closeDrawer, expanded } = ClientDrawer.useClientDrawer();\n const selectedFeatureFilters = pickFeatureFilters(filterValues, sections);\n const showError = getError(selectedFeatureFilters);\n\n useEffect(\n function handleMarketChanged() {\n setFilterValues(values);\n },\n [sections, values]\n );\n\n useEffect(() => {\n if (newFilterId) {\n openDrawer();\n setActiveTab(FilterTrayTabId.SavedFilters);\n }\n }, [newFilterId, openDrawer]);\n\n useEffect(() => {\n // other MFEs can hide the drawer by setting --right-sidebar-width to 0 (racing condition?),\n // so we have to restore the width if the drawer is expanded\n if (!expanded) {\n return;\n }\n let fixTraySizeTimeout;\n fixTraySizeTimeout = setTimeout(() => {\n if (document.documentElement.style.getPropertyValue('--right-sidebar-width') === '0px') {\n closeDrawer();\n openDrawer();\n }\n }, 100);\n\n return () => {\n clearTimeout(fixTraySizeTimeout);\n };\n }, [expanded, closeDrawer, openDrawer]);\n\n useEffect(\n function handleClearAllClicked() {\n if (Object.keys(values).length === 0) {\n setFilterValues({});\n }\n },\n [values]\n );\n\n const handleClearAll = () => {\n setFilterValues({});\n ContextManager.getInstance().clearFilterValues();\n };\n\n const handleApply = () => {\n ContextManager.getInstance().updateFilterValues(filterValues);\n trackFilterApplied(filterValues);\n };\n\n const handleChange = (name: string, values: Entity[]) => {\n setFilterValues(prevFilters => ({ ...prevFilters, [name]: values }));\n };\n\n const handleIsDisabled =\n ({ label, isMain }: FilterSections) =>\n (definitionName: string) => {\n return (\n showError && Object.keys(!selectedFeatureFilters[label].selectedFilters).includes(definitionName) && !isMain\n );\n };\n\n const hasSections = !!sections?.length;\n\n return (\n <FilterPanel>\n <FilterTray.Content onTabChange={setActiveTab} activeTab={activeTab}>\n <FilterTray.Configure>\n {hasSections &&\n sections.map(section => (\n <FilterSection\n key={section.label}\n section={section}\n values={filterValues}\n onChange={handleChange}\n getIsDisabled={handleIsDisabled(section)}\n />\n ))}\n {!hasSections && (\n <span className=\"block text-center text-sm text-lighter px-8 pt-20\">No filters are available!</span>\n )}\n </FilterTray.Configure>\n {saveFilterEnabled && (\n <FilterTray.SavedFilters>\n <SavedFilters />\n </FilterTray.SavedFilters>\n )}\n </FilterTray.Content>\n\n <FilterTray.Footer errorMessage={showError}>\n {activeTab !== FilterTrayTabId.SavedFilters && (\n <div className=\"flex\">\n <Button mode=\"secondary\" onClick={handleClearAll} stretch>\n Clear\n </Button>\n <Button mode=\"primary\" onClick={handleApply} disabled={!!showError} stretch>\n Apply\n </Button>\n </div>\n )}\n </FilterTray.Footer>\n </FilterPanel>\n );\n}\n\nexport { FiltersPanel, FiltersPanelComponent };\n","import React, { useState } from 'react';\nimport { FiltersValues, SavedFilterData } from '../types';\nimport { adjustDateRangeFilter, getJoinedLabel, getFilterEventDetails } from './utils';\nimport { createFilter, SaveFilterButton, SaveFilterModal } from '@ecosystem/newron-client-lib';\nimport { useSavedFiltersContext } from './savedFilters.provider';\nimport { SectionWithDefinitions } from './types';\nimport { useAnalyticsContext } from '../analytics/analytics.provider';\n\nconst DUPLICATE_NAME_API_ERROR = 'Name already exists';\nconst UNIQUE_NAME_ERROR_MESSAGE = 'Please provide a unique filter name to proceed';\nconst SAVE_ERROR_MESSGE = 'Error while saving the filter';\n\ntype Props = {\n values: FiltersValues;\n sectionsWithDefinitions: SectionWithDefinitions[];\n};\nfunction SaveFilterAction({ values, sectionsWithDefinitions }: Props) {\n const { filterContext, saveFilterEnabled, fetch } = useSavedFiltersContext();\n const [showModal, setShowModal] = useState(false);\n const [errorMessage, setErrorMessage] = useState<string>();\n const { trackPageEvent } = useAnalyticsContext();\n\n const handleClose = () => {\n setErrorMessage('');\n setShowModal(false);\n };\n\n const handleSave = async (filterName?: string) => {\n try {\n const definitionLabels = sectionsWithDefinitions.flatMap(([_section, definitions]) =>\n definitions.map(def => ({ value: def.name, label: def.label }))\n );\n\n const filterData: SavedFilterData = {\n values: { ...values },\n definitionLabels: definitionLabels,\n };\n const body = {\n name: filterName,\n context: filterContext,\n data: { ...filterData },\n };\n\n await createFilter(body);\n\n trackPageEvent(...getFilterEventDetails('Save filter'));\n\n setErrorMessage('');\n fetch();\n handleClose();\n } catch (err) {\n if (err.response?.status === 422 && err.response?.data?.message === DUPLICATE_NAME_API_ERROR) {\n setErrorMessage(UNIQUE_NAME_ERROR_MESSAGE);\n } else {\n setErrorMessage(SAVE_ERROR_MESSGE);\n }\n }\n };\n\n const filterCriteriaGroup = sectionsWithDefinitions.map(([section, definitions]) => {\n return {\n name: section.label,\n filters: definitions.map(def => ({\n name: def.label,\n value: getJoinedLabel(values[def.name]),\n })),\n };\n });\n\n if (!saveFilterEnabled) {\n return null;\n }\n\n return (\n <>\n <SaveFilterButton\n onClick={() => {\n setShowModal(true);\n trackPageEvent(...getFilterEventDetails('Save filter button clicked'));\n }}\n ></SaveFilterButton>\n <SaveFilterModal\n isOpen={showModal}\n filterCriteria={filterCriteriaGroup}\n onSave={handleSave}\n onClose={handleClose}\n filterNameErrorMessage={errorMessage}\n onFilterNameChange={() => {}}\n />\n </>\n );\n}\n\nexport { SaveFilterAction, adjustDateRangeFilter };\n","import React, { useEffect, useState } from 'react';\nimport { actions } from '@ecosystem/newron-design-system';\nimport { mapDefinitions } from '../export/utils/mapDefinitions';\nimport { Context, FilterDefinition, FilterSections, FilterType, FiltersValues } from '../types';\nimport { ContextManager } from '../context/manager';\nimport { adjustDateRangeFilter, getJoinedLabel, adjustNumericFilter } from './utils';\nimport { SaveFilterAction } from './saveFilter.button';\nimport { SectionWithDefinitions } from './types';\n\nconst { Chips } = actions;\n\nexport const getValuesDefinitions = (sections: FilterSections[], values: FiltersValues): SectionWithDefinitions[] => {\n return sections\n .map(section => {\n const sectionDefinitions = mapDefinitions([section]).filter(def => !!values[def?.name]);\n return [section, sectionDefinitions] as SectionWithDefinitions;\n })\n .filter(([_section, definitions]) => definitions.length > 0);\n};\n\nexport const getChipValue = (def: FilterDefinition, values: FiltersValues) => {\n const value = getJoinedLabel(values[def.name]);\n return def.type === FilterType.numericRange ? adjustNumericFilter(def.type, value) : value;\n};\n\nfunction FilterChips() {\n const [chipsState, setChipsState] = useState<{\n values: FiltersValues;\n sectionsWithDefinitions: SectionWithDefinitions[];\n }>();\n\n const contextSubscriber = (context: Context) => {\n if (!context?.filters?.sections?.length) {\n return;\n }\n\n const { sections, values } = context.filters;\n const sectionsWithDefinitions = getValuesDefinitions(sections, values);\n setChipsState({ values, sectionsWithDefinitions });\n };\n\n useEffect(() => {\n ContextManager.getInstance().subscribeToSettingsChanges(contextSubscriber);\n return () => ContextManager.getInstance().unsubscribeFromSettingsChanges(contextSubscriber);\n }, []);\n\n const handleChipClick = (def: FilterDefinition) => {\n ContextManager.getInstance().updateFilterValues({\n [def.name]: [],\n });\n };\n\n const handleClearAll = () => {\n ContextManager.getInstance().clearFilterValues();\n };\n\n if (!chipsState || !Object.keys(chipsState.values).length) {\n return null;\n }\n\n const { values, sectionsWithDefinitions } = chipsState;\n\n return sectionsWithDefinitions.length > 0 ? (\n <div className=\"bg-white rounded mb-4 px-3 py-2\">\n <Chips>\n <Chips.Label>Filters:</Chips.Label>\n <Chips.List>\n {sectionsWithDefinitions\n .flatMap(([_section, definitions]) => definitions)\n .map(def => (\n <Chips.Chip\n key={def.name}\n value={getChipValue(def, values)}\n label={def.label}\n onRemove={() => handleChipClick(def)}\n />\n ))}\n </Chips.List>\n <Chips.Actions>\n <Chips.Actions.ClearAll onClick={handleClearAll} />\n <SaveFilterAction sectionsWithDefinitions={sectionsWithDefinitions} values={values} />\n </Chips.Actions>\n </Chips>\n </div>\n ) : (\n <></>\n );\n}\n\nexport { FilterChips, adjustDateRangeFilter };\n","import { useCallback } from 'react';\nimport { useAnalyticsContext } from '../analytics/analytics.provider';\nimport { Entity, EventName, ContextTrackingMetadata } from '../types';\n\nconst GLOBAL_FILTER_TYPE = 'Selectors';\n\nexport const useContextTracking = () => {\n const { trackPageEvent } = useAnalyticsContext();\n\n const trackUpdates = useCallback(\n ({ tracking }: { tracking?: ContextTrackingMetadata }, updates: Record<string, Entity[]>) => {\n Object.keys(updates).forEach(key => {\n const entities = updates[key];\n if (entities.length) {\n trackPageEvent(EventName.FilterApplied, {\n filterName: key,\n filterType: GLOBAL_FILTER_TYPE,\n optionChosen: entities.map(entity => entity.label),\n optionChosenValues: entities.map(entity => entity.value),\n });\n }\n });\n\n if (tracking?.hasPageView) {\n trackPageEvent(EventName.PageViewed);\n }\n },\n [trackPageEvent]\n );\n\n return { trackUpdates };\n};\n","import React, { useEffect, useRef, useState } from 'react';\nimport { elements } from '@ecosystem/newron-design-system';\nimport { ContextManager } from './manager';\nimport { Context, Entity, SettingDefinition, SettingsValues } from '../types';\nimport { useOnOutsideClick } from '../tools/outsideclick.hook';\nimport { ContentProviderRegister } from '../newron-core';\nimport { EditProvider } from './edit.provider';\nimport { useContextTracking } from './contextTracking.hook';\nimport { Modal } from '../design/modal/Modal';\n\nfunction ContextDisplay() {\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [context, setContext] = useState<Context>();\n const [requiresEdit, setRequiresEdit] = useState<SettingDefinition | undefined>();\n\n useEffect(() => {\n const loadingSubscriber = isLoading => {\n setIsLoading(isLoading);\n };\n const changeSubscriber = (context: Context) => {\n if (context) {\n setContext(context);\n }\n };\n const requiresEditSubscriber = (definition?: SettingDefinition) => {\n setRequiresEdit(definition);\n };\n ContextManager.getInstance().subscribeToLoading(loadingSubscriber);\n ContextManager.getInstance().subscribeToSettingsChanges(changeSubscriber);\n ContextManager.getInstance().subscribeToEditRequired(requiresEditSubscriber);\n\n return () => {\n ContextManager.getInstance().unsubscribeFromLoading(loadingSubscriber);\n ContextManager.getInstance().unsubscribeFromSettingsChanges(changeSubscriber);\n ContextManager.getInstance().unsubscribeFromEditRequired(requiresEditSubscriber);\n };\n }, []);\n\n if (!context) {\n return null;\n }\n\n const {\n settings: { definitions, values },\n } = context;\n const selectable = definitions.filter(def => def.selection.isSelectable);\n const primary = selectable.filter(def => def.selection.isSecondary !== true);\n const secondary = selectable.filter(def => def.selection.isSecondary === true);\n\n return (\n <EditProvider>\n <div className=\"flex flex-wrap items-center gap-x-2\">\n {primary.map(def => (\n <Entry key={def.name} definition={def} values={values} isLoading={isLoading} />\n ))}\n <div className=\"flex gap-x-2\">\n {secondary.map(def => (\n <Entry key={def.name} definition={def} values={values} isLoading={isLoading} />\n ))}\n </div>\n {requiresEdit && (\n <EditContextModal\n definition={requiresEdit}\n values={values}\n isLoading={isLoading}\n onClose={() => setRequiresEdit(undefined)}\n />\n )}\n </div>\n </EditProvider>\n );\n}\n\ntype EntryProps = {\n isLoading: boolean;\n definition: SettingDefinition;\n values: SettingsValues;\n};\nfunction Entry({ isLoading, definition, values }: EntryProps) {\n const [expanded, setExpanded] = useState<boolean>(false);\n const el = useRef<HTMLDivElement>(null);\n const {\n name,\n labels,\n selection: { selector, isSecondary, metadata },\n } = definition;\n useOnOutsideClick(el, () => setExpanded(false));\n const { trackUpdates } = useContextTracking();\n const handleChange = async (updates: Record<string, Entity[]>) => {\n ContextManager.getInstance().updateSettingsValues(updates);\n trackUpdates({ tracking: metadata?.tracking }, updates);\n };\n\n const Selector = ContentProviderRegister.getInstance().getContextSettingsSelector(selector, name);\n const { Icon } = elements;\n const [hovered, setHovered] = useState(false);\n\n return (\n <div onMouseEnter={() => setHovered(true)} onMouseLeave={() => setHovered(false)} className={`relative`} ref={el}>\n <button\n disabled={isLoading}\n onClick={() => setExpanded(!expanded)}\n className={`flex rounded pt-1 pb-1 pl-2 text-left ${hovered && !expanded && 'bg-brand-light'} ${\n expanded && 'bg-medium text-brand'\n } ${hovered ? 'text-brand' : 'text-default'}`}\n >\n <div className={` ${isSecondary ? 'font-normal' : 'font-bold'}`}>\n <div>\n <div className=\"flex justify-between items-center\">\n <span>{labels.label}</span>\n <Icon hoverColor=\"brand\" color={expanded || hovered ? 'brand' : 'secondaryInteractive'}>\n <Icon.icons.ChevronDown />\n </Icon>\n </div>\n </div>\n </div>\n </button>\n {expanded && (\n <Selector\n isLoading={isLoading}\n onChange={handleChange}\n definition={definition}\n values={values[name] || []}\n onClose={() => {\n setHovered(false);\n setExpanded(false);\n }}\n />\n )}\n </div>\n );\n}\n\ntype EditModalProps = {\n isLoading: boolean;\n definition: SettingDefinition;\n values: SettingsValues;\n onClose: () => void;\n};\nfunction EditContextModal({ isLoading, definition, values, onClose }: EditModalProps) {\n const { trackUpdates } = useContextTracking();\n\n const {\n name,\n labels,\n selection: { selector, metadata },\n } = definition;\n const Selector = ContentProviderRegister.getInstance().getContextSettingsSelector(selector, name);\n\n const handleChange = (updates: Record<string, Entity[]>) => {\n ContextManager.getInstance().updateSettingsValues(updates);\n trackUpdates({ tracking: metadata?.tracking }, updates);\n onClose();\n };\n\n return (\n <Modal isOpen onClose={onClose} size=\"sm\">\n <Modal.Header>{labels?.identifier || '??NO LABEL??'}</Modal.Header>\n <Selector\n isLoading={isLoading}\n definition={definition}\n values={values[name] || []}\n onChange={handleChange}\n onClose={onClose}\n />\n </Modal>\n );\n}\n\nexport { ContextDisplay };\n","import React, { useEffect } from 'react';\nimport { overlays } from '@ecosystem/newron-design-system';\nimport { EventElementCategory, EventElementType, ModalDsl, ModalName } from '../types';\nimport { Sections } from '../sections/sections';\nimport { trackPageElementClicked } from '../analytics/utils';\nimport { useAnalyticsContext } from '../analytics/analytics.provider';\n\nconst { Modal } = overlays;\n\ntype Props = {\n dsl: ModalDsl;\n onClose: () => void;\n};\nfunction CoreModal({ dsl, onClose }: Props) {\n useEffect(() => {\n return () => {\n // needed because design-system modal doesn't reset this prop leaving the whole page unscrollable!\n document.body.style.overflow = 'unset';\n };\n }, []);\n\n const { title, size, sections, name } = dsl;\n const { trackPageEvent } = useAnalyticsContext();\n\n const handleClose = () => {\n if (name === ModalName.KeyIndicators) {\n trackPageElementClicked(trackPageEvent, `Close ${name}`, {\n elementType: EventElementType.Card,\n elementCategory: EventElementCategory.CustomFilter,\n });\n }\n onClose();\n };\n\n return (\n <Modal isOpen size={size} onClose={handleClose}>\n <Modal.Header>{title}</Modal.Header>\n <Modal.Body>\n <Sections sections={sections} />\n <div id=\"menu-holder\" className=\"fixed top-0 left-0 z-index-toast\" />\n </Modal.Body>\n </Modal>\n );\n}\n\nexport { CoreModal };\n","import { useEffect, useState } from 'react';\nimport { EventName } from '../types';\nimport { useAnalyticsContext } from './analytics.provider';\nimport { useCorePageState } from '../page/provider';\n\n/**\n * Tracks the PageViewed analytics events.\n */\nexport const useTrackPageViewed = () => {\n const [lastTrackedUrl, setLastTrackedUrl] = useState('');\n const { trackPageEvent } = useAnalyticsContext();\n const { url, dslLoading, contextLoading } = useCorePageState();\n\n useEffect(() => {\n if (url === lastTrackedUrl) {\n return;\n }\n if (url && dslLoading === false && contextLoading === false) {\n trackPageEvent(EventName.PageViewed);\n setLastTrackedUrl(url);\n }\n }, [url, lastTrackedUrl, dslLoading, contextLoading, trackPageEvent]);\n};\n","import React from 'react';\nimport { ClientFooter } from '@ecosystem/newron-client-lib';\nimport { useCorePageState } from './provider';\nimport { NEWRON_CORE_VERSION } from '../common/constants/version';\n\nconst formatVersionString = (appVersion?: string) => {\n return (appVersion ? `${appVersion} (` : '') + `core: ${NEWRON_CORE_VERSION}` + (appVersion ? ')' : '');\n};\n\nconst PageFooter: React.FC<{ className?: string }> = ({ className }) => {\n const {\n page: { appVersion },\n } = useCorePageState();\n\n return (\n <div className={`${className}`}>\n <ClientFooter version={formatVersionString(appVersion)} />\n </div>\n );\n};\n\nexport default PageFooter;\n","import { logger } from '@ecosystem/newron-client-lib';\nimport { AuthResultV2, fetchAuth, ResourceCodeV2 } from './persona.client';\nimport { Periodicity } from '../types';\nimport { Proposition } from '@ecosystem/newron-client-collections';\n\ninterface CellTrackingValueParams {\n proposition: string;\n authResult: AuthResultV2;\n cell: string;\n periodicity: string;\n}\n\nconst orderedProductList = ['predict', 'predict_lite', 'market'];\n\nconst TRACKING_CODE_PREDICT = 'gfknewron';\nconst TRACKING_CODE_PREDICT_LITE = 'gfknewron_lite';\nconst TRACKING_CODE_MARKET = 'Digital MI';\nconst TRACKING_CODE_SUPPLY_CHAIN = 'Supply Chain';\n\nexport const AccessProductCode = {\n Market: 'pos',\n DistributionPanel: 'distributor',\n} as const;\n\nlet cachedQueryString = '';\nlet cachedAccessValue: string | string[] = '';\n\n/**\n * Returns the auth url for a given combination of cells and periodicity.\n * Use this value in 'doAuthCall'.\n *\n * @param cells\n * @param periodicity\n * @returns\n */\nconst getAuthQueryString = (cells: string[], periodicity: string) => {\n const params = orderedProductList\n .map(value => `product=${value}`)\n .concat('outlet_group_level=brand')\n .concat(cells.map(c => 'cell=' + c))\n .concat(`periodicity=${periodicity}`);\n\n const urlParams = new URLSearchParams(params.join('&'));\n return urlParams.toString();\n};\n\n/**\n * Returns the query string for auth/v2 endpoint calls.\n * @param proposition\n * @param cells\n * @param periodicity\n * @returns\n */\nexport const getAuthQueryStringV2 = (proposition: string, cells: string[], periodicity: string): string => {\n const cellParams = cells.map(cell => `cell=${cell}`).join('&');\n const isDistributionPanel = proposition === Proposition.DistributionPanel;\n const productCode = isDistributionPanel ? AccessProductCode.DistributionPanel : AccessProductCode.Market;\n return `product_code=${productCode}&periodicity=${periodicity}&${cellParams}`;\n};\n\n/**\n * counts deliveries per year for less-than-monthly subscription support\n * since we might not have complete years we use the max value - it should contain 1 full year of deliveries\n * @param dates\n * @returns\n */\nfunction getDeliveryCount(dates: string[]): number {\n const countPerYear: Record<string, number> = dates\n .map(date => date.split('-')[0])\n .reduce((acc, curr) => {\n const newCount = (acc[curr] || 0) + 1;\n return { ...acc, [curr]: newCount };\n }, {});\n return Math.max(...Object.values(countPerYear), 0);\n}\n\n/**\n * Returns the tracking value for a single cell\n * @param proposition\n * @param results\n * @param cell\n * @param periodicity\n * @returns\n */\nfunction getCellTrackingValue({ proposition, authResult, cell, periodicity }: CellTrackingValueParams): string {\n const approved = authResult.approved.find(entry => entry.cell === cell);\n const hasPredict = !!approved?.resources[ResourceCodeV2.PosKpiTPR];\n if (hasPredict) {\n return TRACKING_CODE_PREDICT;\n }\n const hasPredictLite = !!approved?.resources[ResourceCodeV2.PosKpiRevenuePremium];\n if (hasPredictLite) {\n return TRACKING_CODE_PREDICT_LITE;\n }\n\n const hasMarket = !!approved?.resources[ResourceCodeV2.PosDimensionMarket];\n const hasDistribution = !!approved?.resources[ResourceCodeV2.DistributorFull];\n if (!hasMarket && !hasDistribution) {\n return '';\n }\n\n const isDistributionPanel = proposition === Proposition.DistributionPanel;\n\n const trackingCode = isDistributionPanel ? TRACKING_CODE_SUPPLY_CHAIN : TRACKING_CODE_MARKET;\n\n const reducedDataConfig =\n periodicity === Periodicity.Monthly\n ? approved?.config?.['reduced_data.months']\n : approved?.config?.['reduced_data.weeks'];\n const deliveryCount = getDeliveryCount(reducedDataConfig || []);\n const deliverySuffix = deliveryCount > 0 ? ` ${deliveryCount}x` : '';\n return `${trackingCode}${deliverySuffix}`;\n}\n\n/**\n * Calls the persona service to retrieve tracking information for each cell\n *\n * @param proposition\n * @param cells\n * @param periodicity\n * @returns\n */\nexport const getAccessValueForTracking = async (\n proposition: string,\n cells: string[],\n periodicity: string\n): Promise<string | string[]> => {\n return getValueV2(proposition, cells, periodicity);\n};\n\nconst getValueV2 = async (proposition: string, cells: string[], periodicity: string): Promise<string | string[]> => {\n const queryString = getAuthQueryStringV2(proposition, cells, periodicity);\n if (queryString === cachedQueryString) {\n return cachedAccessValue;\n }\n\n // no cache - fetch from persona service\n const authResult = await fetchAuth<AuthResultV2>('v2/auth', queryString);\n\n cachedAccessValue = cells.map(cell => getCellTrackingValue({ proposition, authResult, cell, periodicity }));\n cachedQueryString = queryString;\n\n return cachedAccessValue;\n};\n\n/**\n * for getting tracking tags for platform tracking funtion\n * @param cells\n * @param periodicity\n * @returns string | string []\n */\nexport const getAccessValueForTrackingTags = (cells: string[], periodicity: string): string | string[] => {\n const queryString = getAuthQueryString(cells, periodicity);\n if (queryString === cachedQueryString) {\n return cachedAccessValue;\n } else {\n logger.warning('[getAccessValueForTrackingTags] access in cache not found');\n return [];\n }\n};\n\n/**\n * Clears the analytics access cache so that the next call to getAccessValueForTracking will refetch from the persona service.\n */\nexport const clearAccessValueCache = () => {\n cachedQueryString = '';\n cachedAccessValue = '';\n};\n","import { authentication } from '@ecosystem/newron-client-lib';\nimport { getImpersonationHeader } from './impersonation';\n\ninterface Config {\n data_delivery_positions?: number[];\n}\nexport interface AuthResult {\n product: string;\n internalProduct: string;\n approved: {\n config?: Config;\n cell: string;\n }[];\n}\n\nexport interface AuthResultV2 {\n approved: {\n cell: string;\n config?: {\n 'reduced_data.weeks'?: string[] | null;\n 'reduced_data.months'?: string[] | null;\n };\n resources: Record<string, { start_date: string; end_date: string }>;\n }[];\n rejected: string[];\n}\n\nexport const ResourceCodeV2 = {\n PosDimensionMarket: 'pos.dimension.market',\n PosKpiTPR: 'pos.kpi.tpr',\n PosKpiRevenuePremium: 'pos.kpi.revenue-premium',\n DistributorFull: 'dist.full',\n} as const;\n\nconst apiPath = `/api/persona/`;\n\nexport const fetchAuth = async <T>(path: string, query: string): Promise<T> => {\n const token = await authentication.getAccessToken();\n const impersonationHeader = getImpersonationHeader();\n const fullApiUrl = `${apiPath}${path}?${query}`;\n\n const result = await fetch(fullApiUrl, {\n headers: {\n Authorization: `Bearer ${token}`,\n ...impersonationHeader,\n },\n });\n\n return (await result.json()) as T;\n};\n","import { authentication, isInternal } from '@ecosystem/newron-client-lib';\n\ninterface ImpersonationHeader {\n 'X-Impersonate-Client': string;\n}\n\nconst IMPERSONATION_STORAGE_KEY = 'impersonation';\n\n/**\n * Returns the impersonation header to use for API calls.\n */\nexport function getImpersonationHeader(): ImpersonationHeader | null {\n const isInternalUser = isInternal(authentication.getUser());\n if (!isInternalUser) {\n return null;\n }\n\n const storage = localStorage.getItem(IMPERSONATION_STORAGE_KEY);\n if (storage) {\n return {\n 'X-Impersonate-Client': storage,\n };\n }\n\n return null;\n}\n","import { InternalEventParams, MappingFn } from './types';\nimport { getAccessValueForTrackingTags } from './access';\nimport { EventName, ExternalGetTrackingTagsFn, PropositionSection, TrackingMeta } from '../types';\nimport { Proposition } from '@ecosystem/newron-client-collections';\n\ninterface TrackingCoreMetaParams {\n proposition: string;\n meta: TrackingMeta;\n subsection: string;\n pageName: string;\n}\n\nexport const mapCoreMetaParams = ({\n proposition,\n meta,\n subsection,\n pageName,\n}: TrackingCoreMetaParams): InternalEventParams => {\n // cell information\n // format is ['BE-DEC_GARDEN_PRES']\n const cells = meta.pageContext.cell || [];\n\n const splitCells = cells.map(c => {\n const parts = c.split('-');\n return { country: parts[0], itemGroup: parts[1] };\n });\n\n const cellsFormatted = splitCells.map(({ country, itemGroup }) => `${country}/${itemGroup}`);\n const countries = Array.from(new Set(splitCells.map(o => o.country)));\n const itemGroups = Array.from(new Set(splitCells.map(o => o.itemGroup)));\n const periodicity = meta.pageContext.timeFrame ? meta.pageContext.timeFrame[0].split(':')[0] : '';\n\n const section: PropositionSection = proposition === Proposition.DistributionPanel ? 'Supply Chain' : 'Market 2.0';\n\n return {\n section,\n subsection,\n pageName,\n cells: cellsFormatted,\n periodicity,\n itemGroup: itemGroups,\n locationId: countries,\n numberOfCells: cells.length.toString(),\n cellAggregation: cells.length > 1 ? 'multicell' : 'singlecell',\n locationIdAggregation: countries.length > 1 ? 'many' : 'single',\n itemGroupAggregation: itemGroups.length > 1 ? 'many' : 'single',\n proposition,\n ...meta.eventParams,\n };\n};\n\n/**\n * Maps internal market 2 tab names (ie. scorecard, time, segments) to their tracking equivalents\n *\n * @param tabName\n * @returns\n */\nexport const mapTabName = (tabName: string): string => {\n const lookup = {\n segments: 'Segmentation',\n time: 'Time Series',\n scorecard: 'Scorecard',\n };\n return lookup[tabName] ?? tabName;\n};\n\n/**\n * Splits a timeframe parameter value into its consistuent parts\n */\nexport const splitTimeframeValue = (paramValue: string | string[]) => {\n const [aggregation = '', sequenceInfo = '', aggregationMethod = ''] = (\n Array.isArray(paramValue) ? paramValue[0] : paramValue\n ).split(':');\n\n let aggregationValue: string = aggregation;\n let aggregationMethodValue: string = aggregationMethod;\n\n switch (aggregationMethod) {\n case 'Year':\n case 'MAT':\n case 'YTD':\n aggregationValue = 'Year';\n break;\n case 'Quarter':\n case 'RollingQuarter':\n aggregationValue = 'Quarter';\n aggregationMethodValue = 'Rolling Quarter';\n break;\n }\n\n return {\n aggregation: aggregationValue,\n aggregationMethod: aggregationMethodValue,\n sequenceInfo,\n };\n};\n\nexport const addTimeAggregationValues = (params: InternalEventParams, timeFrameValue: string | string[]): void => {\n const split = splitTimeframeValue(timeFrameValue);\n params.timeAggregation = split.aggregation;\n params.timeAggregationMethod = split.aggregationMethod;\n};\n\nexport const mapInternalEventParams = (\n eventName: string,\n meta: TrackingMeta,\n params: InternalEventParams\n): InternalEventParams => {\n // chart interactions can use the page name as the chart name\n if (eventName === EventName.ChartInteractions && !params.chartName) {\n params.chartName = params.pageName;\n }\n if (eventName === EventName.PageElementViewed && !params.elementName) {\n params.elementName = params.pageName;\n }\n // data export events will provide empty strings to be substituted by pageName\n if ([EventName.DataExported, EventName.DataExportInitiated].includes(eventName as EventName)) {\n if (params.elementName === '') {\n params.elementName = params.pageName;\n }\n if (params.tableName === '') {\n params.tableName = params.pageName;\n }\n }\n if (eventName === EventName.DataExported && meta.pageContext.timeFrame) {\n addTimeAggregationValues(params, meta.pageContext.timeFrame);\n }\n if (eventName === EventName.PageElementViewed && params.focusPeriod && params.focusPeriodValues) {\n addTimeAggregationValues(params, params.focusPeriodValues);\n delete params.focusPeriodValues;\n }\n if (eventName === EventName.FilterApplied && params.optionChosenValues) {\n if (params.filterName === 'timeFrame') {\n addTimeAggregationValues(params, params.optionChosenValues);\n }\n delete params.optionChosenValues;\n }\n return params;\n};\n\nexport const getTrackingTagsFn = (\n subsection: string,\n pageName: string,\n isOverrideMeta: boolean = false,\n calcTrackingParams?: MappingFn\n): ExternalGetTrackingTagsFn => {\n return (eventName: EventName | string, meta: TrackingMeta) => {\n const subsectionMeta = isOverrideMeta ? subsection : meta.pageTitle || subsection;\n\n const { pageName: trackingPageName, proposition } = calcTrackingParams(eventName, meta);\n\n const pageNameMeta = pageName ? `${subsectionMeta} ${mapTabName(pageName)}` : trackingPageName;\n\n const trackingCoreMeta = mapCoreMetaParams({\n proposition,\n meta,\n subsection: subsectionMeta,\n pageName: pageNameMeta,\n });\n\n const params = mapInternalEventParams(eventName, meta, trackingCoreMeta);\n\n const cellsWithDashes = params.cells.map(cell => cell.replace('/', '-'));\n const access = getAccessValueForTrackingTags(cellsWithDashes, params.periodicity);\n return {\n access,\n ...params,\n };\n };\n};\n","import { logger } from '@ecosystem/newron-client-lib';\nimport { getAccessValueForTracking } from './access';\nimport { AnalyticsEvent, PlatformTrackingFunction } from './types';\n\nexport const trackAnalyticsEvent = async (event: AnalyticsEvent, platformTrackFn: PlatformTrackingFunction) => {\n const { eventName, params } = event;\n const { proposition, periodicity } = params;\n\n if (params.cells.length === 0 || !params.periodicity) {\n logger.warning('[useTracking/doTrack] No cells or periodicity');\n return;\n }\n\n // re-formatted cells use '/' instead of '-' as a separator, need to reconvert into the format understood by persona service\n const cellsWithDashes = params.cells.map(cell => cell.replace('/', '-'));\n\n const access = await getAccessValueForTracking(proposition, cellsWithDashes, periodicity);\n platformTrackFn(eventName, { access, ...params });\n};\n","import { logger } from '@ecosystem/newron-client-lib';\nimport { trackAnalyticsEvent } from './track';\nimport { AnalyticsEvent, PlatformTrackingFunction } from './types';\n\nconst queue: AnalyticsEvent[] = [];\nlet isRunning = false;\n\nconst getNext = (): AnalyticsEvent | undefined => {\n return queue[0];\n};\n\nconst removeFromQueue = (event: AnalyticsEvent) => {\n const index = queue.indexOf(event);\n if (index > -1) {\n queue.splice(index, 1);\n }\n};\n\nconst trigger = async (platformTrackingFn: PlatformTrackingFunction) => {\n if (isRunning) {\n return;\n }\n isRunning = true;\n let next = getNext();\n while (next) {\n try {\n await trackAnalyticsEvent(next, platformTrackingFn);\n } catch (e) {\n logger.error(e, { message: '[analytics] tracking failed', eventName: next.eventName });\n }\n removeFromQueue(next);\n next = getNext();\n }\n isRunning = false;\n};\n\nexport const add = (event: AnalyticsEvent, platformTrackingFn: PlatformTrackingFunction) => {\n queue.push(event);\n trigger(platformTrackingFn);\n};\n","import { EventName } from '../types';\n\nconst enabledProductionEvents: string[] = [\n EventName.FilterApplied,\n EventName.PageViewed,\n EventName.FilterAppliedDetails,\n EventName.PageElementViewed,\n EventName.ChartInteractions,\n EventName.PageElementClicked,\n EventName.TableClicked,\n EventName.DataExported,\n EventName.DataExportInitiated,\n EventName.NavigationClicked,\n];\n\nexport const isTrackingEnabled = (eventName: string): boolean =>\n enabledProductionEvents.includes(eventName) || localStorage.getItem('m2_analytics_test') === 'on';\n","import { useAnalytics } from '@ecosystem/newron-client-lib';\nimport { mapInternalEventParams } from './tools';\nimport { add } from './queue';\nimport { MappingFn } from './types';\nimport { TrackingEventOptions, TrackingMeta } from '../types';\nimport { isTrackingEnabled } from './enabled';\n\nexport const useTracking = (mappingFn: MappingFn) => {\n const { track } = useAnalytics();\n\n return {\n trackEvent: (eventName: string, meta: TrackingMeta, options: TrackingEventOptions) => {\n if (!mappingFn) return; //For DP!\n if (isTrackingEnabled(eventName)) {\n const eventParams = {\n eventName,\n params: mapInternalEventParams(eventName, meta, mappingFn(eventName, meta)),\n };\n if (options.fireEvent === false) {\n return eventParams.params;\n } else {\n add(eventParams, track);\n }\n }\n },\n };\n};\n","import React, { useEffect, useState } from 'react';\nimport { UpsellFeedback, TargetedUpsell } from '@ecosystem/newron-upsell';\nimport { ContextManager } from '../../context/manager';\nimport { Context, Entity, OpenMarketOptions } from '../../types';\nimport { deepEqual } from '../../tools/object';\n\nexport const UpsellWrapper = () => {\n const [cells, setCells] = useState<string[]>([]);\n const [options, setOptions] = useState<OpenMarketOptions[]>([]);\n\n const contextSubscriber = async (context: Context) => {\n if (!context) {\n setCells([]);\n setOptions([]);\n return;\n }\n\n const { openMarkets } = await ContextManager.getInstance().getSettings(['openMarkets']);\n\n const openMarketsOptions = openMarkets.definition.selection.options.map(opt => ({\n value: (opt as Entity).value,\n periods: (opt as Entity).periods,\n countryName: (opt as any).countryName,\n productName: (opt as any).productName,\n }));\n\n const cells = context.settings.values.cell.map(v => v.value);\n\n //adding a check to avoid unnecessary re-renders\n setCells(currentCells => {\n if (!deepEqual(currentCells, cells)) {\n return cells;\n }\n return currentCells;\n });\n setOptions(currentOpenMarketsOptions => {\n if (!deepEqual(currentOpenMarketsOptions, openMarketsOptions)) {\n return openMarketsOptions;\n }\n return currentOpenMarketsOptions;\n });\n };\n\n useEffect(() => {\n ContextManager.getInstance().subscribeToSettingsChanges(contextSubscriber);\n return () => {\n ContextManager.getInstance().unsubscribeFromSettingsChanges(contextSubscriber);\n };\n }, []);\n\n // if there is no cell or options data, do not render anything\n if (!cells?.length || !options?.length) {\n return null;\n }\n\n return (\n <>\n <UpsellFeedback cells={cells} openMarketsOptions={options} />\n <TargetedUpsell cells={cells} openMarketsOptions={options} />\n </>\n );\n};\n","import React, { useEffect } from 'react';\nimport { ClientContent, ClientHeader } from '@ecosystem/newron-client-lib';\nimport { CorePageProvider, useCorePageState } from './provider';\nimport { Sections } from '../sections/sections';\nimport { Heading } from './heading/heading';\nimport { UiActionsProvider } from '../ui.actions/provider';\nimport './page.css';\nimport { useParams } from 'react-router';\nimport { NavigateFunction } from 'react-router/dist/development/index';\nimport { FiltersPanel } from '../filters/panel';\nimport { FilterChips } from '../filters/chips';\nimport { ContextDisplay } from '../context/display';\nimport { Loading } from '../design/loading/Loading';\nimport { HTTPMethod } from '../types';\nimport { CoreModal } from '../modal/modal';\nimport { AnalyticsProvider } from '../analytics/analytics.provider';\nimport { useTrackPageViewed } from '../analytics/trackPageViewed.hook';\nimport { DataErrorElement } from '../elements/error/error';\nimport { PageInfo } from './types';\nimport PageFooter from './footer';\nimport GenericWarnings from '../design/warning/GenericWarnings';\nimport { EmptyState } from '../common/no-data-warning/empty-state';\nimport { getTrackingTagsFn } from '../analytics/tools';\nimport { useTracking } from '../analytics/tracking.hook';\nimport { MappingFn } from '../analytics/types';\nimport { UpsellWrapper } from '../common/upsell/upsell.wrapper';\nimport { ContextManager } from '../context/manager';\nimport { UniquePreferencesProvider } from '../context/unique-preferences/unique-preferences.provider';\n\ntype CorePageProps = {\n context: {\n name: string;\n url: string;\n excludeFilters?: boolean;\n excludePriceFilter?: boolean;\n };\n page: PageInfo;\n data: {\n url: string;\n requestMethod?: HTTPMethod;\n };\n collection: {\n url: string;\n };\n navigate: NavigateFunction;\n defaultSubsection: string;\n calcTrackingParams: MappingFn;\n};\n\n// this is the main component that renders the page and render triggered by the route in the MFE repo\nfunction CorePage({ context, page, data, navigate, collection, calcTrackingParams, defaultSubsection }: CorePageProps) {\n const { tab } = useParams();\n const { trackEvent } = useTracking(calcTrackingParams);\n const getTrackingTags = getTrackingTagsFn(defaultSubsection, tab, true, calcTrackingParams);\n return (\n <UniquePreferencesProvider>\n <CorePageProvider page={page} context={context} data={data} collection={collection}>\n <AnalyticsProvider externalTrackingFn={trackEvent} externalGetTrackingTags={getTrackingTags}>\n <UiActionsProvider navigate={navigate}>\n <ClientHeader>\n <ContextDisplay />\n </ClientHeader>\n <PageComponent />\n </UiActionsProvider>\n </AnalyticsProvider>\n </CorePageProvider>\n </UniquePreferencesProvider>\n );\n}\n\nfunction PageComponent() {\n const {\n dsl,\n error,\n dslLoading,\n contextLoading,\n updatePageSettings,\n page,\n pageParams,\n modalDsl,\n globalWarnings,\n closeModal,\n allComponentsHaveNoData,\n resetGlobalWarnings,\n trayType,\n } = useCorePageState();\n\n useTrackPageViewed();\n const showPageLevelNoDataWarning = Boolean(dsl?.settings?.enablePageLevelNoDataError && allComponentsHaveNoData);\n\n const contextSubscriber = () => {\n resetGlobalWarnings();\n };\n\n useEffect(() => {\n ContextManager.getInstance().subscribeToSettingsChanges(contextSubscriber);\n\n return () => {\n ContextManager.getInstance().unsubscribeFromSettingsChanges(contextSubscriber);\n };\n }, []);\n\n return error ? (\n <ErrorPageComponent error={error} />\n ) : (\n <>\n <ClientContent>\n <div className=\"core-page relative\">\n <Loading isActive={dslLoading || contextLoading} withIndicator />\n <div className=\"core-page-container relative flex flex-column px-6\">\n {dsl?.heading && (\n <Heading pageParams={pageParams} updateSettings={updatePageSettings} heading={dsl.heading} page={page} />\n )}\n <div className=\"core-page-content relative flex-grow w-full max-w-full\">\n <FilterChips />\n {showPageLevelNoDataWarning && <EmptyState />}\n {!showPageLevelNoDataWarning && <GenericWarnings warnings={globalWarnings} />}\n {!showPageLevelNoDataWarning && dsl?.sections && <UpsellWrapper />}\n {!showPageLevelNoDataWarning && dsl?.sections && <Sections sections={dsl.sections} />}\n </div>\n <PageFooter className=\"core-page-footer\" />\n </div>\n </div>\n {!trayType && <FiltersPanel />}\n </ClientContent>\n {modalDsl && <CoreModal dsl={modalDsl} onClose={closeModal} />}\n </>\n );\n}\n\nconst ErrorPageComponent: React.FC<{ error: string }> = ({ error }) => (\n <ClientContent>\n <div className=\"core-page relative\">\n <div className=\"core-page-container relative flex flex-column px-6\">\n <div className=\"core-page-content relative flex-grow w-full max-w-full\">\n <FilterChips />\n {error && <DataErrorElement error={{ message: error, className: 'pt-10', title: 'Unable to load page' }} />}\n </div>\n <PageFooter className=\"core-page-footer\" />\n </div>\n </div>\n <FiltersPanel />\n </ClientContent>\n);\n\nexport { CorePage, PageComponent };\nexport type { CorePageProps };\n","import { Proposition } from '@ecosystem/newron-client-collections';\n\nexport const getPropositionFromContextURL = (contextURL: string): { baseURL: string; proposition: Proposition } => {\n const [baseURL, queryParams] = contextURL.split('?');\n const propositionParam = queryParams?.split('&').find(param => param.startsWith('proposition='));\n if (!propositionParam) {\n return {\n baseURL,\n proposition: Proposition.Market,\n };\n }\n const propositionValue = propositionParam.split('=')?.[1];\n if (\n !propositionValue ||\n (propositionValue !== Proposition.Market && propositionValue !== Proposition.DistributionPanel)\n ) {\n return {\n baseURL,\n proposition: Proposition.Market,\n };\n }\n return {\n baseURL,\n proposition: propositionValue,\n };\n};\n","import { contextClient } from '../../client';\nimport { getChipValue, getValuesDefinitions } from '../../filters/chips';\nimport { ContextSettings, EventName, Filters } from '../../types';\nimport { InsightCollectionDataType, InsightData } from './types';\nimport { CollectionOptions } from '../../types/content/content.types';\nimport { handlePageElementViewed } from '../../analytics/trackPageElementViewed.hook';\nimport cache from '../../cache/cache';\nimport { getAccessValueForTracking } from '../../analytics/access';\nimport { getPropositionFromContextURL } from './utils';\n\nconst metadata = {\n tracking: {\n paramsMap: {\n scKpis: 'elementKPI',\n },\n },\n};\n\nexport async function getInsightInfo(insight: InsightData, collection: CollectionOptions) {\n if (!insight?.corePageSettings.collection.url) {\n return {\n chartName: collection.chartName,\n tags: [],\n trackingTags: {},\n };\n }\n const { proposition, baseURL } = getPropositionFromContextURL(insight.corePageSettings.collection.url);\n const context = await contextClient.getContext(baseURL, {\n ...insight.paramsForContext,\n isLive: insight.dataType === InsightCollectionDataType.live ? [String(true)] : undefined,\n proposition: [proposition],\n });\n\n const componentSettings = insight.componentSettings;\n const timeFrame = context.settings.values.timeFrame?.[0]?.value.split(':')[0] || '';\n\n const [data, trackPageEvent, access] = await Promise.all([\n cache('data'),\n cache('trackPageEvent'),\n getAccessValueForTracking(proposition, insight.paramsForData.cell, timeFrame),\n ]);\n\n const params: any = handlePageElementViewed(context, data, componentSettings, metadata);\n const eventParams = trackPageEvent?.(EventName.PageElementViewed, params, { fireEvent: false, context });\n eventParams.pageName = collection.chartName;\n eventParams.elementName = collection.chartName;\n eventParams.access = Array.from(new Set(access));\n return {\n chartName: collection.chartName,\n tags: [...getSettingsTags(context.settings), ...getFilterTags(context.filters)],\n trackingTags: eventParams,\n };\n}\n\nconst getFilterTags = ({ sections, values }: Filters) => {\n const sectionsWithDefinitions = getValuesDefinitions(sections, values);\n return sectionsWithDefinitions\n .flatMap(([_section, definitions]) => definitions)\n .map(def => ({\n key: def.label,\n value: getChipValue(def, values),\n }));\n};\n\nconst getSettingsTags = ({ definitions }: ContextSettings) =>\n definitions.map(def => ({\n key: def.labels.identifier,\n value: def.labels.label,\n }));\n","import React from 'react';\n\nimport { ContentProviderRegister } from '../register';\nimport { DataContentProps } from '../types';\nimport { InsightCollectionDataType, InsightData } from './types';\nimport { useCorePageState } from '../../page/provider';\nimport { DataProviderElement, useDataState } from '../../data/provider';\nimport { ColumnSection, Component, Content, DataMode, PageDsl, SectionType } from '../../types';\nimport { DynamicTitleElement } from '../../common/dynamic.title/title';\nimport GenericWarnings from '../../design/warning/GenericWarnings';\nimport { ExportHideout } from '../../export/ExportHideout';\n\nconst trimLeadingSlash = (str: string | undefined) => (str && str.startsWith('/') ? str.substring(1) : str);\n\nconst getComponentsFromDsl = (dsl: PageDsl, dataEndPoint: string) => {\n const section = dsl.sections.filter(s => s.type === SectionType.column) as ColumnSection[];\n\n /* \n * To ensure proper compatibility, we replace the leading '/' before comparing it \n to support collections that are already created with '/' in the endpoint.\n */\n const trimmedDataEndPoint = trimLeadingSlash(dataEndPoint);\n const components = section\n .map(s => s.columns[0]?.component)\n .filter(c => trimLeadingSlash(c.dataOptions?.providerInfo.endpoint) === trimmedDataEndPoint);\n return components as Component[];\n};\n\nconst getComponentHeadingFromDsl = (dsl: PageDsl, dataEndPoint: string) => {\n const components = getComponentsFromDsl(dsl, dataEndPoint);\n return components[0]?.heading;\n};\n\nexport const getContentsFromDsl = (dsl: PageDsl, contentType: string, dataEndPoint: string) => {\n const contents = getComponentsFromDsl(dsl, dataEndPoint).map(c => c.contents);\n return contents.flatMap(c => c.fixed.filter(f => f.type === contentType)) as Content[];\n};\n\nexport const InsightElementWithData = (props: InsightData) => {\n const { dsl, globalWarnings } = useCorePageState();\n const {\n content: { type: contentType, dataOptions },\n dataType,\n componentSettings,\n componentName,\n paramsForData,\n corePageSettings,\n proposition,\n collection: { onError, onLoaded, onExportReady },\n } = props;\n const dataEndPoint = dataOptions?.providerInfo?.endpoint;\n\n const isLive = dataType === InsightCollectionDataType.live;\n const heading = dsl && contentType ? getComponentHeadingFromDsl(dsl, dataEndPoint) : undefined;\n const contentsFromDsl = dsl && contentType ? getContentsFromDsl(dsl, contentType, dataEndPoint) : [];\n\n if (!dsl || !contentsFromDsl.length) {\n return null;\n }\n\n return (\n <div>\n {heading?.title && (\n <DynamicTitleElement onChange={() => {}} settings={componentSettings} title={heading.title} inactive={true} />\n )}\n <ExportHideout>\n <div id={`${componentName}_export_content`} />\n </ExportHideout>\n {globalWarnings && <GenericWarnings warnings={globalWarnings} />}\n {contentsFromDsl.map((content, idx) =>\n !content.dataOptions || content.dataOptions?.mode === DataMode.takeFromProvider ? (\n <InsightContentElement\n key={`${content.type}-${idx}`}\n {...props}\n content={content}\n collection={{ onLoaded, onExportReady }}\n componentHeadingTitle={heading?.title}\n proposition={proposition}\n />\n ) : (\n <DataProviderElement\n key={`${content.type}-${idx}`}\n dataOptions={content.dataOptions}\n paramsForData={paramsForData}\n urlRoot={corePageSettings.data.url}\n collection={{ isLive, onError }}\n >\n <InsightContentElement\n {...props}\n content={content}\n collection={{ onLoaded, onExportReady }}\n componentHeadingTitle={heading?.title}\n proposition={proposition}\n />\n </DataProviderElement>\n )\n )}\n </div>\n );\n};\n\nconst InsightContentElement = ({ content, proposition, ...props }) => {\n const { type, instructions } = content;\n const { data: dataState, isDataLoadingFinished, isEnrichmentLoading } = useDataState();\n const Element = ContentProviderRegister.getInstance().getContent(type) as React.FC<DataContentProps>;\n\n if (!dataState || !isDataLoadingFinished) return null;\n\n return (\n <Element\n {...props}\n paramsForData={props.paramsForData}\n dataUrlRoot={props.corePageSettings.data.url}\n data={dataState}\n updateSettings={() => {}}\n dataStamp={1}\n isLoading={!isDataLoadingFinished}\n componentSettings={props.componentSettings}\n type={type}\n instructions={instructions}\n isEnrichmentLoading={isEnrichmentLoading}\n proposition={proposition}\n />\n );\n};\n","import React from 'react';\nimport { InsightRendererProps } from '@ecosystem/newron-client-collections/build/shared/types';\n\nimport { CorePageProvider } from '../../page/provider';\nimport { DataProviderElement } from '../../data/provider';\nimport { InsightCollectionDataType, InsightData } from './types';\nimport { InsightElementWithData } from './insightElementWithData';\nimport { AnalyticsProvider } from '../../analytics/analytics.provider';\nimport { getTrackingTagsFn, mapCoreMetaParams, mapTabName } from '../../analytics/tools';\nimport { useTracking } from '../../analytics/tracking.hook';\nimport { useParams } from 'react-router';\n\nexport const InsightElement = ({\n insight: { data: insightData, dataType, type, position, proposition },\n onLoaded,\n onExportReady,\n onError,\n onDataChanged,\n}: InsightRendererProps<InsightData>) => {\n const { paramsForData, corePageSettings, content, paramsForContext } = insightData;\n if (!insightData) {\n onDataChanged(insightData);\n }\n const { page, category } = useParams();\n const calcTrackingParams = (_eventName, meta) => {\n const subsection = meta.pageTitle || category;\n const pageName = `${subsection} ${mapTabName(page)}`;\n return mapCoreMetaParams({ proposition, meta, subsection, pageName });\n };\n\n const { trackEvent } = useTracking(calcTrackingParams);\n const getTrackingTags = getTrackingTagsFn(category, page, false, calcTrackingParams);\n const collectionProps = { onLoaded, onExportReady, onError };\n const componentName = type + (position || '');\n\n return (\n <CorePageProvider\n {...corePageSettings}\n collection={{\n ...corePageSettings.collection,\n isLive: dataType === InsightCollectionDataType.live,\n params: paramsForContext,\n }}\n >\n <AnalyticsProvider externalTrackingFn={trackEvent} externalGetTrackingTags={getTrackingTags}>\n <DataProviderElement\n dataOptions={content.dataOptions}\n paramsForData={paramsForData}\n urlRoot={corePageSettings.data.url}\n collection={{ isLive: dataType === InsightCollectionDataType.live, onError }}\n >\n <InsightElementWithData {...insightData} collection={collectionProps} componentName={componentName} />\n </DataProviderElement>\n </AnalyticsProvider>\n </CorePageProvider>\n );\n};\n","import {\n CollectionDataType,\n ConfigItemCallbacks,\n ConfigItemsInfo,\n} from '@ecosystem/newron-client-collections/build/shared/types';\nimport { Cell, ConfigItem, ConfigItemType, ConfigItemValue, Entity, PageView } from '@ecosystem/newron-client-lib';\nimport { InsightData } from './types';\nimport { contextClient } from '../../client';\nimport { Context, FilterDefinition, FilterSections, FilterType } from '../../types';\nimport { DateTime } from 'luxon';\nimport { getCollectionsContext } from '../../page/provider';\nimport { PageSettings } from '../../page/settings';\n\nconst componentTypes = {\n select: ConfigItemType.Select,\n multiSelect: ConfigItemType.MultiSelect,\n dateRange: ConfigItemType.DateRange,\n numericRange: ConfigItemType.NumericRange,\n};\n\nconst MARKET_CELL_KEY = 'cell';\nconst MARKET_TIMEFRAME_KEY = 'timeFrame';\nconst REGIONS_MULTI_CELL_ERROR = 'Regions are not available for multi-country or multi-product group markets.';\n\nconst extractFilterDefs = (section: FilterSections) => {\n if (!Object.keys(section || {}).length) {\n return [];\n }\n\n return section.ungrouped.definitions.map((def: FilterDefinition) => {\n const { name, label, options, type, min, max } = def;\n if (type === FilterType.select || type === FilterType.multiSelect) {\n return {\n label,\n options,\n type: componentTypes[type],\n key: name,\n };\n } else if (type === FilterType.dateRange || type === FilterType.numericRange) {\n return {\n label,\n type: componentTypes[type],\n key: name,\n options: {\n min: type === FilterType.dateRange ? new Date(min) : min,\n max: type === FilterType.dateRange ? new Date(max) : max,\n },\n };\n }\n });\n};\n\nconst getFilterDateValue = (date: Date) => {\n if (!date) return '';\n const month = `${date.getMonth() + 1}`.padStart(2, '0');\n const day = `${date.getDate()}`.padStart(2, '0');\n return `${date.getFullYear()}${month}${day}`;\n};\n\nconst getContextDateValue = (date: Date) => {\n const month = date.getMonth() + 1;\n const year = date.getFullYear();\n return `${DateTime.local(2025, month, 30).monthShort} ${year}`;\n};\n\nconst getLastDayOfMonth = (date: Date) => {\n const month = date.getMonth() + 1;\n const year = date.getFullYear();\n return new Date(DateTime.local(year, month, 1).endOf('month').toFormat('yyyy-MM-dd'));\n};\n\nconst getDateRange = (range, option) => {\n let minDate = range?.min ? getFilterDateValue(range.min) : '';\n const maxDate = range?.max ? getFilterDateValue(getLastDayOfMonth(range.max)) : '';\n const minContext = range?.min ? getContextDateValue(range.min) : '';\n const maxContext = range?.max ? getContextDateValue(getLastDayOfMonth(range.max)) : '';\n if (maxDate && !minDate) {\n minDate = getFilterDateValue(option.min);\n }\n const value = `${minDate}-${maxDate}`;\n let context = `${value}|${minContext}-${maxContext}`;\n\n if (!minContext && maxContext) {\n context = `${value}|Before ${maxContext}`;\n } else if (!maxContext && minContext) {\n context = `${value}|After ${minContext}`;\n }\n\n return {\n data: [value],\n context: [context],\n };\n};\n\nconst getNumericRange = range => {\n const minValue = range?.min || '';\n const maxValue = range?.max || '';\n const value = `${minValue}-${maxValue}`;\n let context = `${value}|${value}`;\n if (!minValue && maxValue) {\n context = `${value}|To ${maxValue}`;\n } else if (!maxValue && minValue) {\n context = `${value}|Above ${range?.min}`;\n }\n return {\n data: [value],\n context: [context],\n };\n};\n\nconst getDataContextValue = (item: ConfigItem) => {\n switch (item.type) {\n case ConfigItemType.MultiCell:\n case ConfigItemType.MultiSelect:\n return {\n data: item.value.map(row => row.value),\n context: item.value.map(row => `${row.value}|${row.label}`),\n };\n case ConfigItemType.Select:\n return {\n data: [item.value?.value],\n context: [`${item.value?.value}|${item.value?.label}`],\n };\n case ConfigItemType.DateRange:\n return getDateRange(item.value, item.options);\n case ConfigItemType.NumericRange: {\n return getNumericRange(item.value);\n }\n }\n};\n\nconst getUpdatedValues = configItems => {\n const newDataChanges = {};\n const newContextChanges = {};\n configItems.forEach(item => {\n const isCellorTimeFrame = item.key === MARKET_CELL_KEY || item.key === MARKET_TIMEFRAME_KEY;\n\n if (item.value) {\n const { data, context } = getDataContextValue(item);\n newDataChanges[item.key] = data;\n newContextChanges[isCellorTimeFrame ? item.key : `f:${item.key}`] = context;\n }\n });\n return { newDataChanges, newContextChanges };\n};\n\nconst clearValues = (configItems: ConfigItem[], data, isContextItem) => {\n configItems.forEach(item => {\n if (!item.value) {\n if (isContextItem) {\n delete data[`f:${item.key}`];\n } else {\n delete data[item.key];\n }\n }\n });\n return data;\n};\n\nconst getFilterValue = (item: ConfigItem, value) => {\n const range = ['min', 'max'];\n switch (item.type) {\n case ConfigItemType.MultiSelect:\n return item.options.filter(row => value.includes(row.value));\n case ConfigItemType.MultiCell:\n return item.options.filter(row => value.includes(row.value));\n case ConfigItemType.Select:\n return item.options.find(row => value.includes(row.value));\n case ConfigItemType.DateRange: {\n return value[0].split('-').reduce((acc, date, index) => {\n acc[range[index]] = date ? new Date(`${date.slice(0, 4)}-${date.slice(4, 6)}-${date.slice(6)}`) : undefined;\n return acc;\n }, {});\n }\n case ConfigItemType.NumericRange: {\n return value[0].split('-').reduce((acc, rangeValue, index) => {\n acc[range[index]] = rangeValue;\n return acc;\n }, {});\n }\n }\n};\n\nconst clearEmptyParams = paramsData => {\n Object.keys(paramsData).forEach(key => {\n if (paramsData[key][0] === '-' || paramsData[key][0] === '-|-') {\n delete paramsData[key];\n }\n });\n return paramsData;\n};\n\nconst updateConfigItems = (configItems: ConfigItem[], newValue: ConfigItemValue): ConfigItem[] => {\n return configItems.map(configItem => {\n if (configItem.key === newValue.key) {\n return {\n ...configItem,\n value: newValue.value,\n } as ConfigItem;\n }\n return configItem;\n });\n};\n\nexport function getConfigItemCallbacks(): ConfigItemCallbacks<InsightData, object> {\n const getConfigItems = async ({ data }: { data: InsightData }): Promise<ConfigItemsInfo> => {\n const { paramsForContext, paramsForData, corePageSettings } = data;\n\n const {\n context: { url: contextUrl },\n } = corePageSettings;\n\n const [{ filters, settings }, marketList] = await Promise.all([\n contextClient.getContext(contextUrl, paramsForContext),\n contextClient.getContextSettingOptions(contextUrl + '/markets', paramsForContext),\n ]);\n\n const filterList = [\n {\n label: MARKET_CELL_KEY,\n options: marketList,\n type: ConfigItemType.MultiCell,\n key: MARKET_CELL_KEY,\n value: settings.values.cell,\n },\n ...extractFilterDefs(filters.sections[0]),\n ...extractFilterDefs(filters.sections[1]),\n ] as ConfigItem[];\n\n const filterValues = filterList.map(item => {\n if (paramsForData[item.key]) {\n const value = paramsForData[item.key];\n item.value = getFilterValue(item, value);\n }\n return item;\n });\n\n return new Promise((resolve, _reject) => {\n resolve({\n configItems: filterValues,\n });\n });\n };\n\n const applyConfigValue = async ({\n data,\n configItems,\n newValue,\n }: {\n data: InsightData;\n configItems: ConfigItem[];\n newValue: ConfigItemValue;\n }): Promise<ConfigItemsInfo> => {\n const marketCell = configItems.find(item => item.key === MARKET_CELL_KEY);\n\n const marketMultiCellsWithOtherChanges =\n (marketCell.value as Cell[]).length > 1 && newValue.key !== MARKET_CELL_KEY;\n const marketMultiCellsWithNewValue = newValue.key === MARKET_CELL_KEY && (newValue.value as Cell[]).length > 1;\n const isRegionsGrouping = data.componentSettings?.grouping?.join(',')?.includes('region_name');\n\n if ((marketMultiCellsWithOtherChanges || marketMultiCellsWithNewValue) && isRegionsGrouping) {\n return {\n errorMessage: REGIONS_MULTI_CELL_ERROR,\n configItems: updateConfigItems(configItems, newValue),\n };\n }\n\n if (newValue.key === MARKET_CELL_KEY) {\n const { paramsForContext, corePageSettings } = data;\n\n const {\n context: { url: contextUrl },\n } = corePageSettings;\n\n const { filters }: Context = await contextClient.getContext(contextUrl, {\n ...paramsForContext,\n cell: (newValue.value as Entity[])?.map(row => `${row.value}|${row.label}`),\n });\n\n const marketCell = configItems.find(item => item.key === MARKET_CELL_KEY) || {};\n\n const filterList = [\n marketCell,\n ...extractFilterDefs(filters.sections[0]),\n ...extractFilterDefs(filters.sections[1]),\n ] as ConfigItem[];\n\n return {\n configItems: updateConfigItems(filterList, newValue),\n };\n }\n return {\n configItems: updateConfigItems(configItems, newValue),\n };\n };\n\n const getInsightData = async ({\n data,\n configItems,\n }: {\n data: InsightData;\n configItems: ConfigItem[];\n }): Promise<{ data: InsightData; dataType?: CollectionDataType }> => {\n const { paramsForContext, corePageSettings } = data;\n\n const {\n context: { url: contextUrl },\n } = corePageSettings;\n\n const marketCell = configItems.find(item => item.key === MARKET_CELL_KEY);\n\n if ((marketCell?.value as ConfigItem[])?.length) {\n const { settings }: Context = await contextClient.getContext(contextUrl, {\n ...paramsForContext,\n cell: (marketCell.value as Entity[])?.map(row => `${row.value}|${row.label}`),\n });\n\n configItems = [\n ...configItems,\n {\n key: 'timeFrame',\n type: ConfigItemType.MultiSelect,\n value: settings.values.timeFrame,\n } as ConfigItem,\n ];\n }\n\n const { newContextChanges, newDataChanges } = getUpdatedValues(configItems);\n const newData = {\n ...data,\n componentSettings: {\n ...data.componentSettings,\n uiEnrichments: ['dist'],\n },\n paramsForContext: clearEmptyParams({\n ...clearValues(configItems, data.paramsForContext, true),\n ...newContextChanges,\n uiEnrichments: ['dist'],\n }),\n paramsForData: clearEmptyParams({\n ...clearValues(configItems, data.paramsForData, false),\n ...newDataChanges,\n uiEnrichments: ['dist'],\n }),\n };\n return { data: newData };\n };\n\n const clearConfigValues = ({\n configItems,\n }: {\n data: InsightData;\n configItems: ConfigItem[];\n }): { configItems: ConfigItem[] } | Promise<{ configItems: ConfigItem[] }> => {\n return {\n configItems: configItems.map(item => {\n if (item?.value && item.key !== MARKET_CELL_KEY) {\n delete item?.value;\n }\n return item;\n }),\n };\n };\n\n const getViewStateInfo = ({\n data,\n pageView,\n }: {\n data: InsightData;\n pageView: Pick<PageView<{ version: number; pageSettings: PageSettings }>, 'data'>;\n }) => {\n const { paramsForContext } = data;\n const { version, pageSettings } = pageView.data;\n const { settings, filters } = getCollectionsContext({ params: { ...paramsForContext } });\n const updatedViewStateInfo = {\n viewState: {\n version: version,\n filterValues: filters,\n settingValues: settings,\n pageSettings,\n },\n };\n return updatedViewStateInfo;\n };\n\n return {\n getConfigItems,\n applyConfigValue,\n getInsightData,\n clearConfigValues,\n getViewStateInfo,\n };\n}\n","import React from 'react';\nimport ReactDOMClient from 'react-dom/client';\nimport singleSpaReact from 'single-spa-react';\nimport { logger } from '@ecosystem/newron-client-lib';\nimport { feedbackV2 } from '@ecosystem/newron-design-system';\nimport { Root } from './root/Root';\n\nimport './styles.css';\nimport axios from 'axios';\nimport { recordAxiosError } from './tools/axios.trace';\n\naxios.interceptors.response.use(\n function (response) {\n return response;\n },\n function (error) {\n try {\n recordAxiosError(error);\n } catch (e) {\n logger.info('axios intercept recordAxiosError failed', e);\n }\n return Promise.reject(error);\n }\n);\n\nconst lifecycles = singleSpaReact({\n renderType: 'createRoot',\n React,\n ReactDOMClient,\n rootComponent: Root,\n errorBoundary(err: Error, info: React.ErrorInfo) {\n logger.error(err, {\n componentStack: info.componentStack,\n });\n return (\n <div className=\"mx-32 my-16\">\n <feedbackV2.Alert\n title={\n <>\n The requested data for this page has failed to load.\n <br /> Please refresh your browser to try again. If this issue persists, please contact your GfK\n representative.\n </>\n }\n type=\"error\"\n />\n </div>\n );\n },\n});\n\nexport const { bootstrap, mount, unmount } = lifecycles;\n\nexport * from './index';\n","function Root() {\n return null;\n}\n\nexport { Root };\n"],"names":["___CSS_LOADER_EXPORT___","push","module","id","resolveDirectory","exports","rootDirLevel","meta","url","console","error","Error","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__extends","TypeError","String","__","this","constructor","create","__assign","assign","t","s","i","n","arguments","length","apply","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","__generator","body","f","y","g","_","label","sent","trys","ops","verb","Symbol","iterator","v","op","pop","__spreadArray","to","from","pack","ar","l","slice","concat","Bounds","left","top","width","height","add","x","w","h","fromClientRect","context","clientRect","windowBounds","fromDOMRectList","domRectList","domRect","find","rect","EMPTY","parseBounds","node","getBoundingClientRect","toCodePoints$1","str","codePoints","charCodeAt","extra","fromCodePoint$1","_i","fromCodePoint","codeUnits","index","codePoint","fromCharCode","chars$2","lookup$2","Uint8Array","i$2","chars$1$1","lookup$1$1","i$1$1","slice16$1","view","start","end","Uint16Array","Trie$1","Trie","initialValue","errorValue","highStart","highValueIndex","data","get","ix","UTRIE2_DATA_BLOCK_LENGTH$1","UTRIE2_INDEX_1_OFFSET$1","UTRIE2_INDEX_2_BLOCK_LENGTH$1","chars$3","lookup$3","i$3","SP","BA","HY","CL","CP","EX","IN","NS","OP","IS","NU","PO","PR","SY","AL","EB","EM","H2","H3","ID","JL","JV","JT","SA","ea_OP","BREAK_NOT_ALLOWED$1","BREAK_ALLOWED$1","UnicodeTrie$1","base64","buffer","encoded1","encoded2","encoded3","encoded4","bufferLength","len","ArrayBuffer","bytes","isArray","decode$1","view32","polyUint32Array$1","Uint32Array","view16","polyUint16Array$1","headerLength","Math","ceil","createTrieFromBase64$1","ALPHABETICS","HARD_LINE_BREAKS","SPACE$1","PREFIX_POSTFIX","LINE_BREAKS","KOREAN_SYLLABLE_BLOCK","HYPHEN","isAdjacentWithSpaceIgnored","a","currentIndex","classTypes","current","indexOf","prev","previousNonSpaceClassType","type","_lineBreakAtIndex","indicies","forbiddenBreaks","beforeIndex","afterIndex","before","prevIndex","count","cssFormattedClasses","options","lineBreak","wordBreak","_a","types","indices","categories","forEach","classType","codePointsToCharacterClasses","isLetterNumber","map","forbiddenBreakpoints","letterNumber","undefined","Break","required","HYPHEN_MINUS","PLUS_SIGN","EOF","isDigit","isHex","isWhiteSpace","isNameStartCodePoint","isLowerCaseLetter","isUpperCaseLetter","isLetter","isNonASCIICodePoint","isNameCodePoint","isNonPrintableCodePoint","isValidEscape","c1","c2","isIdentifierStart","c3","isNumberStart","stringToNumber","c","sign","integers","int","parseInt","fraction","fracd","frac","expsign","exponent","exp","pow","LEFT_PARENTHESIS_TOKEN","RIGHT_PARENTHESIS_TOKEN","COMMA_TOKEN","SUFFIX_MATCH_TOKEN","PREFIX_MATCH_TOKEN","COLUMN_TOKEN","DASH_MATCH_TOKEN","INCLUDE_MATCH_TOKEN","LEFT_CURLY_BRACKET_TOKEN","RIGHT_CURLY_BRACKET_TOKEN","SUBSTRING_MATCH_TOKEN","BAD_URL_TOKEN","BAD_STRING_TOKEN","CDO_TOKEN","CDC_TOKEN","COLON_TOKEN","SEMICOLON_TOKEN","LEFT_SQUARE_BRACKET_TOKEN","RIGHT_SQUARE_BRACKET_TOKEN","WHITESPACE_TOKEN","EOF_TOKEN","Tokenizer","_value","write","chunk","read","tokens","token","consumeToken","consumeCodePoint","consumeStringToken","peekCodePoint","flags","consumeName","reconsumeCodePoint","consumeNumericToken","e1","e2","e3","consumeIdentLikeToken","a1","a2","a3","u1","u2","consumeUnicodeRangeToken","consumeWhiteSpace","shift","unshift","delta","digits","questionMarks","digit","endDigits","toLowerCase","consumeUrlToken","stringToken","consumeBadUrlRemnants","consumeEscapedCodePoint","consumeStringSlice","amount","min","splice","endingCodePoint","consumeNumber","repr","number","unit","hex","hexCodePoint","isSurrogateCodePoint","Parser","_tokens","tokenizer","parseValue","parseComponentValue","parseValues","parseComponentValues","SyntaxError","reconsumeToken","consumeComponentValue","values","consumeSimpleBlock","consumeFunction","block","isEndingTokenFor","functionToken","cssFunction","name","isDimensionToken","isNumberToken","isIdentToken","isStringToken","isIdentWithValue","nonWhiteSpace","nonFunctionArgSeparator","parseFunctionArgs","args","arg","isLength","isLengthPercentage","parseLengthPercentageTuple","ZERO_LENGTH","FIFTY_PERCENT","HUNDRED_PERCENT","getAbsoluteValueForTuple","tuple","getAbsoluteValue","parent","GRAD","TURN","angle","_context","PI","isAngle","parseNamedSide","filter","ident","join","deg","color$1","colorFunction","SUPPORTED_COLOR_FUNCTIONS","r","substring","namedColor","COLORS","toUpperCase","TRANSPARENT","isTransparent","color","asString","alpha","blue","green","red","round","getTokenColorValue","max","rgb","_b","hue2rgb","t1","t2","hue","hsl","saturation","lightness","hsla","rgba","parseColor","ALICEBLUE","ANTIQUEWHITE","AQUA","AQUAMARINE","AZURE","BEIGE","BISQUE","BLACK","BLANCHEDALMOND","BLUE","BLUEVIOLET","BROWN","BURLYWOOD","CADETBLUE","CHARTREUSE","CHOCOLATE","CORAL","CORNFLOWERBLUE","CORNSILK","CRIMSON","CYAN","DARKBLUE","DARKCYAN","DARKGOLDENROD","DARKGRAY","DARKGREEN","DARKGREY","DARKKHAKI","DARKMAGENTA","DARKOLIVEGREEN","DARKORANGE","DARKORCHID","DARKRED","DARKSALMON","DARKSEAGREEN","DARKSLATEBLUE","DARKSLATEGRAY","DARKSLATEGREY","DARKTURQUOISE","DARKVIOLET","DEEPPINK","DEEPSKYBLUE","DIMGRAY","DIMGREY","DODGERBLUE","FIREBRICK","FLORALWHITE","FORESTGREEN","FUCHSIA","GAINSBORO","GHOSTWHITE","GOLD","GOLDENROD","GRAY","GREEN","GREENYELLOW","GREY","HONEYDEW","HOTPINK","INDIANRED","INDIGO","IVORY","KHAKI","LAVENDER","LAVENDERBLUSH","LAWNGREEN","LEMONCHIFFON","LIGHTBLUE","LIGHTCORAL","LIGHTCYAN","LIGHTGOLDENRODYELLOW","LIGHTGRAY","LIGHTGREEN","LIGHTGREY","LIGHTPINK","LIGHTSALMON","LIGHTSEAGREEN","LIGHTSKYBLUE","LIGHTSLATEGRAY","LIGHTSLATEGREY","LIGHTSTEELBLUE","LIGHTYELLOW","LIME","LIMEGREEN","LINEN","MAGENTA","MAROON","MEDIUMAQUAMARINE","MEDIUMBLUE","MEDIUMORCHID","MEDIUMPURPLE","MEDIUMSEAGREEN","MEDIUMSLATEBLUE","MEDIUMSPRINGGREEN","MEDIUMTURQUOISE","MEDIUMVIOLETRED","MIDNIGHTBLUE","MINTCREAM","MISTYROSE","MOCCASIN","NAVAJOWHITE","NAVY","OLDLACE","OLIVE","OLIVEDRAB","ORANGE","ORANGERED","ORCHID","PALEGOLDENROD","PALEGREEN","PALETURQUOISE","PALEVIOLETRED","PAPAYAWHIP","PEACHPUFF","PERU","PINK","PLUM","POWDERBLUE","PURPLE","REBECCAPURPLE","RED","ROSYBROWN","ROYALBLUE","SADDLEBROWN","SALMON","SANDYBROWN","SEAGREEN","SEASHELL","SIENNA","SILVER","SKYBLUE","SLATEBLUE","SLATEGRAY","SLATEGREY","SNOW","SPRINGGREEN","STEELBLUE","TAN","TEAL","THISTLE","TOMATO","TURQUOISE","VIOLET","WHEAT","WHITE","WHITESMOKE","YELLOW","YELLOWGREEN","backgroundClip","prefix","parse","backgroundColor","format","parseColorStop","stop","processColorStops","stops","lineLength","first","last","processStops","previous","stop_1","absoluteValue","gapBegin","stop_2","gapLength","gapValue","calculateGradientDirection","radian","corner","centerX","centerY","atan2","getAngleFromCorner","abs","sin","cos","halfWidth","halfHeight","halfLineLength","yDiff","xDiff","distance","sqrt","findCorner","closest","reduce","stat","cx","cy","optimumDistance","optimumCorner","Infinity","prefixLinearGradient","angle$1","firstToken","colorStop","CLOSEST_SIDE","FARTHEST_SIDE","CLOSEST_CORNER","FARTHEST_CORNER","CIRCLE","ELLIPSE","COVER","CONTAIN","prefixRadialGradient","shape","size","position","isColorStop","acc","image","image_1","cache","addImage","imageFunction","SUPPORTED_IMAGE_FUNCTIONS","BACKGROUND_SIZE","isAtPosition_1","backgroundImage","isSupportedImage","backgroundOrigin","backgroundPosition","backgroundRepeat","parseBackgroundRepeat","LINE_BREAK","backgroundSize","isBackgroundSizeInfoToken","borderColorForSide","side","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","borderRadiusForSide","borderTopLeftRadius","borderTopRightRadius","borderBottomRightRadius","borderBottomLeftRadius","borderStyleForSide","style","borderTopStyle","borderRightStyle","borderBottomStyle","borderLeftStyle","borderWidthForSide","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","direction","display","bit","parseDisplayValue","float","letterSpacing","WORD_BREAK","STRICT","NORMAL","lineHeight","computeLineHeight","fontSize","listStyleImage","listStylePosition","listStyleType","marginForSide","marginTop","marginRight","marginBottom","marginLeft","overflow","overflowWrap","paddingForSide","paddingTop","paddingRight","paddingBottom","paddingLeft","textAlign","textShadow","shadow","offsetX","offsetY","blur","textTransform","transform$1","transformFunction","SUPPORTED_TRANSFORM_FUNCTIONS","matrix","matrix3d","b1","b2","a4","b4","DEFAULT_VALUE","DEFAULT","transformOrigin","origins","visibility","BREAK_ALL","KEEP_ALL","zIndex","auto","order","time","opacity","textDecorationColor","textDecorationLine","line","fontFamily","accumulator","results","toString","fontWeight","fontVariant","fontStyle","contains","content","counterIncrement","increments","filtered","counter","increment","counterReset","resets","reset","duration","quotes","open_1","close_1","open","close","getQuote","depth","quote","boxShadow","spread","inset","paintOrder","layers","webkitTextStrokeColor","webkitTextStrokeWidth","CSSParsedDeclaration","declaration","animationDuration","cssFloat","overflowTuple","overflowX","overflowY","textDecoration","transform","isVisible","isTransformed","isPositioned","isPositionedWithZIndex","isFloating","isInlineLevel","CSSParsedPseudoDeclaration","CSSParsedCounterDeclaration","descriptor","parser","length_1","value_1","isDebugging","element","elementType","getAttribute","getElementDebugType","ElementContainer","textNodes","elements","styles","window","getComputedStyle","isHTMLElementNode","some","bounds","chars$1","lookup$1","i$1","slice16","UTRIE2_DATA_BLOCK_LENGTH","UTRIE2_INDEX_1_OFFSET","UTRIE2_INDEX_2_BLOCK_LENGTH","chars","lookup","PseudoElementType","L","V","LV","LVT","UnicodeTrie","decode","polyUint32Array","polyUint16Array","createTrieFromBase64","BREAK_NOT_ALLOWED","codePointToClass","_graphemeBreakAtIndex","_codePoints","countRI","GraphemeBreaker","toCodePoints","lastEnd","graphemeBreak","isGreenPixel","createForeignObjectSVG","xmlns","svg","document","createElementNS","foreignObject","setAttributeNS","appendChild","loadSerializedSVG$1","img","Image","onload","onerror","src","encodeURIComponent","XMLSerializer","serializeToString","FEATURES","SUPPORT_RANGE_BOUNDS","createRange","range","testElement","createElement","TEST_HEIGHT","selectNode","rangeBounds","rangeHeight","removeChild","testRangeBounds","defineProperty","SUPPORT_WORD_BREAKING","wordSpacing","innerHTML","repeat","firstChild","textList","offset","supports","every","text","setStart","setEnd","boundAhead","testIOSLineBreak","SUPPORT_SVG_DRAWING","canvas","ctx","getContext","drawImage","toDataURL","testSVG","SUPPORT_FOREIGNOBJECT_DRAWING","fetch","fillStyle","fillRect","greenImageSrc","getImageData","catch","testForeignObject","SUPPORT_CORS_IMAGES","crossOrigin","SUPPORT_RESPONSE_TYPE","XMLHttpRequest","responseType","SUPPORT_CORS_XHR","SUPPORT_NATIVE_TEXT_SEGMENTATION","Intl","Segmenter","TextBounds","getWrapperBounds","ownerDocument","wrapper","cloneNode","parentNode","replaceChild","segmentGraphemes","segmenter","granularity","segment","bk","breaker","graphemes","splitGraphemes","breakText","breakWords","segmentWords","wordSeparators","nextIndex","LineBreaker","words","_loop_1","word_1","TextContainer","textBounds","trim","clientRects","getClientRects","subSegments","subOffset_1","subSegment","replacementNode","splitText","parseTextBounds","replace","CAPITALIZE","capitalize","m","p1","p2","ImageElementContainer","_super","_this","currentSrc","intrinsicWidth","naturalWidth","intrinsicHeight","naturalHeight","CanvasElementContainer","SVGElementContainer","setAttribute","baseVal","LIElementContainer","OLElementContainer","reversed","CHECKBOX_BORDER_RADIUS","RADIO_BORDER_RADIUS","CHECKBOX","RADIO","PASSWORD","INPUT_COLOR","InputElementContainer","input","checked","placeholder","SelectElementContainer","option","selectedIndex","TextareaElementContainer","IFrameElementContainer","iframe","contentWindow","documentElement","tree","parseTree","documentBackgroundColor","bodyBackgroundColor","LIST_OWNERS","parseNodeTree","root","childNode","nextNode","nextSibling","isTextNode","isElementNode","isSlotElement","assignedNodes","container","createContainer","createsRealStackingContext","createsStackingContext","tagName","slot","shadowRoot","isTextareaElement","isSVGElement","isSelectElement","isImageElement","isCanvasElement","isLIElement","isOLElement","isInputElement","isIFrameElement","isBodyElement","nodeType","Node","TEXT_NODE","ELEMENT_NODE","isSVGElementNode","className","isVideoElement","isStyleElement","isCustomElement","CounterState","counters","getCounterValue","getCounterValues","canReset","entry","counterNames","ROMAN_UPPER","ARMENIAN","HEBREW","GEORGIAN","createAdditiveCounter","symbols","fallback","suffix","createCounterText","string","integer","createCounterStyleWithSymbolResolver","codePointRangeLength","isNumeric","resolver","createCounterStyleFromRange","codePointRangeStart","codePointRangeEnd","floor","createCounterStyleFromSymbols","createCJKCounter","numbers","multipliers","negativeSign","tmp","coefficient","CHINESE_INFORMAL_MULTIPLIERS","CHINESE_FORMAL_MULTIPLIERS","JAPANESE_NEGATIVE","KOREAN_NEGATIVE","appendSuffix","defaultSuffix","cjkSuffix","koreanSuffix","spaceSuffix","CJK_TEN_COEFFICIENTS","CJK_ZEROS","IGNORE_ATTRIBUTE","DocumentCloner","scrolledElements","referenceElement","quoteDepth","toIFrame","windowSize","createIFrameContainer","scrollX","defaultView","pageXOffset","scrollY","pageYOffset","cloneWindow","documentClone","iframeLoad","iframeLoader","onclone","restoreNodeScroll","scrollTo","test","navigator","userAgent","logger","warn","clonedReferenceElement","nodeName","fonts","ready","imagesReady","serializeDoctype","doctype","restoreOwnerScroll","adoptNode","createElementClone","createCanvasClone","createVideoClone","createStyleClone","clone","srcset","loading","createCustomElementClone","copyCSSStyles","sheet","cssRules","css","rule","cssText","textContent","inlineImages","info","clonedCanvas","clonedCtx","allowTaint","putImageData","gl","attribs","getContextAttributes","preserveDrawingBuffer","video","offsetWidth","offsetHeight","blankCanvas","appendChildNode","child","copyStyles","hasAttribute","ignoreElements","cloneChildNodes","assignedNode","createTextNode","transitionProperty","styleBefore","styleAfter","createPseudoHideStyles","resolvePseudoContent","BEFORE","insertBefore","after","AFTER","scrollTop","scrollLeft","pseudoElt","anonymousReplacedElement","attr","counterStyle","counterState","counterType","delim","counterStates","counterType_1","separator","PSEUDO_HIDE_ELEMENT_CLASS_BEFORE","PSEUDO_HIDE_ELEMENT_CLASS_AFTER","newClassName","baseValue","destroy","CORNER","cloneIframeContainer","border","scrolling","imageReady","complete","all","images","interval","setInterval","childNodes","readyState","clearInterval","ignoredStyleProperties","target","property","item","setProperty","getPropertyValue","internalSubset","publicId","systemId","PSEUDO_HIDE_ELEMENT_STYLE","createStyles","CacheStorage","getOrigin","link","_link","href","protocol","hostname","port","isSameOrigin","_origin","setContext","location","Cache","_options","_cache","has","isBlobImage","isRenderable","loadImage","match","key","useCORS","useProxy","isInlineImage","proxy","debug","isInlineBase64Image","setTimeout","imageTimeout","keys","xhr","status","response","reader_1","FileReader","addEventListener","readAsDataURL","queryString","timeout_1","timeout","ontimeout","send","INLINE_SVG","INLINE_BASE64","INLINE_IMG","isSVG","substr","Vector","deltaX","deltaY","lerp","BezierCurve","startControl","endControl","subdivide","firstHalf","ab","bc","cd","abbc","bccd","dest","reverse","isBezierCurve","path","BoundCurves","tlh","tlv","trh","trv","_c","brh","brv","_d","blh","blv","factors","maxFactor","topWidth","rightHeight","bottomWidth","leftHeight","topLeftBorderDoubleOuterBox","getCurvePoints","TOP_LEFT","topRightBorderDoubleOuterBox","TOP_RIGHT","bottomRightBorderDoubleOuterBox","BOTTOM_RIGHT","bottomLeftBorderDoubleOuterBox","BOTTOM_LEFT","topLeftBorderDoubleInnerBox","topRightBorderDoubleInnerBox","bottomRightBorderDoubleInnerBox","bottomLeftBorderDoubleInnerBox","topLeftBorderStroke","topRightBorderStroke","bottomRightBorderStroke","bottomLeftBorderStroke","topLeftBorderBox","topRightBorderBox","bottomRightBorderBox","bottomLeftBorderBox","topLeftPaddingBox","topRightPaddingBox","bottomRightPaddingBox","bottomLeftPaddingBox","topLeftContentBox","topRightContentBox","bottomRightContentBox","bottomLeftContentBox","r1","r2","kappa","ox","oy","xm","ym","calculateBorderBoxPath","curves","calculatePaddingBoxPath","TransformEffect","ClipEffect","OpacityEffect","isClipEffect","effect","equalPath","StackingContext","inlineLevel","nonInlineLevel","negativeZIndex","zeroOrAutoZIndexOrTransformedOrOpacity","positiveZIndex","nonPositionedFloats","nonPositionedInlineLevel","ElementPaint","effects","borderBox","paddingBox","getEffects","inFlow","croplessEffects","parseStackTree","stackingContext","realStackingContext","listItems","treatAsRealStackingContext","paintContainer","listOwnerItems","parentStack","stack","order_1","index_1","index_2","processListItems","owner","numbering","listValue","parsePathForBorder","borderSide","createPathFromCurves","createStrokePathFromCurves","outer1","outer2","inner1","inner2","contentBox","calculateBackgroundRendering","intrinsicSize","backgroundPositioningArea","calculateBackgroundPositioningArea","getBackgroundValueForIndex","backgroundPaintingArea","calculateBackgroundPaintingArea","backgroundImageSize","calculateBackgroundSize","sizeWidth","sizeHeight","calculateBackgroundRepeatPath","isAuto","AUTO","hasIntrinsicValue","intrinsicProportion","second","hasIntrinsicProportion","hasIntrinsicWidth","hasIntrinsicHeight","hasIntrinsicDimensions","width_3","height_3","SAMPLE_TEXT","FontMetrics","_data","_document","parseMetrics","span","margin","padding","whiteSpace","verticalAlign","baseline","offsetTop","middle","getMetrics","Renderer","CanvasRenderer","_activeEffects","scale","fontMetrics","translate","textBaseline","applyEffects","popEffect","applyEffect","save","isOpacityEffect","globalAlpha","isTransformEffect","clip","restore","renderStack","renderStackContent","renderNode","paint","renderNodeBackgroundAndBorders","renderNodeContent","renderTextWithLetterSpacing","fillText","letter","measureText","createFontStyle","variant","fixIOSSystemFonts","renderTextNode","font","paintOrderLayer","textShadows","shadowColor","shadowOffsetX","shadowOffsetY","shadowBlur","strokeStyle","lineWidth","lineJoin","chrome","strokeText","renderReplacedElement","box","render","fill","beginPath","arc","isTextInputElement","canvasTextAlign","_e","_f","_g","_h","_j","_k","_l","_m","_o","_p","mask","paths","moveTo","lineTo","formatPath","closePath","point","bezierCurveTo","renderRepeat","pattern","resizeImage","renderBackgroundImage","this_1","x0","x1","y0","y1","gradient_1","top_1","rx","ry","radialGradient_1","midX","midY","invF","createPattern","createLinearGradient","addColorStop","background","isRadialGradient","gradient","calculateRadius","createRadialGradient","renderSolidBorder","curvePoints","renderDoubleBorder","outerPaths","innerPaths","parsePathForBorderDoubleOuter","parsePathForBorderDoubleInner","hasBackground","borders","borders_1","calculateBackgroundCurvedPaintingArea","deltaW","deltaH","borderBoxArea","maskOffset","shadowPaintingArea","renderDashedDottedBorder","strokePaths","boxPaths","startX","startY","endX","endY","dashLength","spaceLength","useLineDash","multiplier","numberOfDashes","minSpace","maxSpace","path1","path2","parsePathForBorderStroke","setLineDash","lineCap","stroke","calculateContentBoxPath","iOSBrokenFonts","fontFamilies","ForeignObjectRenderer","loadSerializedSVG","Logger","enabled","Date","now","getTime","instances","Context","instanceName","instanceCount","logging","renderElement","opts","resourceOptions","contextOptions","windowOptions","foreignObjectRendering","cloneOptions","documentCloner","clonedElement","renderOptions","_q","_r","_s","_t","_u","windowWidth","innerWidth","windowHeight","innerHeight","scrollWidth","clientWidth","scrollHeight","clientHeight","parseDocumentSize","parseBackgroundColor","devicePixelRatio","removeContainer","backgroundColorOverride","defaultBackgroundColor","factory","urlString","rootDirectoryLevel","pathname","numDirsProcessed","finalPath","host","Number","isInteger","__WEBPACK_EXTERNAL_MODULE__425__","setAttributes","attributes","insert","k","for","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","ref","__self","__source","q","defaultProps","$$typeof","props","_owner","Fragment","jsx","jsxs","styleElement","styleSheet","cssMapping","btoa","unescape","JSON","stringify","sourceMapping","adler32","crc32","inflate_fast","inflate_table","Z_FINISH","Z_BLOCK","Z_TREES","Z_OK","Z_STREAM_END","Z_NEED_DICT","Z_STREAM_ERROR","Z_DATA_ERROR","Z_MEM_ERROR","Z_BUF_ERROR","Z_DEFLATED","HEAD","DICT","TYPE","TYPEDO","COPY_","LEN_","LEN","CHECK","BAD","MEM","zswap32","InflateState","strm","mode","wrap","havedict","dmax","check","total","head","wbits","wsize","whave","wnext","hold","bits","lencode","distcode","lenbits","distbits","ncode","nlen","ndist","have","lens","work","lendyn","distdyn","sane","back","was","inflateStateCheck","state","inflateResetKeep","total_in","total_out","msg","adler","Int32Array","inflateReset","inflateReset2","windowBits","inflateInit2","ret","lenfix","distfix","virgin","fixedtables","sym","updatewindow","copy","dist","set","subarray","inflateInit","inflate","flush","output","put","_in","_out","from_source","here_bits","here_op","here_val","last_bits","last_op","last_val","here","hbuf","avail_in","next_out","avail_out","next_in","inf_leave","xflags","os","extra_len","comment","hcrc","data_type","inflateEnd","inflateGetHeader","inflateSetDictionary","dictionary","dictLength","dictid","inflateInfo","Deflate","deflate","deflateRaw","gzip","Inflate","inflateRaw","ungzip","constants","__WEBPACK_EXTERNAL_MODULE__1867__","STR_APPLY_UIA_OK","_utf8len","string2buf","TextEncoder","encode","buf","m_pos","str_len","buf_len","buf2string","TextDecoder","out","utf16buf","c_len","buf2binstring","utf8border","pos","lbase","lext","dbase","dext","lens_index","codes","table","table_index","incr","low","curr","drop","used","huff","base","MAXBITS","offs","s1","s2","zlib_deflate","utils","strings","ZStream","Z_NO_FLUSH","Z_SYNC_FLUSH","Z_FULL_FLUSH","Z_DEFAULT_COMPRESSION","Z_DEFAULT_STRATEGY","level","method","chunkSize","memLevel","strategy","opt","raw","err","ended","chunks","deflateInit2","header","deflateSetHeader","dict","deflateSetDictionary","_dict_set","deflator","flush_mode","_flush_mode","onData","deflateEnd","onEnd","flattenChunks","zero","extra_lbits","extra_dbits","extra_blbits","bl_order","static_ltree","static_dtree","D_CODES","_dist_code","_length_code","MAX_MATCH","base_length","base_dist","StaticTreeDesc","static_tree","extra_bits","extra_base","elems","max_length","has_stree","static_l_desc","static_d_desc","static_bl_desc","TreeDesc","dyn_tree","stat_desc","max_code","d_code","put_short","pending_buf","pending","send_bits","bi_valid","bi_buf","send_code","bi_reverse","code","res","gen_codes","bl_count","next_code","MAX_BITS","init_block","LITERALS","dyn_ltree","dyn_dtree","bl_tree","END_BLOCK","opt_len","static_len","sym_next","matches","bi_windup","smaller","_n2","_m2","pqdownheap","heap","j","heap_len","compress_block","ltree","dtree","lc","sx","sym_buf","build_tree","desc","stree","heap_max","xbits","gen_bitlen","scan_tree","curlen","prevlen","nextlen","max_count","min_count","REP_3_6","REPZ_3_10","REPZ_11_138","send_tree","static_init_done","_tr_stored_block","stored_len","_tr_init","LENGTH_CODES","L_CODES","tr_static_init","l_desc","d_desc","bl_desc","_tr_flush_block","opt_lenb","static_lenb","max_blindex","block_mask","detect_data_type","BL_CODES","build_bl_tree","lcodes","dcodes","blcodes","rank","send_all_trees","_tr_tally","sym_end","_tr_align","STATIC_TREES","bi_flush","__WEBPACK_EXTERNAL_MODULE__4726__","crcTable","makeTable","crc","nonce","stylesInDOM","getIndexByIdentifier","identifier","modulesToDom","list","idCountMap","identifiers","indexByIdentifier","obj","media","sourceMap","layer","references","updater","addElementStyle","byIndex","api","domAPI","update","newObj","remove","lastIdentifiers","newList","newLastIdentifiers","_index","createRoot","hydrateRoot","__WEBPACK_EXTERNAL_MODULE__5897__","AvailableTemplate","ColumnType","PowerpointSlideType","RequestCompression","axios","pako","SuppressedError","compressionTransformer","headers","getCompressionTransformFn","defaults","transformRequest","config","authHeader","bearerToken","Authorization","axiosConfig","baseURL","baseUrl","requestCompression","disposition","filename","__WEBPACK_EXTERNAL_MODULE__6267__","cssWithMappingToString","needLayer","modules","dedupe","alreadyImportedModules","bind","fn","getPrototypeOf","kindOf","thing","kindOfTest","typeOfTest","isUndefined","isArrayBuffer","isString","isFunction","isNumber","isObject","isPlainObject","val","toStringTag","isDate","isFile","isBlob","isFileList","isURLSearchParams","isReadableStream","isRequest","isResponse","isHeaders","allOwnKeys","getOwnPropertyNames","findKey","_key","_global","globalThis","self","isContextDefined","isTypedArray","TypedArray","isHTMLForm","prop","isRegExp","reduceDescriptors","reducer","descriptors","getOwnPropertyDescriptors","reducedDescriptors","defineProperties","isAsyncFn","_setImmediate","setImmediateSupported","setImmediate","postMessageSupported","postMessage","random","callbacks","source","cb","asap","queueMicrotask","process","nextTick","utils$1","isBuffer","isFormData","kind","FormData","append","isArrayBufferView","isView","isBoolean","isStream","pipe","merge","caseless","assignValue","targetKey","extend","stripBOM","inherits","superConstructor","toFlatObject","sourceObj","destObj","propFilter","merged","endsWith","searchString","lastIndex","toArray","arr","forEachEntry","pair","matchAll","regExp","exec","hasOwnProp","freezeMethods","enumerable","writable","toObjectSet","arrayOrString","delimiter","define","split","toCamelCase","noop","toFiniteNumber","defaultValue","isFinite","global","isSpecCompliantForm","toJSONObject","visit","reducedValue","isThenable","AxiosError","message","request","captureStackTrace","toJSON","description","fileName","lineNumber","columnNumber","prototype$1","isVisitable","removeBrackets","renderKey","dots","customProps","axiosError","cause","predicates","toFormData","formData","metaTokens","indexes","visitor","defaultVisitor","useBlob","Blob","convertValue","toISOString","Buffer","isFlatArray","el","exposedHelpers","build","encode$1","charMap","AxiosURLSearchParams","params","_pairs","buildURL","_encode","serialize","serializeFn","serializedParams","hashmarkIndex","encoder","InterceptorManager$1","handlers","use","synchronous","runWhen","eject","clear","transitionalDefaults","silentJSONParsing","forcedJSONParsing","clarifyTimeoutError","platform$1","isBrowser","classes","URLSearchParams","protocols","hasBrowserEnv","_navigator","hasStandardBrowserEnv","product","hasStandardBrowserWebWorkerEnv","WorkerGlobalScope","importScripts","origin","platform","freeze","formDataToJSON","buildPath","isNumericKey","isLast","arrayToObject","entries","parsePropPath","transitional","adapter","contentType","getContentType","hasJSONContentType","isObjectPayload","setContentType","helpers","isNode","toURLEncodedForm","formSerializer","_FormData","env","rawValue","stringifySafely","transformResponse","JSONRequested","strictJSONParsing","ERR_BAD_RESPONSE","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","common","defaults$1","ignoreDuplicateOf","$internals","normalizeHeader","normalizeValue","matchHeaderValue","isHeaderNameFilter","AxiosHeaders","valueOrRewrite","rewrite","setHeader","_header","_rewrite","lHeader","setHeaders","rawHeaders","parsed","parseHeaders","tokensRE","parseTokens","matcher","deleted","deleteHeader","normalize","normalized","char","formatHeader","targets","asStrings","computed","accessor","accessors","defineAccessor","accessorName","methodName","arg1","arg2","arg3","configurable","buildAccessors","mapped","headerValue","AxiosHeaders$1","transformData","fns","isCancel","__CANCEL__","CanceledError","ERR_CANCELED","settle","ERR_BAD_REQUEST","progressEventReducer","listener","isDownloadStream","freq","bytesNotified","_speedometer","samplesCount","timestamps","firstSampleTS","tail","chunkLength","startedAt","bytesCount","passed","speedometer","lastArgs","timer","timestamp","threshold","invoke","clearTimeout","throttle","loaded","lengthComputable","progressBytes","rate","progress","estimated","event","progressEventDecorator","throttled","asyncDecorator","isURLSameOrigin","isMSIE","URL","cookies","expires","domain","secure","cookie","toGMTString","RegExp","decodeURIComponent","buildFullPath","requestedURL","allowAbsoluteUrls","isRelativeUrl","relativeURL","combineURLs","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","paramsSerializer","timeoutMessage","withCredentials","withXSRFToken","onUploadProgress","onDownloadProgress","decompress","beforeRedirect","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding","configValue","resolveConfig","newConfig","auth","username","password","Boolean","xsrfValue","xhrAdapter","_config","requestData","requestHeaders","onCanceled","uploadThrottled","downloadThrottled","flushUpload","flushDownload","unsubscribe","signal","removeEventListener","onloadend","responseHeaders","getAllResponseHeaders","responseText","statusText","onreadystatechange","responseURL","onabort","ECONNABORTED","ERR_NETWORK","timeoutErrorMessage","ETIMEDOUT","setRequestHeader","upload","cancel","abort","subscribe","aborted","parseProtocol","composeSignals$1","signals","controller","AbortController","reason","streamChunk","byteLength","trackStream","stream","onProgress","onFinish","async","iterable","asyncIterator","reader","getReader","readStream","readBytes","_onFinish","ReadableStream","pull","loadedBytes","enqueue","return","highWaterMark","isFetchSupported","Request","Response","isReadableStreamSupported","encodeText","arrayBuffer","supportsRequestStream","duplexAccessed","hasContentType","duplex","supportsResponseStream","resolvers","ERR_NOT_SUPPORT","knownAdapters","http","fetchOptions","composedSignal","toAbortSignal","requestContentLength","getContentLength","_request","getBodyLength","resolveBodyLength","contentTypeHeader","isCredentialsSupported","credentials","isStreamResponse","responseContentLength","responseData","renderReason","isResolvedHandle","adapters","nameOrAdapter","rejectedReasons","reasons","throwIfCancellationRequested","throwIfRequested","dispatchRequest","validators$1","deprecatedWarnings","validator","version","formatMessage","ERR_DEPRECATED","spelling","correctSpelling","assertOptions","schema","allowUnknown","ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","validators","Axios","instanceConfig","interceptors","configOrUrl","dummy","boolean","function","withXsrfToken","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","interceptor","responseInterceptorChain","promise","chain","onFulfilled","onRejected","getUri","generateHTTPMethod","isForm","Axios$1","CancelToken","executor","resolvePromise","_listeners","onfulfilled","_resolve","CancelToken$1","HttpStatusCode","Continue","SwitchingProtocols","Processing","EarlyHints","Ok","Created","Accepted","NonAuthoritativeInformation","NoContent","ResetContent","PartialContent","MultiStatus","AlreadyReported","ImUsed","MultipleChoices","MovedPermanently","Found","SeeOther","NotModified","UseProxy","Unused","TemporaryRedirect","PermanentRedirect","BadRequest","Unauthorized","PaymentRequired","Forbidden","NotFound","MethodNotAllowed","NotAcceptable","ProxyAuthenticationRequired","RequestTimeout","Conflict","Gone","LengthRequired","PreconditionFailed","PayloadTooLarge","UriTooLong","UnsupportedMediaType","RangeNotSatisfiable","ExpectationFailed","ImATeapot","MisdirectedRequest","UnprocessableEntity","Locked","FailedDependency","TooEarly","UpgradeRequired","PreconditionRequired","TooManyRequests","RequestHeaderFieldsTooLarge","UnavailableForLegalReasons","InternalServerError","NotImplemented","BadGateway","ServiceUnavailable","GatewayTimeout","HttpVersionNotSupported","VariantAlsoNegotiates","InsufficientStorage","LoopDetected","NotExtended","NetworkAuthenticationRequired","HttpStatusCode$1","createInstance","defaultConfig","instance","VERSION","Cancel","promises","callback","isAxiosError","payload","formToJSON","getAdapter","default","__WEBPACK_EXTERNAL_MODULE__6556__","hasOwn","classNames","appendClass","includes","newClass","zlib_inflate","GZheader","inflator","last_avail_out","next_out_utf8","utf8str","beg","s_window","lcode","dcode","lmask","dmask","dolen","memo","styleTarget","querySelector","HTMLIFrameElement","contentDocument","getTarget","insertStyleElement","styleTagTransform","removeStyleElement","__WEBPACK_EXTERNAL_MODULE__7936__","Z_PARTIAL_FLUSH","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_UNKNOWN","MIN_LOOKAHEAD","INIT_STATE","BUSY_STATE","FINISH_STATE","errorCode","slide_hash","w_size","hash_size","HASH","hash_shift","hash_mask","flush_pending","pending_out","flush_block_only","block_start","strstart","put_byte","putShortMSB","read_buf","longest_match","cur_match","chain_length","max_chain_length","scan","best_len","prev_length","nice_match","limit","_win","wmask","w_mask","strend","scan_end1","scan_end","good_match","lookahead","match_start","fill_window","_w_size","more","window_size","ins_h","deflate_stored","min_block","pending_buf_size","high_water","deflate_fast","hash_head","bflush","match_length","max_lazy_match","MIN_MATCH","deflate_slow","max_insert","prev_match","match_available","Config","good_length","max_lazy","nice_length","max_chain","func","configuration_table","DeflateState","gzhead","gzindex","last_flush","w_bits","hash_bits","HEAP_SIZE","lit_bufsize","deflateStateCheck","deflateResetKeep","deflateReset","deflateInit","old_flush","level_flags","gzhead_extra","bstate","deflate_huff","deflate_rle","tmpDict","avail","deflateInfo","Z_ERRNO","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_BINARY","Z_TEXT","_has","sources","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","__system_context__","getter","__esModule","definition","o","Function","nc","autoPublicPath","getOwnPropertySymbols","getOwnPropertyDescriptor","domElement","domElementGetter","appName","getElementById","HTMLElement","require","createContext","u","React","ReactDOM","ReactDOMClient","rootComponent","loadRootComponent","errorBoundary","errorBoundaryClass","parcelCanUpdate","suppressComponentDidCatchWarning","domElements","renderResults","updateResolves","unmountResolves","componentDidCatch","childAppName","renderType","elementToRender","reactDom","unmount","unmountComponentAtNode","Provider","Component","caughtError","caughtErrorInfo","displayName","children","setState","SingleSpaRoot","mountFinished","updateFinished","unmountFinished","locals","errors","toPathname","fullUrl","joinStrings","rest","flushErrors","Periodicity","ChangeType","CurrencyOption","DataType","FormatHint","SortType","SortDirection","GenericWarningScope","ColumnRelationship","HTTPMethod","PreferenceName","SettingSelector","FilterType","DataVizType","CoreContents","ExportFormat","DataMode","ModalName","SectionType","EventName","EventElementType","EventElementCategory","TrackingElementType","InsightErrorType","readImpersonationStorage","localStorage","getItem","clientToImpersonate","collection","user","authentication","getUser","isGfkUser","userId","tries","storage","clientId","client_id","clientUserGroupIds","client_user_group_ids","loggerMessage","onError","errorType","SUBSCRIPTION_ERROR","userMessage","DEFAULT_ERROR_MESSAGE","DEFAULT_SECTION_ERROR_MESSAGE","SimpleMessageError","super","FEATURE_TAGS_STORAGE_KEY","readFeatureTags","featureTagsString","tag","getFeatureFlagHeaders","flagsStorage","pageClient","getPageDsl","getAccessToken","post","getModalDsl","getComponentContents","contentParams","search","getMenuItems","prepareURLParams","dataClient","requestId","requestMethod","GET","paramsWithRequestId","POST","contextClient","getContextSettingOptions","sub","startsWith","userClient","getSameAccessUsers","usersByAccess","getUsersByAccess","sameAccessUsers","useIsMounted","isMounted","useRef","useEffect","useCallback","deepEqual","obj1","obj2","isNaN","keys1","Reflect","ownKeys","keys2","action","contextLoading","settings","filters","contextState","pendingContextState","pageExpired","setContextState","page","setPageState","setDataInfo","dsl","pageStamp","dslLoading","setPageDsl","globalWarnings","allWarnings","getUniqueWarnings","setGlobalWarnings","resetGlobalWarnings","dataLoading","setIsDataLoading","modalDsl","trayType","customizationTrayTabId","isFilterTray","keySplitter","uniqueMessageLevelCombos","Set","warning","CACHE_SUFFIX","store","customFeature","setItem","getParamsForContext","getPropositionFromContext","proposition","Proposition","Market","DistributionPanel","ContextManager","settingsSubscribers","loadingSubscribers","editSubscribers","errorSubscribers","contexts","contextUrls","registerContext","excludeFilters","excludePriceFilter","collectionsContext","isLiveInsight","setActive","cached","retrieve","definitions","sections","isCollection","fetchContext","getByName","active","copyContext","excludePriceFilterForActive","removePriceFilterFromContext","excludeFiltersForActive","notifySettings","setSettingAsRequiresEdit","toEdit","def","getSettings","names","defsToGet","selection","optionsUrl","buildParams","requests","defNames","idx","defName","subscribeToSettingsChanges","subscriber","unsubscribeFromSettingsChanges","subscribeToLoading","unsubscribeFromLoading","subscribeToEditRequired","unsubscribeFromEditRequired","subscribeToError","unsubscribeFromError","updateSettingsValues","updates","isLiveView","newValues","updateCustomFeatureValues","updatedCustomFeature","updateFilterValues","toRemove","clearFilterValues","newContext","notifyLoading","isLoading","notifyError","field","section","ungrouped","localContext","isLive","finally","getInstance","_instance","PREFERENCE_API_URL","PRODUCT","PreferenceClient","preferenceCache","uniquePreferenceCache","savedPreferences","savedPreference","preference","oldPreference","delete","updateExisting","createNew","oldPreferenceId","patch","pref","createNewUnique","getAllUnique","getPermissions","preferenceId","addPermissions","permissions","deletePermissions","PAGE_KEY","PAGE_SETTINGS_PRE_CACHE","PageSettingsManager","pages","registerPage","syncSettings","prevPage","initValue","syncPageSettings","preCached","getPreCachedSettings","storedSettings","combinedSettings","stored","fromPage","pageSettings","components","fromPageSettings","settingsChanged","fromComponent","toComponent","fromComponentSettings","toComponentSettings","setting","getPageSettings","activePage","updatePageSettings","updateCallback","existingSettings","newSettings","getComponentSettings","updateComponentSettings","newPageSettings","preCacheSettings","sessionStorage","preCachedStr","removeItem","cachedSettings","makeUrl","endpoint","baseHasSlash","InsightCollectionDataType","SAVED_VIEW_KEY","SavedViewVersion","clearValues","fromEntries","useSavedView","restoreSavedView","setRestoreSavedView","useState","isRestoreSavedViewApplied","restoreLoading","setRestoreLoading","savedView","dataType","live","useRestoreSavedView","applyViewState","pageView","applyViewValues","filterValues","settingsValues","contextManager","clearAllFilters","clearAllSettings","timeoutId","v0","settingValues","applyViewV0","v1","applyViewV1","applyView","checkIfCurrencyChanged","currentCurrency","currency_code","previousCurrency","stateContext","componentHasDataMap","openModal","closeModal","setDataLoading","setComponentHasData","allComponentsHaveNoData","someComponentsHaveData","setCustomizationTray","setCustomizationTrayTabId","setIsFilterTray","getCollectionsContext","CorePageProvider","dispatch","useReducer","setComponentHasDataMap","pagePending","pageNameRef","dataLoadingState","dispatchCallback","isCollections","loadingSubscriber","flag","settingsSubscriber","errorSubscriber","pendingSettings","pendingFilters","dslParams","contextParams","isCurrencyChanged","filterParams","pageParams","fetchPageDsl","newComponentHasDataMap","dataSettings","allColumnComponents","useMemo","flatMap","columns","column","component","noDataInfoType","_jsx","componentName","removeInvisibleComponentsFromDataMap","visibleComponentNames","filteredDataMap","prevState","endpoints","modalParams","modal","isGlobalDataLoading","tabId","useCorePageState","useContext","uiActionsContext","perform","UiActionsProvider","navigate","navigateToPath","settingsPayload","valuesOverride","overridePayloadValues","valuesToOverride","slug","route","RouteManager","getRoute","getUrl","navigateToRoute","useUiAction","Map","createCache","rej","query","analyticsContext","getTitleFromHeading","heading","title","displayText","getPageContext","activeContext","entity","AnalyticsProvider","externalTrackingFn","externalGetTrackingTags","readyForTracking","doTrack","eventName","pageTitle","pageContext","pageUrl","doGetTrackingTags","trackPageEvent","eventParams","getAnalyticTrackingTags","currentContext","useAnalyticsContext","UiDataParams","SUBSCRIPTION_ACESS_ERROR_MESSAGES","DEFAULT_LOCALE","DataStore","stamp","hasDataResultSetsValues","getGroupedSets","dataset","row","rowValue","groupedResults","hasDataInSomeGroupedSets","gs","hasData","getGroupedData","groupings","exact","group","sort","groupBys","groupBy","timeFrame","hasWarnings","warnings","getGenericWarnings","scope","Global","getDataWarnings","selectedKpis","dataWarnings","kpiInfo","getKpiInfoWithWarnings","kpis","relatedFields","kpi","col","getDataColumns","groupSetWithColumns","getDataColumn","withName","changeName","withChangeCol","changeLabel","arrayLength","belongsTo","canAggregate","Kpi","isChange","changeDataType","formatHint","changeFormatHint","relatedTo","relationship","Change","getAvailableColumns","availableColumns","avCols","enrichment","getAllColumns","getCurrency","grouped","currency","getCellsLatestValue","columnName","actualValue","getRowIdentifiers","grouping","identifierColumn","Identifier","descriptorColumn","Description","subIdentifier","idField","idTexts","subTexts","randomUUID","crypto","getRandomValues","rnds8","byteToHex","rnds","rng","RangeError","unsafeStringify","initiateState","dataOptions","dataStateOptions","isDataLoading","isEnrichDataLoading","isDataLoadingFinished","isDataOutdated","providerInfo","isProvider","setData","newState","checkForUpdatedParams","providerParams","setDataOptions","updatedParams","removeEmptyParams","paramsForData","setParamsForData","startFetch","startEnrichFetch","failFetch","enrichmentError","setEnrichmentError","providerOverrides","candidateParams","dataParams","dataRequestId","uuidV4","dataStamp","DataProviderElement","urlRoot","isIntersecting","setIsIntersecting","observer","IntersectionObserver","observe","disconnect","useIsVisible","dataPending","shouldElementExist","uiEnrichments","enrichmentData","BFF_ERROR","fetchData","isEnrichmentLoading","_jsxs","_Fragment","useDataState","SearchInput","term","onChange","disabled","setValue","isFocused","setIsFocused","Icon","IconButton","actions","icons","Search","outline","preventDefault","newValue","onFocus","handleFocus","onBlur","handleBlur","autoFocus","onClick","handleClear","Close","Modal","overlays","Button","NumberInput","inputs","Alert","feedbackV2","CustomTimeSeriesModal","isOpen","onClose","customMenuModalSettings","onApply","currentSelectedPeriods","selectedCustomTimeSeriesValue","setSelectedCustomTimeSeriesValue","isDisabled","setIsDisabled","customMenuLabels","maxDuration","customTimeSeriesDuration","customTimeSeriesLabel","currentCustomDuration","currentDuration","validCurrentDuration","handleOnChange","selectedValue","Header","testId","Footer","handleOnClick","MAX_CUSTOM_CLASSES_NAME_LENGTH","MAX_CUSTOM_CLASS_TIER_VALUE","MIN_CUSTOM_CLASS_TIER_VALUE","CLASS_EXISTS","LABEL_EXISTS","FEATURE_CUSTOMIZATION","PRICE_CUSTOMIZATION","PRICES","LABEL_REQUIRED","OPTION_REQUIRED","firstChar","charAt","sanitizeInput","checkForHTMLTags","checkForValidLabelString","calculateSpaceByCharacter","getMainGraphWidth","includeSideLabel","gap","comparisonPeriod","labels","labelsWidth","summary","formatted","changes","additionalSummary","calculatedWidth","sets","valuesWidth","DenominatorCharacter","DenominatorValue","Formatting","eur","denominator","hyphenForNull","Money","formatNumber","getFractionDigits","denom","None","formatMoney","WholeMoney","formatWholeMoney","Percentage","percentValue","valuePrefix","formatPercentage","PercentagePoints","formatPercentagePoints","Index","formatIndexValue","MonthYear","Month","Year","formatDate","Integer","formatInteger","Decimal","formatDecimal","getCurrencySymbol","NumberFormat","currencyDisplay","formatToParts","part","denoms","absValue","Quadrillions","Trillions","Billions","Millions","Thousands","getDenominator","fractionDigits","shrunken","factor","roundToDigits","toLocaleString","minimumFractionDigits","maximumFractionDigits","date","DateTimeFormat","month","year","dateStyle","adjustNumericFilter","filterValue","numericRange","pickFeatureFilters","allFilters","maxFeatureLimit","selectedFilters","initFeatureFilters","isFilterFound","sectionGrouped","isFound","getExceedingFilter","getError","featureFilters","getMaxFeatureLimit","getIsConfidentialityError","selectedSections","filterRoundingValue","filterRoundingCurrency","canFilterRound","canRound","roundingValue","roundingCurrency","roundTo","failsRoundingCriteria","getFilterSpesifications","getRoundingError","getJoinedLabel","localeCompare","getFilterEventDetails","elementName","globalFilterApplied","PageElementClicked","eventType","eventElementCategory","SaveFilter","getValidInputWithinRange","getPriceClassesFromSettings","componentSettings","defaultPriceClass","priceClasses","customPriceTiers","priceClassesArray","priceClass","strMin","strLabel","formatPricesForParams","startingZero","subsequentPriceClasses","price","isViewer","createdBy","cleanString","filterByHierarchy","hierarchyName","hierarchyLevel","hierarchyParent","filteredOptionsMap","parentKey","currentKey","selectedParents","filteredOptions","isClassDuplicate","inputClass","customClasses","validateLabelInput","customClassesToValidate","customClass","hasDuplicateLabels","sanitizedInput","isLabelValid","formatFeatureClassForParams","selectedFeatureName","selectedFeatureType","segmentClasses","excludeOthers","feature","selectedOptions","adjustClassesAfterDeletion","classMaxValue","updatedClasses","getSharedUsers","preferenceName","shareToUser","permissionsBody","updateLabelErrors","labelCount","cls","labelError","UniquePreferencesContext","UniquePreferencesProvider","allUniquePreferences","setAllUniquePreferences","fetchAllUniquePreferences","allSettled","segment_price","segment_feature","segmentPricePreferences","segmentFeaturePreferences","refreshPreferences","useUniquePreferences","useSaveFeatureSegments","preferencesFeatureSegments","currentSelectedCell","setCurrentSelectedCell","applicableSavedFeatureSegments","setApplicableSavedFeatureSegments","unapplicableSavedFeatureSegments","setUnapplicableSavedFeatureSegments","cells","cell","featureList","loadSavedCustomFeatureSegments","convertPreferenceDataToSavedCustomFeatSeg","prefName","prefData","prefCustomFeatSeg","customSegmentation","prefCustomFeatSegLabel","segmentationLabel","maxRange","featSegmentName","destructuredCustomFeatSeg","filterType","isNumericRange","customFeatSegmentArray","custSeg","strKey","segmentationName","created_by","preferenceSegments","applicableSavedFeatSegArray","unApplicableSavedFeatSegArray","featureSegmentation","saveCustomFeatureSegments","featureSegmentsLabel","customFeatSegmentsToSave","convertSavedCustomFeatureSegmentsToPreferenceData","customFeatSegTiers","newCustomFeatureSegments","deleteSavedCustomFeatureSegments","customFeatSegToDelete","updatedSavedCustomFeatSeg","customFeatSeg","updatedUnapplicableSavedCustomFeatSeg","useSavePriceClasses","preferencesCustomPriceClassesName","savedPriceClasses","setSavedPriceClasses","currentActive","setCurrentActive","loadSavedPriceClasses","convertPreferenceDataToPriceClasses","convertPriceClassesToPreferenceData","tierValues","savePriceClasses","customPriceClasses","priceClassToSave","setIsActive","findIndex","deleteSavedPriceClasses","savedPriceClass","spc","useOnOutsideClick","handler","useScrollIntoView","scrollIntoView","behavior","inline","MenuItemContextComponent","menuValue","valuesToPrevent","contextSetting","isSelected","handleValueClick","minWidth","Check","handleEditClick","Edit","MenuContextButton","inactive","isButtonDisabled","baseClassNames","iconColor","handleClick","ChevronDown","defaultOptions","getDefaultOptions","constructFromSymbol","constructFrom","toDate","argument","startOfWeek","weekStartsOn","locale","_date","in","day","getDay","diff","setDate","getDate","setHours","startOfWeekYear","firstWeekContainsDate","getFullYear","firstWeekOfNextYear","setFullYear","startOfNextYear","firstWeekOfThisYear","startOfThisYear","getWeekYear","firstWeek","WeekPicker","WeekFormatType","CustomWeekPicker","defaultStartDate","defaultEndDate","minDate","maxDate","fromOnChangeFn","toOnChangeFn","dateFormat","defaultDate","MonthPicker","MonthFormatType","CustomMonthPicker","MenuSeparatorComponent","GenericError","CustomComparisonModal","currentCustomPeriods","customMenuOptions","customComparisonPeriods","periodOptions","periodicity","Weekly","weekNumberToDate","defaultEnd","at","defaultStart","defaultCustomPeriods","getCustomSelectedPeriods","comparisonPeriods","setComparisonPeriods","param","period","newComparisonPeriod","copyComparisionPeriod","isApplyDisabled","areComparisonPeriodsInvalid","getCustomPicker","customLimitOption","renderInPortal","cp","filteredPeriod","deleteComparisionPeriod","Delete","addComparisonPeriod","newPeriod","newPeriods","handleApply","weekLabel","week","weekNumber","NaN","addDays","selected","startSeq","endSeq","periodSeq","MenuItemComponent","isBrand","TruncateText","disableDefaultTextCss","maxWidth","Type","SPAN","isBeta","MenuLabelComponent","itemsFilter","toLocaleLowerCase","SubMenuComponent","expanded","setExpanded","coords","setCoords","searchTerm","setSearchTerm","items","selectedItem","subItem","selectionLabel","getSelectionLabel","openSubMenu","btnRect","space","spaceToBottom","handleItemClick","hasSearch","itemsCount","roughMenuHeight","parentElement","parentTop","seachPadding","maxHeight","onMouseEnter","onMouseLeave","closeSubMenu","ChevronRight","FilterTrayTabId","containers","SelectionMenuComponent","menuConfig","onUpdate","button","buttonLabel","menuItems","setMenuItems","dataColumns","setDataColumns","selectedCustomFeature","setSelectedCustomFeature","originMenu","setOriginMenu","menuCustomItem","setMenuCustomItem","setSections","menu","selectedFeature","baseFeatures","getInitialFeatureClass","firstFeature","featureClasses","closeMenu","paramName","preventDuplicatesWith","customizationTraySettings","allColumns","ofType","requireArrayLength","columnOptions","isMatch","menuItem","checkIfCustomPriceTier","handleUpdateSettings","itemLabel","FilterApplied","filterName","metadata","tracking","Selectors","optionChosen","updateWithCustomPriceClass","selectedCustomClass","configureCustomMenu","isFeatureCustomMenuItem","Configure","customFeatureType","secondSegmentationConfig","checkIsApplicableSavedFeature","customFeatureTiers","generateCustomLabel","isCustom","savedName","myValue","displayLabel","findLabel","ButtonElement","handleCustomModalClose","isCustomComparisonModalOpen","isCustomTimeSeriesDurationModalOpen","handleButtonClick","btnHeight","createPortal","MenuList","onItemClick","SavedFilters","handleViewAllClick","handleCustomItemSelection","selectedCustomPriceClass","savedClass","selectedCustomFeatureClass","formattedSavedCustomSeg","handleStandardItemSelection","columnForItem","onSearchChange","customSeq","isOnlyItems","outerStyle","innerStyle","TitleButton","Loading","isActive","withIndicator","masked","setMasked","DotsLoader","feedback","TextInput","CustomClassLabel","labelOnChangeFn","isLabelOptional","errorMessage","classToRender","labelText","setLabelText","handleLabelChange","isInputGroupChild","maxLength","CustomPriceClasses","prevMax","nextMax","onPriceChange","onLabelChange","maxValue","setMaxValue","hasError","setHasError","priceOnChangeFn","updateClassErrorState","toFixed","handleRangeChange","validInputWithinRange","minValue","Infinite","inputMax","roundInput","normalizedInput","nearestMultiple","adjustedPrevMax","calculatedValue","roundedValue","ShareCustomModal","itemToShare","onSuccess","onShareError","getUsers","itemType","currentlySharedUsers","setCurrentlySharedUsers","getCurrentlySharedUsers","accessLevel","email","userInfo","familyName","givenName","getAvailableUsers","onCustomSharedSuccess","users","onSave","access","handleGetUsersError","handleShareError","handleClose","ShareModal","itemName","onGetUsersError","sharableClients","clientName","useSidebar","toggleSidebar","openSidebar","hideSidebar","ClientSidebar","requestAnimationFrame","dispatchEvent","Event","CustomSegmentType","DeleteSavedCustomModal","infoText","subText","customClassModalType","onDelete","Body","isDanger","isSavedCustomPriceClass","savedCustomData","getCustomSegmentsLabelDetails","currencySymbol","customPriceClass","savedModalLabelText","deleteSavedModalLabelText","savedCardLabels","applyButtonLabels","shareButtonLabels","deleteButtonLabels","nameExisted","customFeatureSegmentation","isDiffSavedFeatures","newSavedFeatureSegments","currentSavedFeatures","Badge","Accordion","SavedCustomSegmentsCard","customSegmentType","savedCardLabel","savedData","isApplicable","handleDelete","handleShare","customSegmentDetails","showDeleteModal","setShowDeleteModal","toggleDeleteModal","iconRight","flushAlign","Item","savedCustomSegmentDetails","getLabel","savedCustomSegmentDetail","customNumericClass","listStyle","renderAccordionDetails","Share","TextArea","SavedCustomSegmentsModal","existingName","customSegmentsLabelDetails","customSegmentsName","setCustomSegmentsName","customSegmentsDesc","setCustomSegmentsDesc","isNameExisted","getErrorMessage","nameExistedErrorMessage","filterDescription","isNameExistedFn","handleSave","isSaveButtonDisabled","AddClassButton","isShowing","Add","ButtonGroup","Tray","EditTrayComponent","updateSettings","activeTab","setActiveTab","showSaveModal","setShowSaveModal","getDefaultPriceSettings","market","setPriceClasses","isShareModalOpen","setIsShareModalOpen","priceClassToShare","setPriceClassToShare","recordAnalyticEventDetails","handleCancelSave","formattedPrices","updatePriceClasses","priceClassesToUpdate","handleOnPriceChange","normalizedRoundTo","updatedPriceClass","updatedNextMinPriceClass","copyPriceClass","roundedPriceClasses","getRoundedPriceClasses","postIndex","handleOnLabelChange","renderCustomPriceClasses","renderSavedPriceClass","onApplyFromSavedCustomCard","onDeleteFromSavedCustomCard","onShareFromSavedCustomCard","arePriceClassesValid","priceClassList","elementCategory","CustomPriceFilter","Content","Tabs","currentTab","onTabChange","Tab","getRoundToLabel","deletePriceClass","Remove","addPriceClass","newMax","newPriceTier","newMaxTier","newPriceClasses","PrimaryButton","onApplyFromCustomizedTab","stretch","SecondaryButtons","openSaveModal","renderSavePriceClassModal","existingPriceClassNames","Checkbox","CheckboxState","CheckboxFilter","handleChange","entities","CHECKED","optionValue","UNCHECKED","MultiSelect","formatMonthYear","formatMonth","formatYear","parseDateAsValue","getMonth","padStart","parseValueAsDate","MonthSelector","align","helperText","setYear","setMonth","today","firstDayOfCurrentMonth","targetDate","stringValue","months","getMonths","openMenu","decrementYear","ChevronLeft","incrementYear","selectable","applyMonth","Select","inputsV2","filterElements","multiSelect","definitionLabel","combobox","minVal","maxVal","labelValues","isMinValueEmpty","isMaxValueEmpty","setMin","setMax","setFormatted","handleMinBlur","handleMaxBlur","dateRange","initialStart","initialEnd","checkAndUpdate","startDate","endDate","startValue","endValue","getDateRangeLabel","startDateLabel","endDateLabel","minDateTextHelper","maxDateTextHelper","handleStartChange","handleEndChange","select","FilterEntry","Element","CustomFeatureClasses","onFeatureChange","setMinValue","classErrorMessage","setClassErrorMessage","featureOnChangeFn","handleRangeBlur","inputMin","NumericFeature","defaultFeatureClass","setFeatureClasses","renderFeatureClasses","featureClass","handleOnFeatureChange","updatedFeatureClass","updatedNextMinFeatureClass","copyFeatureClass","updatedFeatureClasses","filteredList","deleteFeatureClass","addFeatureClass","newFeatureTier","newFeatureClasses","CategoricalFeature","forwardRef","CategoricalFeatureComponent","forwardedRef","totalAvailableCategories","setTotalAvailableCategories","emptySelectedOption","setEmptySelectedOption","emptyLabel","setEmptyLabel","infoMessage1","infoMessage2","useImperativeHandle","availableCategories","emptySelectedOptionClass","emptyLabelClass","copyFeatureClasses","fc","fcIndex","toAddOption","newOptions","sortedOptions","getAvailableCategories","selectedCategories","classItem","toAddOptions","unselected","FeatureEditTrayComponent","contextCustomFeature","showSaveCustomFeatureModal","setShowSaveCustomFeatureModal","currentActiveComponentName","titleItem","getCurrentActiveComponentNameForCustomTray","setDefaultFeatureClass","setSelectedFeature","featureToShare","setFeatureToShare","shouldCheckForDuplicates","setPureApplicableAndNonApplicableSavedFeatures","shouldUpdateApplicableSavedFeatures","applicableSavedFeatures","shouldUpdateUnapplicableSavedFeatures","unapplicableSavedFeatures","setApplicableSavedFeatures","setUnapplicableSavedFeatures","needApplicableFilter","filterSavedFeatureSegments","unapplicableBySecondSeg","applicableBySecondSeg","savedOption","isUnapplicable","newUnapplicable","categoricalFeatureRef","handleBaseFeatureChange","features","baseFeature","initialFeatureClass","ungroupedFeatures","isDefaultState","retainedFeatureClasses","getFeatureClassesFromSettings","filterDefinitions","selectedBaseFeature","selectedFeatureClass","filterDefinition","featureClassesArray","initialFeature","getFilteredOptions","areFeatureClassesValid","featureClassesToValidate","hasInvalidClass","isRangeInvalid","currentFeatureClass","hasDuplicateClass","validateNumberInput","hasNoSelectedOptions","hasNoLabel","validateCategoricalFeatureClasses","isCardActive","savedCustomSeg","renderSavedCustomSegmentsFn","handleApplySavedCustomSegmentation","handleDeleteSavedCustomSegmentation","hanldeShareSavedCustomSegmentation","category","featureClassesList","CustomFeatureFilter","featuresGroup","flattenedkeys","getOptionsList","customFeatureClasses","catFeatureOptions","savedCustomSegToDelete","DeleteFeatureFilter","savedCustomFeatureSegment","renderFeatureClassComponent","formattedTiers","customFeatureContext","ShareFeatureFilter","EditTray","setCurrency","setContextCustomFeature","resolvedLocalCurrency","FilterPanel","renderTrayComponent","DynamicTitleElement","isCustomizationTrayNeeded","useFilterTracking","labelLookup","groupLabelLookup","getLabelLookups","trackFilterApplied","chosenCategories","getChosenCategories","getEventParams","eventParamsFilterDetails","getFilterDetails","FilterAppliedDetails","isPremium","categoryChosen","filterSection","eventParamsWithoutFilterSection","allDefinitions","getAllDefinitions","getLabelLookup","groupLabels","groupLabel","getGroupLabels","getGroupLabelLookup","nonEmptyFilterKeys","categoryCombination","mapDataVizForChartType","dataVizValue","lineChart","chart","verticalBarChart","horizontalBarChart","stackedBarChart","bubbleChart","mapDataVizForElementType","Table","Chart","trackPageElementClicked","trackFn","extraParams","CustomFilter","TrackGroupTypes","TrackTableNavTypes","TrackAnalyseTypes","TrackSortTypes","TrackSelectionTypes","trackTableClicked","TableClicked","DataAvailability","getTopSelectors","propertyTrackingName","propertyName","includePropertyValue","getAppliedFilters","marketFilters","filterEventParams","applyCategoryCombinationFilter","applyMarketFilters","createLowerCamelCase","handlePageElementViewed","dataViz","chartType","topSelectors","appliedFilters","metadataTrackingParams","getMetadataTrackingParams","getDataAvailability","getComponentSettingsTrackingNames","componentSettingKey","trackingFilterName","getComponentSettingsValuesLabels","componentSettingsKey","isBrandSegment","trackingMetadata","paramsMap","trackingParams","trackingPropertyName","getDataAvailabilityParams","No","dataHaveWarnings","Partial","Full","dataAvailability","EmptyState","WarningsDisplay","composedWarnings","composeWarningMessage","appendKpis","NoDataInfo","observerMap","RootIds","WeakMap","rootId","fallbackInView","intersectionRatio","boundingClientRect","intersectionRect","rootBounds","optionsToId","thresholds","inView","trackVisibility","createObserver","unobserve","ComponentCard","showNoDataInfo","contents","fixed","leaderBoard","delay","rootMargin","triggerOnce","skip","initialInView","setRef","entryTarget","previousEntryTarget","useInViewObserver","inViewDelayFinished","setInViewDelayFinished","inViewTimeout","useInView","currentView","rememberedParams","rememberedSettings","rememberedView","trackPageElementViewed","PageElementViewed","useTrackPageElementViewed","callsToAction","asCard","layout","libActions","containerCss","hasHeading","renderNoDataInfo","showComponentCard","enablePageLevelNoDataError","hasParamsChanged","hasSettingsChanged","updateOnContextChange","subTitle","isCollapsible","ChevronUp","callToAction","isPrimary","Analyse","editContext","getContextSettings","EditProvider","useEditContextSettings","ContextSelectorMenu","SelectionList","isMulti","MenuItem","canBeUnselected","compact","ent","myOptions","setMyOptions","RadioGroupSelector","radioOptions","RadioButtons","orientation","SingleSelect","UnknownSelector","DummyContent","groups","rows","groupedSets","DummyStaticContent","isFrozen","seal","construct","fun","thisValue","Func","arrayForEach","unapply","arrayLastIndexOf","lastIndexOf","arrayPop","arrayPush","arraySplice","stringToLowerCase","stringToString","stringMatch","stringReplace","stringIndexOf","stringTrim","objectHasOwnProperty","regExpTest","typeErrorCreate","_len2","_key2","_len","addToSet","array","transformCaseFunc","lcElement","cleanArray","object","newObject","lookupGetter","html$1","svg$1","svgFilters","svgDisallowed","mathMl$1","mathMlDisallowed","html","mathMl","xml","MUSTACHE_EXPR","ERB_EXPR","TMPLIT_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","DOCTYPE_NAME","CUSTOM_ELEMENT","EXPRESSIONS","getGlobal","purify","createDOMPurify","DOMPurify","removed","isSupported","originalDocument","currentScript","DocumentFragment","HTMLTemplateElement","NodeFilter","NamedNodeMap","MozNamedAttrMap","HTMLFormElement","DOMParser","trustedTypes","ElementPrototype","getNextSibling","getChildNodes","getParentNode","template","trustedTypesPolicy","emptyHTML","implementation","createNodeIterator","createDocumentFragment","getElementsByTagName","importNode","hooks","afterSanitizeAttributes","afterSanitizeElements","afterSanitizeShadowDOM","beforeSanitizeAttributes","beforeSanitizeElements","beforeSanitizeShadowDOM","uponSanitizeAttribute","uponSanitizeElement","uponSanitizeShadowNode","createHTMLDocument","IS_ALLOWED_URI$1","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","CUSTOM_ELEMENT_HANDLING","tagNameCheck","attributeNameCheck","allowCustomizedBuiltInElements","FORBID_TAGS","FORBID_ATTR","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","ALLOW_SELF_CLOSE_IN_ATTR","SAFE_FOR_TEMPLATES","SAFE_FOR_XML","WHOLE_DOCUMENT","SET_CONFIG","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_TRUSTED_TYPE","SANITIZE_DOM","SANITIZE_NAMED_PROPS","KEEP_CONTENT","IN_PLACE","USE_PROFILES","FORBID_CONTENTS","DEFAULT_FORBID_CONTENTS","DATA_URI_TAGS","DEFAULT_DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","DEFAULT_URI_SAFE_ATTRIBUTES","MATHML_NAMESPACE","SVG_NAMESPACE","HTML_NAMESPACE","NAMESPACE","IS_EMPTY_INPUT","ALLOWED_NAMESPACES","DEFAULT_ALLOWED_NAMESPACES","MATHML_TEXT_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","COMMON_SVG_AND_HTML_ELEMENTS","PARSER_MEDIA_TYPE","SUPPORTED_PARSER_MEDIA_TYPES","CONFIG","formElement","isRegexOrFunction","testValue","_parseConfig","cfg","ADD_URI_SAFE_ATTR","ADD_DATA_URI_TAGS","ALLOWED_URI_REGEXP","ADD_TAGS","ADD_ATTR","tbody","TRUSTED_TYPES_POLICY","createHTML","createScriptURL","purifyHostElement","createPolicy","ATTR_NAME","policyName","scriptUrl","_createTrustedTypesPolicy","ALL_SVG_TAGS","ALL_MATHML_TAGS","_forceRemove","_removeAttribute","attribute","getAttributeNode","removeAttribute","_initDocument","dirty","doc","leadingWhitespace","dirtyPayload","parseFromString","createDocument","_createNodeIterator","SHOW_ELEMENT","SHOW_COMMENT","SHOW_TEXT","SHOW_PROCESSING_INSTRUCTION","SHOW_CDATA_SECTION","_isClobbered","namespaceURI","hasChildNodes","_isNode","_executeHooks","currentNode","hook","_sanitizeElements","allowedTags","firstElementChild","_isBasicCustomElement","childClone","__removalCount","parentTagName","_checkValidNamespace","expr","_isValidAttribute","lcTag","lcName","_sanitizeAttributes","hookEvent","attrName","attrValue","keepAttr","allowedAttributes","forceKeepAttr","getAttributeType","_sanitizeShadowDOM","fragment","shadowNode","shadowIterator","sanitize","importedNode","returnNode","nodeIterator","shadowroot","shadowrootmode","serializedHTML","outerHTML","setConfig","clearConfig","isValidAttribute","addHook","entryPoint","hookFunction","removeHook","removeHooks","removeAllHooks","ErrorPanel","DataErrorElement","errorString","setErrorString","safeMessage","isValidMessage","safeTitle","Title","ServerResponse","toUTCString","sanitizer","dompurify","dangerouslySetInnerHTML","__html","TitleSelectorButton","Instructions","instructions","hasInstruction","getInstruction","isFromSettings","getSettingsName","instruction","getString","getStringList","getObject","getNumber","getBoolean","ComponentFactory","_build","settingsProvider","exportOptions","collectionOptions","aboveFold","ModalDslFactory","ContentFactory","DataOptionsFactory","dataMode","takeFromProvider","asProvider","provider","withData","isPresent","asReceiver","TimeSeriesFactory","xColumn","yColumn","displayAs","export","timeSeries","SegmentationFactory","segmentColumn","segmentation","MultiKpiFactory","maxKpis","multiKpi","LeaderboardFactory","rowIdField","quickLookOptions","selectionConfig","customiseOptions","preferencesGroupName","groupsParam","quickLook","titleField","preTitleField","StatsTableFactory","statsTable","KeyIndicatorsFactory","indicators","fixedItems","limitedItems","limitedOptions","addLinkLabel","keyIndicators","KpiTrendsFactory","kpiTrends","BillboardFactory","highlight","highlightColumn","siblingBuffer","sorting","billboard","AlertPanelFactory","alertPanel","SingleKpiTrendFactory","secondaryKpi","includeTotals","totalName","clickAction","singleKpiTrend","HeatmapFactory","xGrouping","yGrouping","sortX","sortY","heatmap","KpiDecompositionFactory","decomposedKpi","contributingKpis","periodName","kpiDecompositon","PageDslFactory","SectionFactory","unknown","__build","ColumnSectionFactory","TabbedSectionFactory","tabs","tabbed","tab","CoreFactories","static","selector","custom","leaderboard","kpiDecomposition","fromSettingInstruction","settingName","stringInstruction","stringListInstruction","booleanInstruction","numberInstruction","objectInstruction","subMenu","itemWithContext","rowLabel","groupingColumn","descColumn","makeSparkInfo","isNegative","makeColumnInfo","hideChange","textValue","columnLabel","KpiWithChange","withChangeColumn","rawChangeValue","textChangeValue","changeRaw","changeValue","SparkLine","canvasRect","tickLength","ticks","tickHeight","maxTick","minTick","clearRect","tick","ClickableCard","linkText","outerCss","innerCss","hovering","setHovering","role","IndicatorCard","isClickable","mainColumn","secondaryColumn","sparkLine","mapDefinitions","mappedDefinitions","flat","getHeaderValues","contextValues","headerValues","settingDefinition","valueKey","settingValue","getExportContext","fileHeaderSettings","restFiltersText","getFiltersText","headerSettings","usedFilterKeys","restFilterKeys","restFilterKeysWithValues","restFilters","customValues","mapValueToDataCell","Text","defaultFormat","Currency","customFormat","PercentagePoint","formatLabel","LuxonError","InvalidDateTimeError","toMessage","InvalidIntervalError","InvalidDurationError","ConflictingSpecificationError","InvalidUnitError","InvalidArgumentError","ZoneIsAbstractError","DATE_SHORT","DATE_MED","DATE_MED_WITH_WEEKDAY","weekday","DATE_FULL","DATE_HUGE","TIME_SIMPLE","hour","minute","TIME_WITH_SECONDS","TIME_WITH_SHORT_OFFSET","timeZoneName","TIME_WITH_LONG_OFFSET","TIME_24_SIMPLE","hourCycle","TIME_24_WITH_SECONDS","TIME_24_WITH_SHORT_OFFSET","TIME_24_WITH_LONG_OFFSET","DATETIME_SHORT","DATETIME_SHORT_WITH_SECONDS","DATETIME_MED","DATETIME_MED_WITH_SECONDS","DATETIME_MED_WITH_WEEKDAY","DATETIME_FULL","DATETIME_FULL_WITH_SECONDS","DATETIME_HUGE","DATETIME_HUGE_WITH_SECONDS","Zone","ianaName","isUniversal","offsetName","ts","formatOffset","equals","otherZone","isValid","singleton","SystemZone","resolvedOptions","timeZone","parseZoneInfo","getTimezoneOffset","dtfCache","typeToPos","era","ianaZoneCache","IANAZone","resetCache","isValidSpecifier","isValidZone","zone","zoneName","valid","dtf","hour12","adOrBc","filled","partsOffset","fMonth","fDay","fYear","fadOrBc","fHour","fMinute","fSecond","hackyOffset","asTS","over","objToLocalTS","millisecond","intlLFCache","intlDTCache","getCachedDTF","locString","intlNumCache","intlRelCache","sysLocaleCache","weekInfoCache","listStuff","loc","englishFn","intlFn","listingMode","PolyNumberFormatter","intl","forceSimple","padTo","otherOpts","intlOpts","useGrouping","minimumIntegerDigits","inf","getCachedINF","PolyDateFormatter","dt","z","originalZone","gmtOffset","offsetZ","setZone","plus","minutes","toJSDate","parts","PolyRelFormatter","isEnglish","hasRelative","rtf","cacheKeyOpts","RelativeTimeFormat","getCachedRTF","numeric","narrow","units","years","quarters","weeks","days","hours","seconds","lastable","isDay","isInPast","is","fmtValue","singular","lilUnits","fmtUnit","fallbackWeekSettings","firstDay","minimalDays","weekend","Locale","fromOpts","numberingSystem","outputCalendar","weekSettings","defaultToEN","specifiedLocale","Settings","defaultLocale","localeR","numberingSystemR","defaultNumberingSystem","outputCalendarR","defaultOutputCalendar","weekSettingsR","validateWeekSettings","defaultWeekSettings","fromObject","parsedLocale","parsedNumberingSystem","parsedOutputCalendar","localeStr","xIndex","uIndex","selectedStr","calendar","parseLocaleString","intlConfigString","weekdaysCache","standalone","monthsCache","meridiemCache","eraCache","fastNumbersCached","fastNumbers","isActuallyEn","hasNoWeirdness","alts","redefaultToEN","redefaultToSystem","formatStr","ms","DateTime","utc","mapMonths","extract","weekdays","mapWeekdays","meridiems","eras","matching","dtFormatter","numberFormatter","relFormatter","listFormatter","ListFormat","getCachedLF","getWeekSettings","hasLocaleWeekInfo","getWeekInfo","weekInfo","getCachedWeekInfo","getStartOfWeek","getMinDaysInFirstWeek","getWeekendDays","other","FixedOffsetZone","utcInstance","parseSpecifier","signedOffset","InvalidZone","normalizeZone","defaultZone","lowered","numberingSystems","arab","arabext","bali","beng","deva","fullwide","gujr","hanidec","khmr","knda","laoo","limb","mlym","mong","mymr","orya","tamldec","telu","thai","tibt","latn","numberingSystemsUTF16","hanidecChars","digitRegexCache","digitRegex","ns","throwOnInvalid","twoDigitCutoffYear","cutoffYear","resetCaches","Invalid","explanation","nonLeapLadder","leapLadder","unitOutOfRange","dayOfWeek","UTC","setUTCFullYear","getUTCFullYear","js","getUTCDay","computeOrdinal","isLeapYear","uncomputeOrdinal","ordinal","month0","isoWeekdayToLocal","isoWeekday","gregorianToWeek","gregObj","minDaysInFirstWeek","weekYear","weeksInWeekYear","timeObject","weekToGregorian","weekData","weekdayOfJan4","yearInDays","gregorianToOrdinal","gregData","ordinalToGregorian","ordinalData","usesLocalWeekValues","localWeekday","localWeekNumber","localWeekYear","hasInvalidGregorianData","validYear","validMonth","integerBetween","validDay","daysInMonth","hasInvalidTimeData","validHour","validMinute","validSecond","validMillisecond","bestBy","by","compare","best","bottom","padded","parseInteger","parseFloating","parseFloat","parseMillis","towardZero","trunc","modMonth","firstWeekOffset","weekOffset","weekOffsetNext","untruncateYear","offsetFormat","modified","offHourStr","offMinuteStr","offHour","offMin","asNumber","numericValue","normalizeObject","normalizer","monthsLong","monthsShort","monthsNarrow","weekdaysLong","weekdaysShort","weekdaysNarrow","erasLong","erasShort","erasNarrow","stringifyTokens","splits","tokenToString","literal","macroTokenToFormatOpts","D","DD","DDD","DDDD","tt","ttt","tttt","T","TT","TTT","TTTT","ff","fff","ffff","F","FF","FFF","FFFF","Formatter","parseFormat","fmt","currentFull","bracketed","formatOpts","systemLoc","formatWithSystemDefault","formatDateTime","formatDateTimeParts","formatInterval","formatRange","num","formatDateTimeFromString","knownEnglish","useDateTimeFormatter","isOffsetFixed","allowZ","maybeMacro","quarter","formatDurationFromString","dur","tokenToField","realTokens","found","collapsed","shiftTo","lildur","ianaRegex","combineRegexes","regexes","full","combineExtractors","extractors","mergedVals","mergedZone","cursor","ex","patterns","regex","extractor","simpleParse","offsetRegex","isoTimeBaseRegex","isoTimeRegex","isoTimeExtensionRegex","extractISOWeekData","extractISOOrdinalData","sqlTimeRegex","sqlTimeExtensionRegex","extractISOTime","milliseconds","extractISOOffset","local","fullOffset","extractIANAZone","isoTimeOnly","isoDuration","extractISODuration","yearStr","monthStr","weekStr","dayStr","hourStr","minuteStr","secondStr","millisecondsStr","hasNegativePrefix","negativeSeconds","maybeNegate","force","obsOffsets","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","fromStrings","weekdayStr","rfc2822","extractRFC2822","obsOffset","milOffset","rfc1123","rfc850","ascii","extractRFC1123Or850","extractASCII","isoYmdWithTimeExtensionRegex","isoWeekWithTimeExtensionRegex","isoOrdinalWithTimeExtensionRegex","isoTimeCombinedRegex","extractISOYmdTimeAndOffset","extractISOWeekTimeAndOffset","extractISOOrdinalDateAndTime","extractISOTimeAndOffset","extractISOTimeOnly","sqlYmdWithTimeExtensionRegex","sqlTimeCombinedRegex","extractISOTimeOffsetAndIANAZone","INVALID","lowOrderMatrix","casualMatrix","accurateMatrix","daysInYearAccurate","daysInMonthAccurate","orderedUnits","reverseUnits","conf","conversionAccuracy","Duration","durationToMillis","vals","sum","normalizeValues","reduceRight","previousVal","conv","rollUp","accurate","invalid","isLuxonDuration","fromMillis","normalizeUnit","fromDurationLike","durationLike","isDuration","fromISO","parseISODuration","fromISOTime","parseISOTimeOnly","toFormat","fmtOpts","toHuman","unitDisplay","toObject","toISO","toISOTime","millis","toMillis","suppressMilliseconds","suppressSeconds","includePrefix","includeOffset","invalidReason","valueOf","minus","negate","mapUnits","reconfigure","as","rescale","newVals","removeZeroes","shiftToAll","built","accumulated","lastUnit","own","ak","negated","invalidExplanation","v2","Interval","isLuxonInterval","fromDateTimes","builtStart","friendlyDateTime","builtEnd","validateError","validateStartEnd","startIsValid","endIsValid","isInterval","toDuration","startOf","useLocaleWeeks","hasSame","isEmpty","isAfter","dateTime","isBefore","splitAt","dateTimes","sorted","added","splitBy","divideEqually","numberOfParts","overlaps","abutsStart","abutsEnd","engulfs","intersection","union","intervals","final","sofar","xor","currentCount","ends","difference","toISODate","mapEndpoints","mapFn","Info","hasDST","proto","isValidIANAZone","locObj","getMinimumDaysInFirstWeek","getWeekendWeekdays","monthsFormat","weekdaysFormat","relative","localeWeek","dayDiff","earlier","later","utcDayStart","toUTC","keepLocalTime","intUnit","deser","parseDigits","spaceOrNBSP","spaceOrNBSPRegExp","fixListRegex","stripInsensitivities","oneOf","startIndex","simple","partTypeStyleToTokenVal","short","long","dayperiod","dayPeriod","hour24","dummyDateTimeCache","expandMacroTokens","formatOptsToTokens","maybeExpandMacroToken","TokenParser","one","two","three","four","six","oneOrTwo","oneToThree","oneToSix","oneToNine","twoToFour","fourToSix","unitate","unitForToken","disqualifyingUnit","regexString","re","buildRegex","explainFromTokens","rawMatches","matchIndex","specificOffset","Z","M","G","S","toField","dateTimeFromMatches","df","resolvedOpts","isSpace","actualType","tokenForPart","MAX_DATE","unsupportedZone","possiblyCachedWeekData","possiblyCachedLocalWeekData","localWeekData","inst","old","fixOffset","localTS","tz","utcGuess","o2","o3","tsToObj","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","objToTS","adjustTime","oPre","millisToAdd","parseDataToDateTime","parsedZone","interpretationZone","toTechFormat","extended","longFormat","extendedZone","defaultUnitValues","defaultWeekUnitValues","defaultOrdinalUnitValues","orderedWeekUnits","orderedOrdinalUnits","normalizeUnitWithLocalWeeks","weeknumber","weeksnumber","weeknumbers","weekyear","weekyears","quickDT","offsetProvis","zoneOffsetGuessCache","zoneOffsetTs","guessOffsetForZone","diffRelative","calendary","differ","lastOpts","argList","ot","_zone","isLuxonDateTime","fromJSDate","zoneToUse","fromSeconds","tsNow","containsOrdinal","containsGregorYear","containsGregorMD","containsGregor","definiteWeekDef","useWeekData","defaultValues","objNow","foundFirst","higherOrderInvalid","validWeek","validWeekday","hasInvalidWeekData","validOrdinal","hasInvalidOrdinalData","gregorian","tsFinal","offsetFinal","parseISODate","fromRFC2822","preprocessRFC2822","parseRFC2822Date","fromHTTP","parseHTTPDate","fromFormat","localeToUse","parseFromTokens","fromString","fromSQL","parseSQL","isDateTime","parseFormatForOpts","localeOpts","tokenList","expandFormat","isWeekend","monthShort","monthLong","weekdayShort","weekdayLong","offsetNameShort","offsetNameLong","isInDST","getPossibleOffsets","dayMs","minuteMs","oEarlier","oLater","o1","ts1","ts2","isInLeapYear","daysInYear","weeksInLocalWeekYear","resolvedLocaleOptions","toLocal","keepCalendarTime","newTS","offsetGuess","asObj","setLocale","settingWeekStuff","mixed","normalizedUnit","endOf","toLocaleParts","ext","toISOWeekDate","toRFC2822","toHTTP","toSQLDate","toSQLTime","includeZone","includeOffsetSpace","toSQL","toSeconds","toUnixInteger","toBSON","includeConfig","otherDateTime","durOpts","otherIsLater","diffed","highWater","lowestOrder","differs","highOrderDiffs","remainingMillis","lowerOrderUnits","diffNow","until","inputMs","adjustedToZone","toRelative","toRelativeCalendar","fromFormatExplain","fromStringExplain","buildFormatParser","fromFormatParser","formatParser","dateTimeish","getComponentTitle","headingTitle","componentTitle","titlePart","paramValue","ele","subMenuItem","getPageTitle","getTabTitle","tabSection","chartToPptData","contentName","chartLabel","exportContentRef","componentHeadingTitle","slideTitle","createSlideTitle","getComponentOrPageTitle","slideSubtitle","splitIndex","pptSlides","elementRefs","elementRef","dataUrl","html2canvas","subtitle","userDateTimeIso8601","Powerpoint","slides","getExportContainer","isInDocument","setIsInDocument","checkInDocument","useOnCollectionExportReady","chartSliceRefs","chartElementsLength","tabTitle","exportPng","querySelectorAll","slide","chartToPptDataForCollections","onExportReady","GenericWarnings","KeyIndicators","setDataStamp","setInfo","selectOptions","setSelectOptions","exportRef","myInstructions","limitedParamName","canEditLimited","updateData","configs","rowNames","rowIdentifiers","dataRows","candidateRows","addEverything","checkValue","isFixed","isLimited","unSortedRows","indicatorRow","includeSpark","sortedRows","rowItems","selectionMenu","makeIndicatorInfo","onLoaded","handleRowChange","handleRowDelete","toAddSelections","ExportContainer","IndicatorsRow","selectionItems","handleRowAdd","dataArray","chunkedDataArray","resultArray","chunkIndex","getChunkedIndicatorRow","rowIndex","canEdit","ind","makeBorderCss","bordersCss","bottomScrollPosition","tableRef","tableEl","setTableEl","scrollbarWidth","setScrollbarWidth","debouncedSetScrollbarWidth","debounce","ResizeObserver","minHeight","tableLayout","TableScrollbar","innerScrollerRef","innerScrollEl","useLayoutEffect","containerOnScroll","innerScrollOnScroll","ValueChange","getNumericValueFromCell","cellName","sortIndex","getValueFromRow","getIdentifiers","idColumn","sortLeaderboard","leaderBoardData","rowIds","indexedData","rowId","rowData","rowsData","sortKeys","sortKey","hasSortKeyData","sortedData","sortGravity","isDataInA","isDataInB","row1","row2","sortType","fieldName","Alpha","value1","value2","ascending","descending","sortRows","getSortKeysFromColumn","sortKeysFromColumn","properColumn","withRows","Column","colSpan","rowSpan","isSorted","showHover","Row","important","Cell","valign","Scrollbar","Sorting","colId","colLabel","columnIndex","onSort","trackEvent","showOptions","setShowOptions","wrapperRef","paddingOnItems","labelCss","subLabelCss","buttonCss","onSortClick","Sort","arrowOpacity","sortDirection","getLabelForSortOption","upArrowOpacity","downArrowOpacity","handleClickOutside","onClickHeader","newDirection","strokeWidth","viewBox","fillOpacity","stopPropagation","commonSortOptions","createDataParamForQuickLook","cloneDataParams","LeaderboardType","CELL_VALUE_MULTIPLE","DISABLED_LABLES","others","tradebrandsAndExclusives","suppressed","tradebrand","LEADERBOARD_ROWID_MAP","item_id","Product","brand_name","Brand","region_name","Region","SegmentFeature","product_feature","ProductFeature","country_code","Country","ActionType","UpdateProductGroupModal","onAction","allGroups","isSubmitting","setIsSubmitting","newGroupName","setNewGroupName","isGroupNameError","setGroupNameError","deleteConfirmationLabel","confirmButtonText","cancelButtonText","groupNameExists","isActionRename","Rename","isConfirmButtonDisabled","groupName","submit","Menu","ProductGroupMenu","onEdit","showActionGroupModal","setShowActionGroupModal","actionType","setActionType","toggleUpdateGroupModal","handleActionModal","MoreButton","List","onSelect","AddGroup","createProductGroupsParam","modelIds","sortingColumnOptions","sortIdex","sortingInfo","hasSorting","sortOptions","subLabels","leaderboardGroupsIntoParams","leaderboardGroupIntoParams","modelIdsStr","findLeaderboardItemNamesForTracking","ids","rowNameField","leaderboardData","HeadersTop","rowsCount","selectedCount","onClearSelect","onSelectAll","sortingFn","getCheckState","INDETERMINATE","columnsWithoutNulls","handleCheckState","HeadersBottom","colsToUse","cl","HeaderLabel","InfoRowCells","isHighlighted","onHighlight","onDeleteGroup","onDeleteGroupItem","onEditGroup","isGroupVisible","leaderboardType","isGroup","handleSelect","handleHighlight","FolderOpen","Folder","getCountTextForGroups","groupModelIds","getFilteredProductNumber","handleRemoveItem","itemId","RemoveOutline","newName","DataRowCells","sortInfo","DataCell","KpiCell","DateCell","NumberCell","TextCell","columnType","valuesIndex","changeValues","changeColumn","Cells","getFormattedCellValue","dataColumn","QuickLook","dataUrlRoot","preTitleText","titleText","canMoveUp","canMoveDown","handleMoveUp","newId","ArrowUpward","handleMoveDown","ArrowDownward","ContentElement","hideElement","setContentElementHasData","contentElementId","ModalContext","sm","md","lg","xl","useModalContext","isOptionLimited","isMultiSelect","selectionLimit","CustomiseTable","selectedColumns","setSelectedColumns","optionSettings","setOptionsSettings","columnsParam","trackingElementName","handleOptionUpdate","updated","showColumnSelection","OptionSection","columnsLabels","enrichments","optionLabelsForTracking","getCustomiseOptionLabels","maxReached","shouldShowLimit","isChecked","handleCheckChange","SelectionBar","selectedIds","onActionClick","onAddGroupClick","selectedGroups","groupNames","numberOfGroups","includesGroups","expandedRowIds","selectedId","selectedGroupsAsParam","activeActions","selectionActions","minSelection","maxSelection","disableActionButtons","showAddToGroupButton","outOfRangeMsg","actionConfig","forcedSelection","expandedIds","analyseType","analyseOption","Link","numberOfProducts","handleActionClick","hasScrollbarRecursive","hasScrollbar","TABLE_TYPE","getDataVizValue","addElementDetails","metadataTrackingName","tableName","Toast","exportModalMessage","ExportButton","trackingSourceData","exportFormats","getExportData","onModalVisibilityChange","componentMetadata","hasExternalExportContent","buttonType","showExportModal","setShowExport","setMessage","disabledFormats","setDisabledFormats","toast","setToast","handleExportButtonClick","Pptx","screenHeight","screen","screenWidth","trackDataExportInitiated","DataExportInitiated","Export","ExportModal","isShown","download","exportFormat","selectedExportFormats","exportData","file","exportFile","GZip","downloadFile","trackDataExported","DataExported","onComplete","getEmptyValuesArray","createHeaderRow","mainHeaderColumns","totalNumberOfColumns","getTotalNumberColumns","createAllMarketRow","totalsData","mainColumnValues","getChangeValuesForColumn","subHeaderColumns","totalNumberOfSubColumns","currentColumn","columnValues","_firstColumn","restColumns","createSummaryForGroups","groupData","groupSummary","groupInfo","groupProducts","referenceRow","mergeGroupSummaryWithProducts","createDataRows","identifierName","createPeriodsRow","allMainColumnLabels","firstPeriod","restPeriods","allChangeColumnLabels","createWorksheetData","summaryRows","LeaderBoardSettings","GroupType","CheckboxGroup","RadioOptions","NEW","EXISTING","CreateGroupModal","onCreateGroup","createGroups","setGroups","setGroupName","GroupNameError","selectedOption","setSelectedOption","handleSelectChange","productGroups","pg","isGroupNew","isGroupExisting","primaryButtonText","isGroupNameEmpty","isAnyGroupChecked","primaryButtonDisabled","groupsByGroupType","keyFn","groupType","ProductGroups","handleCreateGroup","groupsByGroupTypeEntries","groupTypeName","selectGroups","GroupDisclaimer","rowSelected","NoGroupMessage","getLeaderboardType","Leaderboard","ComponentActionsContainer","ComponentFooterContainer","componentMetaData","rowsToDisplay","setRowsToDisplay","setLeaderboardData","setGroupData","showGroupData","setShowGroupData","setSortingInfo","defaultSortingInfo","setDefaultSortingInfo","setSelected","setDisabled","showEdit","setShowEdit","highlighted","setHighlighted","visibleColumnsRef","isLeaderboardLoading","pageSettingsInstance","isProductGroupLoading","isGroupModalOpen","createOrUpdateGroup","deleteGroup","deleteGroupItem","toggleCreateGroupModal","updateGroupName","useProductGroups","preferences","setPreferences","setIsGroupModalOpen","setIsLoading","itemGroups","otherGroups","getProductGroups","handleProductGroups","paramGroup","preferencesStore","updatedPreferences","DeleteGroup","Group","rowNamefield","AddItem","selectedNames","RemoveItem","oldName","RenameGroup","visibleColumns","storeSelectedProducts","useDataFromComponentSettings","isDataFromComponentSettingsCopied","shouldClear","RowsToDisplay","SelectedProducts","selectedProducts","withSearchTerm","updatedRowIdField","nameColumn","columnsToInclude","defaultSortColumn","sortOption","isDefault","defaultSortOption","defaultSorting","defaultDirection","rowsDataSrc","maxMap","kpiCols","highestValue","leaderColumns","periods","makeLeaderboardData","getGroupDataFromLeaderboard","updatedGroupProducts","disableIndividualItem","disabledItems","firstDataColumn","newRowIdField","infoDataCopy","handleClearSelect","isCurrentlyHighlighted","highlightedItems","Quickview","Overlay","handleSortLeaderboard","highlightedRow","getGroup","findRelatedGroup","show","getGroupItemBorderValue","getGroupModelsBorderValue","modelId","onRowHighlight","handleGroupList","isFirstColumnSorted","handleSelectAll","selectedRows","selectAll","CheckBox","handleLoadMore","newAmount","LoadMore","Xlsx","chartDataToExportData","leaderboardInfo","removeGroupSummariesFromLeaderboardInfo","copyLeaderboardInfoData","Excel","worksheets","worksheetName","frozen","ySplit","Option","lim","p2b","n2b","b2n","n2p","map$1","A","B","C","E","h1","h2","eq","HUE_RE","hsl2rgbn","hsv2rgbn","hwb2rgbn","rgb2hsl","hueValue","calln","hsl2rgb","Y","X","W","U","R","Q","O","N","K","H","I","J","names$1","OiceXe","antiquewEte","aqua","aquamarRe","azuY","beige","bisque","black","blanKedOmond","Xe","XeviTet","bPwn","burlywood","caMtXe","KartYuse","KocTate","cSO","cSnflowerXe","cSnsilk","crimson","cyan","xXe","xcyan","xgTMnPd","xWay","xgYF","xgYy","xkhaki","xmagFta","xTivegYF","xSange","xScEd","xYd","xsOmon","xsHgYF","xUXe","xUWay","xUgYy","xQe","xviTet","dAppRk","dApskyXe","dimWay","dimgYy","dodgerXe","fiYbrick","flSOwEte","foYstWAn","fuKsia","gaRsbSo","ghostwEte","gTd","gTMnPd","Way","gYF","gYFLw","gYy","honeyMw","hotpRk","RdianYd","Rdigo","ivSy","khaki","lavFMr","lavFMrXsh","lawngYF","NmoncEffon","ZXe","ZcSO","Zcyan","ZgTMnPdLw","ZWay","ZgYF","ZgYy","ZpRk","ZsOmon","ZsHgYF","ZskyXe","ZUWay","ZUgYy","ZstAlXe","ZLw","lime","limegYF","lRF","magFta","maPon","VaquamarRe","VXe","VScEd","VpurpN","VsHgYF","VUXe","VsprRggYF","VQe","VviTetYd","midnightXe","mRtcYam","mistyPse","moccasR","navajowEte","navy","Tdlace","Tive","TivedBb","Sange","SangeYd","ScEd","pOegTMnPd","pOegYF","pOeQe","pOeviTetYd","papayawEp","pHKpuff","peru","pRk","plum","powMrXe","purpN","YbeccapurpN","Yd","Psybrown","PyOXe","saddNbPwn","sOmon","sandybPwn","sHgYF","sHshell","siFna","silver","skyXe","UXe","UWay","UgYy","snow","sprRggYF","stAlXe","tan","teO","tEstN","tomato","Qe","viTet","JHt","wEte","wEtesmoke","Lw","LwgYF","RGB_RE","modHSL","ratio","functionParse","rgbParse","hwb2rgb","hsv2rgb","hueParse","Color","unpacked","tkeys","ok","nk","unpack","transparent","nameParse","_rgb","_valid","rgbString","hexString","isShort","hslString","mix","weight","w2","w1","interpolate","rgb1","rgb2","clearer","greyscale","opaquer","lighten","darken","saturate","desaturate","rotate","uid","isNullOrUndef","isNumberFinite","finiteOrDefault","valueOrDefault","toDimension","dimension","each","loopable","_elementsEqual","a0","ilen","datasetIndex","klen","isValidKey","_merger","tval","sval","merger","mergeIf","_mergerIf","keyResolvers","resolveObjectKey","_splitKey","_getKeyResolver","_capitalize","defined","setsEqual","TAU","PITAU","INFINITY","POSITIVE_INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","almostEquals","epsilon","niceNum","roundedRange","niceRange","toPrimitive","isNonPrimitive","_setMinAndMaxByKey","toRadians","degrees","toDegrees","radians","_decimalPlaces","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","distanceBetweenPoints","pt1","pt2","_angleDiff","_normalizeAngle","_angleBetween","sameAngleIsFullCircle","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","_isBetween","_lookup","cmp","mid","hi","lo","_lookupByKey","ti","_rlookupByKey","arrayEvents","unlistenArrayEvents","stub","_chartjs","listeners","_arrayUnique","requestAnimFrame","argsToUse","ticking","_toLeftRightCenter","_alignStartEnd","_getStartAndCountOfVisiblePoints","points","animationsDisabled","pointCount","_sorted","iScale","vScale","_parsed","spanGaps","axis","minDefined","maxDefined","getUserBounds","getPixelForValue","distanceToDefinedLo","distanceToDefinedHi","_scaleRangesChanged","xScale","yScale","_scaleRanges","newRanges","xmin","xmax","ymin","ymax","changed","atEdge","elasticIn","elasticOut","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","isPatternOrGradient","getHoverColor","colors","intlCache","cacheKey","formatter","getNumberFormat","formatters","tickValue","notation","calculateDelta","logDelta","numDecimal","logarithmic","remain","significand","Ticks","overrides","getScope$1","Defaults","_descriptors","_appliers","animation","borderColor","datasets","getDevicePixelRatio","events","family","hover","hoverBackgroundColor","hoverBorderColor","hoverColor","indexAxis","interaction","intersect","includeInvisible","maintainAspectRatio","onHover","parsing","plugins","responsive","scales","showLine","drawActiveElementsOnTop","describe","override","targetScope","targetName","scopeObject","targetScopeObject","privateName","appliers","_scriptable","_indexable","_fallback","easing","loop","properties","resize","animations","visible","hide","autoPadding","right","beginAtZero","grace","grid","drawOnChartArea","drawTicks","tickWidth","_ctx","tickColor","dash","dashOffset","minRotation","maxRotation","mirror","textStrokeWidth","textStrokeColor","autoSkip","autoSkipPadding","labelOffset","minor","major","crossAlign","showLabelBackdrop","backdropColor","backdropPadding","_measureText","gc","longest","textWidth","_longestText","arrayOfThings","garbageCollect","jlen","nestedThing","gcLen","_alignPixel","pixel","currentDevicePixelRatio","clearCanvas","resetTransform","drawPoint","drawPointLegend","xOffset","yOffset","cornerRadius","xOffsetW","yOffsetW","pointStyle","rotation","radius","rad","ellipse","SQRT1_2","borderWidth","_isPointInArea","area","clipArea","unclipArea","_steppedLineTo","flip","midpoint","_bezierCurveTo","cp1x","cp2x","cp1y","cp2y","decorateText","strikethrough","underline","metrics","actualBoundingBoxLeft","actualBoundingBoxRight","actualBoundingBoxAscent","actualBoundingBoxDescent","yDecoration","decorationWidth","drawBackdrop","oldColor","renderText","lines","strokeColor","translation","setRenderOpts","backdrop","addRoundedRectPath","topLeft","bottomLeft","bottomRight","topRight","LINE_HEIGHT","FONT_STYLE","toLineHeight","_readValueToProps","objProps","toTRBL","toTRBLCorners","toPadding","toFont","toFontString","cacheable","parentContext","_createResolver","scopes","prefixes","rootScopes","finalRootScopes","_cacheable","_scopes","_rootScopes","_getTarget","Proxy","deleteProperty","_keys","_cached","readKey","needsSubResolver","createSubResolver","_resolveWithPrefixes","getKeysFromAllScopes","_storage","_attachContext","subProxy","descriptorDefaults","_proxy","_subProxy","_stack","receiver","isScriptable","getValue","_resolveScriptable","isIndexable","_resolveArray","_resolveWithContext","allKeys","scriptable","indexable","_allKeys","resolveFallback","getScope","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","subGetTarget","resolveKeysFromAllScopes","_parseObjectDataRadialScale","_parsing","EPSILON","getPoint","getValueAxis","splineCurve","firstPoint","middlePoint","afterPoint","d01","d12","s01","s12","fa","fb","capControlPoint","pt","_updateBezierControlPoints","controlPoints","cubicInterpolationMode","valueAxis","pointsLen","deltaK","mK","pointBefore","pointCurrent","pointAfter","slopeDelta","alphaK","betaK","tauK","squaredMagnitude","monotoneAdjust","iPixel","vPixel","monotoneCompute","splineCurveMonotone","tension","capBezierPoints","inArea","inAreaPrev","inAreaNext","_isDomSupported","_getParentNode","domNode","parseMaxStyle","styleValue","parentProperty","valueInPixels","positions","getPositionedStyle","getRelativePosition","boxSizing","paddings","touches","useOffsetPos","clientX","clientY","getCanvasPosition","round1","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","setTransform","supportsEventListenerOptions","passiveSupported","passive","readUsedSize","getStyle","_pointInLine","_steppedInterpolation","_bezierInterpolation","cp1","cp2","getRtlAdapter","rtl","rectX","setWidth","xPlus","leftForLtr","itemWidth","getRightToLeftAdapter","_itemWidth","overrideTextDirection","original","getPropertyPriority","prevTextDirection","restoreTextDirection","propertyFn","between","normalizeSegment","_boundSegment","startBound","endBound","getSegment","prevValue","inside","subStart","_boundSegments","segments","readStyle","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","styleChanged","prevStyle","replacer","Animator","_charts","_running","_lastDate","_notify","anims","numSteps","initial","currentStep","_refresh","_update","remaining","running","draw","_active","_total","_getAnims","charts","listen","cur","_duration","animator","interpolators","c0","Animation","currentValue","_fn","_easing","_start","_loop","_target","_prop","_from","_to","_promises","elapsed","wait","resolved","Animations","_chart","_properties","configure","animationOptions","animatedProps","_animateOptions","$shared","$animations","resolveTargetOptions","_createAnimations","anim","awaitAll","scaleClip","allowedOverflow","getSortedDatasetIndices","filterVisible","metasets","_getSortedDatasetMetas","applyStack","dsIndex","singleMode","otherValue","isStacked","stacked","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","positive","getMatchingVisibleMetas","updateStacks","_cachedMeta","_stacks","iAxis","vAxis","indexScale","valueScale","getStackKey","_top","_bottom","_visualValues","getFirstScaleId","clearStacks","isDirectUpdateMode","cloneIfNotShared","shared","DatasetController","_cachedDataOpts","getMeta","_type","_objectData","_sharedOptions","_drawStart","_drawCount","enableOptionSharing","supportsDecimation","$context","_syncList","datasetElementType","dataElementType","initialize","linkScales","_stacked","addElements","isPluginEnabled","updateIndex","getDataset","chooseId","xid","xAxisID","yid","yAxisID","rid","rAxisID","iid","iAxisID","vid","vAxisID","getScaleForId","rScale","getDatasetMeta","scaleID","_getOtherScale","_destroy","_dataCheck","iAxisKey","vAxisKey","adata","convertObjectDataToArray","isExtensible","buildOrUpdateElements","resetNewElements","stackChanged","oldStacked","_resyncElements","scopeKeys","datasetScopeKeys","getOptionScopes","createResolver","parseArrayData","parseObjectData","parsePrimitiveData","isNotInOrderComparedToPrev","getLabels","singleScale","xAxisKey","yAxisKey","getParsed","getDataElement","updateRangeFromParsed","parsedValue","getMinMax","canStack","otherScale","hidden","createStack","NEGATIVE_INFINITY","otherMin","otherMax","_skip","getAllParsedValues","getMaxOverflow","getLabelAndValue","getLabelForValue","_clip","toClip","defaultClip","chartArea","resolveDatasetElementOptions","resolveDataElementOptions","dataIndex","createDataContext","createDatasetContext","_resolveElementOptions","sharing","datasetElementScopeKeys","resolveNamedOptions","_resolveAnimations","transition","datasetAnimationScopeKeys","getSharedOptions","includeOptions","sharedOptions","_animationsDisabled","_getSharedOptions","firstOpts","previouslySharedOptions","updateSharedOptions","updateElement","_setStyle","removeHoverStyle","setHoverStyle","_removeDatasetHoverStyle","_setDatasetHoverStyle","numMeta","numData","_insertElements","_removeElements","move","updateElements","_sync","_dataChanges","_onDataPush","_onDataPop","_onDataShift","_onDataSplice","newCount","_onDataUnshift","computeMinSampleSize","$bar","visibleMetas","getAllScaleValues","_length","updateMinAndPrev","getPixelForTick","barStart","barEnd","_custom","parseFloatBar","parseArrayOrPrimitive","isFloatBar","setBorderSkipped","edge","borderSkipped","horizontal","borderProps","enableBorderRadius","parseEdge","orig","startEnd","setInflateAmount","inflateAmount","DoughnutController","animateRotate","animateScale","cutout","circumference","spacing","aspectRatio","legend","generateLabels","fontColor","getDataVisibility","legendItem","toggleDataVisibility","innerRadius","outerRadius","_getRotation","_getCircumference","_getRotationExtents","isDatasetVisible","arcs","getMaxBorderWidth","getMaxOffset","maxSize","chartWeight","_getRingWeight","ratioX","ratioY","startAngle","endAngle","calcMax","calcMin","maxX","maxY","minX","minY","getRatioAndOffset","maxRadius","radiusLength","_getVisibleDatasetWeightTotal","calculateTotal","_getRingWeightOffset","_circumference","calculateCircumference","animationOpts","metaData","borderAlign","hoverBorderWidth","hoverOffset","ringWeightOffset","PolarAreaController","angleLines","circular","pointLabels","_updateRadius","minSize","cutoutPercentage","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","controllers","BarController","categoryPercentage","barPercentage","_index_","_value_","bars","getBasePixel","isHorizontal","ruler","_getRuler","vpixels","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","center","_getStacks","currentParsed","iScaleValue","skipNull","_getStackCount","_getStackIndex","pixels","barThickness","_startPixel","_endPixel","stackCount","minBarLength","actualBase","floating","barSign","startPixel","getPixelForDecimal","endPixel","getValueForPixel","halfGrid","getLineWidthForValue","maxBarThickness","percent","computeFlexCategoryTraits","thickness","computeFitCategoryTraits","stackIndex","rects","BubbleController","LineController","_dataset","_datasetIndex","_decimated","animated","maxGapLength","directUpdate","pointsCount","prevParsed","nullData","lastPoint","updateControlPoints","PieController","RadarController","_fullLoop","pointPosition","getPointPositionForValue","ScatterController","registry","getElement","DateAdapterBase","members","init","formats","binarySearch","metaset","lookupMethod","_reversePixels","getRange","evaluateInteractionItems","getSortedVisibleDatasetMetas","getIntersectItems","useFinalPosition","isPointInArea","inRange","getNearestItems","distanceMetric","useX","useY","getDistanceMetricForAxis","minDistance","getCenterPoint","getNearestCartesianItems","getProps","getNearestRadialItems","getAxisItems","rangeMethod","intersectsItem","Interaction","modes","nearest","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","getPadding","newWidth","outerWidth","newHeight","outerHeight","widthChanged","heightChanged","same","getMargins","marginForPositions","fitBoxes","boxes","refitBoxes","refit","fullSize","setBoxDims","placeBoxes","userPadding","placed","stackWeight","layouts","addBox","_layers","removeBox","layoutItem","minPadding","availableWidth","availableHeight","layoutBoxes","wrapBoxes","centerHorizontal","centerVertical","leftAndTop","rightAndBottom","vertical","buildLayoutBoxes","verticalBoxes","horizontalBoxes","beforeLayout","visibleVerticalBoxCount","vBoxMaxWidth","hBoxMaxHeight","buildStacks","setLayoutDims","updatePos","change","handleMaxPadding","BasePlatform","acquireContext","releaseContext","getMaximumSize","isAttached","updateConfig","BasicPlatform","EXPANDO_KEY","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","isNullOrEmpty","eventListenerOptions","removeListener","nodeListContains","nodeList","createAttachObserver","MutationObserver","trigger","addedNodes","removedNodes","childList","subtree","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","createResizeObserver","contentRect","listenDevicePixelRatioChanges","releaseObserver","unlistenDevicePixelRatioChanges","createProxyAndListen","native","fromNativeEvent","addListener","DomPlatform","renderHeight","renderWidth","displayWidth","displayHeight","initCanvas","proxies","$proxies","attach","detach","bbWidth","bbHeight","margins","containerSize","containerStyle","containerBorder","containerPadding","getContainerSize","isConnected","tooltipPosition","hasValue","newTicks","majorStart","majorEnd","offsetFromEdge","getTicksLimit","ticksLength","maxTicksLimit","sample","numItems","getPixelForGridLine","offsetGridLines","validIndex","lineValue","getTickMarkLength","getTitleHeight","titleAlign","reverseAlign","Scale","_margins","labelRotation","_range","_gridLineItems","_labelItems","_labelSizes","_maxLength","_longestTextCache","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_dataLimitsCached","suggestedMin","suggestedMax","metas","getTicks","xLabels","yLabels","getLabelItems","_computeLabelItems","beforeUpdate","tickOpts","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","minmax","keepZero","_addGrace","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","determinedMaxTicks","_tickSize","maxScale","maxChart","determineMaxTicks","ticksLimit","majorIndices","getMajorIndices","numMajorIndices","skipMajors","evenMajorSpacing","getEvenSpacing","_factorize","calculateSpacing","avgMajorSpacing","afterAutoSkip","beforeFit","fit","afterFit","afterUpdate","reversePixels","_alignToPixels","alignToPixels","_callHooks","notifyPlugins","beforeTickToLabelConversion","generateTickLabels","afterTickToLabelConversion","numTicks","maxLabelDiagonal","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","widest","maxLabelHeight","highest","asin","titleOpts","gridOpts","titleHeight","tickPadding","angleRadians","labelHeight","labelWidth","_calculatePadding","_handleMargins","isRotated","labelsBelowTicks","offsetLeft","offsetRight","isFullSize","_computeLabelSizes","caches","widths","heights","tickFont","fontString","nestedLabel","widestLabelSize","highestLabelSize","_resolveTickFontOptions","valueAt","decimal","getDecimalForPixel","getBaseValue","createTickContext","optionTicks","rot","_computeGridLineItems","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x2","y2","positionAxisID","optsAtIndex","optsAtIndexBorder","lineColor","tickBorderDash","tickBorderDashOffset","tickAndPadding","hTickAndPadding","lineCount","textOffset","_getXAxisLabelAlignment","_getYAxisLabelAlignment","halfCount","tickTextAlign","labelPadding","_computeLabelArea","drawBackground","drawGrid","drawLine","lineDashOffset","drawBorder","lastLineWidth","drawLabels","renderTextOptions","drawTitle","titleX","titleY","titleArgs","gz","bz","axisID","_maxDigits","TypedRegistry","isForType","isPrototypeOf","register","parentScope","isIChartComponent","itemDefaults","defaultRoutes","routes","propertyParts","sourceName","sourceScope","routeDefaults","registerDefaults","unregister","Registry","_typedRegistries","_each","addControllers","addPlugins","addScales","getController","_get","getPlugin","getScale","removeControllers","removeElements","removePlugins","removeScales","typedRegistry","reg","_getRegistryForType","_exec","itemReg","camelMethod","PluginService","_init","notify","_createDescriptors","plugin","cancelable","invalidate","_oldCache","_notifyStateChanges","localIds","allPlugins","getOpts","pluginOpts","createDescriptors","previousDescriptors","pluginScopeKeys","getIndexAxis","datasetDefaults","idMatchesAxis","determineAxis","scaleOptions","getAxisFromDataset","initOptions","chartDefaults","configScales","chartIndexAxis","scaleConf","boundDs","retrieveAxisFromDatasets","defaultId","getDefaultScaleIDFromAxis","defaultScaleOptions","defaultID","getAxisFromDefaultScaleID","mergeScaleConfig","initData","keyCache","keysCached","cachedKeys","generate","addIfFound","initConfig","_scopeCache","_resolverCache","clearCache","datasetType","additionalOptionScopes","_cachedScopes","mainScope","keyLists","chartOptionScopes","subPrefixes","getResolver","hasFunction","needContext","resolverCache","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onAnimationProgress","getCanvas","getChart","moveNumericKeys","intKey","getSizeForArea","invalidatePlugins","userConfig","initialCanvas","existingChart","OffscreenCanvas","_detectPlatform","_aspectRatio","_metasets","_lastEvent","_responsiveListeners","_sortedMetasets","_plugins","_hiddenIndices","attached","_doResize","resizeDelay","_initialize","bindEvents","_resizeBeforeDraw","_resize","newSize","newRatio","onResize","ensureScalesHaveIDs","axisOptions","buildOrUpdateScales","scaleOpts","isRadial","dposition","dtype","scaleType","hasUpdated","_updateMetasets","_destroyDatasetMeta","_removeUnreferencedMetasets","buildOrUpdateControllers","newControllers","ControllerClass","_resetElements","animsDisabled","_updateScales","_checkEventBindings","_updateHiddenIndices","_minPadding","_updateLayout","_updateDatasets","_eventHandler","_updateHoverStyles","existingEvents","newEvents","unbindEvents","_getUniformDataChanges","datasetCount","makeSet","changeSet","noArea","_idx","_updateDataset","_drawDatasets","_drawDataset","useClip","getDatasetArea","getElementsAtEventForMode","setDatasetVisibility","_updateVisibility","_stop","toBase64Image","bindUserEvents","bindResponsiveEvents","_add","_remove","detached","updateHoverStyle","getActiveElements","setActiveElements","activeElements","lastActive","pluginId","replay","hoverOptions","deactivated","activated","inChartArea","eventFilter","_handleEvent","_getActiveElements","isClick","_isClickEvent","lastEvent","determineLastEvent","rThetaToXY","theta","pathArc","pixelMargin","innerR","spacingOffset","avNogSpacingRadius","angleOffset","outerStart","outerEnd","innerStart","innerEnd","angleDelta","borderRadius","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","parseBorderRadius$1","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","outerMidAdjustedAngle","pCenter","p4","innerMidAdjustedAngle","p8","outerStartX","outerStartY","outerEndX","outerEndY","ArcElement","fullCircles","chartX","chartY","rAdjust","nonZeroBetween","betweenAngles","withinRadius","halfAngle","halfRadius","radiusOffset","drawArc","inner","angleMargin","clipArc","setStyle","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","lineMethod","stepped","getLineMethod","fastPathSegment","prevX","lastY","avgX","countX","pointIndex","drawX","truncX","_getSegmentMethod","usePath2D","Path2D","LineElement","_path","_points","_segments","_pointsUpdated","segmentOptions","findStartAndEnd","chartContext","baseStyle","addStyle","st","dir","p0","p0DataIndex","p1DataIndex","doSplitByStyles","splitByStyles","solidSegments","_computeSegments","_interpolate","_getInterpolationMethod","interpolated","segmentMethod","strokePathWithCache","strokePathDirect","inRange$1","hitRadius","PointElement","hoverRadius","mouseX","mouseY","inXRange","inYRange","getBarBounds","bar","half","skipOrLimit","skipX","skipY","addNormalRectPath","inflateRect","refRect","BarElement","outer","maxW","maxH","parseBorderWidth","maxR","enableBorder","parseBorderRadius","boundingRects","addRectPath","BORDER_COLORS","BACKGROUND_COLORS","getBorderColor","getBackgroundColor","containsColorsDefinitions","plugin_colors","forceOverride","_args","chartOptions","containsColorDefenition","colorizer","colorizeDoughnutDataset","colorizePolarAreaDataset","colorizeDefaultDataset","getColorizer","cleanDecimatedDataset","cleanDecimatedData","plugin_decimation","algorithm","beforeElementsUpdate","xAxis","decimated","getStartAndCountOfVisiblePointsSimplified","samples","bucketWidth","sampledIndex","endIndex","maxAreaPoint","maxArea","nextA","avgY","avgRangeStart","avgRangeEnd","avgRangeLength","rangeOffs","rangeTo","pointAx","pointAy","lttbDecimation","minIndex","maxIndex","xMin","dx","intermediateIndex1","intermediateIndex2","minMaxDecimation","_getBounds","_findSegmentEnd","_getEdge","_createBoundaryLine","boundary","linePoints","_pointsFromSegments","_shouldApplyFill","_resolveTarget","propagate","visited","_decodeFill","fillOption","parseFillOption","firstCh","decodeTargetIndex","addPointsBelow","sourcePoint","linesBelow","postponed","findPoint","pointValue","firstValue","lastValue","simpleArc","_drawfill","getLineByIndex","sourcePoints","below","getLinesBelow","_buildStackLine","_getTargetValue","computeCircularBoundary","_getTargetPixel","computeLinearBoundary","computeBoundary","lineOpts","above","clipVertical","doFill","clipY","lineLoop","tpoints","targetSegments","tgt","subBounds","fillSources","fillSource","notShape","clipBounds","interpolatedLineTo","targetLoop","interpolatedPoint","afterDatasetsUpdate","$filler","beforeDraw","drawTime","beforeDatasetsDraw","beforeDatasetDraw","getBoxSize","labelOpts","boxHeight","boxWidth","usePointStyle","pointStyleWidth","itemHeight","Legend","_added","legendHitBoxes","_hoveredItem","doughnutMode","legendItems","columnSizes","lineWidths","buildLabels","labelFont","_computeTitleHeight","_fitRows","_fitCols","hitboxes","totalHeight","_itemHeight","heightLimit","totalWidth","currentColWidth","currentColHeight","legendItemText","calculateItemWidth","fontLineHeight","calculateLegendItemHeight","calculateItemHeight","calculateItemSize","adjustHitBoxes","rtlHelper","hitbox","_draw","defaultColor","halfFontSize","textDirection","lineDash","drawOptions","SQRT2","yBoxTop","xBoxLeft","drawLegendBox","_textX","titleFont","titlePadding","topPaddingPlusHalfFontSize","_getLegendItemAt","hitBox","lh","handleEvent","onLeave","isListened","hoveredItem","sameItem","itemsEqual","plugin_legend","_element","afterEvent","ci","useBorderRadius","_padding","textSize","_drawArgs","fontOpts","plugin_title","titleBlock","createTitle","plugin_subtitle","positioners","average","xSet","xAverage","eventPosition","nearestElement","tp","pushOrConcat","toPush","splitNewlines","createTooltipItem","formattedValue","getTooltipSize","tooltip","footer","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","beforeBody","afterBody","titleSpacing","titleMarginBottom","displayColors","bodySpacing","footerMarginTop","footerSpacing","widthPadding","maxLineWidth","determineXAlign","yAlign","chartWidth","xAlign","caret","caretSize","caretPadding","doesNotFitWithAlign","determineAlignment","determineYAlign","getBackgroundPoint","alignment","paddingAndSize","alignX","alignY","getAlignedX","getBeforeAfterBodyLines","overrideCallbacks","defaultCallbacks","beforeTitle","tooltipItems","afterTitle","beforeLabel","tooltipItem","labelColor","labelTextColor","bodyColor","labelPointStyle","afterLabel","beforeFooter","afterFooter","invokeCallbackWithFallback","Tooltip","_eventPosition","_size","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","getTitle","getBeforeBody","getBody","bodyItems","scoped","getAfterBody","getFooter","_createItems","itemSort","positionAndSize","backgroundPoint","external","drawCaret","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ptX","ptY","titleColor","_drawColorBox","colorX","rtlColorX","yOffSet","colorY","multiKeyBackground","outerX","innerX","strokeRect","drawBody","bodyAlign","bodyLineHeight","xLinePadding","fillLineOfText","bodyAlignForCalculation","textColor","drawFooter","footerAlign","footerColor","tooltipSize","quadraticCurveTo","_updateAnimationTarget","animX","animY","_willRender","hasTooltipContent","positionChanged","_positionChanged","_ignoreReplayEvents","plugin_tooltip","afterInit","afterDraw","Colors","Decimation","Filler","SubTitle","_getLabelForValue","relativeLabelSize","minSpacing","LinearScaleBase","_startValue","_endValue","_valueRange","handleTickRangeOptions","minSign","maxSign","getTickLimit","maxTicks","stepSize","computeTickLimit","generationOptions","dataRange","precision","maxDigits","includeBounds","maxSpaces","rmin","rmax","countDefined","niceMin","niceMax","numSpaces","rounded","almostWhole","decimalPlaces","generateTicks$1","LinearScale","log10Floor","changeExponent","isMajor","tickVal","steps","rangeExp","rangeStep","LogarithmicScale","_zero","minExp","startExp","lastTick","generateTicks","getTickBackdropHeight","determineLimits","updateLimits","limits","hLimits","vLimits","createPointLabelItem","itemOpts","outerDistance","drawingArea","additionalAngle","pointLabelPosition","getPointPosition","yForAngle","getTextAlignForAngle","isNotOverlapped","drawPointLabelBox","backdropLeft","backdropTop","backdropWidth","backdropHeight","pathRadiusLine","RadialLinearScale","animate","centerPointLabels","_pointLabels","_pointLabelItems","valueCount","pointLabelOpts","getPointLabelContext","plFont","setCenterPoint","buildPointLabelItems","fitWithPointLabels","leftMovement","rightMovement","topMovement","bottomMovement","scalingFactor","getValueForDistanceFromCenter","scaledDistance","pointLabel","createPointLabelContext","distanceFromCenter","getBasePosition","getPointLabelPosition","drawPointLabels","gridLineOpts","drawRadiusLine","INTERVALS","UNITS","sorter","_adapter","_parseOpts","determineUnitForAutoTicks","minUnit","capacity","MAX_SAFE_INTEGER","addTick","ticksFromTimestamps","majorUnit","setMajorTicks","TimeScale","displayFormats","_unit","_majorUnit","_offsets","_normalized","_applyBounds","_getLabelBounds","getLabelTimestamps","timeOpts","_generate","_filterBetween","_getLabelCapacity","determineUnitForFormatting","determineMajorUnit","initOffsets","offsetAfterAutoskip","getDecimalForValue","hasWeekday","getDataTimestamps","tooltipFormat","datetime","_tickFormatFunction","minorFormat","majorFormat","offsets","_getLabelSize","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","exampleLabel","prevSource","nextSource","prevTarget","nextTarget","CategoryScale","_addedLabels","addedLabels","addIfString","findOrAddLabel","TimeSeriesScale","_table","_minPos","_tableRange","_getTimestampsForTable","buildLookupTable","registerables","deviceXDPI","logicalXDPI","orient","dy","ln","region","compute$1","anchor","clamp","r0","clipped","vx","vy","aligned","sy","rasterize","getScaleOrigin","drawTextLine","stroked","Label","me","_model","_rects","_el","_modelize","positioner","textShadowBlur","textShadowColor","model","th","tw","tx","ty","frame","geometry","bgColor","drawRoundedRect","drawFrame","textGeometry","drawText","MIN_INTEGER","MIN_SAFE_INTEGER","MAX_INTEGER","rotated","projected","dp","toAxis","HitBox","_rotation","_rect","coordinates","vs","intersects","pr0","pr1","axes","prepare","$layout","_box","_hidable","_visible","_set","sa","sb","collider","s0","collide","h0","compute","DEFAULT_KEY","callback$1","$groups","_dirty","beforeInit","_actives","expando","_listened","_datasets","_labels","afterDatasetUpdate","datalabels","afterDatasetsDraw","beforeEvent","enter","leave","_hovered","dispatchMoveEvents","handleMoveEvents","click","handleClickEvents","ChartColors","DEFAULT_FONT_SIZE","DEFAULT_FONT","summaryLabelsPlugin","LabelPosition","TOP","afterDatasetDraw","renderTooltip","tooltipModel","tooltipEl","pointerEvents","arrowEl","innerHtml","tooltipWidth","borderBottom","borderTop","borderLeft","borderRight","updateTooltipPosition","CHANGE_TYPE_AND_LABEL_POSITION_MAP","absolute","BOTTOM","StackedBarChart","trackTooltipEvent","canvasId","canvasRef","hoverTimeoutRef","chartRef","optionsRef","changesOnLastStack","compactView","changeLabelSpace","longestChange","getLongestChangeLabel","hideAllLabels","ChartDataLabels","changeType","summaryLabel","configChart","fillColor","handleLabelValueDisplay","handleLabelChangesDisplay","_event","_activeElements","onHoverActivity","handleTooltipLabelCallback","handleXTicksCallback","handleYTicksCallback","useMax","calHeight","lSet","sumAtIndex","perc","valueFormatter","FeatureToggleButton","featureTag","tagOn","toggleFeatureTag","featureTags","useFeatureToggle","setFeatureTags","featureTagOn","setFeatureTagOn","newFeatureTags","LineChart","VisxLineChart","ChartScaleType","LegendPosition","visxOptionsRef","chartData","setChartdata","useVisx","useToggleButton","xCord","hoverTimeout","pointRadius","lContext","displayTicks","lineChartData","labelPart","fillContainer","xScaleType","Linear","yScaleType","tooltipProps","xKey","valueFormat","axesConfig","xBottom","hideAxisLine","hideZero","tickSpacing","tickLabelClassName","tickFormat","hideTicks","yLeft","showMarkers","isColumnGridShown","customLineColors","legendPosition","Hide","SlopeChart","fullChartWidth","setFullChartWidth","sideLabelWidth","getSideLabelWidth","leftLabelWidth","rightLabelWidth","fullwidth","noComparisonPeriod","sContext","KpiTrendChart","setIndex","handleMouseOver","onMouseOver","Periods","isTotals","canvasEl","displayValue","overlaysArray","secondaryFormatted","MarketKpi","ColorHelper","brandColors","defaultColors","isBrands","xColumnName","xRowValues","helper","getBrandColorMap","standardColors","getStandardColorIndex","getColors","rowXValue","getContrastTextColor","makeDataSet","withChange","colorHelper","mainLabel","subLabel","uniqueId","changeCol","getChangeColor","formatDataSets","valueSets","formatScaleValue","formatTooltipValue","findDescriptionColumn","createChartData","totals","fieldWarnings","yColumnName","updatedYColumn","setPerRow","myColorHelper","dataSets","totalsDataSet","dataLabels","dataSet","rowSets","rowSet","getWarningsOfColumn","validColumnsFilter","totalsLabel","totalsChangeLabel","additionalTotalsLabel","additionalTotalsChangeLabel","additionalLabelPosition","uniqueIds","idValue","legendCss","isLongLabel","placement","SelectionMenu","ChartTitle","selections","menuElement","menuOpen","setMenuOpen","EmptyDataWarning","MultiKpiChart","KpiChart","isSeries","lineChartOptions","slopeChartOptions","ChartWarnings","errorInfo","MultiKpiTable","periodCount","firstData","rowSubLabels","rowCount","KpiHeadersTop","series","KpiHeadersBottom","KpiCells","rowName","rIdx","seriesData","CustomiseKpis","onRearrange","currentKpis","maxCount","hasChanged","hasMaxCount","DragAndDrop","newArray","newIndexOrder","onKeyDown","KpiEntry","newSelected","handleAdd","toAdd","handleCancel","uniqueEnrichments","ToggleButtons","iconMap","BarChartVert","BarChartHoriz","BubbleChart","valueWithChangeChart","DataVizToggle","cloneElement","focusPeriod","totalDataRows","valuesSet","valuesDataSet","changesSet","columnLabels","rowsPerKpi","singleKpi","columnWidths","ExportHideout","splitIntoChunks","useTrackChartTooltipEvent","chartName","trackTooltip","setTrackTooltip","chartTooltipTracked","setChartTooltipTracked","trackChartEvent","collectionProps","subsection","pageName","ChartInteractions","elementKPI","scKpis","shouldDisableGroupAnalyticsSharing","shareGroupedAnalytics","__page__","lbGroups","plGroups","isGroupChosen","createViewStateFn","MultiKpi","paramsForContext","setChartData","setWarnings","exportModalOpen","setExportModalOpen","dataInfo","collectionInfo","isMultiKpiLoading","kpisParamName","canEditKpis","disableCollectionButton","selectedKpiColumns","requestedColumns","xData","datas","kpiData","makeMultiKpiData","handleDataVizChange","warningsToBeDisplayedOnTop","getWarningsBelongingOnTopOfChart","warningSettings","calculatePeriodCount","AddInsightToCollectionsButton","collectionKey","selectDataType","createInsightDataFn","corePageSettings","chartDataSlice","ADDITIONAL_KPI_MAP","Revenue","ShareRevenue","Units","ShareUnits","PriceIndex","AveragePrice","getRowLabel","labelToString","checkChartDataHasChanges","segmentDataSets","segmentDataSet","checkSetHasChanges","SegmentationChart","maxYRange","segmentEntries","additionalTotals","summaryEntry","SegmentChart","isSummary","SegmentationTable","PERIOD_COUNT","yLabel","SegmentationHeadersTop","SegmentationHeadersBottom","SegmentationCell","rowDataSetId","createSecondHeaderRow","hasChanges","createFirstHeaderRow","requiredColumns","createTotalMarketRow","_label","allXColumnIds","Segmentation","setYColumn","setXColumn","segmentName","additionalKPI","additionalYColumn","xDescColumn","segmentDescColumn","descCol","segmentData","segmentedData","summaryDataSet","segmentValues","segmentLabels","segmentSums","segmentMaxValue","sIdx","sums","maxSegmentValue","xRowName","segmentRowForX","rawIdx","segmentRow","formatSegmentDataSets","yType","xLabel","makeSegmentedChartData","sliceChartData","sliceSize","StatsTable","namesRow","setNamesRow","statsRows","setStatsRows","itemCount","setItemCount","hideCommon","dataSrc","statRow","isMultiItems","showHideCommon","dimmedRows","StatsHeader","StatsRow","dimmed","renderStatsTable","sliceStatsData","slices","namesSlice","slideStart","slideEnd","statsToExportData","GROWTH_KPI_MAP","getRowDataSets","summarySet","seriesSet","getNullFillerRow","firstSet","TimeSeriesChart","SummaryChart","stackedChartOptions","summaryStackedChartOptions","summarySlopeOptions","isSeriesDataEmpty","isSummaryDataEmpty","TimeSeriesTable","rowDataSets","summaryFiller","SeriesHeadersTop","SeriesHeadersBottom","SeriesCells","createSummaryColumns","createSeriesColumns","dataLabel","createTotalsRow","createSeriesRows","yColumnWithChange","seriesFiller","createTotalChangesRow","createChangeSeriesRows","dataVizTypesWithoutChart","dataVizTypesWithChart","defaultDataVizType","TimeSeries","updatedYColumnName","totalsGroupedData","totalsSeriesData","totalsSummaryData","xGroupedData","xSeriesData","xSummaryData","xSummaryColumnNames","xSeriesColumnNames","columnNames","cn","exportSeriesData","rawValuesLength","chunkedData","splitChartData","summaryData","exportSeries","makeTimeSeriesData","requiredValue","exportSeriesByChartType","getTrackingTags","itemGroup","locationId","chartDataToExcelData","UnknownElement","KpiTrends","valuesList","makeTrendsInfo","makeBoardRow","columnInfos","Billboard","moBillboardKpi","prevMoBillboardKpi","setPrevMoBillboardKpi","kpiName","kpiLabel","sortingInstructions","firstCol","secondCol","columnConfigs","groupedData","board","getColumnInfo","baseRows","sortValue","columnInfo","limitedRows","outOfStackRows","outOfStackIndex","haveHighlighted","matchesHighlight","makeBillboardInfo","getBillboard","BoardTableRow","AlertPanel","SingleKpiTrend","chartInfo","setChartInfo","dataRow","secondaryValues","makeTrendInfo","HeatmapScale","colorMap","neutral","positive1","positive2","positive3","positive4","negative1","negative2","negative3","negative4","HeatmapTable","onCellClick","limitRows","rowsToShow","cIdx","EntryCell","handleCellClick","rowIdx","colIdx","yName","hovered","setHovered","isMissing","Expand","makeHeatmapCell","kpiColumn","xName","getRowsIdentifiers","getSlicedArray","totalInfoColumn","columnSlice","getSlicedHeatmapInfo","slicedHeatmapInfo","slicedColumns","tableRows","columnsSlice","marketNames","Heatmap","setLimitRows","defaultColumn","kpiParam","marketTotal","xTotals","yTotals","combinedRows","xIdentifiers","yIdentifiers","heatMapColumns","yId","heatMapRows","xTotalRow","yTotal","xId","heatMapRow","xTotal","combinedRow","upper","lower","ranges","upperStep","lowerStep","lowerRanges","upperRanges","makeScaledRanges","makeHeatmapData","xValue","yValue","DecompositionChart","infoRef","barWidth","floatingLabel","boldFont","xAnchor","barData","yBottomAnchor","yTopAnchor","topLabel","bold","bottomLabel","formatValue","formatChange","KpiDecomposition","hasContentHaveData","setKpiLabel","contributionKpis","kpiChangeColumn","missingKpis","kpiContribution","resultSets","rawValues","formattedValues","formattedChangeValues","contributingKpiInfo","seed","decompositionConfig","contributionKpiConfig","contributionKpi","kpiContributionColumn","contributionValues","formattedKpiValue","formattedChangeValue","contributionValue","mapToChartConfigData","mapToContributingKpiInfo","isKpiQualityOk","kpiChange","kpiChangeFormatted","makeDecompositionInfo","ContentProviderRegister","contextSettingSelectors","registerContent","getContent","registerContextSettingSelector","getContextSettingsSelector","dataError","singleSelect","radioGroup","componentActions","componentFooter","DataReceivingContentElement","overrideElementHasData","setOverrideElementHasData","Loader","ErrorBoundaryContext","didCatch","ErrorBoundary","resetErrorBoundary","getDerivedStateFromError","_this$props$onReset","_this$props","onReset","_this$props$onError","_this$props2","componentDidUpdate","prevProps","resetKeys","_this$props$onReset2","_this$props3","hasArrayChanged","fallbackRender","FallbackComponent","childToRender","ErrorFallback","componentStack","LocalErrorBoundary","ComponentElement","setComponentSettings","componentContents","setComponentContents","componentContextParams","setComponentContextParams","componentPageParams","setComponentPageParams","cardElementRefs","contentsPending","contentElementHasDataMap","setContentElementHasDataMap","atLeastOneContentElementIsLoading","componentHasData","fetchContentsCallback","fetchContents","contextParamsData","trackContentEvents","addChartTypeToEventParams","_exportFormat","componentToPptData","dslOrContextLoading","cssMap","getTabLabelFromTabs","sectionsMap","getClassName","NavigationClicked","linkName","navigationSource","uiAction","handleTabClick","SectionElement","getSectionElement","Sections","PageTitle","titleParts","handleParamsChange","Heading","usesFilters","setUsesFilters","openDrawer","closeDrawer","ClientDrawer","useClientDrawer","disableCopyLinkButton","backLink","handleBack","CopySavedViewLinkButton","handleCreateViewState","getCopyLinkTrackingTags","FilterToggleButton","globalFilterAppliedValue","invariant","cond","createPath","hash","parsePath","parsedPath","hashIndex","searchIndex","matchRoutes","locationArg","basename","allowPartial","stripBasename","branches","flattenRoutes","score","siblings","compareIndexes","routesMeta","childrenIndex","rankRouteBranches","decoded","decodePath","matchRouteBranch","matchRoutesImpl","parentsMeta","parentPath","flattenRoute","relativePath","caseSensitive","joinPaths","computeScore","exploded","explodeOptionalSegments","isOptional","restExploded","subpath","paramRe","dynamicSegmentValue","indexRouteValue","emptySegmentValue","staticSegmentValue","splatPenalty","isSplat","initialScore","branch","matchedParams","matchedPathname","remainingPathname","matchPath","pathnameBase","normalizePathname","compiledParams","regexpSource","compilePath","captureGroups","memo2","splatValue","nextChar","getInvalidPathError","getResolveToMatches","pathMatches","getPathContributingMatches","resolveTo","toArg","routePathnames","locationPathname","isPathRelative","isEmptyPath","routePathnameIndex","toSegments","fromPathname","resolvePathname","normalizeSearch","normalizeHash","resolvePath","hasExplicitTrailingSlash","hasCurrentTrailingSlash","isRouteErrorResponse","internal","validMutationMethodsArr","validRequestMethodsArr","DataRouterContext","DataRouterStateContext","ViewTransitionContext","isTransitioning","NavigationContext","LocationContext","RouteContext","outlet","isDataRoute","RouteErrorContext","useInRouterContext","useLocation","navigateEffectWarning","useIsomorphicLayoutEffect","useNavigate","router","hookName","getDataRouterConsoleError","useDataRouterContext","useCurrentRouteId","activeRef","fromRouteId","useNavigateStable","dataRouterContext","navigator2","routePathnamesJson","go","useNavigateUnstable","useParams","routeMatch","useResolvedPath","useRoutesImpl","dataRouterState","future","isStatic","parentMatches","parentParams","parentPathname","parentPathnameBase","parentRoute","warningOnce","locationFromContext","parsedLocationArg","parentSegments","lazy","renderedMatches","initialized","errorIndex","renderFallback","fallbackIndex","HydrateFallback","hydrateFallbackElement","loaderData","errors2","needsToRunLoader","loader","shouldRenderHydrateFallback","errorElement","defaultErrorElement","matches2","getChildren","RenderedRoute","routeContext","RenderErrorBoundary","revalidation","_renderMatches","encodeLocation","navigationType","DefaultErrorComponent","useDataRouterState","routeId","useRouteError","lightgrey","preStyles","codeStyles","devInfo","getDerivedStateFromProps","staticContext","_deepestRenderedBoundaryId","useRouteContext","thisRoute","alreadyWarned","defaultMethod","defaultEncType","isHtmlElement","_formDataSupportsSubmitter","supportedFormEncTypes","getFormEncType","encType","invariant2","isHtmlLinkDescriptor","rel","imageSrcSet","imageSizes","getNewMatchesForLinks","nextMatches","currentMatches","manifest","isNew","matchPathChanged","manifestRoute","hasLoader","shouldRevalidate","routeChoice","currentUrl","currentParams","nextUrl","nextParams","defaultShouldRevalidate","getModuleLinkHrefs","includeHydrateFallback","hrefs","clientActionModule","clientLoaderModule","hydrateFallbackModule","imports","useDataRouterContext2","useDataRouterStateContext","FrameworkContext","useFrameworkContext","composeEventHandlers","theirHandler","ourHandler","defaultPrevented","PrefetchPageLinks","dataLinkProps","PrefetchPageLinksImpl","useKeyedPrefetchLinks","routeModules","keyedPrefetchLinks","setKeyedPrefetchLinks","interrupted","preloads","preloadsSet","deduped","dedupeLinkDescriptors","mod","routeModulesCache","routeModule","import","__reactRouterContext","isSpaMode","reload","loadRouteModule","links","getKeyedPrefetchLinks","linkProps","newMatchesForData","newMatchesForAssets","dataHrefs","routesParams","foundOptOutRoute","m2","hasClientLoader","reqUrl","singleFetchUrl","searchParams","moduleHrefs","href2","mergeRefs","refs","__reactRouterVersion","ABSOLUTE_URL_REGEX2","discover","prefetch","reloadDocument","replace2","preventScrollReset","viewTransition","absoluteHref","isAbsolute","isExternal","targetUrl","joinedPathname","createHref","useHref","shouldPrefetch","prefetchRef","prefetchHandlers","theirElementProps","frameworkContext","maybePrefetch","setMaybePrefetch","setShouldPrefetch","onTouchStart","setIntent","cancelIntent","usePrefetchBehavior","internalOnClick","replaceProp","metaKey","altKey","ctrlKey","shiftKey","isModifiedEvent","shouldProcessLinkClick","useLinkClickHandler","NavLink","ariaCurrentProp","classNameProp","styleProp","routerState","vtContext","useDataRouterContext3","currentPath","currentLocation","nextPath","nextLocation","useViewTransitionState","nextLocationPathname","navigation","endSlashPosition","isPending","renderProps","ariaCurrent","Form","fetcherKey","onSubmit","currentRouteId","isButtonElement","form","isFormDataSubmitterSupported","getFormSubmissionInfo","getUniqueFetcherId","formMethod","formEncType","flushSync","useSubmit","formAction","indexValues","getAll","qs","useFormAction","submitter","nativeEvent","submitMethod","currentTarget","getDataRouterConsoleError2","fetcherId","FilterGroups","getIsDisabled","FilterGroupContainer","FilterSection","filteredDefinitions","hierarchy","ErrorType","useSavedFilters","filterContext","logError","useLogging","savedFilters","setSavedFilters","setLoading","setError","loadFilters","getFilters","FAILED_TO_LOAD","savedFiltersContext","SavedFiltersProvider","newFilterId","setNewFilterId","useSavedFiltersContext","saveFilterEnabled","FAILED_TO_LOAD_ALERT","REGION_KEYWORD","mapToFilterCriteria","definitionsMap","lastIdx","sortIdx","cachedName","definitionLabels","getRegionFilterOptionsValuesByKey","regionFilter","deleteModalOpen","setDeleteModalOpen","shareModalOpen","setShareModalOpen","selectedFilter","setSelectedFilter","setDefinitionsMap","showNoNewFilterToast","setShowNoNewFilterToast","contextSubscriber","definitionsEntries","isFilterAvailable","regionOptionsValues","savedFilterValues","savedFilterValue","unavailableFilters","availableFilteres","EmptyFilters","FilterCardWrapper","UnavailableSection","DeleteFilterModal","itemToDelete","deleteFilter","ShareFilterModal","filterCriteria","canShare","canShareFilter","criteria","FilterCard","Actions","ApplyAction","clearAllDefnitions","DeleteAction","ShareAction","FilterTray","FiltersPanel","FiltersPanelComponent","setFilterValues","selectedFeatureFilters","showError","fixTraySizeTimeout","prevFilters","handleIsDisabled","isMain","definitionName","hasSections","handleClearAll","DUPLICATE_NAME_API_ERROR","UNIQUE_NAME_ERROR_MESSAGE","SAVE_ERROR_MESSGE","SaveFilterAction","sectionsWithDefinitions","showModal","setShowModal","setErrorMessage","filterCriteriaGroup","SaveFilterButton","SaveFilterModal","_section","filterData","createFilter","filterNameErrorMessage","onFilterNameChange","Chips","getValuesDefinitions","getChipValue","FilterChips","chipsState","setChipsState","Chip","onRemove","handleChipClick","ClearAll","useContextTracking","trackUpdates","optionChosenValues","hasPageView","PageViewed","ContextDisplay","requiresEdit","setRequiresEdit","changeSubscriber","requiresEditSubscriber","isSelectable","primary","isSecondary","secondary","Entry","EditContextModal","Selector","CoreModal","Card","useTrackPageViewed","lastTrackedUrl","setLastTrackedUrl","formatVersionString","appVersion","PageFooter","ClientFooter","orderedProductList","cachedQueryString","cachedAccessValue","getAccessValueForTracking","getValueV2","getAuthQueryStringV2","cellParams","authResult","impersonationHeader","isInternal","getImpersonationHeader","fullApiUrl","json","fetchAuth","approved","resources","hasMarket","hasDistribution","trackingCode","deliveryCount","dates","countPerYear","getDeliveryCount","Monthly","getCellTrackingValue","getAccessValueForTrackingTags","getAuthQueryString","mapCoreMetaParams","splitCells","country","cellsFormatted","countries","numberOfCells","cellAggregation","locationIdAggregation","itemGroupAggregation","mapTabName","tabName","scorecard","addTimeAggregationValues","timeFrameValue","aggregation","sequenceInfo","aggregationMethod","aggregationValue","aggregationMethodValue","splitTimeframeValue","timeAggregation","timeAggregationMethod","mapInternalEventParams","focusPeriodValues","getTrackingTagsFn","isOverrideMeta","calcTrackingParams","subsectionMeta","trackingPageName","pageNameMeta","trackingCoreMeta","cellsWithDashes","trackAnalyticsEvent","platformTrackFn","queue","isRunning","getNext","removeFromQueue","enabledProductionEvents","useTracking","mappingFn","track","useAnalytics","isTrackingEnabled","fireEvent","platformTrackingFn","UpsellWrapper","setCells","setOptions","openMarkets","openMarketsOptions","countryName","productName","currentCells","currentOpenMarketsOptions","UpsellFeedback","TargetedUpsell","CorePage","defaultSubsection","ClientHeader","PageComponent","showPageLevelNoDataWarning","ErrorPageComponent","ClientContent","getPropositionFromContextURL","contextURL","queryParams","propositionParam","propositionValue","getInsightInfo","insight","tags","trackingTags","getSettingsTags","getFilterTags","trimLeadingSlash","getComponentsFromDsl","dataEndPoint","trimmedDataEndPoint","InsightElementWithData","getComponentHeadingFromDsl","contentsFromDsl","getContentsFromDsl","InsightContentElement","dataState","InsightElement","insightData","onDataChanged","_eventName","componentTypes","ConfigItemType","DateRange","NumericRange","MARKET_CELL_KEY","REGIONS_MULTI_CELL_ERROR","extractFilterDefs","getFilterDateValue","getContextDateValue","getLastDayOfMonth","getUpdatedValues","configItems","newDataChanges","newContextChanges","isCellorTimeFrame","MultiCell","getDateRange","minContext","maxContext","getNumericRange","getDataContextValue","isContextItem","getFilterValue","rangeValue","clearEmptyParams","paramsData","updateConfigItems","configItem","getConfigItemCallbacks","getConfigItems","contextUrl","marketList","_reject","applyConfigValue","marketMultiCellsWithOtherChanges","marketMultiCellsWithNewValue","isRegionsGrouping","filterList","getInsightData","marketCell","clearConfigValues","getViewStateInfo","viewState","getValidDataProperty","traceIdString","traceparent","statusCodeString","pathString","recordAxiosError","lifecycles","componentDidMount","componentWillUnmount","bootstrap","mount","singleSpaReact"],"sourceRoot":""}