{"version":3,"file":"analytics-experience.shell.entry-BIXQ0lnJ.mjs","names":["handlerData","normalize","_getBufferMap","DEBUG_BUILD","DEBUG_BUILD","isPlainObject","merge","DEBUG_BUILD","INTEGRATION_NAME","INTEGRATION_NAME","_shouldDropEvent","DEBUG_BUILD","INTEGRATION_NAME","INTEGRATION_NAME","WINDOW","WINDOW","WINDOW","_INTERNAL_enhanceErrorWithSentryInfo","isErrorEvent","errorEvent","isPlainObject","objectException","WINDOW","DEBUG_BUILD","isString","globalObject","isString","INTEGRATION_NAME","WINDOW","INTEGRATION_NAME","WINDOW","globalObject","WINDOW","INTEGRATION_NAME","WINDOW","INTEGRATION_NAME","isString","WINDOW","USER_AGENT_ORIGINAL","WINDOW","c","p","l","m","y","d","f","singleSpaReact","canUseDom","canUseDom","useLayoutEffect","useState","React","uuid","useMemo","version","useMemo","isMemo","ForwardRef","contains","APPEND_ORDER","APPEND_PRIORITY","MARK_KEY","containerCache","getMark","getContainer","getOrder","findStyles","injectCSS","canUseDom","findExistNode","syncRealContainer","contains","updateCSS","getRoot","getShadowRoot","warned","warning","warningOnce","isNonNullable","match","toArray","isObject","merge","render","createRoot","unmount","canUseDom","uuid","useId","canUseDom","_extends","ResizeObserver","toArray","SingleObserver","Context","canUseDom","getTransitionName","useRef","canUseDom","useLayoutEffect","useEffect","raf","useState","useNextFrame","useRef","useDomMotionEvents","useStepQueue","Context","useRef","getTransitionName","_extends","OriginCSSMotion","CSSMotion","_extends","CSSMotion","_extends","ResizeObserver","CSSMotion","toArray","isVisible","useWatch","getShadowRoot","_extends","CSSMotion","UniqueProvider","Portal","Portal","useId","getShadowRoot","toArray","isSameYear","isSameMonth","isSameDate","useLocale","toArray","isNonNullable","_extends","isSameMonth","isSameDate","useScrollTo","isVisible","raf","useScrollTo","_extends","isNonNullable","_extends","_extends","_extends","_extends","_extends","_extends","isSameYear","_extends","useLocale","toArray","_extends","ResizeObserver","Item","_extends","Item","useState","useMemo","useCallback","Item","_extends","ResizeObserver","Overflow","arrayLikeToArray","arrayLikeToArray","arrayWithoutHoles","iterableToArray","unsupportedIterableToArray","nonIterableSpread","noop","rcWarning","locale","locale","locale","CalendarLocale","TimePickerLocale","enUS","typeTemplate","defaultLocale","defaultLocaleData","toArray","warning","getValue","ENUM","enumerable","pattern","required","pattern","getUrlRegex","type","whitespace","enumRule","regexp","enumValidator","warning","defaultMessages","validators","messages","RawAsyncValidator","merge","toArray","getValue","setValue","macroTask","_extends","FieldContext","toArray","toChildrenArray","getValue","List","FieldContext","Field","SPLIT","merge","setValue","getValue","_extends","FieldContext","stringify","useState","useMemo","useRef","useContext","FieldContext","getValue","FieldForm","Field","List","CloseCircleFilled","generate","useContext","generate","_extends","Icon","Context","ReactIcon","_extends","AntdIcon","CloseCircleFilledSvg","RefIcon","CloseOutlined","_extends","AntdIcon","CloseOutlinedSvg","RefIcon","useMemo","CacheEntity","CALC_UNIT","regexp","hash","canUseDom","unit","tmpCache","getComputedToken","useContext","hash","updateCSS","prepare","canUseDom","unitless","hash","updateCSS","useContext","updateCSS","version","presetColors","genFontSizes","getAlphaColor","getAlphaColor","defaultDerivative","defaultConfig","defaultSeedToken","version","defaultSeedToken","cloneElement","CSSMotion","cloneElement","RcUniqueProvider","useContext","arrayWithHoles","iterableToArrayLimit","unsupportedIterableToArray","nonIterableRest","setPrototypeOf","assertThisInitialized","isNativeReflectConstruct","getPrototypeOf","possibleConstructorReturn","_objectSpread","_objectSpread","mergeToken","unit","_objectSpread","useMemo","mergeToken","Keyframes","unit","useContext","useLocalToken","defaultConfig","useId","useMemo","useMemo","CssInJsStyleContext","PropWarning","merge","defaultLocale","ValidateMessagesContext","defaultSeedToken","toArray","toArray","_extends","useRef","raf","CSSMotion","raf","useContext","useRef","useStyle","isVisible","cloneElement","raf","unit","prepareComponentToken","mergeToken","useStyle","RcCheckbox","useId","useStyle","useMemo","_extends","getBuiltInPlacements","Trigger","useState","useRef","isTitleType","_extends","_extends","Overflow","MultipleContent","_extends","_extends","SelectInput","SelectTrigger","_extends","ResizeObserver","useRef","useRef","useOriginScroll","raf","useRef","useRef","raf","raf","_extends","useRef","useState","useOriginScroll","ResizeObserver","List","List","_extends","useMemo","List","toArray","_extends","useId","useCache","useFilterOptions","OptionList","Select","Empty","useMemo","useMemo","mergeToken","DefaultEmptyImg","SimpleEmptyImg","useStyle","useContext","Keyframes","Keyframes","unit","prepareComponentToken","genDropdownStyle","mergeToken","prepareComponentToken","CheckOutlined","_extends","AntdIcon","CheckOutlinedSvg","RefIcon","DownOutlined","_extends","AntdIcon","DownOutlinedSvg","RefIcon","LoadingOutlined","_extends","AntdIcon","LoadingOutlinedSvg","RefIcon","SearchOutlined","AntdIcon","SearchOutlinedSvg","CloseCircleFilled","LoadingOutlined","SearchOutlined","DownOutlined","CheckOutlined","CloseOutlined","useVariants","useStyle","RcSelect","Group","Button","useContext","useMemo","unit","unit","mergeToken","useStyle","enUS","merge","RCPickerPanel","y","f","d","host","createElement","useState","forwardRef","Component","_extends","forwardRef","PureComponent","PureComponent","Component","createRef","Component","createRef","ProgressBar","VolumeBar","isValidElement","cloneElement"],"sources":["../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/instrument/handlers.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/instrument/globalError.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/instrument/globalUnhandledRejection.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/utils/parseSampleRate.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/utils/should-ignore-span.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/tracing/spans/beforeSendSpan.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/utils/envelope.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/envelope.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/tracing/spans/hasSpanStreamingEnabled.js","../node_modules/.pnpm/@sentry+conventions@0.16.0/node_modules/@sentry/conventions/dist/attributes.mjs","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/tracing/spans/captureSpan.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/utils/timer.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/api.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/integration.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/utils/env.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/utils/node.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/utils/isBrowser.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/logs/envelope.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/logs/internal.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/metrics/envelope.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/metrics/internal.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/tracing/spans/spanJsonToStreamedSpan.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/tracing/spans/extractGenAiSpans.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/utils/promisebuffer.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/utils/ratelimit.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/transports/base.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/utils/clientreport.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/utils/eventUtils.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/utils/transactionEvent.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/utils/data-collection/filtering-snippets.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/utils/data-collection/defaultPiiToCollectionOptions.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/utils/data-collection/resolveDataCollectionOptions.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/client.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/sdk.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/utils/url.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/utils/ipAddress.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/utils/sdkMetadata.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/breadcrumbs.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/integrations/functiontostring.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/integrations/eventFilters.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/utils/aggregate-errors.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/utils/eventbuilder.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/instrument/console.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/utils/severity.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/integrations/dedupe.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/integrations/conversationId.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/utils/breadcrumb-log-level.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/utils/supports.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/instrument/fetch.js","../node_modules/.pnpm/@sentry+core@10.74.0/node_modules/@sentry/core/build/esm/utils/browser.js","../node_modules/.pnpm/@sentry+browser@10.74.0/node_modules/@sentry/browser/build/npm/esm/prod/helpers.js","../node_modules/.pnpm/@sentry+browser@10.74.0/node_modules/@sentry/browser/build/npm/esm/prod/eventbuilder.js","../node_modules/.pnpm/@sentry+browser@10.74.0/node_modules/@sentry/browser/build/npm/esm/prod/client.js","../node_modules/.pnpm/@sentry+browser-utils@10.74.0/node_modules/@sentry/browser-utils/build/esm/debug-build.js","../node_modules/.pnpm/@sentry+browser-utils@10.74.0/node_modules/@sentry/browser-utils/build/esm/types.js","../node_modules/.pnpm/@sentry+browser-utils@10.74.0/node_modules/@sentry/browser-utils/build/esm/metrics/web-vitals/lib/globalListeners.js","../node_modules/.pnpm/@sentry+browser-utils@10.74.0/node_modules/@sentry/browser-utils/build/esm/metrics/web-vitals/lib/runOnce.js","../node_modules/.pnpm/@sentry+browser-utils@10.74.0/node_modules/@sentry/browser-utils/build/esm/metrics/web-vitals/lib/whenIdleOrHidden.js","../node_modules/.pnpm/@sentry+browser-utils@10.74.0/node_modules/@sentry/browser-utils/build/esm/htmlTreeAsString.js","../node_modules/.pnpm/@sentry+browser-utils@10.74.0/node_modules/@sentry/browser-utils/build/esm/instrument/dom.js","../node_modules/.pnpm/@sentry+browser-utils@10.74.0/node_modules/@sentry/browser-utils/build/esm/instrument/history.js","../node_modules/.pnpm/@sentry+browser-utils@10.74.0/node_modules/@sentry/browser-utils/build/esm/getNativeImplementation.js","../node_modules/.pnpm/@sentry+browser-utils@10.74.0/node_modules/@sentry/browser-utils/build/esm/instrument/xhr.js","../node_modules/.pnpm/@sentry+browser-utils@10.74.0/node_modules/@sentry/browser-utils/build/esm/is.js","../node_modules/.pnpm/@sentry+browser@10.74.0/node_modules/@sentry/browser/build/npm/esm/prod/transports/fetch.js","../node_modules/.pnpm/@sentry+browser@10.74.0/node_modules/@sentry/browser/build/npm/esm/prod/debug-build.js","../node_modules/.pnpm/@sentry+browser@10.74.0/node_modules/@sentry/browser/build/npm/esm/prod/stack-parsers.js","../node_modules/.pnpm/@sentry+browser@10.74.0/node_modules/@sentry/browser/build/npm/esm/prod/integrations/breadcrumbs.js","../node_modules/.pnpm/@sentry+browser@10.74.0/node_modules/@sentry/browser/build/npm/esm/prod/integrations/browserapierrors.js","../node_modules/.pnpm/@sentry+browser@10.74.0/node_modules/@sentry/browser/build/npm/esm/prod/integrations/browsersession.js","../node_modules/.pnpm/@sentry+browser@10.74.0/node_modules/@sentry/browser/build/npm/esm/prod/integrations/culturecontext.js","../node_modules/.pnpm/@sentry+browser@10.74.0/node_modules/@sentry/browser/build/npm/esm/prod/integrations/globalhandlers.js","../node_modules/.pnpm/@sentry+browser@10.74.0/node_modules/@sentry/browser/build/npm/esm/prod/integrations/httpcontext.js","../node_modules/.pnpm/@sentry+browser@10.74.0/node_modules/@sentry/browser/build/npm/esm/prod/integrations/linkederrors.js","../node_modules/.pnpm/@sentry+browser@10.74.0/node_modules/@sentry/browser/build/npm/esm/prod/normalizeStringifyValue.js","../node_modules/.pnpm/@sentry+browser@10.74.0/node_modules/@sentry/browser/build/npm/esm/prod/utils/detectBrowserExtension.js","../node_modules/.pnpm/@sentry+browser@10.74.0/node_modules/@sentry/browser/build/npm/esm/prod/sdk.js","../node_modules/.pnpm/single-spa-react@6.0.2_@types+react-dom@18.3.7_@types+react@18.3.31__@types+react@18.3.31_react@18.3.1/node_modules/single-spa-react/lib/esm/single-spa-react.js","../node_modules/.pnpm/@goto+shell-utils@5.289.0_@types+react-dom@18.3.7_@types+react@18.3.31__@types+react@18_038bbd44d84f30bef4a1d2890669bef4/node_modules/@goto/shell-utils/dist/bootstrap/react-helpers.js","../src/components/common/StoreThemeProvider/StoreThemeProvider.jsx","../src/providers/ErrorBannersProvider.tsx","../src/configs/index.ts","../src/constants/banner-types.ts","../src/utils/page.util.ts","../src/constants/http-status.js","../src/services/common/dashboard-filter-validation.service.ts","../src/services/common/handle-errors.service.ts","../src/hooks/useFilterValidation.tsx","../src/hooks/useDashboardFilterValidator.tsx","../src/hooks/useHasUrlParamsFiltersEnabled.tsx","../src/utils/strings.util.ts","../src/hooks/useUrlParamsHandler.tsx","../src/store/selectors/default-date.ts","../src/utils/default-date.util.ts","../src/utils/removeIllegalCharacters.util.ts","../src/hocs/withDashboard/withDashboard.tsx","../src/hocs/withPermissions/withPermissions.tsx","../src/components/common/ErrorBannerAlert/ErrorBannerAlert.module.scss","../src/components/common/ErrorBannerAlert/ErrorBannerAlert.tsx","../src/components/common/FeatureAnchor/FeatureAnchor.tsx","../src/components/cc-boards/ResolvedConversationTable/UseResolvedConversationLabels.tsx","../src/components/common/HierarchyIndicator/HierarchyIndicator.tsx","../src/utils/server-list-filters.util.tsx","../src/hocs/withFilterController/withFilterController.tsx","../src/hooks/useTipsAndTricks.ts","../src/store/selectors/events.js","../src/components/common/FadeWrapper/FadeWrapper.module.scss","../src/components/common/FadeWrapper/FadeWrapper.tsx","../src/components/common/TipsAndTricksBanner/TipsAndTricksBanner.module.scss","../src/components/common/TipsAndTricksBanner/TipsAndTricksBanner.tsx","../src/constants/modals.js","../src/hooks/dashboards/useUpdateDashboard.ts","../src/configs/agent-performance-export.config.ts","../src/configs/quality-management-export.config.ts","../src/configs/queue-caller-export.config.ts","../src/configs/satisfaction-survey-export.config.ts","../src/services/common/export-config.service.ts","../src/configs/export.config.ts","../src/constants/events.ts","../src/utils/qm-export-filters.util.ts","../src/services/common/export-data-source.service.ts","../src/components/common/Export/ExportButton/ExportButton.module.scss","../src/components/common/Export/ExportButton/ExportButton.tsx","../src/components/common/FilterContainer/FilterContainerActions/FilterContainerActions.module.scss","../src/hooks/permissions/useDashboardTypePermission.ts","../src/hooks/permissions/useDashboardSchedulerPermission.tsx","../src/services/common/scheduled-dashboards.service.ts","../src/components/common/SettingButton/SettingButton.module.scss","../src/components/common/SettingButton/SettingButton.jsx","../src/components/common/FilterContainer/FilterContainerActions/FilterContainerActions.jsx","../src/hooks/useFilterInputValidation.ts","../src/hooks/useTextWithOptions.ts","../src/hooks/useCustomFilterItems.ts","../src/components/common/MultiSelectList/MultiSelectList.module.scss","../src/components/common/UserCountBadge/UserCountBadge.module.scss","../src/components/common/UserCountBadge/UserCountBadge.tsx","../src/components/common/MultiSelectList/MultiSelectListItem.jsx","../src/components/common/CustomFilterItemsList/CustomFilterItemsList.module.scss","../src/components/common/CustomFilterItemsList/CustomFilterItemsList.tsx","../src/components/common/FilterListSkeleton/FilterListSkeleton.module.scss","../src/components/common/FilterListSkeleton/FilterListSkeleton.jsx","../src/hooks/useListBox.ts","../src/hooks/useHierarchicalSelect.tsx","../src/components/common/Batched/Batched.jsx","../src/utils/text.util.js","../src/components/common/MultiSelectList/MultiSelectList.jsx","../src/components/common/SearchMultiSelectList/SearchMultiSelectList.module.scss","../src/components/common/SearchMultiSelectList/SearchMultiSelectList.jsx","../src/components/common/ServerSideSearchMultiSelectList/ServerSideSearchMultiSelectList.module.scss","../src/components/common/ServerSideSearchMultiSelectList/ServerSideSearchMultiSelectList.tsx","../src/types/QmCategory.ts","../src/types/QmQuestion.ts","../src/hooks/useServerSidePagination.ts","../src/components/common/ListFilter/ListFilter.jsx","../src/components/common/FiltersList/FiltersList.module.scss","../src/constants/range-filter-unit.ts","../src/components/common/RangeFilter/RangeFiltersForm/RangeFiltersForm.module.scss","../src/components/common/RangeFilter/RangeFiltersForm/RangeFiltersForm.jsx","../src/components/common/RangeFilter/RangeFilter.jsx","../src/components/common/TextWithOptionsFilter/TextWithOptionsFilter.module.scss","../src/constants/input-type.js","../src/components/common/PhoneNumberTextField/PhoneNumberTextField.jsx","../src/components/common/UserNameTextField/UserNameTextField.jsx","../src/hocs/withSuggestion/withSuggestion.tsx","../src/components/common/TextWithOptionsFilter/TextWithOptionsFilter.jsx","../src/components/common/SwitchFilter/SwitchFilter.module.scss","../src/components/common/SwitchFilter/SwitchFilter.jsx","../src/components/common/FiltersList/FiltersList.jsx","../src/components/common/BaseFilter/BaseFilter.module.scss","../src/components/common/BaseFilter/BaseFilter.tsx","../src/components/common/OperatorFilter/OperatorFilter.module.scss","../src/components/common/OperatorFilter/OperatorFilter.jsx","../src/components/common/CategoryFilter/CategoryFilter.module.scss","../src/components/common/CategoryFilter/CategoryFilter.jsx","../src/components/common/UnallowedFilterWarning/UnallowedFilterWarning.module.scss","../src/components/common/UnallowedFilterWarning/UnallowedFilterWarning.tsx","../src/components/common/WrapperFiltersList/WrapperFiltersList.jsx","../src/components/common/FilterContainer/FilterContainerBottomFilters/FilterContainerBottomFilters.module.scss","../src/utils/filter-display.util.ts","../src/components/common/FilterContainer/FilterContainerBottomFilters/FilterContainerBottomFilters.jsx","../node_modules/.pnpm/@rc-component+util@1.13.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/util/es/hooks/useEvent.js","../node_modules/.pnpm/@rc-component+util@1.13.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/util/es/Dom/canUseDom.js","../node_modules/.pnpm/@rc-component+util@1.13.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/util/es/hooks/useLayoutEffect.js","../node_modules/.pnpm/@rc-component+util@1.13.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/util/es/hooks/useState.js","../node_modules/.pnpm/@rc-component+util@1.13.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/util/es/hooks/useControlledState.js","../node_modules/.pnpm/@rc-component+util@1.13.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/util/es/raf.js","../node_modules/.pnpm/@rc-component+util@1.13.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/util/es/hooks/useId.js","../node_modules/.pnpm/@rc-component+util@1.13.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/util/es/hooks/useMemo.js","../node_modules/.pnpm/@rc-component+util@1.13.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/util/es/hooks/useSyncState.js","../node_modules/.pnpm/react-is@19.2.8/node_modules/react-is/cjs/react-is.production.js","../node_modules/.pnpm/react-is@19.2.8/node_modules/react-is/index.js","../node_modules/.pnpm/@rc-component+util@1.13.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/util/es/React/isFragment.js","../node_modules/.pnpm/@rc-component+util@1.13.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/util/es/ref.js","../node_modules/.pnpm/@rc-component+util@1.13.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/util/es/Dom/contains.js","../node_modules/.pnpm/@rc-component+util@1.13.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/util/es/Dom/dynamicCSS.js","../node_modules/.pnpm/@rc-component+util@1.13.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/util/es/Dom/findDOMNode.js","../node_modules/.pnpm/@rc-component+util@1.13.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/util/es/Dom/isVisible.js","../node_modules/.pnpm/@rc-component+util@1.13.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/util/es/Dom/shadow.js","../node_modules/.pnpm/@rc-component+util@1.13.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/util/es/KeyCode.js","../node_modules/.pnpm/@rc-component+util@1.13.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/util/es/getScrollBarSize.js","../node_modules/.pnpm/@rc-component+util@1.13.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/util/es/warning.js","../node_modules/.pnpm/@rc-component+util@1.13.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/util/es/isEqual.js","../node_modules/.pnpm/@rc-component+util@1.13.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/util/es/is.js","../node_modules/.pnpm/is-mobile@5.0.0/node_modules/is-mobile/index.js","../node_modules/.pnpm/@rc-component+util@1.13.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/util/es/isMobile.js","../node_modules/.pnpm/@rc-component+util@1.13.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/util/es/omit.js","../node_modules/.pnpm/@rc-component+util@1.13.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/util/es/pickAttrs.js","../node_modules/.pnpm/@rc-component+util@1.13.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/util/es/Children/toArray.js","../node_modules/.pnpm/@rc-component+util@1.13.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/util/es/utils/get.js","../node_modules/.pnpm/@rc-component+util@1.13.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/util/es/utils/set.js","../node_modules/.pnpm/@rc-component+util@1.13.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/util/es/React/render.js","../node_modules/.pnpm/@rc-component+util@1.13.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/util/es/Portal.js","../node_modules/.pnpm/@rc-component+portal@2.2.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/portal/es/Context.js","../node_modules/.pnpm/@rc-component+portal@2.2.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/portal/es/mock.js","../node_modules/.pnpm/@rc-component+portal@2.2.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/portal/es/useDom.js","../node_modules/.pnpm/@rc-component+portal@2.2.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/portal/es/util.js","../node_modules/.pnpm/@rc-component+portal@2.2.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/portal/es/useScrollLocker.js","../node_modules/.pnpm/@rc-component+portal@2.2.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/portal/es/useEscKeyDown.js","../node_modules/.pnpm/@rc-component+portal@2.2.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/portal/es/Portal.js","../node_modules/.pnpm/@rc-component+portal@2.2.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/portal/es/index.js","../node_modules/.pnpm/@rc-component+resize-observer@1.1.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/resize-observer/es/Collection.js","../node_modules/.pnpm/@rc-component+resize-observer@1.1.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/resize-observer/es/utils/observerUtil.js","../node_modules/.pnpm/@rc-component+resize-observer@1.1.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/resize-observer/es/useResizeObserver.js","../node_modules/.pnpm/@rc-component+resize-observer@1.1.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/resize-observer/es/SingleObserver/index.js","../node_modules/.pnpm/@rc-component+resize-observer@1.1.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/resize-observer/es/index.js","../node_modules/.pnpm/@rc-component+motion@1.3.3_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/motion/es/context.js","../node_modules/.pnpm/@rc-component+motion@1.3.3_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/motion/es/interface.js","../node_modules/.pnpm/@rc-component+motion@1.3.3_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/motion/es/util/motion.js","../node_modules/.pnpm/@rc-component+motion@1.3.3_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/motion/es/hooks/useDomMotionEvents.js","../node_modules/.pnpm/@rc-component+motion@1.3.3_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/motion/es/hooks/useIsomorphicLayoutEffect.js","../node_modules/.pnpm/@rc-component+motion@1.3.3_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/motion/es/hooks/useNextFrame.js","../node_modules/.pnpm/@rc-component+motion@1.3.3_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/motion/es/hooks/useStepQueue.js","../node_modules/.pnpm/@rc-component+motion@1.3.3_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/motion/es/hooks/useStatus.js","../node_modules/.pnpm/@rc-component+motion@1.3.3_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/motion/es/CSSMotion.js","../node_modules/.pnpm/@rc-component+motion@1.3.3_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/motion/es/util/diff.js","../node_modules/.pnpm/@rc-component+motion@1.3.3_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/motion/es/CSSMotionList.js","../node_modules/.pnpm/@rc-component+motion@1.3.3_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/motion/es/index.js","../node_modules/.pnpm/@rc-component+trigger@3.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/trigger/es/Popup/Arrow.js","../node_modules/.pnpm/@rc-component+trigger@3.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/trigger/es/Popup/Mask.js","../node_modules/.pnpm/@rc-component+trigger@3.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/trigger/es/Popup/PopupContent.js","../node_modules/.pnpm/@rc-component+trigger@3.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/trigger/es/hooks/useOffsetStyle.js","../node_modules/.pnpm/@rc-component+trigger@3.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/trigger/es/Popup/index.js","../node_modules/.pnpm/@rc-component+trigger@3.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/trigger/es/context.js","../node_modules/.pnpm/@rc-component+trigger@3.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/trigger/es/hooks/useAction.js","../node_modules/.pnpm/@rc-component+trigger@3.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/trigger/es/util.js","../node_modules/.pnpm/@rc-component+trigger@3.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/trigger/es/hooks/useAlign.js","../node_modules/.pnpm/@rc-component+trigger@3.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/trigger/es/hooks/useDelay.js","../node_modules/.pnpm/@rc-component+trigger@3.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/trigger/es/hooks/useWatch.js","../node_modules/.pnpm/@rc-component+trigger@3.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/trigger/es/hooks/useWinClick.js","../node_modules/.pnpm/@rc-component+trigger@3.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/trigger/es/UniqueProvider/useTargetState.js","../node_modules/.pnpm/@rc-component+trigger@3.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/trigger/es/UniqueProvider/UniqueContainer.js","../node_modules/.pnpm/@rc-component+trigger@3.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/trigger/es/UniqueProvider/index.js","../node_modules/.pnpm/@rc-component+trigger@3.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/trigger/es/index.js","../node_modules/.pnpm/@rc-component+picker@1.12.2_date-fns@4.4.0_dayjs@1.11.21_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/picker/es/PickerInput/context.js","../node_modules/.pnpm/@rc-component+picker@1.12.2_date-fns@4.4.0_dayjs@1.11.21_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/picker/es/utils/miscUtil.js","../node_modules/.pnpm/@rc-component+picker@1.12.2_date-fns@4.4.0_dayjs@1.11.21_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/picker/es/utils/dateUtil.js","../node_modules/.pnpm/@rc-component+picker@1.12.2_date-fns@4.4.0_dayjs@1.11.21_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/picker/es/PickerInput/hooks/useCellRender.js","../node_modules/.pnpm/@rc-component+picker@1.12.2_date-fns@4.4.0_dayjs@1.11.21_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/picker/es/hooks/useLocale.js","../node_modules/.pnpm/@rc-component+picker@1.12.2_date-fns@4.4.0_dayjs@1.11.21_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/picker/es/hooks/useTimeConfig.js","../node_modules/.pnpm/@rc-component+picker@1.12.2_date-fns@4.4.0_dayjs@1.11.21_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/picker/es/PickerPanel/TimePanel/TimePanelBody/util.js","../node_modules/.pnpm/@rc-component+picker@1.12.2_date-fns@4.4.0_dayjs@1.11.21_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/picker/es/hooks/useTimeInfo.js","../node_modules/.pnpm/@rc-component+picker@1.12.2_date-fns@4.4.0_dayjs@1.11.21_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/picker/es/hooks/useToggleDates.js","../node_modules/.pnpm/@rc-component+picker@1.12.2_date-fns@4.4.0_dayjs@1.11.21_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/picker/es/PickerPanel/context.js","../node_modules/.pnpm/@rc-component+picker@1.12.2_date-fns@4.4.0_dayjs@1.11.21_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/picker/es/PickerPanel/PanelBody.js","../node_modules/.pnpm/@rc-component+picker@1.12.2_date-fns@4.4.0_dayjs@1.11.21_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/picker/es/PickerPanel/PanelHeader.js","../node_modules/.pnpm/@rc-component+picker@1.12.2_date-fns@4.4.0_dayjs@1.11.21_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/picker/es/PickerPanel/DatePanel/index.js","../node_modules/.pnpm/@rc-component+picker@1.12.2_date-fns@4.4.0_dayjs@1.11.21_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/picker/es/PickerPanel/TimePanel/TimePanelBody/useScrollTo.js","../node_modules/.pnpm/@rc-component+picker@1.12.2_date-fns@4.4.0_dayjs@1.11.21_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/picker/es/PickerPanel/TimePanel/TimePanelBody/TimeColumn.js","../node_modules/.pnpm/@rc-component+picker@1.12.2_date-fns@4.4.0_dayjs@1.11.21_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/picker/es/PickerPanel/TimePanel/TimePanelBody/index.js","../node_modules/.pnpm/@rc-component+picker@1.12.2_date-fns@4.4.0_dayjs@1.11.21_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/picker/es/PickerPanel/TimePanel/index.js","../node_modules/.pnpm/@rc-component+picker@1.12.2_date-fns@4.4.0_dayjs@1.11.21_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/picker/es/PickerPanel/DateTimePanel/index.js","../node_modules/.pnpm/@rc-component+picker@1.12.2_date-fns@4.4.0_dayjs@1.11.21_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/picker/es/PickerPanel/DecadePanel/index.js","../node_modules/.pnpm/@rc-component+picker@1.12.2_date-fns@4.4.0_dayjs@1.11.21_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/picker/es/PickerPanel/MonthPanel/index.js","../node_modules/.pnpm/@rc-component+picker@1.12.2_date-fns@4.4.0_dayjs@1.11.21_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/picker/es/PickerPanel/QuarterPanel/index.js","../node_modules/.pnpm/@rc-component+picker@1.12.2_date-fns@4.4.0_dayjs@1.11.21_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/picker/es/PickerPanel/WeekPanel/index.js","../node_modules/.pnpm/@rc-component+picker@1.12.2_date-fns@4.4.0_dayjs@1.11.21_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/picker/es/PickerPanel/YearPanel/index.js","../node_modules/.pnpm/@rc-component+picker@1.12.2_date-fns@4.4.0_dayjs@1.11.21_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/picker/es/PickerPanel/index.js","../node_modules/.pnpm/@rc-component+overflow@1.0.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/overflow/es/Item.js","../node_modules/.pnpm/@rc-component+overflow@1.0.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/overflow/es/hooks/channelUpdate.js","../node_modules/.pnpm/@rc-component+overflow@1.0.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/overflow/es/hooks/useEffectState.js","../node_modules/.pnpm/@rc-component+overflow@1.0.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/overflow/es/context.js","../node_modules/.pnpm/@rc-component+overflow@1.0.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/overflow/es/RawItem.js","../node_modules/.pnpm/@rc-component+overflow@1.0.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/overflow/es/Overflow.js","../node_modules/.pnpm/@rc-component+overflow@1.0.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/overflow/es/index.js","../node_modules/.pnpm/@babel+runtime@7.29.7/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","../node_modules/.pnpm/@babel+runtime@7.29.7/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","../node_modules/.pnpm/@babel+runtime@7.29.7/node_modules/@babel/runtime/helpers/esm/iterableToArray.js","../node_modules/.pnpm/@babel+runtime@7.29.7/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","../node_modules/.pnpm/@babel+runtime@7.29.7/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","../node_modules/.pnpm/@babel+runtime@7.29.7/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/_util/is.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/_util/hooks/useMergeSemantic/utils.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/_util/hooks/useMergeSemantic/index.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/_util/warning.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/config-provider/context.js","../node_modules/.pnpm/@rc-component+pagination@1.4.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/pagination/es/locale/en_US.js","../node_modules/.pnpm/@rc-component+picker@1.12.2_date-fns@4.4.0_dayjs@1.11.21_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/picker/es/locale/common.js","../node_modules/.pnpm/@rc-component+picker@1.12.2_date-fns@4.4.0_dayjs@1.11.21_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/picker/es/locale/en_US.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/time-picker/locale/en_US.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/date-picker/locale/en_US.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/calendar/locale/en_US.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/locale/en_US.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/modal/locale.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/locale/context.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/locale/useLocale.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/locale/index.js","../node_modules/.pnpm/@rc-component+form@1.8.6_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/form/es/FieldContext.js","../node_modules/.pnpm/@rc-component+form@1.8.6_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/form/es/ListContext.js","../node_modules/.pnpm/@rc-component+form@1.8.6_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/form/es/utils/typeUtil.js","../node_modules/.pnpm/@rc-component+async-validator@6.0.0/node_modules/@rc-component/async-validator/es/messages.js","../node_modules/.pnpm/@rc-component+async-validator@6.0.0/node_modules/@rc-component/async-validator/es/util.js","../node_modules/.pnpm/@rc-component+async-validator@6.0.0/node_modules/@rc-component/async-validator/es/rule/enum.js","../node_modules/.pnpm/@rc-component+async-validator@6.0.0/node_modules/@rc-component/async-validator/es/rule/pattern.js","../node_modules/.pnpm/@rc-component+async-validator@6.0.0/node_modules/@rc-component/async-validator/es/rule/range.js","../node_modules/.pnpm/@rc-component+async-validator@6.0.0/node_modules/@rc-component/async-validator/es/rule/required.js","../node_modules/.pnpm/@rc-component+async-validator@6.0.0/node_modules/@rc-component/async-validator/es/rule/url.js","../node_modules/.pnpm/@rc-component+async-validator@6.0.0/node_modules/@rc-component/async-validator/es/rule/type.js","../node_modules/.pnpm/@rc-component+async-validator@6.0.0/node_modules/@rc-component/async-validator/es/rule/whitespace.js","../node_modules/.pnpm/@rc-component+async-validator@6.0.0/node_modules/@rc-component/async-validator/es/rule/index.js","../node_modules/.pnpm/@rc-component+async-validator@6.0.0/node_modules/@rc-component/async-validator/es/validator/any.js","../node_modules/.pnpm/@rc-component+async-validator@6.0.0/node_modules/@rc-component/async-validator/es/validator/array.js","../node_modules/.pnpm/@rc-component+async-validator@6.0.0/node_modules/@rc-component/async-validator/es/validator/boolean.js","../node_modules/.pnpm/@rc-component+async-validator@6.0.0/node_modules/@rc-component/async-validator/es/validator/date.js","../node_modules/.pnpm/@rc-component+async-validator@6.0.0/node_modules/@rc-component/async-validator/es/validator/enum.js","../node_modules/.pnpm/@rc-component+async-validator@6.0.0/node_modules/@rc-component/async-validator/es/validator/float.js","../node_modules/.pnpm/@rc-component+async-validator@6.0.0/node_modules/@rc-component/async-validator/es/validator/integer.js","../node_modules/.pnpm/@rc-component+async-validator@6.0.0/node_modules/@rc-component/async-validator/es/validator/method.js","../node_modules/.pnpm/@rc-component+async-validator@6.0.0/node_modules/@rc-component/async-validator/es/validator/number.js","../node_modules/.pnpm/@rc-component+async-validator@6.0.0/node_modules/@rc-component/async-validator/es/validator/object.js","../node_modules/.pnpm/@rc-component+async-validator@6.0.0/node_modules/@rc-component/async-validator/es/validator/pattern.js","../node_modules/.pnpm/@rc-component+async-validator@6.0.0/node_modules/@rc-component/async-validator/es/validator/regexp.js","../node_modules/.pnpm/@rc-component+async-validator@6.0.0/node_modules/@rc-component/async-validator/es/validator/required.js","../node_modules/.pnpm/@rc-component+async-validator@6.0.0/node_modules/@rc-component/async-validator/es/validator/string.js","../node_modules/.pnpm/@rc-component+async-validator@6.0.0/node_modules/@rc-component/async-validator/es/validator/type.js","../node_modules/.pnpm/@rc-component+async-validator@6.0.0/node_modules/@rc-component/async-validator/es/validator/index.js","../node_modules/.pnpm/@rc-component+async-validator@6.0.0/node_modules/@rc-component/async-validator/es/index.js","../node_modules/.pnpm/@rc-component+form@1.8.6_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/form/es/utils/messages.js","../node_modules/.pnpm/@rc-component+form@1.8.6_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/form/es/utils/validateUtil.js","../node_modules/.pnpm/@rc-component+form@1.8.6_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/form/es/utils/valueUtil.js","../node_modules/.pnpm/@rc-component+form@1.8.6_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/form/es/hooks/useNotifyWatch.js","../node_modules/.pnpm/@rc-component+form@1.8.6_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/form/es/utils/delayUtil.js","../node_modules/.pnpm/@rc-component+form@1.8.6_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/form/es/Field.js","../node_modules/.pnpm/@rc-component+form@1.8.6_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/form/es/List.js","../node_modules/.pnpm/@rc-component+form@1.8.6_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/form/es/utils/asyncUtil.js","../node_modules/.pnpm/@rc-component+form@1.8.6_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/form/es/utils/NameMap.js","../node_modules/.pnpm/@rc-component+form@1.8.6_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/form/es/hooks/useForm.js","../node_modules/.pnpm/@rc-component+form@1.8.6_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/form/es/FormContext.js","../node_modules/.pnpm/@rc-component+form@1.8.6_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/form/es/Form.js","../node_modules/.pnpm/@rc-component+form@1.8.6_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/form/es/hooks/useWatch.js","../node_modules/.pnpm/@rc-component+form@1.8.6_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/form/es/index.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/form/context.js","../node_modules/.pnpm/@ant-design+icons-svg@4.6.0/node_modules/@ant-design/icons-svg/es/asn/CloseCircleFilled.js","../node_modules/.pnpm/@ant-design+icons@6.3.4_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/icons/es/components/Context.js","../node_modules/.pnpm/@ant-design+icons@6.3.4_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/icons/es/cssUtils.js","../node_modules/.pnpm/@ant-design+icons@6.3.4_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/icons/es/renderUtils.js","../node_modules/.pnpm/@ant-design+icons@6.3.4_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/icons/es/components/IconBase.js","../node_modules/.pnpm/@ant-design+icons@6.3.4_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/icons/es/components/AntdIconLight.js","../node_modules/.pnpm/@ant-design+icons@6.3.4_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/icons/es/icons/CloseCircleFilled.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/_util/fallbackProp.js","../node_modules/.pnpm/@ant-design+icons-svg@4.6.0/node_modules/@ant-design/icons-svg/es/asn/CloseOutlined.js","../node_modules/.pnpm/@ant-design+icons@6.3.4_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/icons/es/icons/CloseOutlined.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/_util/hooks/useOrientation.js","../node_modules/.pnpm/@emotion+hash@0.8.0/node_modules/@emotion/hash/dist/hash.browser.esm.js","../node_modules/.pnpm/@ant-design+cssinjs@2.1.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/cssinjs/es/Cache.js","../node_modules/.pnpm/@ant-design+cssinjs@2.1.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/cssinjs/es/StyleContext.js","../node_modules/.pnpm/@ant-design+cssinjs@2.1.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/cssinjs/es/theme/calc/CSSCalculator.js","../node_modules/.pnpm/@ant-design+cssinjs@2.1.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/cssinjs/es/theme/ThemeCache.js","../node_modules/.pnpm/@ant-design+cssinjs@2.1.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/cssinjs/es/theme/Theme.js","../node_modules/.pnpm/@ant-design+cssinjs@2.1.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/cssinjs/es/theme/createTheme.js","../node_modules/.pnpm/@ant-design+cssinjs@2.1.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/cssinjs/es/util/index.js","../node_modules/.pnpm/@ant-design+cssinjs@2.1.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/cssinjs/es/util/css-variables.js","../node_modules/.pnpm/@ant-design+cssinjs@2.1.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/cssinjs/es/hooks/useHMR.js","../node_modules/.pnpm/@ant-design+cssinjs@2.1.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/cssinjs/es/hooks/useGlobalCache.js","../node_modules/.pnpm/@ant-design+cssinjs@2.1.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/cssinjs/es/hooks/useCacheToken.js","../node_modules/.pnpm/@emotion+unitless@0.7.5/node_modules/@emotion/unitless/dist/unitless.browser.esm.js","../node_modules/.pnpm/stylis@4.4.0/node_modules/stylis/src/Enum.js","../node_modules/.pnpm/stylis@4.4.0/node_modules/stylis/src/Utility.js","../node_modules/.pnpm/stylis@4.4.0/node_modules/stylis/src/Tokenizer.js","../node_modules/.pnpm/stylis@4.4.0/node_modules/stylis/src/Parser.js","../node_modules/.pnpm/stylis@4.4.0/node_modules/stylis/src/Prefixer.js","../node_modules/.pnpm/stylis@4.4.0/node_modules/stylis/src/Serializer.js","../node_modules/.pnpm/stylis@4.4.0/node_modules/stylis/src/Middleware.js","../node_modules/.pnpm/@ant-design+cssinjs@2.1.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/cssinjs/es/util/cacheMapUtil.js","../node_modules/.pnpm/@ant-design+cssinjs@2.1.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/cssinjs/es/hooks/useStyleRegister.js","../node_modules/.pnpm/@ant-design+cssinjs@2.1.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/cssinjs/es/hooks/useCSSVarRegister.js","../node_modules/.pnpm/@ant-design+cssinjs@2.1.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/cssinjs/es/Keyframes.js","../node_modules/.pnpm/@ant-design+cssinjs@2.1.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/cssinjs/es/transformers/legacyLogicalProperties.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/version/version.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/version/index.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/theme/themes/seed.js","../node_modules/.pnpm/@ant-design+fast-color@3.0.1/node_modules/@ant-design/fast-color/es/presetColors.js","../node_modules/.pnpm/@ant-design+fast-color@3.0.1/node_modules/@ant-design/fast-color/es/FastColor.js","../node_modules/.pnpm/@ant-design+colors@8.0.1/node_modules/@ant-design/colors/es/generate.js","../node_modules/.pnpm/@ant-design+colors@8.0.1/node_modules/@ant-design/colors/es/presets.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/theme/interface/presetColors.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/theme/themes/shared/genColorMapToken.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/theme/themes/shared/genRadius.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/theme/themes/shared/genCommonMapToken.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/theme/themes/shared/genControlHeight.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/theme/themes/shared/genFontSizes.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/theme/themes/shared/genFontMapToken.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/theme/themes/shared/genSizeMapToken.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/theme/themes/default/colorAlgorithm.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/theme/themes/default/colors.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/theme/themes/default/index.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/theme/themes/default/theme.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/theme/context.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/theme/util/getAlphaColor.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/theme/util/alias.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/theme/useToken.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/_util/zindexContext.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/_util/hooks/useZIndex.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/form/validateMessagesContext.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/_util/reactNode.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/tooltip/UniqueProvider/MotionContent.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/tooltip/UniqueProvider/index.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/config-provider/DisabledContext.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/config-provider/SizeContext.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/config-provider/hooks/useConfig.js","../node_modules/.pnpm/@babel+runtime@7.29.7/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","../node_modules/.pnpm/@babel+runtime@7.29.7/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","../node_modules/.pnpm/@babel+runtime@7.29.7/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","../node_modules/.pnpm/@babel+runtime@7.29.7/node_modules/@babel/runtime/helpers/esm/slicedToArray.js","../node_modules/.pnpm/@babel+runtime@7.29.7/node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../node_modules/.pnpm/@babel+runtime@7.29.7/node_modules/@babel/runtime/helpers/esm/createClass.js","../node_modules/.pnpm/@babel+runtime@7.29.7/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/.pnpm/@babel+runtime@7.29.7/node_modules/@babel/runtime/helpers/esm/inherits.js","../node_modules/.pnpm/@babel+runtime@7.29.7/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../node_modules/.pnpm/@babel+runtime@7.29.7/node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","../node_modules/.pnpm/@babel+runtime@7.29.7/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../node_modules/.pnpm/@babel+runtime@7.29.7/node_modules/@babel/runtime/helpers/esm/createSuper.js","../node_modules/.pnpm/@ant-design+cssinjs-utils@2.1.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/cssinjs-utils/es/util/calc/calculator.js","../node_modules/.pnpm/@ant-design+cssinjs-utils@2.1.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/cssinjs-utils/es/util/calc/CSSCalculator.js","../node_modules/.pnpm/@ant-design+cssinjs-utils@2.1.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/cssinjs-utils/es/util/calc/NumCalculator.js","../node_modules/.pnpm/@ant-design+cssinjs-utils@2.1.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/cssinjs-utils/es/util/calc/index.js","../node_modules/.pnpm/@ant-design+cssinjs-utils@2.1.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/cssinjs-utils/es/util/getCompVarPrefix.js","../node_modules/.pnpm/@ant-design+cssinjs-utils@2.1.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/cssinjs-utils/es/util/getComponentToken.js","../node_modules/.pnpm/@ant-design+cssinjs-utils@2.1.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/cssinjs-utils/es/util/statistic.js","../node_modules/.pnpm/@ant-design+cssinjs-utils@2.1.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/cssinjs-utils/es/util/getDefaultComponentToken.js","../node_modules/.pnpm/@ant-design+cssinjs-utils@2.1.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/cssinjs-utils/es/util/maxmin.js","../node_modules/.pnpm/@ant-design+cssinjs-utils@2.1.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/cssinjs-utils/es/_util/hooks/useUniqueMemo.js","../node_modules/.pnpm/@ant-design+cssinjs-utils@2.1.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/cssinjs-utils/es/hooks/useCSP.js","../node_modules/.pnpm/@ant-design+cssinjs-utils@2.1.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/cssinjs-utils/es/util/genStyleUtils.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/style/index.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/theme/util/genStyleUtils.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/theme/util/useResetIconStyle.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/config-provider/hooks/useTheme.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/config-provider/MotionWrapper.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/config-provider/PropWarning.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/config-provider/index.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/config-provider/hooks/useCSSVarCls.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/config-provider/hooks/useSize.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/form/util.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/form/hooks/useForm.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/radio/context.js","../node_modules/.pnpm/@rc-component+checkbox@2.0.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/checkbox/es/index.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/_util/wave/style.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/_util/wave/interface.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/_util/wave/util.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/_util/wave/WaveEffect.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/_util/wave/useWave.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/_util/wave/index.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/checkbox/useBubbleLock.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/radio/style/index.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/radio/radio.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/radio/group.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/radio/radioButton.js","../node_modules/.pnpm/@rc-component+select@1.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/select/es/hooks/useAllowClear.js","../node_modules/.pnpm/@rc-component+select@1.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/select/es/hooks/useBaseProps.js","../node_modules/.pnpm/@rc-component+select@1.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/select/es/hooks/useLock.js","../node_modules/.pnpm/@rc-component+select@1.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/select/es/hooks/useSelectTriggerControl.js","../node_modules/.pnpm/@rc-component+select@1.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/select/es/SelectTrigger.js","../node_modules/.pnpm/@rc-component+select@1.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/select/es/utils/valueUtil.js","../node_modules/.pnpm/@rc-component+select@1.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/select/es/BaseSelect/Polite.js","../node_modules/.pnpm/@rc-component+select@1.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/select/es/hooks/useOpen.js","../node_modules/.pnpm/@rc-component+select@1.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/select/es/SelectInput/Affix.js","../node_modules/.pnpm/@rc-component+select@1.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/select/es/SelectInput/context.js","../node_modules/.pnpm/@rc-component+select@1.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/select/es/SelectInput/Input.js","../node_modules/.pnpm/@rc-component+select@1.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/select/es/SelectInput/Content/Placeholder.js","../node_modules/.pnpm/@rc-component+select@1.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/select/es/SelectContext.js","../node_modules/.pnpm/@rc-component+select@1.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/select/es/utils/commonUtil.js","../node_modules/.pnpm/@rc-component+select@1.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/select/es/SelectInput/Content/SingleContent.js","../node_modules/.pnpm/@rc-component+select@1.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/select/es/TransBtn.js","../node_modules/.pnpm/@rc-component+select@1.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/select/es/SelectInput/Content/MultipleContent.js","../node_modules/.pnpm/@rc-component+select@1.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/select/es/SelectInput/Content/index.js","../node_modules/.pnpm/@rc-component+select@1.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/select/es/utils/keyUtil.js","../node_modules/.pnpm/@rc-component+select@1.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/select/es/SelectInput/index.js","../node_modules/.pnpm/@rc-component+select@1.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/select/es/hooks/useComponents.js","../node_modules/.pnpm/@rc-component+select@1.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/select/es/BaseSelect/index.js","../node_modules/.pnpm/@rc-component+select@1.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/select/es/OptGroup.js","../node_modules/.pnpm/@rc-component+select@1.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/select/es/Option.js","../node_modules/.pnpm/@rc-component+virtual-list@1.5.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/virtual-list/es/Filler.js","../node_modules/.pnpm/@rc-component+virtual-list@1.5.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/virtual-list/es/Item.js","../node_modules/.pnpm/@rc-component+virtual-list@1.5.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/virtual-list/es/hooks/useChildren.js","../node_modules/.pnpm/@rc-component+virtual-list@1.5.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/virtual-list/es/utils/algorithmUtil.js","../node_modules/.pnpm/@rc-component+virtual-list@1.5.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/virtual-list/es/hooks/useDiffItem.js","../node_modules/.pnpm/@rc-component+virtual-list@1.5.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/virtual-list/es/utils/isFirefox.js","../node_modules/.pnpm/@rc-component+virtual-list@1.5.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/virtual-list/es/hooks/useOriginScroll.js","../node_modules/.pnpm/@rc-component+virtual-list@1.5.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/virtual-list/es/hooks/useFrameWheel.js","../node_modules/.pnpm/@rc-component+virtual-list@1.5.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/virtual-list/es/hooks/useGetSize.js","../node_modules/.pnpm/@rc-component+virtual-list@1.5.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/virtual-list/es/utils/CacheMap.js","../node_modules/.pnpm/@rc-component+virtual-list@1.5.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/virtual-list/es/hooks/useHeights.js","../node_modules/.pnpm/@rc-component+virtual-list@1.5.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/virtual-list/es/hooks/useMobileTouchMove.js","../node_modules/.pnpm/@rc-component+virtual-list@1.5.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/virtual-list/es/hooks/useScrollDrag.js","../node_modules/.pnpm/@rc-component+virtual-list@1.5.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/virtual-list/es/hooks/useScrollTo.js","../node_modules/.pnpm/@rc-component+virtual-list@1.5.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/virtual-list/es/ScrollBar.js","../node_modules/.pnpm/@rc-component+virtual-list@1.5.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/virtual-list/es/utils/scrollbarUtil.js","../node_modules/.pnpm/@rc-component+virtual-list@1.5.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/virtual-list/es/List.js","../node_modules/.pnpm/@rc-component+virtual-list@1.5.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/virtual-list/es/mock.js","../node_modules/.pnpm/@rc-component+virtual-list@1.5.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/virtual-list/es/index.js","../node_modules/.pnpm/@rc-component+select@1.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/select/es/utils/platformUtil.js","../node_modules/.pnpm/@rc-component+select@1.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/select/es/OptionList.js","../node_modules/.pnpm/@rc-component+select@1.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/select/es/hooks/useCache.js","../node_modules/.pnpm/@rc-component+select@1.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/select/es/hooks/useFilterOptions.js","../node_modules/.pnpm/@rc-component+select@1.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/select/es/utils/legacyUtil.js","../node_modules/.pnpm/@rc-component+select@1.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/select/es/hooks/useOptions.js","../node_modules/.pnpm/@rc-component+select@1.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/select/es/hooks/useRefFunc.js","../node_modules/.pnpm/@rc-component+select@1.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/select/es/hooks/useSearchConfig.js","../node_modules/.pnpm/@rc-component+select@1.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/select/es/Select.js","../node_modules/.pnpm/@rc-component+select@1.10.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@rc-component/select/es/index.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/_util/motion.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/_util/normalizeIcon.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/_util/PurePanel.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/_util/statusUtils.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/empty/utils.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/empty/empty.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/empty/simple.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/empty/style/index.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/empty/index.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/config-provider/defaultRenderEmpty.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/form/hooks/useVariants.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/space/Compact.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/select/mergedBuiltinPlacements.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/style/compact-item.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/style/motion/motion.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/style/motion/move.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/style/motion/slide.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/select/style/dropdown.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/select/style/select-input-customize.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/select/style/select-input-multiple.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/select/style/select-input.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/select/style/token.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/select/style/index.js","../node_modules/.pnpm/@ant-design+icons-svg@4.6.0/node_modules/@ant-design/icons-svg/es/asn/CheckOutlined.js","../node_modules/.pnpm/@ant-design+icons@6.3.4_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/icons/es/icons/CheckOutlined.js","../node_modules/.pnpm/@ant-design+icons-svg@4.6.0/node_modules/@ant-design/icons-svg/es/asn/DownOutlined.js","../node_modules/.pnpm/@ant-design+icons@6.3.4_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/icons/es/icons/DownOutlined.js","../node_modules/.pnpm/@ant-design+icons-svg@4.6.0/node_modules/@ant-design/icons-svg/es/asn/LoadingOutlined.js","../node_modules/.pnpm/@ant-design+icons@6.3.4_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/icons/es/icons/LoadingOutlined.js","../node_modules/.pnpm/@ant-design+icons-svg@4.6.0/node_modules/@ant-design/icons-svg/es/asn/SearchOutlined.js","../node_modules/.pnpm/@ant-design+icons@6.3.4_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/icons/es/icons/SearchOutlined.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/select/useIcons.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/_util/ContextIsolator.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/select/usePopupRender.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/select/useShowArrow.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/select/index.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/calendar/Header.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/date-picker/style/panel.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/date-picker/style/token.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/calendar/style/index.js","../node_modules/.pnpm/antd@6.6.4_date-fns@4.4.0_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/antd/es/calendar/generateCalendar.js","../node_modules/.pnpm/luxon@3.7.2/node_modules/luxon/build/node/luxon.js","../node_modules/.pnpm/rc-picker@4.11.3_date-fns@4.4.0_dayjs@1.11.21_luxon@3.7.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/rc-picker/lib/generate/luxon.js","../src/components/common/AntdCalendar/AntdCalendar.jsx","../src/components/common/Calendar/Calendar.module.scss","../src/components/common/Calendar/Calendar.tsx","../src/components/common/DateRangeFilter/DateRangeFilter.module.scss","../src/components/common/DateRangeFilter/TimeRangeFilter.module.scss","../src/components/common/DateRangeFilter/TimeRangeFilter.tsx","../src/components/common/DateRangeFilter/useDateRangeConstraints.tsx","../src/components/common/DateRangeFilter/DateRangeFilter.tsx","../src/components/common/FilterContainer/FilterContainerTopFilters/FilterContainerTopFilters.module.scss","../src/components/common/GroupByFilter/GroupByFilter.jsx","../src/components/common/FilterContainer/FilterContainerTopFilters/FilterContainerTopFilters.jsx","../src/components/common/FilterContainer/FilterContainer.module.scss","../src/services/common/notifications.service.ts","../src/components/common/Notifications/Notifications.module.scss","../src/components/common/Notifications/Notifications.jsx","../src/hocs/withPermission/withPermission.tsx","../src/hocs/withFilterController/withTopicsFilterController.tsx","../src/hocs/withFilterController/index.ts","../src/utils/mixpanel.util.js","../src/components/common/FilterContainer/FilterContainer.jsx","../src/components/common/TimeZoneWarningBanner/TimeZoneWarningBanner.module.scss","../src/components/common/TimeZoneWarningBanner/TimeZoneWarningBanner.tsx","../src/components/common/Dashboard/Dashboard.module.scss","../src/components/common/Dashboard/Dashboard.tsx","../src/components/common/AnalyticsRedirect/AnalyticsRedirect.jsx","../node_modules/.pnpm/react-error-boundary@6.1.5_@types+react@18.3.31_react@18.3.1/node_modules/react-error-boundary/dist/react-error-boundary.js","../src/components/common/ErrorAlert/ErrorAlert.module.scss","../src/components/common/ErrorAlert/ErrorAlert.jsx","../src/components/common/ErrorBoundaryWrapper/ErrorBoundaryWrapper.jsx","../src/hooks/useIsSearchPage.ts","../src/utils/dashboardGrouping.util.ts","../src/components/common/NavBarAccordionItem/NavBarAccordionItem.module.scss","../src/components/common/NavBarAccordionItem/NavBarAccordionItem.tsx","../src/hooks/dashboards/useDashboardWindowEvent.ts","../src/services/common/events.service.ts","../src/components/common/NavBarDrawerItem/NavBarDrawerItem.module.scss","../src/components/common/NavBarDrawerItem/NavBarDrawerItem.tsx","../src/components/common/NavBarItemMenu/NavBarItemMenu.module.scss","../src/components/common/NavBarItemMenu/NavBarItemMenu.jsx","../src/components/common/NavBarItemMenuOverlay/NavBarItemMenuOverlay.module.scss","../src/components/common/NavBarItemMenuOverlay/NavBarItemMenuOverlay.jsx","../src/components/common/NavBarDashboardDrawerItem/NavBarDashboardDrawerItem.module.scss","../src/components/common/NavBarDashboardDrawerItem/NavBarDashboardDrawerItem.tsx","../src/utils/dashboardSorting.util.js","../src/components/common/NavBarDashboardDrawerAccordionItem/NavBarDashboardDrawerAccordionItem.module.scss","../src/components/common/NavBarDashboardDrawerAccordionItem/NavBarDashboardDrawerAccordionItem.tsx","../src/components/common/NavBarDashboardsAccordionItem/NavBarDashboardsAccordionItem.module.scss","../src/components/common/NavBarDashboardsAccordionItem/NavBarDashboardsAccordionItem.tsx","../src/components/common/NavBar/NavBar.module.scss","../src/components/common/NavBar/NavBar.tsx","../src/components/common/OrganizationSwitcher/OrganizationSwitcher.module.scss","../src/components/common/OrganizationSwitcher/OrganizationSwitcher.tsx","../src/components/common/Header/Header.module.scss","../src/components/common/Header/Header.tsx","../src/components/common/Layout/Layout.module.scss","../src/components/common/Loading/Loading.module.scss","../src/components/common/Loading/Loading.jsx","../src/hocs/withDefaultBoard/withDefaultBoard.tsx","../src/pages/errors/404/404.module.scss","../src/pages/errors/404/404.tsx","../src/pages/errors/invalid-timezone/InvalidTimezone.tsx","../src/hooks/dashboards/useCreateDashboard.ts","../src/hooks/dashboards/useDeleteDashboard.ts","../src/hooks/dashboards/useShareDashboard.ts","../src/hocs/withDashboardModals/withDashboardModals.tsx","../src/hooks/useWindowEvent.ts","../src/components/common/CallReportModal/CallReportModal.module.scss","../src/constants/call-dispositions.js","../src/constants/call-report-modal.js","../src/constants/sentiments.ts","../src/components/common/CallReportModal/CallReportMetricListItem/CallReportMetricListItem.module.css","../src/components/common/CallReportModal/CallReportMetricListItem/CallReportMetricListItem.tsx","../src/components/common/CallReportModal/CallReportAiQMCard/CallReportAiQMCard.module.css","../src/components/common/CallReportModal/CallReportAiQMCard/CallReportAiQMCard.tsx","../src/components/common/CallReportModal/CallReportCSATCard/CallReportCSATCard.module.css","../src/components/common/CallReportModal/CallReportCSATCard/CallReportCSATCard.tsx","../src/components/cc-boards/SentimentIcon/SentimentIcon.jsx","../src/components/common/CallReportModal/CallReportSentimentCard/CallReportSentimentCard.module.css","../src/components/common/CallReportModal/CallReportSentimentCard/CallReportSentimentCard.tsx","../src/components/common/CallReportModal/CallReportTextCard/CallReportTextCard.module.scss","../src/components/common/CallReportModal/CallReportTextCard/CallReportTextCard.jsx","../src/components/common/CallReportModal/CallReportSummary/CallReportSummary.module.scss","../src/components/common/CallReportModal/CallReportSummary/CallReportSummary.tsx","../src/components/common/CallReportModal/CallReportExport/CallReportExportButton.module.scss","../src/components/common/CallReportModal/CallReportExport/CallReportExportButton.jsx","../src/components/common/CallReportModal/CallReportOverviewLink/CallReportOverviewLink.module.scss","../src/components/common/CallReportModal/CallReportOverviewLink/CallReportOverviewLinkButton.tsx","../src/components/common/CallReportModal/CallReportNotes/CallReportNotes.module.scss","../src/components/common/CallReportModal/CallReportNotes/CallReportNotes.jsx","../src/components/common/CallReportModal/CallReportDetail/CallReportDetail.module.scss","../src/components/common/CallReportModal/CallReportsTimeline/CallReportsTimeline.module.scss","../src/components/common/CallReportModal/CallReportsTimelineIcon/CallReportsTimelineIcon.module.scss","../src/components/common/CallReportModal/CallReportsTimelineIcon/CallReportsTimelineIcon.tsx","../src/components/common/CallReportModal/CallReportsTimeline/CallReportsTimeline.jsx","../src/components/common/CallReportModal/CallReportDetail/GroupDetailsColumn/GroupDetailsColumn.module.scss","../src/components/common/CallReportModal/CallReportDetail/tooltips/CallReportTooltip.module.scss","../src/components/common/CallReportModal/CallReportDetail/tooltips/CallReportTooltip.tsx","../src/components/common/CallReportModal/CallReportDetail/tooltips/VirtualAssistantTooltip/VirtualAssistantTooltip.tsx","../src/types/ai-actions/AiActions.model.ts","../src/components/common/CallReportModal/CallReportDetail/tooltips/KnowledgeAccessedTooltip/KnowledgeAccessedTooltip.module.scss","../src/components/common/CallReportModal/CallReportDetail/tooltips/KnowledgeAccessedTooltip/KnowledgeAccessedTooltip.tsx","../src/components/common/CallReportModal/CallReportDetail/tooltips/InfoCaptured/InfoCapturedTooltip.module.scss","../src/components/common/CallReportModal/CallReportDetail/tooltips/InfoCaptured/InfoCapturedTooltip.tsx","../src/configs/scheduling-fields.config.ts","../src/utils/scheduling-fields.util.ts","../src/hooks/useSchedulingFieldTranslation.ts","../src/components/common/CallReportModal/CallReportDetail/tooltips/Scheduling/SchedulingTooltip.module.scss","../src/components/common/CallReportModal/CallReportDetail/tooltips/Scheduling/SchedulingTooltip.tsx","../src/constants/colors.js","../src/components/common/TooltipWithColor/TooltipWithColor.module.scss","../src/components/common/TooltipWithColor/TooltipWithColor.jsx","../src/components/common/CallReportModal/CallReportDetail/tooltips/groupDetailsTooltip.module.scss","../src/components/common/CallReportModal/CallReportDetail/tooltips/VoicemailTooltip/VoicemailTooltip.tsx","../src/components/common/CallReportModal/CallReportDetail/tooltips/AutoAttendantTooltip/AutoAttendantTooltip.tsx","../src/components/common/CallReportModal/CallReportDetail/tooltips/ScheduleTooltip/ScheduleTooltip.tsx","../src/components/common/CallReportModal/CallReportDetail/tooltips/ExternalNumberTooltip/ExternalNumberTooltip.tsx","../src/components/common/CallReportModal/CallReportDetail/tooltips/CallerInfoTooltip/CallerInfoTooltip.tsx","../src/components/common/CallReportModal/CallReportDetail/tooltips/QueueGroupDetailsTooltip/QueueGroupDetailsTooltip.tsx","../src/components/common/CallReportModal/CallReportDetail/tooltips/QueueTooltip/QueueTooltip.module.scss","../src/components/common/CallReportModal/CallReportDetail/tooltips/QueueTooltip/QueueTooltip.tsx","../src/components/common/CallReportModal/CallReportDetail/tooltips/DirectoryReferencedTooltip/DirectoryReferencedTooltip.module.scss","../src/components/common/CallReportModal/CallReportDetail/tooltips/DirectoryReferencedTooltip/DirectoryReferencedTooltip.tsx","../src/components/common/CallReportModal/CallReportDetail/GroupDetailsColumn/GroupDetailsColumn.jsx","../src/components/common/CallReportModal/CallReportDetail/CallReportDetail.jsx","../src/components/common/CallReportModal/CallReportsNoDataAvailable/CallReportsNoDataAvailable.module.scss","../src/components/common/CallReportModal/CallReportsNoDataAvailable/CallReportsNoDataAvailable.jsx","../src/components/common/AudioPlayerSkeleton/AudioPlayerSkeleton.module.scss","../src/components/common/AudioPlayerSkeleton/AudioPlayerSkeleton.jsx","../src/components/common/CallReportModal/CallReportModalPlayer/CallReportModalPlayer.module.scss","../src/services/common/pbx-feature-flag.service.ts","../node_modules/.pnpm/@iconify+react@5.2.1_react@18.3.1/node_modules/@iconify/react/dist/iconify.js","../node_modules/.pnpm/react-h5-audio-player@3.10.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-h5-audio-player/es/utils.js","../node_modules/.pnpm/react-h5-audio-player@3.10.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-h5-audio-player/es/ProgressBar.js","../node_modules/.pnpm/react-h5-audio-player@3.10.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-h5-audio-player/es/CurrentTime.js","../node_modules/.pnpm/react-h5-audio-player@3.10.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-h5-audio-player/es/Duration.js","../node_modules/.pnpm/react-h5-audio-player@3.10.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-h5-audio-player/es/VolumeBar.js","../node_modules/.pnpm/react-h5-audio-player@3.10.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-h5-audio-player/es/constants.js","../node_modules/.pnpm/react-h5-audio-player@3.10.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-h5-audio-player/es/index.js","../src/components/common/SpeedSelect/SpeedSelect.module.scss","../src/components/common/SpeedSelect/SpeedSelect.tsx","../src/components/common/AudioPlayer/AudioPlayer.module.scss","../src/hooks/useAudioPlayer.ts","../src/components/common/AudioPlayer/AudioPlayer.jsx","../src/constants/recordings.js","../src/components/common/CallReportModal/CallReportModalPlayer/CallReportModalPlayer.jsx","../src/components/common/CallReportModal/CallReportTranscript/CallReportTranscript.module.scss","../src/components/common/CallReportModal/CallReportTranscript/CallReportTranscript.jsx","../src/components/common/CallReportModal/CallReportUpgradePrompt/CallReportUpgradePrompt.module.scss","../src/components/common/CallReportModal/CallReportUpgradePrompt/CallReportUpgradePrompt.jsx","../src/utils/product-exploration.js","../src/components/common/CallReportModal/CallReportAiInsight/CallReportAiInsight.module.css","../src/components/common/CallReportModal/CallReportAiInsight/CallReportAiInsight.tsx","../src/components/common/CallReportModal/CallReportModal.jsx","../src/components/common/DeleteDashboardModal/DeleteDashboardModal.module.scss","../src/components/common/DeleteDashboardModal/DeleteDashboardModal.jsx","../src/components/common/SaveDashboardModal/SaveDashboardModal.jsx","../src/components/common/SelectDropdown/SelectDropdown.module.scss","../src/components/common/SelectDropdown/SelectDropdown.jsx","../src/services/common/avatars.service.ts","../src/components/common/UsersSearch/UsersSearch.module.scss","../src/components/common/UsersSearch/UsersSearch.jsx","../src/components/common/Scheduler/ReadOnlyField/ReadOnlyField.module.scss","../src/components/common/Scheduler/ReadOnlyField/ReadOnlyField.tsx","../src/components/common/Scheduler/AddScheduledDashboardModal/AddScheduledDashboardModal.module.scss","../src/components/common/Scheduler/AddScheduledDashboardModal/AddScheduledDashboardModal.tsx","../src/components/common/Scheduler/DeleteScheduledDashboardModal/DeleteScheduledDashboardModal.module.scss","../src/components/common/Scheduler/DeleteScheduledDashboardModal/DeleteScheduledDashboardModal.tsx","../src/components/common/Scheduler/MaxSchedulesReachedModal/MaxSchedulesReachedModal.tsx","../src/hocs/withShareDashboardModal/withShareDashboardModal.tsx","../src/components/common/DashboardShareUser/DashboardShareUser.module.scss","../src/components/common/DashboardShareUser/DashboardShareUser.jsx","../src/components/common/ShareDashboardModal/ShareDashboardModal.module.scss","../src/components/common/ManageShareDashboardModal/ManageShareDashboardModal.module.scss","../src/components/common/ManageShareDashboardModal/ManageShareDashboardModal.jsx","../src/components/common/ShareDashboardModal/ShareDashboardModal.jsx","../src/components/common/ModalsManager/ModalsManager.tsx","../src/components/common/TimeoutDialog/TimeoutDialog.module.scss","../src/components/common/TimeoutDialog/TimeoutDialog.jsx","../src/services/common/product-exploration-service.ts","../src/components/common/Layout/Layout.jsx","../src/components/common/NavigateWrapper/NavigateWrapper.jsx","../src/components/SearchResults/DirectSearchResultsPage.tsx","../src/Router.jsx","../src/services/common/sentry.service.ts","../src/App.tsx","../src/analytics-experience.entry.js","../src/analytics-experience.shell.entry.js"],"sourcesContent":["import { DEBUG_BUILD } from '../debug-build.js';\nimport { debug } from '../utils/debug-logger.js';\nimport { getFunctionName } from '../utils/stacktrace.js';\n\nconst handlers = {};\nconst instrumented = {};\nfunction addHandler(type, handler) {\n  handlers[type] = handlers[type] || [];\n  handlers[type].push(handler);\n  return () => {\n    const typeHandlers = handlers[type];\n    if (typeHandlers) {\n      const index = typeHandlers.indexOf(handler);\n      if (index !== -1) {\n        typeHandlers.splice(index, 1);\n      }\n    }\n  };\n}\nfunction resetInstrumentationHandlers() {\n  Object.keys(handlers).forEach((key) => {\n    handlers[key] = void 0;\n  });\n}\nfunction maybeInstrument(type, instrumentFn) {\n  if (!instrumented[type]) {\n    instrumented[type] = true;\n    try {\n      instrumentFn();\n    } catch (e) {\n      DEBUG_BUILD && debug.error(`Error while instrumenting ${type}`, e);\n    }\n  }\n}\nfunction triggerHandlers(type, data) {\n  const typeHandlers = type && handlers[type];\n  if (!typeHandlers) {\n    return;\n  }\n  for (const handler of typeHandlers) {\n    try {\n      handler(data);\n    } catch (e) {\n      DEBUG_BUILD && debug.error(\n        `Error while triggering instrumentation handler.\nType: ${type}\nName: ${getFunctionName(handler)}\nError:`,\n        e\n      );\n    }\n  }\n}\n\nexport { addHandler, maybeInstrument, resetInstrumentationHandlers, triggerHandlers };\n//# sourceMappingURL=handlers.js.map\n","import { GLOBAL_OBJ } from '../utils/worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers.js';\n\nlet _oldOnErrorHandler = null;\nfunction addGlobalErrorInstrumentationHandler(handler) {\n  const type = \"error\";\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentError);\n}\nfunction instrumentError() {\n  _oldOnErrorHandler = GLOBAL_OBJ.onerror;\n  GLOBAL_OBJ.onerror = function(msg, url, line, column, error) {\n    const handlerData = {\n      column,\n      error,\n      line,\n      msg,\n      url\n    };\n    triggerHandlers(\"error\", handlerData);\n    if (_oldOnErrorHandler) {\n      return _oldOnErrorHandler.apply(this, arguments);\n    }\n    return false;\n  };\n  GLOBAL_OBJ.onerror.__SENTRY_INSTRUMENTED__ = true;\n}\n\nexport { addGlobalErrorInstrumentationHandler };\n//# sourceMappingURL=globalError.js.map\n","import { GLOBAL_OBJ } from '../utils/worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers.js';\n\nlet _oldOnUnhandledRejectionHandler = null;\nfunction addGlobalUnhandledRejectionInstrumentationHandler(handler) {\n  const type = \"unhandledrejection\";\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentUnhandledRejection);\n}\nfunction instrumentUnhandledRejection() {\n  _oldOnUnhandledRejectionHandler = GLOBAL_OBJ.onunhandledrejection;\n  GLOBAL_OBJ.onunhandledrejection = function(e) {\n    const handlerData = e;\n    triggerHandlers(\"unhandledrejection\", handlerData);\n    if (_oldOnUnhandledRejectionHandler) {\n      return _oldOnUnhandledRejectionHandler.apply(this, arguments);\n    }\n    return true;\n  };\n  GLOBAL_OBJ.onunhandledrejection.__SENTRY_INSTRUMENTED__ = true;\n}\n\nexport { addGlobalUnhandledRejectionInstrumentationHandler };\n//# sourceMappingURL=globalUnhandledRejection.js.map\n","function parseSampleRate(sampleRate) {\n  if (typeof sampleRate === \"boolean\") {\n    return Number(sampleRate);\n  }\n  const rate = typeof sampleRate === \"string\" ? parseFloat(sampleRate) : sampleRate;\n  if (typeof rate !== \"number\" || isNaN(rate) || rate < 0 || rate > 1) {\n    return void 0;\n  }\n  return rate;\n}\n\nexport { parseSampleRate };\n//# sourceMappingURL=parseSampleRate.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { debug } from './debug-logger.js';\nimport { isMatchingPattern } from './string.js';\n\nfunction logIgnoredSpan(droppedSpan) {\n  debug.log(`Ignoring span ${droppedSpan.op} - ${droppedSpan.description} because it matches \\`ignoreSpans\\`.`);\n}\nfunction shouldIgnoreSpan(span, ignoreSpans) {\n  if (!ignoreSpans?.length) {\n    return false;\n  }\n  for (const pattern of ignoreSpans) {\n    if (isStringOrRegExp(pattern)) {\n      if (span.description && isMatchingPattern(span.description, pattern)) {\n        DEBUG_BUILD && logIgnoredSpan(span);\n        return true;\n      }\n      continue;\n    }\n    const hasAttributes = !!pattern.attributes && Object.keys(pattern.attributes).length > 0;\n    if (!pattern.name && !pattern.op && !hasAttributes) {\n      continue;\n    }\n    const nameMatches = pattern.name ? span.description && isMatchingPattern(span.description, pattern.name) : true;\n    const opMatches = pattern.op ? span.op && isMatchingPattern(span.op, pattern.op) : true;\n    const attrsMatch = pattern.attributes ? Object.entries(pattern.attributes).every(\n      ([key, valuePattern]) => _matchesAttributeValue(span.attributes?.[key], valuePattern)\n    ) : true;\n    if (nameMatches && opMatches && attrsMatch) {\n      DEBUG_BUILD && logIgnoredSpan(span);\n      return true;\n    }\n  }\n  return false;\n}\nfunction _matchesAttributeValue(actual, pat) {\n  if (typeof actual === \"string\" && (typeof pat === \"string\" || pat instanceof RegExp)) {\n    return isMatchingPattern(actual, pat);\n  }\n  if (Array.isArray(actual) && Array.isArray(pat)) {\n    return actual.length === pat.length && actual.every((v, i) => v === pat[i]);\n  }\n  return actual === pat;\n}\nfunction reparentChildSpans(spans, dropSpan) {\n  const droppedSpanParentId = dropSpan.parent_span_id;\n  const droppedSpanId = dropSpan.span_id;\n  if (!droppedSpanParentId) {\n    return;\n  }\n  for (const span of spans) {\n    if (span.parent_span_id === droppedSpanId) {\n      span.parent_span_id = droppedSpanParentId;\n    }\n  }\n}\nfunction isStringOrRegExp(value) {\n  return typeof value === \"string\" || value instanceof RegExp;\n}\n\nexport { reparentChildSpans, shouldIgnoreSpan };\n//# sourceMappingURL=should-ignore-span.js.map\n","import { addNonEnumerableProperty } from '../../utils/object.js';\n\nfunction withStreamedSpan(callback) {\n  addNonEnumerableProperty(callback, \"_streamed\", true);\n  return callback;\n}\nfunction isStreamedBeforeSendSpanCallback(callback) {\n  return !!callback && typeof callback === \"function\" && \"_streamed\" in callback && !!callback._streamed;\n}\n\nexport { isStreamedBeforeSendSpanCallback, withStreamedSpan };\n//# sourceMappingURL=beforeSendSpan.js.map\n","import { getSentryCarrier } from '../carrier.js';\nimport { dsnToString } from './dsn.js';\nimport { normalize } from './normalize.js';\nimport { safeDateNow } from './randomSafeContext.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\nfunction createEnvelope(headers, items = []) {\n  return [headers, items];\n}\nfunction addItemToEnvelope(envelope, newItem) {\n  const [headers, items] = envelope;\n  return [headers, [...items, newItem]];\n}\nfunction forEachEnvelopeItem(envelope, callback) {\n  const envelopeItems = envelope[1];\n  for (const envelopeItem of envelopeItems) {\n    const envelopeItemType = envelopeItem[0].type;\n    const result = callback(envelopeItem, envelopeItemType);\n    if (result) {\n      return true;\n    }\n  }\n  return false;\n}\nfunction envelopeContainsItemType(envelope, types) {\n  return forEachEnvelopeItem(envelope, (_, type) => types.includes(type));\n}\nfunction encodeUTF8(input) {\n  const carrier = getSentryCarrier(GLOBAL_OBJ);\n  return carrier.encodePolyfill ? carrier.encodePolyfill(input) : new TextEncoder().encode(input);\n}\nfunction decodeUTF8(input) {\n  const carrier = getSentryCarrier(GLOBAL_OBJ);\n  return carrier.decodePolyfill ? carrier.decodePolyfill(input) : new TextDecoder().decode(input);\n}\nfunction serializeEnvelope(envelope) {\n  const [envHeaders, items] = envelope;\n  let parts = JSON.stringify(envHeaders);\n  function append(next) {\n    if (typeof parts === \"string\") {\n      parts = typeof next === \"string\" ? parts + next : [encodeUTF8(parts), next];\n    } else {\n      parts.push(typeof next === \"string\" ? encodeUTF8(next) : next);\n    }\n  }\n  for (const item of items) {\n    const [itemHeaders, payload] = item;\n    append(`\n${JSON.stringify(itemHeaders)}\n`);\n    if (typeof payload === \"string\" || payload instanceof Uint8Array) {\n      append(payload);\n    } else {\n      let stringifiedPayload;\n      try {\n        stringifiedPayload = JSON.stringify(payload);\n      } catch {\n        stringifiedPayload = JSON.stringify(normalize(payload));\n      }\n      append(stringifiedPayload);\n    }\n  }\n  return typeof parts === \"string\" ? parts : concatBuffers(parts);\n}\nfunction concatBuffers(buffers) {\n  const totalLength = buffers.reduce((acc, buf) => acc + buf.length, 0);\n  const merged = new Uint8Array(totalLength);\n  let offset = 0;\n  for (const buffer of buffers) {\n    merged.set(buffer, offset);\n    offset += buffer.length;\n  }\n  return merged;\n}\nfunction parseEnvelope(env) {\n  let buffer = typeof env === \"string\" ? encodeUTF8(env) : env;\n  function readBinary(length) {\n    const bin = buffer.subarray(0, length);\n    buffer = buffer.subarray(length + 1);\n    return bin;\n  }\n  function readJson() {\n    let i = buffer.indexOf(10);\n    if (i < 0) {\n      i = buffer.length;\n    }\n    return JSON.parse(decodeUTF8(readBinary(i)));\n  }\n  const envelopeHeader = readJson();\n  const items = [];\n  while (buffer.length) {\n    const itemHeader = readJson();\n    const binaryLength = typeof itemHeader.length === \"number\" ? itemHeader.length : void 0;\n    items.push([itemHeader, binaryLength ? readBinary(binaryLength) : readJson()]);\n  }\n  return [envelopeHeader, items];\n}\nfunction createSpanEnvelopeItem(spanJson) {\n  const spanHeaders = {\n    type: \"span\"\n  };\n  return [spanHeaders, spanJson];\n}\nfunction createAttachmentEnvelopeItem(attachment) {\n  const buffer = typeof attachment.data === \"string\" ? encodeUTF8(attachment.data) : attachment.data;\n  return [\n    {\n      type: \"attachment\",\n      length: buffer.length,\n      filename: attachment.filename,\n      content_type: attachment.contentType,\n      attachment_type: attachment.attachmentType\n    },\n    buffer\n  ];\n}\nconst DATA_CATEGORY_OVERRIDES = {\n  sessions: \"session\",\n  event: \"error\",\n  client_report: \"internal\",\n  user_report: \"default\",\n  profile_chunk: \"profile\",\n  replay_event: \"replay\",\n  replay_recording: \"replay\",\n  check_in: \"monitor\",\n  raw_security: \"security\",\n  log: \"log_item\",\n  trace_metric: \"metric\"\n};\nfunction _isOverriddenType(type) {\n  return type in DATA_CATEGORY_OVERRIDES;\n}\nfunction envelopeItemTypeToDataCategory(type) {\n  return _isOverriddenType(type) ? DATA_CATEGORY_OVERRIDES[type] : type;\n}\nfunction getSdkMetadataForEnvelopeHeader(metadataOrEvent) {\n  if (!metadataOrEvent?.sdk) {\n    return;\n  }\n  const { name, version } = metadataOrEvent.sdk;\n  return { name, version };\n}\nfunction createEventEnvelopeHeaders(event, sdkInfo, tunnel, dsn) {\n  const dynamicSamplingContext = event.sdkProcessingMetadata?.dynamicSamplingContext;\n  return {\n    event_id: event.event_id,\n    sent_at: new Date(safeDateNow()).toISOString(),\n    ...sdkInfo && { sdk: sdkInfo },\n    ...!!tunnel && dsn && { dsn: dsnToString(dsn) },\n    ...dynamicSamplingContext && {\n      trace: dynamicSamplingContext\n    }\n  };\n}\n\nexport { addItemToEnvelope, createAttachmentEnvelopeItem, createEnvelope, createEventEnvelopeHeaders, createSpanEnvelopeItem, envelopeContainsItemType, envelopeItemTypeToDataCategory, forEachEnvelopeItem, getSdkMetadataForEnvelopeHeader, parseEnvelope, serializeEnvelope };\n//# sourceMappingURL=envelope.js.map\n","import { getDynamicSamplingContextFromSpan } from './tracing/dynamicSamplingContext.js';\nimport { isStreamedBeforeSendSpanCallback } from './tracing/spans/beforeSendSpan.js';\nimport { dsnToString } from './utils/dsn.js';\nimport { getSdkMetadataForEnvelopeHeader, createEventEnvelopeHeaders, createEnvelope, createSpanEnvelopeItem } from './utils/envelope.js';\nimport { safeDateNow } from './utils/randomSafeContext.js';\nimport { shouldIgnoreSpan } from './utils/should-ignore-span.js';\nimport { spanToJSON, showSpanDropWarning } from './utils/spanUtils.js';\n\nfunction _enhanceEventWithSdkInfo(event, newSdkInfo) {\n  if (!newSdkInfo) {\n    return event;\n  }\n  const eventSdkInfo = event.sdk || {};\n  event.sdk = {\n    ...eventSdkInfo,\n    name: eventSdkInfo.name || newSdkInfo.name,\n    version: eventSdkInfo.version || newSdkInfo.version,\n    integrations: [...event.sdk?.integrations || [], ...newSdkInfo.integrations || []],\n    packages: [...event.sdk?.packages || [], ...newSdkInfo.packages || []],\n    settings: event.sdk?.settings || newSdkInfo.settings ? {\n      ...event.sdk?.settings,\n      ...newSdkInfo.settings\n    } : void 0\n  };\n  return event;\n}\nfunction createSessionEnvelope(session, dsn, metadata, tunnel) {\n  const sdkInfo = getSdkMetadataForEnvelopeHeader(metadata);\n  const envelopeHeaders = {\n    sent_at: new Date(safeDateNow()).toISOString(),\n    ...sdkInfo && { sdk: sdkInfo },\n    ...!!tunnel && dsn && { dsn: dsnToString(dsn) }\n  };\n  const envelopeItem = \"aggregates\" in session ? [{ type: \"sessions\" }, session] : [{ type: \"session\" }, session.toJSON()];\n  return createEnvelope(envelopeHeaders, [envelopeItem]);\n}\nfunction createEventEnvelope(event, dsn, metadata, tunnel) {\n  const sdkInfo = getSdkMetadataForEnvelopeHeader(metadata);\n  const eventType = event.type && event.type !== \"replay_event\" ? event.type : \"event\";\n  _enhanceEventWithSdkInfo(event, metadata?.sdk);\n  const envelopeHeaders = createEventEnvelopeHeaders(event, sdkInfo, tunnel, dsn);\n  delete event.sdkProcessingMetadata;\n  const eventItem = [{ type: eventType }, event];\n  return createEnvelope(envelopeHeaders, [eventItem]);\n}\nfunction createSpanEnvelope(spans, client) {\n  function dscHasRequiredProps(dsc2) {\n    return !!dsc2.trace_id && !!dsc2.public_key;\n  }\n  const dsc = getDynamicSamplingContextFromSpan(spans[0]);\n  const dsn = client?.getDsn();\n  const tunnel = client?.getOptions().tunnel;\n  const headers = {\n    sent_at: new Date(safeDateNow()).toISOString(),\n    ...dscHasRequiredProps(dsc) && { trace: dsc },\n    ...!!tunnel && dsn && { dsn: dsnToString(dsn) }\n  };\n  const { beforeSendSpan, ignoreSpans } = client?.getOptions() || {};\n  const filteredSpans = ignoreSpans?.length ? spans.filter((span) => {\n    const json = spanToJSON(span);\n    return !shouldIgnoreSpan({ description: json.description, op: json.op, attributes: json.data }, ignoreSpans);\n  }) : spans;\n  const droppedSpans = spans.length - filteredSpans.length;\n  if (droppedSpans) {\n    client?.recordDroppedEvent(\"before_send\", \"span\", droppedSpans);\n  }\n  const convertToSpanJSON = beforeSendSpan ? (span) => {\n    const spanJson = spanToJSON(span);\n    const processedSpan = !isStreamedBeforeSendSpanCallback(beforeSendSpan) ? beforeSendSpan(spanJson) : spanJson;\n    if (!processedSpan) {\n      showSpanDropWarning();\n      return spanJson;\n    }\n    return processedSpan;\n  } : spanToJSON;\n  const items = [];\n  for (const span of filteredSpans) {\n    const spanJson = convertToSpanJSON(span);\n    if (spanJson) {\n      items.push(createSpanEnvelopeItem(spanJson));\n    }\n  }\n  return createEnvelope(headers, items);\n}\n\nexport { _enhanceEventWithSdkInfo, createEventEnvelope, createSessionEnvelope, createSpanEnvelope };\n//# sourceMappingURL=envelope.js.map\n","function hasSpanStreamingEnabled(client) {\n  return client.getOptions().traceLifecycle === \"stream\";\n}\n\nexport { hasSpanStreamingEnabled };\n//# sourceMappingURL=hasSpanStreamingEnabled.js.map\n","const e=\"ai.citations\",i=\"ai.completion_tokens.used\",t=\"ai.documents\",n=\"ai.finish_reason\",r=\"ai.frequency_penalty\",a=\"ai.function_call\",s=\"ai.generation_id\",o=\"ai.input_messages\",l=\"ai.is_search_required\",p=\"ai.metadata\",c=\"ai.model_id\",u=\"ai.model.provider\",b=\"ai.pipeline.name\",g=\"ai.preamble\",d=\"ai.presence_penalty\",m=\"ai.prompt_tokens.used\",y=\"ai.raw_prompting\",_=\"ai.responses\",h=\"ai.response_format\",v=\"ai.search_queries\",f=\"ai.search_results\",S=\"ai.seed\",E=\"ai.streaming\",T=\"ai.tags\",I=\"ai.temperature\",O=\"ai.texts\",k=\"ai.tools\",A=\"ai.tool_calls\",x=\"ai.top_k\",w=\"ai.top_p\",R=\"ai.total_cost\",N=\"ai.total_tokens.used\",C=\"ai.warnings\",P=\"angular.version\",D=\"app.app_build\",L=\"app.app_identifier\",U=\"app.app_name\",M=\"app.app_start_time\",q=\"app.app_version\",G=\"app.build\",Y=\"app.identifier\",V=\"app.in_foreground\",W=\"app.name\",F=\"app_start_cold\",B=\"app.start_time\",H=\"app_start_type\",z=\"app_start_warm\",K=\"app.version\",j=\"app.vitals.frames.delay.value\",Q=\"app.vitals.frames.frozen.count\",X=\"app.vitals.frames.slow.count\",J=\"app.vitals.frames.total.count\",Z=\"app.vitals.start.cold.value\",$=\"app.vitals.start.prewarmed\",ee=\"app.vitals.start.reason\",ie=\"app.vitals.start.screen\",te=\"app.vitals.start.type\",ne=\"app.vitals.start.warm.value\",re=\"app.vitals.ttfd.value\",ae=\"app.vitals.ttid.value\",se=\"art.gc.blocking_count\",oe=\"art.gc.blocking_time\",le=\"art.gc.pre_oome_count\",pe=\"art.gc.total_count\",ce=\"art.gc.total_time\",ue=\"art.gc.waiting_time\",be=\"art.memory.free\",ge=\"art.memory.free_until_gc\",de=\"art.memory.free_until_oome\",me=\"art.memory.max\",ye=\"art.memory.total\",_e=\"aws.cloudwatch.logs.log_group\",he=\"aws.cloudwatch.logs.log_stream\",ve=\"aws.cloudwatch.logs.url\",fe=\"aws.dynamodb.attribute_definitions\",Se=\"aws.dynamodb.consistent_read\",Ee=\"aws.dynamodb.consumed_capacity\",Te=\"aws.dynamodb.count\",Ie=\"aws.dynamodb.exclusive_start_table\",Oe=\"aws.dynamodb.global_secondary_indexes\",ke=\"aws.dynamodb.global_secondary_index_updates\",Ae=\"aws.dynamodb.index_name\",xe=\"aws.dynamodb.item_collection_metrics\",we=\"aws.dynamodb.limit\",Re=\"aws.dynamodb.local_secondary_indexes\",Ne=\"aws.dynamodb.projection\",Ce=\"aws.dynamodb.provisioned_read_capacity\",Pe=\"aws.dynamodb.provisioned_write_capacity\",De=\"aws.dynamodb.scanned_count\",Le=\"aws.dynamodb.scan_forward\",Ue=\"aws.dynamodb.segment\",Me=\"aws.dynamodb.select\",qe=\"aws.dynamodb.table_count\",Ge=\"aws.dynamodb.table_names\",Ye=\"aws.dynamodb.total_segments\",Ve=\"aws.extended_request_id\",We=\"aws.kinesis.stream_name\",Fe=\"aws.kinesis.stream.name\",Be=\"aws.lambda.aws_request_id\",He=\"aws.lambda.execution_duration_in_millis\",ze=\"aws.lambda.function_name\",Ke=\"aws.lambda.function_version\",je=\"aws.lambda.invoked_arn\",Qe=\"aws.lambda.invoked_function_arn\",Xe=\"aws.lambda.remaining_time_in_millis\",Je=\"aws.log.group.names\",Ze=\"aws.log.stream.names\",$e=\"aws.request.extended_id\",ei=\"aws.request_id\",ii=\"aws.request.id\",ti=\"aws.s3.bucket\",ni=\"aws.secretsmanager.secret.arn\",ri=\"aws.sns.topic.arn\",ai=\"aws.step_functions.activity.arn\",si=\"aws.step_functions.state_machine.arn\",oi=\"blocked_main_thread\",li=\"browser.name\",pi=\"browser.performance.navigation.activation_start\",ci=\"browser.performance.time_origin\",ui=\"browser.report.type\",bi=\"browser.script.invoker\",gi=\"browser.script.invoker_type\",di=\"browser.script.source_char_position\",mi=\"browser.version\",yi=\"browser.web_vital.cls.report_event\",_i=\"browser.web_vital.cls.source.<key>\",hi=\"browser.web_vital.cls.source\",vi=\"browser.web_vital.cls.value\",fi=\"browser.web_vital.fcp.value\",Si=\"browser.web_vital.fp.value\",Ei=\"browser.web_vital.inp.value\",Ti=\"browser.web_vital.lcp.element\",Ii=\"browser.web_vital.lcp.id\",Oi=\"browser.web_vital.lcp.load_time\",ki=\"browser.web_vital.lcp.render_time\",Ai=\"browser.web_vital.lcp.report_event\",xi=\"browser.web_vital.lcp.size\",wi=\"browser.web_vital.lcp.url\",Ri=\"browser.web_vital.lcp.value\",Ni=\"browser.web_vital.ttfb.request_time\",Ci=\"browser.web_vital.ttfb.value\",Pi=\"cache.hit\",Di=\"cache.item_size\",Li=\"cache.key\",Ui=\"cache.operation\",Mi=\"cache.ttl\",qi=\"cache.write\",Gi=\"channel\",Yi=\"client.address\",Vi=\"client.port\",Wi=\"cloudflare.d1.duration\",Fi=\"cloudflare.d1.query_type\",Bi=\"cloudflare.d1.rows_read\",Hi=\"cloudflare.d1.rows_written\",zi=\"cloudflare.durable_object.query.bindings\",Ki=\"cloudflare.durable_object.response.rows_read\",ji=\"cloudflare.durable_object.response.rows_written\",Qi=\"cloudflare.r2.bucket\",Xi=\"cloudflare.r2.operation\",Ji=\"cloudflare.r2.request.delimiter\",Zi=\"cloudflare.r2.request.key\",$i=\"cloudflare.r2.request.part_number\",et=\"cloudflare.r2.request.prefix\",it=\"cloudflare.workflow.attempt\",tt=\"cloudflare.workflow.retries.backoff\",nt=\"cloudflare.workflow.retries.delay\",rt=\"cloudflare.workflow.retries.limit\",at=\"cloudflare.workflow.timeout\",st=\"cloud.account.id\",ot=\"cloud.availability_zone\",lt=\"cloud.platform\",pt=\"cloud.provider\",ct=\"cloud.region\",ut=\"cloud.resource_id\",bt=\"cls\",gt=\"cls.source.<key>\",dt=\"cls.source\",mt=\"code.filepath\",yt=\"code.file.path\",_t=\"code.function\",ht=\"code.function.name\",vt=\"code.lineno\",ft=\"code.line.number\",St=\"code.namespace\",Et=\"connectionType\",Tt=\"connection.rtt\",It=\"culture.calendar\",Ot=\"culture.display_name\",kt=\"culture.is_24_hour_format\",At=\"culture.locale\",xt=\"culture.timezone\",wt=\"db.collection.name\",Rt=\"db.driver.name\",Nt=\"db.name\",Ct=\"db.namespace\",Pt=\"db.operation\",Dt=\"db.operation.batch.size\",Lt=\"db.operation.name\",Ut=\"db.query.parameter.<key>\",Mt=\"db.query.parameter\",qt=\"db.query.summary\",Gt=\"db.query.text\",Yt=\"db.redis.connection\",Vt=\"db.redis.key\",Wt=\"db.redis.parameters\",Ft=\"db.response.status_code\",Bt=\"db.sql.bindings\",Ht=\"db.statement\",zt=\"db.stored_procedure.name\",Kt=\"db.system\",jt=\"db.system.name\",Qt=\"db.user\",Xt=\"deviceMemory\",Jt=\"device.archs\",Zt=\"device.battery_level\",$t=\"device.battery_temperature\",en=\"device.boot_time\",tn=\"device.brand\",nn=\"device.charging\",rn=\"device.chipset\",an=\"device.class\",sn=\"device.connection_type\",on=\"device.cpu_description\",ln=\"device.external_free_storage\",pn=\"device.external_storage_size\",cn=\"device.family\",un=\"device.free_memory\",bn=\"device.free_storage\",gn=\"device.id\",dn=\"device.locale\",mn=\"device.low_memory\",yn=\"device.low_power_mode\",_n=\"device.manufacturer\",hn=\"device.memory.estimated_capacity\",vn=\"device.memory_size\",fn=\"device.model\",Sn=\"device.model_id\",En=\"device.name\",Tn=\"device.online\",In=\"device.orientation\",On=\"device.processor_count\",kn=\"device.processor_frequency\",An=\"device.screen_density\",xn=\"device.screen_dpi\",wn=\"device.screen_height_pixels\",Rn=\"device.screen_width_pixels\",Nn=\"device.simulator\",Cn=\"device.storage_size\",Pn=\"device.thermal_state\",Dn=\"device.timezone\",Ln=\"device.usable_memory\",Un=\"dist\",Mn=\"effectiveConnectionType\",qn=\"environment\",Gn=\"error.type\",Yn=\"event.id\",Vn=\"event.name\",Wn=\"exception.escaped\",Fn=\"exception.message\",Bn=\"exception.stacktrace\",Hn=\"exception.type\",zn=\"faas.coldstart\",Kn=\"faas.cron\",jn=\"faas.duration_in_ms\",Qn=\"faas.entry_point\",Xn=\"faas.execution\",Jn=\"faas.id\",Zn=\"faas.identity\",$n=\"faas.invocation_id\",er=\"faas.invoked_name\",ir=\"faas.invoked_provider\",tr=\"faas.invoked_region\",nr=\"faas.name\",rr=\"faas.time\",ar=\"faas.trigger\",sr=\"faas.version\",or=\"fcp\",lr=\"flag.evaluation.<key>\",pr=\"flag.evaluation\",cr=\"fp\",ur=\"frames.delay\",br=\"frames.frozen\",gr=\"frames_frozen_rate\",dr=\"frames.slow\",mr=\"frames_slow_rate\",yr=\"frames.total\",_r=\"fs_error\",hr=\"gcp.function.context.event_id\",vr=\"gcp.function.context.event_type\",fr=\"gcp.function.context.id\",Sr=\"gcp.function.context.resource\",Er=\"gcp.function.context.source\",Tr=\"gcp.function.context.specversion\",Ir=\"gcp.function.context.time\",Or=\"gcp.function.context.timestamp\",kr=\"gcp.function.context.type\",Ar=\"gcp.project.id\",xr=\"gen_ai.agent.name\",wr=\"gen_ai.context.utilization\",Rr=\"gen_ai.context.window_size\",Nr=\"gen_ai.conversation.id\",Cr=\"gen_ai.cost.cache_creation.input_tokens\",Pr=\"gen_ai.cost.cache_read.input_tokens\",Dr=\"gen_ai.cost.input_tokens\",Lr=\"gen_ai.cost.output_tokens\",Ur=\"gen_ai.cost.reasoning.output_tokens\",Mr=\"gen_ai.cost.total_tokens\",qr=\"gen_ai.embeddings.input\",Gr=\"gen_ai.function_id\",Yr=\"gen_ai.input.messages\",Vr=\"gen_ai.operation.name\",Wr=\"gen_ai.operation.type\",Fr=\"gen_ai.output.messages\",Br=\"gen_ai.pipeline.name\",Hr=\"gen_ai.prompt\",zr=\"gen_ai.prompt.name\",Kr=\"gen_ai.provider.name\",jr=\"gen_ai.request.available_tools\",Qr=\"gen_ai.request.frequency_penalty\",Xr=\"gen_ai.request.max_tokens\",Jr=\"gen_ai.request.messages\",Zr=\"gen_ai.request.model\",$r=\"gen_ai.request.presence_penalty\",ea=\"gen_ai.request.reasoning_effort\",ia=\"gen_ai.request.seed\",ta=\"gen_ai.request.stop_sequences\",na=\"gen_ai.request.temperature\",ra=\"gen_ai.request.top_k\",aa=\"gen_ai.request.top_p\",sa=\"gen_ai.response.finish_reasons\",oa=\"gen_ai.response.id\",la=\"gen_ai.response.model\",pa=\"gen_ai.response.streaming\",ca=\"gen_ai.response.text\",ua=\"gen_ai.response.time_to_first_chunk\",ba=\"gen_ai.response.time_to_first_token\",ga=\"gen_ai.response.tokens_per_second\",da=\"gen_ai.response.tool_calls\",ma=\"gen_ai.system\",ya=\"gen_ai.system_instructions\",_a=\"gen_ai.system.message\",ha=\"gen_ai.tool.call.arguments\",va=\"gen_ai.tool.call.result\",fa=\"gen_ai.tool.definitions\",Sa=\"gen_ai.tool.description\",Ea=\"gen_ai.tool.input\",Ta=\"gen_ai.tool.message\",Ia=\"gen_ai.tool.name\",Oa=\"gen_ai.tool.output\",ka=\"gen_ai.tool.type\",Aa=\"gen_ai.usage.cache_creation.input_tokens\",xa=\"gen_ai.usage.cache_read.input_tokens\",wa=\"gen_ai.usage.completion_tokens\",Ra=\"gen_ai.usage.input_tokens\",Na=\"gen_ai.usage.input_tokens.cached\",Ca=\"gen_ai.usage.input_tokens.cache_write\",Pa=\"gen_ai.usage.output_tokens\",Da=\"gen_ai.usage.output_tokens.reasoning\",La=\"gen_ai.usage.prompt_tokens\",Ua=\"gen_ai.usage.reasoning.output_tokens\",Ma=\"gen_ai.usage.total_tokens\",qa=\"graphql.document\",Ga=\"graphql.operation.name\",Ya=\"graphql.operation.type\",Va=\"hardwareConcurrency\",Wa=\"http.client_ip\",Fa=\"http.decoded_response_content_length\",Ba=\"http.flavor\",Ha=\"http.fragment\",za=\"http.host\",Ka=\"http.method\",ja=\"http.query\",Qa=\"http.request.body.data\",Xa=\"http.request.connection_end\",Ja=\"http.request.connect_start\",Za=\"http.request.domain_lookup_end\",$a=\"http.request.domain_lookup_start\",es=\"http.request.fetch_start\",is=\"http.request.header.<key>\",ts=\"http.request.header\",ns=\"http.request.method\",rs=\"http.request_method\",as=\"http.request.redirect_end\",ss=\"http.request.redirect_start\",os=\"http.request.request_start\",ls=\"http.request.resend_count\",ps=\"http.request.response_end\",cs=\"http.request.response_start\",us=\"http.request.same_origin\",bs=\"http.request.secure_connection_start\",gs=\"http.request.time_to_first_byte\",ds=\"http.request.worker_start\",ms=\"http.response.body.size\",ys=\"http.response_content_length\",_s=\"http.response.header.content-length\",hs=\"http.response.header.<key>\",vs=\"http.response.header\",fs=\"http.response.size\",Ss=\"http.response.status_code\",Es=\"http.response_transfer_size\",Ts=\"http.route\",Is=\"http.scheme\",Os=\"http.server_name\",ks=\"http.server.request.time_in_queue\",As=\"http.status_code\",xs=\"http.target\",ws=\"http.url\",Rs=\"http.user_agent\",Ns=\"id\",Cs=\"inp\",Ps=\"jsonrpc.protocol.version\",Ds=\"jsonrpc.request.id\",Ls=\"jvm.gc.action\",Us=\"jvm.gc.name\",Ms=\"jvm.memory.pool.name\",qs=\"jvm.memory.type\",Gs=\"jvm.thread.daemon\",Ys=\"jvm.thread.state\",Vs=\"koa.name\",Ws=\"koa.type\",Fs=\"lcp\",Bs=\"lcp.element\",Hs=\"lcp.id\",zs=\"lcp.loadTime\",Ks=\"lcp.renderTime\",js=\"lcp.size\",Qs=\"lcp.url\",Xs=\"logger.name\",Js=\"mcp.cancelled.reason\",Zs=\"mcp.cancelled.request_id\",$s=\"mcp.client.name\",eo=\"mcp.client.title\",io=\"mcp.client.version\",to=\"mcp.lifecycle.phase\",no=\"mcp.logging.data_type\",ro=\"mcp.logging.level\",ao=\"mcp.logging.logger\",so=\"mcp.logging.message\",oo=\"mcp.method.name\",lo=\"mcp.progress.current\",po=\"mcp.progress.message\",co=\"mcp.progress.percentage\",uo=\"mcp.progress.token\",bo=\"mcp.progress.total\",go=\"mcp.prompt.name\",mo=\"mcp.prompt.result.description\",yo=\"mcp.prompt.result.message_content\",_o=\"mcp.prompt.result.message_count\",ho=\"mcp.prompt.result.message_role\",vo=\"mcp.protocol.ready\",fo=\"mcp.protocol.version\",So=\"mcp.request.argument.<key>\",Eo=\"mcp.request.argument\",To=\"mcp.request.argument.name\",Io=\"mcp.request.argument.uri\",Oo=\"mcp.request.id\",ko=\"mcp.resource.protocol\",Ao=\"mcp.resource.uri\",xo=\"mcp.server.name\",wo=\"mcp.server.title\",Ro=\"mcp.server.version\",No=\"mcp.session.id\",Co=\"mcp.tool.name\",Po=\"mcp.tool.result.content\",Do=\"mcp.tool.result.content_count\",Lo=\"mcp.tool.result.is_error\",Uo=\"mcp.transport\",Mo=\"mdc.<key>\",qo=\"mdc\",Go=\"messaging.batch.message_count\",Yo=\"messaging.destination\",Vo=\"messaging.destination.connection\",Wo=\"messaging.destination.name\",Fo=\"messaging.message.body.size\",Bo=\"messaging.message.conversation_id\",Ho=\"messaging.message.envelope.size\",zo=\"messaging.message.id\",Ko=\"messaging.message.receive.latency\",jo=\"messaging.message.retry.count\",Qo=\"messaging.operation.name\",Xo=\"messaging.operation.type\",Jo=\"messaging.rabbitmq.destination.routing_key\",Zo=\"messaging.system\",$o=\"method\",el=\"middleware.name\",il=\"navigation.origin\",tl=\"navigation.route.id\",nl=\"navigation.type\",rl=\"nel.elapsed_time\",al=\"nel.phase\",sl=\"nel.referrer\",ol=\"nel.sampling_function\",ll=\"nel.type\",pl=\"network.connection.effective_type\",cl=\"network.connection.rtt\",ul=\"network.connection.type\",bl=\"network.local.address\",gl=\"network.local.port\",dl=\"network.peer.address\",ml=\"network.peer.port\",yl=\"network.protocol.name\",_l=\"network.protocol.version\",hl=\"network.transport\",vl=\"network.type\",fl=\"net.host.ip\",Sl=\"net.host.name\",El=\"net.host.port\",Tl=\"net.peer.ip\",Il=\"net.peer.name\",Ol=\"net.peer.port\",kl=\"net.protocol.name\",Al=\"net.protocol.version\",xl=\"net.sock.family\",wl=\"net.sock.host.addr\",Rl=\"net.sock.host.port\",Nl=\"net.sock.peer.addr\",Cl=\"net.sock.peer.name\",Pl=\"net.sock.peer.port\",Dl=\"net.transport\",Ll=\"os.build\",Ul=\"os.build_id\",Ml=\"os.description\",ql=\"os.kernel_version\",Gl=\"os.name\",Yl=\"os.raw_description\",Vl=\"os.rooted\",Wl=\"os.theme\",Fl=\"os.type\",Bl=\"os.version\",Hl=\"otel.kind\",zl=\"otel.scope.name\",Kl=\"otel.scope.version\",jl=\"otel.status_code\",Ql=\"otel.status_description\",Xl=\"params.<key>\",Jl=\"params\",Zl=\"performance.activationStart\",$l=\"performance.timeOrigin\",ep=\"previous_route\",ip=\"process.command_args\",tp=\"process.executable.name\",np=\"process.pid\",rp=\"process.runtime.description\",ap=\"process.runtime.engine.name\",sp=\"process.runtime.engine.version\",op=\"process.runtime.name\",lp=\"process.runtime.version\",pp=\"query.<key>\",cp=\"query\",up=\"react.version\",bp=\"release\",gp=\"remix.action_form_data.<key>\",dp=\"remix.action_form_data\",mp=\"replay_id\",yp=\"resource.deployment.environment\",_p=\"resource.deployment.environment.name\",hp=\"resource.render_blocking_status\",vp=\"route\",fp=\"rpc.grpc.status_code\",Sp=\"rpc.method\",Ep=\"rpc.response.status_code\",Tp=\"rpc.service\",Ip=\"rpc.system\",Op=\"rpc.system.name\",kp=\"runtime.build\",Ap=\"runtime.name\",xp=\"runtime.raw_description\",wp=\"runtime.version\",Rp=\"score.<key>\",Np=\"score\",Cp=\"score.ratio.<key>\",Pp=\"score.ratio\",Dp=\"score.total\",Lp=\"score.weight.<key>\",Up=\"score.weight\",Mp=\"sentry.action\",qp=\"sentry.browser.name\",Gp=\"sentry.browser.version\",Yp=\"sentry.cancellation_reason\",Vp=\"sentry.category\",Wp=\"sentry.client_sample_rate\",Fp=\"sentry.description\",Bp=\"sentry.dist\",Hp=\"sentry.domain\",zp=\"sentry.dsc.environment\",Kp=\"sentry.dsc.project_id\",jp=\"sentry.dsc.public_key\",Qp=\"sentry.dsc.release\",Xp=\"sentry.dsc.sampled\",Jp=\"sentry.dsc.sample_rate\",Zp=\"sentry.dsc.trace_id\",$p=\"sentry.dsc.transaction\",ec=\"sentry.environment\",ic=\"sentry.exclusive_time\",tc=\"sentry.graphql.operation\",nc=\"sentry.group\",rc=\"sentry.http.prefetch\",ac=\"sentry.idle_span_finish_reason\",sc=\"sentry.is_remote\",oc=\"sentry.kind\",lc=\"sentry.main_thread\",pc=\"sentry.message.parameter.<key>\",cc=\"sentry.message.template\",uc=\"sentry.metric.source\",bc=\"sentry.mobile\",gc=\"sentry.module.<key>\",dc=\"sentry.module\",mc=\"sentry.nextjs.ssr.function.route\",yc=\"sentry.nextjs.ssr.function.type\",_c=\"sentry.normalized_db_query\",hc=\"sentry.normalized_db_query.hash\",vc=\"sentry.normalized_description\",fc=\"sentry.observed_timestamp_nanos\",Sc=\"sentry.op\",Ec=\"sentry.origin\",Tc=\"sentry.platform\",Ic=\"sentry.profiler_id\",Oc=\"sentry.profile_id\",kc=\"sentry.release\",Ac=\"sentry.replay_id\",xc=\"sentry.replay_is_buffering\",wc=\"sentry.report_event\",Rc=\"sentry.sdk.integrations\",Nc=\"sentry.sdk.name\",Cc=\"sentry.sdk.version\",Pc=\"sentry.segment.id\",Dc=\"sentry.segment_id\",Lc=\"sentry.segment.name\",Uc=\"sentry.server_sample_rate\",Mc=\"sentry.source\",qc=\"sentry.span.source\",Gc=\"sentry.status\",Yc=\"sentry.status_code\",Vc=\"sentry.status.message\",Wc=\"sentry.sveltekit.navigation.from\",Fc=\"sentry.sveltekit.navigation.to\",Bc=\"sentry.sveltekit.navigation.type\",Hc=\"sentry.thread.id\",zc=\"sentry.timestamp.sequence\",Kc=\"sentry.trace_lifecycle\",jc=\"sentry.trace.parent_span_id\",Qc=\"sentry.trace.status\",Xc=\"sentry.transaction\",Jc=\"sentry.user.email\",Zc=\"sentry.user.geo.city\",$c=\"sentry.user.geo.country_code\",eu=\"sentry.user.geo.region\",iu=\"sentry.user.geo.subdivision\",tu=\"sentry.user.id\",nu=\"sentry.user.ip\",ru=\"sentry.user.username\",au=\"server.address\",su=\"server_name\",ou=\"server.port\",lu=\"service.name\",pu=\"service.version\",cu=\"session.id\",uu=\"stall_percentage\",bu=\"stall_total_time\",gu=\"state.type\",du=\"thread.id\",mu=\"thread.name\",yu=\"timber.tag\",_u=\"time_to_full_display\",hu=\"time_to_initial_display\",vu=\"transaction\",fu=\"trpc.procedure_path\",Su=\"trpc.procedure_type\",Eu=\"ttfb\",Tu=\"ttfb.requestTime\",Iu=\"type\",Ou=\"ui.component_name\",ku=\"ui.contributes_to_ttfd\",Au=\"ui.contributes_to_ttid\",xu=\"ui.element.height\",wu=\"ui.element.id\",Ru=\"ui.element.identifier\",Nu=\"ui.element.load_time\",Cu=\"ui.element.paint_type\",Pu=\"ui.element.render_time\",Du=\"ui.element.type\",Lu=\"ui.element.url\",Uu=\"ui.element.width\",Mu=\"url\",qu=\"url.domain\",Gu=\"url.fragment\",Yu=\"url.full\",Vu=\"url.path\",Wu=\"url.path.parameter.<key>\",Fu=\"url.path.parameter\",Bu=\"url.port\",Hu=\"url.query\",zu=\"url.same_origin\",Ku=\"url.scheme\",ju=\"url.template\",Qu=\"user_agent.original\",Xu=\"user.email\",Ju=\"user.full_name\",Zu=\"user.geo.city\",$u=\"user.geo.country_code\",eb=\"user.geo.region\",ib=\"user.geo.subdivision\",tb=\"user.hash\",nb=\"user.id\",rb=\"user.ip_address\",ab=\"user.name\",sb=\"user.roles\",ob=\"vercel.branch\",lb=\"vercel.build_id\",pb=\"vercel.deployment_id\",cb=\"vercel.destination\",ub=\"vercel.edge_type\",bb=\"vercel.entrypoint\",gb=\"vercel.execution_region\",db=\"vercel.id\",mb=\"vercel.ja3_digest\",yb=\"vercel.ja4_digest\",_b=\"vercel.log_type\",hb=\"vercel.path\",vb=\"vercel.project_id\",fb=\"vercel.project_name\",Sb=\"vercel.proxy.cache_id\",Eb=\"vercel.proxy.client_ip\",Tb=\"vercel.proxy.host\",Ib=\"vercel.proxy.lambda_region\",Ob=\"vercel.proxy.method\",kb=\"vercel.proxy.path\",Ab=\"vercel.proxy.path_type\",xb=\"vercel.proxy.path_type_variant\",wb=\"vercel.proxy.referer\",Rb=\"vercel.proxy.region\",Nb=\"vercel.proxy.response_byte_size\",Cb=\"vercel.proxy.scheme\",Pb=\"vercel.proxy.status_code\",Db=\"vercel.proxy.timestamp\",Lb=\"vercel.proxy.user_agent\",Ub=\"vercel.proxy.vercel_cache\",Mb=\"vercel.proxy.vercel_id\",qb=\"vercel.proxy.waf_action\",Gb=\"vercel.proxy.waf_rule_id\",Yb=\"vercel.request_id\",Vb=\"vercel.source\",Wb=\"vercel.status_code\",Fb={\"ai.citations\":\"string[]\",\"ai.completion_tokens.used\":\"integer\",\"ai.documents\":\"string[]\",\"ai.finish_reason\":\"string\",\"ai.frequency_penalty\":\"double\",\"ai.function_call\":\"string\",\"ai.generation_id\":\"string\",\"ai.input_messages\":\"string\",\"ai.is_search_required\":\"boolean\",\"ai.metadata\":\"string\",\"ai.model_id\":\"string\",\"ai.model.provider\":\"string\",\"ai.pipeline.name\":\"string\",\"ai.preamble\":\"string\",\"ai.presence_penalty\":\"double\",\"ai.prompt_tokens.used\":\"integer\",\"ai.raw_prompting\":\"boolean\",\"ai.responses\":\"string[]\",\"ai.response_format\":\"string\",\"ai.search_queries\":\"string[]\",\"ai.search_results\":\"string[]\",\"ai.seed\":\"string\",\"ai.streaming\":\"boolean\",\"ai.tags\":\"string\",\"ai.temperature\":\"double\",\"ai.texts\":\"string[]\",\"ai.tools\":\"string[]\",\"ai.tool_calls\":\"string[]\",\"ai.top_k\":\"integer\",\"ai.top_p\":\"double\",\"ai.total_cost\":\"double\",\"ai.total_tokens.used\":\"integer\",\"ai.warnings\":\"string[]\",\"angular.version\":\"string\",\"app.app_build\":\"string\",\"app.app_identifier\":\"string\",\"app.app_name\":\"string\",\"app.app_start_time\":\"string\",\"app.app_version\":\"string\",\"app.build\":\"string\",\"app.identifier\":\"string\",\"app.in_foreground\":\"boolean\",\"app.name\":\"string\",app_start_cold:\"double\",\"app.start_time\":\"string\",app_start_type:\"string\",app_start_warm:\"double\",\"app.version\":\"string\",\"app.vitals.frames.delay.value\":\"integer\",\"app.vitals.frames.frozen.count\":\"integer\",\"app.vitals.frames.slow.count\":\"integer\",\"app.vitals.frames.total.count\":\"integer\",\"app.vitals.start.cold.value\":\"double\",\"app.vitals.start.prewarmed\":\"boolean\",\"app.vitals.start.reason\":\"string\",\"app.vitals.start.screen\":\"string\",\"app.vitals.start.type\":\"string\",\"app.vitals.start.warm.value\":\"double\",\"app.vitals.ttfd.value\":\"double\",\"app.vitals.ttid.value\":\"double\",\"art.gc.blocking_count\":\"integer\",\"art.gc.blocking_time\":\"double\",\"art.gc.pre_oome_count\":\"integer\",\"art.gc.total_count\":\"integer\",\"art.gc.total_time\":\"double\",\"art.gc.waiting_time\":\"double\",\"art.memory.free\":\"integer\",\"art.memory.free_until_gc\":\"integer\",\"art.memory.free_until_oome\":\"integer\",\"art.memory.max\":\"integer\",\"art.memory.total\":\"integer\",\"aws.cloudwatch.logs.log_group\":\"string\",\"aws.cloudwatch.logs.log_stream\":\"string\",\"aws.cloudwatch.logs.url\":\"string\",\"aws.dynamodb.attribute_definitions\":\"string[]\",\"aws.dynamodb.consistent_read\":\"boolean\",\"aws.dynamodb.consumed_capacity\":\"string[]\",\"aws.dynamodb.count\":\"integer\",\"aws.dynamodb.exclusive_start_table\":\"string\",\"aws.dynamodb.global_secondary_indexes\":\"string[]\",\"aws.dynamodb.global_secondary_index_updates\":\"string[]\",\"aws.dynamodb.index_name\":\"string\",\"aws.dynamodb.item_collection_metrics\":\"string\",\"aws.dynamodb.limit\":\"integer\",\"aws.dynamodb.local_secondary_indexes\":\"string[]\",\"aws.dynamodb.projection\":\"string\",\"aws.dynamodb.provisioned_read_capacity\":\"double\",\"aws.dynamodb.provisioned_write_capacity\":\"double\",\"aws.dynamodb.scanned_count\":\"integer\",\"aws.dynamodb.scan_forward\":\"boolean\",\"aws.dynamodb.segment\":\"integer\",\"aws.dynamodb.select\":\"string\",\"aws.dynamodb.table_count\":\"integer\",\"aws.dynamodb.table_names\":\"string[]\",\"aws.dynamodb.total_segments\":\"integer\",\"aws.extended_request_id\":\"string\",\"aws.kinesis.stream_name\":\"string\",\"aws.kinesis.stream.name\":\"string\",\"aws.lambda.aws_request_id\":\"string\",\"aws.lambda.execution_duration_in_millis\":\"double\",\"aws.lambda.function_name\":\"string\",\"aws.lambda.function_version\":\"string\",\"aws.lambda.invoked_arn\":\"string\",\"aws.lambda.invoked_function_arn\":\"string\",\"aws.lambda.remaining_time_in_millis\":\"double\",\"aws.log.group.names\":\"string[]\",\"aws.log.stream.names\":\"string[]\",\"aws.request.extended_id\":\"string\",\"aws.request_id\":\"string\",\"aws.request.id\":\"string\",\"aws.s3.bucket\":\"string\",\"aws.secretsmanager.secret.arn\":\"string\",\"aws.sns.topic.arn\":\"string\",\"aws.step_functions.activity.arn\":\"string\",\"aws.step_functions.state_machine.arn\":\"string\",blocked_main_thread:\"boolean\",\"browser.name\":\"string\",\"browser.performance.navigation.activation_start\":\"double\",\"browser.performance.time_origin\":\"double\",\"browser.report.type\":\"string\",\"browser.script.invoker\":\"string\",\"browser.script.invoker_type\":\"string\",\"browser.script.source_char_position\":\"integer\",\"browser.version\":\"string\",\"browser.web_vital.cls.report_event\":\"string\",\"browser.web_vital.cls.source.<key>\":\"string\",\"browser.web_vital.cls.value\":\"double\",\"browser.web_vital.fcp.value\":\"double\",\"browser.web_vital.fp.value\":\"double\",\"browser.web_vital.inp.value\":\"double\",\"browser.web_vital.lcp.element\":\"string\",\"browser.web_vital.lcp.id\":\"string\",\"browser.web_vital.lcp.load_time\":\"integer\",\"browser.web_vital.lcp.render_time\":\"integer\",\"browser.web_vital.lcp.report_event\":\"string\",\"browser.web_vital.lcp.size\":\"integer\",\"browser.web_vital.lcp.url\":\"string\",\"browser.web_vital.lcp.value\":\"double\",\"browser.web_vital.ttfb.request_time\":\"double\",\"browser.web_vital.ttfb.value\":\"double\",\"cache.hit\":\"boolean\",\"cache.item_size\":\"integer\",\"cache.key\":\"string[]\",\"cache.operation\":\"string\",\"cache.ttl\":\"integer\",\"cache.write\":\"boolean\",channel:\"string\",\"client.address\":\"string\",\"client.port\":\"integer\",\"cloudflare.d1.duration\":\"integer\",\"cloudflare.d1.query_type\":\"string\",\"cloudflare.d1.rows_read\":\"integer\",\"cloudflare.d1.rows_written\":\"integer\",\"cloudflare.durable_object.query.bindings\":\"integer\",\"cloudflare.durable_object.response.rows_read\":\"integer\",\"cloudflare.durable_object.response.rows_written\":\"integer\",\"cloudflare.r2.bucket\":\"string\",\"cloudflare.r2.operation\":\"string\",\"cloudflare.r2.request.delimiter\":\"string\",\"cloudflare.r2.request.key\":\"string\",\"cloudflare.r2.request.part_number\":\"integer\",\"cloudflare.r2.request.prefix\":\"string\",\"cloudflare.workflow.attempt\":\"integer\",\"cloudflare.workflow.retries.backoff\":\"string\",\"cloudflare.workflow.retries.delay\":\"string\",\"cloudflare.workflow.retries.limit\":\"integer\",\"cloudflare.workflow.timeout\":\"string\",\"cloud.account.id\":\"string\",\"cloud.availability_zone\":\"string\",\"cloud.platform\":\"string\",\"cloud.provider\":\"string\",\"cloud.region\":\"string\",\"cloud.resource_id\":\"string\",cls:\"double\",\"cls.source.<key>\":\"string\",\"code.filepath\":\"string\",\"code.file.path\":\"string\",\"code.function\":\"string\",\"code.function.name\":\"string\",\"code.lineno\":\"integer\",\"code.line.number\":\"integer\",\"code.namespace\":\"string\",connectionType:\"string\",\"connection.rtt\":\"integer\",\"culture.calendar\":\"string\",\"culture.display_name\":\"string\",\"culture.is_24_hour_format\":\"boolean\",\"culture.locale\":\"string\",\"culture.timezone\":\"string\",\"db.collection.name\":\"string\",\"db.driver.name\":\"string\",\"db.name\":\"string\",\"db.namespace\":\"string\",\"db.operation\":\"string\",\"db.operation.batch.size\":\"integer\",\"db.operation.name\":\"string\",\"db.query.parameter.<key>\":\"string\",\"db.query.summary\":\"string\",\"db.query.text\":\"string\",\"db.redis.connection\":\"string\",\"db.redis.key\":\"string\",\"db.redis.parameters\":\"string[]\",\"db.response.status_code\":\"string\",\"db.sql.bindings\":\"string[]\",\"db.statement\":\"string\",\"db.stored_procedure.name\":\"string\",\"db.system\":\"string\",\"db.system.name\":\"string\",\"db.user\":\"string\",deviceMemory:\"string\",\"device.archs\":\"string[]\",\"device.battery_level\":\"double\",\"device.battery_temperature\":\"double\",\"device.boot_time\":\"string\",\"device.brand\":\"string\",\"device.charging\":\"boolean\",\"device.chipset\":\"string\",\"device.class\":\"string\",\"device.connection_type\":\"string\",\"device.cpu_description\":\"string\",\"device.external_free_storage\":\"integer\",\"device.external_storage_size\":\"integer\",\"device.family\":\"string\",\"device.free_memory\":\"integer\",\"device.free_storage\":\"integer\",\"device.id\":\"string\",\"device.locale\":\"string\",\"device.low_memory\":\"boolean\",\"device.low_power_mode\":\"boolean\",\"device.manufacturer\":\"string\",\"device.memory.estimated_capacity\":\"integer\",\"device.memory_size\":\"integer\",\"device.model\":\"string\",\"device.model_id\":\"string\",\"device.name\":\"string\",\"device.online\":\"boolean\",\"device.orientation\":\"string\",\"device.processor_count\":\"integer\",\"device.processor_frequency\":\"double\",\"device.screen_density\":\"double\",\"device.screen_dpi\":\"integer\",\"device.screen_height_pixels\":\"integer\",\"device.screen_width_pixels\":\"integer\",\"device.simulator\":\"boolean\",\"device.storage_size\":\"integer\",\"device.thermal_state\":\"string\",\"device.timezone\":\"string\",\"device.usable_memory\":\"integer\",dist:\"string\",effectiveConnectionType:\"string\",environment:\"string\",\"error.type\":\"string\",\"event.id\":\"integer\",\"event.name\":\"string\",\"exception.escaped\":\"boolean\",\"exception.message\":\"string\",\"exception.stacktrace\":\"string\",\"exception.type\":\"string\",\"faas.coldstart\":\"boolean\",\"faas.cron\":\"string\",\"faas.duration_in_ms\":\"integer\",\"faas.entry_point\":\"string\",\"faas.execution\":\"string\",\"faas.id\":\"string\",\"faas.identity\":\"string\",\"faas.invocation_id\":\"string\",\"faas.invoked_name\":\"string\",\"faas.invoked_provider\":\"string\",\"faas.invoked_region\":\"string\",\"faas.name\":\"string\",\"faas.time\":\"string\",\"faas.trigger\":\"string\",\"faas.version\":\"string\",fcp:\"double\",\"flag.evaluation.<key>\":\"boolean\",fp:\"double\",\"frames.delay\":\"integer\",\"frames.frozen\":\"integer\",frames_frozen_rate:\"double\",\"frames.slow\":\"integer\",frames_slow_rate:\"double\",\"frames.total\":\"integer\",fs_error:\"string\",\"gcp.function.context.event_id\":\"string\",\"gcp.function.context.event_type\":\"string\",\"gcp.function.context.id\":\"string\",\"gcp.function.context.resource\":\"string\",\"gcp.function.context.source\":\"string\",\"gcp.function.context.specversion\":\"string\",\"gcp.function.context.time\":\"string\",\"gcp.function.context.timestamp\":\"string\",\"gcp.function.context.type\":\"string\",\"gcp.project.id\":\"string\",\"gen_ai.agent.name\":\"string\",\"gen_ai.context.utilization\":\"double\",\"gen_ai.context.window_size\":\"integer\",\"gen_ai.conversation.id\":\"string\",\"gen_ai.cost.cache_creation.input_tokens\":\"double\",\"gen_ai.cost.cache_read.input_tokens\":\"double\",\"gen_ai.cost.input_tokens\":\"double\",\"gen_ai.cost.output_tokens\":\"double\",\"gen_ai.cost.reasoning.output_tokens\":\"double\",\"gen_ai.cost.total_tokens\":\"double\",\"gen_ai.embeddings.input\":\"string\",\"gen_ai.function_id\":\"string\",\"gen_ai.input.messages\":\"string\",\"gen_ai.operation.name\":\"string\",\"gen_ai.operation.type\":\"string\",\"gen_ai.output.messages\":\"string\",\"gen_ai.pipeline.name\":\"string\",\"gen_ai.prompt\":\"string\",\"gen_ai.prompt.name\":\"string\",\"gen_ai.provider.name\":\"string\",\"gen_ai.request.available_tools\":\"string\",\"gen_ai.request.frequency_penalty\":\"double\",\"gen_ai.request.max_tokens\":\"integer\",\"gen_ai.request.messages\":\"string\",\"gen_ai.request.model\":\"string\",\"gen_ai.request.presence_penalty\":\"double\",\"gen_ai.request.reasoning_effort\":\"string\",\"gen_ai.request.seed\":\"string\",\"gen_ai.request.stop_sequences\":\"string[]\",\"gen_ai.request.temperature\":\"double\",\"gen_ai.request.top_k\":\"integer\",\"gen_ai.request.top_p\":\"double\",\"gen_ai.response.finish_reasons\":\"string\",\"gen_ai.response.id\":\"string\",\"gen_ai.response.model\":\"string\",\"gen_ai.response.streaming\":\"boolean\",\"gen_ai.response.text\":\"string\",\"gen_ai.response.time_to_first_chunk\":\"double\",\"gen_ai.response.time_to_first_token\":\"double\",\"gen_ai.response.tokens_per_second\":\"double\",\"gen_ai.response.tool_calls\":\"string\",\"gen_ai.system\":\"string\",\"gen_ai.system_instructions\":\"string\",\"gen_ai.system.message\":\"string\",\"gen_ai.tool.call.arguments\":\"string\",\"gen_ai.tool.call.result\":\"string\",\"gen_ai.tool.definitions\":\"string\",\"gen_ai.tool.description\":\"string\",\"gen_ai.tool.input\":\"string\",\"gen_ai.tool.message\":\"string\",\"gen_ai.tool.name\":\"string\",\"gen_ai.tool.output\":\"string\",\"gen_ai.tool.type\":\"string\",\"gen_ai.usage.cache_creation.input_tokens\":\"integer\",\"gen_ai.usage.cache_read.input_tokens\":\"integer\",\"gen_ai.usage.completion_tokens\":\"integer\",\"gen_ai.usage.input_tokens\":\"integer\",\"gen_ai.usage.input_tokens.cached\":\"integer\",\"gen_ai.usage.input_tokens.cache_write\":\"integer\",\"gen_ai.usage.output_tokens\":\"integer\",\"gen_ai.usage.output_tokens.reasoning\":\"integer\",\"gen_ai.usage.prompt_tokens\":\"integer\",\"gen_ai.usage.reasoning.output_tokens\":\"integer\",\"gen_ai.usage.total_tokens\":\"integer\",\"graphql.document\":\"string\",\"graphql.operation.name\":\"string\",\"graphql.operation.type\":\"string\",hardwareConcurrency:\"string\",\"http.client_ip\":\"string\",\"http.decoded_response_content_length\":\"integer\",\"http.flavor\":\"string\",\"http.fragment\":\"string\",\"http.host\":\"string\",\"http.method\":\"string\",\"http.query\":\"string\",\"http.request.body.data\":\"string\",\"http.request.connection_end\":\"double\",\"http.request.connect_start\":\"double\",\"http.request.domain_lookup_end\":\"double\",\"http.request.domain_lookup_start\":\"double\",\"http.request.fetch_start\":\"double\",\"http.request.header.<key>\":\"string[]\",\"http.request.method\":\"string\",\"http.request_method\":\"string\",\"http.request.redirect_end\":\"double\",\"http.request.redirect_start\":\"double\",\"http.request.request_start\":\"double\",\"http.request.resend_count\":\"integer\",\"http.request.response_end\":\"double\",\"http.request.response_start\":\"double\",\"http.request.same_origin\":\"boolean\",\"http.request.secure_connection_start\":\"double\",\"http.request.time_to_first_byte\":\"double\",\"http.request.worker_start\":\"double\",\"http.response.body.size\":\"integer\",\"http.response_content_length\":\"integer\",\"http.response.header.content-length\":\"string\",\"http.response.header.<key>\":\"string[]\",\"http.response.size\":\"integer\",\"http.response.status_code\":\"integer\",\"http.response_transfer_size\":\"integer\",\"http.route\":\"string\",\"http.scheme\":\"string\",\"http.server_name\":\"string\",\"http.server.request.time_in_queue\":\"double\",\"http.status_code\":\"integer\",\"http.target\":\"string\",\"http.url\":\"string\",\"http.user_agent\":\"string\",id:\"string\",inp:\"double\",\"jsonrpc.protocol.version\":\"string\",\"jsonrpc.request.id\":\"string\",\"jvm.gc.action\":\"string\",\"jvm.gc.name\":\"string\",\"jvm.memory.pool.name\":\"string\",\"jvm.memory.type\":\"string\",\"jvm.thread.daemon\":\"boolean\",\"jvm.thread.state\":\"string\",\"koa.name\":\"string\",\"koa.type\":\"string\",lcp:\"double\",\"lcp.element\":\"string\",\"lcp.id\":\"string\",\"lcp.loadTime\":\"integer\",\"lcp.renderTime\":\"integer\",\"lcp.size\":\"integer\",\"lcp.url\":\"string\",\"logger.name\":\"string\",\"mcp.cancelled.reason\":\"string\",\"mcp.cancelled.request_id\":\"string\",\"mcp.client.name\":\"string\",\"mcp.client.title\":\"string\",\"mcp.client.version\":\"string\",\"mcp.lifecycle.phase\":\"string\",\"mcp.logging.data_type\":\"string\",\"mcp.logging.level\":\"string\",\"mcp.logging.logger\":\"string\",\"mcp.logging.message\":\"string\",\"mcp.method.name\":\"string\",\"mcp.progress.current\":\"integer\",\"mcp.progress.message\":\"string\",\"mcp.progress.percentage\":\"double\",\"mcp.progress.token\":\"string\",\"mcp.progress.total\":\"integer\",\"mcp.prompt.name\":\"string\",\"mcp.prompt.result.description\":\"string\",\"mcp.prompt.result.message_content\":\"string\",\"mcp.prompt.result.message_count\":\"integer\",\"mcp.prompt.result.message_role\":\"string\",\"mcp.protocol.ready\":\"integer\",\"mcp.protocol.version\":\"string\",\"mcp.request.argument.<key>\":\"string\",\"mcp.request.argument.name\":\"string\",\"mcp.request.argument.uri\":\"string\",\"mcp.request.id\":\"string\",\"mcp.resource.protocol\":\"string\",\"mcp.resource.uri\":\"string\",\"mcp.server.name\":\"string\",\"mcp.server.title\":\"string\",\"mcp.server.version\":\"string\",\"mcp.session.id\":\"string\",\"mcp.tool.name\":\"string\",\"mcp.tool.result.content\":\"string\",\"mcp.tool.result.content_count\":\"integer\",\"mcp.tool.result.is_error\":\"boolean\",\"mcp.transport\":\"string\",\"mdc.<key>\":\"string\",\"messaging.batch.message_count\":\"integer\",\"messaging.destination\":\"string\",\"messaging.destination.connection\":\"string\",\"messaging.destination.name\":\"string\",\"messaging.message.body.size\":\"integer\",\"messaging.message.conversation_id\":\"string\",\"messaging.message.envelope.size\":\"integer\",\"messaging.message.id\":\"string\",\"messaging.message.receive.latency\":\"integer\",\"messaging.message.retry.count\":\"integer\",\"messaging.operation.name\":\"string\",\"messaging.operation.type\":\"string\",\"messaging.rabbitmq.destination.routing_key\":\"string\",\"messaging.system\":\"string\",method:\"string\",\"middleware.name\":\"string\",\"navigation.origin\":\"string\",\"navigation.route.id\":\"string\",\"navigation.type\":\"string\",\"nel.elapsed_time\":\"integer\",\"nel.phase\":\"string\",\"nel.referrer\":\"string\",\"nel.sampling_function\":\"double\",\"nel.type\":\"string\",\"network.connection.effective_type\":\"string\",\"network.connection.rtt\":\"integer\",\"network.connection.type\":\"string\",\"network.local.address\":\"string\",\"network.local.port\":\"integer\",\"network.peer.address\":\"string\",\"network.peer.port\":\"integer\",\"network.protocol.name\":\"string\",\"network.protocol.version\":\"string\",\"network.transport\":\"string\",\"network.type\":\"string\",\"net.host.ip\":\"string\",\"net.host.name\":\"string\",\"net.host.port\":\"integer\",\"net.peer.ip\":\"string\",\"net.peer.name\":\"string\",\"net.peer.port\":\"integer\",\"net.protocol.name\":\"string\",\"net.protocol.version\":\"string\",\"net.sock.family\":\"string\",\"net.sock.host.addr\":\"string\",\"net.sock.host.port\":\"integer\",\"net.sock.peer.addr\":\"string\",\"net.sock.peer.name\":\"string\",\"net.sock.peer.port\":\"integer\",\"net.transport\":\"string\",\"os.build\":\"string\",\"os.build_id\":\"string\",\"os.description\":\"string\",\"os.kernel_version\":\"string\",\"os.name\":\"string\",\"os.raw_description\":\"string\",\"os.rooted\":\"boolean\",\"os.theme\":\"string\",\"os.type\":\"string\",\"os.version\":\"string\",\"otel.kind\":\"string\",\"otel.scope.name\":\"string\",\"otel.scope.version\":\"string\",\"otel.status_code\":\"string\",\"otel.status_description\":\"string\",\"params.<key>\":\"string\",\"performance.activationStart\":\"double\",\"performance.timeOrigin\":\"double\",previous_route:\"string\",\"process.command_args\":\"string[]\",\"process.executable.name\":\"string\",\"process.pid\":\"integer\",\"process.runtime.description\":\"string\",\"process.runtime.engine.name\":\"string\",\"process.runtime.engine.version\":\"string\",\"process.runtime.name\":\"string\",\"process.runtime.version\":\"string\",\"query.<key>\":\"string\",\"react.version\":\"string\",release:\"string\",\"remix.action_form_data.<key>\":\"string\",replay_id:\"string\",\"resource.deployment.environment\":\"string\",\"resource.deployment.environment.name\":\"string\",\"resource.render_blocking_status\":\"string\",route:\"string\",\"rpc.grpc.status_code\":\"integer\",\"rpc.method\":\"string\",\"rpc.response.status_code\":\"string\",\"rpc.service\":\"string\",\"rpc.system\":\"string\",\"rpc.system.name\":\"string\",\"runtime.build\":\"string\",\"runtime.name\":\"string\",\"runtime.raw_description\":\"string\",\"runtime.version\":\"string\",\"score.<key>\":\"double\",\"score.ratio.<key>\":\"double\",\"score.total\":\"double\",\"score.weight.<key>\":\"double\",\"sentry.action\":\"string\",\"sentry.browser.name\":\"string\",\"sentry.browser.version\":\"string\",\"sentry.cancellation_reason\":\"string\",\"sentry.category\":\"string\",\"sentry.client_sample_rate\":\"double\",\"sentry.description\":\"string\",\"sentry.dist\":\"string\",\"sentry.domain\":\"string\",\"sentry.dsc.environment\":\"string\",\"sentry.dsc.project_id\":\"string\",\"sentry.dsc.public_key\":\"string\",\"sentry.dsc.release\":\"string\",\"sentry.dsc.sampled\":\"boolean\",\"sentry.dsc.sample_rate\":\"string\",\"sentry.dsc.trace_id\":\"string\",\"sentry.dsc.transaction\":\"string\",\"sentry.environment\":\"string\",\"sentry.exclusive_time\":\"double\",\"sentry.graphql.operation\":\"string\",\"sentry.group\":\"string\",\"sentry.http.prefetch\":\"boolean\",\"sentry.idle_span_finish_reason\":\"string\",\"sentry.is_remote\":\"boolean\",\"sentry.kind\":\"string\",\"sentry.main_thread\":\"boolean\",\"sentry.message.parameter.<key>\":\"string\",\"sentry.message.template\":\"string\",\"sentry.metric.source\":\"string\",\"sentry.mobile\":\"boolean\",\"sentry.module.<key>\":\"string\",\"sentry.nextjs.ssr.function.route\":\"string\",\"sentry.nextjs.ssr.function.type\":\"string\",\"sentry.normalized_db_query\":\"string\",\"sentry.normalized_db_query.hash\":\"string\",\"sentry.normalized_description\":\"string\",\"sentry.observed_timestamp_nanos\":\"string\",\"sentry.op\":\"string\",\"sentry.origin\":\"string\",\"sentry.platform\":\"string\",\"sentry.profiler_id\":\"string\",\"sentry.profile_id\":\"string\",\"sentry.release\":\"string\",\"sentry.replay_id\":\"string\",\"sentry.replay_is_buffering\":\"boolean\",\"sentry.report_event\":\"string\",\"sentry.sdk.integrations\":\"string[]\",\"sentry.sdk.name\":\"string\",\"sentry.sdk.version\":\"string\",\"sentry.segment.id\":\"string\",\"sentry.segment_id\":\"string\",\"sentry.segment.name\":\"string\",\"sentry.server_sample_rate\":\"double\",\"sentry.source\":\"string\",\"sentry.span.source\":\"string\",\"sentry.status\":\"string\",\"sentry.status_code\":\"integer\",\"sentry.status.message\":\"string\",\"sentry.sveltekit.navigation.from\":\"string\",\"sentry.sveltekit.navigation.to\":\"string\",\"sentry.sveltekit.navigation.type\":\"string\",\"sentry.thread.id\":\"integer\",\"sentry.timestamp.sequence\":\"integer\",\"sentry.trace_lifecycle\":\"string\",\"sentry.trace.parent_span_id\":\"string\",\"sentry.trace.status\":\"string\",\"sentry.transaction\":\"string\",\"sentry.user.email\":\"string\",\"sentry.user.geo.city\":\"string\",\"sentry.user.geo.country_code\":\"string\",\"sentry.user.geo.region\":\"string\",\"sentry.user.geo.subdivision\":\"string\",\"sentry.user.id\":\"string\",\"sentry.user.ip\":\"string\",\"sentry.user.username\":\"string\",\"server.address\":\"string\",server_name:\"string\",\"server.port\":\"integer\",\"service.name\":\"string\",\"service.version\":\"string\",\"session.id\":\"string\",stall_percentage:\"double\",stall_total_time:\"double\",\"state.type\":\"string\",\"thread.id\":\"integer\",\"thread.name\":\"string\",\"timber.tag\":\"string\",time_to_full_display:\"double\",time_to_initial_display:\"double\",transaction:\"string\",\"trpc.procedure_path\":\"string\",\"trpc.procedure_type\":\"string\",ttfb:\"double\",\"ttfb.requestTime\":\"double\",type:\"string\",\"ui.component_name\":\"string\",\"ui.contributes_to_ttfd\":\"boolean\",\"ui.contributes_to_ttid\":\"boolean\",\"ui.element.height\":\"integer\",\"ui.element.id\":\"string\",\"ui.element.identifier\":\"string\",\"ui.element.load_time\":\"double\",\"ui.element.paint_type\":\"string\",\"ui.element.render_time\":\"double\",\"ui.element.type\":\"string\",\"ui.element.url\":\"string\",\"ui.element.width\":\"integer\",url:\"string\",\"url.domain\":\"string\",\"url.fragment\":\"string\",\"url.full\":\"string\",\"url.path\":\"string\",\"url.path.parameter.<key>\":\"string\",\"url.port\":\"integer\",\"url.query\":\"string\",\"url.same_origin\":\"boolean\",\"url.scheme\":\"string\",\"url.template\":\"string\",\"user_agent.original\":\"string\",\"user.email\":\"string\",\"user.full_name\":\"string\",\"user.geo.city\":\"string\",\"user.geo.country_code\":\"string\",\"user.geo.region\":\"string\",\"user.geo.subdivision\":\"string\",\"user.hash\":\"string\",\"user.id\":\"string\",\"user.ip_address\":\"string\",\"user.name\":\"string\",\"user.roles\":\"string[]\",\"vercel.branch\":\"string\",\"vercel.build_id\":\"string\",\"vercel.deployment_id\":\"string\",\"vercel.destination\":\"string\",\"vercel.edge_type\":\"string\",\"vercel.entrypoint\":\"string\",\"vercel.execution_region\":\"string\",\"vercel.id\":\"string\",\"vercel.ja3_digest\":\"string\",\"vercel.ja4_digest\":\"string\",\"vercel.log_type\":\"string\",\"vercel.path\":\"string\",\"vercel.project_id\":\"string\",\"vercel.project_name\":\"string\",\"vercel.proxy.cache_id\":\"string\",\"vercel.proxy.client_ip\":\"string\",\"vercel.proxy.host\":\"string\",\"vercel.proxy.lambda_region\":\"string\",\"vercel.proxy.method\":\"string\",\"vercel.proxy.path\":\"string\",\"vercel.proxy.path_type\":\"string\",\"vercel.proxy.path_type_variant\":\"string\",\"vercel.proxy.referer\":\"string\",\"vercel.proxy.region\":\"string\",\"vercel.proxy.response_byte_size\":\"integer\",\"vercel.proxy.scheme\":\"string\",\"vercel.proxy.status_code\":\"integer\",\"vercel.proxy.timestamp\":\"integer\",\"vercel.proxy.user_agent\":\"string[]\",\"vercel.proxy.vercel_cache\":\"string\",\"vercel.proxy.vercel_id\":\"string\",\"vercel.proxy.waf_action\":\"string\",\"vercel.proxy.waf_rule_id\":\"string\",\"vercel.request_id\":\"string\",\"vercel.source\":\"string\",\"vercel.status_code\":\"integer\"},Bb={\"ai.citations\":{brief:\"References or sources cited by the AI model in its response.\",type:\"string[]\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:[\"Citation 1\",\"Citation 2\"],deprecation:{},changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.1.0\",prs:[55]}]},\"ai.completion_tokens.used\":{brief:\"The number of tokens used to respond to the message.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:10,deprecation:{replacement:\"gen_ai.usage.output_tokens\"},aliases:[\"gen_ai.usage.output_tokens\",\"gen_ai.usage.completion_tokens\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[57,61]},{version:\"0.0.0\"}]},\"ai.documents\":{brief:\"Documents or content chunks used as context for the AI model.\",type:\"string[]\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:[\"document1.txt\",\"document2.pdf\"],deprecation:{},changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.1.0\",prs:[55]}]},\"ai.finish_reason\":{brief:\"The reason why the model stopped generating.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"COMPLETE\",deprecation:{replacement:\"gen_ai.response.finish_reasons\"},aliases:[\"gen_ai.response.finish_reasons\"],changelog:[{version:\"0.1.0\",prs:[55,57,61,108,127]}]},\"ai.frequency_penalty\":{brief:\"Used to reduce repetitiveness of generated tokens. The higher the value, the stronger a penalty is applied to previously present tokens, proportional to how many times they have already appeared in the prompt or prior generation.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:.5,deprecation:{replacement:\"gen_ai.request.frequency_penalty\"},aliases:[\"gen_ai.request.frequency_penalty\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[55,57,61,108]}]},\"ai.function_call\":{brief:\"For an AI model call, the function that was called. This is deprecated for OpenAI, and replaced by tool_calls\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"function_name\",deprecation:{replacement:\"gen_ai.tool.name\"},aliases:[\"gen_ai.tool.name\",\"mcp.tool.name\"],changelog:[{version:\"0.1.0\",prs:[55,57,61,108]}]},\"ai.generation_id\":{brief:\"Unique identifier for the completion.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"gen_123abc\",deprecation:{replacement:\"gen_ai.response.id\"},aliases:[\"gen_ai.response.id\"],changelog:[{version:\"0.1.0\",prs:[55,57,61,108,127]}]},\"ai.input_messages\":{brief:\"The input messages sent to the model\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:'[{\"role\": \"user\", \"message\": \"hello\"}]',deprecation:{replacement:\"gen_ai.input.messages\"},aliases:[\"gen_ai.request.messages\"],changelog:[{version:\"0.1.0\",prs:[65,119]},{version:\"0.0.0\"}]},\"ai.is_search_required\":{brief:\"Boolean indicating if the model needs to perform a search.\",type:\"boolean\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!1,deprecation:{},changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.1.0\",prs:[55]}]},\"ai.metadata\":{brief:\"Extra metadata passed to an AI pipeline step.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:'{\"user_id\": 123, \"session_id\": \"abc123\"}',deprecation:{},changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.1.0\",prs:[55,127]}]},\"ai.model_id\":{brief:\"The vendor-specific ID of the model used.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"gpt-4\",deprecation:{replacement:\"gen_ai.response.model\"},aliases:[\"gen_ai.response.model\"],changelog:[{version:\"0.1.0\",prs:[57,61,127]},{version:\"0.0.0\"}]},\"ai.model.provider\":{brief:\"The provider of the model.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"openai\",deprecation:{replacement:\"gen_ai.provider.name\"},aliases:[\"gen_ai.provider.name\",\"gen_ai.system\"],changelog:[{version:\"0.4.0\",prs:[253]},{version:\"0.1.0\",prs:[57,61,108,127]}]},\"ai.pipeline.name\":{brief:\"The name of the AI pipeline.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Autofix Pipeline\",deprecation:{replacement:\"gen_ai.pipeline.name\"},aliases:[\"gen_ai.pipeline.name\"],changelog:[{version:\"0.1.0\",prs:[53,76,108,127]}]},\"ai.preamble\":{brief:\"For an AI model call, the preamble parameter. Preambles are a part of the prompt used to adjust the model's overall behavior and conversation style.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"You are now a clown.\",deprecation:{replacement:\"gen_ai.system_instructions\"},aliases:[\"gen_ai.system_instructions\"],changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.1.0\",prs:[55]}]},\"ai.presence_penalty\":{brief:\"Used to reduce repetitiveness of generated tokens. Similar to frequency_penalty, except that this penalty is applied equally to all tokens that have already appeared, regardless of their exact frequencies.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:.5,deprecation:{replacement:\"gen_ai.request.presence_penalty\"},aliases:[\"gen_ai.request.presence_penalty\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[55,57,61,108]}]},\"ai.prompt_tokens.used\":{brief:\"The number of tokens used to process just the prompt.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:20,deprecation:{replacement:\"gen_ai.usage.input_tokens\"},aliases:[\"gen_ai.usage.prompt_tokens\",\"gen_ai.usage.input_tokens\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[57,61]},{version:\"0.0.0\"}]},\"ai.raw_prompting\":{brief:\"When enabled, the user\\u2019s prompt will be sent to the model without any pre-processing.\",type:\"boolean\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,deprecation:{},changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.1.0\",prs:[55]}]},\"ai.responses\":{brief:\"The response messages sent back by the AI model.\",type:\"string[]\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:[\"hello\",\"world\"],deprecation:{replacement:\"gen_ai.output.messages\"},changelog:[{version:\"0.1.0\",prs:[65,127]},{version:\"0.0.0\"}]},\"ai.response_format\":{brief:\"For an AI model call, the format of the response\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"json_object\",deprecation:{},changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.1.0\",prs:[55,127]}]},\"ai.search_queries\":{brief:\"Queries used to search for relevant context or documents.\",type:\"string[]\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:[\"climate change effects\",\"renewable energy\"],deprecation:{},changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.1.0\",prs:[55]}]},\"ai.search_results\":{brief:\"Results returned from search queries for context.\",type:\"string[]\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:[\"search_result_1, search_result_2\"],deprecation:{},changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.1.0\",prs:[55]}]},\"ai.seed\":{brief:\"The seed, ideally models given the same seed and same other parameters will produce the exact same output.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"1234567890\",deprecation:{replacement:\"gen_ai.request.seed\"},aliases:[\"gen_ai.request.seed\"],changelog:[{version:\"0.1.0\",prs:[55,57,61,108,127]}]},\"ai.streaming\":{brief:\"Whether the request was streamed back.\",type:\"boolean\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,deprecation:{replacement:\"gen_ai.response.streaming\"},aliases:[\"gen_ai.response.streaming\"],changelog:[{version:\"0.1.0\",prs:[76,108]},{version:\"0.0.0\"}]},\"ai.tags\":{brief:\"Tags that describe an AI pipeline step.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:'{\"executed_function\": \"add_integers\"}',deprecation:{},changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.1.0\",prs:[55,127]}]},\"ai.temperature\":{brief:\"For an AI model call, the temperature parameter. Temperature essentially means how random the output will be.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:.1,deprecation:{replacement:\"gen_ai.request.temperature\"},aliases:[\"gen_ai.request.temperature\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[55,57,61,108]}]},\"ai.texts\":{brief:\"Raw text inputs provided to the model.\",type:\"string[]\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:[\"Hello, how are you?\",\"What is the capital of France?\"],deprecation:{replacement:\"gen_ai.input.messages\"},aliases:[\"gen_ai.input.messages\"],changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.1.0\",prs:[55]}]},\"ai.tools\":{brief:\"For an AI model call, the functions that are available\",type:\"string[]\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:[\"function_1\",\"function_2\"],deprecation:{replacement:\"gen_ai.tool.definitions\"},changelog:[{version:\"0.1.0\",prs:[55,65,127]}]},\"ai.tool_calls\":{brief:\"For an AI model call, the tool calls that were made.\",type:\"string[]\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:[\"tool_call_1\",\"tool_call_2\"],deprecation:{replacement:\"gen_ai.output.messages\"},changelog:[{version:\"0.1.0\",prs:[55,65]}]},\"ai.top_k\":{brief:\"Limits the model to only consider the K most likely next tokens, where K is an integer (e.g., top_k=20 means only the 20 highest probability tokens are considered).\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:35,deprecation:{replacement:\"gen_ai.request.top_k\"},aliases:[\"gen_ai.request.top_k\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[55,57,61,108]}]},\"ai.top_p\":{brief:\"Limits the model to only consider tokens whose cumulative probability mass adds up to p, where p is a float between 0 and 1 (e.g., top_p=0.7 means only tokens that sum up to 70% of the probability mass are considered).\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:.7,deprecation:{replacement:\"gen_ai.request.top_p\"},aliases:[\"gen_ai.request.top_p\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[55,57,61,108]}]},\"ai.total_cost\":{brief:\"The total cost for the tokens used.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:12.34,deprecation:{replacement:\"gen_ai.cost.total_tokens\"},aliases:[\"gen_ai.cost.total_tokens\"],changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[53]}]},\"ai.total_tokens.used\":{brief:\"The total number of tokens used to process the prompt.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:30,deprecation:{replacement:\"gen_ai.usage.total_tokens\"},aliases:[\"gen_ai.usage.total_tokens\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[57,61,108]},{version:\"0.0.0\"}]},\"ai.warnings\":{brief:\"Warning messages generated during model execution.\",type:\"string[]\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:[\"Token limit exceeded\"],deprecation:{},changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.1.0\",prs:[55]}]},\"angular.version\":{brief:\"The version of the Angular framework\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"17.1.0\",changelog:[{version:\"0.7.0\",prs:[367],description:\"Added angular.version attribute\"}]},\"app.app_build\":{brief:\"Internal build identifier, as it appears on the platform.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"1\",deprecation:{replacement:\"app.build\",reason:\"Deprecated in favor of app.build\"},aliases:[\"app.build\"],changelog:[{version:\"0.5.0\",prs:[296],description:\"Added and deprecated app.app_build in favor of app.build\"}]},\"app.app_identifier\":{brief:\"Version-independent application identifier, often a dotted bundle ID.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"com.example.myapp\",deprecation:{replacement:\"app.identifier\",reason:\"Deprecated in favor of app.identifier\"},aliases:[\"app.identifier\"],changelog:[{version:\"0.5.0\",prs:[296],description:\"Added and deprecated app.app_identifier in favor of app.identifier\"}]},\"app.app_name\":{brief:\"Human readable application name, as it appears on the platform.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"My App\",deprecation:{replacement:\"app.name\",reason:\"Deprecated in favor of app.name\"},aliases:[\"app.name\"],changelog:[{version:\"0.5.0\",prs:[296],description:\"Added and deprecated app.app_name in favor of app.name\"}]},\"app.app_start_time\":{brief:\"Formatted UTC timestamp when the user started the application.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"2025-01-01T00:00:00.000Z\",deprecation:{replacement:\"app.start_time\",reason:\"Deprecated in favor of app.start_time\"},aliases:[\"app.start_time\"],changelog:[{version:\"0.5.0\",prs:[296],description:\"Added and deprecated app.app_start_time in favor of app.start_time\"}]},\"app.app_version\":{brief:\"Human readable application version, as it appears on the platform.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"1.0.0\",deprecation:{replacement:\"app.version\",reason:\"Deprecated in favor of app.version\"},aliases:[\"app.version\"],changelog:[{version:\"0.5.0\",prs:[296],description:\"Added and deprecated app.app_version in favor of app.version\"}]},\"app.build\":{brief:\"Internal build identifier, as it appears on the platform.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"1\",aliases:[\"app.app_build\"],changelog:[{version:\"0.5.0\",prs:[296],description:\"Added app.build attribute\"}]},\"app.identifier\":{brief:\"Version-independent application identifier, often a dotted bundle ID.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"com.example.myapp\",aliases:[\"app.app_identifier\"],changelog:[{version:\"0.5.0\",prs:[296],description:\"Added app.identifier attribute\"}]},\"app.in_foreground\":{brief:\"Whether the application is currently in the foreground.\",type:\"boolean\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.5.0\",prs:[296],description:\"Added app.in_foreground attribute\"}]},\"app.name\":{brief:\"Human readable application name, as it appears on the platform.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"My App\",aliases:[\"app.app_name\"],changelog:[{version:\"0.5.0\",prs:[296],description:\"Added app.name attribute\"}]},app_start_cold:{brief:\"The duration of a cold app start in milliseconds\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1234.56,deprecation:{replacement:\"app.vitals.start.cold.value\",reason:\"Replaced by app.vitals.start.cold.value to align with the app.vitals.* namespace for mobile performance attributes\"},aliases:[\"app.vitals.start.cold.value\"],changelog:[{version:\"0.5.0\",prs:[323],description:\"Added and deprecated in favor of app.vitals.start.cold.value\"}]},\"app.start_time\":{brief:\"Formatted UTC timestamp when the user started the application.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"2025-01-01T00:00:00.000Z\",aliases:[\"app.app_start_time\"],changelog:[{version:\"0.5.0\",prs:[296],description:\"Added app.start_time attribute\"}]},app_start_type:{brief:\"Mobile app start variant. Either cold or warm.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"cold\",deprecation:{replacement:\"app.vitals.start.type\",reason:\"Replaced by app.vitals.start.type to align with the app.vitals.* namespace for mobile performance attributes\"},aliases:[\"app.vitals.start.type\"],changelog:[{version:\"0.5.0\",prs:[313],description:\"Deprecated in favor of app.vitals.start.type\"},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},app_start_warm:{brief:\"The duration of a warm app start in milliseconds\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1234.56,deprecation:{replacement:\"app.vitals.start.warm.value\",reason:\"Replaced by app.vitals.start.warm.value to align with the app.vitals.* namespace for mobile performance attributes\"},aliases:[\"app.vitals.start.warm.value\"],changelog:[{version:\"0.5.0\",prs:[323],description:\"Added and deprecated in favor of app.vitals.start.warm.value\"}]},\"app.version\":{brief:\"Human readable application version, as it appears on the platform.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"1.0.0\",aliases:[\"app.app_version\"],changelog:[{version:\"0.5.0\",prs:[296],description:\"Added app.version attribute\"}]},\"app.vitals.frames.delay.value\":{brief:\"The sum of all delayed frame durations in seconds during the lifetime of the span. For more information see [frames delay](https://develop.sentry.dev/sdk/performance/frames-delay/).\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:5,aliases:[\"frames.delay\"],changelog:[{version:\"0.5.0\",prs:[313],description:\"Added app.vitals.frames.delay.value to replace frames.delay\"}]},\"app.vitals.frames.frozen.count\":{brief:\"The number of frozen frames rendered during the lifetime of the span.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:3,aliases:[\"frames.frozen\"],changelog:[{version:\"0.5.0\",prs:[313],description:\"Added app.vitals.frames.frozen.count to replace frames.frozen\"}]},\"app.vitals.frames.slow.count\":{brief:\"The number of slow frames rendered during the lifetime of the span.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1,aliases:[\"frames.slow\"],changelog:[{version:\"0.5.0\",prs:[313],description:\"Added app.vitals.frames.slow.count to replace frames.slow\"}]},\"app.vitals.frames.total.count\":{brief:\"The number of total frames rendered during the lifetime of the span.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:60,aliases:[\"frames.total\"],changelog:[{version:\"0.5.0\",prs:[313],description:\"Added app.vitals.frames.total.count to replace frames.total\"}]},\"app.vitals.start.cold.value\":{brief:\"The duration of a cold app start in milliseconds\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1234.56,aliases:[\"app_start_cold\"],changelog:[{version:\"0.5.0\",prs:[313],description:\"Added app.vitals.start.cold.value attribute\"}]},\"app.vitals.start.prewarmed\":{brief:\"Whether the app start was prewarmed.\",type:\"boolean\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.11.0\",prs:[379],description:\"Added app.vitals.start.prewarmed attribute\"}]},\"app.vitals.start.reason\":{brief:\"The reason that triggered the app start.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"push\",changelog:[{version:\"0.7.0\",prs:[353],description:\"Added app.vitals.start.reason attribute\"}]},\"app.vitals.start.screen\":{brief:\"The screen that is rendered when the app start is complete. This is the screen the user first sees and can interact with after launch. The absence of this attribute on the app start span indicates a background app start where no UI was rendered.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"MainActivity\",changelog:[{version:\"0.7.0\",prs:[353],description:\"Added app.vitals.start.screen attribute\"}]},\"app.vitals.start.type\":{brief:\"The type of app start, for example `cold` or `warm`\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"cold\",aliases:[\"app_start_type\"],changelog:[{version:\"0.5.0\",prs:[313],description:\"Added app.vitals.start.type attribute\"}]},\"app.vitals.start.warm.value\":{brief:\"The duration of a warm app start in milliseconds\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1234.56,aliases:[\"app_start_warm\"],changelog:[{version:\"0.5.0\",prs:[313],description:\"Added app.vitals.start.warm.value attribute\"}]},\"app.vitals.ttfd.value\":{brief:\"The duration of time to full display in milliseconds\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1234.56,aliases:[\"time_to_full_display\"],changelog:[{version:\"0.5.0\",prs:[313],description:\"Added app.vitals.ttfd.value attribute\"}]},\"app.vitals.ttid.value\":{brief:\"The duration of time to initial display in milliseconds\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1234.56,aliases:[\"time_to_initial_display\"],changelog:[{version:\"0.5.0\",prs:[313],description:\"Added app.vitals.ttid.value attribute\"}]},\"art.gc.blocking_count\":{brief:\"Total number of blocking (stop-the-world) garbage collections performed by the Android Runtime\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1,changelog:[{version:\"0.11.0\",prs:[382],description:\"Added art.gc.blocking_count attribute\"}]},\"art.gc.blocking_time\":{brief:\"Total time spent in blocking (stop-the-world) garbage collections by the Android Runtime, in milliseconds\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:11.873,changelog:[{version:\"0.11.0\",prs:[382],description:\"Added art.gc.blocking_time attribute\"}]},\"art.gc.pre_oome_count\":{brief:\"Total number of garbage collections triggered as a last resort before an OutOfMemoryError by the Android Runtime\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:0,changelog:[{version:\"0.11.0\",prs:[382],description:\"Added art.gc.pre_oome_count attribute\"}]},\"art.gc.total_count\":{brief:\"Total number of garbage collections performed by the Android Runtime\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1,changelog:[{version:\"0.11.0\",prs:[382],description:\"Added art.gc.total_count attribute\"}]},\"art.gc.total_time\":{brief:\"Total time spent in garbage collection by the Android Runtime, in milliseconds\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:11.807,changelog:[{version:\"0.11.0\",prs:[382],description:\"Added art.gc.total_time attribute\"}]},\"art.gc.waiting_time\":{brief:\"Total time threads spent waiting for garbage collection to complete in the Android Runtime, in milliseconds\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:8.054,changelog:[{version:\"0.11.0\",prs:[382],description:\"Added art.gc.waiting_time attribute\"}]},\"art.memory.free\":{brief:\"Free memory available to the process as reported by the Android Runtime, in bytes\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:3181568,changelog:[{version:\"0.11.0\",prs:[382],description:\"Added art.memory.free attribute\"}]},\"art.memory.free_until_gc\":{brief:\"Free memory available before a garbage collection would be triggered by the Android Runtime, in bytes\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:3181568,changelog:[{version:\"0.11.0\",prs:[382],description:\"Added art.memory.free_until_gc attribute\"}]},\"art.memory.free_until_oome\":{brief:\"Free memory available before an OutOfMemoryError would be thrown by the Android Runtime, in bytes\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:196083712,changelog:[{version:\"0.11.0\",prs:[382],description:\"Added art.memory.free_until_oome attribute\"}]},\"art.memory.max\":{brief:\"Maximum memory the process is allowed to use as reported by the Android Runtime, in bytes\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:201326592,changelog:[{version:\"0.11.0\",prs:[382],description:\"Added art.memory.max attribute\"}]},\"art.memory.total\":{brief:\"Total memory currently allocated to the process by the Android Runtime, in bytes\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:7774208,changelog:[{version:\"0.11.0\",prs:[382],description:\"Added art.memory.total attribute\"}]},\"aws.cloudwatch.logs.log_group\":{brief:\"The name of the CloudWatch Logs log group\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"/aws/lambda/my-function\",changelog:[{version:\"0.7.0\",prs:[369],description:\"Added aws.cloudwatch.logs.log_group attribute\"}]},\"aws.cloudwatch.logs.log_stream\":{brief:\"The name of the CloudWatch Logs log stream\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"2024/01/01/[$LATEST]abcdef1234567890\",changelog:[{version:\"0.7.0\",prs:[369],description:\"Added aws.cloudwatch.logs.log_stream attribute\"}]},\"aws.cloudwatch.logs.url\":{brief:\"The URL to the CloudWatch Logs log group\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"https://console.aws.amazon.com/cloudwatch/home?region=us-east-1#logsV2:log-groups/log-group/my-log-group\",changelog:[{version:\"0.7.0\",prs:[369],description:\"Added aws.cloudwatch.logs.url attribute\"}]},\"aws.dynamodb.attribute_definitions\":{brief:\"The JSON-serialized value of each item in the `AttributeDefinitions` request field.\",type:\"string[]\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:['{ \"AttributeName\": \"string\", \"AttributeType\": \"string\" }'],changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.attribute_definitions attribute\"}]},\"aws.dynamodb.consistent_read\":{brief:\"The value of the `ConsistentRead` request parameter.\",type:\"boolean\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:!0,changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.consistent_read attribute\"}]},\"aws.dynamodb.consumed_capacity\":{brief:\"The JSON-serialized value of each item in the `ConsumedCapacity` response field.\",type:\"string[]\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:['{ \"CapacityUnits\": number, \"GlobalSecondaryIndexes\": { \"string\" : { \"CapacityUnits\": number, \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }, \"LocalSecondaryIndexes\": { \"string\" : { \"CapacityUnits\": number, \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }, \"ReadCapacityUnits\": number, \"Table\": { \"CapacityUnits\": number, \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number }, \"TableName\": \"string\", \"WriteCapacityUnits\": number }'],changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.consumed_capacity attribute\"}]},\"aws.dynamodb.count\":{brief:\"The value of the `Count` response parameter.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:10,changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.count attribute\"}]},\"aws.dynamodb.exclusive_start_table\":{brief:\"The value of the `ExclusiveStartTableName` request parameter.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"Users\",changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.exclusive_start_table attribute\"}]},\"aws.dynamodb.global_secondary_indexes\":{brief:\"The JSON-serialized value of each item of the `GlobalSecondaryIndexes` request field.\",type:\"string[]\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:['{ \"IndexName\": \"string\", \"KeySchema\": [ { \"AttributeName\": \"string\", \"KeyType\": \"string\" } ], \"Projection\": { \"NonKeyAttributes\": [ \"string\" ], \"ProjectionType\": \"string\" }, \"ProvisionedThroughput\": { \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }'],changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.global_secondary_indexes attribute\"}]},\"aws.dynamodb.global_secondary_index_updates\":{brief:\"The JSON-serialized value of each item in the `GlobalSecondaryIndexUpdates` request field.\",type:\"string[]\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:['{ \"Create\": { \"IndexName\": \"string\", \"KeySchema\": [ { \"AttributeName\": \"string\", \"KeyType\": \"string\" } ], \"Projection\": { \"NonKeyAttributes\": [ \"string\" ], \"ProjectionType\": \"string\" }, \"ProvisionedThroughput\": { \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }'],changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.global_secondary_index_updates attribute\"}]},\"aws.dynamodb.index_name\":{brief:\"The value of the `IndexName` request parameter.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"name_to_group\",changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.index_name attribute\"}]},\"aws.dynamodb.item_collection_metrics\":{brief:\"The JSON-serialized value of the `ItemCollectionMetrics` response field.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:'{ \"string\" : [ { \"ItemCollectionKey\": { \"string\" : { \"B\": blob, \"BOOL\": boolean, \"BS\": [ blob ], \"L\": [ \"AttributeValue\" ], \"M\": { \"string\" : \"AttributeValue\" }, \"N\": \"string\", \"NS\": [ \"string\" ], \"NULL\": boolean, \"S\": \"string\", \"SS\": [ \"string\" ] } }, \"SizeEstimateRangeGB\": [ number ] } ] }',changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.item_collection_metrics attribute\"}]},\"aws.dynamodb.limit\":{brief:\"The value of the `Limit` request parameter.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:10,changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.limit attribute\"}]},\"aws.dynamodb.local_secondary_indexes\":{brief:\"The JSON-serialized value of each item of the `LocalSecondaryIndexes` request field.\",type:\"string[]\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:['{ \"IndexArn\": \"string\", \"IndexName\": \"string\", \"IndexSizeBytes\": number, \"ItemCount\": number, \"KeySchema\": [ { \"AttributeName\": \"string\", \"KeyType\": \"string\" } ], \"Projection\": { \"NonKeyAttributes\": [ \"string\" ], \"ProjectionType\": \"string\" } }'],changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.local_secondary_indexes attribute\"}]},\"aws.dynamodb.projection\":{brief:\"The value of the `ProjectionExpression` request parameter.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"Title, Price, Color\",changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.projection attribute\"}]},\"aws.dynamodb.provisioned_read_capacity\":{brief:\"The value of the `ProvisionedThroughput.ReadCapacityUnits` request parameter.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:1,changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.provisioned_read_capacity attribute\"}]},\"aws.dynamodb.provisioned_write_capacity\":{brief:\"The value of the `ProvisionedThroughput.WriteCapacityUnits` request parameter.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:2,changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.provisioned_write_capacity attribute\"}]},\"aws.dynamodb.scanned_count\":{brief:\"The value of the `ScannedCount` response parameter.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:50,changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.scanned_count attribute\"}]},\"aws.dynamodb.scan_forward\":{brief:\"The value of the `ScanIndexForward` request parameter.\",type:\"boolean\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:!0,changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.scan_forward attribute\"}]},\"aws.dynamodb.segment\":{brief:\"The value of the `Segment` request parameter.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:10,changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.segment attribute\"}]},\"aws.dynamodb.select\":{brief:\"The value of the `Select` request parameter.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"ALL_ATTRIBUTES\",changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.select attribute\"}]},\"aws.dynamodb.table_count\":{brief:\"The number of items in the `TableNames` response parameter.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:20,changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.table_count attribute\"}]},\"aws.dynamodb.table_names\":{brief:\"The keys in the `RequestItems` object field.\",type:\"string[]\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:[\"Users\",\"Cats\"],changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.table_names attribute\"}]},\"aws.dynamodb.total_segments\":{brief:\"The value of the `TotalSegments` request parameter.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:100,changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.total_segments attribute\"}]},\"aws.extended_request_id\":{brief:\"The AWS extended request ID as returned in the response headers.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"wzHcyEWfmOGDIE5QOhTAqFDoDWP3y8IUvpNINCwL9N4TEHbUw0/gZJ+VZTmCNCWR7fezEN3eCiQ=\",aliases:[\"aws.request.extended_id\"],changelog:[{version:\"0.16.0\",prs:[480],description:\"Added aws.extended_request_id attribute\"}]},\"aws.kinesis.stream_name\":{brief:\"The name of the AWS Kinesis stream the request refers to.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"some-stream-name\",aliases:[\"aws.kinesis.stream.name\"],changelog:[{version:\"0.16.0\",prs:[480],description:\"Added aws.kinesis.stream_name attribute\"}]},\"aws.kinesis.stream.name\":{brief:\"The name of the AWS Kinesis stream the request refers to.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"some-stream-name\",deprecation:{replacement:\"aws.kinesis.stream_name\",reason:\"This attribute is being deprecated in favor of aws.kinesis.stream_name, which is the OTel-aligned replacement.\"},aliases:[\"aws.kinesis.stream_name\"],changelog:[{version:\"0.16.0\",prs:[480],description:\"Added aws.kinesis.stream.name attribute, deprecated in favor of aws.kinesis.stream_name\"}]},\"aws.lambda.aws_request_id\":{brief:\"The AWS request ID as received by the Lambda function runtime\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"8476a536-e9f4-11e8-9739-2dfe598c3fcd\",deprecation:{replacement:\"faas.invocation_id\",reason:\"This attribute is being deprecated in favor of faas.invocation_id\"},aliases:[\"faas.invocation_id\",\"faas.execution\"],changelog:[{version:\"0.16.0\",prs:[473],description:\"Added faas.execution as an alias\"},{version:\"0.11.1\",prs:[414,424],description:\"Deprecated aws.lambda.aws_request_id in favor of faas.invocation_id\"},{version:\"0.7.0\",prs:[369],description:\"Added aws.lambda.aws_request_id attribute\"}]},\"aws.lambda.execution_duration_in_millis\":{brief:\"The execution duration of the Lambda function invocation in milliseconds\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1234.56,changelog:[{version:\"0.7.0\",prs:[369],description:\"Added aws.lambda.execution_duration_in_millis attribute\"}]},\"aws.lambda.function_name\":{brief:\"The name of the Lambda function\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"my-function\",deprecation:{replacement:\"faas.name\",reason:\"Use the OTel-aligned faas.name attribute instead\"},aliases:[\"faas.name\"],changelog:[{version:\"0.11.1\",prs:[414],description:\"Deprecated aws.lambda.function_name in favor of faas.name\"},{version:\"0.7.0\",prs:[369],description:\"Added aws.lambda.function_name attribute\"}]},\"aws.lambda.function_version\":{brief:\"The version of the Lambda function\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"$LATEST\",deprecation:{replacement:\"faas.version\",reason:\"Use the OTel-aligned faas.version attribute instead\"},aliases:[\"faas.version\"],changelog:[{version:\"0.11.1\",prs:[414,424],description:\"Deprecated aws.lambda.function_version in favor of faas.version\"},{version:\"0.7.0\",prs:[369],description:\"Added aws.lambda.function_version attribute\"}]},\"aws.lambda.invoked_arn\":{brief:\"The full ARN of the Lambda function that was invoked\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"arn:aws:lambda:us-east-1:123456789012:function:my-function\",aliases:[\"aws.lambda.invoked_function_arn\"],changelog:[{version:\"0.11.1\",prs:[414]}]},\"aws.lambda.invoked_function_arn\":{brief:\"The full ARN of the Lambda function that was invoked\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"arn:aws:lambda:us-east-1:123456789012:function:my-function\",deprecation:{replacement:\"aws.lambda.invoked_arn\",reason:\"This attribute is being deprecated in favor of aws.lambda.invoked_arn\"},aliases:[\"aws.lambda.invoked_arn\"],changelog:[{version:\"0.11.1\",prs:[414],description:\"Deprecated aws.lambda.invoked_function_arn in favor of aws.lambda.invoked_arn\"},{version:\"0.7.0\",prs:[369],description:\"Added aws.lambda.invoked_function_arn attribute\"}]},\"aws.lambda.remaining_time_in_millis\":{brief:\"The remaining time in milliseconds before the Lambda function times out\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:5e3,changelog:[{version:\"0.7.0\",prs:[369],description:\"Added aws.lambda.remaining_time_in_millis attribute\"}]},\"aws.log.group.names\":{brief:\"The name(s) of the AWS log group(s) an application is writing to.\",type:\"string[]\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:[\"/aws/lambda/my-function\",\"opentelemetry-service\"],changelog:[{version:\"0.11.1\",prs:[414]}]},\"aws.log.stream.names\":{brief:\"The name(s) of the AWS log stream(s) an application is writing to.\",type:\"string[]\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:[\"logs/main/10838bed-421f-43ef-870a-f43feacbbb5b\"],changelog:[{version:\"0.11.1\",prs:[414]}]},\"aws.request.extended_id\":{brief:\"The AWS extended request ID as returned in the response headers.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"wzHcyEWfmOGDIE5QOhTAqFDoDWP3y8IUvpNINCwL9N4TEHbUw0/gZJ+VZTmCNCWR7fezEN3eCiQ=\",deprecation:{replacement:\"aws.extended_request_id\",reason:\"This attribute is being deprecated in favor of aws.extended_request_id, which is the OTel-aligned replacement.\"},aliases:[\"aws.extended_request_id\"],changelog:[{version:\"0.16.0\",prs:[480],description:\"Added aws.request.extended_id attribute, deprecated in favor of aws.extended_request_id\"}]},\"aws.request_id\":{brief:\"The AWS request ID as returned in the response headers.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"79b9da39-b7ae-508a-a6bc-864b2829c622\",aliases:[\"aws.request.id\"],changelog:[{version:\"0.16.0\",prs:[480],description:\"Added aws.request_id attribute\"}]},\"aws.request.id\":{brief:\"The AWS request ID as returned in the response headers.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"79b9da39-b7ae-508a-a6bc-864b2829c622\",deprecation:{replacement:\"aws.request_id\",reason:\"This attribute is being deprecated in favor of aws.request_id, which is the OTel-aligned replacement.\"},aliases:[\"aws.request_id\"],changelog:[{version:\"0.16.0\",prs:[480],description:\"Added aws.request.id attribute, deprecated in favor of aws.request_id\"}]},\"aws.s3.bucket\":{brief:\"The S3 bucket name the request refers to.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"ot-demo-test\",changelog:[{version:\"0.16.0\",prs:[480],description:\"Added aws.s3.bucket attribute\"}]},\"aws.secretsmanager.secret.arn\":{brief:\"The ARN of the Secret stored in Secrets Manager.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"arn:aws:secretsmanager:us-east-1:123456789012:secret:SecretName-6RandomCharacters\",changelog:[{version:\"0.16.0\",prs:[480],description:\"Added aws.secretsmanager.secret.arn attribute\"}]},\"aws.sns.topic.arn\":{brief:\"The ARN of the AWS SNS Topic. An Amazon SNS topic is a logical access point that acts as a communication channel.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"arn:aws:sns:us-east-1:123456789012:mystack-mytopic-NZJ5JSMVGFIE\",changelog:[{version:\"0.16.0\",prs:[480],description:\"Added aws.sns.topic.arn attribute\"}]},\"aws.step_functions.activity.arn\":{brief:\"The ARN of the AWS Step Functions Activity.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"arn:aws:states:us-east-1:123456789012:activity:get-greeting\",changelog:[{version:\"0.16.0\",prs:[480],description:\"Added aws.step_functions.activity.arn attribute\"}]},\"aws.step_functions.state_machine.arn\":{brief:\"The ARN of the AWS Step Functions State Machine.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"arn:aws:states:us-east-1:123456789012:stateMachine:myStateMachine:1\",changelog:[{version:\"0.16.0\",prs:[480],description:\"Added aws.step_functions.state_machine.arn attribute\"}]},blocked_main_thread:{brief:\"Whether the main thread was blocked by the span.\",type:\"boolean\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.0.0\"}]},\"browser.name\":{brief:\"The name of the browser.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Chrome\",aliases:[\"sentry.browser.name\"],changelog:[{version:\"0.1.0\",prs:[127,139]},{version:\"0.0.0\"}]},\"browser.performance.navigation.activation_start\":{brief:\"The time between initiating a navigation to a page and the browser activating the page\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1.983,aliases:[\"performance.activationStart\"],changelog:[{version:\"0.5.0\",prs:[321],description:\"Added browser.performance.navigation.activation_start attribute\"}]},\"browser.performance.time_origin\":{brief:\"The browser's performance.timeOrigin timestamp representing the time when the pageload was initiated\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1776185678886e-3,aliases:[\"performance.timeOrigin\"],changelog:[{version:\"0.5.0\",prs:[321],description:\"Added browser.performance.time_origin attribute attribute\"}]},\"browser.report.type\":{brief:\"A browser report sent via reporting API..\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"network-error\",changelog:[{version:\"0.1.0\",prs:[68,127]}]},\"browser.script.invoker\":{brief:\"How a script was called in the browser.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Window.requestAnimationFrame\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"browser.script.invoker_type\":{brief:\"Browser script entry point type.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"event-listener\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"browser.script.source_char_position\":{brief:\"A number representing the script character position of the script.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:678,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"browser.version\":{brief:\"The version of the browser.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"120.0.6099.130\",aliases:[\"sentry.browser.version\"],changelog:[{version:\"0.1.0\",prs:[59,127,139]}]},\"browser.web_vital.cls.report_event\":{brief:\"The event that caused the SDK to report CLS (pagehide or navigation)\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"navigation\",changelog:[{version:\"0.5.0\",prs:[319],description:\"Added browser.web_vital.cls.report_event attribute\"}]},\"browser.web_vital.cls.source.<key>\":{brief:\"The HTML elements or components responsible for the layout shift. <key> is a numeric index from 1 to N\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"body > div#app\",aliases:[\"cls.source.<key>\"],changelog:[{version:\"0.5.0\",prs:[234]}]},\"browser.web_vital.cls.value\":{brief:\"The value of the recorded Cumulative Layout Shift (CLS) web vital\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:.2361,aliases:[\"cls\"],changelog:[{version:\"0.5.0\",prs:[229],description:\"Added browser.web_vital.cls.value attribute\"}]},\"browser.web_vital.fcp.value\":{brief:\"The time it takes for the browser to render the first piece of meaningful content on the screen\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:547.6951,aliases:[\"fcp\"],changelog:[{version:\"0.5.0\",prs:[235]}]},\"browser.web_vital.fp.value\":{brief:\"The time in milliseconds it takes for the browser to render the first pixel on the screen\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:477.1926,aliases:[\"fp\"],changelog:[{version:\"0.5.0\",prs:[235]}]},\"browser.web_vital.inp.value\":{brief:\"The value of the recorded Interaction to Next Paint (INP) web vital\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:200,aliases:[\"inp\"],changelog:[{version:\"0.5.0\",prs:[229],description:\"Added browser.web_vital.inp.value attribute\"}]},\"browser.web_vital.lcp.element\":{brief:\"The HTML element selector or component name for which LCP was reported\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"body > div#app > div#container > div\",aliases:[\"lcp.element\"],changelog:[{version:\"0.5.0\",prs:[233]}]},\"browser.web_vital.lcp.id\":{brief:\"The id of the dom element responsible for the largest contentful paint\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"#gero\",aliases:[\"lcp.id\"],changelog:[{version:\"0.5.0\",prs:[233]}]},\"browser.web_vital.lcp.load_time\":{brief:\"The time it took for the LCP element to be loaded\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1402,aliases:[\"lcp.loadTime\"],changelog:[{version:\"0.5.0\",prs:[233]}]},\"browser.web_vital.lcp.render_time\":{brief:\"The time it took for the LCP element to be rendered\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1685,aliases:[\"lcp.renderTime\"],changelog:[{version:\"0.5.0\",prs:[233]}]},\"browser.web_vital.lcp.report_event\":{brief:\"The event that caused the SDK to report LCP (pagehide or navigation)\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"pagehide\",changelog:[{version:\"0.5.0\",prs:[319],description:\"Added browser.web_vital.lcp.report_event attribute\"}]},\"browser.web_vital.lcp.size\":{brief:\"The size of the largest contentful paint element\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1024,aliases:[\"lcp.size\"],changelog:[{version:\"0.5.0\",prs:[233]}]},\"browser.web_vital.lcp.url\":{brief:\"The url of the dom element responsible for the largest contentful paint\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"https://example.com/static/img.png\",aliases:[\"lcp.url\"],changelog:[{version:\"0.5.0\",prs:[233]}]},\"browser.web_vital.lcp.value\":{brief:\"The value of the recorded Largest Contentful Paint (LCP) web vital\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:2500,aliases:[\"lcp\"],changelog:[{version:\"0.5.0\",prs:[229],description:\"Added browser.web_vital.lcp.value attribute\"}]},\"browser.web_vital.ttfb.request_time\":{brief:\"The time it takes for the server to process the initial request and send the first byte of a response to the user's browser\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1554.5814,aliases:[\"ttfb.requestTime\"],changelog:[{version:\"0.5.0\",prs:[235]}]},\"browser.web_vital.ttfb.value\":{brief:\"The value of the recorded Time To First Byte (TTFB) web vital in Milliseconds\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:194.3322,aliases:[\"ttfb\"],changelog:[{version:\"0.5.0\",prs:[235]}]},\"cache.hit\":{brief:\"If the cache was hit during this span.\",type:\"boolean\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.0.0\"}]},\"cache.item_size\":{brief:\"The size of the requested item in the cache. In bytes.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:58,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"cache.key\":{brief:\"The key of the cache accessed.\",type:\"string[]\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:[\"my-cache-key\",\"my-other-cache-key\"],changelog:[{version:\"0.0.0\"}]},\"cache.operation\":{brief:\"The operation being performed on the cache.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"get\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"cache.ttl\":{brief:\"The ttl of the cache in seconds\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:120,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"cache.write\":{brief:\"If the cache operation resulted in a write to the cache.\",type:\"boolean\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.5.0\"}]},channel:{brief:\"The channel name that is being used.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"mail\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"client.address\":{brief:\"Client address - domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"example.com\",aliases:[\"http.client_ip\"],changelog:[{version:\"0.1.0\",prs:[106,127]},{version:\"0.0.0\"}]},\"client.port\":{brief:\"Client port number.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:5432,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"cloudflare.d1.duration\":{brief:\"The duration of a Cloudflare D1 operation.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:543,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"cloudflare.d1.query_type\":{brief:\"The type of query executed in a Cloudflare D1 operation\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"run\",deprecation:{replacement:\"db.operation.name\"},aliases:[\"db.operation.name\",\"db.operation\"],changelog:[{version:\"0.11.0\",prs:[392],description:\"Added cloudflare.d1.query_type attribute\"}]},\"cloudflare.d1.rows_read\":{brief:\"The number of rows read in a Cloudflare D1 operation.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:12,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"cloudflare.d1.rows_written\":{brief:\"The number of rows written in a Cloudflare D1 operation.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:12,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"cloudflare.durable_object.query.bindings\":{brief:\"The number of bound parameters passed to the SQL exec call.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:2,changelog:[{version:\"0.13.0\",prs:[435],description:\"Added cloudflare.durable_object.query.bindings attribute\"}]},\"cloudflare.durable_object.response.rows_read\":{brief:\"The number of rows read by a Cloudflare Durable Object SQL operation.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:12,changelog:[{version:\"0.13.0\",prs:[435],description:\"Added cloudflare.durable_object.response.rows_read attribute\"}]},\"cloudflare.durable_object.response.rows_written\":{brief:\"The number of rows written by a Cloudflare Durable Object SQL operation.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1,changelog:[{version:\"0.13.0\",prs:[435],description:\"Added cloudflare.durable_object.response.rows_written attribute\"}]},\"cloudflare.r2.bucket\":{brief:\"The name of the Cloudflare R2 bucket binding\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"MY_BUCKET\",changelog:[{version:\"0.11.1\",prs:[413],description:\"Added cloudflare.r2.bucket attribute\"}]},\"cloudflare.r2.operation\":{brief:\"The R2 API operation being performed\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"GetObject\",changelog:[{version:\"0.11.1\",prs:[413],description:\"Added cloudflare.r2.operation attribute\"}]},\"cloudflare.r2.request.delimiter\":{brief:\"The delimiter used to group objects in an R2 list operation\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"/\",changelog:[{version:\"0.11.1\",prs:[413],description:\"Added cloudflare.r2.request.delimiter attribute\"}]},\"cloudflare.r2.request.key\":{brief:\"The object key used in the R2 operation\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"my-file.txt\",changelog:[{version:\"0.11.1\",prs:[413],description:\"Added cloudflare.r2.request.key attribute\"}]},\"cloudflare.r2.request.part_number\":{brief:\"The part number in a multipart upload operation\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1,changelog:[{version:\"0.11.1\",prs:[413],description:\"Added cloudflare.r2.request.part_number attribute\"}]},\"cloudflare.r2.request.prefix\":{brief:\"The prefix used to filter objects in an R2 list operation\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"images/\",changelog:[{version:\"0.11.1\",prs:[413],description:\"Added cloudflare.r2.request.prefix attribute\"}]},\"cloudflare.workflow.attempt\":{brief:\"The current attempt number for a Cloudflare Workflow step\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1,changelog:[{version:\"0.11.0\",prs:[392],description:\"Added cloudflare.workflow.attempt attribute\"}]},\"cloudflare.workflow.retries.backoff\":{brief:\"The backoff strategy for Cloudflare Workflow step retries\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"exponential\",changelog:[{version:\"0.11.0\",prs:[392],description:\"Added cloudflare.workflow.retries.backoff attribute\"}]},\"cloudflare.workflow.retries.delay\":{brief:\"The delay between Cloudflare Workflow step retries\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"5 seconds\",changelog:[{version:\"0.11.0\",prs:[392],description:\"Added cloudflare.workflow.retries.delay attribute\"}]},\"cloudflare.workflow.retries.limit\":{brief:\"The maximum number of retries for a Cloudflare Workflow step\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:3,changelog:[{version:\"0.11.0\",prs:[392],description:\"Added cloudflare.workflow.retries.limit attribute\"}]},\"cloudflare.workflow.timeout\":{brief:\"The timeout duration for a Cloudflare Workflow step\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"1 minute\",changelog:[{version:\"0.11.0\",prs:[392],description:\"Added cloudflare.workflow.timeout attribute\"}]},\"cloud.account.id\":{brief:\"The cloud account ID the resource is assigned to\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"123456789012\",changelog:[{version:\"0.7.0\",prs:[364],description:\"Added cloud.account.id attribute\"}]},\"cloud.availability_zone\":{brief:\"Cloud regions often have multiple, isolated locations known as zones to increase availability\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"us-east-1c\",changelog:[{version:\"0.7.0\",prs:[364],description:\"Added cloud.availability_zone attribute\"}]},\"cloud.platform\":{brief:\"The cloud platform in use\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"aws_lambda\",changelog:[{version:\"0.7.0\",prs:[364],description:\"Added cloud.platform attribute\"}]},\"cloud.provider\":{brief:\"Name of the cloud provider\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"aws\",changelog:[{version:\"0.7.0\",prs:[364],description:\"Added cloud.provider attribute\"}]},\"cloud.region\":{brief:\"The geographical region the resource is running\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"us-east-1\",changelog:[{version:\"0.7.0\",prs:[364],description:\"Added cloud.region attribute\"}]},\"cloud.resource_id\":{brief:\"Cloud provider-specific native identifier of the monitored cloud resource\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"arn:aws:lambda:REGION:ACCOUNT_ID:function:my-function\",aliases:[\"faas.id\"],changelog:[{version:\"0.16.0\",prs:[475],description:\"Added faas.id as an alias\"},{version:\"0.11.1\",prs:[414]}],additionalContext:[\"This can be an identifier for a resource in AWS, GCP, or Azure. There may be some overlap in values found here with other attributes. For instance, an AWS lambda ARN may be found here as well as in `aws.lambda.invoked_arn`. OTEL recommends setting them alongside each other.\"]},cls:{brief:\"The value of the recorded Cumulative Layout Shift (CLS) web vital\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:.2361,deprecation:{replacement:\"browser.web_vital.cls.value\",reason:\"The CLS web vital is now recorded as a browser.web_vital.cls.value attribute.\"},aliases:[\"browser.web_vital.cls.value\"],changelog:[{version:\"0.5.0\",prs:[229],description:\"Added and deprecated attribute to document JS SDK's current behaviour\"}]},\"cls.source.<key>\":{brief:\"The HTML elements or components responsible for the layout shift. <key> is a numeric index from 1 to N\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"body > div#app\",deprecation:{replacement:\"browser.web_vital.cls.source.<key>\",reason:\"The CLS source is now recorded as a browser.web_vital.cls.source.<key> attribute.\"},aliases:[\"browser.web_vital.cls.source.<key>\"],changelog:[{version:\"0.5.0\",prs:[234]}]},\"code.filepath\":{brief:\"The source code file name that identifies the code unit as uniquely as possible (preferably an absolute file path).\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"/app/myapplication/http/handler/server.py\",deprecation:{replacement:\"code.file.path\"},aliases:[\"code.file.path\"],changelog:[{version:\"0.1.0\",prs:[61]},{version:\"0.0.0\"}]},\"code.file.path\":{brief:\"The source code file name that identifies the code unit as uniquely as possible (preferably an absolute file path).\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"/app/myapplication/http/handler/server.py\",aliases:[\"code.filepath\"],changelog:[{version:\"0.0.0\"}]},\"code.function\":{brief:\"The method or function name, or equivalent (usually rightmost part of the code unit's name).\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"server_request\",aliases:[\"code.function.name\"],changelog:[{version:\"0.1.0\",prs:[61,74]},{version:\"0.0.0\"}]},\"code.function.name\":{brief:\"The method or function fully-qualified name without arguments.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"server_request\",aliases:[\"code.function\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"code.lineno\":{brief:\"The line number in code.filepath best representing the operation. It SHOULD point within the code unit named in code.function\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:42,deprecation:{replacement:\"code.line.number\"},aliases:[\"code.line.number\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[61,108]},{version:\"0.0.0\"}]},\"code.line.number\":{brief:\"The line number in code.filepath best representing the operation. It SHOULD point within the code unit named in code.function\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:42,aliases:[\"code.lineno\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"code.namespace\":{brief:\"The 'namespace' within which code.function is defined. Usually the qualified class or module name, such that code.namespace + some separator + code.function form a unique identifier for the code unit.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"http.handler\",changelog:[{version:\"0.1.0\",prs:[61,74]},{version:\"0.0.0\"}]},connectionType:{brief:\"Specifies the type of the current connection (e.g. wifi, ethernet, cellular , etc).\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"wifi\",deprecation:{replacement:\"network.connection.type\",reason:\"Old namespace-less attribute, to be replaced with network.connection.type for span-first future\"},aliases:[\"network.connection.type\",\"device.connection_type\"],changelog:[{version:\"0.5.0\",prs:[279],description:\"Added and deprecated attribute to document JS SDK's current behaviour\"}]},\"connection.rtt\":{brief:\"Specifies the estimated effective round-trip time of the current connection, in milliseconds.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:100,deprecation:{replacement:\"network.connection.rtt\",reason:\"Old attribute name (no official namespace), to be replaced with network.connection.rtt for span-first future\"},aliases:[\"network.connection.rtt\"],changelog:[{version:\"0.5.0\",prs:[279],description:\"Added and deprecated attribute to document JS SDK's current behaviour\"}]},\"culture.calendar\":{brief:\"The calendar system used by the culture.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"GregorianCalendar\",changelog:[{version:\"0.4.0\",prs:[243]}]},\"culture.display_name\":{brief:\"Human readable name of the culture.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"English (United States)\",changelog:[{version:\"0.4.0\",prs:[243]}]},\"culture.is_24_hour_format\":{brief:\"Whether the culture uses 24-hour time format.\",type:\"boolean\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.4.0\",prs:[243]}]},\"culture.locale\":{brief:\"The locale identifier following RFC 4646.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"en-US\",changelog:[{version:\"0.4.0\",prs:[243]}]},\"culture.timezone\":{brief:\"The timezone of the culture, as a geographic timezone identifier.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Europe/Vienna\",changelog:[{version:\"0.4.0\",prs:[243]}]},\"db.collection.name\":{brief:\"The name of a collection (table, container) within the database.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"users\",changelog:[{version:\"0.1.0\",prs:[106,127]},{version:\"0.0.0\"}]},\"db.driver.name\":{brief:\"The name of the driver used for the database connection.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"psycopg2\",changelog:[{version:\"0.5.0\",prs:[297],description:\"Added db.driver.name attribute\"}]},\"db.name\":{brief:\"The name of the database being accessed.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"customers\",deprecation:{replacement:\"db.namespace\"},aliases:[\"db.namespace\"],changelog:[{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"db.namespace\":{brief:\"The name of the database being accessed.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"customers\",aliases:[\"db.name\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"db.operation\":{brief:\"The name of the operation being executed.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"SELECT\",deprecation:{replacement:\"db.operation.name\"},aliases:[\"db.operation.name\",\"cloudflare.d1.query_type\"],changelog:[{version:\"0.4.0\",prs:[199]},{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"db.operation.batch.size\":{brief:\"The number of queries included in a batch operation. Operations are only considered batches when they contain two or more operations, and so db.operation.batch.size SHOULD never be 1.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:3,changelog:[{version:\"0.11.0\",prs:[407],description:\"Added db.operation.batch.size attribute\"}]},\"db.operation.name\":{brief:\"The name of the operation being executed.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"SELECT\",aliases:[\"db.operation\",\"cloudflare.d1.query_type\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"db.query.parameter.<key>\":{brief:\"A query parameter used in db.query.text, with <key> being the parameter name, and the attribute value being a string representation of the parameter value.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",hasDynamicSuffix:!0,example:\"db.query.parameter.foo='123'\",changelog:[{version:\"0.1.0\",prs:[103,127]}]},\"db.query.summary\":{brief:\"A shortened representation of operation(s) in the full query. This attribute must be low-cardinality and should only contain the operation table names.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"SELECT users\",changelog:[{version:\"0.4.0\",prs:[208]},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"db.query.text\":{brief:\"The database parameterized query being executed. Any parameter values (filters, insertion values, etc) should be replaced with parameter placeholders. If applicable, use `db.query.parameter.<key>` to add the parameter value.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"SELECT * FROM users WHERE id = $1\",aliases:[\"db.statement\"],changelog:[{version:\"0.4.0\",prs:[208]},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"db.redis.connection\":{brief:\"The redis connection name.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"my-redis-instance\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"db.redis.key\":{brief:\"The key the Redis command is operating on.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"user:2047:city\",changelog:[{version:\"0.6.0\",prs:[326],description:\"Added db.redis.key attribute\"}]},\"db.redis.parameters\":{brief:\"The array of command parameters given to a redis command.\",type:\"string[]\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:[\"test\",\"*\"],changelog:[{version:\"0.0.0\"}]},\"db.response.status_code\":{brief:\"Database response status code. The status code returned by the database. Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"ORA-17002\",changelog:[{version:\"0.16.0\",prs:[462],description:\"Added db.response.status_code attribute\"}]},\"db.sql.bindings\":{brief:\"The array of query bindings.\",type:\"string[]\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:[\"1\",\"foo\"],deprecation:{replacement:\"db.query.parameter.<key>\",reason:\"Instead of adding every binding in the db.sql.bindings attribute, add them as individual entires with db.query.parameter.<key>.\"},changelog:[{version:\"0.1.0\",prs:[61]},{version:\"0.0.0\"}]},\"db.statement\":{brief:\"The database statement being executed.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"SELECT * FROM users\",deprecation:{replacement:\"db.query.text\"},aliases:[\"db.query.text\"],changelog:[{version:\"0.4.0\",prs:[199]},{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"db.stored_procedure.name\":{brief:\"The name of a stored procedure being called.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"GetUserById\",changelog:[{version:\"0.11.0\",prs:[398]}]},\"db.system\":{brief:\"An identifier for the database management system (DBMS) product being used. See [OpenTelemetry docs](https://github.com/open-telemetry/semantic-conventions/blob/main/docs/database/database-spans.md#notes-and-well-known-identifiers-for-dbsystem) for a list of well-known identifiers.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"postgresql\",deprecation:{replacement:\"db.system.name\"},aliases:[\"db.system.name\"],changelog:[{version:\"0.4.0\",prs:[199,224]},{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"db.system.name\":{brief:\"An identifier for the database management system (DBMS) product being used. See [OpenTelemetry docs](https://github.com/open-telemetry/semantic-conventions/blob/main/docs/database/database-spans.md#notes-and-well-known-identifiers-for-dbsystem) for a list of well-known identifiers.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"postgresql\",aliases:[\"db.system\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"db.user\":{brief:\"The database user.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"fancy_user\",changelog:[{version:\"0.0.0\"}]},deviceMemory:{brief:\"The estimated total memory capacity of the device, only a rough estimation in gigabytes.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"8 GB\",deprecation:{replacement:\"device.memory.estimated_capacity\",reason:\"Old namespace-less attribute, to be replaced with device.memory.estimated_capacity for span-first future\"},aliases:[\"device.memory.estimated_capacity\"],changelog:[{version:\"0.5.0\",prs:[281],description:\"Added and deprecated attribute to document JS SDK's current behaviour\"}]},\"device.archs\":{brief:\"The CPU architectures of the device.\",type:\"string[]\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:[\"arm64-v8a\",\"armeabi-v7a\",\"armeabi\"],changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.archs attribute\"}]},\"device.battery_level\":{brief:\"The battery level of the device as a percentage (0-100).\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:100,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.battery_level attribute\"}]},\"device.battery_temperature\":{brief:\"The battery temperature of the device in Celsius.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:25,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.battery_temperature attribute\"}]},\"device.boot_time\":{brief:\"A formatted UTC timestamp when the system was booted.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"2018-02-08T12:52:12Z\",changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.boot_time attribute\"}]},\"device.brand\":{brief:\"The brand of the device.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Apple\",changelog:[{version:\"0.1.0\",prs:[116,127]}]},\"device.charging\":{brief:\"Whether the device was charging or not.\",type:\"boolean\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!1,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.charging attribute\"}]},\"device.chipset\":{brief:\"The chipset of the device.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Qualcomm SM8550\",changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.chipset attribute\"}]},\"device.class\":{brief:\"The classification of the device. For example, `low`, `medium`, or `high`. Typically inferred by Relay - SDKs generally do not need to set this directly.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"medium\",changelog:[{version:\"0.5.0\",prs:[300],description:\"Added device.class attribute\"}]},\"device.connection_type\":{brief:\"The internet connection type currently being used by the device.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"wifi\",deprecation:{replacement:\"network.connection.type\",reason:\"This attribute is being deprecated in favor of network.connection.type\"},aliases:[\"network.connection.type\",\"connectionType\"],changelog:[{version:\"0.5.0\",prs:[303],description:\"Added and deprecated device.connection_type in favor of network.connection.type\"}]},\"device.cpu_description\":{brief:\"A description of the CPU of the device.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz\",changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.cpu_description attribute\"}]},\"device.external_free_storage\":{brief:\"External storage free size in bytes.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:67108864e3,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.external_free_storage attribute\"}]},\"device.external_storage_size\":{brief:\"External storage total size in bytes.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:134217728e3,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.external_storage_size attribute\"}]},\"device.family\":{brief:\"The family of the device.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"iPhone\",changelog:[{version:\"0.1.0\",prs:[116,127]}]},\"device.free_memory\":{brief:\"Free system memory in bytes.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:2147483648,changelog:[{version:\"0.5.0\",prs:[300],description:\"Added device.free_memory attribute\"}]},\"device.free_storage\":{brief:\"Free device storage in bytes.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:107374182400,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.free_storage attribute\"}]},\"device.id\":{brief:\"Unique device identifier.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.id attribute\"}]},\"device.locale\":{brief:\"The locale of the device.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"en-US\",changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.locale attribute\"}]},\"device.low_memory\":{brief:\"Whether the device was low on memory.\",type:\"boolean\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!1,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.low_memory attribute\"}]},\"device.low_power_mode\":{brief:\"Whether the device is in Low Power Mode.\",type:\"boolean\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.6.0\",prs:[314],description:\"Added device.low_power_mode attribute\"}]},\"device.manufacturer\":{brief:\"The manufacturer of the device.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"Google\",changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.manufacturer attribute\"}]},\"device.memory.estimated_capacity\":{brief:\"The estimated total memory capacity of the device, only a rough estimation in gigabytes. Browsers report estimations in buckets of powers of 2, mostly capped at 8 GB\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:8,aliases:[\"deviceMemory\"],changelog:[{version:\"0.5.0\",prs:[281],description:\"Added attribute device.memory.estimated_capacity to be used instead of deviceMemory\"}]},\"device.memory_size\":{brief:\"Total system memory available in bytes.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:17179869184,changelog:[{version:\"0.5.0\",prs:[300],description:\"Added device.memory_size attribute\"}]},\"device.model\":{brief:\"The model of the device.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"iPhone 15 Pro Max\",changelog:[{version:\"0.1.0\",prs:[116,127]}]},\"device.model_id\":{brief:\"An internal hardware revision to identify the device exactly.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"N861AP\",changelog:[{version:\"0.5.0\",prs:[300],description:\"Added device.model_id attribute\"}]},\"device.name\":{brief:\"The name of the device. On mobile, this is the user-assigned device name. On servers and desktops, this is typically the hostname.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"localhost\",changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.name attribute\"}]},\"device.online\":{brief:\"Whether the device was online or not.\",type:\"boolean\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.online attribute\"}]},\"device.orientation\":{brief:'The orientation of the device, either \"portrait\" or \"landscape\".',type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"portrait\",changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.orientation attribute\"}]},\"device.processor_count\":{brief:'Number of \"logical processors\".',type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:8,aliases:[\"hardwareConcurrency\"],changelog:[{version:\"0.5.0\",prs:[300],description:\"Added and deprecated attribute device.processor_count in favor of device.cpu.logical_core_count\"}]},\"device.processor_frequency\":{brief:\"Processor frequency in MHz.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:2400,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.processor_frequency attribute\"}]},\"device.screen_density\":{brief:\"The screen density of the device.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:2.625,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.screen_density attribute\"}]},\"device.screen_dpi\":{brief:\"The screen density in dots-per-inch (DPI) of the device.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:420,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.screen_dpi attribute\"}]},\"device.screen_height_pixels\":{brief:\"The height of the device screen in pixels.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:2400,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.screen_height_pixels attribute\"}]},\"device.screen_width_pixels\":{brief:\"The width of the device screen in pixels.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1080,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.screen_width_pixels attribute\"}]},\"device.simulator\":{brief:\"Whether the device is a simulator or an actual device.\",type:\"boolean\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!1,changelog:[{version:\"0.5.0\",prs:[300],description:\"Added device.simulator attribute\"}]},\"device.storage_size\":{brief:\"Total device storage in bytes.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:274877906944,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.storage_size attribute\"}]},\"device.thermal_state\":{brief:\"The thermal state of the device. Based on Apple's `ProcessInfo.ThermalState` enum: `nominal`, `fair`, `serious`, or `critical`.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"nominal\",changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.thermal_state attribute\"}]},\"device.timezone\":{brief:\"The timezone of the device.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Europe/Vienna\",changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.timezone attribute\"}]},\"device.usable_memory\":{brief:\"Memory usable for the app in bytes.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:2147483648,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.usable_memory attribute\"}]},dist:{brief:\"The sentry dist.\",type:\"string\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"1.0\",deprecation:{replacement:\"sentry.dist\",reason:\"This attribute is being deprecated in favor of sentry.dist.\"},aliases:[\"sentry.dist\"],changelog:[{version:\"0.16.0\",prs:[489],description:\"Added dist attribute\"}]},effectiveConnectionType:{brief:\"Specifies the estimated effective type of the current connection (e.g. slow-2g, 2g, 3g, 4g).\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"4g\",deprecation:{replacement:\"network.connection.effective_type\",reason:\"Old namespace-less attribute, to be replaced with network.connection.effective_type for span-first future\"},aliases:[\"network.connection.effective_type\"],changelog:[{version:\"0.5.0\",prs:[279],description:\"Added and deprecated attribute to document JS SDK's current behaviour\"}]},environment:{brief:\"The sentry environment.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"production\",deprecation:{replacement:\"sentry.environment\"},aliases:[\"sentry.environment\"],changelog:[{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"error.type\":{brief:\"Describes a class of error the operation ended with.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"timeout\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"event.id\":{brief:\"The unique identifier for this event (log record)\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1234567890,changelog:[{version:\"0.1.0\",prs:[101]}]},\"event.name\":{brief:\"The name that uniquely identifies this event (log record)\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Process Payload\",changelog:[{version:\"0.1.0\",prs:[101,127]}]},\"exception.escaped\":{brief:\"SHOULD be set to true if the exception event is recorded at a point where it is known that the exception is escaping the scope of the span.\",type:\"boolean\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:!0,changelog:[{version:\"0.0.0\"}]},\"exception.message\":{brief:\"The error message.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"ENOENT: no such file or directory\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"exception.stacktrace\":{brief:\"A stacktrace as a string in the natural representation for the language runtime. The representation is to be determined and documented by each language SIG.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:`Exception in thread \"main\" java.lang.RuntimeException: Test exception\n at com.example.GenerateTrace.methodB(GenerateTrace.java:13)\n at com.example.GenerateTrace.methodA(GenerateTrace.java:9)\n at com.example.GenerateTrace.main(GenerateTrace.java:5)`,changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"exception.type\":{brief:\"The type of the exception (its fully-qualified class name, if applicable). The dynamic type of the exception should be preferred over the static type in languages that support it.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"OSError\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"faas.coldstart\":{brief:\"A boolean that is true if the serverless function is executed for the first time (aka cold-start).\",type:\"boolean\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:!0,changelog:[{version:\"0.0.0\"}]},\"faas.cron\":{brief:\"A string containing the schedule period as Cron Expression.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"0/5 * * * ? *\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"faas.duration_in_ms\":{brief:\"The duration a function took to run, in milliseconds.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:120,changelog:[{version:\"0.11.0\",prs:[403]}]},\"faas.entry_point\":{brief:\"The code that's run when the cloud provider invokes your function.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"my_main_function\",changelog:[{version:\"0.11.0\",prs:[403,415]}]},\"faas.execution\":{brief:\"The execution ID of the current function execution.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"af9d5aa4-a685-4c5f-a22b-444f80b3cc28\",deprecation:{replacement:\"faas.invocation_id\",reason:\"This attribute is being deprecated in favor of faas.invocation_id, which is the OTel-aligned replacement.\"},aliases:[\"faas.invocation_id\",\"aws.lambda.aws_request_id\"],changelog:[{version:\"0.16.0\",prs:[473],description:\"Added faas.execution attribute, deprecated in favor of faas.invocation_id\"}]},\"faas.id\":{brief:\"The unique ID of the single function that this runtime instance executes.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"arn:aws:lambda:REGION:ACCOUNT_ID:function:my-function\",deprecation:{replacement:\"cloud.resource_id\",reason:\"This attribute is being deprecated in favor of cloud.resource_id, which is the OTel-aligned replacement (renamed in OTel semantic conventions v1.19.0).\"},aliases:[\"cloud.resource_id\"],changelog:[{version:\"0.16.0\",prs:[475],description:\"Added faas.id attribute, deprecated in favor of cloud.resource_id\"}]},\"faas.identity\":{brief:\"The Service Account (GCP), IAM Execution Role (AWS), or Managed Identity (Azure) used by the serverless function when interacting with other cloud services\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"name@project.iam.gserviceaccount.com (GCP), arn:aws:iam::123456789012:role/role-name (AWS), 00000000-0000-0000-0000-000000000000 (Azure)\",changelog:[{version:\"0.11.0\",prs:[403]}]},\"faas.invocation_id\":{brief:\"The invocation ID of the current function invocation.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"af9d5aa4-a685-4c5f-a22b-444f80b3cc28\",aliases:[\"aws.lambda.aws_request_id\",\"faas.execution\"],changelog:[{version:\"0.16.0\",prs:[473],description:\"Added faas.execution as an alias\"},{version:\"0.11.1\",prs:[414,424]}]},\"faas.invoked_name\":{brief:\"The name of the invoked function.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"my-function\",changelog:[{version:\"0.16.0\",prs:[481],description:\"Added faas.invoked_name attribute\"}]},\"faas.invoked_provider\":{brief:\"The cloud provider of the invoked function.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"aws\",changelog:[{version:\"0.16.0\",prs:[481],description:\"Added faas.invoked_provider attribute\"}]},\"faas.invoked_region\":{brief:\"The cloud region of the invoked function.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"eu-central-1\",changelog:[{version:\"0.16.0\",prs:[481],description:\"Added faas.invoked_region attribute\"}]},\"faas.name\":{brief:\"The name of the serverless function\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"my_function\",aliases:[\"aws.lambda.function_name\"],changelog:[{version:\"0.11.0\",prs:[403,415]}]},\"faas.time\":{brief:\"A string containing the function invocation time in the ISO 8601 format expressed in UTC.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"2020-01-23T13:47:06Z\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"faas.trigger\":{brief:\"Type of the trigger which caused this function invocation.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"timer\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"faas.version\":{brief:\"The version of the function that was invoked\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"$LATEST\",aliases:[\"aws.lambda.function_version\"],changelog:[{version:\"0.11.1\",prs:[414,424]}]},fcp:{brief:\"The time it takes for the browser to render the first piece of meaningful content on the screen\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:547.6951,deprecation:{replacement:\"browser.web_vital.fcp.value\",reason:\"This attribute is being deprecated in favor of browser.web_vital.fcp.value\"},aliases:[\"browser.web_vital.fcp.value\"],changelog:[{version:\"0.5.0\",prs:[235]}]},\"flag.evaluation.<key>\":{brief:\"An instance of a feature flag evaluation. The value of this attribute is the boolean representing the evaluation result. The <key> suffix is the name of the feature flag.\",type:\"boolean\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"flag.evaluation.is_new_ui=true\",changelog:[{version:\"0.1.0\",prs:[103]}]},fp:{brief:\"The time it takes for the browser to render the first pixel on the screen\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:477.1926,deprecation:{replacement:\"browser.web_vital.fp.value\",reason:\"This attribute is being deprecated in favor of browser.web_vital.fp.value\"},aliases:[\"browser.web_vital.fp.value\"],changelog:[{version:\"0.5.0\",prs:[235]}]},\"frames.delay\":{brief:\"The sum of all delayed frame durations in seconds during the lifetime of the span. For more information see [frames delay](https://develop.sentry.dev/sdk/performance/frames-delay/).\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:5,deprecation:{replacement:\"app.vitals.frames.delay.value\",reason:\"Replaced by app.vitals.frames.delay.value to align with the app.vitals.* namespace for mobile performance attributes\"},aliases:[\"app.vitals.frames.delay.value\"],changelog:[{version:\"0.5.0\",prs:[313],description:\"Deprecated in favor of app.vitals.frames.delay.value\"},{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"frames.frozen\":{brief:\"The number of frozen frames rendered during the lifetime of the span.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:3,deprecation:{replacement:\"app.vitals.frames.frozen.count\",reason:\"Replaced by app.vitals.frames.frozen.count to align with the app.vitals.* namespace for mobile performance attributes\"},aliases:[\"app.vitals.frames.frozen.count\"],changelog:[{version:\"0.5.0\",prs:[313],description:\"Deprecated in favor of app.vitals.frames.frozen.count\"},{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},frames_frozen_rate:{brief:\"The rate of frozen frames, or `app_vitals.frames.frozen.count` divided by `app_vitals.frames.total.count`. This is computed by Relay.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",changelog:[{version:\"0.7.0\",prs:[362],description:\"Added frames_frozen_rate attribute\"}]},\"frames.slow\":{brief:\"The number of slow frames rendered during the lifetime of the span.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1,deprecation:{replacement:\"app.vitals.frames.slow.count\",reason:\"Replaced by app.vitals.frames.slow.count to align with the app.vitals.* namespace for mobile performance attributes\"},aliases:[\"app.vitals.frames.slow.count\"],changelog:[{version:\"0.5.0\",prs:[313],description:\"Deprecated in favor of app.vitals.frames.slow.count\"},{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},frames_slow_rate:{brief:\"The rate of slow frames, or `app_vitals.frames.slow.count` divided by `app_vitals.frames.total.count`. This is computed by Relay.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",changelog:[{version:\"0.7.0\",prs:[362],description:\"Added frames_slow_rate attribute\"}]},\"frames.total\":{brief:\"The number of total frames rendered during the lifetime of the span.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:60,deprecation:{replacement:\"app.vitals.frames.total.count\",reason:\"Replaced by app.vitals.frames.total.count to align with the app.vitals.* namespace for mobile performance attributes\"},aliases:[\"app.vitals.frames.total.count\"],changelog:[{version:\"0.5.0\",prs:[313],description:\"Deprecated in favor of app.vitals.frames.total.count\"},{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},fs_error:{brief:\"The error message of a file system error.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"ENOENT: no such file or directory\",deprecation:{replacement:\"error.type\",reason:\"This attribute is not part of the OpenTelemetry specification and error.type fits much better.\"},changelog:[{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"gcp.function.context.event_id\":{brief:\"The event ID from the legacy GCP Cloud Function context (1st gen)\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"1234567890\",changelog:[{version:\"0.7.0\",prs:[371],description:\"Added gcp.function.context.event_id attribute\"}]},\"gcp.function.context.event_type\":{brief:\"The type of the GCP Cloud Function event\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"google.pubsub.topic.publish\",changelog:[{version:\"0.7.0\",prs:[371],description:\"Added gcp.function.context.event_type attribute\"}]},\"gcp.function.context.id\":{brief:\"The unique event ID from the GCP CloudEvents context (2nd gen Cloud Functions)\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"1234567890\",changelog:[{version:\"0.7.0\",prs:[371],description:\"Added gcp.function.context.id attribute\"}]},\"gcp.function.context.resource\":{brief:\"The resource that triggered the GCP Cloud Function event\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"projects/my-project/topics/my-topic\",changelog:[{version:\"0.7.0\",prs:[371],description:\"Added gcp.function.context.resource attribute\"}]},\"gcp.function.context.source\":{brief:\"The source of the GCP Cloud Function event\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"//pubsub.googleapis.com/projects/my-project/topics/my-topic\",changelog:[{version:\"0.7.0\",prs:[371],description:\"Added gcp.function.context.source attribute\"}]},\"gcp.function.context.specversion\":{brief:\"The CloudEvents specification version of the GCP Cloud Function event\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"1.0\",changelog:[{version:\"0.7.0\",prs:[371],description:\"Added gcp.function.context.specversion attribute\"}]},\"gcp.function.context.time\":{brief:\"The timestamp of the GCP Cloud Function event\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"2024-01-01T00:00:00.000Z\",changelog:[{version:\"0.7.0\",prs:[371],description:\"Added gcp.function.context.time attribute\"}]},\"gcp.function.context.timestamp\":{brief:\"The legacy timestamp of the GCP Cloud Function event\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"2024-01-01T00:00:00.000Z\",changelog:[{version:\"0.7.0\",prs:[371],description:\"Added gcp.function.context.timestamp attribute\"}]},\"gcp.function.context.type\":{brief:\"The type of the GCP Cloud Function event context\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"cloud_functions.context\",changelog:[{version:\"0.7.0\",prs:[371],description:\"Added gcp.function.context.type attribute\"}]},\"gcp.project.id\":{brief:\"The ID of the project in GCP that this resource is associated with\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"my-project-123\",changelog:[{version:\"0.11.0\",prs:[403]}]},\"gen_ai.agent.name\":{brief:\"The name of the agent being used.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"ResearchAssistant\",changelog:[{version:\"0.1.0\",prs:[62,127]}]},\"gen_ai.context.utilization\":{brief:\"The fraction of the model context window utilized by this generation.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:.75,changelog:[{version:\"0.5.0\",prs:[315],description:\"Added gen_ai.context.utilization attribute\"}]},\"gen_ai.context.window_size\":{brief:\"The maximum context window size supported by the model for this generation.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:128e3,changelog:[{version:\"0.5.0\",prs:[315],description:\"Added gen_ai.context.window_size attribute\"}]},\"gen_ai.conversation.id\":{brief:\"The unique identifier for a conversation (session, thread), used to store and correlate messages within this conversation.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"conv_5j66UpCpwteGg4YSxUnt7lPY\",changelog:[{version:\"0.4.0\",prs:[250]}]},\"gen_ai.cost.cache_creation.input_tokens\":{brief:\"The cost of input tokens written to cache in USD.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:12.34,changelog:[{version:\"0.16.0\",description:\"Added gen_ai.cost.cache_creation.input_tokens attribute\"}],additionalContext:[\"This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to calculate total cost, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.\",\"Despite the name 'cost.cache_creation.input_tokens', this value is cost in USD, not a token count. For token counts, use gen_ai.usage.cache_creation.input_tokens.\",\"This is a subset of gen_ai.cost.input_tokens, not an independent cost. Do not sum this with gen_ai.cost.input_tokens \\u2014 it is already included.\"]},\"gen_ai.cost.cache_read.input_tokens\":{brief:\"The cost of cached input tokens in USD.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:12.34,changelog:[{version:\"0.16.0\",description:\"Added gen_ai.cost.cache_read.input_tokens attribute\"}],additionalContext:[\"This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to calculate total cost, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.\",\"Despite the name 'cost.cache_read.input_tokens', this value is cost in USD, not a token count. For token counts, use gen_ai.usage.cache_read.input_tokens.\",\"This is a subset of gen_ai.cost.input_tokens, not an independent cost. Do not sum this with gen_ai.cost.input_tokens \\u2014 it is already included.\"]},\"gen_ai.cost.input_tokens\":{brief:\"The total cost of all input tokens in USD (includes cached and cache creation tokens).\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:123.45,changelog:[{version:\"0.9.0\",prs:[397],description:\"Add additional_context\"},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[112]}],additionalContext:[\"This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to calculate total cost, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.\",\"Despite the name 'cost.input_tokens', this value is cost in USD, not a token count. For token counts, use gen_ai.usage.input_tokens.\",\"This is the total cost of all input tokens, including cached and cache creation tokens at their respective rates. For the cached portion, see gen_ai.cost.cache_read.input_tokens. For the cache creation portion, see gen_ai.cost.cache_creation.input_tokens.\"]},\"gen_ai.cost.output_tokens\":{brief:\"The total cost of all output tokens in USD (includes reasoning tokens).\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:123.45,changelog:[{version:\"0.9.0\",prs:[397],description:\"Add additional_context\"},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[112]}],additionalContext:[\"This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to calculate total cost, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.\",\"Despite the name 'cost.output_tokens', this value is cost in USD, not a token count. For token counts, use gen_ai.usage.output_tokens.\",\"This is the total cost of all output tokens, including reasoning tokens at their respective rate. For the reasoning portion, see gen_ai.cost.reasoning.output_tokens.\"]},\"gen_ai.cost.reasoning.output_tokens\":{brief:\"The cost of reasoning output tokens in USD.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:12.34,changelog:[{version:\"0.16.0\",description:\"Added gen_ai.cost.reasoning.output_tokens attribute\"}],additionalContext:[\"This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to calculate total cost, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.\",\"Despite the name 'cost.reasoning.output_tokens', this value is cost in USD, not a token count. For token counts, use gen_ai.usage.reasoning.output_tokens.\",\"This is a subset of gen_ai.cost.output_tokens, not an independent cost. Do not sum this with gen_ai.cost.output_tokens \\u2014 it is already included.\"]},\"gen_ai.cost.total_tokens\":{brief:\"The total cost for the tokens used.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:12.34,aliases:[\"ai.total_cost\"],changelog:[{version:\"0.9.0\",prs:[397],description:\"Add additional_context\"},{version:\"0.5.0\",prs:[264]},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[126]}],additionalContext:[\"This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to calculate total cost, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.\",\"Despite the name 'cost.total_tokens', this value is cost in USD, not a token count. For token counts, use gen_ai.usage.total_tokens.\"]},\"gen_ai.embeddings.input\":{brief:\"The input to the embeddings model.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"What's the weather in Paris?\",changelog:[{version:\"0.3.1\",prs:[195]}]},\"gen_ai.function_id\":{brief:\"Framework-specific tracing label for the execution of a function or other unit of execution in a generative AI system.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"my-awesome-function\",changelog:[{version:\"0.5.0\",prs:[308],description:\"Added gen_ai.function_id attribute\"}]},\"gen_ai.input.messages\":{brief:'The messages passed to the model. It has to be a stringified version of an array of objects. The `role` attribute of each object must be `\"user\"`, `\"assistant\"`, `\"tool\"`, or `\"system\"`. For messages of the role `\"tool\"`, the `content` can be a string or an arbitrary object with information about the tool call. For other messages the `content` can be either a string or a list of objects in the format `{type: \"text\", text:\"...\"}`.',type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:'[{\"role\": \"user\", \"parts\": [{\"type\": \"text\", \"content\": \"Weather in Paris?\"}]}, {\"role\": \"assistant\", \"parts\": [{\"type\": \"tool_call\", \"id\": \"call_VSPygqKTWdrhaFErNvMV18Yl\", \"name\": \"get_weather\", \"arguments\": {\"location\": \"Paris\"}}]}, {\"role\": \"tool\", \"parts\": [{\"type\": \"tool_call_response\", \"id\": \"call_VSPygqKTWdrhaFErNvMV18Yl\", \"result\": \"rainy, 57\\xB0F\"}]}]',aliases:[\"ai.texts\"],changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.4.0\",prs:[221]}]},\"gen_ai.operation.name\":{brief:\"The name of the operation being performed. It has the following list of well-known values: 'chat', 'create_agent', 'embeddings', 'execute_tool', 'generate_content', 'invoke_agent', 'text_completion'. If one of them applies, then that value MUST be used. Otherwise a custom value MAY be used.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"chat\",changelog:[{version:\"0.4.0\",prs:[225]},{version:\"0.1.0\",prs:[62,127]}]},\"gen_ai.operation.type\":{brief:\"The type of AI operation. Must be one of 'agent' (invoke_agent and create_agent spans), 'ai_client' (any LLM call), 'tool' (execute_tool spans), 'handoff' (handoff spans), 'other' (input and output processors, skill loading, guardrails etc.) . Added during ingestion based on span.op and gen_ai.operation.type. Used to filter and aggregate data in the UI\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"tool\",changelog:[{version:\"0.4.0\",prs:[257]},{version:\"0.1.0\",prs:[113,127]}]},\"gen_ai.output.messages\":{brief:\"The model's response messages. It has to be a stringified version of an array of message objects, which can include text responses and tool calls.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:'[{\"role\": \"assistant\", \"parts\": [{\"type\": \"text\", \"content\": \"The weather in Paris is currently rainy with a temperature of 57\\xB0F.\"}], \"finish_reason\": \"stop\"}]',changelog:[{version:\"0.4.0\",prs:[221]}]},\"gen_ai.pipeline.name\":{brief:\"Name of the AI pipeline or chain being executed.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Autofix Pipeline\",aliases:[\"ai.pipeline.name\"],changelog:[{version:\"0.1.0\",prs:[76,127]}]},\"gen_ai.prompt\":{brief:\"The input messages sent to the model\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:'[{\"role\": \"user\", \"message\": \"hello\"}]',deprecation:{reason:\"Deprecated from OTEL, use gen_ai.input.messages with the new format instead.\"},changelog:[{version:\"0.1.0\",prs:[74,108,119]},{version:\"0.0.0\"}]},\"gen_ai.prompt.name\":{brief:\"The name of the prompt that uniquely identifies it.\",type:\"string\",applyScrubbing:{key:\"manual\",reason:\"Prompt names may reveal user behavior patterns or sensitive operations\"},isInOtel:!0,visibility:\"public\",example:\"summarize_text\",aliases:[\"mcp.prompt.name\"],changelog:[{version:\"0.12.0\",prs:[420],description:\"Added gen_ai.prompt.name attribute\"}]},\"gen_ai.provider.name\":{brief:\"The Generative AI provider as identified by the client or server instrumentation.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"openai\",aliases:[\"ai.model.provider\",\"gen_ai.system\"],changelog:[{version:\"0.4.0\",prs:[253]}]},\"gen_ai.request.available_tools\":{brief:\"The available tools for the model. It has to be a stringified version of an array of objects.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:'[{\"name\": \"get_weather\", \"description\": \"Get the weather for a given location\"}, {\"name\": \"get_news\", \"description\": \"Get the news for a given topic\"}]',deprecation:{replacement:\"gen_ai.tool.definitions\"},changelog:[{version:\"0.4.0\",prs:[221]},{version:\"0.1.0\",prs:[63,127]}]},\"gen_ai.request.frequency_penalty\":{brief:\"Used to reduce repetitiveness of generated tokens. The higher the value, the stronger a penalty is applied to previously present tokens, proportional to how many times they have already appeared in the prompt or prior generation.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:.5,aliases:[\"ai.frequency_penalty\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[57]}]},\"gen_ai.request.max_tokens\":{brief:\"The maximum number of tokens to generate in the response.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:2048,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[62]}]},\"gen_ai.request.messages\":{brief:'The messages passed to the model. It has to be a stringified version of an array of objects. The `role` attribute of each object must be `\"user\"`, `\"assistant\"`, `\"tool\"`, or `\"system\"`. For messages of the role `\"tool\"`, the `content` can be a string or an arbitrary object with information about the tool call. For other messages the `content` can be either a string or a list of objects in the format `{type: \"text\", text:\"...\"}`.',type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:'[{\"role\": \"system\", \"content\": \"Generate a random number.\"}, {\"role\": \"user\", \"content\": [{\"text\": \"Generate a random number between 0 and 10.\", \"type\": \"text\"}]}, {\"role\": \"tool\", \"content\": {\"toolCallId\": \"1\", \"toolName\": \"Weather\", \"output\": \"rainy\"}}]',deprecation:{replacement:\"gen_ai.input.messages\"},aliases:[\"ai.input_messages\"],changelog:[{version:\"0.4.0\",prs:[221]},{version:\"0.1.0\",prs:[63,74,108,119,122]}]},\"gen_ai.request.model\":{brief:\"The model identifier being used for the request.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"gpt-4-turbo-preview\",changelog:[{version:\"0.1.0\",prs:[62,127]}]},\"gen_ai.request.presence_penalty\":{brief:\"Used to reduce repetitiveness of generated tokens. Similar to frequency_penalty, except that this penalty is applied equally to all tokens that have already appeared, regardless of their exact frequencies.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:.5,aliases:[\"ai.presence_penalty\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[57]}]},\"gen_ai.request.reasoning_effort\":{brief:\"Constrains the effort on reasoning for reasoning models. Supported values vary by provider.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"high\",changelog:[{version:\"0.13.0\",prs:[334],description:\"Added gen_ai.request.reasoning_effort attribute\"}]},\"gen_ai.request.seed\":{brief:\"The seed, ideally models given the same seed and same other parameters will produce the exact same output.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"1234567890\",aliases:[\"ai.seed\"],changelog:[{version:\"0.1.0\",prs:[57,127]}]},\"gen_ai.request.stop_sequences\":{brief:\"List of sequences that the model will use to stop generating further tokens.\",type:\"string[]\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:[\"forest\",\"lived\"],changelog:[{version:\"0.16.0\",prs:[482],description:\"Added gen_ai.request.stop_sequences attribute\"}]},\"gen_ai.request.temperature\":{brief:\"For an AI model call, the temperature parameter. Temperature essentially means how random the output will be.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:.1,aliases:[\"ai.temperature\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[57]}]},\"gen_ai.request.top_k\":{brief:\"Limits the model to only consider the K most likely next tokens, where K is an integer (e.g., top_k=20 means only the 20 highest probability tokens are considered).\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:35,aliases:[\"ai.top_k\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[57]}]},\"gen_ai.request.top_p\":{brief:\"Limits the model to only consider tokens whose cumulative probability mass adds up to p, where p is a float between 0 and 1 (e.g., top_p=0.7 means only tokens that sum up to 70% of the probability mass are considered).\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:.7,aliases:[\"ai.top_p\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[57]}]},\"gen_ai.response.finish_reasons\":{brief:\"The reason why the model stopped generating.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"COMPLETE\",aliases:[\"ai.finish_reason\"],changelog:[{version:\"0.1.0\",prs:[57,127]}]},\"gen_ai.response.id\":{brief:\"Unique identifier for the completion.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"gen_123abc\",aliases:[\"ai.generation_id\"],changelog:[{version:\"0.1.0\",prs:[57,127]}]},\"gen_ai.response.model\":{brief:\"The vendor-specific ID of the model used.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"gpt-4\",aliases:[\"ai.model_id\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"gen_ai.response.streaming\":{brief:\"Whether or not the AI model call's response was streamed back asynchronously\",type:\"boolean\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,aliases:[\"ai.streaming\"],changelog:[{version:\"0.1.0\",prs:[76]}]},\"gen_ai.response.text\":{brief:\"The model's response text messages. It has to be a stringified version of an array of response text messages.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:'[\"The weather in Paris is rainy and overcast, with temperatures around 57\\xB0F\", \"The weather in London is sunny and warm, with temperatures around 65\\xB0F\"]',deprecation:{replacement:\"gen_ai.output.messages\"},changelog:[{version:\"0.4.0\",prs:[221]},{version:\"0.1.0\",prs:[63,74]}]},\"gen_ai.response.time_to_first_chunk\":{brief:\"Time in seconds when the first response content chunk arrived in streaming responses.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:.6853435,aliases:[\"gen_ai.response.time_to_first_token\"],changelog:[{version:\"0.11.0\",prs:[418],description:\"Added gen_ai.response.time_to_first_chunk attribute\"}]},\"gen_ai.response.time_to_first_token\":{brief:\"Time in seconds when the first response content chunk arrived in streaming responses.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:.6853435,deprecation:{replacement:\"gen_ai.response.time_to_first_chunk\"},aliases:[\"gen_ai.response.time_to_first_chunk\"],changelog:[{version:\"0.11.0\",prs:[418],description:\"Deprecate in favor of gen_ai.response.time_to_first_chunk\"},{version:\"0.4.0\",prs:[227]}]},\"gen_ai.response.tokens_per_second\":{brief:\"The total output tokens per seconds throughput\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:12345.67,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[66]}]},\"gen_ai.response.tool_calls\":{brief:\"The tool calls in the model's response. It has to be a stringified version of an array of objects.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:'[{\"name\": \"get_weather\", \"arguments\": {\"location\": \"Paris\"}}]',deprecation:{replacement:\"gen_ai.output.messages\"},changelog:[{version:\"0.4.0\",prs:[221]},{version:\"0.1.0\",prs:[63,74]}]},\"gen_ai.system\":{brief:\"The provider of the model.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"openai\",deprecation:{replacement:\"gen_ai.provider.name\"},aliases:[\"ai.model.provider\",\"gen_ai.provider.name\"],changelog:[{version:\"0.4.0\",prs:[253]},{version:\"0.1.0\",prs:[57,127]}]},\"gen_ai.system_instructions\":{brief:\"The system instructions passed to the model.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"You are a helpful assistant\",aliases:[\"ai.preamble\"],changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.4.0\",prs:[221]}]},\"gen_ai.system.message\":{brief:\"The system instructions passed to the model.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"You are a helpful assistant\",deprecation:{replacement:\"gen_ai.system_instructions\"},changelog:[{version:\"0.4.0\",prs:[221]},{version:\"0.1.0\",prs:[62]}]},\"gen_ai.tool.call.arguments\":{brief:\"The arguments of the tool call. It has to be a stringified version of the arguments to the tool.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:'{\"location\": \"Paris\"}',aliases:[\"gen_ai.tool.input\"],changelog:[{version:\"0.5.0\",prs:[265]},{version:\"0.4.0\",prs:[221]}]},\"gen_ai.tool.call.result\":{brief:\"The result of the tool call. It has to be a stringified version of the result of the tool.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"rainy, 57\\xB0F\",aliases:[\"gen_ai.tool.output\",\"gen_ai.tool.message\",\"mcp.tool.result.content\"],changelog:[{version:\"0.5.0\",prs:[265]},{version:\"0.4.0\",prs:[221]}]},\"gen_ai.tool.definitions\":{brief:\"The list of source system tool definitions available to the GenAI agent or model.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:'[{\"type\": \"function\", \"name\": \"get_current_weather\", \"description\": \"Get the current weather in a given location\", \"parameters\": {\"type\": \"object\", \"properties\": {\"location\": {\"type\": \"string\", \"description\": \"The city and state, e.g. San Francisco, CA\"}, \"unit\": {\"type\": \"string\", \"enum\": [\"celsius\", \"fahrenheit\"]}}, \"required\": [\"location\", \"unit\"]}}]',changelog:[{version:\"0.4.0\",prs:[221]}]},\"gen_ai.tool.description\":{brief:\"The description of the tool being used.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"Searches the web for current information about a topic\",changelog:[{version:\"0.1.0\",prs:[62,127]}]},\"gen_ai.tool.input\":{brief:\"The input of the tool being used. It has to be a stringified version of the input to the tool.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:'{\"location\": \"Paris\"}',deprecation:{replacement:\"gen_ai.tool.call.arguments\"},aliases:[\"gen_ai.tool.call.arguments\"],changelog:[{version:\"0.5.0\",prs:[265]},{version:\"0.1.0\",prs:[63,74]}]},\"gen_ai.tool.message\":{brief:\"The response from a tool or function call passed to the model.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"rainy, 57\\xB0F\",deprecation:{replacement:\"gen_ai.tool.call.result\"},aliases:[\"gen_ai.tool.call.result\",\"gen_ai.tool.output\",\"mcp.tool.result.content\"],changelog:[{version:\"0.5.0\",prs:[265]},{version:\"0.1.0\",prs:[62]}]},\"gen_ai.tool.name\":{brief:\"Name of the tool utilized by the agent.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"Flights\",aliases:[\"ai.function_call\",\"mcp.tool.name\"],changelog:[{version:\"0.1.0\",prs:[57,127]}]},\"gen_ai.tool.output\":{brief:\"The output of the tool being used. It has to be a stringified version of the output of the tool.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"rainy, 57\\xB0F\",deprecation:{replacement:\"gen_ai.tool.call.result\"},aliases:[\"gen_ai.tool.call.result\",\"gen_ai.tool.message\",\"mcp.tool.result.content\"],changelog:[{version:\"0.5.0\",prs:[265]},{version:\"0.1.0\",prs:[63,74]}]},\"gen_ai.tool.type\":{brief:\"The type of tool being used.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"function\",deprecation:{reason:\"The gen_ai.tool.type attribute is deprecated and should no longer be set.\"},changelog:[{version:\"0.1.0\",prs:[62,127]}]},\"gen_ai.usage.cache_creation.input_tokens\":{brief:\"The number of tokens written to the cache when processing the AI input (prompt).\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:100,aliases:[\"gen_ai.usage.input_tokens.cache_write\"],changelog:[{version:\"0.11.0\",prs:[418],description:\"Added gen_ai.usage.cache_creation.input_tokens attribute\"}],additionalContext:[\"This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to count tokens, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.\"]},\"gen_ai.usage.cache_read.input_tokens\":{brief:\"The number of cached tokens used to process the AI input (prompt).\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:50,aliases:[\"gen_ai.usage.input_tokens.cached\"],changelog:[{version:\"0.11.0\",prs:[418],description:\"Added gen_ai.usage.cache_read.input_tokens attribute\"}],additionalContext:[\"This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to count tokens, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.\",\"This is a subset of gen_ai.usage.input_tokens, not an independent count. Do not sum this with gen_ai.usage.input_tokens \\u2014 it is already included.\"]},\"gen_ai.usage.completion_tokens\":{brief:\"The number of tokens used in the GenAI response (completion).\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:10,deprecation:{replacement:\"gen_ai.usage.output_tokens\"},aliases:[\"ai.completion_tokens.used\",\"gen_ai.usage.output_tokens\"],changelog:[{version:\"0.9.0\",prs:[397],description:\"Add additional_context\"},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[61]},{version:\"0.0.0\"}],additionalContext:[\"This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to count tokens, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.\"]},\"gen_ai.usage.input_tokens\":{brief:\"The number of tokens used to process the AI input (prompt) including cached input tokens.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:10,aliases:[\"ai.prompt_tokens.used\",\"gen_ai.usage.prompt_tokens\"],changelog:[{version:\"0.11.0\",prs:[418],description:\"Update additional_context to reference gen_ai.usage.cache_read.input_tokens\"},{version:\"0.9.0\",prs:[397],description:\"Add additional_context\"},{version:\"0.5.0\",prs:[261]},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[112]},{version:\"0.0.0\"}],additionalContext:[\"This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to count tokens, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.\",\"This count includes cached input tokens. gen_ai.usage.cache_read.input_tokens is a subset of this value, not an independent count \\u2014 do not sum them together.\"]},\"gen_ai.usage.input_tokens.cached\":{brief:\"The number of cached tokens used to process the AI input (prompt).\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:50,deprecation:{replacement:\"gen_ai.usage.cache_read.input_tokens\"},aliases:[\"gen_ai.usage.cache_read.input_tokens\"],changelog:[{version:\"0.11.0\",prs:[418],description:\"Deprecate in favor of gen_ai.usage.cache_read.input_tokens\"},{version:\"0.9.0\",prs:[397],description:\"Add additional_context\"},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[62,112]}],additionalContext:[\"This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to count tokens, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.\",\"This is a subset of gen_ai.usage.input_tokens, not an independent count. Do not sum this with gen_ai.usage.input_tokens \\u2014 it is already included.\"]},\"gen_ai.usage.input_tokens.cache_write\":{brief:\"The number of tokens written to the cache when processing the AI input (prompt).\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:100,deprecation:{replacement:\"gen_ai.usage.cache_creation.input_tokens\"},aliases:[\"gen_ai.usage.cache_creation.input_tokens\"],changelog:[{version:\"0.11.0\",prs:[418],description:\"Deprecate in favor of gen_ai.usage.cache_creation.input_tokens\"},{version:\"0.9.0\",prs:[397],description:\"Add additional_context\"},{version:\"0.4.0\",prs:[217,228]}],additionalContext:[\"This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to count tokens, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.\"]},\"gen_ai.usage.output_tokens\":{brief:\"The number of tokens used for creating the AI output (including reasoning tokens).\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:10,aliases:[\"ai.completion_tokens.used\",\"gen_ai.usage.completion_tokens\"],changelog:[{version:\"0.11.0\",prs:[418],description:\"Update additional_context to reference gen_ai.usage.reasoning.output_tokens\"},{version:\"0.9.0\",prs:[397],description:\"Add additional_context\"},{version:\"0.5.0\",prs:[261]},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[112]},{version:\"0.0.0\"}],additionalContext:[\"This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to count tokens, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.\",\"This count includes reasoning tokens. gen_ai.usage.reasoning.output_tokens is a subset of this value, not an independent count \\u2014 do not sum them together.\"]},\"gen_ai.usage.output_tokens.reasoning\":{brief:\"The number of tokens used for reasoning to create the AI output.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:75,deprecation:{replacement:\"gen_ai.usage.reasoning.output_tokens\"},aliases:[\"gen_ai.usage.reasoning.output_tokens\"],changelog:[{version:\"0.11.0\",prs:[418],description:\"Deprecate in favor of gen_ai.usage.reasoning.output_tokens\"},{version:\"0.9.0\",prs:[397],description:\"Add additional_context\"},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[62,112]}],additionalContext:[\"This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to count tokens, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.\",\"This is a subset of gen_ai.usage.output_tokens, not an independent count. Do not sum this with gen_ai.usage.output_tokens \\u2014 it is already included.\"]},\"gen_ai.usage.prompt_tokens\":{brief:\"The number of tokens used in the GenAI input (prompt).\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:20,deprecation:{replacement:\"gen_ai.usage.input_tokens\"},aliases:[\"ai.prompt_tokens.used\",\"gen_ai.usage.input_tokens\"],changelog:[{version:\"0.9.0\",prs:[397],description:\"Add additional_context\"},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[61]},{version:\"0.0.0\"}],additionalContext:[\"This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to count tokens, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.\"]},\"gen_ai.usage.reasoning.output_tokens\":{brief:\"The number of tokens used for reasoning to create the AI output.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:75,aliases:[\"gen_ai.usage.output_tokens.reasoning\"],changelog:[{version:\"0.11.0\",prs:[418],description:\"Added gen_ai.usage.reasoning.output_tokens attribute\"}],additionalContext:[\"This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to count tokens, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.\",\"This is a subset of gen_ai.usage.output_tokens, not an independent count. Do not sum this with gen_ai.usage.output_tokens \\u2014 it is already included.\"]},\"gen_ai.usage.total_tokens\":{brief:\"The total number of tokens used to process the prompt. (input tokens plus output todkens)\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:20,aliases:[\"ai.total_tokens.used\"],changelog:[{version:\"0.9.0\",prs:[397],description:\"Add additional_context\"},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[57]}],additionalContext:[\"This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to count tokens, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.\",\"This is the sum of gen_ai.usage.input_tokens and gen_ai.usage.output_tokens. Do not sum this with either of them \\u2014 they are already included.\"]},\"graphql.document\":{brief:\"The GraphQL document being executed.\",type:\"string\",applyScrubbing:{key:\"auto\",reason:\"The document may contain sensitive information in arguments or variables. Instrumentation should redact sensitive information when possible.\"},isInOtel:!0,visibility:\"public\",example:\"query findBookById { bookById(id: ?) { name } }\",changelog:[{version:\"0.7.0\",description:\"Adds the `graphql.document` attribute to track the GraphQL document being executed.\"}]},\"graphql.operation.name\":{brief:\"The name of the operation being executed.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"findBookById\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"graphql.operation.type\":{brief:\"The type of the operation being executed.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"query\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},hardwareConcurrency:{brief:\"The number of logical CPU cores available.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"14\",deprecation:{replacement:\"device.processor_count\",reason:\"Old namespace-less attribute, to be replaced with device.processor_count for span-first future\"},aliases:[\"device.processor_count\"],changelog:[{version:\"0.5.0\",prs:[281,300],description:\"Added and deprecated attribute to document JS SDK's current behaviour\"}]},\"http.client_ip\":{brief:\"Client address - domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"example.com\",deprecation:{replacement:\"client.address\"},aliases:[\"client.address\"],changelog:[{version:\"0.1.0\",prs:[61,106,127]},{version:\"0.0.0\"}]},\"http.decoded_response_content_length\":{brief:\"The decoded body size of the response (in bytes).\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:456,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"http.flavor\":{brief:\"The actual version of the protocol used for network communication.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"1.1\",deprecation:{replacement:\"network.protocol.version\"},aliases:[\"network.protocol.version\",\"net.protocol.version\"],changelog:[{version:\"0.1.0\",prs:[61,108,127]},{version:\"0.0.0\"}]},\"http.fragment\":{brief:\"The fragments present in the URI. Note that this contains the leading # character, while the `url.fragment` attribute does not.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"#details\",changelog:[{version:\"0.0.0\"}]},\"http.host\":{brief:\"The domain name.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"example.com\",deprecation:{replacement:\"server.address\",reason:\"Deprecated, use one of `server.address` or `client.address`, depending on the usage\"},aliases:[\"server.address\",\"client.address\",\"http.server_name\",\"net.host.name\",\"server_name\"],changelog:[{version:\"0.1.0\",prs:[61,108,127]},{version:\"0.0.0\"}]},\"http.method\":{brief:\"The HTTP method used.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"GET\",deprecation:{replacement:\"http.request.method\"},aliases:[\"http.request.method\",\"http.request_method\",\"method\"],changelog:[{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"http.query\":{brief:\"The query string present in the URL. Note that this contains the leading ? character, while the `url.query` attribute does not.\",type:\"string\",applyScrubbing:{key:\"auto\",reason:\"Query string values can contain sensitive information. Clients should attempt to scrub parameters that might contain sensitive information.\"},isInOtel:!1,visibility:\"public\",example:\"?foo=bar&bar=baz\",changelog:[{version:\"0.0.0\"}]},\"http.request.body.data\":{brief:\"HTTP request body data. Can be given as string or structural data of any format.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:'[{\"role\": \"user\", \"message\": \"hello\"}]',changelog:[{version:\"0.6.0\",prs:[336],description:\"Added http.request.body.data attribute\"}]},\"http.request.connection_end\":{brief:\"The UNIX timestamp representing the time immediately after the browser finishes establishing the connection to the server to retrieve the resource. The timestamp value includes the time interval to establish the transport connection, as well as other time intervals such as TLS handshake and SOCKS authentication.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:173282955515e-2,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[134]},{version:\"0.0.0\"}]},\"http.request.connect_start\":{brief:\"The UNIX timestamp representing the time immediately before the user agent starts establishing the connection to the server to retrieve the resource.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1732829555111e-3,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[134]},{version:\"0.0.0\"}]},\"http.request.domain_lookup_end\":{brief:\"The UNIX timestamp representing the time immediately after the browser finishes the domain-name lookup for the resource.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1732829555201e-3,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[134]},{version:\"0.0.0\"}]},\"http.request.domain_lookup_start\":{brief:\"The UNIX timestamp representing the time immediately before the browser starts the domain name lookup for the resource.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1732829555322e-3,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[134]},{version:\"0.0.0\"}]},\"http.request.fetch_start\":{brief:\"The UNIX timestamp representing the time immediately before the browser starts to fetch the resource.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1732829555389e-3,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[134]},{version:\"0.0.0\"}]},\"http.request.header.<key>\":{brief:\"HTTP request headers, <key> being the normalized HTTP Header name (lowercase), the value being the header values.\",type:\"string[]\",applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",hasDynamicSuffix:!0,example:\"http.request.header.custom-header=['foo', 'bar']\",changelog:[{version:\"0.4.0\",prs:[201,204]},{version:\"0.1.0\",prs:[103]}]},\"http.request.method\":{brief:\"The HTTP method used.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"GET\",aliases:[\"method\",\"http.method\",\"http.request_method\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"http.request_method\":{brief:\"The HTTP method used.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"GET\",deprecation:{replacement:\"http.request.method\"},aliases:[\"method\",\"http.method\",\"http.request.method\"],changelog:[{version:\"0.6.0\",prs:[343],description:\"Added http.request_method attribute\"}]},\"http.request.redirect_end\":{brief:\"The UNIX timestamp representing the timestamp immediately after receiving the last byte of the response of the last redirect\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1732829558502e-3,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[130,134]}]},\"http.request.redirect_start\":{brief:\"The UNIX timestamp representing the start time of the fetch which that initiates the redirect.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1732829555495e-3,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[134]},{version:\"0.0.0\"}]},\"http.request.request_start\":{brief:\"The UNIX timestamp representing the time immediately before the browser starts requesting the resource from the server, cache, or local resource. If the transport connection fails and the browser retires the request, the value returned will be the start of the retry request.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:173282955551e-2,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[134]},{version:\"0.0.0\"}]},\"http.request.resend_count\":{brief:\"The ordinal number of request resending attempt (for any reason, including redirects).\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:2,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"http.request.response_end\":{brief:\"The UNIX timestamp representing the time immediately after the browser receives the last byte of the resource or immediately before the transport connection is closed, whichever comes first.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:173282955589e-2,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[134]},{version:\"0.0.0\"}]},\"http.request.response_start\":{brief:\"The UNIX timestamp representing the time immediately before the browser starts requesting the resource from the server, cache, or local resource. If the transport connection fails and the browser retires the request, the value returned will be the start of the retry request.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:17328295557e-1,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[134]},{version:\"0.0.0\"}]},\"http.request.same_origin\":{brief:\"Indicates that a URL has the same origin as the current page's origin in the browser.\",type:\"boolean\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,aliases:[\"url.same_origin\"],changelog:[{version:\"0.16.0\",prs:[456],description:\"Added http.request.same_origin attribute\"}]},\"http.request.secure_connection_start\":{brief:\"The UNIX timestamp representing the time immediately before the browser starts the handshake process to secure the current connection. If a secure connection is not used, the property returns zero.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:173282955573e-2,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[134]},{version:\"0.0.0\"}]},\"http.request.time_to_first_byte\":{brief:\"The time in seconds from the browser's timeorigin to when the first byte of the request's response was received. See https://web.dev/articles/ttfb#measure-resource-requests\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1.032,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[131]}]},\"http.request.worker_start\":{brief:\"The UNIX timestamp representing the timestamp immediately before dispatching the FetchEvent if a Service Worker thread is already running, or immediately before starting the Service Worker thread if it is not already running.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:173282955368e-2,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[130,134]}]},\"http.response.body.size\":{brief:\"The encoded body size of the response (in bytes).\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:123,aliases:[\"http.response_content_length\",\"http.response.header.content-length\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[106]},{version:\"0.0.0\"}]},\"http.response_content_length\":{brief:\"The encoded body size of the response (in bytes).\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:123,deprecation:{replacement:\"http.response.body.size\"},aliases:[\"http.response.body.size\",\"http.response.header.content-length\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[61,106]},{version:\"0.0.0\"}]},\"http.response.header.content-length\":{brief:\"The size of the message body sent to the recipient (in bytes)\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"http.response.header.custom-header=['foo', 'bar']\",aliases:[\"http.response_content_length\",\"http.response.body.size\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"http.response.header.<key>\":{brief:\"HTTP response headers, <key> being the normalized HTTP Header name (lowercase), the value being the header values.\",type:\"string[]\",applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",hasDynamicSuffix:!0,example:\"http.response.header.custom-header=['foo', 'bar']\",changelog:[{version:\"0.4.0\",prs:[201,204]},{version:\"0.1.0\",prs:[103]}]},\"http.response.size\":{brief:\"The transfer size of the response (in bytes).\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:456,aliases:[\"http.response_transfer_size\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"http.response.status_code\":{brief:\"The status code of the HTTP response.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:404,aliases:[\"http.status_code\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"http.response_transfer_size\":{brief:\"The transfer size of the response (in bytes).\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:456,deprecation:{replacement:\"http.response.size\"},aliases:[\"http.response.size\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[61]},{version:\"0.0.0\"}]},\"http.route\":{brief:\"The matched route, that is, the path template in the format used by the respective server framework.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"/users/:id\",aliases:[\"url.template\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"http.scheme\":{brief:\"The URI scheme component identifying the used protocol.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"https\",deprecation:{replacement:\"url.scheme\"},aliases:[\"url.scheme\"],changelog:[{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"http.server_name\":{brief:\"The server domain name\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"example.com\",deprecation:{replacement:\"server.address\"},aliases:[\"server.address\",\"net.host.name\",\"http.host\",\"server_name\"],changelog:[{version:\"0.1.0\",prs:[61,108,127]},{version:\"0.0.0\"}]},\"http.server.request.time_in_queue\":{brief:\"The time in milliseconds the request spent in the server queue before processing began. Measured from the X-Request-Start header set by reverse proxies (e.g., Nginx, HAProxy, Heroku) to when the application started handling the request.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:50,changelog:[{version:\"0.5.0\",prs:[267]}]},\"http.status_code\":{brief:\"The status code of the HTTP response.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:404,deprecation:{replacement:\"http.response.status_code\"},aliases:[\"http.response.status_code\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[61]},{version:\"0.0.0\"}]},\"http.target\":{brief:\"The pathname and query string of the URL.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"/test?foo=bar#buzz\",deprecation:{replacement:\"url.path\",reason:\"This attribute is being deprecated in favor of url.path and url.query\"},changelog:[{version:\"0.1.0\",prs:[61]},{version:\"0.0.0\"}]},\"http.url\":{brief:\"The URL of the resource that was fetched.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"https://example.com/test?foo=bar#buzz\",deprecation:{replacement:\"url.full\"},aliases:[\"url.full\",\"url\"],changelog:[{version:\"0.1.0\",prs:[61,108]},{version:\"0.0.0\"}]},\"http.user_agent\":{brief:\"Value of the HTTP User-Agent header sent by the client.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1\",deprecation:{replacement:\"user_agent.original\"},aliases:[\"user_agent.original\"],changelog:[{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},id:{brief:\"A unique identifier for the span.\",type:\"string\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"f47ac10b58cc4372a5670e02b2c3d479\",changelog:[{version:\"0.0.0\"}]},inp:{brief:\"The value of the recorded Interaction to Next Paint (INP) web vital\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:200,deprecation:{replacement:\"browser.web_vital.inp.value\",reason:\"The INP web vital is now recorded as a browser.web_vital.inp.value attribute.\"},aliases:[\"browser.web_vital.inp.value\"],changelog:[{version:\"0.5.0\",prs:[229],description:\"Added and deprecated attribute to document JS SDK's current behaviour\"}]},\"jsonrpc.protocol.version\":{brief:\"The version of the JSON-RPC protocol used.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"2.0\",changelog:[{version:\"0.12.0\",prs:[420],description:\"Added jsonrpc.protocol.version attribute\"}]},\"jsonrpc.request.id\":{brief:\"The JSON-RPC request identifier. Unique within the session.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"1\",aliases:[\"mcp.request.id\"],changelog:[{version:\"0.12.0\",prs:[420],description:\"Added jsonrpc.request.id attribute\"}]},\"jvm.gc.action\":{brief:\"Name of the garbage collector action.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"end of minor GC\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"jvm.gc.name\":{brief:\"Name of the garbage collector.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"G1 Young Generation\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"jvm.memory.pool.name\":{brief:\"Name of the memory pool.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"G1 Old Gen\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"jvm.memory.type\":{brief:\"Name of the memory pool.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"G1 Old Gen\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"jvm.thread.daemon\":{brief:\"Whether the thread is daemon or not.\",type:\"boolean\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:!0,changelog:[{version:\"0.0.0\"}]},\"jvm.thread.state\":{brief:\"State of the thread.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"blocked\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"koa.name\":{brief:\"The name of the Koa middleware or matched route that handled the request.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"/users/:id\",deprecation:{reason:\"No single replacement. SDKs should use http.route for router layers and code.function.name for middleware layers instead.\"},changelog:[{version:\"0.16.0\",prs:[490],description:\"Added koa.name attribute as deprecated\"}]},\"koa.type\":{brief:\"The type of the Koa layer that handled the request.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"router\",changelog:[{version:\"0.16.0\",prs:[471],description:\"Added koa.type attribute\"}]},lcp:{brief:\"The value of the recorded Largest Contentful Paint (LCP) web vital\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:2500,deprecation:{replacement:\"browser.web_vital.lcp.value\",reason:\"The LCP web vital is now recorded as a browser.web_vital.lcp.value attribute.\"},aliases:[\"browser.web_vital.lcp.value\"],changelog:[{version:\"0.5.0\",prs:[229],description:\"Added and deprecated attribute to document JS SDK's current behaviour\"}]},\"lcp.element\":{brief:\"The dom element responsible for the largest contentful paint.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"img\",deprecation:{replacement:\"browser.web_vital.lcp.element\",reason:\"The LCP element is now recorded as a browser.web_vital.lcp.element attribute.\"},aliases:[\"browser.web_vital.lcp.element\"],changelog:[{version:\"0.5.0\",prs:[233]},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"lcp.id\":{brief:\"The id of the dom element responsible for the largest contentful paint.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"#hero\",deprecation:{replacement:\"browser.web_vital.lcp.id\",reason:\"The LCP id is now recorded as a browser.web_vital.lcp.id attribute.\"},aliases:[\"browser.web_vital.lcp.id\"],changelog:[{version:\"0.5.0\",prs:[233]},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"lcp.loadTime\":{brief:\"The time it took for the LCP element to be loaded\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1402,deprecation:{replacement:\"browser.web_vital.lcp.load_time\",reason:\"The LCP load time is now recorded as a browser.web_vital.lcp.load_time attribute.\"},aliases:[\"browser.web_vital.lcp.load_time\"],changelog:[{version:\"0.5.0\",prs:[233]}]},\"lcp.renderTime\":{brief:\"The time it took for the LCP element to be rendered\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1685,deprecation:{replacement:\"browser.web_vital.lcp.render_time\",reason:\"The LCP render time is now recorded as a browser.web_vital.lcp.render_time attribute.\"},aliases:[\"browser.web_vital.lcp.render_time\"],changelog:[{version:\"0.5.0\",prs:[233]}]},\"lcp.size\":{brief:\"The size of the largest contentful paint element.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1234,deprecation:{replacement:\"browser.web_vital.lcp.size\",reason:\"The LCP size is now recorded as a browser.web_vital.lcp.size attribute.\"},aliases:[\"browser.web_vital.lcp.size\"],changelog:[{version:\"0.5.0\",prs:[233]},{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"lcp.url\":{brief:\"The url of the dom element responsible for the largest contentful paint.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"https://example.com\",deprecation:{replacement:\"browser.web_vital.lcp.url\",reason:\"The LCP url is now recorded as a browser.web_vital.lcp.url attribute.\"},aliases:[\"browser.web_vital.lcp.url\"],changelog:[{version:\"0.5.0\",prs:[233]},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"logger.name\":{brief:\"The name of the logger that generated this event.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"myLogger\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"mcp.cancelled.reason\":{brief:\"Reason for the cancellation of an MCP operation.\",type:\"string\",applyScrubbing:{key:\"manual\",reason:\"Cancellation reasons may contain user-specific or sensitive information\"},isInOtel:!1,visibility:\"public\",example:\"User cancelled the request\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.cancelled.request_id\":{brief:\"Request ID of the cancelled MCP operation.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"123\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.client.name\":{brief:\"Name of the MCP client application.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"claude-desktop\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.client.title\":{brief:\"Display title of the MCP client application.\",type:\"string\",applyScrubbing:{key:\"manual\",reason:\"Client titles may reveal user-specific application configurations or custom setups\"},isInOtel:!1,visibility:\"public\",example:\"Claude Desktop\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.client.version\":{brief:\"Version of the MCP client application.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"1.0.0\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.lifecycle.phase\":{brief:\"Lifecycle phase indicator for MCP operations.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"initialization_complete\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.logging.data_type\":{brief:\"Data type of the logged message content.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"string\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.logging.level\":{brief:\"Log level for MCP logging operations.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"info\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.logging.logger\":{brief:\"Logger name for MCP logging operations.\",type:\"string\",applyScrubbing:{key:\"manual\",reason:\"Logger names may be user-defined and could contain sensitive information\"},isInOtel:!1,visibility:\"public\",example:\"mcp_server\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.logging.message\":{brief:\"Log message content from MCP logging operations.\",type:\"string\",applyScrubbing:{key:\"auto\",reason:\"Log messages can contain user data\"},isInOtel:!1,visibility:\"public\",example:\"Tool execution completed successfully\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.method.name\":{brief:\"The name of the MCP request or notification method being called.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"tools/call\",changelog:[{version:\"0.12.0\",prs:[420],description:\"Set is_in_otel=true, attribute exists in OTel MCP registry\"},{version:\"0.3.0\",prs:[171]}]},\"mcp.progress.current\":{brief:\"Current progress value of an MCP operation.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:50,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.3.0\",prs:[171]}]},\"mcp.progress.message\":{brief:\"Progress message describing the current state of an MCP operation.\",type:\"string\",applyScrubbing:{key:\"manual\",reason:\"Progress messages may contain user-specific or sensitive information\"},isInOtel:!1,visibility:\"public\",example:\"Processing 50 of 100 items\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.progress.percentage\":{brief:\"Calculated progress percentage of an MCP operation. Computed from current/total * 100.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:50,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.3.0\",prs:[171]}]},\"mcp.progress.token\":{brief:\"Token for tracking progress of an MCP operation.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"progress-token-123\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.progress.total\":{brief:\"Total progress target value of an MCP operation.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:100,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.3.0\",prs:[171]}]},\"mcp.prompt.name\":{brief:\"Name of the MCP prompt template being used.\",type:\"string\",applyScrubbing:{key:\"manual\",reason:\"Prompt names may reveal user behavior patterns or sensitive operations\"},isInOtel:!1,visibility:\"public\",example:\"summarize\",deprecation:{replacement:\"gen_ai.prompt.name\",reason:\"OTel uses gen_ai.prompt.name for MCP prompt names\"},aliases:[\"gen_ai.prompt.name\"],changelog:[{version:\"0.12.0\",prs:[420],description:\"Deprecated in favor of gen_ai.prompt.name\"},{version:\"0.3.0\",prs:[171]}]},\"mcp.prompt.result.description\":{brief:\"Description of the prompt result.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"A summary of the requested information\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.prompt.result.message_content\":{brief:\"Content of the message in the prompt result. Used for single message results only.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"Please provide a summary of the document\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.prompt.result.message_count\":{brief:\"Number of messages in the prompt result.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:3,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.3.0\",prs:[171]}]},\"mcp.prompt.result.message_role\":{brief:\"Role of the message in the prompt result. Used for single message results only.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"user\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.protocol.ready\":{brief:\"Protocol readiness indicator for MCP session. Non-zero value indicates the protocol is ready.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.3.0\",prs:[171]}]},\"mcp.protocol.version\":{brief:\"MCP protocol version used in the session.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"2024-11-05\",changelog:[{version:\"0.12.0\",prs:[420],description:\"Set is_in_otel=true, attribute exists in OTel MCP registry\"},{version:\"0.3.0\",prs:[171]}]},\"mcp.request.argument.<key>\":{brief:\"MCP request argument with dynamic key suffix. The <key> is replaced with the actual argument name. The value is a JSON-stringified representation of the argument value.\",type:\"string\",applyScrubbing:{key:\"auto\",reason:\"Arguments contain user input\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"mcp.request.argument.query='weather in Paris'\",changelog:[{version:\"0.3.0\",prs:[176]}]},\"mcp.request.argument.name\":{brief:\"Name argument from prompts/get MCP request.\",type:\"string\",applyScrubbing:{key:\"auto\",reason:\"Prompt names can contain user input\"},isInOtel:!1,visibility:\"public\",example:\"summarize\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.request.argument.uri\":{brief:\"URI argument from resources/read MCP request.\",type:\"string\",applyScrubbing:{key:\"auto\",reason:\"URIs can contain user file paths\"},isInOtel:!1,visibility:\"public\",example:\"file:///path/to/resource\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.request.id\":{brief:\"JSON-RPC request identifier for the MCP request. Unique within the MCP session.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"1\",deprecation:{replacement:\"jsonrpc.request.id\",reason:\"OTel models MCP as JSON-RPC, uses jsonrpc.request.id\"},aliases:[\"jsonrpc.request.id\"],changelog:[{version:\"0.12.0\",prs:[420],description:\"Deprecated in favor of jsonrpc.request.id\"},{version:\"0.3.0\",prs:[171]}]},\"mcp.resource.protocol\":{brief:\"Protocol of the resource URI being accessed, extracted from the URI.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"file\",deprecation:{replacement:\"network.protocol.name\",reason:\"OTel uses the generic network.protocol.name attribute\"},aliases:[\"network.protocol.name\",\"net.protocol.name\"],changelog:[{version:\"0.12.0\",prs:[420],description:\"Deprecated in favor of network.protocol.name\"},{version:\"0.3.0\",prs:[171]}]},\"mcp.resource.uri\":{brief:\"The resource URI being accessed in an MCP operation.\",type:\"string\",applyScrubbing:{key:\"auto\",reason:\"URIs can contain sensitive file paths\"},isInOtel:!0,visibility:\"public\",example:\"file:///path/to/file.txt\",changelog:[{version:\"0.12.0\",prs:[420],description:\"Set is_in_otel=true, attribute exists in OTel MCP registry\"},{version:\"0.3.0\",prs:[171]}]},\"mcp.server.name\":{brief:\"Name of the MCP server application.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"sentry-mcp-server\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.server.title\":{brief:\"Display title of the MCP server application.\",type:\"string\",applyScrubbing:{key:\"manual\",reason:\"Server titles may reveal user-specific application configurations or custom setups\"},isInOtel:!1,visibility:\"public\",example:\"Sentry MCP Server\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.server.version\":{brief:\"Version of the MCP server application.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"0.1.0\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.session.id\":{brief:\"Identifier for the MCP session.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"550e8400-e29b-41d4-a716-446655440000\",changelog:[{version:\"0.12.0\",prs:[420],description:\"Set is_in_otel=true, attribute exists in OTel MCP registry\"},{version:\"0.3.0\",prs:[171]}]},\"mcp.tool.name\":{brief:\"Name of the MCP tool being called.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"calculator\",deprecation:{replacement:\"gen_ai.tool.name\",reason:\"OTel uses gen_ai.tool.name for MCP tool names\"},aliases:[\"gen_ai.tool.name\",\"ai.function_call\"],changelog:[{version:\"0.12.0\",prs:[420],description:\"Deprecated in favor of gen_ai.tool.name\"},{version:\"0.3.0\",prs:[171]}]},\"mcp.tool.result.content\":{brief:\"The content of the tool result.\",type:\"string\",applyScrubbing:{key:\"auto\",reason:\"Tool results can contain user data\"},isInOtel:!1,visibility:\"public\",example:'{\"output\": \"rainy\", \"toolCallId\": \"1\"}',deprecation:{replacement:\"gen_ai.tool.call.result\",reason:\"OTel uses gen_ai.tool.call.result for MCP tool results\"},aliases:[\"gen_ai.tool.call.result\",\"gen_ai.tool.message\",\"gen_ai.tool.output\"],changelog:[{version:\"0.12.0\",prs:[420],description:\"Deprecated in favor of gen_ai.tool.call.result\"},{version:\"0.3.0\",prs:[171]},{version:\"0.2.0\",prs:[164]}]},\"mcp.tool.result.content_count\":{brief:\"Number of content items in the tool result.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.3.0\",prs:[171]}]},\"mcp.tool.result.is_error\":{brief:\"Whether a tool execution resulted in an error.\",type:\"boolean\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!1,deprecation:{replacement:\"error.type\",reason:\"OTel uses error.type set to 'tool_error' when isError is true. Cannot be automatically backfilled due to type mismatch (boolean vs string).\"},changelog:[{version:\"0.12.0\",prs:[420],description:\"Deprecated in favor of error.type\"},{version:\"0.3.0\",prs:[171]}]},\"mcp.transport\":{brief:\"Transport method used for MCP communication.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"stdio\",deprecation:{replacement:\"network.transport\",reason:\"OTel uses the generic network.transport attribute\"},aliases:[\"network.transport\",\"net.transport\"],changelog:[{version:\"0.12.0\",prs:[420],description:\"Deprecated in favor of network.transport\"},{version:\"0.3.0\",prs:[171]}]},\"mdc.<key>\":{brief:\"Attributes from the Mapped Diagnostic Context (MDC) present at the moment the log record was created. The MDC is supported by all the most popular logging solutions in the Java ecosystem, and it's usually implemented as a thread-local map that stores context for e.g. a specific request.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"mdc.some_key='some_value'\",changelog:[{version:\"0.3.0\",prs:[176]}]},\"messaging.batch.message_count\":{brief:\"The number of messages sent, received, or processed in the scope of the batching operation.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:10,changelog:[{version:\"0.6.0\",prs:[341],description:\"Added messaging.batch.message_count attribute\"}]},\"messaging.destination\":{brief:\"The message destination name.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"BestTopic\",deprecation:{replacement:\"messaging.destination.name\",reason:\"This attribute is being deprecated in favor of messaging.destination.name, which is the OTel-aligned replacement.\"},aliases:[\"messaging.destination.name\"],changelog:[{version:\"0.16.0\",prs:[482],description:\"Added messaging.destination attribute, deprecated in favor of messaging.destination.name\"}]},\"messaging.destination.connection\":{brief:\"The message destination connection.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"BestTopic\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"messaging.destination.name\":{brief:\"The message destination name.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"BestTopic\",aliases:[\"messaging.destination\"],changelog:[{version:\"0.16.0\",prs:[482],description:\"Added messaging.destination as an alias\"},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"messaging.message.body.size\":{brief:\"The size of the message body in bytes.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:839,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"messaging.message.conversation_id\":{brief:'The conversation ID identifying the conversation to which the message belongs, represented as a string. Sometimes called \"Correlation ID\".',type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"MyConversationId\",changelog:[{version:\"0.16.0\",prs:[468],description:\"Added messaging.message.conversation_id attribute\"}]},\"messaging.message.envelope.size\":{brief:\"The size of the message body and metadata in bytes.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:1045,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"messaging.message.id\":{brief:\"A value used by the messaging system as an identifier for the message, represented as a string.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"f47ac10b58cc4372a5670e02b2c3d479\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"messaging.message.receive.latency\":{brief:\"The latency between when the message was published and received.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1732847252,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"messaging.message.retry.count\":{brief:\"The amount of attempts to send the message.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:2,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"messaging.operation.name\":{brief:\"The name of the messaging operation being performed\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"send\",changelog:[{version:\"0.11.0\",prs:[392],description:\"Added messaging.operation.name attribute\"}]},\"messaging.operation.type\":{brief:\"A string identifying the type of the messaging operation\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"create\",changelog:[{version:\"0.1.0\",prs:[51,127]}]},\"messaging.rabbitmq.destination.routing_key\":{brief:\"RabbitMQ message routing key.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"myKey\",changelog:[{version:\"0.16.0\",prs:[468],description:\"Added messaging.rabbitmq.destination.routing_key attribute\"}]},\"messaging.system\":{brief:\"The messaging system as identified by the client instrumentation.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"activemq\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},method:{brief:\"The HTTP method used.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"GET\",deprecation:{replacement:\"http.request.method\"},aliases:[\"http.request.method\",\"http.request_method\",\"http.method\"],changelog:[{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"middleware.name\":{brief:\"The name of the middleware.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"AuthenticationMiddleware\",changelog:[{version:\"0.6.0\",prs:[336],description:\"Added middleware.name attribute\"}]},\"navigation.origin\":{brief:\"The origin of the navigation (usually client side router navigations). Should preferrably parameterized template (like url.template) or a URL path otherwise.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"/users/:id\",aliases:[\"sentry.sveltekit.navigation.from\"],changelog:[{version:\"0.16.0\",prs:[467],description:\"Added navigation.origin attribute\"}]},\"navigation.route.id\":{brief:\"The identifier of the matched client-side route, as assigned by the routing framework (e.g., vue-router name, react-router id).\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"AboutView\",changelog:[{version:\"0.16.0\",prs:[468],description:\"Added navigation.route.id attribute\"}]},\"navigation.type\":{brief:\"The type of navigation done by a client-side router.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"router.push\",aliases:[\"sentry.sveltekit.navigation.type\"],changelog:[{version:\"0.16.0\",prs:[467],description:\"Added new deprecated alias\"},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"nel.elapsed_time\":{brief:\"The elapsed number of milliseconds between the start of the resource fetch and when it was completed or aborted by the user agent.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:100,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[68]}]},\"nel.phase\":{brief:'If request failed, the phase of its network error. If request succeeded, \"application\".',type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"application\",changelog:[{version:\"0.1.0\",prs:[68,127]}]},\"nel.referrer\":{brief:\"request's referrer, as determined by the referrer policy associated with its client.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"https://example.com/foo?bar=baz\",changelog:[{version:\"0.1.0\",prs:[68,127]}]},\"nel.sampling_function\":{brief:\"The sampling function used to determine if the request should be sampled.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:.5,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[68]}]},\"nel.type\":{brief:'If request failed, the type of its network error. If request succeeded, \"ok\".',type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"dns.unreachable\",changelog:[{version:\"0.1.0\",prs:[68,127]}]},\"network.connection.effective_type\":{brief:\"Specifies the effective type of the current connection (e.g. slow-2g, 2g, 3g, 4g).\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"4g\",aliases:[\"effectiveConnectionType\"],changelog:[{version:\"0.5.0\",prs:[279],description:\"Added attribute network.connection.effective_type to be used instead of effectiveConnectionType\"}]},\"network.connection.rtt\":{brief:\"Specifies the estimated effective round-trip time of the current connection, in milliseconds.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:100,aliases:[\"connection.rtt\"],changelog:[{version:\"0.5.0\",prs:[279],description:\"Added attribute network.connection.rtt to be used instead of connection.rtt\"}]},\"network.connection.type\":{brief:\"Specifies the type of the current connection (e.g. wifi, ethernet, cellular , etc).\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"wifi\",aliases:[\"device.connection_type\",\"connectionType\"],changelog:[{version:\"0.5.0\",prs:[279],description:\"Added attribute network.connection.type to be used instead of connectionType\"}]},\"network.local.address\":{brief:\"Local address of the network connection - IP address or Unix domain socket name.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"10.1.2.80\",aliases:[\"net.host.ip\",\"net.sock.host.addr\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"network.local.port\":{brief:\"Local port number of the network connection.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:65400,aliases:[\"net.sock.host.port\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"network.peer.address\":{brief:\"Peer address of the network connection - IP address or Unix domain socket name.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"10.1.2.80\",aliases:[\"net.peer.ip\",\"net.sock.peer.addr\"],changelog:[{version:\"0.1.0\",prs:[108,127]},{version:\"0.0.0\"}]},\"network.peer.port\":{brief:\"Peer port number of the network connection.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:65400,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"network.protocol.name\":{brief:\"OSI application layer or non-OSI equivalent.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"http\",aliases:[\"net.protocol.name\",\"mcp.resource.protocol\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"network.protocol.version\":{brief:\"The actual version of the protocol used for network communication.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"1.1\",aliases:[\"http.flavor\",\"net.protocol.version\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"network.transport\":{brief:\"OSI transport layer or inter-process communication method.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"tcp\",aliases:[\"net.transport\",\"mcp.transport\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"network.type\":{brief:\"OSI network layer or non-OSI equivalent.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"ipv4\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"net.host.ip\":{brief:\"Local address of the network connection - IP address or Unix domain socket name.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"192.168.0.1\",deprecation:{replacement:\"network.local.address\"},aliases:[\"network.local.address\",\"net.sock.host.addr\"],changelog:[{version:\"0.1.0\",prs:[61,108,127]},{version:\"0.0.0\"}]},\"net.host.name\":{brief:\"Server domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"example.com\",deprecation:{replacement:\"server.address\"},aliases:[\"server.address\",\"http.server_name\",\"http.host\",\"server_name\"],changelog:[{version:\"0.1.0\",prs:[61,108,127]},{version:\"0.0.0\"}]},\"net.host.port\":{brief:\"Server port number.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:1337,deprecation:{replacement:\"server.port\"},aliases:[\"server.port\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[61]},{version:\"0.0.0\"}]},\"net.peer.ip\":{brief:\"Peer address of the network connection - IP address or Unix domain socket name.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"192.168.0.1\",deprecation:{replacement:\"network.peer.address\"},aliases:[\"network.peer.address\",\"net.sock.peer.addr\"],changelog:[{version:\"0.1.0\",prs:[61,108,127]},{version:\"0.0.0\"}]},\"net.peer.name\":{brief:\"Server domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"example.com\",deprecation:{replacement:\"server.address\",reason:\"Deprecated, use server.address on client spans and client.address on server spans.\"},changelog:[{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"net.peer.port\":{brief:\"Peer port number.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:1337,deprecation:{replacement:\"server.port\",reason:\"Deprecated, use server.port on client spans and client.port on server spans.\"},changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[61]},{version:\"0.0.0\"}]},\"net.protocol.name\":{brief:\"OSI application layer or non-OSI equivalent.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"http\",deprecation:{replacement:\"network.protocol.name\"},aliases:[\"network.protocol.name\",\"mcp.resource.protocol\"],changelog:[{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"net.protocol.version\":{brief:\"The actual version of the protocol used for network communication.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"1.1\",deprecation:{replacement:\"network.protocol.version\"},aliases:[\"network.protocol.version\",\"http.flavor\"],changelog:[{version:\"0.1.0\",prs:[61,108,127]},{version:\"0.0.0\"}]},\"net.sock.family\":{brief:\"OSI transport and network layer\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"inet\",deprecation:{replacement:\"network.transport\",reason:\"Deprecated, use network.transport and network.type.\"},changelog:[{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"net.sock.host.addr\":{brief:\"Local address of the network connection mapping to Unix domain socket name.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"/var/my.sock\",deprecation:{replacement:\"network.local.address\"},aliases:[\"network.local.address\",\"net.host.ip\"],changelog:[{version:\"0.1.0\",prs:[61,108,127]},{version:\"0.0.0\"}]},\"net.sock.host.port\":{brief:\"Local port number of the network connection.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:8080,deprecation:{replacement:\"network.local.port\"},aliases:[\"network.local.port\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[61]},{version:\"0.0.0\"}]},\"net.sock.peer.addr\":{brief:\"Peer address of the network connection - IP address\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"192.168.0.1\",deprecation:{replacement:\"network.peer.address\"},aliases:[\"network.peer.address\",\"net.peer.ip\"],changelog:[{version:\"0.1.0\",prs:[61,108,127]},{version:\"0.0.0\"}]},\"net.sock.peer.name\":{brief:\"Peer address of the network connection - Unix domain socket name\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"/var/my.sock\",deprecation:{reason:\"Deprecated from OTEL, no replacement at this time\"},changelog:[{version:\"0.1.0\",prs:[61,119,127]},{version:\"0.0.0\"}]},\"net.sock.peer.port\":{brief:\"Peer port number of the network connection.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:8080,deprecation:{replacement:\"network.peer.port\"},changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[61]},{version:\"0.0.0\"}]},\"net.transport\":{brief:\"OSI transport layer or inter-process communication method.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"tcp\",deprecation:{replacement:\"network.transport\"},aliases:[\"network.transport\",\"mcp.transport\"],changelog:[{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"os.build\":{brief:\"The build ID of the operating system.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"1234567890\",deprecation:{replacement:\"os.build_id\"},aliases:[\"os.build_id\"],changelog:[{version:\"0.5.0\",prs:[301],description:\"Added os.build attribute, deprecated in favor of os.build_id\"}]},\"os.build_id\":{brief:\"The build ID of the operating system.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"1234567890\",aliases:[\"os.build\"],changelog:[{version:\"0.5.0\",prs:[301],description:\"Added os.build as alias\"},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"os.description\":{brief:\"Human readable (not intended to be parsed) OS version information, like e.g. reported by ver or lsb_release -a commands.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"Ubuntu 18.04.1 LTS\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"os.kernel_version\":{brief:\"An independent kernel version string. Typically the entire output of the `uname` syscall.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"20.2.0\",changelog:[{version:\"0.5.0\",prs:[301],description:\"Added os.kernel_version attribute\"}]},\"os.name\":{brief:\"Human readable operating system name.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"Ubuntu\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"os.raw_description\":{brief:\"An unprocessed description string obtained by the operating system. For some well-known runtimes, Sentry will attempt to parse `name` and `version` from this string, if they are not explicitly given.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Ubuntu 22.04.4 LTS (Jammy Jellyfish)\",changelog:[{version:\"0.5.0\",prs:[301],description:\"Added os.raw_description attribute\"}]},\"os.rooted\":{brief:\"Whether the operating system has been jailbroken or rooted.\",type:\"boolean\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.5.0\",prs:[301],description:\"Added os.rooted attribute\"}]},\"os.theme\":{brief:\"Whether the OS runs in dark mode or light mode.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"dark\",changelog:[{version:\"0.5.0\",prs:[301],description:\"Added os.theme attribute\"}]},\"os.type\":{brief:\"The operating system type.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"linux\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"os.version\":{brief:\"The version of the operating system.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"18.04.2\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"otel.kind\":{brief:\"The span kind (https://opentelemetry.io/docs/concepts/signals/traces/#span-kind). Deprecated, use `sentry.kind` instead.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"SERVER\",deprecation:{replacement:\"sentry.kind\",reason:\"Deprecated in favor of sentry.kind\"},aliases:[\"sentry.kind\"],changelog:[{version:\"0.13.0\",prs:[440],description:\"Added otel.kind attribute\"}]},\"otel.scope.name\":{brief:\"The name of the instrumentation scope - (InstrumentationScope.Name in OTLP).\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"io.opentelemetry.contrib.mongodb\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"otel.scope.version\":{brief:\"The version of the instrumentation scope - (InstrumentationScope.Version in OTLP).\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"2.4.5\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"otel.status_code\":{brief:\"Name of the code, either \\u201COK\\u201D or \\u201CERROR\\u201D. MUST NOT be set if the status code is UNSET.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"OK\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"otel.status_description\":{brief:\"Description of the Status if it has a value, otherwise not set.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"resource not found\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"params.<key>\":{brief:\"Decoded parameters extracted from a URL path. Usually added by client-side routing frameworks like vue-router.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"params.id='123'\",aliases:[\"url.path.parameter.<key>\"],changelog:[{version:\"0.1.0\",prs:[103]}]},\"performance.activationStart\":{brief:\"The time between initiating a navigation to a page and the browser activating the page\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1.983,deprecation:{replacement:\"browser.performance.navigation.activation_start\",reason:\"The activationStart is now recorded as the browser.performance.navigation.activation_start attribute.\"},aliases:[\"browser.performance.navigation.activation_start\"],changelog:[{version:\"0.5.0\",prs:[321],description:\"Added performance.activationStart attribute\"}]},\"performance.timeOrigin\":{brief:\"The browser's performance.timeOrigin timestamp representing the time when the pageload was initiated\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1776185678886e-3,deprecation:{replacement:\"browser.performance.time_origin\",reason:\"The timeOrigin is now recorded as the browser.performance.time_origin attribute.\"},aliases:[\"browser.performance.time_origin\"],changelog:[{version:\"0.5.0\",prs:[321],description:\"Added performance.timeOrigin attribute\"}]},previous_route:{brief:\"Also used by mobile SDKs to indicate the previous route in the application.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"HomeScreen\",changelog:[{version:\"0.1.0\",prs:[74]},{version:\"0.0.0\"}]},\"process.command_args\":{brief:\"All the command arguments (including the command/executable itself) as received by the process.\",type:\"string[]\",applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:[\"cmd/otecol\",\"--config=config.yaml\"],changelog:[{version:\"0.6.0\",prs:[327],description:\"Added process.command_args attribute\"}]},\"process.executable.name\":{brief:\"The name of the executable that started the process.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"getsentry\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"process.pid\":{brief:\"The process ID of the running process.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:12345,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"process.runtime.description\":{brief:\"An additional description about the runtime of the process, for example a specific vendor customization of the runtime environment. Equivalent to `raw_description` in the Sentry runtime context.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"Eclipse OpenJ9 VM openj9-0.21.0\",aliases:[\"runtime.raw_description\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"process.runtime.engine.name\":{brief:\"The name of the runtime engine.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"v8\",changelog:[{version:\"0.0.0\"}]},\"process.runtime.engine.version\":{brief:\"The version of the runtime engine.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"12.9.202.13-rusty\",changelog:[{version:\"0.0.0\"}]},\"process.runtime.name\":{brief:\"The name of the runtime. Equivalent to `name` in the Sentry runtime context.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"node\",aliases:[\"runtime.name\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"process.runtime.version\":{brief:\"The version of the runtime of this process, as returned by the runtime without modification. Equivalent to `version` in the Sentry runtime context.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"18.04.2\",aliases:[\"runtime.version\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"query.<key>\":{brief:\"An item in a query string. Usually added by client-side routing frameworks like vue-router.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"query.id='123'\",deprecation:{replacement:\"url.query\",reason:\"Instead of sending items individually in query.<key>, they should be sent all together with url.query.\"},changelog:[{version:\"0.1.0\",prs:[103]}]},\"react.version\":{brief:\"The version of the React framework\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"18.2.0\",changelog:[{version:\"0.7.0\",prs:[368],description:\"Added react.version attribute\"}]},release:{brief:\"The sentry release.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"production\",deprecation:{replacement:\"sentry.release\"},aliases:[\"sentry.release\"],changelog:[{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"remix.action_form_data.<key>\":{brief:\"Remix form data, <key> being the form data key, the value being the form data value.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"http.response.header.text='test'\",changelog:[{version:\"0.1.0\",prs:[103]}]},replay_id:{brief:\"The id of the sentry replay.\",type:\"string\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"123e4567e89b12d3a456426614174000\",deprecation:{replacement:\"sentry.replay_id\"},aliases:[\"sentry.replay_id\"],changelog:[{version:\"0.1.0\",prs:[61]},{version:\"0.0.0\"}]},\"resource.deployment.environment\":{brief:\"The software deployment environment name.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"production\",deprecation:{replacement:\"sentry.environment\"},changelog:[{version:\"0.5.0\",prs:[266]}]},\"resource.deployment.environment.name\":{brief:\"The software deployment environment name.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"production\",deprecation:{replacement:\"sentry.environment\"},changelog:[{version:\"0.3.1\",prs:[196]}]},\"resource.render_blocking_status\":{brief:\"The render blocking status of the resource.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"non-blocking\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},route:{brief:\"The matched route, that is, the path template in the format used by the respective server framework. Also used by mobile SDKs to indicate the current route in the application.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"App\\\\Controller::indexAction\",deprecation:{replacement:\"http.route\"},aliases:[\"http.route\"],changelog:[{version:\"0.1.0\",prs:[61,74]},{version:\"0.0.0\"}]},\"rpc.grpc.status_code\":{brief:\"The numeric status code of the gRPC request.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:2,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"rpc.method\":{brief:\"The fully-qualified logical name of the method from the RPC interface perspective.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"com.example.ExampleService/exampleMethod\",changelog:[{version:\"0.7.0\",prs:[351],description:\"Added rpc.method attribute\"}]},\"rpc.response.status_code\":{brief:\"Status code of the RPC returned by the RPC server or generated by the client.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"DEADLINE_EXCEEDED\",changelog:[{version:\"0.7.0\",prs:[352],description:\"Added rpc.response.status_code attribute\"}]},\"rpc.service\":{brief:\"The full (logical) name of the service being called, including its package name, if applicable.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"myService.BestService\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"rpc.system\":{brief:\"A string identifying the remoting system.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"aws-api\",deprecation:{replacement:\"rpc.system.name\",reason:\"This attribute is being deprecated in favor of rpc.system.name, which is the OTel-aligned replacement.\"},aliases:[\"rpc.system.name\"],changelog:[{version:\"0.16.0\",prs:[482],description:\"Added rpc.system attribute, deprecated in favor of rpc.system.name\"}]},\"rpc.system.name\":{brief:\"A string identifying the remoting system.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"aws-api\",aliases:[\"rpc.system\"],changelog:[{version:\"0.16.0\",prs:[482],description:\"Added rpc.system.name attribute\"}]},\"runtime.build\":{brief:\"The application build string, when it is separate from the version.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"stable\",deprecation:{reason:\"The runtime.* namespace is deprecated in favor of process.runtime.*. No direct OTel equivalent exists for this attribute.\"},changelog:[{version:\"0.11.0\",prs:[383],description:\"Added and deprecated runtime.build attribute\"}]},\"runtime.name\":{brief:\"The name of the runtime. For example node, CPython, or rustc.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"node\",deprecation:{replacement:\"process.runtime.name\",reason:\"Prefer OTel-aligned process.runtime.name\"},aliases:[\"process.runtime.name\"],changelog:[{version:\"0.11.0\",prs:[383],description:\"Added and deprecated runtime.name attribute in favor of process.runtime.name\"}]},\"runtime.raw_description\":{brief:\"Unprocessed description string as obtained from the runtime. Used to extract name and version for well-known runtimes.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Eclipse OpenJ9 VM openj9-0.21.0\",deprecation:{replacement:\"process.runtime.description\",reason:\"Prefer OTel-aligned process.runtime.description\"},aliases:[\"process.runtime.description\"],changelog:[{version:\"0.11.0\",prs:[383],description:\"Added and deprecated runtime.raw_description attribute in favor of process.runtime.description\"}]},\"runtime.version\":{brief:\"The version of the runtime.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"18.04.2\",deprecation:{replacement:\"process.runtime.version\",reason:\"Prefer OTel-aligned process.runtime.version\"},aliases:[\"process.runtime.version\"],changelog:[{version:\"0.11.0\",prs:[383],description:\"Added and deprecated runtime.version attribute in favor of process.runtime.version\"}]},\"score.<key>\":{brief:\"The weighted performance score for a web vital. This is defined as `score.weight.<key>` * `score.ratio.<key>`.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"score.cls=0.1723\",changelog:[{version:\"0.7.0\",prs:[355],description:\"Added score.<key> attribute\"}]},\"score.ratio.<key>\":{brief:\"The score for a web vital, normalized to a number between 0 and 1.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"score.ratio.inp=0.7748\",changelog:[{version:\"0.7.0\",prs:[355],description:\"Added score.ratio.<key> attribute\"}]},\"score.total\":{brief:\"The total performance score of a span. This is the sum of individual weighted web vital scores (see `score.<key>`).\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",changelog:[{version:\"0.7.0\",prs:[355],description:\"Added score.total attribute\"}]},\"score.weight.<key>\":{brief:\"The relative weight of a web vital in a span's performance score.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"score.weight.fcp=0.25\",changelog:[{version:\"0.7.0\",prs:[355],description:\"Added score.weight.<key> attribute\"}]},\"sentry.action\":{brief:\"Used as a generic attribute representing the action depending on the type of span. For instance, this is the database query operation for DB spans, and the request method for HTTP spans.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"SELECT\",changelog:[{version:\"0.4.0\",prs:[212]}]},\"sentry.browser.name\":{brief:\"The name of the browser.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Chrome\",deprecation:{replacement:\"browser.name\"},aliases:[\"browser.name\"],changelog:[{version:\"0.1.0\",prs:[139]}]},\"sentry.browser.version\":{brief:\"The version of the browser.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"120.0.6099.130\",deprecation:{replacement:\"browser.version\"},aliases:[\"browser.version\"],changelog:[{version:\"0.1.0\",prs:[139]}]},\"sentry.cancellation_reason\":{brief:\"The reason why a span ended early.\",type:\"string\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"document.hidden\",changelog:[{version:\"0.0.0\"}]},\"sentry.category\":{brief:\"The high-level category of a span, derived from the span operation or span attributes. This categorizes spans by their general purpose (e.g., database, HTTP, UI). Known values include: 'ai', 'ai.pipeline', 'app', 'browser', 'cache', 'console', 'db', 'event', 'file', 'function.aws', 'function.azure', 'function.gcp', 'function.nextjs', 'function.remix', 'graphql', 'grpc', 'http', 'measure', 'middleware', 'navigation', 'pageload', 'queue', 'resource', 'rpc', 'serialize', 'subprocess', 'template', 'topic', 'ui', 'ui.angular', 'ui.ember', 'ui.react', 'ui.svelte', 'ui.vue', 'view', 'websocket'.\",type:\"string\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"db\",changelog:[{version:\"0.4.0\",prs:[218]}]},\"sentry.client_sample_rate\":{brief:\"Rate at which a span was sampled in the SDK.\",type:\"double\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:.5,changelog:[{version:\"0.1.0\",prs:[102]}]},\"sentry.description\":{brief:\"The human-readable description of a span.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"index view query\",changelog:[{version:\"0.1.0\",prs:[135]}]},\"sentry.dist\":{brief:\"The sentry dist.\",type:\"string\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"1.0\",aliases:[\"dist\"],changelog:[{version:\"0.16.0\",prs:[489],description:\"Added dist as an alias\"},{version:\"0.0.0\"}]},\"sentry.domain\":{brief:\"Used as a generic attribute representing the domain depending on the type of span. For instance, this is the collection/table name for database spans, and the server address for HTTP spans.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"example.com\",changelog:[{version:\"0.4.0\",prs:[212]}]},\"sentry.dsc.environment\":{brief:\"The environment from the dynamic sampling context.\",type:\"string\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"internal\",example:\"prod\",changelog:[{version:\"0.3.0\",prs:[185]}]},\"sentry.dsc.project_id\":{brief:\"The ID of the project where the trace originated (i.e. the project of the SDK that started the trace). Propagated through the dynamic sampling context and set by Relay during ingestion.\",type:\"string\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"internal\",example:\"12345\",changelog:[{version:\"0.7.0\",prs:[358],description:\"Add sentry.dsc.project_id as an attribute\"}]},\"sentry.dsc.public_key\":{brief:\"The public key from the dynamic sampling context.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"internal\",example:\"c51734c603c4430eb57cb0a5728a479d\",changelog:[{version:\"0.3.0\",prs:[185]}]},\"sentry.dsc.release\":{brief:\"The release identifier from the dynamic sampling context.\",type:\"string\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"internal\",example:\"frontend@e8211be71b214afab5b85de4b4c54be3714952bb\",changelog:[{version:\"0.3.0\",prs:[185]}]},\"sentry.dsc.sampled\":{brief:\"Whether the event was sampled according to the dynamic sampling context.\",type:\"boolean\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"internal\",example:!0,changelog:[{version:\"0.3.0\",prs:[185]}]},\"sentry.dsc.sample_rate\":{brief:\"The sample rate from the dynamic sampling context.\",type:\"string\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"internal\",example:\"1.0\",changelog:[{version:\"0.3.0\",prs:[185]}]},\"sentry.dsc.trace_id\":{brief:\"The trace ID from the dynamic sampling context.\",type:\"string\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"internal\",example:\"047372980460430cbc78d9779df33a46\",changelog:[{version:\"0.3.0\",prs:[185]}]},\"sentry.dsc.transaction\":{brief:\"The transaction name from the dynamic sampling context.\",type:\"string\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"internal\",example:\"/issues/errors-outages/\",changelog:[{version:\"0.3.0\",prs:[185]}]},\"sentry.environment\":{brief:\"The sentry environment.\",type:\"string\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"production\",aliases:[\"environment\"],changelog:[{version:\"0.0.0\"}]},\"sentry.exclusive_time\":{brief:\"The exclusive time duration of the span in milliseconds.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1234,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.3.0\",prs:[160]},{version:\"0.0.0\"}]},\"sentry.graphql.operation\":{brief:\"Indicates the type of graphql operation, emitted by the Javascript SDK.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"getUserById\",changelog:[{version:\"0.3.1\",prs:[190]}]},\"sentry.group\":{brief:\"Stores the hash of `sentry.normalized_description`. This is primarily used for grouping spans in the product end.\",type:\"string\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",changelog:[{version:\"0.4.0\",prs:[212]}]},\"sentry.http.prefetch\":{brief:\"If an http request was a prefetch request.\",type:\"boolean\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.0.0\"}]},\"sentry.idle_span_finish_reason\":{brief:\"The reason why an idle span ended early.\",type:\"string\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"idleTimeout\",changelog:[{version:\"0.0.0\"}]},\"sentry.is_remote\":{brief:\"Indicates whether a span's parent is remote.\",type:\"boolean\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.3.1\",prs:[190]}]},\"sentry.kind\":{brief:\"Used to clarify the relationship between parents and children, or to distinguish between spans, e.g. a `server` and `client` span with the same name.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"server\",aliases:[\"otel.kind\"],changelog:[{version:\"0.3.1\",prs:[190]}]},\"sentry.main_thread\":{brief:\"Whether the span or event occurred on the main thread. Computed by Relay and should not be set by SDKs.\",type:\"boolean\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.5.0\"}]},\"sentry.message.parameter.<key>\":{brief:\"A parameter used in the message template. <key> can either be the number that represent the parameter's position in the template string (sentry.message.parameter.0, sentry.message.parameter.1, etc) or the parameter's name (sentry.message.parameter.item_id, sentry.message.parameter.user_id, etc)\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"sentry.message.parameter.0='123'\",changelog:[{version:\"0.1.0\",prs:[116]}]},\"sentry.message.template\":{brief:\"The parameterized template string.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Hello, {name}!\",changelog:[{version:\"0.1.0\",prs:[116]}]},\"sentry.metric.source\":{brief:\"The provenance of a metric.  For example, this can be set to indicate if a metric was generated by Relay from a span.\",type:\"string\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"span\",changelog:[{version:\"0.16.0\",prs:[476],description:\"Added sentry.metric.source attribute\"}]},\"sentry.mobile\":{brief:\"Whether the application is using a mobile SDK. Computed by Relay and should not be set by SDKs.\",type:\"boolean\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.5.0\"}]},\"sentry.module.<key>\":{brief:\"A module that was loaded in the process. The key is the name of the module.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"sentry.module.brianium/paratest='v7.7.0'\",changelog:[{version:\"0.1.0\",prs:[103]}]},\"sentry.nextjs.ssr.function.route\":{brief:\"A parameterized route for a function in Next.js that contributes to Server-Side Rendering. Should be present on spans that track such functions when the file location of the function is known.\",type:\"string\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"/posts/[id]/layout\",changelog:[{version:\"0.1.0\",prs:[54,106]}]},\"sentry.nextjs.ssr.function.type\":{brief:\"A descriptor for a for a function in Next.js that contributes to Server-Side Rendering. Should be present on spans that track such functions.\",type:\"string\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"generateMetadata\",changelog:[{version:\"0.1.0\",prs:[54,106]}]},\"sentry.normalized_db_query\":{brief:\"The normalized version of `db.query.text`.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"SELECT .. FROM sentry_project WHERE (project_id = %s)\",changelog:[{version:\"0.3.1\",prs:[194]}]},\"sentry.normalized_db_query.hash\":{brief:\"The hash of `sentry.normalized_db_query`.\",type:\"string\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",changelog:[{version:\"0.4.0\",prs:[200]}]},\"sentry.normalized_description\":{brief:\"Used as a generic attribute representing the normalized `sentry.description`. This refers to the legacy use case of `sentry.description` where it holds relevant data depending on the type of span (e.g. database query, resource url, http request description, etc).\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"SELECT .. FROM sentry_project WHERE (project_id = %s)\",changelog:[{version:\"0.4.0\",prs:[212]}]},\"sentry.observed_timestamp_nanos\":{brief:\"The timestamp at which an envelope was received by Relay, in nanoseconds.\",type:\"string\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"1544712660300000000\",changelog:[{version:\"0.3.0\",prs:[174]},{version:\"0.2.0\",prs:[137]}]},\"sentry.op\":{brief:\"The operation of a span.\",type:\"string\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"http.client\",changelog:[{version:\"0.0.0\"}]},\"sentry.origin\":{brief:\"The origin of the instrumentation (e.g. span, log, etc.)\",type:\"string\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"auto.http.otel.fastify\",changelog:[{version:\"0.1.0\",prs:[68]},{version:\"0.0.0\"}]},\"sentry.platform\":{brief:\"The sdk platform that generated the event.\",type:\"string\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"php\",changelog:[{version:\"0.0.0\"}]},\"sentry.profiler_id\":{brief:\"The id of the currently running profiler (continuous profiling)\",type:\"string\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"18779b64dd35d1a538e7ce2dd2d3fad3\",changelog:[{version:\"0.4.0\",prs:[242]}]},\"sentry.profile_id\":{brief:\"The ID of the Sentry profile the span is associated with. This is only meaningful for transaction-based profiling.\",type:\"string\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"123e4567e89b12d3a456426614174000\",changelog:[{version:\"0.6.0\",prs:[344],description:\"Added sentry.profile_id attribute\"}]},\"sentry.release\":{brief:\"The sentry release.\",type:\"string\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"7.0.0\",aliases:[\"service.version\",\"release\"],changelog:[{version:\"0.0.0\"}]},\"sentry.replay_id\":{brief:\"The id of the sentry replay.\",type:\"string\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"123e4567e89b12d3a456426614174000\",aliases:[\"replay_id\"],changelog:[{version:\"0.0.0\"}]},\"sentry.replay_is_buffering\":{brief:\"A sentinel attribute on log events indicating whether the current Session Replay is being buffered (onErrorSampleRate).\",type:\"boolean\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.3.0\",prs:[185]}]},\"sentry.report_event\":{brief:\"(Deprecated) The event that caused the SDK to report CLS or LCP (pagehide or navigation)\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"pagehide\",deprecation:{reason:\"The report event is now recorded as a browser.web_vital.lcp.report_event or browser.web_vital.cls.report_event attribute. No backfill required.\"},changelog:[{version:\"0.5.0\",prs:[320],description:\"Added sentry.report_event attribute\"}]},\"sentry.sdk.integrations\":{brief:\"A list of names identifying enabled integrations. The list shouldhave all enabled integrations, including default integrations. Defaultintegrations are included because different SDK releases may contain differentdefault integrations.\",type:\"string[]\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:[\"InboundFilters\",\"FunctionToString\",\"BrowserApiErrors\",\"Breadcrumbs\"],changelog:[{version:\"0.0.0\",prs:[42]}]},\"sentry.sdk.name\":{brief:\"The sentry sdk name.\",type:\"string\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"@sentry/react\",changelog:[{version:\"0.0.0\"}]},\"sentry.sdk.version\":{brief:\"The sentry sdk version.\",type:\"string\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"7.0.0\",changelog:[{version:\"0.0.0\"}]},\"sentry.segment.id\":{brief:\"The segment ID of a span\",type:\"string\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"051581bf3cb55c13\",aliases:[\"sentry.segment_id\"],changelog:[{version:\"0.1.0\",prs:[107,124]}]},\"sentry.segment_id\":{brief:\"The segment ID of a span\",type:\"string\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"051581bf3cb55c13\",deprecation:{replacement:\"sentry.segment.id\"},aliases:[\"sentry.segment.id\"],changelog:[{version:\"0.1.0\",prs:[124]}]},\"sentry.segment.name\":{brief:\"The segment name of a span\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"GET /user\",aliases:[\"sentry.transaction\",\"transaction\"],changelog:[{version:\"0.6.0\",prs:[345],description:\"Added sentry.transaction and transaction aliases\"},{version:\"0.1.0\",prs:[104]}]},\"sentry.server_sample_rate\":{brief:\"Rate at which a span was sampled in Relay.\",type:\"double\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:.5,changelog:[{version:\"0.1.0\",prs:[102]}]},\"sentry.source\":{brief:\"The source of a span, also referred to as transaction source. Known values are:  `'custom'`, `'url'`, `'route'`, `'component'`, `'view'`, `'task'`. '`source`' describes a parametrized route, while `'url'` describes the full URL, potentially containing identifiers.\",type:\"string\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"route\",deprecation:{replacement:\"sentry.span.source\",reason:\"This attribute is being deprecated in favor of sentry.span.source\"},changelog:[{version:\"0.5.0\"}]},\"sentry.span.source\":{brief:\"The source of a span, also referred to as transaction source. Known values are:  `'custom'`, `'url'`, `'route'`, `'component'`, `'view'`, `'task'`. '`source`' describes a parametrized route, while `'url'` describes the full URL, potentially containing identifiers.\",type:\"string\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"route\",changelog:[{version:\"0.4.0\",prs:[214]},{version:\"0.0.0\"}]},\"sentry.status\":{brief:`The span's status (either \"ok\" or \"error\"). Older SDKs may set this to a more specific error, but this behaviour is deprecated.`,type:\"string\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"ok\",changelog:[{version:\"0.14.0\",prs:[453]}]},\"sentry.status_code\":{brief:\"The HTTP status code used in Sentry Insights. Typically set by Sentry during ingestion, rather than by clients.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:200,changelog:[{version:\"0.4.0\",prs:[223,228]}]},\"sentry.status.message\":{brief:\"The from OTLP extracted status message.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"foobar\",changelog:[{version:\"0.3.1\",prs:[190]}]},\"sentry.sveltekit.navigation.from\":{brief:\"the navigation origin (sveltekit router)\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"/home\",deprecation:{replacement:\"navigation.origin\",reason:\"Use the more generic attribute instead\"},aliases:[\"navigation.origin\"],changelog:[{version:\"0.16.0\",prs:[467],description:\"Added sentry.sveltekit.navigation.from attribute\"}]},\"sentry.sveltekit.navigation.to\":{brief:\"the navigation destination\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"/users/:id\",deprecation:{reason:\"the navigation destination is already covered by url.* attributes\"},changelog:[{version:\"0.16.0\",prs:[467],description:\"Added sentry.sveltekit.navigation.to attribute\"}]},\"sentry.sveltekit.navigation.type\":{brief:\"The type of navigation event emitted from the sveltekit client router\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"link\",deprecation:{replacement:\"navigation.type\",reason:\"Use the more generic attribute instead\"},aliases:[\"navigation.type\"],changelog:[{version:\"0.16.0\",prs:[467],description:\"Added sentry.sveltekit.navigation.type attribute\"}]},\"sentry.thread.id\":{brief:\"Current \\u201Cmanaged\\u201D thread ID.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:56,deprecation:{replacement:\"thread.id\",reason:\"This attribute is being deprecated in favor of the OTel-standard thread.id\"},changelog:[{version:\"0.13.0\",prs:[451]}]},\"sentry.timestamp.sequence\":{brief:\"A sequencing counter for deterministic ordering of logs or metrics when timestamps share the same integer millisecond. Starts at 0 on SDK initialization, increments by 1 for each captured item, and resets to 0 when the integer millisecond of the current item differs from the previous one.\",type:\"integer\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:0,changelog:[{version:\"0.5.0\",prs:[262]}]},\"sentry.trace_lifecycle\":{brief:\"Indicates the chosen trace lifecycle mode of the SDK (stream or static)\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"stream\",changelog:[{version:\"0.13.0\",prs:[442],description:\"Added sentry.trace_lifecycle attribute\"}]},\"sentry.trace.parent_span_id\":{brief:\"The span id of the span that was active when the log was collected. This should not be set if there was no active span.\",type:\"string\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"b0e6f15b45c36b12\",deprecation:{},changelog:[{version:\"0.5.0\",prs:[287],description:\"Deprecate `sentry.trace.parent_span_id`\"},{version:\"0.1.0\",prs:[116]}]},\"sentry.trace.status\":{brief:`The segment's status (either \"ok\" or \"error\"). Older SDKs may set this to a more specific error, but this behaviour is deprecated.`,type:\"string\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"ok\",changelog:[{version:\"0.14.0\",prs:[453]}]},\"sentry.transaction\":{brief:\"The sentry transaction (segment name).\",type:\"string\",applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"GET /\",deprecation:{replacement:\"sentry.segment.name\",reason:\"This attribute is being deprecated in favor of sentry.segment.name\"},aliases:[\"sentry.segment.name\",\"transaction\"],changelog:[{version:\"0.6.0\",prs:[345],description:\"Deprecated sentry.transaction in favor of sentry.segment.name\"},{version:\"0.0.0\"}]},\"sentry.user.email\":{brief:\"User email address.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",deprecation:{replacement:\"user.email\"},aliases:[\"user.email\"],changelog:[{version:\"0.10.0\",prs:[406]}]},\"sentry.user.geo.city\":{brief:\"Human readable city name.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",deprecation:{replacement:\"user.geo.city\"},aliases:[\"user.geo.city\"],changelog:[{version:\"0.10.0\",prs:[406]}]},\"sentry.user.geo.country_code\":{brief:\"Two-letter country code (ISO 3166-1 alpha-2).\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",deprecation:{replacement:\"user.geo.country_code\"},aliases:[\"user.geo.country_code\"],changelog:[{version:\"0.10.0\",prs:[406]}]},\"sentry.user.geo.region\":{brief:\"Human readable region name or code.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",deprecation:{replacement:\"user.geo.region\"},aliases:[\"user.geo.region\"],changelog:[{version:\"0.10.0\",prs:[406]}]},\"sentry.user.geo.subdivision\":{brief:\"Human readable subdivision name.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",deprecation:{replacement:\"user.geo.subdivision\"},aliases:[\"user.geo.subdivision\"],changelog:[{version:\"0.10.0\",prs:[406]}]},\"sentry.user.id\":{brief:\"Unique identifier of the user.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",deprecation:{replacement:\"user.id\"},aliases:[\"user.id\"],changelog:[{version:\"0.10.0\",prs:[406]}]},\"sentry.user.ip\":{brief:\"The IP address of the user.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",deprecation:{replacement:\"user.ip_address\"},aliases:[\"user.ip_address\"],changelog:[{version:\"0.10.0\",prs:[406]}]},\"sentry.user.username\":{brief:\"Short name or login/username of the user.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",deprecation:{replacement:\"user.name\"},aliases:[\"user.name\"],changelog:[{version:\"0.10.0\",prs:[406]}]},\"server.address\":{brief:\"Server domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"example.com\",aliases:[\"http.server_name\",\"net.host.name\",\"http.host\",\"server_name\"],changelog:[{version:\"0.1.0\",prs:[108,127]},{version:\"0.0.0\"}]},server_name:{brief:\"Server domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"example.com\",deprecation:{replacement:\"server.address\",reason:\"This attribute is being deprecated in favor of server.address, which is the OTel-aligned replacement.\"},aliases:[\"server.address\",\"http.server_name\",\"net.host.name\",\"http.host\"],changelog:[{version:\"0.16.0\",prs:[477],description:\"Added server_name attribute, deprecated in favor of server.address\"}]},\"server.port\":{brief:\"Server port number.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:1337,aliases:[\"net.host.port\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"service.name\":{brief:\"Logical name of the service.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"omegastar\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"service.version\":{brief:\"The version string of the service API or implementation. The format is not defined by these conventions.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"5.0.0\",aliases:[\"sentry.release\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"session.id\":{brief:\"A unique id identifying the active session at the time of setting this attribute\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"00112233-4455-6677-8899-aabbccddeeff\",changelog:[{version:\"0.11.0\",prs:[412],description:\"Added session.id attribute\"}]},stall_percentage:{brief:\"The fraction of time the app was stalled. Only applies to React Native. This is computed by Relay.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",changelog:[{version:\"0.7.0\",prs:[362],description:\"Added stall_percentage attribute\"}]},stall_total_time:{brief:\"The combined duration of all stalls in milliseconds. Only applies to React Native. This is computed by Relay.\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",changelog:[{version:\"0.7.0\",prs:[362],description:\"Added stall_total_time attribute\"}]},\"state.type\":{brief:\"The type of state management library\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"redux\",changelog:[{version:\"0.7.0\",prs:[365],description:\"Added state.type attribute\"}]},\"thread.id\":{brief:\"Current \\u201Cmanaged\\u201D thread ID.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:56,changelog:[{version:\"0.0.0\"}]},\"thread.name\":{brief:\"Current thread name.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"main\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"timber.tag\":{brief:\"The log tag provided by the timber logging framework.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"MyTag\",changelog:[{version:\"0.3.0\",prs:[183]}]},time_to_full_display:{brief:\"The duration of time to full display in milliseconds\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1234.56,deprecation:{replacement:\"app.vitals.ttfd.value\",reason:\"Replaced by app.vitals.ttfd.value to align with the app.vitals.* namespace for mobile performance attributes\"},aliases:[\"app.vitals.ttfd.value\"],changelog:[{version:\"0.5.0\",prs:[313],description:\"Added and deprecated in favor of app.vitals.ttfd.value\"}]},time_to_initial_display:{brief:\"The duration of time to initial display in milliseconds\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1234.56,deprecation:{replacement:\"app.vitals.ttid.value\",reason:\"Replaced by app.vitals.ttid.value to align with the app.vitals.* namespace for mobile performance attributes\"},aliases:[\"app.vitals.ttid.value\"],changelog:[{version:\"0.5.0\",prs:[313],description:\"Added and deprecated in favor of app.vitals.ttid.value\"}]},transaction:{brief:\"The sentry transaction (segment name).\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"GET /\",deprecation:{replacement:\"sentry.segment.name\"},aliases:[\"sentry.segment.name\",\"sentry.transaction\"],changelog:[{version:\"0.6.0\",prs:[345],description:\"Updated transaction deprecation replacement to sentry.segment.name\"},{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"trpc.procedure_path\":{brief:\"The path of the tRPC procedure being called\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"user.getById\",changelog:[{version:\"0.7.0\",prs:[370],description:\"Added trpc.procedure_path attribute\"}]},\"trpc.procedure_type\":{brief:\"The type of the tRPC procedure\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"query\",changelog:[{version:\"0.7.0\",prs:[370],description:\"Added trpc.procedure_type attribute\"}]},ttfb:{brief:\"The value of the recorded Time To First Byte (TTFB) web vital in milliseconds\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:194,deprecation:{replacement:\"browser.web_vital.ttfb.value\",reason:\"This attribute is being deprecated in favor of browser.web_vital.ttfb.value\"},aliases:[\"browser.web_vital.ttfb.value\"],changelog:[{version:\"0.5.0\",prs:[235]}]},\"ttfb.requestTime\":{brief:\"The time it takes for the server to process the initial request and send the first byte of a response to the user's browser\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1554.5814,deprecation:{replacement:\"browser.web_vital.ttfb.request_time\",reason:\"This attribute is being deprecated in favor of browser.web_vital.ttfb.request_time\"},aliases:[\"browser.web_vital.ttfb.request_time\"],changelog:[{version:\"0.5.0\",prs:[235]}]},type:{brief:\"More granular type of the operation happening.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"fetch\",changelog:[{version:\"0.0.0\"}]},\"ui.component_name\":{brief:\"The name of the associated component.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"HomeButton\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"ui.contributes_to_ttfd\":{brief:\"Whether the span execution contributed to the TTFD (time to fully drawn) metric.\",type:\"boolean\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.0.0\"}]},\"ui.contributes_to_ttid\":{brief:\"Whether the span execution contributed to the TTID (time to initial display) metric.\",type:\"boolean\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.0.0\"}]},\"ui.element.height\":{brief:\"The height of the UI element (for Html in pixels)\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:256,changelog:[{version:\"0.5.0\",prs:[284],description:\"Added ui.element.height attribute\"}]},\"ui.element.id\":{brief:\"The id of the UI element\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"btn-login\",changelog:[{version:\"0.5.0\",prs:[284],description:\"Added ui.element.id attribute\"}]},\"ui.element.identifier\":{brief:\"The identifier used to measure the UI element timing\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"heroImage\",changelog:[{version:\"0.5.0\",prs:[284],description:\"Added ui.element.identifier attribute\"}]},\"ui.element.load_time\":{brief:\"The loading time of a UI element (from time origin to finished loading)\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:998.2234,changelog:[{version:\"0.5.0\",prs:[284],description:\"Added ui.element.load_time attribute\"}]},\"ui.element.paint_type\":{brief:\"The type of element paint. Can either be 'image-paint' or 'text-paint'\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"image-paint\",changelog:[{version:\"0.5.0\",prs:[284],description:\"Added ui.element.paint_type attribute\"}]},\"ui.element.render_time\":{brief:\"The rendering time of the UI element (from time origin to finished rendering)\",type:\"double\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1023.1124,changelog:[{version:\"0.5.0\",prs:[284],description:\"Added ui.element.render_time attribute\"}]},\"ui.element.type\":{brief:\"type of the UI element\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"img\",changelog:[{version:\"0.5.0\",prs:[284],description:\"Added ui.element.type attribute\"}]},\"ui.element.url\":{brief:\"The URL of the UI element (e.g. an img src)\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"https://assets.myapp.com/hero.png\",changelog:[{version:\"0.5.0\",prs:[284],description:\"Added ui.element.url attribute\"}]},\"ui.element.width\":{brief:\"The width of the UI element (for HTML in pixels)\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:512,changelog:[{version:\"0.5.0\",prs:[284],description:\"Added ui.element.width attribute\"}]},url:{brief:\"The URL of the resource that was fetched.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"https://example.com/test?foo=bar#buzz\",deprecation:{replacement:\"url.full\"},aliases:[\"url.full\",\"http.url\"],changelog:[{version:\"0.1.0\",prs:[61]},{version:\"0.0.0\"}]},\"url.domain\":{brief:\"Server domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"example.com\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"url.fragment\":{brief:\"The fragments present in the URI. Note that this does not contain the leading # character, while the `http.fragment` attribute does.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"details\",changelog:[{version:\"0.0.0\"}]},\"url.full\":{brief:\"The URL of the resource that was fetched.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"https://example.com/test?foo=bar#buzz\",aliases:[\"http.url\",\"url\"],changelog:[{version:\"0.1.0\",prs:[108]},{version:\"0.0.0\"}]},\"url.path\":{brief:\"The URI path component.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"/foo\",changelog:[{version:\"0.0.0\"}]},\"url.path.parameter.<key>\":{brief:\"Decoded parameters extracted from a URL path. Usually added by client-side routing frameworks like vue-router.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"url.path.parameter.id='123'\",aliases:[\"params.<key>\"],changelog:[{version:\"0.1.0\",prs:[103]}]},\"url.port\":{brief:\"Server port number.\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:1337,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"url.query\":{brief:\"The query string present in the URL. Note that this does not contain the leading ? character, while the `http.query` attribute does.\",type:\"string\",applyScrubbing:{key:\"auto\",reason:\"Query string values can contain sensitive information. Clients should attempt to scrub parameters that might contain sensitive information.\"},isInOtel:!0,visibility:\"public\",example:\"foo=bar&bar=baz\",changelog:[{version:\"0.0.0\"}]},\"url.same_origin\":{brief:\"Indicates that a URL has the same origin as the current page's origin in the browser.\",type:\"boolean\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,deprecation:{replacement:\"http.request.same_origin\",reason:\"This attribute is being deprecated in favor of http.request.same_origin.\"},aliases:[\"http.request.same_origin\"],changelog:[{version:\"0.16.0\",prs:[456],description:\"Added url.same_origin attribute, deprecated in favor of http.request.same_origin\"}]},\"url.scheme\":{brief:\"The URI scheme component identifying the used protocol.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"https\",aliases:[\"http.scheme\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"url.template\":{brief:\"The low-cardinality template of an absolute path reference.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"/users/:id\",aliases:[\"http.route\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"user_agent.original\":{brief:\"Value of the HTTP User-Agent header sent by the client.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1\",aliases:[\"http.user_agent\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"user.email\":{brief:\"User email address.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"test@example.com\",aliases:[\"sentry.user.email\"],changelog:[{version:\"0.0.0\"}]},\"user.full_name\":{brief:\"User's full name.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"John Smith\",changelog:[{version:\"0.0.0\"}]},\"user.geo.city\":{brief:\"Human readable city name.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Toronto\",aliases:[\"sentry.user.geo.city\"],changelog:[{version:\"0.0.0\"}]},\"user.geo.country_code\":{brief:\"Two-letter country code (ISO 3166-1 alpha-2).\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"CA\",aliases:[\"sentry.user.geo.country_code\"],changelog:[{version:\"0.0.0\"}]},\"user.geo.region\":{brief:\"Human readable region name or code.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Canada\",aliases:[\"sentry.user.geo.region\"],changelog:[{version:\"0.0.0\"}]},\"user.geo.subdivision\":{brief:\"Human readable subdivision name.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Ontario\",aliases:[\"sentry.user.geo.subdivision\"],changelog:[{version:\"0.0.0\"}]},\"user.hash\":{brief:\"Unique user hash to correlate information for a user in anonymized form.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"8ae4c2993e0f4f3b8b2d1b1f3b5e8f4d\",changelog:[{version:\"0.0.0\"}]},\"user.id\":{brief:\"Unique identifier of the user.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"S-1-5-21-202424912787-2692429404-2351956786-1000\",aliases:[\"sentry.user.id\"],changelog:[{version:\"0.0.0\"}]},\"user.ip_address\":{brief:\"The IP address of the user.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"192.168.1.1\",aliases:[\"sentry.user.ip\"],changelog:[{version:\"0.1.0\",prs:[75]}]},\"user.name\":{brief:\"Short name or login/username of the user.\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"j.smith\",aliases:[\"sentry.user.username\"],changelog:[{version:\"0.0.0\"}]},\"user.roles\":{brief:\"Array of user roles at the time of the event.\",type:\"string[]\",applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:[\"admin\",\"editor\"],changelog:[{version:\"0.0.0\"}]},\"vercel.branch\":{brief:\"Git branch name for Vercel project\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"main\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.build_id\":{brief:\"Identifier for the Vercel build (only present on build logs)\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"bld_cotnkcr76\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.deployment_id\":{brief:\"Identifier for the Vercel deployment\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"dpl_233NRGRjVZX1caZrXWtz5g1TAksD\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.destination\":{brief:\"Origin of the external content in Vercel (only on external logs)\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"https://vitals.vercel-insights.com/v1\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.edge_type\":{brief:\"Type of edge runtime in Vercel\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"edge-function\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.entrypoint\":{brief:\"Entrypoint for the request in Vercel\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"api/index.js\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.execution_region\":{brief:\"Region where the request is executed\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"sfo1\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.id\":{brief:\"Unique identifier for the log entry in Vercel\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"1573817187330377061717300000\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.ja3_digest\":{brief:\"JA3 fingerprint digest of Vercel request\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"769,47-53-5-10-49161-49162-49171-49172-50-56-19-4,0-10-11,23-24-25,0\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.ja4_digest\":{brief:\"JA4 fingerprint digest\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"t13d1516h2_8daaf6152771_02713d6af862\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.log_type\":{brief:\"Vercel log output type\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"stdout\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.path\":{brief:\"Function or dynamic path of the request in Vercel.\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"/dynamic/[route].json\",changelog:[{version:\"0.6.0\",prs:[349],description:\"Added vercel.path attribute\"}]},\"vercel.project_id\":{brief:\"Identifier for the Vercel project\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"gdufoJxB6b9b1fEqr1jUtFkyavUU\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.project_name\":{brief:\"Name of the Vercel project\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"my-app\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.cache_id\":{brief:\"Original request ID when request is served from cache\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"pdx1::v8g4b-1744143786684-93dafbc0f70d\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.client_ip\":{brief:\"Client IP address\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"120.75.16.101\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.host\":{brief:\"Hostname of the request\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"test.vercel.app\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.lambda_region\":{brief:\"Region where lambda function executed\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"sfo1\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.method\":{brief:\"HTTP method of the request\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"GET\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.path\":{brief:\"Request path with query parameters\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"/dynamic/some-value.json?route=some-value\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.path_type\":{brief:\"How the request was served based on its path and project configuration\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"func\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.path_type_variant\":{brief:\"Variant of the path type\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"api\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.referer\":{brief:\"Referer of the request\",type:\"string\",applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"*.vercel.app\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.region\":{brief:\"Region where the request is processed\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"sfo1\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.response_byte_size\":{brief:\"Size of the response in bytes\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1024,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.scheme\":{brief:\"Protocol of the request\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"https\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.status_code\":{brief:\"HTTP status code of the proxy request\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:200,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.timestamp\":{brief:\"Unix timestamp when the proxy request was made\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1573817250172,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.user_agent\":{brief:\"User agent strings of the request\",type:\"string[]\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:[\"Mozilla/5.0...\"],changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.vercel_cache\":{brief:\"Cache status sent to the browser\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"REVALIDATED\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.vercel_id\":{brief:\"Vercel-specific identifier\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"sfo1::abc123\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.waf_action\":{brief:\"Action taken by firewall rules\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"deny\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.waf_rule_id\":{brief:\"ID of the firewall rule that matched\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"rule_gAHz8jtSB1Gy\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.request_id\":{brief:\"Identifier of the Vercel request\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"643af4e3-975a-4cc7-9e7a-1eda11539d90\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.source\":{brief:\"Origin of the Vercel log (build, edge, lambda, static, external, or firewall)\",type:\"string\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"build\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.status_code\":{brief:\"HTTP status code of the request (-1 means no response returned and the lambda crashed)\",type:\"integer\",applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:200,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.2.0\",prs:[163]}]}};export{e as AI_CITATIONS,i as AI_COMPLETION_TOKENS_USED,t as AI_DOCUMENTS,n as AI_FINISH_REASON,r as AI_FREQUENCY_PENALTY,a as AI_FUNCTION_CALL,s as AI_GENERATION_ID,o as AI_INPUT_MESSAGES,l as AI_IS_SEARCH_REQUIRED,p as AI_METADATA,c as AI_MODEL_ID,u as AI_MODEL_PROVIDER,b as AI_PIPELINE_NAME,g as AI_PREAMBLE,d as AI_PRESENCE_PENALTY,m as AI_PROMPT_TOKENS_USED,y as AI_RAW_PROMPTING,_ as AI_RESPONSES,h as AI_RESPONSE_FORMAT,v as AI_SEARCH_QUERIES,f as AI_SEARCH_RESULTS,S as AI_SEED,E as AI_STREAMING,T as AI_TAGS,I as AI_TEMPERATURE,O as AI_TEXTS,k as AI_TOOLS,A as AI_TOOL_CALLS,x as AI_TOP_K,w as AI_TOP_P,R as AI_TOTAL_COST,N as AI_TOTAL_TOKENS_USED,C as AI_WARNINGS,P as ANGULAR_VERSION,D as APP_APP_BUILD,L as APP_APP_IDENTIFIER,U as APP_APP_NAME,M as APP_APP_START_TIME,q as APP_APP_VERSION,G as APP_BUILD,Y as APP_IDENTIFIER,V as APP_IN_FOREGROUND,W as APP_NAME,F as APP_START_COLD,B as APP_START_TIME,H as APP_START_TYPE,z as APP_START_WARM,K as APP_VERSION,j as APP_VITALS_FRAMES_DELAY_VALUE,Q as APP_VITALS_FRAMES_FROZEN_COUNT,X as APP_VITALS_FRAMES_SLOW_COUNT,J as APP_VITALS_FRAMES_TOTAL_COUNT,Z as APP_VITALS_START_COLD_VALUE,$ as APP_VITALS_START_PREWARMED,ee as APP_VITALS_START_REASON,ie as APP_VITALS_START_SCREEN,te as APP_VITALS_START_TYPE,ne as APP_VITALS_START_WARM_VALUE,re as APP_VITALS_TTFD_VALUE,ae as APP_VITALS_TTID_VALUE,se as ART_GC_BLOCKING_COUNT,oe as ART_GC_BLOCKING_TIME,le as ART_GC_PRE_OOME_COUNT,pe as ART_GC_TOTAL_COUNT,ce as ART_GC_TOTAL_TIME,ue as ART_GC_WAITING_TIME,be as ART_MEMORY_FREE,ge as ART_MEMORY_FREE_UNTIL_GC,de as ART_MEMORY_FREE_UNTIL_OOME,me as ART_MEMORY_MAX,ye as ART_MEMORY_TOTAL,Bb as ATTRIBUTE_METADATA,Fb as ATTRIBUTE_TYPE,_e as AWS_CLOUDWATCH_LOGS_LOG_GROUP,he as AWS_CLOUDWATCH_LOGS_LOG_STREAM,ve as AWS_CLOUDWATCH_LOGS_URL,fe as AWS_DYNAMODB_ATTRIBUTE_DEFINITIONS,Se as AWS_DYNAMODB_CONSISTENT_READ,Ee as AWS_DYNAMODB_CONSUMED_CAPACITY,Te as AWS_DYNAMODB_COUNT,Ie as AWS_DYNAMODB_EXCLUSIVE_START_TABLE,Oe as AWS_DYNAMODB_GLOBAL_SECONDARY_INDEXES,ke as AWS_DYNAMODB_GLOBAL_SECONDARY_INDEX_UPDATES,Ae as AWS_DYNAMODB_INDEX_NAME,xe as AWS_DYNAMODB_ITEM_COLLECTION_METRICS,we as AWS_DYNAMODB_LIMIT,Re as AWS_DYNAMODB_LOCAL_SECONDARY_INDEXES,Ne as AWS_DYNAMODB_PROJECTION,Ce as AWS_DYNAMODB_PROVISIONED_READ_CAPACITY,Pe as AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY,De as AWS_DYNAMODB_SCANNED_COUNT,Le as AWS_DYNAMODB_SCAN_FORWARD,Ue as AWS_DYNAMODB_SEGMENT,Me as AWS_DYNAMODB_SELECT,qe as AWS_DYNAMODB_TABLE_COUNT,Ge as AWS_DYNAMODB_TABLE_NAMES,Ye as AWS_DYNAMODB_TOTAL_SEGMENTS,Ve as AWS_EXTENDED_REQUEST_ID,We as AWS_KINESIS_STREAM_NAME,Be as AWS_LAMBDA_AWS_REQUEST_ID,He as AWS_LAMBDA_EXECUTION_DURATION_IN_MILLIS,ze as AWS_LAMBDA_FUNCTION_NAME,Ke as AWS_LAMBDA_FUNCTION_VERSION,je as AWS_LAMBDA_INVOKED_ARN,Qe as AWS_LAMBDA_INVOKED_FUNCTION_ARN,Xe as AWS_LAMBDA_REMAINING_TIME_IN_MILLIS,Je as AWS_LOG_GROUP_NAMES,Ze as AWS_LOG_STREAM_NAMES,$e as AWS_REQUEST_EXTENDED_ID,ei as AWS_REQUEST_ID,ti as AWS_S3_BUCKET,ni as AWS_SECRETSMANAGER_SECRET_ARN,ri as AWS_SNS_TOPIC_ARN,ai as AWS_STEP_FUNCTIONS_ACTIVITY_ARN,si as AWS_STEP_FUNCTIONS_STATE_MACHINE_ARN,oi as BLOCKED_MAIN_THREAD,li as BROWSER_NAME,pi as BROWSER_PERFORMANCE_NAVIGATION_ACTIVATION_START,ci as BROWSER_PERFORMANCE_TIME_ORIGIN,ui as BROWSER_REPORT_TYPE,bi as BROWSER_SCRIPT_INVOKER,gi as BROWSER_SCRIPT_INVOKER_TYPE,di as BROWSER_SCRIPT_SOURCE_CHAR_POSITION,mi as BROWSER_VERSION,yi as BROWSER_WEB_VITAL_CLS_REPORT_EVENT,_i as BROWSER_WEB_VITAL_CLS_SOURCE_KEY,hi as BROWSER_WEB_VITAL_CLS_SOURCE_KEY_BASE,vi as BROWSER_WEB_VITAL_CLS_VALUE,fi as BROWSER_WEB_VITAL_FCP_VALUE,Si as BROWSER_WEB_VITAL_FP_VALUE,Ei as BROWSER_WEB_VITAL_INP_VALUE,Ti as BROWSER_WEB_VITAL_LCP_ELEMENT,Ii as BROWSER_WEB_VITAL_LCP_ID,Oi as BROWSER_WEB_VITAL_LCP_LOAD_TIME,ki as BROWSER_WEB_VITAL_LCP_RENDER_TIME,Ai as BROWSER_WEB_VITAL_LCP_REPORT_EVENT,xi as BROWSER_WEB_VITAL_LCP_SIZE,wi as BROWSER_WEB_VITAL_LCP_URL,Ri as BROWSER_WEB_VITAL_LCP_VALUE,Ni as BROWSER_WEB_VITAL_TTFB_REQUEST_TIME,Ci as BROWSER_WEB_VITAL_TTFB_VALUE,Pi as CACHE_HIT,Di as CACHE_ITEM_SIZE,Li as CACHE_KEY,Ui as CACHE_OPERATION,Mi as CACHE_TTL,qi as CACHE_WRITE,Gi as CHANNEL,Yi as CLIENT_ADDRESS,Vi as CLIENT_PORT,Wi as CLOUDFLARE_D1_DURATION,Fi as CLOUDFLARE_D1_QUERY_TYPE,Bi as CLOUDFLARE_D1_ROWS_READ,Hi as CLOUDFLARE_D1_ROWS_WRITTEN,zi as CLOUDFLARE_DURABLE_OBJECT_QUERY_BINDINGS,Ki as CLOUDFLARE_DURABLE_OBJECT_RESPONSE_ROWS_READ,ji as CLOUDFLARE_DURABLE_OBJECT_RESPONSE_ROWS_WRITTEN,Qi as CLOUDFLARE_R2_BUCKET,Xi as CLOUDFLARE_R2_OPERATION,Ji as CLOUDFLARE_R2_REQUEST_DELIMITER,Zi as CLOUDFLARE_R2_REQUEST_KEY,$i as CLOUDFLARE_R2_REQUEST_PART_NUMBER,et as CLOUDFLARE_R2_REQUEST_PREFIX,it as CLOUDFLARE_WORKFLOW_ATTEMPT,tt as CLOUDFLARE_WORKFLOW_RETRIES_BACKOFF,nt as CLOUDFLARE_WORKFLOW_RETRIES_DELAY,rt as CLOUDFLARE_WORKFLOW_RETRIES_LIMIT,at as CLOUDFLARE_WORKFLOW_TIMEOUT,st as CLOUD_ACCOUNT_ID,ot as CLOUD_AVAILABILITY_ZONE,lt as CLOUD_PLATFORM,pt as CLOUD_PROVIDER,ct as CLOUD_REGION,ut as CLOUD_RESOURCE_ID,bt as CLS,gt as CLS_SOURCE_KEY,dt as CLS_SOURCE_KEY_BASE,mt as CODE_FILEPATH,yt as CODE_FILE_PATH,_t as CODE_FUNCTION,ht as CODE_FUNCTION_NAME,vt as CODE_LINENO,ft as CODE_LINE_NUMBER,St as CODE_NAMESPACE,Et as CONNECTIONTYPE,Tt as CONNECTION_RTT,It as CULTURE_CALENDAR,Ot as CULTURE_DISPLAY_NAME,kt as CULTURE_IS_24_HOUR_FORMAT,At as CULTURE_LOCALE,xt as CULTURE_TIMEZONE,wt as DB_COLLECTION_NAME,Rt as DB_DRIVER_NAME,Nt as DB_NAME,Ct as DB_NAMESPACE,Pt as DB_OPERATION,Dt as DB_OPERATION_BATCH_SIZE,Lt as DB_OPERATION_NAME,Ut as DB_QUERY_PARAMETER_KEY,Mt as DB_QUERY_PARAMETER_KEY_BASE,qt as DB_QUERY_SUMMARY,Gt as DB_QUERY_TEXT,Yt as DB_REDIS_CONNECTION,Vt as DB_REDIS_KEY,Wt as DB_REDIS_PARAMETERS,Ft as DB_RESPONSE_STATUS_CODE,Bt as DB_SQL_BINDINGS,Ht as DB_STATEMENT,zt as DB_STORED_PROCEDURE_NAME,Kt as DB_SYSTEM,jt as DB_SYSTEM_NAME,Qt as DB_USER,Xt as DEVICEMEMORY,Jt as DEVICE_ARCHS,Zt as DEVICE_BATTERY_LEVEL,$t as DEVICE_BATTERY_TEMPERATURE,en as DEVICE_BOOT_TIME,tn as DEVICE_BRAND,nn as DEVICE_CHARGING,rn as DEVICE_CHIPSET,an as DEVICE_CLASS,sn as DEVICE_CONNECTION_TYPE,on as DEVICE_CPU_DESCRIPTION,ln as DEVICE_EXTERNAL_FREE_STORAGE,pn as DEVICE_EXTERNAL_STORAGE_SIZE,cn as DEVICE_FAMILY,un as DEVICE_FREE_MEMORY,bn as DEVICE_FREE_STORAGE,gn as DEVICE_ID,dn as DEVICE_LOCALE,mn as DEVICE_LOW_MEMORY,yn as DEVICE_LOW_POWER_MODE,_n as DEVICE_MANUFACTURER,hn as DEVICE_MEMORY_ESTIMATED_CAPACITY,vn as DEVICE_MEMORY_SIZE,fn as DEVICE_MODEL,Sn as DEVICE_MODEL_ID,En as DEVICE_NAME,Tn as DEVICE_ONLINE,In as DEVICE_ORIENTATION,On as DEVICE_PROCESSOR_COUNT,kn as DEVICE_PROCESSOR_FREQUENCY,An as DEVICE_SCREEN_DENSITY,xn as DEVICE_SCREEN_DPI,wn as DEVICE_SCREEN_HEIGHT_PIXELS,Rn as DEVICE_SCREEN_WIDTH_PIXELS,Nn as DEVICE_SIMULATOR,Cn as DEVICE_STORAGE_SIZE,Pn as DEVICE_THERMAL_STATE,Dn as DEVICE_TIMEZONE,Ln as DEVICE_USABLE_MEMORY,Un as DIST,Mn as EFFECTIVECONNECTIONTYPE,qn as ENVIRONMENT,Gn as ERROR_TYPE,Yn as EVENT_ID,Vn as EVENT_NAME,Wn as EXCEPTION_ESCAPED,Fn as EXCEPTION_MESSAGE,Bn as EXCEPTION_STACKTRACE,Hn as EXCEPTION_TYPE,zn as FAAS_COLDSTART,Kn as FAAS_CRON,jn as FAAS_DURATION_IN_MS,Qn as FAAS_ENTRY_POINT,Xn as FAAS_EXECUTION,Jn as FAAS_ID,Zn as FAAS_IDENTITY,$n as FAAS_INVOCATION_ID,er as FAAS_INVOKED_NAME,ir as FAAS_INVOKED_PROVIDER,tr as FAAS_INVOKED_REGION,nr as FAAS_NAME,rr as FAAS_TIME,ar as FAAS_TRIGGER,sr as FAAS_VERSION,or as FCP,lr as FLAG_EVALUATION_KEY,pr as FLAG_EVALUATION_KEY_BASE,cr as FP,ur as FRAMES_DELAY,br as FRAMES_FROZEN,gr as FRAMES_FROZEN_RATE,dr as FRAMES_SLOW,mr as FRAMES_SLOW_RATE,yr as FRAMES_TOTAL,_r as FS_ERROR,hr as GCP_FUNCTION_CONTEXT_EVENT_ID,vr as GCP_FUNCTION_CONTEXT_EVENT_TYPE,fr as GCP_FUNCTION_CONTEXT_ID,Sr as GCP_FUNCTION_CONTEXT_RESOURCE,Er as GCP_FUNCTION_CONTEXT_SOURCE,Tr as GCP_FUNCTION_CONTEXT_SPECVERSION,Ir as GCP_FUNCTION_CONTEXT_TIME,Or as GCP_FUNCTION_CONTEXT_TIMESTAMP,kr as GCP_FUNCTION_CONTEXT_TYPE,Ar as GCP_PROJECT_ID,xr as GEN_AI_AGENT_NAME,wr as GEN_AI_CONTEXT_UTILIZATION,Rr as GEN_AI_CONTEXT_WINDOW_SIZE,Nr as GEN_AI_CONVERSATION_ID,Cr as GEN_AI_COST_CACHE_CREATION_INPUT_TOKENS,Pr as GEN_AI_COST_CACHE_READ_INPUT_TOKENS,Dr as GEN_AI_COST_INPUT_TOKENS,Lr as GEN_AI_COST_OUTPUT_TOKENS,Ur as GEN_AI_COST_REASONING_OUTPUT_TOKENS,Mr as GEN_AI_COST_TOTAL_TOKENS,qr as GEN_AI_EMBEDDINGS_INPUT,Gr as GEN_AI_FUNCTION_ID,Yr as GEN_AI_INPUT_MESSAGES,Vr as GEN_AI_OPERATION_NAME,Wr as GEN_AI_OPERATION_TYPE,Fr as GEN_AI_OUTPUT_MESSAGES,Br as GEN_AI_PIPELINE_NAME,Hr as GEN_AI_PROMPT,zr as GEN_AI_PROMPT_NAME,Kr as GEN_AI_PROVIDER_NAME,jr as GEN_AI_REQUEST_AVAILABLE_TOOLS,Qr as GEN_AI_REQUEST_FREQUENCY_PENALTY,Xr as GEN_AI_REQUEST_MAX_TOKENS,Jr as GEN_AI_REQUEST_MESSAGES,Zr as GEN_AI_REQUEST_MODEL,$r as GEN_AI_REQUEST_PRESENCE_PENALTY,ea as GEN_AI_REQUEST_REASONING_EFFORT,ia as GEN_AI_REQUEST_SEED,ta as GEN_AI_REQUEST_STOP_SEQUENCES,na as GEN_AI_REQUEST_TEMPERATURE,ra as GEN_AI_REQUEST_TOP_K,aa as GEN_AI_REQUEST_TOP_P,sa as GEN_AI_RESPONSE_FINISH_REASONS,oa as GEN_AI_RESPONSE_ID,la as GEN_AI_RESPONSE_MODEL,pa as GEN_AI_RESPONSE_STREAMING,ca as GEN_AI_RESPONSE_TEXT,ua as GEN_AI_RESPONSE_TIME_TO_FIRST_CHUNK,ba as GEN_AI_RESPONSE_TIME_TO_FIRST_TOKEN,ga as GEN_AI_RESPONSE_TOKENS_PER_SECOND,da as GEN_AI_RESPONSE_TOOL_CALLS,ma as GEN_AI_SYSTEM,ya as GEN_AI_SYSTEM_INSTRUCTIONS,_a as GEN_AI_SYSTEM_MESSAGE,ha as GEN_AI_TOOL_CALL_ARGUMENTS,va as GEN_AI_TOOL_CALL_RESULT,fa as GEN_AI_TOOL_DEFINITIONS,Sa as GEN_AI_TOOL_DESCRIPTION,Ea as GEN_AI_TOOL_INPUT,Ta as GEN_AI_TOOL_MESSAGE,Ia as GEN_AI_TOOL_NAME,Oa as GEN_AI_TOOL_OUTPUT,ka as GEN_AI_TOOL_TYPE,Aa as GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS,xa as GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS,wa as GEN_AI_USAGE_COMPLETION_TOKENS,Ra as GEN_AI_USAGE_INPUT_TOKENS,Na as GEN_AI_USAGE_INPUT_TOKENS_CACHED,Ca as GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE,Pa as GEN_AI_USAGE_OUTPUT_TOKENS,Da as GEN_AI_USAGE_OUTPUT_TOKENS_REASONING,La as GEN_AI_USAGE_PROMPT_TOKENS,Ua as GEN_AI_USAGE_REASONING_OUTPUT_TOKENS,Ma as GEN_AI_USAGE_TOTAL_TOKENS,qa as GRAPHQL_DOCUMENT,Ga as GRAPHQL_OPERATION_NAME,Ya as GRAPHQL_OPERATION_TYPE,Va as HARDWARECONCURRENCY,Wa as HTTP_CLIENT_IP,Fa as HTTP_DECODED_RESPONSE_CONTENT_LENGTH,Ba as HTTP_FLAVOR,Ha as HTTP_FRAGMENT,za as HTTP_HOST,Ka as HTTP_METHOD,ja as HTTP_QUERY,Qa as HTTP_REQUEST_BODY_DATA,Xa as HTTP_REQUEST_CONNECTION_END,Ja as HTTP_REQUEST_CONNECT_START,Za as HTTP_REQUEST_DOMAIN_LOOKUP_END,$a as HTTP_REQUEST_DOMAIN_LOOKUP_START,es as HTTP_REQUEST_FETCH_START,is as HTTP_REQUEST_HEADER_KEY,ts as HTTP_REQUEST_HEADER_KEY_BASE,ns as HTTP_REQUEST_METHOD,as as HTTP_REQUEST_REDIRECT_END,ss as HTTP_REQUEST_REDIRECT_START,os as HTTP_REQUEST_REQUEST_START,ls as HTTP_REQUEST_RESEND_COUNT,ps as HTTP_REQUEST_RESPONSE_END,cs as HTTP_REQUEST_RESPONSE_START,us as HTTP_REQUEST_SAME_ORIGIN,bs as HTTP_REQUEST_SECURE_CONNECTION_START,gs as HTTP_REQUEST_TIME_TO_FIRST_BYTE,ds as HTTP_REQUEST_WORKER_START,ms as HTTP_RESPONSE_BODY_SIZE,ys as HTTP_RESPONSE_CONTENT_LENGTH,_s as HTTP_RESPONSE_HEADER_CONTENT_LENGTH,hs as HTTP_RESPONSE_HEADER_KEY,vs as HTTP_RESPONSE_HEADER_KEY_BASE,fs as HTTP_RESPONSE_SIZE,Ss as HTTP_RESPONSE_STATUS_CODE,Es as HTTP_RESPONSE_TRANSFER_SIZE,Ts as HTTP_ROUTE,Is as HTTP_SCHEME,Os as HTTP_SERVER_NAME,ks as HTTP_SERVER_REQUEST_TIME_IN_QUEUE,As as HTTP_STATUS_CODE,xs as HTTP_TARGET,ws as HTTP_URL,Rs as HTTP_USER_AGENT,Ns as ID,Cs as INP,Ps as JSONRPC_PROTOCOL_VERSION,Ds as JSONRPC_REQUEST_ID,Ls as JVM_GC_ACTION,Us as JVM_GC_NAME,Ms as JVM_MEMORY_POOL_NAME,qs as JVM_MEMORY_TYPE,Gs as JVM_THREAD_DAEMON,Ys as JVM_THREAD_STATE,Vs as KOA_NAME,Ws as KOA_TYPE,Fs as LCP,Bs as LCP_ELEMENT,Hs as LCP_ID,zs as LCP_LOADTIME,Ks as LCP_RENDERTIME,js as LCP_SIZE,Qs as LCP_URL,Xs as LOGGER_NAME,Js as MCP_CANCELLED_REASON,Zs as MCP_CANCELLED_REQUEST_ID,$s as MCP_CLIENT_NAME,eo as MCP_CLIENT_TITLE,io as MCP_CLIENT_VERSION,to as MCP_LIFECYCLE_PHASE,no as MCP_LOGGING_DATA_TYPE,ro as MCP_LOGGING_LEVEL,ao as MCP_LOGGING_LOGGER,so as MCP_LOGGING_MESSAGE,oo as MCP_METHOD_NAME,lo as MCP_PROGRESS_CURRENT,po as MCP_PROGRESS_MESSAGE,co as MCP_PROGRESS_PERCENTAGE,uo as MCP_PROGRESS_TOKEN,bo as MCP_PROGRESS_TOTAL,go as MCP_PROMPT_NAME,mo as MCP_PROMPT_RESULT_DESCRIPTION,yo as MCP_PROMPT_RESULT_MESSAGE_CONTENT,_o as MCP_PROMPT_RESULT_MESSAGE_COUNT,ho as MCP_PROMPT_RESULT_MESSAGE_ROLE,vo as MCP_PROTOCOL_READY,fo as MCP_PROTOCOL_VERSION,So as MCP_REQUEST_ARGUMENT_KEY,Eo as MCP_REQUEST_ARGUMENT_KEY_BASE,To as MCP_REQUEST_ARGUMENT_NAME,Io as MCP_REQUEST_ARGUMENT_URI,Oo as MCP_REQUEST_ID,ko as MCP_RESOURCE_PROTOCOL,Ao as MCP_RESOURCE_URI,xo as MCP_SERVER_NAME,wo as MCP_SERVER_TITLE,Ro as MCP_SERVER_VERSION,No as MCP_SESSION_ID,Co as MCP_TOOL_NAME,Po as MCP_TOOL_RESULT_CONTENT,Do as MCP_TOOL_RESULT_CONTENT_COUNT,Lo as MCP_TOOL_RESULT_IS_ERROR,Uo as MCP_TRANSPORT,Mo as MDC_KEY,qo as MDC_KEY_BASE,Go as MESSAGING_BATCH_MESSAGE_COUNT,Yo as MESSAGING_DESTINATION,Vo as MESSAGING_DESTINATION_CONNECTION,Wo as MESSAGING_DESTINATION_NAME,Fo as MESSAGING_MESSAGE_BODY_SIZE,Bo as MESSAGING_MESSAGE_CONVERSATION_ID,Ho as MESSAGING_MESSAGE_ENVELOPE_SIZE,zo as MESSAGING_MESSAGE_ID,Ko as MESSAGING_MESSAGE_RECEIVE_LATENCY,jo as MESSAGING_MESSAGE_RETRY_COUNT,Qo as MESSAGING_OPERATION_NAME,Xo as MESSAGING_OPERATION_TYPE,Jo as MESSAGING_RABBITMQ_DESTINATION_ROUTING_KEY,Zo as MESSAGING_SYSTEM,$o as METHOD,el as MIDDLEWARE_NAME,il as NAVIGATION_ORIGIN,tl as NAVIGATION_ROUTE_ID,nl as NAVIGATION_TYPE,rl as NEL_ELAPSED_TIME,al as NEL_PHASE,sl as NEL_REFERRER,ol as NEL_SAMPLING_FUNCTION,ll as NEL_TYPE,pl as NETWORK_CONNECTION_EFFECTIVE_TYPE,cl as NETWORK_CONNECTION_RTT,ul as NETWORK_CONNECTION_TYPE,bl as NETWORK_LOCAL_ADDRESS,gl as NETWORK_LOCAL_PORT,dl as NETWORK_PEER_ADDRESS,ml as NETWORK_PEER_PORT,yl as NETWORK_PROTOCOL_NAME,_l as NETWORK_PROTOCOL_VERSION,hl as NETWORK_TRANSPORT,vl as NETWORK_TYPE,fl as NET_HOST_IP,Sl as NET_HOST_NAME,El as NET_HOST_PORT,Tl as NET_PEER_IP,Il as NET_PEER_NAME,Ol as NET_PEER_PORT,kl as NET_PROTOCOL_NAME,Al as NET_PROTOCOL_VERSION,xl as NET_SOCK_FAMILY,wl as NET_SOCK_HOST_ADDR,Rl as NET_SOCK_HOST_PORT,Nl as NET_SOCK_PEER_ADDR,Cl as NET_SOCK_PEER_NAME,Pl as NET_SOCK_PEER_PORT,Dl as NET_TRANSPORT,Ll as OS_BUILD,Ul as OS_BUILD_ID,Ml as OS_DESCRIPTION,ql as OS_KERNEL_VERSION,Gl as OS_NAME,Yl as OS_RAW_DESCRIPTION,Vl as OS_ROOTED,Wl as OS_THEME,Fl as OS_TYPE,Bl as OS_VERSION,Hl as OTEL_KIND,zl as OTEL_SCOPE_NAME,Kl as OTEL_SCOPE_VERSION,jl as OTEL_STATUS_CODE,Ql as OTEL_STATUS_DESCRIPTION,Xl as PARAMS_KEY,Jl as PARAMS_KEY_BASE,Zl as PERFORMANCE_ACTIVATIONSTART,$l as PERFORMANCE_TIMEORIGIN,ep as PREVIOUS_ROUTE,ip as PROCESS_COMMAND_ARGS,tp as PROCESS_EXECUTABLE_NAME,np as PROCESS_PID,rp as PROCESS_RUNTIME_DESCRIPTION,ap as PROCESS_RUNTIME_ENGINE_NAME,sp as PROCESS_RUNTIME_ENGINE_VERSION,op as PROCESS_RUNTIME_NAME,lp as PROCESS_RUNTIME_VERSION,pp as QUERY_KEY,cp as QUERY_KEY_BASE,up as REACT_VERSION,bp as RELEASE,gp as REMIX_ACTION_FORM_DATA_KEY,dp as REMIX_ACTION_FORM_DATA_KEY_BASE,mp as REPLAY_ID,yp as RESOURCE_DEPLOYMENT_ENVIRONMENT,_p as RESOURCE_DEPLOYMENT_ENVIRONMENT_NAME,hp as RESOURCE_RENDER_BLOCKING_STATUS,vp as ROUTE,fp as RPC_GRPC_STATUS_CODE,Sp as RPC_METHOD,Ep as RPC_RESPONSE_STATUS_CODE,Tp as RPC_SERVICE,Ip as RPC_SYSTEM,Op as RPC_SYSTEM_NAME,kp as RUNTIME_BUILD,Ap as RUNTIME_NAME,xp as RUNTIME_RAW_DESCRIPTION,wp as RUNTIME_VERSION,Rp as SCORE_KEY,Np as SCORE_KEY_BASE,Cp as SCORE_RATIO_KEY,Pp as SCORE_RATIO_KEY_BASE,Dp as SCORE_TOTAL,Lp as SCORE_WEIGHT_KEY,Up as SCORE_WEIGHT_KEY_BASE,Mp as SENTRY_ACTION,qp as SENTRY_BROWSER_NAME,Gp as SENTRY_BROWSER_VERSION,Yp as SENTRY_CANCELLATION_REASON,Vp as SENTRY_CATEGORY,Wp as SENTRY_CLIENT_SAMPLE_RATE,Fp as SENTRY_DESCRIPTION,Bp as SENTRY_DIST,Hp as SENTRY_DOMAIN,zp as SENTRY_DSC_ENVIRONMENT,Kp as SENTRY_DSC_PROJECT_ID,jp as SENTRY_DSC_PUBLIC_KEY,Qp as SENTRY_DSC_RELEASE,Xp as SENTRY_DSC_SAMPLED,Jp as SENTRY_DSC_SAMPLE_RATE,Zp as SENTRY_DSC_TRACE_ID,$p as SENTRY_DSC_TRANSACTION,ec as SENTRY_ENVIRONMENT,ic as SENTRY_EXCLUSIVE_TIME,tc as SENTRY_GRAPHQL_OPERATION,nc as SENTRY_GROUP,rc as SENTRY_HTTP_PREFETCH,ac as SENTRY_IDLE_SPAN_FINISH_REASON,sc as SENTRY_IS_REMOTE,oc as SENTRY_KIND,lc as SENTRY_MAIN_THREAD,pc as SENTRY_MESSAGE_PARAMETER_KEY,cc as SENTRY_MESSAGE_TEMPLATE,uc as SENTRY_METRIC_SOURCE,bc as SENTRY_MOBILE,gc as SENTRY_MODULE_KEY,dc as SENTRY_MODULE_KEY_BASE,mc as SENTRY_NEXTJS_SSR_FUNCTION_ROUTE,yc as SENTRY_NEXTJS_SSR_FUNCTION_TYPE,_c as SENTRY_NORMALIZED_DB_QUERY,hc as SENTRY_NORMALIZED_DB_QUERY_HASH,vc as SENTRY_NORMALIZED_DESCRIPTION,fc as SENTRY_OBSERVED_TIMESTAMP_NANOS,Sc as SENTRY_OP,Ec as SENTRY_ORIGIN,Tc as SENTRY_PLATFORM,Ic as SENTRY_PROFILER_ID,Oc as SENTRY_PROFILE_ID,kc as SENTRY_RELEASE,Ac as SENTRY_REPLAY_ID,xc as SENTRY_REPLAY_IS_BUFFERING,wc as SENTRY_REPORT_EVENT,Rc as SENTRY_SDK_INTEGRATIONS,Nc as SENTRY_SDK_NAME,Cc as SENTRY_SDK_VERSION,Pc as SENTRY_SEGMENT_ID,Lc as SENTRY_SEGMENT_NAME,Uc as SENTRY_SERVER_SAMPLE_RATE,Mc as SENTRY_SOURCE,qc as SENTRY_SPAN_SOURCE,Gc as SENTRY_STATUS,Yc as SENTRY_STATUS_CODE,Vc as SENTRY_STATUS_MESSAGE,Wc as SENTRY_SVELTEKIT_NAVIGATION_FROM,Fc as SENTRY_SVELTEKIT_NAVIGATION_TO,Bc as SENTRY_SVELTEKIT_NAVIGATION_TYPE,Hc as SENTRY_THREAD_ID,zc as SENTRY_TIMESTAMP_SEQUENCE,Kc as SENTRY_TRACE_LIFECYCLE,jc as SENTRY_TRACE_PARENT_SPAN_ID,Qc as SENTRY_TRACE_STATUS,Xc as SENTRY_TRANSACTION,Jc as SENTRY_USER_EMAIL,Zc as SENTRY_USER_GEO_CITY,$c as SENTRY_USER_GEO_COUNTRY_CODE,eu as SENTRY_USER_GEO_REGION,iu as SENTRY_USER_GEO_SUBDIVISION,tu as SENTRY_USER_ID,nu as SENTRY_USER_IP,ru as SENTRY_USER_USERNAME,au as SERVER_ADDRESS,su as SERVER_NAME,ou as SERVER_PORT,lu as SERVICE_NAME,pu as SERVICE_VERSION,cu as SESSION_ID,uu as STALL_PERCENTAGE,bu as STALL_TOTAL_TIME,gu as STATE_TYPE,du as THREAD_ID,mu as THREAD_NAME,yu as TIMBER_TAG,_u as TIME_TO_FULL_DISPLAY,hu as TIME_TO_INITIAL_DISPLAY,vu as TRANSACTION,fu as TRPC_PROCEDURE_PATH,Su as TRPC_PROCEDURE_TYPE,Eu as TTFB,Tu as TTFB_REQUESTTIME,Iu as TYPE,Ou as UI_COMPONENT_NAME,ku as UI_CONTRIBUTES_TO_TTFD,Au as UI_CONTRIBUTES_TO_TTID,xu as UI_ELEMENT_HEIGHT,wu as UI_ELEMENT_ID,Ru as UI_ELEMENT_IDENTIFIER,Nu as UI_ELEMENT_LOAD_TIME,Cu as UI_ELEMENT_PAINT_TYPE,Pu as UI_ELEMENT_RENDER_TIME,Du as UI_ELEMENT_TYPE,Lu as UI_ELEMENT_URL,Uu as UI_ELEMENT_WIDTH,Mu as URL,qu as URL_DOMAIN,Gu as URL_FRAGMENT,Yu as URL_FULL,Vu as URL_PATH,Wu as URL_PATH_PARAMETER_KEY,Fu as URL_PATH_PARAMETER_KEY_BASE,Bu as URL_PORT,Hu as URL_QUERY,zu as URL_SAME_ORIGIN,Ku as URL_SCHEME,ju as URL_TEMPLATE,Qu as USER_AGENT_ORIGINAL,Xu as USER_EMAIL,Ju as USER_FULL_NAME,Zu as USER_GEO_CITY,$u as USER_GEO_COUNTRY_CODE,eb as USER_GEO_REGION,ib as USER_GEO_SUBDIVISION,tb as USER_HASH,nb as USER_ID,rb as USER_IP_ADDRESS,ab as USER_NAME,sb as USER_ROLES,ob as VERCEL_BRANCH,lb as VERCEL_BUILD_ID,pb as VERCEL_DEPLOYMENT_ID,cb as VERCEL_DESTINATION,ub as VERCEL_EDGE_TYPE,bb as VERCEL_ENTRYPOINT,gb as VERCEL_EXECUTION_REGION,db as VERCEL_ID,mb as VERCEL_JA3_DIGEST,yb as VERCEL_JA4_DIGEST,_b as VERCEL_LOG_TYPE,hb as VERCEL_PATH,vb as VERCEL_PROJECT_ID,fb as VERCEL_PROJECT_NAME,Sb as VERCEL_PROXY_CACHE_ID,Eb as VERCEL_PROXY_CLIENT_IP,Tb as VERCEL_PROXY_HOST,Ib as VERCEL_PROXY_LAMBDA_REGION,Ob as VERCEL_PROXY_METHOD,kb as VERCEL_PROXY_PATH,Ab as VERCEL_PROXY_PATH_TYPE,xb as VERCEL_PROXY_PATH_TYPE_VARIANT,wb as VERCEL_PROXY_REFERER,Rb as VERCEL_PROXY_REGION,Nb as VERCEL_PROXY_RESPONSE_BYTE_SIZE,Cb as VERCEL_PROXY_SCHEME,Pb as VERCEL_PROXY_STATUS_CODE,Db as VERCEL_PROXY_TIMESTAMP,Lb as VERCEL_PROXY_USER_AGENT,Ub as VERCEL_PROXY_VERCEL_CACHE,Mb as VERCEL_PROXY_VERCEL_ID,qb as VERCEL_PROXY_WAF_ACTION,Gb as VERCEL_PROXY_WAF_RULE_ID,Yb as VERCEL_REQUEST_ID,Vb as VERCEL_SOURCE,Wb as VERCEL_STATUS_CODE,Fe as _AWS_KINESIS_STREAM_NAME,ii as _AWS_REQUEST_ID,rs as _HTTP_REQUEST_METHOD,Dc as _SENTRY_SEGMENT_ID};\n//# sourceMappingURL=attributes.mjs.map\n","import { SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, SEMANTIC_ATTRIBUTE_USER_USERNAME, SEMANTIC_ATTRIBUTE_USER_IP_ADDRESS, SEMANTIC_ATTRIBUTE_USER_EMAIL, SEMANTIC_ATTRIBUTE_USER_ID, SEMANTIC_ATTRIBUTE_SENTRY_ENVIRONMENT, SEMANTIC_ATTRIBUTE_SENTRY_RELEASE, SEMANTIC_ATTRIBUTE_SENTRY_SDK_INTEGRATIONS } from '../../semanticAttributes.js';\nimport { getCombinedScopeData } from '../../utils/scopeData.js';\nimport { spanToStreamedSpanJSON, INTERNAL_getSegmentSpan, streamedSpanJsonToSerializedSpan, showSpanDropWarning } from '../../utils/spanUtils.js';\nimport { getCapturedScopesOnSpan } from '../utils.js';\nimport { isStreamedBeforeSendSpanCallback } from './beforeSendSpan.js';\nimport { scopeContextsToSpanAttributes } from './scopeContextAttributes.js';\nimport { DEFAULT_ENVIRONMENT } from '../../constants.js';\nimport { SENTRY_SDK_VERSION, SENTRY_SDK_NAME, SENTRY_SEGMENT_ID, SENTRY_SEGMENT_NAME, SENTRY_TRACE_LIFECYCLE } from '@sentry/conventions/attributes';\n\nfunction captureSpan(span, client) {\n  const spanJSON = spanToStreamedSpanJSON(span);\n  const segmentSpan = INTERNAL_getSegmentSpan(span);\n  const serializedSegmentSpan = spanToStreamedSpanJSON(segmentSpan);\n  const { isolationScope: spanIsolationScope, scope: spanScope } = getCapturedScopesOnSpan(span);\n  const finalScopeData = getCombinedScopeData(spanIsolationScope, spanScope);\n  applyCommonSpanAttributes(spanJSON, serializedSegmentSpan, client, finalScopeData);\n  const spanKind = span.kind;\n  client.emit(\"preprocessSpan\", spanJSON, { spanKind });\n  if (spanJSON.is_segment) {\n    applyScopeToSegmentSpan(spanJSON, finalScopeData);\n    applySdkMetadataToSegmentSpan(spanJSON, client);\n    client.emit(\"processSegmentSpan\", spanJSON);\n  }\n  client.emit(\"processSpan\", spanJSON);\n  const { beforeSendSpan } = client.getOptions();\n  const processedSpan = beforeSendSpan && isStreamedBeforeSendSpanCallback(beforeSendSpan) ? applyBeforeSendSpanCallback(spanJSON, beforeSendSpan) : spanJSON;\n  const spanNameSource = processedSpan.attributes?.[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n  if (spanJSON.is_segment && spanNameSource) {\n    safeSetSpanJSONAttributes(processedSpan, {\n      [\"sentry.segment.name.source\"]: spanNameSource\n    });\n  }\n  return {\n    ...streamedSpanJsonToSerializedSpan(processedSpan),\n    _segmentSpan: segmentSpan\n  };\n}\nfunction applyScopeToSegmentSpan(segmentSpanJSON, scopeData) {\n  const contextAttributes = scopeContextsToSpanAttributes(scopeData.contexts);\n  safeSetSpanJSONAttributes(segmentSpanJSON, contextAttributes);\n}\nfunction safeSetSpanJSONAttributes(spanJSON, newAttributes) {\n  const originalAttributes = spanJSON.attributes ?? (spanJSON.attributes = {});\n  Object.entries(newAttributes).forEach(([key, value]) => {\n    if (value != null && !(key in originalAttributes)) {\n      originalAttributes[key] = value;\n    }\n  });\n}\nfunction applySdkMetadataToSegmentSpan(segmentSpanJSON, client) {\n  const integrationNames = client.getIntegrationNames();\n  if (!integrationNames.length) return;\n  safeSetSpanJSONAttributes(segmentSpanJSON, {\n    [SEMANTIC_ATTRIBUTE_SENTRY_SDK_INTEGRATIONS]: integrationNames\n  });\n}\nfunction applyCommonSpanAttributes(spanJSON, serializedSegmentSpan, client, scopeData) {\n  const sdk = client.getSdkMetadata();\n  const { release, environment } = client.getOptions();\n  safeSetSpanJSONAttributes(spanJSON, {\n    [SENTRY_TRACE_LIFECYCLE]: \"stream\",\n    [SENTRY_SEGMENT_NAME]: serializedSegmentSpan.name,\n    [SENTRY_SEGMENT_ID]: serializedSegmentSpan.span_id,\n    [SENTRY_SDK_NAME]: sdk?.sdk?.name,\n    [SENTRY_SDK_VERSION]: sdk?.sdk?.version,\n    [SEMANTIC_ATTRIBUTE_SENTRY_RELEASE]: release,\n    [SEMANTIC_ATTRIBUTE_SENTRY_ENVIRONMENT]: environment || DEFAULT_ENVIRONMENT,\n    [SEMANTIC_ATTRIBUTE_USER_ID]: scopeData.user?.id,\n    [SEMANTIC_ATTRIBUTE_USER_EMAIL]: scopeData.user?.email,\n    [SEMANTIC_ATTRIBUTE_USER_IP_ADDRESS]: scopeData.user?.ip_address,\n    [SEMANTIC_ATTRIBUTE_USER_USERNAME]: scopeData.user?.username,\n    ...scopeData.attributes\n  });\n}\nfunction applyBeforeSendSpanCallback(span, beforeSendSpan) {\n  const modifedSpan = beforeSendSpan(span);\n  if (!modifedSpan) {\n    showSpanDropWarning();\n    return span;\n  }\n  return modifedSpan;\n}\n\nexport { applyBeforeSendSpanCallback, captureSpan, safeSetSpanJSONAttributes };\n//# sourceMappingURL=captureSpan.js.map\n","function safeUnref(timer) {\n  if (typeof timer === \"object\" && typeof timer.unref === \"function\") {\n    timer.unref();\n  }\n  return timer;\n}\n\nexport { safeUnref };\n//# sourceMappingURL=timer.js.map\n","import { makeDsn, dsnToString } from './utils/dsn.js';\n\nconst SENTRY_API_VERSION = \"7\";\nfunction getBaseApiEndpoint(dsn) {\n  const protocol = dsn.protocol ? `${dsn.protocol}:` : \"\";\n  const port = dsn.port ? `:${dsn.port}` : \"\";\n  return `${protocol}//${dsn.host}${port}${dsn.path ? `/${dsn.path}` : \"\"}/api/`;\n}\nfunction _getIngestEndpoint(dsn) {\n  return `${getBaseApiEndpoint(dsn)}${dsn.projectId}/envelope/`;\n}\nfunction _encodedAuth(dsn, sdkInfo) {\n  const params = {\n    sentry_version: SENTRY_API_VERSION\n  };\n  if (dsn.publicKey) {\n    params.sentry_key = dsn.publicKey;\n  }\n  if (sdkInfo) {\n    params.sentry_client = `${sdkInfo.name}/${sdkInfo.version}`;\n  }\n  return new URLSearchParams(params).toString();\n}\nfunction getEnvelopeEndpointWithUrlEncodedAuth(dsn, tunnel, sdkInfo) {\n  return tunnel ? tunnel : `${_getIngestEndpoint(dsn)}?${_encodedAuth(dsn, sdkInfo)}`;\n}\nfunction getReportDialogEndpoint(dsnLike, dialogOptions) {\n  const dsn = makeDsn(dsnLike);\n  if (!dsn) {\n    return \"\";\n  }\n  const endpoint = `${getBaseApiEndpoint(dsn)}embed/error-page/`;\n  let encodedOptions = `dsn=${dsnToString(dsn)}`;\n  for (const key in dialogOptions) {\n    if (key === \"dsn\") {\n      continue;\n    }\n    if (key === \"onClose\") {\n      continue;\n    }\n    if (key === \"user\") {\n      const user = dialogOptions.user;\n      if (!user) {\n        continue;\n      }\n      if (user.name) {\n        encodedOptions += `&name=${encodeURIComponent(user.name)}`;\n      }\n      if (user.email) {\n        encodedOptions += `&email=${encodeURIComponent(user.email)}`;\n      }\n    } else {\n      encodedOptions += `&${encodeURIComponent(key)}=${encodeURIComponent(dialogOptions[key])}`;\n    }\n  }\n  return `${endpoint}?${encodedOptions}`;\n}\n\nexport { SENTRY_API_VERSION, getEnvelopeEndpointWithUrlEncodedAuth, getReportDialogEndpoint };\n//# sourceMappingURL=api.js.map\n","import { getClient } from './currentScopes.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { debug } from './utils/debug-logger.js';\n\nconst installedIntegrations = [];\nfunction filterDuplicates(integrations) {\n  const integrationsByName = {};\n  integrations.forEach((currentInstance) => {\n    const { name } = currentInstance;\n    const existingInstance = integrationsByName[name];\n    if (existingInstance && !existingInstance.isDefaultInstance && currentInstance.isDefaultInstance) {\n      return;\n    }\n    integrationsByName[name] = currentInstance;\n  });\n  return Object.values(integrationsByName);\n}\nfunction getIntegrationsToSetup(options) {\n  const defaultIntegrations = options.defaultIntegrations || [];\n  const userIntegrations = options.integrations;\n  defaultIntegrations.forEach((integration) => {\n    integration.isDefaultInstance = true;\n  });\n  let integrations;\n  if (Array.isArray(userIntegrations)) {\n    integrations = [...defaultIntegrations, ...userIntegrations];\n  } else if (typeof userIntegrations === \"function\") {\n    const resolvedUserIntegrations = userIntegrations(defaultIntegrations);\n    integrations = Array.isArray(resolvedUserIntegrations) ? resolvedUserIntegrations : [resolvedUserIntegrations];\n  } else {\n    integrations = defaultIntegrations;\n  }\n  return filterDuplicates(integrations);\n}\nfunction setupIntegrations(client, integrations) {\n  const integrationIndex = {};\n  integrations.forEach((integration) => {\n    if (integration?.beforeSetup) {\n      integration.beforeSetup(client);\n    }\n  });\n  integrations.forEach((integration) => {\n    if (integration) {\n      setupIntegration(client, integration, integrationIndex);\n    }\n  });\n  return integrationIndex;\n}\nfunction afterSetupIntegrations(client, integrations) {\n  for (const integration of integrations) {\n    if (integration?.afterAllSetup) {\n      integration.afterAllSetup(client);\n    }\n  }\n}\nfunction setupIntegration(client, integration, integrationIndex) {\n  if (integrationIndex[integration.name]) {\n    DEBUG_BUILD && debug.log(`Integration skipped because it was already installed: ${integration.name}`);\n    return;\n  }\n  integrationIndex[integration.name] = integration;\n  if (!installedIntegrations.includes(integration.name) && typeof integration.setupOnce === \"function\") {\n    integration.setupOnce();\n    installedIntegrations.push(integration.name);\n  }\n  if (integration.setup && typeof integration.setup === \"function\") {\n    integration.setup(client);\n  }\n  if (typeof integration.preprocessEvent === \"function\") {\n    const callback = integration.preprocessEvent.bind(integration);\n    client.on(\"preprocessEvent\", (event, hint) => callback(event, hint, client));\n  }\n  if (typeof integration.processEvent === \"function\") {\n    const callback = integration.processEvent.bind(integration);\n    const processor = Object.assign((event, hint) => callback(event, hint, client), {\n      id: integration.name\n    });\n    client.addEventProcessor(processor);\n  }\n  [\"processSpan\", \"processSegmentSpan\"].forEach((hook) => {\n    const callback = integration[hook];\n    if (typeof callback === \"function\") {\n      client.on(hook, (span) => callback.call(integration, span, client));\n    }\n  });\n  DEBUG_BUILD && debug.log(`Integration installed: ${integration.name}`);\n}\nfunction addIntegration(integration) {\n  const client = getClient();\n  if (!client) {\n    DEBUG_BUILD && debug.warn(`Cannot add integration \"${integration.name}\" because no SDK Client is available.`);\n    return;\n  }\n  client.addIntegration(integration);\n}\nfunction defineIntegration(fn) {\n  return fn;\n}\nfunction extendIntegration(integration, extendedIntegration) {\n  const wrappedIntegration = {\n    ...integration,\n    ...extendedIntegration\n  };\n  for (const key in extendedIntegration) {\n    const baseValue = integration[key];\n    const extendedValue = extendedIntegration[key];\n    if (typeof baseValue === \"function\" && typeof extendedValue === \"function\") {\n      const wrappedFunction = new Proxy(baseValue, {\n        apply: (target, thisArg, args) => {\n          Reflect.apply(target, thisArg, args);\n          return Reflect.apply(extendedValue, thisArg, args);\n        }\n      });\n      wrappedIntegration[key] = wrappedFunction;\n    }\n  }\n  return wrappedIntegration;\n}\n\nexport { addIntegration, afterSetupIntegrations, defineIntegration, extendIntegration, getIntegrationsToSetup, installedIntegrations, setupIntegration, setupIntegrations };\n//# sourceMappingURL=integration.js.map\n","function isBrowserBundle() {\n  return typeof __SENTRY_BROWSER_BUNDLE__ !== \"undefined\" && !!__SENTRY_BROWSER_BUNDLE__;\n}\nfunction getSDKSource() {\n  /*! __SENTRY_SDK_SOURCE__ */\n  return \"npm\";\n}\n\nexport { getSDKSource, isBrowserBundle };\n//# sourceMappingURL=env.js.map\n","import { isBrowserBundle } from './env.js';\n\nfunction isNodeEnv() {\n  return !isBrowserBundle() && Object.prototype.toString.call(typeof process !== \"undefined\" ? process : 0) === \"[object process]\";\n}\nfunction dynamicRequire(mod, request) {\n  return mod.require(request);\n}\nfunction loadModule(moduleName, existingModule = typeof module !== \"undefined\" ? module : void 0) {\n  let mod;\n  try {\n    mod = dynamicRequire(existingModule, moduleName);\n  } catch {\n  }\n  if (!mod) {\n    try {\n      const { cwd } = dynamicRequire(existingModule, \"process\");\n      mod = dynamicRequire(existingModule, `${cwd()}/node_modules/${moduleName}`);\n    } catch {\n    }\n  }\n  return mod;\n}\n\nexport { isNodeEnv, loadModule };\n//# sourceMappingURL=node.js.map\n","import { isNodeEnv } from './node.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\nfunction isBrowser() {\n  return typeof window !== \"undefined\" && (!isNodeEnv() || isElectronNodeRenderer());\n}\nfunction isElectronNodeRenderer() {\n  const process = GLOBAL_OBJ.process;\n  return process?.type === \"renderer\";\n}\n\nexport { isBrowser };\n//# sourceMappingURL=isBrowser.js.map\n","import { dsnToString } from '../utils/dsn.js';\nimport { createEnvelope } from '../utils/envelope.js';\nimport { isBrowser } from '../utils/isBrowser.js';\n\nfunction createLogContainerEnvelopeItem(items, inferUserData) {\n  const inferSetting = inferUserData ? \"auto\" : \"never\";\n  return [\n    {\n      type: \"log\",\n      item_count: items.length,\n      content_type: \"application/vnd.sentry.items.log+json\"\n    },\n    {\n      version: 2,\n      ...isBrowser() && {\n        ingest_settings: { infer_ip: inferSetting, infer_user_agent: inferSetting }\n      },\n      items\n    }\n  ];\n}\nfunction createLogEnvelope(logs, metadata, tunnel, dsn, inferUserData) {\n  const headers = {};\n  if (metadata?.sdk) {\n    headers.sdk = {\n      name: metadata.sdk.name,\n      version: metadata.sdk.version\n    };\n  }\n  if (!!tunnel && !!dsn) {\n    headers.dsn = dsnToString(dsn);\n  }\n  return createEnvelope(headers, [createLogContainerEnvelopeItem(logs, inferUserData)]);\n}\n\nexport { createLogContainerEnvelopeItem, createLogEnvelope };\n//# sourceMappingURL=envelope.js.map\n","import { serializeAttributes } from '../attributes.js';\nimport { getGlobalSingleton } from '../carrier.js';\nimport { getClient, getIsolationScope, getCurrentScope } from '../currentScopes.js';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { debug, consoleSandbox } from '../utils/debug-logger.js';\nimport { isParameterizedString } from '../utils/is.js';\nimport { getCombinedScopeData } from '../utils/scopeData.js';\nimport { _getSpanForScope } from '../utils/spanOnScope.js';\nimport { timestampInSeconds } from '../utils/time.js';\nimport { getSequenceAttribute } from '../utils/timestampSequence.js';\nimport { _getTraceInfoFromScope } from '../utils/trace-info.js';\nimport { SEVERITY_TEXT_TO_SEVERITY_NUMBER } from './constants.js';\nimport { createLogEnvelope } from './envelope.js';\n\nconst MAX_LOG_BUFFER_SIZE = 100;\nfunction setLogAttribute(logAttributes, key, value, setEvenIfPresent = true) {\n  if (value && (!logAttributes[key] || setEvenIfPresent)) {\n    logAttributes[key] = value;\n  }\n}\nfunction _INTERNAL_captureSerializedLog(client, serializedLog) {\n  const bufferMap = _getBufferMap();\n  const logBuffer = _INTERNAL_getLogBuffer(client);\n  if (logBuffer === void 0) {\n    bufferMap.set(client, [serializedLog]);\n  } else {\n    if (logBuffer.length >= MAX_LOG_BUFFER_SIZE) {\n      _INTERNAL_flushLogsBuffer(client, logBuffer);\n      bufferMap.set(client, [serializedLog]);\n    } else {\n      bufferMap.set(client, [...logBuffer, serializedLog]);\n    }\n  }\n}\nfunction _INTERNAL_captureLog(beforeLog, currentScope = getCurrentScope(), captureSerializedLog = _INTERNAL_captureSerializedLog) {\n  const client = currentScope?.getClient() ?? getClient();\n  if (!client) {\n    DEBUG_BUILD && debug.warn(\"No client available to capture log.\");\n    return;\n  }\n  const { release, environment, enableLogs = true, beforeSendLog } = client.getOptions();\n  if (!enableLogs) {\n    DEBUG_BUILD && debug.warn(\"logging option not enabled, log will not be captured.\");\n    return;\n  }\n  const [, traceContext] = _getTraceInfoFromScope(client, currentScope);\n  const processedLogAttributes = {\n    ...beforeLog.attributes\n  };\n  const {\n    user: { id, email, username },\n    attributes: scopeAttributes = {}\n  } = getCombinedScopeData(getIsolationScope(), currentScope);\n  setLogAttribute(processedLogAttributes, \"user.id\", id, false);\n  setLogAttribute(processedLogAttributes, \"user.email\", email, false);\n  setLogAttribute(processedLogAttributes, \"user.name\", username, false);\n  setLogAttribute(processedLogAttributes, \"sentry.release\", release);\n  setLogAttribute(processedLogAttributes, \"sentry.environment\", environment);\n  const { name, version } = client.getSdkMetadata()?.sdk ?? {};\n  setLogAttribute(processedLogAttributes, \"sentry.sdk.name\", name);\n  setLogAttribute(processedLogAttributes, \"sentry.sdk.version\", version);\n  const replay = client.getIntegrationByName(\"Replay\");\n  const replayId = replay?.getReplayId(true);\n  setLogAttribute(processedLogAttributes, \"sentry.replay_id\", replayId);\n  if (replayId && replay?.getRecordingMode() === \"buffer\") {\n    setLogAttribute(processedLogAttributes, \"sentry._internal.replay_is_buffering\", true);\n  }\n  const beforeLogMessage = beforeLog.message;\n  if (isParameterizedString(beforeLogMessage)) {\n    const { __sentry_template_string__, __sentry_template_values__ = [] } = beforeLogMessage;\n    if (__sentry_template_values__?.length) {\n      processedLogAttributes[\"sentry.message.template\"] = __sentry_template_string__;\n    }\n    __sentry_template_values__.forEach((param, index) => {\n      processedLogAttributes[`sentry.message.parameter.${index}`] = param;\n    });\n  }\n  const span = _getSpanForScope(currentScope);\n  setLogAttribute(processedLogAttributes, \"sentry.trace.parent_span_id\", span?.spanContext().spanId);\n  const processedLog = { ...beforeLog, attributes: processedLogAttributes };\n  client.emit(\"beforeCaptureLog\", processedLog);\n  const log = beforeSendLog ? consoleSandbox(() => beforeSendLog(processedLog)) : processedLog;\n  if (!log) {\n    client.recordDroppedEvent(\"before_send\", \"log_item\", 1);\n    DEBUG_BUILD && debug.warn(\"beforeSendLog returned null, log will not be captured.\");\n    return;\n  }\n  const { level, message, attributes: logAttributes = {}, severityNumber } = log;\n  const timestamp = timestampInSeconds();\n  const sequenceAttr = getSequenceAttribute(timestamp);\n  const serializedLog = {\n    timestamp,\n    level,\n    body: _removeLoneSurrogates(String(message)),\n    trace_id: traceContext?.trace_id,\n    severity_number: severityNumber ?? SEVERITY_TEXT_TO_SEVERITY_NUMBER[level],\n    attributes: sanitizeLogAttributes({\n      ...serializeAttributes(scopeAttributes),\n      ...serializeAttributes(logAttributes, true),\n      [sequenceAttr.key]: sequenceAttr.value\n    })\n  };\n  captureSerializedLog(client, serializedLog);\n  client.emit(\"afterCaptureLog\", log);\n}\nfunction _INTERNAL_flushLogsBuffer(client, maybeLogBuffer) {\n  const logBuffer = maybeLogBuffer ?? _INTERNAL_getLogBuffer(client) ?? [];\n  if (logBuffer.length === 0) {\n    return;\n  }\n  const clientOptions = client.getOptions();\n  const envelope = createLogEnvelope(\n    logBuffer,\n    clientOptions._metadata,\n    clientOptions.tunnel,\n    client.getDsn(),\n    client.getDataCollectionOptions().userInfo\n  );\n  _getBufferMap().set(client, []);\n  client.emit(\"flushLogs\");\n  client.sendEnvelope(envelope);\n}\nfunction _INTERNAL_getLogBuffer(client) {\n  return _getBufferMap().get(client);\n}\nfunction _getBufferMap() {\n  return getGlobalSingleton(\"clientToLogBufferMap\", () => /* @__PURE__ */ new WeakMap());\n}\nfunction sanitizeLogAttributes(attributes) {\n  const sanitized = {};\n  for (const [key, attr] of Object.entries(attributes)) {\n    const sanitizedKey = _removeLoneSurrogates(key);\n    if (attr.type === \"string\") {\n      sanitized[sanitizedKey] = { ...attr, value: _removeLoneSurrogates(attr.value) };\n    } else {\n      sanitized[sanitizedKey] = attr;\n    }\n  }\n  return sanitized;\n}\nfunction _removeLoneSurrogates(str) {\n  const strObj = Object(str);\n  const isWellFormed = strObj[\"isWellFormed\"];\n  const toWellFormed = strObj[\"toWellFormed\"];\n  if (typeof isWellFormed === \"function\" && typeof toWellFormed === \"function\") {\n    return isWellFormed.call(str) ? str : toWellFormed.call(str);\n  }\n  return str;\n}\n\nexport { _INTERNAL_captureLog, _INTERNAL_captureSerializedLog, _INTERNAL_flushLogsBuffer, _INTERNAL_getLogBuffer, _removeLoneSurrogates };\n//# sourceMappingURL=internal.js.map\n","import { dsnToString } from '../utils/dsn.js';\nimport { createEnvelope } from '../utils/envelope.js';\nimport { isBrowser } from '../utils/isBrowser.js';\n\nfunction createMetricContainerEnvelopeItem(items, inferUserData) {\n  const inferSetting = inferUserData ? \"auto\" : \"never\";\n  return [\n    {\n      type: \"trace_metric\",\n      item_count: items.length,\n      content_type: \"application/vnd.sentry.items.trace-metric+json\"\n    },\n    {\n      version: 2,\n      ...isBrowser() && {\n        ingest_settings: { infer_ip: inferSetting, infer_user_agent: inferSetting }\n      },\n      items\n    }\n  ];\n}\nfunction createMetricEnvelope(metrics, metadata, tunnel, dsn, inferUserData) {\n  const headers = {};\n  if (metadata?.sdk) {\n    headers.sdk = {\n      name: metadata.sdk.name,\n      version: metadata.sdk.version\n    };\n  }\n  if (!!tunnel && !!dsn) {\n    headers.dsn = dsnToString(dsn);\n  }\n  return createEnvelope(headers, [createMetricContainerEnvelopeItem(metrics, inferUserData)]);\n}\n\nexport { createMetricContainerEnvelopeItem, createMetricEnvelope };\n//# sourceMappingURL=envelope.js.map\n","import { serializeAttributes } from '../attributes.js';\nimport { getGlobalSingleton } from '../carrier.js';\nimport { getCurrentScope, getClient, getIsolationScope } from '../currentScopes.js';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { debug } from '../utils/debug-logger.js';\nimport { getCombinedScopeData } from '../utils/scopeData.js';\nimport { _getSpanForScope } from '../utils/spanOnScope.js';\nimport { timestampInSeconds } from '../utils/time.js';\nimport { getSequenceAttribute } from '../utils/timestampSequence.js';\nimport { _getTraceInfoFromScope } from '../utils/trace-info.js';\nimport { createMetricEnvelope } from './envelope.js';\n\nconst MAX_METRIC_BUFFER_SIZE = 1e3;\nfunction setMetricAttribute(metricAttributes, key, value, setEvenIfPresent = true) {\n  if (value && (setEvenIfPresent || !(key in metricAttributes))) {\n    metricAttributes[key] = value;\n  }\n}\nfunction _INTERNAL_captureSerializedMetric(client, serializedMetric) {\n  const bufferMap = _getBufferMap();\n  const metricBuffer = _INTERNAL_getMetricBuffer(client);\n  if (metricBuffer === void 0) {\n    bufferMap.set(client, [serializedMetric]);\n  } else {\n    if (metricBuffer.length >= MAX_METRIC_BUFFER_SIZE) {\n      _INTERNAL_flushMetricsBuffer(client, metricBuffer);\n      bufferMap.set(client, [serializedMetric]);\n    } else {\n      bufferMap.set(client, [...metricBuffer, serializedMetric]);\n    }\n  }\n}\nfunction _enrichMetricAttributes(beforeMetric, client, user) {\n  const { release, environment } = client.getOptions();\n  const processedMetricAttributes = {\n    ...beforeMetric.attributes\n  };\n  setMetricAttribute(processedMetricAttributes, \"user.id\", user.id, false);\n  setMetricAttribute(processedMetricAttributes, \"user.email\", user.email, false);\n  setMetricAttribute(processedMetricAttributes, \"user.name\", user.username, false);\n  setMetricAttribute(processedMetricAttributes, \"sentry.release\", release);\n  setMetricAttribute(processedMetricAttributes, \"sentry.environment\", environment);\n  const { name, version } = client.getSdkMetadata()?.sdk ?? {};\n  setMetricAttribute(processedMetricAttributes, \"sentry.sdk.name\", name);\n  setMetricAttribute(processedMetricAttributes, \"sentry.sdk.version\", version);\n  const replay = client.getIntegrationByName(\"Replay\");\n  const replayId = replay?.getReplayId(true);\n  setMetricAttribute(processedMetricAttributes, \"sentry.replay_id\", replayId);\n  if (replayId && replay?.getRecordingMode() === \"buffer\") {\n    setMetricAttribute(processedMetricAttributes, \"sentry._internal.replay_is_buffering\", true);\n  }\n  return {\n    ...beforeMetric,\n    attributes: processedMetricAttributes\n  };\n}\nfunction _buildSerializedMetric(metric, client, currentScope, scopeAttributes) {\n  const [, traceContext] = _getTraceInfoFromScope(client, currentScope);\n  const span = _getSpanForScope(currentScope);\n  const traceId = span ? span.spanContext().traceId : traceContext?.trace_id;\n  const spanId = span ? span.spanContext().spanId : void 0;\n  const timestamp = timestampInSeconds();\n  const sequenceAttr = getSequenceAttribute(timestamp);\n  return {\n    timestamp,\n    trace_id: traceId ?? \"\",\n    span_id: spanId,\n    name: metric.name,\n    type: metric.type,\n    unit: metric.unit,\n    value: metric.value,\n    attributes: {\n      ...serializeAttributes(scopeAttributes),\n      ...serializeAttributes(metric.attributes, \"skip-undefined\"),\n      [sequenceAttr.key]: sequenceAttr.value\n    }\n  };\n}\nfunction _INTERNAL_captureMetric(beforeMetric, options) {\n  const currentScope = options?.scope ?? getCurrentScope();\n  const captureSerializedMetric = options?.captureSerializedMetric ?? _INTERNAL_captureSerializedMetric;\n  const client = currentScope?.getClient() ?? getClient();\n  if (!client) {\n    DEBUG_BUILD && debug.warn(\"No client available to capture metric.\");\n    return;\n  }\n  const { _experiments, enableMetrics, beforeSendMetric } = client.getOptions();\n  const metricsEnabled = enableMetrics ?? _experiments?.enableMetrics ?? true;\n  if (!metricsEnabled) {\n    DEBUG_BUILD && debug.warn(\"metrics option not enabled, metric will not be captured.\");\n    return;\n  }\n  const { user, attributes: scopeAttributes } = getCombinedScopeData(getIsolationScope(), currentScope);\n  const enrichedMetric = _enrichMetricAttributes(beforeMetric, client, user);\n  client.emit(\"processMetric\", enrichedMetric);\n  const beforeSendCallback = beforeSendMetric || _experiments?.beforeSendMetric;\n  const processedMetric = beforeSendCallback ? beforeSendCallback(enrichedMetric) : enrichedMetric;\n  if (!processedMetric) {\n    DEBUG_BUILD && debug.log(\"`beforeSendMetric` returned `null`, will not send metric.\");\n    return;\n  }\n  const serializedMetric = _buildSerializedMetric(processedMetric, client, currentScope, scopeAttributes);\n  DEBUG_BUILD && debug.log(\"[Metric]\", serializedMetric);\n  captureSerializedMetric(client, serializedMetric);\n  client.emit(\"afterCaptureMetric\", processedMetric);\n}\nfunction _INTERNAL_flushMetricsBuffer(client, maybeMetricBuffer) {\n  const metricBuffer = maybeMetricBuffer ?? _INTERNAL_getMetricBuffer(client) ?? [];\n  if (metricBuffer.length === 0) {\n    return;\n  }\n  const clientOptions = client.getOptions();\n  const envelope = createMetricEnvelope(\n    metricBuffer,\n    clientOptions._metadata,\n    clientOptions.tunnel,\n    client.getDsn(),\n    client.getDataCollectionOptions().userInfo\n  );\n  _getBufferMap().set(client, []);\n  client.emit(\"flushMetrics\");\n  client.sendEnvelope(envelope);\n}\nfunction _INTERNAL_getMetricBuffer(client) {\n  return _getBufferMap().get(client);\n}\nfunction _getBufferMap() {\n  return getGlobalSingleton(\"clientToMetricBufferMap\", () => /* @__PURE__ */ new WeakMap());\n}\n\nexport { _INTERNAL_captureMetric, _INTERNAL_captureSerializedMetric, _INTERNAL_flushMetricsBuffer, _INTERNAL_getMetricBuffer };\n//# sourceMappingURL=internal.js.map\n","import { streamedSpanJsonToSerializedSpan } from '../../utils/spanUtils.js';\n\nfunction spanJsonToSerializedStreamedSpan(span) {\n  const streamedSpan = {\n    trace_id: span.trace_id,\n    span_id: span.span_id,\n    parent_span_id: span.parent_span_id,\n    name: span.description || \"\",\n    start_timestamp: span.start_timestamp,\n    end_timestamp: span.timestamp || span.start_timestamp,\n    status: !span.status || span.status === \"ok\" || span.status === \"cancelled\" ? \"ok\" : \"error\",\n    is_segment: false,\n    attributes: { ...span.data },\n    links: span.links\n  };\n  return streamedSpanJsonToSerializedSpan(streamedSpan);\n}\n\nexport { spanJsonToSerializedStreamedSpan };\n//# sourceMappingURL=spanJsonToStreamedSpan.js.map\n","import { isBrowser } from '../../utils/isBrowser.js';\nimport { hasSpanStreamingEnabled } from './hasSpanStreamingEnabled.js';\nimport { spanJsonToSerializedStreamedSpan } from './spanJsonToStreamedSpan.js';\n\nfunction extractGenAiSpansFromEvent(event, client) {\n  if (event.type !== \"transaction\" || !event.spans?.length || !event.sdkProcessingMetadata?.hasGenAiSpans || client.getOptions().streamGenAiSpans === false || hasSpanStreamingEnabled(client)) {\n    return void 0;\n  }\n  const genAiSpans = [];\n  const remainingSpans = [];\n  for (const span of event.spans) {\n    if (span.op?.startsWith(\"gen_ai.\")) {\n      genAiSpans.push(spanJsonToSerializedStreamedSpan(span));\n    } else {\n      remainingSpans.push(span);\n    }\n  }\n  if (genAiSpans.length === 0) {\n    return void 0;\n  }\n  event.spans = remainingSpans;\n  const inferSetting = client.getDataCollectionOptions().userInfo ? \"auto\" : \"never\";\n  return [\n    { type: \"span\", item_count: genAiSpans.length, content_type: \"application/vnd.sentry.items.span.v2+json\" },\n    {\n      version: 2,\n      ...isBrowser() && {\n        ingest_settings: { infer_ip: inferSetting, infer_user_agent: inferSetting }\n      },\n      items: genAiSpans\n    }\n  ];\n}\n\nexport { extractGenAiSpansFromEvent };\n//# sourceMappingURL=extractGenAiSpans.js.map\n","import { resolvedSyncPromise, rejectedSyncPromise } from './syncpromise.js';\nimport { safeUnref } from './timer.js';\n\nconst SENTRY_BUFFER_FULL_ERROR = /* @__PURE__ */ Symbol.for(\"SentryBufferFullError\");\nfunction makePromiseBuffer(limit = 100) {\n  const buffer = /* @__PURE__ */ new Set();\n  function isReady() {\n    return buffer.size < limit;\n  }\n  function remove(task) {\n    buffer.delete(task);\n  }\n  function add(taskProducer) {\n    if (!isReady()) {\n      return rejectedSyncPromise(SENTRY_BUFFER_FULL_ERROR);\n    }\n    const task = taskProducer();\n    buffer.add(task);\n    void task.then(\n      () => remove(task),\n      () => remove(task)\n    );\n    return task;\n  }\n  function drain(timeout) {\n    if (!buffer.size) {\n      return resolvedSyncPromise(true);\n    }\n    const drainPromise = Promise.allSettled(Array.from(buffer)).then(() => true);\n    if (!timeout) {\n      return drainPromise;\n    }\n    const promises = [\n      drainPromise,\n      new Promise((resolve) => safeUnref(setTimeout(() => resolve(false), timeout)))\n    ];\n    return Promise.race(promises);\n  }\n  return {\n    get $() {\n      return Array.from(buffer);\n    },\n    add,\n    drain\n  };\n}\n\nexport { SENTRY_BUFFER_FULL_ERROR, makePromiseBuffer };\n//# sourceMappingURL=promisebuffer.js.map\n","import { safeDateNow } from './randomSafeContext.js';\n\nconst DEFAULT_RETRY_AFTER = 60 * 1e3;\nfunction parseRetryAfterHeader(header, now = safeDateNow()) {\n  const headerDelay = parseInt(`${header}`, 10);\n  if (!isNaN(headerDelay)) {\n    return headerDelay * 1e3;\n  }\n  const headerDate = Date.parse(`${header}`);\n  if (!isNaN(headerDate)) {\n    return headerDate - now;\n  }\n  return DEFAULT_RETRY_AFTER;\n}\nfunction disabledUntil(limits, dataCategory) {\n  return limits[dataCategory] || limits.all || 0;\n}\nfunction isRateLimited(limits, dataCategory, now = safeDateNow()) {\n  return disabledUntil(limits, dataCategory) > now;\n}\nfunction updateRateLimits(limits, { statusCode, headers }, now = safeDateNow()) {\n  const updatedRateLimits = {\n    ...limits\n  };\n  const rateLimitHeader = headers?.[\"x-sentry-rate-limits\"];\n  const retryAfterHeader = headers?.[\"retry-after\"];\n  if (rateLimitHeader) {\n    for (const limit of rateLimitHeader.trim().split(\",\")) {\n      const [retryAfter, categories, , , namespaces] = limit.split(\":\", 5);\n      const headerDelay = parseInt(retryAfter, 10);\n      const delay = (!isNaN(headerDelay) ? headerDelay : 60) * 1e3;\n      if (!categories) {\n        updatedRateLimits.all = now + delay;\n      } else {\n        for (const category of categories.split(\";\")) {\n          if (category === \"metric_bucket\") {\n            if (!namespaces || namespaces.split(\";\").includes(\"custom\")) {\n              updatedRateLimits[category] = now + delay;\n            }\n          } else {\n            updatedRateLimits[category] = now + delay;\n          }\n        }\n      }\n    }\n  } else if (retryAfterHeader) {\n    updatedRateLimits.all = now + parseRetryAfterHeader(retryAfterHeader, now);\n  } else if (statusCode === 429) {\n    updatedRateLimits.all = now + 60 * 1e3;\n  }\n  return updatedRateLimits;\n}\n\nexport { DEFAULT_RETRY_AFTER, disabledUntil, isRateLimited, parseRetryAfterHeader, updateRateLimits };\n//# sourceMappingURL=ratelimit.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { debug } from '../utils/debug-logger.js';\nimport { forEachEnvelopeItem, envelopeItemTypeToDataCategory, createEnvelope, serializeEnvelope, envelopeContainsItemType } from '../utils/envelope.js';\nimport { makePromiseBuffer, SENTRY_BUFFER_FULL_ERROR } from '../utils/promisebuffer.js';\nimport { isRateLimited, updateRateLimits } from '../utils/ratelimit.js';\n\nconst DEFAULT_TRANSPORT_BUFFER_SIZE = 64;\nfunction createTransport(options, makeRequest, buffer = makePromiseBuffer(\n  options.bufferSize || DEFAULT_TRANSPORT_BUFFER_SIZE\n)) {\n  let rateLimits = {};\n  const flush = (timeout) => buffer.drain(timeout);\n  function send(envelope) {\n    const filteredEnvelopeItems = [];\n    forEachEnvelopeItem(envelope, (item, type) => {\n      const dataCategory = envelopeItemTypeToDataCategory(type);\n      if (isRateLimited(rateLimits, dataCategory)) {\n        options.recordDroppedEvent(\"ratelimit_backoff\", dataCategory);\n      } else {\n        filteredEnvelopeItems.push(item);\n      }\n    });\n    if (filteredEnvelopeItems.length === 0) {\n      return Promise.resolve({});\n    }\n    const filteredEnvelope = createEnvelope(envelope[0], filteredEnvelopeItems);\n    const recordEnvelopeLoss = (reason) => {\n      if (envelopeContainsItemType(filteredEnvelope, [\"client_report\"])) {\n        DEBUG_BUILD && debug.warn(`Dropping client report. Will not send outcomes (reason: ${reason}).`);\n        return;\n      }\n      forEachEnvelopeItem(filteredEnvelope, (item, type) => {\n        options.recordDroppedEvent(reason, envelopeItemTypeToDataCategory(type));\n      });\n    };\n    const requestTask = () => makeRequest({ body: serializeEnvelope(filteredEnvelope) }).then(\n      (response) => {\n        if (response.statusCode === 413) {\n          DEBUG_BUILD && debug.error(\n            \"Sentry responded with status code 413. Envelope was discarded due to exceeding size limits.\"\n          );\n          recordEnvelopeLoss(\"send_error\");\n          return response;\n        }\n        if (DEBUG_BUILD && response.statusCode !== void 0 && (response.statusCode < 200 || response.statusCode >= 300)) {\n          debug.warn(`Sentry responded with status code ${response.statusCode} to sent event.`);\n        }\n        rateLimits = updateRateLimits(rateLimits, response);\n        return response;\n      },\n      (error) => {\n        recordEnvelopeLoss(\"network_error\");\n        DEBUG_BUILD && debug.error(\"Encountered error running transport request:\", error);\n        throw error;\n      }\n    );\n    return buffer.add(requestTask).then(\n      (result) => result,\n      (error) => {\n        if (error === SENTRY_BUFFER_FULL_ERROR) {\n          DEBUG_BUILD && debug.error(\"Skipped sending event because buffer is full.\");\n          recordEnvelopeLoss(\"queue_overflow\");\n          return Promise.resolve({});\n        } else {\n          throw error;\n        }\n      }\n    );\n  }\n  return {\n    send,\n    flush\n  };\n}\n\nexport { DEFAULT_TRANSPORT_BUFFER_SIZE, createTransport };\n//# sourceMappingURL=base.js.map\n","import { createEnvelope } from './envelope.js';\nimport { dateTimestampInSeconds } from './time.js';\n\nfunction createClientReportEnvelope(discarded_events, dsn, timestamp) {\n  const clientReportItem = [\n    { type: \"client_report\" },\n    {\n      timestamp: timestamp || dateTimestampInSeconds(),\n      discarded_events\n    }\n  ];\n  return createEnvelope(dsn ? { dsn } : {}, [clientReportItem]);\n}\n\nexport { createClientReportEnvelope };\n//# sourceMappingURL=clientreport.js.map\n","function getPossibleEventMessages(event) {\n  const possibleMessages = [];\n  if (event.message) {\n    possibleMessages.push(event.message);\n  }\n  try {\n    const lastException = event.exception.values[event.exception.values.length - 1];\n    if (lastException?.value) {\n      possibleMessages.push(lastException.value);\n      if (lastException.type) {\n        possibleMessages.push(`${lastException.type}: ${lastException.value}`);\n      }\n    }\n  } catch {\n  }\n  return possibleMessages;\n}\n\nexport { getPossibleEventMessages };\n//# sourceMappingURL=eventUtils.js.map\n","import { SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME, SEMANTIC_ATTRIBUTE_PROFILE_ID } from '../semanticAttributes.js';\n\nfunction convertTransactionEventToSpanJson(event) {\n  const { trace_id, parent_span_id, span_id, status, origin, data, op } = event.contexts?.trace ?? {};\n  return {\n    data: data ?? {},\n    description: event.transaction,\n    op,\n    parent_span_id,\n    span_id: span_id ?? \"\",\n    start_timestamp: event.start_timestamp ?? 0,\n    status,\n    timestamp: event.timestamp,\n    trace_id: trace_id ?? \"\",\n    origin,\n    profile_id: data?.[SEMANTIC_ATTRIBUTE_PROFILE_ID],\n    exclusive_time: data?.[SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME],\n    measurements: event.measurements,\n    is_segment: true\n  };\n}\nfunction convertSpanJsonToTransactionEvent(span) {\n  return {\n    type: \"transaction\",\n    timestamp: span.timestamp,\n    start_timestamp: span.start_timestamp,\n    transaction: span.description,\n    contexts: {\n      trace: {\n        trace_id: span.trace_id,\n        span_id: span.span_id,\n        parent_span_id: span.parent_span_id,\n        op: span.op,\n        status: span.status,\n        origin: span.origin,\n        data: {\n          ...span.data,\n          ...span.profile_id && { [SEMANTIC_ATTRIBUTE_PROFILE_ID]: span.profile_id },\n          ...span.exclusive_time && { [SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME]: span.exclusive_time }\n        }\n      }\n    },\n    measurements: span.measurements\n  };\n}\n\nexport { convertSpanJsonToTransactionEvent, convertTransactionEventToSpanJson };\n//# sourceMappingURL=transactionEvent.js.map\n","const FILTERED_VALUE = \"[Filtered]\";\nconst PII_HEADER_SNIPPETS = [\"forwarded\", \"-ip\", \"remote-\", \"via\", \"-user\"];\nconst SENSITIVE_KEY_SNIPPETS = [\n  \"auth\",\n  \"token\",\n  \"secret\",\n  \"session\",\n  // for the user_session cookie\n  \"password\",\n  \"passwd\",\n  \"pwd\",\n  \"key\",\n  \"jwt\",\n  \"bearer\",\n  \"sso\",\n  \"saml\",\n  \"csrf\",\n  \"xsrf\",\n  \"credentials\",\n  \"sid\",\n  \"identity\",\n  // Always treat cookie headers as sensitive in case individual key-value cookie pairs cannot properly be extracted\n  \"set-cookie\",\n  \"cookie\"\n];\nconst SENSITIVE_COOKIE_NAME_SNIPPETS = [\n  // Express / Connect default session cookie\n  \".sid\",\n  // Opaque session ids (PHPSESSID, ASPSESSIONID*, BIGipServer*, *sessid*, …)\n  \"sessid\",\n  // Laravel etc. \"remember me\" tokens\n  \"remember\",\n  // OIDC / OAuth auxiliary (`oauth*` covered by header snippet `auth`)\n  \"oidc\",\n  \"pkce\",\n  \"nonce\",\n  // RFC 6265bis high-security cookie name prefixes\n  \"__secure-\",\n  \"__host-\",\n  // Load balancer / CDN sticky-session cookies (opaque routing tokens)\n  \"awsalb\",\n  \"awselb\",\n  \"akamai\",\n  // BaaS / IdP session cookies (names often omit \"session\")\n  \"__stripe\",\n  \"cognito\",\n  \"firebase\",\n  \"supabase\",\n  \"sb-\",\n  // Step-up / MFA cookies\n  \"mfa\",\n  \"2fa\"\n];\n\nexport { FILTERED_VALUE, PII_HEADER_SNIPPETS, SENSITIVE_COOKIE_NAME_SNIPPETS, SENSITIVE_KEY_SNIPPETS };\n//# sourceMappingURL=filtering-snippets.js.map\n","import { PII_HEADER_SNIPPETS } from './filtering-snippets.js';\n\nfunction defaultPiiToCollectionOptions(sendDefaultPii) {\n  return sendDefaultPii === true ? {\n    userInfo: true,\n    cookies: true,\n    httpHeaders: { request: true, response: true },\n    httpBodies: [\"incomingRequest\", \"outgoingRequest\", \"incomingResponse\", \"outgoingResponse\"],\n    urlQueryParams: true,\n    graphQL: { document: true, variables: true },\n    genAI: { inputs: true, outputs: true },\n    databaseQueryData: true,\n    stackFrameVariables: true,\n    frameContextLines: 7\n    // default should be 5, but ContextLines integration uses 7\n  } : {\n    userInfo: false,\n    cookies: { deny: PII_HEADER_SNIPPETS },\n    httpHeaders: { request: { deny: PII_HEADER_SNIPPETS }, response: { deny: PII_HEADER_SNIPPETS } },\n    httpBodies: [],\n    urlQueryParams: { deny: PII_HEADER_SNIPPETS },\n    // The GraphQL document has literal values redacted at collection time, so it was historically\n    // always attached regardless of `sendDefaultPii`; keep it on to preserve that behavior.\n    graphQL: { document: true, variables: true },\n    genAI: { inputs: false, outputs: false },\n    // Database query values were only sent with `sendDefaultPii: true` (e.g. Supabase gated on it),\n    // so map the legacy \"off\" state to `false`.\n    databaseQueryData: false,\n    stackFrameVariables: true,\n    frameContextLines: 7\n    // default should be 5, but ContextLines integration uses 7\n  };\n}\n\nexport { defaultPiiToCollectionOptions };\n//# sourceMappingURL=defaultPiiToCollectionOptions.js.map\n","import { defaultPiiToCollectionOptions } from './defaultPiiToCollectionOptions.js';\n\nconst DEFAULTS = {\n  userInfo: true,\n  cookies: true,\n  httpHeaders: { request: true, response: true },\n  httpBodies: [\"incomingRequest\", \"outgoingRequest\", \"incomingResponse\", \"outgoingResponse\"],\n  urlQueryParams: true,\n  graphQL: { document: true, variables: true },\n  genAI: { inputs: true, outputs: true },\n  databaseQueryData: true,\n  stackFrameVariables: true,\n  frameContextLines: 5\n};\nfunction resolveDataCollectionOptions(options) {\n  const base = options.dataCollection != null ? DEFAULTS : defaultPiiToCollectionOptions(options.sendDefaultPii);\n  const dc = options.dataCollection ?? {};\n  return {\n    userInfo: dc.userInfo ?? base.userInfo,\n    cookies: dc.cookies ?? base.cookies,\n    httpHeaders: {\n      request: dc.httpHeaders?.request ?? base.httpHeaders.request,\n      response: dc.httpHeaders?.response ?? base.httpHeaders.response\n    },\n    httpBodies: dc.httpBodies ?? base.httpBodies,\n    // oxlint-disable-next-line typescript/no-deprecated\n    urlQueryParams: dc.urlQueryParams ?? dc.queryParams ?? base.urlQueryParams,\n    graphQL: {\n      document: dc.graphQL?.document ?? base.graphQL.document,\n      variables: dc.graphQL?.variables ?? base.graphQL.variables\n    },\n    genAI: {\n      inputs: dc.genAI?.inputs ?? base.genAI.inputs,\n      outputs: dc.genAI?.outputs ?? base.genAI.outputs\n    },\n    databaseQueryData: dc.databaseQueryData ?? base.databaseQueryData,\n    stackFrameVariables: dc.stackFrameVariables ?? base.stackFrameVariables,\n    frameContextLines: dc.frameContextLines ?? base.frameContextLines\n  };\n}\n\nexport { resolveDataCollectionOptions };\n//# sourceMappingURL=resolveDataCollectionOptions.js.map\n","import { getEnvelopeEndpointWithUrlEncodedAuth } from './api.js';\nimport { DEFAULT_ENVIRONMENT } from './constants.js';\nimport { getTraceContextFromScope, getCurrentScope, getIsolationScope } from './currentScopes.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { createEventEnvelope, createSessionEnvelope } from './envelope.js';\nimport { setupIntegration, afterSetupIntegrations, setupIntegrations } from './integration.js';\nimport { _INTERNAL_flushLogsBuffer } from './logs/internal.js';\nimport { _INTERNAL_flushMetricsBuffer } from './metrics/internal.js';\nimport { updateSession } from './session.js';\nimport { getDynamicSamplingContextFromScope } from './tracing/dynamicSamplingContext.js';\nimport { isStreamedBeforeSendSpanCallback } from './tracing/spans/beforeSendSpan.js';\nimport { extractGenAiSpansFromEvent } from './tracing/spans/extractGenAiSpans.js';\nimport { DEFAULT_TRANSPORT_BUFFER_SIZE } from './transports/base.js';\nimport { createClientReportEnvelope } from './utils/clientreport.js';\nimport { debug } from './utils/debug-logger.js';\nimport { makeDsn, dsnToString } from './utils/dsn.js';\nimport { addItemToEnvelope, createAttachmentEnvelopeItem } from './utils/envelope.js';\nimport { getPossibleEventMessages } from './utils/eventUtils.js';\nimport { isParameterizedString, isPrimitive, isObjectLike, isThenable, isPlainObject } from './utils/is.js';\nimport { merge } from './utils/merge.js';\nimport { uuid4, checkOrSetAlreadyCaught } from './utils/misc.js';\nimport { parseSampleRate } from './utils/parseSampleRate.js';\nimport { prepareEvent } from './utils/prepareEvent.js';\nimport { makePromiseBuffer, SENTRY_BUFFER_FULL_ERROR } from './utils/promisebuffer.js';\nimport { safeMathRandom } from './utils/randomSafeContext.js';\nimport { shouldIgnoreSpan, reparentChildSpans } from './utils/should-ignore-span.js';\nimport { showSpanDropWarning } from './utils/spanUtils.js';\nimport { safeUnref } from './utils/timer.js';\nimport { convertTransactionEventToSpanJson, convertSpanJsonToTransactionEvent } from './utils/transactionEvent.js';\nimport { resolveDataCollectionOptions } from './utils/data-collection/resolveDataCollectionOptions.js';\n\nconst ALREADY_SEEN_ERROR = \"Not capturing exception because it's already been captured.\";\nconst MISSING_RELEASE_FOR_SESSION_ERROR = \"Discarded session because of missing or non-string release\";\nconst INTERNAL_ERROR_SYMBOL = /* @__PURE__ */ Symbol.for(\"SentryInternalError\");\nconst DO_NOT_SEND_EVENT_SYMBOL = /* @__PURE__ */ Symbol.for(\"SentryDoNotSendEventError\");\nconst DEFAULT_FLUSH_INTERVAL = 5e3;\nfunction _makeInternalError(message) {\n  return {\n    message,\n    [INTERNAL_ERROR_SYMBOL]: true\n  };\n}\nfunction _makeDoNotSendEventError(message) {\n  return {\n    message,\n    [DO_NOT_SEND_EVENT_SYMBOL]: true\n  };\n}\nfunction _isInternalError(error) {\n  return isObjectLike(error) && INTERNAL_ERROR_SYMBOL in error;\n}\nfunction _isDoNotSendEventError(error) {\n  return isObjectLike(error) && DO_NOT_SEND_EVENT_SYMBOL in error;\n}\nfunction setupWeightBasedFlushing(client, afterCaptureHook, flushHook, estimateSizeFn, flushFn) {\n  let weight = 0;\n  let flushTimeout;\n  let isTimerActive = false;\n  client.on(flushHook, () => {\n    weight = 0;\n    clearTimeout(flushTimeout);\n    isTimerActive = false;\n  });\n  client.on(afterCaptureHook, (item) => {\n    weight += estimateSizeFn(item);\n    if (weight >= 8e5) {\n      flushFn(client);\n    } else if (!isTimerActive) {\n      const flushInterval = client.getOptions()._flushInterval ?? DEFAULT_FLUSH_INTERVAL;\n      if (flushInterval > 0) {\n        isTimerActive = true;\n        flushTimeout = safeUnref(\n          setTimeout(() => {\n            flushFn(client);\n          }, flushInterval)\n        );\n      }\n    }\n  });\n  client.on(\"flush\", () => {\n    flushFn(client);\n  });\n}\nclass Client {\n  /**\n   * Initializes this client instance.\n   *\n   * @param options Options for the client.\n   */\n  constructor(options) {\n    this._options = options;\n    this._integrations = {};\n    this._numProcessing = 0;\n    this._outcomes = {};\n    this._hooks = {};\n    this._eventProcessors = [];\n    this._promiseBuffer = makePromiseBuffer(options.transportOptions?.bufferSize ?? DEFAULT_TRANSPORT_BUFFER_SIZE);\n    this._dataCollection = resolveDataCollectionOptions(options);\n    if (options.dsn) {\n      this._dsn = makeDsn(options.dsn);\n    } else {\n      DEBUG_BUILD && debug.warn(\"No DSN provided, client will not send events.\");\n    }\n    if (this._dsn) {\n      const url = getEnvelopeEndpointWithUrlEncodedAuth(\n        this._dsn,\n        options.tunnel,\n        options._metadata ? options._metadata.sdk : void 0\n      );\n      this._transport = options.transport({\n        tunnel: this._options.tunnel,\n        recordDroppedEvent: this.recordDroppedEvent.bind(this),\n        ...options.transportOptions,\n        url\n      });\n    }\n    this._options.enableLogs = this._options.enableLogs ?? this._options._experiments?.enableLogs ?? true;\n    if (this._options.enableLogs) {\n      setupWeightBasedFlushing(this, \"afterCaptureLog\", \"flushLogs\", estimateLogSizeInBytes, _INTERNAL_flushLogsBuffer);\n    }\n    const enableMetrics = this._options.enableMetrics ?? this._options._experiments?.enableMetrics ?? true;\n    if (enableMetrics) {\n      setupWeightBasedFlushing(\n        this,\n        \"afterCaptureMetric\",\n        \"flushMetrics\",\n        estimateMetricSizeInBytes,\n        _INTERNAL_flushMetricsBuffer\n      );\n    }\n  }\n  /**\n   * Captures an exception event and sends it to Sentry.\n   *\n   * Unlike `captureException` exported from every SDK, this method requires that you pass it the current scope.\n   */\n  captureException(exception, hint, scope) {\n    const eventId = uuid4();\n    if (checkOrSetAlreadyCaught(exception)) {\n      DEBUG_BUILD && debug.log(ALREADY_SEEN_ERROR);\n      return eventId;\n    }\n    const hintWithEventId = {\n      event_id: eventId,\n      ...hint\n    };\n    this._process(\n      () => this.eventFromException(exception, hintWithEventId).then((event) => this._captureEvent(event, hintWithEventId, scope)).then((res) => res),\n      \"error\"\n    );\n    return hintWithEventId.event_id;\n  }\n  /**\n   * Captures a message event and sends it to Sentry.\n   *\n   * Unlike `captureMessage` exported from every SDK, this method requires that you pass it the current scope.\n   */\n  captureMessage(message, level, hint, currentScope) {\n    const hintWithEventId = {\n      event_id: uuid4(),\n      ...hint\n    };\n    const eventMessage = isParameterizedString(message) ? message : String(message);\n    const isMessage = isPrimitive(message);\n    const promisedEvent = isMessage ? this.eventFromMessage(eventMessage, level, hintWithEventId) : this.eventFromException(message, hintWithEventId);\n    this._process(\n      () => promisedEvent.then((event) => this._captureEvent(event, hintWithEventId, currentScope)),\n      isMessage ? \"unknown\" : \"error\"\n    );\n    return hintWithEventId.event_id;\n  }\n  /**\n   * Captures a manually created event and sends it to Sentry.\n   *\n   * Unlike `captureEvent` exported from every SDK, this method requires that you pass it the current scope.\n   */\n  captureEvent(event, hint, currentScope) {\n    const eventId = uuid4();\n    if (hint?.originalException && checkOrSetAlreadyCaught(hint.originalException)) {\n      DEBUG_BUILD && debug.log(ALREADY_SEEN_ERROR);\n      return eventId;\n    }\n    const hintWithEventId = {\n      event_id: eventId,\n      ...hint\n    };\n    const sdkProcessingMetadata = event.sdkProcessingMetadata || {};\n    const capturedSpanScope = sdkProcessingMetadata.capturedSpanScope;\n    const capturedSpanIsolationScope = sdkProcessingMetadata.capturedSpanIsolationScope;\n    const dataCategory = getDataCategoryByType(event.type);\n    this._process(\n      () => this._captureEvent(event, hintWithEventId, capturedSpanScope || currentScope, capturedSpanIsolationScope),\n      dataCategory\n    );\n    return hintWithEventId.event_id;\n  }\n  /**\n   * Captures a session.\n   */\n  captureSession(session) {\n    this.sendSession(session);\n    updateSession(session, { init: false });\n  }\n  /**\n   * Get the current Dsn.\n   */\n  getDsn() {\n    return this._dsn;\n  }\n  /**\n   * Get the current options.\n   */\n  getOptions() {\n    return this._options;\n  }\n  /**\n   * Get the resolved data collection configuration.\n   */\n  getDataCollectionOptions() {\n    return this._dataCollection;\n  }\n  /**\n   * Get the SDK metadata.\n   * @see SdkMetadata\n   */\n  getSdkMetadata() {\n    return this._options._metadata;\n  }\n  /**\n   * Returns the transport that is used by the client.\n   * Please note that the transport gets lazy initialized so it will only be there once the first event has been sent.\n   */\n  getTransport() {\n    return this._transport;\n  }\n  /**\n   * Wait for all events to be sent or the timeout to expire, whichever comes first.\n   *\n   * @param timeout Maximum time in ms the client should wait for events to be flushed. Omitting this parameter will\n   *   cause the client to wait until all events are sent before resolving the promise.\n   * @returns A promise that will resolve with `true` if all events are sent before the timeout, or `false` if there are\n   * still events in the queue when the timeout is reached.\n   */\n  // @ts-expect-error - PromiseLike is a subset of Promise\n  async flush(timeout) {\n    const transport = this._transport;\n    this.emit(\"flush\");\n    if (!transport) {\n      return true;\n    }\n    const clientFinished = await this._isClientDoneProcessing(timeout);\n    const transportFlushed = await transport.flush(timeout);\n    return clientFinished && transportFlushed;\n  }\n  /**\n   * Flush the event queue and set the client to `enabled = false`. See {@link Client.flush}.\n   *\n   * @param {number} timeout Maximum time in ms the client should wait before shutting down. Omitting this parameter will cause\n   *   the client to wait until all events are sent before disabling itself.\n   * @returns {Promise<boolean>} A promise which resolves to `true` if the flush completes successfully before the timeout, or `false` if\n   * it doesn't.\n   */\n  // @ts-expect-error - PromiseLike is a subset of Promise\n  async close(timeout) {\n    const result = await this.flush(timeout);\n    this.getOptions().enabled = false;\n    this.emit(\"close\");\n    return result;\n  }\n  /**\n   * Get all installed event processors.\n   */\n  getEventProcessors() {\n    return this._eventProcessors;\n  }\n  /**\n   * Adds an event processor that applies to any event processed by this client.\n   */\n  addEventProcessor(eventProcessor) {\n    this._eventProcessors.push(eventProcessor);\n  }\n  /**\n   * Initialize this client.\n   * Call this after the client was set on a scope.\n   */\n  init() {\n    if (this._isEnabled() || // Force integrations to be setup even if no DSN was set when we have\n    // Spotlight enabled. This is particularly important for browser as we\n    // don't support the `spotlight` option there and rely on the users\n    // adding the `spotlightBrowserIntegration()` to their integrations which\n    // wouldn't get initialized with the check below when there's no DSN set.\n    this._options.integrations.some(({ name }) => name.startsWith(\"Spotlight\"))) {\n      this._setupIntegrations();\n    }\n  }\n  /**\n   * Gets an installed integration by its name.\n   *\n   * @returns {Integration|undefined} The installed integration or `undefined` if no integration with that `name` was installed.\n   */\n  getIntegrationByName(integrationName) {\n    return this._integrations[integrationName];\n  }\n  /**\n   * Returns the names of all installed integrations.\n   */\n  getIntegrationNames() {\n    return Object.keys(this._integrations);\n  }\n  /**\n   * Add an integration to the client.\n   * This can be used to e.g. lazy load integrations.\n   * In most cases, this should not be necessary,\n   * and you're better off just passing the integrations via `integrations: []` at initialization time.\n   * However, if you find the need to conditionally load & add an integration, you can use `addIntegration` to do so.\n   */\n  addIntegration(integration) {\n    const isAlreadyInstalled = this._integrations[integration.name];\n    if (!isAlreadyInstalled && integration.beforeSetup) {\n      integration.beforeSetup(this);\n    }\n    setupIntegration(this, integration, this._integrations);\n    if (!isAlreadyInstalled) {\n      afterSetupIntegrations(this, [integration]);\n    }\n  }\n  /**\n   * Send a fully prepared event to Sentry.\n   */\n  sendEvent(event, hint = {}) {\n    this.emit(\"beforeSendEvent\", event, hint);\n    const genAiSpanItem = extractGenAiSpansFromEvent(event, this);\n    let env = createEventEnvelope(event, this._dsn, this._options._metadata, this._options.tunnel);\n    for (const attachment of hint.attachments || []) {\n      env = addItemToEnvelope(env, createAttachmentEnvelopeItem(attachment));\n    }\n    if (genAiSpanItem) {\n      env = addItemToEnvelope(env, genAiSpanItem);\n    }\n    this.sendEnvelope(env).then((sendResponse) => this.emit(\"afterSendEvent\", event, sendResponse));\n  }\n  /**\n   * Send a session or session aggregrates to Sentry.\n   */\n  sendSession(session) {\n    const { release: clientReleaseOption, environment: clientEnvironmentOption = DEFAULT_ENVIRONMENT } = this._options;\n    if (\"aggregates\" in session) {\n      const sessionAttrs = session.attrs || {};\n      if (!sessionAttrs.release && !clientReleaseOption) {\n        DEBUG_BUILD && debug.warn(MISSING_RELEASE_FOR_SESSION_ERROR);\n        return;\n      }\n      sessionAttrs.release = sessionAttrs.release || clientReleaseOption;\n      sessionAttrs.environment = sessionAttrs.environment || clientEnvironmentOption;\n      session.attrs = sessionAttrs;\n    } else {\n      if (!session.release && !clientReleaseOption) {\n        DEBUG_BUILD && debug.warn(MISSING_RELEASE_FOR_SESSION_ERROR);\n        return;\n      }\n      session.release = session.release || clientReleaseOption;\n      session.environment = session.environment || clientEnvironmentOption;\n    }\n    this.emit(\"beforeSendSession\", session);\n    const env = createSessionEnvelope(session, this._dsn, this._options._metadata, this._options.tunnel);\n    this.sendEnvelope(env);\n  }\n  /**\n   * Record on the client that an event got dropped (ie, an event that will not be sent to Sentry).\n   */\n  recordDroppedEvent(reason, category, count = 1) {\n    if (this._options.sendClientReports) {\n      const key = `${reason}:${category}`;\n      DEBUG_BUILD && debug.log(`Recording outcome: \"${key}\"${count > 1 ? ` (${count} times)` : \"\"}`);\n      this._outcomes[key] = (this._outcomes[key] || 0) + count;\n    }\n  }\n  /**\n   * Register a hook on this client.\n   */\n  on(hook, callback) {\n    const hookCallbacks = this._hooks[hook] = this._hooks[hook] || /* @__PURE__ */ new Set();\n    const uniqueCallback = (...args) => callback(...args);\n    hookCallbacks.add(uniqueCallback);\n    return () => {\n      hookCallbacks.delete(uniqueCallback);\n    };\n  }\n  /**\n   * Emit a hook that was previously registered via `on()`.\n   */\n  emit(hook, ...rest) {\n    const callbacks = this._hooks[hook];\n    if (callbacks) {\n      callbacks.forEach((callback) => callback(...rest));\n    }\n  }\n  /**\n   * Send an envelope to Sentry.\n   */\n  // @ts-expect-error - PromiseLike is a subset of Promise\n  async sendEnvelope(envelope) {\n    this.emit(\"beforeEnvelope\", envelope);\n    if (this._isEnabled() && this._transport) {\n      try {\n        return await this._transport.send(envelope);\n      } catch (reason) {\n        DEBUG_BUILD && debug.error(\"Error while sending envelope:\", reason);\n        return {};\n      }\n    }\n    DEBUG_BUILD && debug.error(\"Transport disabled\");\n    return {};\n  }\n  /**\n   * Register a cleanup function to be called when the client is disposed.\n   * This is useful for integrations that need to clean up global state.\n   *\n   * NOTE: This is a no-op in the base `Client` class. Subclasses like `ServerRuntimeClient`\n   * override this method to actually register and execute cleanup callbacks.\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  registerCleanup(callback) {\n  }\n  /**\n   * Disposes of the client and releases all resources.\n   *\n   * Subclasses should override this method to clean up their own resources, including invoking\n   * any callbacks registered via {@link Client.registerCleanup}. The base implementation is a\n   * no-op and does NOT execute registered cleanup callbacks.\n   *\n   * After calling dispose(), the client should not be used anymore.\n   */\n  dispose() {\n  }\n  /* eslint-enable @typescript-eslint/unified-signatures */\n  /** Setup integrations for this client. */\n  _setupIntegrations() {\n    const { integrations } = this._options;\n    this._integrations = setupIntegrations(this, integrations);\n    afterSetupIntegrations(this, integrations);\n  }\n  /** Updates existing session based on the provided event */\n  _updateSessionFromEvent(session, event) {\n    let crashed = event.level === \"fatal\";\n    let errored = false;\n    const exceptions = event.exception?.values;\n    if (exceptions) {\n      errored = true;\n      crashed = false;\n      for (const ex of exceptions) {\n        if (ex.mechanism?.handled === false) {\n          crashed = true;\n          break;\n        }\n      }\n    }\n    const sessionNonTerminal = session.status === \"ok\";\n    const shouldUpdateAndSend = sessionNonTerminal && session.errors === 0 || sessionNonTerminal && crashed;\n    if (shouldUpdateAndSend) {\n      updateSession(session, {\n        ...crashed && { status: \"crashed\" },\n        errors: session.errors || Number(errored || crashed)\n      });\n      this.captureSession(session);\n    }\n  }\n  /**\n   * Determine if the client is finished processing. Returns a promise because it will wait `timeout` ms before saying\n   * \"no\" (resolving to `false`) in order to give the client a chance to potentially finish first.\n   *\n   * @param timeout The time, in ms, after which to resolve to `false` if the client is still busy. Passing `0` (or not\n   * passing anything) will make the promise wait as long as it takes for processing to finish before resolving to\n   * `true`.\n   * @returns A promise which will resolve to `true` if processing is already done or finishes before the timeout, and\n   * `false` otherwise\n   */\n  async _isClientDoneProcessing(timeout) {\n    let ticked = 0;\n    while (!timeout || ticked < timeout) {\n      await new Promise((resolve) => setTimeout(resolve, 1));\n      if (!this._numProcessing) {\n        return true;\n      }\n      ticked++;\n    }\n    return false;\n  }\n  /** Determines whether this SDK is enabled and a transport is present. */\n  _isEnabled() {\n    return this.getOptions().enabled !== false && this._transport !== void 0;\n  }\n  /**\n   * Adds common information to events.\n   *\n   * The information includes release and environment from `options`,\n   * breadcrumbs and context (extra, tags and user) from the scope.\n   *\n   * Information that is already present in the event is never overwritten. For\n   * nested objects, such as the context, keys are merged.\n   *\n   * @param event The original event.\n   * @param hint May contain additional information about the original exception.\n   * @param currentScope A scope containing event metadata.\n   * @returns A new event with more information.\n   */\n  _prepareEvent(event, hint, currentScope, isolationScope) {\n    const options = this.getOptions();\n    const integrations = this.getIntegrationNames();\n    if (!hint.integrations && integrations.length) {\n      hint.integrations = integrations;\n    }\n    this.emit(\"preprocessEvent\", event, hint);\n    if (!event.type) {\n      isolationScope.setLastEventId(event.event_id || hint.event_id);\n    }\n    return prepareEvent(options, event, hint, currentScope, this, isolationScope).then((evt) => {\n      if (evt === null) {\n        return evt;\n      }\n      this.emit(\"postprocessEvent\", evt, hint);\n      evt.contexts = {\n        trace: { ...evt.contexts?.trace, ...getTraceContextFromScope(currentScope) },\n        ...evt.contexts\n      };\n      const dynamicSamplingContext = getDynamicSamplingContextFromScope(this, currentScope);\n      evt.sdkProcessingMetadata = {\n        dynamicSamplingContext,\n        ...evt.sdkProcessingMetadata\n      };\n      return evt;\n    });\n  }\n  /**\n   * Processes the event and logs an error in case of rejection\n   * @param event\n   * @param hint\n   * @param scope\n   */\n  _captureEvent(event, hint = {}, currentScope = getCurrentScope(), isolationScope = getIsolationScope()) {\n    if (DEBUG_BUILD && isErrorEvent(event)) {\n      debug.log(`Captured error event \\`${getPossibleEventMessages(event)[0] || \"<unknown>\"}\\``);\n    }\n    return this._processEvent(event, hint, currentScope, isolationScope).then(\n      (finalEvent) => {\n        return finalEvent.event_id;\n      },\n      (reason) => {\n        if (DEBUG_BUILD) {\n          if (_isDoNotSendEventError(reason)) {\n            debug.log(reason.message);\n          } else if (_isInternalError(reason)) {\n            debug.warn(reason.message);\n          } else {\n            debug.warn(reason);\n          }\n        }\n        return void 0;\n      }\n    );\n  }\n  /**\n   * Processes an event (either error or message) and sends it to Sentry.\n   *\n   * This also adds breadcrumbs and context information to the event. However,\n   * platform specific meta data (such as the User's IP address) must be added\n   * by the SDK implementor.\n   *\n   *\n   * @param event The event to send to Sentry.\n   * @param hint May contain additional information about the original exception.\n   * @param currentScope A scope containing event metadata.\n   * @returns A SyncPromise that resolves with the event or rejects in case event was/will not be send.\n   */\n  _processEvent(event, hint, currentScope, isolationScope) {\n    const options = this.getOptions();\n    const { sampleRate } = options;\n    const isTransaction = isTransactionEvent(event);\n    const isError = isErrorEvent(event);\n    const eventType = event.type || \"error\";\n    const beforeSendLabel = `before send for type \\`${eventType}\\``;\n    const parsedSampleRate = typeof sampleRate === \"undefined\" ? void 0 : parseSampleRate(sampleRate);\n    const dataCategory = getDataCategoryByType(event.type);\n    return this._prepareEvent(event, hint, currentScope, isolationScope).then((prepared) => {\n      if (prepared === null) {\n        this.recordDroppedEvent(\"event_processor\", dataCategory);\n        throw _makeDoNotSendEventError(\"An event processor returned `null`, will not send event.\");\n      }\n      const isInternalException = hint.data?.__sentry__ === true;\n      if (isInternalException) {\n        return prepared;\n      }\n      const result = processBeforeSend(this, options, prepared, hint);\n      return _validateBeforeSendResult(result, beforeSendLabel);\n    }).then((processedEvent) => {\n      if (processedEvent === null) {\n        this.recordDroppedEvent(\"before_send\", dataCategory);\n        if (isTransaction) {\n          const spans = event.spans || [];\n          const spanCount = 1 + spans.length;\n          this.recordDroppedEvent(\"before_send\", \"span\", spanCount);\n        }\n        throw _makeDoNotSendEventError(`${beforeSendLabel} returned \\`null\\`, will not send event.`);\n      }\n      const session = currentScope.getSession() || isolationScope.getSession();\n      if (isError && session) {\n        this._updateSessionFromEvent(session, processedEvent);\n      }\n      if (isError && typeof parsedSampleRate === \"number\" && safeMathRandom() > parsedSampleRate) {\n        this.recordDroppedEvent(\"sample_rate\", \"error\");\n        throw _makeDoNotSendEventError(\n          `Discarding event because it's not included in the random sample (sampling rate = ${sampleRate})`\n        );\n      }\n      if (isTransaction) {\n        const spanCountBefore = processedEvent.sdkProcessingMetadata?.spanCountBeforeProcessing || 0;\n        const spanCountAfter = processedEvent.spans ? processedEvent.spans.length : 0;\n        const droppedSpanCount = spanCountBefore - spanCountAfter;\n        if (droppedSpanCount > 0) {\n          this.recordDroppedEvent(\"before_send\", \"span\", droppedSpanCount);\n        }\n      }\n      const transactionInfo = processedEvent.transaction_info;\n      if (isTransaction && transactionInfo && processedEvent.transaction !== event.transaction) {\n        const source = \"custom\";\n        processedEvent.transaction_info = {\n          ...transactionInfo,\n          source\n        };\n      }\n      this.sendEvent(processedEvent, hint);\n      return processedEvent;\n    }).then(null, (reason) => {\n      if (_isDoNotSendEventError(reason) || _isInternalError(reason)) {\n        throw reason;\n      }\n      this.captureException(reason, {\n        mechanism: {\n          handled: false,\n          type: \"internal\"\n        },\n        data: {\n          __sentry__: true\n        },\n        originalException: reason\n      });\n      throw _makeInternalError(\n        `Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.\nReason: ${reason}`\n      );\n    });\n  }\n  /**\n   * Occupies the client with processing and event\n   */\n  _process(taskProducer, dataCategory) {\n    this._numProcessing++;\n    void this._promiseBuffer.add(taskProducer).then(\n      (value) => {\n        this._numProcessing--;\n        return value;\n      },\n      (reason) => {\n        this._numProcessing--;\n        if (reason === SENTRY_BUFFER_FULL_ERROR) {\n          this.recordDroppedEvent(\"queue_overflow\", dataCategory);\n        }\n        return reason;\n      }\n    );\n  }\n  /**\n   * Clears outcomes on this client and returns them.\n   */\n  _clearOutcomes() {\n    const outcomes = this._outcomes;\n    this._outcomes = {};\n    return Object.entries(outcomes).map(([key, quantity]) => {\n      const [reason, category] = key.split(\":\");\n      return {\n        reason,\n        category,\n        quantity\n      };\n    });\n  }\n  /**\n   * Sends client reports as an envelope.\n   */\n  _flushOutcomes() {\n    DEBUG_BUILD && debug.log(\"Flushing outcomes...\");\n    const outcomes = this._clearOutcomes();\n    if (outcomes.length === 0) {\n      DEBUG_BUILD && debug.log(\"No outcomes to send\");\n      return;\n    }\n    if (!this._dsn) {\n      DEBUG_BUILD && debug.log(\"No dsn provided, will not send outcomes\");\n      return;\n    }\n    DEBUG_BUILD && debug.log(\"Sending outcomes:\", outcomes);\n    const envelope = createClientReportEnvelope(outcomes, this._options.tunnel && dsnToString(this._dsn));\n    this.sendEnvelope(envelope);\n  }\n}\nfunction getDataCategoryByType(type) {\n  return type === \"replay_event\" ? \"replay\" : type || \"error\";\n}\nfunction _validateBeforeSendResult(beforeSendResult, beforeSendLabel) {\n  const invalidValueError = `${beforeSendLabel} must return \\`null\\` or a valid event.`;\n  if (isThenable(beforeSendResult)) {\n    return beforeSendResult.then(\n      (event) => {\n        if (!isPlainObject(event) && event !== null) {\n          throw _makeInternalError(invalidValueError);\n        }\n        return event;\n      },\n      (e) => {\n        throw _makeInternalError(`${beforeSendLabel} rejected with ${e}`);\n      }\n    );\n  } else if (!isPlainObject(beforeSendResult) && beforeSendResult !== null) {\n    throw _makeInternalError(invalidValueError);\n  }\n  return beforeSendResult;\n}\nfunction processBeforeSend(client, options, event, hint) {\n  const { beforeSend, beforeSendTransaction, ignoreSpans } = options;\n  const beforeSendSpan = !isStreamedBeforeSendSpanCallback(options.beforeSendSpan) && options.beforeSendSpan;\n  let processedEvent = event;\n  if (isErrorEvent(processedEvent) && beforeSend) {\n    return beforeSend(processedEvent, hint);\n  }\n  if (isTransactionEvent(processedEvent)) {\n    if (beforeSendSpan || ignoreSpans) {\n      const rootSpanJson = convertTransactionEventToSpanJson(processedEvent);\n      if (ignoreSpans?.length && shouldIgnoreSpan(\n        { description: rootSpanJson.description, op: rootSpanJson.op, attributes: rootSpanJson.data },\n        ignoreSpans\n      )) {\n        return null;\n      }\n      if (beforeSendSpan) {\n        const processedRootSpanJson = beforeSendSpan(rootSpanJson);\n        if (!processedRootSpanJson) {\n          showSpanDropWarning();\n        } else {\n          processedEvent = merge(event, convertSpanJsonToTransactionEvent(processedRootSpanJson));\n        }\n      }\n      if (processedEvent.spans) {\n        const processedSpans = [];\n        const initialSpans = processedEvent.spans;\n        for (const span of initialSpans) {\n          if (ignoreSpans?.length && shouldIgnoreSpan({ description: span.description, op: span.op, attributes: span.data }, ignoreSpans)) {\n            reparentChildSpans(initialSpans, span);\n            continue;\n          }\n          if (beforeSendSpan) {\n            const processedSpan = beforeSendSpan(span);\n            if (!processedSpan) {\n              showSpanDropWarning();\n              processedSpans.push(span);\n            } else {\n              processedSpans.push(processedSpan);\n            }\n          } else {\n            processedSpans.push(span);\n          }\n        }\n        const droppedSpans = processedEvent.spans.length - processedSpans.length;\n        if (droppedSpans) {\n          client.recordDroppedEvent(\"before_send\", \"span\", droppedSpans);\n        }\n        processedEvent.spans = processedSpans;\n      }\n    }\n    if (beforeSendTransaction) {\n      if (processedEvent.spans) {\n        const spanCountBefore = processedEvent.spans.length;\n        processedEvent.sdkProcessingMetadata = {\n          ...event.sdkProcessingMetadata,\n          spanCountBeforeProcessing: spanCountBefore\n        };\n      }\n      return beforeSendTransaction(processedEvent, hint);\n    }\n  }\n  return processedEvent;\n}\nfunction isErrorEvent(event) {\n  return event.type === void 0;\n}\nfunction isTransactionEvent(event) {\n  return event.type === \"transaction\";\n}\nfunction estimateMetricSizeInBytes(metric) {\n  let weight = 0;\n  if (metric.name) {\n    weight += metric.name.length * 2;\n  }\n  weight += 8;\n  return weight + estimateAttributesSizeInBytes(metric.attributes);\n}\nfunction estimateLogSizeInBytes(log) {\n  let weight = 0;\n  if (log.message) {\n    weight += log.message.length * 2;\n  }\n  return weight + estimateAttributesSizeInBytes(log.attributes);\n}\nfunction estimateAttributesSizeInBytes(attributes) {\n  if (!attributes) {\n    return 0;\n  }\n  let weight = 0;\n  Object.values(attributes).forEach((value) => {\n    if (Array.isArray(value)) {\n      weight += value.length * estimatePrimitiveSizeInBytes(value[0]);\n    } else if (isPrimitive(value)) {\n      weight += estimatePrimitiveSizeInBytes(value);\n    } else {\n      weight += 100;\n    }\n  });\n  return weight;\n}\nfunction estimatePrimitiveSizeInBytes(value) {\n  if (typeof value === \"string\") {\n    return value.length * 2;\n  } else if (typeof value === \"number\") {\n    return 8;\n  } else if (typeof value === \"boolean\") {\n    return 4;\n  }\n  return 0;\n}\n\nexport { Client };\n//# sourceMappingURL=client.js.map\n","import { getCurrentScope } from './currentScopes.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { debug, consoleSandbox } from './utils/debug-logger.js';\n\nfunction initAndBind(clientClass, options) {\n  if (options.debug === true) {\n    if (DEBUG_BUILD) {\n      debug.enable();\n    } else {\n      consoleSandbox(() => {\n        console.warn(\"[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.\");\n      });\n    }\n  }\n  const scope = getCurrentScope();\n  scope.update(options.initialScope);\n  const client = new clientClass(options);\n  setCurrentClient(client);\n  client.init();\n  return client;\n}\nfunction setCurrentClient(client) {\n  getCurrentScope().setClient(client);\n}\n\nexport { initAndBind, setCurrentClient };\n//# sourceMappingURL=sdk.js.map\n","import { URL_FULL } from '@sentry/conventions/attributes';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, SEMANTIC_ATTRIBUTE_HTTP_REQUEST_METHOD, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '../semanticAttributes.js';\n\nconst DEFAULT_BASE_URL = \"thismessage:/\";\nfunction isURLObjectRelative(url) {\n  return \"isRelative\" in url;\n}\nfunction parseStringToURLObject(url, urlBase) {\n  const isRelative = url.indexOf(\"://\") <= 0 && url.indexOf(\"//\") !== 0;\n  const base = urlBase ?? (isRelative ? DEFAULT_BASE_URL : void 0);\n  try {\n    if (\"canParse\" in URL && !URL.canParse(url, base)) {\n      return void 0;\n    }\n    const fullUrlObject = new URL(url, base);\n    if (isRelative) {\n      return {\n        isRelative,\n        pathname: fullUrlObject.pathname,\n        search: fullUrlObject.search,\n        hash: fullUrlObject.hash\n      };\n    }\n    return fullUrlObject;\n  } catch {\n  }\n  return void 0;\n}\nfunction getSanitizedUrlStringFromUrlObject(url) {\n  if (isURLObjectRelative(url)) {\n    return url.pathname;\n  }\n  const newUrl = new URL(url);\n  newUrl.search = \"\";\n  newUrl.hash = \"\";\n  if ([\"80\", \"443\"].includes(newUrl.port)) {\n    newUrl.port = \"\";\n  }\n  if (newUrl.password) {\n    newUrl.password = \"%filtered%\";\n  }\n  if (newUrl.username) {\n    newUrl.username = \"%filtered%\";\n  }\n  return newUrl.toString();\n}\nfunction getHttpSpanNameFromUrlObject(urlObject, kind, request, routeName) {\n  const method = request?.method?.toUpperCase() ?? \"GET\";\n  const route = routeName ? routeName : urlObject ? kind === \"client\" ? getSanitizedUrlStringFromUrlObject(urlObject) : urlObject.pathname : \"/\";\n  return `${method} ${route}`;\n}\nfunction getHttpSpanDetailsFromUrlObject(urlObject, kind, spanOrigin, request, routeName) {\n  const attributes = {\n    [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: spanOrigin,\n    [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: \"url\"\n  };\n  if (routeName) {\n    attributes[kind === \"server\" ? \"http.route\" : \"url.template\"] = routeName;\n    attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] = \"route\";\n  }\n  if (request?.method) {\n    attributes[SEMANTIC_ATTRIBUTE_HTTP_REQUEST_METHOD] = request.method.toUpperCase();\n  }\n  if (urlObject) {\n    if (urlObject.search) {\n      attributes[\"url.query\"] = urlObject.search;\n    }\n    if (urlObject.hash) {\n      attributes[\"url.fragment\"] = urlObject.hash;\n    }\n    if (urlObject.pathname) {\n      attributes[\"url.path\"] = urlObject.pathname;\n      if (urlObject.pathname === \"/\") {\n        attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] = \"route\";\n      }\n    }\n    if (!isURLObjectRelative(urlObject)) {\n      attributes[URL_FULL] = urlObject.href;\n      if (urlObject.port) {\n        attributes[\"url.port\"] = urlObject.port;\n      }\n      if (urlObject.protocol) {\n        attributes[\"url.scheme\"] = urlObject.protocol;\n      }\n      if (urlObject.hostname) {\n        attributes[kind === \"server\" ? \"server.address\" : \"url.domain\"] = urlObject.hostname;\n      }\n    }\n  }\n  return [getHttpSpanNameFromUrlObject(urlObject, kind, request, routeName), attributes];\n}\nfunction parseUrl(url) {\n  if (!url) {\n    return {};\n  }\n  const match = url.match(/^(([^:/?#]+):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n  if (!match) {\n    return {};\n  }\n  const query = match[6] || \"\";\n  const fragment = match[8] || \"\";\n  return {\n    host: match[4],\n    path: match[5],\n    protocol: match[2],\n    search: query,\n    hash: fragment,\n    relative: match[5] + query + fragment\n    // everything minus origin\n  };\n}\nfunction stripUrlQueryAndFragment(urlPath) {\n  return urlPath.split(/[?#]/, 1)[0];\n}\nfunction getSanitizedUrlString(url) {\n  const { protocol, host, path } = url;\n  const filteredHost = host?.replace(/^.*@/, \"[filtered]:[filtered]@\").replace(/(:80)$/, \"\").replace(/(:443)$/, \"\") || \"\";\n  return `${protocol ? `${protocol}://` : \"\"}${filteredHost}${path}`;\n}\nfunction stripDataUrlContent(url, includeDataPrefix = true) {\n  if (url.startsWith(\"data:\")) {\n    const match = url.match(/^data:([^;,]+)/);\n    const mimeType = match ? match[1] : \"text/plain\";\n    const isBase64 = url.includes(\";base64,\");\n    const dataStart = url.indexOf(\",\");\n    let dataPrefix = \"\";\n    if (includeDataPrefix && dataStart !== -1) {\n      const data = url.slice(dataStart + 1);\n      dataPrefix = data.length > 10 ? `${data.slice(0, 10)}... [truncated]` : data;\n    }\n    return `data:${mimeType}${isBase64 ? \",base64\" : \"\"}${dataPrefix ? `,${dataPrefix}` : \"\"}`;\n  }\n  return url;\n}\n\nexport { getHttpSpanDetailsFromUrlObject, getSanitizedUrlString, getSanitizedUrlStringFromUrlObject, isURLObjectRelative, parseStringToURLObject, parseUrl, stripDataUrlContent, stripUrlQueryAndFragment };\n//# sourceMappingURL=url.js.map\n","function addAutoIpAddressToUser(objWithMaybeUser) {\n  if (objWithMaybeUser.user?.ip_address === void 0) {\n    objWithMaybeUser.user = {\n      ...objWithMaybeUser.user,\n      ip_address: \"{{auto}}\"\n    };\n  }\n}\nfunction addAutoIpAddressToSession(session) {\n  if (\"aggregates\" in session) {\n    if (session.attrs?.[\"ip_address\"] === void 0) {\n      session.attrs = {\n        ...session.attrs,\n        ip_address: \"{{auto}}\"\n      };\n    }\n  } else {\n    if (session.ipAddress === void 0) {\n      session.ipAddress = \"{{auto}}\";\n    }\n  }\n}\n\nexport { addAutoIpAddressToSession, addAutoIpAddressToUser };\n//# sourceMappingURL=ipAddress.js.map\n","import { SDK_VERSION } from './version.js';\n\nfunction applySdkMetadata(options, name, names = [name], source = \"npm\") {\n  const sdk = (options._metadata = options._metadata || {}).sdk = options._metadata.sdk || {};\n  if (!sdk.name) {\n    sdk.name = `sentry.javascript.${name}`;\n    sdk.packages = names.map((name2) => ({\n      name: `${source}:@sentry/${name2}`,\n      version: SDK_VERSION\n    }));\n    sdk.version = SDK_VERSION;\n  }\n}\n\nexport { applySdkMetadata };\n//# sourceMappingURL=sdkMetadata.js.map\n","import { getClient, getIsolationScope } from './currentScopes.js';\nimport { consoleSandbox } from './utils/debug-logger.js';\nimport { dateTimestampInSeconds } from './utils/time.js';\n\nconst DEFAULT_BREADCRUMBS = 100;\nfunction addBreadcrumb(breadcrumb, hint) {\n  const client = getClient();\n  const isolationScope = getIsolationScope();\n  if (!client) return;\n  const { beforeBreadcrumb = null, maxBreadcrumbs = DEFAULT_BREADCRUMBS } = client.getOptions();\n  if (maxBreadcrumbs <= 0) return;\n  const timestamp = dateTimestampInSeconds();\n  const mergedBreadcrumb = { timestamp, ...breadcrumb };\n  const finalBreadcrumb = beforeBreadcrumb ? consoleSandbox(() => beforeBreadcrumb(mergedBreadcrumb, hint)) : mergedBreadcrumb;\n  if (finalBreadcrumb === null) return;\n  if (client.emit) {\n    client.emit(\"beforeAddBreadcrumb\", finalBreadcrumb, hint);\n  }\n  isolationScope.addBreadcrumb(finalBreadcrumb, maxBreadcrumbs);\n}\n\nexport { addBreadcrumb };\n//# sourceMappingURL=breadcrumbs.js.map\n","import { getClient } from '../currentScopes.js';\nimport { defineIntegration } from '../integration.js';\nimport { getOriginalFunction } from '../utils/object.js';\n\nconst INTEGRATION_NAME = \"FunctionToString\";\nconst SETUP_CLIENTS = /* @__PURE__ */ new WeakMap();\nconst _functionToStringIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      const originalFunctionToString = Function.prototype.toString;\n      try {\n        Function.prototype.toString = function(...args) {\n          const originalFunction = getOriginalFunction(this);\n          let unwrappedFunction;\n          try {\n            if (SETUP_CLIENTS.has(getClient()) && originalFunction !== void 0) {\n              unwrappedFunction = originalFunction;\n            }\n          } catch {\n          }\n          return originalFunctionToString.apply(unwrappedFunction ?? this, args);\n        };\n      } catch {\n      }\n    },\n    setup(client) {\n      SETUP_CLIENTS.set(client, true);\n    }\n  };\n});\nconst functionToStringIntegration = defineIntegration(_functionToStringIntegration);\n\nexport { functionToStringIntegration };\n//# sourceMappingURL=functiontostring.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { defineIntegration } from '../integration.js';\nimport { debug } from '../utils/debug-logger.js';\nimport { getPossibleEventMessages } from '../utils/eventUtils.js';\nimport { getEventDescription } from '../utils/misc.js';\nimport { stringMatchesSomePattern } from '../utils/string.js';\n\nconst DEFAULT_IGNORE_ERRORS = [\n  /^Script error\\.?$/,\n  /^Javascript error: Script error\\.? on line 0$/,\n  /^ResizeObserver loop completed with undelivered notifications.$/,\n  // The browser logs this when a ResizeObserver handler takes a bit longer. Usually this is not an actual issue though. It indicates slowness.\n  /^Cannot redefine property: googletag$/,\n  // This is thrown when google tag manager is used in combination with an ad blocker\n  /^Can't find variable: gmo$/,\n  // Error from Google Search App https://issuetracker.google.com/issues/396043331\n  /^undefined is not an object \\(evaluating 'a\\.[A-Z]'\\)$/,\n  // Random error that happens but not actionable or noticeable to end-users.\n  /can't redefine non-configurable property \"solana\"/,\n  // Probably a browser extension or custom browser (Brave) throwing this error\n  /vv\\(\\)\\.getRestrictions is not a function/,\n  // Error thrown by GTM, seemingly not affecting end-users\n  /Can't find variable: _AutofillCallbackHandler/,\n  // Unactionable error in instagram webview https://developers.facebook.com/community/threads/320013549791141/\n  /Object Not Found Matching Id:\\d+, MethodName:simulateEvent/,\n  // unactionable error from CEFSharp, a .NET library that embeds chromium in .NET apps\n  /Java exception was raised during method invocation$/,\n  // error from Facebook Mobile browser (https://github.com/getsentry/sentry-javascript/issues/15065, https://github.com/getsentry/sentry-javascript/issues/23733)\n  /Java object is gone$/\n  // error from Facebook Mobile browser (https://github.com/getsentry/sentry-javascript/issues/15065, https://github.com/getsentry/sentry-javascript/issues/23733)\n];\nconst INTEGRATION_NAME = \"EventFilters\";\nconst eventFiltersIntegration = defineIntegration((options = {}) => {\n  let mergedOptions;\n  return {\n    name: INTEGRATION_NAME,\n    setup(client) {\n      const clientOptions = client.getOptions();\n      mergedOptions = _mergeOptions(options, clientOptions);\n    },\n    processEvent(event, _hint, client) {\n      if (!mergedOptions) {\n        const clientOptions = client.getOptions();\n        mergedOptions = _mergeOptions(options, clientOptions);\n      }\n      return _shouldDropEvent(event, mergedOptions) ? null : event;\n    }\n  };\n});\nconst inboundFiltersIntegration = defineIntegration(((options = {}) => {\n  return {\n    ...eventFiltersIntegration(options),\n    name: \"InboundFilters\"\n  };\n}));\nfunction _mergeOptions(internalOptions = {}, clientOptions = {}) {\n  return {\n    allowUrls: [...internalOptions.allowUrls || [], ...clientOptions.allowUrls || []],\n    denyUrls: [...internalOptions.denyUrls || [], ...clientOptions.denyUrls || []],\n    ignoreErrors: [\n      ...internalOptions.ignoreErrors || [],\n      ...clientOptions.ignoreErrors || [],\n      ...internalOptions.disableErrorDefaults ? [] : DEFAULT_IGNORE_ERRORS\n    ],\n    ignoreTransactions: [...internalOptions.ignoreTransactions || [], ...clientOptions.ignoreTransactions || []]\n  };\n}\nfunction _shouldDropEvent(event, options) {\n  if (!event.type) {\n    if (_isIgnoredError(event, options.ignoreErrors)) {\n      DEBUG_BUILD && debug.warn(\n        `Event dropped due to being matched by \\`ignoreErrors\\` option.\nEvent: ${getEventDescription(event)}`\n      );\n      return true;\n    }\n    if (_isUselessError(event)) {\n      DEBUG_BUILD && debug.warn(\n        `Event dropped due to not having an error message, error type or stacktrace.\nEvent: ${getEventDescription(\n          event\n        )}`\n      );\n      return true;\n    }\n    if (_isDeniedUrl(event, options.denyUrls)) {\n      DEBUG_BUILD && debug.warn(\n        `Event dropped due to being matched by \\`denyUrls\\` option.\nEvent: ${getEventDescription(\n          event\n        )}.\nUrl: ${_getEventFilterUrl(event)}`\n      );\n      return true;\n    }\n    if (!_isAllowedUrl(event, options.allowUrls)) {\n      DEBUG_BUILD && debug.warn(\n        `Event dropped due to not being matched by \\`allowUrls\\` option.\nEvent: ${getEventDescription(\n          event\n        )}.\nUrl: ${_getEventFilterUrl(event)}`\n      );\n      return true;\n    }\n  } else if (event.type === \"transaction\") {\n    if (_isIgnoredTransaction(event, options.ignoreTransactions)) {\n      DEBUG_BUILD && debug.warn(\n        `Event dropped due to being matched by \\`ignoreTransactions\\` option.\nEvent: ${getEventDescription(event)}`\n      );\n      return true;\n    }\n  }\n  return false;\n}\nfunction _isIgnoredError(event, ignoreErrors) {\n  if (!ignoreErrors?.length) {\n    return false;\n  }\n  return getPossibleEventMessages(event).some((message) => stringMatchesSomePattern(message, ignoreErrors));\n}\nfunction _isIgnoredTransaction(event, ignoreTransactions) {\n  if (!ignoreTransactions?.length) {\n    return false;\n  }\n  const name = event.transaction;\n  return name ? stringMatchesSomePattern(name, ignoreTransactions) : false;\n}\nfunction _isDeniedUrl(event, denyUrls) {\n  if (!denyUrls?.length) {\n    return false;\n  }\n  const url = _getEventFilterUrl(event);\n  return !url ? false : stringMatchesSomePattern(url, denyUrls);\n}\nfunction _isAllowedUrl(event, allowUrls) {\n  if (!allowUrls?.length) {\n    return true;\n  }\n  const url = _getEventFilterUrl(event);\n  return !url ? true : stringMatchesSomePattern(url, allowUrls);\n}\nfunction _getLastValidUrl(frames = []) {\n  for (let i = frames.length - 1; i >= 0; i--) {\n    const frame = frames[i];\n    if (frame && frame.filename !== \"<anonymous>\" && frame.filename !== \"[native code]\") {\n      return frame.filename || null;\n    }\n  }\n  return null;\n}\nfunction _getEventFilterUrl(event) {\n  try {\n    const rootException = [...event.exception?.values ?? []].reverse().find((value) => value.mechanism?.parent_id === void 0 && value.stacktrace?.frames?.length);\n    const frames = rootException?.stacktrace?.frames;\n    return frames ? _getLastValidUrl(frames) : null;\n  } catch {\n    DEBUG_BUILD && debug.error(`Cannot extract url for event ${getEventDescription(event)}`);\n    return null;\n  }\n}\nfunction _isUselessError(event) {\n  if (!event.exception?.values?.length) {\n    return false;\n  }\n  return (\n    // No top-level message\n    !event.message && // There are no exception values that have a stacktrace, a non-generic-Error type or value\n    !event.exception.values.some((value) => value.stacktrace || value.type && value.type !== \"Error\" || value.value)\n  );\n}\n\nexport { eventFiltersIntegration, inboundFiltersIntegration };\n//# sourceMappingURL=eventFilters.js.map\n","import { isError } from './is.js';\n\nfunction applyAggregateErrorsToEvent(exceptionFromErrorImplementation, parser, key, limit, event, hint) {\n  if (!event.exception?.values || !hint || !isError(hint.originalException)) {\n    return;\n  }\n  const originalException = event.exception.values.length > 0 ? event.exception.values[event.exception.values.length - 1] : void 0;\n  if (originalException) {\n    event.exception.values = aggregateExceptionsFromError(\n      exceptionFromErrorImplementation,\n      parser,\n      limit,\n      hint.originalException,\n      key,\n      event.exception.values,\n      originalException,\n      0\n    );\n  }\n}\nfunction aggregateExceptionsFromError(exceptionFromErrorImplementation, parser, limit, error, key, prevExceptions, exception, exceptionId) {\n  if (prevExceptions.length >= limit + 1) {\n    return prevExceptions;\n  }\n  let newExceptions = [...prevExceptions];\n  if (isError(error[key])) {\n    applyExceptionGroupFieldsForParentException(exception, exceptionId, error);\n    const newException = exceptionFromErrorImplementation(parser, error[key]);\n    const newExceptionId = newExceptions.length;\n    applyExceptionGroupFieldsForChildException(newException, key, newExceptionId, exceptionId);\n    newExceptions = aggregateExceptionsFromError(\n      exceptionFromErrorImplementation,\n      parser,\n      limit,\n      error[key],\n      key,\n      [newException, ...newExceptions],\n      newException,\n      newExceptionId\n    );\n  }\n  if (isExceptionGroup(error)) {\n    error.errors.forEach((childError, i) => {\n      if (isError(childError)) {\n        applyExceptionGroupFieldsForParentException(exception, exceptionId, error);\n        const newException = exceptionFromErrorImplementation(parser, childError);\n        const newExceptionId = newExceptions.length;\n        applyExceptionGroupFieldsForChildException(newException, `errors[${i}]`, newExceptionId, exceptionId);\n        newExceptions = aggregateExceptionsFromError(\n          exceptionFromErrorImplementation,\n          parser,\n          limit,\n          childError,\n          key,\n          [newException, ...newExceptions],\n          newException,\n          newExceptionId\n        );\n      }\n    });\n  }\n  return newExceptions;\n}\nfunction isExceptionGroup(error) {\n  return Array.isArray(error.errors);\n}\nfunction applyExceptionGroupFieldsForParentException(exception, exceptionId, error) {\n  exception.mechanism = {\n    handled: true,\n    type: \"auto.core.linked_errors\",\n    ...isExceptionGroup(error) && { is_exception_group: true },\n    ...exception.mechanism,\n    exception_id: exceptionId\n  };\n}\nfunction applyExceptionGroupFieldsForChildException(exception, source, exceptionId, parentId) {\n  exception.mechanism = {\n    handled: true,\n    ...exception.mechanism,\n    type: \"chained\",\n    source,\n    exception_id: exceptionId,\n    parent_id: parentId\n  };\n}\n\nexport { applyAggregateErrorsToEvent };\n//# sourceMappingURL=aggregate-errors.js.map\n","import { isParameterizedString, isError, isPlainObject, isErrorEvent } from './is.js';\nimport { addExceptionMechanism, addExceptionTypeValue } from './misc.js';\nimport { normalizeToSize } from './normalize.js';\nimport { extractExceptionKeysForMessage } from './object.js';\n\nfunction parseStackFrames(stackParser, error) {\n  return stackParser(error.stack || \"\", 1);\n}\nfunction hasSentryFetchUrlHost(error) {\n  return isError(error) && \"__sentry_fetch_url_host__\" in error && typeof error.__sentry_fetch_url_host__ === \"string\";\n}\nfunction _enhanceErrorWithSentryInfo(error) {\n  if (hasSentryFetchUrlHost(error)) {\n    return `${error.message} (${error.__sentry_fetch_url_host__})`;\n  }\n  return error.message;\n}\nfunction exceptionFromError(stackParser, error) {\n  const exception = {\n    type: error.name || error.constructor.name,\n    value: _enhanceErrorWithSentryInfo(error)\n  };\n  const frames = parseStackFrames(stackParser, error);\n  if (frames.length) {\n    exception.stacktrace = { frames };\n  }\n  return exception;\n}\nfunction getErrorPropertyFromObject(obj) {\n  for (const prop in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n      const value = obj[prop];\n      if (isError(value)) {\n        return value;\n      }\n    }\n  }\n  return void 0;\n}\nfunction getMessageForObject(exception) {\n  if (\"name\" in exception && typeof exception.name === \"string\") {\n    let message = `'${exception.name}' captured as exception`;\n    if (\"message\" in exception && typeof exception.message === \"string\") {\n      message += ` with message '${exception.message}'`;\n    }\n    return message;\n  } else if (\"message\" in exception && typeof exception.message === \"string\") {\n    return exception.message;\n  }\n  const keys = extractExceptionKeysForMessage(exception);\n  if (isErrorEvent(exception)) {\n    return `Event \\`ErrorEvent\\` captured as exception with message \\`${exception.message}\\``;\n  }\n  const className = getObjectClassName(exception);\n  return `${className && className !== \"Object\" ? `'${className}'` : \"Object\"} captured as exception with keys: ${keys}`;\n}\nfunction getObjectClassName(obj) {\n  try {\n    const prototype = Object.getPrototypeOf(obj);\n    return prototype ? prototype.constructor.name : void 0;\n  } catch {\n  }\n}\nfunction getException(client, mechanism, exception, hint) {\n  if (isError(exception)) {\n    return [exception, void 0];\n  }\n  mechanism.synthetic = true;\n  if (isPlainObject(exception)) {\n    const normalizeDepth = client?.getOptions().normalizeDepth;\n    const extras = { [\"__serialized__\"]: normalizeToSize(exception, normalizeDepth) };\n    const errorFromProp = getErrorPropertyFromObject(exception);\n    if (errorFromProp) {\n      return [errorFromProp, extras];\n    }\n    const message = getMessageForObject(exception);\n    const ex2 = hint?.syntheticException || new Error(message);\n    ex2.message = message;\n    return [ex2, extras];\n  }\n  const ex = hint?.syntheticException || new Error(exception);\n  ex.message = `${exception}`;\n  return [ex, void 0];\n}\nfunction eventFromUnknownInput(client, stackParser, exception, hint) {\n  const providedMechanism = hint?.data && hint.data.mechanism;\n  const mechanism = providedMechanism || {\n    handled: true,\n    type: \"generic\"\n  };\n  const [ex, extras] = getException(client, mechanism, exception, hint);\n  const event = {\n    exception: {\n      values: [exceptionFromError(stackParser, ex)]\n    }\n  };\n  if (extras) {\n    event.extra = extras;\n  }\n  addExceptionTypeValue(event, void 0, void 0);\n  addExceptionMechanism(event, mechanism);\n  return {\n    ...event,\n    event_id: hint?.event_id\n  };\n}\nfunction eventFromMessage(stackParser, message, level = \"info\", hint, attachStacktrace) {\n  const event = {\n    event_id: hint?.event_id,\n    level\n  };\n  if (attachStacktrace && hint?.syntheticException) {\n    const frames = parseStackFrames(stackParser, hint.syntheticException);\n    if (frames.length) {\n      event.exception = {\n        values: [\n          {\n            value: message,\n            stacktrace: { frames }\n          }\n        ]\n      };\n      addExceptionMechanism(event, { synthetic: true });\n    }\n  }\n  if (isParameterizedString(message)) {\n    const { __sentry_template_string__, __sentry_template_values__ } = message;\n    event.logentry = {\n      message: __sentry_template_string__,\n      params: __sentry_template_values__\n    };\n    return event;\n  }\n  event.message = message;\n  return event;\n}\n\nexport { _enhanceErrorWithSentryInfo, eventFromMessage, eventFromUnknownInput, exceptionFromError, parseStackFrames };\n//# sourceMappingURL=eventbuilder.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { CONSOLE_LEVELS, originalConsoleMethods, debug } from '../utils/debug-logger.js';\nimport { fill } from '../utils/object.js';\nimport { stringMatchesSomePattern } from '../utils/string.js';\nimport { GLOBAL_OBJ } from '../utils/worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers.js';\n\nconst _filter = /* @__PURE__ */ new Set([]);\nfunction addConsoleInstrumentationHandler(handler) {\n  const type = \"console\";\n  const removeHandler = addHandler(type, handler);\n  maybeInstrument(type, instrumentConsole);\n  return removeHandler;\n}\nfunction addConsoleInstrumentationFilter(filter) {\n  for (const f of filter) {\n    _filter.add(f);\n  }\n  return () => {\n    for (const f of filter) {\n      _filter.delete(f);\n    }\n  };\n}\nconst instrumentedLevels = /* @__PURE__ */ new Set();\nfunction instrumentConsole() {\n  if (!(\"console\" in GLOBAL_OBJ)) {\n    return;\n  }\n  CONSOLE_LEVELS.forEach(function(level) {\n    if (instrumentedLevels.has(level) || !(level in GLOBAL_OBJ.console)) {\n      return;\n    }\n    instrumentedLevels.add(level);\n    fill(GLOBAL_OBJ.console, level, function(originalConsoleMethod) {\n      originalConsoleMethods[level] = originalConsoleMethod;\n      return function(...args) {\n        const firstArg = args[0];\n        const log = originalConsoleMethods[level];\n        const isFiltered = _filter.size && typeof firstArg === \"string\" && stringMatchesSomePattern(firstArg, _filter);\n        if (!isFiltered) {\n          triggerHandlers(\"console\", { args, level });\n        }\n        if (!isFiltered || DEBUG_BUILD && debug.isEnabled()) {\n          log?.apply(GLOBAL_OBJ.console, args);\n        }\n      };\n    });\n  });\n}\n\nexport { addConsoleInstrumentationFilter, addConsoleInstrumentationHandler, instrumentConsole };\n//# sourceMappingURL=console.js.map\n","function severityLevelFromString(level) {\n  return level === \"warn\" ? \"warning\" : [\"fatal\", \"error\", \"warning\", \"log\", \"info\", \"debug\"].includes(level) ? level : \"log\";\n}\n\nexport { severityLevelFromString };\n//# sourceMappingURL=severity.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { defineIntegration } from '../integration.js';\nimport { debug } from '../utils/debug-logger.js';\nimport { getFramesFromEvent } from '../utils/stacktrace.js';\n\nconst INTEGRATION_NAME = \"Dedupe\";\nconst _dedupeIntegration = (() => {\n  let previousEvent;\n  return {\n    name: INTEGRATION_NAME,\n    processEvent(currentEvent) {\n      if (currentEvent.type) {\n        return currentEvent;\n      }\n      try {\n        if (_shouldDropEvent(currentEvent, previousEvent)) {\n          DEBUG_BUILD && debug.warn(\"Event dropped due to being a duplicate of previously captured event.\");\n          return null;\n        }\n      } catch {\n      }\n      return previousEvent = currentEvent;\n    }\n  };\n});\nconst dedupeIntegration = defineIntegration(_dedupeIntegration);\nfunction _shouldDropEvent(currentEvent, previousEvent) {\n  if (!previousEvent) {\n    return false;\n  }\n  if (_isSameMessageEvent(currentEvent, previousEvent)) {\n    return true;\n  }\n  if (_isSameExceptionEvent(currentEvent, previousEvent)) {\n    return true;\n  }\n  return false;\n}\nfunction _isSameMessageEvent(currentEvent, previousEvent) {\n  const currentMessage = currentEvent.message;\n  const previousMessage = previousEvent.message;\n  if (!currentMessage && !previousMessage) {\n    return false;\n  }\n  if (currentMessage && !previousMessage || !currentMessage && previousMessage) {\n    return false;\n  }\n  if (currentMessage !== previousMessage) {\n    return false;\n  }\n  if (!_isSameFingerprint(currentEvent, previousEvent)) {\n    return false;\n  }\n  if (!_isSameStacktrace(currentEvent, previousEvent)) {\n    return false;\n  }\n  return true;\n}\nfunction _isSameExceptionEvent(currentEvent, previousEvent) {\n  const previousException = _getExceptionFromEvent(previousEvent);\n  const currentException = _getExceptionFromEvent(currentEvent);\n  if (!previousException || !currentException) {\n    return false;\n  }\n  if (previousException.type !== currentException.type || previousException.value !== currentException.value) {\n    return false;\n  }\n  if (!_isSameFingerprint(currentEvent, previousEvent)) {\n    return false;\n  }\n  if (!_isSameStacktrace(currentEvent, previousEvent)) {\n    return false;\n  }\n  return true;\n}\nfunction _isSameStacktrace(currentEvent, previousEvent) {\n  let currentFrames = getFramesFromEvent(currentEvent);\n  let previousFrames = getFramesFromEvent(previousEvent);\n  if (!currentFrames && !previousFrames) {\n    return true;\n  }\n  if (currentFrames && !previousFrames || !currentFrames && previousFrames) {\n    return false;\n  }\n  currentFrames = currentFrames;\n  previousFrames = previousFrames;\n  if (previousFrames.length !== currentFrames.length) {\n    return false;\n  }\n  for (let i = 0; i < previousFrames.length; i++) {\n    const frameA = previousFrames[i];\n    const frameB = currentFrames[i];\n    if (frameA.filename !== frameB.filename || frameA.lineno !== frameB.lineno || frameA.colno !== frameB.colno || frameA.function !== frameB.function) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction _isSameFingerprint(currentEvent, previousEvent) {\n  let currentFingerprint = currentEvent.fingerprint;\n  let previousFingerprint = previousEvent.fingerprint;\n  if (!currentFingerprint && !previousFingerprint) {\n    return true;\n  }\n  if (currentFingerprint && !previousFingerprint || !currentFingerprint && previousFingerprint) {\n    return false;\n  }\n  currentFingerprint = currentFingerprint;\n  previousFingerprint = previousFingerprint;\n  try {\n    return !!(currentFingerprint.join(\"\") === previousFingerprint.join(\"\"));\n  } catch {\n    return false;\n  }\n}\nfunction _getExceptionFromEvent(event) {\n  return event.exception?.values?.[0];\n}\n\nexport { _shouldDropEvent, dedupeIntegration };\n//# sourceMappingURL=dedupe.js.map\n","import { getCurrentScope, getIsolationScope } from '../currentScopes.js';\nimport { defineIntegration } from '../integration.js';\nimport { GEN_AI_CONVERSATION_ID_ATTRIBUTE } from '../semanticAttributes.js';\nimport { spanToJSON } from '../utils/spanUtils.js';\n\nconst INTEGRATION_NAME = \"ConversationId\";\nconst _conversationIdIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    setup(client) {\n      client.on(\"spanStart\", (span) => {\n        const scopeData = getCurrentScope().getScopeData();\n        const isolationScopeData = getIsolationScope().getScopeData();\n        const conversationId = scopeData.conversationId || isolationScopeData.conversationId;\n        if (conversationId) {\n          const { op, data: attributes, description: name } = spanToJSON(span);\n          if (!op?.startsWith(\"gen_ai.\") && !attributes[\"ai.operationId\"] && !name?.startsWith(\"ai.\")) {\n            return;\n          }\n          span.setAttribute(GEN_AI_CONVERSATION_ID_ATTRIBUTE, conversationId);\n        }\n      });\n    }\n  };\n});\nconst conversationIdIntegration = defineIntegration(_conversationIdIntegration);\n\nexport { conversationIdIntegration };\n//# sourceMappingURL=conversationId.js.map\n","function getBreadcrumbLogLevelFromHttpStatusCode(statusCode) {\n  if (statusCode === void 0) {\n    return void 0;\n  } else if (statusCode >= 400 && statusCode < 500) {\n    return \"warning\";\n  } else if (statusCode >= 500) {\n    return \"error\";\n  } else {\n    return void 0;\n  }\n}\n\nexport { getBreadcrumbLogLevelFromHttpStatusCode };\n//# sourceMappingURL=breadcrumb-log-level.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { debug } from './debug-logger.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\nconst WINDOW = GLOBAL_OBJ;\nfunction supportsErrorEvent() {\n  try {\n    new ErrorEvent(\"\");\n    return true;\n  } catch {\n    return false;\n  }\n}\nfunction supportsDOMError() {\n  try {\n    new DOMError(\"\");\n    return true;\n  } catch {\n    return false;\n  }\n}\nfunction supportsDOMException() {\n  try {\n    new DOMException(\"\");\n    return true;\n  } catch {\n    return false;\n  }\n}\nfunction supportsHistory() {\n  return \"history\" in WINDOW && !!WINDOW.history;\n}\nconst supportsFetch = _isFetchSupported;\nfunction _isFetchSupported() {\n  if (!(\"fetch\" in WINDOW)) {\n    return false;\n  }\n  try {\n    new Headers();\n    new Request(\"data:,\");\n    new Response();\n    return true;\n  } catch {\n    return false;\n  }\n}\nfunction isNativeFunction(func) {\n  return func && /^function\\s+\\w+\\(\\)\\s+\\{\\s+\\[native code\\]\\s+\\}$/.test(func.toString());\n}\nfunction supportsNativeFetch() {\n  if (typeof EdgeRuntime === \"string\") {\n    return true;\n  }\n  if (!_isFetchSupported()) {\n    return false;\n  }\n  if (isNativeFunction(WINDOW.fetch)) {\n    return true;\n  }\n  let result = false;\n  const doc = WINDOW.document;\n  if (doc && typeof doc.createElement === \"function\") {\n    try {\n      const sandbox = doc.createElement(\"iframe\");\n      sandbox.hidden = true;\n      doc.head.appendChild(sandbox);\n      if (sandbox.contentWindow?.fetch) {\n        result = isNativeFunction(sandbox.contentWindow.fetch);\n      }\n      doc.head.removeChild(sandbox);\n    } catch (err) {\n      DEBUG_BUILD && debug.warn(\"Could not create sandbox iframe for pure fetch check, bailing to window.fetch: \", err);\n    }\n  }\n  return result;\n}\nfunction supportsReportingObserver() {\n  return \"ReportingObserver\" in WINDOW;\n}\nfunction supportsReferrerPolicy() {\n  if (!_isFetchSupported()) {\n    return false;\n  }\n  try {\n    new Request(\"_\", {\n      referrerPolicy: \"origin\"\n    });\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nexport { isNativeFunction, supportsDOMError, supportsDOMException, supportsErrorEvent, supportsFetch, supportsHistory, supportsNativeFetch, supportsReferrerPolicy, supportsReportingObserver };\n//# sourceMappingURL=supports.js.map\n","import { getClient } from '../currentScopes.js';\nimport { isError, isRequest, isObjectLike } from '../utils/is.js';\nimport { fill, addNonEnumerableProperty } from '../utils/object.js';\nimport { supportsNativeFetch } from '../utils/supports.js';\nimport { timestampInSeconds } from '../utils/time.js';\nimport { GLOBAL_OBJ } from '../utils/worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers.js';\n\nfunction addFetchInstrumentationHandler(handler, skipNativeFetchCheck) {\n  const type = \"fetch\";\n  const removeHandler = addHandler(type, handler);\n  maybeInstrument(type, () => instrumentFetch(void 0, skipNativeFetchCheck));\n  return removeHandler;\n}\nfunction addFetchEndInstrumentationHandler(handler) {\n  const type = \"fetch-body-resolved\";\n  const removeHandler = addHandler(type, handler);\n  maybeInstrument(type, () => instrumentFetch(streamHandler));\n  return removeHandler;\n}\nfunction instrumentFetch(onFetchResolved, skipNativeFetchCheck = false) {\n  if (skipNativeFetchCheck && !supportsNativeFetch()) {\n    return;\n  }\n  fill(GLOBAL_OBJ, \"fetch\", function(originalFetch) {\n    return function(...args) {\n      const virtualError = new Error();\n      const { method, url } = parseFetchArgs(args);\n      const handlerData = {\n        args,\n        fetchData: {\n          method,\n          url\n        },\n        startTimestamp: timestampInSeconds() * 1e3,\n        // // Adding the error to be able to fingerprint the failed fetch event in HttpClient instrumentation\n        virtualError,\n        headers: getHeadersFromFetchArgs(args)\n      };\n      if (!onFetchResolved) {\n        triggerHandlers(\"fetch\", {\n          ...handlerData\n        });\n      }\n      return originalFetch.apply(GLOBAL_OBJ, args).then(\n        async (response) => {\n          if (onFetchResolved) {\n            onFetchResolved(response);\n          } else {\n            triggerHandlers(\"fetch\", {\n              ...handlerData,\n              endTimestamp: timestampInSeconds() * 1e3,\n              response\n            });\n          }\n          return response;\n        },\n        (error) => {\n          triggerHandlers(\"fetch\", {\n            ...handlerData,\n            endTimestamp: timestampInSeconds() * 1e3,\n            error\n          });\n          if (isError(error) && error.stack === void 0) {\n            error.stack = virtualError.stack;\n            addNonEnumerableProperty(error, \"framesToPop\", 1);\n          }\n          const client = getClient();\n          const enhanceOption = client?.getOptions().enhanceFetchErrorMessages ?? \"always\";\n          const shouldEnhance = enhanceOption !== false;\n          if (shouldEnhance && isError(error) && error.name === \"TypeError\" && (error.message === \"Failed to fetch\" || error.message === \"Load failed\" || error.message === \"NetworkError when attempting to fetch resource.\")) {\n            try {\n              const url2 = new URL(handlerData.fetchData.url);\n              const hostname = url2.host;\n              if (enhanceOption === \"always\") {\n                error.message = `${error.message} (${hostname})`;\n              } else {\n                addNonEnumerableProperty(error, \"__sentry_fetch_url_host__\", hostname);\n              }\n            } catch {\n            }\n          }\n          throw error;\n        }\n      );\n    };\n  });\n}\nasync function resolveResponse(res, onFinishedResolving) {\n  if (res?.body) {\n    const body = res.body;\n    const responseReader = body.getReader();\n    const maxFetchDurationTimeout = setTimeout(\n      () => {\n        body.cancel().then(null, () => {\n        });\n      },\n      90 * 1e3\n      // 90s\n    );\n    let readingActive = true;\n    while (readingActive) {\n      let chunkTimeout;\n      try {\n        chunkTimeout = setTimeout(() => {\n          body.cancel().then(null, () => {\n          });\n        }, 5e3);\n        const { done } = await responseReader.read();\n        clearTimeout(chunkTimeout);\n        if (done) {\n          onFinishedResolving();\n          readingActive = false;\n        }\n      } catch {\n        readingActive = false;\n      } finally {\n        clearTimeout(chunkTimeout);\n      }\n    }\n    clearTimeout(maxFetchDurationTimeout);\n    responseReader.releaseLock();\n    body.cancel().then(null, () => {\n    });\n  }\n}\nfunction streamHandler(response) {\n  let clonedResponseForResolving;\n  try {\n    clonedResponseForResolving = response.clone();\n  } catch {\n    return;\n  }\n  resolveResponse(clonedResponseForResolving, () => {\n    triggerHandlers(\"fetch-body-resolved\", {\n      endTimestamp: timestampInSeconds() * 1e3,\n      response\n    });\n  });\n}\nfunction hasProp(obj, prop) {\n  return isObjectLike(obj) && !!obj[prop];\n}\nfunction getUrlFromResource(resource) {\n  if (typeof resource === \"string\") {\n    return resource;\n  }\n  if (!resource) {\n    return \"\";\n  }\n  if (hasProp(resource, \"url\")) {\n    return resource.url;\n  }\n  if (resource.toString) {\n    return resource.toString();\n  }\n  return \"\";\n}\nfunction parseFetchArgs(fetchArgs) {\n  if (fetchArgs.length === 0) {\n    return { method: \"GET\", url: \"\" };\n  }\n  if (fetchArgs.length === 2) {\n    const [resource, options] = fetchArgs;\n    return {\n      url: getUrlFromResource(resource),\n      method: hasProp(options, \"method\") ? String(options.method).toUpperCase() : (\n        // Request object as first argument\n        isRequest(resource) && hasProp(resource, \"method\") ? String(resource.method).toUpperCase() : \"GET\"\n      )\n    };\n  }\n  const arg = fetchArgs[0];\n  return {\n    url: getUrlFromResource(arg),\n    method: hasProp(arg, \"method\") ? String(arg.method).toUpperCase() : \"GET\"\n  };\n}\nfunction getHeadersFromFetchArgs(fetchArgs) {\n  const [requestArgument, optionsArgument] = fetchArgs;\n  try {\n    if (typeof optionsArgument === \"object\" && optionsArgument !== null && \"headers\" in optionsArgument && optionsArgument.headers) {\n      return new Headers(optionsArgument.headers);\n    }\n    if (isRequest(requestArgument)) {\n      return new Headers(requestArgument.headers);\n    }\n  } catch {\n  }\n  return;\n}\n\nexport { addFetchEndInstrumentationHandler, addFetchInstrumentationHandler, parseFetchArgs };\n//# sourceMappingURL=fetch.js.map\n","import { isString } from './is.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\nconst WINDOW = GLOBAL_OBJ;\nconst DEFAULT_MAX_STRING_LENGTH = 80;\nfunction htmlTreeAsString(elem, options = {}) {\n  if (!elem) {\n    return \"<unknown>\";\n  }\n  try {\n    let currentElem = elem;\n    const MAX_TRAVERSE_HEIGHT = 5;\n    const out = [];\n    let height = 0;\n    let len = 0;\n    const separator = \" > \";\n    const sepLength = separator.length;\n    let nextStr;\n    const keyAttrs = Array.isArray(options) ? options : options.keyAttrs;\n    const maxStringLength = !Array.isArray(options) && options.maxStringLength || DEFAULT_MAX_STRING_LENGTH;\n    while (currentElem && height++ < MAX_TRAVERSE_HEIGHT) {\n      nextStr = _htmlElementAsString(currentElem, keyAttrs);\n      if (nextStr === \"html\" || height > 1 && len + out.length * sepLength + nextStr.length >= maxStringLength) {\n        break;\n      }\n      out.push(nextStr);\n      len += nextStr.length;\n      currentElem = currentElem.parentNode;\n    }\n    return out.reverse().join(separator);\n  } catch {\n    return \"<unknown>\";\n  }\n}\nfunction _htmlElementAsString(el, keyAttrs) {\n  const elem = el;\n  const out = [];\n  if (!elem?.tagName) {\n    return \"\";\n  }\n  if (WINDOW.HTMLElement) {\n    if (elem instanceof HTMLElement && elem.dataset) {\n      if (elem.dataset[\"sentryComponent\"]) {\n        return elem.dataset[\"sentryComponent\"];\n      }\n      if (elem.dataset[\"sentryElement\"]) {\n        return elem.dataset[\"sentryElement\"];\n      }\n    }\n  }\n  out.push(elem.tagName.toLowerCase());\n  const keyAttrPairs = keyAttrs?.length ? keyAttrs.filter((keyAttr) => elem.getAttribute(keyAttr)).map((keyAttr) => [keyAttr, elem.getAttribute(keyAttr)]) : null;\n  if (keyAttrPairs?.length) {\n    keyAttrPairs.forEach((keyAttrPair) => {\n      out.push(`[${keyAttrPair[0]}=\"${keyAttrPair[1]}\"]`);\n    });\n  } else {\n    if (elem.id) {\n      out.push(`#${elem.id}`);\n    }\n    const className = elem.className;\n    if (className && isString(className)) {\n      const classes = className.split(/\\s+/);\n      for (const c of classes) {\n        out.push(`.${c}`);\n      }\n    }\n  }\n  for (const k of [\"aria-label\", \"type\", \"name\", \"title\", \"alt\"]) {\n    const attr = elem.getAttribute(k);\n    if (attr) {\n      out.push(`[${k}=\"${attr}\"]`);\n    }\n  }\n  return out.join(\"\");\n}\nfunction getLocationHref() {\n  try {\n    return WINDOW.document.location.href;\n  } catch {\n    return \"\";\n  }\n}\nfunction getComponentName(elem, maxTraverseHeight = 5) {\n  if (!WINDOW.HTMLElement) {\n    return null;\n  }\n  let currentElem = elem;\n  for (let i = 0; i < maxTraverseHeight; i++) {\n    if (!currentElem) {\n      return null;\n    }\n    if (currentElem instanceof HTMLElement) {\n      if (currentElem.dataset[\"sentryComponent\"]) {\n        return currentElem.dataset[\"sentryComponent\"];\n      }\n      if (currentElem.dataset[\"sentryElement\"]) {\n        return currentElem.dataset[\"sentryElement\"];\n      }\n    }\n    currentElem = currentElem.parentNode;\n  }\n  return null;\n}\n\nexport { getComponentName, getLocationHref, htmlTreeAsString };\n//# sourceMappingURL=browser.js.map\n","import { GLOBAL_OBJ, getOriginalFunction, markFunctionWrapped, addNonEnumerableProperty, withScope, addExceptionTypeValue, addExceptionMechanism, captureException, getLocationHref } from '@sentry/core/browser';\n\nconst WINDOW = GLOBAL_OBJ;\nlet ignoreOnError = 0;\nfunction shouldIgnoreOnError() {\n  return ignoreOnError > 0;\n}\nfunction ignoreNextOnError() {\n  ignoreOnError++;\n  setTimeout(() => {\n    ignoreOnError--;\n  });\n}\nfunction wrap(fn, options = {}) {\n  function isFunction(fn2) {\n    return typeof fn2 === \"function\";\n  }\n  if (!isFunction(fn)) {\n    return fn;\n  }\n  try {\n    const hasOwnWrapper = Object.prototype.hasOwnProperty.call(fn, \"__sentry_wrapped__\");\n    if (hasOwnWrapper) {\n      const wrapper = fn.__sentry_wrapped__;\n      if (typeof wrapper === \"function\") {\n        return wrapper;\n      } else {\n        return fn;\n      }\n    }\n    if (getOriginalFunction(fn)) {\n      return fn;\n    }\n  } catch {\n    return fn;\n  }\n  const sentryWrapped = function(...args) {\n    GLOBAL_OBJ._sentryWrappedDepth = (GLOBAL_OBJ._sentryWrappedDepth || 0) + 1;\n    try {\n      const wrappedArguments = args.map((arg) => wrap(arg, options));\n      return fn.apply(this, wrappedArguments);\n    } catch (ex) {\n      ignoreNextOnError();\n      withScope((scope) => {\n        scope.addEventProcessor((event) => {\n          if (options.mechanism) {\n            addExceptionTypeValue(event, void 0, void 0);\n            addExceptionMechanism(event, options.mechanism);\n          }\n          event.extra = {\n            ...event.extra,\n            arguments: args\n          };\n          return event;\n        });\n        captureException(ex);\n      });\n      throw ex;\n    } finally {\n      GLOBAL_OBJ._sentryWrappedDepth = (GLOBAL_OBJ._sentryWrappedDepth || 0) - 1;\n    }\n  };\n  try {\n    for (const property in fn) {\n      if (Object.prototype.hasOwnProperty.call(fn, property)) {\n        sentryWrapped[property] = fn[property];\n      }\n    }\n  } catch {\n  }\n  markFunctionWrapped(sentryWrapped, fn);\n  addNonEnumerableProperty(fn, \"__sentry_wrapped__\", sentryWrapped);\n  try {\n    const descriptor = Object.getOwnPropertyDescriptor(sentryWrapped, \"name\");\n    if (descriptor.configurable) {\n      Object.defineProperty(sentryWrapped, \"name\", {\n        get() {\n          return fn.name;\n        }\n      });\n    }\n  } catch {\n  }\n  return sentryWrapped;\n}\nfunction getHttpRequestData() {\n  const url = getLocationHref();\n  const { referrer } = WINDOW.document || {};\n  const { userAgent } = WINDOW.navigator || {};\n  const headers = {\n    ...referrer && { Referer: referrer },\n    ...userAgent && { \"User-Agent\": userAgent }\n  };\n  const request = {\n    url,\n    headers\n  };\n  return request;\n}\n\nexport { WINDOW, getHttpRequestData, ignoreNextOnError, shouldIgnoreOnError, wrap };\n//# sourceMappingURL=helpers.js.map\n","import { isErrorEvent, isDOMError, isDOMException, addExceptionTypeValue, isError, isPlainObject, isEvent, addExceptionMechanism, isParameterizedString, getClient, normalizeToSize, extractExceptionKeysForMessage, _INTERNAL_enhanceErrorWithSentryInfo, resolvedSyncPromise } from '@sentry/core/browser';\n\nfunction exceptionFromError(stackParser, ex) {\n  const frames = parseStackFrames(stackParser, ex);\n  const exception = {\n    type: extractType(ex),\n    value: extractMessage(ex)\n  };\n  if (frames.length) {\n    exception.stacktrace = { frames };\n  }\n  if (exception.type === void 0 && exception.value === \"\") {\n    exception.value = \"Unrecoverable error caught\";\n  }\n  return exception;\n}\nfunction eventFromPlainObject(stackParser, exception, syntheticException, isUnhandledRejection) {\n  const client = getClient();\n  const normalizeDepth = client?.getOptions().normalizeDepth;\n  const errorFromProp = getErrorPropertyFromObject(exception);\n  const extra = {\n    __serialized__: normalizeToSize(exception, normalizeDepth)\n  };\n  if (errorFromProp) {\n    return {\n      exception: {\n        values: [exceptionFromError(stackParser, errorFromProp)]\n      },\n      extra\n    };\n  }\n  const event = {\n    exception: {\n      values: [\n        {\n          type: isEvent(exception) ? exception.constructor.name : isUnhandledRejection ? \"UnhandledRejection\" : \"Error\",\n          value: getNonErrorObjectExceptionValue(exception, { isUnhandledRejection })\n        }\n      ]\n    },\n    extra\n  };\n  if (syntheticException) {\n    const frames = parseStackFrames(stackParser, syntheticException);\n    if (frames.length) {\n      event.exception.values[0].stacktrace = { frames };\n    }\n  }\n  return event;\n}\nfunction eventFromError(stackParser, ex) {\n  return {\n    exception: {\n      values: [exceptionFromError(stackParser, ex)]\n    }\n  };\n}\nfunction parseStackFrames(stackParser, ex) {\n  const stacktrace = ex.stacktrace || ex.stack || \"\";\n  const skipLines = getSkipFirstStackStringLines(ex);\n  const framesToPop = getPopFirstTopFrames(ex);\n  try {\n    return stackParser(stacktrace, skipLines, framesToPop);\n  } catch {\n  }\n  return [];\n}\nconst reactMinifiedRegexp = /Minified React error #\\d+;/i;\nfunction getSkipFirstStackStringLines(ex) {\n  if (ex && reactMinifiedRegexp.test(ex.message)) {\n    return 1;\n  }\n  return 0;\n}\nfunction getPopFirstTopFrames(ex) {\n  if (typeof ex.framesToPop === \"number\") {\n    return ex.framesToPop;\n  }\n  return 0;\n}\nfunction isWebAssemblyException(exception) {\n  if (typeof WebAssembly !== \"undefined\" && typeof WebAssembly.Exception !== \"undefined\") {\n    return exception instanceof WebAssembly.Exception;\n  } else {\n    return false;\n  }\n}\nfunction extractType(ex) {\n  const name = ex?.name;\n  if (!name && isWebAssemblyException(ex)) {\n    const hasTypeInMessage = ex.message && Array.isArray(ex.message) && ex.message.length == 2;\n    return hasTypeInMessage ? ex.message[0] : \"WebAssembly.Exception\";\n  }\n  return name;\n}\nfunction extractMessage(ex) {\n  const message = ex?.message;\n  if (isWebAssemblyException(ex)) {\n    if (Array.isArray(ex.message) && ex.message.length == 2) {\n      return ex.message[1];\n    }\n    return \"wasm exception\";\n  }\n  if (!message) {\n    return \"No error message\";\n  }\n  if (message.error && typeof message.error.message === \"string\") {\n    return _INTERNAL_enhanceErrorWithSentryInfo(message.error);\n  }\n  return _INTERNAL_enhanceErrorWithSentryInfo(ex);\n}\nfunction eventFromException(stackParser, exception, hint, attachStacktrace) {\n  const syntheticException = hint?.syntheticException || void 0;\n  const event = eventFromUnknownInput(stackParser, exception, syntheticException, attachStacktrace);\n  addExceptionMechanism(event);\n  event.level = \"error\";\n  if (hint?.event_id) {\n    event.event_id = hint.event_id;\n  }\n  return resolvedSyncPromise(event);\n}\nfunction eventFromMessage(stackParser, message, level = \"info\", hint, attachStacktrace) {\n  const syntheticException = hint?.syntheticException || void 0;\n  const event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n  event.level = level;\n  if (hint?.event_id) {\n    event.event_id = hint.event_id;\n  }\n  return resolvedSyncPromise(event);\n}\nfunction eventFromUnknownInput(stackParser, exception, syntheticException, attachStacktrace, isUnhandledRejection) {\n  let event;\n  if (isErrorEvent(exception) && exception.error) {\n    const errorEvent = exception;\n    return eventFromError(stackParser, errorEvent.error);\n  }\n  if (isDOMError(exception) || isDOMException(exception)) {\n    const domException = exception;\n    if (\"stack\" in exception) {\n      event = eventFromError(stackParser, exception);\n      const firstException = event.exception?.values?.[0];\n      if (attachStacktrace && syntheticException && firstException && !firstException.stacktrace) {\n        const frames = parseStackFrames(stackParser, syntheticException);\n        if (frames.length) {\n          firstException.stacktrace = { frames };\n          addExceptionMechanism(event, { synthetic: true });\n        }\n      }\n    } else {\n      const name = domException.name || (isDOMError(domException) ? \"DOMError\" : \"DOMException\");\n      const message = domException.message ? `${name}: ${domException.message}` : name;\n      event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n      addExceptionTypeValue(event, message);\n    }\n    if (\"code\" in domException) {\n      event.tags = { ...event.tags, \"DOMException.code\": `${domException.code}` };\n    }\n    return event;\n  }\n  if (isError(exception)) {\n    return eventFromError(stackParser, exception);\n  }\n  if (isPlainObject(exception) || isEvent(exception)) {\n    const objectException = exception;\n    event = eventFromPlainObject(stackParser, objectException, syntheticException, isUnhandledRejection);\n    addExceptionMechanism(event, {\n      synthetic: true\n    });\n    return event;\n  }\n  event = eventFromString(stackParser, exception, syntheticException, attachStacktrace);\n  addExceptionTypeValue(event, `${exception}`, void 0);\n  addExceptionMechanism(event, {\n    synthetic: true\n  });\n  return event;\n}\nfunction eventFromString(stackParser, message, syntheticException, attachStacktrace) {\n  const event = {};\n  if (attachStacktrace && syntheticException) {\n    const frames = parseStackFrames(stackParser, syntheticException);\n    if (frames.length) {\n      event.exception = {\n        values: [{ value: message, stacktrace: { frames } }]\n      };\n    }\n    addExceptionMechanism(event, { synthetic: true });\n  }\n  if (isParameterizedString(message)) {\n    const { __sentry_template_string__, __sentry_template_values__ } = message;\n    event.logentry = {\n      message: __sentry_template_string__,\n      params: __sentry_template_values__\n    };\n    return event;\n  }\n  event.message = message;\n  return event;\n}\nfunction getNonErrorObjectExceptionValue(exception, { isUnhandledRejection }) {\n  const keys = extractExceptionKeysForMessage(exception);\n  const captureType = isUnhandledRejection ? \"promise rejection\" : \"exception\";\n  if (isErrorEvent(exception)) {\n    return `Event \\`ErrorEvent\\` captured as ${captureType} with message \\`${exception.message}\\``;\n  }\n  if (isEvent(exception)) {\n    const className = getObjectClassName(exception);\n    return `Event \\`${className}\\` (type=${exception.type}) captured as ${captureType}`;\n  }\n  return `Object captured as ${captureType} with keys: ${keys}`;\n}\nfunction getObjectClassName(obj) {\n  try {\n    const prototype = Object.getPrototypeOf(obj);\n    return prototype ? prototype.constructor.name : void 0;\n  } catch {\n  }\n}\nfunction getErrorPropertyFromObject(obj) {\n  return Object.values(obj).find(isError);\n}\n\nexport { eventFromException, eventFromMessage, eventFromUnknownInput, exceptionFromError, extractMessage, extractType };\n//# sourceMappingURL=eventbuilder.js.map\n","import { Client, getSDKSource, applySdkMetadata, addAutoIpAddressToSession } from '@sentry/core/browser';\nimport { eventFromException, eventFromMessage } from './eventbuilder.js';\nimport { WINDOW } from './helpers.js';\n\nclass BrowserClient extends Client {\n  /**\n   * Creates a new Browser SDK instance.\n   *\n   * @param options Configuration options for this SDK.\n   */\n  constructor(options) {\n    const opts = applyDefaultOptions(options);\n    const sdkSource = WINDOW.SENTRY_SDK_SOURCE || getSDKSource();\n    applySdkMetadata(opts, \"browser\", [\"browser\"], sdkSource);\n    super(opts);\n    const { userInfo } = this.getDataCollectionOptions();\n    if (opts._metadata?.sdk) {\n      opts._metadata.sdk.settings = {\n        // Only allow IP inferral by Relay if the user opted in via dataCollection\n        infer_ip: userInfo ? \"auto\" : \"never\",\n        // purposefully allowing already passed settings to override the default\n        ...opts._metadata.sdk.settings\n      };\n    }\n    const { sendClientReports } = this._options;\n    if (WINDOW.document) {\n      WINDOW.document.addEventListener(\"visibilitychange\", () => {\n        if (WINDOW.document.visibilityState === \"hidden\") {\n          if (sendClientReports) {\n            this._flushOutcomes();\n          }\n          queueMicrotask(() => {\n            void this.flush();\n          });\n        }\n      });\n    }\n    if (userInfo) {\n      this.on(\"beforeSendSession\", addAutoIpAddressToSession);\n    }\n  }\n  /**\n   * @inheritDoc\n   */\n  eventFromException(exception, hint) {\n    return eventFromException(this._options.stackParser, exception, hint, this._options.attachStacktrace);\n  }\n  /**\n   * @inheritDoc\n   */\n  eventFromMessage(message, level = \"info\", hint) {\n    return eventFromMessage(this._options.stackParser, message, level, hint, this._options.attachStacktrace);\n  }\n  /**\n   * @inheritDoc\n   */\n  _prepareEvent(event, hint, currentScope, isolationScope) {\n    event.platform = event.platform || \"javascript\";\n    return super._prepareEvent(event, hint, currentScope, isolationScope);\n  }\n}\nfunction applyDefaultOptions(optionsArg) {\n  return {\n    release: typeof __SENTRY_RELEASE__ === \"string\" ? __SENTRY_RELEASE__ : WINDOW.SENTRY_RELEASE?.id,\n    // This supports the variable that sentry-webpack-plugin injects\n    sendClientReports: true,\n    // We default this to true, as it is the safer scenario\n    parentSpanIsAlwaysRootSpan: true,\n    ...optionsArg\n  };\n}\n\nexport { BrowserClient, applyDefaultOptions };\n//# sourceMappingURL=client.js.map\n","const DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","import { GLOBAL_OBJ } from '@sentry/core';\n\nconst WINDOW = GLOBAL_OBJ;\n\nexport { WINDOW };\n//# sourceMappingURL=types.js.map\n","import { WINDOW } from '../../../types.js';\n\nfunction addPageListener(type, listener, options) {\n  if (WINDOW.document) {\n    WINDOW.addEventListener(type, listener, options);\n  }\n}\nfunction removePageListener(type, listener, options) {\n  if (WINDOW.document) {\n    WINDOW.removeEventListener(type, listener, options);\n  }\n}\n\nexport { addPageListener, removePageListener };\n//# sourceMappingURL=globalListeners.js.map\n","const runOnce = (cb) => {\n  let called = false;\n  return () => {\n    if (!called) {\n      cb();\n      called = true;\n    }\n  };\n};\n\nexport { runOnce };\n//# sourceMappingURL=runOnce.js.map\n","import { WINDOW } from '../../../types.js';\nimport { addPageListener, removePageListener } from './globalListeners.js';\nimport { runOnce } from './runOnce.js';\n\nconst whenIdleOrHidden = (cb) => {\n  const rIC = WINDOW.requestIdleCallback || WINDOW.setTimeout;\n  if (WINDOW.document?.visibilityState === \"hidden\") {\n    cb();\n  } else {\n    cb = runOnce(cb);\n    addPageListener(\"visibilitychange\", cb, { once: true, capture: true });\n    addPageListener(\"pagehide\", cb, { once: true, capture: true });\n    rIC(() => {\n      cb();\n      removePageListener(\"visibilitychange\", cb, { capture: true });\n      removePageListener(\"pagehide\", cb, { capture: true });\n    });\n  }\n};\n\nexport { whenIdleOrHidden };\n//# sourceMappingURL=whenIdleOrHidden.js.map\n","import { isString } from '@sentry/core';\n\nconst DEFAULT_MAX_STRING_LENGTH = 80;\nconst accessors = {};\ntry {\n  if (typeof Node !== \"undefined\") {\n    accessors.parentNode = Object.getOwnPropertyDescriptor(Node.prototype, \"parentNode\").get;\n  }\n  if (typeof Element !== \"undefined\") {\n    accessors.tagName = Object.getOwnPropertyDescriptor(Element.prototype, \"tagName\").get;\n    accessors.id = Object.getOwnPropertyDescriptor(Element.prototype, \"id\").get;\n    accessors.className = Object.getOwnPropertyDescriptor(Element.prototype, \"className\").get;\n    accessors.getAttribute = Element.prototype.getAttribute;\n  }\n  if (typeof HTMLElement !== \"undefined\") {\n    accessors.dataset = Object.getOwnPropertyDescriptor(HTMLElement.prototype, \"dataset\").get;\n  }\n} catch {\n}\nfunction _safeRead(el, prop, arg) {\n  const fn = accessors[prop];\n  if (fn) {\n    try {\n      return fn.call(el, arg);\n    } catch {\n    }\n  }\n  const val = el[prop];\n  return typeof val === \"function\" ? val.call(el, arg) : val;\n}\nfunction htmlTreeAsString(elem, options = {}) {\n  if (!elem) {\n    return \"<unknown>\";\n  }\n  try {\n    let currentElem = elem;\n    const MAX_TRAVERSE_HEIGHT = 5;\n    const out = [];\n    let height = 0;\n    let len = 0;\n    const separator = \" > \";\n    const sepLength = separator.length;\n    let nextStr;\n    const keyAttrs = Array.isArray(options) ? options : options.keyAttrs;\n    const maxStringLength = !Array.isArray(options) && options.maxStringLength || DEFAULT_MAX_STRING_LENGTH;\n    while (currentElem && height++ < MAX_TRAVERSE_HEIGHT) {\n      nextStr = _htmlElementAsString(currentElem, keyAttrs);\n      if (nextStr === \"html\" || height > 1 && len + out.length * sepLength + nextStr.length >= maxStringLength) {\n        break;\n      }\n      out.push(nextStr);\n      len += nextStr.length;\n      currentElem = _safeRead(currentElem, \"parentNode\");\n    }\n    return out.reverse().join(separator);\n  } catch {\n    return \"<unknown>\";\n  }\n}\nfunction _htmlElementAsString(el, keyAttrs) {\n  const out = [];\n  const tagName = _safeRead(el, \"tagName\");\n  if (!tagName) {\n    return \"\";\n  }\n  if (typeof HTMLElement !== \"undefined\") {\n    if (el instanceof HTMLElement) {\n      const dataset = _safeRead(el, \"dataset\");\n      if (dataset) {\n        if (dataset[\"sentryComponent\"]) {\n          return dataset[\"sentryComponent\"];\n        }\n        if (dataset[\"sentryElement\"]) {\n          return dataset[\"sentryElement\"];\n        }\n      }\n    }\n  }\n  out.push(tagName.toLowerCase());\n  const keyAttrPairs = keyAttrs?.length ? keyAttrs.filter((keyAttr) => _safeRead(el, \"getAttribute\", keyAttr)).map((keyAttr) => [keyAttr, _safeRead(el, \"getAttribute\", keyAttr)]) : null;\n  if (keyAttrPairs?.length) {\n    keyAttrPairs.forEach((keyAttrPair) => {\n      out.push(`[${keyAttrPair[0]}=\"${keyAttrPair[1]}\"]`);\n    });\n  } else {\n    const id = _safeRead(el, \"id\");\n    if (id) {\n      out.push(`#${id}`);\n    }\n    const className = _safeRead(el, \"className\");\n    if (className && isString(className)) {\n      const classes = className.split(/\\s+/);\n      for (const c of classes) {\n        out.push(`.${c}`);\n      }\n    }\n  }\n  for (const k of [\"aria-label\", \"type\", \"name\", \"title\", \"alt\"]) {\n    const attr = _safeRead(el, \"getAttribute\", k);\n    if (attr) {\n      out.push(`[${k}=\"${attr}\"]`);\n    }\n  }\n  return out.join(\"\");\n}\n\nexport { htmlTreeAsString };\n//# sourceMappingURL=htmlTreeAsString.js.map\n","import { addHandler, maybeInstrument, triggerHandlers, fill, addNonEnumerableProperty, uuid4 } from '@sentry/core';\nimport { WINDOW } from '../types.js';\n\nconst DEBOUNCE_DURATION = 1e3;\nlet debounceTimerID;\nlet lastCapturedEventType;\nlet lastCapturedEventTargetId;\nfunction addClickKeypressInstrumentationHandler(handler) {\n  const type = \"dom\";\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentDOM);\n}\nfunction instrumentDOM() {\n  if (!WINDOW.document) {\n    return;\n  }\n  const triggerDOMHandler = triggerHandlers.bind(null, \"dom\");\n  const globalDOMEventHandler = makeDOMEventHandler(triggerDOMHandler, true);\n  WINDOW.document.addEventListener(\"click\", globalDOMEventHandler, false);\n  WINDOW.document.addEventListener(\"keypress\", globalDOMEventHandler, false);\n  [\"EventTarget\", \"Node\"].forEach((target) => {\n    const globalObject = WINDOW;\n    const proto = globalObject[target]?.prototype;\n    if (!proto?.hasOwnProperty?.(\"addEventListener\")) {\n      return;\n    }\n    fill(proto, \"addEventListener\", function(originalAddEventListener) {\n      return function(type, listener, options) {\n        if (type === \"click\" || type == \"keypress\") {\n          try {\n            const handlers = this.__sentry_instrumentation_handlers__ = this.__sentry_instrumentation_handlers__ || {};\n            const handlerForType = handlers[type] = handlers[type] || { refCount: 0 };\n            if (!handlerForType.handler) {\n              const handler = makeDOMEventHandler(triggerDOMHandler);\n              handlerForType.handler = handler;\n              originalAddEventListener.call(this, type, handler, options);\n            }\n            handlerForType.refCount++;\n          } catch {\n          }\n        }\n        return originalAddEventListener.call(this, type, listener, options);\n      };\n    });\n    fill(\n      proto,\n      \"removeEventListener\",\n      function(originalRemoveEventListener) {\n        return function(type, listener, options) {\n          if (type === \"click\" || type == \"keypress\") {\n            try {\n              const handlers = this.__sentry_instrumentation_handlers__ || {};\n              const handlerForType = handlers[type];\n              if (handlerForType) {\n                handlerForType.refCount--;\n                if (handlerForType.refCount <= 0) {\n                  originalRemoveEventListener.call(this, type, handlerForType.handler, options);\n                  handlerForType.handler = void 0;\n                  delete handlers[type];\n                }\n                if (Object.keys(handlers).length === 0) {\n                  delete this.__sentry_instrumentation_handlers__;\n                }\n              }\n            } catch {\n            }\n          }\n          return originalRemoveEventListener.call(this, type, listener, options);\n        };\n      }\n    );\n  });\n}\nfunction isSimilarToLastCapturedEvent(event) {\n  if (event.type !== lastCapturedEventType) {\n    return false;\n  }\n  try {\n    if (!event.target || event.target._sentryId !== lastCapturedEventTargetId) {\n      return false;\n    }\n  } catch {\n  }\n  return true;\n}\nfunction shouldSkipDOMEvent(eventType, target) {\n  if (eventType !== \"keypress\") {\n    return false;\n  }\n  if (!target?.tagName) {\n    return true;\n  }\n  if (target.tagName === \"INPUT\" || target.tagName === \"TEXTAREA\" || target.isContentEditable) {\n    return false;\n  }\n  return true;\n}\nfunction makeDOMEventHandler(handler, globalListener = false) {\n  return (event) => {\n    if (!event || event[\"_sentryCaptured\"]) {\n      return;\n    }\n    const target = getEventTarget(event);\n    if (shouldSkipDOMEvent(event.type, target)) {\n      return;\n    }\n    addNonEnumerableProperty(event, \"_sentryCaptured\", true);\n    if (target && !target._sentryId) {\n      addNonEnumerableProperty(target, \"_sentryId\", uuid4());\n    }\n    const name = event.type === \"keypress\" ? \"input\" : event.type;\n    if (!isSimilarToLastCapturedEvent(event)) {\n      const handlerData = { event, name, global: globalListener };\n      handler(handlerData);\n      lastCapturedEventType = event.type;\n      lastCapturedEventTargetId = target ? target._sentryId : void 0;\n    }\n    clearTimeout(debounceTimerID);\n    debounceTimerID = WINDOW.setTimeout(() => {\n      lastCapturedEventTargetId = void 0;\n      lastCapturedEventType = void 0;\n    }, DEBOUNCE_DURATION);\n  };\n}\nfunction getEventTarget(event) {\n  try {\n    return event.target;\n  } catch {\n    return null;\n  }\n}\n\nexport { addClickKeypressInstrumentationHandler, instrumentDOM };\n//# sourceMappingURL=dom.js.map\n","import { addHandler, maybeInstrument, triggerHandlers, supportsHistory, fill } from '@sentry/core';\nimport { WINDOW } from '../types.js';\n\nlet lastHref;\nfunction addHistoryInstrumentationHandler(handler) {\n  const type = \"history\";\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentHistory);\n}\nfunction instrumentHistory() {\n  WINDOW.addEventListener(\"popstate\", () => {\n    const to = WINDOW.location.href;\n    const from = lastHref;\n    lastHref = to;\n    if (from === to) {\n      return;\n    }\n    const handlerData = { from, to };\n    triggerHandlers(\"history\", handlerData);\n  });\n  if (!supportsHistory()) {\n    return;\n  }\n  function historyReplacementFunction(originalHistoryFunction) {\n    return function(...args) {\n      const url = args.length > 2 ? args[2] : void 0;\n      if (url) {\n        const from = lastHref;\n        const to = getAbsoluteUrl(String(url));\n        lastHref = to;\n        if (from === to) {\n          return originalHistoryFunction.apply(this, args);\n        }\n        const handlerData = { from, to };\n        triggerHandlers(\"history\", handlerData);\n      }\n      return originalHistoryFunction.apply(this, args);\n    };\n  }\n  fill(WINDOW.history, \"pushState\", historyReplacementFunction);\n  fill(WINDOW.history, \"replaceState\", historyReplacementFunction);\n}\nfunction getAbsoluteUrl(urlOrPath) {\n  try {\n    const url = new URL(urlOrPath, WINDOW.location.origin);\n    return url.toString();\n  } catch {\n    return urlOrPath;\n  }\n}\n\nexport { addHistoryInstrumentationHandler, instrumentHistory };\n//# sourceMappingURL=history.js.map\n","import { isNativeFunction, debug } from '@sentry/core';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { WINDOW } from './types.js';\n\nconst cachedImplementations = {};\nfunction getNativeImplementation(name) {\n  const cached = cachedImplementations[name];\n  if (cached) {\n    return cached;\n  }\n  let impl = WINDOW[name];\n  if (isNativeFunction(impl)) {\n    return cachedImplementations[name] = impl.bind(WINDOW);\n  }\n  const document = WINDOW.document;\n  if (document && typeof document.createElement === \"function\") {\n    try {\n      const sandbox = document.createElement(\"iframe\");\n      sandbox.hidden = true;\n      document.head.appendChild(sandbox);\n      const contentWindow = sandbox.contentWindow;\n      if (contentWindow?.[name]) {\n        impl = contentWindow[name];\n      }\n      document.head.removeChild(sandbox);\n    } catch (e) {\n      DEBUG_BUILD && debug.warn(`Could not create sandbox iframe for ${name} check, bailing to window.${name}: `, e);\n    }\n  }\n  if (!impl) {\n    return impl;\n  }\n  return cachedImplementations[name] = impl.bind(WINDOW);\n}\nfunction clearCachedImplementation(name) {\n  cachedImplementations[name] = void 0;\n}\nfunction fetch(...rest) {\n  return getNativeImplementation(\"fetch\")(...rest);\n}\nfunction setTimeout(...rest) {\n  return getNativeImplementation(\"setTimeout\")(...rest);\n}\n\nexport { clearCachedImplementation, fetch, getNativeImplementation, setTimeout };\n//# sourceMappingURL=getNativeImplementation.js.map\n","import { addHandler, maybeInstrument, timestampInSeconds, isString, triggerHandlers } from '@sentry/core';\nimport { WINDOW } from '../types.js';\n\nconst SENTRY_XHR_DATA_KEY = \"__sentry_xhr_v3__\";\nfunction addXhrInstrumentationHandler(handler) {\n  const type = \"xhr\";\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentXHR);\n}\nfunction instrumentXHR() {\n  if (!WINDOW.XMLHttpRequest) {\n    return;\n  }\n  const xhrproto = XMLHttpRequest.prototype;\n  xhrproto.open = new Proxy(xhrproto.open, {\n    apply(originalOpen, xhrOpenThisArg, xhrOpenArgArray) {\n      const virtualError = new Error();\n      const startTimestamp = timestampInSeconds() * 1e3;\n      const method = isString(xhrOpenArgArray[0]) ? xhrOpenArgArray[0].toUpperCase() : void 0;\n      const url = parseXhrUrlArg(xhrOpenArgArray[1]);\n      if (!method || !url) {\n        return originalOpen.apply(xhrOpenThisArg, xhrOpenArgArray);\n      }\n      xhrOpenThisArg[SENTRY_XHR_DATA_KEY] = {\n        method,\n        url,\n        request_headers: {}\n      };\n      if (method === \"POST\" && url.match(/sentry_key/)) {\n        xhrOpenThisArg.__sentry_own_request__ = true;\n      }\n      const onreadystatechangeHandler = () => {\n        const xhrInfo = xhrOpenThisArg[SENTRY_XHR_DATA_KEY];\n        if (!xhrInfo) {\n          return;\n        }\n        if (xhrOpenThisArg.readyState === 4) {\n          try {\n            xhrInfo.status_code = xhrOpenThisArg.status;\n          } catch {\n          }\n          const handlerData = {\n            endTimestamp: timestampInSeconds() * 1e3,\n            startTimestamp,\n            xhr: xhrOpenThisArg,\n            virtualError\n          };\n          triggerHandlers(\"xhr\", handlerData);\n          xhrOpenThisArg.removeEventListener(\"readystatechange\", onreadystatechangeHandler);\n        }\n      };\n      if (\"onreadystatechange\" in xhrOpenThisArg && typeof xhrOpenThisArg.onreadystatechange === \"function\") {\n        xhrOpenThisArg.onreadystatechange = new Proxy(xhrOpenThisArg.onreadystatechange, {\n          apply(originalOnreadystatechange, onreadystatechangeThisArg, onreadystatechangeArgArray) {\n            onreadystatechangeHandler();\n            return originalOnreadystatechange.apply(onreadystatechangeThisArg, onreadystatechangeArgArray);\n          }\n        });\n      } else {\n        xhrOpenThisArg.addEventListener(\"readystatechange\", onreadystatechangeHandler);\n      }\n      xhrOpenThisArg.setRequestHeader = new Proxy(xhrOpenThisArg.setRequestHeader, {\n        apply(originalSetRequestHeader, setRequestHeaderThisArg, setRequestHeaderArgArray) {\n          const [header, value] = setRequestHeaderArgArray;\n          const xhrInfo = setRequestHeaderThisArg[SENTRY_XHR_DATA_KEY];\n          if (xhrInfo && isString(header) && isString(value)) {\n            xhrInfo.request_headers[header.toLowerCase()] = value;\n          }\n          return originalSetRequestHeader.apply(setRequestHeaderThisArg, setRequestHeaderArgArray);\n        }\n      });\n      return originalOpen.apply(xhrOpenThisArg, xhrOpenArgArray);\n    }\n  });\n  xhrproto.send = new Proxy(xhrproto.send, {\n    apply(originalSend, sendThisArg, sendArgArray) {\n      const sentryXhrData = sendThisArg[SENTRY_XHR_DATA_KEY];\n      if (!sentryXhrData) {\n        return originalSend.apply(sendThisArg, sendArgArray);\n      }\n      if (sendArgArray[0] !== void 0) {\n        sentryXhrData.body = sendArgArray[0];\n      }\n      const handlerData = {\n        startTimestamp: timestampInSeconds() * 1e3,\n        xhr: sendThisArg\n      };\n      triggerHandlers(\"xhr\", handlerData);\n      return originalSend.apply(sendThisArg, sendArgArray);\n    }\n  });\n}\nfunction parseXhrUrlArg(url) {\n  if (isString(url)) {\n    return url;\n  }\n  try {\n    return url.toString();\n  } catch {\n  }\n  return void 0;\n}\n\nexport { SENTRY_XHR_DATA_KEY, addXhrInstrumentationHandler, instrumentXHR };\n//# sourceMappingURL=xhr.js.map\n","function isElement(wat) {\n  if (typeof Element === \"undefined\") {\n    return false;\n  }\n  try {\n    return wat instanceof Element;\n  } catch {\n    return false;\n  }\n}\n\nexport { isElement };\n//# sourceMappingURL=is.js.map\n","import { createTransport, makePromiseBuffer } from '@sentry/core/browser';\nimport { getNativeImplementation, clearCachedImplementation } from '@sentry/browser-utils';\n\nconst DEFAULT_BROWSER_TRANSPORT_BUFFER_SIZE = 40;\nfunction makeFetchTransport(options, nativeFetch = getNativeImplementation(\"fetch\")) {\n  let pendingBodySize = 0;\n  let pendingCount = 0;\n  async function makeRequest(request) {\n    const requestSize = request.body.length;\n    pendingBodySize += requestSize;\n    pendingCount++;\n    const requestOptions = {\n      body: request.body,\n      method: \"POST\",\n      referrerPolicy: \"strict-origin\",\n      headers: options.headers,\n      // Outgoing requests are usually cancelled when navigating to a different page, causing a \"TypeError: Failed to\n      // fetch\" error and sending a \"network_error\" client-outcome - in Chrome, the request status shows \"(cancelled)\".\n      // The `keepalive` flag keeps outgoing requests alive, even when switching pages. We want this since we're\n      // frequently sending events right before the user is switching pages (eg. when finishing navigation transactions).\n      // Gotchas:\n      // - `keepalive` isn't supported by Firefox\n      // - As per spec (https://fetch.spec.whatwg.org/#http-network-or-cache-fetch):\n      //   If the sum of contentLength and inflightKeepaliveBytes is greater than 64 kibibytes, then return a network error.\n      //   We will therefore only activate the flag when we're below that limit.\n      // There is also a limit of requests that can be open at the same time, so we also limit this to 15\n      // See https://github.com/getsentry/sentry-javascript/pull/7553 for details\n      keepalive: pendingBodySize <= 6e4 && pendingCount < 15,\n      ...options.fetchOptions\n    };\n    try {\n      const response = await nativeFetch(options.url, requestOptions);\n      return {\n        statusCode: response.status,\n        headers: {\n          \"x-sentry-rate-limits\": response.headers.get(\"X-Sentry-Rate-Limits\"),\n          \"retry-after\": response.headers.get(\"Retry-After\")\n        }\n      };\n    } catch (e) {\n      clearCachedImplementation(\"fetch\");\n      throw e;\n    } finally {\n      pendingBodySize -= requestSize;\n      pendingCount--;\n    }\n  }\n  return createTransport(\n    options,\n    makeRequest,\n    makePromiseBuffer(options.bufferSize || DEFAULT_BROWSER_TRANSPORT_BUFFER_SIZE)\n  );\n}\n\nexport { makeFetchTransport };\n//# sourceMappingURL=fetch.js.map\n","const DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","import { createStackParser, UNKNOWN_FUNCTION } from '@sentry/core/browser';\n\nconst OPERA10_PRIORITY = 10;\nconst OPERA11_PRIORITY = 20;\nconst CHROME_PRIORITY = 30;\nconst WINJS_PRIORITY = 40;\nconst GECKO_PRIORITY = 50;\nfunction createFrame(filename, func, lineno, colno) {\n  const frame = {\n    filename,\n    function: func === \"<anonymous>\" ? UNKNOWN_FUNCTION : func,\n    in_app: true\n    // All browser frames are considered in_app\n  };\n  if (lineno !== void 0) {\n    frame.lineno = lineno;\n  }\n  if (colno !== void 0) {\n    frame.colno = colno;\n  }\n  return frame;\n}\nconst chromeRegexNoFnName = /^\\s*at (\\S+?)(?::(\\d+))(?::(\\d+))\\s*$/i;\nconst chromeRegex = /^\\s*at (?:(.+?\\)(?: \\[.+\\])?|.*?) ?\\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\\/)?.*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\nconst chromeEvalRegex = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\nconst chromeDataUriRegex = /at (.+?) ?\\(data:(.+?),/;\nconst chromeStackParserFn = (line) => {\n  const dataUriMatch = line.match(chromeDataUriRegex);\n  if (dataUriMatch) {\n    return {\n      filename: `<data:${dataUriMatch[2]}>`,\n      function: dataUriMatch[1]\n    };\n  }\n  const noFnParts = chromeRegexNoFnName.exec(line);\n  if (noFnParts) {\n    const [, filename, line2, col] = noFnParts;\n    return createFrame(filename, UNKNOWN_FUNCTION, +line2, +col);\n  }\n  const parts = chromeRegex.exec(line);\n  if (parts) {\n    const isEval = parts[2]?.indexOf(\"eval\") === 0;\n    if (isEval) {\n      const subMatch = chromeEvalRegex.exec(parts[2]);\n      if (subMatch) {\n        parts[2] = subMatch[1];\n        parts[3] = subMatch[2];\n        parts[4] = subMatch[3];\n      }\n    }\n    const [func, filename] = extractSafariExtensionDetails(parts[1] || UNKNOWN_FUNCTION, parts[2]);\n    return createFrame(filename, func, parts[3] ? +parts[3] : void 0, parts[4] ? +parts[4] : void 0);\n  }\n  return;\n};\nconst chromeStackLineParser = [CHROME_PRIORITY, chromeStackParserFn];\nconst geckoREgex = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)?((?:[-a-z]+)?:\\/.*?|\\[native code\\]|[^@]*(?:bundle|\\d+\\.js)|\\/[\\w\\-. /=]+)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nconst geckoEvalRegex = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\nconst gecko = (line) => {\n  const parts = geckoREgex.exec(line);\n  if (parts) {\n    const isEval = parts[3] && parts[3].indexOf(\" > eval\") > -1;\n    if (isEval) {\n      const subMatch = geckoEvalRegex.exec(parts[3]);\n      if (subMatch) {\n        parts[1] = parts[1] || \"eval\";\n        parts[3] = subMatch[1];\n        parts[4] = subMatch[2];\n        parts[5] = \"\";\n      }\n    }\n    let filename = parts[3];\n    let func = parts[1] || UNKNOWN_FUNCTION;\n    [func, filename] = extractSafariExtensionDetails(func, filename);\n    return createFrame(filename, func, parts[4] ? +parts[4] : void 0, parts[5] ? +parts[5] : void 0);\n  }\n  return;\n};\nconst geckoStackLineParser = [GECKO_PRIORITY, gecko];\nconst winjsRegex = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:[-a-z]+):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\nconst winjs = (line) => {\n  const parts = winjsRegex.exec(line);\n  return parts ? createFrame(parts[2], parts[1] || UNKNOWN_FUNCTION, +parts[3], parts[4] ? +parts[4] : void 0) : void 0;\n};\nconst winjsStackLineParser = [WINJS_PRIORITY, winjs];\nconst opera10Regex = / line (\\d+).*script (?:in )?(\\S+)(?:: in function (\\S+))?$/i;\nconst opera10 = (line) => {\n  const parts = opera10Regex.exec(line);\n  return parts ? createFrame(parts[2], parts[3] || UNKNOWN_FUNCTION, +parts[1]) : void 0;\n};\nconst opera10StackLineParser = [OPERA10_PRIORITY, opera10];\nconst opera11Regex = / line (\\d+), column (\\d+)\\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\\(.*\\))? in (.*):\\s*$/i;\nconst opera11 = (line) => {\n  const parts = opera11Regex.exec(line);\n  return parts ? createFrame(parts[5], parts[3] || parts[4] || UNKNOWN_FUNCTION, +parts[1], +parts[2]) : void 0;\n};\nconst opera11StackLineParser = [OPERA11_PRIORITY, opera11];\nconst defaultStackLineParsers = [chromeStackLineParser, geckoStackLineParser];\nconst defaultStackParser = createStackParser(...defaultStackLineParsers);\nconst extractSafariExtensionDetails = (func, filename) => {\n  const isSafariExtension = func.indexOf(\"safari-extension\") !== -1;\n  const isSafariWebExtension = func.indexOf(\"safari-web-extension\") !== -1;\n  return isSafariExtension || isSafariWebExtension ? [\n    func.indexOf(\"@\") !== -1 ? func.split(\"@\")[0] : UNKNOWN_FUNCTION,\n    isSafariExtension ? `safari-extension:${filename}` : `safari-web-extension:${filename}`\n  ] : [func, filename];\n};\n\nexport { chromeStackLineParser, defaultStackLineParsers, defaultStackParser, geckoStackLineParser, opera10StackLineParser, opera11StackLineParser, winjsStackLineParser };\n//# sourceMappingURL=stack-parsers.js.map\n","import { defineIntegration, addConsoleInstrumentationHandler, addFetchInstrumentationHandler, getClient, safeJoin, severityLevelFromString, addBreadcrumb, debug, getComponentName, getBreadcrumbLogLevelFromHttpStatusCode, parseUrl, getEventDescription } from '@sentry/core/browser';\nimport { addClickKeypressInstrumentationHandler, addXhrInstrumentationHandler, addHistoryInstrumentationHandler, htmlTreeAsString, SENTRY_XHR_DATA_KEY } from '@sentry/browser-utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { WINDOW } from '../helpers.js';\n\nconst MAX_ALLOWED_STRING_LENGTH = 1024;\nconst INTEGRATION_NAME = \"Breadcrumbs\";\nconst _breadcrumbsIntegration = ((options = {}) => {\n  const _options = {\n    console: true,\n    dom: true,\n    fetch: true,\n    history: true,\n    sentry: true,\n    xhr: true,\n    ...options\n  };\n  return {\n    name: INTEGRATION_NAME,\n    setup(client) {\n      if (_options.console) {\n        addConsoleInstrumentationHandler(_getConsoleBreadcrumbHandler(client));\n      }\n      if (_options.dom) {\n        addClickKeypressInstrumentationHandler(_getDomBreadcrumbHandler(client, _options.dom));\n      }\n      if (_options.xhr) {\n        addXhrInstrumentationHandler(_getXhrBreadcrumbHandler(client));\n      }\n      if (_options.fetch) {\n        addFetchInstrumentationHandler(_getFetchBreadcrumbHandler(client));\n      }\n      if (_options.history) {\n        addHistoryInstrumentationHandler(_getHistoryBreadcrumbHandler(client));\n      }\n      if (_options.sentry) {\n        client.on(\"beforeSendEvent\", _getSentryBreadcrumbHandler(client));\n      }\n    }\n  };\n});\nconst breadcrumbsIntegration = defineIntegration(_breadcrumbsIntegration);\nfunction _getSentryBreadcrumbHandler(client) {\n  return function addSentryBreadcrumb(event) {\n    if (getClient() !== client) {\n      return;\n    }\n    addBreadcrumb(\n      {\n        category: `sentry.${event.type === \"transaction\" ? \"transaction\" : \"event\"}`,\n        event_id: event.event_id,\n        level: event.level,\n        message: getEventDescription(event)\n      },\n      {\n        event\n      }\n    );\n  };\n}\nfunction _getDomBreadcrumbHandler(client, dom) {\n  return function _innerDomBreadcrumb(handlerData) {\n    if (getClient() !== client) {\n      return;\n    }\n    let target;\n    let componentName;\n    let keyAttrs = typeof dom === \"object\" ? dom.serializeAttribute : void 0;\n    let maxStringLength = typeof dom === \"object\" && typeof dom.maxStringLength === \"number\" ? dom.maxStringLength : void 0;\n    if (maxStringLength && maxStringLength > MAX_ALLOWED_STRING_LENGTH) {\n      DEBUG_BUILD && debug.warn(\n        `\\`dom.maxStringLength\\` cannot exceed ${MAX_ALLOWED_STRING_LENGTH}, but a value of ${maxStringLength} was configured. Sentry will use ${MAX_ALLOWED_STRING_LENGTH} instead.`\n      );\n      maxStringLength = MAX_ALLOWED_STRING_LENGTH;\n    }\n    if (typeof keyAttrs === \"string\") {\n      keyAttrs = [keyAttrs];\n    }\n    try {\n      const event = handlerData.event;\n      const element = _isEvent(event) ? event.target : event;\n      target = htmlTreeAsString(element, { keyAttrs, maxStringLength });\n      componentName = getComponentName(element);\n    } catch {\n      target = \"<unknown>\";\n    }\n    if (target.length === 0) {\n      return;\n    }\n    const breadcrumb = {\n      category: `ui.${handlerData.name}`,\n      message: target\n    };\n    if (componentName) {\n      breadcrumb.data = { \"ui.component_name\": componentName };\n    }\n    addBreadcrumb(breadcrumb, {\n      event: handlerData.event,\n      name: handlerData.name,\n      global: handlerData.global\n    });\n  };\n}\nfunction _getConsoleBreadcrumbHandler(client) {\n  return function _consoleBreadcrumb(handlerData) {\n    if (getClient() !== client) {\n      return;\n    }\n    const breadcrumb = {\n      category: \"console\",\n      data: {\n        arguments: handlerData.args,\n        logger: \"console\"\n      },\n      level: severityLevelFromString(handlerData.level),\n      message: safeJoin(handlerData.args, \" \")\n    };\n    if (handlerData.level === \"assert\") {\n      if (handlerData.args[0] === false) {\n        breadcrumb.message = `Assertion failed: ${safeJoin(handlerData.args.slice(1), \" \") || \"console.assert\"}`;\n        breadcrumb.data.arguments = handlerData.args.slice(1);\n      } else {\n        return;\n      }\n    }\n    addBreadcrumb(breadcrumb, {\n      input: handlerData.args,\n      level: handlerData.level\n    });\n  };\n}\nfunction _getXhrBreadcrumbHandler(client) {\n  return function _xhrBreadcrumb(handlerData) {\n    if (getClient() !== client) {\n      return;\n    }\n    const { startTimestamp, endTimestamp } = handlerData;\n    const sentryXhrData = handlerData.xhr[SENTRY_XHR_DATA_KEY];\n    if (!startTimestamp || !endTimestamp || !sentryXhrData) {\n      return;\n    }\n    const { method, url, status_code, body } = sentryXhrData;\n    const data = {\n      method,\n      url,\n      status_code\n    };\n    const hint = {\n      xhr: handlerData.xhr,\n      input: body,\n      startTimestamp,\n      endTimestamp\n    };\n    const breadcrumb = {\n      category: \"xhr\",\n      data,\n      type: \"http\",\n      level: getBreadcrumbLogLevelFromHttpStatusCode(status_code)\n    };\n    client.emit(\"beforeOutgoingRequestBreadcrumb\", breadcrumb, hint);\n    addBreadcrumb(breadcrumb, hint);\n  };\n}\nfunction _getFetchBreadcrumbHandler(client) {\n  return function _fetchBreadcrumb(handlerData) {\n    if (getClient() !== client) {\n      return;\n    }\n    const { startTimestamp, endTimestamp } = handlerData;\n    if (!endTimestamp) {\n      return;\n    }\n    if (handlerData.fetchData.url.match(/sentry_key/) && handlerData.fetchData.method === \"POST\") {\n      return;\n    }\n    if (handlerData.error) {\n      const hint = {\n        data: handlerData.error,\n        input: handlerData.args,\n        startTimestamp,\n        endTimestamp\n      };\n      const breadcrumb = {\n        category: \"fetch\",\n        data: handlerData.fetchData,\n        level: \"error\",\n        type: \"http\"\n      };\n      client.emit(\"beforeOutgoingRequestBreadcrumb\", breadcrumb, hint);\n      addBreadcrumb(breadcrumb, hint);\n    } else {\n      const response = handlerData.response;\n      const data = {\n        ...handlerData.fetchData,\n        status_code: response?.status\n      };\n      const hint = {\n        input: handlerData.args,\n        response,\n        startTimestamp,\n        endTimestamp\n      };\n      const breadcrumb = {\n        category: \"fetch\",\n        data,\n        type: \"http\",\n        level: getBreadcrumbLogLevelFromHttpStatusCode(data.status_code)\n      };\n      client.emit(\"beforeOutgoingRequestBreadcrumb\", breadcrumb, hint);\n      addBreadcrumb(breadcrumb, hint);\n    }\n  };\n}\nfunction _getHistoryBreadcrumbHandler(client) {\n  return function _historyBreadcrumb(handlerData) {\n    if (getClient() !== client) {\n      return;\n    }\n    let from = handlerData.from;\n    let to = handlerData.to;\n    const parsedLoc = parseUrl(WINDOW.location.href);\n    let parsedFrom = from ? parseUrl(from) : void 0;\n    const parsedTo = parseUrl(to);\n    if (!parsedFrom?.path) {\n      parsedFrom = parsedLoc;\n    }\n    if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) {\n      to = parsedTo.relative;\n    }\n    if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) {\n      from = parsedFrom.relative;\n    }\n    addBreadcrumb({\n      category: \"navigation\",\n      data: {\n        from,\n        to\n      }\n    });\n  };\n}\nfunction _isEvent(event) {\n  return !!event && !!event.target;\n}\n\nexport { breadcrumbsIntegration };\n//# sourceMappingURL=breadcrumbs.js.map\n","import { defineIntegration, fill, getFunctionName, getOriginalFunction } from '@sentry/core/browser';\nimport { WINDOW, wrap } from '../helpers.js';\n\nconst DEFAULT_EVENT_TARGET = \"EventTarget,Window,Node,ApplicationCache,AudioTrackList,BroadcastChannel,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,SharedWorker,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload\".split(\n  \",\"\n);\nconst INTEGRATION_NAME = \"BrowserApiErrors\";\nconst _browserApiErrorsIntegration = ((options = {}) => {\n  const _options = {\n    XMLHttpRequest: true,\n    eventTarget: true,\n    requestAnimationFrame: true,\n    setInterval: true,\n    setTimeout: true,\n    unregisterOriginalCallbacks: false,\n    ...options\n  };\n  return {\n    name: INTEGRATION_NAME,\n    // TODO: This currently only works for the first client this is setup\n    // We may want to adjust this to check for client etc.\n    setupOnce() {\n      if (_options.setTimeout) {\n        fill(WINDOW, \"setTimeout\", _wrapTimeFunction);\n      }\n      if (_options.setInterval) {\n        fill(WINDOW, \"setInterval\", _wrapTimeFunction);\n      }\n      if (_options.requestAnimationFrame) {\n        fill(WINDOW, \"requestAnimationFrame\", _wrapRAF);\n      }\n      if (_options.XMLHttpRequest && \"XMLHttpRequest\" in WINDOW) {\n        fill(XMLHttpRequest.prototype, \"send\", _wrapXHR);\n      }\n      const eventTargetOption = _options.eventTarget;\n      if (eventTargetOption) {\n        const eventTarget = Array.isArray(eventTargetOption) ? eventTargetOption : DEFAULT_EVENT_TARGET;\n        eventTarget.forEach((target) => _wrapEventTarget(target, _options));\n      }\n    }\n  };\n});\nconst browserApiErrorsIntegration = defineIntegration(_browserApiErrorsIntegration);\nfunction _wrapTimeFunction(original) {\n  return function(...args) {\n    const originalCallback = args[0];\n    args[0] = wrap(originalCallback, {\n      mechanism: {\n        handled: false,\n        type: `auto.browser.browserapierrors.${getFunctionName(original)}`\n      }\n    });\n    return original.apply(this, args);\n  };\n}\nfunction _wrapRAF(original) {\n  return function(callback) {\n    return original.apply(this, [\n      wrap(callback, {\n        mechanism: {\n          data: {\n            handler: getFunctionName(original)\n          },\n          handled: false,\n          type: \"auto.browser.browserapierrors.requestAnimationFrame\"\n        }\n      })\n    ]);\n  };\n}\nfunction _wrapXHR(originalSend) {\n  return function(...args) {\n    const xhr = this;\n    const xmlHttpRequestProps = [\"onload\", \"onerror\", \"onprogress\", \"onreadystatechange\"];\n    xmlHttpRequestProps.forEach((prop) => {\n      if (prop in xhr && typeof xhr[prop] === \"function\") {\n        fill(xhr, prop, function(original) {\n          const wrapOptions = {\n            mechanism: {\n              data: {\n                handler: getFunctionName(original)\n              },\n              handled: false,\n              type: `auto.browser.browserapierrors.xhr.${prop}`\n            }\n          };\n          const originalFunction = getOriginalFunction(original);\n          if (originalFunction) {\n            wrapOptions.mechanism.data.handler = getFunctionName(originalFunction);\n          }\n          return wrap(original, wrapOptions);\n        });\n      }\n    });\n    return originalSend.apply(this, args);\n  };\n}\nfunction _wrapEventTarget(target, integrationOptions) {\n  const globalObject = WINDOW;\n  const proto = globalObject[target]?.prototype;\n  if (!proto?.hasOwnProperty?.(\"addEventListener\")) {\n    return;\n  }\n  fill(proto, \"addEventListener\", function(original) {\n    return function(eventName, fn, options) {\n      try {\n        if (isEventListenerObject(fn)) {\n          fn.handleEvent = wrap(fn.handleEvent, {\n            mechanism: {\n              data: {\n                handler: getFunctionName(fn),\n                target\n              },\n              handled: false,\n              type: \"auto.browser.browserapierrors.handleEvent\"\n            }\n          });\n        }\n      } catch {\n      }\n      if (integrationOptions.unregisterOriginalCallbacks) {\n        unregisterOriginalCallback(this, eventName, fn);\n      }\n      return original.apply(this, [\n        eventName,\n        wrap(fn, {\n          mechanism: {\n            data: {\n              handler: getFunctionName(fn),\n              target\n            },\n            handled: false,\n            type: \"auto.browser.browserapierrors.addEventListener\"\n          }\n        }),\n        options\n      ]);\n    };\n  });\n  fill(proto, \"removeEventListener\", function(originalRemoveEventListener) {\n    return function(eventName, fn, options) {\n      try {\n        if (Object.prototype.hasOwnProperty.call(fn, \"__sentry_wrapped__\")) {\n          const originalEventHandler = fn.__sentry_wrapped__;\n          if (originalEventHandler) {\n            originalRemoveEventListener.call(this, eventName, originalEventHandler, options);\n          }\n        }\n      } catch {\n      }\n      return originalRemoveEventListener.call(this, eventName, fn, options);\n    };\n  });\n}\nfunction isEventListenerObject(obj) {\n  return typeof obj.handleEvent === \"function\";\n}\nfunction unregisterOriginalCallback(target, eventName, fn) {\n  if (target && typeof target === \"object\" && \"removeEventListener\" in target && typeof target.removeEventListener === \"function\") {\n    target.removeEventListener(eventName, fn);\n  }\n}\n\nexport { browserApiErrorsIntegration };\n//# sourceMappingURL=browserapierrors.js.map\n","import { defineIntegration, debug, startSession, captureSession, getIsolationScope } from '@sentry/core/browser';\nimport { whenIdleOrHidden, addHistoryInstrumentationHandler } from '@sentry/browser-utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { WINDOW } from '../helpers.js';\n\nconst browserSessionIntegration = defineIntegration((options = {}) => {\n  const lifecycle = options.lifecycle ?? \"route\";\n  return {\n    name: \"BrowserSession\",\n    setupOnce() {\n      if (typeof WINDOW.document === \"undefined\") {\n        DEBUG_BUILD && debug.warn(\"Using the `browserSessionIntegration` in non-browser environments is not supported.\");\n        return;\n      }\n      startSession({ ignoreDuration: true });\n      let initialSessionSent = false;\n      whenIdleOrHidden(() => {\n        if (!initialSessionSent) {\n          captureSession();\n          initialSessionSent = true;\n        }\n      });\n      const isolationScope = getIsolationScope();\n      let previousUser = isolationScope.getUser();\n      isolationScope.addScopeListener((scope) => {\n        const maybeNewUser = scope.getUser();\n        if (previousUser?.id !== maybeNewUser?.id || previousUser?.ip_address !== maybeNewUser?.ip_address) {\n          previousUser = maybeNewUser;\n          if (initialSessionSent) {\n            captureSession();\n          }\n        }\n      });\n      if (lifecycle === \"route\") {\n        addHistoryInstrumentationHandler(({ from, to }) => {\n          if (from !== to) {\n            startSession({ ignoreDuration: true });\n            captureSession();\n            initialSessionSent = true;\n          }\n        });\n      }\n    }\n  };\n});\n\nexport { browserSessionIntegration };\n//# sourceMappingURL=browsersession.js.map\n","import { defineIntegration, safeSetSpanJSONAttributes } from '@sentry/core/browser';\nimport { WINDOW } from '../helpers.js';\n\nconst INTEGRATION_NAME = \"CultureContext\";\nconst _cultureContextIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    preprocessEvent(event) {\n      const culture = getCultureContext();\n      if (culture) {\n        event.contexts = {\n          ...event.contexts,\n          culture: { ...culture, ...event.contexts?.culture }\n        };\n      }\n    },\n    processSegmentSpan(span) {\n      const culture = getCultureContext();\n      if (culture) {\n        safeSetSpanJSONAttributes(span, {\n          \"culture.locale\": culture.locale,\n          \"culture.timezone\": culture.timezone,\n          \"culture.calendar\": culture.calendar\n        });\n      }\n    }\n  };\n});\nconst cultureContextIntegration = defineIntegration(_cultureContextIntegration);\nfunction getCultureContext() {\n  try {\n    const intl = WINDOW.Intl;\n    if (!intl) {\n      return void 0;\n    }\n    const options = intl.DateTimeFormat().resolvedOptions();\n    return {\n      locale: options.locale,\n      timezone: options.timeZone,\n      calendar: options.calendar\n    };\n  } catch {\n    return void 0;\n  }\n}\n\nexport { cultureContextIntegration };\n//# sourceMappingURL=culturecontext.js.map\n","import { defineIntegration, addGlobalErrorInstrumentationHandler, getClient, captureEvent, debug, addGlobalUnhandledRejectionInstrumentationHandler, isPrimitive, UNKNOWN_FUNCTION, getLocationHref, isString, stripDataUrlContent } from '@sentry/core/browser';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { eventFromUnknownInput } from '../eventbuilder.js';\nimport { shouldIgnoreOnError } from '../helpers.js';\n\nconst INTEGRATION_NAME = \"GlobalHandlers\";\nconst _globalHandlersIntegration = ((options = {}) => {\n  const _options = {\n    onerror: true,\n    onunhandledrejection: true,\n    ...options\n  };\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      Error.stackTraceLimit = 50;\n    },\n    setup(client) {\n      if (_options.onerror) {\n        _installGlobalOnErrorHandler(client);\n        globalHandlerLog(\"onerror\");\n      }\n      if (_options.onunhandledrejection) {\n        _installGlobalOnUnhandledRejectionHandler(client);\n        globalHandlerLog(\"onunhandledrejection\");\n      }\n    }\n  };\n});\nconst globalHandlersIntegration = defineIntegration(_globalHandlersIntegration);\nfunction _installGlobalOnErrorHandler(client) {\n  addGlobalErrorInstrumentationHandler((data) => {\n    const { stackParser, attachStacktrace } = getOptions();\n    if (getClient() !== client || shouldIgnoreOnError()) {\n      return;\n    }\n    const { msg, url, line, column, error } = data;\n    const event = _enhanceEventWithInitialFrame(\n      eventFromUnknownInput(stackParser, error || msg, void 0, attachStacktrace, false),\n      url,\n      line,\n      column\n    );\n    event.level = \"error\";\n    captureEvent(event, {\n      originalException: error,\n      mechanism: {\n        handled: false,\n        type: \"auto.browser.global_handlers.onerror\"\n      }\n    });\n  });\n}\nfunction _installGlobalOnUnhandledRejectionHandler(client) {\n  addGlobalUnhandledRejectionInstrumentationHandler((e) => {\n    const { stackParser, attachStacktrace } = getOptions();\n    if (getClient() !== client || shouldIgnoreOnError()) {\n      return;\n    }\n    const error = _getUnhandledRejectionError(e);\n    const event = isPrimitive(error) ? _eventFromRejectionWithPrimitive(error) : eventFromUnknownInput(stackParser, error, void 0, attachStacktrace, true);\n    event.level = \"error\";\n    captureEvent(event, {\n      originalException: error,\n      mechanism: {\n        handled: false,\n        type: \"auto.browser.global_handlers.onunhandledrejection\"\n      }\n    });\n  });\n}\nfunction _getUnhandledRejectionError(error) {\n  if (isPrimitive(error)) {\n    return error;\n  }\n  try {\n    if (\"reason\" in error) {\n      return error.reason;\n    }\n    if (\"detail\" in error && \"reason\" in error.detail) {\n      return error.detail.reason;\n    }\n  } catch {\n  }\n  return error;\n}\nfunction _eventFromRejectionWithPrimitive(reason) {\n  return {\n    exception: {\n      values: [\n        {\n          type: \"UnhandledRejection\",\n          // String() is needed because the Primitive type includes symbols (which can't be automatically stringified)\n          value: `Non-Error promise rejection captured with value: ${String(reason)}`\n        }\n      ]\n    }\n  };\n}\nfunction _enhanceEventWithInitialFrame(event, url, lineno, colno) {\n  const e = event.exception = event.exception || {};\n  const ev = e.values = e.values || [];\n  const ev0 = ev[0] = ev[0] || {};\n  const ev0s = ev0.stacktrace = ev0.stacktrace || {};\n  const ev0sf = ev0s.frames = ev0s.frames || [];\n  if (ev0sf.length === 0) {\n    ev0sf.push({\n      colno,\n      lineno,\n      filename: getFilenameFromUrl(url) ?? getLocationHref(),\n      function: UNKNOWN_FUNCTION,\n      in_app: true\n    });\n  }\n  return event;\n}\nfunction globalHandlerLog(type) {\n  DEBUG_BUILD && debug.log(`Global Handler attached: ${type}`);\n}\nfunction getOptions() {\n  const client = getClient();\n  const options = client?.getOptions() || {\n    stackParser: () => [],\n    attachStacktrace: false\n  };\n  return options;\n}\nfunction getFilenameFromUrl(url) {\n  if (!isString(url) || url.length === 0) {\n    return void 0;\n  }\n  if (url.startsWith(\"data:\")) {\n    return `<${stripDataUrlContent(url, false)}>`;\n  }\n  return url;\n}\n\nexport { _eventFromRejectionWithPrimitive, _getUnhandledRejectionError, globalHandlersIntegration };\n//# sourceMappingURL=globalhandlers.js.map\n","import { defineIntegration, safeSetSpanJSONAttributes } from '@sentry/core/browser';\nimport { WINDOW, getHttpRequestData } from '../helpers.js';\nimport { HTTP_REQUEST_HEADER_KEY_BASE, URL_FULL, SENTRY_OP, USER_AGENT_ORIGINAL } from '@sentry/conventions/attributes';\n\nconst httpContextIntegration = defineIntegration(() => {\n  return {\n    name: \"HttpContext\",\n    preprocessEvent(event) {\n      if (!WINDOW.navigator && !WINDOW.location && !WINDOW.document) {\n        return;\n      }\n      const reqData = getHttpRequestData();\n      const headers = {\n        ...reqData.headers,\n        ...event.request?.headers\n      };\n      event.request = {\n        ...reqData,\n        ...event.request,\n        headers\n      };\n    },\n    processSpan(span) {\n      if (!WINDOW.navigator && !WINDOW.location && !WINDOW.document) {\n        return;\n      }\n      const reqData = getHttpRequestData();\n      safeSetSpanJSONAttributes(span, {\n        // This attribute is used by the \"Filter out events from legacy browsers and crawlers\" features on the Sentry backend.\n        // Therefore, it's set on every span.\n        [USER_AGENT_ORIGINAL]: reqData.headers[\"User-Agent\"],\n        // These attributes, we only need on the segment span (analogous to the `request` context for events)\n        ...span.is_segment && {\n          // Coerce empty string to undefined so the helper's nullish check drops it,\n          // rather than writing an empty `url.full` attribute onto the span.\n          [URL_FULL]: span.attributes?.[SENTRY_OP] !== \"http.client\" ? reqData.url : void 0,\n          [`${HTTP_REQUEST_HEADER_KEY_BASE}.referer`]: reqData.headers[\"Referer\"]\n        }\n      });\n    }\n  };\n});\n\nexport { httpContextIntegration };\n//# sourceMappingURL=httpcontext.js.map\n","import { defineIntegration, applyAggregateErrorsToEvent } from '@sentry/core/browser';\nimport { exceptionFromError } from '../eventbuilder.js';\n\nconst DEFAULT_KEY = \"cause\";\nconst DEFAULT_LIMIT = 5;\nconst INTEGRATION_NAME = \"LinkedErrors\";\nconst _linkedErrorsIntegration = ((options = {}) => {\n  const limit = options.limit || DEFAULT_LIMIT;\n  const key = options.key || DEFAULT_KEY;\n  return {\n    name: INTEGRATION_NAME,\n    preprocessEvent(event, hint, client) {\n      const options2 = client.getOptions();\n      applyAggregateErrorsToEvent(\n        // This differs from the LinkedErrors integration in core by using a different exceptionFromError function\n        exceptionFromError,\n        options2.stackParser,\n        key,\n        limit,\n        event,\n        hint\n      );\n    }\n  };\n});\nconst linkedErrorsIntegration = defineIntegration(_linkedErrorsIntegration);\n\nexport { linkedErrorsIntegration };\n//# sourceMappingURL=linkederrors.js.map\n","import { isElement, htmlTreeAsString } from '@sentry/browser-utils';\n\nconst HTML_ELEMENT_CONSTRUCTOR_NAME_REGEX = /^HTML(\\w*)Element$/;\nfunction normalizeStringifyValue(value) {\n  if (typeof window !== \"undefined\" && value === window) {\n    return \"[Window]\";\n  }\n  if (typeof document !== \"undefined\" && value === document) {\n    return \"[Document]\";\n  }\n  if (isElement(value)) {\n    const objName = getConstructorName(value);\n    if (HTML_ELEMENT_CONSTRUCTOR_NAME_REGEX.test(objName)) {\n      return `[HTMLElement: ${htmlTreeAsString(value)}]`;\n    }\n  }\n  return void 0;\n}\nfunction getConstructorName(value) {\n  const prototype = Object.getPrototypeOf(value);\n  return prototype?.constructor ? prototype.constructor.name : \"null prototype\";\n}\n\nexport { normalizeStringifyValue };\n//# sourceMappingURL=normalizeStringifyValue.js.map\n","import { consoleSandbox, getLocationHref } from '@sentry/core/browser';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { WINDOW } from '../helpers.js';\n\nfunction checkAndWarnIfIsEmbeddedBrowserExtension() {\n  if (_isEmbeddedBrowserExtension()) {\n    if (DEBUG_BUILD) {\n      consoleSandbox(() => {\n        console.error(\n          \"[Sentry] You cannot use Sentry.init() in a browser extension, see: https://docs.sentry.io/platforms/javascript/best-practices/browser-extensions/\"\n        );\n      });\n    }\n    return true;\n  }\n  return false;\n}\nfunction _isEmbeddedBrowserExtension() {\n  if (typeof WINDOW.window === \"undefined\") {\n    return false;\n  }\n  const _window = WINDOW;\n  if (_window.nw) {\n    return false;\n  }\n  const extensionObject = _window[\"chrome\"] || _window[\"browser\"];\n  if (!extensionObject?.runtime?.id) {\n    return false;\n  }\n  const href = getLocationHref();\n  const isDedicatedExtensionPage = WINDOW === WINDOW.top && /^(?:chrome-extension|moz-extension|ms-browser-extension|safari-web-extension):\\/\\//.test(href);\n  return !isDedicatedExtensionPage;\n}\n\nexport { checkAndWarnIfIsEmbeddedBrowserExtension };\n//# sourceMappingURL=detectBrowserExtension.js.map\n","import { inboundFiltersIntegration, functionToStringIntegration, conversationIdIntegration, dedupeIntegration, getIntegrationsToSetup, stackParserFromStackParserOptions, setNormalizeStringifier, initAndBind } from '@sentry/core/browser';\nimport { BrowserClient } from './client.js';\nimport { breadcrumbsIntegration } from './integrations/breadcrumbs.js';\nimport { browserApiErrorsIntegration } from './integrations/browserapierrors.js';\nimport { browserSessionIntegration } from './integrations/browsersession.js';\nimport { cultureContextIntegration } from './integrations/culturecontext.js';\nimport { globalHandlersIntegration } from './integrations/globalhandlers.js';\nimport { httpContextIntegration } from './integrations/httpcontext.js';\nimport { linkedErrorsIntegration } from './integrations/linkederrors.js';\nimport { defaultStackParser } from './stack-parsers.js';\nimport { makeFetchTransport } from './transports/fetch.js';\nimport { normalizeStringifyValue } from './normalizeStringifyValue.js';\nimport { checkAndWarnIfIsEmbeddedBrowserExtension } from './utils/detectBrowserExtension.js';\n\nfunction getDefaultIntegrations(_options) {\n  return [\n    // TODO(v11): Replace with `eventFiltersIntegration` once we remove the deprecated `inboundFiltersIntegration`\n    // eslint-disable-next-line typescript/no-deprecated\n    inboundFiltersIntegration(),\n    functionToStringIntegration(),\n    conversationIdIntegration(),\n    browserApiErrorsIntegration(),\n    breadcrumbsIntegration(),\n    globalHandlersIntegration(),\n    linkedErrorsIntegration(),\n    dedupeIntegration(),\n    httpContextIntegration(),\n    cultureContextIntegration(),\n    browserSessionIntegration()\n  ];\n}\nfunction init(options = {}) {\n  const shouldDisableBecauseIsBrowserExtenstion = !options.skipBrowserExtensionCheck && checkAndWarnIfIsEmbeddedBrowserExtension();\n  let defaultIntegrations = options.defaultIntegrations == null ? getDefaultIntegrations() : options.defaultIntegrations;\n  const clientOptions = {\n    ...options,\n    enabled: shouldDisableBecauseIsBrowserExtenstion ? false : options.enabled,\n    stackParser: stackParserFromStackParserOptions(options.stackParser || defaultStackParser),\n    integrations: getIntegrationsToSetup({\n      integrations: options.integrations,\n      defaultIntegrations\n    }),\n    transport: options.transport || makeFetchTransport\n  };\n  setNormalizeStringifier(normalizeStringifyValue);\n  return initAndBind(BrowserClient, clientOptions);\n}\nfunction forceLoad() {\n}\nfunction onLoad(callback) {\n  callback();\n}\n\nexport { forceLoad, getDefaultIntegrations, init, onLoad };\n//# sourceMappingURL=sdk.js.map\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","import singleSpaReact from 'single-spa-react';\nimport React from 'react';\nimport ReactDOMClient from 'react-dom/client';\nexport const createComponentDefinitionForReact = ({ rootComponent, errorBoundary, }) => {\n    const { bootstrap, mount, unmount, update } = singleSpaReact({\n        React,\n        ReactDOMClient,\n        rootComponent,\n        errorBoundary,\n    });\n    return { bootstrap, mount, unmount, update };\n};\n//# sourceMappingURL=react-helpers.js.map","import { useEffect } from 'react';\nimport { ThemeProvider } from '@getgo/chameleon-web-react-wrapper';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { selectFeatureFlag, selectUserTheme } from '../../../store/selectors/analytics';\nimport { FEATURE_FLAGS } from '../../../utils/feature-flag';\nimport { setTheme } from '../../../store/Analytics/analytics.slice';\nimport { THEME as Theme } from '../../../constants/theme';\nimport { getShellApi } from '../../../utils/shell';\n\nconst StoreThemeProvider = ({ children }) => {\n  const dispatch = useDispatch();\n  const theme = useSelector(selectUserTheme);\n  const featureFlagSelector = useSelector(selectFeatureFlag);\n  const hasShellDarkMode = featureFlagSelector(FEATURE_FLAGS.SHELL_DARK_MODE);\n  const { appLoaded } = useSelector(state => state.analytics);\n\n  const setUserTheme = async () => {\n    const userTheme = await getShellApi()?.userPreferences?.getPreference('theme');\n\n    // Define the theme based on user preference. If the theme is not set in shell we get\n    // the default one based on OS's settings\n    const shellTheme = userTheme === Theme.DARK || userTheme === Theme.LIGHT ? userTheme : theme;\n\n    dispatch(setTheme({ theme: shellTheme }));\n  };\n\n  useEffect(() => {\n    if (hasShellDarkMode && appLoaded) {\n      setUserTheme();\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [hasShellDarkMode, appLoaded]);\n\n  useEffect(() => {\n    if (!hasShellDarkMode && appLoaded) {\n      // If the user has not the dark mode feature flag, we override the first theme-provider\n      // to force analytics to be dark based on OS' settings.\n      const themeProvider = document.querySelector('chameleon-theme-provider');\n      if (themeProvider) {\n        themeProvider.theme = theme;\n      }\n    }\n  }, [theme, appLoaded, hasShellDarkMode]);\n\n  return (\n    <ThemeProvider prefix=\"ucc-analytics\" theme={theme} rebranding2021 skin=\"gotoapp\">\n      {children}\n    </ThemeProvider>\n  );\n};\n\nexport default StoreThemeProvider;\n","import { ReactNode, createContext, useContext, useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { BannerType } from '../constants/banner-types';\nimport { showErrorBannerAlert } from '../store/errorBannerAlert.slice';\n\nexport interface ErrorBannerPayload {\n  message: string;\n  type?: BannerType;\n}\n\ninterface ErrorBannersProviderProps {\n  children: ReactNode;\n}\n\ninterface ErrorBannersContextValue {\n  showBanner: (payload: ErrorBannerPayload) => void;\n}\n\nconst ErrorBannersContext = createContext<ErrorBannersContextValue | null>(null);\n\nexport const ErrorBannersProvider = ({ children }: ErrorBannersProviderProps) => {\n  const dispatch = useDispatch();\n\n  const showBanner = useCallback((payload: ErrorBannerPayload) => {\n    dispatch(showErrorBannerAlert(payload));\n  }, [dispatch]);\n\n  return (\n    <ErrorBannersContext.Provider value={{ showBanner }}>\n      {children}\n    </ErrorBannersContext.Provider>\n  );\n};\n\n// Hook to use the error banner functionality\nexport const useErrorBanner = () => {\n  const context = useContext(ErrorBannersContext);\n  if (!context) {\n    throw new Error('useErrorBanner must be used within ErrorBannersProvider');\n  }\n  return context;\n};\n","import PAGE_IDS from '../constants/pages';\nimport { DashboardPageConfigType } from '../types/dashboard/DashboardTypes';\nimport AgentPerformance from './agent-performance.config';\nimport CallReports from './call-reports.config';\nimport MessageReports from './message-reports.config';\nimport QualityManagement from './quality-management.config';\nimport QueueCaller from './queue-caller.config';\nimport ResolvedConversations from './resolved-conversations.config';\nimport SatisfactionSurvey from './satisfaction-survey.config';\n\nexport { default as AgentPerformanceConfig } from './agent-performance.config';\nexport { default as ResolvedConversationsConfig } from './resolved-conversations.config';\nexport { default as QueueCallerConfig } from './queue-caller.config';\nexport { default as CallReportsConfig } from './call-reports.config';\nexport { default as MessageReportsConfig } from './message-reports.config';\nexport { default as SatisfactionSurveyConfig } from './satisfaction-survey.config';\nexport { default as QualityManagementConfig } from './quality-management.config';\n\nexport default {\n  [PAGE_IDS.AGENT_EFFECTIVENESS]: AgentPerformance,\n  [PAGE_IDS.QUEUE_CALLER]: QueueCaller,\n  [PAGE_IDS.RESOLVED_CONVERSATIONS]: ResolvedConversations,\n  [PAGE_IDS.CALL_REPORTS]: CallReports,\n  [PAGE_IDS.MESSAGE_REPORTS]: MessageReports,\n  [PAGE_IDS.SATISFACTION_SURVEY]: SatisfactionSurvey,\n  [PAGE_IDS.QUALITY_MANAGEMENT]: QualityManagement\n} as unknown as Record<string, DashboardPageConfigType>;\n","/**\n * Banner type constants for categorizing error banners.\n * Used to selectively clear banners by type instead of clearing all banners.\n */\nexport const BANNER_TYPES = {\n  /** Validation errors from filter validation */\n  VALIDATION: 'validation',\n  /** Network/API errors */\n  NETWORK: 'network',\n  /** Permission/authorization errors */\n  PERMISSION: 'permission',\n  /** General banners without a specific type */\n  GENERAL: undefined\n} as const;\n\nexport type BannerType = typeof BANNER_TYPES[keyof typeof BANNER_TYPES];\n","import pageIds from '../constants/pages';\nimport { DashboardType } from '../types/dashboard/DashboardTypes';\n\nexport const getPageIdFromDashboardType = (dashboardType: string | null | undefined): string => {\n  switch (dashboardType) {\n    case 'AGENT_EFFECTIVENESS':\n      return pageIds.AGENT_EFFECTIVENESS as string;\n    case 'QUEUE_CALLER':\n      return pageIds.QUEUE_CALLER as string;\n    case 'RESOLVED_CONVERSATIONS':\n      return pageIds.RESOLVED_CONVERSATIONS as string;\n    case 'EMPTY':\n      return pageIds.EMPTY as string;\n    case 'CALL_REPORTS':\n      return pageIds.CALL_REPORTS as string;\n    case 'MESSAGE_REPORTS':\n      return pageIds.MESSAGE_REPORTS as string;\n    case 'SATISFACTION_SURVEY':\n      return pageIds.SATISFACTION_SURVEY as string;\n    case 'QUALITY_MANAGEMENT':\n      return pageIds.QUALITY_MANAGEMENT as string;\n    default:\n      return '';\n  }\n};\n\nexport const getPageNameFormatted = (currentDashboard: DashboardType, t: (k: string) => string): string => {\n  const pageId = getPageIdFromDashboardType(currentDashboard.type);\n\n  switch (pageId) {\n    case pageIds.AGENT_EFFECTIVENESS:\n      return t('agent-performance');\n    case pageIds.QUEUE_CALLER:\n      return t('queue-caller');\n\n    default:\n      return '';\n  }\n};\n","export const HttpCodes = {\n  OK: 200,\n  BAD_REQUEST: 400,\n  UNAUTHORIZED: 401,\n  FORBIDDEN: 403,\n  NOT_FOUND: 404\n};\n","import { FILTER_NAMES } from '../../constants/filters';\nimport { HttpCodes } from '../../constants/http-status';\nimport environment from '../../environments';\nimport type { AnalyticsFilter } from '../../types/dashboard/AnalyticsFilters';\nimport { analyticsQueryService, HttpResponseError } from './analytics-fetch.service';\n\n/**\n * Translation keys for error messages.\n * These strings are used as keys in i18next and must be translated in locale files.\n */\nexport const VALIDATION_ERROR_MESSAGES: Record<\n  string,\n  {\n    PERMISSION_DENIED: string;\n    USER_COUNT_EXCEEDED?: string;\n  }\n> = {\n  [FILTER_NAMES.USER_GROUPS]: {\n    /* i18n.t('The 5k user limit has been reached for the user group(s) you selected. This board is now filtering by all user groups.') */\n    USER_COUNT_EXCEEDED:\n      'The 5k user limit has been reached for the user group(s) you selected. This board is now filtering by all user groups.',\n    /* i18n.t('User does not have permission to filter by user groups.') */\n    PERMISSION_DENIED: 'User does not have permission to filter by user groups.'\n  },\n  [FILTER_NAMES.CALL_TOPICS]: {\n    /* i18n.t('User does not have permission to filter by topics.') */\n    PERMISSION_DENIED: 'User does not have permission to filter by topics.'\n  }\n};\nexport interface ValidateFiltersRequest {\n  type: string;\n  filters: {\n    items: AnalyticsFilter[];\n  };\n}\nexport interface ValidateFiltersResponse {\n  valid: boolean;\n  message?: string;\n}\nexport interface ValidationError {\n  status: number;\n  errorCode: string;\n  message: string;\n  reference: string;\n  field?: string;\n}\nexport class DashboardFilterValidationError extends Error {\n  constructor(\n    message: string,\n    public status: number,\n    public errorCode: string,\n    public reference: string,\n    public field?: string\n  ) {\n    super(message);\n    this.name = 'DashboardFilterValidationError';\n  }\n}\n\nexport const validateDashboardFilters = async (\n  organizationId: string,\n  dashboardType: string,\n  filters: ValidateFiltersRequest['filters'],\n  controller: AbortController\n): Promise<ValidateFiltersResponse | null> => {\n  const url = `${environment.api.analyticsBff.url}/organizations/${organizationId}/filters/validate`;\n\n  const requestBody: ValidateFiltersRequest = {\n    type: dashboardType,\n    filters: {\n      items: filters?.items || []\n    }\n  };\n\n  try {\n    const res = await analyticsQueryService(url, JSON.stringify(requestBody), controller);\n    const response = (await res.json()) as ValidateFiltersResponse;\n\n    if (!res.ok) {\n      throw new HttpResponseError({\n        message: `${res.status}: ${res.statusText}`,\n        config: { url },\n        response,\n        status: res.status,\n        statusText: res.statusText\n      });\n    }\n\n    return response ?? null;\n  } catch (error: unknown) {\n    if (error instanceof Error && error.name === 'AbortError') {\n      return null;\n    }\n\n    if (error instanceof HttpResponseError) {\n      const errorResponse = error.response as ValidationError | null;\n\n      if (error.status === HttpCodes.FORBIDDEN) {\n        const errorCode = errorResponse?.errorCode ?? 'FORBIDDEN';\n        const reference = errorResponse?.reference ?? '';\n        const field = errorResponse?.field || FILTER_NAMES.USER_GROUPS;\n\n        const validationErrorMessages =\n          VALIDATION_ERROR_MESSAGES[field as keyof typeof VALIDATION_ERROR_MESSAGES] ||\n          VALIDATION_ERROR_MESSAGES[FILTER_NAMES.USER_GROUPS];\n        const errorMessage: string = validationErrorMessages.PERMISSION_DENIED;\n\n        throw new DashboardFilterValidationError(\n          errorMessage,\n          Number(error.status),\n          errorCode,\n          reference,\n          field\n        );\n      }\n\n      if (error.status === HttpCodes.BAD_REQUEST) {\n        const errorMessage = errorResponse?.message ?? '';\n\n        if (errorMessage === 'USER_COUNT_EXCEEDED') {\n          const errorCode = errorResponse?.errorCode ?? 'BAD_REQUEST';\n          const reference = errorResponse?.reference ?? '';\n\n          throw new DashboardFilterValidationError(\n            VALIDATION_ERROR_MESSAGES[FILTER_NAMES.USER_GROUPS].USER_COUNT_EXCEEDED!,\n            Number(error.status),\n            errorCode,\n            reference,\n            FILTER_NAMES.USER_GROUPS\n          );\n        }\n      }\n    }\n\n    throw error;\n  }\n};\n","import { Dispatch } from '@reduxjs/toolkit';\nimport errorTypes from '../../constants/error-types';\nimport { setError, setSentryEventId } from '../../store/Analytics/analytics.slice';\nimport { LicenceType, Organizations } from '../../types/store/StateTypes';\n\ntype SetNetworkErrorParams = {\n  dispatch: Dispatch;\n  requestError: unknown;\n  permissions: string[];\n  currentOrganization: Organizations | null;\n  userId: string | null;\n  currentLicense: LicenceType | null;\n  message?: string;\n  locale: string | null;\n};\n\nexport const setNetworkError = ({\n  dispatch,\n  requestError,\n  permissions,\n  currentOrganization,\n  userId,\n  currentLicense,\n  message,\n  locale\n}: SetNetworkErrorParams): void => {\n  dispatch(\n    setError({\n      errorStack: {\n        errorType: errorTypes.NETWORK_ERROR,\n        exception: requestError,\n        message\n      },\n      userPermissions: permissions,\n      currentOrganization,\n      userId,\n      currentLicense,\n      locale,\n      onCaptureException: (eventId: string) => dispatch(setSentryEventId({ eventId }))\n    })\n  );\n};\n","import { useCallback, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { BANNER_TYPES } from '../constants/banner-types';\nimport {\n  DashboardFilterValidationError,\n  validateDashboardFilters,\n  type ValidateFiltersRequest\n} from '../services/common/dashboard-filter-validation.service';\nimport { setNetworkError } from '../services/common/handle-errors.service';\nimport { clearFilterValidationError, setFilterValidationError } from '../store/Analytics/analytics.slice';\nimport { clearBannersByType } from '../store/errorBannerAlert.slice';\nimport type { StateType } from '../types/store/StateTypes';\n\ninterface UseFilterValidationOptions {\n  currentOrganization?: { id: string } | null;\n  clearBannersOnSuccess?: boolean;\n}\n\ninterface ValidateOptions {\n  dashboardType: string;\n  filters: ValidateFiltersRequest['filters'];\n  onSuccess?: () => void;\n}\n\nexport type ValidateFiltersFn = (options: ValidateOptions) => Promise<void>;\n\n/**\n * Hook that provides a reusable filter validation function with consistent error handling\n * and abort controller management.\n */\nconst useFilterValidation = (options: UseFilterValidationOptions = {}): ValidateFiltersFn => {\n  const { currentOrganization, clearBannersOnSuccess = false } = options;\n  const dispatch = useDispatch();\n  const { t } = useTranslation();\n  const abortControllerRef = useRef<AbortController | null>(null);\n\n  const currentOrganizationPermissions = useSelector(\n    (state: StateType) => state.analytics.currentOrganizationPermissions\n  );\n  const userId = useSelector((state: StateType) => state.analytics.userId);\n  const currentLicense = useSelector((state: StateType) => state.analytics.currentLicense);\n  const locale = useSelector((state: StateType) => state.analytics.locale);\n\n  return useCallback(\n    async ({ dashboardType, filters, onSuccess }: ValidateOptions): Promise<void> => {\n      if (!currentOrganization?.id) {\n        return;\n      }\n\n      dispatch(clearFilterValidationError());\n\n      if (abortControllerRef.current) {\n        abortControllerRef.current.abort();\n      }\n\n      const controller = new AbortController();\n      abortControllerRef.current = controller;\n\n      try {\n        const result = await validateDashboardFilters(currentOrganization.id, dashboardType, filters, controller);\n\n        if (!result || abortControllerRef.current !== controller) {\n          return;\n        }\n\n        if (clearBannersOnSuccess) {\n          dispatch(clearBannersByType({ type: BANNER_TYPES.VALIDATION }));\n        }\n\n        if (onSuccess) {\n          onSuccess();\n        }\n\n        if (abortControllerRef.current === controller) {\n          abortControllerRef.current = null;\n        }\n      } catch (error) {\n        if (error instanceof Error && error.name === 'AbortError') {\n          return;\n        }\n\n        if (!controller.signal.aborted) {\n          if (error instanceof DashboardFilterValidationError) {\n            dispatch(\n              setFilterValidationError({\n                code: error.errorCode,\n                message: error.message,\n                field: error.field\n              })\n            );\n          } else {\n            setNetworkError({\n              dispatch,\n              requestError: error,\n              permissions: currentOrganizationPermissions,\n              currentOrganization,\n              userId,\n              currentLicense,\n              message: t('An error occurred while validating filters'),\n              locale\n            });\n          }\n        }\n\n        if (abortControllerRef.current === controller) {\n          abortControllerRef.current = null;\n        }\n      }\n    },\n    [\n      currentOrganization,\n      currentOrganizationPermissions,\n      userId,\n      currentLicense,\n      locale,\n      clearBannersOnSuccess,\n      dispatch,\n      t\n    ]\n  );\n};\n\nexport default useFilterValidation;\n","import { useCallback } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport configs from '../configs';\nimport type { ValidateFiltersRequest } from '../services/common/dashboard-filter-validation.service';\nimport { selectCurrentOrganization, selectFeatureFlag } from '../store/selectors/analytics';\nimport type { DashboardType } from '../types/dashboard/DashboardTypes';\nimport { getPageIdFromDashboardType } from '../utils/page.util';\nimport useFilterValidation from './useFilterValidation';\n\nexport type ValidateFiltersFn = (dashboard: DashboardType | null | undefined) => Promise<void>;\n\nconst useDashboardFilterValidator = (): ValidateFiltersFn => {\n  const currentOrganization = useSelector(selectCurrentOrganization);\n  const featureFlagSelector = useSelector(selectFeatureFlag);\n  const validateFilters = useFilterValidation({ currentOrganization });\n\n  return useCallback(\n    async (dashboard: DashboardType | null | undefined): Promise<void> => {\n      if (!dashboard) {\n        return;\n      }\n\n      const dashboardConfig = configs[getPageIdFromDashboardType(dashboard.type)];\n      const shouldValidate = dashboardConfig?.validateOnDashboardLoad ?? false;\n      const featureFlags = dashboardConfig?.validateOnDashboardLoadFeatureFlags ?? [];\n      const hasAnyFeatureFlagEnabled = featureFlags.some(flag => featureFlagSelector(flag));\n\n      if (!shouldValidate || !hasAnyFeatureFlagEnabled || !currentOrganization) {\n        return;\n      }\n\n      await validateFilters({\n        dashboardType: dashboard.type,\n        filters: (dashboard.filters ?? { items: [] }) as ValidateFiltersRequest['filters']\n      });\n    },\n    [currentOrganization, featureFlagSelector, validateFilters]\n  );\n};\n\nexport default useDashboardFilterValidator;\n","import { useCallback, useMemo } from 'react';\nimport { useSelector } from 'react-redux';\nimport configs from '../configs';\nimport { selectCurrentDashboard } from '../store/selectors/analytics';\nimport { getPageIdFromDashboardType } from '../utils/page.util';\n\nconst useHasUrlParamsFiltersEnabled = () => {\n  const currentDashboard = useSelector(selectCurrentDashboard);\n  const addFiltersToUrlConfig = useMemo(() => {\n    if (!currentDashboard || currentDashboard?.type === undefined) {\n      return false;\n    }\n    const dashboardConfig = configs[getPageIdFromDashboardType(currentDashboard.type)];\n    return dashboardConfig?.addFiltersToUrl !== false;\n  }, [currentDashboard]);\n\n  const hasUrlParamsFiltersEnabled = useCallback(() => {\n    return addFiltersToUrlConfig;\n  }, [addFiltersToUrlConfig]);\n\n  return hasUrlParamsFiltersEnabled;\n};\n\nexport default useHasUrlParamsFiltersEnabled;\n","import DOMPurify from 'dompurify';\n\nexport const replaceTextByLength = (string: string, maxLength: number, replaceFor = '...') => {\n  if (string.length > maxLength) {\n    return replaceFor;\n  }\n\n  return string;\n};\n\nexport const transformUsername = (user?: { firstName?: string; lastName?: string }) =>\n  `${user?.firstName || ''} ${user?.lastName || ''}`.trim();\n\nexport const sanitizePhoneNumber = (phoneNumber: string): string => {\n  return phoneNumber.replace(/\\D/g, '');\n};\n\n/**\n * Sanitizes text to prevent code injection by stripping HTML tags and dangerous characters\n * @param text - The text to sanitize\n * @returns Sanitized plain text\n */\nexport const sanitizeText = (text: string): string => {\n  return DOMPurify.sanitize(text, { ALLOWED_TAGS: [], ALLOWED_ATTR: [] });\n};\n","import { useCallback, useMemo } from 'react';\nimport { useSelector } from 'react-redux';\nimport { useLocation } from 'react-router';\nimport configs from '../configs';\nimport { DEFAULT_FILTERS, FILTER_NAMES, FILTERS_TYPES, getDefaultFilterValue } from '../constants/filters';\nimport { FILTER_TYPES, FILTERS_PARSER, FILTERS_URL_MAPPING } from '../constants/filters-definitions';\nimport { truncateFilterValue } from '../constants/validation';\nimport { getFiltersByParserType } from '../services/common/filters.service';\nimport { selectCurrentDashboard } from '../store/selectors/analytics';\nimport { ArrayFilter, FilterConfig, GroupByFilter, QueryFilter, RangeFilter } from '../types/config/FilterTypes';\nimport { DashboardPageConfigType, URLMappingType } from '../types/dashboard/DashboardTypes';\nimport { getFlatItems } from '../utils/filters.util';\nimport { getPageIdFromDashboardType } from '../utils/page.util';\nimport { sanitizePhoneNumber } from '../utils/strings.util';\nimport useHasUrlParamsFiltersEnabled from './useHasUrlParamsFiltersEnabled';\n\nexport const MAX_URL_LENGTH = 8000;\nexport const FILTERS_URL_KEY = 'filters';\nexport const STARTTIME_URL_KEY = 'startTime';\nexport const ENDTIME_URL_KEY = 'endTime';\nconst CONVERSATION_ID_URL_KEY = 'conversationId';\n\nconst safeDecodeURIComponent = (value: string): string => {\n  try {\n    return decodeURIComponent(value);\n  } catch (e) {\n    console.error(e);\n    return value;\n  }\n};\n\nconst DELIMITER_ESCAPE_TOKENS: Record<string, string> = { '~': '~t', ',': '~c', ';': '~s', ':': '~k' };\nconst STRUCTURAL_DELIMITER_CHARS = /[~,;:]/g;\nconst escapeStructuralDelimiters = (value: string): string =>\n  value.replace(STRUCTURAL_DELIMITER_CHARS, char => DELIMITER_ESCAPE_TOKENS[char]);\n\nconst DELIMITER_UNESCAPE_TOKENS: Record<string, string> = { t: '~', c: ',', s: ';', k: ':' };\nconst unescapeStructuralDelimiters = (value: string): string =>\n  value.replace(/~([tcsk])/g, (_match, token: string) => DELIMITER_UNESCAPE_TOKENS[token]);\n\nconst isRangeFilterValue = (value: unknown): value is RangeFilter =>\n  typeof value === 'object' && value !== null && ('min' in value || 'max' in value);\n\nconst useUrlParamsHandler = () => {\n  const currentDashboard = useSelector(selectCurrentDashboard);\n  const hasUrlParamsFiltersEnabled = useHasUrlParamsFiltersEnabled();\n\n  const useQuery = () => {\n    const { search } = useLocation();\n    return useMemo(() => new URLSearchParams(search), [search]);\n  };\n  const query = useQuery();\n\n  const encodeDateFilter = useCallback((filterValue: QueryFilter) => {\n    const safeFilters: string[] = [];\n    if (\n      filterValue.value &&\n      typeof filterValue.value === 'object' &&\n      'startTime' in filterValue.value &&\n      'endTime' in filterValue.value\n    ) {\n      safeFilters.push(\n        `${STARTTIME_URL_KEY}=${(filterValue.value as { startTime: string | number; endTime: string | number }).startTime}`\n      );\n      safeFilters.push(\n        `${ENDTIME_URL_KEY}=${(filterValue.value as { startTime: string | number; endTime: string | number }).endTime}`\n      );\n    }\n    return safeFilters;\n  }, []);\n\n  const encodeGroupByFilter = useCallback((filterValue: QueryFilter) => {\n    if (Array.isArray(filterValue.value)) {\n      return `${FILTERS_URL_MAPPING.GROUP_BY}:${filterValue.value\n        .filter((val: unknown) => val && typeof val === 'object' && 'selected' in val && val.selected)\n        .map((val: unknown) => (val && typeof val === 'object' && 'shortUrlMapping' in val ? val.shortUrlMapping : ''))\n        .filter(v => typeof v === 'string' && v.length > 0)\n        .join(',')}`;\n    }\n    return `${FILTERS_URL_MAPPING.GROUP_BY}:`;\n  }, []);\n\n  const encodeFilters = useCallback(\n    (\n      filterValue: QueryFilter,\n      filterKey: string,\n      keyUrlMapping: string = '',\n      addIdsToUrl: boolean = false\n    ): string[] => {\n      switch (filterKey) {\n        case FILTER_NAMES.DATE:\n          return encodeDateFilter(filterValue);\n        case FILTER_NAMES.GROUP_BY:\n          return [encodeGroupByFilter(filterValue)];\n        case FILTER_NAMES.OPERATOR:\n          return [`op-${keyUrlMapping}:${filterValue.value}`];\n        case FILTER_NAMES.PARTICIPANTS_NAMES:\n        case FILTER_NAMES.PARTICIPANTS_PHONE_NUMBERS:\n        case FILTER_NAMES.PARTICIPANT_NAMES:\n        case FILTER_NAMES.PARTICIPANT_TOUCHPOINTS:\n          if (Array.isArray(filterValue.value)) {\n            return [\n              `${keyUrlMapping}:${filterValue.value\n                .map((val: unknown) => {\n                  if (\n                    typeof val === 'object' &&\n                    val !== null &&\n                    'label' in val &&\n                    // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n                    typeof (val as any).label === 'string'\n                  ) {\n                    return encodeURIComponent(\n                      escapeStructuralDelimiters(truncateFilterValue(filterKey, (val as { label: string }).label))\n                    );\n                  }\n                  return '';\n                })\n                .filter((v: string) => v.length > 0)\n                .join(',')}`\n            ];\n          }\n          return [];\n        default:\n          if (keyUrlMapping) {\n            if (isRangeFilterValue(filterValue.value)) {\n              const rangeValue = filterValue.value;\n              if (rangeValue.min === null && rangeValue.max === null) {\n                return [];\n              }\n\n              const rangeValues = [rangeValue.min ?? '', rangeValue.max ?? ''];\n              if (rangeValue.unit) {\n                rangeValues.push(rangeValue.unit);\n              }\n\n              return [`${keyUrlMapping}:${rangeValues.join(',')}`];\n            } else if (Array.isArray(filterValue.value)) {\n              // Flatten hierarchical filters to extract only leaf nodes (children)\n              const flatItems = getFlatItems(filterValue.value);\n              const selectedItems = flatItems.filter(\n                (val: unknown) =>\n                  val && typeof val === 'object' && 'selected' in val && (val as { selected: boolean }).selected\n              );\n\n              if (addIdsToUrl) {\n                const encodedIds = selectedItems\n                  .map((val: unknown) => {\n                    if (val && typeof val === 'object' && 'id' in val) {\n                      return encodeURIComponent(\n                        escapeStructuralDelimiters(truncateFilterValue(filterKey, (val as { id: string | null }).id ?? ''))\n                      );\n                    }\n                    return '';\n                  })\n                  .filter((v: string) => v.length > 0)\n                  .join(',');\n\n                return encodedIds ? [`${keyUrlMapping}:${encodedIds}`] : [];\n              }\n\n              // Default behavior: use shortUrlMapping\n              return [\n                `${keyUrlMapping}:${selectedItems\n                  .map((val: unknown) => {\n                    if (val && typeof val === 'object' && 'shortUrlMapping' in val) {\n                      return (val as { shortUrlMapping: string }).shortUrlMapping;\n                    }\n                    return '';\n                  })\n                  .filter((v: string) => v.length > 0)\n                  .join(',')}`\n              ];\n            }\n            return [];\n          }\n          return [];\n      }\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    []\n  );\n\n  const hasReachedMaxUrlLength = useCallback(\n    (safeFilters: string[], dateFilters: string[], fixedLengthParams: number) => {\n      const conversationId = query.get(CONVERSATION_ID_URL_KEY);\n      const basicLength = window.location.origin.length + window.location.pathname.length + fixedLengthParams;\n      const filtersLength = `${dateFilters.join('&')}&filters=${safeFilters.join(';')}`.length;\n      const conversationIdLength = conversationId\n        ? `${CONVERSATION_ID_URL_KEY}=${configs}`.length + window.location.hash.length\n        : 0;\n      return basicLength + filtersLength + conversationIdLength > MAX_URL_LENGTH;\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    []\n  );\n\n  const filterSelectedOnly = useCallback((filter: QueryFilter): QueryFilter => {\n    if (Array.isArray(filter.value)) {\n      const selectedValues = (filter.value as ArrayFilter[]).filter((v: ArrayFilter) => v.selected === true);\n      return {\n        ...filter,\n        value: selectedValues\n      };\n    }\n    // For non-array values (like date, operator), keep the filter unchanged\n    return filter;\n  }, []);\n\n  const extractUrlSafeFilters = useCallback(\n    (filters: QueryFilter[], fixedLengthParams: number, isDeletingFilters = false) => {\n      const dashboardConfig = configs[getPageIdFromDashboardType(currentDashboard?.type || '')] || {};\n      const safeFilters: string[] = [];\n      const dateFilters: string[] = [];\n\n      for (let i = 0; i < filters.length; i++) {\n        const filterValue = filters[i];\n        const filterKey = filterValue.filter;\n        let filterValueObj = filters.find((f: QueryFilter) => f.filter === filterKey);\n\n        const checkSelectedOptions = dashboardConfig.availableFilters?.urlMapping?.[filterKey]?.checkSelectedOptions;\n        if (checkSelectedOptions && filterValueObj) {\n          filterValueObj = filterSelectedOnly(filterValueObj);\n        }\n\n        if (\n          !filterValueObj ||\n          (hasReachedMaxUrlLength(safeFilters, dateFilters, fixedLengthParams) && !isDeletingFilters)\n        ) {\n          continue;\n        }\n\n        switch (filterKey) {\n          case FILTER_NAMES.DATE:\n            dateFilters.push(...encodeFilters(filterValue, filterKey));\n            break;\n          case FILTER_NAMES.GROUP_BY:\n            safeFilters.push(...encodeFilters(filterValue, filterKey));\n            break;\n          default: {\n            const explicitMapping = dashboardConfig.availableFilters?.urlMapping?.[filterKey];\n            // Use explicit alias from urlMapping when configured, otherwise fall back to the filter key\n            const urlParamAlias = explicitMapping?.urlParamAlias ?? filterKey;\n            // Default to addIdsToUrl when no explicit mapping (dynamically-loaded filters have no shortUrlMapping)\n            const addIdsToUrl = explicitMapping?.addIdsToUrl ?? !explicitMapping;\n            safeFilters.push(...encodeFilters(filterValueObj, filterKey, urlParamAlias, addIdsToUrl));\n\n            // Check if the next filter is OPERATOR\n            const nextFilter = filters[i + 1];\n            if (nextFilter && nextFilter.filter === FILTER_NAMES.OPERATOR) {\n              // Advance the next OPERATOR filter from the array\n              i++;\n              // Add its encoded value to safeFilters, passing the current urlParamAlias\n              safeFilters.push(...encodeFilters(nextFilter, nextFilter.filter, urlParamAlias));\n            }\n            break;\n          }\n        }\n      }\n\n      // If there are no filters to encode, return an empty string\n      if (dateFilters.length === 0 && safeFilters.length === 0) {\n        return '';\n      }\n\n      // If there are non-date filters, include both date and other filters in the URL\n      if (safeFilters.length > 0) {\n        // Join date filters with '&', then append other filters as a single 'filters' param separated by ';'\n        return [dateFilters.join('&'), `filters=${safeFilters.join(';')}`].filter(Boolean).join('&');\n      }\n\n      // If only date filters exist, join them with '&'\n      return dateFilters.join('&');\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    []\n  );\n\n  const revertUrlMappingKey = useCallback((filterKey: string, mapping: URLMappingType): string => {\n    const mappingKey = Object.keys(mapping).find(key => mapping[key].urlParamAlias === filterKey);\n    if (mappingKey) {\n      return mappingKey;\n    }\n    return filterKey;\n  }, []);\n\n  const revertURLMappingForFilterValue = useCallback(\n    (filterDefinition: ArrayFilter[] | GroupByFilter[], filterValue: string): string => {\n      // Flatten hierarchical filters to search in both parent and child items\n      const flatFilters = getFlatItems(filterDefinition) as ArrayFilter[] | GroupByFilter[];\n      const filter = flatFilters.find(f => f.shortUrlMapping === filterValue);\n      if (filter && filter.id) {\n        return filter.id;\n      }\n      return filterValue;\n    },\n    []\n  );\n\n  const processFilterValues = useCallback(\n    (value: string, defaultFilterValues: ArrayFilter[] | GroupByFilter[], property?: string): string[] => {\n      if (property === FILTER_NAMES.USER_GROUPS) {\n        return value\n          .split(',')\n          .filter(v => v.length > 0)\n          .map(v => unescapeStructuralDelimiters(safeDecodeURIComponent(v)));\n      }\n\n      // Default behavior for other filters\n      return value.split(',').map(val => {\n        const decoded = unescapeStructuralDelimiters(safeDecodeURIComponent(val));\n        if (property === FILTER_NAMES.PARTICIPANTS_PHONE_NUMBERS) {\n          return revertURLMappingForFilterValue(\n            defaultFilterValues,\n            truncateFilterValue(property, sanitizePhoneNumber(decoded))\n          );\n        }\n        return revertURLMappingForFilterValue(defaultFilterValues, truncateFilterValue(property, decoded));\n      });\n    },\n    [revertURLMappingForFilterValue]\n  );\n\n  const decodeFilters = useCallback(\n    (urlFilterStrings: string[], dashboardConfig: DashboardPageConfigType): Partial<QueryFilter>[] => {\n      const filters = [];\n      const filterEntries: [string, string][] = urlFilterStrings\n        .map(str => {\n          const match = str.match(/^([^:]+):(.+)$/);\n          return match ? ([match[1], match[2]] as [string, string]) : null;\n        })\n        .filter((entry): entry is [string, string] => !!entry);\n\n      for (let i = 0; i < filterEntries.length; i++) {\n        const [key, value] = filterEntries[i];\n\n        if (key === FILTERS_URL_MAPPING.GROUP_BY) {\n          filters.push({\n            property: FILTER_NAMES.GROUP_BY,\n            type: FILTERS_TYPES.FILTER,\n            filterValues: [\n              {\n                values: [revertURLMappingForFilterValue(DEFAULT_FILTERS.groupBy, value)],\n                operator: 'equals'\n              }\n            ]\n          });\n          continue;\n        }\n\n        const property = revertUrlMappingKey(key, dashboardConfig.availableFilters.urlMapping || {});\n\n        let filter;\n        // Duration filters\n        if (getFiltersByParserType(FILTERS_PARSER.DURATION).includes(property) && value.split(',').length >= 2) {\n          const [minValue, maxValue, unit] = value.split(',');\n          const parsedMin = minValue !== '' ? Number(minValue) : null;\n          const parsedMax = maxValue !== '' ? Number(maxValue) : null;\n          const min = Number.isFinite(parsedMin) ? parsedMin : null;\n          const max = Number.isFinite(parsedMax) ? parsedMax : null;\n          filter = {\n            property,\n            type: FILTERS_TYPES.FILTER,\n            format: 'duration',\n            ...(unit ? { unit } : {}),\n            filterValues: [\n              { operator: 'gte', values: min },\n              { operator: 'lte', values: max }\n            ]\n          };\n        } else {\n        // All other filters\n\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        const defaultFilterValues = getDefaultFilterValue(property as keyof FilterConfig) as any[] | undefined;\n\n        // If defaultFilterValues is undefined, skip adding this filter\n        if (!defaultFilterValues) {\n          continue;\n        }\n        // Process the filter values\n        const processedValues = processFilterValues(value, defaultFilterValues, property);\n          filter = {\n            property: property,\n            type: FILTERS_TYPES.FILTER,\n            filterValues: [\n              {\n                operator: 'equals',\n                values: processedValues\n              }\n            ]\n          }\n        }\n        // Check if the next entry is an operator (starts with 'op-')\n        const nextEntry = filterEntries[i + 1];\n        if (nextEntry && nextEntry[0].startsWith('op-')) {\n          filters.push({\n            type: FILTER_TYPES.OPERATOR,\n            operator: nextEntry[1],\n            values: [\n              filter\n            ]\n          });\n          i++; // Skip the next entry since we've handled it here\n        } else {\n          filters.push(filter);\n        }\n      }\n\n      return filters as Partial<QueryFilter>[];\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    []\n  );\n\n  const createFiltersUrlParams = useCallback((filters: QueryFilter[], isDeletingFilters = false) => {\n    const currentParams = new URLSearchParams(window.location.search);\n    currentParams.delete(FILTERS_URL_KEY);\n    currentParams.delete(STARTTIME_URL_KEY);\n    currentParams.delete(ENDTIME_URL_KEY);\n    const fixedLengthParams = currentParams.toString().length;\n\n    const filtersQueryString = extractUrlSafeFilters(filters, fixedLengthParams, isDeletingFilters);\n    if (!filtersQueryString && fixedLengthParams === 0) {\n      return '';\n    }\n    const params = [filtersQueryString, fixedLengthParams > 0 ? currentParams.toString() : '']\n      .filter(Boolean)\n      .join('&');\n    return params ? `?${params}` : '';\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  const createConversationUrlParams = useCallback((conversationId: string, hashTab: string, filters: QueryFilter[]) => {\n    const currentParams = new URLSearchParams(window.location.search);\n    currentParams.delete(FILTERS_URL_KEY);\n    currentParams.delete(STARTTIME_URL_KEY);\n    currentParams.delete(ENDTIME_URL_KEY);\n    const fixedLengthParams = currentParams.toString().length;\n\n    if (fixedLengthParams > MAX_URL_LENGTH) {\n      // Cannot add conversation Id\n      return `?${currentParams}`;\n    } else {\n      let filtersQueryString = '';\n      if (hasUrlParamsFiltersEnabled()) {\n        filtersQueryString = extractUrlSafeFilters(filters, fixedLengthParams);\n      }\n      return `?${CONVERSATION_ID_URL_KEY}=${conversationId}${filtersQueryString ? `&${filtersQueryString}` : ''}${fixedLengthParams > 0 ? `&${currentParams}` : ''}${hashTab}`;\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  const decodeFiltersFromUrl = useCallback(\n    (filtersString: string, dashboardConfig: DashboardPageConfigType): Partial<QueryFilter>[] => {\n      const urlFilterStrings = filtersString.split(';');\n      const appliedFilters = decodeFilters(urlFilterStrings, dashboardConfig);\n      return appliedFilters;\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    []\n  );\n\n  return {\n    createConversationUrlParams,\n    createFiltersUrlParams,\n    decodeFiltersFromUrl,\n    processFilterValues\n  };\n};\n\nexport default useUrlParamsHandler;\n","import { DateTime } from 'luxon';\nimport { createSelector } from 'reselect';\nimport { DateRange } from '../../utils/date-range-filter.util';\n\nconst selectRawEndDate = (state: { defaultDate: DateRange }) => state.defaultDate.endTime;\n\nexport const getDefaultEndTime = createSelector([selectRawEndDate], endTime => {\n  if (endTime) {\n    return DateTime.fromISO(endTime);\n  }\n  return DateTime.now().endOf('day');\n});\n","import { DateTime } from 'luxon';\nimport { store } from '../store/store';\n\nexport const getDefaultDateRange = () => {\n  const endTime = store.getState().defaultDate.endTime;\n\n  return {\n    startTime: DateTime.local().startOf('day').toUTC().toISO(),\n    endTime\n  };\n};\n","export const removeIllegalCharacters = (str: string): string => {\n  // Define a regex pattern to match these illegal characters: %, &, <, >, \\, {, }, [, and ]\n  const illegalCharsPattern = /[%&<>\\\\{}[\\]]/g\n\n  const cleanString = str.replace(illegalCharsPattern, '')\n\n  return cleanString\n}\n","import { Settings } from 'luxon';\nimport { ReactNode, useEffect, useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useNavigate, useParams, useLocation } from 'react-router';\nimport { dashboardTypes } from '../../configs/dashboard.config';\nimport { FILTER_CONFIG } from '../../configs/filters.config';\nimport configs from '../../configs/index';\nimport { BANNER_TYPES } from '../../constants/banner-types';\nimport { FILTER_FORMAT, FILTER_NAMES } from '../../constants/filters';\nimport { MIXPANEL_EVENT_NAME } from '../../constants/mixpanel';\nimport useDashboardFilterValidator from '../../hooks/useDashboardFilterValidator';\nimport useFetch from '../../hooks/useFetch';\nimport useHasUrlParamsFiltersEnabled from '../../hooks/useHasUrlParamsFiltersEnabled';\nimport useMixpanel from '../../hooks/useMixpanel';\nimport useUrlParamsHandler, { FILTERS_URL_KEY } from '../../hooks/useUrlParamsHandler';\nimport { useErrorBanner } from '../../providers/ErrorBannersProvider';\nimport { fetchDashboard, getDashboardNameAndType } from '../../services/common/dashboards.service';\nimport { applyMandatoryFilters, populateListNames, parseFiltersToQueryV2 } from '../../services/common/filters.service';\nimport { setNetworkError } from '../../services/common/handle-errors.service';\nimport { getOrganizationPath } from '../../services/common/organization.service';\nimport { getTimeZone } from '../../services/common/users.service';\nimport { clearFilterValidationError, setCurrentDashboard } from '../../store/Analytics/analytics.slice';\nimport { updateEndTime } from '../../store/Analytics/default-date.slice';\nimport {\n  applyBaseQuery,\n  applyFiltersQuery,\n  filtersDashboardLoaded,\n  unloadFilters\n} from '../../store/Analytics/filters.slice';\nimport { clearAllBanners } from '../../store/errorBannerAlert.slice';\nimport {\n  selectCurrentDashboard,\n  selectCurrentOrganization,\n  selectFilterValidationError\n} from '../../store/selectors/analytics';\nimport { getDefaultEndTime } from '../../store/selectors/default-date';\nimport { selectAnalyticsFilters, selectAnalyticsFiltersDataLoaded } from '../../store/selectors/filtersV2';\nimport { DateRangeFilter, QueryFilter } from '../../types/config/FilterTypes';\nimport type { AnalyticsFilter } from '../../types/dashboard/AnalyticsFilters';\nimport { DashboardPageConfigType, DashboardType } from '../../types/dashboard/DashboardTypes';\nimport { RootState } from '../../types/store/RootState';\nimport { CUSTOM_DATE_RANGE } from '../../utils/date-range-filter.util';\nimport { getDefaultDateRange } from '../../utils/default-date.util';\nimport { getMessageFilterQuery, mapCallReportDirectionFilter } from '../../utils/filters.util';\nimport { isUUID } from '../../utils/format.util';\nimport { getPageIdFromDashboardType } from '../../utils/page.util';\nimport { removeIllegalCharacters } from '../../utils/removeIllegalCharacters.util';\n\ninterface WithDashboardProps {\n  children: (props: { loading: boolean }) => ReactNode;\n}\n\nconst WithDashboard = ({ children }: WithDashboardProps) => {\n  const { t } = useTranslation();\n  const { dashboardId } = useParams();\n  const mixpanelTrack = useMixpanel();\n  const validateFilters = useDashboardFilterValidator();\n  const { showBanner } = useErrorBanner();\n\n  const currentOrganization = useSelector(selectCurrentOrganization);\n  const currentLicense = useSelector((state: RootState) => state.analytics.currentLicense);\n  const locale = useSelector((state: RootState) => state.analytics.locale);\n  const currentOrganizationPermissions = useSelector(\n    (state: RootState) => state.analytics.currentOrganizationPermissions\n  );\n  const userId = useSelector((state: RootState) => state.analytics.userId);\n  const basename = useSelector(\n    (state: RootState) => (state.analytics as Record<string, unknown>).basename as string | undefined\n  );\n  const currentDashboard = useSelector(selectCurrentDashboard);\n  const currentFilters = useSelector(selectAnalyticsFilters);\n  const analyticsFiltersDataLoaded = useSelector(selectAnalyticsFiltersDataLoaded);\n  const filterValidationError = useSelector(selectFilterValidationError);\n\n  const endOfTodayTime = useSelector(getDefaultEndTime);\n  const hasUrlParamsFiltersEnabled = useHasUrlParamsFiltersEnabled();\n  const { decodeFiltersFromUrl } = useUrlParamsHandler();\n  const dispatch = useDispatch();\n  const navigate = useNavigate();\n\n  const useQuery = () => {\n    const { search } = useLocation();\n    return useMemo(() => new URLSearchParams(search), [search]);\n  };\n  const query = useQuery();\n  const templateId = query.get('templateId');\n\n  const getFilterDatesOverride = () =>\n    query.get('startTime') && query.get('endTime')\n      ? {\n          option: CUSTOM_DATE_RANGE,\n          startTime: query.get('startTime'),\n          endTime: query.get('endTime')\n        }\n      : null;\n\n  const getCurrentDashboardFilters = (\n    currentDashboard: ReturnType<typeof selectCurrentDashboard>,\n    dashboardConfig: DashboardPageConfigType\n  ) => {\n    if (templateId && currentDashboard?.isSystemDashboard) {\n      const template = dashboardConfig?.templates?.[templateId];\n      if (template && query.get(FILTERS_URL_KEY)) {\n        const cleanedFilters = removeIllegalCharacters(query.get(FILTERS_URL_KEY)!);\n        const parsedFilters = decodeFiltersFromUrl(cleanedFilters, dashboardConfig);\n\n        return { version: 2, items: parsedFilters };\n      } else if (template) {\n        return { version: 2, items: template.query };\n      }\n    }\n    if (hasUrlParamsFiltersEnabled() && query.size > 0 && query.get(FILTERS_URL_KEY)) {\n      const cleanedFilters = removeIllegalCharacters(query.get(FILTERS_URL_KEY)!);\n      const parsedFilters = decodeFiltersFromUrl(cleanedFilters, dashboardConfig);\n\n      return { version: 2, items: parsedFilters };\n    }\n    if (currentDashboard?.type === dashboardTypes.CALL_REPORTS && currentDashboard.filters?.items) {\n      // TODO - remove cast when migrated to TS\n      const filtersItems = mapCallReportDirectionFilter(currentDashboard.filters) as AnalyticsFilter[];\n\n      return { ...currentDashboard.filters, items: filtersItems };\n    }\n    return currentDashboard?.filters;\n  };\n\n  useEffect(() => {\n    const controller = new AbortController();\n    // Always wait that filters are ready before applying.\n    if (currentDashboard && analyticsFiltersDataLoaded) {\n      Settings.defaultZone = currentDashboard.timeZone || getTimeZone();\n\n      dispatch(updateEndTime());\n      const defaultDateRange = getDefaultDateRange();\n      const filterDatesOverride = getFilterDatesOverride();\n      const dashboardConfig = configs[getPageIdFromDashboardType(currentDashboard.type)];\n      const currentDashboardFilters = getCurrentDashboardFilters(currentDashboard, dashboardConfig);\n      const filters = { ...currentFilters, date: defaultDateRange as DateRangeFilter };\n      const filterQuery = parseFiltersToQueryV2(\n        (currentDashboardFilters as { version: number; items: AnalyticsFilter[] }) ?? { version: 2, items: [] },\n        filters,\n        endOfTodayTime\n      );\n\n      if (!filterQuery.find((el: { filter: string }) => el.filter === FILTER_FORMAT.DATE)) {\n        filterQuery.unshift({\n          id: filterQuery.length,\n          filter: FILTER_FORMAT.DATE,\n          value: defaultDateRange as DateRangeFilter,\n          line: FILTER_CONFIG.date.position\n        });\n      }\n\n      if (filterDatesOverride) {\n        const dateFilter = (filterQuery as Array<{ filter: string; value: unknown }>).find(\n          el => el.filter === FILTER_NAMES.DATE\n        );\n        if (dateFilter) {\n          dateFilter.value = filterDatesOverride;\n        }\n      }\n\n      let dashboardFilterQuery = applyMandatoryFilters(\n        filterQuery,\n        dashboardConfig.availableFilters.mandatoryFilters ?? [],\n        currentFilters\n      ) as unknown[];\n\n      if (currentDashboard.type === dashboardTypes.MESSAGE_REPORTS) {\n        // TODO - remove cast when migrated to TS\n        const unifiedMessageReportQuery = getMessageFilterQuery(currentDashboardFilters, filterQuery) as unknown[];\n        dashboardFilterQuery = applyMandatoryFilters(\n          unifiedMessageReportQuery as QueryFilter[],\n          dashboardConfig.availableFilters.mandatoryFilters ?? [],\n          currentFilters\n        ) as unknown[];\n      }\n\n      void (async () => {\n        const populatedUserGroupQuery = (await populateListNames(\n          dashboardFilterQuery as QueryFilter[],\n          currentOrganization?.id,\n          controller\n        )) as unknown[];\n\n        if (!controller.signal.aborted) {\n          dispatch(applyFiltersQuery(populatedUserGroupQuery));\n          dispatch(applyBaseQuery(populatedUserGroupQuery));\n        }\n      })();\n    }\n    return () => {\n      controller.abort();\n      Settings.defaultZone = getTimeZone();\n    };\n    // TODO: handle eslint errors properly\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [analyticsFiltersDataLoaded, currentFilters.hasBeenLoaded, currentDashboard, templateId]);\n\n  const [loading, requestError] = useFetch(\n    async controller => {\n      if (dashboardId) {\n        if (!isUUID(dashboardId)) {\n          void navigate(`${basename}/${getOrganizationPath(currentOrganization!)}/not-found`);\n        }\n\n        dispatch(unloadFilters());\n        dispatch(clearAllBanners());\n        dispatch(clearFilterValidationError());\n\n        const requestedDashboard = await fetchDashboard(currentOrganization!.id, dashboardId, controller);\n        // TODO - remove cast when migrated to TS\n        dispatch(setCurrentDashboard(requestedDashboard as DashboardType));\n        dispatch(filtersDashboardLoaded());\n\n        const eventData = {\n          Action: `Navigation to a dashboard`,\n          Component: 'Dashboard',\n          DashboardName: getDashboardNameAndType(requestedDashboard as Parameters<typeof getDashboardNameAndType>[0]),\n          Template: templateId ?? undefined\n        };\n\n        void mixpanelTrack(MIXPANEL_EVENT_NAME.USER_NAVIGATE, eventData);\n\n        // Validate dashboard filters (non-blocking)\n        void validateFilters(requestedDashboard as DashboardType);\n      }\n    },\n    [dashboardId, templateId, currentOrganization?.id]\n  );\n\n  useEffect(() => {\n    if (requestError) {\n      if (requestError.status === 403) {\n        void navigate(`/${getOrganizationPath(currentOrganization!)}/restricted`);\n      } else if (requestError.status === 404) {\n        void navigate(`/${getOrganizationPath(currentOrganization!)}/not-found`);\n      } else {\n        console.error(requestError);\n        setNetworkError({\n          dispatch,\n          requestError,\n          permissions: currentOrganizationPermissions,\n          currentOrganization,\n          userId,\n          currentLicense,\n          message: t('An error occurred while fetching the board'),\n          locale\n        });\n      }\n    }\n    // TODO: handle eslint errors properly\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [requestError]);\n\n  useEffect(() => {\n    if (filterValidationError) {\n      showBanner({\n        message: filterValidationError.message,\n        type: BANNER_TYPES.VALIDATION\n      });\n    }\n  }, [filterValidationError, showBanner]);\n\n  return children({\n    loading\n  });\n};\n\nexport default WithDashboard;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { Navigate } from 'react-router';\nimport { routes as reportingRouteConfig } from '../../constants/routes';\nimport { useAccessCheck } from '../../hooks/permissions/useAccessCheck';\nimport { getDefaultBoard } from '../../services/common/dashboards.service';\nimport {\n  selectCapabilities,\n  selectCurrentDashboards,\n  selectCurrentOrganizationId\n} from '../../store/selectors/analytics';\nimport { DashboardRouteType, DashboardType } from '../../types/dashboard/DashboardTypes';\nimport { RootState } from '../../types/store/RootState';\n\ninterface WithPermissionsProps {\n  pageId?: string | null;\n  dashboard?: Pick<DashboardType, 'isSharedDashboard'>;\n  children: React.ReactNode;\n}\n\nconst WithPermissions = ({ pageId, dashboard, children }: WithPermissionsProps) => {\n  const currentOrganizationPermissions = useSelector(\n    (state: RootState) => state.analytics.currentOrganizationPermissions\n  );\n  const organizationId = useSelector(selectCurrentOrganizationId);\n  const currentDashboards = useSelector(selectCurrentDashboards);\n  const capabilities = useSelector(selectCapabilities);\n\n  const config: Partial<DashboardRouteType> = reportingRouteConfig.find(routeConfig => pageId === routeConfig.id) || {};\n\n  const hasAccess = useAccessCheck();\n\n  // A route declaring no `access` at all is a misconfiguration, not an unrestricted page\n  const declaresAccessRequirement = !!config.access;\n  const perm =\n    declaresAccessRequirement &&\n    (hasAccess(config.access) || (!!config.secondaryAccess && hasAccess(config.secondaryAccess)));\n  if (perm || dashboard?.isSharedDashboard) {\n    return children;\n  }\n\n  const defaultBoard = getDefaultBoard(currentDashboards, currentOrganizationPermissions, capabilities) as\n    DashboardType | null | undefined;\n  if (defaultBoard) {\n    return <Navigate to={`/${organizationId}/dashboard/${defaultBoard.id}`} />;\n  }\n  // TODO Change to the no dashboard page\n  return <Navigate to={`/${organizationId}/empty`} />;\n};\n\nexport default WithPermissions;\n",".errorBannerAlertContainer {\n  background: transparent;\n  display: flex;\n  flex-direction: column;\n  margin: 0 calc(-1 * var(--goto-spacing-03));\n\n  > * {\n    width: 100%;\n    border-radius: 0;\n  }\n\n  > *:not(:last-child) {\n    margin-bottom: var(--goto-spacing-02);\n  }\n}\n","import { Alert } from '@getgo/chameleon-web-react-wrapper';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { hideErrorBannerAlert, Banner } from '../../../store/errorBannerAlert.slice';\nimport { RootState } from '../../../types/store/RootState';\nimport styles from './ErrorBannerAlert.module.scss';\n\nconst ErrorBannerAlert = () => {\n  const { t } = useTranslation();\n  const dispatch = useDispatch();\n  const { banners } = useSelector((state: RootState) => state.errorBannerAlert);\n\n  if (banners.length === 0) {\n    return null;\n  }\n\n  return (\n    <div className={styles.errorBannerAlertContainer}>\n      {banners.map((banner: Banner) => (\n        <Alert\n          // Key provides stable identity for each banner and enables proper list reconciliation\n          key={banner.id}\n          variant=\"warning\"\n          onClose={() => dispatch(hideErrorBannerAlert({ id: banner.id }))}\n          closable\n        >\n          {t(banner.message)}\n        </Alert>\n      ))}\n    </div>\n  );\n};\n\nexport default ErrorBannerAlert;\n","import { Fragment } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Permissions } from '../../../constants/permissions';\nimport { selectCurrentDashboard, selectFeatureFlag } from '../../../store/selectors/analytics';\nimport { FeatureFlagType } from '../../../utils/feature-flag';\n\nexport interface Feature {\n  id: string;\n  dashboardTypes: string[];\n  requiredFeatureFlag?: FeatureFlagType;\n  requiredPermission?: Permissions;\n}\n\nconst features: Feature[] = [\n  {\n    id: 'unified-analytics-agent-state',\n    dashboardTypes: ['AGENT_EFFECTIVENESS']\n  }\n];\n\nconst FeatureAnchor = () => {\n  const currentDashboard = useSelector(selectCurrentDashboard);\n  const hasFeatureFlag = useSelector(selectFeatureFlag);\n\n  const hasFeature = (feature: Feature) => {\n    if (\n      !currentDashboard ||\n      feature.dashboardTypes.length <= 0 ||\n      !feature.dashboardTypes.includes(currentDashboard.type)\n    ) {\n      return false;\n    }\n\n    if (feature.requiredFeatureFlag && !hasFeatureFlag(feature.requiredFeatureFlag)) {\n      return false;\n    }\n\n    return true;\n  };\n\n  return features.map(feature => (\n    <Fragment key={feature.id}>{hasFeature(feature) && <div id={feature.id} />}</Fragment>\n  ));\n};\n\nexport default FeatureAnchor;\n","import { useTranslation } from 'react-i18next';\nimport { conversationResolvedReasons } from '../../../constants/resolved-conversations';\n\nexport const useResolvedConversationLabels = () => {\n  const { t } = useTranslation();\n  return {\n    [conversationResolvedReasons.NO_ANSWER]: t('No answer'),\n    [conversationResolvedReasons.RESOLVED]: t('Resolved'),\n    [conversationResolvedReasons.SPAM]: t('Spam'),\n    [conversationResolvedReasons.RESOLVED_BY_ADMIN]: t('Resolved by admin'),\n    [conversationResolvedReasons.RESOLVED_BY_CHAT_ASSISTANT]: t('Resolved by chat assistant'),\n    [conversationResolvedReasons.AUTO_CLOSED_NO_ACTIVITY]: t('Resolved automatically')\n  };\n};\n\nexport const orderedResolutionReasons = [\n  conversationResolvedReasons.RESOLVED,\n  conversationResolvedReasons.RESOLVED_BY_CHAT_ASSISTANT,\n  conversationResolvedReasons.AUTO_CLOSED_NO_ACTIVITY,\n  conversationResolvedReasons.NO_ANSWER,\n  conversationResolvedReasons.SPAM\n];\n\nexport const applyOrderedResolutionReasonsFilter = (availableReasons: String[]) =>\n  orderedResolutionReasons.filter(reason => availableReasons?.includes(reason));\n","import { TooltipWrapper } from '@analytics-common-ui/layout';\nimport { FlowchartOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { useTranslation } from 'react-i18next';\n\ninterface HierarchyIndicatorProps {\n  hierarchyPath: string[];\n}\n\n/**\n * HierarchyIndicator displays a flowchart icon with a tooltip showing the hierarchy path.\n * Used to indicate parent-child relationships in nested structures like user groups.\n */\nconst HierarchyIndicator = ({ hierarchyPath }: HierarchyIndicatorProps) => {\n  const { t } = useTranslation();\n\n  return <TooltipWrapper position=\"top-center\" title={t('Path: {{path}}', { path: hierarchyPath.join(' / ') })}><FlowchartOutlinedIcon /></TooltipWrapper>;\n};\n\nexport default HierarchyIndicator;\n","import HierarchyIndicator from '../components/common/HierarchyIndicator/HierarchyIndicator';\nimport { FILTER_NAMES } from '../constants/filters';\nimport { fetchFilters } from '../services/common/filters.service';\nimport { FilterItem } from '../types/config/FilterTypes';\n\n// Base shape for items returned by server-side paginated filter APIs.\nexport interface ServerListItem {\n  id?: number | string;\n  key: string;\n  name: string;\n}\n\nexport interface UserGroup extends ServerListItem {\n  key: string;\n  namePath?: string[];\n  totalUsers?: number;\n}\n\nexport interface Topic {\n  name: string;\n}\n\nexport type ServerSideSearchHandler = (\n  organizationId: string,\n  searchTerm: string,\n  selected: boolean,\n  controller?: AbortController,\n  startTime?: string,\n  endTime?: string\n) => Promise<FilterItem[]>;\n\n/**\n * Transform raw user group data from API to filter format\n */\nexport const transformUserGroupToFilterItem = (item: ServerListItem, selected = false): FilterItem => {\n  const userGroup = item as UserGroup;\n  return {\n    id: userGroup.key,\n    label: userGroup.name,\n    selected,\n    userCount: userGroup.totalUsers || 0,\n    ...(userGroup.namePath && userGroup.namePath.length > 1\n      ? {\n          endAdornment: <HierarchyIndicator hierarchyPath={userGroup.namePath.slice(0, -1)} />\n        }\n      : {})\n  };\n};\n\n/**\n * Transform raw topic data from API to filter format\n */\nexport const transformToItemsWithNameAsKey = (item: ServerListItem, selected = false): FilterItem => ({\n  id: item.name,\n  label: item.name,\n  selected\n});\n\n/**\n * Handler for fetching and transforming user groups\n */\nconst handleUserGroupsSearch: ServerSideSearchHandler = async (\n  organizationId: string,\n  searchTerm = '',\n  selected = false,\n  controller?: AbortController,\n  startTime = '',\n  endTime = ''\n): Promise<FilterItem[]> => {\n  const query = searchTerm ? { userGroupQuery: searchTerm } : undefined;\n\n  // Create a new AbortController if one wasn't provided\n  const abortController = controller || new AbortController();\n\n  const response = (await fetchFilters(\n    organizationId,\n    [FILTER_NAMES.USER_GROUPS],\n    startTime,\n    endTime,\n    abortController,\n    query\n  )) as Record<string, UserGroup[]>;\n  const results = response[FILTER_NAMES.USER_GROUPS] || [];\n  return results.map((userGroup: UserGroup) => transformUserGroupToFilterItem(userGroup, selected));\n};\n\n/**\n * Handler for fetching and transforming topics for Call Reports\n */\nconst handleCallTopicsSearch: ServerSideSearchHandler = async (\n  organizationId: string,\n  searchTerm = '',\n  selected = false,\n  controller?: AbortController,\n  startTime = '',\n  endTime = ''\n): Promise<FilterItem[]> => {\n  const query = searchTerm ? { topicQuery: searchTerm } : undefined;\n  const abortController = controller || new AbortController();\n\n  const response = (await fetchFilters(\n    organizationId,\n    [FILTER_NAMES.CALL_TOPICS],\n    startTime,\n    endTime,\n    abortController,\n    query\n  )) as Record<string, { items: Topic[]; total: number; page: number; pageSize: number }>;\n\n  const results = response[FILTER_NAMES.CALL_TOPICS]?.items || [];\n  return results.map((topic: Topic) => transformToItemsWithNameAsKey(topic as unknown as ServerListItem, selected));\n};\n\n/**\n * Server-side search handlers for different filter types\n * Maps filter IDs to their respective search handlers\n */\nconst SERVER_SIDE_SEARCH_HANDLERS: Record<string, ServerSideSearchHandler> = {\n  [FILTER_NAMES.USER_GROUPS]: handleUserGroupsSearch,\n  [FILTER_NAMES.CALL_TOPICS]: handleCallTopicsSearch\n};\n\n/**\n * Generic server-side search handler that routes to the appropriate handler based on filter ID\n */\nexport const handleServerSideSearch = async (\n  filterId: string,\n  organizationId: string,\n  searchTerm = '',\n  selected = false,\n  controller?: AbortController,\n  startTime?: string,\n  endTime?: string\n): Promise<FilterItem[]> => {\n  const handler = SERVER_SIDE_SEARCH_HANDLERS[filterId];\n\n  if (!handler) {\n    console.error(`No server-side search handler found for filter: ${filterId}`);\n    return [];\n  }\n\n  try {\n    return await handler(organizationId, searchTerm, selected, controller, startTime, endTime);\n  } catch (error) {\n    console.error(`Failed to search ${filterId}:`, error);\n    return [];\n  }\n};\n","import { orderBy } from 'lodash';\nimport { ReactNode, useEffect, useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n  applyOrderedResolutionReasonsFilter,\n  useResolvedConversationLabels\n} from '../../components/cc-boards/ResolvedConversationTable/UseResolvedConversationLabels';\nimport configs from '../../configs/index';\nimport { DEFAULT_QUERY_FILTER, FILTER_NAMES } from '../../constants/filters';\nimport { conversationSourcesLabels } from '../../constants/resolved-conversations';\nimport { useAccessCheck } from '../../hooks/permissions/useAccessCheck';\nimport useFetch from '../../hooks/useFetch';\nimport {\n  applySavedFilters,\n  fetchFilters,\n  fetchFiltersV2,\n  getQueriedCachedFilters,\n  setQueriedCachedFilters\n} from '../../services/common/filters.service';\nimport { setNetworkError } from '../../services/common/handle-errors.service';\nimport { applyFilters, getCurrentFilters } from '../../store/Analytics/filters.slice';\nimport {\n  selectCurrentDashboard,\n  selectCurrentOrganizationId,\n  selectFeatureFlag\n} from '../../store/selectors/analytics';\nimport { getDefaultEndTime } from '../../store/selectors/default-date';\nimport {\n  selectAnalyticsFilters,\n  selectFiltersDashboardLoaded,\n  selectQueriedDateRange\n} from '../../store/selectors/filtersV2';\nimport { FilterConfig, FilterDefinition } from '../../types/config/FilterTypes';\nimport { RootState } from '../../types/store/RootState';\nimport { FEATURE_FLAGS } from '../../utils/feature-flag/index';\nimport { getFilterConfigOverrides } from '../../utils/filters.util';\nimport { getPageIdFromDashboardType } from '../../utils/page.util';\nimport { transformToItemsWithNameAsKey, ServerListItem } from '../../utils/server-list-filters.util';\n\nconst mapFilterItems = <T, R>(items: T[] | undefined | null, mapFn: (item: T) => R): R[] => items?.map(mapFn) ?? [];\n\ninterface BuildFiltersFromResponseParams {\n  currentFilters: Record<string, unknown>;\n  filters: Record<string, unknown>;\n  getCachedFilter: (filter: string) => unknown[] | null;\n  featureFlagSelector: (flag: string) => boolean;\n  t: (key: string, options?: Record<string, unknown>) => string;\n  conversationSourcesLabels: Record<string, string>;\n  resolutionReasonsLabels: Record<string, string>;\n  filterConfig: Record<string, FilterDefinition>;\n}\n\nconst buildFiltersFromResponse = ({\n  currentFilters,\n  filters,\n  getCachedFilter,\n  featureFlagSelector,\n  t,\n  conversationSourcesLabels,\n  resolutionReasonsLabels,\n  filterConfig\n}: BuildFiltersFromResponseParams) => {\n  // TODO CCE-2708 to remove after dispositions data migration\n  const getDispositions = () =>\n    mapFilterItems(\n      (getCachedFilter('dispositions') ?? (filters as Record<string, unknown[]>)['dispositions']) as Array<{\n        category: string;\n        name: string;\n        [key: string]: unknown;\n      }>,\n      disposition => ({\n        ...disposition,\n        label: `${disposition.category} - ${disposition.name}`,\n        selected: true\n      })\n    );\n\n  const dispositionId = featureFlagSelector(FEATURE_FLAGS.CUSTOM_DISPOSITION_FILTER)\n    ? orderBy(getDispositions(), ['label'], ['asc'])\n    : (currentFilters as Record<string, unknown>).dispositionId;\n\n  return {\n    ...currentFilters,\n    dispositionId,\n    [FILTER_NAMES.QUERY_TAG_IDS]: mapFilterItems(\n      (getCachedFilter('tags') ?? (filters as Record<string, unknown[]>).tags) as Array<{\n        name: string;\n        [key: string]: unknown;\n      }>,\n      tag => ({ ...tag, label: tag.name, selected: true })\n    ),\n    queues: mapFilterItems(\n      (getCachedFilter('callQueues') ?? (filters as Record<string, unknown[]>).callQueues) as Array<{\n        name: string;\n        [key: string]: unknown;\n      }>,\n      queue => ({\n        ...queue,\n        label: queue.name,\n        selected: filterConfig[FILTER_NAMES.QUEUES]?.listOptions?.enableSelectAll ?? true\n      })\n    ),\n    [FILTER_NAMES.TOPICS]: mapFilterItems(\n      (getCachedFilter(filterConfig[FILTER_NAMES.TOPICS]?.id) ??\n        (filters as Record<string, unknown[]>)[filterConfig[FILTER_NAMES.TOPICS]?.id]) as Array<\n        Record<string, unknown>\n      >,\n      topic => transformToItemsWithNameAsKey(topic as unknown as ServerListItem, true)\n    ),\n    agents: mapFilterItems(\n      (getCachedFilter('agents') ?? (filters as Record<string, unknown[]>).agents) as Array<{\n        firstName: string;\n        lastName: string;\n        [key: string]: unknown;\n      }>,\n      agent => ({ ...agent, label: `${agent.firstName} ${agent.lastName}`, selected: true })\n    ),\n    outcomes: mapFilterItems(\n      (getCachedFilter('callOutcomes') ?? (filters as Record<string, unknown[]>).callOutcomes) as Array<{\n        label: string;\n        [key: string]: unknown;\n      }>,\n      el => ({ ...el, label: t(el.label), selected: true })\n    ),\n    leftQueueReasons: mapFilterItems(\n      (getCachedFilter('leftQueueReasons') ?? (filters as Record<string, unknown[]>).leftQueueReasons) as Array<{\n        label: string;\n        [key: string]: unknown;\n      }>,\n      el => ({ ...el, label: t(el.label), selected: true })\n    ).sort((a, b) => (a.label as string).localeCompare(b.label as string)),\n    chatQueues: mapFilterItems(\n      (getCachedFilter('chatQueues') ?? (filters as Record<string, unknown[]>).chatQueues) as Array<{\n        name: string;\n        [key: string]: unknown;\n      }>,\n      chatQueue => ({ ...chatQueue, label: chatQueue.name, selected: true })\n    ),\n    tags: mapFilterItems(\n      (getCachedFilter('tags') ?? (filters as Record<string, unknown[]>).tags) as Array<{\n        name: string;\n        [key: string]: unknown;\n      }>,\n      tag => ({ ...tag, label: tag.name, selected: true })\n    ),\n    conversationSources: mapFilterItems(\n      (getCachedFilter('conversationSources') ??\n        (filters as Record<string, unknown[]>).conversationSources) as string[],\n      src => ({\n        id: src,\n        label: conversationSourcesLabels[src] || src,\n        selected: true\n      })\n    ),\n    [FILTER_NAMES.CSAT_CONVERSATION_SOURCES]: mapFilterItems(\n      (getCachedFilter(FILTER_NAMES.CSAT_CONVERSATION_SOURCES) ??\n        (filters as Record<string, unknown[]>).csatConversationSources) as string[],\n      src => ({\n        id: src,\n        label: conversationSourcesLabels[src] || src,\n        selected: true\n      })\n    ),\n    [FILTER_NAMES.RESOLUTION_REASON]: mapFilterItems(\n      applyOrderedResolutionReasonsFilter(\n        (getCachedFilter(FILTER_NAMES.RESOLUTION_REASON) ??\n          (filters as Record<string, unknown[]>).resolutionReason) as string[]\n      ),\n      reason => ({\n        id: reason,\n        label: resolutionReasonsLabels[reason],\n        selected: true\n      })\n    ),\n    [FILTER_NAMES.TOPIC_FLAGS]: mapFilterItems(\n      (getCachedFilter(filterConfig[FILTER_NAMES.TOPIC_FLAGS]?.id) ??\n        (filters as Record<string, unknown[]>)[filterConfig[FILTER_NAMES.TOPIC_FLAGS]?.id]) as Array<{\n        id: string;\n        name: string;\n      }>,\n      topicFlag => ({ id: topicFlag.id, label: topicFlag.name, selected: true })\n    ),\n    [FILTER_NAMES.CALL_TOPICS]: mapFilterItems(\n      ((\n        (getCachedFilter(FILTER_NAMES.CALL_TOPICS) as { items?: Array<Record<string, unknown>> } | null) ??\n        (filters as unknown as Record<string, { items: Array<Record<string, unknown>> }>).callTopics\n      )?.items ?? []) as Array<Record<string, unknown>>,\n      topic => transformToItemsWithNameAsKey(topic as unknown as ServerListItem, false)\n    ),\n    [FILTER_NAMES.QUALITY_MANAGEMENT_USER]: mapFilterItems(\n      ((\n        (getCachedFilter(FILTER_NAMES.QUALITY_MANAGEMENT_USER) as {\n          items?: Array<{ key: string; name: string }>;\n        } | null) ??\n        (filters as unknown as Record<string, { items: Array<{ key: string; name: string }> }>).qualityManagementUser\n      )?.items ?? []) as Array<{ key: string; name: string }>,\n      item => ({\n        id: item.key,\n        label: item.name\n      })\n    ),\n    [FILTER_NAMES.QUALITY_MANAGEMENT_CATEGORY]: mapFilterItems(\n      ((\n        (getCachedFilter(FILTER_NAMES.QUALITY_MANAGEMENT_CATEGORY) as {\n          items?: Array<Record<string, unknown> & { id: string | number; description: string }>;\n        } | null) ??\n        (\n          filters as unknown as Record<\n            string,\n            { items: Array<Record<string, unknown> & { id: string | number; description: string }> }\n          >\n        ).qualityManagementCategory\n      )?.items ?? []) as Array<Record<string, unknown> & { id: string | number; description: string }>,\n      item => ({\n        ...item,\n        id: String(item.id),\n        label: item.description\n      })\n    ),\n    [FILTER_NAMES.QUALITY_MANAGEMENT_QUESTION]: mapFilterItems(\n      ((\n        (getCachedFilter(FILTER_NAMES.QUALITY_MANAGEMENT_QUESTION) as {\n          items?: Array<Record<string, unknown> & { id: string | number; description: string }>;\n        } | null) ??\n        (\n          filters as unknown as Record<\n            string,\n            { items: Array<Record<string, unknown> & { id: string | number; description: string }> }\n          >\n        ).qualityManagementQuestion\n      )?.items ?? []) as Array<Record<string, unknown> & { id: string | number; description: string }>,\n      item => ({\n        ...item,\n        id: String(item.id),\n        label: item.description\n      })\n    )\n    // USER_GROUPS is intentionally absent : it's loaded on demand via useServerSidePagination\n  };\n};\n\ninterface WithFilterControllerProps {\n  children: (props: { loading: boolean }) => ReactNode;\n}\n\nconst WithFilterController = ({ children }: WithFilterControllerProps) => {\n  const { currentOrganization, userId, currentLicense, locale, currentOrganizationPermissions } = useSelector(\n    (state: RootState) => state.analytics\n  );\n  const filtersDashboardLoaded = useSelector(selectFiltersDashboardLoaded);\n  const currentFilters = useSelector(selectAnalyticsFilters);\n  const organizationId = useSelector(selectCurrentOrganizationId) as string;\n  const dashboard = useSelector(selectCurrentDashboard);\n  const endOfTodayTime = useSelector(getDefaultEndTime);\n  const { startTime, endTime } = useSelector(selectQueriedDateRange);\n  const featureFlagSelector = useSelector(selectFeatureFlag);\n  const canAccess = useAccessCheck();\n  const dispatch = useDispatch();\n  const { t } = useTranslation();\n  const resolutionReasonsLabels = useResolvedConversationLabels();\n\n  const getCachedFilter = (filter: string) =>\n    (getQueriedCachedFilters() as Array<{ filter: string; values: unknown[] }>).find(el => el.filter === filter)\n      ?.values ?? null;\n\n  const dashboardConfig = useMemo(() => configs[getPageIdFromDashboardType(dashboard!.type)] || {}, [dashboard]);\n  const filterConfig = useMemo(() => getFilterConfigOverrides(dashboardConfig), [dashboardConfig]);\n\n  const [loading, requestError] = useFetch(\n    async controller => {\n      if (filtersDashboardLoaded) {\n        const shouldQueryFilter = (filterName: string) => {\n          if (\n            getQueriedCachedFilters().find((cachedFilter: { filter: string }) => cachedFilter.filter === filterName)\n          ) {\n            return false;\n          }\n          const config = filterConfig[filterName];\n          if (config?.access && !canAccess(config.access)) {\n            return false;\n          }\n          if (config?.featureFlag && !featureFlagSelector(config.featureFlag)) {\n            return false;\n          }\n          return true;\n        };\n        const filtersToQuery = dashboardConfig.availableFilters.filtersToQuery.filter(\n          (filterName: string) => shouldQueryFilter(filterName) && filterConfig[filterName]?.useV2 !== true\n        );\n        const v2FiltersToQuery = dashboardConfig.availableFilters.filtersToQuery.filter(\n          (filterName: string) => shouldQueryFilter(filterName) && filterConfig[filterName]?.useV2 === true\n        );\n\n        let filters: Record<string, unknown> = {};\n        if (filtersToQuery.length > 0) {\n          filters = await (\n            fetchFilters as (\n              a: string,\n              b: unknown,\n              c: string,\n              d: string,\n              e: AbortController\n            ) => Promise<Record<string, unknown>>\n          )(organizationId, filtersToQuery, startTime, endTime, controller);\n        }\n\n        if (v2FiltersToQuery.length > 0) {\n          const v2FilterResponses = await Promise.all(\n            v2FiltersToQuery.map(async (filterName: string): Promise<[string, unknown]> => [\n              filterName,\n              await (\n                fetchFiltersV2 as (params: {\n                  organizationId: string;\n                  filterName: string;\n                  filterQuery: string;\n                  controller: AbortController;\n                }) => Promise<unknown>\n              )({\n                organizationId,\n                filterName: filterConfig[filterName].paginationOptions!.filterName,\n                filterQuery: '',\n                controller\n              })\n            ])\n          );\n          filters = {\n            ...filters,\n            ...Object.fromEntries(v2FilterResponses)\n          };\n        }\n\n        const cachedFilters = [...(getQueriedCachedFilters() as Array<{ filter: string; values: unknown[] }>)];\n        dashboardConfig.availableFilters.filtersToQuery.forEach((el: string) => {\n          if (!cachedFilters.find((cachedFilter: { filter: string }) => cachedFilter.filter === el)) {\n            cachedFilters.push({ filter: el, values: (filters[el] as unknown[]) ?? [] });\n          }\n        });\n        setQueriedCachedFilters(cachedFilters);\n\n        const newFilters = buildFiltersFromResponse({\n          currentFilters: currentFilters as unknown as Record<string, unknown>,\n          filters,\n          getCachedFilter,\n          featureFlagSelector,\n          t,\n          conversationSourcesLabels: conversationSourcesLabels as Record<string, string>,\n          resolutionReasonsLabels,\n          filterConfig\n        });\n\n        const baseFilters = applySavedFilters(\n          newFilters as unknown as Partial<FilterConfig>,\n          (dashboard?.filters || {}) as unknown as Record<string, { value?: unknown } | undefined>,\n          endOfTodayTime\n        );\n\n        // Applying both old and new filtration\n        dispatch({\n          type: '[REP] Apply filters',\n          payload: {\n            ...baseFilters,\n            isSystemDashboard: dashboard?.isSystemDashboard || false,\n            base: { ...getCurrentFilters(baseFilters) }\n          }\n        });\n\n        dispatch(\n          applyFilters({\n            ...baseFilters,\n            isSystemDashboard: dashboard?.isSystemDashboard || false,\n            base: { ...getCurrentFilters(baseFilters) },\n            query: [DEFAULT_QUERY_FILTER.date]\n          })\n        );\n      }\n    },\n    [dashboard, filtersDashboardLoaded],\n    false\n  );\n\n  useEffect(() => {\n    if (requestError) {\n      console.error(requestError);\n      setNetworkError({\n        dispatch,\n        requestError,\n        permissions: currentOrganizationPermissions,\n        currentOrganization,\n        userId,\n        currentLicense,\n        message: t('An error occurred while fetching filters'),\n        locale\n      });\n    }\n  }, [currentLicense, currentOrganization, currentOrganizationPermissions, dispatch, locale, requestError, t, userId]);\n\n  return children({ loading });\n};\n\nexport default WithFilterController;\n","import { shuffle as _shuffle } from 'lodash';\nimport { useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\n\ninterface TipResult {\n  value: string;\n}\n\nexport interface TipsGenerator {\n  next(): TipResult;\n  previous(): TipResult;\n  [Symbol.iterator](): TipsGenerator;\n}\n\nexport function useTipsAndTricks(): TipsGenerator {\n  const { t } = useTranslation();\n  const generatorRef = useRef<TipsGenerator | null>(null);\n\n  if (!generatorRef.current) {\n    const tips = [\n      t('Did you know? You can change your chart view from the gear icon in your report page.'),\n      t(\n        'Did you know? Approximately 18.7 billion texts are sent worldwide every day! You can text and message customers using our Multi-Channel feature included in all GoTo Contact plans!'\n      ),\n      t(\n        'Did you know? If the caller does not have a valid caller ID, they will not be offered the callback option, regardless of the wait time threshold being exceeded.'\n      )\n    ];\n\n    const shuffledTips = _shuffle(tips);\n    let currentIndex = -1;\n\n    generatorRef.current = {\n      next() {\n        currentIndex = currentIndex === shuffledTips.length - 1 ? 0 : currentIndex + 1;\n\n        return { value: shuffledTips[currentIndex] };\n      },\n      previous() {\n        currentIndex = currentIndex <= 0 ? shuffledTips.length - 1 : currentIndex - 1;\n\n        return { value: shuffledTips[currentIndex] };\n      },\n      [Symbol.iterator]() {\n        return this;\n      }\n    };\n  }\n\n  return generatorRef.current;\n}\n","import { get as _get } from 'lodash';\nimport { createSelector } from 'reselect';\n\nconst selectEvents = state => state.events;\n\nexport const selectTipsAndTricksIsLoaded = createSelector(selectEvents, events => _get(events, ['isLoaded'], false));\n\nexport const selectShowTipsAndTricks = createSelector(selectEvents, events =>\n  _get(events, ['showTipsAndTricks'], false)\n);\n\nexport const selectShowTimeoutDialog = createSelector(selectEvents, events =>\n  _get(events, ['showTimeoutDialog'], false)\n);\n",".fadeWrapper__default {\n    opacity: 0;\n}\n\n.fadeWrapper__fadeIn {\n    opacity: 1;\n\n    &_slow {\n        transition: opacity 700ms;\n    }\n\n    &_medium {\n        transition: opacity 500ms;\n    }\n\n    &_fast {\n        transition: opacity 200ms;\n    }\n}\n\n.fadeWrapper__fadeOut {\n    opacity: 0;\n\n    &_slow {\n        transition: opacity 700ms;\n    }\n\n    &_medium {\n        transition: opacity 500ms;\n    }\n\n    &_fast {\n        transition: opacity 200ms;\n    }\n}\n","import clsx from 'clsx';\nimport { type ReactNode } from 'react';\nimport { useEffect, useState } from 'react';\nimport styles from './FadeWrapper.module.scss';\n\ntype FadeSpeed = 'fast' | 'medium' | 'slow';\n\ninterface FadeWrapperProps {\n  children: ReactNode;\n  fadeInSpeed?: FadeSpeed;\n  fadeOutSpeed?: FadeSpeed;\n  isFadingIn: boolean;\n  onVisibilityChange: (isVisible: boolean) => void;\n}\n\nconst FadeWrapper = ({\n  children,\n  fadeInSpeed = 'medium',\n  fadeOutSpeed = 'fast',\n  isFadingIn,\n  onVisibilityChange\n}: FadeWrapperProps) => {\n  const [isFirstRender, setIsFirstRender] = useState(true);\n\n  useEffect(() => {\n    setIsFirstRender(false);\n  }, []);\n\n  const onEvent = () => {\n    onVisibilityChange(isFadingIn);\n  };\n\n  return (\n    <div\n      data-testid=\"fadeDiv\"\n      onTransitionEnd={onEvent}\n      className={clsx({\n        [styles.fadeWrapper__default]: isFirstRender,\n        [styles.fadeWrapper__fadeIn]: !isFirstRender && isFadingIn,\n        [styles.fadeWrapper__fadeIn_slow]: !isFirstRender && isFadingIn && fadeInSpeed === 'slow',\n        [styles.fadeWrapper__fadeIn_medium]: !isFirstRender && isFadingIn && fadeInSpeed === 'medium',\n        [styles.fadeWrapper__fadeIn_fast]: !isFirstRender && isFadingIn && fadeInSpeed === 'fast',\n        [styles.fadeWrapper__fadeOut]: !isFirstRender && !isFadingIn,\n        [styles.fadeWrapper__fadeOut_slow]: !isFirstRender && !isFadingIn && fadeOutSpeed === 'slow',\n        [styles.fadeWrapper__fadeOut_medium]: !isFirstRender && !isFadingIn && fadeOutSpeed === 'medium',\n        [styles.fadeWrapper__fadeOut_fast]: !isFirstRender && !isFadingIn && fadeOutSpeed === 'fast'\n      })}>\n      {children}\n    </div>\n  );\n};\n\nexport default FadeWrapper;\n",".tipsAndTricksBanner {\n    padding: var(--goto-spacing-02) var(--goto-spacing-03);\n    width: 100%;\n    margin-bottom: var(--goto-spacing-03);\n\n    &[variant=\"success\"] {\n        background-color: var(--goto-surface-color-success-secondary);\n    }\n}\n\n.tipsAndTricksBanner__container {\n    display: flex;\n    flex-direction: row;\n    align-items: flex-end;\n    justify-content: space-between;\n    margin-top: var(--goto-spacing-02);\n}\n\n.tipsAndTricksBanner__buttonsContainer {\n    display: flex;\n    flex-direction: row;\n    margin-right: var(--goto-spacing-05);\n}\n\n.tipsAndTricksBanner__closeButton {\n    margin-left: var(--goto-spacing-05);\n}\n","import {\n  CheckmarkOutlinedIcon,\n  ChevronLeftOutlinedIcon,\n  ChevronRightOutlinedIcon,\n  InfoOutlinedIcon\n} from '@getgo/chameleon-icons/react';\nimport { Alert, Button, IconButton, Typography } from '@getgo/chameleon-web-react-wrapper';\nimport { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useTipsAndTricks } from '../../../hooks/useTipsAndTricks';\nimport { setShowTipsAndTricks } from '../../../store/Analytics/events.slice';\nimport { selectShowTipsAndTricks, selectTipsAndTricksIsLoaded } from '../../../store/selectors/events';\nimport FadeWrapper from '../FadeWrapper/FadeWrapper';\nimport styles from './TipsAndTricksBanner.module.scss';\n\ninterface TipsAndTricksBannerProps {\n  alertTitle: string;\n  loadedTitle: string;\n  onClose?: () => void;\n}\n\nexport const TIME_BEFORE_SHOWING_NEXT_TIPS_AND_TRICKS = 10000;\n\nconst TipsAndTricksBanner = ({ alertTitle, loadedTitle, onClose }: TipsAndTricksBannerProps) => {\n  const isLoaded = useSelector(selectTipsAndTricksIsLoaded) as boolean;\n  const showTipsAndTricks = useSelector(selectShowTipsAndTricks) as boolean;\n  const dispatch = useDispatch();\n  const { t } = useTranslation();\n\n  const generator = useTipsAndTricks();\n\n  const [tips, setTips] = useState<ReturnType<typeof useTipsAndTricks> | null>(null);\n  const [currentTip, setCurrentTip] = useState<string | null>(null);\n  const [nextTip, setNextTip] = useState<string | null>(null);\n  const [displayTip, setDisplayTip] = useState(false);\n\n  const changeTip = (newTip: string) => {\n    setNextTip(newTip);\n    setDisplayTip(false);\n  };\n\n  const goToPreviousTip = () => {\n    if (tips) {\n      changeTip(tips.previous().value);\n    }\n  };\n\n  const goToNextTip = () => {\n    if (tips) {\n      changeTip(tips.next().value);\n    }\n  };\n\n  const fadeOutCompleted = () => {\n    setCurrentTip(nextTip);\n    setDisplayTip(true);\n  };\n\n  const handleOnClose = () => {\n    if (onClose) {\n      onClose();\n    }\n\n    dispatch(setShowTipsAndTricks({ showTipsAndTricks: false }));\n  };\n\n  useEffect(() => {\n    setTips(generator);\n    setCurrentTip(generator.next().value);\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  useEffect(() => {\n    if (showTipsAndTricks) {\n      setDisplayTip(true);\n    }\n  }, [showTipsAndTricks]);\n\n  useEffect(() => {\n    let timeoutId: ReturnType<typeof setTimeout> | null = null;\n    if (!isLoaded) {\n      timeoutId = setTimeout(() => {\n        goToNextTip();\n      }, TIME_BEFORE_SHOWING_NEXT_TIPS_AND_TRICKS);\n    } else if (isLoaded) {\n      if (timeoutId) {\n        clearTimeout(timeoutId);\n      }\n    }\n    return () => {\n      if (timeoutId) {\n        clearTimeout(timeoutId);\n      }\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [isLoaded, currentTip]);\n\n  const handleVisibilityChange = (isVisible: boolean) => {\n    if (!isVisible) {\n      fadeOutCompleted();\n    }\n  };\n\n  if (!showTipsAndTricks || !currentTip) {\n    return null;\n  }\n\n  return (\n    <Alert\n      className={styles.tipsAndTricksBanner}\n      icon={isLoaded ? <CheckmarkOutlinedIcon /> : <InfoOutlinedIcon />}\n      variant={isLoaded ? 'success' : 'info'}\n      action={\n        <div className={styles.tipsAndTricksBanner__container}>\n          <FadeWrapper isFadingIn={displayTip} onVisibilityChange={handleVisibilityChange}>\n            <Typography variant=\"body-small\">{t(currentTip)}</Typography>\n          </FadeWrapper>\n          {!isLoaded ? (\n            <div className={styles.tipsAndTricksBanner__buttonsContainer}>\n              <IconButton size=\"small\" role=\"button\" aria-label={t('Change to previous tip')} onClick={goToPreviousTip}>\n                <ChevronLeftOutlinedIcon />\n              </IconButton>\n              <IconButton size=\"small\" role=\"button\" aria-label={t('Change to next tip')} onClick={goToNextTip}>\n                <ChevronRightOutlinedIcon />\n              </IconButton>\n            </div>\n          ) : (\n            <Button\n              className={styles.tipsAndTricksBanner__closeButton}\n              variant=\"success\"\n              size=\"small\"\n              role=\"button\"\n              onClick={handleOnClose}>\n              {t('Close')}\n            </Button>\n          )}\n        </div>\n      }>\n      <Typography variant=\"body-small-strong\" tag=\"h1\">\n        {isLoaded ? loadedTitle : alertTitle}\n      </Typography>\n    </Alert>\n  );\n};\n\nexport default TipsAndTricksBanner;\n","export const MODALS = {\n  ADD_SCHEDULED_DASHBOARD: 'ADD_SCHEDULED_DASHBOARD',\n  DELETE_SCHEDULED_DASHBOARD: 'DELETE_SCHEDULED_DASHBOARD',\n  SAVE_DASHBOARD: 'SAVE_DASHBOARD',\n  RENAME_DASHBOARD: 'RENAME_DASHBOARD',\n  UPDATE_DASHBOARD: 'UPDATE_DASHBOARD',\n  DELETE_DASHBOARD: 'DELETE_DASHBOARD',\n  SHARE_DASHBOARD: 'SHARE_DASHBOARD',\n  CALL_REPORT: 'CALL_REPORT',\n  MAX_SCHEDULES_REACHED: 'MAX_SCHEDULES_REACHED'\n};\n\nexport const CALL_REPORT_MODAL_SUFFIX = '-tab';\nexport const CALL_REPORT_MODAL_PREFIX = 'call-reports-';\n\nexport const CALL_REPORT_MODAL_TABS = {\n  SUMMARY: `${CALL_REPORT_MODAL_PREFIX}summary${CALL_REPORT_MODAL_SUFFIX}`,\n  DETAILS: `${CALL_REPORT_MODAL_PREFIX}details${CALL_REPORT_MODAL_SUFFIX}`,\n  TRANSCRIPT: `${CALL_REPORT_MODAL_PREFIX}transcript${CALL_REPORT_MODAL_SUFFIX}`,\n  NOTES: `${CALL_REPORT_MODAL_PREFIX}notes${CALL_REPORT_MODAL_SUFFIX}`,\n  INSIGHTS: `${CALL_REPORT_MODAL_PREFIX}insights${CALL_REPORT_MODAL_SUFFIX}`\n};\n\nexport const CALL_REPORT_MODAL_TABS_HASH = {\n  SUMMARY: '#summary',\n  DETAILS: '#details',\n  TRANSCRIPT: '#transcript',\n  NOTES: '#notes',\n  INSIGHTS: '#insights'\n};\n\nexport const getCallReportTabHashName = callReportTabName => {\n  return callReportTabName.replace(CALL_REPORT_MODAL_PREFIX, '#').replace(CALL_REPORT_MODAL_SUFFIX, '');\n};\n\nexport const getCallReportTabFromHash = (hash, fallback = CALL_REPORT_MODAL_TABS.SUMMARY) => {\n  switch (hash) {\n    case CALL_REPORT_MODAL_TABS_HASH.SUMMARY:\n      return CALL_REPORT_MODAL_TABS.SUMMARY;\n    case CALL_REPORT_MODAL_TABS_HASH.DETAILS:\n      return CALL_REPORT_MODAL_TABS.DETAILS;\n    case CALL_REPORT_MODAL_TABS_HASH.TRANSCRIPT:\n      return CALL_REPORT_MODAL_TABS.TRANSCRIPT;\n    case CALL_REPORT_MODAL_TABS_HASH.NOTES:\n      return CALL_REPORT_MODAL_TABS.NOTES;\n    case CALL_REPORT_MODAL_TABS_HASH.INSIGHTS:\n      return CALL_REPORT_MODAL_TABS.INSIGHTS;\n    default:\n      return fallback;\n  }\n};\n","import { isFunction as _isFunction } from 'lodash';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { getSlicedDashboardName, updateDashboard } from '../../services/common/dashboards.service';\nimport { parseQueryToFiltersV2 } from '../../services/common/filters.service';\nimport { setCurrentDashboard, updateDashboard as updateDashboardStore } from '../../store/Analytics/analytics.slice';\nimport { applyBaseQuery } from '../../store/Analytics/filters.slice';\nimport { selectCurrentDashboard, selectCurrentOrganizationId } from '../../store/selectors/analytics';\nimport { getDefaultEndTime } from '../../store/selectors/default-date';\nimport { selectAnalyticsFilters, selectFiltersQuery } from '../../store/selectors/filtersV2';\nimport { DashboardType } from '../../types/dashboard/DashboardTypes';\nimport { getFilterQueryPerDashboardType } from '../../utils/filters.util';\nimport { Snackbar } from '../../utils/snackbar';\n\ntype UpdateDashboardParams = {\n  dashboard: Pick<DashboardType, 'id' | 'name'> & { type?: string };\n  boardName?: string;\n  onFinish?: () => void;\n};\n\nconst useUpdateDashboard = () => {\n  const { t } = useTranslation();\n  const analyticsFilters = useSelector(selectAnalyticsFilters);\n  const currentDashboard = useSelector(selectCurrentDashboard);\n  const organizationId = useSelector(selectCurrentOrganizationId)!;\n  const filtersQuery = useSelector(selectFiltersQuery);\n  const endOfTodayTime = useSelector(getDefaultEndTime);\n  const dispatch = useDispatch();\n\n  const updateFilters = (): void => {\n    if (analyticsFilters.hasBeenLoaded) {\n      dispatch(applyBaseQuery(filtersQuery));\n    }\n  };\n\n  const updateDashboardName = (dashboardId: string, boardName: string): void => {\n    dispatch(updateDashboardStore({ dashboardId, boardName }));\n  };\n\n  const update = async ({ dashboard, boardName, onFinish }: UpdateDashboardParams): Promise<void> => {\n    const controller = new AbortController();\n\n    const updated: Record<string, unknown> = {};\n    if (!boardName) {\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n      const dashboardFilterQuery = getFilterQueryPerDashboardType(dashboard.type, filtersQuery);\n      updated.filters = parseQueryToFiltersV2(dashboardFilterQuery, endOfTodayTime, dashboard.type);\n    } else {\n      updated.name = boardName;\n    }\n\n    let message: string;\n    try {\n      Snackbar.startProgress(t('Updating {{dashboardName}}', { dashboardName: getSlicedDashboardName(dashboard, t) }));\n      const updatedDashboard = (await updateDashboard(\n        organizationId,\n        dashboard.id,\n        updated,\n        controller\n      )) as DashboardType;\n      Snackbar.completeProgress();\n\n      if (!boardName) {\n        updateFilters();\n        dispatch(setCurrentDashboard(updatedDashboard));\n      } else {\n        updateDashboardName(dashboard.id, boardName);\n        if (currentDashboard?.id === dashboard.id) {\n          dispatch(setCurrentDashboard({ ...currentDashboard, name: boardName }));\n        }\n      }\n\n      message = t('Filters saved');\n    } catch (error) {\n      console.error(error);\n      Snackbar.close();\n      message = t('An error occurred while updating the board.');\n    }\n    Snackbar.showStatus(message);\n    if (_isFunction(onFinish)) {\n      onFinish();\n    }\n  };\n  return update;\n};\n\nexport default useUpdateDashboard;\n","import { TFunction } from 'i18next';\nimport { DASHBOARD_DATA_SOURCE } from '../constants/data-source';\nimport { exportFileTypes, type ExportFileTypes } from '../constants/export-file-types';\nimport { PERMISSIONS } from '../constants/permissions';\nimport type { ExportableItem } from '../types/export';\n\nexport const getAgentEffectivenessExportableItems = (\n  exportFileType: ExportFileTypes,\n  t: TFunction,\n  includeASMExports?: boolean | (() => boolean)\n): ExportableItem[] => {\n  const baseExports: ExportableItem[] = [\n    {\n      id: 'charts',\n      label: t('Agent performance - charts'),\n      disabled: exportFileType === exportFileTypes.CSV_FILE,\n      selected: exportFileType !== exportFileTypes.CSV_FILE,\n      supportedExportFormats: [exportFileTypes.PDF_FILE]\n    },\n    {\n      id: 'agent-calls',\n      label: t('Agent calls'),\n      datasource: DASHBOARD_DATA_SOURCE.AGENT_SUMMARY_TIMELINE,\n      access: { permission: [PERMISSIONS.UNIFIED_ANALYTICS_DASHBOARDS_UNIFIED_AGENT_SUMMARY] },\n      disabled: exportFileType === exportFileTypes.PDF_FILE,\n      selected: exportFileType !== exportFileTypes.PDF_FILE,\n      supportedExportFormats: [exportFileTypes.CSV_FILE]\n    },\n    {\n      id: 'individual-performance-and-workload-summary',\n      label: t('Individual performance and workload summary'),\n      datasource: DASHBOARD_DATA_SOURCE.INDIVIDUAL_WORKLOAD_SUMMARY,\n      access: { permission: [PERMISSIONS.UNIFIED_ANALYTICS_DASHBOARDS_UNIFIED_AGENT_EFFECTIVENESS] },\n      selected: false,\n      disabled: exportFileType === exportFileTypes.PDF_FILE,\n      supportedExportFormats: [exportFileTypes.CSV_FILE]\n    }\n  ];\n\n  if (includeASMExports) {\n    baseExports.push({\n      id: 'agent-activity',\n      label: t('Agent activity'),\n      datasource: DASHBOARD_DATA_SOURCE.AGENT_ACTIVITY_TIMELINE_EXPORT,\n      access: { permission: [PERMISSIONS.UNIFIED_ANALYTICS_DASHBOARDS_UNIFIED_AGENT_EFFECTIVENESS] },\n      selected: false,\n      disabled: exportFileType === exportFileTypes.PDF_FILE,\n      supportedExportFormats: [exportFileTypes.CSV_FILE]\n    });\n\n    baseExports.push({\n      id: 'agent-productivity',\n      label: t('Agent productivity'),\n      datasource: DASHBOARD_DATA_SOURCE.AGENT_PRODUCTIVITY,\n      access: { permission: [PERMISSIONS.UNIFIED_ANALYTICS_DASHBOARDS_UNIFIED_AGENT_EFFECTIVENESS] },\n      selected: false,\n      disabled: exportFileType === exportFileTypes.PDF_FILE,\n      supportedExportFormats: [exportFileTypes.CSV_FILE]\n    });\n\n    baseExports.push({\n      id: 'pause-usage',\n      label: t('Pause usage'),\n      datasource: DASHBOARD_DATA_SOURCE.AGENT_ACTIVITY_PAUSE_USAGE,\n      access: { permission: [PERMISSIONS.UNIFIED_ANALYTICS_DASHBOARDS_UNIFIED_AGENT_EFFECTIVENESS] },\n      selected: false,\n      disabled: exportFileType === exportFileTypes.PDF_FILE,\n      supportedExportFormats: [exportFileTypes.CSV_FILE]\n    });\n  }\n\n  return baseExports.filter(Boolean);\n};\n","import { TFunction } from 'i18next';\nimport { DASHBOARD_DATA_SOURCE } from '../constants/data-source';\nimport { ExportFileTypes, exportFileTypes } from '../constants/export-file-types';\nimport { PERMISSIONS } from '../constants/permissions';\n\nexport const getQualityManagementExportableItems = (exportFileType: ExportFileTypes, t: TFunction) => [\n  {\n    id: 'charts',\n    label: t('Quality management - charts'),\n    disabled: exportFileType === exportFileTypes.CSV_FILE,\n    selected: exportFileType !== exportFileTypes.CSV_FILE,\n    supportedExportFormats: [exportFileTypes.PDF_FILE]\n  },\n  {\n    id: 'evaluations',\n    label: t('Quality management - evaluations'),\n    datasource: DASHBOARD_DATA_SOURCE.QM_EVALUATIONS_EXPORT,\n    exportPath: '/evaluations/export',\n    access: { permission: [PERMISSIONS.SAI_QUALITY_MANAGEMENT] },\n    disabled: exportFileType !== exportFileTypes.CSV_FILE,\n    selected: exportFileType === exportFileTypes.CSV_FILE,\n    supportedExportFormats: [exportFileTypes.CSV_FILE]\n  },\n  {\n    id: 'evaluations-by-user',\n    label: t('Quality management - by user'),\n    datasource: DASHBOARD_DATA_SOURCE.QM_EVALUATIONS_BY_USER_EXPORT,\n    exportPath: '/evaluations/export/by-user',\n    access: { permission: [PERMISSIONS.SAI_QUALITY_MANAGEMENT] },\n    disabled: exportFileType !== exportFileTypes.CSV_FILE,\n    selected: false,\n    supportedExportFormats: [exportFileTypes.CSV_FILE]\n  },\n  {\n    id: 'evaluations-by-category',\n    label: t('Quality management - by category'),\n    datasource: DASHBOARD_DATA_SOURCE.QM_EVALUATIONS_BY_CATEGORY_EXPORT,\n    exportPath: '/evaluations/export/by-category',\n    access: { permission: [PERMISSIONS.SAI_QUALITY_MANAGEMENT] },\n    disabled: exportFileType !== exportFileTypes.CSV_FILE,\n    selected: false,\n    supportedExportFormats: [exportFileTypes.CSV_FILE]\n  },\n  {\n    id: 'evaluations-by-question',\n    label: t('Quality management - by question'),\n    datasource: DASHBOARD_DATA_SOURCE.QM_EVALUATIONS_BY_QUESTION_EXPORT,\n    exportPath: '/evaluations/export/by-question',\n    access: { permission: [PERMISSIONS.SAI_QUALITY_MANAGEMENT] },\n    disabled: exportFileType !== exportFileTypes.CSV_FILE,\n    selected: false,\n    supportedExportFormats: [exportFileTypes.CSV_FILE]\n  }\n];\n","import { TFunction } from 'i18next';\nimport { RESOURCES, QUEUE_CALLER_CAPABILITIES } from '../constants/capabilities';\nimport { DASHBOARD_DATA_SOURCE } from '../constants/data-source';\nimport { exportFileTypes, type ExportFileTypes } from '../constants/export-file-types';\nimport { EXPORT_TYPES, type exportTypes } from '../constants/export-types';\nimport type { ExportableItem } from '../types/export';\n\ntype QueueCallerExportableItem = ExportableItem & { groupBy?: string };\n\nexport const getQueueCallerExportableItems = (\n  exportType: exportTypes | string | null,\n  exportFileType: ExportFileTypes,\n  t: TFunction\n): QueueCallerExportableItem[] => [\n  {\n    id: 'charts',\n    label: t('Queue caller - charts'),\n    disabled: exportFileType === exportFileTypes.CSV_FILE,\n    selected: exportFileType !== exportFileTypes.CSV_FILE,\n    supportedExportFormats: [exportFileTypes.PDF_FILE]\n  },\n  {\n    id: 'queue-caller-grouped-by-date',\n    label: t('Queue caller - summary by date'),\n    datasource: DASHBOARD_DATA_SOURCE.QUEUE_CALLER_SUMMARY,\n    access: { resource: RESOURCES.QUEUE_CALLER, capability: QUEUE_CALLER_CAPABILITIES.CAN_EXPORT_SUMMARY },\n    disabled: exportFileType !== exportFileTypes.CSV_FILE,\n    selected:\n      (exportType === EXPORT_TYPES.QUEUE_CALLER_DASHBOARD_EXPORT ||\n        exportType === EXPORT_TYPES.QUEUE_CALLER_SUMMARY_EXPORT) &&\n      exportFileType === exportFileTypes.CSV_FILE,\n    supportedExportFormats: [exportFileTypes.CSV_FILE],\n    items: []\n  },\n  {\n    id: 'queue-caller-grouped-by-queue',\n    label: t('Queue caller - summary by queue'),\n    datasource: DASHBOARD_DATA_SOURCE.QUEUE_CALLER_SUMMARY,\n    access: { resource: RESOURCES.QUEUE_CALLER, capability: QUEUE_CALLER_CAPABILITIES.CAN_EXPORT_SUMMARY },\n    disabled: exportFileType !== exportFileTypes.CSV_FILE,\n    selected: false,\n    groupBy: 'queues',\n    supportedExportFormats: [exportFileTypes.CSV_FILE],\n    items: []\n  },\n  {\n    id: 'queue-caller-details',\n    label: t('Queue caller - details'),\n    datasource: DASHBOARD_DATA_SOURCE.QUEUE_CALLER_DETAILS,\n    access: { resource: RESOURCES.QUEUE_CALLER, capability: QUEUE_CALLER_CAPABILITIES.CAN_EXPORT_DETAILS },\n    disabled: exportFileType !== exportFileTypes.CSV_FILE,\n    selected: exportType === EXPORT_TYPES.QUEUE_CALLER_DETAILS_EXPORT && exportFileType === exportFileTypes.CSV_FILE,\n    supportedExportFormats: [exportFileTypes.CSV_FILE],\n    items: []\n  }\n];\n","import { TFunction } from 'i18next';\nimport { DASHBOARD_DATA_SOURCE } from '../constants/data-source';\nimport { ExportFileTypes, exportFileTypes } from '../constants/export-file-types';\nimport { EXPORT_TYPES, exportTypes } from '../constants/export-types';\nimport { PERMISSIONS } from '../constants/permissions';\n\nexport const getSatisfactionSurveyItems = (\n  exportType: exportTypes | null,\n  exportFileType: ExportFileTypes,\n  t: TFunction\n) => [\n  {\n    id: 'csat-key-values',\n    label: t('Survey scores'),\n    datasource: DASHBOARD_DATA_SOURCE.SATISFACTION_SURVEY_SCORE,\n    access: { permission: [PERMISSIONS.SATISFACTION_SURVEY_PAGE_VIEW] },\n    disabled: false,\n    selected: exportFileType !== exportFileTypes.CSV_FILE,\n    supportedExportFormats: [exportFileTypes.CSV_FILE, exportFileTypes.PDF_FILE]\n  },\n  {\n    id: 'csat-survey-results',\n    label: t('Survey results'),\n    datasource: DASHBOARD_DATA_SOURCE.SATISFACTION_SURVEY_RESPONSES,\n    access: { permission: [PERMISSIONS.SATISFACTION_SURVEY_DIGITAL] },\n    disabled: exportFileType !== exportFileTypes.CSV_FILE,\n    selected: exportType === EXPORT_TYPES.SATISFACTION_SURVEY_EXPORT && exportFileType === exportFileTypes.CSV_FILE,\n    supportedExportFormats: [exportFileTypes.CSV_FILE]\n  }\n];\n","import type { TFunction } from 'i18next';\nimport { isEmpty } from 'lodash';\nimport { DurationUnit } from 'luxon';\nimport { getAgentEffectivenessExportableItems } from '../../configs/agent-performance-export.config';\nimport { getQualityManagementExportableItems } from '../../configs/quality-management-export.config';\nimport { getQueueCallerExportableItems } from '../../configs/queue-caller-export.config';\nimport { getSatisfactionSurveyItems } from '../../configs/satisfaction-survey-export.config';\nimport { RESOURCES, QUEUE_CALLER_CAPABILITIES } from '../../constants/capabilities';\nimport { ExportFileTypes } from '../../constants/export-file-types';\nimport { EXPORT_TYPES, exportTypes } from '../../constants/export-types';\nimport { PERMISSIONS } from '../../constants/permissions';\nimport {\n  selectBucketSize,\n  selectBucketStartTimes,\n  selectQueriedAgentsIds,\n  selectQueriedCallDuration,\n  selectQueriedChatQueueIds,\n  selectQueriedConversationSourceIds,\n  selectQueriedCsatScoreIds,\n  selectQueriedDateRange,\n  selectQueriedOpenTextFeedbackIds,\n  selectQueriedOutcomesIds,\n  selectQueriedQueuesIds,\n  selectQueriedTimeInQueue\n} from '../../store/selectors/filtersV2';\nimport type { ExportableItem } from '../../types/export';\nimport { RootState } from '../../types/store/RootState';\nimport { createISODurationFromStartTimes, createISODurations } from '../../utils/date-time.util';\nimport type { AccessDescriptor } from './access.service';\n\ninterface BuilderInput {\n  state: RootState;\n  exportedItems: (ExportableItem & { groupBy?: string; exportPath?: string })[];\n  dashboardId?: number | string;\n}\n\ntype BuilderResult = Record<string, Record<string, unknown>>;\n\nexport const getExportAccess = (exportType: exportTypes | string): AccessDescriptor => {\n  switch (exportType) {\n    case EXPORT_TYPES.QUEUE_CALLER_DASHBOARD_EXPORT:\n    case EXPORT_TYPES.QUEUE_CALLER_SUMMARY_EXPORT:\n      return { resource: RESOURCES.QUEUE_CALLER, capability: QUEUE_CALLER_CAPABILITIES.CAN_EXPORT_SUMMARY };\n    case EXPORT_TYPES.QUEUE_CALLER_DETAILS_EXPORT:\n      return { resource: RESOURCES.QUEUE_CALLER, capability: QUEUE_CALLER_CAPABILITIES.CAN_EXPORT_DETAILS };\n    case EXPORT_TYPES.AGENT_EFFECTIVENESS_DASHBOARD_EXPORT:\n      return { permission: [PERMISSIONS.UNIFIED_ANALYTICS_DASHBOARDS_UNIFIED_AGENT] };\n    case EXPORT_TYPES.CALL_REPORTS_EXPORT:\n      return { permission: [PERMISSIONS.UNIFIED_CALL_REPORTS_EXPORT] };\n    case EXPORT_TYPES.MESSAGE_REPORTS_EXPORT:\n      return { permission: [PERMISSIONS.UNIFIED_MESSAGE_REPORTS_EXPORT] };\n    case EXPORT_TYPES.SATISFACTION_SURVEY_EXPORT:\n      return { permission: [PERMISSIONS.SATISFACTION_SURVEY_DIGITAL] };\n    case EXPORT_TYPES.QUALITY_MANAGEMENT_EXPORT:\n      return { permission: [PERMISSIONS.SAI_QUALITY_MANAGEMENT] };\n    default:\n      throw new Error(`Export access configuration missing for ${exportType}`);\n  }\n};\n\nexport const getExportableItems = (\n  exportType: exportTypes | string | undefined,\n  exportFileType: ExportFileTypes,\n  t: TFunction,\n  includeASMExports?: boolean | (() => boolean)\n): ExportableItem[] => {\n  const allQueueCallerTypes: string[] = [\n    EXPORT_TYPES.QUEUE_CALLER_DASHBOARD_EXPORT,\n    EXPORT_TYPES.QUEUE_CALLER_SUMMARY_EXPORT,\n    EXPORT_TYPES.QUEUE_CALLER_DETAILS_EXPORT\n  ];\n\n  if (exportType && allQueueCallerTypes.includes(exportType)) {\n    return getQueueCallerExportableItems(exportType, exportFileType, t);\n  }\n\n  if (exportType === EXPORT_TYPES.AGENT_EFFECTIVENESS_DASHBOARD_EXPORT) {\n    return getAgentEffectivenessExportableItems(exportFileType, t, includeASMExports);\n  }\n\n  if (exportType === EXPORT_TYPES.SATISFACTION_SURVEY_EXPORT) {\n    return getSatisfactionSurveyItems(exportType, exportFileType, t);\n  }\n\n  if (exportType === EXPORT_TYPES.QUALITY_MANAGEMENT_EXPORT) {\n    return getQualityManagementExportableItems(exportFileType, t);\n  }\n\n  return [];\n};\n\nexport const getBuilderParameters = (\n  exportType: exportTypes | string | undefined\n): ((input: BuilderInput) => BuilderResult) => {\n  switch (exportType) {\n    case EXPORT_TYPES.SATISFACTION_SURVEY_EXPORT:\n      return ({ state, exportedItems, dashboardId }) =>\n        exportedItems\n          .filter(item => item.selected)\n          .reduce<BuilderResult>(\n            (acc, curr) => ({\n              ...acc,\n              [curr.id]: {\n                datasource: curr.datasource,\n                queues: selectQueriedChatQueueIds(state),\n                agents: selectQueriedAgentsIds(state),\n                conversationSources: selectQueriedConversationSourceIds(state),\n                csatScore: selectQueriedCsatScoreIds(state),\n                openTextFeedback: selectQueriedOpenTextFeedbackIds(state),\n                dashboardId,\n                date: { ...selectQueriedDateRange(state) }\n              }\n            }),\n            {}\n          );\n\n    case EXPORT_TYPES.AGENT_EFFECTIVENESS_DASHBOARD_EXPORT:\n      return ({ state, exportedItems, dashboardId }) =>\n        exportedItems\n          .filter(item => item.selected)\n          .reduce<BuilderResult>(\n            (acc, curr) => ({\n              ...acc,\n              [curr.id]: {\n                datasource: curr.datasource,\n                queueIds: selectQueriedQueuesIds(state),\n                agentIds: selectQueriedAgentsIds(state),\n                dashboardId,\n                date: { ...selectQueriedDateRange(state) }\n              }\n            }),\n            {}\n          );\n\n    case EXPORT_TYPES.QUEUE_CALLER_DASHBOARD_EXPORT:\n    case EXPORT_TYPES.QUEUE_CALLER_SUMMARY_EXPORT:\n    case EXPORT_TYPES.QUEUE_CALLER_DETAILS_EXPORT:\n      return ({ state, exportedItems, dashboardId }) => {\n        const bucketStartTimes = selectBucketStartTimes(state) as string[];\n        const date = selectQueriedDateRange(state);\n        const bucketSize = selectBucketSize(state) as unknown as DurationUnit;\n        return exportedItems\n          .filter(item => item.selected)\n          .reduce<BuilderResult>(\n            (acc, curr) => ({\n              ...acc,\n              [curr.id]: {\n                datasource: curr.datasource,\n                queueIds: selectQueriedQueuesIds(state),\n                ...selectQueriedTimeInQueue(state),\n                ...selectQueriedCallDuration(state),\n                outcomes: selectQueriedOutcomesIds(state),\n                dashboardId,\n                bucketSize,\n                groupBy: curr.groupBy,\n                bucketDurations: !isEmpty(bucketStartTimes)\n                  ? createISODurationFromStartTimes(bucketStartTimes, bucketSize)\n                  : createISODurations(date.startTime, date.endTime, bucketSize),\n                requestedMetrics: (curr.items ?? []).filter(item => item.selected).map(col => col.id)\n              }\n            }),\n            {}\n          );\n      };\n\n    case EXPORT_TYPES.QUALITY_MANAGEMENT_EXPORT:\n      return ({ exportedItems }) =>\n        exportedItems\n          .filter(item => item.selected && item.datasource)\n          .reduce<BuilderResult>(\n            (acc, curr) => ({\n              ...acc,\n              [curr.id]: {\n                datasource: curr.datasource,\n                exportPath: curr.exportPath\n              }\n            }),\n            {}\n          );\n\n    default:\n      return () => ({});\n  }\n};\n","import type { TFunction } from 'i18next';\nimport { exportFileTypes } from '../constants/export-file-types';\nimport type { ExportableItem } from '../types/export';\nimport { getAgentEffectivenessExportableItems } from './agent-performance-export.config';\nimport { getQueueCallerExportableItems } from './queue-caller-export.config';\nimport { getSatisfactionSurveyItems } from './satisfaction-survey-export.config';\n\nexport const getAllExportableItems = (\n  t: TFunction,\n  featureFlagSelector?: boolean | (() => boolean)\n): ExportableItem[] => [\n  ...getQueueCallerExportableItems(null, exportFileTypes.CSV_FILE, t),\n  ...getAgentEffectivenessExportableItems(exportFileTypes.CSV_FILE, t, featureFlagSelector),\n  ...getSatisfactionSurveyItems(null, exportFileTypes.CSV_FILE, t)\n];\n","export const EVENTS = {\n  OPEN_EXPORT_CALL_REPORTS: 'OPEN_EXPORT_CALL_REPORTS',\n  OPEN_EXPORT_MESSAGE_REPORTS: 'OPEN_EXPORT_MESSAGE_REPORTS'\n} as const;\n\nexport type EventType = (typeof EVENTS)[keyof typeof EVENTS];\n","import { FILTER_NAMES } from '../constants/filters';\nimport type { QueryFilter } from '../types/config/FilterTypes';\n\nconst toSeconds = (value: number | null, unit?: string): number | null => {\n  if (value === null) {\n    return null;\n  }\n  if (unit === 'minutes') {\n    return value * 60;\n  }\n  if (unit === 'hours') {\n    return value * 3600;\n  }\n  return value;\n};\n\nexport type QmExportFilters = {\n  dateRange?: { startDate: string; endDate: string };\n  userGroupKeys?: string[];\n  queueIds?: string[];\n  externalUserKeys?: string[];\n  statuses?: string[];\n  scoreOutcomes?: string[];\n  durationRange?: { minDurationInSeconds: number | null; maxDurationInSeconds: number | null };\n  scoreRange?: { min: number | null; max: number | null };\n  questionIds?: string[];\n  categoryIds?: string[];\n};\n\nexport const transformQmFilters = (filtersQuery: QueryFilter[]): QmExportFilters => {\n  const result: QmExportFilters = {};\n\n  for (const filter of filtersQuery) {\n    switch (filter.filter) {\n      case FILTER_NAMES.DATE: {\n        const value = filter.value as { startTime: string; endTime: string };\n        result.dateRange = { startDate: value.startTime, endDate: value.endTime };\n        break;\n      }\n      case FILTER_NAMES.USER_GROUPS: {\n        result.userGroupKeys = (filter.value as Array<{ id: string | null; selected: boolean }>)\n          .filter(f => f.selected)\n          .map(f => f.id)\n          .filter((id): id is string => id !== null);\n        break;\n      }\n      case FILTER_NAMES.QUEUES: {\n        result.queueIds = (filter.value as Array<{ id: string | null; selected: boolean }>)\n          .filter(f => f.selected)\n          .map(f => f.id)\n          .filter((id): id is string => id !== null);\n        break;\n      }\n      case FILTER_NAMES.QUALITY_MANAGEMENT_USER: {\n        result.externalUserKeys = (filter.value as Array<{ id: string | null; selected: boolean }>)\n          .filter(f => f.selected)\n          .map(f => f.id)\n          .filter((id): id is string => id !== null);\n        break;\n      }\n      case FILTER_NAMES.QUALITY_MANAGEMENT_STATUS: {\n        result.statuses = (filter.value as Array<{ id: string | null; selected: boolean }>)\n          .filter(f => f.selected)\n          .map(f => f.id)\n          .filter((id): id is string => id !== null);\n        break;\n      }\n      case FILTER_NAMES.QUALITY_MANAGEMENT_SCORE_OUTCOMES: {\n        const scoreOutcomes = (filter.value as Array<{ id: string | null; selected: boolean }>)\n          .filter(f => f.selected)\n          .map(f => f.id)\n          .filter((id): id is string => id !== null);\n        result.scoreOutcomes = scoreOutcomes.length > 0 ? scoreOutcomes : undefined;\n        break;\n      }\n      case FILTER_NAMES.QUALITY_MANAGEMENT_DURATION: {\n        const value = filter.value as { min: number | null; max: number | null; unit?: string };\n        result.durationRange = {\n          minDurationInSeconds: toSeconds(value.min, value.unit),\n          maxDurationInSeconds: toSeconds(value.max, value.unit)\n        };\n        break;\n      }\n      case FILTER_NAMES.QUALITY_MANAGEMENT_RANGE: {\n        const value = filter.value as { min: number | null; max: number | null };\n        result.scoreRange = { min: value.min, max: value.max };\n        break;\n      }\n      case FILTER_NAMES.QUALITY_MANAGEMENT_QUESTION: {\n        result.questionIds = (filter.value as Array<{ id: string | null; selected: boolean }>)\n          .filter(f => f.selected)\n          .map(f => f.id)\n          .filter((id): id is string => id !== null);\n        break;\n      }\n      case FILTER_NAMES.QUALITY_MANAGEMENT_CATEGORY: {\n        result.categoryIds = (filter.value as Array<{ id: string | null; selected: boolean }>)\n          .filter(f => f.selected)\n          .map(f => f.id)\n          .filter((id): id is string => id !== null);\n        break;\n      }\n      default:\n        break;\n    }\n  }\n\n  return result;\n};\n","import { isArray as _isArray } from 'lodash';\nimport { DateTime } from 'luxon';\nimport { dashboardTypes } from '../../configs/dashboard.config';\nimport { MIXPANEL_EVENT_NAME } from '../../constants/mixpanel';\nimport environment from '../../environments';\nimport type { QueryFilter } from '../../types/config/FilterTypes';\nimport { FilterValue, type AnalyticsFilter } from '../../types/dashboard/AnalyticsFilters';\nimport { DashboardType } from '../../types/dashboard/DashboardTypes';\nimport { downloadFile } from '../../utils/file.util';\nimport { transformQmFilters } from '../../utils/qm-export-filters.util';\nimport { Snackbar } from '../../utils/snackbar';\nimport { analyticsExportDataSourceService, isQueryCanceled } from './analytics-fetch.service';\nimport { parseFiltersToDataSource, parseQueryToFiltersV2 } from './filters.service';\nimport { getTimeZone } from './users.service';\n\ntype TranslationFn = (key: string) => string;\ntype MixpanelTrackFn = (event: string, data: Record<string, unknown>) => void;\n\nexport interface ExportParams {\n  dashboardId: number;\n  datasource: string;\n  bucketSize?: string;\n  groupBy?: string;\n  filename?: string;\n  exportPath?: string;\n}\n\ninterface ParsedDataSourceResult {\n  date?: { filterValues?: FilterValue[] };\n  filters: Record<string, unknown>[];\n}\n\nexport interface ExportError extends Error {\n  response?: { message?: string };\n  status?: number;\n  reason?: string;\n  errorCode?: number;\n  datasource?: string;\n  exportType?: string;\n}\n\nconst showExportInProgress = (\n  controller: AbortController,\n  currentPage: string,\n  t: TranslationFn,\n  mixpanelTrack: MixpanelTrackFn\n): void => {\n  Snackbar.showStatusWithActions(t('Your export is in progress.'), [\n    {\n      label: t('Cancel export'),\n      handler: () => {\n        const eventData = {\n          Action: `Clicked on Cancel export`,\n          Component: 'ExportButton',\n          Page: currentPage\n        };\n        mixpanelTrack(MIXPANEL_EVENT_NAME.EXPORT, eventData);\n        controller.abort();\n        Snackbar.close();\n      }\n    }\n  ]);\n};\n\nconst showRetry = (action: () => void, currentPage: string, t: TranslationFn, mixpanelTrack: MixpanelTrackFn): void => {\n  Snackbar.showStatusWithActions(t('Export failed.'), [\n    {\n      label: t('Try again'),\n      handler: () => {\n        const eventData = {\n          Action: `Clicked on Try again`,\n          Component: 'ExportButton',\n          Page: currentPage\n        };\n        mixpanelTrack(MIXPANEL_EVENT_NAME.EXPORT, eventData);\n        action();\n        Snackbar.close();\n      }\n    }\n  ]);\n};\n\nexport const getDatesExportFile = (rangeDates: string[] | string): string => {\n  const rangeDateFileDefault = DateTime.now().toFormat('yyyyMMdd');\n  if (!_isArray(rangeDates)) {\n    return rangeDateFileDefault;\n  }\n\n  try {\n    if (rangeDates.length === 2) {\n      const startFormatted = DateTime.fromISO(rangeDates[0]).toFormat('yyyyMMdd');\n      const endFormatted = DateTime.fromISO(rangeDates[1]).toFormat('yyyyMMdd');\n\n      if (startFormatted === endFormatted) {\n        return startFormatted;\n      }\n      return `${startFormatted}_${endFormatted}`;\n    }\n  } catch (error) {\n    console.error('An error occurred while getting the dates from the filename.', error);\n  }\n  return rangeDateFileDefault;\n};\n\nexport const getExportFile = async (\n  organizationId: string,\n  id: string,\n  params: ExportParams,\n  filtersQuery: unknown,\n  controller: AbortController,\n  endOfTodayTime?: DateTime,\n  dashboardType?: string,\n  dashboardTimeZone?: string\n): Promise<File> => {\n  const query = parseFiltersToDataSource(\n    (parseQueryToFiltersV2(filtersQuery, endOfTodayTime, dashboardType) as { items: AnalyticsFilter[] })?.items || []\n  ) as ParsedDataSourceResult;\n  const isQualityManagement = dashboardType === dashboardTypes.QUALITY_MANAGEMENT;\n  const timeZone = dashboardTimeZone ?? getTimeZone();\n  const rangeDate = query.date?.filterValues?.map(el => el.values as string) ?? [];\n\n  try {\n    const exportUrl = isQualityManagement\n      ? `${environment.api.qualityAnalyticsBff.url}/organizations/${organizationId}${params.exportPath ?? ''}`\n      : `${environment.api.analyticsBff.url}/organizations/${organizationId}/dashboards/${params.dashboardId}/data-sources/${params.datasource}/export`;\n\n    const body = isQualityManagement\n      ? JSON.stringify({\n          filters: transformQmFilters(filtersQuery as QueryFilter[]),\n          timezone: timeZone\n        })\n      : JSON.stringify({\n          filters: query.filters,\n          timeDimension: {\n            dateRange: rangeDate,\n            granularity: id !== 'queue-caller-details' ? params.bucketSize : undefined\n          },\n          timeZone,\n          groupBy: params.groupBy\n        });\n\n    const response = (await analyticsExportDataSourceService(exportUrl, body, controller)) as Response;\n\n    const exportData = await response.text();\n\n    if (exportData) {\n      const datesFileName = getDatesExportFile(rangeDate);\n      return new File([exportData], `${params.filename ?? id}_${datesFileName}.csv`, { type: 'text/csv' });\n    }\n  } catch (e) {\n    if (!isQueryCanceled(e)) {\n      const err = e as ExportError;\n      err.exportType = id;\n      throw err;\n    }\n  }\n\n  throw new Error('Something went wrong');\n};\n\nexport const exportArchiveFilesDataSource = async (\n  t: TranslationFn,\n  organizationId: string,\n  params: Record<string, ExportParams>,\n  wasUnmounted: () => boolean,\n  currentPage: string,\n  currentDashboard: DashboardType,\n  mixpanelTrack: MixpanelTrackFn,\n  filtersQuery: unknown,\n  setLoading: (loading: boolean) => void,\n  setRequestError: (error: ExportError) => void,\n  endOfTodayTime?: DateTime\n): Promise<void> => {\n  setLoading(true);\n  const controller = new AbortController();\n  showExportInProgress(controller, currentPage, t, mixpanelTrack);\n  try {\n    const result = await Promise.all(\n      Object.keys(params).map(id =>\n        getExportFile(\n          organizationId,\n          id,\n          params[id],\n          filtersQuery,\n          controller,\n          endOfTodayTime,\n          currentDashboard.type,\n          currentDashboard.timeZone ?? undefined\n        )\n      )\n    );\n\n    result.forEach(file => {\n      downloadFile(file, file.name);\n    });\n    Snackbar.showStatus(t('Your export is complete.'));\n  } catch (error) {\n    if (!isQueryCanceled(error)) {\n      const exportError = error as ExportError;\n      exportError.reason = exportError.response?.message;\n      exportError.errorCode = exportError.status;\n      setRequestError(exportError);\n\n      showRetry(\n        () =>\n          void exportArchiveFilesDataSource(\n            t,\n            organizationId,\n            params,\n            wasUnmounted,\n            currentPage,\n            currentDashboard,\n            mixpanelTrack,\n            filtersQuery,\n            setLoading,\n            setRequestError,\n            endOfTodayTime\n          ),\n        currentPage,\n        t,\n        mixpanelTrack\n      );\n    }\n  } finally {\n    Snackbar.close();\n    if (!wasUnmounted()) {\n      setLoading(false);\n    }\n  }\n};\n",".exportButton__button:disabled::part(control) {\n  --goto-icon-color: var(--goto-icon-color-disabled);\n}\n","import { ExportModal, type ExportModalTypeConfig } from '@analytics-common-ui/core';\nimport { TooltipWrapper } from '@analytics-common-ui/layout';\nimport { DownloadOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { Button, IconButton } from '@getgo/chameleon-web-react-wrapper';\nimport { isFunction as _isFunction, pickBy as _pickBy, size as _size } from 'lodash';\nimport { DateTime } from 'luxon';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { getAllExportableItems } from '../../../../configs/export.config';\nimport { EVENTS } from '../../../../constants/events';\nimport { ExportFileTypes, exportFileTypes } from '../../../../constants/export-file-types';\nimport { exportTypes } from '../../../../constants/export-types';\nimport { EXPORT_TYPES } from '../../../../constants/export-types';\nimport { MIXPANEL_EVENT_NAME, type MixpanelEventNameType } from '../../../../constants/mixpanel';\nimport { useAccessCheck } from '../../../../hooks/permissions/useAccessCheck';\nimport useMixpanel from '../../../../hooks/useMixpanel';\nimport { getBuilderParameters, getExportableItems } from '../../../../services/common/export-config.service';\nimport {\n  exportArchiveFilesDataSource,\n  ExportError,\n  type ExportParams\n} from '../../../../services/common/export-data-source.service';\nimport { setNetworkError } from '../../../../services/common/handle-errors.service';\nimport { onHandlePrint } from '../../../../services/common/print.service';\nimport { selectCurrentDashboard, selectCurrentOrganizationId } from '../../../../store/selectors/analytics';\nimport { selectFeatureFlag, selectFeatureFlagPayload } from '../../../../store/selectors/analytics';\nimport { getDefaultEndTime } from '../../../../store/selectors/default-date';\nimport {\n  selectAnalyticsFiltersDataLoaded,\n  selectFiltersQuery,\n  selectQueriedDateRange\n} from '../../../../store/selectors/filtersV2';\nimport { store } from '../../../../store/store';\nimport type { ExportableItem } from '../../../../types/export';\nimport { RootState } from '../../../../types/store/RootState';\nimport {\n  formatDateRange,\n  formatDateRangeForChip,\n  selectedDateOptionsReadable\n} from '../../../../utils/date-range-filter.util';\nimport { FEATURE_FLAGS, isBeforeCutOffDate } from '../../../../utils/feature-flag';\nimport { getPageIdFromDashboardType } from '../../../../utils/page.util';\nimport styles from './ExportButton.module.scss';\n\nexport interface ExportButtonProps {\n  /** The type of the current dashboard */\n  type?: exportTypes;\n  /** If the export button is disabled */\n  disabled?: boolean;\n  /** If the export button is an icon */\n  isIconButton?: boolean;\n  /** The tooltip label of the export button */\n  tooltipLabel?: string;\n  /** Function called when export done */\n  onExportDone?: () => void;\n}\n\nlet wasUnmounted = false;\n\nconst ExportButton = ({ type, onExportDone, isIconButton = true, disabled, tooltipLabel }: ExportButtonProps) => {\n  const { t } = useTranslation();\n  const dispatch = useDispatch();\n  const mixpanelTrack = useMixpanel();\n  const currentDashboard = useSelector(selectCurrentDashboard)!;\n  const { currentOrganization, userId, currentLicense, locale, currentOrganizationPermissions } = useSelector(\n    (state: RootState) => state.analytics\n  );\n  const dataLoaded = useSelector(selectAnalyticsFiltersDataLoaded);\n  const dateRange = useSelector(selectQueriedDateRange);\n  const [exportModalOpen, setExportModalOpen] = useState(false);\n  const [isExportDisabled, setIsExportDisabled] = useState(disabled);\n  const currentPage = getPageIdFromDashboardType(currentDashboard?.type);\n  const organizationId = useSelector(selectCurrentOrganizationId)!;\n  const [loading, setLoading] = useState(false);\n  const [requestError, setRequestError] = useState<ExportError | false>(false);\n  const filtersQuery = useSelector(selectFiltersQuery);\n  const endOfTodayTime = useSelector(getDefaultEndTime);\n  const state = store.getState();\n  const canAccess = useAccessCheck();\n\n  const hasFeatureFlag = useSelector(selectFeatureFlag);\n  const getFeatureFlagPayload = useSelector(selectFeatureFlagPayload);\n  const cutOffDate = getFeatureFlagPayload(FEATURE_FLAGS.AGENT_ACTIVITY_TIMELINE_CUTOFF_DATE);\n  const shouldDisplayASMExport =\n    hasFeatureFlag(FEATURE_FLAGS.AGENT_ACTIVITY_TIMELINE_CUTOFF_DATE) &&\n    !isBeforeCutOffDate({\n      cutOffDate,\n      dateToCheck: DateTime.fromISO(dateRange.startTime)\n    });\n\n  const selectedItemsRef = useRef<Record<ExportFileTypes, string[]>>({\n    [exportFileTypes.CSV_FILE]: [],\n    [exportFileTypes.PDF_FILE]: [],\n    [exportFileTypes.AUDIO_FILE]: [],\n    [exportFileTypes.PNG_FILE]: []\n  });\n\n  useEffect(() => {\n    wasUnmounted = false;\n    return () => {\n      wasUnmounted = true;\n    };\n  });\n\n  useEffect(() => {\n    if (requestError) {\n      console.error(requestError);\n\n      let errorLabel: ExportableItem['label'] | null = null;\n      if (requestError.exportType) {\n        errorLabel = getAllExportableItems(t)?.find(item => item.id === requestError.exportType)?.label;\n      }\n\n      setNetworkError({\n        dispatch,\n        requestError,\n        permissions: currentOrganizationPermissions,\n        currentOrganization,\n        userId,\n        currentLicense,\n        message: t('An error occurred while exporting {{dataName}}.', {\n          dataName: errorLabel ?? ''\n        }),\n        locale\n      });\n    }\n  }, [currentLicense, currentOrganization, currentOrganizationPermissions, dispatch, locale, requestError, t, userId]);\n\n  const handleClick = async () => {\n    const eventData = {\n      Action: 'Clicked on open file dialog',\n      Component: 'ExportButton',\n      Page: currentPage,\n      Type: type\n    };\n    void mixpanelTrack(MIXPANEL_EVENT_NAME.EXPORT, eventData);\n\n    if (type === EXPORT_TYPES.CALL_REPORTS_EXPORT) {\n      window.dispatchEvent(new CustomEvent(EVENTS.OPEN_EXPORT_CALL_REPORTS));\n    } else if (type === EXPORT_TYPES.MESSAGE_REPORTS_EXPORT) {\n      window.dispatchEvent(new CustomEvent(EVENTS.OPEN_EXPORT_MESSAGE_REPORTS));\n    } else {\n      setExportModalOpen(true);\n    }\n  };\n\n  const handleCloseModal = () => {\n    setExportModalOpen(false);\n  };\n\n  const handleClose = () => {\n    const eventData = {\n      Action: `Clicked on close on file dialog`,\n      Component: 'ExportButton',\n      Page: currentPage,\n      Type: type\n    };\n\n    void mixpanelTrack(MIXPANEL_EVENT_NAME.EXPORT, eventData);\n    handleCloseModal();\n  };\n\n  const getFilteredItems = useCallback(\n    (fileType: ExportFileTypes): ExportableItem[] => {\n      return getExportableItems(type, fileType, t, shouldDisplayASMExport).filter(\n        item => item.supportedExportFormats.includes(fileType) && canAccess(item.access)\n      );\n    },\n    [type, t, shouldDisplayASMExport, canAccess]\n  );\n\n  const buildMixpanelEventData = useCallback(\n    (selectedNames: string[], fileType: ExportFileTypes) => {\n      const items = getFilteredItems(fileType);\n      return {\n        Action: `Clicked on export on file dialog`,\n        Component: 'ExportButton',\n        Page: currentPage,\n        Type: type,\n        FileType: fileType,\n        RequestedExports: items\n          .filter(item => !item.disabled && selectedNames.includes(item.id))\n          .map(item => ({\n            Id: item.id,\n            AllColumnsSelected: !item.items?.some(subItem => !subItem.selected),\n            SelectedColumns: item.items?.filter(subItem => subItem.selected).map(subItem => subItem.label)\n          }))\n      };\n    },\n    [currentPage, getFilteredItems, type]\n  );\n\n  const handleCsvExport = useCallback(\n    async (selectedNames: string[]) => {\n      void mixpanelTrack(MIXPANEL_EVENT_NAME.EXPORT, buildMixpanelEventData(selectedNames, exportFileTypes.CSV_FILE));\n      handleCloseModal();\n\n      const items = getFilteredItems(exportFileTypes.CSV_FILE);\n      const exportedItems = items.map(item => ({\n        ...item,\n        selected: selectedNames.includes(item.id)\n      }));\n\n      const exportParams = getBuilderParameters(type)({\n        state: state as unknown as RootState,\n        exportedItems,\n        dashboardId: currentDashboard?.id\n      }) as unknown as Record<string, ExportParams>;\n      const datasourceExportParams = _pickBy(exportParams, value => value.datasource);\n      if (_size(datasourceExportParams) > 0) {\n        await exportArchiveFilesDataSource(\n          t,\n          organizationId,\n          datasourceExportParams,\n          () => wasUnmounted,\n          currentPage,\n          currentDashboard,\n          (event, data) => {\n            void mixpanelTrack(event as MixpanelEventNameType, data);\n          },\n          filtersQuery,\n          setLoading,\n          setRequestError,\n          endOfTodayTime\n        );\n      }\n\n      if (_isFunction(onExportDone)) {\n        onExportDone();\n      }\n    },\n    [\n      buildMixpanelEventData,\n      currentDashboard,\n      currentPage,\n      endOfTodayTime,\n      filtersQuery,\n      getFilteredItems,\n      mixpanelTrack,\n      onExportDone,\n      organizationId,\n      state,\n      t,\n      type\n    ]\n  );\n\n  const handlePdfExport = useCallback(() => {\n    void mixpanelTrack(\n      MIXPANEL_EVENT_NAME.EXPORT,\n      buildMixpanelEventData(selectedItemsRef.current[exportFileTypes.PDF_FILE], exportFileTypes.PDF_FILE)\n    );\n    handleCloseModal();\n\n    formatDateRange(dateRange, DateTime.DATE_FULL, ['year', 'month']);\n    document.title = `${currentOrganization.name}-${formatDateRange(dateRange, DateTime.DATE_FULL, ['year', 'month'])}`;\n\n    onHandlePrint();\n    document.title = t('GoTo Analytics');\n  }, [buildMixpanelEventData, currentOrganization.name, dateRange, mixpanelTrack, t]);\n\n  useEffect(() => {\n    setIsExportDisabled(disabled || !dataLoaded || loading);\n  }, [disabled, dataLoaded, loading]);\n\n  const getTitle = useMemo((): string | undefined => {\n    if (!dataLoaded) {\n      return undefined;\n    }\n    const formatted = formatDateRangeForChip(dateRange, endOfTodayTime);\n    let filterDateRangeLabel: string;\n    if (formatted.convenientOption) {\n      filterDateRangeLabel = t(\n        selectedDateOptionsReadable.find(option => option.value === formatted.convenientOption)?.label ?? ''\n      );\n    } else {\n      filterDateRangeLabel = formatted.value;\n    }\n\n    return t('Export for {{filterDateRange}}', { filterDateRange: filterDateRangeLabel });\n  }, [dataLoaded, dateRange, t, endOfTodayTime]);\n\n  const csvConfig = useMemo((): ExportModalTypeConfig | undefined => {\n    const items = getFilteredItems(exportFileTypes.CSV_FILE);\n    if (items.length === 0) {\n      return undefined;\n    }\n    return {\n      handleExport: (optionNames: string[]) => {\n        void handleCsvExport(optionNames);\n      },\n      onSelectionChange: (optionNames: string[]) => {\n        selectedItemsRef.current[exportFileTypes.CSV_FILE] = optionNames;\n      },\n      options: items.map(item => ({\n        name: item.id,\n        label: item.label,\n        disabled: item.disabled\n      })),\n      defaultSelected: items.filter(item => item.selected).map(item => item.id),\n      message: t('Select tables to export. Each selection will export separately.')\n    };\n  }, [getFilteredItems, handleCsvExport, t]);\n\n  const pdfConfig = useMemo((): ExportModalTypeConfig | undefined => {\n    const items = getFilteredItems(exportFileTypes.PDF_FILE);\n    if (items.length === 0) {\n      return undefined;\n    }\n    return {\n      handleExport: (optionNames: string[]) => {\n        selectedItemsRef.current[exportFileTypes.PDF_FILE] = optionNames;\n        handlePdfExport();\n      },\n      onSelectionChange: (optionNames: string[]) => {\n        selectedItemsRef.current[exportFileTypes.PDF_FILE] = optionNames;\n      },\n      options: items.map(item => ({\n        name: item.id,\n        label: item.label,\n        disabled: item.disabled\n      })),\n      defaultSelected: items.filter(item => item.selected).map(item => item.id),\n      message: t('Save as PDF from the print window after clicking export.')\n    };\n  }, [getFilteredItems, handlePdfExport, t]);\n\n  return (\n    <>\n      <TooltipWrapper position=\"bottom-center\" title={tooltipLabel}>\n        {isIconButton ? (\n          <IconButton\n            className={styles.exportButton__button}\n            isLoading={!disabled && (!dataLoaded || loading)}\n            disabled={isExportDisabled}\n            size=\"small\"\n            variant=\"primary\"\n            onClick={() => {\n              void handleClick();\n            }}\n            label={t('Export')}>\n            <DownloadOutlinedIcon />\n          </IconButton>\n        ) : (\n          <Button\n            role=\"button\"\n            size=\"medium\"\n            disabled={isExportDisabled}\n            onClick={() => {\n              void handleClick();\n            }}\n            isLoading={!disabled && (!dataLoaded || loading)}>\n            {t('Export')}\n          </Button>\n        )}\n      </TooltipWrapper>\n\n      {exportModalOpen && (\n        <ExportModal\n          showTzComingSoonMessage={!hasFeatureFlag(FEATURE_FLAGS.CSV_EXPORT_STANDARDIZATION)}\n          title={getTitle}\n          open={exportModalOpen}\n          onClose={handleClose}\n          csv={csvConfig}\n          pdf={pdfConfig}\n        />\n      )}\n    </>\n  );\n};\n\nexport default ExportButton;\n",".filterContainerActions {\n  display: flex;\n}\n\n.filterContainerActions__settingButton {\n  display: flex;\n  justify-content: flex-end;\n\n  @media print {\n    padding: 0;\n  }\n}\n","import { useSelector } from 'react-redux';\nimport { dashboardTypes } from '../../configs/dashboard.config';\nimport { PERMISSIONS, Permissions } from '../../constants/permissions';\nimport { selectCurrentDashboard, selectUserHasPermission } from '../../store/selectors/analytics';\n\nexport const useDashboardTypePermission = () => {\n  const hasPermission = useSelector(selectUserHasPermission);\n  const dashboard = useSelector(selectCurrentDashboard);\n  const isUserIsPartOfThePbx = useSelector(\n    (state: { analytics: { userIsPartOfThePbx: boolean } }) => state.analytics.userIsPartOfThePbx\n  );\n\n  const hasDashboardTypePermissions = (permission: string, dashboardType: string) => {\n    return hasPermission(permission) && dashboard?.type === dashboardType && isUserIsPartOfThePbx;\n  };\n\n  const getPermissionByType = (dashboardType: string | undefined, permissionMap: Record<string, Permissions>) => {\n    switch (dashboardType) {\n      case dashboardTypes.CALL_REPORTS:\n        return isUserIsPartOfThePbx && hasPermission(permissionMap[dashboardTypes.CALL_REPORTS]);\n      case dashboardTypes.MESSAGE_REPORTS:\n        return isUserIsPartOfThePbx && hasPermission(permissionMap[dashboardTypes.MESSAGE_REPORTS]);\n      default:\n        return hasPermission(permissionMap.default);\n    }\n  };\n\n  const hasDashboardSavePermission = () => {\n    const permissionMap = {\n      [dashboardTypes.CALL_REPORTS]: PERMISSIONS.UNIFIED_CALL_REPORTS_DASHBOARDS_SAVE,\n      [dashboardTypes.MESSAGE_REPORTS]: PERMISSIONS.UNIFIED_MESSAGE_REPORTS_SAVE,\n      default: PERMISSIONS.UNIFIED_ANALYTICS_DASHBOARDS_SAVE\n    };\n\n    return getPermissionByType(dashboard?.type, permissionMap);\n  };\n\n  const hasSharedBoardPermission = () => {\n    const permissionMap = {\n      [dashboardTypes.CALL_REPORTS]: PERMISSIONS.UNIFIED_CALL_REPORTS_DASHBOARDS_SHARE,\n      [dashboardTypes.MESSAGE_REPORTS]: PERMISSIONS.UNIFIED_MESSAGE_REPORTS_SHARE,\n      default: PERMISSIONS.UNIFIED_ANALYTICS_DASHBOARDS_SHARE\n    };\n\n    return getPermissionByType(dashboard?.type, permissionMap);\n  };\n\n  const savingPermission = (dashboardType: string) => {\n    const permissionMap = {\n      [dashboardTypes.CALL_REPORTS]: PERMISSIONS.UNIFIED_CALL_REPORTS_DASHBOARDS_SAVE,\n      [dashboardTypes.MESSAGE_REPORTS]: PERMISSIONS.UNIFIED_MESSAGE_REPORTS_SAVE,\n      default: PERMISSIONS.UNIFIED_ANALYTICS_DASHBOARDS_SAVE\n    };\n\n    return getPermissionByType(dashboardType, permissionMap);\n  };\n\n  const editingPermission = (dashboardType: string) => {\n    const permissionMap = {\n      [dashboardTypes.CALL_REPORTS]: PERMISSIONS.UNIFIED_CALL_REPORTS_DASHBOARDS_RENAME_DELETE,\n      [dashboardTypes.MESSAGE_REPORTS]: PERMISSIONS.UNIFIED_MESSAGE_REPORTS_RENAME_DELETE,\n      default: PERMISSIONS.UNIFIED_ANALYTICS_RENAME_DELETE_DASHBOARD\n    };\n\n    return getPermissionByType(dashboardType, permissionMap);\n  };\n\n  const sharingPermission = (dashboardType: string) => {\n    const permissionMap = {\n      [dashboardTypes.CALL_REPORTS]: PERMISSIONS.UNIFIED_CALL_REPORTS_DASHBOARDS_SHARE,\n      [dashboardTypes.MESSAGE_REPORTS]: PERMISSIONS.UNIFIED_MESSAGE_REPORTS_SHARE,\n      default: PERMISSIONS.UNIFIED_ANALYTICS_DASHBOARDS_SHARE\n    };\n\n    return getPermissionByType(dashboardType, permissionMap);\n  };\n\n  const unsharingPermission = (dashboardType: string) => {\n    const permissionMap = {\n      [dashboardTypes.CALL_REPORTS]: PERMISSIONS.UNIFIED_CALL_REPORTS_DASHBOARDS_SHARE,\n      [dashboardTypes.MESSAGE_REPORTS]: PERMISSIONS.UNIFIED_MESSAGE_REPORTS_SHARE,\n      default: PERMISSIONS.UNIFIED_ANALYTICS_DASHBOARDS\n    };\n\n    return getPermissionByType(dashboardType, permissionMap);\n  };\n\n\n  return {\n    hasDashboardTypePermissions,\n    hasDashboardSavePermission,\n    hasSharedBoardPermission,\n    savingPermission,\n    editingPermission,\n    sharingPermission,\n    unsharingPermission,\n  };\n};\n","import { useSelector } from 'react-redux';\nimport { dashboardTypes } from '../../configs/dashboard.config';\nimport { PERMISSIONS } from '../../constants/permissions';\nimport { selectFeatureFlag, selectUserHasPermission } from '../../store/selectors/analytics';\nimport { FEATURE_FLAGS } from '../../utils/feature-flag';\n\nexport const useDashboardSchedulerPermission = () => {\n  const hasPermission = useSelector(selectUserHasPermission);\n  const hasFeatureFlag = useSelector(selectFeatureFlag);\n  const scheduleFeatureFlagEnabled = hasFeatureFlag(FEATURE_FLAGS.ENABLE_SCHEDULE_REPORTING) as boolean;\n\n  const hasSchedulerPermissionWithRead =\n    hasPermission(PERMISSIONS.UNIFIED_ANALYTICS_SCHEDULER_READ) ||\n    hasPermission(PERMISSIONS.UNIFIED_ANALYTICS_SCHEDULER_READ_ALL) ||\n    (scheduleFeatureFlagEnabled &&\n      (hasPermission(PERMISSIONS.UNIFIED_CALL_REPORTS_SCHEDULE) ||\n        hasPermission(PERMISSIONS.UNIFIED_MESSAGE_REPORTS_SCHEDULE)));\n\n  const hasAnalyticsSchedulerPermission =\n    hasPermission(PERMISSIONS.UNIFIED_ANALYTICS_SCHEDULER) ||\n    (scheduleFeatureFlagEnabled &&\n      (hasPermission(PERMISSIONS.UNIFIED_CALL_REPORTS_SCHEDULE) ||\n        hasPermission(PERMISSIONS.UNIFIED_MESSAGE_REPORTS_SCHEDULE)));\n\n  const getSchedulerPermissionByType = (dashboardType: string | undefined) => {\n    switch (dashboardType) {\n      case dashboardTypes.CALL_REPORTS:\n        return scheduleFeatureFlagEnabled && hasPermission(PERMISSIONS.UNIFIED_CALL_REPORTS_SCHEDULE);\n      case dashboardTypes.MESSAGE_REPORTS:\n        return scheduleFeatureFlagEnabled && hasPermission(PERMISSIONS.UNIFIED_MESSAGE_REPORTS_SCHEDULE);\n      default:\n        return (\n          hasPermission(PERMISSIONS.UNIFIED_ANALYTICS_SCHEDULER_MANAGE) ||\n          hasPermission(PERMISSIONS.UNIFIED_ANALYTICS_SCHEDULER_MANAGE_ALL)\n        );\n    }\n  };\n\n  return {\n    getSchedulerPermissionByType,\n    hasSchedulerPermissionWithRead,\n    hasAnalyticsSchedulerPermission\n  };\n};\n","import { isEmpty as _isEmpty } from 'lodash';\nimport { Frequencies, NotificationType, ScheduleStatus } from '../../constants/scheduler';\nimport environment from '../../environments';\nimport { ScheduleDashboardType } from '../../types/dashboard/ScheduleTypes';\nimport { analyticsDownloadService, analyticsFetchService, analyticsSaveService } from './analytics-fetch.service';\nimport { getTimeZone } from './users.service';\n\nexport type ScheduledDashboardsListResponse = {\n  items: ScheduleDashboardType[];\n  total: number;\n  matchesTotal: number;\n};\n\nexport type ScheduledDashboardUser = {\n  userId: string;\n  userKey: string;\n  firstName?: string;\n  lastName?: string;\n  email?: string;\n  selected?: boolean;\n  status?: string;\n};\n\nexport type ScheduledDashboardUsersResponse = {\n  items: ScheduledDashboardUser[];\n};\n\nexport type ScheduledDashboardCountResponse = {\n  total: number;\n};\n\nexport type ScheduledDashboardDownloadLinkResponse = {\n  url: string;\n};\n\nconst getScheduledDashboardsUrl = (organizationId: string): string =>\n  `${environment.api.analyticsBff.url}/organizations/${organizationId}${environment.scheduledDashboardsEndpoint}`;\n\nexport const fetchScheduledDashboards = (\n  organizationId: string,\n  page: number,\n  pageSize: number,\n  search: string,\n  sort: string,\n  controller: AbortController\n): Promise<ScheduledDashboardsListResponse> => {\n  const scheduledDashboardsUrl = new URL(getScheduledDashboardsUrl(organizationId));\n\n  scheduledDashboardsUrl.searchParams.append('page', String(page));\n  scheduledDashboardsUrl.searchParams.append('pageSize', String(pageSize));\n  scheduledDashboardsUrl.searchParams.append('sort', sort);\n  if (!_isEmpty(search)) {\n    scheduledDashboardsUrl.searchParams.append('q', search);\n  }\n\n  return analyticsFetchService<ScheduledDashboardsListResponse>(scheduledDashboardsUrl.toString(), controller);\n};\n\nexport const fetchScheduledDashboardUsers = (\n  organizationId: string,\n  scheduledId: string | null | undefined,\n  search: string | null | undefined,\n  controller: AbortController\n): Promise<ScheduledDashboardUsersResponse> => {\n  const scheduledDashboardsUrl = new URL(\n    `${getScheduledDashboardsUrl(organizationId)}${environment.scheduledDashboardUsersEndpoint}`\n  );\n\n  if (scheduledId && !_isEmpty(scheduledId)) {\n    scheduledDashboardsUrl.searchParams.append('scheduledId', scheduledId);\n  }\n  if (search && !_isEmpty(search)) {\n    scheduledDashboardsUrl.searchParams.append('q', search);\n  }\n\n  return analyticsFetchService<ScheduledDashboardUsersResponse>(scheduledDashboardsUrl.toString(), controller);\n};\n\nexport const saveScheduledDashboard = (\n  organizationId: string,\n  id: string | null | undefined,\n  recipients: Array<Pick<ScheduledDashboardUser, 'userKey'>>,\n  dashboardId: string | undefined,\n  startTime: string | null,\n  dateRange: string | null,\n  frequency: Frequencies | string,\n  fileTypes: string[],\n  notificationType: NotificationType | string,\n  controller: AbortController,\n  timeZone: string = getTimeZone()\n): Promise<unknown> => {\n  const baseUrl = getScheduledDashboardsUrl(organizationId);\n  const url = id ? `${baseUrl}/${id}` : baseUrl;\n  const method = id ? 'PUT' : 'POST';\n\n  const dataBody = {\n    dashboardId,\n    recipients,\n    startTime,\n    dateRange,\n    frequency,\n    fileTypes,\n    notificationType,\n    timeZone\n  };\n\n  return analyticsSaveService(url, JSON.stringify(dataBody), controller, method);\n};\n\nexport const deleteScheduledDashboard = (\n  organizationId: string,\n  scheduleId: string,\n  controller: AbortController\n): Promise<unknown> =>\n  analyticsSaveService(`${getScheduledDashboardsUrl(organizationId)}/${scheduleId}`, null, controller, 'DELETE', true);\n\nexport const getScheduleDashboardDownloadLink = (\n  organizationId: string,\n  generatedScheduleId: string,\n  fileType: string,\n  controller: AbortController\n): Promise<ScheduledDashboardDownloadLinkResponse> =>\n  analyticsFetchService<ScheduledDashboardDownloadLinkResponse>(\n    `${getScheduledDashboardsUrl(organizationId)}/schedules-history/${generatedScheduleId}/download?fileType=${fileType}`,\n    controller\n  );\n\nexport const getScheduleDashboardDownloadFile = (url: string, controller: AbortController): Promise<File> =>\n  analyticsDownloadService(url, controller);\n\nexport const updateScheduleDashboardStatus = (\n  organizationId: string,\n  scheduledDashboardId: string,\n  status: ScheduleStatus,\n  controller: AbortController\n): Promise<unknown> => {\n  const dataBody = {\n    status\n  };\n\n  return analyticsSaveService(\n    `${getScheduledDashboardsUrl(organizationId)}/${scheduledDashboardId}/status`,\n    JSON.stringify(dataBody),\n    controller,\n    'PUT',\n    true\n  );\n};\n\nexport const fetchScheduledDashboardsCount = (\n  organizationId: string,\n  controller: AbortController\n): Promise<ScheduledDashboardCountResponse> => {\n  const scheduledDashboardsCountUrl = `${getScheduledDashboardsUrl(organizationId)}/count`;\n  return analyticsFetchService<ScheduledDashboardCountResponse>(scheduledDashboardsCountUrl, controller);\n};\n",".settingButton__icon {\n  ::part(control) {\n    width: 256px;\n    height: 256px;\n  }\n}\n","import { useTranslation } from 'react-i18next';\nimport { IconButton } from '@getgo/chameleon-web-react-wrapper';\nimport { SettingsOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport PropTypes from 'prop-types';\nimport { TooltipWrapper } from '@analytics-common-ui/layout';\nimport styles from './SettingButton.module.scss';\n\nexport const SettingButton = ({ onClick }) => {\n  const { t } = useTranslation();\n\n  const title = t('Settings', { context: 'Button to open the settings menu' });\n  return (\n    <TooltipWrapper title={title}>\n      <IconButton\n        size=\"small\"\n        aria-label={title}\n        label={title}\n        onClick={onClick}\n        className={styles.settingButton__icon}>\n        <SettingsOutlinedIcon />\n      </IconButton>\n    </TooltipWrapper>\n  );\n};\n\nSettingButton.propTypes = {\n  onClick: PropTypes.func.isRequired\n};\n","import {\n  CopyOutlinedIcon,\n  HistoryOutlinedIcon,\n  SaveOutlinedIcon,\n  ShareArrowOutlinedIcon\n} from '@getgo/chameleon-icons/react';\nimport { IconButton } from '@getgo/chameleon-web-react-wrapper';\nimport PropTypes from 'prop-types';\nimport { useMemo, useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport configs from '../../../../configs';\nimport { MAX_SCHEDULES_LIMIT } from '../../../../constants/scheduler';\nimport { MODALS } from '../../../../constants/modals';\nimport useUpdateDashboard from '../../../../hooks/dashboards/useUpdateDashboard';\nimport { useAccessCheck } from '../../../../hooks/permissions/useAccessCheck.ts';\nimport { getExportAccess } from '../../../../services/common/export-config.service';\nimport { setModalOpen } from '../../../../store/Analytics/analytics.slice';\nimport {\n  selectCurrentDashboard,\n  selectIsUserReadOnly,\n  selectUserKey,\n  selectCurrentOrganizationId\n} from '../../../../store/selectors/analytics';\nimport { selectAnalyticsFiltersDataLoaded } from '../../../../store/selectors/filtersV2';\nimport { getPageIdFromDashboardType } from '../../../../utils/page.util.ts';\nimport ExportButton from '../../Export/ExportButton/ExportButton';\n\nimport { TooltipWrapper } from '@analytics-common-ui/layout';\nimport styles from './FilterContainerActions.module.scss';\nimport { useDashboardTypePermission } from '../../../../hooks/permissions/useDashboardTypePermission.ts';\nimport { MIXPANEL_EVENT_NAME } from '../../../../constants/mixpanel.ts';\nimport useMixpanel from '../../../../hooks/useMixpanel.ts';\nimport { useDashboardSchedulerPermission } from '../../../../hooks/permissions/useDashboardSchedulerPermission';\nimport { fetchScheduledDashboardsCount } from '../../../../services/common/scheduled-dashboards.service';\nimport { SettingButton } from '../../SettingButton/SettingButton';\n\nconst FilterContainerActions = ({ filterHasBeenChanged, showSettings, onSettingsClick }) => {\n  const { t } = useTranslation();\n  const currentDashboard = useSelector(selectCurrentDashboard);\n  const dispatch = useDispatch();\n  const mixpanelTrack = useMixpanel();\n  const update = useUpdateDashboard();\n\n  const currentOrganization = useSelector(selectCurrentOrganizationId);\n  const userKey = useSelector(selectUserKey);\n  const isReadonly = useSelector(selectIsUserReadOnly);\n  const canAccess = useAccessCheck();\n  const { hasDashboardSavePermission, hasSharedBoardPermission } = useDashboardTypePermission();\n  const { getSchedulerPermissionByType } = useDashboardSchedulerPermission();\n\n  const hasAccessSaveDashboards = !isReadonly && hasDashboardSavePermission();\n\n  const hasScheduleBoardPermission = getSchedulerPermissionByType(currentDashboard.type);\n\n  const isUpdateOptionVisible = !currentDashboard?.isSystemDashboard && currentDashboard?.ownerUserKey === userKey;\n\n  const isShareButtonVisible =\n    hasSharedBoardPermission() && !currentDashboard?.isSystemDashboard && currentDashboard?.ownerUserKey === userKey;\n\n  const dashboardConfig = configs[getPageIdFromDashboardType(currentDashboard.type)];\n\n  const isScheduleButtonVisible =\n    hasScheduleBoardPermission &&\n    !currentDashboard?.isSystemDashboard &&\n    currentDashboard?.ownerUserKey === userKey &&\n    dashboardConfig.scheduleEnabled;\n\n  const analyticsFiltersDataLoaded = useSelector(selectAnalyticsFiltersDataLoaded);\n\n  const isExportDisabled = useMemo(\n    () => !dashboardConfig.export.enabled || !canAccess(getExportAccess(dashboardConfig.export.type)),\n    [dashboardConfig.export.enabled, dashboardConfig.export.type, canAccess]\n  );\n\n  const exportButtonTooltipLabel = useMemo(() => {\n    if (isExportDisabled) {\n      if (!dashboardConfig.export.enabled) {\n        return t('Export is unavailable for this board.');\n      }\n\n      if (!analyticsFiltersDataLoaded) {\n        return t('Filters loading, please wait.');\n      }\n\n      if (!canAccess(getExportAccess(dashboardConfig.export.type))) {\n        return t('Insufficient privileges');\n      }\n    }\n\n    return 'Export';\n  }, [\n    isExportDisabled,\n    dashboardConfig.export.enabled,\n    dashboardConfig.export.type,\n    analyticsFiltersDataLoaded,\n    canAccess,\n    t\n  ]);\n\n  const onUpdate = () => {\n    update({ dashboard: currentDashboard });\n  };\n\n  const onSaveAs = () => {\n    const eventData = {\n      Action: 'Board save button clicked',\n      Component: 'FilterContainerActions',\n      Modal: MODALS.SAVE_DASHBOARD\n    };\n    mixpanelTrack(MIXPANEL_EVENT_NAME.DASHBOARD, eventData);\n    dispatch(\n      setModalOpen({\n        modal: MODALS.SAVE_DASHBOARD,\n        dashboardId: currentDashboard?.id\n      })\n    );\n  };\n\n  const onShare = () => {\n    dispatch(\n      setModalOpen({\n        modal: MODALS.SHARE_DASHBOARD,\n        dashboardId: currentDashboard?.id\n      })\n    );\n  };\n\n  const checkScheduleLimit = useCallback(async () => {\n    try {\n      const response = await fetchScheduledDashboardsCount(currentOrganization, new AbortController());\n      const totalSchedules = response?.total || 0;\n      return totalSchedules >= MAX_SCHEDULES_LIMIT;\n    } catch (error) {\n      console.error('Error checking schedule limit:', error);\n      return false;\n    }\n  }, [currentOrganization]);\n\n  const onSchedule = async () => {\n    const isLimitReached = await checkScheduleLimit();\n\n    if (isLimitReached) {\n      dispatch(setModalOpen({ modal: MODALS.MAX_SCHEDULES_REACHED }));\n    } else {\n      dispatch(setModalOpen({ modal: MODALS.ADD_SCHEDULED_DASHBOARD, dashboardId: currentDashboard?.id }));\n    }\n  };\n\n  return (\n    <div className={styles.filterContainerActions}>\n      {hasAccessSaveDashboards && isUpdateOptionVisible && filterHasBeenChanged && (\n        <TooltipWrapper placement=\"bottom\" title={t('Save Filter')}>\n          <IconButton size=\"small\" variant=\"primary\" onClick={onUpdate} label={t('Save Filter')}>\n            <SaveOutlinedIcon />\n          </IconButton>\n        </TooltipWrapper>\n      )}\n      {hasAccessSaveDashboards && (\n        <TooltipWrapper placement=\"bottom\" title={t('Save As')}>\n          <IconButton\n            size=\"small\"\n            variant=\"primary\"\n            onClick={onSaveAs}\n            data-testid=\"filter-container-save-as\"\n            label={t('Save As')}\n            isLoading={!analyticsFiltersDataLoaded}>\n            <CopyOutlinedIcon />\n          </IconButton>\n        </TooltipWrapper>\n      )}\n      {isShareButtonVisible && (\n        <TooltipWrapper placement=\"bottom\" title={t('Share')}>\n          <IconButton\n            size=\"small\"\n            variant=\"primary\"\n            onClick={onShare}\n            label={t('Share')}\n            data-testid=\"filter-container-share\"\n            isLoading={!analyticsFiltersDataLoaded}>\n            <ShareArrowOutlinedIcon />\n          </IconButton>\n        </TooltipWrapper>\n      )}\n      {isScheduleButtonVisible && (\n        <TooltipWrapper placement=\"bottom\" title={t('Schedule')}>\n          <IconButton\n            size=\"small\"\n            variant=\"primary\"\n            onClick={onSchedule}\n            label={t('Schedule')}\n            isLoading={!analyticsFiltersDataLoaded}>\n            <HistoryOutlinedIcon />\n          </IconButton>\n        </TooltipWrapper>\n      )}\n      <ExportButton\n        type={dashboardConfig.export.type}\n        disabled={isExportDisabled}\n        tooltipLabel={exportButtonTooltipLabel}\n      />\n      {showSettings && (\n        <div className={styles.filterContainerActions__settingButton}>\n          <SettingButton onClick={onSettingsClick} />\n        </div>\n      )}\n    </div>\n  );\n};\n\nFilterContainerActions.propTypes = {\n  /** Indicate that the filters base has changed */\n  filterHasBeenChanged: PropTypes.bool,\n  /** Whether to show the settings button */\n  showSettings: PropTypes.bool,\n  /** Function to be called when the settings button is clicked */\n  onSettingsClick: PropTypes.func\n};\n\nexport default FilterContainerActions;\n","import { useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { TEXT_FORMAT } from '../constants/filters-definitions';\nimport { validateFilterInput, getFilterInputErrorMessage, ONLY_NUMBERS_WITH_PLUS } from '../constants/validation';\n\ninterface UseFilterInputValidationOptions {\n  maxLength?: number;\n  format?: string;\n}\n\ninterface UseFilterInputValidationReturn {\n  isValid: boolean;\n  errorMessage: string | undefined;\n}\n\nexport const useFilterInputValidation = (\n  value: string,\n  options?: UseFilterInputValidationOptions\n): UseFilterInputValidationReturn => {\n  const { t } = useTranslation();\n  const maxLength = options?.maxLength;\n  const format = options?.format;\n\n  return useMemo(() => {\n    if (!value) {\n      return { isValid: true, errorMessage: undefined };\n    }\n    const isValidFormat = format === TEXT_FORMAT.PHONE ? (val: string) => ONLY_NUMBERS_WITH_PLUS.test(val) : undefined;\n    const lengthUnit = format === TEXT_FORMAT.PHONE ? ('digits' as const) : undefined;\n    const validationOptions = { maxLength, isValidFormat, lengthUnit };\n    const { valid } = validateFilterInput(value, validationOptions);\n    return {\n      isValid: valid,\n      errorMessage: valid ? undefined : getFilterInputErrorMessage(value, t, validationOptions)\n    };\n  }, [value, t, maxLength, format]);\n};\n","import { useCallback, useState, useEffect } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { TEXT_FORMAT } from '../constants/filters-definitions';\nimport { MIXPANEL_EVENT_NAME } from '../constants/mixpanel';\nimport { capToMaxLength } from '../constants/validation';\nimport { selectCurrentOrganizationId } from '../store/selectors/analytics';\nimport { sanitizePhoneNumber } from '../utils/strings.util';\nimport useMixpanel from './useMixpanel';\n\nexport type TextOptionItem = {\n  id: string;\n  label: string;\n  selected: boolean;\n  name?: string;\n};\n\ntype StoredOrgFilters = {\n  orgId: string;\n  filters: TextOptionItem[];\n};\n\ntype TextWithOptionsConfig = {\n  localStorageKey?: string;\n  localStorageDisabled?: boolean;\n  isValidOption?: (value: string) => boolean;\n  optionIdFormatter?: (value: string) => string;\n  maxLength?: number;\n  maxItems?: number;\n  format?: string;\n};\n\nconst retrieveFilter = (key: string): StoredOrgFilters[] | null =>\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n  JSON.parse(localStorage.getItem(key) ?? 'null');\n\nconst storeFilter = (key: string, data: TextOptionItem[], orgId: string): void => {\n  const storedFilters = retrieveFilter(key) || [];\n  const existingFilters = storedFilters.find(item => item.orgId === orgId);\n\n  if (!existingFilters) {\n    storedFilters.push({ orgId, filters: data });\n  } else {\n    existingFilters.filters = data;\n  }\n\n  localStorage.setItem(key, JSON.stringify(storedFilters));\n};\n\nconst sanitizeStoredOption = (option: TextOptionItem, textOptions: TextWithOptionsConfig): TextOptionItem => {\n  const sanitizeValue = (value: string | undefined): string | undefined => {\n    if (typeof value !== 'string') {\n      return value;\n    }\n    const formatted = textOptions.format === TEXT_FORMAT.PHONE ? sanitizePhoneNumber(value) : value;\n    return textOptions.maxLength !== undefined ? capToMaxLength(formatted, textOptions.maxLength) : formatted;\n  };\n\n  return {\n    ...option,\n    id: sanitizeValue(option.id) ?? option.id,\n    label: sanitizeValue(option.label) ?? option.label,\n    name: sanitizeValue(option.name)\n  };\n};\n\nexport const useTextWithOptions = (\n  textOptions: TextWithOptionsConfig,\n  currentFilter: TextOptionItem[],\n  setCurrentFilterValue: (options: TextOptionItem[]) => void,\n  filterLabel?: string\n) => {\n  const mixpanelTrack = useMixpanel();\n  const organizationId = useSelector(selectCurrentOrganizationId)!;\n  const savedFilters =\n    !textOptions.localStorageDisabled && textOptions.localStorageKey ? retrieveFilter(textOptions.localStorageKey) : [];\n  const organizationFilters = savedFilters?.find(item => item.orgId === organizationId);\n\n  const [textValue, setTextValue] = useState('');\n  const [options, setOptions] = useState<TextOptionItem[]>(currentFilter);\n  const [hoveredOption, setHoveredOption] = useState<TextOptionItem | undefined>(undefined);\n\n  // TODO handle hooks correctly on the whole file\n  /* eslint-disable react-hooks/exhaustive-deps */\n  useEffect(() => {\n    if (savedFilters && organizationFilters && Array.isArray(organizationFilters.filters)) {\n      const initialOptions = organizationFilters.filters\n        .map(filter => sanitizeStoredOption({ ...filter, selected: false }, textOptions))\n        .filter(filter => filter.id);\n      if (currentFilter.length === 0) {\n        setOptions(initialOptions);\n      } else {\n        const filteredOption = initialOptions.filter(\n          ({ id }) => !currentFilter.find(({ id: currentId }) => currentId.toLowerCase() === id.toLowerCase())\n        );\n\n        setOptions(currentFilter.concat(...filteredOption));\n      }\n    } else {\n      setOptions(currentFilter);\n    }\n  }, [currentFilter]);\n\n  const addNewOption = useCallback(() => {\n    if (!textValue || !textOptions?.isValidOption?.(textValue)) {\n      return;\n    }\n\n    let localTextValue = textValue;\n    let localLabelValue = textValue;\n\n    if (textOptions.optionIdFormatter) {\n      localTextValue = textOptions.optionIdFormatter(textValue);\n    }\n\n    if (textOptions.maxLength !== undefined) {\n      localTextValue = capToMaxLength(localTextValue, textOptions.maxLength);\n      localLabelValue = capToMaxLength(localLabelValue, textOptions.maxLength);\n    }\n\n    let newOptions: TextOptionItem[];\n    const canBeSelected = !textOptions?.maxItems || options.filter(op => op.selected).length < textOptions.maxItems;\n    const existingOption = options.find(op => op.id.toLowerCase() === localTextValue.toLowerCase());\n    if (!existingOption) {\n      newOptions = [\n        { id: localTextValue, label: localLabelValue, name: localTextValue, selected: canBeSelected },\n        ...options\n      ];\n    } else {\n      const updatedOption = { ...existingOption, selected: canBeSelected ? true : existingOption.selected };\n      newOptions = options.map(option => (option.id === existingOption.id ? updatedOption : option));\n    }\n    setOptions(newOptions);\n    setTextValue('');\n    setCurrentFilterValue(newOptions);\n    if (!textOptions.localStorageDisabled) {\n      storeFilter(textOptions.localStorageKey!, newOptions, organizationId);\n    }\n    const eventData = {\n      Action: `Text option filter added`,\n      Component: 'TextWithOptionsFilter',\n      FilterLabel: filterLabel\n    };\n    void mixpanelTrack(MIXPANEL_EVENT_NAME.FILTER, eventData);\n  }, [options, textOptions, textValue, setCurrentFilterValue]);\n\n  const removeOption = useCallback(\n    (optionId: string) => {\n      const newOptions = options.filter(op => op.id !== optionId);\n      setOptions(newOptions);\n\n      setCurrentFilterValue(newOptions);\n\n      if (!textOptions.localStorageDisabled) {\n        storeFilter(textOptions.localStorageKey!, newOptions, organizationId);\n      }\n      const eventData = {\n        Action: `Text option filter removed`,\n        Component: 'TextWithOptionsFilter',\n        FilterLabel: filterLabel\n      };\n      void mixpanelTrack(MIXPANEL_EVENT_NAME.FILTER, eventData);\n    },\n    [options, textOptions, setCurrentFilterValue]\n  );\n\n  const updateOption = useCallback(\n    (optionId: string, newOption: TextOptionItem) => {\n      if (newOption.selected && !options.some(option => option.id === newOption.id)) {\n        const selected = !textOptions?.maxItems || options.filter(op => op.selected).length < textOptions.maxItems;\n        const updatedOptions = [{ ...newOption, selected }, ...options];\n\n        setOptions(updatedOptions);\n        setCurrentFilterValue(updatedOptions);\n\n        if (!textOptions.localStorageDisabled) {\n          storeFilter(textOptions.localStorageKey!, updatedOptions, organizationId);\n        }\n      } else {\n        const updatedOptions = options.map(option => (option.id === optionId ? newOption : option));\n\n        setOptions(updatedOptions);\n        setCurrentFilterValue(updatedOptions);\n\n        if (!textOptions.localStorageDisabled) {\n          storeFilter(textOptions.localStorageKey!, updatedOptions, organizationId);\n        }\n      }\n    },\n    [options, setCurrentFilterValue]\n  );\n\n  const onEnter = useCallback(\n    (e: { key: string }) => {\n      if (e.key === 'Enter') {\n        addNewOption();\n      }\n    },\n    [addNewOption]\n  );\n\n  return {\n    onEnter,\n    updateOption,\n    removeOption,\n    addNewOption,\n    hoveredOption,\n    options,\n    setHoveredOption,\n    textValue,\n    setTextValue\n  };\n};\n/* eslint-enable react-hooks/exhaustive-deps */\n","import { useState, useCallback, useEffect, useRef } from 'react';\nimport { isFilterInputValid, matchesCappedId } from '../constants/validation';\nimport { useFilterInputValidation } from './useFilterInputValidation';\nimport type { FilterItem } from './useHierarchicalSelect';\nimport { useTextWithOptions } from './useTextWithOptions';\n\ninterface TextOptions {\n  localStorageKey?: string;\n  localStorageDisabled?: boolean;\n  format?: string;\n  maxLength?: number;\n  trimSpaces?: boolean;\n  isValidOption?: (val: string) => boolean;\n  optionIdFormatter?: (val: string) => string;\n  maxItems?: number;\n  translations?: {\n    textFilterPlaceholder?: string;\n  };\n}\n\ninterface UseCustomFilterItemsOptions {\n  enabled: boolean;\n  textOptions: TextOptions;\n  filterLabel: string;\n  initialItems?: FilterItem[];\n}\n\ninterface UseCustomFilterItemsReturn {\n  customOptions: FilterItem[];\n  customTextValue: string;\n  setCustomTextValue: (value: string) => void;\n  addNewOption: () => void;\n  removeCustomOption: (id: string) => void;\n  updateCustomOption: (id: string, option: FilterItem) => void;\n  hoveredCustomOption: string | undefined;\n  setHoveredCustomOption: (id?: string) => void;\n  onCustomEnter: (e: KeyboardEvent) => void;\n  isAddButtonVisible: boolean;\n  inputErrorMessage: string | undefined;\n  isInputValid: (value: string) => boolean;\n  mergeWithElements: (elements: FilterItem[]) => FilterItem[];\n  removedIds: Set<string>;\n  clearRemovedIds: (ids: string[]) => void;\n}\n\nconst DISABLED_TEXT_OPTIONS = {\n  localStorageDisabled: true,\n  isValidOption: () => false,\n  translations: {}\n};\n\nexport const useCustomFilterItems = ({\n  enabled,\n  textOptions,\n  filterLabel,\n  initialItems\n}: UseCustomFilterItemsOptions): UseCustomFilterItemsReturn => {\n  const [customFilterValue, setCustomFilterValue] = useState<FilterItem[]>([]);\n  const [removedIds, setRemovedIds] = useState<Set<string>>(new Set());\n  const initialItemsSeededRef = useRef(false);\n\n  useEffect(() => {\n    if (!enabled || initialItemsSeededRef.current) {\n      return;\n    }\n    initialItemsSeededRef.current = true;\n    if (!initialItems || initialItems.length === 0) {\n      return;\n    }\n    setCustomFilterValue(prev => {\n      const existingIds = new Set(prev.map(item => item.id.toLowerCase()));\n      const newItems = initialItems\n        .filter(item => !existingIds.has(item.id.toLowerCase()))\n        .map(item => ({ id: item.id, label: item.label || item.id, selected: item.selected ?? true }));\n      return newItems.length > 0 ? [...newItems, ...prev] : prev;\n    });\n  }, [enabled, initialItems]);\n\n  type TextWithOptionsResult = {\n    addNewOption: () => void;\n    hoveredOption: string | undefined;\n    onEnter: (e: KeyboardEvent) => void;\n    removeOption: (id: string) => void;\n    setHoveredOption: (id?: string) => void;\n    setTextValue: (value: string) => void;\n    textValue: string;\n    updateOption: (id: string, option: FilterItem) => void;\n    options: FilterItem[];\n  };\n\n  const textWithOptions = useTextWithOptions(\n    enabled ? textOptions : DISABLED_TEXT_OPTIONS,\n    customFilterValue,\n    setCustomFilterValue,\n    filterLabel\n  ) as TextWithOptionsResult;\n\n  const {\n    addNewOption,\n    hoveredOption: hoveredCustomOption,\n    onEnter: onCustomEnter,\n    removeOption,\n    setHoveredOption: setHoveredCustomOption,\n    setTextValue: setCustomTextValue,\n    textValue: customTextValue,\n    updateOption: updateCustomOption,\n    options: customOptions\n  } = textWithOptions;\n\n  const removeCustomOption = useCallback(\n    (id: string) => {\n      setRemovedIds(prev => new Set(prev).add(id.toLowerCase()));\n      removeOption(id);\n    },\n    [removeOption]\n  );\n\n  const { isValid: isCustomTextValid, errorMessage: inputErrorMessage } = useFilterInputValidation(\n    enabled ? customTextValue : '',\n    enabled ? { maxLength: textOptions.maxLength, format: textOptions.format } : undefined\n  );\n\n\n  const isAddButtonVisible = customTextValue.length > 0 && isCustomTextValid;\n\n  const clearRemovedIds = useCallback(\n    (ids: string[]) => {\n      if (ids.length === 0) {\n        return;\n      }\n      setRemovedIds(prev => {\n        if (prev.size === 0) {\n          return prev;\n        }\n        const next = new Set(prev);\n        ids.forEach(id => next.delete(id.toLowerCase()));\n        return next;\n      });\n    },\n    []\n  );\n\n  const mergeWithElements = useCallback(\n    (elements: FilterItem[]): FilterItem[] => {\n      if (!enabled || (customOptions.length === 0 && removedIds.size === 0)) {\n        return elements;\n      }\n      const customIds = new Set(customOptions.map(o => o.id.toLowerCase()));\n      const nonCustomElements = elements\n        .filter(el => !matchesCappedId(el.id, customIds, textOptions.maxLength))\n        .map(el => (removedIds.has(el.id.toLowerCase()) ? { ...el, selected: false } : el));\n\n      return [...customOptions, ...nonCustomElements];\n    },\n    [enabled, customOptions, removedIds, textOptions.maxLength]\n  );\n\n  return {\n    customOptions,\n    customTextValue,\n    setCustomTextValue,\n    addNewOption,\n    removeCustomOption,\n    updateCustomOption,\n    hoveredCustomOption,\n    setHoveredCustomOption,\n    onCustomEnter,\n    isAddButtonVisible,\n    inputErrorMessage,\n    isInputValid: isFilterInputValid,\n    mergeWithElements,\n    removedIds,\n    clearRemovedIds\n  };\n};\n","/* stylelint-disable */\n\n.multiSelectList {\n  display: flex;\n  flex-direction: column;\n  padding-top: var(--goto-spacing-02);\n  padding-bottom: var(--goto-spacing-01);\n}\n\n.multiSelectList_outlined {\n  border-bottom: 1px solid var(--goto-border-color-default);\n}\n\n.multiSelectList_offset {\n  padding-left: 0.85rem;\n}\n\n.multiSelectList__title_disabled {\n  &:hover,\n  &.Mui-focusVisible {\n    & input ~ span {\n      background-color: var(--goto-interactive-color-disabled);\n    }\n    & span > span > input[data-indeterminate='true'] ~ span {\n      background-color: var(--goto-interactive-color-disabled);\n      border-color: var(--goto-interactive-color-disabled);\n    }\n  }\n}\n\n.multiSelectList__title {\n  align-items: center;\n  display: flex;\n  height: 32px;\n\n  &::part(text) {\n    align-items: center;\n    display: flex;\n    font: var(--goto-body-small);\n  }\n\n  &:active {\n    & input ~ span {\n      background-color: var(--goto-interactive-color-secondary-pressed);\n      border-color: var(--goto-surface-color-brand-secondary);\n      box-shadow: none;\n      color: var(--goto-type-color-inverted);\n    }\n  }\n  & input:checked ~ span {\n    background-color: var(--goto-surface-color-brand-default);\n    border-color: var(--goto-border-color-default);\n  }\n  &:hover {\n    background-color: var(--goto-interactive-color-secondary-hover);\n  }\n}\n\n.multiSelectList__titleCollapse {\n  &.Mui-ButtonLabel,\n  svg {\n    color: var(--goto-type-color-secondary);\n  }\n}\n\n.multiSelectList__titleCheckbox {\n  width: 100%;\n  &::part(control) {\n    --goto-type-color-default: var(--goto-type-color-secondary);\n    margin-right: var(--goto-spacing-04);\n  }\n  &::part(label) {\n    color: var(--goto-type-color-default);\n    font-family: var(--goto-body-small);\n  }\n}\n\n.multiSelectList__list {\n  max-height: 360px;\n  overflow-y: auto;\n  padding: 0;\n  margin: 0;\n  transition: 0.4s;\n}\n\n.multiSelectList__scrollable {\n  max-height: 360px;\n  overflow-y: auto;\n  padding: 0;\n  margin: 0;\n}\n\n.multiSelectList__listbox {\n  max-height: 360px;\n  overflow-y: auto;\n  position: relative;\n\n  &::before { // This is used to set the proper height of the list while elements are being added to the DOM\n    position: absolute;\n    content: \"\";\n    height: calc(var(--multi-select-list-option-count) * 32px);\n    width: 1px;\n    pointer-events: none;\n  }\n\n  &:focus-visible {\n    outline: 1px solid var(--goto-focus-color-highlight-default);\n    outline-offset: 2px;\n    border-radius: var(--goto-radius-small);\n    --focused-option-background-color: var(--goto-surface-color-secondary)\n  }\n}\n\n.multiSelectList__loadingIndicator {\n  width: 100%;\n  padding: var(--goto-spacing-01);\n}\n\n.multiSelectList__sentinel {\n  height: 1px;\n  width: 100%;\n}\n\n.multiSelectList__option {\n  display: flex;\n  height: 32px;\n  padding: 0 0.85rem;\n  align-items: center;\n  gap: var(--goto-spacing-04);\n  font: var(--goto-body-small);\n  cursor: pointer;\n\n\n  &[data-listbox-active-descendant=\"true\"] {\n    background-color: var(--focused-option-background-color);\n  }\n\n  &:hover {\n    background-color: var(--goto-interactive-color-secondary-hover);\n  }\n\n  &.multiSelectList__option_disabled {\n    background-color: transparent;\n    color: var(--goto-type-color-disabled);\n    cursor: not-allowed;\n  }\n}\n\n.multiSelectList__label {\n  flex: 1 0 auto;\n  min-width: calc(var(--multi-select-list-precomputed-label-width) * 1px);\n  font: var(--goto-body-small);\n\n  // Temporary solution to use TooltipWrapper for UserCountBadge because TooltipWrapper does not accept a class for the wrapper component\n  > * {\n    display: inline-flex;\n  }\n}\n\n.multiSelectList_capitalize::first-letter {\n  text-transform: uppercase;\n}\n\n.multiSelectList__checkbox {\n  flex: none;\n  margin-right: var(--goto-spacing-03);\n  border-radius: 2px;\n  height: var(--goto-spacing-04);\n  width: var(--goto-spacing-04);\n  box-shadow: 0 0 0 1px var(--goto-border-color-default);\n  background-color: var(--goto-surface-color-default);\n  fill: var(--goto-surface-color-default);\n}\n\n.multiSelectList__checkbox_checked {\n  box-shadow: 0 0 0 1px var(--goto-interactive-color-brand-default);\n  background-color: var(--goto-interactive-color-brand-default);\n  fill: var(--goto-type-color-inverted);\n}\n\n.multiSelectList__checkbox_disabled {\n  box-shadow: 0 0 0 1px var(--goto-interactive-color-disabled);\n  background-color: var(--goto-interactive-color-disabled);\n  fill: transparent;\n\n  &.multiSelectList__checkbox_checked {\n    fill: var(--goto-icon-color-disabled);\n  }\n}\n\n.multiSelectList__checkbox_indeterminate {\n  box-shadow: 0 0 0 1px var(--goto-interactive-color-brand-default);\n  background-color: var(--goto-interactive-color-brand-default);\n  fill: var(--goto-type-color-inverted);\n}\n\n.multiSelectList__option_parent {\n  display: grid;\n  grid-template-columns: auto 1fr auto auto;\n  gap: var(--goto-spacing-04);\n  align-items: center;\n  padding: 0 0 0 0.85rem;\n}\n\n.multiSelectList__expandButton {\n  --goto-icon-color: var(--goto-icon-color-secondary);\n  flex: none;\n\n  &::part(control) {\n    padding: 0;\n    min-width: 20px;\n    min-height: 20px;\n  }\n\n  &:hover {\n    --goto-icon-color: var(--goto-icon-color-default);\n  }\n}\n\n.multiSelectList__subItems {\n  padding-left: 2.0rem;\n  background-color: var(--goto-surface-color-subtle);\n  border-left: 2px solid var(--goto-border-color-brand-default);\n}\n\n.multiSelectList__option_child {\n  display: grid;\n  grid-template-columns: auto 1fr auto;\n  gap: var(--goto-spacing-04);\n  align-items: center;\n\n  &:hover {\n    background-color: var(--goto-interactive-color-secondary-hover);\n  }\n}\n",".userCountBadge {\n  margin-left: var(--goto-spacing-02);\n  white-space: nowrap;\n  display: inline;\n\n  span {\n    color: var(--goto-type-color-brand-default);\n  }\n}\n","import { TooltipWrapper } from '@analytics-common-ui/layout';\nimport { Typography } from '@getgo/chameleon-web-react-wrapper';\nimport { useTranslation } from 'react-i18next';\nimport styles from './UserCountBadge.module.scss';\n\nexport interface UserCountBadgeProps {\n  itemId: string | null;\n  userCount: number;\n  idPrefix?: string;\n}\n\n/**\n * UserCountBadge displays a user count with a tooltip.\n * Used to show the number of users associated with an item (e.g., user groups, queues).\n */\nconst UserCountBadge = ({ itemId, userCount, idPrefix = 'unified-analytics' }: UserCountBadgeProps) => {\n  const { t } = useTranslation();\n\n  const triggerId = `${idPrefix}-usercount-badge-${itemId}`;\n  const label = t('Users: {{count}}', { count: userCount });\n\n  return <TooltipWrapper position=\"top-center\" title={label}>\n    <Typography\n      id={triggerId}\n      tag=\"span\"\n      className={styles.userCountBadge}\n      aria-label={label}>\n      (<span>{userCount}</span>)\n    </Typography>\n  </TooltipWrapper>;\n};\n\nexport default UserCountBadge;\n","import clsx from 'clsx';\nimport { ChevronDownOutlinedIcon, ChevronRightOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { IconButton } from '@getgo/chameleon-web-react-wrapper';\nimport { useTranslation } from 'react-i18next';\nimport PropTypes from 'prop-types';\nimport UserCountBadge from '../UserCountBadge/UserCountBadge.tsx';\nimport styles from './MultiSelectList.module.scss';\nimport { makeIDGenerator } from '../../../utils/dom.util';\n\nconst generateID = makeIDGenerator('unified-analytics-multiselect-list');\n\nconst CheckmarkIcon = () => (\n  <path\n    fillRule=\"evenodd\"\n    clipRule=\"evenodd\"\n    d=\"M14.7071 4.70711L6.5 12.9142L2.29289 8.7071L3.70711 7.2929L6.5 10.0858L13.2929 3.29289L14.7071 4.70711Z\"\n  />\n);\n\nconst IndeterminateIcon = () => <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M3 7.5H13V8.5H3V7.5Z\" />;\n\nconst serializeId = id => {\n  if (typeof id === 'string') {\n    return `string:${id}`;\n  }\n  if (id === null) {\n    return 'null';\n  }\n  return 'unknown';\n};\n\n/**\n * Individual checkbox SVG component\n */\nexport const CheckboxSvg = ({ checked, indeterminate, disabled, onClick }) => (\n  <svg\n    viewBox=\"0 0 16 16\"\n    width=\"16px\"\n    height=\"16px\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n    className={clsx(\n      styles.multiSelectList__checkbox,\n      checked && styles.multiSelectList__checkbox_checked,\n      indeterminate && styles.multiSelectList__checkbox_indeterminate,\n      disabled && styles.multiSelectList__checkbox_disabled\n    )}\n    aria-hidden=\"true\"\n    aria-disabled={disabled}\n    onClick={e => {\n      if (disabled) {\n        e.stopPropagation();\n        return;\n      }\n      onClick(e);\n    }}>\n    {indeterminate ? <IndeterminateIcon /> : <CheckmarkIcon />}\n  </svg>\n);\n\nCheckboxSvg.propTypes = {\n  checked: PropTypes.bool,\n  indeterminate: PropTypes.bool,\n  disabled: PropTypes.bool,\n  onClick: PropTypes.func\n};\n\n/**\n * Child list item (nested under parent)\n */\nexport const ChildListItem = ({ subItem, subIdx, totalSubItems, parentId, capitalizeOptions, disabled, onToggle }) => {\n  const isDisabled = disabled || subItem.disabled;\n  return (\n    <div\n      key={`child-list-item-${subIdx}`}\n      id={generateID()}\n      className={clsx(\n        styles.multiSelectList__option,\n        styles.multiSelectList__option_child,\n        isDisabled && styles.multiSelectList__option_disabled\n      )}\n      // eslint-disable-next-line jsx-a11y/role-has-required-aria-props -- The recommendation is `aria-checked` for a multiselectable listbox, see https://www.w3.org/WAI/ARIA/apg/patterns/listbox/\n      role=\"option\"\n      aria-checked={subItem.selected}\n      aria-setsize={totalSubItems}\n      aria-posinset={subIdx + 1}\n      data-id={serializeId(subItem.id)}\n      data-parent-id={serializeId(parentId)}>\n      <CheckboxSvg\n        checked={subItem.selected}\n        disabled={isDisabled}\n        onClick={e => {\n          e.stopPropagation();\n          if (!isDisabled) {\n            onToggle(subItem.id);\n          }\n        }}\n      />\n      {subItem.startAdornment}\n      <div className={clsx(styles.multiSelectList__label, capitalizeOptions && styles.multiSelectList_capitalize)}>\n        {subItem.label}\n        {subItem.userCount !== undefined && subItem.userCount !== null && (\n          <UserCountBadge\n            itemId={subItem.id}\n            userCount={subItem.userCount}\n            idPrefix=\"unified-analytics-multiselect-list\"\n          />\n        )}\n      </div>\n      {subItem.endAdornment}\n    </div>\n  );\n};\n\nChildListItem.propTypes = {\n  subItem: PropTypes.shape({\n    id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n    label: PropTypes.node,\n    selected: PropTypes.bool,\n    disabled: PropTypes.bool,\n    userCount: PropTypes.number,\n    startAdornment: PropTypes.node,\n    endAdornment: PropTypes.node\n  }).isRequired,\n  subIdx: PropTypes.number.isRequired,\n  totalSubItems: PropTypes.number.isRequired,\n  parentId: PropTypes.string.isRequired,\n  capitalizeOptions: PropTypes.bool,\n  disabled: PropTypes.bool,\n  onToggle: PropTypes.func.isRequired\n};\n\n/**\n * Parent list item (with expandable children)\n */\nexport const ParentListItem = ({\n  item,\n  idx,\n  totalItems,\n  isExpanded,\n  checkboxState,\n  capitalizeOptions,\n  disabled,\n  onToggleParent,\n  onToggleExpansion,\n  onToggleChild\n}) => {\n  const { t } = useTranslation();\n\n  return (\n    <div>\n      <div\n        id={generateID()}\n        className={clsx(\n          styles.multiSelectList__option,\n          styles.multiSelectList__option_parent,\n          disabled && styles.multiSelectList__option_disabled\n        )}\n        // eslint-disable-next-line jsx-a11y/role-has-required-aria-props -- The recommendation is `aria-checked` for a multiselectable listbox, see https://www.w3.org/WAI/ARIA/apg/patterns/listbox/\n        role=\"option\"\n        aria-checked={checkboxState.checked}\n        aria-setsize={totalItems}\n        aria-posinset={idx + 1}\n        data-id={serializeId(item.id)}>\n        <CheckboxSvg\n          checked={checkboxState.checked}\n          indeterminate={checkboxState.indeterminate}\n          disabled={disabled}\n          onClick={e => {\n            e.stopPropagation();\n            if (!disabled) {\n              onToggleParent(item);\n            }\n          }}\n        />\n        {item.startAdornment}\n        <div className={clsx(styles.multiSelectList__label, capitalizeOptions && styles.multiSelectList_capitalize)}>\n          {item.label}\n          {item.userCount !== undefined && item.userCount !== null && (\n            <UserCountBadge itemId={item.id} userCount={item.userCount} idPrefix=\"unified-analytics-multiselect-list\" />\n          )}\n        </div>\n        {item.endAdornment}\n        <IconButton\n          size=\"small\"\n          variant=\"primary\"\n          label={isExpanded ? t('Collapse') : t('Expand')}\n          className={styles.multiSelectList__expandButton}\n          onClick={e => {\n            e.stopPropagation();\n            onToggleExpansion(item.id);\n          }}\n          disabled={disabled}>\n          {isExpanded ? <ChevronDownOutlinedIcon /> : <ChevronRightOutlinedIcon />}\n        </IconButton>\n      </div>\n\n      {isExpanded && (\n        <div className={styles.multiSelectList__subItems}>\n          {item.subFilters.map((subItem, subIdx) => (\n            <ChildListItem\n              key={`child-item-${subIdx}`}\n              subItem={subItem}\n              subIdx={subIdx}\n              totalSubItems={item.subFilters.length}\n              parentId={item.id}\n              capitalizeOptions={capitalizeOptions}\n              disabled={disabled}\n              onToggle={onToggleChild}\n            />\n          ))}\n        </div>\n      )}\n    </div>\n  );\n};\n\nParentListItem.propTypes = {\n  item: PropTypes.shape({\n    id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n    label: PropTypes.node,\n    userCount: PropTypes.number,\n    startAdornment: PropTypes.node,\n    endAdornment: PropTypes.node,\n    subFilters: PropTypes.arrayOf(\n      PropTypes.shape({\n        id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n        label: PropTypes.node,\n        selected: PropTypes.bool,\n        userCount: PropTypes.number,\n        startAdornment: PropTypes.node,\n        endAdornment: PropTypes.node\n      })\n    )\n  }).isRequired,\n  idx: PropTypes.number.isRequired,\n  totalItems: PropTypes.number.isRequired,\n  isExpanded: PropTypes.bool.isRequired,\n  checkboxState: PropTypes.shape({\n    checked: PropTypes.bool.isRequired,\n    indeterminate: PropTypes.bool.isRequired\n  }).isRequired,\n  capitalizeOptions: PropTypes.bool,\n  disabled: PropTypes.bool,\n  onToggleParent: PropTypes.func.isRequired,\n  onToggleExpansion: PropTypes.func.isRequired,\n  onToggleChild: PropTypes.func.isRequired\n};\n\n/**\n * Regular list item (no children)\n */\nexport const RegularListItem = ({ item, idx, totalItems, capitalizeOptions, disabled, onToggle }) => {\n  const isDisabled = disabled || item.disabled;\n  return (\n    <div\n      id={generateID()}\n      className={clsx(styles.multiSelectList__option, isDisabled && styles.multiSelectList__option_disabled)}\n      // eslint-disable-next-line jsx-a11y/role-has-required-aria-props -- The recommendation is `aria-checked` for a multiselectable listbox, see https://www.w3.org/WAI/ARIA/apg/patterns/listbox/\n      role=\"option\"\n      aria-checked={item.selected}\n      aria-setsize={totalItems}\n      aria-posinset={idx + 1}\n      data-id={serializeId(item.id)}>\n      <CheckboxSvg\n        checked={item.selected}\n        disabled={isDisabled}\n        onClick={e => {\n          e.stopPropagation();\n          if (!isDisabled) {\n            onToggle({ dataset: { id: serializeId(item.id) } });\n          }\n        }}\n      />\n      {item.startAdornment}\n      <div className={clsx(styles.multiSelectList__label, capitalizeOptions && styles.multiSelectList_capitalize)}>\n        {item.label}\n        {item.userCount !== undefined && item.userCount !== null && (\n          <UserCountBadge itemId={item.id} userCount={item.userCount} idPrefix=\"unified-analytics-multiselect-list\" />\n        )}\n      </div>\n      {item.endAdornment}\n    </div>\n  );\n};\n\nRegularListItem.propTypes = {\n  item: PropTypes.shape({\n    id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n    label: PropTypes.node,\n    selected: PropTypes.bool,\n    disabled: PropTypes.bool,\n    userCount: PropTypes.number,\n    startAdornment: PropTypes.node,\n    endAdornment: PropTypes.node\n  }).isRequired,\n  idx: PropTypes.number.isRequired,\n  totalItems: PropTypes.number.isRequired,\n  capitalizeOptions: PropTypes.bool,\n  disabled: PropTypes.bool,\n  onToggle: PropTypes.func.isRequired\n};\n",".addIcon_hidden {\n  display: none;\n}\n\n.customFilterInput {\n  padding: 0 0 var(--goto-spacing-02);\n}\n\n.customFilterItemsList {\n  list-style: none;\n  padding: 0;\n  margin: var(--goto-spacing-02) 0 0;\n}\n\n\n.customFilterItemsList__removeIcon {\n  margin-left: auto;\n\n  chameleon-svg {\n    --goto-icon-color: var(--goto-icon-color-danger);\n  }\n}\n\n.customFilterItemsList__removeIcon_hidden {\n  visibility: hidden;\n}\n\n.customFilterItemsList__separator {\n  height: 1px;\n  background-color: var(--goto-border-color-default);\n  margin: var(--goto-spacing-02) 0;\n}\n","import { AddCircleFilledIcon, TrashOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { IconButton } from '@getgo/chameleon-web-react-wrapper';\nimport clsx from 'clsx';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport multiSelectStyles from '../MultiSelectList/MultiSelectList.module.scss';\nimport { CheckboxSvg } from '../MultiSelectList/MultiSelectListItem';\nimport styles from './CustomFilterItemsList.module.scss';\n\nexport interface CustomFilterItem {\n  id: string;\n  label: string;\n  selected: boolean;\n  disabled?: boolean;\n}\n\ninterface AddCustomItemButtonProps {\n  onClick: () => void;\n  isVisible: boolean;\n  disabled?: boolean;\n  [key: string]: unknown;\n}\n\nexport const AddCustomItemButton = ({ onClick, isVisible, disabled = false, ...rest }: AddCustomItemButtonProps) => {\n  const { t } = useTranslation();\n  return (\n    <IconButton\n      onClick={onClick}\n      className={clsx({ [styles.addIcon_hidden]: !isVisible })}\n      disabled={disabled}\n      label={t('Add', { context: 'add a value from an input' })}\n      {...rest}>\n      <AddCircleFilledIcon size=\"17px\" />\n    </IconButton>\n  );\n};\n\ninterface CustomFilterItemsListProps {\n  options: CustomFilterItem[];\n  hoveredOption: string | undefined;\n  onToggle: (id: string, option: CustomFilterItem) => void;\n  onRemove: (id: string) => void;\n  onHover: (id?: string) => void;\n  capitalizeOptions?: boolean;\n  showSeparator: boolean;\n}\n\nconst CustomFilterItemsList = ({\n  options,\n  hoveredOption,\n  onToggle,\n  onRemove,\n  onHover,\n  capitalizeOptions,\n  showSeparator\n}: CustomFilterItemsListProps) => {\n  const { t } = useTranslation();\n\n  if (options.length === 0) {\n    return null;\n  }\n\n  return (\n    <>\n      <ul className={styles.customFilterItemsList}>\n        {options.map(option => {\n          const isDisabled = option.disabled ?? false;\n          return (\n          <li\n            key={option.id}\n            role=\"option\"\n            aria-selected={option.selected}\n            tabIndex={0}\n            className={clsx(multiSelectStyles.multiSelectList__option, isDisabled && multiSelectStyles.multiSelectList__option_disabled)}\n            onClick={e => { e.stopPropagation(); if (!isDisabled) { onToggle(option.id, { ...option, selected: !option.selected }); } }}\n            onKeyDown={e => {\n              if ((e.key === 'Enter' || e.key === ' ') && !isDisabled) {\n                e.preventDefault();\n                onToggle(option.id, { ...option, selected: !option.selected });\n              }\n            }}\n            onMouseEnter={() => onHover(option.id)}\n            onFocus={() => onHover(option.id)}\n            onMouseLeave={() => onHover()}>\n            <CheckboxSvg\n              checked={option.selected}\n              disabled={isDisabled}\n              onClick={(e: React.MouseEvent) => {\n                e.stopPropagation();\n                onToggle(option.id, { ...option, selected: !option.selected });\n              }}\n            />\n            <span className={clsx(multiSelectStyles.multiSelectList__label, capitalizeOptions && multiSelectStyles.multiSelectList_capitalize)}>{option.label}</span>\n            <IconButton\n              label={t('Remove option')}\n              onClick={e => {\n                e.stopPropagation();\n                onRemove(option.id);\n              }}\n              size=\"small\"\n              data-testid={`remove-custom-${option.id}`}\n              className={clsx(styles.customFilterItemsList__removeIcon, {\n                [styles.customFilterItemsList__removeIcon_hidden]: hoveredOption !== option.id\n              })}\n              variant=\"primary\">\n              <TrashOutlinedIcon />\n            </IconButton>\n          </li>\n          );\n        })}\n      </ul>\n      {showSeparator && <div data-testid=\"custom-items-separator\" className={styles.customFilterItemsList__separator} />}\n    </>\n  );\n};\n\nexport default CustomFilterItemsList;\n",".filterListSkeleton__row {\n  display: flex;\n  align-items: center;\n  padding: 0 var(--goto-spacing-04);\n\n  &:not(:first-child) {\n    margin-top: var(--goto-spacing-03);\n  }\n}\n\n.filterListSkeleton__row_spaced {\n  justify-content: space-between;\n}\n\n.filterListSkeleton__row_bordered {\n  border-bottom: 1px solid var(--goto-border-color-default);\n  padding-bottom: var(--goto-spacing-02);\n}\n\n.filterListSkeleton__baseHeight {\n  height: 16px;\n  transform: scale(1);\n}\n\n.filterListSkeleton__baseHeight_spaced {\n  margin-left: 16px;\n}\n\n.filterListSkeleton__textSmall {\n  width: 50px;\n}\n\n.filterListSkeleton__textMedium {\n  width: 100px;\n}\n\n.filterListSkeleton__textLarge {\n  width: 200px;\n};\n\n.filterListSkeleton__checkbox {\n  width: 16px;\n  height: 16px;\n  margin: 0 var(--goto-spacing-04) 0 0;\n}\n\n.filterListSkeleton__startAdornment {\n  width: 42px;\n  height: 42px;\n  margin: 0 var(--goto-spacing-04);\n}\n\n.filterListSkeleton__onlySelected {\n  display: inline-flex;\n  padding: var(--goto-spacing-06) var(--goto-spacing-03);\n  align-items: center;\n}\n\n.filterListSkeleton__selectOnly {\n  width: 45px;\n  height: 24px;\n  margin-left: 8px;\n}\n\n.filterListSkeleton__search {\n  margin: 0 var(--goto-spacing-04);\n  height: 50px;\n}\n","import clsx from 'clsx';\nimport { useEffect } from 'react';\nimport { Skeleton } from '@getgo/chameleon-web-react-wrapper';\nimport { range as _range } from 'lodash';\nimport PropTypes from 'prop-types';\nimport styles from './FilterListSkeleton.module.scss';\n\n/**\n * The filter list skeleton that can be used as a loading placeholder.\n */\nconst FilterListSkeleton = ({\n  showSearch = true,\n  showStartAdornment = false,\n  rowsCount = 10,\n  announceLoaded,\n  announceLoading,\n  setAnnounce = () => {}\n}) => {\n  useEffect(() => {\n    setAnnounce(announceLoading);\n    return () => {\n      setAnnounce(announceLoaded);\n    };\n  });\n\n  return (\n    <div role=\"status\">\n      <div className={clsx(styles.filterListSkeleton__row, styles.filterListSkeleton__row_spaced)}>\n        <Skeleton\n          variant=\"text\"\n          className={clsx(styles.filterListSkeleton__textSmall, styles.filterListSkeleton__baseHeight)}\n        />\n        <Skeleton\n          variant=\"text\"\n          className={clsx(styles.filterListSkeleton__textMedium, styles.filterListSkeleton__baseHeight)}\n        />\n      </div>\n      {showSearch && <Skeleton data-testid=\"search\" variant=\"text\" className={styles.filterListSkeleton__search} />}\n      <div className={clsx(styles.filterListSkeleton__row, styles.filterListSkeleton__row_bordered)}>\n        <Skeleton variant=\"rect\" className={styles.filterListSkeleton__checkbox} />\n        <Skeleton\n          data-testid=\"startAdornment\"\n          variant=\"text\"\n          className={clsx(styles.filterListSkeleton__textSmall, styles.filterListSkeleton__baseHeight, {\n            [styles.filterListSkeleton__baseHeight_spaced]: showStartAdornment\n          })}\n        />\n      </div>\n      {_range(rowsCount).map(i => (\n        <div key={i} className={styles.filterListSkeleton__row} data-testid=\"row\">\n          <Skeleton variant=\"rect\" className={styles.filterListSkeleton__checkbox} />\n          {showStartAdornment && <Skeleton variant=\"circle\" className={styles.filterListSkeleton__startAdornment} />}\n          <Skeleton\n            variant=\"text\"\n            className={clsx(styles.filterListSkeleton__baseHeight, styles.filterListSkeleton__textLarge)}\n          />\n        </div>\n      ))}\n      <div className={styles.filterListSkeleton__onlySelected}>\n        <Skeleton\n          variant=\"text\"\n          className={clsx(styles.filterListSkeleton__baseHeight, styles.filterListSkeleton__textMedium)}\n        />\n        <Skeleton variant=\"rect\" className={styles.filterListSkeleton__selectOnly} />\n      </div>\n    </div>\n  );\n};\n\nFilterListSkeleton.propTypes = {\n  /** The announce action */\n  setAnnounce: PropTypes.func,\n  /** displaying the search input skeleton */\n  showSearch: PropTypes.bool,\n  /** displaying the start adornment skeleton */\n  showStartAdornment: PropTypes.bool,\n  /** The number of rows to display in the skeleton */\n  rowsCount: PropTypes.number,\n  /** The announce when loading */\n  announceLoading: PropTypes.string,\n  /** The announce when loaded */\n  announceLoaded: PropTypes.string\n};\n\nexport default FilterListSkeleton;\n","import { useMemo } from 'react';\nimport type React from 'react';\n\nexport const FOCUS_FLAG_DATA_ATTRIBUTE = 'data-listbox-active-descendant';\n\nfunction focusOnFirstSelectedChild(event: React.FocusEvent<HTMLElement>) {\n  for (let i = 0; i < event.target.children.length; i++) {\n    if (event.target.children[i].getAttribute('aria-checked') === 'true') {\n      event.target.setAttribute('aria-activedescendant', event.target.children[i].id);\n      event.target.children[i].setAttribute(FOCUS_FLAG_DATA_ATTRIBUTE, 'true');\n      return;\n    }\n  }\n  event.target.children[0].setAttribute(FOCUS_FLAG_DATA_ATTRIBUTE, 'true');\n  event.target.setAttribute('aria-activedescendant', event.target.children[0].id);\n}\n\nfunction blurAllChild(event: React.FocusEvent<HTMLElement>) {\n  for (let i = 0; i < event.target.children.length; i++) {\n    event.target.children[i].removeAttribute(FOCUS_FLAG_DATA_ATTRIBUTE);\n  }\n  event.target.removeAttribute('aria-activedescendant');\n}\n\nfunction makeKeyboardNavigation(onSelect: (element: Element) => void) {\n  let previousTimestamp = 0;\n  let search = '';\n  return function (event: React.KeyboardEvent<HTMLElement>) {\n    switch (event.key) {\n      case 'ArrowDown': {\n        event.preventDefault();\n        search = '';\n        const current = event.currentTarget.querySelector(`[${FOCUS_FLAG_DATA_ATTRIBUTE}=\"true\"]`);\n        if (current?.nextSibling) {\n          current.removeAttribute(FOCUS_FLAG_DATA_ATTRIBUTE);\n          (current.nextSibling as Element).setAttribute(FOCUS_FLAG_DATA_ATTRIBUTE, 'true');\n          event.currentTarget.setAttribute('aria-activedescendant', (current.nextSibling as Element).id);\n          (current.nextSibling as Element).scrollIntoView({ block: 'nearest' });\n        }\n        return;\n      }\n      case 'ArrowUp': {\n        event.preventDefault();\n        search = '';\n        const current = event.currentTarget.querySelector(`[${FOCUS_FLAG_DATA_ATTRIBUTE}=\"true\"]`);\n        if (current?.previousSibling) {\n          current.removeAttribute(FOCUS_FLAG_DATA_ATTRIBUTE);\n          (current.previousSibling as Element).setAttribute(FOCUS_FLAG_DATA_ATTRIBUTE, 'true');\n          event.currentTarget.setAttribute('aria-activedescendant', (current.previousSibling as Element).id);\n          (current.previousSibling as Element).scrollIntoView({ block: 'nearest' });\n        }\n        return;\n      }\n      case 'Home': {\n        event.preventDefault();\n        search = '';\n\n        event.currentTarget\n          .querySelector(`[${FOCUS_FLAG_DATA_ATTRIBUTE}=\"true\"]`)\n          ?.removeAttribute(FOCUS_FLAG_DATA_ATTRIBUTE);\n        const firstChild = event.currentTarget.children[0] as HTMLElement | undefined;\n        if (firstChild) {\n          firstChild.setAttribute(FOCUS_FLAG_DATA_ATTRIBUTE, 'true');\n          event.currentTarget.setAttribute('aria-activedescendant', firstChild.id);\n          firstChild.scrollIntoView({ block: 'nearest' });\n        }\n        return;\n      }\n      case 'End': {\n        event.preventDefault();\n        search = '';\n        event.currentTarget\n          .querySelector(`[${FOCUS_FLAG_DATA_ATTRIBUTE}=\"true\"]`)\n          ?.removeAttribute(FOCUS_FLAG_DATA_ATTRIBUTE);\n        const lastChild = event.currentTarget.children[event.currentTarget.children.length - 1] as\n          HTMLElement | undefined;\n        if (lastChild) {\n          lastChild.setAttribute(FOCUS_FLAG_DATA_ATTRIBUTE, 'true');\n          event.currentTarget.setAttribute('aria-activedescendant', lastChild.id);\n          lastChild.scrollIntoView({ block: 'nearest' });\n        }\n        return;\n      }\n      case ' ': {\n        event.preventDefault();\n        search = '';\n        const current = event.currentTarget.querySelector(`[${FOCUS_FLAG_DATA_ATTRIBUTE}=\"true\"]`);\n        if (current) {\n          (current as HTMLElement).scrollIntoView({ block: 'nearest' });\n          onSelect(current);\n        }\n        return;\n      }\n      default: {\n        if (event.key.length === 1) {\n          event.preventDefault();\n          if (event.timeStamp - previousTimestamp > 750) {\n            search = '';\n          }\n          previousTimestamp = event.timeStamp;\n          search += event.key.toLowerCase();\n          for (let i = 0; i < event.currentTarget.children.length; i++) {\n            if (event.currentTarget.children[i].textContent?.replace(/ /g, '').toLowerCase().startsWith(search)) {\n              event.currentTarget\n                .querySelector(`[${FOCUS_FLAG_DATA_ATTRIBUTE}=\"true\"]`)\n                ?.removeAttribute(FOCUS_FLAG_DATA_ATTRIBUTE);\n              event.currentTarget.children[i].setAttribute(FOCUS_FLAG_DATA_ATTRIBUTE, 'true');\n              event.currentTarget.setAttribute('aria-activedescendant', event.currentTarget.children[i].id);\n              (event.currentTarget.children[i] as HTMLElement).scrollIntoView({ block: 'nearest' });\n              return;\n            }\n          }\n        }\n      }\n    }\n  };\n}\n\nfunction findParent(node: Node | null, selector: (node: Node | null) => boolean): Element | null {\n  let parent: Node | null = node;\n  while (!selector(parent) && parent !== window.document) {\n    parent = parent?.parentNode ?? null;\n  }\n  return parent !== window.document ? (parent as Element) : null;\n}\n\nfunction makeHandleSelection(onSelect: (element: Element) => void) {\n  return function (event: React.MouseEvent<HTMLElement>) {\n    const option = findParent(event.target as Node, node => (node as Element)?.getAttribute?.('role') === 'option');\n    if (option) {\n      option.parentElement\n        ?.querySelector(`[${FOCUS_FLAG_DATA_ATTRIBUTE}=\"true\"]`)\n        ?.removeAttribute(FOCUS_FLAG_DATA_ATTRIBUTE);\n      option.setAttribute(FOCUS_FLAG_DATA_ATTRIBUTE, 'true');\n      option.parentElement?.setAttribute('aria-activedescendant', option.id);\n      onSelect(option);\n    }\n  };\n}\n\nexport default function useListBox(onSelect: (element: Element) => void) {\n  return useMemo(\n    () => ({\n      onFocus: focusOnFirstSelectedChild,\n      onBlur: blurAllChild,\n      onKeyDown: makeKeyboardNavigation(onSelect),\n      onClick: makeHandleSelection(onSelect)\n    }),\n    [onSelect]\n  );\n}\n","import { useCallback, useState, ReactNode } from 'react';\nimport { getFlatItems } from '../utils/filters.util';\n\nexport interface FilterItem {\n  id: string;\n  label: string;\n  selected: boolean;\n  subFilters?: FilterItem[];\n  startAdornment?: ReactNode;\n  endAdornment?: ReactNode;\n}\n\nexport interface CheckboxState {\n  checked: boolean;\n  indeterminate: boolean;\n}\n\nexport interface UseHierarchicalSelectParams {\n  items: FilterItem[];\n  onChange: (selectedIds: string[]) => void;\n  disabled?: boolean;\n}\n\nexport interface UseHierarchicalSelectReturn {\n  expandedItems: Set<string>;\n  getParentCheckboxState: (item: FilterItem) => CheckboxState;\n  toggleItemExpansion: (itemId: string) => void;\n  handleParentToggle: (item: FilterItem) => void;\n  handleChildToggle: (childId: string) => void;\n}\n\n/**\n * Custom hook for managing hierarchical multi-select list behavior.\n *\n * Handles:\n * - Parent/child checkbox state calculation (checked/indeterminate)\n * - Expanding/collapsing parent items\n * - Toggling parent items (selects/unselects all children)\n * - Toggling individual child items\n *\n * @param params - Hook parameters\n * @returns Object containing state and handler functions\n */\nexport const useHierarchicalSelect = ({\n  items,\n  onChange,\n  disabled = false\n}: UseHierarchicalSelectParams): UseHierarchicalSelectReturn => {\n  const [expandedItems, setExpandedItems] = useState<Set<string>>(new Set());\n\n  /**\n   * Calculate parent checkbox state based on children selection.\n   * Returns checked if all children selected, indeterminate if some selected, unchecked otherwise.\n   */\n  const getParentCheckboxState = useCallback((item: FilterItem): CheckboxState => {\n    if (!item.subFilters || item.subFilters.length === 0) {\n      return { checked: false, indeterminate: false };\n    }\n    const selectedCount = item.subFilters.filter(child => child.selected).length;\n    const totalCount = item.subFilters.length;\n\n    if (selectedCount === 0) {\n      return { checked: false, indeterminate: false };\n    }\n    if (selectedCount === totalCount) {\n      return { checked: true, indeterminate: false };\n    }\n    return { checked: false, indeterminate: true };\n  }, []);\n\n  /**\n   * Toggle expand/collapse state for a parent item.\n   */\n  const toggleItemExpansion = useCallback((itemId: string): void => {\n    setExpandedItems(prev => {\n      const newSet = new Set(prev);\n      if (newSet.has(itemId)) {\n        newSet.delete(itemId);\n      } else {\n        newSet.add(itemId);\n      }\n      return newSet;\n    });\n  }, []);\n\n  /**\n   * Handle parent checkbox click - selects or unselects all children.\n   */\n  const handleParentToggle = useCallback(\n    (item: FilterItem): void => {\n      if (disabled || !item.subFilters) {\n        return;\n      }\n\n      const { checked } = getParentCheckboxState(item);\n      const childIds = item.subFilters.map(child => child.id);\n\n      // Get all currently selected IDs from flat items\n      const flatItems = getFlatItems(items);\n      const currentlySelected = flatItems.filter((i: FilterItem) => i.selected).map((i: FilterItem) => i.id);\n\n      let newSelection: string[];\n      if (checked) {\n        // Unselect all children\n        newSelection = currentlySelected.filter(id => !childIds.includes(id));\n      } else {\n        // Select all children\n        const otherSelected = currentlySelected.filter(id => !childIds.includes(id));\n        newSelection = [...otherSelected, ...childIds];\n      }\n\n      onChange(newSelection);\n    },\n    [disabled, getParentCheckboxState, items, onChange]\n  );\n\n  /**\n   * Handle child checkbox click - toggles individual child selection.\n   */\n  const handleChildToggle = useCallback(\n    (childId: string): void => {\n      if (disabled) {\n        return;\n      }\n\n      const flatItems = getFlatItems(items);\n      const currentlySelected = flatItems.filter((i: FilterItem) => i.selected).map((i: FilterItem) => i.id);\n\n      if (currentlySelected.includes(childId)) {\n        onChange(currentlySelected.filter(id => id !== childId));\n      } else {\n        onChange([...currentlySelected, childId]);\n      }\n    },\n    [disabled, items, onChange]\n  );\n\n  return {\n    expandedItems,\n    getParentCheckboxState,\n    toggleItemExpansion,\n    handleParentToggle,\n    handleChildToggle\n  };\n};\n","import { useEffect, useRef, useState } from 'react';\n\nconst Batched = ({ batchSize, children }) => {\n  const ref = useRef([]);\n  const [, triggerRender] = useState(0);\n  useEffect(() => {\n    ref.current =\n      ref.current.length > 0 && ref.current.every(({ key }, index) => children[index]?.key === key)\n        ? children.slice(0, ref.current.length)\n        : children.slice(0, batchSize);\n    triggerRender?.(i => i + 1);\n    let cancellationFlag;\n    const animate = async () => {\n      while (ref.current.length < children.length) {\n        // eslint-disable-next-line no-await-in-loop -- This rule signals when someone might *accidentally* await promises sequentially, which is exactly what we want to do here\n        await new Promise(resolve => {\n          requestAnimationFrame(resolve);\n        });\n        if (cancellationFlag) {\n          return;\n        }\n        const offset = ref.current.length;\n        const currentBatchSize = Math.min(batchSize, children.length - ref.current.length);\n        for (let i = 0; i < currentBatchSize; i++) {\n          ref.current.push(children[offset + i]);\n        }\n        triggerRender?.(i => i + 1);\n      }\n    };\n    animate();\n    return () => {\n      cancellationFlag = true;\n    };\n  }, [children, triggerRender]);\n  return ref.current;\n};\n\nexport default Batched;\n","/**\n * An OffscreenCanvas and a dedicated worker could take those computations off the\n * main thread. This would make this function async.\n *\n * OffscreenCanvas do not respect the root element's font size when using `rem` units,\n * so we would need to parse the css font string and convert `rem` to `px`.\n *\n * For those reasons, this function uses a canvas element for now.\n */\nexport const makeComputeWidth = font => {\n  const canvas = window.document.createElement('canvas');\n  const context = canvas.getContext('2d');\n  context.font = font;\n  return text => context.measureText(text).width;\n};\n","import { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { ChevronDownOutlinedIcon, ChevronUpOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { Checkbox, IconButton, LinearProgress, Typography } from '@getgo/chameleon-web-react-wrapper';\nimport { every as _every, isEmpty as _isEmpty, some as _some } from 'lodash';\nimport { MIXPANEL_EVENT_NAME } from '../../../constants/mixpanel.ts';\nimport useMixpanel from '../../../hooks/useMixpanel.ts';\nimport useListBox from '../../../hooks/useListBox';\nimport { useHierarchicalSelect } from '../../../hooks/useHierarchicalSelect.tsx';\nimport { getFlatItems } from '../../../utils/filters.util';\nimport styles from './MultiSelectList.module.scss';\nimport Batched from '../Batched/Batched';\nimport { makeComputeWidth } from '../../../utils/text.util';\nimport { ParentListItem, RegularListItem } from './MultiSelectListItem';\n\nconst deserializeId = serializedId => {\n  if (serializedId.startsWith('string:')) {\n    return serializedId.substring(7);\n  }\n  if (serializedId === 'null') {\n    return null;\n  }\n  return undefined;\n};\n\n/**\n * List component allowing individual or all items to be (de)selected.\n */\nconst MultiSelectList = ({\n  title,\n  items,\n  itemLabelKey = 'item',\n  onChange,\n  isCollapsible = false,\n  isCollapsed = false,\n  disabled,\n  currentPage,\n  capitalizeOptions,\n  enableSelectAll = true,\n  outlined,\n  isLoading = false,\n  loadingMessage,\n  scrollSentinelRef,\n  hasMorePages = false,\n  listboxRef,\n  headerSlot\n}) => {\n  const { t } = useTranslation();\n  const mixpanelTrack = useMixpanel();\n\n  const [areAllSelected, setAllSelected] = useState(false);\n  const [areSomeSelected, setSomeSelected] = useState(false);\n  const [isExpanded, setIsExpanded] = useState(!isCollapsed);\n\n  // Use hierarchical select hook for managing parent/child selection logic\n  const { expandedItems, getParentCheckboxState, toggleItemExpansion, handleParentToggle, handleChildToggle } =\n    useHierarchicalSelect({ items, onChange, disabled });\n\n  const precomputedTextWidth = useMemo(() => {\n    const computeWidth = makeComputeWidth(\n      window.getComputedStyle(window.document.body).getPropertyValue('--goto-body-small')\n    );\n    return items\n      .slice()\n      .sort(({ label: a }, { label: b }) => b.length - a.length)\n      .slice(0, Math.max(0.01 * items.length, 50)) // Only compute the length of the 1% strings with most characters, with the underlying asumption that those will be the longest string on screen\n      .reduce((partial, { label }) => Math.max(computeWidth(label), partial), 0);\n  }, [items]);\n\n  useEffect(() => {\n    if (!_isEmpty(items)) {\n      const flatItems = getFlatItems(items);\n      const allSelected = _every(flatItems, 'selected');\n      setSomeSelected(!allSelected && _some(flatItems, 'selected'));\n      setAllSelected(allSelected);\n    } else {\n      setSomeSelected(false);\n      setAllSelected(false);\n    }\n  }, [items]);\n\n  useEffect(() => {\n    setIsExpanded(!isCollapsed);\n  }, [isCollapsed]);\n\n  const handleSelectAll = () => {\n    if (!disabled) {\n      if (areAllSelected) {\n        onChange([]);\n      } else {\n        const flatItems = getFlatItems(items);\n        onChange(flatItems.map(item => item.id));\n      }\n    }\n  };\n\n  const toggleOption = useCallback(\n    option => {\n      const itemId = deserializeId(option.dataset.id);\n      const parentId = option.dataset.parentId ? deserializeId(option.dataset.parentId) : null;\n\n      // If it's a child item, use handleChildToggle\n      if (parentId) {\n        const parentItem = items.find(item => item.id === parentId);\n        const childItem = parentItem?.subFilters?.find(child => child.id === itemId);\n        if (childItem?.disabled) {\n          return;\n        }\n        handleChildToggle(itemId);\n        return;\n      }\n\n      // For parent items or regular items, check if it has subFilters\n      const targetItem = items.find(item => item.id === itemId);\n      if (targetItem?.subFilters && targetItem.subFilters.length > 0) {\n        // It's a parent item with subFilters, toggle all children\n        handleParentToggle(targetItem);\n        return;\n      }\n\n      if (targetItem?.disabled) {\n        return;\n      }\n\n      // It's a regular item without subFilters\n      const flatItems = getFlatItems(items);\n      const currentlySelected = flatItems.filter(i => i.selected).map(i => i.id);\n\n      if (currentlySelected.includes(itemId)) {\n        onChange(currentlySelected.filter(id => id !== itemId));\n      } else {\n        onChange([...currentlySelected, itemId]);\n      }\n    },\n    [items, onChange, handleChildToggle, handleParentToggle]\n  );\n\n  const listBoxEventHandlers = useListBox(toggleOption);\n\n  const toggleExpanded = () => {\n    setIsExpanded(!isExpanded);\n\n    if (title.includes('Queue Caller') && !isExpanded) {\n      const eventData = {\n        Action: `Expanded export columns selection on file dialog`,\n        Component: 'MultiSelectList',\n        Page: currentPage,\n        Type: title\n      };\n\n      mixpanelTrack(MIXPANEL_EVENT_NAME.EXPORT, eventData);\n    }\n  };\n\n  return (\n    <div className={clsx(styles.multiSelectList, { [styles.multiSelectList_outlined]: outlined })}>\n      {enableSelectAll && !_isEmpty(title) && (\n        <Typography\n          tag=\"label\"\n          className={clsx(styles.multiSelectList__title, styles.multiSelectList_offset, {\n            [styles.multiSelectList__title_disabled]: disabled\n          })}>\n          <Checkbox\n            role=\"checkbox\"\n            checked={areAllSelected}\n            disabled={disabled}\n            indeterminate={areSomeSelected}\n            aria-label={t('Select all')}\n            className={styles.multiSelectList__titleCheckbox}\n            onClick={handleSelectAll}>\n            {title}\n          </Checkbox>\n          {isCollapsible && (\n            <IconButton\n              role=\"button\"\n              className={styles.multiSelectList__titleCollapse}\n              size=\"small\"\n              variant=\"primary\"\n              label={isExpanded ? t('Collapse the list') : t('Expand the list')}\n              onClick={toggleExpanded}>\n              {isExpanded ? <ChevronUpOutlinedIcon /> : <ChevronDownOutlinedIcon />}\n            </IconButton>\n          )}\n        </Typography>\n      )}\n      <div\n        ref={listboxRef}\n        className={styles.multiSelectList__listbox}\n        style={{\n          '--multi-select-list-option-count': items.length,\n          '--multi-select-list-precomputed-label-width': precomputedTextWidth\n        }}\n        role=\"listbox\"\n        aria-label={t('List of {{item}}', { item: t(itemLabelKey, { count: 2 }) })}\n        aria-multiselectable=\"true\"\n        {...(disabled\n          ? { 'aria-disabled': true }\n          : {\n              tabIndex: 0,\n              ...listBoxEventHandlers\n            })}>\n        {headerSlot}\n        <Batched batchSize={25}>\n          {items.map((item, idx) => {\n            const hasSubFilters = item.subFilters && item.subFilters.length > 0;\n\n            if (hasSubFilters) {\n              return (\n                <ParentListItem\n                  key={`parent-item-list-${idx}`}\n                  item={item}\n                  idx={idx}\n                  totalItems={items.length}\n                  isExpanded={expandedItems.has(item.id)}\n                  checkboxState={getParentCheckboxState(item)}\n                  capitalizeOptions={capitalizeOptions}\n                  disabled={disabled}\n                  onToggleParent={handleParentToggle}\n                  onToggleExpansion={toggleItemExpansion}\n                  onToggleChild={handleChildToggle}\n                />\n              );\n            }\n\n            return (\n              <RegularListItem\n                key={`item-list-${idx}`}\n                item={item}\n                idx={idx}\n                totalItems={items.length}\n                capitalizeOptions={capitalizeOptions}\n                disabled={disabled}\n                onToggle={toggleOption}\n              />\n            );\n          })}\n        </Batched>\n        {/* Loading indicator for paginated lists */}\n        {isLoading && (\n          <div className={styles.multiSelectList__loadingIndicator}>\n            <LinearProgress />\n            {loadingMessage && (\n              <span aria-live=\"polite\" className=\"sr-only\">\n                {loadingMessage}\n              </span>\n            )}\n          </div>\n        )}\n        {/* Infinite scroll sentinel - must be inside scrollable area */}\n        {hasMorePages && scrollSentinelRef && (\n          <div ref={scrollSentinelRef} className={styles.multiSelectList__sentinel} />\n        )}\n      </div>\n    </div>\n  );\n};\n\nMultiSelectList.propTypes = {\n  /** The title for the list */\n  title: PropTypes.string,\n  /**\n   * The translation key of this item for a11y field\n   *\n   * Default: \"item\"\n   */\n  itemLabelKey: PropTypes.string,\n  /**\n   * List of items to be selectable.\n   *\n   * At minima, each object should provide the following:\n   * - ID\n   * - Label\n   * - Whether the item is selected\n   */\n  items: PropTypes.arrayOf(\n    PropTypes.shape({\n      id: PropTypes.string, // null can be a value (ex: undetermined sentiment)\n      label: PropTypes.string.isRequired,\n      selected: PropTypes.bool.isRequired,\n      startAdornment: PropTypes.node,\n      endAdornment: PropTypes.node,\n      /** Optional: Total user count for user groups */\n      userCount: PropTypes.number\n    })\n  ),\n  /**\n   * Determines whether the list of items can be collapsed or not.\n   */\n  isCollapsible: PropTypes.bool,\n  /**\n   * Determines whether the list of items is collapsed or not.\n   * Note: `isCollapsible`must be true for this to be effective.\n   */\n  isCollapsed: PropTypes.bool,\n  /**\n   * Determines whether the list of items is disabled or not.\n   */\n  disabled: PropTypes.bool,\n  /**\n   * Change handler.\n   *\n   * This component makes no assumption on how the selections are managed.\n   *\n   * Expects a function of the following form: `(ids: string[]) => void`\n   */\n  onChange: PropTypes.func,\n  /** The current page where the list is used */\n  currentPage: PropTypes.string,\n  /**\n   * Determines whether the list of items is outlined or not.\n   */\n  outlined: PropTypes.bool,\n  /**\n   * Determines whether the options should be capitalized.\n   */\n  capitalizeOptions: PropTypes.bool,\n  /**\n   * Determines if the select all option is displayed\n   */\n  enableSelectAll: PropTypes.bool,\n  /**\n   * Whether the list is loading more items (for pagination)\n   */\n  isLoading: PropTypes.bool,\n  /**\n   * Loading message for screen readers\n   */\n  loadingMessage: PropTypes.string,\n  /**\n   * Ref for infinite scroll sentinel element\n   */\n  scrollSentinelRef: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n  /**\n   * Whether there are more pages to load (shows sentinel)\n   */\n  hasMorePages: PropTypes.bool,\n  /**\n   * Ref to the listbox container for scroll observation\n   */\n  listboxRef: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n  /** Optional slot rendered inside the scrollable listbox, before the items */\n  headerSlot: PropTypes.node\n};\n\nexport default MultiSelectList;\n",".searchMultiSelectList {\n  display: flex;\n  flex-direction: column;\n}\n\n.searchMultiSelectList__inputWrapper {\n  padding: 0 0 var(--goto-spacing-01);\n}\n\n.searchMultiSelectList__input {\n  &::part(root) {\n    --goto-icon-color: var(--goto-icon-color-secondary);\n  }\n\n  &::part(end) {\n    display: none;\n  }\n}\n","import { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { deburr as _deburr, isEmpty as _isEmpty, toLower as _toLower } from 'lodash';\nimport { SearchField } from '@getgo/chameleon-web-react-wrapper';\nimport MultiSelectList from '../MultiSelectList/MultiSelectList';\nimport { MIXPANEL_EVENT_NAME } from '../../../constants/mixpanel.ts';\nimport styles from './SearchMultiSelectList.module.scss';\nimport useMixpanel from '../../../hooks/useMixpanel.ts';\n\n/**\n * Multi-select type list with keyword.\n *\n * No assumption is taken around what to do with the keyword.\n */\nconst SearchMultiSelectList = ({\n  title,\n  placeholder,\n  itemLabelKey = 'item',\n  items,\n  onChange,\n  onKeywordChange,\n  searchInputDescription,\n  className,\n  capitalizeOptions,\n  enableSelectAll,\n  disabled,\n  isLoading = false,\n  loadingMessage\n}) => {\n  const mixpanelTrack = useMixpanel();\n  const { t } = useTranslation();\n\n  const [filteredItems, setFilteredItems] = useState(items);\n  const [filterKeyword, setFilterKeyword] = useState('');\n\n  useEffect(() => {\n    setFilteredItems(\n      _isEmpty(filterKeyword)\n        ? items\n        : items.filter(item => _toLower(_deburr(item.label)).includes(_toLower(_deburr(filterKeyword))))\n    );\n  }, [items, filterKeyword]);\n\n  const handleOnChange = ids => {\n    if (_isEmpty(filterKeyword)) {\n      onChange(ids);\n    } else {\n      onChange(\n        items\n          .filter(item =>\n            filteredItems.some(current => current.id === item.id) ? ids.includes(item.id) : item.selected\n          )\n          .map(item => item.id)\n      );\n    }\n  };\n\n  const onFilterKeywordChange = event => {\n    const newKeyword = event.target.value;\n    const eventData = {\n      Action: `${itemLabelKey} filter : keyword search changed`,\n      Component: 'SearchMultiSelectList',\n      PreviousCount: filteredItems.length,\n      NextCount: items.filter(item => _toLower(_deburr(item.label)).includes(_toLower(_deburr(newKeyword)))).length,\n      KeywordSize: newKeyword.length\n    };\n    mixpanelTrack(MIXPANEL_EVENT_NAME.FILTER, eventData);\n\n    setFilterKeyword(newKeyword);\n    onKeywordChange?.(newKeyword);\n  };\n\n  return (\n    <div className={clsx(styles.searchMultiSelectList, className)}>\n      <div className={styles.searchMultiSelectList__inputWrapper}>\n        {!_isEmpty(filterKeyword) && (\n          <span aria-live=\"polite\" className=\"sr-only\">\n            {`${filteredItems.length} ${t(itemLabelKey, { count: filteredItems.length })}`}\n            {` ${t('match the keyword \"{{filterKeyword}}\"', { filterKeyword })}`}\n          </span>\n        )}\n        <SearchField\n          className={styles.searchMultiSelectList__input}\n          fullwidth\n          placeholder={_isEmpty(placeholder) ? t('Search') : placeholder}\n          value={filterKeyword}\n          onChange={onFilterKeywordChange}\n          label={searchInputDescription}\n        />\n      </div>\n      <MultiSelectList\n        disabled={disabled}\n        title={title}\n        items={filteredItems}\n        onChange={handleOnChange}\n        itemLabelKey={itemLabelKey}\n        capitalizeOptions={capitalizeOptions}\n        enableSelectAll={enableSelectAll}\n        isLoading={isLoading}\n        loadingMessage={loadingMessage}\n      />\n    </div>\n  );\n};\n\nSearchMultiSelectList.propTypes = {\n  /** The title for the list */\n  title: PropTypes.string,\n  /**\n   * The placeholder for the search field\n   *\n   * Default: \"Search\"\n   */\n  placeholder: PropTypes.string,\n  /**\n   * The translation key of this item for a11y field\n   *\n   * Default: \"item\"\n   */\n  itemLabelKey: PropTypes.string,\n  /**\n   * List of items to be selectable.\n   *\n   * At minima, each object should provide the following:\n   * - ID\n   * - Label\n   * - Whether the item is selected\n   */\n  items: PropTypes.arrayOf(\n    PropTypes.shape({\n      id: PropTypes.string.isRequired,\n      label: PropTypes.string.isRequired,\n      selected: PropTypes.bool.isRequired,\n      startAdornment: PropTypes.node,\n      endAdornment: PropTypes.node\n    })\n  ),\n  /**\n   * Change handler.\n   *\n   * This component makes no assumption on how the selections are managed.\n   *\n   * Expects a function of the following form: `(ids: string[]) => void`\n   */\n  onChange: PropTypes.func,\n  /** Called with the current keyword whenever the search input changes */\n  onKeywordChange: PropTypes.func,\n  /** The description for the \"search\" a11y */\n  searchInputDescription: PropTypes.string,\n  /**\n   * Determines whether the list of items is disabled or not.\n   */\n  disabled: PropTypes.bool,\n  /** Determines whether the list loading indicator is displayed */\n  isLoading: PropTypes.bool,\n  /** Screen reader message announced while the list is loading */\n  loadingMessage: PropTypes.string,\n  /**\n   * Determines whether the options should be capitalized.\n   */\n  capitalizeOptions: PropTypes.bool,\n  /**\n   * Determines if the select all option is displayed\n   */\n  enableSelectAll: PropTypes.bool\n};\n\nexport default SearchMultiSelectList;\n",".serverSideSearchMultiSelectList {\n  display: flex;\n  flex-direction: column;\n}\n\n.serverSideSearchMultiSelectList__inputWrapper {\n  display: flex;\n  flex-direction: column;\n  gap: var(--goto-spacing-01);\n}\n","import { SearchOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport type { ITextFieldComponent, TextFieldComponent } from '@getgo/chameleon-web';\nimport { SearchField, TextField } from '@getgo/chameleon-web-react-wrapper';\nimport clsx from 'clsx';\nimport { debounce as _debounce, isEmpty as _isEmpty } from 'lodash';\nimport React, {\n  ChangeEvent,\n  ForwardedRef,\n  forwardRef,\n  ReactNode,\n  useCallback,\n  useEffect,\n  useImperativeHandle,\n  useMemo,\n  useRef,\n  useState\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { MIXPANEL_EVENT_NAME } from '../../../constants/mixpanel';\nimport { FilterItem } from '../../../hooks/useHierarchicalSelect';\nimport useMixpanel from '../../../hooks/useMixpanel';\nimport MultiSelectList from '../MultiSelectList/MultiSelectList';\nimport styles from './ServerSideSearchMultiSelectList.module.scss';\n\nconst DEBOUNCE_DELAY_MS = 300;\n\nexport interface ServerSideSearchMultiSelectListHandle {\n  setValue: (value: string) => void;\n}\n\nexport interface ServerSideSearchMultiSelectListProps {\n  title?: string;\n  placeholder?: string;\n  itemLabelKey?: string;\n  items: FilterItem[];\n  selectedItems: FilterItem[];\n  onChange: (ids: string[]) => void;\n  onSearch: (keyword: string) => Promise<void>;\n  searchInputDescription?: string;\n  capitalizeOptions?: boolean;\n  enableSelectAll?: boolean;\n  disabled?: boolean;\n  className?: string;\n  isLoading?: boolean;\n  onLoadMore: () => Promise<void>;\n  hasMorePages: boolean;\n  maxItems?: number;\n  onValidate?: (selectedIds: string[]) => void;\n  trailingIcon?: ReactNode;\n  inputValue?: string;\n  onInputChange?: (value: string) => void;\n  onInputKeyDown?: (event: React.KeyboardEvent<ITextFieldComponent>) => void;\n  inputErrorMessage?: string;\n  customItemsSlot?: ReactNode;\n}\n\n/**\n * Multi-select type list with server-side search.\n *\n * Debounces search input and calls the onSearch callback with the keyword.\n */\nconst ServerSideSearchMultiSelectList = forwardRef(function ServerSideSearchMultiSelectList(\n  {\n    title,\n    placeholder,\n    itemLabelKey = 'item',\n    items,\n    selectedItems,\n    onChange,\n    onSearch,\n    searchInputDescription,\n    className,\n    capitalizeOptions,\n    enableSelectAll,\n    disabled,\n    maxItems,\n    isLoading = false,\n    onLoadMore,\n    hasMorePages,\n    onValidate,\n    trailingIcon,\n    inputValue,\n    onInputChange,\n    onInputKeyDown,\n    inputErrorMessage,\n    customItemsSlot\n  }: ServerSideSearchMultiSelectListProps,\n  ref: ForwardedRef<ServerSideSearchMultiSelectListHandle>\n) {\n  const mixpanelTrack = useMixpanel();\n  const { t } = useTranslation();\n\n  const hasControlledInput = onInputChange !== undefined;\n  const [filterKeyword, setFilterKeyword] = useState('');\n  const searchInputValue = hasControlledInput ? (inputValue ?? '') : filterKeyword;\n  const textFieldRef = useRef<TextFieldComponent>(null);\n  useImperativeHandle(\n    ref,\n    () => ({\n      setValue: (value: string) => {\n        if (textFieldRef.current) {\n          textFieldRef.current.value = value;\n        }\n      }\n    }),\n    []\n  );\n  const sentinelRef = useRef<HTMLDivElement>(null);\n  const listboxRef = useRef<HTMLDivElement>(null);\n  const observerRef = useRef<IntersectionObserver | null>(null);\n  const inputErrorMessageRef = useRef(inputErrorMessage);\n  inputErrorMessageRef.current = inputErrorMessage;\n\n  const debouncedSearch = useMemo(\n    () =>\n      _debounce((keyword: string) => {\n        if (keyword && inputErrorMessageRef.current) {\n          return;\n        }\n        void onSearch(keyword);\n      }, DEBOUNCE_DELAY_MS),\n    [onSearch]\n  );\n\n  useEffect(() => {\n    return () => {\n      debouncedSearch.cancel();\n    };\n  }, [debouncedSearch]);\n\n  const prevInputValueRef = useRef(inputValue);\n  useEffect(() => {\n    if (hasControlledInput && inputValue !== prevInputValueRef.current) {\n      prevInputValueRef.current = inputValue;\n      debouncedSearch(inputValue ?? '');\n    }\n  }, [hasControlledInput, inputValue, debouncedSearch]);\n\n  const debouncedValidation = useMemo(\n    () => _debounce((selectedIds: string[]) => {\n      if (onValidate) {\n        onValidate(selectedIds);\n      }\n    }, DEBOUNCE_DELAY_MS),\n    [onValidate]\n  );\n\n  const handleSelectionChange = useCallback(\n    (selectedIds: string[]) => {\n      onChange(selectedIds);\n\n      if (onValidate && (maxItems === undefined || selectedIds.length <= maxItems)) {\n        debouncedValidation(selectedIds);\n      }\n    },\n    [onChange, onValidate, debouncedValidation, maxItems]\n  );\n\n  const onFilterKeywordChange = (event: ChangeEvent<HTMLInputElement | ITextFieldComponent>) => {\n    const newKeyword = event.target.value ?? '';\n    if (hasControlledInput) {\n      onInputChange(newKeyword);\n    } else {\n      setFilterKeyword(newKeyword);\n      debouncedSearch(newKeyword);\n    }\n  };\n\n  const mergedItems = useMemo(() => {\n    const selectedIds = new Set(selectedItems.map(item => item.id));\n    return items.map(item => ({\n      ...item,\n      selected: selectedIds.has(item.id)\n    }));\n  }, [items, selectedItems]);\n\n  const handleIntersection = useCallback(\n    (entries: IntersectionObserverEntry[]) => {\n      const [entry] = entries;\n      if (entry.isIntersecting && hasMorePages && !isLoading) {\n        const eventData = {\n          Action: `${itemLabelKey} filter : load more triggered`,\n          Component: 'PaginatedServerSideSearchMultiSelectList'\n        };\n        void mixpanelTrack(MIXPANEL_EVENT_NAME.FILTER, eventData);\n\n        void onLoadMore();\n      }\n    },\n    [hasMorePages, isLoading, onLoadMore, itemLabelKey, mixpanelTrack]\n  );\n\n  useEffect(() => {\n    if (!sentinelRef.current || !listboxRef.current) {\n      return;\n    }\n\n    observerRef.current = new IntersectionObserver(handleIntersection, {\n      root: listboxRef.current,\n      rootMargin: '50px',\n      threshold: 0.1\n    });\n\n    observerRef.current.observe(sentinelRef.current);\n\n    return () => {\n      if (observerRef.current) {\n        observerRef.current.disconnect();\n      }\n    };\n  }, [handleIntersection]);\n\n  const translatedItemType = t(itemLabelKey, { count: items.length });\n\n  return (\n    <div className={clsx(styles.serverSideSearchMultiSelectList, className)}>\n      <div className={styles.serverSideSearchMultiSelectList__inputWrapper}>\n        {!_isEmpty(searchInputValue) && (\n          <span aria-live=\"polite\" className=\"sr-only\">\n            {isLoading\n              ? t('Searching...')\n              : t('{{count}} {{itemType}} match the keyword \"{{keyword}}\"', {\n                  count: items.length,\n                  itemType: translatedItemType,\n                  keyword: searchInputValue\n                })}\n          </span>\n        )}\n        {trailingIcon ? (\n          <TextField\n            ref={textFieldRef}\n            fullwidth\n            placeholder={_isEmpty(placeholder) ? t('Search') : placeholder}\n            value={searchInputValue}\n            onChange={onFilterKeywordChange}\n            disabled={disabled}\n            leadingIcon={<SearchOutlinedIcon />}\n            trailingIcon={trailingIcon}\n            onKeyDown={onInputKeyDown}\n            error={!!inputErrorMessage}\n            helperText={inputErrorMessage}\n            aria-label={searchInputDescription ?? t('Search')}\n            autoComplete=\"off\"\n          />\n        ) : (\n          <SearchField\n            fullwidth\n            placeholder={_isEmpty(placeholder) ? t('Search') : placeholder}\n            value={searchInputValue}\n            onChange={onFilterKeywordChange}\n            label={searchInputDescription}\n            disabled={disabled}\n            error={!!inputErrorMessage}\n            helperText={inputErrorMessage}\n            autoComplete=\"off\"\n          />\n        )}\n      </div>\n      <MultiSelectList\n        disabled={disabled || isLoading}\n        title={title}\n        items={mergedItems}\n        onChange={handleSelectionChange}\n        itemLabelKey={itemLabelKey}\n        capitalizeOptions={capitalizeOptions}\n        enableSelectAll={enableSelectAll}\n        isLoading={isLoading}\n        loadingMessage={t('Loading more {{itemType}}...', { itemType: translatedItemType })}\n        scrollSentinelRef={sentinelRef}\n        hasMorePages={hasMorePages && !isLoading}\n        listboxRef={listboxRef}\n        headerSlot={customItemsSlot}\n      />\n    </div>\n  );\n});\n\nexport default ServerSideSearchMultiSelectList;\n","import { FilterItem } from '../hooks/useHierarchicalSelect';\nimport i18n from '../i18n';\n\nexport interface QmCategory {\n  id: number;\n  key: keyof typeof EvaluationCategoryKeys;\n  description: string;\n}\n\nexport const EvaluationCategoryKeys = {\n  WARM_GREETING: 'WARM_GREETING',\n  IDENTIFICATION: 'IDENTIFICATION',\n  POSITIVITY: 'POSITIVITY',\n  HELPFULNESS: 'HELPFULNESS',\n  CONTROLLING_THE_CONVERSATION: 'CONTROLLING_THE_CONVERSATION',\n  PROFESSIONALISM: 'PROFESSIONALISM',\n  COMPLIANCE: 'COMPLIANCE',\n  CUSTOM: 'CUSTOM'\n} as const;\n\nexport const getCategoryFromKey = (categoryKey: keyof typeof EvaluationCategoryKeys, description: string): string => {\n  switch (categoryKey) {\n    case EvaluationCategoryKeys.WARM_GREETING:\n      return i18n.t('Warm greeting');\n    case EvaluationCategoryKeys.IDENTIFICATION:\n      return i18n.t('Identification');\n    case EvaluationCategoryKeys.POSITIVITY:\n      return i18n.t('Positivity');\n    case EvaluationCategoryKeys.HELPFULNESS:\n      return i18n.t('Helpfulness');\n    case EvaluationCategoryKeys.CONTROLLING_THE_CONVERSATION:\n      return i18n.t('Controlling the conversation');\n    case EvaluationCategoryKeys.PROFESSIONALISM:\n      return i18n.t('Professionalism');\n    case EvaluationCategoryKeys.COMPLIANCE:\n      return i18n.t('Compliance');\n    case EvaluationCategoryKeys.CUSTOM:\n      return description;\n    default:\n      return description;\n  }\n};\n\nexport const transformQmCategoryToFilterItem = (category: QmCategory, selected = false): FilterItem => ({\n  id: String(category.id),\n  label: getCategoryFromKey(category.key, category.description),\n  selected\n});\n","import { FilterItem } from '../hooks/useHierarchicalSelect';\nimport i18n from '../i18n';\nimport { QmCategory } from './QmCategory';\n\nexport interface QmQuestion {\n  id: number;\n  key: keyof typeof EvaluationQuestionKeys;\n  description: string;\n  category: QmCategory;\n}\n\nexport const EvaluationQuestionKeys = {\n  COMPANY_GREETING: 'COMPANY_GREETING',\n  AGENT_NAME: 'AGENT_NAME',\n  HELP_OFFER: 'HELP_OFFER',\n  PHONE_NUMBER: 'PHONE_NUMBER',\n  VERIFY_ACCOUNT: 'VERIFY_ACCOUNT',\n  VERIFY_ADDRESS: 'VERIFY_ADDRESS',\n  HELPFULNESS: 'HELPFULNESS',\n  POSITIVE_LANGUAGE: 'POSITIVE_LANGUAGE',\n  RESOLUTION: 'RESOLUTION',\n  SOLUTION_PROVIDED: 'SOLUTION_PROVIDED',\n  INFORMATION_PROVIDED: 'INFORMATION_PROVIDED',\n  SUMMARIZE: 'SUMMARIZE',\n  GUIDE_CONVERSATION: 'GUIDE_CONVERSATION',\n  CONCISE_ANSWERS: 'CONCISE_ANSWERS',\n  PROFESSIONAL_LANGUAGE: 'PROFESSIONAL_LANGUAGE',\n  SLANG: 'SLANG',\n  PROFANITY: 'PROFANITY',\n  RUDENESS: 'RUDENESS',\n  PII: 'PII',\n  CUSTOM: 'CUSTOM'\n} as const;\n\nexport const getQuestionFromKey = (questionKey: keyof typeof EvaluationQuestionKeys, description: string): string => {\n  switch (questionKey) {\n    case EvaluationQuestionKeys.COMPANY_GREETING:\n      return i18n.t('Did the agent greet the caller with the company name?');\n    case EvaluationQuestionKeys.AGENT_NAME:\n      return i18n.t('Did the agent state their own name?');\n    case EvaluationQuestionKeys.HELP_OFFER:\n      return i18n.t('Did the agent ask how they could help?');\n    case EvaluationQuestionKeys.PHONE_NUMBER:\n      return i18n.t(\"Did the agent obtain the caller's phone number early in the call?\");\n    case EvaluationQuestionKeys.VERIFY_ACCOUNT:\n      return i18n.t('Did the agent verify an account number or PIN?');\n    case EvaluationQuestionKeys.VERIFY_ADDRESS:\n      return i18n.t('Did the agent verify a mailing or billing address?');\n    case EvaluationQuestionKeys.HELPFULNESS:\n      return i18n.t('Was the agent helpful?');\n    case EvaluationQuestionKeys.POSITIVE_LANGUAGE:\n      return i18n.t('Did the agent use positive or optimistic language and phrasing?');\n    case EvaluationQuestionKeys.RESOLUTION:\n      return i18n.t('Did the call lead to resolution?');\n    case EvaluationQuestionKeys.SOLUTION_PROVIDED:\n      return i18n.t(\"Did the agent provide a solution to the caller's problem?\");\n    case EvaluationQuestionKeys.INFORMATION_PROVIDED:\n      return i18n.t('Did the agent try to provide the caller with useful information?');\n    case EvaluationQuestionKeys.SUMMARIZE:\n      return i18n.t(\"Did the agent summarize or rephrase the caller's issue before diving into solution?\");\n    case EvaluationQuestionKeys.GUIDE_CONVERSATION:\n      return i18n.t('Did the agent ask relevant questions to guide the conversation?');\n    case EvaluationQuestionKeys.CONCISE_ANSWERS:\n      return i18n.t('Did the agent provide clear and concise answers?');\n    case EvaluationQuestionKeys.PROFESSIONAL_LANGUAGE:\n      return i18n.t('Did the agent use concise and professional language?');\n    case EvaluationQuestionKeys.SLANG:\n      return i18n.t('Did the agent avoid using slang?');\n    case EvaluationQuestionKeys.PROFANITY:\n      return i18n.t('Did the agent avoid using profanity?');\n    case EvaluationQuestionKeys.RUDENESS:\n      return i18n.t('Did the agent avoid being rude?');\n    case EvaluationQuestionKeys.PII:\n      return i18n.t('Did the agent avoid divulging PII?');\n    case EvaluationQuestionKeys.CUSTOM:\n      return description;\n    default:\n      return description;\n  }\n};\n\nexport const transformQmQuestionToFilterItem = (question: QmQuestion, selected = false): FilterItem => ({\n  id: String(question.id),\n  label: getQuestionFromKey(question.key, question.description),\n  selected\n});\n","import { Dispatch, SetStateAction, useCallback, useEffect, useRef, useState } from 'react';\nimport { fetchFiltersV2, getFilterItemId } from '../services/common/filters.service';\nimport { FilterDefinition, FilterItem } from '../types/config/FilterTypes';\nimport { QmCategory, transformQmCategoryToFilterItem } from '../types/QmCategory';\nimport { QmQuestion, transformQmQuestionToFilterItem } from '../types/QmQuestion';\nimport { getFlatItems } from '../utils/filters.util';\nimport {\n  transformUserGroupToFilterItem,\n  transformToItemsWithNameAsKey,\n  ServerListItem\n} from '../utils/server-list-filters.util';\n\ninterface PaginationState {\n  currentPage: number;\n  items: FilterItem[];\n  totalItems: number;\n  hasMorePages: boolean;\n  isLoading: boolean;\n  searchQuery: string;\n  selectedItems: FilterItem[];\n}\n\ninterface UseServerSidePaginationProps {\n  isEnabled: boolean;\n  isFilterLoaded: boolean;\n  organizationId: string;\n  filterConfig: FilterDefinition;\n  items: FilterItem[];\n  startTime?: string;\n  endTime?: string;\n}\n\ninterface UseServerSidePaginationReturn {\n  paginationState: PaginationState;\n  handleLoadMore: () => Promise<void>;\n  handleSearch: (searchQuery: string) => Promise<void>;\n  updateSelectedItems: (selectedOption: string[], currentElements: FilterItem[]) => void;\n}\n\nconst initialPaginationState: PaginationState = {\n  currentPage: 0,\n  items: [],\n  totalItems: 0,\n  hasMorePages: false,\n  isLoading: false,\n  searchQuery: '',\n  selectedItems: []\n};\n\ntype ItemTransformer = (item: ServerListItem, selected: boolean) => FilterItem;\n\nexport const responseTransformers: Record<string, ItemTransformer> = {\n  userGroups: transformUserGroupToFilterItem,\n  topics: transformToItemsWithNameAsKey,\n  participantNames: transformToItemsWithNameAsKey,\n  participantNumbers: transformToItemsWithNameAsKey,\n  questions: (item, selected) => transformQmQuestionToFilterItem(item as unknown as QmQuestion, selected),\n  categories: (item, selected) => transformQmCategoryToFilterItem(item as unknown as QmCategory, selected)\n};\n\nconst defaultTransform: ItemTransformer = (item, selected) => ({\n  id: item.key,\n  label: item.name,\n  selected\n});\n\nconst transformResponseItems = (\n  responseItems: ServerListItem[],\n  selectedIds: Set<string>,\n  filterQuery: string\n): FilterItem[] => {\n  const transform = responseTransformers[filterQuery] ?? defaultTransform;\n  return responseItems.map(item => {\n    // TODO - remove cast when filters.service.js is migrated to TS\n    const itemId = getFilterItemId(filterQuery, item) as string;\n    const isSelected = selectedIds.has(itemId) || (item.id !== undefined && selectedIds.has(String(item.id)));\n    return transform(item, isSelected);\n  });\n};\n\ninterface LoadPageOptions {\n  organizationId: string;\n  filterConfig: FilterDefinition;\n  page: number;\n  searchQuery: string;\n  selectedItemsForMarking: FilterItem[];\n  newSelectedItems?: FilterItem[];\n  controller: AbortController;\n  setPaginationState: Dispatch<SetStateAction<PaginationState>>;\n  errorContext: string;\n  startTime?: string;\n  endTime?: string;\n}\n\nconst loadPage = async ({\n  organizationId,\n  filterConfig,\n  page,\n  searchQuery,\n  selectedItemsForMarking,\n  newSelectedItems,\n  controller,\n  setPaginationState,\n  errorContext,\n  startTime,\n  endTime\n}: LoadPageOptions): Promise<void> => {\n  setPaginationState(prev => ({ ...prev, isLoading: true, searchQuery }));\n\n  try {\n    const { filterName, pageSize, paginated = true } = filterConfig.paginationOptions!;\n\n    const useDateRange = filterConfig.paginationOptions?.useDateRange ?? false;\n\n    const response = await fetchFiltersV2({\n      organizationId,\n      filterName,\n      ...(paginated && { page, pageSize }),\n      filterQuery: searchQuery,\n      controller,\n      ...(useDateRange && { startTime, endTime })\n    });\n\n    const r = response as { items: ServerListItem[]; total: number };\n    const selectedIds = new Set(selectedItemsForMarking.map(item => item.id));\n    const newItems = transformResponseItems(r.items, selectedIds, filterName);\n\n    setPaginationState(prev => ({\n      ...prev,\n      currentPage: page,\n      items: page === 0 ? newItems : [...prev.items, ...newItems],\n      totalItems: r.total,\n      hasMorePages: paginated && pageSize !== undefined && (page + 1) * pageSize < r.total,\n      isLoading: false,\n      ...(newSelectedItems !== undefined && { selectedItems: newSelectedItems })\n    }));\n  } catch (error) {\n    if ((error as Error).name !== 'AbortError') {\n      console.error(`Error ${errorContext}:`, error);\n      setPaginationState(prev => ({ ...prev, isLoading: false }));\n    }\n  }\n};\n\nconst useServerSidePagination = ({\n  isEnabled,\n  isFilterLoaded,\n  organizationId,\n  filterConfig,\n  items,\n  startTime,\n  endTime\n}: UseServerSidePaginationProps): UseServerSidePaginationReturn => {\n  const [paginationState, setPaginationState] = useState<PaginationState>(initialPaginationState);\n  const abortControllerRef = useRef<AbortController | null>(null);\n  const paginationStateRef = useRef(paginationState);\n  paginationStateRef.current = paginationState;\n\n  const hasLoadedRef = useRef(false);\n  const prevFetchKeyRef = useRef<string | null>(null);\n\n  const itemsRef = useRef(items);\n  itemsRef.current = items;\n\n  const cancelInflightRequest = useCallback((): AbortController => {\n    abortControllerRef.current?.abort();\n    abortControllerRef.current = new AbortController();\n    return abortControllerRef.current;\n  }, []);\n\n  // Create a dependency key that conditionally includes date range for filters that use it\n  const useDateRange = filterConfig.paginationOptions?.useDateRange ?? false;\n  const dateRangeDep = useDateRange ? `${startTime}:${endTime}` : 'no-date-range';\n\n  // Load the first page when the filter opens, and re-fetch if org or filter config changes\n  useEffect(() => {\n    const fetchKey = `${organizationId}:${filterConfig?.paginationOptions?.filterName}:${dateRangeDep}`;\n    if (prevFetchKeyRef.current && prevFetchKeyRef.current !== fetchKey) {\n      hasLoadedRef.current = false;\n    }\n    prevFetchKeyRef.current = fetchKey;\n\n    if (!isEnabled || !isFilterLoaded || hasLoadedRef.current) {\n      return;\n    }\n\n    hasLoadedRef.current = true;\n    const controller = cancelInflightRequest();\n    const previouslySelected = (getFlatItems(itemsRef.current) as FilterItem[]).filter(item => item.selected);\n\n    void loadPage({\n      organizationId,\n      filterConfig,\n      page: 0,\n      searchQuery: '',\n      selectedItemsForMarking: previouslySelected,\n      newSelectedItems: previouslySelected,\n      controller,\n      setPaginationState,\n      errorContext: 'loading first page',\n      startTime,\n      endTime\n    });\n\n    return () => {\n      controller.abort();\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [isEnabled, isFilterLoaded, organizationId, filterConfig, cancelInflightRequest, dateRangeDep]);\n\n  const handleLoadMore = useCallback(async (): Promise<void> => {\n    const state = paginationStateRef.current;\n    if (!isEnabled || state.isLoading || !state.hasMorePages) {\n      return;\n    }\n    const controller = cancelInflightRequest();\n    await loadPage({\n      organizationId,\n      filterConfig,\n      page: state.currentPage + 1,\n      searchQuery: state.searchQuery,\n      selectedItemsForMarking: state.selectedItems,\n      controller,\n      setPaginationState,\n      errorContext: 'loading more pages',\n      startTime,\n      endTime\n    });\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [isEnabled, organizationId, filterConfig, cancelInflightRequest, dateRangeDep]);\n\n  const handleSearch = useCallback(\n    async (searchQuery: string): Promise<void> => {\n      if (!isEnabled) {\n        return;\n      }\n      const controller = cancelInflightRequest();\n      await loadPage({\n        organizationId,\n        filterConfig,\n        page: 0,\n        searchQuery,\n        selectedItemsForMarking: paginationStateRef.current.selectedItems,\n        controller,\n        setPaginationState,\n        errorContext: 'searching',\n        startTime,\n        endTime\n      });\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [isEnabled, organizationId, filterConfig, cancelInflightRequest, dateRangeDep]\n  );\n\n  const updateSelectedItems = useCallback((selectedOption: string[], currentElements: FilterItem[]): void => {\n    setPaginationState(prev => {\n      const currentPageIds = new Set(currentElements.map(el => el.id));\n      const selectionsFromOtherPages = prev.selectedItems.filter(item => !currentPageIds.has(item.id));\n      const selectionsFromCurrentPage = currentElements\n        .filter(el => selectedOption.includes(el.id))\n        .map(el => ({ ...el, selected: true as const }));\n\n      return {\n        ...prev,\n        selectedItems: [...selectionsFromOtherPages, ...selectionsFromCurrentPage]\n      };\n    });\n  }, []);\n\n  return {\n    paginationState,\n    handleLoadMore,\n    handleSearch,\n    updateSelectedItems\n  };\n};\n\nexport default useServerSidePagination;\n","import { AlertOutlinedIcon, ChevronLeftOutlinedIcon, TrashOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { Alert, Button, IconButton, Switch, Typography } from '@getgo/chameleon-web-react-wrapper';\nimport { GotoAvatar } from '@goto/shell-react-components';\nimport clsx from 'clsx';\nimport { isArray as _isArray, isEmpty as _isEmpty } from 'lodash';\nimport PropTypes from 'prop-types';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector } from 'react-redux';\nimport { MIXPANEL_EVENT_NAME } from '../../../constants/mixpanel.ts';\nimport useMixpanel from '../../../hooks/useMixpanel.ts';\nimport { useCustomFilterItems } from '../../../hooks/useCustomFilterItems.ts';\nimport { selectCurrentOrganizationId, selectIsUserReadOnly } from '../../../store/selectors/analytics';\nimport { selectQueriedDateRange } from '../../../store/selectors/filtersV2';\nimport { filterConfigPropType, filterElementPropType } from '../../../utils/prop-types.util';\nimport { getFlatItems } from '../../../utils/filters.util';\nimport { TooltipWrapper } from '@analytics-common-ui/layout';\nimport { AddCustomItemButton } from '../CustomFilterItemsList/CustomFilterItemsList.tsx';\nimport CustomFilterItemsList from '../CustomFilterItemsList/CustomFilterItemsList.tsx';\nimport FilterListSkeleton from '../FilterListSkeleton/FilterListSkeleton';\nimport MultiSelectList from '../MultiSelectList/MultiSelectList';\nimport SearchMultiSelectList from '../SearchMultiSelectList/SearchMultiSelectList';\nimport ServerSideSearchMultiSelectList from '../ServerSideSearchMultiSelectList/ServerSideSearchMultiSelectList.tsx';\nimport styles from './ListFilter.module.scss';\nimport { FILTER_TYPES, TEXT_FORMAT } from '../../../constants/filters-definitions';\nimport { matchesCappedId } from '../../../constants/validation';\nimport { sanitizePhoneNumber } from '../../../utils/strings.util.ts';\nimport useServerSidePagination from '../../../hooks/useServerSidePagination';\n/*\n * The List filter. This component display and send changes for all the list filters.\n */\nconst ListFilter = ({\n  isShowSelectedOnly = false,\n  onShowSelectedOnlyChange,\n  isFilterLoaded = false,\n  items,\n  filterConfig,\n  filterType,\n  isTrashIconVisible,\n  onCloseFilter,\n  onRemoveFilter,\n  setCurrentFilterValue,\n  onValidate,\n  validationError\n}) => {\n  const mixpanelTrack = useMixpanel();\n  const { t } = useTranslation();\n  const isUserReadOnly = useSelector(selectIsUserReadOnly);\n  const organizationId = useSelector(selectCurrentOrganizationId);\n  const { startTime, endTime } = useSelector(selectQueriedDateRange);\n  const [currentElements, setCurrentElements] = useState(items ?? []);\n\n  const listOptions = filterConfig.listOptions ?? {};\n  const isServerSideSearch = filterType === FILTER_TYPES.SERVER_LIST;\n  const maxItems = listOptions.maxItems;\n  const maxItemsReached = listOptions.translations?.maxItemsReached;\n\n  const { paginationState, handleLoadMore, handleSearch, updateSelectedItems } = useServerSidePagination({\n    isEnabled: isServerSideSearch,\n    isFilterLoaded,\n    organizationId,\n    filterConfig,\n    items,\n    startTime,\n    endTime\n  });\n\n  const paginationHasLoaded = useRef(false);\n\n  // Sync pagination items to currentElements for display\n  useEffect(() => {\n    if (!isServerSideSearch) {\n      return;\n    }\n    if (paginationState.items.length > 0) {\n      paginationHasLoaded.current = true;\n    }\n    if (!paginationHasLoaded.current) {\n      return;\n    }\n    const selectedIds = new Set(paginationState.selectedItems.map(el => el.id));\n    const pageItemIds = new Set(paginationState.items.map(el => el.id));\n\n    const pageItems = paginationState.items.map(item => ({\n      ...item,\n      selected: selectedIds.has(item.id)\n    }));\n    const offPageSelections = paginationState.selectedItems.filter(item => !pageItemIds.has(item.id));\n\n    setCurrentElements([...pageItems, ...offPageSelections]);\n  }, [isServerSideSearch, paginationState.items, paginationState.selectedItems]);\n\n  const hasCustomItems = useCallback(() => {\n    if (!filterConfig.allowCustomItems || !filterConfig.textOptions) {\n      return false;\n    }\n    return true;\n  }, [filterConfig.allowCustomItems, filterConfig.textOptions]);\n\n  const initialCustomItems = useMemo(() => {\n    if (!hasCustomItems() || !isServerSideSearch) {\n      return undefined;\n    }\n    const selectedItems = (items ?? []).filter(item => item.selected);\n    return selectedItems.length > 0 ? selectedItems : undefined;\n  }, [hasCustomItems, isServerSideSearch, items]);\n\n  const {\n    customOptions,\n    customTextValue,\n    setCustomTextValue,\n    addNewOption,\n    removeCustomOption,\n    updateCustomOption,\n    hoveredCustomOption,\n    setHoveredCustomOption,\n    onCustomEnter,\n    isAddButtonVisible,\n    inputErrorMessage,\n    mergeWithElements,\n    removedIds,\n    clearRemovedIds\n  } = useCustomFilterItems({\n    enabled: hasCustomItems(),\n    textOptions: filterConfig.textOptions ?? {},\n    filterLabel: filterConfig.label,\n    initialItems: initialCustomItems\n  });\n\n  const customIdSet = useMemo(\n    () => (hasCustomItems() ? new Set(customOptions.map(o => o.id.toLowerCase())) : new Set()),\n    [hasCustomItems, customOptions]\n  );\n\n  const isCoveredByCustom = useCallback(\n    id =>\n      id === null || id === undefined ? false : matchesCappedId(id, customIdSet, filterConfig.textOptions?.maxLength),\n    [customIdSet, filterConfig.textOptions?.maxLength]\n  );\n\n  useEffect(() => {\n    if (isFilterLoaded) {\n      setCurrentFilterValue(mergeWithElements(currentElements));\n    }\n  }, [currentElements, mergeWithElements, isFilterLoaded, setCurrentFilterValue]);\n\n  useEffect(() => {\n    const flatElements = getFlatItems(currentElements);\n    if (isShowSelectedOnly && _isEmpty(flatElements.filter(el => el.selected))) {\n      onShowSelectedOnlyChange(false);\n    }\n  }, [currentElements, isShowSelectedOnly, onShowSelectedOnlyChange]);\n\n  const getAvatar = (item, disabled) => (\n    <GotoAvatar\n      givenName={item.firstName}\n      lastName={item.lastName}\n      externalUserKey={item.externalUserKey}\n      size=\"small\"\n      className={clsx(disabled && styles.listFilter__avatar_disabled)}\n    />\n  );\n\n  const visibleItems = useMemo(() => {\n    if (_isArray(currentElements)) {\n      let currentSelectedItems;\n\n      if (isShowSelectedOnly) {\n        currentSelectedItems = currentElements.reduce((acc, el) => {\n          if (el.subFilters && el.subFilters.length > 0) {\n            const selectedChildren = el.subFilters.filter(child => child.selected);\n            if (selectedChildren.length > 0) {\n              acc.push({ ...el, subFilters: selectedChildren });\n            }\n          } else if (el.selected) {\n            acc.push(el);\n          }\n          return acc;\n        }, []);\n      } else {\n        currentSelectedItems = currentElements;\n      }\n\n      return filterConfig.enableItemsAvatar\n        ? currentSelectedItems.map(el => ({\n            ...el,\n            startAdornment: getAvatar(el, isUserReadOnly || el.disabled)\n          }))\n        : currentSelectedItems;\n    }\n    return [];\n  }, [currentElements, filterConfig.enableItemsAvatar, isUserReadOnly, isShowSelectedOnly]);\n\n  const handleOnShowSelectedOnly = useCallback(\n    event => {\n      const value = event.target.checked;\n      if (value !== isShowSelectedOnly) {\n        const eventData = {\n          Action: `Clicked on show selected only`,\n          Filter: filterConfig.name,\n          Component: 'FilterContainer',\n          ShowSelectedOnlyValue: value\n        };\n        mixpanelTrack(MIXPANEL_EVENT_NAME.FILTER, eventData);\n\n        onShowSelectedOnlyChange(value);\n      }\n    },\n    [filterConfig.name, isShowSelectedOnly, mixpanelTrack, onShowSelectedOnlyChange]\n  );\n\n  const getFilterValue = (selectedCount, itemsCount) => {\n    if (selectedCount === itemsCount) {\n      return 'All';\n    }\n    if (selectedCount === 0) {\n      return 'None';\n    }\n    return `${selectedCount} of ${itemsCount}`;\n  };\n\n  const handleSelectionChange = useCallback(\n    selectedOption => {\n      const flatItems = getFlatItems(items || []);\n      const previousSelectedItemsLength = flatItems.filter(item => item.selected).length;\n      const totalItemsLength = flatItems.length;\n\n      if (maxItems && selectedOption.length > previousSelectedItemsLength && selectedOption.length > maxItems) {\n        return;\n      }\n\n      const eventData = {\n        Action: `Filter selection change`,\n        Filter: filterConfig.name,\n        Component: 'FilterContainerBottomFilters',\n        PreviousFilterValue: getFilterValue(previousSelectedItemsLength, totalItemsLength),\n        NextFilterValue: getFilterValue(selectedOption.length, totalItemsLength)\n      };\n      mixpanelTrack(MIXPANEL_EVENT_NAME.FILTER, eventData);\n\n      if (isServerSideSearch) {\n        clearRemovedIds(selectedOption);\n        updateSelectedItems(selectedOption, paginationState.items);\n      } else {\n        setCurrentElements(prev =>\n          prev.map(currentElement => {\n            if (currentElement.subFilters && currentElement.subFilters.length > 0) {\n              const updatedChildren = currentElement.subFilters.map(subFilter => ({\n                ...subFilter,\n                selected: selectedOption.includes(subFilter.id)\n              }));\n\n              const parentSelected = updatedChildren.some(child => child.selected);\n\n              return {\n                ...currentElement,\n                selected: parentSelected,\n                subFilters: updatedChildren\n              };\n            }\n            return { ...currentElement, selected: selectedOption.includes(currentElement.id) };\n          })\n        );\n      }\n    },\n    [\n      filterConfig.name,\n      items,\n      mixpanelTrack,\n      isServerSideSearch,\n      paginationState.items,\n      maxItems,\n      updateSelectedItems,\n      clearRemovedIds\n    ]\n  );\n\n  const flatElements = getFlatItems(currentElements);\n  const elementsCount = flatElements.length || 0;\n  const elementsSelected = [\n    ...flatElements.filter(el => el.selected && !isCoveredByCustom(el.id)),\n    ...(hasCustomItems() ? customOptions.filter(o => o.selected) : [])\n  ];\n\n  const isMaxReached = maxItems && elementsSelected.length >= maxItems;\n  const customSelectedCount = hasCustomItems() ? customOptions.filter(o => o.selected).length : 0;\n  const adjustedMaxItems = maxItems ? Math.max(0, maxItems - customSelectedCount) : undefined;\n  const visibleItemsWithDisabledState = useMemo(() => {\n    if (!isMaxReached) {\n      return visibleItems;\n    }\n\n    return visibleItems.map(item => ({\n      ...item,\n      disabled: !item.selected\n    }));\n  }, [isMaxReached, visibleItems]);\n  const paginationItemsWithDisabledState = useMemo(() => {\n    const selectedIds = new Set(paginationState.selectedItems.map(item => item.id));\n\n    return paginationState.items.map(item => ({\n      ...item,\n      selected: selectedIds.has(item.id),\n      disabled: !!isMaxReached && !selectedIds.has(item.id)\n    }));\n  }, [isMaxReached, paginationState.items, paginationState.selectedItems]);\n\n  const handleAddNewOption = () => {\n    if (!isMaxReached && isAddButtonVisible) {\n      addNewOption();\n    }\n  };\n  const handleCustomEnter = e => {\n    if (!isMaxReached && isAddButtonVisible) {\n      onCustomEnter(e);\n    }\n  };\n  const handleCustomKeyDown = e => {\n    const isPhoneFormat = filterConfig.textOptions?.format === TEXT_FORMAT.PHONE;\n    const isSingleInvalidCharacter = Array.from(e.key).length === 1 && !/[0-9]/.test(e.key) && !e.ctrlKey && !e.metaKey;\n    if (isPhoneFormat && isSingleInvalidCharacter) {\n      e.preventDefault();\n      return;\n    }\n    handleCustomEnter(e);\n  };\n  const customInputFieldRef = useRef(null);\n  const handleCustomInputChange = value => {\n    const isPhoneFormat = filterConfig.textOptions?.format === TEXT_FORMAT.PHONE;\n    const sanitizedValue = isPhoneFormat ? sanitizePhoneNumber(value) : value;\n    setCustomTextValue(sanitizedValue);\n    if (isPhoneFormat && customInputFieldRef.current) {\n      customInputFieldRef.current.setValue(sanitizedValue);\n    }\n  };\n  const handleUpdateCustomOption = (id, option) => {\n    if (option.selected && isMaxReached) {\n      return;\n    }\n    updateCustomOption(id, option);\n  };\n\n  const customOptionsWithDisabled = useMemo(() => {\n    if (!isMaxReached) {\n      return customOptions;\n    }\n    return customOptions.map(option => ({ ...option, disabled: !option.selected }));\n  }, [customOptions, isMaxReached]);\n\n  const getFilteredCustomOptions = useCallback(\n    keyword => customOptionsWithDisabled.filter(o => !keyword || o.label.toLowerCase().includes(keyword.toLowerCase())),\n    [customOptionsWithDisabled]\n  );\n\n  const getAllUnselected = () => {\n    const hasLoadedItems = isServerSideSearch\n      ? !paginationState.isLoading && (paginationState.items.length > 0 || customOptions.length > 0)\n      : !_isEmpty(currentElements);\n\n    const nothingSelected = isServerSideSearch\n      ? paginationState.selectedItems.length === 0 && customSelectedCount === 0\n      : currentElements.every(a => !a.selected) && customSelectedCount === 0;\n\n    return hasLoadedItems && nothingSelected;\n  };\n\n  const renderWarnings = () => {\n    const allUnselected = getAllUnselected();\n\n    let warningText = null;\n\n    if (filterConfig.allowSaveEmpty === false && allUnselected) {\n      warningText = t('Filter will not be applied as nothing is selected.');\n    } else if (isMaxReached && maxItemsReached) {\n      warningText = t(maxItemsReached);\n    } else if (!isServerSideSearch && !_isEmpty(validationError)) {\n      warningText = t(validationError);\n    } else if (!_isEmpty(listOptions.translations.warningAllUnselectedMessage) && isFilterLoaded && allUnselected) {\n      warningText = t(listOptions.translations.warningAllUnselectedMessage);\n    }\n\n    if (_isEmpty(warningText)) {\n      return null;\n    }\n\n    return (\n      <Alert variant=\"warning\" icon={<AlertOutlinedIcon />}>\n        <Typography tag=\"span\" variant=\"caption-medium-strong\">\n          {warningText}\n        </Typography>\n      </Alert>\n    );\n  };\n\n  const renderSelectList = () => {\n    if (listOptions.enableSearch && isServerSideSearch) {\n      return (\n        <ServerSideSearchMultiSelectList\n          ref={customInputFieldRef}\n          disabled={isUserReadOnly}\n          items={paginationItemsWithDisabledState.filter(item => !isCoveredByCustom(item.id))}\n          selectedItems={paginationState.selectedItems.filter(\n            item => !isCoveredByCustom(item.id) && !removedIds.has(item.id.toLowerCase())\n          )}\n          onChange={handleSelectionChange}\n          onSearch={handleSearch}\n          onLoadMore={handleLoadMore}\n          hasMorePages={paginationState.hasMorePages}\n          isLoading={paginationState.isLoading}\n          maxItems={adjustedMaxItems}\n          enableSelectAll={listOptions.enableSelectAll}\n          itemLabelKey={t(listOptions.translations.listName)}\n          title={t(listOptions.translations.allElements, { count: 2 })}\n          capitalizeOptions={listOptions.capitalizeOptions}\n          searchInputDescription={t(listOptions.translations.searchInputDescription)}\n          onValidate={onValidate}\n          validationError={validationError}\n          {...customItemsServerSideProps}\n        />\n      );\n    }\n\n    if (listOptions.enableSearch) {\n      return (\n        <SearchMultiSelectList\n          disabled={isUserReadOnly}\n          items={visibleItemsWithDisabledState.filter(item => !isCoveredByCustom(item.id))}\n          onChange={handleSelectionChange}\n          enableSelectAll={listOptions.enableSelectAll}\n          itemLabelKey={t(listOptions.translations.allElements, { count: 1 })}\n          title={t(listOptions.translations.allElements, { count: 2 })}\n          capitalizeOptions={listOptions.capitalizeOptions}\n          searchInputDescription={t(listOptions.translations.searchInputDescription)}\n          isLoading={paginationState.isLoading}\n          loadingMessage={t(listOptions.translations.filterLoading)}\n        />\n      );\n    }\n\n    return (\n      <MultiSelectList\n        items={visibleItemsWithDisabledState}\n        onChange={handleSelectionChange}\n        itemLabelKey={t(listOptions.translations.allElements, { count: 1 })}\n        enableSelectAll={listOptions.enableSelectAll}\n        title={t(listOptions.translations.allElements, { count: 2 })}\n        capitalizeOptions={listOptions.capitalizeOptions}\n      />\n    );\n  };\n\n  const customItemsServerSideProps = hasCustomItems()\n    ? {\n        trailingIcon: (\n          <AddCustomItemButton onClick={handleAddNewOption} isVisible={isAddButtonVisible} disabled={isMaxReached} />\n        ),\n        inputValue: customTextValue,\n        onInputChange: handleCustomInputChange,\n        onInputKeyDown: handleCustomKeyDown,\n        inputErrorMessage,\n        customItemsSlot: (\n          <CustomFilterItemsList\n            options={getFilteredCustomOptions(customTextValue)}\n            hoveredOption={hoveredCustomOption}\n            onToggle={handleUpdateCustomOption}\n            onRemove={removeCustomOption}\n            onHover={setHoveredCustomOption}\n            capitalizeOptions={listOptions.capitalizeOptions}\n            showSeparator={paginationState.items.some(item => !isCoveredByCustom(item.id))}\n          />\n        )\n      }\n    : {};\n\n  if (!isFilterLoaded) {\n    return (\n      <FilterListSkeleton\n        showStartAdornment\n        announceLoading={t(listOptions.translations.filterLoading)}\n        announceLoaded={t(listOptions.translations.filterLoaded)}\n      />\n    );\n  }\n\n  return (\n    <div>\n      <div className={styles.listFilter}>\n        <div className={clsx(styles.listFilter__header, styles.listFilter__header_actions)}>\n          <span>\n            <TooltipWrapper placement=\"bottom\" title={t('Back')}>\n              <IconButton\n                label={t('Back')}\n                onClick={onCloseFilter}\n                size=\"small\"\n                variant=\"primary\"\n                className={styles.listFilter__back}>\n                <ChevronLeftOutlinedIcon size=\"20px\" />\n              </IconButton>\n            </TooltipWrapper>\n            <Button onClick={onCloseFilter} variant=\"tertiary\" className={styles.listFilter__title}>\n              <Typography variant=\"heading-small\" color=\"textPrimary\" role=\"group\">\n                {t(filterConfig.name)}\n              </Typography>\n            </Button>\n          </span>\n          {isTrashIconVisible && (\n            <TooltipWrapper placement=\"bottom\" title={t('Remove filter')}>\n              <IconButton\n                label={t('Remove filter')}\n                onClick={e => {\n                  e.stopPropagation();\n                  onRemoveFilter();\n                }}\n                role=\"button\"\n                className={styles.listFilter__removeIcon}\n                size=\"small\"\n                variant=\"primary\">\n                <TrashOutlinedIcon />\n              </IconButton>\n            </TooltipWrapper>\n          )}\n        </div>\n        {!listOptions.hideCounter && (\n          <Typography\n            className={styles.listFilter__headerLabel}\n            variant=\"body-small-strong\"\n            color=\"type-color-secondary\">\n            {t('{{selectedElementsCount}} of {{totalElementsCount}} selected', {\n              count: elementsSelected.length,\n              selectedElementsCount: elementsSelected.length,\n              totalElementsCount: elementsCount\n            })}\n          </Typography>\n        )}\n        {listOptions.hideCounter && listOptions.translations?.selectedItemsCounter && (\n          <Typography\n            className={styles.listFilter__headerLabel}\n            variant=\"body-small-strong\"\n            color=\"type-color-secondary\">\n            {t(listOptions.translations.selectedItemsCounter, {\n              count: elementsSelected.length,\n              selectedItems: elementsSelected.length,\n              maxItems\n            })}\n          </Typography>\n        )}\n        {renderSelectList()}\n\n        {listOptions.enableShowSelectedOnly && (\n          <div className={styles.listFilter__onlySelected}>\n            <Switch\n              checked={isShowSelectedOnly}\n              onChange={handleOnShowSelectedOnly}\n              disabled={_isEmpty(elementsSelected)}>\n              <Typography variant=\"body-small\" tag=\"label\" className={styles.listFilter__onlySelectedLabelText}>\n                {t('Show selected only')}\n              </Typography>\n            </Switch>\n          </div>\n        )}\n        {renderWarnings()}\n      </div>\n    </div>\n  );\n};\n\nListFilter.propTypes = {\n  /** The current filter items */\n  items: filterElementPropType,\n  /** default status of show selected only */\n  isShowSelectedOnly: PropTypes.bool,\n  /** show selected only change handler function */\n  onShowSelectedOnlyChange: PropTypes.func.isRequired,\n  /** Filter is ready to be displayed */\n  isFilterLoaded: PropTypes.bool,\n  /** The filter object */\n  currentFilters: PropTypes.shape({\n    convertOutcomes: PropTypes.bool\n  }),\n  /** The filter configuration */\n  filterConfig: filterConfigPropType,\n  /** Function called when going back to the filters list */\n  onCloseFilter: PropTypes.func,\n  /** Function called to define the filter value to apply */\n  setCurrentFilterValue: PropTypes.func,\n  /** Function called when the filter is removed */\n  onRemoveFilter: PropTypes.func,\n  /** Indicate if the trash icon is visible */\n  isTrashIconVisible: PropTypes.bool,\n  /** Filter type (e.g., 'LIST', 'SERVER_LIST') - used to determine search behavior */\n  filterType: PropTypes.string,\n  /** Validation callback function passed from parent */\n  onValidate: PropTypes.func,\n  /** Validation error message from parent component */\n  validationError: PropTypes.oneOfType([PropTypes.string, PropTypes.oneOf([null])])\n};\n\nexport default ListFilter;\n",".filtersList {\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n  min-width: 300px;\n  padding: var(--goto-spacing-04) var(--goto-spacing-04) var(--goto-spacing-07);\n}\n\n.filtersList__menu {\n  padding-bottom: 0;\n  width: 100%;\n\n  svg {\n    width: 16px;\n    height: 16px;\n    margin-top: 5px;\n    margin-left: 3px;\n  }\n}\n\n.filtersList__menuItem {\n  &[disabled] {\n    svg,\n    path {\n      fill: var(--goto-icon-color-disabled);\n    }\n\n    chameleon-svg {\n      --goto-icon-color: var(--goto-icon-color-disabled);\n    }\n  }\n}\n","import { TIME_UNITS } from './time-units';\n\n/**\n * Mapping between the timeUnit and it's label\n */\nexport const TIME_UNITS_LABEL = {\n  [TIME_UNITS.SECONDS]: 'Seconds', // i18n.t('Seconds')\n  [TIME_UNITS.MINUTES]: 'Minutes', // i18n.t('Minutes')\n  [TIME_UNITS.HOURS]: 'Hours' // i18n.t('Hours')\n};\n",".rangeFiltersForm {\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n  min-width: 300px;\n  max-width: 300px;\n}\n\n.rangeFiltersForm__header {\n  display: flex;\n  justify-content: space-between;\n  align-items: first baseline;\n  align-items: center;\n\n  > span {\n    display: flex;\n    align-items: center;\n    margin-left: -10px;\n  }\n}\n\n.rangeFiltersForm__title {\n  &::part(control) {\n    padding: 0;\n  }\n}\n\n.rangeFiltersForm__back {\n  &::part(control) {\n    display: flex;\n    font-size: 1rem;\n    align-self: flex-start;\n    flex-wrap: nowrap;\n    padding: 0;\n    margin: 0;\n    justify-content: flex-start;\n    align-items: center;\n  }\n\n  &::part(content) {\n    display: flex;\n    justify-content: center;\n    align-items: center;\n  }\n\n  chameleon-svg {\n    display: inline-block;\n    padding-top: 1px;\n  }\n}\n\n.rangeFiltersForm__removeIcon {\n  margin-right: -5px;\n\n  chameleon-svg {\n    --goto-icon-color: var(--goto-icon-color-danger);\n  }\n}\n\n.rangeFiltersForm__subtitle {\n  padding: var(--goto-spacing-02) 0;\n}\n\n.rangeFiltersForm__inputContainer {\n  align-items: baseline;\n  display: flex;\n  flex-direction: row;\n  gap: 6px;\n}\n\n.rangeFiltersForm__option {\n  &::part(start) {\n    display: none;\n  }\n}\n","import { useTranslation } from 'react-i18next';\nimport PropTypes from 'prop-types';\nimport {\n  ArrowDownOutlinedIcon,\n  ArrowUpOutlinedIcon,\n  ChevronLeftOutlinedIcon,\n  TrashOutlinedIcon\n} from '@getgo/chameleon-icons/react';\nimport { Button, IconButton, NumberField, Option, Select, Typography } from '@getgo/chameleon-web-react-wrapper';\nimport { isEmpty as _isEmpty, isNaN as _isNaN } from 'lodash';\nimport { useState } from 'react';\nimport { MIXPANEL_EVENT_NAME } from '../../../../constants/mixpanel.ts';\nimport { TIME_UNITS_LABEL } from '../../../../constants/range-filter-unit.ts';\nimport { durationBasedFilters } from '../../../../utils/prop-types.util';\nimport useMixpanel from '../../../../hooks/useMixpanel.ts';\nimport { TooltipWrapper } from '@analytics-common-ui/layout';\nimport styles from './RangeFiltersForm.module.scss';\n\nconst minKey = 'min';\nconst maxKey = 'max';\nconst unitKey = 'unit';\n\nconst RangeFiltersForm = ({\n  title,\n  subtitle,\n  range,\n  hasError,\n  onChange,\n  onError,\n  onCloseFilter,\n  onRemoveFilter,\n  isTrashIconVisible,\n  disabled,\n  units = TIME_UNITS_LABEL\n}) => {\n  const { t } = useTranslation();\n  const mixpanelTrack = useMixpanel();\n  const [lastKeyChanged, setLastKeyChanged] = useState(null);\n\n  const getNewRange = (key, value) => ({\n    ...range,\n    [key]: value\n  });\n\n  const getValue = event =>\n    _isEmpty(event.target.value) || _isNaN(event.target.value) || parseFloat(event.target.value) < 0\n      ? null\n      : parseFloat(event.target.value);\n\n  const handleChange = propertyKey => event => {\n    const value = propertyKey === unitKey ? event.target.value : getValue(event);\n    // NumberField trigger onChange on load\n    if (range[propertyKey] === value) {\n      return;\n    }\n    const newValue = getNewRange(propertyKey, value);\n\n    if (propertyKey !== unitKey) {\n      setLastKeyChanged(propertyKey);\n    }\n\n    const eventData = {\n      Action: `Range filter changed: ${propertyKey}`,\n      Component: 'RangeFilter',\n      PreviousFilterValue: range,\n      NextFilterValue: newValue,\n      Filter: title\n    };\n    mixpanelTrack(MIXPANEL_EVENT_NAME.FILTER, eventData);\n\n    onChange(newValue);\n    onError(newValue.min && newValue.max && newValue.min > newValue.max);\n  };\n\n  const getHelperText = propertyKey => {\n    return hasError && propertyKey === lastKeyChanged\n      ? t('Invalid.', { context: 'The minimum or maximum duration is invalid' })\n      : null;\n  };\n\n  return (\n    <div className={styles.rangeFiltersForm}>\n      <div className={styles.rangeFiltersForm__header}>\n        <span>\n          <TooltipWrapper placement=\"bottom\" title={t('Back')}>\n            <IconButton\n              label={t('Back')}\n              onClick={onCloseFilter}\n              size=\"small\"\n              variant=\"primary\"\n              className={styles.rangeFiltersForm__back}>\n              <ChevronLeftOutlinedIcon size=\"20px\" />\n            </IconButton>\n          </TooltipWrapper>\n          <Button onClick={onCloseFilter} variant=\"tertiary\" className={styles.rangeFiltersForm__title}>\n            <Typography variant=\"heading-small\" color=\"textPrimary\" role=\"group\">\n              {t(title)}\n            </Typography>\n          </Button>\n        </span>\n        {isTrashIconVisible && (\n          <TooltipWrapper placement=\"bottom\" title={t('Remove filter')}>\n            <IconButton\n              label={t('Remove filter')}\n              onClick={onRemoveFilter}\n              role=\"button\"\n              className={styles.rangeFiltersForm__removeIcon}\n              size=\"small\"\n              variant=\"primary\">\n              <TrashOutlinedIcon />\n            </IconButton>\n          </TooltipWrapper>\n        )}\n      </div>\n      <Typography\n        className={styles.rangeFiltersForm__subtitle}\n        variant=\"body-small-strong\"\n        color=\"type-color-secondary\">\n        {t(subtitle)}\n      </Typography>\n      <div className={styles.rangeFiltersForm__inputContainer}>\n        {Object.keys(units).length > 0 && (\n          <Select\n            disabled={disabled}\n            onChange={handleChange(unitKey)}\n            size=\"small\"\n            value={range.unit}\n            label={t('Units')}>\n            {Object.entries(units).map(([key, unitValue]) => (\n              <Option className={styles.rangeFiltersForm__option} key={key} value={key}>\n                {unitValue}\n              </Option>\n            ))}\n          </Select>\n        )}\n        <NumberField\n          disabled={disabled}\n          data-testid=\"minimum-number-field\"\n          onChange={handleChange(minKey)}\n          error={hasError && lastKeyChanged === minKey}\n          helperText={getHelperText(minKey)}\n          fieldsize=\"small\"\n          value={range.min}\n          placeholder=\"All\"\n          leadingIcon={<ArrowDownOutlinedIcon />}>\n          {t('Minimum')}\n        </NumberField>\n        <NumberField\n          disabled={disabled}\n          data-testid=\"maximum-number-field\"\n          onChange={handleChange(maxKey)}\n          error={hasError && lastKeyChanged === maxKey}\n          helperText={getHelperText(maxKey)}\n          fieldsize=\"small\"\n          value={range.max}\n          placeholder=\"All\"\n          leadingIcon={<ArrowUpOutlinedIcon />}>\n          {t('Maximum')}\n        </NumberField>\n      </div>\n    </div>\n  );\n};\n\nRangeFiltersForm.propTypes = {\n  /**\n   * Default range value\n   */\n  range: durationBasedFilters.isRequired,\n  /** True if there is an error */\n  hasError: PropTypes.bool,\n  /** Title of the range filter */\n  title: PropTypes.string.isRequired,\n  /** Subtitle of the range filter */\n  subtitle: PropTypes.string.isRequired,\n  /** Function to call when the range changes */\n  onChange: PropTypes.func.isRequired,\n  /** Function to call when the values are invalid */\n  onError: PropTypes.func.isRequired,\n  /** Disable the form */\n  disabled: PropTypes.bool,\n  /** Function called when going back to the filters list */\n  onCloseFilter: PropTypes.func,\n  /** Function called when the filter is removed */\n  onRemoveFilter: PropTypes.func,\n  /** Indicate if the trash icon is visible */\n  isTrashIconVisible: PropTypes.bool,\n  /** Map of unit-key to label shown in the unit selector. Defaults to TIME_UNITS_LABEL. Pass an empty object to hide the selector. */\n  units: PropTypes.objectOf(PropTypes.string)\n};\n\nexport default RangeFiltersForm;\n","import { useSelector } from 'react-redux';\nimport { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { selectIsUserReadOnly } from '../../../store/selectors/analytics';\nimport { durationBasedFilters } from '../../../utils/prop-types.util';\nimport RangeFiltersForm from './RangeFiltersForm/RangeFiltersForm';\n\n/*\n * The Range filter. This component display and send changes for ranges.\n */\nconst RangeFilter = ({ range, setCurrentFilterValue, ...props }) => {\n  const isUserReadOnly = useSelector(selectIsUserReadOnly);\n  const [currentRange, setCurrentRange] = useState(range);\n  const [hasError, setHasError] = useState(false);\n\n  useEffect(() => {\n    setCurrentRange(range);\n  }, [range]);\n\n  useEffect(() => {\n    setCurrentFilterValue(currentRange);\n  }, [currentRange, setCurrentFilterValue]);\n\n  return (\n    <RangeFiltersForm\n      {...props}\n      disabled={isUserReadOnly}\n      range={currentRange}\n      hasError={hasError}\n      onChange={setCurrentRange}\n      onError={setHasError}\n    />\n  );\n};\n\nRangeFilter.propTypes = {\n  /**\n   * Default range value\n   */\n  range: durationBasedFilters.isRequired,\n  /** Function called when going back to the filters list */\n  onCloseFilter: PropTypes.func,\n  /** Function called to define the filter value to apply */\n  setCurrentFilterValue: PropTypes.func\n};\n\nexport default RangeFilter;\n",".textWithOptionsFilter {\n  display: flex;\n  flex-direction: column;\n  gap: var(--goto-spacing-02);\n  min-width: 300px;\n}\n\n.textWithOptionsFilter__listbox {\n  list-style-type: none; // Remove the bullet points\n  padding: 0; // Remove default padding\n  max-height: 150px;\n  overflow-y: auto;\n}\n\n.textWithOptionsFilter__removeIcon {\n  margin-left: auto;\n  margin-right: -5px;\n\n  chameleon-svg {\n    --goto-icon-color: var(--goto-icon-color-danger);\n  }\n}\n\n.textWithOptionsFilter__listboxItemInternal {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  height: 30px;\n  padding: var(--goto-spacing-03);\n}\n\n.textWithOptionsFilter__skeletonLoading {\n  padding-top: var(--goto-spacing-05);\n}\n\n.textWithOptionsFilter__listboxItemInternal:hover {\n  background-color: var(--goto-interactive-color-secondary-hover);\n}\n\n.textWithOptionsFilter__titleAndSubtext {\n  display: flex;\n  align-items: center;\n}\n\n.textWithOptionsFilter__title {\n  &::part(control) {\n    padding: 0;\n  }\n}\n\n.textWithOptionsFilter__textField {\n  padding-top: var(--goto-spacing-02);\n}\n\n.textWithOptionsFilter__back {\n  &::part(control) {\n    display: flex;\n    font-size: 1rem;\n    align-self: flex-start;\n    flex-wrap: nowrap;\n    padding: 0;\n    margin: 0;\n    justify-content: flex-start;\n    align-items: center;\n  }\n\n  &::part(content) {\n    display: flex;\n    justify-content: center;\n    align-items: center;\n  }\n\n  chameleon-svg {\n    display: inline-block;\n    padding-top: var(--goto-spacing-01);\n  }\n}\n\n.textWithOptionsFilter__header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n\n  &_actions {\n    justify-content: space-between;\n  }\n\n  > span {\n    display: flex;\n    align-items: center;\n    margin-left: -10px;\n  }\n}\n\n.textWithOptionsFilter__hint {\n  width: 300px;\n}\n\n.textWithOptionsFilter__button_hidden {\n  display: none;\n}\n","export const INPUT_TYPES = {\n  INSERT_FROM_PASTE: 'insertFromPaste'\n};\n","import { useTranslation } from 'react-i18next';\nimport { PhoneNumberOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { TextField } from '@getgo/chameleon-web-react-wrapper';\nimport { useMemo, useEffect } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { INPUT_TYPES } from '../../../constants/input-type';\nimport { NON_NUMBERS, ONLY_NUMBERS_WITH_PLUS } from '../../../constants/validation';\n\nexport const PhoneNumberTextInput = ({ value, setIsValid, onChange, textFieldPlaceholder, ...rest } = {}) => {\n  const { t } = useTranslation();\n  const isValid = useMemo(() => !value || ONLY_NUMBERS_WITH_PLUS.test(value), [value]);\n\n  useEffect(() => {\n    setIsValid(isValid);\n  }, [isValid, setIsValid]);\n\n  return (\n    <TextField\n      value={value}\n      error={!isValid}\n      helperText={!isValid && t('Only numbers are allowed')}\n      fullwidth\n      placeholder={textFieldPlaceholder}\n      onChange={e => {\n        const inputValue =\n          e.nativeEvent.inputType === INPUT_TYPES.INSERT_FROM_PASTE\n            ? e.target.value.replace(NON_NUMBERS, '')\n            : e.target.value;\n        onChange(inputValue);\n      }}\n      leadingIcon={<PhoneNumberOutlinedIcon />}\n      hideCounter\n      autocomplete=\"off\"\n      {...rest}\n    />\n  );\n};\n\nPhoneNumberTextInput.propTypes = {\n  /** String that represents the text field value */\n  value: PropTypes.string.isRequired,\n  /** Function to call when the text field value changes */\n  onChange: PropTypes.func.isRequired,\n  /** Define the validity of the user text */\n  setIsValid: PropTypes.func.isRequired,\n  /** Text field placeholder */\n  textFieldPlaceholder: PropTypes.string.isRequired\n};\n","import { useTranslation } from 'react-i18next';\nimport { PersonInactiveIcon } from '@getgo/chameleon-icons/react';\nimport { TextField } from '@getgo/chameleon-web-react-wrapper';\nimport { useEffect } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { useFilterInputValidation } from '../../../hooks/useFilterInputValidation.ts';\n\nexport const UserNameTextField = ({\n  value,\n  trimSpaces,\n  setIsValid,\n  onChange,\n  leadingIcon,\n  textFieldPlaceholder,\n  ...rest\n} = {}) => {\n  const { t } = useTranslation();\n  const { isValid, errorMessage } = useFilterInputValidation(value);\n\n  const getIcon = leadingIcon => {\n    const Icon = leadingIcon;\n    return leadingIcon ? <Icon /> : <PersonInactiveIcon />;\n  };\n  useEffect(() => {\n    setIsValid(isValid);\n  }, [isValid, setIsValid]);\n\n  return (\n    <TextField\n      value={value}\n      error={!!errorMessage}\n      helperText={errorMessage}\n      fullwidth\n      placeholder={textFieldPlaceholder ?? t('Type a user name')}\n      maxLength={60}\n      hideCounter\n      onChange={e => {\n        const inputValue = trimSpaces ? e.target.value.replace(/\\s/g, '') : e.target.value;\n        onChange(inputValue);\n      }}\n      leadingIcon={getIcon(leadingIcon)}\n      {...rest}\n    />\n  );\n};\n\nUserNameTextField.propTypes = {\n  /** String that represents the text field value */\n  value: PropTypes.string.isRequired,\n  /** Function to call when the text field value changes */\n  onChange: PropTypes.func.isRequired,\n  /** Define the validity of the user text */\n  setIsValid: PropTypes.func.isRequired,\n  /** Trim spaces from the input value */\n  trimSpaces: PropTypes.bool,\n  /** Placeholder for the text field */\n  textFieldPlaceholder: PropTypes.string,\n  /** Icon to display at the start of the text field */\n  leadingIcon: PropTypes.node\n};\n","import React, { useEffect, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { MIXPANEL_EVENT_NAME } from '../../constants/mixpanel';\nimport useFetch from '../../hooks/useFetch';\nimport useMixpanel from '../../hooks/useMixpanel';\nimport { parseFiltersToDataSource, parseQueryToFiltersV2 } from '../../services/common/filters.service';\nimport { selectCurrentDashboard, selectCurrentOrganizationId } from '../../store/selectors/analytics';\nimport { getDefaultEndTime } from '../../store/selectors/default-date';\nimport { selectFiltersQuery } from '../../store/selectors/filtersV2';\n\ninterface SuggestionOptions {\n  enabled?: boolean;\n  fetchThreshold?: number;\n  fetchService?: (\n    organizationId: string,\n    dashboardId: string,\n    dateRange: unknown[][],\n    itemKey: string,\n    filterConfig: FilterDefinition,\n    controller: AbortController\n  ) => Promise<unknown[]>;\n}\n\ninterface TextOptions {\n  suggestions?: SuggestionOptions;\n  isValidOption?: (value: string) => boolean;\n}\n\ninterface FilterDefinition {\n  label: string;\n  textOptions: TextOptions;\n}\n\nexport interface WithSuggestionChildrenProps {\n  suggestions: unknown[];\n  fetchedSuggestionsCache: Record<string, unknown[]>;\n  loading: boolean;\n}\n\ninterface WithSuggestionProps {\n  itemKey: string | null;\n  filterConfig: FilterDefinition;\n  children: (props: WithSuggestionChildrenProps) => React.ReactNode;\n}\n\nconst WithSuggestion = ({ itemKey, filterConfig, children }: WithSuggestionProps) => {\n  const [suggestions, setSuggestions] = useState<unknown[]>([]);\n  const [fetchedSuggestionsCache, setFetchedSuggestionsCache] = useState<Record<string, unknown[]>>({});\n  const [loading, setLoading] = useState(true);\n  const [fetchDelay, setFetchDelay] = useState<ReturnType<typeof setTimeout> | null>(null);\n\n  const organizationId = useSelector(selectCurrentOrganizationId);\n  const currentDashboard = useSelector(selectCurrentDashboard);\n  const filtersQuery = useSelector(selectFiltersQuery);\n  const endOfTodayTime = useSelector(getDefaultEndTime);\n  const mixpanelTrack = useMixpanel();\n\n  if (!filterConfig.textOptions.suggestions?.enabled) {\n    return children({ suggestions: [], fetchedSuggestionsCache: {}, loading: false });\n  }\n\n  const shouldFetchSuggestions = () =>\n    (itemKey?.length ?? 0) >= (filterConfig.textOptions.suggestions?.fetchThreshold || 1) &&\n    (filterConfig.textOptions.isValidOption?.(itemKey!) ?? true) &&\n    !!filterConfig.textOptions.suggestions?.fetchService &&\n    !fetchedSuggestionsCache[itemKey!];\n\n  // TODO remove conditional hook\n   \n  const [, requestError] = useFetch(\n    async controller => {\n      if (fetchDelay) {\n        clearTimeout(fetchDelay);\n        setFetchDelay(null);\n      }\n\n      if (fetchedSuggestionsCache[itemKey!]) {\n        setSuggestions(fetchedSuggestionsCache[itemKey!]);\n      } else {\n        setSuggestions([]);\n\n        if (shouldFetchSuggestions()) {\n          setFetchDelay(\n            setTimeout(() => {\n              void (async () => {\n                setLoading(true);\n                setTimeout(() => controller.abort(), 5000);\n                const parsedSource = parseFiltersToDataSource(\n                  parseQueryToFiltersV2(filtersQuery, endOfTodayTime, currentDashboard?.type)?.items || []\n                ) as Record<string, { filterValues?: Array<{ values: unknown[] }> } | undefined>;\n                const dateRange: unknown[][] = parsedSource.date?.filterValues?.map(el => el.values) ?? [];\n                const fetchedSuggestions = await filterConfig.textOptions.suggestions!.fetchService!(\n                  organizationId as string,\n                  currentDashboard!.id,\n                  dateRange,\n                  itemKey!,\n                  filterConfig,\n                  controller\n                );\n\n                const eventData = {\n                  Action: 'Search suggestions',\n                  Filter: filterConfig.label,\n                  NumberOfSuggestions: fetchedSuggestions.length\n                };\n                void mixpanelTrack(MIXPANEL_EVENT_NAME.SEARCH_SUGGESTIONS, eventData);\n\n                setFetchedSuggestionsCache({ ...fetchedSuggestionsCache, [itemKey!]: fetchedSuggestions });\n                setLoading(false);\n              })();\n            }, 500)\n          );\n        } else {\n          setLoading(false);\n        }\n      }\n    },\n    [itemKey, fetchedSuggestionsCache]\n  );\n\n  // TODO remove conditional hook\n   \n  useEffect(() => {\n    if (requestError) {\n      setSuggestions([]);\n      setLoading(false);\n    }\n  }, [requestError]);\n\n  return children({ suggestions, fetchedSuggestionsCache, loading });\n};\n\nexport default WithSuggestion;\n","import clsx from 'clsx';\nimport { range as _range } from 'lodash';\nimport { useTranslation } from 'react-i18next';\nimport PropTypes from 'prop-types';\nimport { AddCircleFilledIcon, ChevronLeftOutlinedIcon, TrashOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { Typography, IconButton, Button, Checkbox, Alert, Switch, Skeleton } from '@getgo/chameleon-web-react-wrapper';\nimport { useCallback, useMemo, useState } from 'react';\nimport FilterListSkeleton from '../FilterListSkeleton/FilterListSkeleton';\nimport { filterElementPropType, filterConfigPropType } from '../../../utils/prop-types.util';\nimport styles from './TextWithOptionsFilter.module.scss';\nimport { TooltipWrapper } from '@analytics-common-ui/layout';\nimport { TEXT_FORMAT } from '../../../constants/filters-definitions';\nimport { PhoneNumberTextInput } from '../PhoneNumberTextField/PhoneNumberTextField';\nimport { useTextWithOptions } from '../../../hooks/useTextWithOptions';\nimport { UserNameTextField } from '../UserNameTextField/UserNameTextField';\nimport WithSuggestion from '../../../hocs/withSuggestion/withSuggestion';\n\nconst TextWithOptionsFilter = ({\n  isFilterLoaded = false,\n  currentFilter = [],\n  filterConfig,\n  onCloseFilter,\n  onRemoveFilter,\n  setCurrentFilterValue,\n  isTrashIconVisible\n}) => {\n  const [showSelectedOnly, setShowSelectedOnly] = useState(false);\n  const { t } = useTranslation();\n  const {\n    addNewOption,\n    hoveredOption,\n    onEnter,\n    removeOption,\n    setHoveredOption,\n    setTextValue,\n    textValue,\n    updateOption,\n    options\n  } = useTextWithOptions(filterConfig.textOptions, currentFilter, setCurrentFilterValue, filterConfig.label);\n  const [isValid, setIsValid] = useState(true);\n\n  const textOptions = filterConfig.textOptions;\n\n  const isAddButtonVisible = textValue.length > 0 && isValid;\n  const shouldHideIrrelevantOptionsOnSearch = textValue && textOptions.suggestions?.hideIrrelevantOptionsOnSearch;\n\n  const handleSuggestions = suggestions => {\n    const displaySuggestions = suggestions.map(suggestion => {\n      const suggestionId = textOptions.optionIdFormatter ? textOptions.optionIdFormatter(suggestion) : suggestion;\n      const selected = options.find(op => op.id === suggestionId && op.selected);\n\n      return { id: suggestionId, label: suggestion, name: suggestion, selected };\n    });\n\n    return [...displaySuggestions].sort((a, b) => a.id.localeCompare(b.id));\n  };\n\n  const getDisplayedOptions = suggestions => {\n    if (suggestions.length > 0) {\n      return handleSuggestions(suggestions);\n    }\n\n    return shouldHideIrrelevantOptionsOnSearch\n      ? [...(options || [])].filter(op => op.label.includes(textValue)).sort((a, b) => a.id.localeCompare(b.id))\n      : [...(options || [])].sort((a, b) => a.id.localeCompare(b.id));\n  };\n\n  const AddOptionButton = useCallback(\n    () => (\n      <IconButton\n        onClick={addNewOption}\n        className={clsx({ [styles.textWithOptionsFilter__button_hidden]: !isAddButtonVisible })}\n        label={t('Add', { context: 'add a value from an input' })}>\n        <AddCircleFilledIcon size=\"17px\" />\n      </IconButton>\n    ),\n    [addNewOption, isAddButtonVisible, t]\n  );\n\n  const selectedCount = useMemo(() => options.filter(op => op.selected).length, [options]);\n\n  const textFieldWithConfig = useCallback(() => {\n    switch (textOptions.format) {\n      case TEXT_FORMAT.PHONE:\n        return (\n          <PhoneNumberTextInput\n            trailingIcon={AddOptionButton()}\n            fullwidth\n            setIsValid={setIsValid}\n            onKeyDown={onEnter}\n            value={textValue}\n            isValid={isValid}\n            onChange={val => setTextValue(val)}\n            maxLength={textOptions.maxLength}\n            textFieldPlaceholder={t(textOptions.translations.textFilterPlaceholder)}\n          />\n        );\n      case TEXT_FORMAT.NAME:\n      default:\n        return (\n          <UserNameTextField\n            trailingIcon={AddOptionButton()}\n            leadingIcon={textOptions.leadingIcon}\n            setIsValid={setIsValid}\n            fullwidth\n            textFieldPlaceholder={textOptions.translations.textFilterPlaceholder}\n            onKeyDown={onEnter}\n            value={textValue}\n            selectedCount={selectedCount}\n            onChange={val => setTextValue(val)}\n            maxLength={textOptions.maxLength}\n            trimSpaces={textOptions.trimSpaces}\n          />\n        );\n    }\n  }, [\n    textOptions.format,\n    textOptions.maxLength,\n    textOptions.translations.textFilterPlaceholder,\n    textOptions.leadingIcon,\n    textOptions.trimSpaces,\n    AddOptionButton,\n    onEnter,\n    textValue,\n    isValid,\n    t,\n    selectedCount,\n    setTextValue\n  ]);\n\n  const getFilterHint = fetchedSuggestionsCache => {\n    if (\n      textOptions.translations.filterNoFoundHint &&\n      textOptions.shouldShowNoFoundHint?.(textValue, fetchedSuggestionsCache)\n    ) {\n      return (\n        <Alert className={styles.textWithOptionsFilter__hint}>{t(textOptions.translations.filterNoFoundHint)}</Alert>\n      );\n    }\n\n    if (\n      textOptions.translations.filterAlternativeHint &&\n      textOptions.shouldShowAlternativeHint?.(textValue, fetchedSuggestionsCache)\n    ) {\n      return (\n        <Alert className={styles.textWithOptionsFilter__hint}>\n          {t(textOptions.translations.filterAlternativeHint)}\n        </Alert>\n      );\n    }\n\n    if (textOptions.translations.filterHint && textOptions?.shouldShowFilterHint?.(textValue)) {\n      return <Alert className={styles.textWithOptionsFilter__hint}>{t(textOptions.translations.filterHint)}</Alert>;\n    }\n\n    return null;\n  };\n\n  const getLoadingSkeleton = () => (\n    <div className={styles.textWithOptionsFilter__skeletonLoading}>\n      {_range(3).map(index => (\n        <Skeleton key={index} variant=\"rectangle\" />\n      ))}\n    </div>\n  );\n\n  const getDisplayOption = option => (\n    <li\n      key={option.label}\n      className={styles.textWithOptionsFilter__listboxItemInternal}\n      onMouseEnter={() => setHoveredOption(option.id)}\n      onMouseOver={() => setHoveredOption(option.id)}\n      onFocus={() => setHoveredOption(option.id)}\n      onMouseLeave={() => setHoveredOption()}>\n      <div className={styles.textWithOptionsFilter__titleAndSubtext}>\n        <Checkbox\n          data-testid={`checkbox-${option.id}`}\n          disabled={!option.selected && textOptions.maxItems && selectedCount >= textOptions.maxItems}\n          checked={option.selected}\n          onClick={e => {\n            e.stopPropagation();\n\n            updateOption(option.id, { ...option, selected: !option.selected });\n          }}>\n          {option.label}\n        </Checkbox>\n      </div>\n      <div>\n        {hoveredOption === option.id &&\n          ((filterConfig?.disableRemoveOnTextSearch && !textValue) || !filterConfig?.disableRemoveOnTextSearch) && (\n            <IconButton\n              label={t('Remove option')}\n              onClick={e => {\n                e.stopPropagation();\n                removeOption(option.id);\n              }}\n              size=\"small\"\n              data-testid=\"trash-icon\"\n              className={styles.textWithOptionsFilter__removeIcon}\n              variant=\"primary\">\n              <TrashOutlinedIcon />\n            </IconButton>\n          )}\n      </div>\n    </li>\n  );\n\n  return (\n    <div>\n      {!isFilterLoaded ? (\n        <FilterListSkeleton\n          showStartAdornment\n          announceLoading={t(textOptions.translations.filterLoading)}\n          announceLoaded={t(textOptions.translations.filterLoaded)}\n        />\n      ) : (\n        <div className={styles.textWithOptionsFilter}>\n          <div className={clsx(styles.textWithOptionsFilter__header, styles.textWithOptionsFilter__header_actions)}>\n            <span>\n              <TooltipWrapper placement=\"bottom\" title={t('Back')}>\n                <IconButton\n                  label={t('Back')}\n                  onClick={onCloseFilter}\n                  size=\"small\"\n                  variant=\"primary\"\n                  className={styles.TextWithOptionsFilter__back}>\n                  <ChevronLeftOutlinedIcon size=\"20px\" />\n                </IconButton>\n              </TooltipWrapper>\n              <Button onClick={onCloseFilter} variant=\"tertiary\" className={styles.textWithOptionsFilter__title}>\n                <Typography variant=\"heading-small\" color=\"textPrimary\" role=\"group\">\n                  {t(filterConfig?.name)}\n                </Typography>\n              </Button>\n            </span>\n            {isTrashIconVisible && (\n              <TooltipWrapper placement=\"bottom\" title={t('Remove filter')}>\n                <IconButton\n                  label={t('Remove filter')}\n                  onClick={onRemoveFilter}\n                  role=\"button\"\n                  className={styles.textWithOptionsFilter__removeIcon}\n                  size=\"small\"\n                  variant=\"primary\">\n                  <TrashOutlinedIcon />\n                </IconButton>\n              </TooltipWrapper>\n            )}\n          </div>\n          <div className={styles.textWithOptionsFilter__textField}>{textFieldWithConfig()}</div>\n          {filterConfig.textOptions?.maxItems && (\n            <Typography variant=\"caption-medium\" color=\"type-color-secondary\">\n              {t(textOptions.translations.itemsLeft, {\n                numberOfSelectedParticipants: textOptions.maxItems - selectedCount,\n                limitOfSelectedParticipants: textOptions.maxItems\n              })}\n            </Typography>\n          )}\n          <WithSuggestion itemKey={textValue} filterConfig={filterConfig}>\n            {({ suggestions, fetchedSuggestionsCache, loading }) => {\n              const displayedOptions = getDisplayedOptions(suggestions);\n\n              return (\n                <>\n                  {loading\n                    ? getLoadingSkeleton()\n                    : displayedOptions.length === 0 &&\n                      (!textValue || textOptions.isValidOption(textValue)) &&\n                      getFilterHint(fetchedSuggestionsCache)}\n                  {!loading && displayedOptions.length > 0 && (\n                    <ul className={styles.textWithOptionsFilter__listbox}>\n                      {displayedOptions\n                        .map(option =>\n                          !showSelectedOnly || (showSelectedOnly && option.selected) ? getDisplayOption(option) : null\n                        )\n                        .filter(Boolean)}\n                    </ul>\n                  )}\n                  <Switch\n                    checked={showSelectedOnly}\n                    disabled={displayedOptions.length <= 1}\n                    onChange={() => {\n                      setShowSelectedOnly(!showSelectedOnly);\n                    }}\n                    aria-label={t('Show selected only')}>\n                    {t('Show selected only')}\n                  </Switch>\n                </>\n              );\n            }}\n          </WithSuggestion>\n          <div>\n            {textOptions.maxItems && selectedCount >= textOptions.maxItems && (\n              <Alert variant=\"warning\">{t(textOptions.translations.maxItemsReached)}</Alert>\n            )}\n          </div>\n        </div>\n      )}\n    </div>\n  );\n};\n\nTextWithOptionsFilter.propTypes = {\n  /** The current filter items */\n  currentFilter: filterElementPropType,\n  /** Filter is ready to be displayed */\n  isFilterLoaded: PropTypes.bool,\n  /** The filter configuration */\n  filterConfig: filterConfigPropType,\n  /** Function called when going back to the filters list */\n  onCloseFilter: PropTypes.func,\n  /** Function called to define the filter value to apply */\n  setCurrentFilterValue: PropTypes.func,\n  /** Function called when the filter is removed */\n  onRemoveFilter: PropTypes.func,\n  /** Indicate if the trash icon is visible */\n  isTrashIconVisible: PropTypes.bool\n};\n\nexport default TextWithOptionsFilter;\n",".switchFilter {\n  display: flex;\n  flex-direction: column;\n  gap: var(--goto-spacing-02);\n  min-width: 300px;\n}\n\n.switchFilter__title {\n  &::part(control) {\n    padding: 0;\n  }\n}\n\n.switchFilter__addIcon {\n  padding: var(--goto-spacing-02);\n}\n\n.switchFilter__back {\n  &::part(control) {\n    display: flex;\n    font-size: 1rem;\n    align-self: flex-start;\n    flex-wrap: nowrap;\n    padding: 0;\n    margin: 0;\n    justify-content: flex-start;\n    align-items: center;\n  }\n\n  &::part(content) {\n    display: flex;\n    justify-content: center;\n    align-items: center;\n  }\n\n  chameleon-svg {\n    display: inline-block;\n    padding-top: 1px;\n  }\n}\n\n.switchFilter__header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n\n  &_actions {\n    justify-content: space-between;\n  }\n\n  > span {\n    display: flex;\n    align-items: center;\n    margin-left: -10px;\n  }\n}\n\n.switchFilter__removeIcon {\n  margin-right: -5px;\n\n  chameleon-svg {\n    --goto-icon-color: var(--goto-icon-color-danger);\n  }\n}\n\n.switchFilter__switch {\n  padding-top: var(--goto-spacing-02)\n}\n","import { useSelector } from 'react-redux';\nimport { Button, IconButton, Switch, Typography } from '@getgo/chameleon-web-react-wrapper';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { ChevronLeftOutlinedIcon, TrashOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { useTranslation } from 'react-i18next';\nimport { selectIsUserReadOnly } from '../../../store/selectors/analytics';\nimport { TooltipWrapper } from '@analytics-common-ui/layout';\nimport { filterElementPropType } from '../../../utils/prop-types.util';\nimport styles from './SwitchFilter.module.scss';\nimport { useEffect } from 'react';\n\n/*\n * Switch filter. This component display and send changes for switches.\n */\nconst SwitchFilter = ({\n  label,\n  setCurrentFilterValue,\n  items,\n  title,\n  isTrashIconVisible,\n  onCloseFilter,\n  onRemoveFilter\n}) => {\n  const { t } = useTranslation();\n  const isUserReadOnly = useSelector(selectIsUserReadOnly);\n\n  const handleSwitchChange = e => {\n    setCurrentFilterValue(\n      items.map(currentElement => ({\n        ...currentElement,\n        selected: currentElement.id === e.target.checked.toString()\n      }))\n    );\n  };\n\n  useEffect(() => {\n    setCurrentFilterValue(items);\n  }, [items, setCurrentFilterValue]);\n\n  return (\n    <div className={styles.switchFilter}>\n      <div className={clsx(styles.switchFilter__header, styles.switchFilter__header_actions)}>\n        <span>\n          <TooltipWrapper placement=\"bottom\" title={t('Back')}>\n            <IconButton\n              label={t('Back')}\n              onClick={onCloseFilter}\n              size=\"small\"\n              variant=\"primary\"\n              className={styles.switchFilter__back}>\n              <ChevronLeftOutlinedIcon size=\"20px\" />\n            </IconButton>\n          </TooltipWrapper>\n          <Button onClick={onCloseFilter} variant=\"tertiary\" className={styles.switchFilter__title}>\n            <Typography variant=\"heading-small\" color=\"textPrimary\" role=\"group\">\n              {t(title)}\n            </Typography>\n          </Button>\n        </span>\n        {isTrashIconVisible && (\n          <TooltipWrapper placement=\"bottom\" title={t('Remove filter')}>\n            <IconButton\n              label={t('Remove filter')}\n              onClick={onRemoveFilter}\n              role=\"button\"\n              className={styles.switchFilter__removeIcon}\n              size=\"small\"\n              variant=\"primary\">\n              <TrashOutlinedIcon />\n            </IconButton>\n          </TooltipWrapper>\n        )}\n      </div>\n      <Switch\n        className={styles.switchFilter__switch}\n        readOnly={isUserReadOnly}\n        checked={items.find(el => el.selected)?.id === 'true'}\n        onChange={handleSwitchChange}>\n        {t(label)}\n      </Switch>\n    </div>\n  );\n};\n\nSwitchFilter.propTypes = {\n  /** The current filter items */\n  items: filterElementPropType,\n  /** Function called to define the filter value to apply */\n  setCurrentFilterValue: PropTypes.func,\n  /** The filter object */\n  currentFilters: PropTypes.shape({\n    convertOutcomes: PropTypes.bool\n  }),\n  /** Function called when going back to the filters list */\n  onCloseFilter: PropTypes.func,\n  /** Function called when the filter is removed */\n  onRemoveFilter: PropTypes.func,\n  /** Indicate if the trash icon is visible */\n  isTrashIconVisible: PropTypes.bool,\n  /** Title of the filter */\n  title: PropTypes.string,\n  /** The switch label */\n  label: PropTypes.string\n};\n\nexport default SwitchFilter;\n","import { uniqBy as _uniqBy } from 'lodash';\nimport { useSelector } from 'react-redux';\nimport { Menu, MenuItem, Typography } from '@getgo/chameleon-web-react-wrapper';\nimport { ChevronRightOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport ListFilter from '../ListFilter/ListFilter';\nimport { availableFiltersPropType } from '../../../utils/prop-types.util';\nimport { FILTER_TYPES } from '../../../constants/filters-definitions';\nimport styles from './FiltersList.module.scss';\nimport RangeFilter from '../RangeFilter/RangeFilter';\nimport { selectAnalyticsFilters, selectFiltersQuery, selectQueriedDateRange } from '../../../store/selectors/filtersV2';\nimport {\n  selectCurrentDashboard,\n  selectFeatureFlag,\n  selectCurrentOrganization\n} from '../../../store/selectors/analytics';\nimport TextWithOptionsFilter from '../TextWithOptionsFilter/TextWithOptionsFilter';\nimport { getPageIdFromDashboardType } from '../../../utils/page.util.ts';\nimport configs from '../../../configs';\nimport SwitchFilter from '../SwitchFilter/SwitchFilter';\nimport { useMemo, useCallback } from 'react';\nimport { useAccessCheck } from '../../../hooks/permissions/useAccessCheck.ts';\nimport { getFilterConfigOverrides, isFilterVisible } from '../../../utils/filters.util';\nimport { handleServerSideSearch } from '../../../utils/server-list-filters.util.tsx';\n\nconst FiltersList = ({\n  availableFilters,\n  currentFilterId,\n  currentFilterValue,\n  currentFilterLabel,\n  handleFilterClick,\n  operators,\n  onValidate,\n  validationError,\n  ...filtersProps\n}) => {\n  const filters = useSelector(selectAnalyticsFilters);\n  const filtersQuery = useSelector(selectFiltersQuery);\n  const currentDashboard = useSelector(selectCurrentDashboard);\n  const currentOrganization = useSelector(selectCurrentOrganization);\n  const { startTime, endTime } = useSelector(selectQueriedDateRange);\n  const canAccess = useAccessCheck();\n  const featureFlagSelector = useSelector(selectFeatureFlag);\n  const { t } = useTranslation();\n  const dashboardConfig = useMemo(\n    () => configs[getPageIdFromDashboardType(currentDashboard?.type)],\n    [currentDashboard?.type]\n  );\n\n  const FILTER_CONFIG = useMemo(() => getFilterConfigOverrides(dashboardConfig), [dashboardConfig]);\n\n  const handleSearchChange = useCallback(\n    async (filterId, searchTerm) => {\n      if (!currentOrganization?.id) {\n        return [];\n      }\n      return handleServerSideSearch(filterId, currentOrganization.id, searchTerm, false, undefined, startTime, endTime);\n    },\n    [currentOrganization, startTime, endTime]\n  );\n\n  const isMenuFilterDisabled = filterMenu =>\n    operators.length === 1 && !!filtersQuery.find(el => currentFilterId !== el.id && el.filter === filterMenu);\n\n  const isFilterCategoryDisabled = category => {\n    const filters = Object.entries(FILTER_CONFIG)\n      .filter(([, value]) => value.category?.label === category)\n      .map(([, value]) => value);\n\n    return filters.every(f => isMenuFilterDisabled(f.label));\n  };\n\n  const handleItemClick = (e, filterLabel, filterCategory = null) => {\n    e.preventDefault();\n    handleFilterClick(filterLabel, filterCategory);\n  };\n\n  const getAvailableFilters = () => {\n    return _uniqBy(\n      availableFilters.order\n        .map(el => FILTER_CONFIG[el])\n        .filter(el => isFilterVisible(el, canAccess, featureFlagSelector))\n        .map(el => ({\n          ...el,\n          ...(!el.category\n            ? { category: { label: el.id, isValid: false } }\n            : { category: { label: el.category.label, isValid: true } })\n        })),\n      'category.label'\n    ).map(filter => {\n      const { category } = filter;\n\n      if (category.isValid) {\n        return (\n          <MenuItem\n            disabled={isFilterCategoryDisabled(category.label)}\n            className={styles.filtersList__menuItem}\n            onClick={e => handleItemClick(e, null, category)}\n            key={category.label}\n            trailingIcon={<ChevronRightOutlinedIcon />}\n            category={category}>\n            {t(category.label)}\n          </MenuItem>\n        );\n      }\n\n      return (\n        <MenuItem\n          disabled={isMenuFilterDisabled(filter.label)}\n          className={styles.filtersList__menuItem}\n          onClick={e => handleItemClick(e, filter.label)}\n          key={filter.label}\n          trailingIcon={<ChevronRightOutlinedIcon />}\n          category={category}>\n          {t(filter.name)}\n        </MenuItem>\n      );\n    });\n  };\n\n  const getFilterFromLabel = filterLabel => {\n    const filter = FILTER_CONFIG[filterLabel];\n    switch (filter.type) {\n      case FILTER_TYPES.TEXT:\n        return (\n          <TextWithOptionsFilter\n            filterConfig={filter}\n            title={filter.name}\n            currentFilter={currentFilterValue?.[filterLabel] || filters[filterLabel]}\n            {...filtersProps}\n          />\n        );\n      case FILTER_TYPES.LIST: {\n        const filterValues = currentFilterValue?.[filterLabel] || filters[filterLabel];\n        const listFilterProps = {\n          currentFilters: currentDashboard.filters,\n          items: filter?.listOptions?.translateItems\n            ? filterValues.map(x => ({\n                ...x,\n                label: t(x.label, x.translationContext ? { context: x.translationContext } : undefined)\n              }))\n            : filterValues,\n          filterConfig: filter,\n          ...filtersProps\n        };\n\n        return <ListFilter {...listFilterProps} />;\n      }\n      case FILTER_TYPES.SERVER_LIST: {\n        const filterValues = currentFilterValue?.[filterLabel] ?? filters[filterLabel] ?? [];\n\n        const listFilterProps = {\n          currentFilters: currentDashboard.filters,\n          items: filterValues,\n          filterConfig: filter,\n          filterType: FILTER_TYPES.SERVER_LIST,\n          onSearchChange: searchTerm => handleSearchChange(filterLabel, searchTerm),\n          onValidate: onValidate ? selectedIds => onValidate(selectedIds, filterLabel) : undefined,\n          validationError,\n          ...filtersProps\n        };\n\n        return <ListFilter {...listFilterProps} />;\n      }\n      case FILTER_TYPES.RANGE:\n        return (\n          <RangeFilter\n            range={currentFilterValue?.[filterLabel] || filters[filterLabel]}\n            filterConfig={filter}\n            title={filter.name}\n            subtitle={filter.durationOptions.subtitle}\n            units={filter.durationOptions.units}\n            {...filtersProps}\n          />\n        );\n      case FILTER_TYPES.SWITCH:\n        return (\n          <SwitchFilter\n            label={filter.switchOptions.label}\n            items={currentFilterValue?.[filterLabel] ?? filter.switchOptions.defaultItems}\n            title={filter.name}\n            {...filtersProps}\n          />\n        );\n\n      default:\n        throw new Error('Filter type is not known');\n    }\n  };\n\n  return (\n    <div className={styles.filtersList}>\n      {!currentFilterLabel ? (\n        <div>\n          <Typography variant=\"heading-small\" id=\"filter-list-header\">\n            {t(dashboardConfig?.filterHeader ?? 'Datasource', {\n              context: 'title of the filters list'\n            })}\n          </Typography>\n          <Menu className={styles.filtersList__menu} aria-labelledby=\"filter-list-header\">\n            {getAvailableFilters()}\n          </Menu>\n        </div>\n      ) : (\n        getFilterFromLabel(currentFilterLabel)\n      )}\n    </div>\n  );\n};\n\nFiltersList.propTypes = {\n  /** The list of available filters */\n  availableFilters: availableFiltersPropType,\n  /* The filter ID to edit */\n  currentFilterId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /** The function on filter click */\n  handleFilterClick: PropTypes.func,\n  /** The current displayed filter label */\n  currentFilterLabel: PropTypes.string,\n  /* The current filter value to edit (can be anything (object, array, ...)) */\n  // eslint-disable-next-line react/forbid-prop-types\n  currentFilterValue: PropTypes.any,\n  /* The operators available for a dashboard */\n  operators: PropTypes.arrayOf(PropTypes.string),\n  /** Validation callback function passed from parent */\n  onValidate: PropTypes.func,\n  /** Validation error message from parent component */\n  validationError: PropTypes.oneOfType([PropTypes.string, PropTypes.oneOf([null])])\n};\n\nexport default FiltersList;\n","chameleon-popover-content[large] {\n  padding: 0;\n}\n\n.baseFilter__label {\n  align-items: center;\n  display: inline-flex;\n  justify-content: space-between;\n  width: 100%;\n\n  chameleon-svg {\n    --goto-icon-size: 15px;\n\n    margin-left: var(--goto-spacing-02);\n  }\n\n  span {\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n}\n\n.baseFilter__chip {\n  border-width: 2px;\n  max-width: 410px;\n\n  --goto-icon-color: var(--goto-surface-color-inverted);\n\n  &:hover {\n    background-color: var(--goto-interactive-color-neutral-hover);\n    cursor: pointer;\n  }\n\n  &_disabled {\n    --goto-icon-color: var(--goto-icon-color-disabled);\n\n    cursor: not-allowed !important;\n  }\n\n  &:not([disabled]) {\n    chameleon-svg {\n      --goto-icon-color: var(--goto-surface-color-inverted);\n      --goto-icon-size: 18px;\n\n      &[slot='avatar'] {\n        padding-top: 2px;\n      }\n    }\n\n    svg {\n      margin: 1px;\n      width: 18px;\n    }\n  }\n\n  &_opened:not([disabled]) {\n    background-color: var(--goto-interactive-color-brand-default);\n\n    chameleon-svg {\n      --goto-icon-color: var(--goto-icon-color-inverted);\n    }\n\n    .baseFilter__label {\n      color: var(--goto-type-color-inverted);\n    }\n\n    svg {\n      fill: var(--goto-icon-color-inverted);\n\n      path {\n        fill: var(--goto-icon-color-inverted);\n      }\n    }\n  }\n\n  &_error {\n    border: 2px solid var(--goto-border-color-danger);\n    opacity: 0.7;\n  }\n}\n\n.baseFilter__avatar {\n  display: flex;\n  gap: 8px;\n}\n\n.baseFilter__labelInner {\n  display: flex;\n  align-items: center;\n  font: var(--goto-button-medium);\n  font-weight: 400;\n\n  span {\n    text-overflow: ellipsis;\n    overflow: hidden;\n    white-space: nowrap;\n  }\n}\n\n.baseFilter__actions {\n  display: flex;\n  padding: var(--goto-spacing-04) var(--goto-spacing-04);\n  justify-content: space-between;\n  align-items: center;\n}\n","import { TooltipWrapper } from '@analytics-common-ui/layout';\nimport { AlertOutlinedIcon, ChevronDownOutlinedIcon, ChevronUpOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { Button, Chip, Popover, PopoverProps } from '@getgo/chameleon-web-react-wrapper';\nimport clsx from 'clsx';\nimport { isEmpty as _isEmpty, isFunction as _isFunction, isString as _isString, uniqueId } from 'lodash';\nimport React, { PropsWithChildren, ReactNode, useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector } from 'react-redux';\nimport { SAVING_STRATEGY, SavingStrategy } from '../../../constants/filters-definitions';\nimport { selectIsUserReadOnly } from '../../../store/selectors/analytics';\nimport styles from './BaseFilter.module.scss';\n\nexport interface BaseFilterProps extends PropsWithChildren {\n  label: string;\n  icon?: ReactNode;\n  tooltipLabel?: ReactNode;\n  tooltipDataAvailabilityLabel?: ReactNode;\n  isOpen?: boolean;\n  disabled?: boolean;\n  isApplyDisabled?: boolean;\n  isResetDisabled?: boolean;\n  canReadOnlyApply?: boolean;\n  filterSavingStrategy?: SavingStrategy;\n  showChevron?: boolean;\n  tooltipPosition?: PopoverProps['position'] | undefined;\n  hasError?: boolean;\n  onApply?: () => void;\n  onChange?: (isOpen: boolean) => void;\n  onReset?: () => void;\n}\n\nconst BaseFilter: React.FC<BaseFilterProps> = ({\n  label,\n  icon,\n  tooltipLabel,\n  tooltipDataAvailabilityLabel,\n  isOpen,\n  disabled,\n  onChange,\n  onReset,\n  onApply,\n  canReadOnlyApply,\n  isApplyDisabled,\n  isResetDisabled,\n  filterSavingStrategy,\n  showChevron = true,\n  tooltipPosition,\n  hasError,\n  children\n}) => {\n  const filterId = useMemo(() => `base-filter-${uniqueId()}`, []);\n\n  const { t } = useTranslation();\n  const isUserReadOnly = useSelector(selectIsUserReadOnly);\n\n  const getTooltipTitle = () => {\n    if (isOpen || disabled) {\n      return '';\n    }\n\n    return tooltipLabel;\n  };\n\n  const onChangeInternal = (evt?: { detail?: { isOpen?: boolean } }) => onChange?.(!!evt?.detail?.isOpen);\n\n  return (\n    <>\n      <TooltipWrapper\n        hidden={_isEmpty(getTooltipTitle())}\n        title={getTooltipTitle()}\n        subTitle={tooltipDataAvailabilityLabel}>\n        <Chip\n          id={filterId}\n          disabled={disabled}\n          className={clsx(styles.baseFilter__chip, {\n            [styles.baseFilter__chip_opened]: isOpen,\n            [styles.baseFilter__chip_error]: hasError,\n            [styles.baseFilter__chip_disabled]: disabled\n          })}\n          avatar={\n            <div className={styles.baseFilter__avatar}>\n              {hasError && <AlertOutlinedIcon />}\n              {icon}\n            </div>\n          }\n          role=\"button\"\n          size=\"medium\">\n          <span className={styles.baseFilter__label} data-testid={`base-filter-chip-${label}`}>\n            <span className={clsx({ [styles.baseFilter__labelInner]: !_isString(label) })}>{label}</span>\n            {showChevron && (isOpen ? <ChevronUpOutlinedIcon /> : <ChevronDownOutlinedIcon />)}\n          </span>\n        </Chip>\n      </TooltipWrapper>\n      <Popover\n        compact\n        label={label}\n        triggerId={filterId}\n        zIndex={600}\n        onChange={onChangeInternal}\n        isOpen={!disabled && !!isOpen}\n        position={tooltipPosition ?? 'bottom-start'}\n        data-testid={`filter-popover-${label}`}>\n        {children}\n        {_isFunction(onReset) && _isFunction(onApply) && filterSavingStrategy !== SAVING_STRATEGY.ON_CLOSE && (\n          <div className={styles.baseFilter__actions}>\n            <Button\n              role=\"button\"\n              variant=\"primary\"\n              size=\"small\"\n              onClick={onReset}\n              disabled={isResetDisabled || (isUserReadOnly && !canReadOnlyApply)}>\n              {t('Reset')}\n            </Button>\n            <Button\n              role=\"button\"\n              variant=\"secondary\"\n              size=\"small\"\n              onClick={onApply}\n              disabled={isApplyDisabled || (isUserReadOnly && !canReadOnlyApply)}>\n              {t('Apply')}\n            </Button>\n          </div>\n        )}\n      </Popover>\n    </>\n  );\n};\n\nexport default BaseFilter;\n",".operatorFilter__item {\n  &[checked]{\n    color: var(--goto-type-color-success);\n  }\n\n  &::part(input-container) {\n    display: none;\n  }\n}\n","import { Menu, MenuItem } from '@getgo/chameleon-web-react-wrapper';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport styles from './OperatorFilter.module.scss';\n\nconst OperatorFilter = ({ operators, currentOperator, handleOperatorClick }) => {\n  const { t } = useTranslation();\n\n  const handleItemClick = (e, operator) => {\n    e.preventDefault();\n\n    handleOperatorClick(operator);\n  };\n\n  return (\n    <Menu aria-label={t('Filter operator menu')}>\n      {operators.map(operator => (\n        <MenuItem\n          className={styles.operatorFilter__item}\n          checked={operator === currentOperator}\n          onClick={e => handleItemClick(e, operator)}\n          key={operator}>\n          {t(operator)}\n        </MenuItem>\n      ))}\n    </Menu>\n  );\n};\n\nOperatorFilter.propTypes = {\n  /* The operators available for a dashboard */\n  operators: PropTypes.arrayOf(PropTypes.string),\n  /* The function called on operator click */\n  handleOperatorClick: PropTypes.func,\n  /* The current operator checked */\n  currentOperator: PropTypes.string\n};\n\nexport default OperatorFilter;\n",".categoryFilter {\n  display: flex;\n  flex-direction: column;\n  gap: var(--goto-spacing-01);\n  min-width: 300px;\n  padding: var(--goto-spacing-04) 0 var(--goto-spacing-05);\n}\n\n.categoryFilter__menuItem {\n  padding-left: var(--goto-spacing-04);\n  width: 100%;\n\n  &[disabled] {\n    svg,\n    path {\n      fill: var(--goto-icon-color-disabled);\n    }\n\n    chameleon-svg {\n      --goto-icon-color: var(--goto-icon-color-disabled);\n    }\n  }\n}\n\n.categoryFilter__title {\n  &::part(control) {\n    padding: 0;\n  }\n}\n\n.categoryFilter__back {\n  &::part(control) {\n    display: flex;\n    align-self: flex-start;\n    flex-wrap: nowrap;\n    padding: 0;\n    margin: 0;\n    justify-content: flex-start;\n    align-items: center;\n  }\n\n}\n\n.categoryFilter__headerLabel {\n  padding: 0 0 0 var(--goto-spacing-04);\n  display: flex;\n  align-items: center;\n}\n","import { useSelector } from 'react-redux';\nimport { Menu, MenuItem, Typography, IconButton, Button } from '@getgo/chameleon-web-react-wrapper';\nimport PropTypes from 'prop-types';\nimport { ChevronRightOutlinedIcon, ChevronLeftOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { useTranslation } from 'react-i18next';\nimport styles from './CategoryFilter.module.scss';\nimport { FILTER_CONFIG } from '../../../configs/filters.config.ts';\nimport { TooltipWrapper } from '@analytics-common-ui/layout';\nimport { useAccessCheck } from '../../../hooks/permissions/useAccessCheck.ts';\nimport { selectFeatureFlag } from '../../../store/selectors/analytics';\nimport { selectFiltersQuery } from '../../../store/selectors/filtersV2';\nimport { isFilterVisible } from '../../../utils/filters.util';\n\nconst CategoryFilter = ({ currentCategoryLabel, handleFilterClick, onCloseCategory, currentFilterId, operators }) => {\n  const featureFlagSelector = useSelector(selectFeatureFlag);\n  const canAccess = useAccessCheck();\n  const filtersQuery = useSelector(selectFiltersQuery);\n  const { t } = useTranslation();\n\n  const filters = Object.entries(FILTER_CONFIG)\n    .filter(([, value]) => value.category?.label === currentCategoryLabel)\n    .map(([key, value]) => ({ key, value }));\n\n  const handleItemClick = (e, filterLabel) => {\n    e.preventDefault();\n    handleFilterClick(filterLabel, null);\n  };\n\n  const onCloseCategoryclick = () => {\n    onCloseCategory();\n  };\n\n  const isMenuFilterDisabled = filterMenu =>\n    operators.length === 1 && !!filtersQuery.find(el => currentFilterId !== el.id && el.filter === filterMenu);\n\n  const getAvailableFilters = () => {\n    return filters.map(filterEl => {\n      if (isFilterVisible(filterEl.value, canAccess, featureFlagSelector)) {\n        return (\n          <MenuItem\n            disabled={isMenuFilterDisabled(filterEl.value.label)}\n            className={styles.categoryFilter__menuItem}\n            onClick={e => handleItemClick(e, filterEl.value.label)}\n            key={filterEl.value.label}\n            trailingIcon={<ChevronRightOutlinedIcon />}>\n            {t(filterEl.value.name)}\n          </MenuItem>\n        );\n      }\n\n      return null;\n    });\n  };\n\n  return (\n    <div className={styles.categoryFilter}>\n      <div className={styles.categoryFilter__headerLabel}>\n        <TooltipWrapper placement=\"bottom\" title={t('Back')}>\n          <IconButton\n            label={t('Back')}\n            onClick={onCloseCategoryclick}\n            size=\"small\"\n            variant=\"primary\"\n            className={styles.categoryFilter__back}>\n            <ChevronLeftOutlinedIcon size=\"20px\" />\n          </IconButton>\n        </TooltipWrapper>\n        <Button onClick={onCloseCategoryclick} variant=\"tertiary\" className={styles.categoryFilter__title}>\n          <Typography variant=\"heading-small\" color=\"textPrimary\" role=\"group\" id=\"current-category-label\">\n            {t(currentCategoryLabel)}\n          </Typography>\n        </Button>\n      </div>\n      <Menu aria-labelledby=\"current-category-label\" className={styles.categoryFilter__menuItem}>\n        {getAvailableFilters()}\n      </Menu>\n    </div>\n  );\n};\n\nCategoryFilter.propTypes = {\n  /* The function called on filter click */\n  handleFilterClick: PropTypes.func,\n  /* The string to get the label category */\n  currentCategoryLabel: PropTypes.string,\n  /* The function called on back click */\n  onCloseCategory: PropTypes.func,\n  /* The filter ID to edit */\n  currentFilterId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /* The operators available for a dashboard */\n  operators: PropTypes.arrayOf(PropTypes.string)\n};\n\nexport default CategoryFilter;\n",".unallowedFilterWarning {\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n  width: 300px;\n  padding: var(--goto-spacing-04) var(--goto-spacing-04) var(--goto-spacing-06) var(--goto-spacing-06);\n}\n\n.unallowedFilterWarning__header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}\n\n.unallowedFilterWarning__removeIcon {\n  margin-right: -5px;\n\n  chameleon-svg-v-next {\n    --goto-icon-color: var(--goto-icon-color-danger);\n  }\n}","import { TooltipWrapper } from '@analytics-common-ui/layout';\nimport { AlertOutlinedIcon, TrashOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { Alert, IconButton, Typography } from '@getgo/chameleon-web-react-wrapper';\nimport { FC } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { FilterDefinition } from '../../../types/config/FilterTypes';\nimport styles from './UnallowedFilterWarning.module.scss';\n\ninterface UnallowedFilterWarningProps {\n  filterConfig: FilterDefinition;\n  onRemoveFilter: () => void;\n}\n\nconst UnallowedFilterWarning: FC<UnallowedFilterWarningProps> = ({ filterConfig, onRemoveFilter }) => {\n  const { t } = useTranslation();\n\n  return (\n    <div className={styles.unallowedFilterWarning}>\n      <div className={styles.unallowedFilterWarning__header}>\n        {filterConfig.name && (\n          <Typography tag=\"span\" variant=\"heading-small\" color=\"type-color-default\">\n            {t(filterConfig.name)}\n          </Typography>\n        )}\n        <TooltipWrapper title={t('Remove filter')}>\n          <IconButton\n            className={styles.unallowedFilterWarning__removeIcon}\n            label={t('Remove filter')}\n            onClick={onRemoveFilter}\n            role=\"button\"\n            size=\"small\"\n            variant=\"primary\">\n            <TrashOutlinedIcon />\n          </IconButton>\n        </TooltipWrapper>\n      </div>\n      <Alert variant=\"danger\" icon={<AlertOutlinedIcon />}>\n        <Typography variant=\"body-medium\" color=\"type-color-default\">\n          {t(filterConfig.noAccessWarning || '')}\n        </Typography>\n      </Alert>\n    </div>\n  );\n};\n\nexport default UnallowedFilterWarning;\n","import { isEmpty as _isEmpty, isEqual as _isEqual, isNil as _isNil } from 'lodash';\nimport PropTypes from 'prop-types';\nimport { useEffect, useMemo, useState, useCallback, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { AddOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport FiltersList from '../FiltersList/FiltersList';\nimport configs from '../../../configs';\nimport { DEFAULT_FILTERS, FILTERS_TYPES } from '../../../constants/filters.ts';\nimport { FILTER_TYPES } from '../../../constants/filters-definitions.ts';\nimport BaseFilter from '../BaseFilter/BaseFilter';\nimport { selectBaseFilters, selectFiltersConfig, selectFiltersQuery } from '../../../store/selectors/filtersV2';\nimport { updateFilterConfig } from '../../../store/Analytics/filters.slice';\nimport { clearFilterValidationError } from '../../../store/Analytics/analytics.slice';\nimport { clearBannersByType } from '../../../store/errorBannerAlert.slice';\nimport OperatorFilter from '../OperatorFilter/OperatorFilter';\nimport CategoryFilter from '../CategoryFilter/CategoryFilter';\nimport { getFilterConfigOverrides, getFilterLabel, getFilterTooltip } from '../../../utils/filters.util';\nimport { MIXPANEL_EVENT_NAME } from '../../../constants/mixpanel.ts';\nimport useMixpanel from '../../../hooks/useMixpanel.ts';\nimport { BANNER_TYPES } from '../../../constants/banner-types';\nimport {\n  selectCurrentDashboard,\n  selectCurrentOrganization,\n  selectFilterValidationError\n} from '../../../store/selectors/analytics';\nimport { useAccessCheck } from '../../../hooks/permissions/useAccessCheck.ts';\nimport useFilterValidation from '../../../hooks/useFilterValidation.tsx';\nimport { getPageIdFromDashboardType } from '../../../utils/page.util.ts';\nimport UnallowedFilterWarning from '../UnallowedFilterWarning/UnallowedFilterWarning';\n\nconst STATE_UPDATE_DELAY_MS = 50;\n\nconst WrapperFiltersList = ({\n  disabled,\n  currentFilterId,\n  isOperatorView,\n  selectedFilterLabel,\n  selectedFilterOperator,\n  selectedFilterValue,\n  onApply,\n  className\n}) => {\n  const { t } = useTranslation();\n  const mixpanelTrack = useMixpanel();\n  const currentDashboard = useSelector(selectCurrentDashboard);\n  const currentOrganization = useSelector(selectCurrentOrganization);\n  const [currentFilterValue, setCurrentFilterValue] = useState({ [selectedFilterLabel]: selectedFilterValue });\n  const [currentFilterLabel, setCurrentFilterLabel] = useState(selectedFilterLabel);\n  const [currentCategoryLabel, setCurrentCategoryLabel] = useState(null);\n  const [isOpen, setOpen] = useState(false);\n  const [isClosing, setIsClosing] = useState(false);\n  const [filterLabel, setFilterLabel] = useState(selectedFilterLabel);\n  const isRemovingRef = useRef(false);\n  const previousFilterLabelRef = useRef(null);\n  const savedBaseFilters = useSelector(selectBaseFilters);\n  const configsFilters = useSelector(selectFiltersConfig);\n  const filtersQuery = useSelector(selectFiltersQuery);\n  const canAccess = useAccessCheck();\n  const filterValidationError = useSelector(selectFilterValidationError);\n  const dispatch = useDispatch();\n  const validateFilters = useFilterValidation({ currentOrganization, clearBannersOnSuccess: true });\n\n  const dashboardConfig = useMemo(\n    () => configs[getPageIdFromDashboardType(currentDashboard.type)] || {},\n    [currentDashboard]\n  );\n  const isCustomDashboard = currentDashboard && !currentDashboard.isSystemDashboard;\n\n  const FILTER_CONFIG = useMemo(() => getFilterConfigOverrides(dashboardConfig), [dashboardConfig]);\n\n  const shouldWarnFilterNotAllowed = useMemo(() => {\n    const filterConfig = FILTER_CONFIG[selectedFilterLabel];\n    return !!filterConfig?.noAccessWarning && !!filterConfig.access && !canAccess(filterConfig.access);\n  }, [canAccess, selectedFilterLabel, FILTER_CONFIG]);\n\n  const hasValidationError = useMemo(() => {\n    const activeFilterLabel = currentFilterLabel || selectedFilterLabel;\n    return activeFilterLabel && filterValidationError?.field === activeFilterLabel;\n  }, [filterValidationError, currentFilterLabel, selectedFilterLabel]);\n\n  const computedValidationError = useMemo(\n    () => (hasValidationError ? filterValidationError?.message : null),\n    [hasValidationError, filterValidationError]\n  );\n\n  useEffect(() => {\n    setIsClosing(false);\n    if (selectedFilterLabel && !_isNil(selectedFilterValue)) {\n      setCurrentFilterValue(prev => ({ ...prev, [selectedFilterLabel]: selectedFilterValue }));\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  useEffect(() => {\n    setCurrentFilterValue({ [selectedFilterLabel]: selectedFilterValue });\n  }, [selectedFilterValue, selectedFilterLabel]);\n\n  const handleValidate = useCallback(\n    async (selectedIds, filterId) => {\n      const filterConfig = FILTER_CONFIG[filterId];\n      const shouldValidate = filterConfig?.listOptions?.validateOnCheckList;\n      const maxItems = filterConfig?.listOptions?.maxItems;\n      const isMaxReached = !!maxItems && selectedIds.length > maxItems;\n\n      if (!shouldValidate || !currentOrganization?.id || !currentDashboard?.type || !filterId || isMaxReached) {\n        return;\n      }\n\n      const filterRequest = {\n        items: [\n          {\n            filterValues: [\n              {\n                values: selectedIds\n              }\n            ],\n            property: filterId,\n            type: FILTERS_TYPES.FILTER\n          }\n        ]\n      };\n\n      await validateFilters({\n        dashboardType: currentDashboard.type,\n        filters: filterRequest\n      });\n    },\n    [FILTER_CONFIG, currentOrganization, currentDashboard, validateFilters]\n  );\n\n  const isAddFilterRemoved = useMemo(() => {\n    if (!dashboardConfig?.operators || !dashboardConfig?.availableFilters?.order) {\n      return false;\n    }\n\n    const allFiltersSelected = dashboardConfig.availableFilters.order.every(dashboardFilter =>\n      filtersQuery.some(el => el.filter === dashboardFilter)\n    );\n\n    return dashboardConfig.operators.length === 1 && allFiltersSelected;\n  }, [dashboardConfig, filtersQuery]);\n\n  const handleFilterClick = (label, category) => {\n    // This setTimeout is ugly, but we don't have a choice as chameleon is\n    // closing the popover if the element is removed too soon.\n    const timeout = setTimeout(() => {\n      if (category) {\n        setCurrentCategoryLabel(category.label);\n      } else {\n        setCurrentCategoryLabel(null);\n        setCurrentFilterLabel(label);\n\n        if (!selectedFilterLabel) {\n          setCurrentFilterValue({});\n        }\n      }\n      const eventData = {\n        Action: `Filter clicked`,\n        Component: 'FiltersList',\n        FilterLabel: label,\n        FilterCategory: category && category.label ? category.label : ''\n      };\n      mixpanelTrack(MIXPANEL_EVENT_NAME.FILTER, eventData);\n    }, STATE_UPDATE_DELAY_MS);\n    return () => {\n      clearTimeout(timeout);\n    };\n  };\n\n  const toggleShowSelectedOnly = value => {\n    dispatch(updateFilterConfig({ [currentFilterLabel]: { isShowSelectedOnly: value } }));\n  };\n\n  const getTooltipLabel = () => {\n    if (!_isNil(selectedFilterValue) && selectedFilterLabel) {\n      return getFilterTooltip(FILTER_CONFIG[selectedFilterLabel], selectedFilterValue);\n    }\n\n    return t('Add a filter');\n  };\n\n  const getLabel = () => {\n    const labelFilterValue = currentFilterValue?.[currentFilterLabel];\n    const labelFilterName = currentFilterLabel || selectedFilterLabel;\n    const hasPermissions = !shouldWarnFilterNotAllowed;\n\n    if ((_isNil(labelFilterValue) || !labelFilterName) && (!selectedFilterLabel || isOpen)) {\n      return t('Filter');\n    }\n\n    if (isOpen) {\n      return !_isNil(labelFilterValue)\n        ? getFilterLabel(FILTER_CONFIG[labelFilterName], labelFilterValue, currentDashboard.filters, hasPermissions)\n        : getFilterLabel(\n            FILTER_CONFIG[selectedFilterLabel],\n            selectedFilterValue,\n            currentDashboard.filters,\n            hasPermissions\n          );\n    }\n\n    return getFilterLabel(\n      FILTER_CONFIG[selectedFilterLabel],\n      selectedFilterValue,\n      currentDashboard.filters,\n      hasPermissions\n    );\n  };\n\n  const onClose = (shouldReset, val) => {\n    setOpen(val);\n  };\n\n  const sendMixpanelEventOnFilterPopoverOpen = (state, savingFilterLabel, selectedValue, dashboardType) => {\n    if (state?.detail?.isOpen && !savingFilterLabel && !selectedValue) {\n      // Send mixpanel event when Filter popup is open\n      const eventData = {\n        Action: `Filter pill clicked`,\n        Component: 'FiltersList',\n        Dashboard: dashboardType\n      };\n\n      mixpanelTrack(MIXPANEL_EVENT_NAME.FILTER, eventData);\n    }\n  };\n\n  const shouldClearFilter = (label, filterConfig, currentValue, isCustomDashboard) => {\n    if (!label || filterConfig[label]?.allowSaveEmpty !== false) {\n      return false;\n    }\n\n    // For SERVER_LIST filters on custom dashboards, don't auto-clear when empty\n    // This allows users to keep the popover open to search for values or manually remove the filter\n    // even when selected values don't exist in the BE response anymore\n    const isServerListFilter = filterConfig[label]?.type === FILTER_TYPES.SERVER_LIST;\n\n    if (isServerListFilter && isCustomDashboard) {\n      return false;\n    }\n\n    const hasNullValue = currentValue === null;\n    const selectedItems = currentValue?.[label]?.filter(el => el.selected) || [];\n    return (hasNullValue || _isEmpty(selectedItems)) && !shouldWarnFilterNotAllowed;\n  };\n\n  const shouldApplyFilter = (isOpenPopover, isClosingState, isOperatorViewMode, currentValue, label, selectedValue) => {\n    return (\n      !isOpenPopover &&\n      !isClosingState &&\n      !isOperatorViewMode &&\n      currentValue &&\n      label &&\n      !_isEqual(currentValue[label], selectedValue)\n    );\n  };\n\n  const onPopOverChange = isOpen => {\n    if (isOpen) {\n      isRemovingRef.current = false;\n      setIsClosing(false);\n    }\n    if (disabled || isRemovingRef.current) {\n      return;\n    }\n\n    const savingFilterLabel = currentFilterLabel || (selectedFilterLabel ? filterLabel : null);\n\n    if (shouldClearFilter(savingFilterLabel, FILTER_CONFIG, currentFilterValue, isCustomDashboard)) {\n      setCurrentFilterValue(null);\n      setCurrentFilterLabel(null);\n      onApply({ id: currentFilterId, filter: null, value: null });\n      setOpen(false);\n      return;\n    }\n\n    if (\n      shouldApplyFilter(isOpen, isClosing, isOperatorView, currentFilterValue, savingFilterLabel, selectedFilterValue)\n    ) {\n      setFilterLabel(currentFilterLabel);\n      mixpanelTrack(MIXPANEL_EVENT_NAME.FILTER, {\n        Action: `Applied a filter`,\n        Component: 'FiltersList',\n        Filter: savingFilterLabel,\n        Dashboard: currentDashboard?.type\n      });\n      onApply({\n        id: currentFilterId,\n        filter: savingFilterLabel,\n        value: currentFilterValue[savingFilterLabel]\n      });\n    }\n\n    sendMixpanelEventOnFilterPopoverOpen(isOpen, savingFilterLabel, selectedFilterValue, currentDashboard?.type);\n    setCurrentFilterLabel(isOpen ? selectedFilterLabel : null);\n    setOpen(isOpen);\n  };\n\n  useEffect(() => {\n    // Only clear validation error when switching to a DIFFERENT filter field\n    // Don't clear when opening/closing popover (null changes)\n    const previousLabel = previousFilterLabelRef.current;\n    const isFilterSwitch = previousLabel && currentFilterLabel && previousLabel !== currentFilterLabel;\n\n    if (isFilterSwitch) {\n      dispatch(clearFilterValidationError());\n    }\n\n    previousFilterLabelRef.current = currentFilterLabel;\n  }, [currentFilterLabel, dispatch]);\n\n  const handleFilterClose = () => {\n    setTimeout(() => {\n      if (!currentCategoryLabel && FILTER_CONFIG[currentFilterLabel]?.category) {\n        setCurrentCategoryLabel(FILTER_CONFIG[currentFilterLabel]?.category.label);\n      } else if (currentCategoryLabel) {\n        setCurrentCategoryLabel(null);\n      }\n      setCurrentFilterLabel(null);\n    }, STATE_UPDATE_DELAY_MS);\n  };\n\n  const getIcon = () => {\n    const labelFilterValue = currentFilterValue?.[currentFilterLabel] || selectedFilterValue;\n    const labelFilterName = currentFilterLabel || selectedFilterLabel;\n    if (!labelFilterValue || !labelFilterName) {\n      return <AddOutlinedIcon />;\n    }\n\n    let filterConfig;\n    if (isOpen) {\n      filterConfig = FILTER_CONFIG[currentFilterLabel || selectedFilterLabel];\n    } else {\n      filterConfig = FILTER_CONFIG[selectedFilterLabel];\n    }\n    const Icon = filterConfig?.icon;\n    if (Icon) {\n      return <Icon style={filterConfig?.iconStyle ?? {}} />;\n    }\n\n    return null;\n  };\n\n  const handleOperatorClick = operator => {\n    onApply({\n      id: currentFilterId,\n      filter: 'operator',\n      value: operator\n    });\n\n    setOpen(false);\n  };\n\n  const handleRemoveFilter = () => {\n    isRemovingRef.current = true;\n    setCurrentFilterValue(null);\n    setCurrentFilterLabel(null);\n    setFilterLabel(null);\n\n    if (hasValidationError) {\n      dispatch(clearFilterValidationError());\n      dispatch(clearBannersByType({ type: BANNER_TYPES.VALIDATION }));\n    }\n\n    if (currentFilterId !== null && currentFilterId !== undefined) {\n      onApply({\n        id: currentFilterId,\n        filter: null,\n        value: null\n      });\n    }\n\n    const eventData = {\n      Action: `Filter removed`,\n      Component: 'FiltersList',\n      Dashboard: currentDashboard?.type,\n      FilterName: selectedFilterLabel\n    };\n    mixpanelTrack(MIXPANEL_EVENT_NAME.FILTER, eventData);\n\n    setOpen(false);\n    setIsClosing(true);\n  };\n\n  const handleSetCurrentFilterValue = useCallback(\n    newFilterValue => {\n      setCurrentFilterValue(prev => ({ ...prev, [currentFilterLabel]: newFilterValue }));\n    },\n    [currentFilterLabel]\n  );\n\n  const showChevron = () => {\n    if (isOperatorView) {\n      return dashboardConfig.operators.length > 1;\n    }\n\n    return !!currentFilterLabel || !!selectedFilterLabel;\n  };\n\n  return (\n    <span className={className}>\n      {(!isAddFilterRemoved || selectedFilterLabel) && (\n        <BaseFilter\n          onClose={onClose}\n          onChange={onPopOverChange}\n          label={getLabel()}\n          icon={getIcon()}\n          isOpen={isOpen}\n          showChevron={showChevron()}\n          disabled={disabled}\n          tooltipLabel={getTooltipLabel()}\n          hasError={shouldWarnFilterNotAllowed || hasValidationError}\n          filterSavingStrategy={FILTER_CONFIG[currentFilterLabel]?.savingStrategy}>\n          {isOpen && (\n            <>\n              {!isOperatorView &&\n                (shouldWarnFilterNotAllowed ? (\n                  <UnallowedFilterWarning\n                    filterConfig={FILTER_CONFIG[currentFilterLabel]}\n                    onRemoveFilter={handleRemoveFilter}\n                  />\n                ) : (\n                  <span>\n                    {currentCategoryLabel ? (\n                      <CategoryFilter\n                        handleFilterClick={handleFilterClick}\n                        currentCategoryLabel={currentCategoryLabel}\n                        onCloseCategory={handleFilterClose}\n                        operators={dashboardConfig.operators}\n                        currentFilterId={currentFilterId}\n                      />\n                    ) : (\n                      <FiltersList\n                        operators={dashboardConfig.operators}\n                        currentFilterId={currentFilterId}\n                        isTrashIconVisible={!!filterLabel}\n                        setCurrentFilterValue={handleSetCurrentFilterValue}\n                        onCloseFilter={handleFilterClose}\n                        handleFilterClick={handleFilterClick}\n                        filterLabel={filterLabel}\n                        currentFilterLabel={currentFilterLabel}\n                        currentFilterValue={currentFilterValue}\n                        availableFilters={dashboardConfig.availableFilters}\n                        defaultSelectedFilter={savedBaseFilters[currentFilterLabel]}\n                        isFilterLoaded\n                        onRemoveFilter={handleRemoveFilter}\n                        defaultFilters={DEFAULT_FILTERS}\n                        filterConfig={FILTER_CONFIG[currentFilterLabel]}\n                        onShowSelectedOnlyChange={toggleShowSelectedOnly}\n                        isShowSelectedOnly={configsFilters[currentFilterLabel]?.isShowSelectedOnly}\n                        onValidate={handleValidate}\n                        validationError={computedValidationError}\n                      />\n                    )}\n                  </span>\n                ))}\n              {isOperatorView && (\n                <OperatorFilter\n                  currentOperator={selectedFilterOperator}\n                  handleOperatorClick={handleOperatorClick}\n                  operators={dashboardConfig.operators}\n                />\n              )}\n            </>\n          )}\n        </BaseFilter>\n      )}\n    </span>\n  );\n};\n\nWrapperFiltersList.propTypes = {\n  /* If the filter is disabled  */\n  disabled: PropTypes.bool,\n  /* The filter ID to edit */\n  currentFilterId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /* The current filter to edit */\n  selectedFilterLabel: PropTypes.string,\n  /* The current operator to edit */\n  selectedFilterOperator: PropTypes.string,\n  /* The current filter value to edit (can be anything (object, array, ...)) */\n  // eslint-disable-next-line react/forbid-prop-types\n  selectedFilterValue: PropTypes.any,\n  /* Define if we need to show operators */\n  isOperatorView: PropTypes.bool,\n  /* Filter is applied */\n  onApply: PropTypes.func,\n  /* CSS class applied to the top level span */\n  className: PropTypes.string\n};\n\nexport default WrapperFiltersList;\n",".filterContainerBottomFilters__filters {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: var(--goto-spacing-02);\n}\n\n.filterContainerBottomFilters__brackets {\n  fill: var(--goto-type-color-default);\n  height: var(--goto-spacing-06);\n}\n\n.filterContainerBottomFilters__resetButton {\n  transform: scaleX(-1);\n\n  &:disabled::part(control) {\n    --goto-icon-color: var(--goto-icon-color-disabled);\n  }\n}\n\n.filterContainerBottomFilters_chip {\n  margin: 0 var(--goto-spacing-01) 0 0;\n}\n","import { FILTER_NAMES } from '../constants/filters';\n\nexport const RIGHT_BRACKET_TOKEN = 'RIGHT_BRACKET';\nexport const LEFT_BRACKET_TOKEN = 'LEFT_BRACKET';\nexport const NEXT_ACTION_TOKEN = 'NEXT_ACTION';\n\nexport type FilterDisplayToken = typeof RIGHT_BRACKET_TOKEN | typeof LEFT_BRACKET_TOKEN | typeof NEXT_ACTION_TOKEN;\n\nexport interface Filter {\n  id?: string | number;\n  filter: string;\n  value: unknown;\n  line?: string;\n}\n\n/**\n * Computes the displayed filters array with bracket tokens and next action token.\n * Brackets are inserted when mixing AND/OR operators to show precedence visually.\n *\n * IMPORTANT: This algorithm places RIGHT brackets AFTER the NEXT_ACTION token.\n * This creates the visual: A OR (B AND C [ADD_FILTER]) )\n * The closing bracket appears after the \"add filter\" button.\n *\n * Example:\n * Input: [queue1, OR, queue2, AND, queue3]\n * Output: [queue1, OR, LEFT_BRACKET, queue2, AND, queue3, NEXT_ACTION, RIGHT_BRACKET]\n *\n * @param filters - Array of filter objects\n * @param isUserReadOnly - Whether the user has read-only access (hides NEXT_ACTION_TOKEN)\n * @returns Array of filters interspersed with bracket and action tokens\n */\nexport const computeDisplayedFilters = (\n  filters: Filter[],\n  isUserReadOnly: boolean\n): Array<Filter | FilterDisplayToken | string | boolean> => {\n  const beforeNextAction: Array<Filter | typeof LEFT_BRACKET_TOKEN> = [];\n  const afterNextAction: Array<typeof RIGHT_BRACKET_TOKEN> = [];\n\n  for (let i = 0; i < filters.length; i++) {\n    const lookBehind = i > 0 ? filters[i - 1] : null;\n    const lookAhead = i < filters.length - 1 ? filters[i + 1] : null;\n\n    // Check if current filter is between two different operators\n    // LEFT bracket goes before the filter, RIGHT bracket goes after NEXT_ACTION\n    if (\n      lookBehind?.filter === FILTER_NAMES.OPERATOR &&\n      lookAhead?.filter === FILTER_NAMES.OPERATOR &&\n      lookBehind?.value !== lookAhead?.value\n    ) {\n      beforeNextAction.push(LEFT_BRACKET_TOKEN);\n      afterNextAction.push(RIGHT_BRACKET_TOKEN);\n    }\n\n    beforeNextAction.push(filters[i]);\n  }\n\n  // Build result: filters with LEFT brackets, then NEXT_ACTION, then RIGHT brackets\n  return [...beforeNextAction, !isUserReadOnly && NEXT_ACTION_TOKEN, ...afterNextAction].filter(Boolean);\n};\n\n/**\n * Determines if the next filter action should be an operator.\n * Returns true if the last filter is NOT an operator (meaning we should add operator next).\n *\n * @param filters - Array of filter objects\n * @returns True if next action should be operator selection\n */\nexport const shouldShowOperatorAsNextAction = (filters: Filter[]): boolean => {\n  const lastFilter = filters.at(-1);\n  return !!lastFilter && lastFilter?.filter !== FILTER_NAMES.OPERATOR;\n};\n","import { isEqual as _isEqual } from 'lodash';\nimport { IconButton } from '@getgo/chameleon-web-react-wrapper';\nimport { RefreshOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { useTranslation } from 'react-i18next';\nimport { useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport { useSelector, useDispatch } from 'react-redux';\nimport WrapperFiltersList from '../../WrapperFiltersList/WrapperFiltersList';\nimport { FILTER_POSITION } from '../../../../constants/filters-definitions';\nimport { LeftBracketIcon, RightBracketIcon } from '../../../../assets/images';\nimport styles from './FilterContainerBottomFilters.module.scss';\nimport { TooltipWrapper } from '@analytics-common-ui/layout';\nimport { MIXPANEL_EVENT_NAME } from '../../../../constants/mixpanel.ts';\nimport useMixpanel from '../../../../hooks/useMixpanel.ts';\nimport { selectAnalyticsFiltersDataLoaded } from '../../../../store/selectors/filtersV2';\nimport { updateEndTime } from '../../../../store/Analytics/default-date.slice';\nimport {\n  computeDisplayedFilters,\n  shouldShowOperatorAsNextAction,\n  RIGHT_BRACKET_TOKEN,\n  LEFT_BRACKET_TOKEN,\n  NEXT_ACTION_TOKEN\n} from '../../../../utils/filter-display.util.ts';\n\nconst FilterContainerBottomFilters = ({ filters, isUserReadOnly, baseFilters, onApplyFilter }) => {\n  const { t } = useTranslation();\n  const dispatch = useDispatch();\n  const mixpanelTrack = useMixpanel();\n  const filtersDataLoaded = useSelector(selectAnalyticsFiltersDataLoaded);\n\n  // Compute derived state from props instead of managing separate state\n  const currentFilters = useMemo(() => filters || [], [filters]);\n  const isNextFilterOperator = useMemo(() => shouldShowOperatorAsNextAction(currentFilters), [currentFilters]);\n\n  const handleResetFilters = () => {\n    const eventData = {\n      Action: `Reset filters`,\n      Component: 'FilterContainerBottomFilters'\n    };\n    mixpanelTrack(MIXPANEL_EVENT_NAME.FILTER, eventData);\n    dispatch(updateEndTime());\n    onApplyFilter(baseFilters, FILTER_POSITION.SECOND_LINE);\n  };\n\n  const handleFilterApply = filter => {\n    dispatch(updateEndTime());\n    if (!filter.filter) {\n      return;\n    }\n\n    const updatedFilters = [\n      ...currentFilters,\n      {\n        ...filter,\n        line: FILTER_POSITION.SECOND_LINE\n      }\n    ];\n\n    onApplyFilter(updatedFilters, FILTER_POSITION.SECOND_LINE);\n  };\n\n  const handleEditFilter = filter => {\n    const updatedFilters = [...currentFilters];\n\n    const filterIndex = updatedFilters.findIndex(el => el.id === filter.id);\n    if (filterIndex > -1) {\n      if (filter.filter) {\n        updatedFilters[filterIndex] = {\n          ...filter,\n          line: FILTER_POSITION.SECOND_LINE\n        };\n      } else {\n        let deleteCount = 1;\n        if (updatedFilters.at(filterIndex + 1)?.filter === 'operator') {\n          deleteCount++;\n        }\n        updatedFilters.splice(filterIndex, deleteCount);\n      }\n    }\n\n    onApplyFilter(updatedFilters, FILTER_POSITION.SECOND_LINE);\n  };\n\n  // Use the pure utility function to compute displayed filters\n  const displayedFilters = useMemo(\n    () => computeDisplayedFilters(currentFilters, isUserReadOnly),\n    [currentFilters, isUserReadOnly]\n  );\n\n  const tokenKeys = {};\n  const generateTokenKey = token => {\n    if (!Object.prototype.hasOwnProperty.call(tokenKeys, token)) {\n      tokenKeys[token] = 0;\n    }\n    return `${token}-${tokenKeys[token]++}`;\n  };\n\n  return (\n    <div className={styles.filterContainerBottomFilters__filters}>\n      {!isUserReadOnly && (\n        <TooltipWrapper placement=\"bottom\" title={t('Reset filters')}>\n          <IconButton\n            className={styles.filterContainerBottomFilters__resetButton}\n            variant=\"primary\"\n            size=\"small\"\n            disabled={filters.length === 0 || _isEqual(filters, baseFilters)}\n            label={t('Reset filters')}\n            onClick={handleResetFilters}>\n            <RefreshOutlinedIcon />\n          </IconButton>\n        </TooltipWrapper>\n      )}\n\n      {displayedFilters.map(el => {\n        switch (el) {\n          case RIGHT_BRACKET_TOKEN:\n            return (\n              <RightBracketIcon\n                key={generateTokenKey(RIGHT_BRACKET_TOKEN)}\n                className={styles.filterContainerBottomFilters__brackets}\n              />\n            );\n          case LEFT_BRACKET_TOKEN:\n            return (\n              <LeftBracketIcon\n                key={generateTokenKey(LEFT_BRACKET_TOKEN)}\n                className={styles.filterContainerBottomFilters__brackets}\n              />\n            );\n          case NEXT_ACTION_TOKEN:\n            return (\n              <WrapperFiltersList\n                disabled={!filtersDataLoaded}\n                key={generateTokenKey(NEXT_ACTION_TOKEN)}\n                isOperatorView={isNextFilterOperator}\n                onApply={handleFilterApply}\n                className={styles.filterContainerBottomFilters_chip}\n              />\n            );\n          default:\n            return (\n              <WrapperFiltersList\n                key={el.id}\n                disabled={isUserReadOnly || !filtersDataLoaded}\n                currentFilterId={el.id}\n                isOperatorView={el.filter === 'operator'}\n                selectedFilterLabel={el.filter}\n                selectedFilterValue={el.value}\n                selectedFilterOperator={el.filter === 'operator' ? el.value : null}\n                onApply={handleEditFilter}\n                className={styles.filterContainerBottomFilters_chip}\n              />\n            );\n        }\n      })}\n    </div>\n  );\n};\n\nFilterContainerBottomFilters.propTypes = {\n  /** Function called to apply a filter */\n  onApplyFilter: PropTypes.func,\n  /* Indicates if the user is readonly */\n  isUserReadOnly: PropTypes.bool,\n  /** The query filters base */\n  filters: PropTypes.arrayOf(\n    PropTypes.shape({\n      filter: PropTypes.string,\n      /* The filter value, can be anything (object, array, ...)) */\n      // eslint-disable-next-line react/forbid-prop-types\n      value: PropTypes.any\n    })\n  ),\n  /** The query filters base */\n  baseFilters: PropTypes.arrayOf(\n    PropTypes.shape({\n      filter: PropTypes.string,\n      /* The filter value, can be anything (object, array, ...)) */\n      // eslint-disable-next-line react/forbid-prop-types\n      value: PropTypes.any\n    })\n  )\n};\n\nexport default FilterContainerBottomFilters;\n","import * as React from 'react';\nconst useEvent = callback => {\n  const fnRef = React.useRef(callback);\n  fnRef.current = callback;\n  const memoFn = React.useCallback((...args) => fnRef.current?.(...args), []);\n  return memoFn;\n};\nexport default useEvent;","export default function canUseDom() {\n  return !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n}","import * as React from 'react';\nimport canUseDom from \"../Dom/canUseDom\";\n\n/**\n * Wrap `React.useLayoutEffect` which will not throw warning message in test env\n */\nconst useInternalLayoutEffect = process.env.NODE_ENV !== 'test' && canUseDom() ? React.useLayoutEffect : React.useEffect;\nconst useLayoutEffect = (callback, deps) => {\n  const firstMountRef = React.useRef(true);\n  useInternalLayoutEffect(() => {\n    return callback(firstMountRef.current);\n  }, deps);\n\n  // We tell react that first mount has passed\n  useInternalLayoutEffect(() => {\n    firstMountRef.current = false;\n    return () => {\n      firstMountRef.current = true;\n    };\n  }, []);\n};\nexport const useLayoutUpdateEffect = (callback, deps) => {\n  useLayoutEffect(firstMount => {\n    if (!firstMount) {\n      return callback();\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, deps);\n};\nexport default useLayoutEffect;","import * as React from 'react';\n/**\n * Same as React.useState but `setState` accept `ignoreDestroy` param to not to setState after destroyed.\n * We do not make this auto is to avoid real memory leak.\n * Developer should confirm it's safe to ignore themselves.\n */\nconst useSafeState = defaultValue => {\n  const destroyRef = React.useRef(false);\n  const [value, setValue] = React.useState(defaultValue);\n  React.useEffect(() => {\n    destroyRef.current = false;\n    return () => {\n      destroyRef.current = true;\n    };\n  }, []);\n  function safeSetState(updater, ignoreDestroy) {\n    if (ignoreDestroy && destroyRef.current) {\n      return;\n    }\n    setValue(updater);\n  }\n  return [value, safeSetState];\n};\nexport default useSafeState;","import { useState } from 'react';\nimport useLayoutEffect from \"./useLayoutEffect\";\n/**\n * Similar to `useState` but will use props value if provided.\n * From React 18, we do not need safe `useState` since it will not throw for unmounted update.\n * This hooks remove the `onChange` & `postState` logic since we only need basic merged state logic.\n */\nexport default function useControlledState(defaultStateValue, value) {\n  const [innerValue, setInnerValue] = useState(defaultStateValue);\n  const mergedValue = value !== undefined ? value : innerValue;\n  useLayoutEffect(mount => {\n    if (!mount) {\n      setInnerValue(value);\n    }\n  }, [value]);\n  return [\n  // Value\n  mergedValue,\n  // Update function\n  setInnerValue];\n}","let raf = callback => +setTimeout(callback, 16);\nlet caf = num => clearTimeout(num);\nif (typeof window !== 'undefined' && 'requestAnimationFrame' in window) {\n  raf = callback => window.requestAnimationFrame(callback);\n  caf = handle => window.cancelAnimationFrame(handle);\n}\nlet rafUUID = 0;\nconst rafIds = new Map();\nfunction cleanup(id) {\n  rafIds.delete(id);\n}\nconst wrapperRaf = (callback, times = 1) => {\n  rafUUID += 1;\n  const id = rafUUID;\n  function callRef(leftTimes) {\n    if (leftTimes === 0) {\n      // Clean up\n      cleanup(id);\n\n      // Trigger\n      callback();\n    } else {\n      // Next raf\n      const realId = raf(() => {\n        callRef(leftTimes - 1);\n      });\n\n      // Bind real raf id\n      rafIds.set(id, realId);\n    }\n  }\n  callRef(times);\n  return id;\n};\nwrapperRaf.cancel = id => {\n  const realId = rafIds.get(id);\n  cleanup(id);\n  return caf(realId);\n};\nif (process.env.NODE_ENV !== 'production') {\n  wrapperRaf.ids = () => rafIds;\n}\nexport default wrapperRaf;","import * as React from 'react';\nfunction getUseId() {\n  // We need fully clone React function here to avoid webpack warning React 17 do not export `useId`\n  const fullClone = {\n    ...React\n  };\n  return fullClone.useId;\n}\nlet uuid = 0;\n\n/** @private Note only worked in develop env. Not work in production. */\nexport function resetUuid() {\n  if (process.env.NODE_ENV !== 'production') {\n    uuid = 0;\n  }\n}\n\n/**\n * Generate a valid HTML id from prefix and key.\n * Sanitizes the key by replacing invalid characters with hyphens.\n * @param prefix - The prefix for the id\n * @param key - The key from React element, may contain spaces or invalid characters\n * @returns A valid HTML id string\n */\nexport function getId(prefix, key) {\n  // React.Key can be string | number, convert to string first\n  const keyStr = String(key);\n\n  // Valid id characters: letters, digits, hyphen, underscore, colon, period\n  // Replace all invalid characters (including spaces) with hyphens to preserve length\n  const sanitizedKey = keyStr.replace(/[^a-zA-Z0-9_.:-]/g, '-');\n  return `${prefix}-${sanitizedKey}`;\n}\nconst useOriginId = getUseId();\nexport default useOriginId ?\n// Use React `useId`\nfunction useId(id) {\n  const reactId = useOriginId();\n\n  // Developer passed id is single source of truth\n  if (id) {\n    return id;\n  }\n\n  // Test env always return mock id\n  if (process.env.NODE_ENV === 'test') {\n    return 'test-id';\n  }\n  return reactId;\n} :\n// Use compatible of `useId`\nfunction useCompatId(id) {\n  // Inner id for accessibility usage. Only work in client side\n  const [innerId, setInnerId] = React.useState('ssr-id');\n  React.useEffect(() => {\n    const nextId = uuid;\n    uuid += 1;\n    setInnerId(`rc_unique_${nextId}`);\n  }, []);\n\n  // Developer passed id is single source of truth\n  if (id) {\n    return id;\n  }\n\n  // Test env always return mock id\n  if (process.env.NODE_ENV === 'test') {\n    return 'test-id';\n  }\n\n  // Return react native id or inner id\n  return innerId;\n};","import * as React from 'react';\nexport default function useMemo(getValue, condition, shouldUpdate) {\n  const cacheRef = React.useRef({});\n  if (!('value' in cacheRef.current) || shouldUpdate(cacheRef.current.condition, condition)) {\n    cacheRef.current.value = getValue();\n    cacheRef.current.condition = condition;\n  }\n  return cacheRef.current.value;\n}","import * as React from 'react';\nimport useEvent from \"./useEvent\";\n/**\n * Same as React.useState but will always get latest state.\n * This is useful when React merge multiple state updates into one.\n * e.g. onTransitionEnd trigger multiple event at once will be merged state update in React.\n */\nfunction useSyncState(defaultValue) {\n  const [, forceUpdate] = React.useReducer(x => x + 1, 0);\n  const currentValueRef = React.useRef(defaultValue);\n  const getValue = useEvent(() => {\n    return currentValueRef.current;\n  });\n  const setValue = useEvent(updater => {\n    currentValueRef.current = typeof updater === 'function' ? updater(currentValueRef.current) : updater;\n    forceUpdate();\n  });\n  return [getValue, setValue];\n}\nexport default useSyncState;","/**\n * @license React\n * react-is.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and 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\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n  REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n  REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n  REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n  REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n  REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n  REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n  REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n  REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n  REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n  REACT_VIEW_TRANSITION_TYPE = Symbol.for(\"react.view_transition\"),\n  REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\nfunction typeOf(object) {\n  if (\"object\" === typeof object && null !== object) {\n    var $$typeof = object.$$typeof;\n    switch ($$typeof) {\n      case REACT_ELEMENT_TYPE:\n        switch (((object = object.type), object)) {\n          case REACT_FRAGMENT_TYPE:\n          case REACT_PROFILER_TYPE:\n          case REACT_STRICT_MODE_TYPE:\n          case REACT_SUSPENSE_TYPE:\n          case REACT_SUSPENSE_LIST_TYPE:\n          case REACT_VIEW_TRANSITION_TYPE:\n            return object;\n          default:\n            switch (((object = object && object.$$typeof), object)) {\n              case REACT_CONTEXT_TYPE:\n              case REACT_FORWARD_REF_TYPE:\n              case REACT_LAZY_TYPE:\n              case REACT_MEMO_TYPE:\n                return object;\n              case REACT_CONSUMER_TYPE:\n                return object;\n              default:\n                return $$typeof;\n            }\n        }\n      case REACT_PORTAL_TYPE:\n        return $$typeof;\n    }\n  }\n}\nexports.ContextConsumer = REACT_CONSUMER_TYPE;\nexports.ContextProvider = REACT_CONTEXT_TYPE;\nexports.Element = REACT_ELEMENT_TYPE;\nexports.ForwardRef = REACT_FORWARD_REF_TYPE;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Lazy = REACT_LAZY_TYPE;\nexports.Memo = REACT_MEMO_TYPE;\nexports.Portal = REACT_PORTAL_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.SuspenseList = REACT_SUSPENSE_LIST_TYPE;\nexports.isContextConsumer = function (object) {\n  return typeOf(object) === REACT_CONSUMER_TYPE;\n};\nexports.isContextProvider = function (object) {\n  return typeOf(object) === REACT_CONTEXT_TYPE;\n};\nexports.isElement = function (object) {\n  return (\n    \"object\" === typeof object &&\n    null !== object &&\n    object.$$typeof === REACT_ELEMENT_TYPE\n  );\n};\nexports.isForwardRef = function (object) {\n  return typeOf(object) === REACT_FORWARD_REF_TYPE;\n};\nexports.isFragment = function (object) {\n  return typeOf(object) === REACT_FRAGMENT_TYPE;\n};\nexports.isLazy = function (object) {\n  return typeOf(object) === REACT_LAZY_TYPE;\n};\nexports.isMemo = function (object) {\n  return typeOf(object) === REACT_MEMO_TYPE;\n};\nexports.isPortal = function (object) {\n  return typeOf(object) === REACT_PORTAL_TYPE;\n};\nexports.isProfiler = function (object) {\n  return typeOf(object) === REACT_PROFILER_TYPE;\n};\nexports.isStrictMode = function (object) {\n  return typeOf(object) === REACT_STRICT_MODE_TYPE;\n};\nexports.isSuspense = function (object) {\n  return typeOf(object) === REACT_SUSPENSE_TYPE;\n};\nexports.isSuspenseList = function (object) {\n  return typeOf(object) === REACT_SUSPENSE_LIST_TYPE;\n};\nexports.isValidElementType = function (type) {\n  return \"string\" === typeof type ||\n    \"function\" === typeof type ||\n    type === REACT_FRAGMENT_TYPE ||\n    type === REACT_PROFILER_TYPE ||\n    type === REACT_STRICT_MODE_TYPE ||\n    type === REACT_SUSPENSE_TYPE ||\n    type === REACT_SUSPENSE_LIST_TYPE ||\n    (\"object\" === typeof type &&\n      null !== type &&\n      (type.$$typeof === REACT_LAZY_TYPE ||\n        type.$$typeof === REACT_MEMO_TYPE ||\n        type.$$typeof === REACT_CONTEXT_TYPE ||\n        type.$$typeof === REACT_CONSUMER_TYPE ||\n        type.$$typeof === REACT_FORWARD_REF_TYPE ||\n        type.$$typeof === REACT_CLIENT_REFERENCE ||\n        void 0 !== type.getModuleId))\n    ? !0\n    : !1;\n};\nexports.typeOf = typeOf;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-is.production.js');\n} else {\n  module.exports = require('./cjs/react-is.development.js');\n}\n","const REACT_ELEMENT_TYPE_18 = Symbol.for('react.element');\nconst REACT_ELEMENT_TYPE_19 = Symbol.for('react.transitional.element');\nconst REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\n\n/**\n * Compatible with React 18 or 19 to check if node is a Fragment.\n */\nexport default function isFragment(object) {\n  return (\n    // Base object type\n    object && typeof object === 'object' && (\n    // React Element type\n    object.$$typeof === REACT_ELEMENT_TYPE_18 || object.$$typeof === REACT_ELEMENT_TYPE_19) &&\n    // React Fragment type\n    object.type === REACT_FRAGMENT_TYPE\n  );\n}","import { isValidElement, version } from 'react';\nimport { ForwardRef, isMemo } from 'react-is';\nimport useMemo from \"./hooks/useMemo\";\nimport isFragment from \"./React/isFragment\";\nconst ReactMajorVersion = Number(version.split('.')[0]);\nexport const fillRef = (ref, node) => {\n  if (typeof ref === 'function') {\n    ref(node);\n  } else if (typeof ref === 'object' && ref && 'current' in ref) {\n    ref.current = node;\n  }\n};\n\n/**\n * Merge refs into one ref function to support ref passing.\n */\nexport const composeRef = (...refs) => {\n  const refList = refs.filter(Boolean);\n  if (refList.length <= 1) {\n    return refList[0];\n  }\n  return node => {\n    refs.forEach(ref => {\n      fillRef(ref, node);\n    });\n  };\n};\nexport const useComposeRef = (...refs) => {\n  return useMemo(() => composeRef(...refs),\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  refs, (prev, next) => prev.length !== next.length || prev.every((ref, i) => ref !== next[i]));\n};\nexport const supportRef = nodeOrComponent => {\n  if (!nodeOrComponent) {\n    return false;\n  }\n\n  // React 19 no need `forwardRef` anymore. So just pass if is a React element.\n  if (isReactElement(nodeOrComponent) && ReactMajorVersion >= 19) {\n    return true;\n  }\n  const type = isMemo(nodeOrComponent) ? nodeOrComponent.type.type : nodeOrComponent.type;\n\n  // Function component node\n  if (typeof type === 'function' && !type.prototype?.render && type.$$typeof !== ForwardRef) {\n    return false;\n  }\n\n  // Class component\n  if (typeof nodeOrComponent === 'function' && !nodeOrComponent.prototype?.render && nodeOrComponent.$$typeof !== ForwardRef) {\n    return false;\n  }\n  return true;\n};\nfunction isReactElement(node) {\n  return /*#__PURE__*/isValidElement(node) && !isFragment(node);\n}\nexport const supportNodeRef = node => {\n  return isReactElement(node) && supportRef(node);\n};\n\n/**\n * In React 19. `ref` is not a property from node.\n * But a property from `props.ref`.\n * To check if `props.ref` exist or fallback to `ref`.\n */\nexport const getNodeRef = node => {\n  if (node && isReactElement(node)) {\n    const ele = node;\n\n    // Source from:\n    // https://github.com/mui/material-ui/blob/master/packages/mui-utils/src/getReactNodeRef/getReactNodeRef.ts\n    return ele.props.propertyIsEnumerable('ref') ? ele.props.ref : ele.ref;\n  }\n  return null;\n};","export default function contains(root, n) {\n  if (!root) {\n    return false;\n  }\n\n  // Use native if support\n  if (root.contains) {\n    return root.contains(n);\n  }\n\n  // `document.contains` not support with IE11\n  let node = n;\n  while (node) {\n    if (node === root) {\n      return true;\n    }\n    node = node.parentNode;\n  }\n  return false;\n}","import canUseDom from \"./canUseDom\";\nimport contains from \"./contains\";\nconst APPEND_ORDER = 'data-rc-order';\nconst APPEND_PRIORITY = 'data-rc-priority';\nconst MARK_KEY = `rc-util-key`;\nconst containerCache = new Map();\nfunction getMark({\n  mark\n} = {}) {\n  if (mark) {\n    return mark.startsWith('data-') ? mark : `data-${mark}`;\n  }\n  return MARK_KEY;\n}\nfunction getContainer(option) {\n  if (option.attachTo) {\n    return option.attachTo;\n  }\n  const head = document.querySelector('head');\n  return head || document.body;\n}\nfunction getOrder(prepend) {\n  if (prepend === 'queue') {\n    return 'prependQueue';\n  }\n  return prepend ? 'prepend' : 'append';\n}\n\n/**\n * Find style which inject by rc-util\n */\nfunction findStyles(container) {\n  return Array.from((containerCache.get(container) || container).children).filter(node => node.tagName === 'STYLE');\n}\nexport function injectCSS(css, option = {}) {\n  if (!canUseDom()) {\n    return null;\n  }\n  const {\n    csp,\n    prepend,\n    priority = 0\n  } = option;\n  const mergedOrder = getOrder(prepend);\n  const isPrependQueue = mergedOrder === 'prependQueue';\n  const styleNode = document.createElement('style');\n  styleNode.setAttribute(APPEND_ORDER, mergedOrder);\n  if (isPrependQueue && priority) {\n    styleNode.setAttribute(APPEND_PRIORITY, `${priority}`);\n  }\n  if (csp?.nonce) {\n    styleNode.nonce = csp?.nonce;\n  }\n  styleNode.innerHTML = css;\n  const container = getContainer(option);\n  const {\n    firstChild\n  } = container;\n  if (prepend) {\n    // If is queue `prepend`, it will prepend first style and then append rest style\n    if (isPrependQueue) {\n      const existStyle = (option.styles || findStyles(container)).filter(node => {\n        // Ignore style which not injected by rc-util with prepend\n        if (!['prepend', 'prependQueue'].includes(node.getAttribute(APPEND_ORDER))) {\n          return false;\n        }\n\n        // Ignore style which priority less then new style\n        const nodePriority = Number(node.getAttribute(APPEND_PRIORITY) || 0);\n        return priority >= nodePriority;\n      });\n      if (existStyle.length) {\n        container.insertBefore(styleNode, existStyle[existStyle.length - 1].nextSibling);\n        return styleNode;\n      }\n    }\n\n    // Use `insertBefore` as `prepend`\n    container.insertBefore(styleNode, firstChild);\n  } else {\n    container.appendChild(styleNode);\n  }\n  return styleNode;\n}\nfunction findExistNode(key, option = {}) {\n  let {\n    styles\n  } = option;\n  styles ||= findStyles(getContainer(option));\n  return styles.find(node => node.getAttribute(getMark(option)) === key);\n}\nexport function removeCSS(key, option = {}) {\n  const existNode = findExistNode(key, option);\n  if (existNode) {\n    const container = getContainer(option);\n    container.removeChild(existNode);\n  }\n}\n\n/**\n * qiankun will inject `appendChild` to insert into other\n */\nfunction syncRealContainer(container, option) {\n  const cachedRealContainer = containerCache.get(container);\n\n  // Find real container when not cached or cached container removed\n  if (!cachedRealContainer || !contains(document, cachedRealContainer)) {\n    const placeholderStyle = injectCSS('', option);\n    const {\n      parentNode\n    } = placeholderStyle;\n    containerCache.set(container, parentNode);\n    container.removeChild(placeholderStyle);\n  }\n}\n\n/**\n * manually clear container cache to avoid global cache in unit testes\n */\nexport function clearContainerCache() {\n  containerCache.clear();\n}\nexport function updateCSS(css, key, originOption = {}) {\n  const container = getContainer(originOption);\n  const styles = findStyles(container);\n  const option = {\n    ...originOption,\n    styles\n  };\n\n  // Sync real parent\n  syncRealContainer(container, option);\n  const existNode = findExistNode(key, option);\n  if (existNode) {\n    if (option.csp?.nonce && existNode.nonce !== option.csp?.nonce) {\n      existNode.nonce = option.csp?.nonce;\n    }\n    if (existNode.innerHTML !== css) {\n      existNode.innerHTML = css;\n    }\n    return existNode;\n  }\n  const newNode = injectCSS(css, option);\n  newNode.setAttribute(getMark(option), key);\n  return newNode;\n}","export function isDOM(node) {\n  // https://developer.mozilla.org/en-US/docs/Web/API/Element\n  // Since XULElement is also subclass of Element, we only need HTMLElement and SVGElement\n  return node instanceof HTMLElement || node instanceof SVGElement;\n}\n\n/**\n * Retrieves a DOM node via a ref, and does not invoke `findDOMNode`.\n */\nexport function getDOM(node) {\n  if (node && typeof node === 'object' && isDOM(node.nativeElement)) {\n    return node.nativeElement;\n  }\n  if (isDOM(node)) {\n    return node;\n  }\n  return null;\n}\n\n/**\n * Return if a node is a DOM node. Else will return by `findDOMNode`\n */\nexport default function findDOMNode(node) {\n  const domNode = getDOM(node);\n  if (domNode) {\n    return domNode;\n  }\n  if (node && typeof node === 'object' && 'current' in node) {\n    const refDomNode = getDOM(node.current);\n    if (refDomNode) {\n      return refDomNode;\n    }\n  }\n  return null;\n}","export default (element => {\n  if (!element) {\n    return false;\n  }\n  if (element instanceof Element) {\n    if (element.offsetParent) {\n      return true;\n    }\n    if (element.getBBox) {\n      const {\n        width,\n        height\n      } = element.getBBox();\n      if (width || height) {\n        return true;\n      }\n    }\n    if (element.getBoundingClientRect) {\n      const {\n        width,\n        height\n      } = element.getBoundingClientRect();\n      if (width || height) {\n        return true;\n      }\n    }\n  }\n  return false;\n});","function getRoot(ele) {\n  return ele?.getRootNode?.();\n}\n\n/**\n * Check if is in shadowRoot\n */\nexport function inShadow(ele) {\n  return getRoot(ele) instanceof ShadowRoot;\n}\n\n/**\n * Return shadowRoot if possible\n */\nexport function getShadowRoot(ele) {\n  return inShadow(ele) ? getRoot(ele) : null;\n}","/**\n * @ignore\n * some key-codes definition and utils from closure-library\n * @author yiminghe@gmail.com\n */\n\nconst KeyCode = {\n  /**\n   * MAC_ENTER\n   */\n  MAC_ENTER: 3,\n  /**\n   * BACKSPACE\n   */\n  BACKSPACE: 8,\n  /**\n   * TAB\n   */\n  TAB: 9,\n  /**\n   * NUMLOCK on FF/Safari Mac\n   */\n  NUM_CENTER: 12,\n  // NUMLOCK on FF/Safari Mac\n  /**\n   * ENTER\n   */\n  ENTER: 13,\n  /**\n   * SHIFT\n   */\n  SHIFT: 16,\n  /**\n   * CTRL\n   */\n  CTRL: 17,\n  /**\n   * ALT\n   */\n  ALT: 18,\n  /**\n   * PAUSE\n   */\n  PAUSE: 19,\n  /**\n   * CAPS_LOCK\n   */\n  CAPS_LOCK: 20,\n  /**\n   * ESC\n   */\n  ESC: 27,\n  /**\n   * SPACE\n   */\n  SPACE: 32,\n  /**\n   * PAGE_UP\n   */\n  PAGE_UP: 33,\n  // also NUM_NORTH_EAST\n  /**\n   * PAGE_DOWN\n   */\n  PAGE_DOWN: 34,\n  // also NUM_SOUTH_EAST\n  /**\n   * END\n   */\n  END: 35,\n  // also NUM_SOUTH_WEST\n  /**\n   * HOME\n   */\n  HOME: 36,\n  // also NUM_NORTH_WEST\n  /**\n   * LEFT\n   */\n  LEFT: 37,\n  // also NUM_WEST\n  /**\n   * UP\n   */\n  UP: 38,\n  // also NUM_NORTH\n  /**\n   * RIGHT\n   */\n  RIGHT: 39,\n  // also NUM_EAST\n  /**\n   * DOWN\n   */\n  DOWN: 40,\n  // also NUM_SOUTH\n  /**\n   * PRINT_SCREEN\n   */\n  PRINT_SCREEN: 44,\n  /**\n   * INSERT\n   */\n  INSERT: 45,\n  // also NUM_INSERT\n  /**\n   * DELETE\n   */\n  DELETE: 46,\n  // also NUM_DELETE\n  /**\n   * ZERO\n   */\n  ZERO: 48,\n  /**\n   * ONE\n   */\n  ONE: 49,\n  /**\n   * TWO\n   */\n  TWO: 50,\n  /**\n   * THREE\n   */\n  THREE: 51,\n  /**\n   * FOUR\n   */\n  FOUR: 52,\n  /**\n   * FIVE\n   */\n  FIVE: 53,\n  /**\n   * SIX\n   */\n  SIX: 54,\n  /**\n   * SEVEN\n   */\n  SEVEN: 55,\n  /**\n   * EIGHT\n   */\n  EIGHT: 56,\n  /**\n   * NINE\n   */\n  NINE: 57,\n  /**\n   * QUESTION_MARK\n   */\n  QUESTION_MARK: 63,\n  // needs localization\n  /**\n   * A\n   */\n  A: 65,\n  /**\n   * B\n   */\n  B: 66,\n  /**\n   * C\n   */\n  C: 67,\n  /**\n   * D\n   */\n  D: 68,\n  /**\n   * E\n   */\n  E: 69,\n  /**\n   * F\n   */\n  F: 70,\n  /**\n   * G\n   */\n  G: 71,\n  /**\n   * H\n   */\n  H: 72,\n  /**\n   * I\n   */\n  I: 73,\n  /**\n   * J\n   */\n  J: 74,\n  /**\n   * K\n   */\n  K: 75,\n  /**\n   * L\n   */\n  L: 76,\n  /**\n   * M\n   */\n  M: 77,\n  /**\n   * N\n   */\n  N: 78,\n  /**\n   * O\n   */\n  O: 79,\n  /**\n   * P\n   */\n  P: 80,\n  /**\n   * Q\n   */\n  Q: 81,\n  /**\n   * R\n   */\n  R: 82,\n  /**\n   * S\n   */\n  S: 83,\n  /**\n   * T\n   */\n  T: 84,\n  /**\n   * U\n   */\n  U: 85,\n  /**\n   * V\n   */\n  V: 86,\n  /**\n   * W\n   */\n  W: 87,\n  /**\n   * X\n   */\n  X: 88,\n  /**\n   * Y\n   */\n  Y: 89,\n  /**\n   * Z\n   */\n  Z: 90,\n  /**\n   * META\n   */\n  META: 91,\n  // WIN_KEY_LEFT\n  /**\n   * WIN_KEY_RIGHT\n   */\n  WIN_KEY_RIGHT: 92,\n  /**\n   * CONTEXT_MENU\n   */\n  CONTEXT_MENU: 93,\n  /**\n   * NUM_ZERO\n   */\n  NUM_ZERO: 96,\n  /**\n   * NUM_ONE\n   */\n  NUM_ONE: 97,\n  /**\n   * NUM_TWO\n   */\n  NUM_TWO: 98,\n  /**\n   * NUM_THREE\n   */\n  NUM_THREE: 99,\n  /**\n   * NUM_FOUR\n   */\n  NUM_FOUR: 100,\n  /**\n   * NUM_FIVE\n   */\n  NUM_FIVE: 101,\n  /**\n   * NUM_SIX\n   */\n  NUM_SIX: 102,\n  /**\n   * NUM_SEVEN\n   */\n  NUM_SEVEN: 103,\n  /**\n   * NUM_EIGHT\n   */\n  NUM_EIGHT: 104,\n  /**\n   * NUM_NINE\n   */\n  NUM_NINE: 105,\n  /**\n   * NUM_MULTIPLY\n   */\n  NUM_MULTIPLY: 106,\n  /**\n   * NUM_PLUS\n   */\n  NUM_PLUS: 107,\n  /**\n   * NUM_MINUS\n   */\n  NUM_MINUS: 109,\n  /**\n   * NUM_PERIOD\n   */\n  NUM_PERIOD: 110,\n  /**\n   * NUM_DIVISION\n   */\n  NUM_DIVISION: 111,\n  /**\n   * F1\n   */\n  F1: 112,\n  /**\n   * F2\n   */\n  F2: 113,\n  /**\n   * F3\n   */\n  F3: 114,\n  /**\n   * F4\n   */\n  F4: 115,\n  /**\n   * F5\n   */\n  F5: 116,\n  /**\n   * F6\n   */\n  F6: 117,\n  /**\n   * F7\n   */\n  F7: 118,\n  /**\n   * F8\n   */\n  F8: 119,\n  /**\n   * F9\n   */\n  F9: 120,\n  /**\n   * F10\n   */\n  F10: 121,\n  /**\n   * F11\n   */\n  F11: 122,\n  /**\n   * F12\n   */\n  F12: 123,\n  /**\n   * NUMLOCK\n   */\n  NUMLOCK: 144,\n  /**\n   * SEMICOLON\n   */\n  SEMICOLON: 186,\n  // needs localization\n  /**\n   * DASH\n   */\n  DASH: 189,\n  // needs localization\n  /**\n   * EQUALS\n   */\n  EQUALS: 187,\n  // needs localization\n  /**\n   * COMMA\n   */\n  COMMA: 188,\n  // needs localization\n  /**\n   * PERIOD\n   */\n  PERIOD: 190,\n  // needs localization\n  /**\n   * SLASH\n   */\n  SLASH: 191,\n  // needs localization\n  /**\n   * APOSTROPHE\n   */\n  APOSTROPHE: 192,\n  // needs localization\n  /**\n   * SINGLE_QUOTE\n   */\n  SINGLE_QUOTE: 222,\n  // needs localization\n  /**\n   * OPEN_SQUARE_BRACKET\n   */\n  OPEN_SQUARE_BRACKET: 219,\n  // needs localization\n  /**\n   * BACKSLASH\n   */\n  BACKSLASH: 220,\n  // needs localization\n  /**\n   * CLOSE_SQUARE_BRACKET\n   */\n  CLOSE_SQUARE_BRACKET: 221,\n  // needs localization\n  /**\n   * WIN_KEY\n   */\n  WIN_KEY: 224,\n  /**\n   * MAC_FF_META\n   */\n  MAC_FF_META: 224,\n  // Firefox (Gecko) fires this for the meta key instead of 91\n  /**\n   * WIN_IME\n   */\n  WIN_IME: 229,\n  // ======================== Function ========================\n  /**\n   * whether text and modified key is entered at the same time.\n   */\n  isTextModifyingKeyEvent: function isTextModifyingKeyEvent(e) {\n    const {\n      keyCode\n    } = e;\n    if (e.altKey && !e.ctrlKey || e.metaKey ||\n    // Function keys don't generate text\n    keyCode >= KeyCode.F1 && keyCode <= KeyCode.F12) {\n      return false;\n    }\n\n    // The following keys are quite harmless, even in combination with\n    // CTRL, ALT or SHIFT.\n    switch (keyCode) {\n      case KeyCode.ALT:\n      case KeyCode.CAPS_LOCK:\n      case KeyCode.CONTEXT_MENU:\n      case KeyCode.CTRL:\n      case KeyCode.DOWN:\n      case KeyCode.END:\n      case KeyCode.ESC:\n      case KeyCode.HOME:\n      case KeyCode.INSERT:\n      case KeyCode.LEFT:\n      case KeyCode.MAC_FF_META:\n      case KeyCode.META:\n      case KeyCode.NUMLOCK:\n      case KeyCode.NUM_CENTER:\n      case KeyCode.PAGE_DOWN:\n      case KeyCode.PAGE_UP:\n      case KeyCode.PAUSE:\n      case KeyCode.PRINT_SCREEN:\n      case KeyCode.RIGHT:\n      case KeyCode.SHIFT:\n      case KeyCode.UP:\n      case KeyCode.WIN_KEY:\n      case KeyCode.WIN_KEY_RIGHT:\n        return false;\n      default:\n        return true;\n    }\n  },\n  /**\n   * whether character is entered.\n   */\n  isCharacterKey: function isCharacterKey(keyCode) {\n    if (keyCode >= KeyCode.ZERO && keyCode <= KeyCode.NINE) {\n      return true;\n    }\n    if (keyCode >= KeyCode.NUM_ZERO && keyCode <= KeyCode.NUM_MULTIPLY) {\n      return true;\n    }\n    if (keyCode >= KeyCode.A && keyCode <= KeyCode.Z) {\n      return true;\n    }\n\n    // Safari sends zero key code for non-latin characters.\n    if (window.navigator.userAgent.indexOf('WebKit') !== -1 && keyCode === 0) {\n      return true;\n    }\n    switch (keyCode) {\n      case KeyCode.SPACE:\n      case KeyCode.QUESTION_MARK:\n      case KeyCode.NUM_PLUS:\n      case KeyCode.NUM_MINUS:\n      case KeyCode.NUM_PERIOD:\n      case KeyCode.NUM_DIVISION:\n      case KeyCode.SEMICOLON:\n      case KeyCode.DASH:\n      case KeyCode.EQUALS:\n      case KeyCode.COMMA:\n      case KeyCode.PERIOD:\n      case KeyCode.SLASH:\n      case KeyCode.APOSTROPHE:\n      case KeyCode.SINGLE_QUOTE:\n      case KeyCode.OPEN_SQUARE_BRACKET:\n      case KeyCode.BACKSLASH:\n      case KeyCode.CLOSE_SQUARE_BRACKET:\n        return true;\n      default:\n        return false;\n    }\n  },\n  isEditableTarget: function isEditableTarget(e) {\n    const target = e.target;\n    if (!(target instanceof HTMLElement)) {\n      return false;\n    }\n    const tagName = target.tagName;\n    if (tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT' || target.isContentEditable) {\n      return true;\n    }\n    return false;\n  }\n};\nexport default KeyCode;","/* eslint-disable no-param-reassign */\nimport { removeCSS, updateCSS } from \"./Dom/dynamicCSS\";\nlet cached;\nfunction measureScrollbarSize(ele) {\n  const randomId = `rc-scrollbar-measure-${Math.random().toString(36).substring(7)}`;\n  const measureEle = document.createElement('div');\n  measureEle.id = randomId;\n\n  // Create Style\n  const measureStyle = measureEle.style;\n  measureStyle.position = 'absolute';\n  measureStyle.left = '0';\n  measureStyle.top = '0';\n  measureStyle.width = '100px';\n  measureStyle.height = '100px';\n  measureStyle.overflow = 'scroll';\n\n  // Clone Style if needed\n  let fallbackWidth;\n  let fallbackHeight;\n  if (ele) {\n    const targetStyle = getComputedStyle(ele);\n    measureStyle.scrollbarColor = targetStyle.scrollbarColor;\n    measureStyle.scrollbarWidth = targetStyle.scrollbarWidth;\n\n    // Set Webkit style\n    const webkitScrollbarStyle = getComputedStyle(ele, '::-webkit-scrollbar');\n    const width = parseInt(webkitScrollbarStyle.width, 10);\n    const height = parseInt(webkitScrollbarStyle.height, 10);\n\n    // Try wrap to handle CSP case\n    try {\n      const widthStyle = width ? `width: ${webkitScrollbarStyle.width};` : '';\n      const heightStyle = height ? `height: ${webkitScrollbarStyle.height};` : '';\n      updateCSS(`\n#${randomId}::-webkit-scrollbar {\n${widthStyle}\n${heightStyle}\n}`, randomId);\n    } catch (e) {\n      // Can't wrap, just log error\n      console.error(e);\n\n      // Get from style directly\n      fallbackWidth = width;\n      fallbackHeight = height;\n    }\n  }\n  document.body.appendChild(measureEle);\n\n  // Measure. Get fallback style if provided\n  const scrollWidth = ele && fallbackWidth && !Number.isNaN(fallbackWidth) ? fallbackWidth : measureEle.offsetWidth - measureEle.clientWidth;\n  const scrollHeight = ele && fallbackHeight && !Number.isNaN(fallbackHeight) ? fallbackHeight : measureEle.offsetHeight - measureEle.clientHeight;\n\n  // Clean up\n  document.body.removeChild(measureEle);\n  removeCSS(randomId);\n  return {\n    width: scrollWidth,\n    height: scrollHeight\n  };\n}\nexport default function getScrollBarSize(fresh) {\n  if (typeof document === 'undefined') {\n    return 0;\n  }\n  if (fresh || cached === undefined) {\n    cached = measureScrollbarSize();\n  }\n  return cached.width;\n}\nexport function getTargetScrollBarSize(target) {\n  if (typeof document === 'undefined' || !target || !(target instanceof Element)) {\n    return {\n      width: 0,\n      height: 0\n    };\n  }\n  return measureScrollbarSize(target);\n}","/* eslint-disable no-console */\nlet warned = {};\nconst preWarningFns = [];\n\n/**\n * Pre warning enable you to parse content before console.error.\n * Modify to null will prevent warning.\n */\nexport const preMessage = fn => {\n  preWarningFns.push(fn);\n};\n\n/**\n * Warning if condition not match.\n * @param valid Condition\n * @param message Warning message\n * @example\n * ```js\n * warning(false, 'some error'); // print some error\n * warning(true, 'some error'); // print nothing\n * warning(1 === 2, 'some error'); // print some error\n * ```\n */\nexport function warning(valid, message) {\n  if (process.env.NODE_ENV !== 'production' && !valid && console !== undefined) {\n    const finalMessage = preWarningFns.reduce((msg, preMessageFn) => preMessageFn(msg ?? '', 'warning'), message);\n    if (finalMessage) {\n      console.error(`Warning: ${finalMessage}`);\n    }\n  }\n}\n\n/** @see Similar to {@link warning} */\nexport function note(valid, message) {\n  if (process.env.NODE_ENV !== 'production' && !valid && console !== undefined) {\n    const finalMessage = preWarningFns.reduce((msg, preMessageFn) => preMessageFn(msg ?? '', 'note'), message);\n    if (finalMessage) {\n      console.warn(`Note: ${finalMessage}`);\n    }\n  }\n}\nexport function resetWarned() {\n  warned = {};\n}\nexport function call(method, valid, message) {\n  if (!valid && !warned[message]) {\n    method(false, message);\n    warned[message] = true;\n  }\n}\n\n/** @see Same as {@link warning}, but only warn once for the same message */\nexport function warningOnce(valid, message) {\n  call(warning, valid, message);\n}\n\n/** @see Same as {@link warning}, but only warn once for the same message */\nexport function noteOnce(valid, message) {\n  call(note, valid, message);\n}\nwarningOnce.preMessage = preMessage;\nwarningOnce.resetWarned = resetWarned;\nwarningOnce.noteOnce = noteOnce;\nexport default warningOnce;","import warning from \"./warning\";\n\n/**\n * Deeply compares two object literals.\n * @param obj1 object 1\n * @param obj2 object 2\n * @param shallow shallow compare\n * @returns\n */\nfunction isEqual(obj1, obj2, shallow = false) {\n  // https://github.com/mapbox/mapbox-gl-js/pull/5979/files#diff-fde7145050c47cc3a306856efd5f9c3016e86e859de9afbd02c879be5067e58f\n  const refSet = new Set();\n  function deepEqual(a, b, level = 1) {\n    const circular = refSet.has(a);\n    warning(!circular, 'Warning: There may be circular references');\n    if (circular) {\n      return false;\n    }\n    if (a === b) {\n      return true;\n    }\n    if (shallow && level > 1) {\n      return false;\n    }\n    refSet.add(a);\n    const newLevel = level + 1;\n    if (Array.isArray(a)) {\n      if (!Array.isArray(b) || a.length !== b.length) {\n        return false;\n      }\n      for (let i = 0; i < a.length; i++) {\n        if (!deepEqual(a[i], b[i], newLevel)) {\n          return false;\n        }\n      }\n      return true;\n    }\n    if (a && b && typeof a === 'object' && typeof b === 'object') {\n      const keys = Object.keys(a);\n      if (keys.length !== Object.keys(b).length) {\n        return false;\n      }\n      return keys.every(key => deepEqual(a[key], b[key], newLevel));\n    }\n    // other\n    return false;\n  }\n  return deepEqual(obj1, obj2);\n}\nexport default isEqual;","/**\n * Check if a value is neither `null` nor `undefined`.\n */\nexport function isNonNullable(value) {\n  return value !== undefined && value !== null;\n}\n\n/**\n * Check whether a value should be treated as renderable content.\n *\n * Returns `false` only for `null`, `undefined`, `false`, and `''`; all other\n * values, including `0` and `true`, are treated as renderable.\n *\n * This is a compatibility-oriented presence check, not a complete React node\n * validator.\n */\nexport function isReactRenderable(value) {\n  return isNonNullable(value) && value !== false && value !== '';\n}","'use strict'\n\nmodule.exports = isMobile\nmodule.exports.isMobile = isMobile\nmodule.exports.default = isMobile\n\nconst mobileRE = /(android|bb\\d+|meego).+mobile|armv7l|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|redmi|series[46]0|samsungbrowser.*mobile|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i\nconst notMobileRE = /CrOS/\n\nconst tabletRE = /android|ipad|playbook|silk/i\n\nfunction isMobile (opts) {\n  if (!opts) opts = {}\n  let ua = opts.ua\n  if (!ua && typeof navigator !== 'undefined') ua = navigator.userAgent\n  if (ua && ua.headers && typeof ua.headers['user-agent'] === 'string') {\n    ua = ua.headers['user-agent']\n  }\n  if (typeof ua !== 'string') return false\n\n  let result =\n    (mobileRE.test(ua) && !notMobileRE.test(ua)) ||\n    (!!opts.tablet && tabletRE.test(ua))\n\n  if (\n    !result &&\n    opts.tablet &&\n    opts.featureDetect &&\n    navigator &&\n    navigator.maxTouchPoints > 1 &&\n    ua.indexOf('Macintosh') !== -1 &&\n    ua.indexOf('Safari') !== -1\n  ) {\n    result = true\n  }\n\n  return result\n}\n","import isMobile from 'is-mobile';\nlet cached;\nconst getIsMobile = () => {\n  if (typeof cached === 'undefined') {\n    cached = isMobile();\n  }\n  return cached;\n};\nexport default getIsMobile;","export default function omit(obj, fields) {\n  const clone = Object.assign({}, obj);\n  if (Array.isArray(fields)) {\n    fields.forEach(key => {\n      delete clone[key];\n    });\n  }\n  return clone;\n}","const attributes = `accept acceptCharset accessKey action allowFullScreen allowTransparency\n    alt async autoComplete autoFocus autoPlay capture cellPadding cellSpacing challenge\n    charSet checked classID className colSpan cols content contentEditable contextMenu\n    controls coords crossOrigin data dateTime default defer dir disabled download draggable\n    encType form formAction formEncType formMethod formNoValidate formTarget frameBorder\n    headers height hidden high href hrefLang htmlFor httpEquiv icon id inputMode integrity\n    is keyParams keyType kind label lang list loop low manifest marginHeight marginWidth max maxLength media\n    mediaGroup method min minLength multiple muted name noValidate nonce open\n    optimum pattern placeholder poster preload radioGroup readOnly rel required\n    reversed role rowSpan rows sandbox scope scoped scrolling seamless selected\n    shape size sizes span spellCheck src srcDoc srcLang srcSet start step style\n    summary tabIndex target title type useMap value width wmode wrap`;\nconst eventsName = `onCopy onCut onPaste onCompositionEnd onCompositionStart onCompositionUpdate onKeyDown\n    onKeyPress onKeyUp onFocus onBlur onChange onInput onSubmit onClick onContextMenu onDoubleClick\n    onDrag onDragEnd onDragEnter onDragExit onDragLeave onDragOver onDragStart onDrop onMouseDown\n    onMouseEnter onMouseLeave onMouseMove onMouseOut onMouseOver onMouseUp onSelect onTouchCancel\n    onTouchEnd onTouchMove onTouchStart onScroll onWheel onAbort onCanPlay onCanPlayThrough\n    onDurationChange onEmptied onEncrypted onEnded onError onLoadedData onLoadedMetadata\n    onLoadStart onPause onPlay onPlaying onProgress onRateChange onSeeked onSeeking onStalled onSuspend onTimeUpdate onVolumeChange onWaiting onLoad\n    onPointerDown onPointerMove onPointerUp onPointerCancel onPointerEnter onPointerLeave onPointerOver onPointerOut onGotPointerCapture onLostPointerCapture\n    onAnimationStart onAnimationEnd onAnimationIteration\n    onTransitionEnd onTransitionRun onTransitionStart onTransitionCancel\n    onBeforeInput onReset onInvalid\n    onAuxClick onToggle onBeforeToggle onCancel onClose onResize onScrollEnd`;\nconst propList = `${attributes} ${eventsName}`.split(/[\\s\\n]+/);\n\n/* eslint-enable max-len */\nconst ariaPrefix = 'aria-';\nconst dataPrefix = 'data-';\nfunction match(key, prefix) {\n  return key.indexOf(prefix) === 0;\n}\n/**\n * Picker props from exist props with filter\n * @param props Passed props\n * @param ariaOnly boolean | { aria?: boolean; data?: boolean; attr?: boolean; } filter config\n */\nexport default function pickAttrs(props, ariaOnly = false) {\n  let mergedConfig;\n  if (ariaOnly === false) {\n    mergedConfig = {\n      aria: true,\n      data: true,\n      attr: true\n    };\n  } else if (ariaOnly === true) {\n    mergedConfig = {\n      aria: true\n    };\n  } else {\n    mergedConfig = {\n      ...ariaOnly\n    };\n  }\n  const attrs = {};\n  Object.keys(props).forEach(key => {\n    if (\n    // Aria\n    mergedConfig.aria && (key === 'role' || match(key, ariaPrefix)) ||\n    // Data\n    mergedConfig.data && match(key, dataPrefix) ||\n    // Attr\n    mergedConfig.attr && propList.includes(key)) {\n      attrs[key] = props[key];\n    }\n  });\n  return attrs;\n}","import isFragment from \"../React/isFragment\";\nimport React from 'react';\nexport default function toArray(children, option = {}) {\n  let ret = [];\n  React.Children.forEach(children, child => {\n    if ((child === undefined || child === null) && !option.keepEmpty) {\n      return;\n    }\n    if (Array.isArray(child)) {\n      ret = ret.concat(toArray(child));\n    } else if (isFragment(child) && child.props) {\n      ret = ret.concat(toArray(child.props.children, option));\n    } else {\n      ret.push(child);\n    }\n  });\n  return ret;\n}","export default function get(entity, path) {\n  let current = entity;\n  for (let i = 0; i < path.length; i += 1) {\n    if (current === null || current === undefined) {\n      return undefined;\n    }\n    current = current[path[i]];\n  }\n  return current;\n}","import get from \"./get\";\nfunction internalSet(entity, paths, value, removeIfUndefined) {\n  if (!paths.length) {\n    return value;\n  }\n  const [path, ...restPath] = paths;\n  let clone;\n  if (!entity && typeof path === 'number') {\n    clone = [];\n  } else if (Array.isArray(entity)) {\n    clone = [...entity];\n  } else {\n    clone = {\n      ...entity\n    };\n  }\n\n  // Delete prop if `removeIfUndefined` and value is undefined\n  if (removeIfUndefined && value === undefined && restPath.length === 1) {\n    delete clone[path][restPath[0]];\n  } else {\n    clone[path] = internalSet(clone[path], restPath, value, removeIfUndefined);\n  }\n  return clone;\n}\nexport default function set(entity, paths, value, removeIfUndefined = false) {\n  // Do nothing if `removeIfUndefined` and parent object not exist\n  if (paths.length && removeIfUndefined && value === undefined && !get(entity, paths.slice(0, -1))) {\n    return entity;\n  }\n  return internalSet(entity, paths, value, removeIfUndefined);\n}\nfunction isObject(obj) {\n  return typeof obj === 'object' && obj !== null && Object.getPrototypeOf(obj) === Object.prototype;\n}\nfunction createEmpty(source) {\n  return Array.isArray(source) ? [] : {};\n}\nconst keys = typeof Reflect === 'undefined' ? Object.keys : Reflect.ownKeys;\n\n// ================================ Merge ================================\n\n/**\n * Merge multiple objects. Support custom merge logic.\n * @param sources object sources\n * @param config.prepareArray Customize array prepare function.\n * It will return empty [] by default.\n * So when match array, it will auto be override with next array in sources.\n */\nexport function mergeWith(sources, config = {}) {\n  const {\n    prepareArray\n  } = config;\n  const finalPrepareArray = prepareArray || (() => []);\n  let clone = createEmpty(sources[0]);\n  sources.forEach(src => {\n    function internalMerge(path, parentLoopSet) {\n      const loopSet = new Set(parentLoopSet);\n      const value = get(src, path);\n      const isArr = Array.isArray(value);\n      if (isArr || isObject(value)) {\n        // Only add not loop obj\n        if (!loopSet.has(value)) {\n          loopSet.add(value);\n          const originValue = get(clone, path);\n          if (isArr) {\n            // Array will always be override\n            clone = set(clone, path, finalPrepareArray(originValue, value));\n          } else if (!originValue || typeof originValue !== 'object') {\n            // Init container if not exist\n            clone = set(clone, path, createEmpty(value));\n          }\n          keys(value).forEach(key => {\n            if (Object.getOwnPropertyDescriptor(value, key).enumerable) {\n              internalMerge([...path, key], loopSet);\n            }\n          });\n        }\n      } else {\n        clone = set(clone, path, value);\n      }\n    }\n    internalMerge([]);\n  });\n  return clone;\n}\n\n/**\n * Merge multiple objects into a new single object.\n * Arrays will be replaced by default.\n */\nexport function merge(...sources) {\n  return mergeWith(sources);\n}","import { createRoot } from 'react-dom/client';\nconst MARK = '__rc_react_root__';\n\n// ========================== Render ==========================\n\nexport function render(node, container) {\n  const root = container[MARK] || createRoot(container);\n  root.render(node);\n  container[MARK] = root;\n}\n\n// ========================= Unmount ==========================\nexport async function unmount(container) {\n  // Delay to unmount to avoid React 18 sync warning\n  return Promise.resolve().then(() => {\n    container[MARK]?.unmount();\n    delete container[MARK];\n  });\n}","import { useRef, useEffect, forwardRef, useImperativeHandle } from 'react';\nimport ReactDOM from 'react-dom';\nimport canUseDom from \"./Dom/canUseDom\";\nconst Portal = /*#__PURE__*/forwardRef((props, ref) => {\n  const {\n    didUpdate,\n    getContainer,\n    children\n  } = props;\n  const parentRef = useRef(null);\n  const containerRef = useRef(null);\n\n  // Ref return nothing, only for wrapper check exist\n  useImperativeHandle(ref, () => ({}));\n\n  // Create container in client side with sync to avoid useEffect not get ref\n  const initRef = useRef(false);\n  if (!initRef.current && canUseDom()) {\n    containerRef.current = getContainer();\n    parentRef.current = containerRef.current.parentNode;\n    initRef.current = true;\n  }\n\n  // [Legacy] Used by `rc-trigger`\n  useEffect(() => {\n    didUpdate?.(props);\n  });\n  useEffect(() => {\n    // Restore container to original place\n    // React 18 StrictMode will unmount first and mount back for effect test:\n    // https://reactjs.org/blog/2022/03/29/react-v18.html#new-strict-mode-behaviors\n    if (containerRef.current.parentNode === null && parentRef.current !== null) {\n      parentRef.current.appendChild(containerRef.current);\n    }\n    return () => {\n      // [Legacy] This should not be handle by Portal but parent PortalWrapper instead.\n      // Since some component use `Portal` directly, we have to keep the logic here.\n      containerRef.current?.parentNode?.removeChild(containerRef.current);\n    };\n  }, []);\n  return containerRef.current ? /*#__PURE__*/ReactDOM.createPortal(children, containerRef.current) : null;\n});\nexport default Portal;","import * as React from 'react';\nconst OrderContext = /*#__PURE__*/React.createContext(null);\nexport default OrderContext;","export let inline = false;\nexport function inlineMock(nextInline) {\n  if (typeof nextInline === 'boolean') {\n    inline = nextInline;\n  }\n  return inline;\n}","import * as React from 'react';\nimport { canUseDom, useLayoutEffect } from '@rc-component/util';\nimport OrderContext from \"./Context\";\nconst EMPTY_LIST = [];\n\n/**\n * Will add `div` to document. Nest call will keep order\n * @param render Render DOM in document\n */\nexport default function useDom(render, debug) {\n  const [ele] = React.useState(() => {\n    if (!canUseDom()) {\n      return null;\n    }\n    const defaultEle = document.createElement('div');\n    if (process.env.NODE_ENV !== 'production' && debug) {\n      defaultEle.setAttribute('data-debug', debug);\n    }\n    return defaultEle;\n  });\n\n  // ========================== Order ==========================\n  const appendedRef = React.useRef(false);\n  const queueCreate = React.useContext(OrderContext);\n  const [queue, setQueue] = React.useState(EMPTY_LIST);\n  const mergedQueueCreate = queueCreate || (appendedRef.current ? undefined : appendFn => {\n    setQueue(origin => {\n      const newQueue = [appendFn, ...origin];\n      return newQueue;\n    });\n  });\n\n  // =========================== DOM ===========================\n  function append() {\n    if (!ele.parentElement) {\n      document.body.appendChild(ele);\n    }\n    appendedRef.current = true;\n  }\n  function cleanup() {\n    ele.parentElement?.removeChild(ele);\n    appendedRef.current = false;\n  }\n  useLayoutEffect(() => {\n    if (render) {\n      if (queueCreate) {\n        queueCreate(append);\n      } else {\n        append();\n      }\n    } else {\n      cleanup();\n    }\n    return cleanup;\n  }, [render]);\n  useLayoutEffect(() => {\n    if (queue.length) {\n      queue.forEach(appendFn => appendFn());\n      setQueue(EMPTY_LIST);\n    }\n  }, [queue]);\n  return [ele, mergedQueueCreate];\n}","/**\n * Test usage export. Do not use in your production\n */\nexport function isBodyOverflowing() {\n  return document.body.scrollHeight > (window.innerHeight || document.documentElement.clientHeight) && window.innerWidth > document.body.offsetWidth;\n}","import * as React from 'react';\nimport { getTargetScrollBarSize, removeCSS, updateCSS, useLayoutEffect } from '@rc-component/util';\nimport { isBodyOverflowing } from \"./util\";\nconst UNIQUE_ID = `rc-util-locker-${Date.now()}`;\nlet uuid = 0;\nexport default function useScrollLocker(lock) {\n  const mergedLock = !!lock;\n  const [id] = React.useState(() => {\n    uuid += 1;\n    return `${UNIQUE_ID}_${uuid}`;\n  });\n  useLayoutEffect(() => {\n    if (mergedLock) {\n      const scrollbarSize = getTargetScrollBarSize(document.body).width;\n      const isOverflow = isBodyOverflowing();\n      updateCSS(`\nhtml body {\n  overflow-y: hidden;\n  ${isOverflow ? `width: calc(100% - ${scrollbarSize}px);` : ''}\n}`, id);\n    } else {\n      removeCSS(id);\n    }\n    return () => {\n      removeCSS(id);\n    };\n  }, [mergedLock, id]);\n}","import { useEvent, useId } from '@rc-component/util';\nimport { useEffect, useMemo } from 'react';\nlet stack = [];\nconst IME_LOCK_DURATION = 200;\nlet lastCompositionEndTime = 0;\n\n// Export for testing\nexport const _test = process.env.NODE_ENV === 'test' ? () => ({\n  stack,\n  reset: () => {\n    // Not reset stack to ensure effect will clean up correctly\n    lastCompositionEndTime = 0;\n  }\n}) : null;\n\n// Global event handlers\nconst onGlobalKeyDown = event => {\n  if (event.key === 'Escape' && !event.isComposing) {\n    const now = Date.now();\n    if (now - lastCompositionEndTime < IME_LOCK_DURATION) {\n      return;\n    }\n    const len = stack.length;\n    for (let i = len - 1; i >= 0; i -= 1) {\n      stack[i].onEsc({\n        top: i === len - 1,\n        event\n      });\n    }\n  }\n};\nconst onGlobalCompositionEnd = () => {\n  lastCompositionEndTime = Date.now();\n};\nfunction attachGlobalEventListeners() {\n  window.addEventListener('keydown', onGlobalKeyDown);\n  window.addEventListener('compositionend', onGlobalCompositionEnd);\n}\nfunction detachGlobalEventListeners() {\n  if (stack.length === 0) {\n    window.removeEventListener('keydown', onGlobalKeyDown);\n    window.removeEventListener('compositionend', onGlobalCompositionEnd);\n  }\n}\nexport default function useEscKeyDown(open, onEsc) {\n  const id = useId();\n  const onEventEsc = useEvent(onEsc);\n  const ensure = () => {\n    if (!stack.find(item => item.id === id)) {\n      stack.push({\n        id,\n        onEsc: onEventEsc\n      });\n    }\n  };\n  const clear = () => {\n    stack = stack.filter(item => item.id !== id);\n  };\n  useMemo(() => {\n    if (open) {\n      ensure();\n    } else if (!open) {\n      clear();\n    }\n  }, [open]);\n  useEffect(() => {\n    if (open) {\n      ensure();\n      // Attach global event listeners\n      attachGlobalEventListeners();\n      return () => {\n        clear();\n        // Remove global event listeners if instances is empty\n        detachGlobalEventListeners();\n      };\n    }\n  }, [open]);\n}","import { canUseDom, getNodeRef, supportRef, useComposeRef, warning } from '@rc-component/util';\nimport * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport OrderContext from \"./Context\";\nimport { inlineMock } from \"./mock\";\nimport useDom from \"./useDom\";\nimport useScrollLocker from \"./useScrollLocker\";\nimport useEscKeyDown from \"./useEscKeyDown\";\nconst getPortalContainer = getContainer => {\n  if (getContainer === false) {\n    return false;\n  }\n  if (!canUseDom() || !getContainer) {\n    return null;\n  }\n  if (typeof getContainer === 'string') {\n    return document.querySelector(getContainer);\n  }\n  if (typeof getContainer === 'function') {\n    return getContainer();\n  }\n  return getContainer;\n};\nconst Portal = /*#__PURE__*/React.forwardRef((props, ref) => {\n  const {\n    open,\n    autoLock,\n    getContainer,\n    debug,\n    autoDestroy = true,\n    children,\n    onEsc\n  } = props;\n  const [shouldRender, setShouldRender] = React.useState(open);\n  const mergedRender = shouldRender || open;\n\n  // ========================= Warning =========================\n  if (process.env.NODE_ENV !== 'production') {\n    warning(canUseDom() || !open, `Portal only work in client side. Please call 'useEffect' to show Portal instead default render in SSR.`);\n  }\n\n  // ====================== Should Render ======================\n  React.useEffect(() => {\n    if (autoDestroy || open) {\n      setShouldRender(open);\n    }\n  }, [open, autoDestroy]);\n\n  // ======================== Container ========================\n  const [innerContainer, setInnerContainer] = React.useState(() => getPortalContainer(getContainer));\n  React.useEffect(() => {\n    const customizeContainer = getPortalContainer(getContainer);\n\n    // Tell component that we check this in effect which is safe to be `null`\n    setInnerContainer(() =>\n    // React do the state update even the value is the same,\n    // Use function call to force React to compare update\n    customizeContainer ?? null);\n  });\n  const [defaultContainer, queueCreate] = useDom(mergedRender && !innerContainer, debug);\n  const mergedContainer = innerContainer ?? defaultContainer;\n\n  // ========================= Locker ==========================\n  useScrollLocker(autoLock && open && canUseDom() && (mergedContainer === defaultContainer || mergedContainer === document.body));\n\n  // ========================= Esc Keydown ==========================\n  useEscKeyDown(open, onEsc);\n\n  // =========================== Ref ===========================\n  let childRef = null;\n  if (children && supportRef(children) && ref) {\n    childRef = getNodeRef(children);\n  }\n  const mergedRef = useComposeRef(childRef, ref);\n\n  // ========================= Render ==========================\n  // Do not render when nothing need render\n  // When innerContainer is `undefined`, it may not ready since user use ref in the same render\n  if (!mergedRender || !canUseDom() || innerContainer === undefined) {\n    return null;\n  }\n\n  // Render inline\n  const renderInline = mergedContainer === false || inlineMock();\n  let reffedChildren = children;\n  if (ref) {\n    reffedChildren = /*#__PURE__*/React.cloneElement(children, {\n      ref: mergedRef\n    });\n  }\n  return /*#__PURE__*/React.createElement(OrderContext.Provider, {\n    value: queueCreate\n  }, renderInline ? reffedChildren : /*#__PURE__*/createPortal(reffedChildren, mergedContainer));\n});\nif (process.env.NODE_ENV !== 'production') {\n  Portal.displayName = 'Portal';\n}\nexport default Portal;","import Portal from \"./Portal\";\nimport { inlineMock } from \"./mock\";\nexport { inlineMock };\nexport default Portal;","import * as React from 'react';\nexport const CollectionContext = /*#__PURE__*/React.createContext(null);\n/**\n * Collect all the resize event from children ResizeObserver\n */\nexport function Collection({\n  children,\n  onBatchResize\n}) {\n  const resizeIdRef = React.useRef(0);\n  const resizeInfosRef = React.useRef([]);\n  const onCollectionResize = React.useContext(CollectionContext);\n  const onResize = React.useCallback((size, element, data) => {\n    resizeIdRef.current += 1;\n    const currentId = resizeIdRef.current;\n    resizeInfosRef.current.push({\n      size,\n      element,\n      data\n    });\n    Promise.resolve().then(() => {\n      if (currentId === resizeIdRef.current) {\n        onBatchResize?.(resizeInfosRef.current);\n        resizeInfosRef.current = [];\n      }\n    });\n\n    // Continue bubbling if parent exist\n    onCollectionResize?.(size, element, data);\n  }, [onBatchResize, onCollectionResize]);\n  return /*#__PURE__*/React.createElement(CollectionContext.Provider, {\n    value: onResize\n  }, children);\n}","// =============================== Const ===============================\nconst elementListeners = new Map();\nfunction onResize(entities) {\n  entities.forEach(entity => {\n    const {\n      target\n    } = entity;\n    elementListeners.get(target)?.forEach(listener => listener(target));\n  });\n}\n\n// Delay create ResizeObserver since it's not supported in server side\nlet observer;\nfunction ensureResizeObserver() {\n  if (!observer) {\n    observer = new ResizeObserver(onResize);\n  }\n  return observer;\n}\n\n// Dev env only\nexport const _el = process.env.NODE_ENV !== 'production' ? elementListeners : null; // eslint-disable-line\nexport const _rs = process.env.NODE_ENV !== 'production' ? onResize : null; // eslint-disable-line\n\n// ============================== Observe ==============================\nexport function observe(element, callback) {\n  if (!elementListeners.has(element)) {\n    elementListeners.set(element, new Set());\n    ensureResizeObserver().observe(element);\n  }\n  elementListeners.get(element).add(callback);\n}\nexport function unobserve(element, callback) {\n  if (elementListeners.has(element)) {\n    elementListeners.get(element).delete(callback);\n    if (!elementListeners.get(element).size) {\n      ensureResizeObserver().unobserve(element);\n      elementListeners.delete(element);\n    }\n  }\n}","import * as React from 'react';\nimport { observe, unobserve } from \"./utils/observerUtil\";\nimport { useEvent } from '@rc-component/util';\nexport default function useResizeObserver(enabled, getTarget, onDelayResize, onSyncResize) {\n  // ============================= Size =============================\n  const sizeRef = React.useRef({\n    width: -1,\n    height: -1,\n    offsetWidth: -1,\n    offsetHeight: -1\n  });\n\n  // =========================== Observe ============================\n\n  // Handler\n  const onInternalResize = useEvent(target => {\n    const {\n      width,\n      height\n    } = target.getBoundingClientRect();\n    const {\n      offsetWidth,\n      offsetHeight\n    } = target;\n\n    /**\n     * Resize observer trigger when content size changed.\n     * In most case we just care about element size,\n     * let's use `boundary` instead of `contentRect` here to avoid shaking.\n     */\n    const fixedWidth = Math.floor(width);\n    const fixedHeight = Math.floor(height);\n    if (sizeRef.current.width !== fixedWidth || sizeRef.current.height !== fixedHeight || sizeRef.current.offsetWidth !== offsetWidth || sizeRef.current.offsetHeight !== offsetHeight) {\n      const size = {\n        width: fixedWidth,\n        height: fixedHeight,\n        offsetWidth,\n        offsetHeight\n      };\n      sizeRef.current = size;\n\n      // IE is strange, right?\n      const mergedOffsetWidth = offsetWidth === Math.round(width) ? width : offsetWidth;\n      const mergedOffsetHeight = offsetHeight === Math.round(height) ? height : offsetHeight;\n      const sizeInfo = {\n        ...size,\n        offsetWidth: mergedOffsetWidth,\n        offsetHeight: mergedOffsetHeight\n      };\n\n      // Call the callback immediately, let the caller decide whether to defer\n      // onResize(sizeInfo, target);\n      onSyncResize?.(sizeInfo, target);\n\n      // defer the callback but not defer to next frame\n      Promise.resolve().then(() => {\n        onDelayResize?.(sizeInfo, target);\n      });\n    }\n  });\n\n  // Dynamic observe\n  const isFuncTarget = typeof getTarget === 'function';\n  const funcTargetIdRef = React.useRef(0);\n  React.useEffect(() => {\n    const target = isFuncTarget ? getTarget() : getTarget;\n    if (target && enabled) {\n      observe(target, onInternalResize);\n    } else if (enabled && isFuncTarget) {\n      funcTargetIdRef.current += 1;\n    }\n    return () => {\n      if (target) {\n        unobserve(target, onInternalResize);\n      }\n    };\n  }, [enabled,\n  // If function target resolves after a parent render, the bumped ref value\n  // lets the next render re-run this effect without watching the function identity.\n  isFuncTarget ? funcTargetIdRef.current : getTarget]);\n}","import { getDOM } from \"@rc-component/util/es/Dom/findDOMNode\";\nimport { supportRef, useComposeRef, getNodeRef } from \"@rc-component/util/es/ref\";\nimport * as React from 'react';\nimport { CollectionContext } from \"../Collection\";\nimport useResizeObserver from \"../useResizeObserver\";\nfunction SingleObserver(props, ref) {\n  const {\n    children,\n    disabled,\n    onResize,\n    data\n  } = props;\n  const elementRef = React.useRef(null);\n  const onCollectionResize = React.useContext(CollectionContext);\n\n  // =========================== Children ===========================\n  const isRenderProps = typeof children === 'function';\n  const mergedChildren = isRenderProps ? children(elementRef) : children;\n\n  // ============================= Ref ==============================\n  const canRef = !isRenderProps && /*#__PURE__*/React.isValidElement(mergedChildren) && supportRef(mergedChildren);\n  const originRef = canRef ? getNodeRef(mergedChildren) : null;\n  const mergedRef = useComposeRef(originRef, elementRef);\n  const getDomElement = () => {\n    return getDOM(elementRef.current);\n  };\n  React.useImperativeHandle(ref, () => getDomElement());\n\n  // =========================== Observe ============================\n  useResizeObserver(!disabled, getDomElement, onResize, (sizeInfo, target) => {\n    onCollectionResize?.(sizeInfo, target, data);\n  });\n\n  // ============================ Render ============================\n  return canRef ? /*#__PURE__*/React.cloneElement(mergedChildren, {\n    ref: mergedRef\n  }) : mergedChildren;\n}\nconst RefSingleObserver = /*#__PURE__*/React.forwardRef(SingleObserver);\nif (process.env.NODE_ENV !== 'production') {\n  RefSingleObserver.displayName = 'SingleObserver';\n}\nexport default RefSingleObserver;","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport toArray from \"@rc-component/util/es/Children/toArray\";\nimport { warning } from \"@rc-component/util/es/warning\";\nimport SingleObserver from \"./SingleObserver\";\nimport { Collection } from \"./Collection\";\nconst INTERNAL_PREFIX_KEY = 'rc-observer-key';\nimport { _rs } from \"./utils/observerUtil\";\nexport { /** @private Test only for mock trigger resize event */\n_rs };\nexport { default as useResizeObserver } from \"./useResizeObserver\";\nfunction ResizeObserver(props, ref) {\n  const {\n    children\n  } = props;\n  const childNodes = typeof children === 'function' ? [children] : toArray(children);\n  if (process.env.NODE_ENV !== 'production') {\n    if (childNodes.length > 1) {\n      warning(false, 'Find more than one child node with `children` in ResizeObserver. Please use ResizeObserver.Collection instead.');\n    } else if (childNodes.length === 0) {\n      warning(false, '`children` of ResizeObserver is empty. Nothing is in observe.');\n    }\n  }\n  return childNodes.map((child, index) => {\n    const key = child?.key || `${INTERNAL_PREFIX_KEY}-${index}`;\n    return /*#__PURE__*/React.createElement(SingleObserver, _extends({}, props, {\n      key: key,\n      ref: index === 0 ? ref : undefined\n    }), child);\n  });\n}\nconst RefResizeObserver = /*#__PURE__*/React.forwardRef(ResizeObserver);\nif (process.env.NODE_ENV !== 'production') {\n  RefResizeObserver.displayName = 'ResizeObserver';\n}\nRefResizeObserver.Collection = Collection;\nexport default RefResizeObserver;","import * as React from 'react';\nexport const Context = /*#__PURE__*/React.createContext({});\nconst MotionProvider = props => {\n  const {\n    children,\n    ...rest\n  } = props;\n  const memoizedValue = React.useMemo(() => {\n    return {\n      motion: rest.motion\n    };\n  }, [rest.motion]);\n  return /*#__PURE__*/React.createElement(Context.Provider, {\n    value: memoizedValue\n  }, children);\n};\nexport default MotionProvider;","export const STATUS_NONE = 'none';\nexport const STATUS_APPEAR = 'appear';\nexport const STATUS_ENTER = 'enter';\nexport const STATUS_LEAVE = 'leave';\nexport const STEP_NONE = 'none';\nexport const STEP_PREPARE = 'prepare';\nexport const STEP_START = 'start';\nexport const STEP_ACTIVE = 'active';\nexport const STEP_ACTIVATED = 'end';\n/**\n * Used for disabled motion case.\n * Prepare stage will still work but start & active will be skipped.\n */\nexport const STEP_PREPARED = 'prepared';","import { canUseDom } from '@rc-component/util';\n// ================= Transition =================\n// Event wrapper. Copy from react source code\nfunction makePrefixMap(styleProp, eventName) {\n  const prefixes = {};\n  prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n  prefixes[`Webkit${styleProp}`] = `webkit${eventName}`;\n  prefixes[`Moz${styleProp}`] = `moz${eventName}`;\n  prefixes[`ms${styleProp}`] = `MS${eventName}`;\n  prefixes[`O${styleProp}`] = `o${eventName.toLowerCase()}`;\n  return prefixes;\n}\nexport function getVendorPrefixes(domSupport, win) {\n  const prefixes = {\n    animationend: makePrefixMap('Animation', 'AnimationEnd'),\n    transitionend: makePrefixMap('Transition', 'TransitionEnd')\n  };\n  if (domSupport) {\n    if (!('AnimationEvent' in win)) {\n      delete prefixes.animationend.animation;\n    }\n    if (!('TransitionEvent' in win)) {\n      delete prefixes.transitionend.transition;\n    }\n  }\n  return prefixes;\n}\nconst vendorPrefixes = getVendorPrefixes(canUseDom(), typeof window !== 'undefined' ? window : {});\nlet style = {};\nif (canUseDom()) {\n  ({\n    style\n  } = document.createElement('div'));\n}\nconst prefixedEventNames = {};\nexport function getVendorPrefixedEventName(eventName) {\n  if (prefixedEventNames[eventName]) {\n    return prefixedEventNames[eventName];\n  }\n  const prefixMap = vendorPrefixes[eventName];\n  if (prefixMap) {\n    const stylePropList = Object.keys(prefixMap);\n    const len = stylePropList.length;\n    for (let i = 0; i < len; i += 1) {\n      const styleProp = stylePropList[i];\n      if (Object.prototype.hasOwnProperty.call(prefixMap, styleProp) && styleProp in style) {\n        prefixedEventNames[eventName] = prefixMap[styleProp];\n        return prefixedEventNames[eventName];\n      }\n    }\n  }\n  return '';\n}\nconst internalAnimationEndName = getVendorPrefixedEventName('animationend');\nconst internalTransitionEndName = getVendorPrefixedEventName('transitionend');\nexport const supportTransition = !!(internalAnimationEndName && internalTransitionEndName);\nexport const animationEndName = internalAnimationEndName || 'animationend';\nexport const transitionEndName = internalTransitionEndName || 'transitionend';\nexport function getTransitionName(transitionName, transitionType) {\n  if (!transitionName) return null;\n  if (typeof transitionName === 'object') {\n    const type = transitionType.replace(/-\\w/g, match => match[1].toUpperCase());\n    return transitionName[type];\n  }\n  return `${transitionName}-${transitionType}`;\n}","import * as React from 'react';\nimport { useRef } from 'react';\nimport { animationEndName, transitionEndName } from \"../util/motion\";\nexport default (onInternalMotionEnd => {\n  const cacheElementRef = useRef();\n\n  // Remove events\n  function removeMotionEvents(element) {\n    if (element) {\n      element.removeEventListener(transitionEndName, onInternalMotionEnd);\n      element.removeEventListener(animationEndName, onInternalMotionEnd);\n    }\n  }\n\n  // Patch events\n  function patchMotionEvents(element) {\n    if (cacheElementRef.current && cacheElementRef.current !== element) {\n      removeMotionEvents(cacheElementRef.current);\n    }\n    if (element && element !== cacheElementRef.current) {\n      element.addEventListener(transitionEndName, onInternalMotionEnd);\n      element.addEventListener(animationEndName, onInternalMotionEnd);\n\n      // Save as cache in case dom removed trigger by `motionDeadline`\n      cacheElementRef.current = element;\n    }\n  }\n\n  // Clean up when removed\n  React.useEffect(() => () => {\n    removeMotionEvents(cacheElementRef.current);\n    cacheElementRef.current = null;\n  }, []);\n  return [patchMotionEvents, removeMotionEvents];\n});","import { canUseDom } from '@rc-component/util';\nimport { useEffect, useLayoutEffect } from 'react';\n\n// It's safe to use `useLayoutEffect` but the warning is annoying\nconst useIsomorphicLayoutEffect = canUseDom() ? useLayoutEffect : useEffect;\nexport default useIsomorphicLayoutEffect;","import { raf } from '@rc-component/util';\nimport * as React from 'react';\nexport default (() => {\n  const nextFrameRef = React.useRef(null);\n  function cancelNextFrame() {\n    raf.cancel(nextFrameRef.current);\n  }\n  function nextFrame(callback, delay = 2) {\n    cancelNextFrame();\n    const nextFrameId = raf(() => {\n      if (delay <= 1) {\n        callback({\n          isCanceled: () => nextFrameId !== nextFrameRef.current\n        });\n      } else {\n        nextFrame(callback, delay - 1);\n      }\n    });\n    nextFrameRef.current = nextFrameId;\n  }\n  React.useEffect(() => () => {\n    cancelNextFrame();\n  }, []);\n  return [nextFrame, cancelNextFrame];\n});","import { useState } from '@rc-component/util';\nimport * as React from 'react';\nimport { STEP_ACTIVATED, STEP_ACTIVE, STEP_NONE, STEP_PREPARE, STEP_PREPARED, STEP_START } from \"../interface\";\nimport useIsomorphicLayoutEffect from \"./useIsomorphicLayoutEffect\";\nimport useNextFrame from \"./useNextFrame\";\nconst FULL_STEP_QUEUE = [STEP_PREPARE, STEP_START, STEP_ACTIVE, STEP_ACTIVATED];\nconst SIMPLE_STEP_QUEUE = [STEP_PREPARE, STEP_PREPARED];\n\n/** Skip current step */\nexport const SkipStep = false;\n/** Current step should be update in */\nexport const DoStep = true;\nexport function isActive(step) {\n  return step === STEP_ACTIVE || step === STEP_ACTIVATED;\n}\nexport default ((status, prepareOnly, callback) => {\n  const [step, setStep] = useState(STEP_NONE);\n  const [nextFrame, cancelNextFrame] = useNextFrame();\n  function startQueue() {\n    setStep(STEP_PREPARE, true);\n  }\n  const STEP_QUEUE = prepareOnly ? SIMPLE_STEP_QUEUE : FULL_STEP_QUEUE;\n  useIsomorphicLayoutEffect(() => {\n    if (step !== STEP_NONE && step !== STEP_ACTIVATED) {\n      const index = STEP_QUEUE.indexOf(step);\n      const nextStep = STEP_QUEUE[index + 1];\n      const result = callback(step);\n      if (result === SkipStep) {\n        // Skip when no needed\n        setStep(nextStep, true);\n      } else if (nextStep) {\n        // Do as frame for step update\n        nextFrame(info => {\n          function doNext() {\n            // Skip since current queue is ood\n            if (info.isCanceled()) return;\n            setStep(nextStep, true);\n          }\n          if (result === true) {\n            doNext();\n          } else {\n            // Only promise should be async\n            Promise.resolve(result).then(doNext);\n          }\n        });\n      }\n    }\n  }, [status, step]);\n  React.useEffect(() => () => {\n    cancelNextFrame();\n  }, []);\n  return [startQueue, step];\n});","import { useEvent, useSyncState } from '@rc-component/util';\nimport * as React from 'react';\nimport { useEffect, useRef } from 'react';\nimport { STATUS_APPEAR, STATUS_ENTER, STATUS_LEAVE, STATUS_NONE, STEP_ACTIVE, STEP_PREPARE, STEP_PREPARED, STEP_START } from \"../interface\";\nimport useDomMotionEvents from \"./useDomMotionEvents\";\nimport useIsomorphicLayoutEffect from \"./useIsomorphicLayoutEffect\";\nimport useStepQueue, { DoStep, isActive, SkipStep } from \"./useStepQueue\";\nexport default function useStatus(supportMotion, visible, getElement, {\n  motionEnter = true,\n  motionAppear = true,\n  motionLeave = true,\n  motionDeadline,\n  motionLeaveImmediately,\n  onAppearPrepare,\n  onEnterPrepare,\n  onLeavePrepare,\n  onAppearStart,\n  onEnterStart,\n  onLeaveStart,\n  onAppearActive,\n  onEnterActive,\n  onLeaveActive,\n  onAppearEnd,\n  onEnterEnd,\n  onLeaveEnd,\n  onVisibleChanged\n}) {\n  // Used for outer render usage to avoid `visible: false & status: none` to render nothing\n  const [asyncVisible, setAsyncVisible] = React.useState();\n  const [getStatus, setStatus] = useSyncState(STATUS_NONE);\n  const [style, setStyle] = React.useState([null, null]);\n  const currentStatus = getStatus();\n  const mountedRef = useRef(false);\n  const deadlineRef = useRef(null);\n\n  // =========================== Dom Node ===========================\n  function getDomElement() {\n    return getElement();\n  }\n\n  // ========================== Motion End ==========================\n  const activeRef = useRef(false);\n\n  /**\n   * Clean up status & style\n   */\n  function updateMotionEndStatus() {\n    setStatus(STATUS_NONE);\n    setStyle([null, null]);\n  }\n  const onInternalMotionEnd = useEvent(event => {\n    const status = getStatus();\n    // Do nothing since not in any transition status.\n    // This may happen when `motionDeadline` trigger.\n    if (status === STATUS_NONE) {\n      return;\n    }\n    const element = getDomElement();\n    if (event && !event.deadline && event.target !== element) {\n      // event exists\n      // not initiated by deadline\n      // transitionEnd not fired by inner elements\n      return;\n    }\n    const currentActive = activeRef.current;\n    let canEnd;\n    if (status === STATUS_APPEAR && currentActive) {\n      canEnd = onAppearEnd?.(element, event);\n    } else if (status === STATUS_ENTER && currentActive) {\n      canEnd = onEnterEnd?.(element, event);\n    } else if (status === STATUS_LEAVE && currentActive) {\n      canEnd = onLeaveEnd?.(element, event);\n    }\n\n    // Only update status when `canEnd` and not destroyed\n    if (currentActive && canEnd !== false) {\n      updateMotionEndStatus();\n    }\n  });\n  const [patchMotionEvents] = useDomMotionEvents(onInternalMotionEnd);\n\n  // ============================= Step =============================\n  const getEventHandlers = targetStatus => {\n    switch (targetStatus) {\n      case STATUS_APPEAR:\n        return {\n          [STEP_PREPARE]: onAppearPrepare,\n          [STEP_START]: onAppearStart,\n          [STEP_ACTIVE]: onAppearActive\n        };\n      case STATUS_ENTER:\n        return {\n          [STEP_PREPARE]: onEnterPrepare,\n          [STEP_START]: onEnterStart,\n          [STEP_ACTIVE]: onEnterActive\n        };\n      case STATUS_LEAVE:\n        return {\n          [STEP_PREPARE]: onLeavePrepare,\n          [STEP_START]: onLeaveStart,\n          [STEP_ACTIVE]: onLeaveActive\n        };\n      default:\n        return {};\n    }\n  };\n  const eventHandlers = React.useMemo(() => getEventHandlers(currentStatus), [currentStatus]);\n  const [startStep, step] = useStepQueue(currentStatus, !supportMotion, newStep => {\n    // Only prepare step can be skip\n    if (newStep === STEP_PREPARE) {\n      const onPrepare = eventHandlers[STEP_PREPARE];\n      if (!onPrepare) {\n        return SkipStep;\n      }\n      return onPrepare(getDomElement());\n    }\n\n    // Rest step is sync update\n    if (newStep in eventHandlers) {\n      setStyle([eventHandlers[newStep]?.(getDomElement(), null) || null, newStep]);\n    }\n    if (newStep === STEP_ACTIVE && currentStatus !== STATUS_NONE) {\n      // Patch events when motion needed\n      patchMotionEvents(getDomElement());\n      if (motionDeadline > 0) {\n        clearTimeout(deadlineRef.current);\n        deadlineRef.current = setTimeout(() => {\n          onInternalMotionEnd({\n            deadline: true\n          });\n        }, motionDeadline);\n      }\n    }\n    if (newStep === STEP_PREPARED) {\n      updateMotionEndStatus();\n    }\n    return DoStep;\n  });\n  const active = isActive(step);\n  activeRef.current = active;\n\n  // ============================ Status ============================\n  const visibleRef = useRef(null);\n\n  // Update with new status\n  useIsomorphicLayoutEffect(() => {\n    // When use Suspense, the `visible` will repeat trigger,\n    // But not real change of the `visible`, we need to skip it.\n    // https://github.com/ant-design/ant-design/issues/44379\n    if (mountedRef.current && visibleRef.current === visible) {\n      return;\n    }\n    setAsyncVisible(visible);\n    const isMounted = mountedRef.current;\n    mountedRef.current = true;\n\n    // if (!supportMotion) {\n    //   return;\n    // }\n\n    let nextStatus;\n\n    // Appear\n    if (!isMounted && visible && motionAppear) {\n      nextStatus = STATUS_APPEAR;\n    }\n\n    // Enter\n    if (isMounted && visible && motionEnter) {\n      nextStatus = STATUS_ENTER;\n    }\n\n    // Leave\n    if (isMounted && !visible && motionLeave || !isMounted && motionLeaveImmediately && !visible && motionLeave) {\n      nextStatus = STATUS_LEAVE;\n    }\n    const nextEventHandlers = getEventHandlers(nextStatus);\n\n    // Update to next status\n    if (nextStatus && (supportMotion || nextEventHandlers[STEP_PREPARE])) {\n      setStatus(nextStatus);\n      startStep();\n    } else {\n      // Set back in case no motion but prev status has prepare step\n      setStatus(STATUS_NONE);\n    }\n    visibleRef.current = visible;\n  }, [visible]);\n\n  // ============================ Effect ============================\n  // Reset when motion changed\n  useEffect(() => {\n    if (\n    // Cancel appear\n    currentStatus === STATUS_APPEAR && !motionAppear ||\n    // Cancel enter\n    currentStatus === STATUS_ENTER && !motionEnter ||\n    // Cancel leave\n    currentStatus === STATUS_LEAVE && !motionLeave) {\n      setStatus(STATUS_NONE);\n    }\n  }, [motionAppear, motionEnter, motionLeave]);\n  useEffect(() => () => {\n    mountedRef.current = false;\n    clearTimeout(deadlineRef.current);\n  }, []);\n\n  // Trigger `onVisibleChanged`\n  const firstMountChangeRef = React.useRef(false);\n  useEffect(() => {\n    // [visible & motion not end] => [!visible & motion end] still need trigger onVisibleChanged\n    if (asyncVisible) {\n      firstMountChangeRef.current = true;\n    }\n    if (asyncVisible !== undefined && currentStatus === STATUS_NONE) {\n      // Skip first render is invisible since it's nothing changed\n      if (firstMountChangeRef.current || asyncVisible) {\n        onVisibleChanged?.(asyncVisible);\n      }\n      firstMountChangeRef.current = true;\n    }\n  }, [asyncVisible, currentStatus]);\n\n  // ============================ Styles ============================\n  let mergedStyle = style[0];\n  if (eventHandlers[STEP_PREPARE] && step === STEP_START) {\n    mergedStyle = {\n      transition: 'none',\n      ...mergedStyle\n    };\n  }\n  const styleStep = style[1];\n  return [getStatus, step, mergedStyle, asyncVisible ?? visible,\n  // Appear Check\n  !mountedRef.current && currentStatus === STATUS_NONE && supportMotion && motionAppear ? 'NONE' :\n  // Enter or Leave check\n  step === STEP_START || step === STEP_ACTIVE ? styleStep === step : true];\n}","/* eslint-disable react/default-props-match-prop-types, react/no-multi-comp, react/prop-types */\nimport { composeRef, getDOM, getNodeRef, supportNodeRef } from '@rc-component/util';\nimport { clsx } from 'clsx';\nimport * as React from 'react';\nimport { useRef } from 'react';\nimport { Context } from \"./context\";\nimport useStatus from \"./hooks/useStatus\";\nimport { isActive } from \"./hooks/useStepQueue\";\nimport { STATUS_NONE, STEP_PREPARE, STEP_START } from \"./interface\";\nimport { getTransitionName, supportTransition } from \"./util/motion\";\nexport function isRefNotConsumed(children) {\n  return children?.length < 2;\n}\n\n/**\n * `transitionSupport` is used for none transition test case.\n * Default we use browser transition event support check.\n */\nexport function genCSSMotion(config) {\n  let transitionSupport = config;\n  if (typeof config === 'object') {\n    ({\n      transitionSupport\n    } = config);\n  }\n  function isSupportTransition(props, contextMotion) {\n    return !!(props.motionName && transitionSupport && contextMotion !== false);\n  }\n  const CSSMotion = /*#__PURE__*/React.forwardRef((props, ref) => {\n    const {\n      // Default config\n      visible = true,\n      removeOnLeave = true,\n      forceRender,\n      children,\n      motionName,\n      leavedClassName,\n      eventProps\n    } = props;\n    const {\n      motion: contextMotion\n    } = React.useContext(Context);\n    const supportMotion = isSupportTransition(props, contextMotion);\n\n    // Ref to the react node, it may be a HTMLElement\n    const nodeRef = useRef();\n    function getDomElement() {\n      return getDOM(nodeRef.current);\n    }\n    const [getStatus, statusStep, statusStyle, mergedVisible, styleReady] = useStatus(supportMotion, visible, getDomElement, props);\n    const status = getStatus();\n\n    // Record whether content has rendered\n    // Will return null for un-rendered even when `removeOnLeave={false}`\n    const renderedRef = React.useRef(mergedVisible);\n    if (mergedVisible) {\n      renderedRef.current = true;\n    }\n\n    // ====================== Refs ======================\n    const refObj = React.useMemo(() => {\n      const obj = {};\n      Object.defineProperties(obj, {\n        nativeElement: {\n          enumerable: true,\n          get: getDomElement\n        },\n        inMotion: {\n          enumerable: true,\n          get: () => () => getStatus() !== STATUS_NONE\n        },\n        enableMotion: {\n          enumerable: true,\n          get: () => () => supportMotion\n        }\n      });\n      return obj;\n    }, []);\n\n    // We lock `deps` here since function return object\n    // will repeat trigger ref from `refConfig` -> `null` -> `refConfig`\n    React.useImperativeHandle(ref, () => refObj, []);\n\n    // ===================== Render =====================\n    // return motionChildren as React.ReactElement;\n    const idRef = React.useRef(0);\n    if (styleReady) {\n      idRef.current += 1;\n    }\n\n    // We should render children when motionStyle is sync with stepStatus\n    const returnNode = React.useMemo(() => {\n      if (styleReady === 'NONE') {\n        return null;\n      }\n      let motionChildren;\n      const mergedProps = {\n        ...eventProps,\n        visible\n      };\n      if (!children) {\n        // No children\n        motionChildren = null;\n      } else if (status === STATUS_NONE) {\n        // Stable children\n        if (mergedVisible) {\n          motionChildren = children({\n            ...mergedProps\n          }, nodeRef);\n        } else if (!removeOnLeave && renderedRef.current && leavedClassName) {\n          motionChildren = children({\n            ...mergedProps,\n            className: leavedClassName\n          }, nodeRef);\n        } else if (forceRender || !removeOnLeave && !leavedClassName) {\n          motionChildren = children({\n            ...mergedProps,\n            style: {\n              display: 'none'\n            }\n          }, nodeRef);\n        } else {\n          motionChildren = null;\n        }\n      } else {\n        // In motion\n        let statusSuffix;\n        if (statusStep === STEP_PREPARE) {\n          statusSuffix = 'prepare';\n        } else if (isActive(statusStep)) {\n          statusSuffix = 'active';\n        } else if (statusStep === STEP_START) {\n          statusSuffix = 'start';\n        }\n        const motionCls = getTransitionName(motionName, `${status}-${statusSuffix}`);\n        motionChildren = children({\n          ...mergedProps,\n          className: clsx(getTransitionName(motionName, status), {\n            [motionCls]: motionCls && statusSuffix,\n            [motionName]: typeof motionName === 'string'\n          }),\n          style: statusStyle\n        }, nodeRef);\n      }\n      return motionChildren;\n    }, [idRef.current]);\n    if (isRefNotConsumed(children) && supportNodeRef(returnNode)) {\n      const originNodeRef = getNodeRef(returnNode);\n      if (originNodeRef !== nodeRef) {\n        return /*#__PURE__*/React.cloneElement(returnNode, {\n          ref: composeRef(originNodeRef, nodeRef)\n        });\n      }\n    }\n    return returnNode;\n  });\n  CSSMotion.displayName = 'CSSMotion';\n  return CSSMotion;\n}\nexport default genCSSMotion(supportTransition);","export const STATUS_ADD = 'add';\nexport const STATUS_KEEP = 'keep';\nexport const STATUS_REMOVE = 'remove';\nexport const STATUS_REMOVED = 'removed';\nexport function wrapKeyToObject(key) {\n  let keyObj;\n  if (key && typeof key === 'object' && 'key' in key) {\n    keyObj = key;\n  } else {\n    keyObj = {\n      key: key\n    };\n  }\n  return {\n    ...keyObj,\n    key: String(keyObj.key)\n  };\n}\nexport function parseKeys(keys = []) {\n  return keys.map(wrapKeyToObject);\n}\nexport function diffKeys(prevKeys = [], currentKeys = []) {\n  let list = [];\n  let currentIndex = 0;\n  const currentLen = currentKeys.length;\n  const prevKeyObjects = parseKeys(prevKeys);\n  const currentKeyObjects = parseKeys(currentKeys);\n\n  // Check prev keys to insert or keep\n  prevKeyObjects.forEach(keyObj => {\n    let hit = false;\n    for (let i = currentIndex; i < currentLen; i += 1) {\n      const currentKeyObj = currentKeyObjects[i];\n      if (currentKeyObj.key === keyObj.key) {\n        // New added keys should add before current key\n        if (currentIndex < i) {\n          list = list.concat(currentKeyObjects.slice(currentIndex, i).map(obj => ({\n            ...obj,\n            status: STATUS_ADD\n          })));\n          currentIndex = i;\n        }\n        list.push({\n          ...currentKeyObj,\n          status: STATUS_KEEP\n        });\n        currentIndex += 1;\n        hit = true;\n        break;\n      }\n    }\n\n    // If not hit, it means key is removed\n    if (!hit) {\n      list.push({\n        ...keyObj,\n        status: STATUS_REMOVE\n      });\n    }\n  });\n\n  // Add rest to the list\n  if (currentIndex < currentLen) {\n    list = list.concat(currentKeyObjects.slice(currentIndex).map(obj => ({\n      ...obj,\n      status: STATUS_ADD\n    })));\n  }\n\n  /**\n   * Merge same key when it remove and add again:\n   *    [1 - add, 2 - keep, 1 - remove] -> [1 - keep, 2 - keep]\n   */\n  const keys = {};\n  list.forEach(({\n    key\n  }) => {\n    keys[key] = (keys[key] || 0) + 1;\n  });\n  const duplicatedKeys = Object.keys(keys).filter(key => keys[key] > 1);\n  duplicatedKeys.forEach(matchKey => {\n    // Remove `STATUS_REMOVE` node.\n    list = list.filter(({\n      key,\n      status\n    }) => key !== matchKey || status !== STATUS_REMOVE);\n\n    // Update `STATUS_ADD` to `STATUS_KEEP`\n    list.forEach(node => {\n      if (node.key === matchKey) {\n        // eslint-disable-next-line no-param-reassign\n        node.status = STATUS_KEEP;\n      }\n    });\n  });\n  return list;\n}","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/* eslint react/prop-types: 0 */\nimport * as React from 'react';\nimport OriginCSSMotion, { isRefNotConsumed } from \"./CSSMotion\";\nimport { diffKeys, parseKeys, STATUS_ADD, STATUS_KEEP, STATUS_REMOVE, STATUS_REMOVED } from \"./util/diff\";\nimport { supportTransition } from \"./util/motion\";\nconst MOTION_PROP_NAMES = ['eventProps', 'visible', 'children', 'motionName', 'motionAppear', 'motionEnter', 'motionLeave', 'motionLeaveImmediately', 'motionDeadline', 'removeOnLeave', 'leavedClassName', 'onAppearPrepare', 'onAppearStart', 'onAppearActive', 'onAppearEnd', 'onEnterStart', 'onEnterActive', 'onEnterEnd', 'onLeaveStart', 'onLeaveActive', 'onLeaveEnd'];\n/**\n * Generate a CSSMotionList component with config\n * @param transitionSupport No need since CSSMotionList no longer depends on transition support\n * @param CSSMotion CSSMotion component\n */\nexport function genCSSMotionList(transitionSupport, CSSMotion = OriginCSSMotion) {\n  class CSSMotionList extends React.Component {\n    static defaultProps = {\n      component: 'div'\n    };\n    state = {\n      keyEntities: []\n    };\n    static getDerivedStateFromProps({\n      keys\n    }, {\n      keyEntities\n    }) {\n      const parsedKeyObjects = parseKeys(keys);\n      const mixedKeyEntities = diffKeys(keyEntities, parsedKeyObjects);\n      return {\n        keyEntities: mixedKeyEntities.filter(entity => {\n          const prevEntity = keyEntities.find(({\n            key\n          }) => entity.key === key);\n\n          // Remove if already mark as removed\n          if (prevEntity && prevEntity.status === STATUS_REMOVED && entity.status === STATUS_REMOVE) {\n            return false;\n          }\n          return true;\n        })\n      };\n    }\n\n    // ZombieJ: Return the count of rest keys. It's safe to refactor if need more info.\n    removeKey = removeKey => {\n      this.setState(prevState => {\n        const nextKeyEntities = prevState.keyEntities.map(entity => {\n          if (entity.key !== removeKey) return entity;\n          return {\n            ...entity,\n            status: STATUS_REMOVED\n          };\n        });\n        return {\n          keyEntities: nextKeyEntities\n        };\n      }, () => {\n        const {\n          keyEntities\n        } = this.state;\n        const restKeysCount = keyEntities.filter(({\n          status\n        }) => status !== STATUS_REMOVED).length;\n        if (restKeysCount === 0 && this.props.onAllRemoved) {\n          this.props.onAllRemoved();\n        }\n      });\n    };\n    render() {\n      const {\n        keyEntities\n      } = this.state;\n      const {\n        component,\n        children,\n        onVisibleChanged,\n        onAllRemoved,\n        ...restProps\n      } = this.props;\n      const Component = component || React.Fragment;\n      const motionProps = {};\n      MOTION_PROP_NAMES.forEach(prop => {\n        motionProps[prop] = restProps[prop];\n        delete restProps[prop];\n      });\n      delete restProps.keys;\n      return /*#__PURE__*/React.createElement(Component, restProps, keyEntities.map(({\n        status,\n        ...eventProps\n      }, index) => {\n        const visible = status === STATUS_ADD || status === STATUS_KEEP;\n        return /*#__PURE__*/React.createElement(CSSMotion, _extends({}, motionProps, {\n          key: eventProps.key,\n          visible: visible,\n          eventProps: eventProps,\n          onVisibleChanged: changedVisible => {\n            onVisibleChanged?.(changedVisible, {\n              key: eventProps.key\n            });\n            if (!changedVisible) {\n              this.removeKey(eventProps.key);\n            }\n          }\n        }), isRefNotConsumed(children) ? props => children({\n          ...props,\n          index\n        }) : (props, ref) => children({\n          ...props,\n          index\n        }, ref));\n      }));\n    }\n  }\n  return CSSMotionList;\n}\nexport default genCSSMotionList(supportTransition);","import CSSMotion, { genCSSMotion } from \"./CSSMotion\";\nimport CSSMotionList from \"./CSSMotionList\";\nexport { default as Provider } from \"./context\";\nexport { CSSMotionList, genCSSMotion };\nexport default CSSMotion;","import { clsx } from 'clsx';\nimport * as React from 'react';\nexport default function Arrow(props) {\n  const {\n    prefixCls,\n    align,\n    arrow,\n    arrowPos\n  } = props;\n  const {\n    className,\n    content,\n    style\n  } = arrow || {};\n  const {\n    x = 0,\n    y = 0\n  } = arrowPos;\n  const arrowRef = React.useRef(null);\n\n  // Skip if no align\n  if (!align || !align.points) {\n    return null;\n  }\n  const alignStyle = {\n    position: 'absolute'\n  };\n\n  // Skip if no need to align\n  if (align.autoArrow !== false) {\n    const popupPoints = align.points[0];\n    const targetPoints = align.points[1];\n    const popupTB = popupPoints[0];\n    const popupLR = popupPoints[1];\n    const targetTB = targetPoints[0];\n    const targetLR = targetPoints[1];\n\n    // Top & Bottom\n    if (popupTB === targetTB || !['t', 'b'].includes(popupTB)) {\n      alignStyle.top = y;\n    } else if (popupTB === 't') {\n      alignStyle.top = 0;\n    } else {\n      alignStyle.bottom = 0;\n    }\n\n    // Left & Right\n    if (popupLR === targetLR || !['l', 'r'].includes(popupLR)) {\n      alignStyle.left = x;\n    } else if (popupLR === 'l') {\n      alignStyle.left = 0;\n    } else {\n      alignStyle.right = 0;\n    }\n  }\n  return /*#__PURE__*/React.createElement(\"div\", {\n    ref: arrowRef,\n    className: clsx(`${prefixCls}-arrow`, className),\n    style: {\n      ...alignStyle,\n      ...style\n    }\n  }, content);\n}","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport { clsx } from 'clsx';\nimport CSSMotion from '@rc-component/motion';\nimport * as React from 'react';\nexport default function Mask(props) {\n  const {\n    prefixCls,\n    open,\n    zIndex,\n    mask,\n    motion,\n    mobile\n  } = props;\n  if (!mask) {\n    return null;\n  }\n  return /*#__PURE__*/React.createElement(CSSMotion, _extends({}, motion, {\n    motionAppear: true,\n    visible: open,\n    removeOnLeave: true\n  }), ({\n    className\n  }) => /*#__PURE__*/React.createElement(\"div\", {\n    style: {\n      zIndex\n    },\n    className: clsx(`${prefixCls}-mask`, mobile && `${prefixCls}-mobile-mask`, className)\n  }));\n}","import * as React from 'react';\nconst PopupContent = /*#__PURE__*/React.memo(({\n  children\n}) => children, (_, next) => next.cache);\nif (process.env.NODE_ENV !== 'production') {\n  PopupContent.displayName = 'PopupContent';\n}\nexport default PopupContent;","export default function useOffsetStyle(isMobile, ready, open, align, offsetR, offsetB, offsetX, offsetY) {\n  // >>>>> Offset\n  const AUTO = 'auto';\n  const offsetStyle = isMobile ? {} : {\n    left: '-1000vw',\n    top: '-1000vh',\n    right: AUTO,\n    bottom: AUTO\n  };\n\n  // Set align style\n  if (!isMobile && (ready || !open)) {\n    const {\n      points\n    } = align;\n    const dynamicInset = align.dynamicInset || align._experimental?.dynamicInset;\n    const alignRight = dynamicInset && points[0][1] === 'r';\n    const alignBottom = dynamicInset && points[0][0] === 'b';\n    if (alignRight) {\n      offsetStyle.right = offsetR;\n      offsetStyle.left = AUTO;\n    } else {\n      offsetStyle.left = offsetX;\n      offsetStyle.right = AUTO;\n    }\n    if (alignBottom) {\n      offsetStyle.bottom = offsetB;\n      offsetStyle.top = AUTO;\n    } else {\n      offsetStyle.top = offsetY;\n      offsetStyle.bottom = AUTO;\n    }\n  }\n  return offsetStyle;\n}","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport { clsx } from 'clsx';\nimport CSSMotion from '@rc-component/motion';\nimport ResizeObserver from '@rc-component/resize-observer';\nimport { composeRef, useLayoutEffect } from '@rc-component/util';\nimport * as React from 'react';\nimport Arrow from \"./Arrow\";\nimport Mask from \"./Mask\";\nimport PopupContent from \"./PopupContent\";\nimport useOffsetStyle from \"../hooks/useOffsetStyle\";\nimport { useEvent } from '@rc-component/util';\nconst Popup = /*#__PURE__*/React.forwardRef((props, ref) => {\n  const {\n    onEsc,\n    popup,\n    className,\n    prefixCls,\n    style,\n    target,\n    onVisibleChanged,\n    // Open\n    open,\n    keepDom,\n    fresh,\n    // Click\n    onClick,\n    // Mask\n    mask,\n    // Arrow\n    arrow,\n    arrowPos,\n    align,\n    // Motion\n    motion,\n    maskMotion,\n    // Mobile\n    mobile,\n    // Portal\n    forceRender,\n    getPopupContainer,\n    autoDestroy,\n    portal: Portal,\n    children,\n    zIndex,\n    onMouseEnter,\n    onMouseLeave,\n    onPointerEnter,\n    onPointerDownCapture,\n    ready,\n    offsetX,\n    offsetY,\n    offsetR,\n    offsetB,\n    onAlign,\n    onPrepare,\n    // Resize\n    onResize,\n    stretch,\n    targetWidth,\n    targetHeight\n  } = props;\n  const popupContent = typeof popup === 'function' ? popup() : popup;\n\n  // We can not remove holder only when motion finished.\n  const isNodeVisible = open || keepDom;\n\n  // ========================= Mobile =========================\n  const isMobile = !!mobile;\n\n  // ========================== Mask ==========================\n  const [mergedMask, mergedMaskMotion, mergedPopupMotion] = React.useMemo(() => {\n    if (mobile) {\n      return [mobile.mask, mobile.maskMotion, mobile.motion];\n    }\n    return [mask, maskMotion, motion];\n  }, [mobile, mask, maskMotion, motion]);\n\n  // ======================= Container ========================\n  const getPopupContainerNeedParams = getPopupContainer?.length > 0;\n  const [show, setShow] = React.useState(!getPopupContainer || !getPopupContainerNeedParams);\n\n  // Delay to show since `getPopupContainer` need target element\n  useLayoutEffect(() => {\n    if (!show && getPopupContainerNeedParams && target) {\n      setShow(true);\n    }\n  }, [show, getPopupContainerNeedParams, target]);\n\n  // ========================= Resize =========================\n  const onInternalResize = useEvent((size, ele) => {\n    onResize?.(size, ele);\n    onAlign();\n  });\n\n  // ========================= Styles =========================\n  const offsetStyle = useOffsetStyle(isMobile, ready, open, align, offsetR, offsetB, offsetX, offsetY);\n\n  // ========================= Render =========================\n  if (!show) {\n    return null;\n  }\n\n  // >>>>> Misc\n  const miscStyle = {};\n  if (stretch) {\n    if (stretch.includes('height') && targetHeight) {\n      miscStyle.height = targetHeight;\n    } else if (stretch.includes('minHeight') && targetHeight) {\n      miscStyle.minHeight = targetHeight;\n    }\n    if (stretch.includes('width') && targetWidth) {\n      miscStyle.width = targetWidth;\n    } else if (stretch.includes('minWidth') && targetWidth) {\n      miscStyle.minWidth = targetWidth;\n    }\n  }\n  if (!open) {\n    miscStyle.pointerEvents = 'none';\n  }\n  return /*#__PURE__*/React.createElement(Portal, {\n    open: forceRender || isNodeVisible,\n    getContainer: getPopupContainer && (() => getPopupContainer(target)),\n    autoDestroy: autoDestroy,\n    onEsc: onEsc\n  }, /*#__PURE__*/React.createElement(Mask, {\n    prefixCls: prefixCls,\n    open: open,\n    zIndex: zIndex,\n    mask: mergedMask,\n    motion: mergedMaskMotion,\n    mobile: isMobile\n  }), /*#__PURE__*/React.createElement(ResizeObserver, {\n    onResize: onInternalResize,\n    disabled: !open\n  }, resizeObserverRef => {\n    return /*#__PURE__*/React.createElement(CSSMotion, _extends({\n      motionAppear: true,\n      motionEnter: true,\n      motionLeave: true,\n      removeOnLeave: false,\n      forceRender: forceRender,\n      leavedClassName: `${prefixCls}-hidden`\n    }, mergedPopupMotion, {\n      onAppearPrepare: onPrepare,\n      onEnterPrepare: onPrepare,\n      visible: open,\n      onVisibleChanged: nextVisible => {\n        motion?.onVisibleChanged?.(nextVisible);\n        onVisibleChanged(nextVisible);\n      }\n    }), ({\n      className: motionClassName,\n      style: motionStyle\n    }, motionRef) => {\n      const cls = clsx(prefixCls, motionClassName, className, {\n        [`${prefixCls}-mobile`]: isMobile\n      });\n      return /*#__PURE__*/React.createElement(\"div\", {\n        ref: composeRef(resizeObserverRef, ref, motionRef),\n        className: cls,\n        style: {\n          '--arrow-x': `${arrowPos.x || 0}px`,\n          '--arrow-y': `${arrowPos.y || 0}px`,\n          ...offsetStyle,\n          ...miscStyle,\n          ...motionStyle,\n          boxSizing: 'border-box',\n          zIndex,\n          ...style\n        },\n        onMouseEnter: onMouseEnter,\n        onMouseLeave: onMouseLeave,\n        onPointerEnter: onPointerEnter,\n        onClick: onClick,\n        onPointerDownCapture: onPointerDownCapture\n      }, arrow && /*#__PURE__*/React.createElement(Arrow, {\n        prefixCls: prefixCls,\n        arrow: arrow,\n        arrowPos: arrowPos,\n        align: align\n      }), /*#__PURE__*/React.createElement(PopupContent, {\n        cache: !open && !fresh\n      }, popupContent));\n    });\n  }), children);\n});\nif (process.env.NODE_ENV !== 'production') {\n  Popup.displayName = 'Popup';\n}\nexport default Popup;","import * as React from 'react';\n\n// ===================== Nest =====================\n\nconst TriggerContext = /*#__PURE__*/React.createContext(null);\nexport default TriggerContext;\n\n// ==================== Unique ====================\n\nexport const UniqueContext = /*#__PURE__*/React.createContext(null);","import * as React from 'react';\nfunction toArray(val) {\n  return val ? Array.isArray(val) ? val : [val] : [];\n}\nexport default function useAction(action, showAction, hideAction) {\n  return React.useMemo(() => {\n    const mergedShowAction = toArray(showAction ?? action);\n    const mergedHideAction = toArray(hideAction ?? action);\n    const showActionSet = new Set(mergedShowAction);\n    const hideActionSet = new Set(mergedHideAction);\n    if (showActionSet.has('hover') && !showActionSet.has('click')) {\n      showActionSet.add('touch');\n    }\n    if (hideActionSet.has('hover') && !hideActionSet.has('click')) {\n      hideActionSet.add('touch');\n    }\n    return [showActionSet, hideActionSet];\n  }, [action, showAction, hideAction]);\n}","function isPointsEq(a1 = [], a2 = [], isAlignPoint) {\n  const getVal = (a, index) => a[index] || '';\n  if (isAlignPoint) {\n    return getVal(a1, 0) === getVal(a2, 0);\n  }\n  return getVal(a1, 0) === getVal(a2, 0) && getVal(a1, 1) === getVal(a2, 1);\n}\nexport function getAlignPopupClassName(builtinPlacements, prefixCls, align, isAlignPoint) {\n  const {\n    points\n  } = align;\n  const placements = Object.keys(builtinPlacements);\n  for (let i = 0; i < placements.length; i += 1) {\n    const placement = placements[i];\n    if (isPointsEq(builtinPlacements[placement]?.points, points, isAlignPoint)) {\n      return `${prefixCls}-placement-${placement}`;\n    }\n  }\n  return '';\n}\nexport function getWin(ele) {\n  return ele.ownerDocument.defaultView;\n}\n\n/**\n * Get all the scrollable parent elements of the element\n * @param ele       The element to be detected\n * @param areaOnly  Only return the parent which will cut visible area\n */\nexport function collectScroller(ele) {\n  const scrollerList = [];\n  let current = ele?.parentElement;\n  const scrollStyle = ['hidden', 'scroll', 'clip', 'auto'];\n  while (current) {\n    const {\n      overflowX,\n      overflowY,\n      overflow\n    } = getWin(current).getComputedStyle(current);\n    if ([overflowX, overflowY, overflow].some(o => scrollStyle.includes(o))) {\n      scrollerList.push(current);\n    }\n    current = current.parentElement;\n  }\n  return scrollerList;\n}\nexport function toNum(num, defaultValue = 1) {\n  return Number.isNaN(num) ? defaultValue : num;\n}\nfunction getPxValue(val) {\n  return toNum(parseFloat(val), 0);\n}\n/**\n *\n *\n *  **************************************\n *  *              Border                *\n *  *     **************************     *\n *  *     *                  *     *     *\n *  *  B  *                  *  S  *  B  *\n *  *  o  *                  *  c  *  o  *\n *  *  r  *      Content     *  r  *  r  *\n *  *  d  *                  *  o  *  d  *\n *  *  e  *                  *  l  *  e  *\n *  *  r  ********************  l  *  r  *\n *  *     *        Scroll          *     *\n *  *     **************************     *\n *  *              Border                *\n *  **************************************\n *\n */\n/**\n * Get visible area of element\n */\nexport function getVisibleArea(initArea, scrollerList) {\n  const visibleArea = {\n    ...initArea\n  };\n  (scrollerList || []).forEach(ele => {\n    if (ele instanceof HTMLBodyElement || ele instanceof HTMLHtmlElement) {\n      return;\n    }\n\n    // Skip if static position which will not affect visible area\n    const {\n      overflow,\n      overflowClipMargin,\n      borderTopWidth,\n      borderBottomWidth,\n      borderLeftWidth,\n      borderRightWidth\n    } = getWin(ele).getComputedStyle(ele);\n    const eleRect = ele.getBoundingClientRect();\n    const {\n      offsetHeight: eleOutHeight,\n      clientHeight: eleInnerHeight,\n      offsetWidth: eleOutWidth,\n      clientWidth: eleInnerWidth\n    } = ele;\n    const borderTopNum = getPxValue(borderTopWidth);\n    const borderBottomNum = getPxValue(borderBottomWidth);\n    const borderLeftNum = getPxValue(borderLeftWidth);\n    const borderRightNum = getPxValue(borderRightWidth);\n    const scaleX = toNum(Math.round(eleRect.width / eleOutWidth * 1000) / 1000);\n    const scaleY = toNum(Math.round(eleRect.height / eleOutHeight * 1000) / 1000);\n\n    // Original visible area\n    const eleScrollWidth = (eleOutWidth - eleInnerWidth - borderLeftNum - borderRightNum) * scaleX;\n    const eleScrollHeight = (eleOutHeight - eleInnerHeight - borderTopNum - borderBottomNum) * scaleY;\n\n    // Cut border size\n    const scaledBorderTopWidth = borderTopNum * scaleY;\n    const scaledBorderBottomWidth = borderBottomNum * scaleY;\n    const scaledBorderLeftWidth = borderLeftNum * scaleX;\n    const scaledBorderRightWidth = borderRightNum * scaleX;\n\n    // Clip margin\n    let clipMarginWidth = 0;\n    let clipMarginHeight = 0;\n    if (overflow === 'clip') {\n      const clipNum = getPxValue(overflowClipMargin);\n      clipMarginWidth = clipNum * scaleX;\n      clipMarginHeight = clipNum * scaleY;\n    }\n\n    // Region\n    const eleLeft = eleRect.x + scaledBorderLeftWidth - clipMarginWidth;\n    const eleTop = eleRect.y + scaledBorderTopWidth - clipMarginHeight;\n    const eleRight = eleLeft + eleRect.width + 2 * clipMarginWidth - scaledBorderLeftWidth - scaledBorderRightWidth - eleScrollWidth;\n    const eleBottom = eleTop + eleRect.height + 2 * clipMarginHeight - scaledBorderTopWidth - scaledBorderBottomWidth - eleScrollHeight;\n    visibleArea.left = Math.max(visibleArea.left, eleLeft);\n    visibleArea.top = Math.max(visibleArea.top, eleTop);\n    visibleArea.right = Math.min(visibleArea.right, eleRight);\n    visibleArea.bottom = Math.min(visibleArea.bottom, eleBottom);\n  });\n  return visibleArea;\n}","import { isDOM, isVisible, useEvent, useLayoutEffect } from '@rc-component/util';\nimport * as React from 'react';\nimport { collectScroller, getVisibleArea, getWin, toNum } from \"../util\";\nfunction getUnitOffset(size, offset = 0) {\n  const offsetStr = `${offset}`;\n  const cells = offsetStr.match(/^(.*)\\%$/);\n  if (cells) {\n    return size * (parseFloat(cells[1]) / 100);\n  }\n  return parseFloat(offsetStr);\n}\nfunction getNumberOffset(rect, offset) {\n  const [offsetX, offsetY] = offset || [];\n  return [getUnitOffset(rect.width, offsetX), getUnitOffset(rect.height, offsetY)];\n}\nfunction splitPoints(points = '') {\n  return [points[0], points[1]];\n}\nfunction getAlignPoint(rect, points) {\n  const topBottom = points[0];\n  const leftRight = points[1];\n  let x;\n  let y;\n\n  // Top & Bottom\n  if (topBottom === 't') {\n    y = rect.y;\n  } else if (topBottom === 'b') {\n    y = rect.y + rect.height;\n  } else {\n    y = rect.y + rect.height / 2;\n  }\n\n  // Left & Right\n  if (leftRight === 'l') {\n    x = rect.x;\n  } else if (leftRight === 'r') {\n    x = rect.x + rect.width;\n  } else {\n    x = rect.x + rect.width / 2;\n  }\n  return {\n    x,\n    y\n  };\n}\nfunction reversePoints(points, index) {\n  const reverseMap = {\n    t: 'b',\n    b: 't',\n    l: 'r',\n    r: 'l'\n  };\n  const clone = [...points];\n  clone[index] = reverseMap[points[index]] || 'c';\n  return clone;\n}\nfunction flatPoints(points) {\n  return points.join('');\n}\nexport default function useAlign(open, popupEle, target, placement, builtinPlacements, popupAlign, onPopupAlign, mobile) {\n  const [offsetInfo, setOffsetInfo] = React.useState({\n    ready: false,\n    offsetX: 0,\n    offsetY: 0,\n    offsetR: 0,\n    offsetB: 0,\n    arrowX: 0,\n    arrowY: 0,\n    scaleX: 1,\n    scaleY: 1,\n    align: builtinPlacements[placement] || {}\n  });\n  const alignCountRef = React.useRef(0);\n  const scrollerList = React.useMemo(() => {\n    if (!popupEle || mobile) {\n      return [];\n    }\n    return collectScroller(popupEle);\n  }, [popupEle]);\n\n  // ========================= Flip ==========================\n  // We will memo flip info.\n  // If size change to make flip, it will memo the flip info and use it in next align.\n  const prevFlipRef = React.useRef({});\n  const resetFlipCache = () => {\n    prevFlipRef.current = {};\n  };\n  if (!open) {\n    resetFlipCache();\n  }\n\n  // ========================= Align =========================\n  const onAlign = useEvent(() => {\n    if (popupEle && target && open && !mobile) {\n      const popupElement = popupEle;\n      const doc = popupElement.ownerDocument;\n      const win = getWin(popupElement);\n      const {\n        position: popupPosition\n      } = win.getComputedStyle(popupElement);\n      const originLeft = popupElement.style.left;\n      const originTop = popupElement.style.top;\n      const originRight = popupElement.style.right;\n      const originBottom = popupElement.style.bottom;\n      const originOverflow = popupElement.style.overflow;\n      const originOverflowX = popupElement.style.overflowX;\n      const originOverflowY = popupElement.style.overflowY;\n\n      // Placement\n      const placementInfo = {\n        ...builtinPlacements[placement],\n        ...popupAlign\n      };\n\n      // placeholder element\n      const placeholderElement = doc.createElement('div');\n      popupElement.parentElement?.appendChild(placeholderElement);\n      placeholderElement.style.left = `${popupElement.offsetLeft}px`;\n      placeholderElement.style.top = `${popupElement.offsetTop}px`;\n      placeholderElement.style.position = popupPosition;\n      placeholderElement.style.height = `${popupElement.offsetHeight}px`;\n      placeholderElement.style.width = `${popupElement.offsetWidth}px`;\n\n      // Reset first\n      popupElement.style.left = '0';\n      popupElement.style.top = '0';\n      popupElement.style.right = 'auto';\n      popupElement.style.bottom = 'auto';\n      popupElement.style.overflow = 'hidden';\n\n      // Calculate align style, we should consider `transform` case\n      let targetRect;\n      if (Array.isArray(target)) {\n        targetRect = {\n          x: target[0],\n          y: target[1],\n          width: 0,\n          height: 0\n        };\n      } else {\n        const rect = target.getBoundingClientRect();\n        rect.x = rect.x ?? rect.left;\n        rect.y = rect.y ?? rect.top;\n        targetRect = {\n          x: rect.x,\n          y: rect.y,\n          width: rect.width,\n          height: rect.height\n        };\n      }\n      const popupRect = popupElement.getBoundingClientRect();\n      const {\n        height,\n        width\n      } = win.getComputedStyle(popupElement);\n      popupRect.x = popupRect.x ?? popupRect.left;\n      popupRect.y = popupRect.y ?? popupRect.top;\n      const {\n        clientWidth,\n        clientHeight,\n        scrollWidth,\n        scrollHeight,\n        scrollTop,\n        scrollLeft\n      } = doc.documentElement;\n      const popupHeight = popupRect.height;\n      const popupWidth = popupRect.width;\n      const targetHeight = targetRect.height;\n      const targetWidth = targetRect.width;\n\n      // Get bounding of visible area\n      const visibleRegion = {\n        left: 0,\n        top: 0,\n        right: clientWidth,\n        bottom: clientHeight\n      };\n      const scrollRegion = {\n        left: -scrollLeft,\n        top: -scrollTop,\n        right: scrollWidth - scrollLeft,\n        bottom: scrollHeight - scrollTop\n      };\n      let {\n        htmlRegion\n      } = placementInfo;\n      const VISIBLE = 'visible';\n      const VISIBLE_FIRST = 'visibleFirst';\n      if (htmlRegion !== 'scroll' && htmlRegion !== VISIBLE_FIRST) {\n        htmlRegion = VISIBLE;\n      }\n      const isVisibleFirst = htmlRegion === VISIBLE_FIRST;\n      const scrollRegionArea = getVisibleArea(scrollRegion, scrollerList);\n      const visibleRegionArea = getVisibleArea(visibleRegion, scrollerList);\n      const visibleArea = htmlRegion === VISIBLE ? visibleRegionArea : scrollRegionArea;\n\n      // When set to `visibleFirst`,\n      // the check `adjust` logic will use `visibleRegion` for check first.\n      const adjustCheckVisibleArea = isVisibleFirst ? visibleRegionArea : visibleArea;\n\n      // Record right & bottom align data\n      popupElement.style.left = 'auto';\n      popupElement.style.top = 'auto';\n      popupElement.style.right = '0';\n      popupElement.style.bottom = '0';\n      const popupMirrorRect = popupElement.getBoundingClientRect();\n\n      // Reset back\n      popupElement.style.left = originLeft;\n      popupElement.style.top = originTop;\n      popupElement.style.right = originRight;\n      popupElement.style.bottom = originBottom;\n      popupElement.style.overflow = originOverflow;\n      popupElement.style.overflowX = originOverflowX;\n      popupElement.style.overflowY = originOverflowY;\n      popupElement.parentElement?.removeChild(placeholderElement);\n\n      // Calculate scale\n      const scaleX = toNum(Math.round(popupWidth / parseFloat(width) * 1000) / 1000);\n      const scaleY = toNum(Math.round(popupHeight / parseFloat(height) * 1000) / 1000);\n\n      // No need to align since it's not visible in view\n      if (scaleX === 0 || scaleY === 0 || isDOM(target) && !isVisible(target)) {\n        return;\n      }\n\n      // Offset\n      const {\n        offset,\n        targetOffset\n      } = placementInfo;\n      let [popupOffsetX, popupOffsetY] = getNumberOffset(popupRect, offset);\n      const [targetOffsetX, targetOffsetY] = getNumberOffset(targetRect, targetOffset);\n      targetRect.x -= targetOffsetX;\n      targetRect.y -= targetOffsetY;\n\n      // Points\n      const [popupPoint, targetPoint] = placementInfo.points || [];\n      const targetPoints = splitPoints(targetPoint);\n      const popupPoints = splitPoints(popupPoint);\n      const targetAlignPoint = getAlignPoint(targetRect, targetPoints);\n      const popupAlignPoint = getAlignPoint(popupRect, popupPoints);\n\n      // Real align info may not same as origin one\n      const nextAlignInfo = {\n        ...placementInfo\n      };\n      let nextPoints = [popupPoints, targetPoints];\n\n      // Next Offset\n      let nextOffsetX = targetAlignPoint.x - popupAlignPoint.x + popupOffsetX;\n      let nextOffsetY = targetAlignPoint.y - popupAlignPoint.y + popupOffsetY;\n\n      // ============== Intersection ===============\n      // Get area by position. Used for check if flip area is better\n      function getIntersectionVisibleArea(offsetX, offsetY, area = visibleArea) {\n        const l = popupRect.x + offsetX;\n        const t = popupRect.y + offsetY;\n        const r = l + popupWidth;\n        const b = t + popupHeight;\n        const visibleL = Math.max(l, area.left);\n        const visibleT = Math.max(t, area.top);\n        const visibleR = Math.min(r, area.right);\n        const visibleB = Math.min(b, area.bottom);\n        return Math.max(0, (visibleR - visibleL) * (visibleB - visibleT));\n      }\n      const originIntersectionVisibleArea = getIntersectionVisibleArea(nextOffsetX, nextOffsetY);\n\n      // As `visibleFirst`, we prepare this for check\n      const originIntersectionRecommendArea = getIntersectionVisibleArea(nextOffsetX, nextOffsetY, visibleRegionArea);\n\n      // ========================== Overflow ===========================\n      const targetAlignPointTL = getAlignPoint(targetRect, ['t', 'l']);\n      const popupAlignPointTL = getAlignPoint(popupRect, ['t', 'l']);\n      const targetAlignPointBR = getAlignPoint(targetRect, ['b', 'r']);\n      const popupAlignPointBR = getAlignPoint(popupRect, ['b', 'r']);\n      const overflow = placementInfo.overflow || {};\n      const {\n        adjustX,\n        adjustY,\n        shiftX,\n        shiftY\n      } = overflow;\n      const supportAdjust = val => {\n        if (typeof val === 'boolean') {\n          return val;\n        }\n        return val >= 0;\n      };\n\n      // Prepare position\n      let nextPopupY;\n      let nextPopupBottom;\n      let nextPopupX;\n      let nextPopupRight;\n      function syncNextPopupPosition() {\n        nextPopupY = popupRect.y + nextOffsetY;\n        nextPopupBottom = nextPopupY + popupHeight;\n        nextPopupX = popupRect.x + nextOffsetX;\n        nextPopupRight = nextPopupX + popupWidth;\n      }\n      syncNextPopupPosition();\n\n      // >>>>>>>>>> Top & Bottom\n      const needAdjustY = supportAdjust(adjustY);\n      const sameTB = popupPoints[0] === targetPoints[0];\n\n      // Bottom to Top\n      if (needAdjustY && popupPoints[0] === 't' && (nextPopupBottom > adjustCheckVisibleArea.bottom || prevFlipRef.current.bt)) {\n        let tmpNextOffsetY = nextOffsetY;\n        if (sameTB) {\n          tmpNextOffsetY -= popupHeight - targetHeight;\n        } else {\n          tmpNextOffsetY = targetAlignPointTL.y - popupAlignPointBR.y - popupOffsetY;\n        }\n        const newVisibleArea = getIntersectionVisibleArea(nextOffsetX, tmpNextOffsetY);\n        const newVisibleRecommendArea = getIntersectionVisibleArea(nextOffsetX, tmpNextOffsetY, visibleRegionArea);\n        if (\n        // Of course use larger one\n        newVisibleArea > originIntersectionVisibleArea || newVisibleArea === originIntersectionVisibleArea && (!isVisibleFirst ||\n        // Choose recommend one\n        newVisibleRecommendArea >= originIntersectionRecommendArea)) {\n          prevFlipRef.current.bt = true;\n          nextOffsetY = tmpNextOffsetY;\n          popupOffsetY = -popupOffsetY;\n          nextPoints = [reversePoints(nextPoints[0], 0), reversePoints(nextPoints[1], 0)];\n        } else {\n          prevFlipRef.current.bt = false;\n        }\n      }\n\n      // Top to Bottom\n      if (needAdjustY && popupPoints[0] === 'b' && (nextPopupY < adjustCheckVisibleArea.top || prevFlipRef.current.tb)) {\n        let tmpNextOffsetY = nextOffsetY;\n        if (sameTB) {\n          tmpNextOffsetY += popupHeight - targetHeight;\n        } else {\n          tmpNextOffsetY = targetAlignPointBR.y - popupAlignPointTL.y - popupOffsetY;\n        }\n        const newVisibleArea = getIntersectionVisibleArea(nextOffsetX, tmpNextOffsetY);\n        const newVisibleRecommendArea = getIntersectionVisibleArea(nextOffsetX, tmpNextOffsetY, visibleRegionArea);\n        if (\n        // Of course use larger one\n        newVisibleArea > originIntersectionVisibleArea || newVisibleArea === originIntersectionVisibleArea && (!isVisibleFirst ||\n        // Choose recommend one\n        newVisibleRecommendArea >= originIntersectionRecommendArea)) {\n          prevFlipRef.current.tb = true;\n          nextOffsetY = tmpNextOffsetY;\n          popupOffsetY = -popupOffsetY;\n          nextPoints = [reversePoints(nextPoints[0], 0), reversePoints(nextPoints[1], 0)];\n        } else {\n          prevFlipRef.current.tb = false;\n        }\n      }\n\n      // >>>>>>>>>> Left & Right\n      const needAdjustX = supportAdjust(adjustX);\n\n      // >>>>> Flip\n      const sameLR = popupPoints[1] === targetPoints[1];\n\n      // Right to Left\n      if (needAdjustX && popupPoints[1] === 'l' && (nextPopupRight > adjustCheckVisibleArea.right || prevFlipRef.current.rl)) {\n        let tmpNextOffsetX = nextOffsetX;\n        if (sameLR) {\n          tmpNextOffsetX -= popupWidth - targetWidth;\n        } else {\n          tmpNextOffsetX = targetAlignPointTL.x - popupAlignPointBR.x - popupOffsetX;\n        }\n        const newVisibleArea = getIntersectionVisibleArea(tmpNextOffsetX, nextOffsetY);\n        const newVisibleRecommendArea = getIntersectionVisibleArea(tmpNextOffsetX, nextOffsetY, visibleRegionArea);\n        if (\n        // Of course use larger one\n        newVisibleArea > originIntersectionVisibleArea || newVisibleArea === originIntersectionVisibleArea && (!isVisibleFirst ||\n        // Choose recommend one\n        newVisibleRecommendArea >= originIntersectionRecommendArea)) {\n          prevFlipRef.current.rl = true;\n          nextOffsetX = tmpNextOffsetX;\n          popupOffsetX = -popupOffsetX;\n          nextPoints = [reversePoints(nextPoints[0], 1), reversePoints(nextPoints[1], 1)];\n        } else {\n          prevFlipRef.current.rl = false;\n        }\n      }\n\n      // Left to Right\n      if (needAdjustX && popupPoints[1] === 'r' && (nextPopupX < adjustCheckVisibleArea.left || prevFlipRef.current.lr)) {\n        let tmpNextOffsetX = nextOffsetX;\n        if (sameLR) {\n          tmpNextOffsetX += popupWidth - targetWidth;\n        } else {\n          tmpNextOffsetX = targetAlignPointBR.x - popupAlignPointTL.x - popupOffsetX;\n        }\n        const newVisibleArea = getIntersectionVisibleArea(tmpNextOffsetX, nextOffsetY);\n        const newVisibleRecommendArea = getIntersectionVisibleArea(tmpNextOffsetX, nextOffsetY, visibleRegionArea);\n        if (\n        // Of course use larger one\n        newVisibleArea > originIntersectionVisibleArea || newVisibleArea === originIntersectionVisibleArea && (!isVisibleFirst ||\n        // Choose recommend one\n        newVisibleRecommendArea >= originIntersectionRecommendArea)) {\n          prevFlipRef.current.lr = true;\n          nextOffsetX = tmpNextOffsetX;\n          popupOffsetX = -popupOffsetX;\n          nextPoints = [reversePoints(nextPoints[0], 1), reversePoints(nextPoints[1], 1)];\n        } else {\n          prevFlipRef.current.lr = false;\n        }\n      }\n      nextAlignInfo.points = [flatPoints(nextPoints[0]), flatPoints(nextPoints[1])];\n\n      // ============================ Shift ============================\n      syncNextPopupPosition();\n      const numShiftX = shiftX === true ? 0 : shiftX;\n      if (typeof numShiftX === 'number') {\n        // Left\n        if (nextPopupX < visibleRegionArea.left) {\n          nextOffsetX -= nextPopupX - visibleRegionArea.left - popupOffsetX;\n          if (targetRect.x + targetWidth < visibleRegionArea.left + numShiftX) {\n            nextOffsetX += targetRect.x - visibleRegionArea.left + targetWidth - numShiftX;\n          }\n        }\n\n        // Right\n        if (nextPopupRight > visibleRegionArea.right) {\n          nextOffsetX -= nextPopupRight - visibleRegionArea.right - popupOffsetX;\n          if (targetRect.x > visibleRegionArea.right - numShiftX) {\n            nextOffsetX += targetRect.x - visibleRegionArea.right + numShiftX;\n          }\n        }\n      }\n      const numShiftY = shiftY === true ? 0 : shiftY;\n      if (typeof numShiftY === 'number') {\n        // Top\n        if (nextPopupY < visibleRegionArea.top) {\n          nextOffsetY -= nextPopupY - visibleRegionArea.top - popupOffsetY;\n\n          // When target if far away from visible area\n          // Stop shift\n          if (targetRect.y + targetHeight < visibleRegionArea.top + numShiftY) {\n            nextOffsetY += targetRect.y - visibleRegionArea.top + targetHeight - numShiftY;\n          }\n        }\n\n        // Bottom\n        if (nextPopupBottom > visibleRegionArea.bottom) {\n          nextOffsetY -= nextPopupBottom - visibleRegionArea.bottom - popupOffsetY;\n          if (targetRect.y > visibleRegionArea.bottom - numShiftY) {\n            nextOffsetY += targetRect.y - visibleRegionArea.bottom + numShiftY;\n          }\n        }\n      }\n\n      // ============================ Arrow ============================\n      // Arrow center align\n      const popupLeft = popupRect.x + nextOffsetX;\n      const popupRight = popupLeft + popupWidth;\n      const popupTop = popupRect.y + nextOffsetY;\n      const popupBottom = popupTop + popupHeight;\n      const targetLeft = targetRect.x;\n      const targetRight = targetLeft + targetWidth;\n      const targetTop = targetRect.y;\n      const targetBottom = targetTop + targetHeight;\n\n      /** Max left of the popup and target element */\n      const maxLeft = Math.max(popupLeft, targetLeft);\n      /** Min right of the popup and target element */\n      const minRight = Math.min(popupRight, targetRight);\n\n      /** The center X of popup & target cross area */\n      const xCenter = (maxLeft + minRight) / 2;\n      /** Arrow X of popup offset */\n      const nextArrowX = xCenter - popupLeft;\n      const maxTop = Math.max(popupTop, targetTop);\n      const minBottom = Math.min(popupBottom, targetBottom);\n      const yCenter = (maxTop + minBottom) / 2;\n      const nextArrowY = yCenter - popupTop;\n      onPopupAlign?.(popupEle, nextAlignInfo);\n\n      // Additional calculate right & bottom position\n      let offsetX4Right = popupMirrorRect.right - popupRect.x - (nextOffsetX + popupRect.width);\n      let offsetY4Bottom = popupMirrorRect.bottom - popupRect.y - (nextOffsetY + popupRect.height);\n      if (scaleX === 1) {\n        nextOffsetX = Math.floor(nextOffsetX);\n        offsetX4Right = Math.floor(offsetX4Right);\n      }\n      if (scaleY === 1) {\n        nextOffsetY = Math.floor(nextOffsetY);\n        offsetY4Bottom = Math.floor(offsetY4Bottom);\n      }\n      const nextOffsetInfo = {\n        ready: true,\n        offsetX: nextOffsetX / scaleX,\n        offsetY: nextOffsetY / scaleY,\n        offsetR: offsetX4Right / scaleX,\n        offsetB: offsetY4Bottom / scaleY,\n        arrowX: nextArrowX / scaleX,\n        arrowY: nextArrowY / scaleY,\n        scaleX,\n        scaleY,\n        align: nextAlignInfo\n      };\n      setOffsetInfo(nextOffsetInfo);\n    }\n  });\n  const triggerAlign = () => {\n    alignCountRef.current += 1;\n    const id = alignCountRef.current;\n\n    // Merge all align requirement into one frame\n    Promise.resolve().then(() => {\n      if (alignCountRef.current === id) {\n        onAlign();\n      }\n    });\n  };\n\n  // Reset ready status when placement & open changed\n  const resetReady = () => {\n    setOffsetInfo(ori => ({\n      ...ori,\n      ready: false\n    }));\n  };\n  useLayoutEffect(resetReady, [placement]);\n  useLayoutEffect(() => {\n    if (!open) {\n      resetReady();\n    }\n  }, [open]);\n  return [offsetInfo.ready, offsetInfo.offsetX, offsetInfo.offsetY, offsetInfo.offsetR, offsetInfo.offsetB, offsetInfo.arrowX, offsetInfo.arrowY, offsetInfo.scaleX, offsetInfo.scaleY, offsetInfo.align, triggerAlign];\n}","import * as React from 'react';\nexport default function useDelay() {\n  const delayRef = React.useRef(null);\n  const clearDelay = () => {\n    if (delayRef.current) {\n      clearTimeout(delayRef.current);\n      delayRef.current = null;\n    }\n  };\n  const delayInvoke = (callback, delay) => {\n    clearDelay();\n    if (delay === 0) {\n      callback();\n    } else {\n      delayRef.current = setTimeout(() => {\n        callback();\n      }, delay * 1000);\n    }\n  };\n\n  // Clean up on unmount\n  React.useEffect(() => {\n    return () => {\n      clearDelay();\n    };\n  }, []);\n  return delayInvoke;\n}","import { useLayoutEffect } from '@rc-component/util';\nimport { collectScroller, getWin } from \"../util\";\nexport default function useWatch(open, target, popup, onAlign, onScroll) {\n  useLayoutEffect(() => {\n    if (open && target && popup) {\n      const targetElement = target;\n      const popupElement = popup;\n      const targetScrollList = collectScroller(targetElement);\n      const popupScrollList = collectScroller(popupElement);\n      const win = getWin(popupElement);\n      const mergedList = new Set([win, ...targetScrollList, ...popupScrollList]);\n      function notifyScroll() {\n        onAlign();\n        onScroll();\n      }\n      mergedList.forEach(scroller => {\n        scroller.addEventListener('scroll', notifyScroll, {\n          passive: true\n        });\n      });\n      win.addEventListener('resize', notifyScroll, {\n        passive: true\n      });\n\n      // First time always do align\n      onAlign();\n      return () => {\n        mergedList.forEach(scroller => {\n          scroller.removeEventListener('scroll', notifyScroll);\n          win.removeEventListener('resize', notifyScroll);\n        });\n      };\n    }\n  }, [open, target, popup]);\n}","import { getShadowRoot, warning } from '@rc-component/util';\nimport * as React from 'react';\nimport { getWin } from \"../util\";\n\n/**\n * Close if click on the window.\n * Return the function that click on the Popup element.\n */\nexport default function useWinClick(open, clickToHide, targetEle, popupEle, mask, maskClosable, inPopupOrChild, triggerOpen) {\n  const openRef = React.useRef(open);\n  openRef.current = open;\n  const popupPointerDownRef = React.useRef(false);\n\n  // Click to hide is special action since click popup element should not hide\n  React.useEffect(() => {\n    if (clickToHide && popupEle && (!mask || maskClosable)) {\n      const onPointerDown = () => {\n        popupPointerDownRef.current = false;\n      };\n      const onTriggerClose = e => {\n        if (openRef.current && !inPopupOrChild(e.composedPath?.()?.[0] || e.target) && !popupPointerDownRef.current) {\n          triggerOpen(false);\n        }\n      };\n      const win = getWin(popupEle);\n      win.addEventListener('pointerdown', onPointerDown, true);\n      win.addEventListener('mousedown', onTriggerClose, true);\n      win.addEventListener('contextmenu', onTriggerClose, true);\n\n      // shadow root\n      const targetShadowRoot = getShadowRoot(targetEle);\n      if (targetShadowRoot) {\n        targetShadowRoot.addEventListener('mousedown', onTriggerClose, true);\n        targetShadowRoot.addEventListener('contextmenu', onTriggerClose, true);\n      }\n\n      // Warning if target and popup not in same root\n      if (process.env.NODE_ENV !== 'production' && targetEle) {\n        const targetRoot = targetEle.getRootNode?.();\n        const popupRoot = popupEle.getRootNode?.();\n        warning(targetRoot === popupRoot, `trigger element and popup element should in same shadow root.`);\n      }\n      return () => {\n        win.removeEventListener('pointerdown', onPointerDown, true);\n        win.removeEventListener('mousedown', onTriggerClose, true);\n        win.removeEventListener('contextmenu', onTriggerClose, true);\n        if (targetShadowRoot) {\n          targetShadowRoot.removeEventListener('mousedown', onTriggerClose, true);\n          targetShadowRoot.removeEventListener('contextmenu', onTriggerClose, true);\n        }\n      };\n    }\n  }, [clickToHide, targetEle, popupEle, mask, maskClosable]);\n  function onPopupPointerDown() {\n    popupPointerDownRef.current = true;\n  }\n  return onPopupPointerDown;\n}","import React from 'react';\nimport { useEvent } from '@rc-component/util';\n/**\n * Control the state of popup bind target:\n * 1. When set `target`. Do show the popup.\n * 2. When `target` is removed. Do hide the popup.\n * 3. When `target` change to another one:\n *  a. We wait motion finish of previous popup.\n *  b. Then we set new target and show the popup.\n * 4. During appear/enter animation, cache new options and apply after animation completes.\n */\nexport default function useTargetState() {\n  const [options, setOptions] = React.useState(null);\n  const [open, setOpen] = React.useState(false);\n  const [isAnimating, setIsAnimating] = React.useState(false);\n  const pendingOptionsRef = React.useRef(null);\n  const trigger = useEvent(nextOptions => {\n    if (nextOptions === false) {\n      // Clear pending options when hiding\n      pendingOptionsRef.current = null;\n      setOpen(false);\n    } else {\n      if (isAnimating && open) {\n        // If animating (appear or enter), cache new options\n        pendingOptionsRef.current = nextOptions;\n      } else {\n        setOpen(true);\n        // Set new options\n        setOptions(nextOptions);\n        pendingOptionsRef.current = null;\n\n        // Only mark as animating when transitioning from closed to open\n        if (!open) {\n          setIsAnimating(true);\n        }\n      }\n    }\n  });\n  const onVisibleChanged = useEvent(visible => {\n    if (visible) {\n      // Animation enter completed, check if there are pending options\n      setIsAnimating(false);\n      if (pendingOptionsRef.current) {\n        // Apply pending options\n        setOptions(pendingOptionsRef.current);\n        pendingOptionsRef.current = null;\n      }\n    } else {\n      // Animation leave completed\n      setIsAnimating(false);\n      pendingOptionsRef.current = null;\n    }\n  });\n  return [trigger, open, options, onVisibleChanged];\n}","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from 'react';\nimport useOffsetStyle from \"../hooks/useOffsetStyle\";\nimport { clsx } from 'clsx';\nimport CSSMotion from '@rc-component/motion';\nconst UniqueContainer = props => {\n  const {\n    prefixCls,\n    isMobile,\n    ready,\n    open,\n    align,\n    offsetR,\n    offsetB,\n    offsetX,\n    offsetY,\n    arrowPos,\n    popupSize,\n    motion,\n    uniqueContainerClassName,\n    uniqueContainerStyle\n  } = props;\n  const containerCls = `${prefixCls}-unique-container`;\n  const [motionVisible, setMotionVisible] = React.useState(false);\n\n  // ========================= Styles =========================\n  const offsetStyle = useOffsetStyle(isMobile, ready, open, align, offsetR, offsetB, offsetX, offsetY);\n\n  // Cache for offsetStyle when ready is true\n  const cachedOffsetStyleRef = React.useRef(offsetStyle);\n\n  // Update cached offset style when ready is true\n  if (ready) {\n    cachedOffsetStyleRef.current = offsetStyle;\n  }\n\n  // Apply popup size if available\n  const sizeStyle = {};\n  if (popupSize) {\n    sizeStyle.width = popupSize.width;\n    sizeStyle.height = popupSize.height;\n  }\n\n  // ========================= Render =========================\n  return /*#__PURE__*/React.createElement(CSSMotion, _extends({\n    motionAppear: true,\n    motionEnter: true,\n    motionLeave: true,\n    removeOnLeave: false,\n    leavedClassName: `${containerCls}-hidden`\n  }, motion, {\n    visible: open,\n    onVisibleChanged: nextVisible => {\n      setMotionVisible(nextVisible);\n    }\n  }), ({\n    className: motionClassName,\n    style: motionStyle\n  }) => {\n    const cls = clsx(containerCls, motionClassName, uniqueContainerClassName, {\n      [`${containerCls}-visible`]: motionVisible\n    });\n    return /*#__PURE__*/React.createElement(\"div\", {\n      className: cls,\n      style: {\n        '--arrow-x': `${arrowPos?.x || 0}px`,\n        '--arrow-y': `${arrowPos?.y || 0}px`,\n        ...cachedOffsetStyleRef.current,\n        ...sizeStyle,\n        ...motionStyle,\n        ...uniqueContainerStyle\n      }\n    });\n  });\n};\nexport default UniqueContainer;","import * as React from 'react';\nimport Portal from '@rc-component/portal';\nimport TriggerContext, { UniqueContext } from \"../context\";\nimport useDelay from \"../hooks/useDelay\";\nimport useAlign from \"../hooks/useAlign\";\nimport Popup from \"../Popup\";\nimport { isDOM, useEvent } from '@rc-component/util';\nimport useTargetState from \"./useTargetState\";\nimport UniqueContainer from \"./UniqueContainer\";\nimport { clsx } from 'clsx';\nimport { getAlignPopupClassName } from \"../util\";\nconst UniqueProvider = ({\n  children,\n  postTriggerProps\n}) => {\n  const [trigger, open, options, onTargetVisibleChanged] = useTargetState();\n\n  // ========================== Options ===========================\n  const mergedOptions = React.useMemo(() => {\n    if (!options || !postTriggerProps) {\n      return options;\n    }\n    return postTriggerProps(options);\n  }, [options, postTriggerProps]);\n\n  // =========================== Popup ============================\n  const [popupEle, setPopupEle] = React.useState(null);\n  const [popupSize, setPopupSize] = React.useState(null);\n\n  // Used for forwardRef popup. Not use internal\n  const externalPopupRef = React.useRef(null);\n  const setPopupRef = useEvent(node => {\n    externalPopupRef.current = node;\n    if (isDOM(node) && popupEle !== node) {\n      setPopupEle(node);\n    }\n  });\n\n  // ========================== Register ==========================\n  // Store the isOpen function from the latest show call\n  const isOpenRef = React.useRef(null);\n  const delayInvoke = useDelay();\n  const show = useEvent((showOptions, isOpen) => {\n    // Store the isOpen function for later use in hide\n    isOpenRef.current = isOpen;\n    delayInvoke(() => {\n      trigger(showOptions);\n    }, showOptions.delay);\n  });\n  const hide = delay => {\n    delayInvoke(() => {\n      // Check if we should still hide by calling the isOpen function\n      // If isOpen returns true, it means another trigger wants to keep it open\n      if (isOpenRef.current?.()) {\n        return; // Don't hide if something else wants it open\n      }\n      trigger(false);\n      // Don't clear target, currentNode, options immediately, wait until animation completes\n    }, delay);\n  };\n\n  // Callback after animation completes\n  const onVisibleChanged = useEvent(visible => {\n    // Call useTargetState callback to handle animation state\n    onTargetVisibleChanged(visible);\n  });\n\n  // =========================== Align ============================\n  const [ready, offsetX, offsetY, offsetR, offsetB, arrowX, arrowY,\n\n    // scaleX - not used in UniqueProvider\n  ,,\n  // scaleY - not used in UniqueProvider\n  alignInfo, onAlign] = useAlign(open, popupEle, mergedOptions?.target, mergedOptions?.popupPlacement, mergedOptions?.builtinPlacements || {}, mergedOptions?.popupAlign, undefined,\n  // onPopupAlign\n  false // isMobile\n  );\n  const alignedClassName = React.useMemo(() => {\n    if (!mergedOptions) {\n      return '';\n    }\n    const baseClassName = getAlignPopupClassName(mergedOptions.builtinPlacements || {}, mergedOptions.prefixCls || '', alignInfo, false // alignPoint is false for UniqueProvider\n    );\n    return clsx(baseClassName, mergedOptions.getPopupClassNameFromAlign?.(alignInfo));\n  }, [alignInfo, mergedOptions?.getPopupClassNameFromAlign, mergedOptions?.builtinPlacements, mergedOptions?.prefixCls]);\n  const contextValue = React.useMemo(() => ({\n    show,\n    hide\n  }), []);\n\n  // =========================== Align ============================\n  React.useEffect(() => {\n    onAlign();\n  }, [mergedOptions?.target]);\n\n  // =========================== Motion ===========================\n  const onPrepare = useEvent(() => {\n    onAlign();\n    return Promise.resolve();\n  });\n\n  // ======================== Trigger Context =====================\n  const subPopupElements = React.useRef({});\n  const parentContext = React.useContext(TriggerContext);\n  const triggerContextValue = React.useMemo(() => ({\n    registerSubPopup: (id, subPopupEle) => {\n      subPopupElements.current[id] = subPopupEle;\n      parentContext?.registerSubPopup(id, subPopupEle);\n    }\n  }), [parentContext]);\n\n  // =========================== Render ===========================\n  const prefixCls = mergedOptions?.prefixCls;\n  return /*#__PURE__*/React.createElement(UniqueContext.Provider, {\n    value: contextValue\n  }, children, mergedOptions && /*#__PURE__*/React.createElement(TriggerContext.Provider, {\n    value: triggerContextValue\n  }, /*#__PURE__*/React.createElement(Popup, {\n    ref: setPopupRef,\n    portal: Portal,\n    onEsc: mergedOptions.onEsc,\n    prefixCls: prefixCls,\n    popup: mergedOptions.popup,\n    className: clsx(mergedOptions.popupClassName, alignedClassName, `${prefixCls}-unique-controlled`),\n    style: mergedOptions.popupStyle,\n    target: mergedOptions.target,\n    open: open,\n    keepDom: true,\n    fresh: true,\n    autoDestroy: false,\n    onVisibleChanged: onVisibleChanged,\n    ready: ready,\n    offsetX: offsetX,\n    offsetY: offsetY,\n    offsetR: offsetR,\n    offsetB: offsetB,\n    onAlign: onAlign,\n    onPrepare: onPrepare,\n    onResize: size => setPopupSize({\n      width: size.offsetWidth,\n      height: size.offsetHeight\n    }),\n    arrowPos: {\n      x: arrowX,\n      y: arrowY\n    },\n    align: alignInfo,\n    zIndex: mergedOptions.zIndex,\n    mask: mergedOptions.mask,\n    arrow: mergedOptions.arrow,\n    motion: mergedOptions.popupMotion,\n    maskMotion: mergedOptions.maskMotion,\n    getPopupContainer: mergedOptions.getPopupContainer\n  }, /*#__PURE__*/React.createElement(UniqueContainer, {\n    prefixCls: prefixCls,\n    isMobile: false,\n    ready: ready,\n    open: open,\n    align: alignInfo,\n    offsetR: offsetR,\n    offsetB: offsetB,\n    offsetX: offsetX,\n    offsetY: offsetY,\n    arrowPos: {\n      x: arrowX,\n      y: arrowY\n    },\n    popupSize: popupSize,\n    motion: mergedOptions.popupMotion,\n    uniqueContainerClassName: clsx(mergedOptions.uniqueContainerClassName, alignedClassName),\n    uniqueContainerStyle: mergedOptions.uniqueContainerStyle\n  }))));\n};\nexport default UniqueProvider;","import Portal from '@rc-component/portal';\nimport { clsx } from 'clsx';\nimport { useResizeObserver } from '@rc-component/resize-observer';\nimport { getDOM, getNodeRef, getShadowRoot, isDOM, useComposeRef, useEvent, useId, useLayoutEffect } from '@rc-component/util';\nimport * as React from 'react';\nimport Popup from \"./Popup\";\nimport TriggerContext, { UniqueContext } from \"./context\";\nimport useAction from \"./hooks/useAction\";\nimport useAlign from \"./hooks/useAlign\";\nimport useDelay from \"./hooks/useDelay\";\nimport useWatch from \"./hooks/useWatch\";\nimport useWinClick from \"./hooks/useWinClick\";\nimport { getAlignPopupClassName } from \"./util\";\nimport UniqueProvider from \"./UniqueProvider\";\nimport { useControlledState } from '@rc-component/util';\nimport { flushSync } from 'react-dom';\nexport { UniqueProvider };\n\n// Removed Props List\n// Seems this can be auto\n// getDocument?: (element?: HTMLElement) => Document;\n\n// New version will not wrap popup with `rc-trigger-popup-content` when multiple children\n\nexport function generateTrigger(PortalComponent = Portal) {\n  const Trigger = /*#__PURE__*/React.forwardRef((props, ref) => {\n    const {\n      prefixCls = 'rc-trigger-popup',\n      children,\n      // Action\n      action = 'hover',\n      showAction,\n      hideAction,\n      disabled = false,\n      // Open\n      popupVisible,\n      defaultPopupVisible,\n      onOpenChange,\n      afterOpenChange,\n      onPopupVisibleChange,\n      afterPopupVisibleChange,\n      // Delay\n      mouseEnterDelay,\n      mouseLeaveDelay = 0.1,\n      focusDelay,\n      blurDelay,\n      // Mask\n      mask,\n      maskClosable = true,\n      // Portal\n      getPopupContainer,\n      forceRender,\n      autoDestroy,\n      // Popup\n      popup,\n      popupClassName,\n      uniqueContainerClassName,\n      uniqueContainerStyle,\n      popupStyle,\n      popupPlacement,\n      builtinPlacements = {},\n      popupAlign,\n      zIndex,\n      stretch,\n      getPopupClassNameFromAlign,\n      fresh,\n      unique,\n      alignPoint,\n      onPopupClick,\n      onPopupAlign,\n      // Arrow\n      arrow,\n      // Motion\n      popupMotion,\n      maskMotion,\n      // Private\n      mobile,\n      ...restProps\n    } = props;\n    const mergedAutoDestroy = autoDestroy || false;\n    const openUncontrolled = popupVisible === undefined;\n\n    // =========================== Mobile ===========================\n    const isMobile = !!mobile;\n\n    // ========================== Context ===========================\n    const subPopupElements = React.useRef({});\n    const parentContext = React.useContext(TriggerContext);\n    const context = React.useMemo(() => {\n      return {\n        registerSubPopup: (id, subPopupEle) => {\n          subPopupElements.current[id] = subPopupEle;\n          parentContext?.registerSubPopup(id, subPopupEle);\n        }\n      };\n    }, [parentContext]);\n\n    // ======================== UniqueContext =========================\n    const uniqueContext = React.useContext(UniqueContext);\n\n    // =========================== Popup ============================\n    const id = useId();\n    const [popupEle, setPopupEle] = React.useState(null);\n\n    // Used for forwardRef popup. Not use internal\n    const externalPopupRef = React.useRef(null);\n    const setPopupRef = useEvent(node => {\n      externalPopupRef.current = node;\n      if (isDOM(node) && popupEle !== node) {\n        setPopupEle(node);\n      }\n      parentContext?.registerSubPopup(id, node);\n    });\n\n    // =========================== Target ===========================\n    // Use state to control here since `useRef` update not trigger render\n    const [targetEle, setTargetEle] = React.useState(null);\n\n    // Used for forwardRef target. Not use internal\n    const externalForwardRef = React.useRef(null);\n    const setTargetRef = useEvent(node => {\n      const domNode = getDOM(node);\n      if (isDOM(domNode) && targetEle !== domNode) {\n        setTargetEle(domNode);\n        externalForwardRef.current = domNode;\n      }\n    });\n    const cloneProps = {};\n    const inPopupOrChild = useEvent(ele => {\n      const childDOM = targetEle;\n      return childDOM?.contains(ele) || getShadowRoot(childDOM)?.host === ele || ele === childDOM || popupEle?.contains(ele) || getShadowRoot(popupEle)?.host === ele || ele === popupEle || Object.values(subPopupElements.current).some(subPopupEle => subPopupEle?.contains(ele) || ele === subPopupEle);\n    });\n\n    // =========================== Arrow ============================\n    const innerArrow = arrow ? {\n      // true and Object likely\n      ...(arrow !== true ? arrow : {})\n    } : null;\n\n    // ============================ Open ============================\n    const [internalOpen, setInternalOpen] = useControlledState(defaultPopupVisible || false, popupVisible);\n    const rawOpen = internalOpen || false;\n    const mergedOpen = rawOpen && !disabled;\n\n    // ========================== Children ==========================\n    const child = React.useMemo(() => {\n      const nextChild = typeof children === 'function' ? children({\n        open: mergedOpen\n      }) : children;\n      return React.Children.only(nextChild);\n    }, [children, mergedOpen]);\n    const originChildProps = child?.props || {};\n\n    // Support ref\n    const isOpen = useEvent(() => mergedOpen);\n\n    // Extract common options for UniqueProvider\n    const getUniqueOptions = useEvent((delay = 0) => ({\n      popup,\n      target: targetEle,\n      delay,\n      prefixCls,\n      popupClassName,\n      uniqueContainerClassName,\n      uniqueContainerStyle,\n      popupStyle,\n      popupPlacement,\n      builtinPlacements,\n      popupAlign,\n      zIndex,\n      mask,\n      maskClosable,\n      popupMotion,\n      maskMotion,\n      arrow: innerArrow,\n      getPopupContainer,\n      getPopupClassNameFromAlign,\n      id,\n      onEsc\n    }));\n\n    // Handle controlled state changes for UniqueProvider\n    // Only sync to UniqueProvider when it's controlled mode\n    // If there is a parentContext, don't call uniqueContext methods\n    useLayoutEffect(() => {\n      if (uniqueContext && unique && targetEle && !openUncontrolled && !parentContext) {\n        if (mergedOpen) {\n          uniqueContext.show(getUniqueOptions(mouseEnterDelay), isOpen);\n        } else {\n          uniqueContext.hide(mouseLeaveDelay);\n        }\n      }\n    }, [mergedOpen, targetEle]);\n    const openRef = React.useRef(mergedOpen);\n    openRef.current = mergedOpen;\n    const internalTriggerOpen = useEvent(nextOpen => {\n      flushSync(() => {\n        if (rawOpen !== nextOpen) {\n          setInternalOpen(nextOpen);\n          onOpenChange?.(nextOpen);\n          onPopupVisibleChange?.(nextOpen);\n        }\n      });\n    });\n\n    // Trigger for delay\n    const delayInvoke = useDelay();\n    const triggerOpen = (nextOpen, delay = 0) => {\n      // If it's controlled mode, always use internal trigger logic\n      // UniqueProvider will be synced through useLayoutEffect\n      if (popupVisible !== undefined) {\n        delayInvoke(() => {\n          internalTriggerOpen(nextOpen);\n        }, delay);\n        return;\n      }\n\n      // If UniqueContext exists and not controlled, pass delay to Provider instead of handling it internally\n      // If there is a parentContext, don't call uniqueContext methods\n      if (uniqueContext && unique && openUncontrolled && !parentContext) {\n        if (nextOpen) {\n          uniqueContext.show(getUniqueOptions(delay), isOpen);\n        } else {\n          uniqueContext.hide(delay);\n        }\n        return;\n      }\n      delayInvoke(() => {\n        internalTriggerOpen(nextOpen);\n      }, delay);\n    };\n    function onEsc({\n      top\n    }) {\n      if (top) {\n        triggerOpen(false);\n      }\n    }\n\n    // ========================== Motion ============================\n    const [inMotion, setInMotion] = React.useState(false);\n    useLayoutEffect(firstMount => {\n      if (!firstMount || mergedOpen) {\n        setInMotion(true);\n      }\n    }, [mergedOpen]);\n    const [motionPrepareResolve, setMotionPrepareResolve] = React.useState(null);\n\n    // =========================== Align ============================\n    const [mousePos, setMousePos] = React.useState(null);\n    const setMousePosByEvent = event => {\n      setMousePos([event.clientX, event.clientY]);\n    };\n    const [ready, offsetX, offsetY, offsetR, offsetB, arrowX, arrowY, scaleX, scaleY, alignInfo, onAlign] = useAlign(mergedOpen, popupEle, alignPoint && mousePos !== null ? mousePos : targetEle, popupPlacement, builtinPlacements, popupAlign, onPopupAlign, isMobile);\n    const [showActions, hideActions] = useAction(action, showAction, hideAction);\n    const clickToShow = showActions.has('click');\n    const clickToHide = hideActions.has('click') || hideActions.has('contextMenu');\n    const triggerAlign = useEvent(() => {\n      if (!inMotion) {\n        onAlign();\n      }\n    });\n    const onScroll = () => {\n      if (openRef.current && alignPoint && clickToHide) {\n        triggerOpen(false);\n      }\n    };\n    useWatch(mergedOpen, targetEle, popupEle, triggerAlign, onScroll);\n    useLayoutEffect(() => {\n      triggerAlign();\n    }, [mousePos, popupPlacement]);\n\n    // When no builtinPlacements and popupAlign changed\n    useLayoutEffect(() => {\n      if (mergedOpen && !builtinPlacements?.[popupPlacement]) {\n        triggerAlign();\n      }\n    }, [JSON.stringify(popupAlign)]);\n    const alignedClassName = React.useMemo(() => {\n      const baseClassName = getAlignPopupClassName(builtinPlacements, prefixCls, alignInfo, alignPoint);\n      return clsx(baseClassName, getPopupClassNameFromAlign?.(alignInfo));\n    }, [alignInfo, getPopupClassNameFromAlign, builtinPlacements, prefixCls, alignPoint]);\n\n    // ============================ Refs ============================\n    React.useImperativeHandle(ref, () => ({\n      nativeElement: externalForwardRef.current,\n      popupElement: externalPopupRef.current,\n      forceAlign: triggerAlign\n    }));\n\n    // ========================== Stretch ===========================\n    const [targetWidth, setTargetWidth] = React.useState(0);\n    const [targetHeight, setTargetHeight] = React.useState(0);\n    const syncTargetSize = () => {\n      if (stretch && targetEle) {\n        const rect = targetEle.getBoundingClientRect();\n        setTargetWidth(rect.width);\n        setTargetHeight(rect.height);\n      }\n    };\n    const onTargetResize = () => {\n      syncTargetSize();\n      triggerAlign();\n    };\n\n    // ========================== Motion ============================\n    const onVisibleChanged = visible => {\n      setInMotion(false);\n      onAlign();\n      afterOpenChange?.(visible);\n      afterPopupVisibleChange?.(visible);\n    };\n\n    // We will trigger align when motion is in prepare\n    const onPrepare = () => new Promise(resolve => {\n      syncTargetSize();\n      setMotionPrepareResolve(() => resolve);\n    });\n    useLayoutEffect(() => {\n      if (motionPrepareResolve) {\n        onAlign();\n        motionPrepareResolve();\n        setMotionPrepareResolve(null);\n      }\n    }, [motionPrepareResolve]);\n\n    // =========================== Action ===========================\n    /**\n     * Util wrapper for trigger action\n     * @param eventName  Listen event name\n     * @param nextOpen  Next open state after trigger\n     * @param delay Delay to trigger open change\n     * @param callback Callback if current event need additional action\n     * @param ignoreCheck  Ignore current event if check return true\n     */\n    function wrapperAction(eventName, nextOpen, delay, callback, ignoreCheck) {\n      cloneProps[eventName] = (event, ...args) => {\n        if (!ignoreCheck || !ignoreCheck()) {\n          callback?.(event);\n          triggerOpen(nextOpen, delay);\n        }\n\n        // Pass to origin\n        originChildProps[eventName]?.(event, ...args);\n      };\n    }\n\n    // ======================= Action: Touch ========================\n    const touchToShow = showActions.has('touch');\n    const touchToHide = hideActions.has('touch');\n\n    /** Used for prevent `hover` event conflict with mobile env */\n    const touchedRef = React.useRef(false);\n    if (touchToShow || touchToHide) {\n      cloneProps.onTouchStart = (...args) => {\n        touchedRef.current = true;\n        if (openRef.current && touchToHide) {\n          triggerOpen(false);\n        } else if (!openRef.current && touchToShow) {\n          triggerOpen(true);\n        }\n\n        // Pass to origin\n        originChildProps.onTouchStart?.(...args);\n      };\n    }\n\n    // ======================= Action: Click ========================\n    if (clickToShow || clickToHide) {\n      cloneProps.onClick = (event, ...args) => {\n        if (openRef.current && clickToHide) {\n          triggerOpen(false);\n        } else if (!openRef.current && clickToShow) {\n          setMousePosByEvent(event);\n          triggerOpen(true);\n        }\n\n        // Pass to origin\n        originChildProps.onClick?.(event, ...args);\n        touchedRef.current = false;\n      };\n    }\n\n    // Click to hide is special action since click popup element should not hide\n    const onPopupPointerDown = useWinClick(mergedOpen, clickToHide || touchToHide, targetEle, popupEle, mask, maskClosable, inPopupOrChild, triggerOpen);\n\n    // ======================= Action: Hover ========================\n    const hoverToShow = showActions.has('hover');\n    const hoverToHide = hideActions.has('hover');\n    let onPopupMouseEnter;\n    let onPopupMouseLeave;\n    const ignoreMouseTrigger = () => {\n      return touchedRef.current;\n    };\n    if (hoverToShow) {\n      const onMouseEnterCallback = event => {\n        setMousePosByEvent(event);\n      };\n\n      // Compatible with old browser which not support pointer event\n      wrapperAction('onMouseEnter', true, mouseEnterDelay, onMouseEnterCallback, ignoreMouseTrigger);\n      wrapperAction('onPointerEnter', true, mouseEnterDelay, onMouseEnterCallback, ignoreMouseTrigger);\n      onPopupMouseEnter = event => {\n        // Only trigger re-open when popup is visible\n        if ((mergedOpen || inMotion) && popupEle?.contains(event.target)) {\n          triggerOpen(true, mouseEnterDelay);\n        }\n      };\n\n      // Align Point\n      if (alignPoint) {\n        cloneProps.onMouseMove = event => {\n          originChildProps.onMouseMove?.(event);\n        };\n      }\n    }\n    if (hoverToHide) {\n      wrapperAction('onMouseLeave', false, mouseLeaveDelay, undefined, ignoreMouseTrigger);\n      wrapperAction('onPointerLeave', false, mouseLeaveDelay, undefined, ignoreMouseTrigger);\n      onPopupMouseLeave = () => {\n        triggerOpen(false, mouseLeaveDelay);\n      };\n    }\n\n    // ======================= Action: Focus ========================\n    if (showActions.has('focus')) {\n      wrapperAction('onFocus', true, focusDelay);\n    }\n    if (hideActions.has('focus')) {\n      wrapperAction('onBlur', false, blurDelay);\n    }\n\n    // ==================== Action: ContextMenu =====================\n    if (showActions.has('contextMenu')) {\n      cloneProps.onContextMenu = (event, ...args) => {\n        if (openRef.current && hideActions.has('contextMenu')) {\n          triggerOpen(false);\n        } else {\n          setMousePosByEvent(event);\n          triggerOpen(true);\n        }\n        event.preventDefault();\n\n        // Pass to origin\n        originChildProps.onContextMenu?.(event, ...args);\n      };\n    }\n\n    // ============================ Perf ============================\n    const rendedRef = React.useRef(false);\n    rendedRef.current ||= forceRender || mergedOpen || inMotion;\n\n    // =========================== Render ===========================\n    const mergedChildrenProps = {\n      ...originChildProps,\n      ...cloneProps\n    };\n\n    // Pass props into cloneProps for nest usage\n    const passedProps = {};\n    const passedEventList = ['onContextMenu', 'onClick', 'onMouseDown', 'onTouchStart', 'onMouseEnter', 'onMouseLeave', 'onFocus', 'onBlur'];\n    passedEventList.forEach(eventName => {\n      if (restProps[eventName]) {\n        passedProps[eventName] = (...args) => {\n          mergedChildrenProps[eventName]?.(...args);\n          restProps[eventName](...args);\n        };\n      }\n    });\n    const arrowPos = {\n      x: arrowX,\n      y: arrowY\n    };\n\n    // =================== Resize Observer ===================\n    // Use hook to observe target element resize\n    // Pass targetEle directly instead of a function so the hook will re-observe when target changes\n    useResizeObserver(mergedOpen, targetEle, onTargetResize);\n\n    // Compose refs\n    const mergedRef = useComposeRef(setTargetRef, getNodeRef(child));\n\n    // Child Node\n    const triggerNode = /*#__PURE__*/React.cloneElement(child, {\n      ...mergedChildrenProps,\n      ...passedProps,\n      ref: mergedRef\n    });\n\n    // Render\n    return /*#__PURE__*/React.createElement(React.Fragment, null, triggerNode, rendedRef.current && (!uniqueContext || !unique) && /*#__PURE__*/React.createElement(TriggerContext.Provider, {\n      value: context\n    }, /*#__PURE__*/React.createElement(Popup, {\n      portal: PortalComponent,\n      ref: setPopupRef,\n      prefixCls: prefixCls,\n      popup: popup,\n      className: clsx(popupClassName, !isMobile && alignedClassName),\n      style: popupStyle,\n      target: targetEle,\n      onMouseEnter: onPopupMouseEnter,\n      onMouseLeave: onPopupMouseLeave\n      // https://github.com/ant-design/ant-design/issues/43924\n      ,\n      onPointerEnter: onPopupMouseEnter,\n      zIndex: zIndex\n      // Open\n      ,\n      open: mergedOpen,\n      keepDom: inMotion,\n      fresh: fresh\n      // Click\n      ,\n      onClick: onPopupClick,\n      onPointerDownCapture: onPopupPointerDown\n      // Mask\n      ,\n      mask: mask\n      // Motion\n      ,\n      motion: popupMotion,\n      maskMotion: maskMotion,\n      onVisibleChanged: onVisibleChanged,\n      onPrepare: onPrepare\n      // Portal\n      ,\n      forceRender: forceRender,\n      autoDestroy: mergedAutoDestroy,\n      getPopupContainer: getPopupContainer,\n      onEsc: onEsc\n      // Arrow\n      ,\n      align: alignInfo,\n      arrow: innerArrow,\n      arrowPos: arrowPos\n      // Align\n      ,\n      ready: ready,\n      offsetX: offsetX,\n      offsetY: offsetY,\n      offsetR: offsetR,\n      offsetB: offsetB,\n      onAlign: triggerAlign\n      // Stretch\n      ,\n      stretch: stretch,\n      targetWidth: targetWidth / scaleX,\n      targetHeight: targetHeight / scaleY\n      // Mobile\n      ,\n      mobile: mobile\n    })));\n  });\n  if (process.env.NODE_ENV !== 'production') {\n    Trigger.displayName = 'Trigger';\n  }\n  return Trigger;\n}\nexport default generateTrigger(Portal);","import * as React from 'react';\nconst PickerContext = /*#__PURE__*/React.createContext(null);\nexport default PickerContext;","export function leftPad(str, length, fill = '0') {\n  let current = String(str);\n  while (current.length < length) {\n    current = `${fill}${current}`;\n  }\n  return current;\n}\n\n/**\n * Convert `value` to array. Will provide `[]` if is null or undefined.\n */\nexport function toArray(val) {\n  if (val === null || val === undefined) {\n    return [];\n  }\n  return Array.isArray(val) ? val : [val];\n}\nexport function fillIndex(ori, index, value) {\n  const clone = [...ori];\n  clone[index] = value;\n  return clone;\n}\n\n/** Pick props from the key list. Will filter empty value */\nexport function pickProps(props, keys) {\n  const clone = {};\n  const mergedKeys = keys || Object.keys(props);\n  mergedKeys.forEach(key => {\n    if (props[key] !== undefined) {\n      clone[key] = props[key];\n    }\n  });\n  return clone;\n}\nexport function getRowFormat(picker, locale, format) {\n  if (format) {\n    return format;\n  }\n  switch (picker) {\n    // All from the `locale.fieldXXXFormat` first\n    case 'time':\n      return locale.fieldTimeFormat;\n    case 'datetime':\n      return locale.fieldDateTimeFormat;\n    case 'month':\n      return locale.fieldMonthFormat;\n    case 'year':\n      return locale.fieldYearFormat;\n    case 'quarter':\n      return locale.fieldQuarterFormat;\n    case 'week':\n      return locale.fieldWeekFormat;\n    default:\n      return locale.fieldDateFormat;\n  }\n}\nexport function getFromDate(calendarValues, triggeredFields, activeIndex) {\n  const firstValuedIndex = triggeredFields.find(index => calendarValues[index]);\n  return activeIndex !== firstValuedIndex ? calendarValues[firstValuedIndex] : undefined;\n}","export const WEEK_DAY_COUNT = 7;\n\n/**\n * Wrap the compare logic.\n * This will compare the each of value is empty first.\n * 1. All is empty, return true.\n * 2. One is empty, return false.\n * 3. return customize compare logic.\n */\nfunction nullableCompare(value1, value2, oriCompareFn) {\n  if (!value1 && !value2 || value1 === value2) {\n    return true;\n  }\n  if (!value1 || !value2) {\n    return false;\n  }\n  return oriCompareFn();\n}\nexport function isSameDecade(generateConfig, decade1, decade2) {\n  return nullableCompare(decade1, decade2, () => {\n    const num1 = Math.floor(generateConfig.getYear(decade1) / 10);\n    const num2 = Math.floor(generateConfig.getYear(decade2) / 10);\n    return num1 === num2;\n  });\n}\nexport function isSameYear(generateConfig, year1, year2) {\n  return nullableCompare(year1, year2, () => generateConfig.getYear(year1) === generateConfig.getYear(year2));\n}\nexport function getQuarter(generateConfig, date) {\n  const quota = Math.floor(generateConfig.getMonth(date) / 3);\n  return quota + 1;\n}\nexport function isSameQuarter(generateConfig, quarter1, quarter2) {\n  return nullableCompare(quarter1, quarter2, () => isSameYear(generateConfig, quarter1, quarter2) && getQuarter(generateConfig, quarter1) === getQuarter(generateConfig, quarter2));\n}\nexport function isSameMonth(generateConfig, month1, month2) {\n  return nullableCompare(month1, month2, () => isSameYear(generateConfig, month1, month2) && generateConfig.getMonth(month1) === generateConfig.getMonth(month2));\n}\nexport function isSameDate(generateConfig, date1, date2) {\n  return nullableCompare(date1, date2, () => isSameYear(generateConfig, date1, date2) && isSameMonth(generateConfig, date1, date2) && generateConfig.getDate(date1) === generateConfig.getDate(date2));\n}\nexport function isSameTime(generateConfig, time1, time2) {\n  return nullableCompare(time1, time2, () => generateConfig.getHour(time1) === generateConfig.getHour(time2) && generateConfig.getMinute(time1) === generateConfig.getMinute(time2) && generateConfig.getSecond(time1) === generateConfig.getSecond(time2));\n}\n\n/**\n * Check if the Date is all the same of timestamp\n */\nexport function isSameTimestamp(generateConfig, time1, time2) {\n  return nullableCompare(time1, time2, () => isSameDate(generateConfig, time1, time2) && isSameTime(generateConfig, time1, time2) && generateConfig.getMillisecond(time1) === generateConfig.getMillisecond(time2));\n}\nexport function isSameWeek(generateConfig, locale, date1, date2) {\n  return nullableCompare(date1, date2, () => {\n    const weekStartDate1 = generateConfig.locale.getWeekFirstDate(locale, date1);\n    const weekStartDate2 = generateConfig.locale.getWeekFirstDate(locale, date2);\n    return isSameYear(generateConfig, weekStartDate1, weekStartDate2) && generateConfig.locale.getWeek(locale, date1) === generateConfig.locale.getWeek(locale, date2);\n  });\n}\nexport function isSame(generateConfig, locale, source, target, type) {\n  switch (type) {\n    case 'date':\n      return isSameDate(generateConfig, source, target);\n    case 'week':\n      return isSameWeek(generateConfig, locale.locale, source, target);\n    case 'month':\n      return isSameMonth(generateConfig, source, target);\n    case 'quarter':\n      return isSameQuarter(generateConfig, source, target);\n    case 'year':\n      return isSameYear(generateConfig, source, target);\n    case 'decade':\n      return isSameDecade(generateConfig, source, target);\n    case 'time':\n      return isSameTime(generateConfig, source, target);\n    default:\n      return isSameTimestamp(generateConfig, source, target);\n  }\n}\n\n/** Between in date but not equal of date */\nexport function isInRange(generateConfig, startDate, endDate, current) {\n  if (!startDate || !endDate || !current) {\n    return false;\n  }\n  return generateConfig.isAfter(current, startDate) && generateConfig.isAfter(endDate, current);\n}\nexport function isSameOrAfter(generateConfig, locale, date1, date2, type) {\n  if (isSame(generateConfig, locale, date1, date2, type)) {\n    return true;\n  }\n  return generateConfig.isAfter(date1, date2);\n}\nexport function getWeekStartDate(locale, generateConfig, value) {\n  const weekFirstDay = generateConfig.locale.getWeekFirstDay(locale);\n  const monthStartDate = generateConfig.setDate(value, 1);\n  const startDateWeekDay = generateConfig.getWeekDay(monthStartDate);\n  let alignStartDate = generateConfig.addDate(monthStartDate, weekFirstDay - startDateWeekDay);\n  if (generateConfig.getMonth(alignStartDate) === generateConfig.getMonth(value) && generateConfig.getDate(alignStartDate) > 1) {\n    alignStartDate = generateConfig.addDate(alignStartDate, -7);\n  }\n  return alignStartDate;\n}\nexport function formatValue(value, {\n  generateConfig,\n  locale,\n  format\n}) {\n  if (!value) {\n    return '';\n  }\n  return typeof format === 'function' ? format(value) : generateConfig.locale.format(locale.locale, value, format);\n}\n\n/**\n * Fill the time info into Date if provided.\n */\nexport function fillTime(generateConfig, date, time) {\n  let tmpDate = date;\n  const getFn = ['getHour', 'getMinute', 'getSecond', 'getMillisecond'];\n  const setFn = ['setHour', 'setMinute', 'setSecond', 'setMillisecond'];\n  setFn.forEach((fn, index) => {\n    if (time) {\n      tmpDate = generateConfig[fn](tmpDate, generateConfig[getFn[index]](time));\n    } else {\n      tmpDate = generateConfig[fn](tmpDate, 0);\n    }\n  });\n  return tmpDate;\n}","import { warning } from '@rc-component/util';\nimport * as React from 'react';\nexport default function useCellRender(cellRender, dateRender, monthCellRender, range) {\n  // ========================= Warn =========================\n  if (process.env.NODE_ENV !== 'production') {\n    warning(!dateRender, `'dateRender' is deprecated. Please use 'cellRender' instead.`);\n    warning(!monthCellRender, `'monthCellRender' is deprecated. Please use 'cellRender' instead.`);\n  }\n\n  // ======================== Render ========================\n  // Merged render\n  const mergedCellRender = React.useMemo(() => {\n    if (cellRender) {\n      return cellRender;\n    }\n    return (current, info) => {\n      const date = current;\n      if (dateRender && info.type === 'date') {\n        return dateRender(date, info.today);\n      }\n      if (monthCellRender && info.type === 'month') {\n        return monthCellRender(date, info.locale);\n      }\n      return info.originNode;\n    };\n  }, [cellRender, monthCellRender, dateRender]);\n\n  // Cell render\n  const onInternalCellRender = React.useCallback((date, info) => mergedCellRender(date, {\n    ...info,\n    range\n  }), [mergedCellRender, range]);\n  return onInternalCellRender;\n}","import React from 'react';\nexport function fillTimeFormat(showHour, showMinute, showSecond, showMillisecond, showMeridiem) {\n  // Base HH:mm:ss\n  const cells = [];\n  if (showHour) {\n    cells.push(showMeridiem ? 'hh' : 'HH');\n  }\n  if (showMinute) {\n    cells.push('mm');\n  }\n  if (showSecond) {\n    cells.push('ss');\n  }\n  let timeFormat = cells.join(':');\n\n  // Millisecond\n  if (showMillisecond) {\n    timeFormat += '.SSS';\n  }\n\n  // Meridiem\n  if (showMeridiem) {\n    timeFormat += ' A';\n  }\n  return timeFormat;\n}\n\n/**\n * Used for `useFilledProps` since it already in the React.useMemo\n */\nfunction fillLocale(locale, showHour, showMinute, showSecond, showMillisecond, use12Hours) {\n  // Not fill `monthFormat` since `locale.shortMonths` handle this\n  // Not fill `cellMeridiemFormat` since AM & PM by default\n  const {\n    // Input Field\n    fieldDateTimeFormat,\n    fieldDateFormat,\n    fieldTimeFormat,\n    fieldMonthFormat,\n    fieldYearFormat,\n    fieldWeekFormat,\n    fieldQuarterFormat,\n    // Header Format\n    yearFormat,\n    // monthFormat,\n\n    // Cell format\n    cellYearFormat,\n    cellQuarterFormat,\n    dayFormat,\n    cellDateFormat\n\n    // cellMeridiemFormat,\n  } = locale;\n  const timeFormat = fillTimeFormat(showHour, showMinute, showSecond, showMillisecond, use12Hours);\n  return {\n    ...locale,\n    fieldDateTimeFormat: fieldDateTimeFormat || `YYYY-MM-DD ${timeFormat}`,\n    fieldDateFormat: fieldDateFormat || 'YYYY-MM-DD',\n    fieldTimeFormat: fieldTimeFormat || timeFormat,\n    fieldMonthFormat: fieldMonthFormat || 'YYYY-MM',\n    fieldYearFormat: fieldYearFormat || 'YYYY',\n    fieldWeekFormat: fieldWeekFormat || 'gggg-wo',\n    fieldQuarterFormat: fieldQuarterFormat || 'YYYY-[Q]Q',\n    yearFormat: yearFormat || 'YYYY',\n    cellYearFormat: cellYearFormat || 'YYYY',\n    cellQuarterFormat: cellQuarterFormat || '[Q]Q',\n    cellDateFormat: cellDateFormat || dayFormat || 'D'\n  };\n}\n\n/**\n * Fill locale format as start up\n */\nexport default function useLocale(locale, showProps) {\n  const {\n    showHour,\n    showMinute,\n    showSecond,\n    showMillisecond,\n    use12Hours\n  } = showProps;\n  return React.useMemo(() => fillLocale(locale, showHour, showMinute, showSecond, showMillisecond, use12Hours), [locale, showHour, showMinute, showSecond, showMillisecond, use12Hours]);\n}","import { getRowFormat, pickProps, toArray } from \"../utils/miscUtil\";\nimport { fillTimeFormat } from \"./useLocale\";\nfunction checkShow(format, keywords, show) {\n  return show ?? keywords.some(keyword => format.includes(keyword));\n}\nconst showTimeKeys = [\n// 'format',\n'showNow', 'showHour', 'showMinute', 'showSecond', 'showMillisecond', 'use12Hours', 'hourStep', 'minuteStep', 'secondStep', 'millisecondStep', 'hideDisabledOptions', 'defaultValue', 'disabledHours', 'disabledMinutes', 'disabledSeconds', 'disabledMilliseconds', 'disabledTime', 'changeOnScroll', 'defaultOpenValue'];\n\n/**\n * Get SharedTimeProps from props.\n */\nfunction pickTimeProps(props) {\n  const timeProps = pickProps(props, showTimeKeys);\n  const {\n    format,\n    picker\n  } = props;\n  let propFormat = null;\n  if (format) {\n    propFormat = format;\n    if (Array.isArray(propFormat)) {\n      propFormat = propFormat[0];\n    }\n    propFormat = typeof propFormat === 'object' ? propFormat.format : propFormat;\n  }\n  if (picker === 'time') {\n    timeProps.format = propFormat;\n  }\n  return [timeProps, propFormat];\n}\nfunction isStringFormat(format) {\n  return format && typeof format === 'string';\n}\n/** Check if all the showXXX is `undefined` */\nfunction existShowConfig(showHour, showMinute, showSecond, showMillisecond) {\n  return [showHour, showMinute, showSecond, showMillisecond].some(show => show !== undefined);\n}\n\n/** Fill the showXXX if needed */\nfunction fillShowConfig(hasShowConfig, showHour, showMinute, showSecond, showMillisecond) {\n  let parsedShowHour = showHour;\n  let parsedShowMinute = showMinute;\n  let parsedShowSecond = showSecond;\n  if (!hasShowConfig && !parsedShowHour && !parsedShowMinute && !parsedShowSecond && !showMillisecond) {\n    parsedShowHour = true;\n    parsedShowMinute = true;\n    parsedShowSecond = true;\n  } else if (hasShowConfig) {\n    const existFalse = [parsedShowHour, parsedShowMinute, parsedShowSecond].some(show => show === false);\n    const existTrue = [parsedShowHour, parsedShowMinute, parsedShowSecond].some(show => show === true);\n    const defaultShow = existFalse ? true : !existTrue;\n    parsedShowHour = parsedShowHour ?? defaultShow;\n    parsedShowMinute = parsedShowMinute ?? defaultShow;\n    parsedShowSecond = parsedShowSecond ?? defaultShow;\n  }\n  return [parsedShowHour, parsedShowMinute, parsedShowSecond, showMillisecond];\n}\n\n/**\n * Get `showHour`, `showMinute`, `showSecond` or other from the props.\n * This is pure function, will not get `showXXX` from the `format` prop.\n */\nexport function getTimeProps(componentProps) {\n  const {\n    showTime\n  } = componentProps;\n  const [pickedProps, propFormat] = pickTimeProps(componentProps);\n  const showTimeConfig = showTime && typeof showTime === 'object' ? showTime : {};\n  const timeConfig = {\n    defaultOpenValue: showTimeConfig.defaultOpenValue || showTimeConfig.defaultValue,\n    ...pickedProps,\n    ...showTimeConfig\n  };\n  const {\n    showMillisecond\n  } = timeConfig;\n  let {\n    showHour,\n    showMinute,\n    showSecond\n  } = timeConfig;\n  const hasShowConfig = existShowConfig(showHour, showMinute, showSecond, showMillisecond);\n  [showHour, showMinute, showSecond] = fillShowConfig(hasShowConfig, showHour, showMinute, showSecond, showMillisecond);\n  return [timeConfig, {\n    ...timeConfig,\n    showHour,\n    showMinute,\n    showSecond,\n    showMillisecond\n  }, timeConfig.format, propFormat];\n}\nexport function fillShowTimeConfig(picker, showTimeFormat, propFormat, timeConfig, locale) {\n  const isTimePicker = picker === 'time';\n  if (picker === 'datetime' || isTimePicker) {\n    const pickedProps = timeConfig;\n\n    // ====================== BaseFormat ======================\n    const defaultLocaleFormat = getRowFormat(picker, locale, null);\n    let baselineFormat = defaultLocaleFormat;\n    const formatList = [showTimeFormat, propFormat];\n    for (let i = 0; i < formatList.length; i += 1) {\n      const format = toArray(formatList[i])[0];\n      if (isStringFormat(format)) {\n        baselineFormat = format;\n        break;\n      }\n    }\n\n    // ========================= Show =========================\n    let {\n      showHour,\n      showMinute,\n      showSecond,\n      showMillisecond\n    } = pickedProps;\n    const {\n      use12Hours\n    } = pickedProps;\n    const showMeridiem = checkShow(baselineFormat, ['a', 'A', 'LT', 'LLL', 'LTS'], use12Hours);\n    const hasShowConfig = existShowConfig(showHour, showMinute, showSecond, showMillisecond);\n\n    // Fill with format, if needed\n    if (!hasShowConfig) {\n      showHour = checkShow(baselineFormat, ['H', 'h', 'k', 'LT', 'LLL']);\n      showMinute = checkShow(baselineFormat, ['m', 'LT', 'LLL']);\n      showSecond = checkShow(baselineFormat, ['s', 'LTS']);\n      showMillisecond = checkShow(baselineFormat, ['SSS']);\n    }\n\n    // Fallback if all can not see\n    [showHour, showMinute, showSecond] = fillShowConfig(hasShowConfig, showHour, showMinute, showSecond, showMillisecond);\n\n    // ======================== Format ========================\n    const timeFormat = showTimeFormat || fillTimeFormat(showHour, showMinute, showSecond, showMillisecond, showMeridiem);\n\n    // ======================== Props =========================\n    return {\n      ...pickedProps,\n      // Format\n      format: timeFormat,\n      // Show Config\n      showHour,\n      showMinute,\n      showSecond,\n      showMillisecond,\n      use12Hours: showMeridiem\n    };\n  }\n  return null;\n}","export function findValidateTime(date, getHourUnits, getMinuteUnits, getSecondUnits, getMillisecondUnits, generateConfig) {\n  let nextDate = date;\n  function alignValidate(getUnitValue, setUnitValue, units) {\n    let nextValue = generateConfig[getUnitValue](nextDate);\n    const nextUnit = units.find(unit => unit.value === nextValue);\n    if (!nextUnit || nextUnit.disabled) {\n      // Find most closest unit\n      const validateUnits = units.filter(unit => !unit.disabled);\n      const reverseEnabledUnits = [...validateUnits].reverse();\n      const validateUnit = reverseEnabledUnits.find(unit => unit.value <= nextValue) || validateUnits[0];\n      if (validateUnit) {\n        nextValue = validateUnit.value;\n        nextDate = generateConfig[setUnitValue](nextDate, nextValue);\n      }\n    }\n    return nextValue;\n  }\n\n  // Find validate hour\n  const nextHour = alignValidate('getHour', 'setHour', getHourUnits());\n\n  // Find validate minute\n  const nextMinute = alignValidate('getMinute', 'setMinute', getMinuteUnits(nextHour));\n\n  // Find validate second\n  const nextSecond = alignValidate('getSecond', 'setSecond', getSecondUnits(nextHour, nextMinute));\n\n  // Find validate millisecond\n  alignValidate('getMillisecond', 'setMillisecond', getMillisecondUnits(nextHour, nextMinute, nextSecond));\n  return nextDate;\n}","import { warning } from '@rc-component/util';\nimport * as React from 'react';\nimport { findValidateTime } from \"../PickerPanel/TimePanel/TimePanelBody/util\";\nimport { leftPad } from \"../utils/miscUtil\";\nfunction emptyDisabled() {\n  return [];\n}\nfunction generateUnits(start, end, step = 1, hideDisabledOptions = false, disabledUnits = [], pad = 2) {\n  const units = [];\n  const integerStep = step >= 1 ? step | 0 : 1;\n  for (let i = start; i <= end; i += integerStep) {\n    const disabled = disabledUnits.includes(i);\n    if (!disabled || !hideDisabledOptions) {\n      units.push({\n        label: leftPad(i, pad),\n        value: i,\n        disabled\n      });\n    }\n  }\n  return units;\n}\n\n/**\n * Parse time props to get util info\n */\nexport default function useTimeInfo(generateConfig, props = {}, date) {\n  const {\n    // Show\n    use12Hours,\n    // Steps\n    hourStep = 1,\n    minuteStep = 1,\n    secondStep = 1,\n    millisecondStep = 100,\n    // Disabled\n    hideDisabledOptions,\n    disabledTime,\n    disabledHours,\n    disabledMinutes,\n    disabledSeconds\n  } = props || {};\n  const mergedDate = React.useMemo(() => date || generateConfig.getNow(), [date, generateConfig]);\n\n  // ======================== Warnings ========================\n  if (process.env.NODE_ENV !== 'production') {\n    const isHourStepValid = 24 % hourStep === 0;\n    const isMinuteStepValid = 60 % minuteStep === 0;\n    const isSecondStepValid = 60 % secondStep === 0;\n    warning(isHourStepValid, `\\`hourStep\\` ${hourStep} is invalid. It should be a factor of 24.`);\n    warning(isMinuteStepValid, `\\`minuteStep\\` ${minuteStep} is invalid. It should be a factor of 60.`);\n    warning(isSecondStepValid, `\\`secondStep\\` ${secondStep} is invalid. It should be a factor of 60.`);\n  }\n\n  // ======================== Disabled ========================\n  const getDisabledTimes = React.useCallback(targetDate => {\n    const disabledConfig = disabledTime?.(targetDate) || {};\n    return [disabledConfig.disabledHours || disabledHours || emptyDisabled, disabledConfig.disabledMinutes || disabledMinutes || emptyDisabled, disabledConfig.disabledSeconds || disabledSeconds || emptyDisabled, disabledConfig.disabledMilliseconds || emptyDisabled];\n  }, [disabledTime, disabledHours, disabledMinutes, disabledSeconds]);\n  const [mergedDisabledHours, mergedDisabledMinutes, mergedDisabledSeconds, mergedDisabledMilliseconds] = React.useMemo(() => getDisabledTimes(mergedDate), [mergedDate, getDisabledTimes]);\n\n  // ========================= Column =========================\n  const getAllUnits = React.useCallback((getDisabledHours, getDisabledMinutes, getDisabledSeconds, getDisabledMilliseconds) => {\n    const hours = generateUnits(0, 23, hourStep, hideDisabledOptions, getDisabledHours());\n\n    // Hours\n    const rowHourUnits = use12Hours ? hours.map(unit => ({\n      ...unit,\n      label: leftPad(unit.value % 12 || 12, 2)\n    })) : hours;\n\n    // Minutes\n    const getMinuteUnits = nextHour => generateUnits(0, 59, minuteStep, hideDisabledOptions, getDisabledMinutes(nextHour));\n\n    // Seconds\n    const getSecondUnits = (nextHour, nextMinute) => generateUnits(0, 59, secondStep, hideDisabledOptions, getDisabledSeconds(nextHour, nextMinute));\n\n    // Milliseconds\n    const getMillisecondUnits = (nextHour, nextMinute, nextSecond) => generateUnits(0, 999, millisecondStep, hideDisabledOptions, getDisabledMilliseconds(nextHour, nextMinute, nextSecond), 3);\n    return [rowHourUnits, getMinuteUnits, getSecondUnits, getMillisecondUnits];\n  }, [hideDisabledOptions, hourStep, use12Hours, millisecondStep, minuteStep, secondStep]);\n  const [rowHourUnits, getMinuteUnits, getSecondUnits, getMillisecondUnits] = React.useMemo(() => getAllUnits(mergedDisabledHours, mergedDisabledMinutes, mergedDisabledSeconds, mergedDisabledMilliseconds), [getAllUnits, mergedDisabledHours, mergedDisabledMinutes, mergedDisabledSeconds, mergedDisabledMilliseconds]);\n\n  // ======================== Validate ========================\n  /**\n   * Get validate time with `disabledTime`, `certainDate` to specific the date need to check\n   */\n  const getValidTime = (nextTime, certainDate) => {\n    let getCheckHourUnits = () => rowHourUnits;\n    let getCheckMinuteUnits = getMinuteUnits;\n    let getCheckSecondUnits = getSecondUnits;\n    let getCheckMillisecondUnits = getMillisecondUnits;\n    if (certainDate) {\n      const [targetDisabledHours, targetDisabledMinutes, targetDisabledSeconds, targetDisabledMilliseconds] = getDisabledTimes(certainDate);\n      const [targetRowHourUnits, targetGetMinuteUnits, targetGetSecondUnits, targetGetMillisecondUnits] = getAllUnits(targetDisabledHours, targetDisabledMinutes, targetDisabledSeconds, targetDisabledMilliseconds);\n      getCheckHourUnits = () => targetRowHourUnits;\n      getCheckMinuteUnits = targetGetMinuteUnits;\n      getCheckSecondUnits = targetGetSecondUnits;\n      getCheckMillisecondUnits = targetGetMillisecondUnits;\n    }\n    const validateDate = findValidateTime(nextTime, getCheckHourUnits, getCheckMinuteUnits, getCheckSecondUnits, getCheckMillisecondUnits, generateConfig);\n    return validateDate;\n  };\n  return [\n  // getValidTime\n  getValidTime,\n  // Units\n  rowHourUnits, getMinuteUnits, getSecondUnits, getMillisecondUnits];\n}","import { isSame } from \"../utils/dateUtil\";\n/**\n * Toggles the presence of a value in an array.\n * If the value exists in the array, removed it.\n * Else add it.\n */\nexport default function useToggleDates(generateConfig, locale, panelMode) {\n  function toggleDates(list, target) {\n    const index = list.findIndex(date => isSame(generateConfig, locale, date, target, panelMode));\n    if (index === -1) {\n      return [...list, target];\n    }\n    const sliceList = [...list];\n    sliceList.splice(index, 1);\n    return sliceList;\n  }\n  return toggleDates;\n}","import * as React from 'react';\nexport const SharedPanelContext = /*#__PURE__*/React.createContext(null);\n/** Used for each single Panel. e.g. DatePanel */\nexport const PanelContext = /*#__PURE__*/React.createContext(null);\nexport function usePanelContext() {\n  return React.useContext(PanelContext);\n}\n\n/**\n * Get shared props for the SharedPanelProps interface.\n */\nexport function useInfo(props, panelType) {\n  // TODO: this is not good to get from each props.\n  // Should move to `SharedPanelContext` instead.\n  const {\n    prefixCls,\n    generateConfig,\n    locale,\n    disabledDate,\n    minDate,\n    maxDate,\n    cellRender,\n    hoverValue,\n    hoverRangeValue,\n    onHover,\n    values,\n    pickerValue,\n    onSelect,\n    // Icons\n    prevIcon,\n    nextIcon,\n    superPrevIcon,\n    superNextIcon\n  } = props;\n\n  // ======================= Context ========================\n  const {\n    classNames,\n    styles\n  } = React.useContext(SharedPanelContext);\n\n  // ========================= MISC =========================\n  const now = generateConfig.getNow();\n\n  // ========================= Info =========================\n  const info = {\n    now,\n    values,\n    pickerValue,\n    prefixCls,\n    classNames,\n    styles,\n    disabledDate,\n    minDate,\n    maxDate,\n    cellRender,\n    hoverValue,\n    hoverRangeValue,\n    onHover,\n    locale,\n    generateConfig,\n    onSelect,\n    panelType,\n    // Icons\n    prevIcon,\n    nextIcon,\n    superPrevIcon,\n    superNextIcon\n  };\n  return [info, now];\n}\n\n// ============================== Internal ==============================\n\n/**\n * Internal usage for RangePicker to not to show the operation arrow\n */\nexport const PickerHackContext = /*#__PURE__*/React.createContext({});\nif (process.env.NODE_ENV !== 'production') {\n  PickerHackContext.displayName = 'PickerHackContext';\n}","import { clsx } from 'clsx';\nimport { isNonNullable } from '@rc-component/util';\nimport * as React from 'react';\nimport { formatValue, isInRange, isSame } from \"../utils/dateUtil\";\nimport { PickerHackContext, usePanelContext } from \"./context\";\nexport default function PanelBody(props) {\n  const {\n    rowNum,\n    colNum,\n    baseDate,\n    getCellDate,\n    prefixColumn,\n    rowClassName,\n    titleFormat,\n    getCellText,\n    getCellClassName,\n    headerCells,\n    cellSelection = true,\n    disabledDate\n  } = props;\n  const {\n    prefixCls,\n    classNames,\n    styles,\n    panelType: type,\n    now,\n    disabledDate: contextDisabledDate,\n    cellRender,\n    onHover,\n    hoverValue,\n    hoverRangeValue,\n    generateConfig,\n    values,\n    locale,\n    onSelect\n  } = usePanelContext();\n  const mergedDisabledDate = disabledDate || contextDisabledDate;\n  const cellPrefixCls = `${prefixCls}-cell`;\n\n  // ============================= Context ==============================\n  const {\n    onCellDblClick\n  } = React.useContext(PickerHackContext);\n\n  // ============================== Value ===============================\n  const matchValues = date => values.some(singleValue => singleValue && isSame(generateConfig, locale, date, singleValue, type));\n\n  // =============================== Body ===============================\n  const rows = [];\n  for (let row = 0; row < rowNum; row += 1) {\n    const rowNode = [];\n    let rowStartDate;\n    for (let col = 0; col < colNum; col += 1) {\n      const offset = row * colNum + col;\n      const currentDate = getCellDate(baseDate, offset);\n      const disabled = mergedDisabledDate?.(currentDate, {\n        type: type\n      });\n\n      // Row Start Cell\n      if (col === 0) {\n        rowStartDate = currentDate;\n        if (prefixColumn) {\n          rowNode.push(prefixColumn(rowStartDate));\n        }\n      }\n\n      // Range\n      let inRange = false;\n      let rangeStart = false;\n      let rangeEnd = false;\n      if (cellSelection && hoverRangeValue) {\n        const [hoverStart, hoverEnd] = hoverRangeValue;\n        inRange = isInRange(generateConfig, hoverStart, hoverEnd, currentDate);\n        rangeStart = isSame(generateConfig, locale, currentDate, hoverStart, type);\n        rangeEnd = isSame(generateConfig, locale, currentDate, hoverEnd, type);\n      }\n\n      // Title\n      const title = titleFormat ? formatValue(currentDate, {\n        locale,\n        format: titleFormat,\n        generateConfig\n      }) : undefined;\n\n      // Render\n      const inner = /*#__PURE__*/React.createElement(\"div\", {\n        className: `${cellPrefixCls}-inner`\n      }, getCellText(currentDate));\n      rowNode.push( /*#__PURE__*/React.createElement(\"td\", {\n        key: col,\n        title: title,\n        className: clsx(cellPrefixCls, classNames.item, {\n          [`${cellPrefixCls}-disabled`]: disabled,\n          [`${cellPrefixCls}-hover`]: (hoverValue || []).some(date => isSame(generateConfig, locale, currentDate, date, type)),\n          [`${cellPrefixCls}-in-range`]: inRange && !rangeStart && !rangeEnd,\n          [`${cellPrefixCls}-range-start`]: rangeStart,\n          [`${cellPrefixCls}-range-end`]: rangeEnd,\n          [`${prefixCls}-cell-selected`]: !hoverRangeValue &&\n          // WeekPicker use row instead\n          type !== 'week' && matchValues(currentDate),\n          ...getCellClassName(currentDate)\n        }),\n        style: styles.item,\n        onClick: () => {\n          if (!disabled) {\n            onSelect(currentDate);\n          }\n        },\n        onDoubleClick: () => {\n          if (!disabled && onCellDblClick) {\n            onCellDblClick();\n          }\n        },\n        onMouseEnter: () => {\n          if (!disabled) {\n            onHover?.(currentDate);\n          }\n        },\n        onMouseLeave: () => {\n          if (!disabled) {\n            onHover?.(null);\n          }\n        }\n      }, cellRender ? cellRender(currentDate, {\n        prefixCls,\n        originNode: inner,\n        today: now,\n        type: type,\n        locale\n      }) : inner));\n    }\n    rows.push( /*#__PURE__*/React.createElement(\"tr\", {\n      key: row,\n      className: rowClassName?.(rowStartDate)\n    }, rowNode));\n  }\n\n  // ============================== Render ==============================\n  return /*#__PURE__*/React.createElement(\"div\", {\n    className: clsx(`${prefixCls}-body`, classNames.body),\n    style: styles.body\n  }, /*#__PURE__*/React.createElement(\"table\", {\n    className: clsx(`${prefixCls}-content`, classNames.content),\n    style: styles.content\n  }, isNonNullable(headerCells) && /*#__PURE__*/React.createElement(\"thead\", null, /*#__PURE__*/React.createElement(\"tr\", null, headerCells)), /*#__PURE__*/React.createElement(\"tbody\", null, rows)));\n}","import { clsx } from 'clsx';\nimport * as React from 'react';\nimport { isSameOrAfter } from \"../utils/dateUtil\";\nimport { PickerHackContext, usePanelContext } from \"./context\";\nconst HIDDEN_STYLE = {\n  visibility: 'hidden'\n};\nfunction PanelHeader(props) {\n  const {\n    offset,\n    superOffset,\n    onChange,\n    getStart,\n    getEnd,\n    children\n  } = props;\n  const {\n    prefixCls,\n    classNames,\n    styles,\n    // Icons\n    prevIcon = '\\u2039',\n    nextIcon = '\\u203A',\n    superPrevIcon = '\\u00AB',\n    superNextIcon = '\\u00BB',\n    // Limitation\n    minDate,\n    maxDate,\n    generateConfig,\n    locale,\n    pickerValue,\n    panelType: type\n  } = usePanelContext();\n  const headerPrefixCls = `${prefixCls}-header`;\n  const {\n    hidePrev,\n    hideNext,\n    hideHeader\n  } = React.useContext(PickerHackContext);\n\n  // ======================= Limitation =======================\n  const disabledOffsetPrev = React.useMemo(() => {\n    if (!minDate || !offset || !getEnd) {\n      return false;\n    }\n    const prevPanelLimitDate = getEnd(offset(-1, pickerValue));\n    return !isSameOrAfter(generateConfig, locale, prevPanelLimitDate, minDate, type);\n  }, [minDate, offset, pickerValue, getEnd, generateConfig, locale, type]);\n  const disabledSuperOffsetPrev = React.useMemo(() => {\n    if (!minDate || !superOffset || !getEnd) {\n      return false;\n    }\n    const prevPanelLimitDate = getEnd(superOffset(-1, pickerValue));\n    return !isSameOrAfter(generateConfig, locale, prevPanelLimitDate, minDate, type);\n  }, [minDate, superOffset, pickerValue, getEnd, generateConfig, locale, type]);\n  const disabledOffsetNext = React.useMemo(() => {\n    if (!maxDate || !offset || !getStart) {\n      return false;\n    }\n    const nextPanelLimitDate = getStart(offset(1, pickerValue));\n    return !isSameOrAfter(generateConfig, locale, maxDate, nextPanelLimitDate, type);\n  }, [maxDate, offset, pickerValue, getStart, generateConfig, locale, type]);\n  const disabledSuperOffsetNext = React.useMemo(() => {\n    if (!maxDate || !superOffset || !getStart) {\n      return false;\n    }\n    const nextPanelLimitDate = getStart(superOffset(1, pickerValue));\n    return !isSameOrAfter(generateConfig, locale, maxDate, nextPanelLimitDate, type);\n  }, [maxDate, superOffset, pickerValue, getStart, generateConfig, locale, type]);\n\n  // ========================= Offset =========================\n  const onOffset = distance => {\n    if (offset) {\n      onChange(offset(distance, pickerValue));\n    }\n  };\n  const onSuperOffset = distance => {\n    if (superOffset) {\n      onChange(superOffset(distance, pickerValue));\n    }\n  };\n\n  // ========================= Render =========================\n  if (hideHeader) {\n    return null;\n  }\n  const prevBtnCls = `${headerPrefixCls}-prev-btn`;\n  const nextBtnCls = `${headerPrefixCls}-next-btn`;\n  const superPrevBtnCls = `${headerPrefixCls}-super-prev-btn`;\n  const superNextBtnCls = `${headerPrefixCls}-super-next-btn`;\n  return /*#__PURE__*/React.createElement(\"div\", {\n    className: clsx(headerPrefixCls, classNames.header),\n    style: styles.header\n  }, superOffset && /*#__PURE__*/React.createElement(\"button\", {\n    type: \"button\",\n    \"aria-label\": locale.previousYear,\n    onClick: () => onSuperOffset(-1),\n    tabIndex: -1,\n    className: clsx(superPrevBtnCls, disabledSuperOffsetPrev && `${superPrevBtnCls}-disabled`),\n    disabled: disabledSuperOffsetPrev,\n    style: hidePrev ? HIDDEN_STYLE : {}\n  }, superPrevIcon), offset && /*#__PURE__*/React.createElement(\"button\", {\n    type: \"button\",\n    \"aria-label\": locale.previousMonth,\n    onClick: () => onOffset(-1),\n    tabIndex: -1,\n    className: clsx(prevBtnCls, disabledOffsetPrev && `${prevBtnCls}-disabled`),\n    disabled: disabledOffsetPrev,\n    style: hidePrev ? HIDDEN_STYLE : {}\n  }, prevIcon), /*#__PURE__*/React.createElement(\"div\", {\n    className: `${headerPrefixCls}-view`\n  }, children), offset && /*#__PURE__*/React.createElement(\"button\", {\n    type: \"button\",\n    \"aria-label\": locale.nextMonth,\n    onClick: () => onOffset(1),\n    tabIndex: -1,\n    className: clsx(nextBtnCls, disabledOffsetNext && `${nextBtnCls}-disabled`),\n    disabled: disabledOffsetNext,\n    style: hideNext ? HIDDEN_STYLE : {}\n  }, nextIcon), superOffset && /*#__PURE__*/React.createElement(\"button\", {\n    type: \"button\",\n    \"aria-label\": locale.nextYear,\n    onClick: () => onSuperOffset(1),\n    tabIndex: -1,\n    className: clsx(superNextBtnCls, disabledSuperOffsetNext && `${superNextBtnCls}-disabled`),\n    disabled: disabledSuperOffsetNext,\n    style: hideNext ? HIDDEN_STYLE : {}\n  }, superNextIcon));\n}\nexport default PanelHeader;","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport { clsx } from 'clsx';\nimport * as React from 'react';\nimport { formatValue, getWeekStartDate, isSameDate, isSameMonth, WEEK_DAY_COUNT } from \"../../utils/dateUtil\";\nimport { PanelContext, useInfo } from \"../context\";\nimport PanelBody from \"../PanelBody\";\nimport PanelHeader from \"../PanelHeader\";\nexport default function DatePanel(props) {\n  const {\n    prefixCls,\n    panelName = 'date',\n    locale,\n    generateConfig,\n    pickerValue,\n    onPickerValueChange,\n    onModeChange,\n    mode = 'date',\n    disabledDate,\n    onSelect,\n    onHover,\n    showWeek\n  } = props;\n  const panelPrefixCls = `${prefixCls}-${panelName}-panel`;\n  const cellPrefixCls = `${prefixCls}-cell`;\n  const isWeek = mode === 'week';\n\n  // ========================== Base ==========================\n  const [info, now] = useInfo(props, mode);\n  const weekFirstDay = generateConfig.locale.getWeekFirstDay(locale.locale);\n  const monthStartDate = generateConfig.setDate(pickerValue, 1);\n  const baseDate = getWeekStartDate(locale.locale, generateConfig, monthStartDate);\n  const month = generateConfig.getMonth(pickerValue);\n\n  // =========================== PrefixColumn ===========================\n  const showPrefixColumn = showWeek === undefined ? isWeek : showWeek;\n  const prefixColumn = showPrefixColumn ? date => {\n    // >>> Additional check for disabled\n    const disabled = disabledDate?.(date, {\n      type: 'week'\n    });\n    return /*#__PURE__*/React.createElement(\"td\", {\n      key: \"week\",\n      className: clsx(cellPrefixCls, `${cellPrefixCls}-week`, {\n        [`${cellPrefixCls}-disabled`]: disabled\n      })\n      // Operation: Same as code in PanelBody\n      ,\n      onClick: () => {\n        if (!disabled) {\n          onSelect(date);\n        }\n      },\n      onMouseEnter: () => {\n        if (!disabled) {\n          onHover?.(date);\n        }\n      },\n      onMouseLeave: () => {\n        if (!disabled) {\n          onHover?.(null);\n        }\n      }\n    }, /*#__PURE__*/React.createElement(\"div\", {\n      className: `${cellPrefixCls}-inner`\n    }, generateConfig.locale.getWeek(locale.locale, date)));\n  } : null;\n\n  // ========================= Cells ==========================\n  // >>> Header Cells\n  const headerCells = [];\n  const weekDaysLocale = locale.shortWeekDays || (generateConfig.locale.getShortWeekDays ? generateConfig.locale.getShortWeekDays(locale.locale) : []);\n  if (prefixColumn) {\n    headerCells.push( /*#__PURE__*/React.createElement(\"th\", {\n      key: \"empty\"\n    }, /*#__PURE__*/React.createElement(\"span\", {\n      style: {\n        width: 0,\n        height: 0,\n        position: 'absolute',\n        overflow: 'hidden',\n        opacity: 0\n      }\n    }, locale.week)));\n  }\n  for (let i = 0; i < WEEK_DAY_COUNT; i += 1) {\n    headerCells.push( /*#__PURE__*/React.createElement(\"th\", {\n      key: i\n    }, weekDaysLocale[(i + weekFirstDay) % WEEK_DAY_COUNT]));\n  }\n\n  // >>> Body Cells\n  const getCellDate = (date, offset) => {\n    return generateConfig.addDate(date, offset);\n  };\n  const getCellText = date => {\n    return formatValue(date, {\n      locale,\n      format: locale.cellDateFormat,\n      generateConfig\n    });\n  };\n  const getCellClassName = date => {\n    const classObj = {\n      [`${prefixCls}-cell-in-view`]: isSameMonth(generateConfig, date, pickerValue),\n      [`${prefixCls}-cell-today`]: isSameDate(generateConfig, date, now)\n    };\n    return classObj;\n  };\n\n  // ========================= Header =========================\n  const monthsLocale = locale.shortMonths || (generateConfig.locale.getShortMonths ? generateConfig.locale.getShortMonths(locale.locale) : []);\n  const yearNode = /*#__PURE__*/React.createElement(\"button\", {\n    type: \"button\",\n    \"aria-label\": locale.yearSelect,\n    key: \"year\",\n    onClick: () => {\n      onModeChange('year', pickerValue);\n    },\n    tabIndex: -1,\n    className: `${prefixCls}-year-btn`\n  }, formatValue(pickerValue, {\n    locale,\n    format: locale.yearFormat,\n    generateConfig\n  }));\n  const monthNode = /*#__PURE__*/React.createElement(\"button\", {\n    type: \"button\",\n    \"aria-label\": locale.monthSelect,\n    key: \"month\",\n    onClick: () => {\n      onModeChange('month', pickerValue);\n    },\n    tabIndex: -1,\n    className: `${prefixCls}-month-btn`\n  }, locale.monthFormat ? formatValue(pickerValue, {\n    locale,\n    format: locale.monthFormat,\n    generateConfig\n  }) : monthsLocale[month]);\n  const monthYearNodes = locale.monthBeforeYear ? [monthNode, yearNode] : [yearNode, monthNode];\n\n  // ========================= Render =========================\n  return /*#__PURE__*/React.createElement(PanelContext.Provider, {\n    value: info\n  }, /*#__PURE__*/React.createElement(\"div\", {\n    className: clsx(panelPrefixCls, showWeek && `${panelPrefixCls}-show-week`)\n  }, /*#__PURE__*/React.createElement(PanelHeader, {\n    offset: distance => generateConfig.addMonth(pickerValue, distance),\n    superOffset: distance => generateConfig.addYear(pickerValue, distance),\n    onChange: onPickerValueChange\n    // Limitation\n    ,\n    getStart: date => generateConfig.setDate(date, 1),\n    getEnd: date => {\n      let clone = generateConfig.setDate(date, 1);\n      clone = generateConfig.addMonth(clone, 1);\n      return generateConfig.addDate(clone, -1);\n    }\n  }, monthYearNodes), /*#__PURE__*/React.createElement(PanelBody, _extends({\n    titleFormat: locale.fieldDateFormat\n  }, props, {\n    colNum: WEEK_DAY_COUNT,\n    rowNum: 6,\n    baseDate: baseDate\n    // Header\n    ,\n    headerCells: headerCells\n    // Body\n    ,\n    getCellDate: getCellDate,\n    getCellText: getCellText,\n    getCellClassName: getCellClassName,\n    prefixColumn: prefixColumn,\n    cellSelection: !isWeek\n  }))));\n}","import { isVisible, raf, useEvent } from '@rc-component/util';\nimport * as React from 'react';\nconst SPEED_PTG = 1 / 3;\nexport default function useScrollTo(ulRef, value) {\n  // ========================= Scroll =========================\n  const scrollingRef = React.useRef(false);\n  const scrollRafRef = React.useRef(null);\n  const scrollDistRef = React.useRef(null);\n  const isScrolling = () => scrollingRef.current;\n  const stopScroll = () => {\n    raf.cancel(scrollRafRef.current);\n    scrollingRef.current = false;\n  };\n  const scrollRafTimesRef = React.useRef(undefined);\n  const startScroll = () => {\n    const ul = ulRef.current;\n    scrollDistRef.current = null;\n    scrollRafTimesRef.current = 0;\n    if (ul) {\n      const targetLi = ul.querySelector(`[data-value=\"${value}\"]`);\n      const firstLi = ul.querySelector(`li`);\n      const doScroll = () => {\n        stopScroll();\n        scrollingRef.current = true;\n        scrollRafTimesRef.current += 1;\n        const {\n          scrollTop: currentTop\n        } = ul;\n        const firstLiTop = firstLi.offsetTop;\n        const targetLiTop = targetLi.offsetTop;\n        const targetTop = targetLiTop - firstLiTop;\n\n        // Wait for element exist. 5 frames is enough\n        if (targetLiTop === 0 && targetLi !== firstLi || !isVisible(ul)) {\n          if (scrollRafTimesRef.current <= 5) {\n            scrollRafRef.current = raf(doScroll);\n          }\n          return;\n        }\n        const nextTop = currentTop + (targetTop - currentTop) * SPEED_PTG;\n        const dist = Math.abs(targetTop - nextTop);\n\n        // Break if dist get larger, which means user is scrolling\n        if (scrollDistRef.current !== null && scrollDistRef.current < dist) {\n          stopScroll();\n          return;\n        }\n        scrollDistRef.current = dist;\n\n        // Stop when dist is less than 1\n        if (dist <= 1) {\n          ul.scrollTop = targetTop;\n          stopScroll();\n          return;\n        }\n\n        // IE not support `scrollTo`\n        ul.scrollTop = nextTop;\n        scrollRafRef.current = raf(doScroll);\n      };\n      if (targetLi && firstLi) {\n        doScroll();\n      }\n    }\n  };\n\n  // ======================== Trigger =========================\n  const syncScroll = useEvent(startScroll);\n  return [syncScroll, stopScroll, isScrolling];\n}","import { clsx } from 'clsx';\nimport { useLayoutEffect } from '@rc-component/util';\nimport * as React from 'react';\nimport { usePanelContext } from \"../../context\";\nimport useScrollTo from \"./useScrollTo\";\nconst SCROLL_DELAY = 300;\n// Not use JSON.stringify to avoid dead loop\nfunction flattenUnits(units) {\n  return units.map(({\n    value,\n    label,\n    disabled\n  }) => [value, label, disabled].join(',')).join(';');\n}\nexport default function TimeColumn(props) {\n  const {\n    units,\n    value,\n    optionalValue,\n    type,\n    onChange,\n    onHover,\n    onDblClick,\n    changeOnScroll\n  } = props;\n  const {\n    prefixCls,\n    cellRender,\n    now,\n    locale,\n    classNames,\n    styles\n  } = usePanelContext();\n  const panelPrefixCls = `${prefixCls}-time-panel`;\n  const cellPrefixCls = `${prefixCls}-time-panel-cell`;\n\n  // ========================== Refs ==========================\n  const ulRef = React.useRef(null);\n\n  // ========================= Scroll =========================\n  const checkDelayRef = React.useRef(undefined);\n  const clearDelayCheck = () => {\n    clearTimeout(checkDelayRef.current);\n  };\n\n  // ========================== Sync ==========================\n  const [syncScroll, stopScroll, isScrolling] = useScrollTo(ulRef, value ?? optionalValue);\n\n  // Effect sync value scroll\n  useLayoutEffect(() => {\n    syncScroll();\n    clearDelayCheck();\n    return () => {\n      stopScroll();\n      clearDelayCheck();\n    };\n  }, [value, optionalValue, flattenUnits(units)]);\n\n  // ========================= Change =========================\n  // Scroll event if sync onScroll\n  const onInternalScroll = event => {\n    clearDelayCheck();\n    const target = event.target;\n    if (!isScrolling() && changeOnScroll) {\n      checkDelayRef.current = setTimeout(() => {\n        const ul = ulRef.current;\n        const firstLiTop = ul.querySelector(`li`).offsetTop;\n        const liList = Array.from(ul.querySelectorAll(`li`));\n        const liTopList = liList.map(li => li.offsetTop - firstLiTop);\n        const liDistList = liTopList.map((top, index) => {\n          if (units[index].disabled) {\n            return Number.MAX_SAFE_INTEGER;\n          }\n          return Math.abs(top - target.scrollTop);\n        });\n\n        // Find min distance index\n        const minDist = Math.min(...liDistList);\n        const minDistIndex = liDistList.findIndex(dist => dist === minDist);\n        const targetUnit = units[minDistIndex];\n        if (targetUnit && !targetUnit.disabled) {\n          onChange(targetUnit.value);\n        }\n      }, SCROLL_DELAY);\n    }\n  };\n\n  // ========================= Render =========================\n  const columnPrefixCls = `${panelPrefixCls}-column`;\n  return /*#__PURE__*/React.createElement(\"ul\", {\n    className: columnPrefixCls,\n    ref: ulRef,\n    \"data-type\": type,\n    onScroll: onInternalScroll\n  }, units.map(({\n    label,\n    value: unitValue,\n    disabled\n  }) => {\n    const inner = /*#__PURE__*/React.createElement(\"div\", {\n      className: `${cellPrefixCls}-inner`\n    }, label);\n    return /*#__PURE__*/React.createElement(\"li\", {\n      key: unitValue,\n      style: styles.item,\n      className: clsx(cellPrefixCls, classNames.item, {\n        [`${cellPrefixCls}-selected`]: value === unitValue,\n        [`${cellPrefixCls}-disabled`]: disabled\n      }),\n      onClick: () => {\n        if (!disabled) {\n          onChange(unitValue);\n        }\n      },\n      onDoubleClick: () => {\n        if (!disabled && onDblClick) {\n          onDblClick();\n        }\n      },\n      onMouseEnter: () => {\n        onHover(unitValue);\n      },\n      onMouseLeave: () => {\n        onHover(null);\n      },\n      \"data-value\": unitValue\n    }, cellRender ? cellRender(unitValue, {\n      prefixCls,\n      originNode: inner,\n      today: now,\n      type: 'time',\n      subType: type,\n      locale\n    }) : inner);\n  }));\n}","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { isNonNullable } from '@rc-component/util';\nimport useTimeInfo from \"../../../hooks/useTimeInfo\";\nimport { formatValue } from \"../../../utils/dateUtil\";\nimport { PickerHackContext, usePanelContext } from \"../../context\";\nimport TimeColumn from \"./TimeColumn\";\nimport { clsx } from 'clsx';\nfunction isAM(hour) {\n  return hour < 12;\n}\nexport default function TimePanelBody(props) {\n  const {\n    // Show Config\n    showHour,\n    showMinute,\n    showSecond,\n    showMillisecond,\n    use12Hours: showMeridiem,\n    // MISC\n    changeOnScroll\n  } = props;\n  const {\n    prefixCls,\n    classNames,\n    styles,\n    values,\n    generateConfig,\n    locale,\n    onSelect,\n    onHover = () => {},\n    pickerValue\n  } = usePanelContext();\n  const value = values?.[0] || null;\n  const {\n    onCellDblClick\n  } = React.useContext(PickerHackContext);\n\n  // ========================== Info ==========================\n  const [getValidTime, rowHourUnits, getMinuteUnits, getSecondUnits, getMillisecondUnits] = useTimeInfo(generateConfig, props, value);\n\n  // ========================= Value ==========================\n  // PickerValue will tell which one to align on the top\n  const getUnitValue = func => {\n    const valueUnitVal = value && generateConfig[func](value);\n    const pickerUnitValue = pickerValue && generateConfig[func](pickerValue);\n    return [valueUnitVal, pickerUnitValue];\n  };\n  const [hour, pickerHour] = getUnitValue('getHour');\n  const [minute, pickerMinute] = getUnitValue('getMinute');\n  const [second, pickerSecond] = getUnitValue('getSecond');\n  const [millisecond, pickerMillisecond] = getUnitValue('getMillisecond');\n  const meridiem = hour === null ? null : isAM(hour) ? 'am' : 'pm';\n\n  // ========================= Column =========================\n  // Hours\n  const hourUnits = React.useMemo(() => {\n    if (!showMeridiem) {\n      return rowHourUnits;\n    }\n    return isAM(hour) ? rowHourUnits.filter(h => isAM(h.value)) : rowHourUnits.filter(h => !isAM(h.value));\n  }, [hour, rowHourUnits, showMeridiem]);\n\n  // >>> Pick Fallback\n  const getEnabled = (units, val) => {\n    const enabledUnits = units.filter(unit => !unit.disabled);\n    return val ??\n    // Fallback to enabled value\n    enabledUnits?.[0]?.value;\n  };\n\n  // >>> Minutes\n  const validHour = getEnabled(rowHourUnits, hour);\n  const minuteUnits = React.useMemo(() => getMinuteUnits(validHour), [getMinuteUnits, validHour]);\n\n  // >>> Seconds\n  const validMinute = getEnabled(minuteUnits, minute);\n  const secondUnits = React.useMemo(() => getSecondUnits(validHour, validMinute), [getSecondUnits, validHour, validMinute]);\n\n  // >>> Milliseconds\n  const validSecond = getEnabled(secondUnits, second);\n  const millisecondUnits = React.useMemo(() => getMillisecondUnits(validHour, validMinute, validSecond), [getMillisecondUnits, validHour, validMinute, validSecond]);\n  const validMillisecond = getEnabled(millisecondUnits, millisecond);\n\n  // Meridiem\n  const meridiemUnits = React.useMemo(() => {\n    if (!showMeridiem) {\n      return [];\n    }\n    const base = generateConfig.getNow();\n    const amDate = generateConfig.setHour(base, 9);\n    const pmDate = generateConfig.setHour(base, 15);\n    const formatMeridiem = (date, defaultLabel) => {\n      const {\n        cellMeridiemFormat\n      } = locale;\n      return cellMeridiemFormat ? formatValue(date, {\n        generateConfig,\n        locale,\n        format: cellMeridiemFormat\n      }) : defaultLabel;\n    };\n    return [{\n      label: formatMeridiem(amDate, 'AM'),\n      value: 'am',\n      disabled: rowHourUnits.every(h => h.disabled || !isAM(h.value))\n    }, {\n      label: formatMeridiem(pmDate, 'PM'),\n      value: 'pm',\n      disabled: rowHourUnits.every(h => h.disabled || isAM(h.value))\n    }];\n  }, [rowHourUnits, showMeridiem, generateConfig, locale]);\n\n  // ========================= Change =========================\n  /**\n   * Check if time is validate or will match to validate one\n   */\n  const triggerChange = nextDate => {\n    const validateDate = getValidTime(nextDate);\n    onSelect(validateDate);\n  };\n\n  // ========================= Column =========================\n  // Create a template date for the trigger change event\n  const triggerDateTmpl = React.useMemo(() => {\n    let tmpl = value || pickerValue || generateConfig.getNow();\n    if (isNonNullable(hour)) {\n      tmpl = generateConfig.setHour(tmpl, hour);\n      tmpl = generateConfig.setMinute(tmpl, minute);\n      tmpl = generateConfig.setSecond(tmpl, second);\n      tmpl = generateConfig.setMillisecond(tmpl, millisecond);\n    } else if (isNonNullable(pickerHour)) {\n      tmpl = generateConfig.setHour(tmpl, pickerHour);\n      tmpl = generateConfig.setMinute(tmpl, pickerMinute);\n      tmpl = generateConfig.setSecond(tmpl, pickerSecond);\n      tmpl = generateConfig.setMillisecond(tmpl, pickerMillisecond);\n    } else if (isNonNullable(validHour)) {\n      tmpl = generateConfig.setHour(tmpl, validHour);\n      tmpl = generateConfig.setMinute(tmpl, validMinute);\n      tmpl = generateConfig.setSecond(tmpl, validSecond);\n      tmpl = generateConfig.setMillisecond(tmpl, validMillisecond);\n    }\n    return tmpl;\n  }, [value, pickerValue, hour, minute, second, millisecond, validHour, validMinute, validSecond, validMillisecond, pickerHour, pickerMinute, pickerSecond, pickerMillisecond, generateConfig]);\n\n  // ===================== Columns Change =====================\n  const fillColumnValue = (val, func) => {\n    if (val === null) {\n      return null;\n    }\n    return generateConfig[func](triggerDateTmpl, val);\n  };\n  const getNextHourTime = val => fillColumnValue(val, 'setHour');\n  const getNextMinuteTime = val => fillColumnValue(val, 'setMinute');\n  const getNextSecondTime = val => fillColumnValue(val, 'setSecond');\n  const getNextMillisecondTime = val => fillColumnValue(val, 'setMillisecond');\n  const getMeridiemTime = val => {\n    if (val === null) {\n      return null;\n    }\n    if (val === 'am' && !isAM(hour)) {\n      return generateConfig.setHour(triggerDateTmpl, hour - 12);\n    } else if (val === 'pm' && isAM(hour)) {\n      return generateConfig.setHour(triggerDateTmpl, hour + 12);\n    }\n    return triggerDateTmpl;\n  };\n  const onHourChange = val => {\n    triggerChange(getNextHourTime(val));\n  };\n  const onMinuteChange = val => {\n    triggerChange(getNextMinuteTime(val));\n  };\n  const onSecondChange = val => {\n    triggerChange(getNextSecondTime(val));\n  };\n  const onMillisecondChange = val => {\n    triggerChange(getNextMillisecondTime(val));\n  };\n  const onMeridiemChange = val => {\n    triggerChange(getMeridiemTime(val));\n  };\n\n  // ====================== Column Hover ======================\n  const onHourHover = val => {\n    onHover(getNextHourTime(val));\n  };\n  const onMinuteHover = val => {\n    onHover(getNextMinuteTime(val));\n  };\n  const onSecondHover = val => {\n    onHover(getNextSecondTime(val));\n  };\n  const onMillisecondHover = val => {\n    onHover(getNextMillisecondTime(val));\n  };\n  const onMeridiemHover = val => {\n    onHover(getMeridiemTime(val));\n  };\n\n  // ========================= Render =========================\n  const sharedColumnProps = {\n    onDblClick: onCellDblClick,\n    changeOnScroll\n  };\n  return /*#__PURE__*/React.createElement(\"div\", {\n    className: clsx(`${prefixCls}-content`, classNames.content),\n    style: styles.content\n  }, showHour && /*#__PURE__*/React.createElement(TimeColumn, _extends({\n    units: hourUnits,\n    value: hour,\n    optionalValue: pickerHour,\n    type: \"hour\",\n    onChange: onHourChange,\n    onHover: onHourHover\n  }, sharedColumnProps)), showMinute && /*#__PURE__*/React.createElement(TimeColumn, _extends({\n    units: minuteUnits,\n    value: minute,\n    optionalValue: pickerMinute,\n    type: \"minute\",\n    onChange: onMinuteChange,\n    onHover: onMinuteHover\n  }, sharedColumnProps)), showSecond && /*#__PURE__*/React.createElement(TimeColumn, _extends({\n    units: secondUnits,\n    value: second,\n    optionalValue: pickerSecond,\n    type: \"second\",\n    onChange: onSecondChange,\n    onHover: onSecondHover\n  }, sharedColumnProps)), showMillisecond && /*#__PURE__*/React.createElement(TimeColumn, _extends({\n    units: millisecondUnits,\n    value: millisecond,\n    optionalValue: pickerMillisecond,\n    type: \"millisecond\",\n    onChange: onMillisecondChange,\n    onHover: onMillisecondHover\n  }, sharedColumnProps)), showMeridiem && /*#__PURE__*/React.createElement(TimeColumn, _extends({\n    units: meridiemUnits,\n    value: meridiem,\n    type: \"meridiem\",\n    onChange: onMeridiemChange,\n    onHover: onMeridiemHover\n  }, sharedColumnProps)));\n}","import { clsx } from 'clsx';\nimport * as React from 'react';\nimport { formatValue } from \"../../utils/dateUtil\";\nimport { PanelContext, useInfo } from \"../context\";\nimport PanelHeader from \"../PanelHeader\";\nimport TimePanelBody from \"./TimePanelBody\";\nexport default function TimePanel(props) {\n  const {\n    prefixCls,\n    value,\n    locale,\n    generateConfig,\n    // Format\n    showTime\n  } = props;\n  const {\n    format\n  } = showTime || {};\n  const panelPrefixCls = `${prefixCls}-time-panel`;\n\n  // ========================== Base ==========================\n  const [info] = useInfo(props, 'time');\n\n  // ========================= Render =========================\n  return /*#__PURE__*/React.createElement(PanelContext.Provider, {\n    value: info\n  }, /*#__PURE__*/React.createElement(\"div\", {\n    className: clsx(panelPrefixCls)\n  }, /*#__PURE__*/React.createElement(PanelHeader, null, value ? formatValue(value, {\n    locale,\n    format,\n    generateConfig\n  }) : '\\u00A0'), /*#__PURE__*/React.createElement(TimePanelBody, showTime)));\n}","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport useTimeInfo from \"../../hooks/useTimeInfo\";\nimport { fillTime } from \"../../utils/dateUtil\";\nimport DatePanel from \"../DatePanel\";\nimport TimePanel from \"../TimePanel\";\nexport default function DateTimePanel(props) {\n  const {\n    prefixCls,\n    generateConfig,\n    showTime,\n    onSelect,\n    value,\n    pickerValue,\n    onHover\n  } = props;\n  const panelPrefixCls = `${prefixCls}-datetime-panel`;\n\n  // =============================== Time ===============================\n  const [getValidTime] = useTimeInfo(generateConfig, showTime);\n\n  // Merge the time info from `value` or `pickerValue`\n  const mergeTime = date => {\n    if (value) {\n      return fillTime(generateConfig, date, value);\n    }\n    return fillTime(generateConfig, date, pickerValue);\n  };\n\n  // ============================== Hover ===============================\n  const onDateHover = date => {\n    onHover?.(date ? mergeTime(date) : date);\n  };\n\n  // ============================== Select ==============================\n  const onDateSelect = date => {\n    // Merge with current time\n    const cloneDate = mergeTime(date);\n    onSelect(getValidTime(cloneDate, cloneDate));\n  };\n\n  // ============================== Render ==============================\n  return /*#__PURE__*/React.createElement(\"div\", {\n    className: panelPrefixCls\n  }, /*#__PURE__*/React.createElement(DatePanel, _extends({}, props, {\n    onSelect: onDateSelect,\n    onHover: onDateHover\n  })), /*#__PURE__*/React.createElement(TimePanel, props));\n}","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { formatValue, isInRange, isSameDecade } from \"../../utils/dateUtil\";\nimport { PanelContext, useInfo } from \"../context\";\nimport PanelBody from \"../PanelBody\";\nimport PanelHeader from \"../PanelHeader\";\nexport default function DecadePanel(props) {\n  const {\n    prefixCls,\n    locale,\n    generateConfig,\n    pickerValue,\n    disabledDate,\n    onPickerValueChange\n  } = props;\n  const panelPrefixCls = `${prefixCls}-decade-panel`;\n\n  // ========================== Base ==========================\n  const [info] = useInfo(props, 'decade');\n  const getStartYear = date => {\n    const startYear = Math.floor(generateConfig.getYear(date) / 100) * 100;\n    return generateConfig.setYear(date, startYear);\n  };\n  const getEndYear = date => {\n    const startYear = getStartYear(date);\n    return generateConfig.addYear(startYear, 99);\n  };\n  const startYearDate = getStartYear(pickerValue);\n  const endYearDate = getEndYear(pickerValue);\n  const baseDate = generateConfig.addYear(startYearDate, -10);\n\n  // ========================= Cells ==========================\n  const getCellDate = (date, offset) => {\n    return generateConfig.addYear(date, offset * 10);\n  };\n  const getCellText = date => {\n    const cellYearFormat = locale.cellYearFormat;\n    const startYearStr = formatValue(date, {\n      locale,\n      format: cellYearFormat,\n      generateConfig\n    });\n    const endYearStr = formatValue(generateConfig.addYear(date, 9), {\n      locale,\n      format: cellYearFormat,\n      generateConfig\n    });\n    return `${startYearStr}-${endYearStr}`;\n  };\n  const getCellClassName = date => {\n    return {\n      [`${prefixCls}-cell-in-view`]: isSameDecade(generateConfig, date, startYearDate) || isSameDecade(generateConfig, date, endYearDate) || isInRange(generateConfig, startYearDate, endYearDate, date)\n    };\n  };\n\n  // ======================== Disabled ========================\n  const mergedDisabledDate = disabledDate ? (currentDate, disabledInfo) => {\n    // Start\n    const baseStartDate = generateConfig.setDate(currentDate, 1);\n    const baseStartMonth = generateConfig.setMonth(baseStartDate, 0);\n    const baseStartYear = generateConfig.setYear(baseStartMonth, Math.floor(generateConfig.getYear(baseStartMonth) / 10) * 10);\n\n    // End\n    const baseEndYear = generateConfig.addYear(baseStartYear, 10);\n    const baseEndDate = generateConfig.addDate(baseEndYear, -1);\n    return disabledDate(baseStartYear, disabledInfo) && disabledDate(baseEndDate, disabledInfo);\n  } : null;\n\n  // ========================= Header =========================\n  const yearNode = `${formatValue(startYearDate, {\n    locale,\n    format: locale.yearFormat,\n    generateConfig\n  })}-${formatValue(endYearDate, {\n    locale,\n    format: locale.yearFormat,\n    generateConfig\n  })}`;\n\n  // ========================= Render =========================\n  return /*#__PURE__*/React.createElement(PanelContext.Provider, {\n    value: info\n  }, /*#__PURE__*/React.createElement(\"div\", {\n    className: panelPrefixCls\n  }, /*#__PURE__*/React.createElement(PanelHeader, {\n    superOffset: distance => generateConfig.addYear(pickerValue, distance * 100),\n    onChange: onPickerValueChange\n    // Limitation\n    ,\n    getStart: getStartYear,\n    getEnd: getEndYear\n  }, yearNode), /*#__PURE__*/React.createElement(PanelBody, _extends({}, props, {\n    disabledDate: mergedDisabledDate,\n    colNum: 3,\n    rowNum: 4,\n    baseDate: baseDate\n    // Body\n    ,\n    getCellDate: getCellDate,\n    getCellText: getCellText,\n    getCellClassName: getCellClassName\n  }))));\n}","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { formatValue } from \"../../utils/dateUtil\";\nimport { PanelContext, useInfo } from \"../context\";\nimport PanelBody from \"../PanelBody\";\nimport PanelHeader from \"../PanelHeader\";\nexport default function MonthPanel(props) {\n  const {\n    prefixCls,\n    locale,\n    generateConfig,\n    pickerValue,\n    disabledDate,\n    onPickerValueChange,\n    onModeChange\n  } = props;\n  const panelPrefixCls = `${prefixCls}-month-panel`;\n\n  // ========================== Base ==========================\n  const [info] = useInfo(props, 'month');\n  const baseDate = generateConfig.setMonth(pickerValue, 0);\n\n  // ========================= Month ==========================\n  const monthsLocale = locale.shortMonths || (generateConfig.locale.getShortMonths ? generateConfig.locale.getShortMonths(locale.locale) : []);\n\n  // ========================= Cells ==========================\n  const getCellDate = (date, offset) => {\n    return generateConfig.addMonth(date, offset);\n  };\n  const getCellText = date => {\n    const month = generateConfig.getMonth(date);\n    return locale.monthFormat ? formatValue(date, {\n      locale,\n      format: locale.monthFormat,\n      generateConfig\n    }) : monthsLocale[month];\n  };\n  const getCellClassName = () => ({\n    [`${prefixCls}-cell-in-view`]: true\n  });\n\n  // ======================== Disabled ========================\n  const mergedDisabledDate = disabledDate ? (currentDate, disabledInfo) => {\n    const startDate = generateConfig.setDate(currentDate, 1);\n    const nextMonthStartDate = generateConfig.setMonth(startDate, generateConfig.getMonth(startDate) + 1);\n    const endDate = generateConfig.addDate(nextMonthStartDate, -1);\n    return disabledDate(startDate, disabledInfo) && disabledDate(endDate, disabledInfo);\n  } : null;\n\n  // ========================= Header =========================\n  const yearNode = /*#__PURE__*/React.createElement(\"button\", {\n    type: \"button\",\n    key: \"year\",\n    \"aria-label\": locale.yearSelect,\n    onClick: () => {\n      onModeChange('year');\n    },\n    tabIndex: -1,\n    className: `${prefixCls}-year-btn`\n  }, formatValue(pickerValue, {\n    locale,\n    format: locale.yearFormat,\n    generateConfig\n  }));\n\n  // ========================= Render =========================\n  return /*#__PURE__*/React.createElement(PanelContext.Provider, {\n    value: info\n  }, /*#__PURE__*/React.createElement(\"div\", {\n    className: panelPrefixCls\n  }, /*#__PURE__*/React.createElement(PanelHeader, {\n    superOffset: distance => generateConfig.addYear(pickerValue, distance),\n    onChange: onPickerValueChange\n    // Limitation\n    ,\n    getStart: date => generateConfig.setMonth(date, 0),\n    getEnd: date => generateConfig.setMonth(date, 11)\n  }, yearNode), /*#__PURE__*/React.createElement(PanelBody, _extends({}, props, {\n    disabledDate: mergedDisabledDate,\n    titleFormat: locale.fieldMonthFormat,\n    colNum: 3,\n    rowNum: 4,\n    baseDate: baseDate\n    // Body\n    ,\n    getCellDate: getCellDate,\n    getCellText: getCellText,\n    getCellClassName: getCellClassName\n  }))));\n}","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { formatValue } from \"../../utils/dateUtil\";\nimport { PanelContext, useInfo } from \"../context\";\nimport PanelBody from \"../PanelBody\";\nimport PanelHeader from \"../PanelHeader\";\nexport default function QuarterPanel(props) {\n  const {\n    prefixCls,\n    locale,\n    generateConfig,\n    pickerValue,\n    onPickerValueChange,\n    onModeChange\n  } = props;\n  const panelPrefixCls = `${prefixCls}-quarter-panel`;\n\n  // ========================== Base ==========================\n  const [info] = useInfo(props, 'quarter');\n  const baseDate = generateConfig.setMonth(pickerValue, 0);\n\n  // ========================= Cells ==========================\n  const getCellDate = (date, offset) => {\n    return generateConfig.addMonth(date, offset * 3);\n  };\n  const getCellText = date => {\n    return formatValue(date, {\n      locale,\n      format: locale.cellQuarterFormat,\n      generateConfig\n    });\n  };\n  const getCellClassName = () => ({\n    [`${prefixCls}-cell-in-view`]: true\n  });\n\n  // ========================= Header =========================\n  const yearNode = /*#__PURE__*/React.createElement(\"button\", {\n    type: \"button\",\n    key: \"year\",\n    \"aria-label\": locale.yearSelect,\n    onClick: () => {\n      onModeChange('year');\n    },\n    tabIndex: -1,\n    className: `${prefixCls}-year-btn`\n  }, formatValue(pickerValue, {\n    locale,\n    format: locale.yearFormat,\n    generateConfig\n  }));\n\n  // ========================= Render =========================\n  return /*#__PURE__*/React.createElement(PanelContext.Provider, {\n    value: info\n  }, /*#__PURE__*/React.createElement(\"div\", {\n    className: panelPrefixCls\n  }, /*#__PURE__*/React.createElement(PanelHeader, {\n    superOffset: distance => generateConfig.addYear(pickerValue, distance),\n    onChange: onPickerValueChange\n    // Limitation\n    ,\n    getStart: date => generateConfig.setMonth(date, 0),\n    getEnd: date => generateConfig.setMonth(date, 11)\n  }, yearNode), /*#__PURE__*/React.createElement(PanelBody, _extends({}, props, {\n    titleFormat: locale.fieldQuarterFormat,\n    colNum: 4,\n    rowNum: 1,\n    baseDate: baseDate\n    // Body\n    ,\n    getCellDate: getCellDate,\n    getCellText: getCellText,\n    getCellClassName: getCellClassName\n  }))));\n}","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport { clsx } from 'clsx';\nimport * as React from 'react';\nimport { isInRange, isSameWeek } from \"../../utils/dateUtil\";\nimport DatePanel from \"../DatePanel\";\nexport default function WeekPanel(props) {\n  const {\n    prefixCls,\n    generateConfig,\n    locale,\n    value,\n    hoverValue,\n    hoverRangeValue\n  } = props;\n\n  // =============================== Row ================================\n  const localeName = locale.locale;\n  const rowPrefixCls = `${prefixCls}-week-panel-row`;\n  const rowClassName = currentDate => {\n    const rangeCls = {};\n    if (hoverRangeValue) {\n      const [rangeStart, rangeEnd] = hoverRangeValue;\n      const isRangeStart = isSameWeek(generateConfig, localeName, rangeStart, currentDate);\n      const isRangeEnd = isSameWeek(generateConfig, localeName, rangeEnd, currentDate);\n      rangeCls[`${rowPrefixCls}-range-start`] = isRangeStart;\n      rangeCls[`${rowPrefixCls}-range-end`] = isRangeEnd;\n      rangeCls[`${rowPrefixCls}-range-hover`] = !isRangeStart && !isRangeEnd && isInRange(generateConfig, rangeStart, rangeEnd, currentDate);\n    }\n    if (hoverValue) {\n      rangeCls[`${rowPrefixCls}-hover`] = hoverValue.some(date => isSameWeek(generateConfig, localeName, currentDate, date));\n    }\n    return clsx(rowPrefixCls, {\n      [`${rowPrefixCls}-selected`]: !hoverRangeValue && isSameWeek(generateConfig, localeName, value, currentDate)\n    },\n    // Patch for hover range\n    rangeCls);\n  };\n\n  // ============================== Render ==============================\n  return /*#__PURE__*/React.createElement(DatePanel, _extends({}, props, {\n    mode: \"week\",\n    panelName: \"week\",\n    rowClassName: rowClassName\n  }));\n}","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { formatValue, isInRange, isSameYear } from \"../../utils/dateUtil\";\nimport { PanelContext, useInfo } from \"../context\";\nimport PanelBody from \"../PanelBody\";\nimport PanelHeader from \"../PanelHeader\";\nexport default function YearPanel(props) {\n  const {\n    prefixCls,\n    locale,\n    generateConfig,\n    pickerValue,\n    disabledDate,\n    onPickerValueChange,\n    onModeChange\n  } = props;\n  const panelPrefixCls = `${prefixCls}-year-panel`;\n\n  // ========================== Base ==========================\n  const [info] = useInfo(props, 'year');\n  const getStartYear = date => {\n    const startYear = Math.floor(generateConfig.getYear(date) / 10) * 10;\n    return generateConfig.setYear(date, startYear);\n  };\n  const getEndYear = date => {\n    const startYear = getStartYear(date);\n    return generateConfig.addYear(startYear, 9);\n  };\n  const startYearDate = getStartYear(pickerValue);\n  const endYearDate = getEndYear(pickerValue);\n  const baseDate = generateConfig.addYear(startYearDate, -1);\n\n  // ========================= Cells ==========================\n  const getCellDate = (date, offset) => {\n    return generateConfig.addYear(date, offset);\n  };\n  const getCellText = date => {\n    return formatValue(date, {\n      locale,\n      format: locale.cellYearFormat,\n      generateConfig\n    });\n  };\n  const getCellClassName = date => {\n    return {\n      [`${prefixCls}-cell-in-view`]: isSameYear(generateConfig, date, startYearDate) || isSameYear(generateConfig, date, endYearDate) || isInRange(generateConfig, startYearDate, endYearDate, date)\n    };\n  };\n\n  // ======================== Disabled ========================\n  const mergedDisabledDate = disabledDate ? (currentDate, disabledInfo) => {\n    // Start\n    const startMonth = generateConfig.setMonth(currentDate, 0);\n    const startDate = generateConfig.setDate(startMonth, 1);\n\n    // End\n    const endMonth = generateConfig.addYear(startDate, 1);\n    const endDate = generateConfig.addDate(endMonth, -1);\n    return disabledDate(startDate, disabledInfo) && disabledDate(endDate, disabledInfo);\n  } : null;\n\n  // ========================= Header =========================\n  const yearNode = /*#__PURE__*/React.createElement(\"button\", {\n    type: \"button\",\n    key: \"decade\",\n    \"aria-label\": locale.decadeSelect,\n    onClick: () => {\n      onModeChange('decade');\n    },\n    tabIndex: -1,\n    className: `${prefixCls}-decade-btn`\n  }, formatValue(startYearDate, {\n    locale,\n    format: locale.yearFormat,\n    generateConfig\n  }), \"-\", formatValue(endYearDate, {\n    locale,\n    format: locale.yearFormat,\n    generateConfig\n  }));\n\n  // ========================= Render =========================\n  return /*#__PURE__*/React.createElement(PanelContext.Provider, {\n    value: info\n  }, /*#__PURE__*/React.createElement(\"div\", {\n    className: panelPrefixCls\n  }, /*#__PURE__*/React.createElement(PanelHeader, {\n    superOffset: distance => generateConfig.addYear(pickerValue, distance * 10),\n    onChange: onPickerValueChange\n    // Limitation\n    ,\n    getStart: getStartYear,\n    getEnd: getEndYear\n  }, yearNode), /*#__PURE__*/React.createElement(PanelBody, _extends({}, props, {\n    disabledDate: mergedDisabledDate,\n    titleFormat: locale.fieldYearFormat,\n    colNum: 3,\n    rowNum: 4,\n    baseDate: baseDate\n    // Body\n    ,\n    getCellDate: getCellDate,\n    getCellText: getCellText,\n    getCellClassName: getCellClassName\n  }))));\n}","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport { clsx } from 'clsx';\nimport { useControlledState, useEvent, warning } from '@rc-component/util';\nimport * as React from 'react';\nimport useLocale from \"../hooks/useLocale\";\nimport { fillShowTimeConfig, getTimeProps } from \"../hooks/useTimeConfig\";\nimport useToggleDates from \"../hooks/useToggleDates\";\nimport PickerContext from \"../PickerInput/context\";\nimport useCellRender from \"../PickerInput/hooks/useCellRender\";\nimport { isSame } from \"../utils/dateUtil\";\nimport { pickProps, toArray } from \"../utils/miscUtil\";\nimport { PickerHackContext, SharedPanelContext } from \"./context\";\nimport DatePanel from \"./DatePanel\";\nimport DateTimePanel from \"./DateTimePanel\";\nimport DecadePanel from \"./DecadePanel\";\nimport MonthPanel from \"./MonthPanel\";\nimport QuarterPanel from \"./QuarterPanel\";\nimport TimePanel from \"./TimePanel\";\nimport WeekPanel from \"./WeekPanel\";\nimport YearPanel from \"./YearPanel\";\nconst DefaultComponents = {\n  date: DatePanel,\n  datetime: DateTimePanel,\n  week: WeekPanel,\n  month: MonthPanel,\n  quarter: QuarterPanel,\n  year: YearPanel,\n  decade: DecadePanel,\n  time: TimePanel\n};\nfunction PickerPanel(props, ref) {\n  const {\n    classNames: panelClassNames,\n    styles: panelStyles,\n    locale,\n    generateConfig,\n    direction,\n    // Style\n    prefixCls,\n    tabIndex = 0,\n    // Value\n    multiple,\n    defaultValue,\n    value,\n    onChange,\n    onSelect,\n    // Picker control\n    defaultPickerValue,\n    pickerValue,\n    onPickerValueChange,\n    // Mode\n    mode,\n    onPanelChange,\n    picker = 'date',\n    showTime,\n    // Hover\n    hoverValue,\n    hoverRangeValue,\n    // Cell\n    cellRender,\n    dateRender,\n    monthCellRender,\n    // Components\n    components = {},\n    hideHeader\n  } = props;\n\n  // ======================== Context ========================\n  const {\n    prefixCls: contextPrefixCls,\n    classNames: pickerClassNames,\n    styles: pickerStyles\n  } = React.useContext(PickerContext) || {};\n\n  // ======================== prefixCls ========================\n  const mergedPrefixCls = contextPrefixCls || prefixCls || 'rc-picker';\n\n  // ========================== Refs ==========================\n  const rootRef = React.useRef(null);\n  React.useImperativeHandle(ref, () => ({\n    nativeElement: rootRef.current\n  }));\n\n  // ========================== Time ==========================\n  // Auto `format` need to check `showTime.showXXX` first.\n  // And then merge the `locale` into `mergedShowTime`.\n  const [timeProps, localeTimeProps, showTimeFormat, propFormat] = getTimeProps(props);\n\n  // ========================= Locale =========================\n  const filledLocale = useLocale(locale, localeTimeProps);\n\n  // ========================= Picker =========================\n  const internalPicker = picker === 'date' && showTime ? 'datetime' : picker;\n\n  // ======================== ShowTime ========================\n  const mergedShowTime = React.useMemo(() => fillShowTimeConfig(internalPicker, showTimeFormat, propFormat, timeProps, filledLocale), [internalPicker, showTimeFormat, propFormat, timeProps, filledLocale]);\n\n  // ========================== Now ===========================\n  const now = generateConfig.getNow();\n\n  // ========================== Mode ==========================\n  const [mergedMode, setMergedMode] = useControlledState(picker || 'date', mode);\n  const internalMode = mergedMode === 'date' && mergedShowTime ? 'datetime' : mergedMode;\n\n  // ========================= Toggle =========================\n  const toggleDates = useToggleDates(generateConfig, locale, internalPicker);\n\n  // ========================= Value ==========================\n  // >>> Real value\n  // Interactive with `onChange` event which only trigger when the `mode` is `picker`\n  const [innerValue, setMergedValue] = useControlledState(defaultValue, value);\n  const mergedValue = React.useMemo(() => {\n    // Clean up `[null]`\n    const values = toArray(innerValue).filter(val => val);\n    return multiple ? values : values.slice(0, 1);\n  }, [innerValue, multiple]);\n\n  // Sync value and only trigger onChange event when changed\n  const triggerChange = useEvent(nextValue => {\n    setMergedValue(nextValue);\n    if (onChange && (nextValue === null || mergedValue.length !== nextValue.length || mergedValue.some((ori, index) => !isSame(generateConfig, locale, ori, nextValue[index], internalPicker)))) {\n      onChange?.(multiple ? nextValue : nextValue[0]);\n    }\n  });\n\n  // >>> CalendarValue\n  // CalendarValue is a temp value for user operation\n  // which will only trigger `onCalendarChange` but not `onChange`\n  const onInternalSelect = useEvent(newDate => {\n    onSelect?.(newDate);\n    if (mergedMode === picker) {\n      const nextValues = multiple ? toggleDates(mergedValue, newDate) : [newDate];\n      triggerChange(nextValues);\n    }\n  });\n\n  // >>> PickerValue\n  // PickerValue is used to control the current displaying panel\n  const [mergedPickerValue, setInternalPickerValue] = useControlledState(defaultPickerValue || mergedValue[0] || now, pickerValue);\n  React.useEffect(() => {\n    if (mergedValue[0] && !pickerValue) {\n      setInternalPickerValue(mergedValue[0]);\n    }\n  }, [mergedValue[0]]);\n\n  // Both trigger when manually pickerValue or mode change\n  const triggerPanelChange = (viewDate, nextMode) => {\n    onPanelChange?.(viewDate || pickerValue, nextMode || mergedMode);\n  };\n  const setPickerValue = (nextPickerValue, triggerPanelEvent = false) => {\n    setInternalPickerValue(nextPickerValue);\n    onPickerValueChange?.(nextPickerValue);\n    if (triggerPanelEvent) {\n      triggerPanelChange(nextPickerValue);\n    }\n  };\n  const triggerModeChange = (nextMode, viewDate) => {\n    setMergedMode(nextMode);\n    if (viewDate) {\n      setPickerValue(viewDate);\n    }\n    triggerPanelChange(viewDate, nextMode);\n  };\n  const onPanelValueSelect = nextValue => {\n    onInternalSelect(nextValue);\n    setPickerValue(nextValue);\n\n    // Update mode if needed\n    if (mergedMode !== picker) {\n      const decadeYearQueue = ['decade', 'year'];\n      const decadeYearMonthQueue = [...decadeYearQueue, 'month'];\n      const pickerQueue = {\n        quarter: [...decadeYearQueue, 'quarter'],\n        week: [...decadeYearMonthQueue, 'week'],\n        date: [...decadeYearMonthQueue, 'date']\n      };\n      const queue = pickerQueue[picker] || decadeYearMonthQueue;\n      const index = queue.indexOf(mergedMode);\n      const nextMode = queue[index + 1];\n      if (nextMode) {\n        triggerModeChange(nextMode, nextValue);\n      }\n    }\n  };\n\n  // ======================= Hover Date =======================\n  const hoverRangeDate = React.useMemo(() => {\n    let start;\n    let end;\n    if (Array.isArray(hoverRangeValue)) {\n      [start, end] = hoverRangeValue;\n    } else {\n      start = hoverRangeValue;\n    }\n\n    // Return for not exist\n    if (!start && !end) {\n      return null;\n    }\n\n    // Fill if has empty\n    start = start || end;\n    end = end || start;\n    return generateConfig.isAfter(start, end) ? [end, start] : [start, end];\n  }, [hoverRangeValue, generateConfig]);\n\n  // ======================= Components =======================\n  // >>> cellRender\n  const onInternalCellRender = useCellRender(cellRender, dateRender, monthCellRender);\n\n  // ======================= Components =======================\n  const PanelComponent = components[internalMode] || DefaultComponents[internalMode] || DatePanel;\n\n  // ======================== Context =========================\n  const sharedPanelContext = React.useMemo(() => ({\n    classNames: pickerClassNames?.popup ?? panelClassNames ?? {},\n    styles: pickerStyles?.popup ?? panelStyles ?? {}\n  }), [pickerClassNames, panelClassNames, pickerStyles, panelStyles]);\n  const parentHackContext = React.useContext(PickerHackContext);\n  const pickerPanelContext = React.useMemo(() => ({\n    ...parentHackContext,\n    hideHeader\n  }), [parentHackContext, hideHeader]);\n\n  // ======================== Warnings ========================\n  if (process.env.NODE_ENV !== 'production') {\n    warning(!mergedValue || mergedValue.every(val => generateConfig.isValidate(val)), 'Invalidate date pass to `value` or `defaultValue`.');\n  }\n\n  // ========================= Render =========================\n  const panelCls = `${mergedPrefixCls}-panel`;\n  const panelProps = pickProps(props, [\n  // Week\n  'showWeek',\n  // Icons\n  'prevIcon', 'nextIcon', 'superPrevIcon', 'superNextIcon',\n  // Disabled\n  'disabledDate', 'minDate', 'maxDate',\n  // Hover\n  'onHover']);\n  return /*#__PURE__*/React.createElement(SharedPanelContext.Provider, {\n    value: sharedPanelContext\n  }, /*#__PURE__*/React.createElement(PickerHackContext.Provider, {\n    value: pickerPanelContext\n  }, /*#__PURE__*/React.createElement(\"div\", {\n    ref: rootRef,\n    tabIndex: tabIndex,\n    className: clsx(panelCls, {\n      [`${panelCls}-rtl`]: direction === 'rtl'\n    })\n  }, /*#__PURE__*/React.createElement(PanelComponent, _extends({}, panelProps, {\n    // Time\n    showTime: mergedShowTime\n    // MISC\n    ,\n    prefixCls: mergedPrefixCls,\n    locale: filledLocale,\n    generateConfig: generateConfig\n    // Mode\n    ,\n    onModeChange: triggerModeChange\n    // Value\n    ,\n    pickerValue: mergedPickerValue,\n    onPickerValueChange: nextPickerValue => {\n      setPickerValue(nextPickerValue, true);\n    },\n    value: mergedValue[0],\n    onSelect: onPanelValueSelect,\n    values: mergedValue\n    // Render\n    ,\n    cellRender: onInternalCellRender\n    // Hover\n    ,\n    hoverRangeValue: hoverRangeDate,\n    hoverValue: hoverValue\n  })))));\n}\nconst RefPanelPicker = /*#__PURE__*/React.memo( /*#__PURE__*/React.forwardRef(PickerPanel));\nif (process.env.NODE_ENV !== 'production') {\n  RefPanelPicker.displayName = 'PanelPicker';\n}\n\n// Make support generic\nexport default RefPanelPicker;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { clsx } from 'clsx';\nimport ResizeObserver from '@rc-component/resize-observer';\n// Use shared variable to save bundle size\nconst UNDEFINED = undefined;\nfunction InternalItem(props, ref) {\n  const {\n    prefixCls,\n    invalidate,\n    item,\n    renderItem,\n    responsive,\n    responsiveDisabled,\n    registerSize,\n    itemKey,\n    className,\n    style,\n    children,\n    display,\n    order,\n    component: Component = 'div',\n    ...restProps\n  } = props;\n  const mergedHidden = responsive && !display;\n\n  // ================================ Effect ================================\n  function internalRegisterSize(width) {\n    registerSize(itemKey, width);\n  }\n  React.useEffect(() => () => {\n    internalRegisterSize(null);\n  }, []);\n\n  // ================================ Render ================================\n  const childNode = renderItem && item !== UNDEFINED ? renderItem(item, {\n    index: order\n  }) : children;\n  let overflowStyle;\n  if (!invalidate) {\n    overflowStyle = {\n      opacity: mergedHidden ? 0 : 1,\n      height: mergedHidden ? 0 : UNDEFINED,\n      overflowY: mergedHidden ? 'hidden' : UNDEFINED,\n      order: responsive ? order : UNDEFINED,\n      pointerEvents: mergedHidden ? 'none' : UNDEFINED,\n      position: mergedHidden ? 'absolute' : UNDEFINED\n    };\n  }\n  const overflowProps = {};\n  if (mergedHidden) {\n    overflowProps['aria-hidden'] = true;\n  }\n  let itemNode = /*#__PURE__*/React.createElement(Component, _extends({\n    className: clsx(!invalidate && prefixCls, className),\n    style: {\n      ...overflowStyle,\n      ...style\n    }\n  }, overflowProps, restProps, {\n    ref: ref\n  }), childNode);\n  if (responsive) {\n    itemNode = /*#__PURE__*/React.createElement(ResizeObserver, {\n      onResize: ({\n        offsetWidth\n      }) => {\n        internalRegisterSize(offsetWidth);\n      },\n      disabled: responsiveDisabled\n    }, itemNode);\n  }\n  return itemNode;\n}\nconst Item = /*#__PURE__*/React.forwardRef(InternalItem);\nif (process.env.NODE_ENV !== 'production') {\n  Item.displayName = 'Item';\n}\nexport default Item;","import raf from \"@rc-component/util/es/raf\";\nexport default function channelUpdate(callback) {\n  if (typeof MessageChannel === 'undefined') {\n    raf(callback);\n  } else {\n    const channel = new MessageChannel();\n    channel.port1.onmessage = () => callback();\n    channel.port2.postMessage(undefined);\n  }\n}","import useEvent from \"@rc-component/util/es/hooks/useEvent\";\nimport * as React from 'react';\nimport { unstable_batchedUpdates } from 'react-dom';\nimport channelUpdate from \"./channelUpdate\";\n/**\n * Batcher for record any `useEffectState` need update.\n */\nexport function useBatcher() {\n  // Updater Trigger\n  const updateFuncRef = React.useRef(null);\n\n  // Notify update\n  const notifyEffectUpdate = callback => {\n    if (!updateFuncRef.current) {\n      updateFuncRef.current = [];\n      channelUpdate(() => {\n        unstable_batchedUpdates(() => {\n          updateFuncRef.current.forEach(fn => {\n            fn();\n          });\n          updateFuncRef.current = null;\n        });\n      });\n    }\n    updateFuncRef.current.push(callback);\n  };\n  return notifyEffectUpdate;\n}\n\n/**\n * Trigger state update by `useLayoutEffect` to save perf.\n */\nexport default function useEffectState(notifyEffectUpdate, defaultValue) {\n  // Value\n  const [stateValue, setStateValue] = React.useState(defaultValue);\n\n  // Set State\n  const setEffectVal = useEvent(nextValue => {\n    notifyEffectUpdate(() => {\n      setStateValue(nextValue);\n    });\n  });\n  return [stateValue, setEffectVal];\n}","import React from 'react';\nexport const OverflowContext = /*#__PURE__*/React.createContext(null);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { clsx } from 'clsx';\nimport Item from \"./Item\";\nimport { OverflowContext } from \"./context\";\nconst InternalRawItem = (props, ref) => {\n  const context = React.useContext(OverflowContext);\n\n  // Render directly when context not provided\n  if (!context) {\n    const {\n      component: Component = 'div',\n      ...restProps\n    } = props;\n    return /*#__PURE__*/React.createElement(Component, _extends({}, restProps, {\n      ref: ref\n    }));\n  }\n  const {\n    className: contextClassName,\n    ...restContext\n  } = context;\n  const {\n    className,\n    ...restProps\n  } = props;\n\n  // Do not pass context to sub item to avoid multiple measure\n  return /*#__PURE__*/React.createElement(OverflowContext.Provider, {\n    value: null\n  }, /*#__PURE__*/React.createElement(Item, _extends({\n    ref: ref,\n    className: clsx(contextClassName, className)\n  }, restContext, restProps)));\n};\nconst RawItem = /*#__PURE__*/React.forwardRef(InternalRawItem);\nif (process.env.NODE_ENV !== 'production') {\n  RawItem.displayName = 'RawItem';\n}\nexport default RawItem;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { useState, useMemo, useCallback } from 'react';\nimport { clsx } from 'clsx';\nimport ResizeObserver from '@rc-component/resize-observer';\nimport useLayoutEffect from \"@rc-component/util/es/hooks/useLayoutEffect\";\nimport Item from \"./Item\";\nimport useEffectState, { useBatcher } from \"./hooks/useEffectState\";\nimport RawItem from \"./RawItem\";\nimport { OverflowContext } from \"./context\";\nconst RESPONSIVE = 'responsive';\nconst INVALIDATE = 'invalidate';\nexport { OverflowContext } from \"./context\";\nfunction defaultRenderRest(omittedItems) {\n  return `+ ${omittedItems.length} ...`;\n}\nfunction Overflow(props, ref) {\n  const {\n    prefixCls = 'rc-overflow',\n    data = [],\n    renderItem,\n    renderRawItem,\n    itemKey,\n    itemWidth = 10,\n    ssr,\n    style,\n    className,\n    maxCount,\n    renderRest,\n    renderRawRest,\n    prefix,\n    suffix,\n    component: Component = 'div',\n    itemComponent,\n    onVisibleChange,\n    ...restProps\n  } = props;\n  const fullySSR = ssr === 'full';\n  const notifyEffectUpdate = useBatcher();\n  const [containerWidth, setContainerWidth] = useEffectState(notifyEffectUpdate, null);\n  const mergedContainerWidth = containerWidth || 0;\n  const [itemWidths, setItemWidths] = useEffectState(notifyEffectUpdate, new Map());\n  const [prevRestWidth, setPrevRestWidth] = useEffectState(notifyEffectUpdate, 0);\n  const [restWidth, setRestWidth] = useEffectState(notifyEffectUpdate, 0);\n  const [prefixWidth, setPrefixWidth] = useEffectState(notifyEffectUpdate, 0);\n  const [suffixWidth, setSuffixWidth] = useEffectState(notifyEffectUpdate, 0);\n  const [suffixFixedStart, setSuffixFixedStart] = useState(null);\n  const [displayCount, setDisplayCount] = useState(null);\n  const mergedDisplayCount = React.useMemo(() => {\n    if (displayCount === null && fullySSR) {\n      return Number.MAX_SAFE_INTEGER;\n    }\n    return displayCount || 0;\n  }, [displayCount, containerWidth]);\n  const [restReady, setRestReady] = useState(false);\n  const itemPrefixCls = `${prefixCls}-item`;\n\n  // Always use the max width to avoid blink\n  const mergedRestWidth = Math.max(prevRestWidth, restWidth);\n\n  // ================================= Data =================================\n  const isResponsive = maxCount === RESPONSIVE;\n  const shouldResponsive = data.length && isResponsive;\n  const invalidate = maxCount === INVALIDATE;\n\n  /**\n   * When is `responsive`, we will always render rest node to get the real width of it for calculation\n   */\n  const showRest = shouldResponsive || typeof maxCount === 'number' && data.length > maxCount;\n  const mergedData = useMemo(() => {\n    let items = data;\n    if (shouldResponsive) {\n      if (containerWidth === null && fullySSR) {\n        items = data;\n      } else {\n        items = data.slice(0, Math.min(data.length, mergedContainerWidth / itemWidth));\n      }\n    } else if (typeof maxCount === 'number') {\n      items = data.slice(0, maxCount);\n    }\n    return items;\n  }, [data, itemWidth, containerWidth, maxCount, shouldResponsive]);\n  const omittedItems = useMemo(() => {\n    if (shouldResponsive) {\n      return data.slice(mergedDisplayCount + 1);\n    }\n    return data.slice(mergedData.length);\n  }, [data, mergedData, shouldResponsive, mergedDisplayCount]);\n\n  // ================================= Item =================================\n  const getKey = useCallback((item, index) => {\n    if (typeof itemKey === 'function') {\n      return itemKey(item);\n    }\n    return (itemKey && item?.[itemKey]) ?? index;\n  }, [itemKey]);\n  const mergedRenderItem = useCallback(renderItem || (item => item), [renderItem]);\n  function updateDisplayCount(count, suffixFixedStartVal, notReady) {\n    // React 18 will sync render even when the value is same in some case.\n    // We take `mergedData` as deps which may cause dead loop if it's dynamic generate.\n    // ref: https://github.com/ant-design/ant-design/issues/36559\n    if (displayCount === count && (suffixFixedStartVal === undefined || suffixFixedStartVal === suffixFixedStart)) {\n      return;\n    }\n    setDisplayCount(count);\n    if (!notReady) {\n      setRestReady(count < data.length - 1);\n      onVisibleChange?.(count);\n    }\n    if (suffixFixedStartVal !== undefined) {\n      setSuffixFixedStart(suffixFixedStartVal);\n    }\n  }\n\n  // ================================= Size =================================\n  function onOverflowResize(_, element) {\n    setContainerWidth(element.clientWidth);\n  }\n  function registerSize(key, width) {\n    setItemWidths(origin => {\n      const clone = new Map(origin);\n      if (width === null) {\n        clone.delete(key);\n      } else {\n        clone.set(key, width);\n      }\n      return clone;\n    });\n  }\n  function registerOverflowSize(_, width) {\n    setRestWidth(width);\n    setPrevRestWidth(restWidth);\n  }\n  function registerPrefixSize(_, width) {\n    setPrefixWidth(width);\n  }\n  function registerSuffixSize(_, width) {\n    setSuffixWidth(width);\n  }\n\n  // ================================ Effect ================================\n  function getItemWidth(index) {\n    return itemWidths.get(getKey(mergedData[index], index));\n  }\n  useLayoutEffect(() => {\n    if (mergedContainerWidth && typeof mergedRestWidth === 'number' && mergedData) {\n      let totalWidth = prefixWidth + suffixWidth;\n      const len = mergedData.length;\n      const lastIndex = len - 1;\n\n      // When data count change to 0, reset this since not loop will reach\n      if (!len) {\n        updateDisplayCount(0, null);\n        return;\n      }\n      for (let i = 0; i < len; i += 1) {\n        let currentItemWidth = getItemWidth(i);\n\n        // Fully will always render\n        if (fullySSR) {\n          currentItemWidth = currentItemWidth || 0;\n        }\n\n        // Break since data not ready\n        if (currentItemWidth === undefined) {\n          updateDisplayCount(i - 1, undefined, true);\n          break;\n        }\n\n        // Find best match\n        totalWidth += currentItemWidth;\n        if (\n        // Only one means `totalWidth` is the final width\n        lastIndex === 0 && totalWidth <= mergedContainerWidth ||\n        // Last two width will be the final width\n        i === lastIndex - 1 && totalWidth + getItemWidth(lastIndex) <= mergedContainerWidth) {\n          // Additional check if match the end\n          updateDisplayCount(lastIndex, null);\n          break;\n        } else if (totalWidth + mergedRestWidth > mergedContainerWidth) {\n          // Can not hold all the content to show rest\n          updateDisplayCount(i - 1, totalWidth - currentItemWidth - suffixWidth + restWidth);\n          break;\n        }\n      }\n      if (suffix && getItemWidth(0) + suffixWidth > mergedContainerWidth) {\n        setSuffixFixedStart(null);\n      }\n    }\n  }, [mergedContainerWidth, itemWidths, restWidth, prefixWidth, suffixWidth, getKey, mergedData]);\n\n  // ================================ Render ================================\n  const displayRest = restReady && !!omittedItems.length;\n  let suffixStyle = {};\n  if (suffixFixedStart !== null && shouldResponsive) {\n    suffixStyle = {\n      position: 'absolute',\n      top: 0,\n      insetInlineStart: suffixFixedStart\n    };\n  }\n  const itemSharedProps = {\n    prefixCls: itemPrefixCls,\n    responsive: shouldResponsive,\n    component: itemComponent,\n    invalidate\n  };\n\n  // >>>>> Choice render fun by `renderRawItem`\n  const internalRenderItemNode = renderRawItem ? (item, index) => {\n    const key = getKey(item, index);\n    return /*#__PURE__*/React.createElement(OverflowContext.Provider, {\n      key: key,\n      value: {\n        ...itemSharedProps,\n        order: index,\n        item,\n        itemKey: key,\n        registerSize,\n        display: index <= mergedDisplayCount\n      }\n    }, renderRawItem(item, index));\n  } : (item, index) => {\n    const key = getKey(item, index);\n    return /*#__PURE__*/React.createElement(Item, _extends({}, itemSharedProps, {\n      order: index,\n      key: key,\n      item: item,\n      renderItem: mergedRenderItem,\n      itemKey: key,\n      registerSize: registerSize,\n      display: index <= mergedDisplayCount\n    }));\n  };\n\n  // >>>>> Rest node\n  const restContextProps = {\n    order: displayRest ? mergedDisplayCount : Number.MAX_SAFE_INTEGER,\n    className: `${itemPrefixCls}-rest`,\n    registerSize: registerOverflowSize,\n    display: displayRest\n  };\n  const mergedRenderRest = renderRest || defaultRenderRest;\n  const restNode = renderRawRest ? /*#__PURE__*/React.createElement(OverflowContext.Provider, {\n    value: {\n      ...itemSharedProps,\n      ...restContextProps\n    }\n  }, renderRawRest(omittedItems)) : /*#__PURE__*/React.createElement(Item, _extends({}, itemSharedProps, restContextProps), typeof mergedRenderRest === 'function' ? mergedRenderRest(omittedItems) : mergedRenderRest);\n  const overflowNode = /*#__PURE__*/React.createElement(Component, _extends({\n    className: clsx(!invalidate && prefixCls, className),\n    style: style,\n    ref: ref\n  }, restProps), prefix && /*#__PURE__*/React.createElement(Item, _extends({}, itemSharedProps, {\n    responsive: isResponsive,\n    responsiveDisabled: !shouldResponsive,\n    order: -1,\n    className: `${itemPrefixCls}-prefix`,\n    registerSize: registerPrefixSize,\n    display: true\n  }), prefix), mergedData.map(internalRenderItemNode), showRest ? restNode : null, suffix && /*#__PURE__*/React.createElement(Item, _extends({}, itemSharedProps, {\n    responsive: isResponsive,\n    responsiveDisabled: !shouldResponsive,\n    order: mergedDisplayCount,\n    className: `${itemPrefixCls}-suffix`,\n    registerSize: registerSuffixSize,\n    display: true,\n    style: suffixStyle\n  }), suffix));\n  return isResponsive ? /*#__PURE__*/React.createElement(ResizeObserver, {\n    onResize: onOverflowResize,\n    disabled: !shouldResponsive\n  }, overflowNode) : overflowNode;\n}\nconst ForwardOverflow = /*#__PURE__*/React.forwardRef(Overflow);\nForwardOverflow.Item = RawItem;\nForwardOverflow.RESPONSIVE = RESPONSIVE;\nForwardOverflow.INVALIDATE = INVALIDATE;\nif (process.env.NODE_ENV !== 'production') {\n  ForwardOverflow.displayName = 'Overflow';\n}\n\n// Convert to generic type\nexport default ForwardOverflow;","import Overflow from \"./Overflow\";\nexport default Overflow;","function _arrayLikeToArray(r, a) {\n  (null == a || a > r.length) && (a = r.length);\n  for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n  return n;\n}\nexport { _arrayLikeToArray as default };","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nfunction _arrayWithoutHoles(r) {\n  if (Array.isArray(r)) return arrayLikeToArray(r);\n}\nexport { _arrayWithoutHoles as default };","function _iterableToArray(r) {\n  if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r);\n}\nexport { _iterableToArray as default };","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nfunction _unsupportedIterableToArray(r, a) {\n  if (r) {\n    if (\"string\" == typeof r) return arrayLikeToArray(r, a);\n    var t = {}.toString.call(r).slice(8, -1);\n    return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? arrayLikeToArray(r, a) : void 0;\n  }\n}\nexport { _unsupportedIterableToArray as default };","function _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _nonIterableSpread as default };","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nfunction _toConsumableArray(r) {\n  return arrayWithoutHoles(r) || iterableToArray(r) || unsupportedIterableToArray(r) || nonIterableSpread();\n}\nexport { _toConsumableArray as default };","import { isNonNullable } from '@rc-component/util';\nexport const isNumber = val => {\n  return typeof val === 'number' && !Number.isNaN(val);\n};\nexport const isString = val => {\n  return typeof val === 'string';\n};\nexport const isPlainObject = val => {\n  return val !== null && typeof val === 'object';\n};\nexport const isFunction = val => {\n  return typeof val === 'function';\n};\nexport const isThenable = val => {\n  return isNonNullable(val) && isFunction(val.then);\n};\nexport const isPrimitive = val => {\n  return typeof val !== 'object' && !isFunction(val) || val === null;\n};\nexport const isTransitionEvent = event => {\n  return isPlainObject(event) && 'propertyName' in event && isString(event.propertyName);\n};\nexport const isWindow = val => {\n  if (!isNonNullable(val)) {\n    return false;\n  }\n  return val === val.window;\n};\nexport const isDocument = val => {\n  if (!isNonNullable(val)) {\n    return false;\n  }\n  return val instanceof Document || val.constructor.name === 'HTMLDocument' || val.nodeType === window.Node.DOCUMENT_NODE;\n};\nexport const isHTMLElement = val => {\n  if (!isNonNullable(val)) {\n    return false;\n  }\n  return typeof HTMLElement !== 'undefined' && val instanceof HTMLElement;\n};","/**\n * Fill object structure by schema, initialize empty objects for keys with `_default` property.\n */\nexport const fillObjectBySchema = (obj, schema) => {\n  const newObj = {\n    ...obj\n  };\n  Object.keys(schema).forEach(key => {\n    if (schema[key]._default) {\n      newObj[key] || (newObj[key] = {});\n    } else {\n      newObj[key] = fillObjectBySchema(newObj[key], schema[key]);\n    }\n  });\n  return newObj;\n};","import _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport * as React from 'react';\nimport { clsx } from 'clsx';\nimport { isFunction, isPlainObject } from '../../is';\nimport { fillObjectBySchema } from './utils';\n// ========================= ClassNames =========================\nexport const mergeClassNames = (schema = {}, ...classNames) => {\n  return classNames.filter(item => Boolean(item)).reduce((acc, cur) => {\n    // Loop keys of the current classNames\n    Object.keys(cur).forEach(key => {\n      const keySchema = schema[key];\n      const curVal = cur[key];\n      if (keySchema) {\n        if (isPlainObject(curVal)) {\n          // Loop fill\n          acc[key] = mergeClassNames(keySchema, acc[key], curVal);\n        } else {\n          // Convert string to object structure\n          const {\n            _default: defaultField\n          } = keySchema;\n          if (defaultField) {\n            acc[key] = acc[key] || {};\n            acc[key][defaultField] = clsx(acc[key][defaultField], curVal);\n          }\n        }\n      } else {\n        // Flatten fill\n        acc[key] = clsx(acc[key], curVal);\n      }\n    });\n    return acc;\n  }, {});\n};\nconst useSemanticClassNames = (schema, ...classNames) => {\n  return React.useMemo(() => mergeClassNames.apply(void 0, [schema].concat(classNames)), [schema].concat(classNames));\n};\n// =========================== Styles ===========================\nexport const mergeStyles = (...styles) => {\n  return styles.filter(item => Boolean(item)).reduce((acc, cur = {}) => {\n    Object.keys(cur).forEach(key => {\n      acc[key] = {\n        ...acc[key],\n        ...cur[key]\n      };\n    });\n    return acc;\n  }, {});\n};\nconst useSemanticStyles = (...styles) => {\n  return React.useMemo(() => mergeStyles.apply(void 0, styles), [].concat(styles));\n};\nexport const useSemanticRootStyle = (style, key = 'root') => {\n  return React.useMemo(() => style ? {\n    [key]: style\n  } : undefined, [style, key]);\n};\n// =========================== Export ===========================\nexport const resolveStyleOrClass = (value, info) => {\n  return isFunction(value) ? value(info) : value;\n};\n/**\n * @desc Merge classNames and styles from multiple sources. When `schema` is provided, it **must** provide the nest object structure.\n * @descZH 合并来自多个来源的 classNames 和 styles，当提供了 `schema` 时，必须提供嵌套的对象结构。\n */\nexport const useMergeSemantic = (classNamesList, stylesList, info, schema) => {\n  const resolvedClassNamesList = classNamesList.map(classNames => classNames ? resolveStyleOrClass(classNames, info) : undefined);\n  const resolvedStylesList = stylesList.map(styles => styles ? resolveStyleOrClass(styles, info) : undefined);\n  const mergedClassNames = useSemanticClassNames.apply(void 0, [schema].concat(_toConsumableArray(resolvedClassNamesList)));\n  const mergedStyles = useSemanticStyles.apply(void 0, _toConsumableArray(resolvedStylesList));\n  return React.useMemo(() => {\n    if (!schema) {\n      return [mergedClassNames, mergedStyles];\n    }\n    return [fillObjectBySchema(mergedClassNames, schema), fillObjectBySchema(mergedStyles, schema)];\n  }, [mergedClassNames, mergedStyles, schema]);\n};","import * as React from 'react';\nimport { warning as rcWarning } from '@rc-component/util';\nexport function noop() {}\nconst {\n  resetWarned: rcResetWarned\n} = rcWarning;\nlet deprecatedWarnList = null;\nexport function resetWarned() {\n  deprecatedWarnList = null;\n  rcResetWarned();\n}\nlet _warning = noop;\nif (process.env.NODE_ENV !== 'production') {\n  _warning = (valid, component, message) => {\n    rcWarning(valid, `[antd: ${component}] ${message}`);\n    // StrictMode will inject console which will not throw warning in React 17.\n    if (process.env.NODE_ENV === 'test') {\n      resetWarned();\n    }\n  };\n}\nconst warning = _warning;\nexport const WarningContext = /*#__PURE__*/React.createContext({});\n/**\n * This is a hook only used in development.\n * We should always wrap this in `if (process.env.NODE_ENV !== 'production')` condition.\n */\nexport const useDevWarning = process.env.NODE_ENV !== 'production' ? component => {\n  const {\n    strict\n  } = React.useContext(WarningContext);\n  const typeWarning = (valid, type, message) => {\n    if (!valid) {\n      if (strict === false && type === 'deprecated') {\n        const existWarning = deprecatedWarnList;\n        if (!deprecatedWarnList) {\n          deprecatedWarnList = {};\n        }\n        deprecatedWarnList[component] = deprecatedWarnList[component] || [];\n        if (!deprecatedWarnList[component].includes(message || '')) {\n          deprecatedWarnList[component].push(message || '');\n        }\n        // Warning for the first time\n        if (!existWarning) {\n          console.warn('[antd] There exists deprecated usage in your code:', deprecatedWarnList);\n        }\n      } else {\n        process.env.NODE_ENV !== \"production\" ? warning(valid, component, message) : void 0;\n      }\n    }\n  };\n  typeWarning.deprecated = (valid, oldProp, newProp, message = '') => {\n    typeWarning(valid, 'deprecated', `\\`${oldProp}\\` is deprecated. Please use \\`${newProp}\\` instead.${message ? ` ${message}` : ''}`);\n  };\n  return typeWarning;\n} : () => {\n  const noopWarning = () => {};\n  noopWarning.deprecated = noop;\n  return noopWarning;\n};\nexport const devUseWarning = useDevWarning;\nexport default warning;","import * as React from 'react';\nexport const defaultPrefixCls = 'ant';\nexport const defaultIconPrefixCls = 'anticon';\nexport const Variants = ['outlined', 'borderless', 'filled', 'underlined'];\nconst defaultGetPrefixCls = (suffixCls, customizePrefixCls) => {\n  if (customizePrefixCls) {\n    return customizePrefixCls;\n  }\n  return suffixCls ? `${defaultPrefixCls}-${suffixCls}` : defaultPrefixCls;\n};\n// zombieJ: 🚨 Do not pass `defaultRenderEmpty` here since it will cause circular dependency.\nexport const ConfigContext = /*#__PURE__*/React.createContext({\n  // We provide a default function for Context without provider\n  getPrefixCls: defaultGetPrefixCls,\n  iconPrefixCls: defaultIconPrefixCls\n});\nexport const {\n  Consumer: ConfigConsumer\n} = ConfigContext;\nconst EMPTY_OBJECT = {};\n/**\n * Get ConfigProvider configured component props.\n * This help to reduce bundle size for saving `?.` operator.\n * Do not use as `useMemo` deps since we do not cache the object here.\n *\n * NOTE: not refactor this with `useMemo` since memo will cost another memory space,\n * which will waste both compare calculation & memory.\n */\nexport function useComponentConfig(propName) {\n  const context = React.useContext(ConfigContext);\n  const {\n    getPrefixCls,\n    direction,\n    getPopupContainer,\n    renderEmpty\n  } = context;\n  const propValue = context[propName];\n  return {\n    classNames: EMPTY_OBJECT,\n    styles: EMPTY_OBJECT,\n    ...propValue,\n    getPrefixCls,\n    direction,\n    getPopupContainer,\n    renderEmpty\n  };\n}","const locale = {\n  // Options\n  items_per_page: '/ page',\n  jump_to: 'Go to',\n  jump_to_confirm: 'confirm',\n  page: 'Page',\n  // Pagination\n  prev_page: 'Previous Page',\n  next_page: 'Next Page',\n  prev_5: 'Previous 5 Pages',\n  next_5: 'Next 5 Pages',\n  prev_3: 'Previous 3 Pages',\n  next_3: 'Next 3 Pages',\n  page_size: 'Page Size'\n};\nexport default locale;","export const commonLocale = {\n  yearFormat: 'YYYY',\n  dayFormat: 'D',\n  cellMeridiemFormat: 'A',\n  monthBeforeYear: true\n};","import { commonLocale } from \"./common\";\nconst locale = {\n  ...commonLocale,\n  locale: 'en_US',\n  today: 'Today',\n  now: 'Now',\n  backToToday: 'Back to today',\n  ok: 'OK',\n  clear: 'Clear',\n  week: 'Week',\n  month: 'Month',\n  year: 'Year',\n  timeSelect: 'select time',\n  dateSelect: 'select date',\n  weekSelect: 'Choose a week',\n  monthSelect: 'Choose a month',\n  yearSelect: 'Choose a year',\n  decadeSelect: 'Choose a decade',\n  previousMonth: 'Previous month',\n  nextMonth: 'Next month',\n  previousYear: 'Last year',\n  nextYear: 'Next year',\n  previousDecade: 'Last decade',\n  nextDecade: 'Next decade',\n  previousCentury: 'Last century',\n  nextCentury: 'Next century'\n};\nexport default locale;","const locale = {\n  placeholder: 'Select time',\n  rangePlaceholder: ['Start time', 'End time']\n};\nexport default locale;","import CalendarLocale from '@rc-component/picker/locale/en_US';\nimport TimePickerLocale from '../../time-picker/locale/en_US';\n// Merge into a locale object\nconst locale = {\n  lang: {\n    placeholder: 'Select date',\n    yearPlaceholder: 'Select year',\n    quarterPlaceholder: 'Select quarter',\n    monthPlaceholder: 'Select month',\n    weekPlaceholder: 'Select week',\n    rangePlaceholder: ['Start date', 'End date'],\n    rangeYearPlaceholder: ['Start year', 'End year'],\n    rangeQuarterPlaceholder: ['Start quarter', 'End quarter'],\n    rangeMonthPlaceholder: ['Start month', 'End month'],\n    rangeWeekPlaceholder: ['Start week', 'End week'],\n    ...CalendarLocale\n  },\n  timePickerLocale: {\n    ...TimePickerLocale\n  }\n};\n// All settings at:\n// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json\nexport default locale;","import enUS from '../../date-picker/locale/en_US';\nexport default enUS;","import Pagination from '@rc-component/pagination/locale/en_US';\nimport Calendar from '../calendar/locale/en_US';\nimport DatePicker from '../date-picker/locale/en_US';\nimport TimePicker from '../time-picker/locale/en_US';\nconst typeTemplate = '${label} is not a valid ${type}';\nconst localeValues = {\n  locale: 'en',\n  Pagination,\n  DatePicker,\n  TimePicker,\n  Calendar,\n  global: {\n    placeholder: 'Please select',\n    close: 'Close',\n    sortable: 'sortable',\n    show: 'Show',\n    hide: 'Hide'\n  },\n  Table: {\n    filterTitle: 'Filter menu',\n    filterConfirm: 'OK',\n    filterReset: 'Reset',\n    filterEmptyText: 'No filters',\n    filterCheckAll: 'Select all items',\n    filterSearchPlaceholder: 'Search in filters',\n    emptyText: 'No data',\n    selectAll: 'Select current page',\n    selectInvert: 'Invert current page',\n    selectNone: 'Clear all data',\n    selectionAll: 'Select all data',\n    sortTitle: 'Sort',\n    expand: 'Expand row',\n    collapse: 'Collapse row',\n    triggerDesc: 'Click to sort descending',\n    triggerAsc: 'Click to sort ascending',\n    cancelSort: 'Click to cancel sorting'\n  },\n  Tour: {\n    Next: 'Next',\n    Previous: 'Previous',\n    Finish: 'Finish'\n  },\n  Modal: {\n    okText: 'OK',\n    cancelText: 'Cancel',\n    justOkText: 'OK'\n  },\n  Popconfirm: {\n    okText: 'OK',\n    cancelText: 'Cancel'\n  },\n  Transfer: {\n    titles: ['', ''],\n    searchPlaceholder: 'Search here',\n    itemUnit: 'item',\n    itemsUnit: 'items',\n    remove: 'Remove',\n    selectCurrent: 'Select current page',\n    removeCurrent: 'Remove current page',\n    selectAll: 'Select all data',\n    deselectAll: 'Deselect all data',\n    removeAll: 'Remove all data',\n    selectInvert: 'Invert current page'\n  },\n  Upload: {\n    uploading: 'Uploading...',\n    removeFile: 'Remove file',\n    uploadError: 'Upload error',\n    previewFile: 'Preview file',\n    downloadFile: 'Download file'\n  },\n  Empty: {\n    description: 'No data'\n  },\n  Icon: {\n    icon: 'icon'\n  },\n  Text: {\n    edit: 'Edit',\n    copy: 'Copy',\n    copied: 'Copied',\n    expand: 'Expand',\n    collapse: 'Collapse'\n  },\n  Carousel: {\n    prevSlide: 'Previous slide',\n    nextSlide: 'Next slide'\n  },\n  Form: {\n    optional: '(optional)',\n    defaultValidateMessages: {\n      default: 'Field validation error for ${label}',\n      required: 'Please enter ${label}',\n      enum: '${label} must be one of [${enum}]',\n      whitespace: '${label} cannot be a blank character',\n      date: {\n        format: '${label} date format is invalid',\n        parse: '${label} cannot be converted to a date',\n        invalid: '${label} is an invalid date'\n      },\n      types: {\n        string: typeTemplate,\n        method: typeTemplate,\n        array: typeTemplate,\n        object: typeTemplate,\n        number: typeTemplate,\n        date: typeTemplate,\n        boolean: typeTemplate,\n        integer: typeTemplate,\n        float: typeTemplate,\n        regexp: typeTemplate,\n        email: typeTemplate,\n        url: typeTemplate,\n        hex: typeTemplate\n      },\n      string: {\n        len: '${label} must be ${len} characters',\n        min: '${label} must be at least ${min} characters',\n        max: '${label} must be up to ${max} characters',\n        range: '${label} must be between ${min}-${max} characters'\n      },\n      number: {\n        len: '${label} must be equal to ${len}',\n        min: '${label} must be minimum ${min}',\n        max: '${label} must be maximum ${max}',\n        range: '${label} must be between ${min}-${max}'\n      },\n      array: {\n        len: 'Must be ${len} ${label}',\n        min: 'At least ${min} ${label}',\n        max: 'At most ${max} ${label}',\n        range: 'The amount of ${label} must be between ${min}-${max}'\n      },\n      pattern: {\n        mismatch: '${label} does not match the pattern ${pattern}'\n      }\n    }\n  },\n  QRCode: {\n    expired: 'QR code expired',\n    refresh: 'Refresh',\n    scanned: 'Scanned'\n  },\n  ColorPicker: {\n    presetEmpty: 'Empty',\n    transparent: 'Transparent',\n    singleColor: 'Single',\n    gradientColor: 'Gradient'\n  }\n};\nexport default localeValues;","import defaultLocale from '../locale/en_US';\nlet runtimeLocale = {\n  ...defaultLocale.Modal\n};\nlet localeList = [];\nconst generateLocale = () => localeList.reduce((merged, locale) => ({\n  ...merged,\n  ...locale\n}), defaultLocale.Modal);\nexport function changeConfirmLocale(newLocale) {\n  if (newLocale) {\n    const cloneLocale = {\n      ...newLocale\n    };\n    localeList.push(cloneLocale);\n    runtimeLocale = generateLocale();\n    return () => {\n      localeList = localeList.filter(locale => locale !== cloneLocale);\n      runtimeLocale = generateLocale();\n    };\n  }\n  runtimeLocale = {\n    ...defaultLocale.Modal\n  };\n}\nexport function getConfirmLocale() {\n  return runtimeLocale;\n}","import { createContext } from 'react';\nconst LocaleContext = /*#__PURE__*/createContext(undefined);\nexport default LocaleContext;","import * as React from 'react';\nimport { isFunction } from '../_util/is';\nimport LocaleContext from './context';\nimport defaultLocaleData from './en_US';\nconst useLocale = (componentName, defaultLocale) => {\n  const fullLocale = React.useContext(LocaleContext);\n  const getLocale = React.useMemo(() => {\n    const locale = defaultLocale || defaultLocaleData[componentName];\n    const localeFromContext = fullLocale?.[componentName] ?? {};\n    return {\n      ...(isFunction(locale) ? locale() : locale),\n      ...(localeFromContext || {})\n    };\n  }, [componentName, defaultLocale, fullLocale]);\n  const getLocaleCode = React.useMemo(() => {\n    const localeCode = fullLocale?.locale;\n    // Had use LocaleProvide but didn't set locale\n    if (fullLocale?.exist && !localeCode) {\n      return defaultLocaleData.locale;\n    }\n    return localeCode;\n  }, [fullLocale]);\n  return [getLocale, getLocaleCode];\n};\nexport default useLocale;","\"use client\";\n\nimport * as React from 'react';\nimport { devUseWarning } from '../_util/warning';\nimport { changeConfirmLocale } from '../modal/locale';\nimport LocaleContext from './context';\nexport { default as useLocale } from './useLocale';\nexport const ANT_MARK = 'internalMark';\nconst LocaleProvider = props => {\n  const {\n    locale = {},\n    children,\n    _ANT_MARK__\n  } = props;\n  if (process.env.NODE_ENV !== 'production') {\n    const warning = devUseWarning('LocaleProvider');\n    process.env.NODE_ENV !== \"production\" ? warning(_ANT_MARK__ === ANT_MARK, 'deprecated', '`LocaleProvider` is deprecated. Please use `locale` with `ConfigProvider` instead: http://u.ant.design/locale') : void 0;\n  }\n  React.useEffect(() => {\n    const clearLocale = changeConfirmLocale(locale?.Modal);\n    return clearLocale;\n  }, [locale]);\n  const getMemoizedContextValue = React.useMemo(() => ({\n    ...locale,\n    exist: true\n  }), [locale]);\n  return /*#__PURE__*/React.createElement(LocaleContext.Provider, {\n    value: getMemoizedContextValue\n  }, children);\n};\nif (process.env.NODE_ENV !== 'production') {\n  LocaleProvider.displayName = 'LocaleProvider';\n}\nexport default LocaleProvider;","import { warning } from '@rc-component/util';\nimport * as React from 'react';\nexport const HOOK_MARK = 'RC_FORM_INTERNAL_HOOKS';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst warningFunc = () => {\n  warning(false, 'Can not find FormContext. Please make sure you wrap Field under Form.');\n};\nconst Context = /*#__PURE__*/React.createContext({\n  getFieldValue: warningFunc,\n  getFieldsValue: warningFunc,\n  getFieldError: warningFunc,\n  getFieldWarning: warningFunc,\n  getFieldsError: warningFunc,\n  isFieldsTouched: warningFunc,\n  isFieldTouched: warningFunc,\n  isFieldValidating: warningFunc,\n  isFieldsValidating: warningFunc,\n  resetFields: warningFunc,\n  setFields: warningFunc,\n  setFieldValue: warningFunc,\n  setFieldsValue: warningFunc,\n  validateFields: warningFunc,\n  submit: warningFunc,\n  getInternalHooks: () => {\n    warningFunc();\n    return {\n      dispatch: warningFunc,\n      initEntityValue: warningFunc,\n      registerField: warningFunc,\n      useSubscribe: warningFunc,\n      setInitialValues: warningFunc,\n      destroyForm: warningFunc,\n      setCallbacks: warningFunc,\n      registerWatch: warningFunc,\n      getFields: warningFunc,\n      setValidateMessages: warningFunc,\n      setPreserve: warningFunc,\n      getInitialValue: warningFunc\n    };\n  }\n});\nexport default Context;","import * as React from 'react';\nconst ListContext = /*#__PURE__*/React.createContext(null);\nexport default ListContext;","export function toArray(value) {\n  if (value === undefined || value === null) {\n    return [];\n  }\n  return Array.isArray(value) ? value : [value];\n}\nexport function isFormInstance(form) {\n  return form && !!form._init;\n}","export function newMessages() {\n  return {\n    default: 'Validation error on field %s',\n    required: '%s is required',\n    enum: '%s must be one of %s',\n    whitespace: '%s cannot be empty',\n    date: {\n      format: '%s date %s is invalid for format %s',\n      parse: '%s date could not be parsed, %s is invalid ',\n      invalid: '%s date %s is invalid'\n    },\n    types: {\n      string: '%s is not a %s',\n      method: '%s is not a %s (function)',\n      array: '%s is not an %s',\n      object: '%s is not an %s',\n      number: '%s is not a %s',\n      date: '%s is not a %s',\n      boolean: '%s is not a %s',\n      integer: '%s is not an %s',\n      float: '%s is not a %s',\n      regexp: '%s is not a valid %s',\n      email: '%s is not a valid %s',\n      tel: '%s is not a valid %s',\n      url: '%s is not a valid %s',\n      hex: '%s is not a valid %s'\n    },\n    string: {\n      len: '%s must be exactly %s characters',\n      min: '%s must be at least %s characters',\n      max: '%s cannot be longer than %s characters',\n      range: '%s must be between %s and %s characters'\n    },\n    number: {\n      len: '%s must equal %s',\n      min: '%s cannot be less than %s',\n      max: '%s cannot be greater than %s',\n      range: '%s must be between %s and %s'\n    },\n    array: {\n      len: '%s must be exactly %s in length',\n      min: '%s cannot be less than %s in length',\n      max: '%s cannot be greater than %s in length',\n      range: '%s must be between %s and %s in length'\n    },\n    pattern: {\n      mismatch: '%s value %s does not match pattern %s'\n    },\n    clone() {\n      const cloned = JSON.parse(JSON.stringify(this));\n      cloned.clone = this.clone;\n      return cloned;\n    }\n  };\n}\nexport const messages = newMessages();","/* eslint no-console:0 */\n\nconst formatRegExp = /%[sdj%]/g;\nexport let warning = () => {};\n\n// don't print warning message when in production env or node runtime\nif (typeof process !== 'undefined' && process.env && process.env.NODE_ENV !== 'production' && typeof window !== 'undefined' && typeof document !== 'undefined') {\n  warning = (type, errors) => {\n    if (typeof console !== 'undefined' && console.warn && typeof ASYNC_VALIDATOR_NO_WARNING === 'undefined') {\n      if (errors.every(e => typeof e === 'string')) {\n        console.warn(type, errors);\n      }\n    }\n  };\n}\nexport function convertFieldsError(errors) {\n  if (!errors || !errors.length) return null;\n  const fields = {};\n  errors.forEach(error => {\n    const field = error.field;\n    fields[field] = fields[field] || [];\n    fields[field].push(error);\n  });\n  return fields;\n}\nexport function format(template, ...args) {\n  let i = 0;\n  const len = args.length;\n  if (typeof template === 'function') {\n    // eslint-disable-next-line prefer-spread\n    return template.apply(null, args);\n  }\n  if (typeof template === 'string') {\n    const str = template.replace(formatRegExp, x => {\n      if (x === '%%') {\n        return '%';\n      }\n      if (i >= len) {\n        return x;\n      }\n      switch (x) {\n        case '%s':\n          return String(args[i++]);\n        case '%d':\n          return Number(args[i++]);\n        case '%j':\n          try {\n            return JSON.stringify(args[i++]);\n          } catch (_) {\n            return '[Circular]';\n          }\n          break;\n        default:\n          return x;\n      }\n    });\n    return str;\n  }\n  return template;\n}\nfunction isNativeStringType(type) {\n  return type === 'string' || type === 'url' || type === 'hex' || type === 'email' || type === 'date' || type === 'pattern' || type === 'tel';\n}\nexport function isEmptyValue(value, type) {\n  if (value === undefined || value === null) {\n    return true;\n  }\n  if (type === 'array' && Array.isArray(value) && !value.length) {\n    return true;\n  }\n  if (isNativeStringType(type) && typeof value === 'string' && !value) {\n    return true;\n  }\n  return false;\n}\nexport function isEmptyObject(obj) {\n  return Object.keys(obj).length === 0;\n}\nfunction asyncParallelArray(arr, func, callback) {\n  const results = [];\n  let total = 0;\n  const arrLength = arr.length;\n  function count(errors) {\n    results.push(...(errors || []));\n    total++;\n    if (total === arrLength) {\n      callback(results);\n    }\n  }\n  arr.forEach(a => {\n    func(a, count);\n  });\n}\nfunction asyncSerialArray(arr, func, callback) {\n  let index = 0;\n  const arrLength = arr.length;\n  function next(errors) {\n    if (errors && errors.length) {\n      callback(errors);\n      return;\n    }\n    const original = index;\n    index = index + 1;\n    if (original < arrLength) {\n      func(arr[original], next);\n    } else {\n      callback([]);\n    }\n  }\n  next([]);\n}\nfunction flattenObjArr(objArr) {\n  const ret = [];\n  Object.keys(objArr).forEach(k => {\n    ret.push(...(objArr[k] || []));\n  });\n  return ret;\n}\nexport class AsyncValidationError extends Error {\n  errors;\n  fields;\n  constructor(errors, fields) {\n    super('Async Validation Error');\n    this.errors = errors;\n    this.fields = fields;\n  }\n}\nexport function asyncMap(objArr, option, func, callback, source) {\n  if (option.first) {\n    const pending = new Promise((resolve, reject) => {\n      const next = errors => {\n        callback(errors);\n        return errors.length ? reject(new AsyncValidationError(errors, convertFieldsError(errors))) : resolve(source);\n      };\n      const flattenArr = flattenObjArr(objArr);\n      asyncSerialArray(flattenArr, func, next);\n    });\n    pending.catch(e => e);\n    return pending;\n  }\n  const firstFields = option.firstFields === true ? Object.keys(objArr) : option.firstFields || [];\n  const objArrKeys = Object.keys(objArr);\n  const objArrLength = objArrKeys.length;\n  let total = 0;\n  const results = [];\n  const pending = new Promise((resolve, reject) => {\n    const next = errors => {\n      // eslint-disable-next-line prefer-spread\n      results.push.apply(results, errors);\n      total++;\n      if (total === objArrLength) {\n        callback(results);\n        return results.length ? reject(new AsyncValidationError(results, convertFieldsError(results))) : resolve(source);\n      }\n    };\n    if (!objArrKeys.length) {\n      callback(results);\n      resolve(source);\n    }\n    objArrKeys.forEach(key => {\n      const arr = objArr[key];\n      if (firstFields.indexOf(key) !== -1) {\n        asyncSerialArray(arr, func, next);\n      } else {\n        asyncParallelArray(arr, func, next);\n      }\n    });\n  });\n  pending.catch(e => e);\n  return pending;\n}\nfunction isErrorObj(obj) {\n  return !!(obj && obj.message !== undefined);\n}\nfunction getValue(value, path) {\n  let v = value;\n  for (let i = 0; i < path.length; i++) {\n    if (v == undefined) {\n      return v;\n    }\n    v = v[path[i]];\n  }\n  return v;\n}\nexport function complementError(rule, source) {\n  return oe => {\n    let fieldValue;\n    if (rule.fullFields) {\n      fieldValue = getValue(source, rule.fullFields);\n    } else {\n      fieldValue = source[oe.field || rule.fullField];\n    }\n    if (isErrorObj(oe)) {\n      oe.field = oe.field || rule.fullField;\n      oe.fieldValue = fieldValue;\n      return oe;\n    }\n    return {\n      message: typeof oe === 'function' ? oe() : oe,\n      fieldValue,\n      field: oe.field || rule.fullField\n    };\n  };\n}\nexport function deepMerge(target, source) {\n  if (source) {\n    for (const s in source) {\n      if (source.hasOwnProperty(s)) {\n        const value = source[s];\n        if (typeof value === 'object' && typeof target[s] === 'object') {\n          target[s] = {\n            ...target[s],\n            ...value\n          };\n        } else {\n          target[s] = value;\n        }\n      }\n    }\n  }\n  return target;\n}","import { format } from \"../util\";\nconst ENUM = 'enum';\nconst enumerable = (rule, value, source, errors, options) => {\n  rule[ENUM] = Array.isArray(rule[ENUM]) ? rule[ENUM] : [];\n  if (rule[ENUM].indexOf(value) === -1) {\n    errors.push(format(options.messages[ENUM], rule.fullField, rule[ENUM].join(', ')));\n  }\n};\nexport default enumerable;","import { format } from \"../util\";\nconst pattern = (rule, value, source, errors, options) => {\n  if (rule.pattern) {\n    if (rule.pattern instanceof RegExp) {\n      // if a RegExp instance is passed, reset `lastIndex` in case its `global`\n      // flag is accidentally set to `true`, which in a validation scenario\n      // is not necessary and the result might be misleading\n      rule.pattern.lastIndex = 0;\n      if (!rule.pattern.test(value)) {\n        errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));\n      }\n    } else if (typeof rule.pattern === 'string') {\n      const _pattern = new RegExp(rule.pattern);\n      if (!_pattern.test(value)) {\n        errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));\n      }\n    }\n  }\n};\nexport default pattern;","import { format } from \"../util\";\nconst range = (rule, value, source, errors, options) => {\n  const len = typeof rule.len === 'number';\n  const min = typeof rule.min === 'number';\n  const max = typeof rule.max === 'number';\n  // 正则匹配码点范围从U+010000一直到U+10FFFF的文字（补充平面Supplementary Plane）\n  const spRegexp = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n  let val = value;\n  let key = null;\n  const num = typeof value === 'number';\n  const str = typeof value === 'string';\n  const arr = Array.isArray(value);\n  if (num) {\n    key = 'number';\n  } else if (str) {\n    key = 'string';\n  } else if (arr) {\n    key = 'array';\n  }\n  // if the value is not of a supported type for range validation\n  // the validation rule rule should use the\n  // type property to also test for a particular type\n  if (!key) {\n    return false;\n  }\n  if (arr) {\n    val = value.length;\n  }\n  if (str) {\n    // 处理码点大于U+010000的文字length属性不准确的bug，如\"𠮷𠮷𠮷\".length !== 3\n    val = value.replace(spRegexp, '_').length;\n  }\n  if (len) {\n    if (val !== rule.len) {\n      errors.push(format(options.messages[key].len, rule.fullField, rule.len));\n    }\n  } else if (min && !max && val < rule.min) {\n    errors.push(format(options.messages[key].min, rule.fullField, rule.min));\n  } else if (max && !min && val > rule.max) {\n    errors.push(format(options.messages[key].max, rule.fullField, rule.max));\n  } else if (min && max && (val < rule.min || val > rule.max)) {\n    errors.push(format(options.messages[key].range, rule.fullField, rule.min, rule.max));\n  }\n};\nexport default range;","import { format, isEmptyValue } from \"../util\";\nconst required = (rule, value, source, errors, options, type) => {\n  if (rule.required && (!source.hasOwnProperty(rule.field) || isEmptyValue(value, type || rule.type))) {\n    errors.push(format(options.messages.required, rule.fullField));\n  }\n};\nexport default required;","// https://github.com/kevva/url-regex/blob/master/index.js\nlet urlReg;\nexport default (() => {\n  if (urlReg) {\n    return urlReg;\n  }\n  const word = '[a-fA-F\\\\d:]';\n  const b = options => options && options.includeBoundaries ? `(?:(?<=\\\\s|^)(?=${word})|(?<=${word})(?=\\\\s|$))` : '';\n  const v4 = '(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)){3}';\n  const v6seg = '[a-fA-F\\\\d]{1,4}';\n  const v6List = [`(?:${v6seg}:){7}(?:${v6seg}|:)`,\n  // 1:2:3:4:5:6:7::  1:2:3:4:5:6:7:8\n  `(?:${v6seg}:){6}(?:${v4}|:${v6seg}|:)`,\n  // 1:2:3:4:5:6::    1:2:3:4:5:6::8   1:2:3:4:5:6::8  1:2:3:4:5:6::\n  `(?:${v6seg}:){5}(?::${v4}|(?::${v6seg}){1,2}|:)`,\n  // 1:2:3:4:5::      1:2:3:4:5::7:8   1:2:3:4:5::8    1:2:3:4:5::\n  `(?:${v6seg}:){4}(?:(?::${v6seg}){0,1}:${v4}|(?::${v6seg}){1,3}|:)`,\n  // 1:2:3:4::        1:2:3:4::6:7:8   1:2:3:4::8      1:2:3:4::\n  `(?:${v6seg}:){3}(?:(?::${v6seg}){0,2}:${v4}|(?::${v6seg}){1,4}|:)`,\n  // 1:2:3::          1:2:3::5:6:7:8   1:2:3::8        1:2:3::\n  `(?:${v6seg}:){2}(?:(?::${v6seg}){0,3}:${v4}|(?::${v6seg}){1,5}|:)`,\n  // 1:2::            1:2::4:5:6:7:8   1:2::8          1:2::\n  `(?:${v6seg}:){1}(?:(?::${v6seg}){0,4}:${v4}|(?::${v6seg}){1,6}|:)`,\n  // 1::              1::3:4:5:6:7:8   1::8            1::\n  `(?::(?:(?::${v6seg}){0,5}:${v4}|(?::${v6seg}){1,7}|:))` // ::2:3:4:5:6:7:8  ::2:3:4:5:6:7:8  ::8             ::\n  ];\n  const v6Eth0 = `(?:%[0-9a-zA-Z]{1,})?`; // %eth0            %1\n\n  const v6 = `(?:${v6List.join('|')})${v6Eth0}`;\n\n  // Pre-compile only the exact regexes because adding a global flag make regexes stateful\n  const v46Exact = new RegExp(`(?:^${v4}$)|(?:^${v6}$)`);\n  const v4exact = new RegExp(`^${v4}$`);\n  const v6exact = new RegExp(`^${v6}$`);\n  const ip = options => options && options.exact ? v46Exact : new RegExp(`(?:${b(options)}${v4}${b(options)})|(?:${b(options)}${v6}${b(options)})`, 'g');\n  ip.v4 = options => options && options.exact ? v4exact : new RegExp(`${b(options)}${v4}${b(options)}`, 'g');\n  ip.v6 = options => options && options.exact ? v6exact : new RegExp(`${b(options)}${v6}${b(options)}`, 'g');\n  const protocol = `(?:(?:[a-z]+:)?//)`;\n  const auth = '(?:\\\\S+(?::\\\\S*)?@)?';\n  const ipv4 = ip.v4().source;\n  const ipv6 = ip.v6().source;\n  const host = '(?:(?:[a-z\\\\u00a1-\\\\uffff0-9][-_]*)*[a-z\\\\u00a1-\\\\uffff0-9]+)';\n  const domain = '(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)*';\n  const tld = `(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,}))`;\n  const port = '(?::\\\\d{2,5})?';\n  const path = '(?:[/?#][^\\\\s\"]*)?';\n  const regex = `(?:${protocol}|www\\\\.)${auth}(?:localhost|${ipv4}|${ipv6}|${host}${domain}${tld})${port}${path}`;\n  urlReg = new RegExp(`(?:^${regex}$)`, 'i');\n  return urlReg;\n});","import { format } from \"../util\";\nimport required from \"./required\";\nimport getUrlRegex from \"./url\";\n/* eslint max-len:0 */\n\nconst pattern = {\n  // http://emailregex.com/\n  email: /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]+\\.)+[a-zA-Z\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]{2,}))$/,\n  // url: new RegExp(\n  //   '^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\\\S+(?::\\\\S*)?@)?(?:(?:(?:[1-9]\\\\d?|1\\\\d\\\\d|2[01]\\\\d|22[0-3])(?:\\\\.(?:1?\\\\d{1,2}|2[0-4]\\\\d|25[0-5])){2}(?:\\\\.(?:[0-9]\\\\d?|1\\\\d\\\\d|2[0-4]\\\\d|25[0-4]))|(?:(?:[a-z\\\\u00a1-\\\\uffff0-9]+-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]+-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)*(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,})))|localhost)(?::\\\\d{2,5})?(?:(/|\\\\?|#)[^\\\\s]*)?$',\n  //   'i',\n  // ),\n  /**\n   * Phone number regex, support country code, brackets, spaces, and dashes (or non-breaking hyphen \\u2011).\n   * @see https://regexr.com/3c53v\n   * @see https://ihateregex.io/expr/phone/\n   * @see https://developers.google.com/style/phone-numbers using non-breaking hyphen \\u2011\n   */\n  tel: /^(\\+[0-9]{1,3}[-\\s\\u2011]?)?(\\([0-9]{1,4}\\)[-\\s\\u2011]?)?([0-9]+[-\\s\\u2011]?)*[0-9]+$/,\n  hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i\n};\nconst types = {\n  integer(value) {\n    return types.number(value) && parseInt(value, 10) === value;\n  },\n  float(value) {\n    return types.number(value) && !types.integer(value);\n  },\n  array(value) {\n    return Array.isArray(value);\n  },\n  regexp(value) {\n    if (value instanceof RegExp) {\n      return true;\n    }\n    try {\n      return !!new RegExp(value);\n    } catch (e) {\n      return false;\n    }\n  },\n  date(value) {\n    return typeof value.getTime === 'function' && typeof value.getMonth === 'function' && typeof value.getYear === 'function' && !isNaN(value.getTime());\n  },\n  number(value) {\n    if (isNaN(value)) {\n      return false;\n    }\n    return typeof value === 'number';\n  },\n  object(value) {\n    return typeof value === 'object' && !types.array(value);\n  },\n  method(value) {\n    return typeof value === 'function';\n  },\n  email(value) {\n    return typeof value === 'string' && value.length <= 320 && !!value.match(pattern.email);\n  },\n  tel(value) {\n    return typeof value === 'string' && value.length <= 32 && !!value.match(pattern.tel);\n  },\n  url(value) {\n    return typeof value === 'string' && value.length <= 2048 && !!value.match(getUrlRegex());\n  },\n  hex(value) {\n    return typeof value === 'string' && !!value.match(pattern.hex);\n  }\n};\nconst type = (rule, value, source, errors, options) => {\n  if (rule.required && value === undefined) {\n    required(rule, value, source, errors, options);\n    return;\n  }\n  const custom = ['integer', 'float', 'array', 'regexp', 'object', 'method', 'email', 'tel', 'number', 'date', 'url', 'hex'];\n  const ruleType = rule.type;\n  if (custom.indexOf(ruleType) > -1) {\n    if (!types[ruleType](value)) {\n      errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type));\n    }\n    // straight typeof check\n  } else if (ruleType && typeof value !== rule.type) {\n    errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type));\n  }\n};\nexport default type;","import { format } from \"../util\";\n\n/**\n *  Rule for validating whitespace.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param source The source object being validated.\n *  @param errors An array of errors that this rule may add\n *  validation errors to.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\nconst whitespace = (rule, value, source, errors, options) => {\n  if (/^\\s+$/.test(value) || value === '') {\n    errors.push(format(options.messages.whitespace, rule.fullField));\n  }\n};\nexport default whitespace;","import enumRule from \"./enum\";\nimport pattern from \"./pattern\";\nimport range from \"./range\";\nimport required from \"./required\";\nimport type from \"./type\";\nimport whitespace from \"./whitespace\";\nexport default {\n  required,\n  whitespace,\n  type,\n  range,\n  enum: enumRule,\n  pattern\n};","import rules from \"../rule\";\nimport { isEmptyValue } from \"../util\";\nconst any = (rule, value, callback, source, options) => {\n  const errors = [];\n  const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n  if (validate) {\n    if (isEmptyValue(value) && !rule.required) {\n      return callback();\n    }\n    rules.required(rule, value, source, errors, options);\n  }\n  callback(errors);\n};\nexport default any;","import rules from \"../rule/index\";\nconst array = (rule, value, callback, source, options) => {\n  const errors = [];\n  const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n  if (validate) {\n    if ((value === undefined || value === null) && !rule.required) {\n      return callback();\n    }\n    rules.required(rule, value, source, errors, options, 'array');\n    if (value !== undefined && value !== null) {\n      rules.type(rule, value, source, errors, options);\n      rules.range(rule, value, source, errors, options);\n    }\n  }\n  callback(errors);\n};\nexport default array;","import rules from \"../rule\";\nimport { isEmptyValue } from \"../util\";\nconst boolean = (rule, value, callback, source, options) => {\n  const errors = [];\n  const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n  if (validate) {\n    if (isEmptyValue(value) && !rule.required) {\n      return callback();\n    }\n    rules.required(rule, value, source, errors, options);\n    if (value !== undefined) {\n      rules.type(rule, value, source, errors, options);\n    }\n  }\n  callback(errors);\n};\nexport default boolean;","import rules from \"../rule\";\nimport { isEmptyValue } from \"../util\";\nconst date = (rule, value, callback, source, options) => {\n  // console.log('integer rule called %j', rule);\n  const errors = [];\n  const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n  // console.log('validate on %s value', value);\n  if (validate) {\n    if (isEmptyValue(value, 'date') && !rule.required) {\n      return callback();\n    }\n    rules.required(rule, value, source, errors, options);\n    if (!isEmptyValue(value, 'date')) {\n      let dateObject;\n      if (value instanceof Date) {\n        dateObject = value;\n      } else {\n        dateObject = new Date(value);\n      }\n      rules.type(rule, dateObject, source, errors, options);\n      if (dateObject) {\n        rules.range(rule, dateObject.getTime(), source, errors, options);\n      }\n    }\n  }\n  callback(errors);\n};\nexport default date;","import rules from \"../rule\";\nimport { isEmptyValue } from \"../util\";\nconst ENUM = 'enum';\nconst enumerable = (rule, value, callback, source, options) => {\n  const errors = [];\n  const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n  if (validate) {\n    if (isEmptyValue(value) && !rule.required) {\n      return callback();\n    }\n    rules.required(rule, value, source, errors, options);\n    if (value !== undefined) {\n      rules[ENUM](rule, value, source, errors, options);\n    }\n  }\n  callback(errors);\n};\nexport default enumerable;","import rules from \"../rule\";\nimport { isEmptyValue } from \"../util\";\nconst floatFn = (rule, value, callback, source, options) => {\n  const errors = [];\n  const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n  if (validate) {\n    if (isEmptyValue(value) && !rule.required) {\n      return callback();\n    }\n    rules.required(rule, value, source, errors, options);\n    if (value !== undefined) {\n      rules.type(rule, value, source, errors, options);\n      rules.range(rule, value, source, errors, options);\n    }\n  }\n  callback(errors);\n};\nexport default floatFn;","import rules from \"../rule\";\nimport { isEmptyValue } from \"../util\";\nconst integer = (rule, value, callback, source, options) => {\n  const errors = [];\n  const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n  if (validate) {\n    if (isEmptyValue(value) && !rule.required) {\n      return callback();\n    }\n    rules.required(rule, value, source, errors, options);\n    if (value !== undefined) {\n      rules.type(rule, value, source, errors, options);\n      rules.range(rule, value, source, errors, options);\n    }\n  }\n  callback(errors);\n};\nexport default integer;","import rules from \"../rule\";\nimport { isEmptyValue } from \"../util\";\nconst method = (rule, value, callback, source, options) => {\n  const errors = [];\n  const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n  if (validate) {\n    if (isEmptyValue(value) && !rule.required) {\n      return callback();\n    }\n    rules.required(rule, value, source, errors, options);\n    if (value !== undefined) {\n      rules.type(rule, value, source, errors, options);\n    }\n  }\n  callback(errors);\n};\nexport default method;","import rules from \"../rule\";\nimport { isEmptyValue } from \"../util\";\nconst number = (rule, value, callback, source, options) => {\n  const errors = [];\n  const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n  if (validate) {\n    if (value === '') {\n      // eslint-disable-next-line no-param-reassign\n      value = undefined;\n    }\n    if (isEmptyValue(value) && !rule.required) {\n      return callback();\n    }\n    rules.required(rule, value, source, errors, options);\n    if (value !== undefined) {\n      rules.type(rule, value, source, errors, options);\n      rules.range(rule, value, source, errors, options);\n    }\n  }\n  callback(errors);\n};\nexport default number;","import rules from \"../rule\";\nimport { isEmptyValue } from \"../util\";\nconst object = (rule, value, callback, source, options) => {\n  const errors = [];\n  const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n  if (validate) {\n    if (isEmptyValue(value) && !rule.required) {\n      return callback();\n    }\n    rules.required(rule, value, source, errors, options);\n    if (value !== undefined) {\n      rules.type(rule, value, source, errors, options);\n    }\n  }\n  callback(errors);\n};\nexport default object;","import rules from \"../rule\";\nimport { isEmptyValue } from \"../util\";\nconst pattern = (rule, value, callback, source, options) => {\n  const errors = [];\n  const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n  if (validate) {\n    if (isEmptyValue(value, 'string') && !rule.required) {\n      return callback();\n    }\n    rules.required(rule, value, source, errors, options);\n    if (!isEmptyValue(value, 'string')) {\n      rules.pattern(rule, value, source, errors, options);\n    }\n  }\n  callback(errors);\n};\nexport default pattern;","import rules from \"../rule\";\nimport { isEmptyValue } from \"../util\";\nconst regexp = (rule, value, callback, source, options) => {\n  const errors = [];\n  const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n  if (validate) {\n    if (isEmptyValue(value) && !rule.required) {\n      return callback();\n    }\n    rules.required(rule, value, source, errors, options);\n    if (!isEmptyValue(value)) {\n      rules.type(rule, value, source, errors, options);\n    }\n  }\n  callback(errors);\n};\nexport default regexp;","import rules from \"../rule\";\nconst required = (rule, value, callback, source, options) => {\n  const errors = [];\n  const type = Array.isArray(value) ? 'array' : typeof value;\n  rules.required(rule, value, source, errors, options, type);\n  callback(errors);\n};\nexport default required;","import rules from \"../rule\";\nimport { isEmptyValue } from \"../util\";\nconst string = (rule, value, callback, source, options) => {\n  const errors = [];\n  const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n  if (validate) {\n    if (isEmptyValue(value, 'string') && !rule.required) {\n      return callback();\n    }\n    rules.required(rule, value, source, errors, options, 'string');\n    if (!isEmptyValue(value, 'string')) {\n      rules.type(rule, value, source, errors, options);\n      rules.range(rule, value, source, errors, options);\n      rules.pattern(rule, value, source, errors, options);\n      if (rule.whitespace === true) {\n        rules.whitespace(rule, value, source, errors, options);\n      }\n    }\n  }\n  callback(errors);\n};\nexport default string;","import rules from \"../rule\";\nimport { isEmptyValue } from \"../util\";\nconst type = (rule, value, callback, source, options) => {\n  const ruleType = rule.type;\n  const errors = [];\n  const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n  if (validate) {\n    if (isEmptyValue(value, ruleType) && !rule.required) {\n      return callback();\n    }\n    rules.required(rule, value, source, errors, options, ruleType);\n    if (!isEmptyValue(value, ruleType)) {\n      rules.type(rule, value, source, errors, options);\n    }\n  }\n  callback(errors);\n};\nexport default type;","import any from \"./any\";\nimport array from \"./array\";\nimport boolean from \"./boolean\";\nimport date from \"./date\";\nimport enumValidator from \"./enum\";\nimport float from \"./float\";\nimport integer from \"./integer\";\nimport method from \"./method\";\nimport number from \"./number\";\nimport object from \"./object\";\nimport pattern from \"./pattern\";\nimport regexp from \"./regexp\";\nimport required from \"./required\";\nimport string from \"./string\";\nimport type from \"./type\";\nexport default {\n  string,\n  method,\n  number,\n  boolean,\n  regexp,\n  integer,\n  float,\n  array,\n  object,\n  enum: enumValidator,\n  pattern,\n  date,\n  url: type,\n  hex: type,\n  email: type,\n  tel: type,\n  required,\n  any\n};","import { messages as defaultMessages, newMessages } from \"./messages\";\nimport { asyncMap, complementError, convertFieldsError, deepMerge, format, warning } from \"./util\";\nimport validators from \"./validator/index\";\nexport * from \"./interface\";\n\n/**\n *  Encapsulates a validation schema.\n *\n *  @param descriptor An object declaring validation rules\n *  for this schema.\n */\nclass Schema {\n  // ========================= Static =========================\n  static register = function register(type, validator) {\n    if (typeof validator !== 'function') {\n      throw new Error('Cannot register a validator by type, validator is not a function');\n    }\n    validators[type] = validator;\n  };\n  static warning = warning;\n  static messages = defaultMessages;\n  static validators = validators;\n\n  // ======================== Instance ========================\n  rules = null;\n  _messages = defaultMessages;\n  constructor(descriptor) {\n    this.define(descriptor);\n  }\n  define(rules) {\n    if (!rules) {\n      throw new Error('Cannot configure a schema with no rules');\n    }\n    if (typeof rules !== 'object' || Array.isArray(rules)) {\n      throw new Error('Rules must be an object');\n    }\n    this.rules = {};\n    Object.keys(rules).forEach(name => {\n      const item = rules[name];\n      this.rules[name] = Array.isArray(item) ? item : [item];\n    });\n  }\n  messages(messages) {\n    if (messages) {\n      this._messages = deepMerge(newMessages(), messages);\n    }\n    return this._messages;\n  }\n\n  // eslint-disable-next-line @typescript-eslint/unified-signatures\n\n  validate(source_, o = {}, oc = () => {}) {\n    let source = source_;\n    let options = o;\n    let callback = oc;\n    if (typeof options === 'function') {\n      callback = options;\n      options = {};\n    }\n    if (!this.rules || Object.keys(this.rules).length === 0) {\n      if (callback) {\n        callback(null, source);\n      }\n      return Promise.resolve(source);\n    }\n    function complete(results) {\n      let errors = [];\n      let fields = {};\n      function add(e) {\n        if (Array.isArray(e)) {\n          errors = errors.concat(...e);\n        } else {\n          errors.push(e);\n        }\n      }\n      for (let i = 0; i < results.length; i++) {\n        add(results[i]);\n      }\n      if (!errors.length) {\n        callback(null, source);\n      } else {\n        fields = convertFieldsError(errors);\n        callback(errors, fields);\n      }\n    }\n    if (options.messages) {\n      let messages = this.messages();\n      if (messages === defaultMessages) {\n        messages = newMessages();\n      }\n      deepMerge(messages, options.messages);\n      options.messages = messages;\n    } else {\n      options.messages = this.messages();\n    }\n    const series = {};\n    const keys = options.keys || Object.keys(this.rules);\n    keys.forEach(z => {\n      const arr = this.rules[z];\n      let value = source[z];\n      arr.forEach(r => {\n        let rule = r;\n        if (typeof rule.transform === 'function') {\n          if (source === source_) {\n            source = {\n              ...source\n            };\n          }\n          value = source[z] = rule.transform(value);\n          if (value !== undefined && value !== null) {\n            rule.type = rule.type || (Array.isArray(value) ? 'array' : typeof value);\n          }\n        }\n        if (typeof rule === 'function') {\n          rule = {\n            validator: rule\n          };\n        } else {\n          rule = {\n            ...rule\n          };\n        }\n\n        // Fill validator. Skip if nothing need to validate\n        rule.validator = this.getValidationMethod(rule);\n        if (!rule.validator) {\n          return;\n        }\n        rule.field = z;\n        rule.fullField = rule.fullField || z;\n        rule.type = this.getType(rule);\n        series[z] = series[z] || [];\n        series[z].push({\n          rule,\n          value,\n          source,\n          field: z\n        });\n      });\n    });\n    const errorFields = {};\n    return asyncMap(series, options, (data, doIt) => {\n      const rule = data.rule;\n      let deep = (rule.type === 'object' || rule.type === 'array') && (typeof rule.fields === 'object' || typeof rule.defaultField === 'object');\n      deep = deep && (rule.required || !rule.required && data.value);\n      rule.field = data.field;\n      function addFullField(key, schema) {\n        return {\n          ...schema,\n          fullField: `${rule.fullField}.${key}`,\n          fullFields: rule.fullFields ? [...rule.fullFields, key] : [key]\n        };\n      }\n      function cb(e = []) {\n        let errorList = Array.isArray(e) ? e : [e];\n        if (!options.suppressWarning && errorList.length) {\n          Schema.warning('async-validator:', errorList);\n        }\n        if (errorList.length && rule.message !== undefined && rule.message !== null) {\n          errorList = [].concat(rule.message);\n        }\n\n        // Fill error info\n        let filledErrors = errorList.map(complementError(rule, source));\n        if (options.first && filledErrors.length) {\n          errorFields[rule.field] = 1;\n          return doIt(filledErrors);\n        }\n        if (!deep) {\n          doIt(filledErrors);\n        } else {\n          // if rule is required but the target object\n          // does not exist fail at the rule level and don't\n          // go deeper\n          if (rule.required && !data.value) {\n            if (rule.message !== undefined) {\n              filledErrors = [].concat(rule.message).map(complementError(rule, source));\n            } else if (options.error) {\n              filledErrors = [options.error(rule, format(options.messages.required, rule.field))];\n            }\n            return doIt(filledErrors);\n          }\n          let fieldsSchema = {};\n          if (rule.defaultField) {\n            Object.keys(data.value).map(key => {\n              fieldsSchema[key] = rule.defaultField;\n            });\n          }\n          fieldsSchema = {\n            ...fieldsSchema,\n            ...data.rule.fields\n          };\n          const paredFieldsSchema = {};\n          Object.keys(fieldsSchema).forEach(field => {\n            const fieldSchema = fieldsSchema[field];\n            const fieldSchemaList = Array.isArray(fieldSchema) ? fieldSchema : [fieldSchema];\n            paredFieldsSchema[field] = fieldSchemaList.map(addFullField.bind(null, field));\n          });\n          const schema = new Schema(paredFieldsSchema);\n          schema.messages(options.messages);\n          if (data.rule.options) {\n            data.rule.options.messages = options.messages;\n            data.rule.options.error = options.error;\n          }\n          schema.validate(data.value, data.rule.options || options, errs => {\n            const finalErrors = [];\n            if (filledErrors && filledErrors.length) {\n              finalErrors.push(...filledErrors);\n            }\n            if (errs && errs.length) {\n              finalErrors.push(...errs);\n            }\n            doIt(finalErrors.length ? finalErrors : null);\n          });\n        }\n      }\n      let res;\n      if (rule.asyncValidator) {\n        res = rule.asyncValidator(rule, data.value, cb, data.source, options);\n      } else if (rule.validator) {\n        try {\n          res = rule.validator(rule, data.value, cb, data.source, options);\n        } catch (error) {\n          console.error?.(error);\n          // rethrow to report error\n          if (!options.suppressValidatorError) {\n            setTimeout(() => {\n              throw error;\n            }, 0);\n          }\n          cb(error.message);\n        }\n        if (res === true) {\n          cb();\n        } else if (res === false) {\n          cb(typeof rule.message === 'function' ? rule.message(rule.fullField || rule.field) : rule.message || `${rule.fullField || rule.field} fails`);\n        } else if (res instanceof Array) {\n          cb(res);\n        } else if (res instanceof Error) {\n          cb(res.message);\n        }\n      }\n      if (res && res.then) {\n        res.then(() => cb(), e => cb(e));\n      }\n    }, results => {\n      complete(results);\n    }, source);\n  }\n  getType(rule) {\n    if (rule.type === undefined && rule.pattern instanceof RegExp) {\n      rule.type = 'pattern';\n    }\n    if (typeof rule.validator !== 'function' && rule.type && !validators.hasOwnProperty(rule.type)) {\n      throw new Error(format('Unknown rule type %s', rule.type));\n    }\n    return rule.type || 'string';\n  }\n  getValidationMethod(rule) {\n    if (typeof rule.validator === 'function') {\n      return rule.validator;\n    }\n    const keys = Object.keys(rule);\n    const messageIndex = keys.indexOf('message');\n    if (messageIndex !== -1) {\n      keys.splice(messageIndex, 1);\n    }\n    if (keys.length === 1 && keys[0] === 'required') {\n      return validators.required;\n    }\n    return validators[this.getType(rule)] || undefined;\n  }\n}\nexport default Schema;","const typeTemplate = \"'${name}' is not a valid ${type}\";\nexport const defaultValidateMessages = {\n  default: \"Validation error on field '${name}'\",\n  required: \"'${name}' is required\",\n  enum: \"'${name}' must be one of [${enum}]\",\n  whitespace: \"'${name}' cannot be empty\",\n  date: {\n    format: \"'${name}' is invalid for format date\",\n    parse: \"'${name}' could not be parsed as date\",\n    invalid: \"'${name}' is invalid date\"\n  },\n  types: {\n    string: typeTemplate,\n    method: typeTemplate,\n    array: typeTemplate,\n    object: typeTemplate,\n    number: typeTemplate,\n    date: typeTemplate,\n    boolean: typeTemplate,\n    integer: typeTemplate,\n    float: typeTemplate,\n    regexp: typeTemplate,\n    email: typeTemplate,\n    tel: typeTemplate,\n    url: typeTemplate,\n    hex: typeTemplate\n  },\n  string: {\n    len: \"'${name}' must be exactly ${len} characters\",\n    min: \"'${name}' must be at least ${min} characters\",\n    max: \"'${name}' cannot be longer than ${max} characters\",\n    range: \"'${name}' must be between ${min} and ${max} characters\"\n  },\n  number: {\n    len: \"'${name}' must equal ${len}\",\n    min: \"'${name}' cannot be less than ${min}\",\n    max: \"'${name}' cannot be greater than ${max}\",\n    range: \"'${name}' must be between ${min} and ${max}\"\n  },\n  array: {\n    len: \"'${name}' must be exactly ${len} in length\",\n    min: \"'${name}' cannot be less than ${min} in length\",\n    max: \"'${name}' cannot be greater than ${max} in length\",\n    range: \"'${name}' must be between ${min} and ${max} in length\"\n  },\n  pattern: {\n    mismatch: \"'${name}' does not match pattern ${pattern}\"\n  }\n};","import RawAsyncValidator from '@rc-component/async-validator';\nimport * as React from 'react';\nimport { merge, warning } from '@rc-component/util';\nimport { defaultValidateMessages } from \"./messages\";\n\n// Remove incorrect original ts define\nconst AsyncValidator = RawAsyncValidator;\n\n/**\n * Replace with template.\n *   `I'm ${name}` + { name: 'bamboo' } = I'm bamboo\n */\nfunction replaceMessage(template, kv) {\n  return template.replace(/\\\\?\\$\\{\\w+\\}/g, str => {\n    if (str.startsWith('\\\\')) {\n      return str.slice(1);\n    }\n    const key = str.slice(2, -1);\n    return kv[key];\n  });\n}\nconst CODE_LOGIC_ERROR = 'CODE_LOGIC_ERROR';\nasync function validateRule(name, value, rule, options, messageVariables) {\n  const cloneRule = {\n    ...rule\n  };\n\n  // Bug of `async-validator`\n  // https://github.com/react-component/field-form/issues/316\n  // https://github.com/react-component/field-form/issues/313\n  delete cloneRule.ruleIndex;\n\n  // https://github.com/ant-design/ant-design/issues/40497#issuecomment-1422282378\n  AsyncValidator.warning = () => void 0;\n  if (cloneRule.validator) {\n    const originValidator = cloneRule.validator;\n    cloneRule.validator = (...args) => {\n      try {\n        return originValidator(...args);\n      } catch (error) {\n        console.error(error);\n        return Promise.reject(CODE_LOGIC_ERROR);\n      }\n    };\n  }\n\n  // We should special handle array validate\n  let subRuleField = null;\n  if (cloneRule && cloneRule.type === 'array' && cloneRule.defaultField) {\n    subRuleField = cloneRule.defaultField;\n    delete cloneRule.defaultField;\n  }\n  const validator = new AsyncValidator({\n    [name]: [cloneRule]\n  });\n  const messages = merge(defaultValidateMessages, options.validateMessages);\n  validator.messages(messages);\n  let result = [];\n  try {\n    await Promise.resolve(validator.validate({\n      [name]: value\n    }, {\n      ...options\n    }));\n  } catch (errObj) {\n    if (errObj.errors) {\n      result = errObj.errors.map(({\n        message\n      }, index) => {\n        const mergedMessage = message === CODE_LOGIC_ERROR ? messages.default : message;\n        return /*#__PURE__*/React.isValidElement(mergedMessage) ?\n        /*#__PURE__*/\n        // Wrap ReactNode with `key`\n        React.cloneElement(mergedMessage, {\n          key: `error_${index}`\n        }) : mergedMessage;\n      });\n    }\n  }\n  if (!result.length && subRuleField && Array.isArray(value) && value.length > 0) {\n    const subResults = await Promise.all(value.map((subValue, i) => validateRule(`${name}.${i}`, subValue, subRuleField, options, messageVariables)));\n    return subResults.reduce((prev, errors) => [...prev, ...errors], []);\n  }\n\n  // Replace message with variables\n  const kv = {\n    ...rule,\n    name,\n    enum: (rule.enum || []).join(', '),\n    ...messageVariables\n  };\n  const fillVariableResult = result.map(error => {\n    if (typeof error === 'string') {\n      return replaceMessage(error, kv);\n    }\n    return error;\n  });\n  return fillVariableResult;\n}\n\n/**\n * We use `async-validator` to validate the value.\n * But only check one value in a time to avoid namePath validate issue.\n */\nexport function validateRules(namePath, value, rules, options, validateFirst, messageVariables) {\n  const name = namePath.join('.');\n\n  // Fill rule with context\n  const filledRules = rules.map((currentRule, ruleIndex) => {\n    const originValidatorFunc = currentRule.validator;\n    const cloneRule = {\n      ...currentRule,\n      ruleIndex\n    };\n\n    // Replace validator if needed\n    if (originValidatorFunc) {\n      cloneRule.validator = (rule, val, callback) => {\n        let hasPromise = false;\n\n        // Wrap callback only accept when promise not provided\n        const wrappedCallback = (...args) => {\n          // Wait a tick to make sure return type is a promise\n          Promise.resolve().then(() => {\n            warning(!hasPromise, 'Your validator function has already return a promise. `callback` will be ignored.');\n            if (!hasPromise) {\n              callback(...args);\n            }\n          });\n        };\n\n        // Get promise\n        const promise = originValidatorFunc(rule, val, wrappedCallback);\n        hasPromise = promise && typeof promise.then === 'function' && typeof promise.catch === 'function';\n\n        /**\n         * 1. Use promise as the first priority.\n         * 2. If promise not exist, use callback with warning instead\n         */\n        warning(hasPromise, '`callback` is deprecated. Please return a promise instead.');\n        if (hasPromise) {\n          promise.then(() => {\n            callback();\n          }).catch(err => {\n            callback(err || ' ');\n          });\n        }\n      };\n    }\n    return cloneRule;\n  }).sort(({\n    warningOnly: w1,\n    ruleIndex: i1\n  }, {\n    warningOnly: w2,\n    ruleIndex: i2\n  }) => {\n    if (!!w1 === !!w2) {\n      // Let keep origin order\n      return i1 - i2;\n    }\n    if (w1) {\n      return 1;\n    }\n    return -1;\n  });\n\n  // Do validate rules\n  let summaryPromise;\n  if (validateFirst === true) {\n    // >>>>> Validate by serialization\n    summaryPromise = new Promise(async (resolve, reject) => {\n      /* eslint-disable no-await-in-loop */\n      for (let i = 0; i < filledRules.length; i += 1) {\n        const rule = filledRules[i];\n        const errors = await validateRule(name, value, rule, options, messageVariables);\n        if (errors.length) {\n          reject([{\n            errors,\n            rule\n          }]);\n          return;\n        }\n      }\n      /* eslint-enable */\n\n      resolve([]);\n    });\n  } else {\n    // >>>>> Validate by parallel\n    const rulePromises = filledRules.map(rule => validateRule(name, value, rule, options, messageVariables).then(errors => ({\n      errors,\n      rule\n    })));\n    summaryPromise = (validateFirst ? finishOnFirstFailed(rulePromises) : finishOnAllFailed(rulePromises)).then(errors => {\n      // Always change to rejection for Field to catch\n      return Promise.reject(errors);\n    });\n  }\n\n  // Internal catch error to avoid console error log.\n  summaryPromise.catch(e => e);\n  return summaryPromise;\n}\nasync function finishOnAllFailed(rulePromises) {\n  return Promise.all(rulePromises).then(errorsList => {\n    const errors = [].concat(...errorsList);\n    return errors;\n  });\n}\nasync function finishOnFirstFailed(rulePromises) {\n  let count = 0;\n  return new Promise(resolve => {\n    rulePromises.forEach(promise => {\n      promise.then(ruleError => {\n        if (ruleError.errors.length) {\n          resolve([ruleError]);\n        }\n        count += 1;\n        if (count === rulePromises.length) {\n          resolve([]);\n        }\n      });\n    });\n  });\n}","import { get as getValue, set as setValue } from '@rc-component/util';\nimport { toArray } from \"./typeUtil\";\nexport { getValue, setValue };\n\n/**\n * Convert name to internal supported format.\n * This function should keep since we still thinking if need support like `a.b.c` format.\n * 'a' => ['a']\n * 123 => [123]\n * ['a', 123] => ['a', 123]\n */\nexport function getNamePath(path) {\n  return toArray(path);\n}\n\n/**\n * Create a new store object that contains only the values referenced by\n * the provided list of name paths.\n */\nexport function cloneByNamePathList(store, namePathList) {\n  let newStore = {};\n  namePathList.forEach(namePath => {\n    const value = getValue(store, namePath);\n    newStore = setValue(newStore, namePath, value);\n  });\n  return newStore;\n}\n\n/**\n * Check if `namePathList` includes `namePath`.\n * @param namePathList A list of `InternalNamePath[]`\n * @param namePath Compare `InternalNamePath`\n * @param partialMatch True will make `[a, b]` match `[a, b, c]`\n */\nexport function containsNamePath(namePathList, namePath, partialMatch = false) {\n  return namePathList && namePathList.some(path => matchNamePath(namePath, path, partialMatch));\n}\n\n/**\n * Check if `namePath` is super set or equal of `subNamePath`.\n * @param namePath A list of `InternalNamePath[]`\n * @param subNamePath Compare `InternalNamePath`\n * @param partialMatch Default false. True will make `[a, b]` match `[a, b, c]`\n */\nexport function matchNamePath(namePath, subNamePath, partialMatch = false) {\n  if (!namePath || !subNamePath) {\n    return false;\n  }\n  if (!partialMatch && namePath.length !== subNamePath.length) {\n    return false;\n  }\n  return subNamePath.every((nameUnit, i) => namePath[i] === nameUnit);\n}\n\n// Like `shallowEqual`, but we not check the data which may cause re-render\n\nexport function isSimilar(source, target) {\n  if (source === target) {\n    return true;\n  }\n  if (!source && target || source && !target) {\n    return false;\n  }\n  if (!source || !target || typeof source !== 'object' || typeof target !== 'object') {\n    return false;\n  }\n  const sourceKeys = Object.keys(source);\n  const targetKeys = Object.keys(target);\n  const keys = new Set([...sourceKeys, ...targetKeys]);\n  return [...keys].every(key => {\n    const sourceValue = source[key];\n    const targetValue = target[key];\n    if (typeof sourceValue === 'function' && typeof targetValue === 'function') {\n      return true;\n    }\n    return sourceValue === targetValue;\n  });\n}\nexport function defaultGetValueFromEvent(valuePropName, ...args) {\n  const event = args[0];\n  if (event && event.target && typeof event.target === 'object' && valuePropName in event.target) {\n    return event.target[valuePropName];\n  }\n  return event;\n}\n\n/**\n * Moves an array item from one position in an array to another.\n *\n * Note: This is a pure function so a new array will be returned, instead\n * of altering the array argument.\n *\n * @param array         Array in which to move an item.         (required)\n * @param moveIndex     The index of the item to move.          (required)\n * @param toIndex       The index to move item at moveIndex to. (required)\n */\nexport function move(array, moveIndex, toIndex) {\n  const {\n    length\n  } = array;\n  if (moveIndex < 0 || moveIndex >= length || toIndex < 0 || toIndex >= length) {\n    return array;\n  }\n  const item = array[moveIndex];\n  const diff = moveIndex - toIndex;\n  if (diff > 0) {\n    // move left\n    return [...array.slice(0, toIndex), item, ...array.slice(toIndex, moveIndex), ...array.slice(moveIndex + 1, length)];\n  }\n  if (diff < 0) {\n    // move right\n    return [...array.slice(0, moveIndex), ...array.slice(moveIndex + 1, toIndex + 1), item, ...array.slice(toIndex + 1, length)];\n  }\n  return array;\n}","import { matchNamePath } from \"../utils/valueUtil\";\n/**\n * Call action with delay in macro task.\n */\nexport const macroTask = fn => {\n  const channel = new MessageChannel();\n  channel.port1.onmessage = fn;\n  channel.port2.postMessage(null);\n};\nexport default class WatcherCenter {\n  namePathList = [];\n  taskId = 0;\n  watcherList = new Set();\n  form;\n  constructor(form) {\n    this.form = form;\n  }\n  register(callback) {\n    this.watcherList.add(callback);\n    return () => {\n      this.watcherList.delete(callback);\n    };\n  }\n  notify(namePath) {\n    // Insert with deduplication\n    namePath.forEach(path => {\n      if (this.namePathList.every(exist => !matchNamePath(exist, path))) {\n        this.namePathList.push(path);\n      }\n    });\n    this.doBatch();\n  }\n  doBatch() {\n    this.taskId += 1;\n    const currentId = this.taskId;\n    macroTask(() => {\n      if (currentId === this.taskId && this.watcherList.size) {\n        const formInst = this.form.getForm();\n        const values = formInst.getFieldsValue();\n        const allValues = formInst.getFieldsValue(true);\n        this.watcherList.forEach(callback => {\n          callback(values, allValues, this.namePathList);\n        });\n        this.namePathList = [];\n      }\n    });\n  }\n}","import { macroTask } from \"../hooks/useNotifyWatch\";\nimport { raf } from '@rc-component/util';\nexport default async function delayFrame() {\n  return new Promise(resolve => {\n    macroTask(() => {\n      raf(() => {\n        resolve();\n      });\n    });\n  });\n}","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport { isEqual, toArray as toChildrenArray, warning } from '@rc-component/util';\nimport * as React from 'react';\nimport FieldContext, { HOOK_MARK } from \"./FieldContext\";\nimport ListContext from \"./ListContext\";\nimport { toArray } from \"./utils/typeUtil\";\nimport { validateRules } from \"./utils/validateUtil\";\nimport { containsNamePath, defaultGetValueFromEvent, getNamePath, getValue } from \"./utils/valueUtil\";\nimport delayFrame from \"./utils/delayUtil\";\nconst EMPTY_ERRORS = [];\nconst EMPTY_WARNINGS = [];\nfunction requireUpdate(shouldUpdate, prev, next, prevValue, nextValue, info) {\n  if (typeof shouldUpdate === 'function') {\n    return shouldUpdate(prev, next, 'source' in info ? {\n      source: info.source\n    } : {});\n  }\n  return prevValue !== nextValue;\n}\n\n// eslint-disable-next-line @typescript-eslint/consistent-indexed-object-style\n\n// We use Class instead of Hooks here since it will cost much code by using Hooks.\nclass Field extends React.PureComponent {\n  static contextType = FieldContext;\n  state = {\n    resetCount: 0\n  };\n  cancelRegisterFunc = null;\n  mounted = false;\n\n  /**\n   * Follow state should not management in State since it will async update by React.\n   * This makes first render of form can not get correct state value.\n   */\n  touched = false;\n\n  /**\n   * Mark when touched & validated. Currently only used for `dependencies`.\n   * Note that we do not think field with `initialValue` is dirty\n   * but this will be by `isFieldDirty` func.\n   */\n  dirty = false;\n  validatePromise;\n  prevValidating;\n  errors = EMPTY_ERRORS;\n  warnings = EMPTY_WARNINGS;\n\n  // ============================== Subscriptions ==============================\n  constructor(props) {\n    super(props);\n\n    // Register on init\n    if (props.fieldContext) {\n      const {\n        getInternalHooks\n      } = props.fieldContext;\n      const {\n        initEntityValue\n      } = getInternalHooks(HOOK_MARK);\n      initEntityValue(this);\n    }\n  }\n  componentDidMount() {\n    const {\n      shouldUpdate,\n      fieldContext\n    } = this.props;\n    this.mounted = true;\n\n    // Register on init\n    if (fieldContext) {\n      const {\n        getInternalHooks\n      } = fieldContext;\n      const {\n        registerField\n      } = getInternalHooks(HOOK_MARK);\n      this.cancelRegisterFunc = registerField(this);\n    }\n\n    // One more render for component in case fields not ready\n    if (shouldUpdate === true) {\n      this.reRender();\n    }\n  }\n  componentWillUnmount() {\n    this.cancelRegister();\n    this.triggerMetaEvent(true);\n    this.mounted = false;\n  }\n  cancelRegister = () => {\n    const {\n      preserve,\n      isListField,\n      name\n    } = this.props;\n    if (this.cancelRegisterFunc) {\n      this.cancelRegisterFunc(isListField, preserve, getNamePath(name));\n    }\n    this.cancelRegisterFunc = null;\n  };\n\n  // ================================== Utils ==================================\n  getNamePath = () => {\n    const {\n      name,\n      fieldContext\n    } = this.props;\n    const {\n      prefixName = []\n    } = fieldContext;\n    return name !== undefined ? [...prefixName, ...name] : [];\n  };\n  getRules = () => {\n    const {\n      rules = [],\n      fieldContext\n    } = this.props;\n    return rules.map(rule => {\n      if (typeof rule === 'function') {\n        return rule(fieldContext);\n      }\n      return rule;\n    });\n  };\n  reRender() {\n    if (!this.mounted) return;\n    this.forceUpdate();\n  }\n  refresh = () => {\n    if (!this.mounted) return;\n\n    /**\n     * Clean up current node.\n     */\n    this.setState(({\n      resetCount\n    }) => ({\n      resetCount: resetCount + 1\n    }));\n  };\n\n  // Event should only trigger when meta changed\n  metaCache = null;\n  triggerMetaEvent = destroy => {\n    const {\n      onMetaChange\n    } = this.props;\n    if (onMetaChange) {\n      const meta = {\n        ...this.getMeta(),\n        destroy\n      };\n      if (!isEqual(this.metaCache, meta)) {\n        onMetaChange(meta);\n      }\n      this.metaCache = meta;\n    } else {\n      this.metaCache = null;\n    }\n  };\n\n  // ========================= Field Entity Interfaces =========================\n  // Trigger by store update. Check if need update the component\n  onStoreChange = (prevStore, namePathList, info) => {\n    const {\n      shouldUpdate,\n      dependencies = [],\n      onReset\n    } = this.props;\n    const {\n      store\n    } = info;\n    const namePath = this.getNamePath();\n    const prevValue = this.getValue(prevStore);\n    const curValue = this.getValue(store);\n    const namePathMatch = namePathList && containsNamePath(namePathList, namePath);\n\n    // `setFieldsValue` is a quick access to update related status\n    if (info.type === 'valueUpdate' && info.source === 'external' && !isEqual(prevValue, curValue)) {\n      this.touched = true;\n      this.dirty = true;\n      this.validatePromise = null;\n      this.errors = EMPTY_ERRORS;\n      this.warnings = EMPTY_WARNINGS;\n      this.triggerMetaEvent();\n    }\n    switch (info.type) {\n      case 'reset':\n        if (!namePathList || namePathMatch) {\n          // Clean up state\n          this.touched = false;\n          this.dirty = false;\n          this.validatePromise = undefined;\n          this.errors = EMPTY_ERRORS;\n          this.warnings = EMPTY_WARNINGS;\n          this.triggerMetaEvent();\n          onReset?.();\n          this.refresh();\n          return;\n        }\n        break;\n\n      /**\n       * In case field with `preserve = false` nest deps like:\n       * - A = 1 => show B\n       * - B = 1 => show C\n       * - Reset A, need clean B, C\n       */\n      case 'remove':\n        {\n          if (shouldUpdate && requireUpdate(shouldUpdate, prevStore, store, prevValue, curValue, info)) {\n            this.reRender();\n            return;\n          }\n          break;\n        }\n      case 'setField':\n        {\n          const {\n            data\n          } = info;\n          if (namePathMatch) {\n            if ('touched' in data) {\n              this.touched = data.touched;\n            }\n            if ('validating' in data && !('originRCField' in data)) {\n              this.validatePromise = data.validating ? Promise.resolve([]) : null;\n            }\n            if ('errors' in data) {\n              this.errors = data.errors || EMPTY_ERRORS;\n            }\n            if ('warnings' in data) {\n              this.warnings = data.warnings || EMPTY_WARNINGS;\n            }\n            this.dirty = true;\n            this.triggerMetaEvent();\n            this.reRender();\n            return;\n          } else if ('value' in data && containsNamePath(namePathList, namePath, true)) {\n            // Contains path with value should also check\n            this.reRender();\n            return;\n          }\n\n          // Handle update by `setField` with `shouldUpdate`\n          if (shouldUpdate && !namePath.length && requireUpdate(shouldUpdate, prevStore, store, prevValue, curValue, info)) {\n            this.reRender();\n            return;\n          }\n          break;\n        }\n      case 'dependenciesUpdate':\n        {\n          /**\n           * Trigger when marked `dependencies` updated. Related fields will all update\n           */\n          const dependencyList = dependencies.map(getNamePath);\n          // No need for `namePathMath` check and `shouldUpdate` check, since `valueUpdate` will be\n          // emitted earlier and they will work there\n          // If set it may cause unnecessary twice rerendering\n          if (dependencyList.some(dependency => containsNamePath(info.relatedFields, dependency))) {\n            this.reRender();\n            return;\n          }\n          break;\n        }\n      default:\n        // 1. If `namePath` exists in `namePathList`, means it's related value and should update\n        //      For example <List name=\"list\"><Field name={['list', 0]}></List>\n        //      If `namePathList` is [['list']] (List value update), Field should be updated\n        //      If `namePathList` is [['list', 0]] (Field value update), List shouldn't be updated\n        // 2.\n        //   2.1 If `dependencies` is set, `name` is not set and `shouldUpdate` is not set,\n        //       don't use `shouldUpdate`. `dependencies` is view as a shortcut if `shouldUpdate`\n        //       is not provided\n        //   2.2 If `shouldUpdate` provided, use customize logic to update the field\n        //       else to check if value changed\n        if (namePathMatch || (!dependencies.length || namePath.length || shouldUpdate) && requireUpdate(shouldUpdate, prevStore, store, prevValue, curValue, info)) {\n          this.reRender();\n          return;\n        }\n        break;\n    }\n    if (shouldUpdate === true) {\n      this.reRender();\n    }\n  };\n  validateRules = options => {\n    // We should fixed namePath & value to avoid developer change then by form function\n    const namePath = this.getNamePath();\n    const currentValue = this.getValue();\n    const {\n      triggerName,\n      validateOnly = false,\n      delayFrame: showDelayFrame\n    } = options || {};\n\n    // Force change to async to avoid rule OOD under renderProps field\n    const rootPromise = Promise.resolve().then(async () => {\n      if (!this.mounted) {\n        return [];\n      }\n      const {\n        validateFirst = false,\n        messageVariables,\n        validateDebounce\n      } = this.props;\n\n      // Should wait for the frame render,\n      // since developer may `useWatch` value in the rules.\n      if (showDelayFrame) {\n        await delayFrame();\n      }\n\n      // Start validate\n      let filteredRules = this.getRules();\n      if (triggerName) {\n        filteredRules = filteredRules.filter(rule => rule).filter(rule => {\n          const {\n            validateTrigger\n          } = rule;\n          if (!validateTrigger) {\n            return true;\n          }\n          const triggerList = toArray(validateTrigger);\n          return triggerList.includes(triggerName);\n        });\n      }\n\n      // Wait for debounce. Skip if no `triggerName` since its from `validateFields / submit`\n      if (validateDebounce && triggerName) {\n        await new Promise(resolve => {\n          setTimeout(resolve, validateDebounce);\n        });\n\n        // Skip since out of date\n        if (this.validatePromise !== rootPromise) {\n          return [];\n        }\n      }\n      const promise = validateRules(namePath, currentValue, filteredRules, options, validateFirst, messageVariables);\n      promise.catch(e => e).then((ruleErrors = EMPTY_ERRORS) => {\n        if (this.validatePromise === rootPromise) {\n          this.validatePromise = null;\n\n          // Get errors & warnings\n          const nextErrors = [];\n          const nextWarnings = [];\n          ruleErrors.forEach?.(({\n            rule: {\n              warningOnly\n            },\n            errors = EMPTY_ERRORS\n          }) => {\n            if (warningOnly) {\n              nextWarnings.push(...errors);\n            } else {\n              nextErrors.push(...errors);\n            }\n          });\n          this.errors = nextErrors;\n          this.warnings = nextWarnings;\n          this.triggerMetaEvent();\n          this.reRender();\n        }\n      });\n      return promise;\n    });\n    if (validateOnly) {\n      return rootPromise;\n    }\n    this.validatePromise = rootPromise;\n    this.dirty = true;\n    this.errors = EMPTY_ERRORS;\n    this.warnings = EMPTY_WARNINGS;\n    this.triggerMetaEvent();\n\n    // Force trigger re-render since we need sync renderProps with new meta\n    this.reRender();\n    return rootPromise;\n  };\n  isFieldValidating = () => !!this.validatePromise;\n  isFieldTouched = () => this.touched;\n  isFieldDirty = () => {\n    // Touched or validate or has initialValue\n    if (this.dirty || this.props.initialValue !== undefined) {\n      return true;\n    }\n\n    // Form set initialValue\n    const {\n      fieldContext\n    } = this.props;\n    const {\n      getInitialValue\n    } = fieldContext.getInternalHooks(HOOK_MARK);\n    if (getInitialValue(this.getNamePath()) !== undefined) {\n      return true;\n    }\n    return false;\n  };\n  getErrors = () => this.errors;\n  getWarnings = () => this.warnings;\n  isListField = () => this.props.isListField;\n  isList = () => this.props.isList;\n  isPreserve = () => this.props.preserve;\n\n  // ============================= Child Component =============================\n  getMeta = () => {\n    // Make error & validating in cache to save perf\n    this.prevValidating = this.isFieldValidating();\n    const meta = {\n      touched: this.isFieldTouched(),\n      validating: this.prevValidating,\n      errors: this.errors,\n      warnings: this.warnings,\n      name: this.getNamePath(),\n      validated: this.validatePromise === null\n    };\n    return meta;\n  };\n\n  // Only return validate child node. If invalidate, will do nothing about field.\n  getOnlyChild = children => {\n    // Support render props\n    if (typeof children === 'function') {\n      const meta = this.getMeta();\n      return {\n        ...this.getOnlyChild(children(this.getControlled(), meta, this.props.fieldContext)),\n        isFunction: true\n      };\n    }\n\n    // Filed element only\n    const childList = toChildrenArray(children);\n    if (childList.length !== 1 || ! /*#__PURE__*/React.isValidElement(childList[0])) {\n      return {\n        child: childList,\n        isFunction: false\n      };\n    }\n    return {\n      child: childList[0],\n      isFunction: false\n    };\n  };\n\n  // ============================== Field Control ==============================\n  getValue = store => {\n    const {\n      getFieldsValue\n    } = this.props.fieldContext;\n    const namePath = this.getNamePath();\n    return getValue(store || getFieldsValue(true), namePath);\n  };\n  getControlled = (childProps = {}) => {\n    const {\n      name,\n      trigger = 'onChange',\n      validateTrigger,\n      getValueFromEvent,\n      normalize,\n      valuePropName = 'value',\n      getValueProps,\n      fieldContext\n    } = this.props;\n    const mergedValidateTrigger = validateTrigger !== undefined ? validateTrigger : fieldContext.validateTrigger;\n    const namePath = this.getNamePath();\n    const {\n      getInternalHooks,\n      getFieldsValue\n    } = fieldContext;\n    const {\n      dispatch\n    } = getInternalHooks(HOOK_MARK);\n    const value = this.getValue();\n    const mergedGetValueProps = getValueProps || (val => ({\n      [valuePropName]: val\n    }));\n    const originTriggerFunc = childProps[trigger];\n    const valueProps = name !== undefined ? mergedGetValueProps(value) : {};\n\n    // warning when prop value is function\n    if (process.env.NODE_ENV !== 'production' && valueProps) {\n      Object.keys(valueProps).forEach(key => {\n        warning(typeof valueProps[key] !== 'function', `It's not recommended to generate dynamic function prop by \\`getValueProps\\`. Please pass it to child component directly (prop: ${key})`);\n      });\n    }\n    const control = {\n      ...childProps,\n      ...valueProps\n    };\n\n    // Add trigger\n    control[trigger] = (...args) => {\n      // Mark as touched\n      this.touched = true;\n      this.dirty = true;\n      this.triggerMetaEvent();\n      const curValue = this.getValue();\n      let newValue;\n      if (getValueFromEvent) {\n        newValue = getValueFromEvent(...args);\n      } else {\n        newValue = defaultGetValueFromEvent(valuePropName, ...args);\n      }\n      if (normalize) {\n        newValue = normalize(newValue, curValue, getFieldsValue(true));\n      }\n      if (newValue !== curValue) {\n        dispatch({\n          type: 'updateValue',\n          namePath,\n          value: newValue\n        });\n      }\n      if (originTriggerFunc) {\n        originTriggerFunc(...args);\n      }\n    };\n\n    // Add validateTrigger\n    const validateTriggerList = toArray(mergedValidateTrigger || []);\n    validateTriggerList.forEach(triggerName => {\n      // Wrap additional function of component, so that we can get latest value from store\n      const originTrigger = control[triggerName];\n      control[triggerName] = (...args) => {\n        if (originTrigger) {\n          originTrigger(...args);\n        }\n\n        // Always use latest rules\n        const {\n          rules\n        } = this.props;\n        if (rules && rules.length) {\n          // We dispatch validate to root,\n          // since it will update related data with other field with same name\n          dispatch({\n            type: 'validateField',\n            namePath,\n            triggerName\n          });\n        }\n      };\n    });\n    return control;\n  };\n  render() {\n    const {\n      resetCount\n    } = this.state;\n    const {\n      children\n    } = this.props;\n    const {\n      child,\n      isFunction\n    } = this.getOnlyChild(children);\n\n    // Not need to `cloneElement` since user can handle this in render function self\n    let returnChildNode;\n    if (isFunction) {\n      returnChildNode = child;\n    } else if ( /*#__PURE__*/React.isValidElement(child)) {\n      returnChildNode = /*#__PURE__*/React.cloneElement(child, this.getControlled(child.props));\n    } else {\n      warning(!child, '`children` of Field is not validate ReactElement.');\n      returnChildNode = child;\n    }\n    return /*#__PURE__*/React.createElement(React.Fragment, {\n      key: resetCount\n    }, returnChildNode);\n  }\n}\nfunction WrapperField({\n  name,\n  ...restProps\n}) {\n  const fieldContext = React.useContext(FieldContext);\n  const listContext = React.useContext(ListContext);\n  const namePath = name !== undefined ? getNamePath(name) : undefined;\n  const isMergedListField = restProps.isListField ?? !!listContext;\n  let key = 'keep';\n  if (!isMergedListField) {\n    key = `_${(namePath || []).join('_')}`;\n  }\n\n  // Warning if it's a directly list field.\n  // We can still support multiple level field preserve.\n  if (process.env.NODE_ENV !== 'production' && restProps.preserve === false && isMergedListField && namePath.length <= 1) {\n    warning(false, '`preserve` should not apply on Form.List fields.');\n  }\n  return /*#__PURE__*/React.createElement(Field, _extends({\n    key: key,\n    name: namePath,\n    isListField: isMergedListField\n  }, restProps, {\n    fieldContext: fieldContext\n  }));\n}\nexport default WrapperField;","import * as React from 'react';\nimport { warning } from '@rc-component/util';\nimport FieldContext from \"./FieldContext\";\nimport Field from \"./Field\";\nimport { move, getNamePath } from \"./utils/valueUtil\";\nimport ListContext from \"./ListContext\";\nfunction List({\n  name,\n  initialValue,\n  children,\n  rules,\n  validateTrigger,\n  isListField\n}) {\n  const context = React.useContext(FieldContext);\n  const wrapperListContext = React.useContext(ListContext);\n  const keyRef = React.useRef({\n    keys: [],\n    id: 0\n  });\n  const keyManager = keyRef.current;\n  const prefixName = React.useMemo(() => {\n    const parentPrefixName = getNamePath(context.prefixName) || [];\n    return [...parentPrefixName, ...getNamePath(name)];\n  }, [context.prefixName, name]);\n  const fieldContext = React.useMemo(() => ({\n    ...context,\n    prefixName\n  }), [context, prefixName]);\n\n  // List context\n  const listContext = React.useMemo(() => ({\n    getKey: namePath => {\n      const len = prefixName.length;\n      const pathName = namePath[len];\n      return [keyManager.keys[pathName], namePath.slice(len + 1)];\n    }\n  }), [keyManager, prefixName]);\n\n  // User should not pass `children` as other type.\n  if (typeof children !== 'function') {\n    warning(false, 'Form.List only accepts function as children.');\n    return null;\n  }\n  const shouldUpdate = (prevValue, nextValue, {\n    source\n  }) => {\n    if (source === 'internal') {\n      return false;\n    }\n    return prevValue !== nextValue;\n  };\n  return /*#__PURE__*/React.createElement(ListContext.Provider, {\n    value: listContext\n  }, /*#__PURE__*/React.createElement(FieldContext.Provider, {\n    value: fieldContext\n  }, /*#__PURE__*/React.createElement(Field, {\n    name: [],\n    shouldUpdate: shouldUpdate,\n    rules: rules,\n    validateTrigger: validateTrigger,\n    initialValue: initialValue,\n    isList: true,\n    isListField: isListField ?? !!wrapperListContext\n  }, ({\n    value = [],\n    onChange\n  }, meta) => {\n    const {\n      getFieldValue\n    } = context;\n    const getNewValue = () => {\n      const values = getFieldValue(prefixName || []);\n      return values || [];\n    };\n    /**\n     * Always get latest value in case user update fields by `form` api.\n     */\n    const operations = {\n      add: (defaultValue, index) => {\n        // Mapping keys\n        const newValue = getNewValue();\n        if (index >= 0 && index <= newValue.length) {\n          keyManager.keys = [...keyManager.keys.slice(0, index), keyManager.id, ...keyManager.keys.slice(index)];\n          onChange([...newValue.slice(0, index), defaultValue, ...newValue.slice(index)]);\n        } else {\n          if (process.env.NODE_ENV !== 'production' && (index < 0 || index > newValue.length)) {\n            warning(false, 'The second parameter of the add function should be a valid positive number.');\n          }\n          keyManager.keys = [...keyManager.keys, keyManager.id];\n          onChange([...newValue, defaultValue]);\n        }\n        keyManager.id += 1;\n      },\n      remove: index => {\n        const newValue = getNewValue();\n        const indexSet = new Set(Array.isArray(index) ? index : [index]);\n        if (indexSet.size <= 0) {\n          return;\n        }\n        keyManager.keys = keyManager.keys.filter((_, keysIndex) => !indexSet.has(keysIndex));\n\n        // Trigger store change\n        onChange(newValue.filter((_, valueIndex) => !indexSet.has(valueIndex)));\n      },\n      move(from, to) {\n        if (from === to) {\n          return;\n        }\n        const newValue = getNewValue();\n\n        // Do not handle out of range\n        if (from < 0 || from >= newValue.length || to < 0 || to >= newValue.length) {\n          return;\n        }\n        keyManager.keys = move(keyManager.keys, from, to);\n\n        // Trigger store change\n        onChange(move(newValue, from, to));\n      }\n    };\n    let listValue = value || [];\n    if (!Array.isArray(listValue)) {\n      listValue = [];\n      if (process.env.NODE_ENV !== 'production') {\n        warning(false, `Current value of '${prefixName.join(' > ')}' is not an array type.`);\n      }\n    }\n    return children(listValue.map((__, index) => {\n      let key = keyManager.keys[index];\n      if (key === undefined) {\n        keyManager.keys[index] = keyManager.id;\n        key = keyManager.keys[index];\n        keyManager.id += 1;\n      }\n      return {\n        name: index,\n        key,\n        isListField: true\n      };\n    }), operations, meta);\n  })));\n}\nexport default List;","export function allPromiseFinish(promiseList) {\n  let hasError = false;\n  let count = promiseList.length;\n  const results = [];\n  if (!promiseList.length) {\n    return Promise.resolve([]);\n  }\n  return new Promise((resolve, reject) => {\n    promiseList.forEach((promise, index) => {\n      promise.catch(e => {\n        hasError = true;\n        return e;\n      }).then(result => {\n        count -= 1;\n        results[index] = result;\n        if (count > 0) {\n          return;\n        }\n        if (hasError) {\n          reject(results);\n        }\n        resolve(results);\n      });\n    });\n  });\n}","const SPLIT = '__@field_split__';\n\n/**\n * Convert name path into string to fast the fetch speed of Map.\n */\nfunction normalize(namePath) {\n  return namePath.map(cell => `${typeof cell}:${cell}`)\n  // Magic split\n  .join(SPLIT);\n}\n\n/**\n * NameMap like a `Map` but accepts `string[]` as key.\n */\nclass NameMap {\n  kvs = new Map();\n  set(key, value) {\n    this.kvs.set(normalize(key), value);\n  }\n  get(key) {\n    return this.kvs.get(normalize(key));\n  }\n  getAsPrefix(key) {\n    const normalizedKey = normalize(key);\n    const normalizedPrefix = normalizedKey + SPLIT;\n    const results = [];\n    const current = this.kvs.get(normalizedKey);\n    if (current !== undefined) {\n      results.push(current);\n    }\n    this.kvs.forEach((value, itemNormalizedKey) => {\n      if (itemNormalizedKey.startsWith(normalizedPrefix)) {\n        results.push(value);\n      }\n    });\n    return results;\n  }\n  update(key, updater) {\n    const origin = this.get(key);\n    const next = updater(origin);\n    if (!next) {\n      this.delete(key);\n    } else {\n      this.set(key, next);\n    }\n  }\n  delete(key) {\n    this.kvs.delete(normalize(key));\n  }\n\n  // Since we only use this in test, let simply realize this\n  map(callback) {\n    return [...this.kvs.entries()].map(([key, value]) => {\n      const cells = key.split(SPLIT);\n      return callback({\n        key: cells.map(cell => {\n          const [, type, unit] = cell.match(/^([^:]*):(.*)$/);\n          return type === 'number' ? Number(unit) : unit;\n        }),\n        value\n      });\n    });\n  }\n  toJSON() {\n    const json = {};\n    this.map(({\n      key,\n      value\n    }) => {\n      json[key.join('.')] = value;\n      return null;\n    });\n    return json;\n  }\n}\nexport default NameMap;","import { merge, warning } from '@rc-component/util';\nimport * as React from 'react';\nimport { HOOK_MARK } from \"../FieldContext\";\nimport { allPromiseFinish } from \"../utils/asyncUtil\";\nimport { defaultValidateMessages } from \"../utils/messages\";\nimport NameMap from \"../utils/NameMap\";\nimport { cloneByNamePathList, containsNamePath, getNamePath, getValue, matchNamePath, setValue } from \"../utils/valueUtil\";\nimport WatcherCenter from \"./useNotifyWatch\";\nexport class FormStore {\n  formHooked = false;\n  forceRootUpdate;\n  subscribable = true;\n  store = {};\n  fieldEntities = [];\n  initialValues = {};\n  callbacks = {};\n  validateMessages = null;\n  preserve = null;\n  lastValidatePromise = null;\n  watcherCenter = new WatcherCenter(this);\n  constructor(forceRootUpdate) {\n    this.forceRootUpdate = forceRootUpdate;\n  }\n  getForm = () => ({\n    getFieldValue: this.getFieldValue,\n    getFieldsValue: this.getFieldsValue,\n    getFieldError: this.getFieldError,\n    getFieldWarning: this.getFieldWarning,\n    getFieldsError: this.getFieldsError,\n    isFieldsTouched: this.isFieldsTouched,\n    isFieldTouched: this.isFieldTouched,\n    isFieldValidating: this.isFieldValidating,\n    isFieldsValidating: this.isFieldsValidating,\n    resetFields: this.resetFields,\n    setFields: this.setFields,\n    setFieldValue: this.setFieldValue,\n    setFieldsValue: this.setFieldsValue,\n    validateFields: this.validateFields,\n    submit: this.submit,\n    _init: true,\n    getInternalHooks: this.getInternalHooks\n  });\n\n  // ======================== Internal Hooks ========================\n  getInternalHooks = key => {\n    if (key === HOOK_MARK) {\n      this.formHooked = true;\n      return {\n        dispatch: this.dispatch,\n        initEntityValue: this.initEntityValue,\n        registerField: this.registerField,\n        useSubscribe: this.useSubscribe,\n        setInitialValues: this.setInitialValues,\n        destroyForm: this.destroyForm,\n        setCallbacks: this.setCallbacks,\n        setValidateMessages: this.setValidateMessages,\n        getFields: this.getFields,\n        setPreserve: this.setPreserve,\n        getInitialValue: this.getInitialValue,\n        registerWatch: this.registerWatch\n      };\n    }\n    warning(false, '`getInternalHooks` is internal usage. Should not call directly.');\n    return null;\n  };\n  useSubscribe = subscribable => {\n    this.subscribable = subscribable;\n  };\n\n  /**\n   * Record prev Form unmount fieldEntities which config preserve false.\n   * This need to be refill with initialValues instead of store value.\n   */\n  prevWithoutPreserves = null;\n\n  /**\n   * First time `setInitialValues` should update store with initial value\n   */\n  setInitialValues = (initialValues, init) => {\n    this.initialValues = initialValues || {};\n    if (init) {\n      let nextStore = merge(initialValues, this.store);\n\n      // We will take consider prev form unmount fields.\n      // When the field is not `preserve`, we need fill this with initialValues instead of store.\n      // eslint-disable-next-line array-callback-return\n      this.prevWithoutPreserves?.map(({\n        key: namePath\n      }) => {\n        nextStore = setValue(nextStore, namePath, getValue(initialValues, namePath));\n      });\n      this.prevWithoutPreserves = null;\n      this.updateStore(nextStore);\n    }\n  };\n  destroyForm = clearOnDestroy => {\n    if (clearOnDestroy) {\n      // destroy form reset store\n      this.updateStore({});\n    } else {\n      // Fill preserve fields\n      const prevWithoutPreserves = new NameMap();\n      this.getFieldEntities(true).forEach(entity => {\n        if (!this.isMergedPreserve(entity.isPreserve())) {\n          prevWithoutPreserves.set(entity.getNamePath(), true);\n        }\n      });\n      this.prevWithoutPreserves = prevWithoutPreserves;\n    }\n  };\n  getInitialValue = namePath => {\n    const initValue = getValue(this.initialValues, namePath);\n\n    // Not cloneDeep when without `namePath`\n    return namePath.length ? merge(initValue) : initValue;\n  };\n  setCallbacks = callbacks => {\n    this.callbacks = callbacks;\n  };\n  setValidateMessages = validateMessages => {\n    this.validateMessages = validateMessages;\n  };\n  setPreserve = preserve => {\n    this.preserve = preserve;\n  };\n\n  // ============================= Watch ============================\n  registerWatch = callback => {\n    return this.watcherCenter.register(callback);\n  };\n  notifyWatch = (namePath = []) => {\n    this.watcherCenter.notify(namePath);\n  };\n\n  // ========================== Dev Warning =========================\n  timeoutId = null;\n  warningUnhooked = () => {\n    if (process.env.NODE_ENV !== 'production' && !this.timeoutId && typeof window !== 'undefined') {\n      this.timeoutId = setTimeout(() => {\n        this.timeoutId = null;\n        if (!this.formHooked) {\n          warning(false, 'Instance created by `useForm` is not connected to any Form element. Forget to pass `form` prop?');\n        }\n      });\n    }\n  };\n\n  // ============================ Store =============================\n  updateStore = nextStore => {\n    this.store = nextStore;\n  };\n\n  // ============================ Fields ============================\n  /**\n   * Get registered field entities.\n   * @param pure Only return field which has a `name`. Default: false\n   */\n  getFieldEntities = (pure = false) => {\n    if (!pure) {\n      return this.fieldEntities;\n    }\n    return this.fieldEntities.filter(field => field.getNamePath().length);\n  };\n\n  /**\n   * Get a map of registered field entities with their name path as the key.\n   * @param pure Only include fields which have a `name`. Default: false\n   * @returns A NameMap containing field entities indexed by their name paths\n   */\n  getFieldsMap = (pure = false) => {\n    const cache = new NameMap();\n    this.getFieldEntities(pure).forEach(field => {\n      const namePath = field.getNamePath();\n      cache.set(namePath, field);\n    });\n    return cache;\n  };\n\n  /**\n   * Get field entities based on a list of name paths.\n   * @param nameList - Array of name paths to search for. If not provided, returns all field entities with names.\n   * @param includesSubNamePath - Whether to include fields that have the given name path as a prefix.\n   */\n  getFieldEntitiesForNamePathList = (nameList, includesSubNamePath = false) => {\n    if (!nameList) {\n      return this.getFieldEntities(true);\n    }\n    const cache = this.getFieldsMap(true);\n    if (!includesSubNamePath) {\n      return nameList.map(name => {\n        const namePath = getNamePath(name);\n        return cache.get(namePath) || {\n          INVALIDATE_NAME_PATH: getNamePath(name)\n        };\n      });\n    }\n    return nameList.flatMap(name => {\n      const namePath = getNamePath(name);\n      const fields = cache.getAsPrefix(namePath);\n      if (fields.length) {\n        return fields;\n      }\n      return [{\n        INVALIDATE_NAME_PATH: namePath\n      }];\n    });\n  };\n  getFieldsValue = (nameList, filterFunc) => {\n    this.warningUnhooked();\n\n    // Fill args\n    let mergedNameList;\n    let mergedFilterFunc;\n    if (nameList === true || Array.isArray(nameList)) {\n      mergedNameList = nameList;\n      mergedFilterFunc = filterFunc;\n    } else if (nameList && typeof nameList === 'object') {\n      mergedFilterFunc = nameList.filter;\n    }\n    if (mergedNameList === true && !mergedFilterFunc) {\n      return this.store;\n    }\n    const fieldEntities = this.getFieldEntitiesForNamePathList(Array.isArray(mergedNameList) ? mergedNameList : null, true);\n    const filteredNameList = [];\n    const listNamePaths = [];\n    fieldEntities.forEach(entity => {\n      const namePath = entity.INVALIDATE_NAME_PATH || entity.getNamePath();\n\n      // Ignore when it's a list item and not specific the namePath,\n      // since parent field is already take in count\n      if (entity.isList?.()) {\n        listNamePaths.push(namePath);\n        return;\n      }\n      if (!mergedFilterFunc) {\n        filteredNameList.push(namePath);\n      } else {\n        const meta = 'getMeta' in entity ? entity.getMeta() : null;\n        if (mergedFilterFunc(meta)) {\n          filteredNameList.push(namePath);\n        }\n      }\n    });\n    let mergedValues = cloneByNamePathList(this.store, filteredNameList.map(getNamePath));\n\n    // We need fill the list as [] if Form.List is empty\n    listNamePaths.forEach(namePath => {\n      if (!getValue(mergedValues, namePath)) {\n        mergedValues = setValue(mergedValues, namePath, []);\n      }\n    });\n    return mergedValues;\n  };\n  getFieldValue = name => {\n    this.warningUnhooked();\n    const namePath = getNamePath(name);\n    return getValue(this.store, namePath);\n  };\n  getFieldsError = nameList => {\n    this.warningUnhooked();\n    const fieldEntities = this.getFieldEntitiesForNamePathList(nameList);\n    return fieldEntities.map((entity, index) => {\n      if (entity && !entity.INVALIDATE_NAME_PATH) {\n        return {\n          name: entity.getNamePath(),\n          errors: entity.getErrors(),\n          warnings: entity.getWarnings()\n        };\n      }\n      return {\n        name: getNamePath(nameList[index]),\n        errors: [],\n        warnings: []\n      };\n    });\n  };\n  getFieldError = name => {\n    this.warningUnhooked();\n    const namePath = getNamePath(name);\n    const fieldError = this.getFieldsError([namePath])[0];\n    return fieldError.errors;\n  };\n  getFieldWarning = name => {\n    this.warningUnhooked();\n    const namePath = getNamePath(name);\n    const fieldError = this.getFieldsError([namePath])[0];\n    return fieldError.warnings;\n  };\n  isFieldsTouched = (...args) => {\n    this.warningUnhooked();\n    const [arg0, arg1] = args;\n    let namePathList;\n    let isAllFieldsTouched = false;\n    if (args.length === 0) {\n      namePathList = null;\n    } else if (args.length === 1) {\n      if (Array.isArray(arg0)) {\n        namePathList = arg0.map(getNamePath);\n        isAllFieldsTouched = false;\n      } else {\n        namePathList = null;\n        isAllFieldsTouched = arg0;\n      }\n    } else {\n      namePathList = arg0.map(getNamePath);\n      isAllFieldsTouched = arg1;\n    }\n    const fieldEntities = this.getFieldEntities(true);\n    const isFieldTouched = field => field.isFieldTouched();\n\n    // ===== Will get fully compare when not config namePathList =====\n    if (!namePathList) {\n      return isAllFieldsTouched ? fieldEntities.every(entity => isFieldTouched(entity) || entity.isList()) : fieldEntities.some(isFieldTouched);\n    }\n\n    // Generate a nest tree for validate\n    const map = new NameMap();\n    namePathList.forEach(shortNamePath => {\n      map.set(shortNamePath, []);\n    });\n    fieldEntities.forEach(field => {\n      const fieldNamePath = field.getNamePath();\n\n      // Find matched entity and put into list\n      namePathList.forEach(shortNamePath => {\n        if (shortNamePath.every((nameUnit, i) => fieldNamePath[i] === nameUnit)) {\n          map.update(shortNamePath, list => [...list, field]);\n        }\n      });\n    });\n\n    // Check if NameMap value is touched\n    const isNamePathListTouched = entities => entities.some(isFieldTouched);\n    const namePathListEntities = map.map(({\n      value\n    }) => value);\n    return isAllFieldsTouched ? namePathListEntities.every(isNamePathListTouched) : namePathListEntities.some(isNamePathListTouched);\n  };\n  isFieldTouched = name => {\n    this.warningUnhooked();\n    return this.isFieldsTouched([name]);\n  };\n  isFieldsValidating = nameList => {\n    this.warningUnhooked();\n    const fieldEntities = this.getFieldEntities();\n    if (!nameList) {\n      return fieldEntities.some(testField => testField.isFieldValidating());\n    }\n    const namePathList = nameList.map(getNamePath);\n    return fieldEntities.some(testField => {\n      const fieldNamePath = testField.getNamePath();\n      return containsNamePath(namePathList, fieldNamePath) && testField.isFieldValidating();\n    });\n  };\n  isFieldValidating = name => {\n    this.warningUnhooked();\n    return this.isFieldsValidating([name]);\n  };\n\n  /**\n   * Reset Field with field `initialValue` prop.\n   * Can pass `entities` or `namePathList` or just nothing.\n   */\n  resetWithFieldInitialValue = (info = {}) => {\n    // Create cache\n    const cache = new NameMap();\n    const fieldEntities = this.getFieldEntities(true);\n    fieldEntities.forEach(field => {\n      const {\n        initialValue\n      } = field.props;\n      const namePath = field.getNamePath();\n\n      // Record only if has `initialValue`\n      if (initialValue !== undefined) {\n        const records = cache.get(namePath) || new Set();\n        records.add({\n          entity: field,\n          value: initialValue\n        });\n        cache.set(namePath, records);\n      }\n    });\n\n    // Reset\n    const resetWithFields = entities => {\n      entities.forEach(field => {\n        const {\n          initialValue\n        } = field.props;\n        if (initialValue !== undefined) {\n          const namePath = field.getNamePath();\n          const formInitialValue = this.getInitialValue(namePath);\n          if (formInitialValue !== undefined) {\n            // Warning if conflict with form initialValues and do not modify value\n            warning(false, `Form already set 'initialValues' with path '${namePath.join('.')}'. Field can not overwrite it.`);\n          } else {\n            const records = cache.get(namePath);\n            if (records && records.size > 1) {\n              // Warning if multiple field set `initialValue`and do not modify value\n              warning(false, `Multiple Field with path '${namePath.join('.')}' set 'initialValue'. Can not decide which one to pick.`);\n            } else if (records) {\n              const originValue = this.getFieldValue(namePath);\n              const isListField = field.isListField();\n\n              // Set `initialValue`\n              if (!isListField && (!info.skipExist || originValue === undefined)) {\n                this.updateStore(setValue(this.store, namePath, [...records][0].value));\n              }\n            }\n          }\n        }\n      });\n    };\n    let requiredFieldEntities;\n    if (info.entities) {\n      requiredFieldEntities = info.entities;\n    } else if (info.namePathList) {\n      requiredFieldEntities = [];\n      info.namePathList.forEach(namePath => {\n        const records = cache.get(namePath);\n        if (records) {\n          requiredFieldEntities.push(...[...records].map(r => r.entity));\n        }\n      });\n    } else {\n      requiredFieldEntities = fieldEntities;\n    }\n    resetWithFields(requiredFieldEntities);\n  };\n  resetFields = nameList => {\n    this.warningUnhooked();\n    const prevStore = this.store;\n    if (!nameList) {\n      this.updateStore(merge(this.initialValues));\n      this.resetWithFieldInitialValue();\n      this.notifyObservers(prevStore, null, {\n        type: 'reset'\n      });\n      this.notifyWatch();\n      return;\n    }\n\n    // Reset by `nameList`\n    const namePathList = nameList.map(getNamePath);\n    namePathList.forEach(namePath => {\n      const initialValue = this.getInitialValue(namePath);\n      this.updateStore(setValue(this.store, namePath, initialValue));\n    });\n    this.resetWithFieldInitialValue({\n      namePathList\n    });\n    this.notifyObservers(prevStore, namePathList, {\n      type: 'reset'\n    });\n    this.notifyWatch(namePathList);\n  };\n  setFields = fields => {\n    this.warningUnhooked();\n    const prevStore = this.store;\n    const namePathList = [];\n    fields.forEach(fieldData => {\n      const {\n        name,\n        ...data\n      } = fieldData;\n      const namePath = getNamePath(name);\n      namePathList.push(namePath);\n\n      // Value\n      if ('value' in data) {\n        this.updateStore(setValue(this.store, namePath, data.value));\n      }\n      this.notifyObservers(prevStore, [namePath], {\n        type: 'setField',\n        data: fieldData\n      });\n    });\n    this.notifyWatch(namePathList);\n  };\n  getFields = () => {\n    const entities = this.getFieldEntities(true);\n    const fields = entities.map(field => {\n      const namePath = field.getNamePath();\n      const meta = field.getMeta();\n      const fieldData = {\n        ...meta,\n        name: namePath,\n        value: this.getFieldValue(namePath)\n      };\n      Object.defineProperty(fieldData, 'originRCField', {\n        value: true\n      });\n      return fieldData;\n    });\n    return fields;\n  };\n\n  // =========================== Observer ===========================\n  /**\n   * This only trigger when a field is on constructor to avoid we get initialValue too late\n   */\n  initEntityValue = entity => {\n    const {\n      initialValue\n    } = entity.props;\n    if (initialValue !== undefined) {\n      const namePath = entity.getNamePath();\n      const prevValue = getValue(this.store, namePath);\n      if (prevValue === undefined) {\n        this.updateStore(setValue(this.store, namePath, initialValue));\n      }\n    }\n  };\n  isMergedPreserve = fieldPreserve => {\n    const mergedPreserve = fieldPreserve !== undefined ? fieldPreserve : this.preserve;\n    return mergedPreserve ?? true;\n  };\n  registerField = entity => {\n    this.fieldEntities.push(entity);\n    const namePath = entity.getNamePath();\n    this.notifyWatch([namePath]);\n\n    // Set initial values\n    if (entity.props.initialValue !== undefined) {\n      const prevStore = this.store;\n      this.resetWithFieldInitialValue({\n        entities: [entity],\n        skipExist: true\n      });\n      this.notifyObservers(prevStore, [entity.getNamePath()], {\n        type: 'valueUpdate',\n        source: 'internal'\n      });\n    }\n\n    // un-register field callback\n    return (isListField, preserve, subNamePath = []) => {\n      this.fieldEntities = this.fieldEntities.filter(item => item !== entity);\n\n      // Clean up store value if not preserve\n      if (!this.isMergedPreserve(preserve) && (!isListField || subNamePath.length > 1)) {\n        const defaultValue = isListField ? undefined : this.getInitialValue(namePath);\n        if (namePath.length && this.getFieldValue(namePath) !== defaultValue && this.fieldEntities.every(field =>\n        // Only reset when no namePath exist\n        !matchNamePath(field.getNamePath(), namePath))) {\n          const prevStore = this.store;\n          this.updateStore(setValue(prevStore, namePath, defaultValue, true));\n\n          // Notify that field is unmount\n          this.notifyObservers(prevStore, [namePath], {\n            type: 'remove'\n          });\n\n          // Dependencies update\n          this.triggerDependenciesUpdate(prevStore, namePath);\n        }\n      }\n      this.notifyWatch([namePath]);\n    };\n  };\n  dispatch = action => {\n    switch (action.type) {\n      case 'updateValue':\n        {\n          const {\n            namePath,\n            value\n          } = action;\n          this.updateValue(namePath, value);\n          break;\n        }\n      case 'validateField':\n        {\n          const {\n            namePath,\n            triggerName\n          } = action;\n          this.validateFields([namePath], {\n            triggerName\n          });\n          break;\n        }\n      default:\n      // Currently we don't have other action. Do nothing.\n    }\n  };\n  notifyObservers = (prevStore, namePathList, info) => {\n    if (this.subscribable) {\n      const mergedInfo = {\n        ...info,\n        store: this.getFieldsValue(true)\n      };\n      this.getFieldEntities().forEach(({\n        onStoreChange\n      }) => {\n        onStoreChange(prevStore, namePathList, mergedInfo);\n      });\n    } else {\n      this.forceRootUpdate();\n    }\n  };\n\n  /**\n   * Notify dependencies children with parent update\n   * We need delay to trigger validate in case Field is under render props\n   */\n  triggerDependenciesUpdate = (prevStore, namePath) => {\n    const childrenFields = this.getDependencyChildrenFields(namePath);\n    if (childrenFields.length) {\n      this.validateFields(childrenFields, {\n        // Delay to avoid `useWatch` dynamic adjust rules that deps not get latest one\n        delayFrame: true\n      });\n    }\n    this.notifyObservers(prevStore, childrenFields, {\n      type: 'dependenciesUpdate',\n      relatedFields: [namePath, ...childrenFields]\n    });\n    return childrenFields;\n  };\n  updateValue = (name, value) => {\n    const namePath = getNamePath(name);\n    const prevStore = this.store;\n    this.updateStore(setValue(this.store, namePath, value));\n    this.notifyObservers(prevStore, [namePath], {\n      type: 'valueUpdate',\n      source: 'internal'\n    });\n    this.notifyWatch([namePath]);\n\n    // Dependencies update\n    const childrenFields = this.triggerDependenciesUpdate(prevStore, namePath);\n\n    // trigger callback function\n    const {\n      onValuesChange\n    } = this.callbacks;\n    if (onValuesChange) {\n      const changedValues = cloneByNamePathList(this.store, [namePath]);\n      const allValues = this.getFieldsValue();\n      const mergedAllValues = setValue(allValues, namePath, getValue(changedValues, namePath));\n      onValuesChange(changedValues, mergedAllValues);\n    }\n    this.triggerOnFieldsChange([namePath, ...childrenFields]);\n  };\n\n  // Let all child Field get update.\n  setFieldsValue = store => {\n    this.warningUnhooked();\n    const prevStore = this.store;\n    if (store) {\n      const nextStore = merge(this.store, store);\n      this.updateStore(nextStore);\n    }\n    this.notifyObservers(prevStore, null, {\n      type: 'valueUpdate',\n      source: 'external'\n    });\n    this.notifyWatch();\n  };\n  setFieldValue = (name, value) => {\n    this.setFields([{\n      name,\n      value,\n      errors: [],\n      warnings: [],\n      touched: true\n    }]);\n  };\n  getDependencyChildrenFields = rootNamePath => {\n    const children = new Set();\n    const childrenFields = [];\n    const dependencies2fields = new NameMap();\n\n    /**\n     * Generate maps\n     * Can use cache to save perf if user report performance issue with this\n     */\n    this.getFieldEntities().forEach(field => {\n      const {\n        dependencies\n      } = field.props;\n      (dependencies || []).forEach(dependency => {\n        const dependencyNamePath = getNamePath(dependency);\n        dependencies2fields.update(dependencyNamePath, (fields = new Set()) => {\n          fields.add(field);\n          return fields;\n        });\n      });\n    });\n    const fillChildren = namePath => {\n      const fields = dependencies2fields.get(namePath) || new Set();\n      fields.forEach(field => {\n        if (!children.has(field)) {\n          children.add(field);\n          const fieldNamePath = field.getNamePath();\n          if (field.isFieldDirty() && fieldNamePath.length) {\n            childrenFields.push(fieldNamePath);\n            fillChildren(fieldNamePath);\n          }\n        }\n      });\n    };\n    fillChildren(rootNamePath);\n    return childrenFields;\n  };\n  triggerOnFieldsChange = (namePathList, filedErrors) => {\n    const {\n      onFieldsChange\n    } = this.callbacks;\n    if (onFieldsChange) {\n      const fields = this.getFields();\n\n      /**\n       * Fill errors since `fields` may be replaced by controlled fields\n       */\n      if (filedErrors) {\n        const cache = new NameMap();\n        filedErrors.forEach(({\n          name,\n          errors\n        }) => {\n          cache.set(name, errors);\n        });\n        fields.forEach(field => {\n          // eslint-disable-next-line no-param-reassign\n          field.errors = cache.get(field.name) || field.errors;\n        });\n      }\n      const changedFields = fields.filter(({\n        name: fieldName\n      }) => containsNamePath(namePathList, fieldName));\n      if (changedFields.length) {\n        onFieldsChange(changedFields, fields);\n      }\n    }\n  };\n\n  // =========================== Validate ===========================\n  validateFields = (arg1, arg2) => {\n    this.warningUnhooked();\n    let nameList;\n    let options;\n    if (Array.isArray(arg1) || typeof arg1 === 'string' || typeof arg2 === 'string') {\n      nameList = arg1;\n      options = arg2;\n    } else {\n      options = arg1;\n    }\n    const provideNameList = !!nameList;\n    const namePathList = provideNameList ? nameList.map(getNamePath) : [];\n    // Same namePathList, but does not include Form.List name\n    const finalValueNamePathList = [...namePathList];\n\n    // Collect result in promise list\n    const promiseList = [];\n\n    // We temp save the path which need trigger for `onFieldsChange`\n    const TMP_SPLIT = String(Date.now());\n    const validateNamePathList = new Set();\n    const {\n      recursive,\n      dirty\n    } = options || {};\n    this.getFieldEntities(true).forEach(field => {\n      const fieldNamePath = field.getNamePath();\n\n      // Add field if not provide `nameList`\n      if (!provideNameList) {\n        if (\n        // If is field, pass directly\n        !field.isList() ||\n        // If is list, do not add if already exist sub field in the namePathList\n        !namePathList.some(name => matchNamePath(name, fieldNamePath, true))) {\n          finalValueNamePathList.push(fieldNamePath);\n        }\n        namePathList.push(fieldNamePath);\n      }\n\n      // Skip if without rule\n      if (!field.props.rules || !field.props.rules.length) {\n        return;\n      }\n\n      // Skip if only validate dirty field\n      if (dirty && !field.isFieldDirty()) {\n        return;\n      }\n      validateNamePathList.add(fieldNamePath.join(TMP_SPLIT));\n\n      // Add field validate rule in to promise list\n      if (!provideNameList || containsNamePath(namePathList, fieldNamePath, recursive)) {\n        const promise = field.validateRules({\n          validateMessages: {\n            ...defaultValidateMessages,\n            ...this.validateMessages\n          },\n          ...options\n        });\n\n        // Wrap promise with field\n        promiseList.push(promise.then(() => ({\n          name: fieldNamePath,\n          errors: [],\n          warnings: []\n        })).catch(ruleErrors => {\n          const mergedErrors = [];\n          const mergedWarnings = [];\n          ruleErrors.forEach?.(({\n            rule: {\n              warningOnly\n            },\n            errors\n          }) => {\n            if (warningOnly) {\n              mergedWarnings.push(...errors);\n            } else {\n              mergedErrors.push(...errors);\n            }\n          });\n          if (mergedErrors.length) {\n            return Promise.reject({\n              name: fieldNamePath,\n              errors: mergedErrors,\n              warnings: mergedWarnings\n            });\n          }\n          return {\n            name: fieldNamePath,\n            errors: mergedErrors,\n            warnings: mergedWarnings\n          };\n        }));\n      }\n    });\n    const summaryPromise = allPromiseFinish(promiseList);\n    this.lastValidatePromise = summaryPromise;\n\n    // Notify fields with rule that validate has finished and need update\n    summaryPromise.catch(results => results).then(results => {\n      const resultNamePathList = results.map(({\n        name\n      }) => name);\n      this.notifyObservers(this.store, resultNamePathList, {\n        type: 'validateFinish'\n      });\n      this.triggerOnFieldsChange(resultNamePathList, results);\n    });\n    const returnPromise = summaryPromise.then(() => {\n      if (this.lastValidatePromise === summaryPromise) {\n        return Promise.resolve(this.getFieldsValue(finalValueNamePathList));\n      }\n      return Promise.reject([]);\n    }).catch(results => {\n      const errorList = results.filter(result => result && result.errors.length);\n      const errorMessage = errorList[0]?.errors?.[0];\n      return Promise.reject({\n        message: errorMessage,\n        values: this.getFieldsValue(namePathList),\n        errorFields: errorList,\n        outOfDate: this.lastValidatePromise !== summaryPromise\n      });\n    });\n\n    // Do not throw in console\n    returnPromise.catch(e => e);\n\n    // `validating` changed. Trigger `onFieldsChange`\n    const triggerNamePathList = namePathList.filter(namePath => validateNamePathList.has(namePath.join(TMP_SPLIT)));\n    this.triggerOnFieldsChange(triggerNamePathList);\n    return returnPromise;\n  };\n\n  // ============================ Submit ============================\n  submit = () => {\n    this.warningUnhooked();\n    this.validateFields().then(values => {\n      const {\n        onFinish\n      } = this.callbacks;\n      if (onFinish) {\n        try {\n          onFinish(values);\n        } catch (err) {\n          // Should print error if user `onFinish` callback failed\n          console.error(err);\n        }\n      }\n    }).catch(e => {\n      const {\n        onFinishFailed\n      } = this.callbacks;\n      if (onFinishFailed) {\n        onFinishFailed(e);\n      }\n    });\n  };\n}\nfunction useForm(form) {\n  const formRef = React.useRef(null);\n  const [, forceUpdate] = React.useState({});\n\n  // Create singleton FormStore\n  if (!formRef.current) {\n    if (form) {\n      formRef.current = form;\n    } else {\n      // Create a new FormStore if not provided\n      const forceReRender = () => {\n        forceUpdate({});\n      };\n      const formStore = new FormStore(forceReRender);\n      formRef.current = formStore.getForm();\n    }\n  }\n  return [formRef.current];\n}\nexport default useForm;","import * as React from 'react';\nconst FormContext = /*#__PURE__*/React.createContext({\n  triggerFormChange: () => {},\n  triggerFormFinish: () => {},\n  registerForm: () => {},\n  unregisterForm: () => {}\n});\nconst FormProvider = ({\n  validateMessages,\n  onFormChange,\n  onFormFinish,\n  children\n}) => {\n  const formContext = React.useContext(FormContext);\n  const formsRef = React.useRef({});\n  return /*#__PURE__*/React.createElement(FormContext.Provider, {\n    value: {\n      ...formContext,\n      validateMessages: {\n        ...formContext.validateMessages,\n        ...validateMessages\n      },\n      // =========================================================\n      // =                  Global Form Control                  =\n      // =========================================================\n      triggerFormChange: (name, changedFields) => {\n        if (onFormChange) {\n          onFormChange(name, {\n            changedFields,\n            forms: formsRef.current\n          });\n        }\n        formContext.triggerFormChange(name, changedFields);\n      },\n      triggerFormFinish: (name, values) => {\n        if (onFormFinish) {\n          onFormFinish(name, {\n            values,\n            forms: formsRef.current\n          });\n        }\n        formContext.triggerFormFinish(name, values);\n      },\n      registerForm: (name, form) => {\n        if (name) {\n          formsRef.current = {\n            ...formsRef.current,\n            [name]: form\n          };\n        }\n        formContext.registerForm(name, form);\n      },\n      unregisterForm: name => {\n        const newForms = {\n          ...formsRef.current\n        };\n        delete newForms[name];\n        formsRef.current = newForms;\n        formContext.unregisterForm(name);\n      }\n    }\n  }, children);\n};\nexport { FormProvider };\nexport default FormContext;","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport useForm from \"./hooks/useForm\";\nimport FieldContext, { HOOK_MARK } from \"./FieldContext\";\nimport FormContext from \"./FormContext\";\nimport { isSimilar } from \"./utils/valueUtil\";\nimport ListContext from \"./ListContext\";\nconst Form = (props, ref) => {\n  const {\n    name,\n    initialValues,\n    fields,\n    form,\n    preserve,\n    children,\n    component: Component = 'form',\n    validateMessages,\n    validateTrigger = 'onChange',\n    onValuesChange,\n    onFieldsChange,\n    onFinish,\n    onFinishFailed,\n    clearOnDestroy,\n    ...restProps\n  } = props;\n  const nativeElementRef = React.useRef(null);\n  const formContext = React.useContext(FormContext);\n\n  // We customize handle event since Context will makes all the consumer re-render:\n  // https://reactjs.org/docs/context.html#contextprovider\n  const [formInstance] = useForm(form);\n  const {\n    useSubscribe,\n    setInitialValues,\n    setCallbacks,\n    setValidateMessages,\n    setPreserve,\n    destroyForm\n  } = formInstance.getInternalHooks(HOOK_MARK);\n\n  // Pass ref with form instance\n  React.useImperativeHandle(ref, () => ({\n    ...formInstance,\n    nativeElement: nativeElementRef.current\n  }));\n\n  // Register form into Context\n  React.useEffect(() => {\n    formContext.registerForm(name, formInstance);\n    return () => {\n      formContext.unregisterForm(name);\n    };\n  }, [formContext, formInstance, name]);\n\n  // Pass props to store\n  setValidateMessages({\n    ...formContext.validateMessages,\n    ...validateMessages\n  });\n  setCallbacks({\n    onValuesChange,\n    onFieldsChange: (changedFields, ...rest) => {\n      formContext.triggerFormChange(name, changedFields);\n      if (onFieldsChange) {\n        onFieldsChange(changedFields, ...rest);\n      }\n    },\n    onFinish: values => {\n      formContext.triggerFormFinish(name, values);\n      if (onFinish) {\n        onFinish(values);\n      }\n    },\n    onFinishFailed\n  });\n  setPreserve(preserve);\n\n  // Set initial value, init store value when first mount\n  const mountRef = React.useRef(null);\n  setInitialValues(initialValues, !mountRef.current);\n  if (!mountRef.current) {\n    mountRef.current = true;\n  }\n\n  // ========================== Unmount ===========================\n  React.useEffect(() => () => destroyForm(clearOnDestroy),\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  []);\n\n  // Prepare children by `children` type\n  let childrenNode;\n  const childrenRenderProps = typeof children === 'function';\n  if (childrenRenderProps) {\n    const values = formInstance.getFieldsValue(true);\n    childrenNode = children(values, formInstance);\n  } else {\n    childrenNode = children;\n  }\n\n  // Not use subscribe when using render props\n  useSubscribe(!childrenRenderProps);\n\n  // Listen if fields provided. We use ref to save prev data here to avoid additional render\n  const prevFieldsRef = React.useRef(null);\n  React.useEffect(() => {\n    if (!isSimilar(prevFieldsRef.current || [], fields || [])) {\n      formInstance.setFields(fields || []);\n    }\n    prevFieldsRef.current = fields;\n  }, [fields, formInstance]);\n\n  // =========================== Render ===========================\n  const formContextValue = React.useMemo(() => ({\n    ...formInstance,\n    validateTrigger\n  }), [formInstance, validateTrigger]);\n  const wrapperNode = /*#__PURE__*/React.createElement(ListContext.Provider, {\n    value: null\n  }, /*#__PURE__*/React.createElement(FieldContext.Provider, {\n    value: formContextValue\n  }, childrenNode));\n  if (Component === false) {\n    return wrapperNode;\n  }\n  return /*#__PURE__*/React.createElement(Component, _extends({}, restProps, {\n    ref: nativeElementRef,\n    onSubmit: event => {\n      event.preventDefault();\n      event.stopPropagation();\n      formInstance.submit();\n    },\n    onReset: event => {\n      event.preventDefault();\n      formInstance.resetFields();\n      restProps.onReset?.(event);\n    }\n  }), wrapperNode);\n};\nexport default Form;","import { useEvent, warning } from '@rc-component/util';\nimport { useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport FieldContext, { HOOK_MARK } from \"../FieldContext\";\nimport { isFormInstance } from \"../utils/typeUtil\";\nimport { getNamePath, getValue } from \"../utils/valueUtil\";\nexport function stringify(value) {\n  try {\n    return JSON.stringify(value);\n  } catch {\n    return Math.random();\n  }\n}\n\n// ------- selector type -------\n\n// ------- selector type end -------\n\nfunction useWatch(...args) {\n  const [dependencies, _form = {}] = args;\n  const options = isFormInstance(_form) ? {\n    form: _form\n  } : _form;\n  const form = options.form;\n  const [value, setValue] = useState(() => typeof dependencies === 'function' ? dependencies({}) : undefined);\n  const valueStr = useMemo(() => stringify(value), [value]);\n  const valueStrRef = useRef(valueStr);\n  valueStrRef.current = valueStr;\n  const fieldContext = useContext(FieldContext);\n  const formInstance = form || fieldContext;\n  const isValidForm = formInstance && formInstance._init;\n\n  // Warning if not exist form instance\n  if (process.env.NODE_ENV !== 'production') {\n    warning(args.length === 2 ? form ? isValidForm : true : isValidForm, 'useWatch requires a form instance since it can not auto detect from context.');\n  }\n\n  // ============================== Form ==============================\n  const {\n    getFieldsValue,\n    getInternalHooks\n  } = formInstance;\n  const {\n    registerWatch\n  } = getInternalHooks(HOOK_MARK);\n\n  // ============================= Update =============================\n  const triggerUpdate = useEvent((values, allValues) => {\n    const watchValue = options.preserve ? allValues ?? getFieldsValue(true) : values ?? getFieldsValue();\n    const nextValue = typeof dependencies === 'function' ? dependencies(watchValue) : getValue(watchValue, getNamePath(dependencies));\n    if (stringify(value) !== stringify(nextValue)) {\n      setValue(nextValue);\n    }\n  });\n\n  // ============================= Effect =============================\n  const flattenDeps = typeof dependencies === 'function' ? dependencies : JSON.stringify(dependencies);\n\n  // Deps changed\n  useEffect(() => {\n    // Skip if not exist form instance\n    if (!isValidForm) {\n      return;\n    }\n    triggerUpdate();\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [isValidForm, flattenDeps]);\n\n  // Value changed\n  useEffect(() => {\n    // Skip if not exist form instance\n    if (!isValidForm) {\n      return;\n    }\n    const cancelRegister = registerWatch((values, allValues) => {\n      triggerUpdate(values, allValues);\n    });\n    return cancelRegister;\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [isValidForm]);\n  return value;\n}\nexport default useWatch;","import * as React from 'react';\nimport Field from \"./Field\";\nimport List from \"./List\";\nimport useForm from \"./hooks/useForm\";\nimport FieldForm from \"./Form\";\nimport { FormProvider } from \"./FormContext\";\nimport FieldContext from \"./FieldContext\";\nimport ListContext from \"./ListContext\";\nimport useWatch from \"./hooks/useWatch\";\nconst InternalForm = /*#__PURE__*/React.forwardRef(FieldForm);\nconst RefForm = InternalForm;\nRefForm.FormProvider = FormProvider;\nRefForm.Field = Field;\nRefForm.List = List;\nRefForm.useForm = useForm;\nRefForm.useWatch = useWatch;\nexport { Field, List, useForm, FormProvider, FieldContext, ListContext, useWatch };\nexport default RefForm;","\"use client\";\n\nimport * as React from 'react';\nimport { FormProvider as RcFormProvider } from '@rc-component/form';\nimport { omit } from '@rc-component/util';\nexport const FormContext = /*#__PURE__*/React.createContext({\n  labelAlign: 'right',\n  layout: 'horizontal',\n  itemRef: () => {}\n});\nexport const NoStyleItemContext = /*#__PURE__*/React.createContext(null);\nexport const FormProvider = props => {\n  const providerProps = omit(props, ['prefixCls']);\n  return /*#__PURE__*/React.createElement(RcFormProvider, {\n    ...providerProps\n  });\n};\nexport const FormItemPrefixContext = /*#__PURE__*/React.createContext({\n  prefixCls: ''\n});\nexport const FormItemInputContext = /*#__PURE__*/React.createContext({});\nif (process.env.NODE_ENV !== 'production') {\n  FormItemInputContext.displayName = 'FormItemInputContext';\n}\nexport const NoFormStyle = ({\n  children,\n  status,\n  override\n}) => {\n  const formItemInputContext = React.useContext(FormItemInputContext);\n  const newFormItemInputContext = React.useMemo(() => {\n    const newContext = {\n      ...formItemInputContext\n    };\n    if (override) {\n      delete newContext.isFormItemInput;\n    }\n    if (status) {\n      delete newContext.status;\n      delete newContext.hasFeedback;\n      delete newContext.feedbackIcon;\n    }\n    return newContext;\n  }, [status, override, formItemInputContext]);\n  return /*#__PURE__*/React.createElement(FormItemInputContext.Provider, {\n    value: newFormItemInputContext\n  }, children);\n};\nexport const VariantContext = /*#__PURE__*/React.createContext(undefined);","// This icon file is generated automatically.\nvar CloseCircleFilled = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"fill-rule\": \"evenodd\", \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M512 64c247.4 0 448 200.6 448 448S759.4 960 512 960 64 759.4 64 512 264.6 64 512 64zm127.98 274.82h-.04l-.08.06L512 466.75 384.14 338.88c-.04-.05-.06-.06-.08-.06a.12.12 0 00-.07 0c-.03 0-.05.01-.09.05l-45.02 45.02a.2.2 0 00-.05.09.12.12 0 000 .07v.02a.27.27 0 00.06.06L466.75 512 338.88 639.86c-.05.04-.06.06-.06.08a.12.12 0 000 .07c0 .03.01.05.05.09l45.02 45.02a.2.2 0 00.09.05.12.12 0 00.07 0c.02 0 .04-.01.08-.05L512 557.25l127.86 127.87c.04.04.06.05.08.05a.12.12 0 00.07 0c.03 0 .05-.01.09-.05l45.02-45.02a.2.2 0 00.05-.09.12.12 0 000-.07v-.02a.27.27 0 00-.05-.06L557.25 512l127.87-127.86c.04-.04.05-.06.05-.08a.12.12 0 000-.07c0-.03-.01-.05-.05-.09l-45.02-45.02a.2.2 0 00-.09-.05.12.12 0 00-.07 0z\" } }] }, \"name\": \"close-circle\", \"theme\": \"filled\" };\nexport default CloseCircleFilled;\n","import { createContext } from 'react';\nconst IconContext = /*#__PURE__*/createContext({});\nexport default IconContext;","const APPEND_ORDER = 'data-rc-order';\nconst APPEND_PRIORITY = 'data-rc-priority';\nconst MARK_KEY = 'rc-util-key';\nconst containerCache = new Map();\nfunction canUseDom() {\n  return !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n}\nfunction contains(root, node) {\n  if (!root || !node) {\n    return false;\n  }\n  if (root.contains) {\n    return root.contains(node);\n  }\n  let current = node;\n  while (current) {\n    if (current === root) {\n      return true;\n    }\n    current = current.parentNode;\n  }\n  return false;\n}\nfunction getMark({\n  mark\n} = {}) {\n  if (mark) {\n    return mark.startsWith('data-') ? mark : `data-${mark}`;\n  }\n  return MARK_KEY;\n}\nfunction getContainer(option) {\n  if (option.attachTo) {\n    return option.attachTo;\n  }\n  const head = document.querySelector('head');\n  return head || document.body;\n}\nfunction getOrder(prepend) {\n  if (prepend === 'queue') {\n    return 'prependQueue';\n  }\n  return prepend ? 'prepend' : 'append';\n}\nfunction findStyles(container) {\n  return Array.from((containerCache.get(container) || container).children).filter(node => node.tagName === 'STYLE');\n}\nfunction injectCSS(css, option = {}) {\n  if (!canUseDom()) {\n    return null;\n  }\n  const {\n    csp,\n    prepend,\n    priority = 0\n  } = option;\n  const mergedOrder = getOrder(prepend);\n  const isPrependQueue = mergedOrder === 'prependQueue';\n  const styleNode = document.createElement('style');\n  styleNode.setAttribute(APPEND_ORDER, mergedOrder);\n  if (isPrependQueue && priority) {\n    styleNode.setAttribute(APPEND_PRIORITY, `${priority}`);\n  }\n  if (csp?.nonce) {\n    styleNode.nonce = csp.nonce;\n  }\n  styleNode.innerHTML = css;\n  const container = getContainer(option);\n  const {\n    firstChild\n  } = container;\n  if (prepend) {\n    if (isPrependQueue) {\n      const existStyle = (option.styles || findStyles(container)).filter(node => {\n        if (!['prepend', 'prependQueue'].includes(node.getAttribute(APPEND_ORDER))) {\n          return false;\n        }\n        const nodePriority = Number(node.getAttribute(APPEND_PRIORITY) || 0);\n        return priority >= nodePriority;\n      });\n      if (existStyle.length) {\n        container.insertBefore(styleNode, existStyle[existStyle.length - 1].nextSibling);\n        return styleNode;\n      }\n    }\n    container.insertBefore(styleNode, firstChild);\n  } else {\n    container.appendChild(styleNode);\n  }\n  return styleNode;\n}\nfunction findExistNode(key, option = {}) {\n  let {\n    styles\n  } = option;\n  styles ||= findStyles(getContainer(option));\n  return styles.find(node => node.getAttribute(getMark(option)) === key);\n}\nfunction syncRealContainer(container, option) {\n  const cachedRealContainer = containerCache.get(container);\n  if (!cachedRealContainer || !contains(document, cachedRealContainer)) {\n    const placeholderStyle = injectCSS('', option);\n    if (!placeholderStyle) {\n      return;\n    }\n    const {\n      parentNode\n    } = placeholderStyle;\n    containerCache.set(container, parentNode);\n    container.removeChild(placeholderStyle);\n  }\n}\nexport function updateCSS(css, key, originOption = {}) {\n  if (!canUseDom()) {\n    return null;\n  }\n  const container = getContainer(originOption);\n  const styles = findStyles(container);\n  const option = {\n    ...originOption,\n    styles\n  };\n  syncRealContainer(container, option);\n  const existNode = findExistNode(key, option);\n  if (existNode) {\n    if (option.csp?.nonce && existNode.nonce !== option.csp.nonce) {\n      existNode.nonce = option.csp.nonce;\n    }\n    if (existNode.innerHTML !== css) {\n      existNode.innerHTML = css;\n    }\n    return existNode;\n  }\n  const newNode = injectCSS(css, option);\n  newNode?.setAttribute(getMark(option), key);\n  return newNode;\n}\nfunction getRoot(ele) {\n  return ele?.getRootNode?.();\n}\nexport function getShadowRoot(ele) {\n  const root = getRoot(ele);\n  return typeof ShadowRoot !== 'undefined' && root instanceof ShadowRoot ? root : null;\n}\nconst warned = {};\nexport function warningOnce(valid, message) {\n  if (valid || warned[message]) {\n    return;\n  }\n  if (process.env.NODE_ENV !== 'production' && typeof console !== 'undefined') {\n    console.error(`Warning: ${message}`);\n  }\n  warned[message] = true;\n}","import React, { useContext, useEffect } from 'react';\nimport IconContext from \"./components/Context\";\nimport { getShadowRoot, updateCSS, warningOnce } from \"./cssUtils\";\nfunction camelCase(input) {\n  return input.replace(/-(.)/g, (match, g) => g.toUpperCase());\n}\nexport function warning(valid, message) {\n  warningOnce(valid, `[@ant-design/icons] ${message}`);\n}\nexport function isIconDefinition(target) {\n  return target !== null && typeof target === 'object' && typeof target.name === 'string' && typeof target.theme === 'string' && (typeof target.icon === 'object' || typeof target.icon === 'function');\n}\nexport function normalizeAttrs(attrs = {}) {\n  return Object.keys(attrs).reduce((acc, key) => {\n    const val = attrs[key];\n    switch (key) {\n      case 'class':\n        acc.className = val;\n        delete acc.class;\n        break;\n      default:\n        delete acc[key];\n        acc[camelCase(key)] = val;\n    }\n    return acc;\n  }, {});\n}\nexport function generate(node, key, rootProps) {\n  if (!rootProps) {\n    return /*#__PURE__*/React.createElement(node.tag, {\n      key,\n      ...normalizeAttrs(node.attrs)\n    }, (node.children || []).map((child, index) => generate(child, `${key}-${node.tag}-${index}`)));\n  }\n  return /*#__PURE__*/React.createElement(node.tag, {\n    key,\n    ...normalizeAttrs(node.attrs),\n    ...rootProps\n  }, (node.children || []).map((child, index) => generate(child, `${key}-${node.tag}-${index}`)));\n}\n\n// These props make sure that the SVG behaviours like general text.\n// Reference: https://blog.prototypr.io/align-svg-icons-to-text-and-say-goodbye-to-font-icons-d44b3d7b26b4\nexport const svgBaseProps = {\n  width: '1em',\n  height: '1em',\n  fill: 'currentColor',\n  'aria-hidden': 'true',\n  focusable: 'false'\n};\nexport const iconStyles = `\n.anticon {\n  display: inline-flex;\n  align-items: center;\n  color: inherit;\n  font-style: normal;\n  line-height: 0;\n  text-align: center;\n  text-transform: none;\n  vertical-align: -0.125em;\n  text-rendering: optimizeLegibility;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n.anticon > * {\n  line-height: 1;\n}\n\n.anticon svg {\n  display: inline-block;\n  vertical-align: inherit;\n}\n\n.anticon::before {\n  display: none;\n}\n\n.anticon .anticon-icon {\n  display: block;\n}\n\n.anticon[tabindex] {\n  cursor: pointer;\n}\n\n.anticon-spin {\n  -webkit-animation: loadingCircle 1s infinite linear;\n  animation: loadingCircle 1s infinite linear;\n}\n\n@-webkit-keyframes loadingCircle {\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n@keyframes loadingCircle {\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n`;\nexport const useInsertStyles = eleRef => {\n  const {\n    csp,\n    prefixCls,\n    layer,\n    zeroRuntime\n  } = useContext(IconContext);\n  let mergedStyleStr = iconStyles;\n  if (prefixCls) {\n    mergedStyleStr = mergedStyleStr.replace(/anticon/g, prefixCls);\n  }\n  if (layer) {\n    mergedStyleStr = `@layer ${layer} {\\n${mergedStyleStr}\\n}`;\n  }\n  useEffect(() => {\n    if (zeroRuntime) {\n      return;\n    }\n    const ele = eleRef.current;\n    const shadowRoot = getShadowRoot(ele);\n    updateCSS(mergedStyleStr, '@ant-design-icons', {\n      prepend: !layer,\n      csp,\n      attachTo: shadowRoot\n    });\n  }, []);\n};","import * as React from 'react';\nimport { generate, isIconDefinition, warning, useInsertStyles } from \"../renderUtils\";\nconst IconBase = props => {\n  const {\n    icon,\n    className,\n    onClick,\n    style,\n    primaryColor: _primaryColor,\n    secondaryColor: _secondaryColor,\n    ...restProps\n  } = props;\n  const svgRef = React.useRef(null);\n  useInsertStyles(svgRef);\n  warning(isIconDefinition(icon), `icon should be icon definiton, but got ${typeof icon}`);\n  if (!isIconDefinition(icon)) {\n    return null;\n  }\n  const target = icon;\n  return generate(target.icon, `svg-${target.name}`, {\n    className,\n    onClick,\n    style,\n    'data-icon': target.name,\n    width: '1em',\n    height: '1em',\n    fill: 'currentColor',\n    'aria-hidden': 'true',\n    ...restProps,\n    ref: svgRef\n  });\n};\nIconBase.displayName = 'IconReact';\nexport default IconBase;","'use client';\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { clsx } from 'clsx';\nimport Context from \"./Context\";\nimport ReactIcon from \"./IconBase\";\nimport { isIconDefinition, warning } from \"../renderUtils\";\nconst Icon = /*#__PURE__*/React.forwardRef((props, ref) => {\n  const {\n    // affect outter <i>...</i>\n    className,\n    // affect inner <svg>...</svg>\n    icon,\n    spin,\n    rotate,\n    tabIndex,\n    onClick,\n    twoToneColor: _twoToneColor,\n    // other\n    ...restProps\n  } = props;\n  const {\n    prefixCls = 'anticon',\n    rootClassName\n  } = React.useContext(Context);\n  warning(isIconDefinition(icon), `icon should be icon definiton, but got ${typeof icon}`);\n  if (!isIconDefinition(icon)) {\n    return null;\n  }\n  const classString = clsx(rootClassName, prefixCls, {\n    [`${prefixCls}-${icon.name}`]: !!icon.name,\n    [`${prefixCls}-spin`]: !!spin || icon.name === 'loading'\n  }, className);\n  let iconTabIndex = tabIndex;\n  if (iconTabIndex === undefined && onClick) {\n    iconTabIndex = -1;\n  }\n  const svgStyle = rotate ? {\n    msTransform: `rotate(${rotate}deg)`,\n    transform: `rotate(${rotate}deg)`\n  } : undefined;\n  return /*#__PURE__*/React.createElement(\"span\", _extends({\n    role: \"img\",\n    \"aria-label\": icon.name\n  }, restProps, {\n    ref: ref,\n    tabIndex: iconTabIndex,\n    onClick: onClick,\n    className: classString\n  }), /*#__PURE__*/React.createElement(ReactIcon, {\n    icon: icon,\n    style: svgStyle\n  }));\n});\nif (process.env.NODE_ENV !== 'production') {\n  Icon.displayName = 'AntdIcon';\n}\nexport default Icon;","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n// GENERATED BY ./scripts/generate.ts\n// DO NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport CloseCircleFilledSvg from \"@ant-design/icons-svg/es/asn/CloseCircleFilled\";\nimport AntdIcon from \"../components/AntdIconLight\";\nconst CloseCircleFilled = (props, ref) => /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n  ref: ref,\n  icon: CloseCircleFilledSvg\n}));\n\n/**![close-circle](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIGZpbGwtcnVsZT0iZXZlbm9kZCIgdmlld0JveD0iNjQgNjQgODk2IDg5NiIgZm9jdXNhYmxlPSJmYWxzZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNTEyIDY0YzI0Ny40IDAgNDQ4IDIwMC42IDQ0OCA0NDhTNzU5LjQgOTYwIDUxMiA5NjAgNjQgNzU5LjQgNjQgNTEyIDI2NC42IDY0IDUxMiA2NHptMTI3Ljk4IDI3NC44MmgtLjA0bC0uMDguMDZMNTEyIDQ2Ni43NSAzODQuMTQgMzM4Ljg4Yy0uMDQtLjA1LS4wNi0uMDYtLjA4LS4wNmEuMTIuMTIgMCAwMC0uMDcgMGMtLjAzIDAtLjA1LjAxLS4wOS4wNWwtNDUuMDIgNDUuMDJhLjIuMiAwIDAwLS4wNS4wOS4xMi4xMiAwIDAwMCAuMDd2LjAyYS4yNy4yNyAwIDAwLjA2LjA2TDQ2Ni43NSA1MTIgMzM4Ljg4IDYzOS44NmMtLjA1LjA0LS4wNi4wNi0uMDYuMDhhLjEyLjEyIDAgMDAwIC4wN2MwIC4wMy4wMS4wNS4wNS4wOWw0NS4wMiA0NS4wMmEuMi4yIDAgMDAuMDkuMDUuMTIuMTIgMCAwMC4wNyAwYy4wMiAwIC4wNC0uMDEuMDgtLjA1TDUxMiA1NTcuMjVsMTI3Ljg2IDEyNy44N2MuMDQuMDQuMDYuMDUuMDguMDVhLjEyLjEyIDAgMDAuMDcgMGMuMDMgMCAuMDUtLjAxLjA5LS4wNWw0NS4wMi00NS4wMmEuMi4yIDAgMDAuMDUtLjA5LjEyLjEyIDAgMDAwLS4wN3YtLjAyYS4yNy4yNyAwIDAwLS4wNS0uMDZMNTU3LjI1IDUxMmwxMjcuODctMTI3Ljg2Yy4wNC0uMDQuMDUtLjA2LjA1LS4wOGEuMTIuMTIgMCAwMDAtLjA3YzAtLjAzLS4wMS0uMDUtLjA1LS4wOWwtNDUuMDItNDUuMDJhLjIuMiAwIDAwLS4wOS0uMDUuMTIuMTIgMCAwMC0uMDcgMHoiIC8+PC9zdmc+) */\nconst RefIcon = /*#__PURE__*/React.forwardRef(CloseCircleFilled);\nif (process.env.NODE_ENV !== 'production') {\n  RefIcon.displayName = 'CloseCircleFilled';\n}\nexport default RefIcon;","/**\n * Search for the first non-undefined value in the arguments and return it.\n *\n * ```js\n * const mergedIcon = fallbackProp(propIcon, contextIcon, defaultIcon);\n * ```\n *\n * Note: it is different from `??` operator which skips null\n */\nexport default function fallbackProp(...args) {\n  return args.find(arg => arg !== undefined);\n}","// This icon file is generated automatically.\nvar CloseOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"fill-rule\": \"evenodd\", \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M799.86 166.31c.02 0 .04.02.08.06l57.69 57.7c.04.03.05.05.06.08a.12.12 0 010 .06c0 .03-.02.05-.06.09L569.93 512l287.7 287.7c.04.04.05.06.06.09a.12.12 0 010 .07c0 .02-.02.04-.06.08l-57.7 57.69c-.03.04-.05.05-.07.06a.12.12 0 01-.07 0c-.03 0-.05-.02-.09-.06L512 569.93l-287.7 287.7c-.04.04-.06.05-.09.06a.12.12 0 01-.07 0c-.02 0-.04-.02-.08-.06l-57.69-57.7c-.04-.03-.05-.05-.06-.07a.12.12 0 010-.07c0-.03.02-.05.06-.09L454.07 512l-287.7-287.7c-.04-.04-.05-.06-.06-.09a.12.12 0 010-.07c0-.02.02-.04.06-.08l57.7-57.69c.03-.04.05-.05.07-.06a.12.12 0 01.07 0c.03 0 .05.02.09.06L512 454.07l287.7-287.7c.04-.04.06-.05.09-.06a.12.12 0 01.07 0z\" } }] }, \"name\": \"close\", \"theme\": \"outlined\" };\nexport default CloseOutlined;\n","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n// GENERATED BY ./scripts/generate.ts\n// DO NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport CloseOutlinedSvg from \"@ant-design/icons-svg/es/asn/CloseOutlined\";\nimport AntdIcon from \"../components/AntdIconLight\";\nconst CloseOutlined = (props, ref) => /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n  ref: ref,\n  icon: CloseOutlinedSvg\n}));\n\n/**![close](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIGZpbGwtcnVsZT0iZXZlbm9kZCIgdmlld0JveD0iNjQgNjQgODk2IDg5NiIgZm9jdXNhYmxlPSJmYWxzZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNzk5Ljg2IDE2Ni4zMWMuMDIgMCAuMDQuMDIuMDguMDZsNTcuNjkgNTcuN2MuMDQuMDMuMDUuMDUuMDYuMDhhLjEyLjEyIDAgMDEwIC4wNmMwIC4wMy0uMDIuMDUtLjA2LjA5TDU2OS45MyA1MTJsMjg3LjcgMjg3LjdjLjA0LjA0LjA1LjA2LjA2LjA5YS4xMi4xMiAwIDAxMCAuMDdjMCAuMDItLjAyLjA0LS4wNi4wOGwtNTcuNyA1Ny42OWMtLjAzLjA0LS4wNS4wNS0uMDcuMDZhLjEyLjEyIDAgMDEtLjA3IDBjLS4wMyAwLS4wNS0uMDItLjA5LS4wNkw1MTIgNTY5LjkzbC0yODcuNyAyODcuN2MtLjA0LjA0LS4wNi4wNS0uMDkuMDZhLjEyLjEyIDAgMDEtLjA3IDBjLS4wMiAwLS4wNC0uMDItLjA4LS4wNmwtNTcuNjktNTcuN2MtLjA0LS4wMy0uMDUtLjA1LS4wNi0uMDdhLjEyLjEyIDAgMDEwLS4wN2MwLS4wMy4wMi0uMDUuMDYtLjA5TDQ1NC4wNyA1MTJsLTI4Ny43LTI4Ny43Yy0uMDQtLjA0LS4wNS0uMDYtLjA2LS4wOWEuMTIuMTIgMCAwMTAtLjA3YzAtLjAyLjAyLS4wNC4wNi0uMDhsNTcuNy01Ny42OWMuMDMtLjA0LjA1LS4wNS4wNy0uMDZhLjEyLjEyIDAgMDEuMDcgMGMuMDMgMCAuMDUuMDIuMDkuMDZMNTEyIDQ1NC4wN2wyODcuNy0yODcuN2MuMDQtLjA0LjA2LS4wNS4wOS0uMDZhLjEyLjEyIDAgMDEuMDcgMHoiIC8+PC9zdmc+) */\nconst RefIcon = /*#__PURE__*/React.forwardRef(CloseOutlined);\nif (process.env.NODE_ENV !== 'production') {\n  RefIcon.displayName = 'CloseOutlined';\n}\nexport default RefIcon;","import { useMemo } from 'react';\nconst isValidOrientation = orientation => {\n  return orientation === 'horizontal' || orientation === 'vertical';\n};\nexport const useOrientation = (orientation, vertical, legacyDirection) => {\n  return useMemo(() => {\n    const validOrientation = isValidOrientation(orientation);\n    let mergedOrientation;\n    if (validOrientation) {\n      mergedOrientation = orientation;\n    } else if (typeof vertical === 'boolean') {\n      mergedOrientation = vertical ? 'vertical' : 'horizontal';\n    } else {\n      const validLegacyDirection = isValidOrientation(legacyDirection);\n      mergedOrientation = validLegacyDirection ? legacyDirection : 'horizontal';\n    }\n    return [mergedOrientation, mergedOrientation === 'vertical'];\n  }, [legacyDirection, orientation, vertical]);\n};","/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n  // 'm' and 'r' are mixing constants generated offline.\n  // They're not really 'magic', they just happen to work well.\n  // const m = 0x5bd1e995;\n  // const r = 24;\n  // Initialize the hash\n  var h = 0; // Mix 4 bytes at a time into the hash\n\n  var k,\n      i = 0,\n      len = str.length;\n\n  for (; len >= 4; ++i, len -= 4) {\n    k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n    k =\n    /* Math.imul(k, m): */\n    (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n    k ^=\n    /* k >>> r: */\n    k >>> 24;\n    h =\n    /* Math.imul(k, m): */\n    (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n    /* Math.imul(h, m): */\n    (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n  } // Handle the last few bytes of the input array\n\n\n  switch (len) {\n    case 3:\n      h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n    case 2:\n      h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n    case 1:\n      h ^= str.charCodeAt(i) & 0xff;\n      h =\n      /* Math.imul(h, m): */\n      (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n  } // Do a few final mixes of the hash to ensure the last few\n  // bytes are well-incorporated.\n\n\n  h ^= h >>> 13;\n  h =\n  /* Math.imul(h, m): */\n  (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n  return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\nexport default murmur2;\n","// [times, realValue]\n\nconst SPLIT = '%';\n\n/** Connect key with `SPLIT` */\nexport function pathKey(keys) {\n  return keys.join(SPLIT);\n}\n\n/** Record update id for extract static style order. */\nlet updateId = 0;\nclass Entity {\n  instanceId;\n  constructor(instanceId) {\n    this.instanceId = instanceId;\n  }\n\n  /** @private Internal cache map. Do not access this directly */\n  cache = new Map();\n\n  /** @private Record update times for each key */\n  updateTimes = new Map();\n  extracted = new Set();\n  get(keys) {\n    return this.opGet(pathKey(keys));\n  }\n\n  /** A fast get cache with `get` concat. */\n  opGet(keyPathStr) {\n    return this.cache.get(keyPathStr) || null;\n  }\n  update(keys, valueFn) {\n    return this.opUpdate(pathKey(keys), valueFn);\n  }\n\n  /** A fast get cache with `get` concat. */\n  opUpdate(keyPathStr, valueFn) {\n    const prevValue = this.cache.get(keyPathStr);\n    const nextValue = valueFn(prevValue);\n    if (nextValue === null) {\n      this.cache.delete(keyPathStr);\n      this.updateTimes.delete(keyPathStr);\n    } else {\n      this.cache.set(keyPathStr, nextValue);\n      this.updateTimes.set(keyPathStr, updateId);\n      updateId += 1;\n    }\n  }\n}\nexport default Entity;","import useMemo from \"@rc-component/util/es/hooks/useMemo\";\nimport isEqual from \"@rc-component/util/es/isEqual\";\nimport * as React from 'react';\nimport CacheEntity from \"./Cache\";\nimport { AUTO_PREFIX } from \"./transformers/autoPrefix\";\nexport const ATTR_TOKEN = 'data-token-hash';\nexport const ATTR_MARK = 'data-css-hash';\nexport const ATTR_CACHE_PATH = 'data-cache-path';\n\n// Mark css-in-js instance in style element\nexport const CSS_IN_JS_INSTANCE = '__cssinjs_instance__';\nexport function createCache() {\n  const cssinjsInstanceId = Math.random().toString(12).slice(2);\n\n  // Tricky SSR: Move all inline style to the head.\n  // PS: We do not recommend tricky mode.\n  if (typeof document !== 'undefined' && document.head && document.body) {\n    const styles = document.body.querySelectorAll(`style[${ATTR_MARK}]`) || [];\n    const {\n      firstChild\n    } = document.head;\n    Array.from(styles).forEach(style => {\n      style[CSS_IN_JS_INSTANCE] ||= cssinjsInstanceId;\n\n      // Not force move if no head\n      if (style[CSS_IN_JS_INSTANCE] === cssinjsInstanceId) {\n        document.head.insertBefore(style, firstChild);\n      }\n    });\n\n    // Deduplicate of moved styles\n    const styleHash = {};\n    Array.from(document.querySelectorAll(`style[${ATTR_MARK}]`)).forEach(style => {\n      const hash = style.getAttribute(ATTR_MARK);\n      if (styleHash[hash]) {\n        if (style[CSS_IN_JS_INSTANCE] === cssinjsInstanceId) {\n          style.parentNode?.removeChild(style);\n        }\n      } else {\n        styleHash[hash] = true;\n      }\n    });\n  }\n  return new CacheEntity(cssinjsInstanceId);\n}\nconst StyleContext = /*#__PURE__*/React.createContext({\n  hashPriority: 'low',\n  cache: createCache(),\n  defaultCache: true,\n  autoPrefix: false\n});\nexport const StyleProvider = props => {\n  const {\n    children,\n    ...restProps\n  } = props;\n  const parentContext = React.useContext(StyleContext);\n  const context = useMemo(() => {\n    const mergedContext = {\n      ...parentContext\n    };\n    Object.keys(restProps).forEach(key => {\n      const value = restProps[key];\n      if (restProps[key] !== undefined) {\n        mergedContext[key] = value;\n      }\n    });\n    const {\n      cache,\n      transformers = []\n    } = restProps;\n    mergedContext.cache = mergedContext.cache || createCache();\n    mergedContext.defaultCache = !cache && parentContext.defaultCache;\n\n    // autoPrefix\n    if (transformers.includes(AUTO_PREFIX)) {\n      mergedContext.autoPrefix = true;\n    }\n    return mergedContext;\n  }, [parentContext, restProps], (prev, next) => !isEqual(prev[0], next[0], true) || !isEqual(prev[1], next[1], true));\n  return /*#__PURE__*/React.createElement(StyleContext.Provider, {\n    value: context\n  }, children);\n};\nexport default StyleContext;","import AbstractCalculator from \"./calculator\";\nconst CALC_UNIT = 'CALC_UNIT';\nconst regexp = new RegExp(CALC_UNIT, 'g');\nfunction unit(value) {\n  if (typeof value === 'number') {\n    return `${value}${CALC_UNIT}`;\n  }\n  return value;\n}\nexport default class CSSCalculator extends AbstractCalculator {\n  result = '';\n  unitlessCssVar;\n  lowPriority;\n  constructor(num, unitlessCssVar) {\n    super();\n    const numType = typeof num;\n    this.unitlessCssVar = unitlessCssVar;\n    if (num instanceof CSSCalculator) {\n      this.result = `(${num.result})`;\n    } else if (numType === 'number') {\n      this.result = unit(num);\n    } else if (numType === 'string') {\n      this.result = num;\n    }\n  }\n  add(num) {\n    if (num instanceof CSSCalculator) {\n      this.result = `${this.result} + ${num.getResult()}`;\n    } else if (typeof num === 'number' || typeof num === 'string') {\n      this.result = `${this.result} + ${unit(num)}`;\n    }\n    this.lowPriority = true;\n    return this;\n  }\n  sub(num) {\n    if (num instanceof CSSCalculator) {\n      this.result = `${this.result} - ${num.getResult()}`;\n    } else if (typeof num === 'number' || typeof num === 'string') {\n      this.result = `${this.result} - ${unit(num)}`;\n    }\n    this.lowPriority = true;\n    return this;\n  }\n  mul(num) {\n    if (this.lowPriority) {\n      this.result = `(${this.result})`;\n    }\n    if (num instanceof CSSCalculator) {\n      this.result = `${this.result} * ${num.getResult(true)}`;\n    } else if (typeof num === 'number' || typeof num === 'string') {\n      this.result = `${this.result} * ${num}`;\n    }\n    this.lowPriority = false;\n    return this;\n  }\n  div(num) {\n    if (this.lowPriority) {\n      this.result = `(${this.result})`;\n    }\n    if (num instanceof CSSCalculator) {\n      this.result = `${this.result} / ${num.getResult(true)}`;\n    } else if (typeof num === 'number' || typeof num === 'string') {\n      this.result = `${this.result} / ${num}`;\n    }\n    this.lowPriority = false;\n    return this;\n  }\n  getResult(force) {\n    return this.lowPriority || force ? `(${this.result})` : this.result;\n  }\n  equal(options) {\n    const {\n      unit: cssUnit\n    } = options || {};\n    let mergedUnit = true;\n    if (typeof cssUnit === 'boolean') {\n      mergedUnit = cssUnit;\n    } else if (Array.from(this.unitlessCssVar).some(cssVar => this.result.includes(cssVar))) {\n      mergedUnit = false;\n    }\n    this.result = this.result.replace(regexp, mergedUnit ? 'px' : '');\n    if (typeof this.lowPriority !== 'undefined') {\n      return `calc(${this.result})`;\n    }\n    return this.result;\n  }\n}","// ================================== Cache ==================================\n\nexport function sameDerivativeOption(left, right) {\n  if (left.length !== right.length) {\n    return false;\n  }\n  for (let i = 0; i < left.length; i++) {\n    if (left[i] !== right[i]) {\n      return false;\n    }\n  }\n  return true;\n}\nexport default class ThemeCache {\n  static MAX_CACHE_SIZE = 20;\n  static MAX_CACHE_OFFSET = 5;\n  cache;\n  keys;\n  cacheCallTimes;\n  constructor() {\n    this.cache = new Map();\n    this.keys = [];\n    this.cacheCallTimes = 0;\n  }\n  size() {\n    return this.keys.length;\n  }\n  internalGet(derivativeOption, updateCallTimes = false) {\n    let cache = {\n      map: this.cache\n    };\n    derivativeOption.forEach(derivative => {\n      if (!cache) {\n        cache = undefined;\n      } else {\n        cache = cache?.map?.get(derivative);\n      }\n    });\n    if (cache?.value && updateCallTimes) {\n      cache.value[1] = this.cacheCallTimes++;\n    }\n    return cache?.value;\n  }\n  get(derivativeOption) {\n    return this.internalGet(derivativeOption, true)?.[0];\n  }\n  has(derivativeOption) {\n    return !!this.internalGet(derivativeOption);\n  }\n  set(derivativeOption, value) {\n    // New cache\n    if (!this.has(derivativeOption)) {\n      if (this.size() + 1 > ThemeCache.MAX_CACHE_SIZE + ThemeCache.MAX_CACHE_OFFSET) {\n        const [targetKey] = this.keys.reduce((result, key) => {\n          const [, callTimes] = result;\n          if (this.internalGet(key)[1] < callTimes) {\n            return [key, this.internalGet(key)[1]];\n          }\n          return result;\n        }, [this.keys[0], this.cacheCallTimes]);\n        this.delete(targetKey);\n      }\n      this.keys.push(derivativeOption);\n    }\n    let cache = this.cache;\n    derivativeOption.forEach((derivative, index) => {\n      if (index === derivativeOption.length - 1) {\n        cache.set(derivative, {\n          value: [value, this.cacheCallTimes++]\n        });\n      } else {\n        const cacheValue = cache.get(derivative);\n        if (!cacheValue) {\n          cache.set(derivative, {\n            map: new Map()\n          });\n        } else if (!cacheValue.map) {\n          cacheValue.map = new Map();\n        }\n        cache = cache.get(derivative).map;\n      }\n    });\n  }\n  deleteByPath(currentCache, derivatives) {\n    const cache = currentCache.get(derivatives[0]);\n    if (derivatives.length === 1) {\n      if (!cache.map) {\n        currentCache.delete(derivatives[0]);\n      } else {\n        currentCache.set(derivatives[0], {\n          map: cache.map\n        });\n      }\n      return cache.value?.[0];\n    }\n    const result = this.deleteByPath(cache.map, derivatives.slice(1));\n    if ((!cache.map || cache.map.size === 0) && !cache.value) {\n      currentCache.delete(derivatives[0]);\n    }\n    return result;\n  }\n  delete(derivativeOption) {\n    // If cache exists\n    if (this.has(derivativeOption)) {\n      this.keys = this.keys.filter(item => !sameDerivativeOption(item, derivativeOption));\n      return this.deleteByPath(this.cache, derivativeOption);\n    }\n    return undefined;\n  }\n}","import { warning } from \"@rc-component/util/es/warning\";\nlet uuid = 0;\n\n/**\n * Theme with algorithms to derive tokens from design tokens.\n * Use `createTheme` first which will help to manage the theme instance cache.\n */\nexport default class Theme {\n  derivatives;\n  id;\n  constructor(derivatives) {\n    this.derivatives = Array.isArray(derivatives) ? derivatives : [derivatives];\n    this.id = uuid;\n    if (derivatives.length === 0) {\n      warning(derivatives.length > 0, '[Ant Design CSS-in-JS] Theme should have at least one derivative function.');\n    }\n    uuid += 1;\n  }\n  getDerivativeToken(token) {\n    return this.derivatives.reduce((result, derivative) => derivative(token, result), undefined);\n  }\n}","import ThemeCache from \"./ThemeCache\";\nimport Theme from \"./Theme\";\nconst cacheThemes = new ThemeCache();\n\n/**\n * Same as new Theme, but will always return same one if `derivative` not changed.\n */\nexport default function createTheme(derivatives) {\n  const derivativeArr = Array.isArray(derivatives) ? derivatives : [derivatives];\n  // Create new theme if not exist\n  if (!cacheThemes.has(derivativeArr)) {\n    cacheThemes.set(derivativeArr, new Theme(derivativeArr));\n  }\n\n  // Get theme from cache and return\n  return cacheThemes.get(derivativeArr);\n}","import hash from '@emotion/hash';\nimport canUseDom from \"@rc-component/util/es/Dom/canUseDom\";\nimport { removeCSS, updateCSS } from \"@rc-component/util/es/Dom/dynamicCSS\";\nimport { ATTR_MARK, ATTR_TOKEN } from \"../StyleContext\";\nimport { Theme } from \"../theme\";\n\n// Create a cache for memo concat\n\nconst resultCache = new WeakMap();\nconst RESULT_VALUE = {};\nexport function memoResult(callback, deps) {\n  let current = resultCache;\n  for (let i = 0; i < deps.length; i += 1) {\n    const dep = deps[i];\n    if (!current.has(dep)) {\n      current.set(dep, new WeakMap());\n    }\n    current = current.get(dep);\n  }\n  if (!current.has(RESULT_VALUE)) {\n    current.set(RESULT_VALUE, callback());\n  }\n  return current.get(RESULT_VALUE);\n}\n\n// Create a cache here to avoid always loop generate\nconst flattenTokenCache = new WeakMap();\n\n/**\n * Flatten token to string, this will auto cache the result when token not change\n */\nexport function flattenToken(token) {\n  let str = flattenTokenCache.get(token) || '';\n  if (!str) {\n    Object.keys(token).forEach(key => {\n      const value = token[key];\n      str += key;\n      if (value instanceof Theme) {\n        str += value.id;\n      } else if (value && typeof value === 'object') {\n        str += flattenToken(value);\n      } else {\n        str += value;\n      }\n    });\n\n    // https://github.com/ant-design/ant-design/issues/48386\n    // Should hash the string to avoid style tag name too long\n    str = hash(str);\n\n    // Put in cache\n    flattenTokenCache.set(token, str);\n  }\n  return str;\n}\n\n/**\n * Convert derivative token to key string\n */\nexport function token2key(token, salt) {\n  return hash(`${salt}_${flattenToken(token)}`);\n}\nconst randomSelectorKey = `random-${Date.now()}-${Math.random()}`.replace(/\\./g, '');\n\n// Magic `content` for detect selector support\nconst checkContent = '_bAmBoO_';\nfunction supportSelector(styleStr, handleElement, supportCheck) {\n  if (canUseDom()) {\n    updateCSS(styleStr, randomSelectorKey);\n    const ele = document.createElement('div');\n    ele.style.position = 'fixed';\n    ele.style.left = '0';\n    ele.style.top = '0';\n    handleElement?.(ele);\n    document.body.appendChild(ele);\n    if (process.env.NODE_ENV !== 'production') {\n      ele.innerHTML = 'Test';\n      ele.style.zIndex = '9999999';\n    }\n    const support = supportCheck ? supportCheck(ele) : getComputedStyle(ele).content?.includes(checkContent);\n    ele.parentNode?.removeChild(ele);\n    removeCSS(randomSelectorKey);\n    return support;\n  }\n  return false;\n}\nlet canLayer = undefined;\nexport function supportLayer() {\n  if (canLayer === undefined) {\n    canLayer = supportSelector(`@layer ${randomSelectorKey} { .${randomSelectorKey} { content: \"${checkContent}\"!important; } }`, ele => {\n      ele.className = randomSelectorKey;\n    });\n  }\n  return canLayer;\n}\nlet canWhere = undefined;\nexport function supportWhere() {\n  if (canWhere === undefined) {\n    canWhere = supportSelector(`:where(.${randomSelectorKey}) { content: \"${checkContent}\"!important; }`, ele => {\n      ele.className = randomSelectorKey;\n    });\n  }\n  return canWhere;\n}\nlet canLogic = undefined;\nexport function supportLogicProps() {\n  if (canLogic === undefined) {\n    canLogic = supportSelector(`.${randomSelectorKey} { inset-block: 93px !important; }`, ele => {\n      ele.className = randomSelectorKey;\n    }, ele => getComputedStyle(ele).bottom === '93px');\n  }\n  return canLogic;\n}\nexport const isClientSide = canUseDom();\nexport function unit(num) {\n  if (typeof num === 'number') {\n    return `${num}px`;\n  }\n  return num;\n}\nexport function toStyleStr(style, tokenKey, styleId, customizeAttrs = {}, plain = false) {\n  if (plain) {\n    return style;\n  }\n  const attrs = {\n    ...customizeAttrs,\n    [ATTR_TOKEN]: tokenKey,\n    [ATTR_MARK]: styleId\n  };\n  const attrStr = Object.keys(attrs).map(attr => {\n    const val = attrs[attr];\n    return val ? `${attr}=\"${val}\"` : null;\n  }).filter(v => v).join(' ');\n  return `<style ${attrStr}>${style}</style>`;\n}\nexport function where(options) {\n  const {\n    hashCls,\n    hashPriority = 'low'\n  } = options || {};\n  if (!hashCls) {\n    return '';\n  }\n  const hashSelector = `.${hashCls}`;\n  return hashPriority === 'low' ? `:where(${hashSelector})` : hashSelector;\n}\nexport const isNonNullable = val => {\n  return val !== undefined && val !== null;\n};\n/**\n * Get nonce value and inject it into CSS config if available.\n */\nexport function injectCSPNonce(config, nonce) {\n  const nonceStr = typeof nonce === 'function' ? nonce() : nonce;\n  if (nonceStr) {\n    return {\n      ...config,\n      csp: {\n        ...config.csp,\n        nonce: nonceStr\n      }\n    };\n  }\n  return config;\n}","import { where } from \"../util\";\nexport const token2CSSVar = (token, prefix = '') => {\n  return `--${prefix ? `${prefix}-` : ''}${token}`.replace(/([a-z0-9])([A-Z])/g, '$1-$2').replace(/([A-Z]+)([A-Z][a-z0-9]+)/g, '$1-$2').replace(/([a-z])([A-Z0-9])/g, '$1-$2').toLowerCase();\n};\nexport const serializeCSSVar = (cssVars, hashId, options) => {\n  const {\n    hashCls,\n    hashPriority = 'low',\n    scope\n  } = options || {};\n  if (!Object.keys(cssVars).length) {\n    return '';\n  }\n  const baseSelector = `${where({\n    hashCls,\n    hashPriority\n  })}.${hashId}`;\n  const scopes = [scope].flat().filter(Boolean);\n  const selector = scopes.length ? scopes.map(s => `${baseSelector}.${s}`).join(', ') : baseSelector;\n  return `${selector}{${Object.entries(cssVars).map(([key, value]) => `${key}:${value};`).join('')}}`;\n};\nexport const transformToken = (token, themeKey, config) => {\n  const {\n    hashCls,\n    hashPriority = 'low',\n    prefix,\n    unitless,\n    ignore,\n    preserve\n  } = config || {};\n  const cssVars = {};\n  const result = {};\n  Object.entries(token).forEach(([key, value]) => {\n    if (preserve?.[key]) {\n      result[key] = value;\n    } else if ((typeof value === 'string' || typeof value === 'number') && !ignore?.[key]) {\n      const cssVar = token2CSSVar(key, prefix);\n      cssVars[cssVar] = typeof value === 'number' && !unitless?.[key] ? `${value}px` : String(value);\n      result[key] = `var(${cssVar})`;\n    }\n  });\n  return [result, serializeCSSVar(cssVars, themeKey, {\n    scope: config?.scope,\n    hashCls,\n    hashPriority\n  })];\n};","function useProdHMR() {\n  return false;\n}\nlet webpackHMR = false;\nfunction useDevHMR() {\n  return webpackHMR;\n}\nexport default process.env.NODE_ENV === 'production' ? useProdHMR : useDevHMR;\n\n// Webpack `module.hot.accept` do not support any deps update trigger\n// We have to hack handler to force mark as HRM\nif (process.env.NODE_ENV !== 'production' && typeof module !== 'undefined' && module && module.hot && typeof window !== 'undefined') {\n  // Use `globalThis` first, and `window` for older browsers\n  // const win = globalThis as any;\n  const win = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : null;\n  if (win && typeof win.webpackHotUpdate === 'function') {\n    const originWebpackHotUpdate = win.webpackHotUpdate;\n    win.webpackHotUpdate = (...args) => {\n      webpackHMR = true;\n      setTimeout(() => {\n        webpackHMR = false;\n      }, 0);\n      return originWebpackHotUpdate(...args);\n    };\n  }\n}","import * as React from 'react';\nimport { useInsertionEffect } from 'react';\nimport { pathKey } from \"../Cache\";\nimport StyleContext from \"../StyleContext\";\nimport useHMR from \"./useHMR\";\nconst effectMap = new Map();\nexport default function useGlobalCache(prefix, keyPath, cacheFn, onCacheRemove,\n// Add additional effect trigger by `useInsertionEffect`\nonCacheEffect) {\n  const {\n    cache: globalCache\n  } = React.useContext(StyleContext);\n  const fullPath = [prefix, ...keyPath];\n  const fullPathStr = pathKey(fullPath);\n  const HMRUpdate = useHMR();\n  const buildCache = updater => {\n    globalCache.opUpdate(fullPathStr, prevCache => {\n      const [times = 0, cache] = prevCache || [undefined, undefined];\n\n      // HMR should always ignore cache since developer may change it\n      let tmpCache = cache;\n      if (process.env.NODE_ENV !== 'production' && cache && HMRUpdate) {\n        onCacheRemove?.(tmpCache, HMRUpdate);\n        tmpCache = null;\n      }\n      const mergedCache = tmpCache || cacheFn();\n      const data = [times, mergedCache];\n\n      // Call updater if need additional logic\n      return updater ? updater(data) : data;\n    });\n  };\n\n  // Create cache\n  React.useMemo(() => {\n    buildCache();\n  }, /* eslint-disable react-hooks/exhaustive-deps */\n  [fullPathStr]\n  /* eslint-enable */);\n  let cacheEntity = globalCache.opGet(fullPathStr);\n\n  // HMR clean the cache but not trigger `useMemo` again\n  // Let's fallback of this\n  // ref https://github.com/ant-design/cssinjs/issues/127\n  if (process.env.NODE_ENV !== 'production' && !cacheEntity) {\n    buildCache();\n    cacheEntity = globalCache.opGet(fullPathStr);\n  }\n  const cacheContent = cacheEntity[1];\n\n  // Remove if no need anymore\n  useInsertionEffect(() => {\n    buildCache(([times, cache]) => [times + 1, cache]);\n    if (!effectMap.has(fullPathStr)) {\n      onCacheEffect?.(cacheContent);\n      effectMap.set(fullPathStr, true);\n\n      // 微任务清理缓存，可以认为是单次 batch render 中只触发一次 effect\n      Promise.resolve().then(() => {\n        effectMap.delete(fullPathStr);\n      });\n    }\n    return () => {\n      globalCache.opUpdate(fullPathStr, prevCache => {\n        const [times = 0, cache] = prevCache || [];\n        const nextCount = times - 1;\n        if (nextCount === 0) {\n          onCacheRemove?.(cache, false);\n          effectMap.delete(fullPathStr);\n          return null;\n        }\n        return [times - 1, cache];\n      });\n    };\n  }, [fullPathStr]);\n  return cacheContent;\n}","import hash from '@emotion/hash';\nimport { updateCSS } from \"@rc-component/util/es/Dom/dynamicCSS\";\nimport { useContext } from 'react';\nimport StyleContext, { ATTR_MARK, ATTR_TOKEN, CSS_IN_JS_INSTANCE } from \"../StyleContext\";\nimport { flattenToken, injectCSPNonce, memoResult, token2key, toStyleStr } from \"../util\";\nimport { transformToken } from \"../util/css-variables\";\nimport useGlobalCache from \"./useGlobalCache\";\nconst EMPTY_OVERRIDE = {};\n\n// Generate different prefix to make user selector break in production env.\n// This helps developer not to do style override directly on the hash id.\nconst hashPrefix = process.env.NODE_ENV !== 'production' ? 'css-dev-only-do-not-override' : 'css';\nconst tokenKeys = new Map();\nfunction recordCleanToken(tokenKey) {\n  tokenKeys.set(tokenKey, (tokenKeys.get(tokenKey) || 0) + 1);\n}\nfunction removeStyleTags(key, instanceId) {\n  if (typeof document !== 'undefined') {\n    const styles = document.querySelectorAll(`style[${ATTR_TOKEN}=\"${key}\"]`);\n    styles.forEach(style => {\n      if (style[CSS_IN_JS_INSTANCE] === instanceId) {\n        style.parentNode?.removeChild(style);\n      }\n    });\n  }\n}\nconst TOKEN_THRESHOLD = -1;\n\n// Remove will check current keys first\nfunction cleanTokenStyle(tokenKey, instanceId) {\n  tokenKeys.set(tokenKey, (tokenKeys.get(tokenKey) || 0) - 1);\n  const cleanableKeyList = new Set();\n  tokenKeys.forEach((value, key) => {\n    if (value <= 0) cleanableKeyList.add(key);\n  });\n\n  // Should keep tokens under threshold for not to insert style too often\n  if (tokenKeys.size - cleanableKeyList.size > TOKEN_THRESHOLD) {\n    cleanableKeyList.forEach(key => {\n      removeStyleTags(key, instanceId);\n      tokenKeys.delete(key);\n    });\n  }\n}\nexport const getComputedToken = (originToken, overrideToken, theme, format) => {\n  const derivativeToken = theme.getDerivativeToken(originToken);\n\n  // Merge with override\n  let mergedDerivativeToken = {\n    ...derivativeToken,\n    ...overrideToken\n  };\n\n  // Format if needed\n  if (format) {\n    mergedDerivativeToken = format(mergedDerivativeToken);\n  }\n  return mergedDerivativeToken;\n};\nexport const TOKEN_PREFIX = 'token';\n/**\n * Cache theme derivative token as global shared one\n * @param theme Theme entity\n * @param tokens List of tokens, used for cache. Please do not dynamic generate object directly\n * @param option Additional config\n * @returns Call Theme.getDerivativeToken(tokenObject) to get token\n */\nexport default function useCacheToken(theme, tokens, option) {\n  const {\n    cache: {\n      instanceId\n    },\n    container,\n    hashPriority\n  } = useContext(StyleContext);\n  const {\n    salt = '',\n    override = EMPTY_OVERRIDE,\n    formatToken,\n    getComputedToken: compute,\n    cssVar,\n    nonce\n  } = option;\n\n  // Basic - We do basic cache here\n  const mergedToken = memoResult(() => Object.assign({}, ...tokens), tokens);\n  const tokenStr = flattenToken(mergedToken);\n  const overrideTokenStr = flattenToken(override);\n  const cssVarStr = flattenToken(cssVar);\n  const cachedToken = useGlobalCache(TOKEN_PREFIX, [salt, theme.id, tokenStr, overrideTokenStr, cssVarStr], () => {\n    const mergedDerivativeToken = compute ? compute(mergedToken, override, theme) : getComputedToken(mergedToken, override, theme, formatToken);\n    const actualToken = {\n      ...mergedDerivativeToken\n    };\n\n    // Optimize for `useStyleRegister` performance\n    const mergedSalt = `${salt}_${cssVar.prefix}`;\n    const hashId = hash(mergedSalt);\n    const hashCls = `${hashPrefix}-${hashId}`;\n    actualToken._tokenKey = token2key(actualToken, mergedSalt);\n\n    // Replace token value with css variables\n    const [tokenWithCssVar, cssVarsStr] = transformToken(mergedDerivativeToken, cssVar.key, {\n      prefix: cssVar.prefix,\n      ignore: cssVar.ignore,\n      unitless: cssVar.unitless,\n      preserve: cssVar.preserve,\n      hashPriority,\n      hashCls: cssVar.hashed ? hashCls : undefined\n    });\n    tokenWithCssVar._hashId = hashId;\n    recordCleanToken(cssVar.key);\n    return [tokenWithCssVar, hashCls, actualToken, cssVarsStr, cssVar.key];\n  }, ([,,,, themeKey]) => {\n    // Remove token will remove all related style\n    cleanTokenStyle(themeKey, instanceId);\n  }, ([,,, cssVarsStr, themeKey]) => {\n    if (!cssVarsStr) {\n      return;\n    }\n    let mergedCSSConfig = {\n      mark: ATTR_MARK,\n      prepend: 'queue',\n      attachTo: container,\n      priority: -999\n    };\n    mergedCSSConfig = injectCSPNonce(mergedCSSConfig, nonce);\n    const style = updateCSS(cssVarsStr, hash(`css-var-${themeKey}`), mergedCSSConfig);\n    style[CSS_IN_JS_INSTANCE] = instanceId;\n\n    // Used for `useCacheToken` to remove on batch when token removed\n    style.setAttribute(ATTR_TOKEN, themeKey);\n  });\n  return cachedToken;\n}\nexport const extract = (cache, effectStyles, options) => {\n  const [,, realToken, styleStr, cssVarKey] = cache;\n  const {\n    plain\n  } = options || {};\n  if (!styleStr) {\n    return null;\n  }\n  const styleId = realToken._tokenKey;\n  const order = -999;\n\n  // ====================== Style ======================\n  // Used for @rc-component/util\n  const sharedAttrs = {\n    'data-rc-order': 'prependQueue',\n    'data-rc-priority': `${order}`\n  };\n  const styleText = toStyleStr(styleStr, cssVarKey, styleId, sharedAttrs, plain);\n  return [order, styleId, styleText];\n};","var unitlessKeys = {\n  animationIterationCount: 1,\n  borderImageOutset: 1,\n  borderImageSlice: 1,\n  borderImageWidth: 1,\n  boxFlex: 1,\n  boxFlexGroup: 1,\n  boxOrdinalGroup: 1,\n  columnCount: 1,\n  columns: 1,\n  flex: 1,\n  flexGrow: 1,\n  flexPositive: 1,\n  flexShrink: 1,\n  flexNegative: 1,\n  flexOrder: 1,\n  gridRow: 1,\n  gridRowEnd: 1,\n  gridRowSpan: 1,\n  gridRowStart: 1,\n  gridColumn: 1,\n  gridColumnEnd: 1,\n  gridColumnSpan: 1,\n  gridColumnStart: 1,\n  msGridRow: 1,\n  msGridRowSpan: 1,\n  msGridColumn: 1,\n  msGridColumnSpan: 1,\n  fontWeight: 1,\n  lineHeight: 1,\n  opacity: 1,\n  order: 1,\n  orphans: 1,\n  tabSize: 1,\n  widows: 1,\n  zIndex: 1,\n  zoom: 1,\n  WebkitLineClamp: 1,\n  // SVG-related properties\n  fillOpacity: 1,\n  floodOpacity: 1,\n  stopOpacity: 1,\n  strokeDasharray: 1,\n  strokeDashoffset: 1,\n  strokeMiterlimit: 1,\n  strokeOpacity: 1,\n  strokeWidth: 1\n};\n\nexport default unitlessKeys;\n","export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\nexport var LAYER = '@layer'\nexport var SCOPE = '@scope'\n","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn charat(value, 0) ^ 45 ? (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3) : 0\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @return {number}\n */\nexport function indexof (value, search) {\n\treturn value.indexOf(search)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n\n/**\n * @param {string[]} array\n * @param {RegExp} pattern\n * @return {string[]}\n */\nexport function filter (array, pattern) {\n\treturn array.filter(function (value) { return !match(value, pattern) })\n}\n","import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {object[]} siblings\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length, siblings) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: '', siblings: siblings}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0, root.siblings), root, {length: -root.length}, props)\n}\n\n/**\n * @param {object} root\n */\nexport function lift (root) {\n\twhile (root.root)\n\t\troot = copy(root.root, {children: [root]})\n\n\tappend(root, root.siblings)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n","import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, charat, trim, from, sizeof, strlen, substr, append, replace} from './Utility.js'\nimport {node, char, prev, next, peek, token, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar parens = 0\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && charat(characters, length - 1) == 58) parens++, characters += '('\n\t\t\t\telse characters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// )\n\t\t\tcase 41:\n\t\t\t\tparens--, characters += ')'\n\t\t\t\tbreak\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tif (parens > 0) {\n\t\t\t\t\tcharacters += from(character)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent, declarations), declarations)\n\t\t\t\t\t\tif ((token(previous || 1) == 5 || token(peek() || 1) == 5) && strlen(characters) && substr(characters, -1, void 0) !== ' ') characters += ' '\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tif (parens > 0 && character) {\n\t\t\t\t\tcharacters += from(character)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset: if (ampersand == -1) characters = replace(characters, /\\f/g, '')\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length || variable === 0))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1, declarations) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2, declarations), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length, rulesets), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tswitch (atrule) {\n\t\t\t\t\t\t\t\t\t// c(ontainer)\n\t\t\t\t\t\t\t\t\tcase 99:\n\t\t\t\t\t\t\t\t\t\tif (charat(characters, 3) === 110) break\n\t\t\t\t\t\t\t\t\t// l(ayer)\n\t\t\t\t\t\t\t\t\tcase 108:\n\t\t\t\t\t\t\t\t\t\tif (charat(characters, 2) === 97) break\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\toffset = 0\n\t\t\t\t\t\t\t\t\t// d(ocument) m(edia) s(upports)\n\t\t\t\t\t\t\t\t\tcase 100: case 109: case 115:\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (offset) parse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length, children), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\telse parse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tif (parens > 0) break\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @param {object[]} siblings\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length, siblings) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length, siblings)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @param {object[]} siblings\n * @return {object}\n */\nexport function comment (value, root, parent, siblings) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0, siblings)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @param {object[]} siblings\n * @return {object}\n */\nexport function declaration (value, root, parent, length, siblings) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length, siblings)\n}\n","import {MS, MOZ, WEBKIT} from './Enum.js'\nimport {hash, charat, strlen, indexof, replace, substr, match} from './Utility.js'\n\n/**\n * @param {string} value\n * @param {number} length\n * @param {object[]} children\n * @return {string}\n */\nexport function prefix (value, length, children) {\n\tswitch (hash(value, length)) {\n\t\t// color-adjust\n\t\tcase 5103:\n\t\t\treturn WEBKIT + 'print-' + value + value\n\t\t// animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)\n\t\tcase 5737: case 4201: case 3177: case 3433: case 1641: case 4457: case 2921:\n\t\t// text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break\n\t\tcase 5572: case 6356: case 5844: case 3191: case 6645: case 3005:\n\t\t// background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)\n\t\tcase 4215: case 6389: case 5109: case 5365: case 5621: case 3829:\n\t\t// mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position\n\t\tcase 6391: case 5879: case 5623: case 6135: case 4599:\n\t\t\treturn WEBKIT + value + value\n\t\t// mask-composite\n\t\tcase 4855:\n\t\t\treturn WEBKIT + value.replace('add', 'source-over').replace('substract', 'source-out').replace('intersect', 'source-in').replace('exclude', 'xor') + value\n\t\t// tab-size\n\t\tcase 4789:\n\t\t\treturn MOZ + value + value\n\t\t// appearance, user-select, transform, hyphens, text-size-adjust\n\t\tcase 5349: case 4246: case 4810: case 6968: case 2756:\n\t\t\treturn WEBKIT + value + MOZ + value + MS + value + value\n\t\t// writing-mode\n\t\tcase 5936:\n\t\t\tswitch (charat(value, length + 11)) {\n\t\t\t\t// vertical-l(r)\n\t\t\t\tcase 114:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb') + value\n\t\t\t\t// vertical-r(l)\n\t\t\t\tcase 108:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb-rl') + value\n\t\t\t\t// horizontal(-)tb\n\t\t\t\tcase 45:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'lr') + value\n\t\t\t\t// default: fallthrough to below\n\t\t\t}\n\t\t// flex, flex-direction, scroll-snap-type, writing-mode\n\t\tcase 6828: case 4268: case 2903:\n\t\t\treturn WEBKIT + value + MS + value + value\n\t\t// order\n\t\tcase 6165:\n\t\t\treturn WEBKIT + value + MS + 'flex-' + value + value\n\t\t// align-items\n\t\tcase 5187:\n\t\t\treturn WEBKIT + value + replace(value, /(\\w+).+(:[^]+)/, WEBKIT + 'box-$1$2' + MS + 'flex-$1$2') + value\n\t\t// align-self\n\t\tcase 5443:\n\t\t\treturn WEBKIT + value + MS + 'flex-item-' + replace(value, /flex-|-self/g, '') + (!match(value, /flex-|baseline/) ? MS + 'grid-row-' + replace(value, /flex-|-self/g, '') : '') + value\n\t\t// align-content\n\t\tcase 4675:\n\t\t\treturn WEBKIT + value + MS + 'flex-line-pack' + replace(value, /align-content|flex-|-self/g, '') + value\n\t\t// flex-shrink\n\t\tcase 5548:\n\t\t\treturn WEBKIT + value + MS + replace(value, 'shrink', 'negative') + value\n\t\t// flex-basis\n\t\tcase 5292:\n\t\t\treturn WEBKIT + value + MS + replace(value, 'basis', 'preferred-size') + value\n\t\t// flex-grow\n\t\tcase 6060:\n\t\t\treturn WEBKIT + 'box-' + replace(value, '-grow', '') + WEBKIT + value + MS + replace(value, 'grow', 'positive') + value\n\t\t// transition\n\t\tcase 4554:\n\t\t\treturn WEBKIT + replace(value, /([^-])(transform)/g, '$1' + WEBKIT + '$2') + value\n\t\t// cursor\n\t\tcase 6187:\n\t\t\treturn replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + '$1'), /(image-set)/, WEBKIT + '$1'), value, '') + value\n\t\t// background, background-image\n\t\tcase 5495: case 3959:\n\t\t\treturn replace(value, /(image-set\\([^]*)/, WEBKIT + '$1' + '$`$1')\n\t\t// justify-content\n\t\tcase 4968:\n\t\t\treturn replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + 'box-pack:$3' + MS + 'flex-pack:$3'), /space-between/, 'justify') + WEBKIT + value + value\n\t\t// justify-self\n\t\tcase 4200:\n\t\t\tif (!match(value, /flex-|baseline/)) return MS + 'grid-column-align' + substr(value, length) + value\n\t\t\tbreak\n\t\t// grid-template-(columns|rows)\n\t\tcase 2592: case 3360:\n\t\t\treturn MS + replace(value, 'template-', '') + value\n\t\t// grid-(row|column)-start\n\t\tcase 4384: case 3616:\n\t\t\tif (children && children.some(function (element, index) { return length = index, match(element.props, /grid-\\w+-end/) })) {\n\t\t\t\treturn ~indexof(value + (children = children[length].value), 'span') ? value : (MS + replace(value, '-start', '') + value + MS + 'grid-row-span:' + (~indexof(children, 'span') ? match(children, /\\d+/) : +match(children, /\\d+/) - +match(value, /\\d+/)) + ';')\n\t\t\t}\n\t\t\treturn MS + replace(value, '-start', '') + value\n\t\t// grid-(row|column)-end\n\t\tcase 4896: case 4128:\n\t\t\treturn (children && children.some(function (element) { return match(element.props, /grid-\\w+-start/) })) ? value : MS + replace(replace(value, '-end', '-span'), 'span ', '') + value\n\t\t// (margin|padding)-inline-(start|end)\n\t\tcase 4095: case 3583: case 4068: case 2532:\n\t\t\treturn replace(value, /(.+)-inline(.+)/, WEBKIT + '$1$2') + value\n\t\t// (min|max)?(width|height|inline-size|block-size)\n\t\tcase 8116: case 7059: case 5753: case 5535:\n\t\tcase 5445: case 5701: case 4933: case 4677:\n\t\tcase 5533: case 5789: case 5021: case 4765:\n\t\t\t// stretch, max-content, min-content, fill-available\n\t\t\tif (strlen(value) - 1 - length > 6)\n\t\t\t\tswitch (charat(value, length + 1)) {\n\t\t\t\t\t// (m)ax-content, (m)in-content\n\t\t\t\t\tcase 109:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (charat(value, length + 4) !== 45)\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t// (f)ill-available, (f)it-content\n\t\t\t\t\tcase 102:\n\t\t\t\t\t\treturn replace(value, /(.+:)(.+)-([^]+)/, '$1' + WEBKIT + '$2-$3' + '$1' + MOZ + (charat(value, length + 3) == 108 ? '$3' : '$2-$3')) + value\n\t\t\t\t\t// (s)tretch\n\t\t\t\t\tcase 115:\n\t\t\t\t\t\treturn ~indexof(value, 'stretch') ? prefix(replace(value, 'stretch', 'fill-available'), length, children) + value : value\n\t\t\t\t}\n\t\t\tbreak\n\t\t// grid-(column|row)\n\t\tcase 5152: case 5920:\n\t\t\treturn replace(value, /(.+?):(\\d+)(\\s*\\/\\s*(span)?\\s*(\\d+))?(.*)/, function (_, a, b, c, d, e, f) { return (MS + a + ':' + b + f) + (c ? (MS + a + '-span:' + (d ? e : +e - +b)) + f : '') + value })\n\t\t// position: sticky\n\t\tcase 4949:\n\t\t\t// stick(y)?\n\t\t\tif (charat(value, length + 6) === 121)\n\t\t\t\treturn replace(value, ':', ':' + WEBKIT) + value\n\t\t\tbreak\n\t\t// display: (flex|inline-flex|grid|inline-grid)\n\t\tcase 6444:\n\t\t\tswitch (charat(value, charat(value, 14) === 45 ? 18 : 11)) {\n\t\t\t\t// (inline-)?fle(x)\n\t\t\t\tcase 120:\n\t\t\t\t\treturn replace(value, /(.+:)([^;\\s!]+)(;|(\\s+)?!.+)?/, '$1' + WEBKIT + (charat(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + WEBKIT + '$2$3' + '$1' + MS + '$2box$3') + value\n\t\t\t\t// (inline-)?gri(d)\n\t\t\t\tcase 100:\n\t\t\t\t\treturn replace(value, ':', ':' + MS) + value\n\t\t\t}\n\t\t\tbreak\n\t\t// scroll-margin, scroll-margin-(top|right|bottom|left)\n\t\tcase 5719: case 2647: case 2135: case 3927: case 2391:\n\t\t\treturn replace(value, 'scroll-', 'scroll-snap-') + value\n\t}\n\n\treturn value\n}\n","import {IMPORT, LAYER, COMMENT, RULESET, DECLARATION, KEYFRAMES, NAMESPACE} from './Enum.js'\nimport {strlen} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\n\tfor (var i = 0; i < children.length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase LAYER: if (element.children.length) break\n\t\tcase IMPORT: case NAMESPACE: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: if (!strlen(element.value = element.props.join(','))) return ''\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n","import {MS, MOZ, WEBKIT, RULESET, KEYFRAMES, DECLARATION} from './Enum.js'\nimport {match, charat, substr, strlen, sizeof, replace, combine, filter, assign} from './Utility.js'\nimport {copy, lift, tokenize} from './Tokenizer.js'\nimport {serialize} from './Serializer.js'\nimport {prefix} from './Prefixer.js'\n\n/**\n * @param {function[]} collection\n * @return {function}\n */\nexport function middleware (collection) {\n\tvar length = sizeof(collection)\n\n\treturn function (element, index, children, callback) {\n\t\tvar output = ''\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\toutput += collection[i](element, index, children, callback) || ''\n\n\t\treturn output\n\t}\n}\n\n/**\n * @param {function} callback\n * @return {function}\n */\nexport function rulesheet (callback) {\n\treturn function (element) {\n\t\tif (!element.root)\n\t\t\tif (element = element.return)\n\t\t\t\tcallback(element)\n\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n */\nexport function prefixer (element, index, children, callback) {\n\tif (element.length > -1)\n\t\tif (!element.return)\n\t\t\tswitch (element.type) {\n\t\t\t\tcase DECLARATION: element.return = prefix(element.value, element.length, children)\n\t\t\t\t\treturn\n\t\t\t\tcase KEYFRAMES:\n\t\t\t\t\treturn serialize([copy(element, {value: replace(element.value, '@', '@' + WEBKIT)})], callback)\n\t\t\t\tcase RULESET:\n\t\t\t\t\tif (element.length)\n\t\t\t\t\t\treturn combine(children = element.props, function (value) {\n\t\t\t\t\t\t\tswitch (match(value, callback = /(::plac\\w+|:read-\\w+)/)) {\n\t\t\t\t\t\t\t\t// :read-(only|write)\n\t\t\t\t\t\t\t\tcase ':read-only': case ':read-write':\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]}))\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [value]}))\n\t\t\t\t\t\t\t\t\tassign(element, {props: filter(children, callback)})\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t// :placeholder\n\t\t\t\t\t\t\t\tcase '::placeholder':\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]}))\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]}))\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]}))\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [value]}))\n\t\t\t\t\t\t\t\t\tassign(element, {props: filter(children, callback)})\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ''\n\t\t\t\t\t\t})\n\t\t\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n */\nexport function namespace (element) {\n\tswitch (element.type) {\n\t\tcase RULESET:\n\t\t\telement.props = element.props.map(function (value) {\n\t\t\t\treturn combine(tokenize(value), function (value, index, children) {\n\t\t\t\t\tswitch (charat(value, 0)) {\n\t\t\t\t\t\t// \\f\n\t\t\t\t\t\tcase 12:\n\t\t\t\t\t\t\treturn substr(value, 1, strlen(value))\n\t\t\t\t\t\t// \\0 ( + > ~\n\t\t\t\t\t\tcase 0: case 40: case 43: case 62: case 126:\n\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t// :\n\t\t\t\t\t\tcase 58:\n\t\t\t\t\t\t\tif (children[++index] === 'global')\n\t\t\t\t\t\t\t\tchildren[index] = '', children[++index] = '\\f' + substr(children[index], index = 1, -1)\n\t\t\t\t\t\t// \\s\n\t\t\t\t\t\tcase 32:\n\t\t\t\t\t\t\treturn index === 1 ? '' : value\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tswitch (index) {\n\t\t\t\t\t\t\t\tcase 0: element = value\n\t\t\t\t\t\t\t\t\treturn sizeof(children) > 1 ? '' : value\n\t\t\t\t\t\t\t\tcase index = sizeof(children) - 1: case 2:\n\t\t\t\t\t\t\t\t\treturn index === 2 ? value + element + element : value + element\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t}\n}\n","import canUseDom from \"@rc-component/util/es/Dom/canUseDom\";\nimport { ATTR_MARK } from \"../StyleContext\";\nexport const ATTR_CACHE_MAP = 'data-ant-cssinjs-cache-path';\n\n/**\n * This marks style from the css file.\n * Which means not exist in `<style />` tag.\n */\nexport const CSS_FILE_STYLE = '_FILE_STYLE__';\nexport function serialize(cachePathMap) {\n  return Object.keys(cachePathMap).map(path => {\n    const hash = cachePathMap[path];\n    return `${path}:${hash}`;\n  }).join(';');\n}\nlet cachePathMap;\nlet fromCSSFile = true;\n\n/**\n * @private Test usage only. Can save remove if no need.\n */\nexport function reset(mockCache, fromFile = true) {\n  cachePathMap = mockCache;\n  fromCSSFile = fromFile;\n}\nexport function prepare() {\n  if (!cachePathMap) {\n    cachePathMap = {};\n    if (canUseDom()) {\n      const div = document.createElement('div');\n      div.className = ATTR_CACHE_MAP;\n      div.style.position = 'fixed';\n      div.style.visibility = 'hidden';\n      div.style.top = '-9999px';\n      document.body.appendChild(div);\n      let content = getComputedStyle(div).content || '';\n      content = content.replace(/^\"/, '').replace(/\"$/, '');\n\n      // Fill data\n      content.split(';').forEach(item => {\n        const [path, hash] = item.split(':');\n        cachePathMap[path] = hash;\n      });\n\n      // Remove inline record style\n      const inlineMapStyle = document.querySelector(`style[${ATTR_CACHE_MAP}]`);\n      if (inlineMapStyle) {\n        fromCSSFile = false;\n        inlineMapStyle.parentNode?.removeChild(inlineMapStyle);\n      }\n      document.body.removeChild(div);\n    }\n  }\n}\nexport function existPath(path) {\n  prepare();\n  return !!cachePathMap[path];\n}\nexport function getStyleAndHash(path) {\n  const hash = cachePathMap[path];\n  let styleStr = null;\n  if (hash && canUseDom()) {\n    if (fromCSSFile) {\n      styleStr = CSS_FILE_STYLE;\n    } else {\n      const style = document.querySelector(`style[${ATTR_MARK}=\"${cachePathMap[path]}\"]`);\n      if (style) {\n        styleStr = style.innerHTML;\n      } else {\n        // Clean up since not exist anymore\n        delete cachePathMap[path];\n      }\n    }\n  }\n  return [styleStr, hash];\n}","import hash from '@emotion/hash';\nimport { removeCSS, updateCSS } from \"@rc-component/util/es/Dom/dynamicCSS\";\nimport * as React from 'react';\n// @ts-ignore\nimport unitless from '@emotion/unitless';\nimport { compile, middleware, prefixer, serialize, stringify } from 'stylis';\nimport { contentQuotesLinter, hashedAnimationLinter } from \"../linters\";\nimport StyleContext, { ATTR_CACHE_PATH, ATTR_MARK, CSS_IN_JS_INSTANCE } from \"../StyleContext\";\nimport { injectCSPNonce, isClientSide, isNonNullable, toStyleStr, where } from \"../util\";\nimport { CSS_FILE_STYLE, existPath, getStyleAndHash } from \"../util/cacheMapUtil\";\nimport useGlobalCache from \"./useGlobalCache\";\nconst SKIP_CHECK = '_skip_check_';\nconst MULTI_VALUE = '_multi_value_';\n// ============================================================================\n// ==                                 Parser                                 ==\n// ============================================================================\n// Preprocessor style content to browser support one\nexport function normalizeStyle(styleStr, autoPrefix) {\n  const serialized = autoPrefix ? serialize(compile(styleStr), middleware([prefixer, stringify])) : serialize(compile(styleStr), stringify);\n  return serialized.replace(/\\{%%%\\:[^;];}/g, ';');\n}\nfunction isCompoundCSSProperty(value) {\n  return typeof value === 'object' && value && (SKIP_CHECK in value || MULTI_VALUE in value);\n}\n\n// 注入 hash 值\nfunction injectSelectorHash(key, hashId, hashPriority = 'high') {\n  if (!hashId) {\n    return key;\n  }\n  const hashSelector = where({\n    hashCls: hashId,\n    hashPriority\n  });\n\n  // 注入 hashId\n  const keys = key.split(',').map(k => {\n    const fullPath = k.trim().split(/\\s+/);\n\n    // 如果 Selector 第一个是 HTML Element，那我们就插到它的后面。反之，就插到最前面。\n    let firstPath = fullPath[0] || '';\n    const htmlElement = firstPath.match(/^\\w+/)?.[0] || '';\n    firstPath = `${htmlElement}${hashSelector}${firstPath.slice(htmlElement.length)}`;\n    return [firstPath, ...fullPath.slice(1)].join(' ');\n  });\n  return keys.join(',');\n}\n// Parse CSSObject to style content\nexport const parseStyle = (interpolation, config = {}, {\n  root,\n  injectHash,\n  parentSelectors\n} = {\n  root: true,\n  parentSelectors: []\n}) => {\n  const {\n    hashId,\n    layer,\n    path,\n    hashPriority,\n    transformers = [],\n    linters = []\n  } = config;\n  let styleStr = '';\n  let effectStyle = {};\n  function parseKeyframes(keyframes) {\n    const animationName = keyframes.getName(hashId);\n    if (!effectStyle[animationName]) {\n      const [parsedStr] = parseStyle(keyframes.style, config, {\n        root: false,\n        parentSelectors\n      });\n      effectStyle[animationName] = `@keyframes ${keyframes.getName(hashId)}${parsedStr}`;\n    }\n  }\n  function flattenList(list, fullList = []) {\n    list.forEach(item => {\n      if (Array.isArray(item)) {\n        flattenList(item, fullList);\n      } else if (item) {\n        fullList.push(item);\n      }\n    });\n    return fullList;\n  }\n  const flattenStyleList = flattenList(Array.isArray(interpolation) ? interpolation : [interpolation]);\n  flattenStyleList.forEach(originStyle => {\n    // Only root level can use raw string\n    const style = typeof originStyle === 'string' && !root ? {} : originStyle;\n    if (typeof style === 'string') {\n      styleStr += `${style}\\n`;\n    } else if (style._keyframe) {\n      // Keyframe\n      parseKeyframes(style);\n    } else {\n      const mergedStyle = transformers.reduce((prev, trans) => trans?.visit?.(prev) || prev, style);\n\n      // Normal CSSObject\n      Object.keys(mergedStyle).forEach(key => {\n        const value = mergedStyle[key];\n        if (typeof value === 'object' && value && (key !== 'animationName' || !value._keyframe) && !isCompoundCSSProperty(value)) {\n          let subInjectHash = false;\n\n          // 当成嵌套对象来处理\n          let mergedKey = key.trim();\n          // Whether treat child as root. In most case it is false.\n          let nextRoot = false;\n\n          // 拆分多个选择器\n          if ((root || injectHash) && hashId) {\n            if (mergedKey.startsWith('@')) {\n              // 略过媒体查询，交给子节点继续插入 hashId\n              subInjectHash = true;\n            } else if (mergedKey === '&') {\n              // 抹掉 root selector 上的单个 &\n              mergedKey = injectSelectorHash('', hashId, hashPriority);\n            } else {\n              // 注入 hashId\n              mergedKey = injectSelectorHash(key, hashId, hashPriority);\n            }\n          } else if (root && !hashId && (mergedKey === '&' || mergedKey === '')) {\n            // In case of `{ '&': { a: { color: 'red' } } }` or `{ '': { a: { color: 'red' } } }` without hashId,\n            // we will get `&{a:{color:red;}}` or `{a:{color:red;}}` string for stylis to compile.\n            // But it does not conform to stylis syntax,\n            // and finally we will get `{color:red;}` as css, which is wrong.\n            // So we need to remove key in root, and treat child `{ a: { color: 'red' } }` as root.\n            mergedKey = '';\n            nextRoot = true;\n          }\n          const [parsedStr, childEffectStyle] = parseStyle(value, config, {\n            root: nextRoot,\n            injectHash: subInjectHash,\n            parentSelectors: [...parentSelectors, mergedKey]\n          });\n          effectStyle = {\n            ...effectStyle,\n            ...childEffectStyle\n          };\n          styleStr += `${mergedKey}${parsedStr}`;\n        } else {\n          function appendStyle(cssKey, cssValue) {\n            if (process.env.NODE_ENV !== 'production' && (typeof value !== 'object' || !value?.[SKIP_CHECK])) {\n              [contentQuotesLinter, hashedAnimationLinter, ...linters].forEach(linter => linter(cssKey, cssValue, {\n                path,\n                hashId,\n                parentSelectors\n              }));\n            }\n\n            // 如果是样式则直接插入\n            const styleName = cssKey.replace(/[A-Z]/g, match => `-${match.toLowerCase()}`);\n\n            // Auto suffix with px\n            let formatValue = cssValue;\n            if (!unitless[cssKey] && typeof formatValue === 'number' && formatValue !== 0) {\n              formatValue = `${formatValue}px`;\n            }\n\n            // handle animationName & Keyframe value\n            if (cssKey === 'animationName' && cssValue?._keyframe) {\n              parseKeyframes(cssValue);\n              formatValue = cssValue.getName(hashId);\n            }\n            styleStr += `${styleName}:${formatValue};`;\n          }\n          const actualValue = value?.value ?? value;\n          if (typeof value === 'object' && value?.[MULTI_VALUE] && Array.isArray(actualValue)) {\n            actualValue.forEach(item => {\n              appendStyle(key, item);\n            });\n          } else {\n            if (isNonNullable(actualValue)) {\n              appendStyle(key, actualValue);\n            }\n          }\n        }\n      });\n    }\n  });\n  if (!root) {\n    styleStr = `{${styleStr}}`;\n  } else if (layer) {\n    // fixme: https://github.com/thysultan/stylis/pull/339\n    if (styleStr) {\n      styleStr = `@layer ${layer.name} {${styleStr}}`;\n    }\n    if (layer.dependencies) {\n      effectStyle[`@layer ${layer.name}`] = layer.dependencies.map(deps => `@layer ${deps}, ${layer.name};`).join('\\n');\n    }\n  }\n  return [styleStr, effectStyle];\n};\n\n// ============================================================================\n// ==                                Register                                ==\n// ============================================================================\nexport function uniqueHash(path, styleStr) {\n  return hash(`${path.join('%')}${styleStr}`);\n}\nexport const STYLE_PREFIX = 'style';\n/**\n * Register a style to the global style sheet.\n */\nexport default function useStyleRegister(info, styleFn) {\n  const {\n    path,\n    hashId,\n    layer,\n    nonce,\n    clientOnly,\n    order = 0\n  } = info;\n  const {\n    mock,\n    hashPriority,\n    container,\n    transformers,\n    linters,\n    cache,\n    layer: enableLayer,\n    autoPrefix\n  } = React.useContext(StyleContext);\n  const fullPath = [hashId || ''];\n  if (enableLayer) {\n    fullPath.push('layer');\n  }\n  fullPath.push(...path);\n\n  // Check if need insert style\n  let isMergedClientSide = isClientSide;\n  if (process.env.NODE_ENV !== 'production' && mock !== undefined) {\n    isMergedClientSide = mock === 'client';\n  }\n  useGlobalCache(STYLE_PREFIX, fullPath,\n  // Create cache if needed\n  () => {\n    const cachePath = fullPath.join('|');\n\n    // Get style from SSR inline style directly\n    if (existPath(cachePath)) {\n      const [inlineCacheStyleStr, styleHash] = getStyleAndHash(cachePath);\n      if (inlineCacheStyleStr) {\n        return [inlineCacheStyleStr, styleHash, {}, clientOnly, order];\n      }\n    }\n\n    // Generate style\n    const styleObj = styleFn();\n    const [parsedStyle, effectStyle] = parseStyle(styleObj, {\n      hashId,\n      hashPriority,\n      layer: enableLayer ? layer : undefined,\n      path: path.join('-'),\n      transformers,\n      linters\n    });\n    const styleStr = normalizeStyle(parsedStyle, autoPrefix || false);\n    const styleId = uniqueHash(fullPath, styleStr);\n    return [styleStr, styleId, effectStyle, clientOnly, order];\n  },\n  // Remove cache if no need\n  (cacheValue, fromHMR) => {\n    const [, styleId] = cacheValue;\n    if (fromHMR && isClientSide) {\n      removeCSS(styleId, {\n        mark: ATTR_MARK,\n        attachTo: container\n      });\n    }\n  },\n  // Effect: Inject style here\n  cacheValue => {\n    const [styleStr, styleId, effectStyle,, priority] = cacheValue;\n    if (isMergedClientSide && styleStr !== CSS_FILE_STYLE) {\n      let mergedCSSConfig = {\n        mark: ATTR_MARK,\n        prepend: enableLayer ? false : 'queue',\n        attachTo: container,\n        priority\n      };\n      mergedCSSConfig = injectCSPNonce(mergedCSSConfig, nonce);\n\n      // ================= Split Effect Style =================\n      // We will split effectStyle here since @layer should be at the top level\n      const effectLayerKeys = [];\n      const effectRestKeys = [];\n      Object.keys(effectStyle).forEach(key => {\n        if (key.startsWith('@layer')) {\n          effectLayerKeys.push(key);\n        } else {\n          effectRestKeys.push(key);\n        }\n      });\n\n      // ================= Inject Layer Style =================\n      // Inject layer style\n      effectLayerKeys.forEach(effectKey => {\n        updateCSS(normalizeStyle(effectStyle[effectKey], autoPrefix || false), `_layer-${effectKey}`, {\n          ...mergedCSSConfig,\n          prepend: true\n        });\n      });\n\n      // ==================== Inject Style ====================\n      // Inject style\n      const style = updateCSS(styleStr, styleId, mergedCSSConfig);\n      style[CSS_IN_JS_INSTANCE] = cache.instanceId;\n\n      // Debug usage. Dev only\n      if (process.env.NODE_ENV !== 'production') {\n        style.setAttribute(ATTR_CACHE_PATH, fullPath.join('|'));\n      }\n\n      // ================ Inject Effect Style =================\n      // Inject client side effect style\n      effectRestKeys.forEach(effectKey => {\n        updateCSS(normalizeStyle(effectStyle[effectKey], autoPrefix || false), `_effect-${effectKey}`, mergedCSSConfig);\n      });\n    }\n  });\n}\nexport const extract = (cache, effectStyles, options) => {\n  const [styleStr, styleId, effectStyle, clientOnly, order] = cache;\n  const {\n    plain,\n    autoPrefix\n  } = options || {};\n\n  // Skip client only style\n  if (clientOnly) {\n    return null;\n  }\n  let keyStyleText = styleStr;\n\n  // ====================== Share ======================\n  // Used for @rc-component/util\n  const sharedAttrs = {\n    'data-rc-order': 'prependQueue',\n    'data-rc-priority': `${order}`\n  };\n\n  // ====================== Style ======================\n  keyStyleText = toStyleStr(styleStr, undefined, styleId, sharedAttrs, plain);\n\n  // =============== Create effect style ===============\n  if (effectStyle) {\n    Object.keys(effectStyle).forEach(effectKey => {\n      // Effect style can be reused\n      if (!effectStyles[effectKey]) {\n        effectStyles[effectKey] = true;\n        const effectStyleStr = normalizeStyle(effectStyle[effectKey], autoPrefix || false);\n        const effectStyleHTML = toStyleStr(effectStyleStr, undefined, `_effect-${effectKey}`, sharedAttrs, plain);\n        if (effectKey.startsWith('@layer')) {\n          keyStyleText = effectStyleHTML + keyStyleText;\n        } else {\n          keyStyleText += effectStyleHTML;\n        }\n      }\n    });\n  }\n  return [order, styleId, keyStyleText];\n};","import { removeCSS, updateCSS } from \"@rc-component/util/es/Dom/dynamicCSS\";\nimport { useContext } from 'react';\nimport StyleContext, { ATTR_MARK, ATTR_TOKEN, CSS_IN_JS_INSTANCE } from \"../StyleContext\";\nimport { injectCSPNonce, isClientSide, toStyleStr } from \"../util\";\nimport { transformToken } from \"../util/css-variables\";\nimport useGlobalCache from \"./useGlobalCache\";\nimport { uniqueHash } from \"./useStyleRegister\";\nexport const CSS_VAR_PREFIX = 'cssVar';\nconst useCSSVarRegister = (config, fn) => {\n  const {\n    key,\n    prefix,\n    unitless,\n    ignore,\n    token,\n    hashId,\n    scope,\n    nonce\n  } = config;\n  const {\n    cache: {\n      instanceId\n    },\n    container,\n    hashPriority\n  } = useContext(StyleContext);\n  const {\n    _tokenKey: tokenKey\n  } = token;\n  const scopeKey = Array.isArray(scope) ? scope.join('@@') : scope;\n  const stylePath = [...config.path, key, scopeKey, tokenKey];\n  const cache = useGlobalCache(CSS_VAR_PREFIX, stylePath, () => {\n    const originToken = fn();\n    const [mergedToken, cssVarsStr] = transformToken(originToken, key, {\n      prefix,\n      unitless,\n      ignore,\n      scope,\n      hashPriority,\n      hashCls: hashId\n    });\n    const styleId = uniqueHash(stylePath, cssVarsStr);\n    return [mergedToken, cssVarsStr, styleId, key];\n  }, ([,, styleId]) => {\n    if (isClientSide) {\n      removeCSS(styleId, {\n        mark: ATTR_MARK,\n        attachTo: container\n      });\n    }\n  }, ([, cssVarsStr, styleId]) => {\n    if (!cssVarsStr) {\n      return;\n    }\n    let mergedCSSConfig = {\n      mark: ATTR_MARK,\n      prepend: 'queue',\n      attachTo: container,\n      priority: -999\n    };\n    mergedCSSConfig = injectCSPNonce(mergedCSSConfig, nonce);\n    const style = updateCSS(cssVarsStr, styleId, mergedCSSConfig);\n    style[CSS_IN_JS_INSTANCE] = instanceId;\n\n    // Used for `useCacheToken` to remove on batch when token removed\n    style.setAttribute(ATTR_TOKEN, key);\n  });\n  return cache;\n};\nexport const extract = (cache, effectStyles, options) => {\n  const [, styleStr, styleId, cssVarKey] = cache;\n  const {\n    plain\n  } = options || {};\n  if (!styleStr) {\n    return null;\n  }\n  const order = -999;\n\n  // ====================== Style ======================\n  // Used for @rc-component/util\n  const sharedAttrs = {\n    'data-rc-order': 'prependQueue',\n    'data-rc-priority': `${order}`\n  };\n  const styleText = toStyleStr(styleStr, cssVarKey, styleId, sharedAttrs, plain);\n  return [order, styleId, styleText];\n};\nexport default useCSSVarRegister;","class Keyframe {\n  name;\n  style;\n  constructor(name, style) {\n    this.name = name;\n    this.style = style;\n  }\n  getName(hashId = '') {\n    return hashId ? `${hashId}-${this.name}` : this.name;\n  }\n  _keyframe = true;\n}\nexport default Keyframe;","function splitValues(value) {\n  if (typeof value === 'number') {\n    return [[value], false];\n  }\n  const rawStyle = String(value).trim();\n  const importantCells = rawStyle.match(/(.*)(!important)/);\n  const splitStyle = (importantCells ? importantCells[1] : rawStyle).trim().split(/\\s+/);\n\n  // Combine styles split in brackets, like `calc(1px + 2px)`\n  let temp = [];\n  let brackets = 0;\n  return [splitStyle.reduce((list, item) => {\n    if (item.includes('(') || item.includes(')')) {\n      const left = item.split('(').length - 1;\n      const right = item.split(')').length - 1;\n      brackets += left - right;\n    }\n    if (brackets >= 0) temp.push(item);\n    if (brackets === 0) {\n      list.push(temp.join(' '));\n      temp = [];\n    }\n    return list;\n  }, []), !!importantCells];\n}\nfunction noSplit(list) {\n  list.notSplit = true;\n  return list;\n}\nconst keyMap = {\n  // Inset\n  inset: ['top', 'right', 'bottom', 'left'],\n  insetBlock: ['top', 'bottom'],\n  insetBlockStart: ['top'],\n  insetBlockEnd: ['bottom'],\n  insetInline: ['left', 'right'],\n  insetInlineStart: ['left'],\n  insetInlineEnd: ['right'],\n  // Margin\n  marginBlock: ['marginTop', 'marginBottom'],\n  marginBlockStart: ['marginTop'],\n  marginBlockEnd: ['marginBottom'],\n  marginInline: ['marginLeft', 'marginRight'],\n  marginInlineStart: ['marginLeft'],\n  marginInlineEnd: ['marginRight'],\n  // Padding\n  paddingBlock: ['paddingTop', 'paddingBottom'],\n  paddingBlockStart: ['paddingTop'],\n  paddingBlockEnd: ['paddingBottom'],\n  paddingInline: ['paddingLeft', 'paddingRight'],\n  paddingInlineStart: ['paddingLeft'],\n  paddingInlineEnd: ['paddingRight'],\n  // Border\n  borderBlock: noSplit(['borderTop', 'borderBottom']),\n  borderBlockStart: noSplit(['borderTop']),\n  borderBlockEnd: noSplit(['borderBottom']),\n  borderInline: noSplit(['borderLeft', 'borderRight']),\n  borderInlineStart: noSplit(['borderLeft']),\n  borderInlineEnd: noSplit(['borderRight']),\n  // Border width\n  borderBlockWidth: ['borderTopWidth', 'borderBottomWidth'],\n  borderBlockStartWidth: ['borderTopWidth'],\n  borderBlockEndWidth: ['borderBottomWidth'],\n  borderInlineWidth: ['borderLeftWidth', 'borderRightWidth'],\n  borderInlineStartWidth: ['borderLeftWidth'],\n  borderInlineEndWidth: ['borderRightWidth'],\n  // Border style\n  borderBlockStyle: ['borderTopStyle', 'borderBottomStyle'],\n  borderBlockStartStyle: ['borderTopStyle'],\n  borderBlockEndStyle: ['borderBottomStyle'],\n  borderInlineStyle: ['borderLeftStyle', 'borderRightStyle'],\n  borderInlineStartStyle: ['borderLeftStyle'],\n  borderInlineEndStyle: ['borderRightStyle'],\n  // Border color\n  borderBlockColor: ['borderTopColor', 'borderBottomColor'],\n  borderBlockStartColor: ['borderTopColor'],\n  borderBlockEndColor: ['borderBottomColor'],\n  borderInlineColor: ['borderLeftColor', 'borderRightColor'],\n  borderInlineStartColor: ['borderLeftColor'],\n  borderInlineEndColor: ['borderRightColor'],\n  // Border radius\n  borderStartStartRadius: ['borderTopLeftRadius'],\n  borderStartEndRadius: ['borderTopRightRadius'],\n  borderEndStartRadius: ['borderBottomLeftRadius'],\n  borderEndEndRadius: ['borderBottomRightRadius']\n};\nfunction wrapImportantAndSkipCheck(value, important) {\n  let parsedValue = value;\n  if (important) {\n    parsedValue = `${parsedValue} !important`;\n  }\n  return {\n    _skip_check_: true,\n    value: parsedValue\n  };\n}\n\n/**\n * Convert css logical properties to legacy properties.\n * Such as: `margin-block-start` to `margin-top`.\n * Transform list:\n * - inset\n * - margin\n * - padding\n * - border\n */\nconst transform = {\n  visit: cssObj => {\n    const clone = {};\n    Object.keys(cssObj).forEach(key => {\n      const value = cssObj[key];\n      const matchValue = keyMap[key];\n      if (matchValue && (typeof value === 'number' || typeof value === 'string')) {\n        const [values, important] = splitValues(value);\n        if (matchValue.length && matchValue.notSplit) {\n          // not split means always give same value like border\n          matchValue.forEach(matchKey => {\n            clone[matchKey] = wrapImportantAndSkipCheck(value, important);\n          });\n        } else if (matchValue.length === 1) {\n          // Handle like `marginBlockStart` => `marginTop`\n          clone[matchValue[0]] = wrapImportantAndSkipCheck(values[0], important);\n        } else if (matchValue.length === 2) {\n          // Handle like `marginBlock` => `marginTop` & `marginBottom`\n          matchValue.forEach((matchKey, index) => {\n            clone[matchKey] = wrapImportantAndSkipCheck(values[index] ?? values[0], important);\n          });\n        } else if (matchValue.length === 4) {\n          // Handle like `inset` => `top` & `right` & `bottom` & `left`\n          matchValue.forEach((matchKey, index) => {\n            clone[matchKey] = wrapImportantAndSkipCheck(values[index] ?? values[index - 2] ?? values[0], important);\n          });\n        } else {\n          clone[key] = value;\n        }\n      } else {\n        clone[key] = value;\n      }\n    });\n    return clone;\n  }\n};\nexport default transform;","export default '6.6.4';","\"use client\";\n\n// @ts-ignore\nimport version from './version';\nexport default version;","export const defaultPresetColors = {\n  blue: '#1677FF',\n  purple: '#722ED1',\n  cyan: '#13C2C2',\n  green: '#52C41A',\n  magenta: '#EB2F96',\n  /**\n   * @deprecated Use magenta instead\n   */\n  pink: '#EB2F96',\n  red: '#F5222D',\n  orange: '#FA8C16',\n  yellow: '#FADB14',\n  volcano: '#FA541C',\n  geekblue: '#2F54EB',\n  gold: '#FAAD14',\n  lime: '#A0D911'\n};\nconst seedToken = {\n  // preset color palettes\n  ...defaultPresetColors,\n  // Color\n  colorPrimary: '#1677ff',\n  colorSuccess: '#52c41a',\n  colorWarning: '#faad14',\n  colorError: '#ff4d4f',\n  colorInfo: '#1677ff',\n  colorLink: '',\n  colorTextBase: '',\n  colorBgBase: '',\n  // Font\n  fontFamily: `-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial,\n'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',\n'Noto Color Emoji'`,\n  fontFamilyCode: `'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace`,\n  fontSize: 14,\n  // Line\n  lineWidth: 1,\n  lineType: 'solid',\n  // Motion\n  motionUnit: 0.1,\n  motionBase: 0,\n  motionEaseOutCirc: 'cubic-bezier(0.08, 0.82, 0.17, 1)',\n  motionEaseInOutCirc: 'cubic-bezier(0.78, 0.14, 0.15, 0.86)',\n  motionEaseOut: 'cubic-bezier(0.215, 0.61, 0.355, 1)',\n  motionEaseInOut: 'cubic-bezier(0.645, 0.045, 0.355, 1)',\n  motionEaseOutBack: 'cubic-bezier(0.12, 0.4, 0.29, 1.46)',\n  motionEaseInBack: 'cubic-bezier(0.71, -0.46, 0.88, 0.6)',\n  motionEaseInQuint: 'cubic-bezier(0.755, 0.05, 0.855, 0.06)',\n  motionEaseOutQuint: 'cubic-bezier(0.23, 1, 0.32, 1)',\n  // Radius\n  borderRadius: 6,\n  // Size\n  sizeUnit: 4,\n  sizeStep: 4,\n  sizePopupArrow: 16,\n  // Control Base\n  controlHeight: 32,\n  // zIndex\n  zIndexBase: 0,\n  zIndexPopupBase: 1000,\n  // Image\n  opacityImage: 1,\n  // Wireframe\n  wireframe: false,\n  // Focus Outline\n  focusOutline: true,\n  // Motion\n  motion: true\n};\nexport default seedToken;","// 36 Hex to reduce the size of the file\nexport default {\n  aliceblue: '9ehhb',\n  antiquewhite: '9sgk7',\n  aqua: '1ekf',\n  aquamarine: '4zsno',\n  azure: '9eiv3',\n  beige: '9lhp8',\n  bisque: '9zg04',\n  black: '0',\n  blanchedalmond: '9zhe5',\n  blue: '73',\n  blueviolet: '5e31e',\n  brown: '6g016',\n  burlywood: '8ouiv',\n  cadetblue: '3qba8',\n  chartreuse: '4zshs',\n  chocolate: '87k0u',\n  coral: '9yvyo',\n  cornflowerblue: '3xael',\n  cornsilk: '9zjz0',\n  crimson: '8l4xo',\n  cyan: '1ekf',\n  darkblue: '3v',\n  darkcyan: 'rkb',\n  darkgoldenrod: '776yz',\n  darkgray: '6mbhl',\n  darkgreen: 'jr4',\n  darkgrey: '6mbhl',\n  darkkhaki: '7ehkb',\n  darkmagenta: '5f91n',\n  darkolivegreen: '3bzfz',\n  darkorange: '9yygw',\n  darkorchid: '5z6x8',\n  darkred: '5f8xs',\n  darksalmon: '9441m',\n  darkseagreen: '5lwgf',\n  darkslateblue: '2th1n',\n  darkslategray: '1ugcv',\n  darkslategrey: '1ugcv',\n  darkturquoise: '14up',\n  darkviolet: '5rw7n',\n  deeppink: '9yavn',\n  deepskyblue: '11xb',\n  dimgray: '442g9',\n  dimgrey: '442g9',\n  dodgerblue: '16xof',\n  firebrick: '6y7tu',\n  floralwhite: '9zkds',\n  forestgreen: '1cisi',\n  fuchsia: '9y70f',\n  gainsboro: '8m8kc',\n  ghostwhite: '9pq0v',\n  goldenrod: '8j4f4',\n  gold: '9zda8',\n  gray: '50i2o',\n  green: 'pa8',\n  greenyellow: '6senj',\n  grey: '50i2o',\n  honeydew: '9eiuo',\n  hotpink: '9yrp0',\n  indianred: '80gnw',\n  indigo: '2xcoy',\n  ivory: '9zldc',\n  khaki: '9edu4',\n  lavenderblush: '9ziet',\n  lavender: '90c8q',\n  lawngreen: '4vk74',\n  lemonchiffon: '9zkct',\n  lightblue: '6s73a',\n  lightcoral: '9dtog',\n  lightcyan: '8s1rz',\n  lightgoldenrodyellow: '9sjiq',\n  lightgray: '89jo3',\n  lightgreen: '5nkwg',\n  lightgrey: '89jo3',\n  lightpink: '9z6wx',\n  lightsalmon: '9z2ii',\n  lightseagreen: '19xgq',\n  lightskyblue: '5arju',\n  lightslategray: '4nwk9',\n  lightslategrey: '4nwk9',\n  lightsteelblue: '6wau6',\n  lightyellow: '9zlcw',\n  lime: '1edc',\n  limegreen: '1zcxe',\n  linen: '9shk6',\n  magenta: '9y70f',\n  maroon: '4zsow',\n  mediumaquamarine: '40eju',\n  mediumblue: '5p',\n  mediumorchid: '79qkz',\n  mediumpurple: '5r3rv',\n  mediumseagreen: '2d9ip',\n  mediumslateblue: '4tcku',\n  mediumspringgreen: '1di2',\n  mediumturquoise: '2uabw',\n  mediumvioletred: '7rn9h',\n  midnightblue: 'z980',\n  mintcream: '9ljp6',\n  mistyrose: '9zg0x',\n  moccasin: '9zfzp',\n  navajowhite: '9zest',\n  navy: '3k',\n  oldlace: '9wq92',\n  olive: '50hz4',\n  olivedrab: '472ub',\n  orange: '9z3eo',\n  orangered: '9ykg0',\n  orchid: '8iu3a',\n  palegoldenrod: '9bl4a',\n  palegreen: '5yw0o',\n  paleturquoise: '6v4ku',\n  palevioletred: '8k8lv',\n  papayawhip: '9zi6t',\n  peachpuff: '9ze0p',\n  peru: '80oqn',\n  pink: '9z8wb',\n  plum: '8nba5',\n  powderblue: '6wgdi',\n  purple: '4zssg',\n  rebeccapurple: '3zk49',\n  red: '9y6tc',\n  rosybrown: '7cv4f',\n  royalblue: '2jvtt',\n  saddlebrown: '5fmkz',\n  salmon: '9rvci',\n  sandybrown: '9jn1c',\n  seagreen: '1tdnb',\n  seashell: '9zje6',\n  sienna: '6973h',\n  silver: '7ir40',\n  skyblue: '5arjf',\n  slateblue: '45e4t',\n  slategray: '4e100',\n  slategrey: '4e100',\n  snow: '9zke2',\n  springgreen: '1egv',\n  steelblue: '2r1kk',\n  tan: '87yx8',\n  teal: 'pds',\n  thistle: '8ggk8',\n  tomato: '9yqfb',\n  turquoise: '2j4r4',\n  violet: '9b10u',\n  wheat: '9ld4j',\n  white: '9zldr',\n  whitesmoke: '9lhpx',\n  yellow: '9zl6o',\n  yellowgreen: '61fzm'\n};","import presetColors from \"./presetColors\";\nconst round = Math.round;\n\n/**\n * Support format, alpha unit will check the % mark:\n * - rgba(102, 204, 255, .5)      -> [102, 204, 255, 0.5]\n * - rgb(102 204 255 / .5)        -> [102, 204, 255, 0.5]\n * - rgb(100%, 50%, 0% / 50%)     -> [255, 128, 0, 0.5]\n * - hsl(270, 60, 40, .5)         -> [270, 60, 40, 0.5]\n * - hsl(270deg 60% 40% / 50%)   -> [270, 60, 40, 0.5]\n *\n * When `base` is provided, the percentage value will be divided by `base`.\n */\nfunction splitColorStr(str, parseNum) {\n  const match = str\n  // Remove str before `(`\n  .replace(/^[^(]*\\((.*)/, '$1')\n  // Remove str after `)`\n  .replace(/\\).*/, '').match(/\\d*\\.?\\d+%?/g) || [];\n  const numList = match.map(item => parseFloat(item));\n  for (let i = 0; i < 3; i += 1) {\n    numList[i] = parseNum(numList[i] || 0, match[i] || '', i);\n  }\n\n  // For alpha. 50% should be 0.5\n  if (match[3]) {\n    numList[3] = match[3].includes('%') ? numList[3] / 100 : numList[3];\n  } else {\n    // By default, alpha is 1\n    numList[3] = 1;\n  }\n  return numList;\n}\nconst parseHSVorHSL = (num, _, index) => index === 0 ? num : num / 100;\n\n/** round and limit number to integer between 0-255 */\nfunction limitRange(value, max) {\n  const mergedMax = max || 255;\n  if (value > mergedMax) {\n    return mergedMax;\n  }\n  if (value < 0) {\n    return 0;\n  }\n  return value;\n}\nexport class FastColor {\n  /**\n   * All FastColor objects are valid. So isValid is always true. This property is kept to be compatible with TinyColor.\n   */\n  isValid = true;\n\n  /**\n   * Red, R in RGB\n   */\n  r = 0;\n\n  /**\n   * Green, G in RGB\n   */\n  g = 0;\n\n  /**\n   * Blue, B in RGB\n   */\n  b = 0;\n\n  /**\n   * Alpha/Opacity, A in RGBA/HSLA\n   */\n  a = 1;\n\n  // HSV privates\n  _h;\n  _hsl_s;\n  _hsv_s;\n  _l;\n  _v;\n\n  // intermediate variables to calculate HSL/HSV\n  _max;\n  _min;\n  _brightness;\n  constructor(input) {\n    /**\n     * Always check 3 char in the object to determine the format.\n     * We not use function in check to save bundle size.\n     * e.g. 'rgb' -> { r: 0, g: 0, b: 0 }.\n     */\n    function matchFormat(str) {\n      return str[0] in input && str[1] in input && str[2] in input;\n    }\n    if (!input) {\n      // Do nothing since already initialized\n    } else if (typeof input === 'string') {\n      const trimStr = input.trim();\n      function matchPrefix(prefix) {\n        return trimStr.startsWith(prefix);\n      }\n      if (/^#?[A-F\\d]{3,8}$/i.test(trimStr)) {\n        this.fromHexString(trimStr);\n      } else if (matchPrefix('rgb')) {\n        this.fromRgbString(trimStr);\n      } else if (matchPrefix('hsl')) {\n        this.fromHslString(trimStr);\n      } else if (matchPrefix('hsv') || matchPrefix('hsb')) {\n        this.fromHsvString(trimStr);\n      } else {\n        // From preset color\n        const presetColor = presetColors[trimStr.toLowerCase()];\n        if (presetColor) {\n          this.fromHexString(\n          // Convert 36 hex to 16 hex\n          parseInt(presetColor, 36).toString(16).padStart(6, '0'));\n        }\n      }\n    } else if (input instanceof FastColor) {\n      this.r = input.r;\n      this.g = input.g;\n      this.b = input.b;\n      this.a = input.a;\n      this._h = input._h;\n      this._hsl_s = input._hsl_s;\n      this._hsv_s = input._hsv_s;\n      this._l = input._l;\n      this._v = input._v;\n    } else if (matchFormat('rgb')) {\n      this.r = limitRange(input.r);\n      this.g = limitRange(input.g);\n      this.b = limitRange(input.b);\n      this.a = typeof input.a === 'number' ? limitRange(input.a, 1) : 1;\n    } else if (matchFormat('hsl')) {\n      this.fromHsl(input);\n    } else if (matchFormat('hsv')) {\n      this.fromHsv(input);\n    } else {\n      throw new Error('@ant-design/fast-color: unsupported input ' + JSON.stringify(input));\n    }\n  }\n\n  // ======================= Setter =======================\n\n  setR(value) {\n    return this._sc('r', value);\n  }\n  setG(value) {\n    return this._sc('g', value);\n  }\n  setB(value) {\n    return this._sc('b', value);\n  }\n  setA(value) {\n    return this._sc('a', value, 1);\n  }\n  setHue(value) {\n    const hsv = this.toHsv();\n    hsv.h = value;\n    return this._c(hsv);\n  }\n\n  // ======================= Getter =======================\n  /**\n   * Returns the perceived luminance of a color, from 0-1.\n   * @see http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n   */\n  getLuminance() {\n    function adjustGamma(raw) {\n      const val = raw / 255;\n      return val <= 0.03928 ? val / 12.92 : Math.pow((val + 0.055) / 1.055, 2.4);\n    }\n    const R = adjustGamma(this.r);\n    const G = adjustGamma(this.g);\n    const B = adjustGamma(this.b);\n    return 0.2126 * R + 0.7152 * G + 0.0722 * B;\n  }\n  getHue() {\n    if (typeof this._h === 'undefined') {\n      const delta = this.getMax() - this.getMin();\n      if (delta === 0) {\n        this._h = 0;\n      } else {\n        this._h = round(60 * (this.r === this.getMax() ? (this.g - this.b) / delta + (this.g < this.b ? 6 : 0) : this.g === this.getMax() ? (this.b - this.r) / delta + 2 : (this.r - this.g) / delta + 4));\n      }\n    }\n    return this._h;\n  }\n\n  /**\n   * @deprecated should use getHSVSaturation or getHSLSaturation instead\n   */\n  getSaturation() {\n    return this.getHSVSaturation();\n  }\n  getHSVSaturation() {\n    if (typeof this._hsv_s === 'undefined') {\n      const delta = this.getMax() - this.getMin();\n      if (delta === 0) {\n        this._hsv_s = 0;\n      } else {\n        this._hsv_s = delta / this.getMax();\n      }\n    }\n    return this._hsv_s;\n  }\n  getHSLSaturation() {\n    if (typeof this._hsl_s === 'undefined') {\n      const delta = this.getMax() - this.getMin();\n      if (delta === 0) {\n        this._hsl_s = 0;\n      } else {\n        const l = this.getLightness();\n        this._hsl_s = delta / 255 / (1 - Math.abs(2 * l - 1));\n      }\n    }\n    return this._hsl_s;\n  }\n  getLightness() {\n    if (typeof this._l === 'undefined') {\n      this._l = (this.getMax() + this.getMin()) / 510;\n    }\n    return this._l;\n  }\n  getValue() {\n    if (typeof this._v === 'undefined') {\n      this._v = this.getMax() / 255;\n    }\n    return this._v;\n  }\n\n  /**\n   * Returns the perceived brightness of the color, from 0-255.\n   * Note: this is not the b of HSB\n   * @see http://www.w3.org/TR/AERT#color-contrast\n   */\n  getBrightness() {\n    if (typeof this._brightness === 'undefined') {\n      this._brightness = (this.r * 299 + this.g * 587 + this.b * 114) / 1000;\n    }\n    return this._brightness;\n  }\n\n  // ======================== Func ========================\n\n  darken(amount = 10) {\n    const h = this.getHue();\n    const s = this.getSaturation();\n    let l = this.getLightness() - amount / 100;\n    if (l < 0) {\n      l = 0;\n    }\n    return this._c({\n      h,\n      s,\n      l,\n      a: this.a\n    });\n  }\n  lighten(amount = 10) {\n    const h = this.getHue();\n    const s = this.getSaturation();\n    let l = this.getLightness() + amount / 100;\n    if (l > 1) {\n      l = 1;\n    }\n    return this._c({\n      h,\n      s,\n      l,\n      a: this.a\n    });\n  }\n\n  /**\n   * Mix the current color a given amount with another color, from 0 to 100.\n   * 0 means no mixing (return current color).\n   */\n  mix(input, amount = 50) {\n    const color = this._c(input);\n    const p = amount / 100;\n    const calc = key => (color[key] - this[key]) * p + this[key];\n    const rgba = {\n      r: round(calc('r')),\n      g: round(calc('g')),\n      b: round(calc('b')),\n      a: round(calc('a') * 100) / 100\n    };\n    return this._c(rgba);\n  }\n\n  /**\n   * Mix the color with pure white, from 0 to 100.\n   * Providing 0 will do nothing, providing 100 will always return white.\n   */\n  tint(amount = 10) {\n    return this.mix({\n      r: 255,\n      g: 255,\n      b: 255,\n      a: 1\n    }, amount);\n  }\n\n  /**\n   * Mix the color with pure black, from 0 to 100.\n   * Providing 0 will do nothing, providing 100 will always return black.\n   */\n  shade(amount = 10) {\n    return this.mix({\n      r: 0,\n      g: 0,\n      b: 0,\n      a: 1\n    }, amount);\n  }\n  onBackground(background) {\n    const bg = this._c(background);\n    const alpha = this.a + bg.a * (1 - this.a);\n    const calc = key => {\n      return round((this[key] * this.a + bg[key] * bg.a * (1 - this.a)) / alpha);\n    };\n    return this._c({\n      r: calc('r'),\n      g: calc('g'),\n      b: calc('b'),\n      a: alpha\n    });\n  }\n\n  // ======================= Status =======================\n  isDark() {\n    return this.getBrightness() < 128;\n  }\n  isLight() {\n    return this.getBrightness() >= 128;\n  }\n\n  // ======================== MISC ========================\n  equals(other) {\n    return this.r === other.r && this.g === other.g && this.b === other.b && this.a === other.a;\n  }\n  clone() {\n    return this._c(this);\n  }\n\n  // ======================= Format =======================\n  toHexString() {\n    let hex = '#';\n    const rHex = (this.r || 0).toString(16);\n    hex += rHex.length === 2 ? rHex : '0' + rHex;\n    const gHex = (this.g || 0).toString(16);\n    hex += gHex.length === 2 ? gHex : '0' + gHex;\n    const bHex = (this.b || 0).toString(16);\n    hex += bHex.length === 2 ? bHex : '0' + bHex;\n    if (typeof this.a === 'number' && this.a >= 0 && this.a < 1) {\n      const aHex = round(this.a * 255).toString(16);\n      hex += aHex.length === 2 ? aHex : '0' + aHex;\n    }\n    return hex;\n  }\n\n  /** CSS support color pattern */\n  toHsl() {\n    return {\n      h: this.getHue(),\n      s: this.getHSLSaturation(),\n      l: this.getLightness(),\n      a: this.a\n    };\n  }\n\n  /** CSS support color pattern */\n  toHslString() {\n    const h = this.getHue();\n    const s = round(this.getHSLSaturation() * 100);\n    const l = round(this.getLightness() * 100);\n    return this.a !== 1 ? `hsla(${h},${s}%,${l}%,${this.a})` : `hsl(${h},${s}%,${l}%)`;\n  }\n\n  /** Same as toHsb */\n  toHsv() {\n    return {\n      h: this.getHue(),\n      s: this.getHSVSaturation(),\n      v: this.getValue(),\n      a: this.a\n    };\n  }\n  toRgb() {\n    return {\n      r: this.r,\n      g: this.g,\n      b: this.b,\n      a: this.a\n    };\n  }\n  toRgbString() {\n    return this.a !== 1 ? `rgba(${this.r},${this.g},${this.b},${this.a})` : `rgb(${this.r},${this.g},${this.b})`;\n  }\n  toString() {\n    return this.toRgbString();\n  }\n\n  // ====================== Privates ======================\n  /** Return a new FastColor object with one channel changed */\n  _sc(rgb, value, max) {\n    const clone = this.clone();\n    clone[rgb] = limitRange(value, max);\n    return clone;\n  }\n  _c(input) {\n    return new this.constructor(input);\n  }\n  getMax() {\n    if (typeof this._max === 'undefined') {\n      this._max = Math.max(this.r, this.g, this.b);\n    }\n    return this._max;\n  }\n  getMin() {\n    if (typeof this._min === 'undefined') {\n      this._min = Math.min(this.r, this.g, this.b);\n    }\n    return this._min;\n  }\n  fromHexString(trimStr) {\n    const withoutPrefix = trimStr.replace('#', '');\n    function connectNum(index1, index2) {\n      return parseInt(withoutPrefix[index1] + withoutPrefix[index2 || index1], 16);\n    }\n    if (withoutPrefix.length < 6) {\n      // #rgb or #rgba\n      this.r = connectNum(0);\n      this.g = connectNum(1);\n      this.b = connectNum(2);\n      this.a = withoutPrefix[3] ? connectNum(3) / 255 : 1;\n    } else {\n      // #rrggbb or #rrggbbaa\n      this.r = connectNum(0, 1);\n      this.g = connectNum(2, 3);\n      this.b = connectNum(4, 5);\n      this.a = withoutPrefix[6] ? connectNum(6, 7) / 255 : 1;\n    }\n  }\n  fromHsl({\n    h: _h,\n    s,\n    l,\n    a\n  }) {\n    const h = (_h % 360 + 360) % 360;\n    this._h = h;\n    this._hsl_s = s;\n    this._l = l;\n    this.a = typeof a === 'number' ? a : 1;\n    if (s <= 0) {\n      const rgb = round(l * 255);\n      this.r = rgb;\n      this.g = rgb;\n      this.b = rgb;\n      return;\n    }\n    let r = 0,\n      g = 0,\n      b = 0;\n    const huePrime = h / 60;\n    const chroma = (1 - Math.abs(2 * l - 1)) * s;\n    const secondComponent = chroma * (1 - Math.abs(huePrime % 2 - 1));\n    if (huePrime >= 0 && huePrime < 1) {\n      r = chroma;\n      g = secondComponent;\n    } else if (huePrime >= 1 && huePrime < 2) {\n      r = secondComponent;\n      g = chroma;\n    } else if (huePrime >= 2 && huePrime < 3) {\n      g = chroma;\n      b = secondComponent;\n    } else if (huePrime >= 3 && huePrime < 4) {\n      g = secondComponent;\n      b = chroma;\n    } else if (huePrime >= 4 && huePrime < 5) {\n      r = secondComponent;\n      b = chroma;\n    } else if (huePrime >= 5 && huePrime < 6) {\n      r = chroma;\n      b = secondComponent;\n    }\n    const lightnessModification = l - chroma / 2;\n    this.r = round((r + lightnessModification) * 255);\n    this.g = round((g + lightnessModification) * 255);\n    this.b = round((b + lightnessModification) * 255);\n  }\n  fromHsv({\n    h: _h,\n    s,\n    v,\n    a\n  }) {\n    const h = (_h % 360 + 360) % 360;\n    this._h = h;\n    this._hsv_s = s;\n    this._v = v;\n    this.a = typeof a === 'number' ? a : 1;\n    const vv = round(v * 255);\n    this.r = vv;\n    this.g = vv;\n    this.b = vv;\n    if (s <= 0) {\n      return;\n    }\n    const hh = h / 60;\n    const i = Math.floor(hh);\n    const ff = hh - i;\n    const p = round(v * (1.0 - s) * 255);\n    const q = round(v * (1.0 - s * ff) * 255);\n    const t = round(v * (1.0 - s * (1.0 - ff)) * 255);\n    switch (i) {\n      case 0:\n        this.g = t;\n        this.b = p;\n        break;\n      case 1:\n        this.r = q;\n        this.b = p;\n        break;\n      case 2:\n        this.r = p;\n        this.b = t;\n        break;\n      case 3:\n        this.r = p;\n        this.g = q;\n        break;\n      case 4:\n        this.r = t;\n        this.g = p;\n        break;\n      case 5:\n      default:\n        this.g = p;\n        this.b = q;\n        break;\n    }\n  }\n  fromHsvString(trimStr) {\n    const cells = splitColorStr(trimStr, parseHSVorHSL);\n    this.fromHsv({\n      h: cells[0],\n      s: cells[1],\n      v: cells[2],\n      a: cells[3]\n    });\n  }\n  fromHslString(trimStr) {\n    const cells = splitColorStr(trimStr, parseHSVorHSL);\n    this.fromHsl({\n      h: cells[0],\n      s: cells[1],\n      l: cells[2],\n      a: cells[3]\n    });\n  }\n  fromRgbString(trimStr) {\n    const cells = splitColorStr(trimStr, (num, txt) =>\n    // Convert percentage to number. e.g. 50% -> 128\n    txt.includes('%') ? round(num / 100 * 255) : num);\n    this.r = cells[0];\n    this.g = cells[1];\n    this.b = cells[2];\n    this.a = cells[3];\n  }\n}","import { FastColor } from '@ant-design/fast-color';\nconst hueStep = 2; // 色相阶梯\nconst saturationStep = 0.16; // 饱和度阶梯，浅色部分\nconst saturationStep2 = 0.05; // 饱和度阶梯，深色部分\nconst brightnessStep1 = 0.05; // 亮度阶梯，浅色部分\nconst brightnessStep2 = 0.15; // 亮度阶梯，深色部分\nconst lightColorCount = 5; // 浅色数量，主色上\nconst darkColorCount = 4; // 深色数量，主色下\n\n// 暗色主题颜色映射关系表\nconst darkColorMap = [{\n  index: 7,\n  amount: 15\n}, {\n  index: 6,\n  amount: 25\n}, {\n  index: 5,\n  amount: 30\n}, {\n  index: 5,\n  amount: 45\n}, {\n  index: 5,\n  amount: 65\n}, {\n  index: 5,\n  amount: 85\n}, {\n  index: 4,\n  amount: 90\n}, {\n  index: 3,\n  amount: 95\n}, {\n  index: 2,\n  amount: 97\n}, {\n  index: 1,\n  amount: 98\n}];\nfunction getHue(hsv, i, light) {\n  let hue;\n  // 根据色相不同，色相转向不同\n  if (Math.round(hsv.h) >= 60 && Math.round(hsv.h) <= 240) {\n    hue = light ? Math.round(hsv.h) - hueStep * i : Math.round(hsv.h) + hueStep * i;\n  } else {\n    hue = light ? Math.round(hsv.h) + hueStep * i : Math.round(hsv.h) - hueStep * i;\n  }\n  if (hue < 0) {\n    hue += 360;\n  } else if (hue >= 360) {\n    hue -= 360;\n  }\n  return hue;\n}\nfunction getSaturation(hsv, i, light) {\n  // grey color don't change saturation\n  if (hsv.h === 0 && hsv.s === 0) {\n    return hsv.s;\n  }\n  let saturation;\n  if (light) {\n    saturation = hsv.s - saturationStep * i;\n  } else if (i === darkColorCount) {\n    saturation = hsv.s + saturationStep;\n  } else {\n    saturation = hsv.s + saturationStep2 * i;\n  }\n  // 边界值修正\n  if (saturation > 1) {\n    saturation = 1;\n  }\n  // 第一格的 s 限制在 0.06-0.1 之间\n  if (light && i === lightColorCount && saturation > 0.1) {\n    saturation = 0.1;\n  }\n  if (saturation < 0.06) {\n    saturation = 0.06;\n  }\n  return Math.round(saturation * 100) / 100;\n}\nfunction getValue(hsv, i, light) {\n  let value;\n  if (light) {\n    value = hsv.v + brightnessStep1 * i;\n  } else {\n    value = hsv.v - brightnessStep2 * i;\n  }\n  // Clamp value between 0 and 1\n  value = Math.max(0, Math.min(1, value));\n  return Math.round(value * 100) / 100;\n}\nexport default function generate(color, opts = {}) {\n  const patterns = [];\n  const pColor = new FastColor(color);\n  const hsv = pColor.toHsv();\n  for (let i = lightColorCount; i > 0; i -= 1) {\n    const c = new FastColor({\n      h: getHue(hsv, i, true),\n      s: getSaturation(hsv, i, true),\n      v: getValue(hsv, i, true)\n    });\n    patterns.push(c);\n  }\n  patterns.push(pColor);\n  for (let i = 1; i <= darkColorCount; i += 1) {\n    const c = new FastColor({\n      h: getHue(hsv, i),\n      s: getSaturation(hsv, i),\n      v: getValue(hsv, i)\n    });\n    patterns.push(c);\n  }\n\n  // dark theme patterns\n  if (opts.theme === 'dark') {\n    return darkColorMap.map(({\n      index,\n      amount\n    }) => new FastColor(opts.backgroundColor || '#141414').mix(patterns[index], amount).toHexString());\n  }\n  return patterns.map(c => c.toHexString());\n}","// Generated by script. Do NOT modify!\n\nexport const presetPrimaryColors = {\n  \"red\": \"#F5222D\",\n  \"volcano\": \"#FA541C\",\n  \"orange\": \"#FA8C16\",\n  \"gold\": \"#FAAD14\",\n  \"yellow\": \"#FADB14\",\n  \"lime\": \"#A0D911\",\n  \"green\": \"#52C41A\",\n  \"cyan\": \"#13C2C2\",\n  \"blue\": \"#1677FF\",\n  \"geekblue\": \"#2F54EB\",\n  \"purple\": \"#722ED1\",\n  \"magenta\": \"#EB2F96\",\n  \"grey\": \"#666666\"\n};\nexport const red = [\"#fff1f0\", \"#ffccc7\", \"#ffa39e\", \"#ff7875\", \"#ff4d4f\", \"#f5222d\", \"#cf1322\", \"#a8071a\", \"#820014\", \"#5c0011\"];\nred.primary = red[5];\nexport const volcano = [\"#fff2e8\", \"#ffd8bf\", \"#ffbb96\", \"#ff9c6e\", \"#ff7a45\", \"#fa541c\", \"#d4380d\", \"#ad2102\", \"#871400\", \"#610b00\"];\nvolcano.primary = volcano[5];\nexport const orange = [\"#fff7e6\", \"#ffe7ba\", \"#ffd591\", \"#ffc069\", \"#ffa940\", \"#fa8c16\", \"#d46b08\", \"#ad4e00\", \"#873800\", \"#612500\"];\norange.primary = orange[5];\nexport const gold = [\"#fffbe6\", \"#fff1b8\", \"#ffe58f\", \"#ffd666\", \"#ffc53d\", \"#faad14\", \"#d48806\", \"#ad6800\", \"#874d00\", \"#613400\"];\ngold.primary = gold[5];\nexport const yellow = [\"#feffe6\", \"#ffffb8\", \"#fffb8f\", \"#fff566\", \"#ffec3d\", \"#fadb14\", \"#d4b106\", \"#ad8b00\", \"#876800\", \"#614700\"];\nyellow.primary = yellow[5];\nexport const lime = [\"#fcffe6\", \"#f4ffb8\", \"#eaff8f\", \"#d3f261\", \"#bae637\", \"#a0d911\", \"#7cb305\", \"#5b8c00\", \"#3f6600\", \"#254000\"];\nlime.primary = lime[5];\nexport const green = [\"#f6ffed\", \"#d9f7be\", \"#b7eb8f\", \"#95de64\", \"#73d13d\", \"#52c41a\", \"#389e0d\", \"#237804\", \"#135200\", \"#092b00\"];\ngreen.primary = green[5];\nexport const cyan = [\"#e6fffb\", \"#b5f5ec\", \"#87e8de\", \"#5cdbd3\", \"#36cfc9\", \"#13c2c2\", \"#08979c\", \"#006d75\", \"#00474f\", \"#002329\"];\ncyan.primary = cyan[5];\nexport const blue = [\"#e6f4ff\", \"#bae0ff\", \"#91caff\", \"#69b1ff\", \"#4096ff\", \"#1677ff\", \"#0958d9\", \"#003eb3\", \"#002c8c\", \"#001d66\"];\nblue.primary = blue[5];\nexport const geekblue = [\"#f0f5ff\", \"#d6e4ff\", \"#adc6ff\", \"#85a5ff\", \"#597ef7\", \"#2f54eb\", \"#1d39c4\", \"#10239e\", \"#061178\", \"#030852\"];\ngeekblue.primary = geekblue[5];\nexport const purple = [\"#f9f0ff\", \"#efdbff\", \"#d3adf7\", \"#b37feb\", \"#9254de\", \"#722ed1\", \"#531dab\", \"#391085\", \"#22075e\", \"#120338\"];\npurple.primary = purple[5];\nexport const magenta = [\"#fff0f6\", \"#ffd6e7\", \"#ffadd2\", \"#ff85c0\", \"#f759ab\", \"#eb2f96\", \"#c41d7f\", \"#9e1068\", \"#780650\", \"#520339\"];\nmagenta.primary = magenta[5];\nexport const grey = [\"#a6a6a6\", \"#999999\", \"#8c8c8c\", \"#808080\", \"#737373\", \"#666666\", \"#404040\", \"#1a1a1a\", \"#000000\", \"#000000\"];\ngrey.primary = grey[5];\nexport const gray = grey;\nexport const presetPalettes = {\n  red,\n  volcano,\n  orange,\n  gold,\n  yellow,\n  lime,\n  green,\n  cyan,\n  blue,\n  geekblue,\n  purple,\n  magenta,\n  grey\n};\nexport const redDark = [\"#2a1215\", \"#431418\", \"#58181c\", \"#791a1f\", \"#a61d24\", \"#d32029\", \"#e84749\", \"#f37370\", \"#f89f9a\", \"#fac8c3\"];\nredDark.primary = redDark[5];\nexport const volcanoDark = [\"#2b1611\", \"#441d12\", \"#592716\", \"#7c3118\", \"#aa3e19\", \"#d84a1b\", \"#e87040\", \"#f3956a\", \"#f8b692\", \"#fad4bc\"];\nvolcanoDark.primary = volcanoDark[5];\nexport const orangeDark = [\"#2b1d11\", \"#442a11\", \"#593815\", \"#7c4a15\", \"#aa6215\", \"#d87a16\", \"#e89a3c\", \"#f3b765\", \"#f8cf8d\", \"#fae3b7\"];\norangeDark.primary = orangeDark[5];\nexport const goldDark = [\"#2b2111\", \"#443111\", \"#594214\", \"#7c5914\", \"#aa7714\", \"#d89614\", \"#e8b339\", \"#f3cc62\", \"#f8df8b\", \"#faedb5\"];\ngoldDark.primary = goldDark[5];\nexport const yellowDark = [\"#2b2611\", \"#443b11\", \"#595014\", \"#7c6e14\", \"#aa9514\", \"#d8bd14\", \"#e8d639\", \"#f3ea62\", \"#f8f48b\", \"#fafab5\"];\nyellowDark.primary = yellowDark[5];\nexport const limeDark = [\"#1f2611\", \"#2e3c10\", \"#3e4f13\", \"#536d13\", \"#6f9412\", \"#8bbb11\", \"#a9d134\", \"#c9e75d\", \"#e4f88b\", \"#f0fab5\"];\nlimeDark.primary = limeDark[5];\nexport const greenDark = [\"#162312\", \"#1d3712\", \"#274916\", \"#306317\", \"#3c8618\", \"#49aa19\", \"#6abe39\", \"#8fd460\", \"#b2e58b\", \"#d5f2bb\"];\ngreenDark.primary = greenDark[5];\nexport const cyanDark = [\"#112123\", \"#113536\", \"#144848\", \"#146262\", \"#138585\", \"#13a8a8\", \"#33bcb7\", \"#58d1c9\", \"#84e2d8\", \"#b2f1e8\"];\ncyanDark.primary = cyanDark[5];\nexport const blueDark = [\"#111a2c\", \"#112545\", \"#15325b\", \"#15417e\", \"#1554ad\", \"#1668dc\", \"#3c89e8\", \"#65a9f3\", \"#8dc5f8\", \"#b7dcfa\"];\nblueDark.primary = blueDark[5];\nexport const geekblueDark = [\"#131629\", \"#161d40\", \"#1c2755\", \"#203175\", \"#263ea0\", \"#2b4acb\", \"#5273e0\", \"#7f9ef3\", \"#a8c1f8\", \"#d2e0fa\"];\ngeekblueDark.primary = geekblueDark[5];\nexport const purpleDark = [\"#1a1325\", \"#24163a\", \"#301c4d\", \"#3e2069\", \"#51258f\", \"#642ab5\", \"#854eca\", \"#ab7ae0\", \"#cda8f0\", \"#ebd7fa\"];\npurpleDark.primary = purpleDark[5];\nexport const magentaDark = [\"#291321\", \"#40162f\", \"#551c3b\", \"#75204f\", \"#a02669\", \"#cb2b83\", \"#e0529c\", \"#f37fb7\", \"#f8a8cc\", \"#fad2e3\"];\nmagentaDark.primary = magentaDark[5];\nexport const greyDark = [\"#151515\", \"#1f1f1f\", \"#2d2d2d\", \"#393939\", \"#494949\", \"#5a5a5a\", \"#6a6a6a\", \"#7b7b7b\", \"#888888\", \"#969696\"];\ngreyDark.primary = greyDark[5];\nexport const presetDarkPalettes = {\n  red: redDark,\n  volcano: volcanoDark,\n  orange: orangeDark,\n  gold: goldDark,\n  yellow: yellowDark,\n  lime: limeDark,\n  green: greenDark,\n  cyan: cyanDark,\n  blue: blueDark,\n  geekblue: geekblueDark,\n  purple: purpleDark,\n  magenta: magentaDark,\n  grey: greyDark\n};","export const PresetColors = ['blue', 'purple', 'cyan', 'green', 'magenta', 'pink', 'red', 'orange', 'yellow', 'volcano', 'geekblue', 'lime', 'gold'];","import { FastColor } from '@ant-design/fast-color';\nimport { PresetColors } from '../../interface/presetColors';\nexport default function genColorMapToken(seed, {\n  generateColorPalettes,\n  generateNeutralColorPalettes\n}) {\n  const {\n    colorSuccess: colorSuccessBase,\n    colorWarning: colorWarningBase,\n    colorError: colorErrorBase,\n    colorInfo: colorInfoBase,\n    colorPrimary: colorPrimaryBase,\n    colorBgBase,\n    colorTextBase\n  } = seed;\n  const primaryColors = generateColorPalettes(colorPrimaryBase);\n  const successColors = generateColorPalettes(colorSuccessBase);\n  const warningColors = generateColorPalettes(colorWarningBase);\n  const errorColors = generateColorPalettes(colorErrorBase);\n  const infoColors = generateColorPalettes(colorInfoBase);\n  const neutralColors = generateNeutralColorPalettes(colorBgBase, colorTextBase);\n  // Color Link\n  const colorLink = seed.colorLink || seed.colorInfo;\n  const linkColors = generateColorPalettes(colorLink);\n  const colorErrorBgFilledHover = new FastColor(errorColors[1]).mix(new FastColor(errorColors[3]), 50).toHexString();\n  const presetColorTokens = {};\n  PresetColors.forEach(colorKey => {\n    const colorBase = seed[colorKey];\n    if (colorBase) {\n      const colorPalette = generateColorPalettes(colorBase);\n      presetColorTokens[`${colorKey}Hover`] = colorPalette[5];\n      presetColorTokens[`${colorKey}Active`] = colorPalette[7];\n    }\n  });\n  return {\n    ...neutralColors,\n    colorPrimaryBg: primaryColors[1],\n    colorPrimaryBgHover: primaryColors[2],\n    colorPrimaryBorder: primaryColors[3],\n    colorPrimaryBorderHover: primaryColors[4],\n    colorPrimaryHover: primaryColors[5],\n    colorPrimary: primaryColors[6],\n    colorPrimaryActive: primaryColors[7],\n    colorPrimaryTextHover: primaryColors[8],\n    colorPrimaryText: primaryColors[9],\n    colorPrimaryTextActive: primaryColors[10],\n    colorSuccessBg: successColors[1],\n    colorSuccessBgHover: successColors[2],\n    colorSuccessBorder: successColors[3],\n    colorSuccessBorderHover: successColors[4],\n    colorSuccessHover: successColors[4],\n    colorSuccess: successColors[6],\n    colorSuccessActive: successColors[7],\n    colorSuccessTextHover: successColors[8],\n    colorSuccessText: successColors[9],\n    colorSuccessTextActive: successColors[10],\n    colorErrorBg: errorColors[1],\n    colorErrorBgHover: errorColors[2],\n    colorErrorBgFilledHover,\n    colorErrorBgActive: errorColors[3],\n    colorErrorBorder: errorColors[3],\n    colorErrorBorderHover: errorColors[4],\n    colorErrorHover: errorColors[5],\n    colorError: errorColors[6],\n    colorErrorActive: errorColors[7],\n    colorErrorTextHover: errorColors[8],\n    colorErrorText: errorColors[9],\n    colorErrorTextActive: errorColors[10],\n    colorWarningBg: warningColors[1],\n    colorWarningBgHover: warningColors[2],\n    colorWarningBorder: warningColors[3],\n    colorWarningBorderHover: warningColors[4],\n    colorWarningHover: warningColors[4],\n    colorWarning: warningColors[6],\n    colorWarningActive: warningColors[7],\n    colorWarningTextHover: warningColors[8],\n    colorWarningText: warningColors[9],\n    colorWarningTextActive: warningColors[10],\n    colorInfoBg: infoColors[1],\n    colorInfoBgHover: infoColors[2],\n    colorInfoBorder: infoColors[3],\n    colorInfoBorderHover: infoColors[4],\n    colorInfoHover: infoColors[4],\n    colorInfo: infoColors[6],\n    colorInfoActive: infoColors[7],\n    colorInfoTextHover: infoColors[8],\n    colorInfoText: infoColors[9],\n    colorInfoTextActive: infoColors[10],\n    colorLinkHover: linkColors[4],\n    colorLink: linkColors[6],\n    colorLinkActive: linkColors[7],\n    ...presetColorTokens,\n    colorBgMask: new FastColor('#000').setA(0.45).toRgbString(),\n    colorWhite: '#fff'\n  };\n}","const genRadius = radiusBase => {\n  let radiusLG = radiusBase;\n  let radiusSM = radiusBase;\n  let radiusXS = radiusBase;\n  let radiusOuter = radiusBase;\n  // radiusLG\n  if (radiusBase < 6 && radiusBase >= 5) {\n    radiusLG = radiusBase + 1;\n  } else if (radiusBase < 16 && radiusBase >= 6) {\n    radiusLG = radiusBase + 2;\n  } else if (radiusBase >= 16) {\n    radiusLG = 16;\n  }\n  // radiusSM\n  if (radiusBase < 7 && radiusBase >= 5) {\n    radiusSM = 4;\n  } else if (radiusBase < 8 && radiusBase >= 7) {\n    radiusSM = 5;\n  } else if (radiusBase < 14 && radiusBase >= 8) {\n    radiusSM = 6;\n  } else if (radiusBase < 16 && radiusBase >= 14) {\n    radiusSM = 7;\n  } else if (radiusBase >= 16) {\n    radiusSM = 8;\n  }\n  // radiusXS\n  if (radiusBase < 6 && radiusBase >= 2) {\n    radiusXS = 1;\n  } else if (radiusBase >= 6) {\n    radiusXS = 2;\n  }\n  // radiusOuter\n  if (radiusBase > 4 && radiusBase < 8) {\n    radiusOuter = 4;\n  } else if (radiusBase >= 8) {\n    radiusOuter = 6;\n  }\n  return {\n    borderRadius: radiusBase,\n    borderRadiusXS: radiusXS,\n    borderRadiusSM: radiusSM,\n    borderRadiusLG: radiusLG,\n    borderRadiusOuter: radiusOuter\n  };\n};\nexport default genRadius;","import genRadius from './genRadius';\nexport default function genCommonMapToken(token) {\n  const {\n    motionUnit,\n    motionBase,\n    borderRadius,\n    lineWidth\n  } = token;\n  return {\n    // motion\n    motionDurationFast: `${(motionBase + motionUnit).toFixed(1)}s`,\n    motionDurationMid: `${(motionBase + motionUnit * 2).toFixed(1)}s`,\n    motionDurationSlow: `${(motionBase + motionUnit * 3).toFixed(1)}s`,\n    // line\n    lineWidthBold: lineWidth + 1,\n    // radius\n    ...genRadius(borderRadius)\n  };\n}","const genControlHeight = token => {\n  const {\n    controlHeight\n  } = token;\n  return {\n    controlHeightSM: controlHeight * 0.75,\n    controlHeightXS: controlHeight * 0.5,\n    controlHeightLG: controlHeight * 1.25\n  };\n};\nexport default genControlHeight;","export function getLineHeight(fontSize) {\n  return (fontSize + 8) / fontSize;\n}\n// https://zhuanlan.zhihu.com/p/32746810\nexport default function getFontSizes(base) {\n  const fontSizes = Array.from({\n    length: 10\n  }).map((_, index) => {\n    const i = index - 1;\n    const baseSize = base * Math.E ** (i / 5);\n    const intSize = index > 1 ? Math.floor(baseSize) : Math.ceil(baseSize);\n    // Convert to even\n    return Math.floor(intSize / 2) * 2;\n  });\n  fontSizes[1] = base;\n  return fontSizes.map(size => ({\n    size,\n    lineHeight: getLineHeight(size)\n  }));\n}","import genFontSizes from './genFontSizes';\nconst genFontMapToken = fontSize => {\n  const fontSizePairs = genFontSizes(fontSize);\n  const fontSizes = fontSizePairs.map(pair => pair.size);\n  const lineHeights = fontSizePairs.map(pair => pair.lineHeight);\n  const fontSizeMD = fontSizes[1];\n  const fontSizeSM = fontSizes[0];\n  const fontSizeLG = fontSizes[2];\n  const lineHeight = lineHeights[1];\n  const lineHeightSM = lineHeights[0];\n  const lineHeightLG = lineHeights[2];\n  return {\n    fontSizeSM,\n    fontSize: fontSizeMD,\n    fontSizeLG,\n    fontSizeXL: fontSizes[3],\n    fontSizeHeading1: fontSizes[6],\n    fontSizeHeading2: fontSizes[5],\n    fontSizeHeading3: fontSizes[4],\n    fontSizeHeading4: fontSizes[3],\n    fontSizeHeading5: fontSizes[2],\n    lineHeight,\n    lineHeightLG,\n    lineHeightSM,\n    fontHeight: Math.round(lineHeight * fontSizeMD),\n    fontHeightLG: Math.round(lineHeightLG * fontSizeLG),\n    fontHeightSM: Math.round(lineHeightSM * fontSizeSM),\n    lineHeightHeading1: lineHeights[6],\n    lineHeightHeading2: lineHeights[5],\n    lineHeightHeading3: lineHeights[4],\n    lineHeightHeading4: lineHeights[3],\n    lineHeightHeading5: lineHeights[2]\n  };\n};\nexport default genFontMapToken;","export default function genSizeMapToken(token) {\n  const {\n    sizeUnit,\n    sizeStep\n  } = token;\n  return {\n    sizeXXL: sizeUnit * (sizeStep + 8),\n    // 48\n    sizeXL: sizeUnit * (sizeStep + 4),\n    // 32\n    sizeLG: sizeUnit * (sizeStep + 2),\n    // 24\n    sizeMD: sizeUnit * (sizeStep + 1),\n    // 20\n    sizeMS: sizeUnit * sizeStep,\n    // 16\n    size: sizeUnit * sizeStep,\n    // 16\n    sizeSM: sizeUnit * (sizeStep - 1),\n    // 12\n    sizeXS: sizeUnit * (sizeStep - 2),\n    // 8\n    sizeXXS: sizeUnit * (sizeStep - 3) // 4\n  };\n}","import { FastColor } from '@ant-design/fast-color';\nexport const getAlphaColor = (baseColor, alpha) => new FastColor(baseColor).setA(alpha).toRgbString();\nexport const getSolidColor = (baseColor, brightness) => {\n  const instance = new FastColor(baseColor);\n  return instance.darken(brightness).toHexString();\n};","import { generate } from '@ant-design/colors';\nimport { getAlphaColor, getSolidColor } from './colorAlgorithm';\nexport const generateColorPalettes = baseColor => {\n  const colors = generate(baseColor);\n  return {\n    1: colors[0],\n    2: colors[1],\n    3: colors[2],\n    4: colors[3],\n    5: colors[4],\n    6: colors[5],\n    7: colors[6],\n    8: colors[4],\n    9: colors[5],\n    10: colors[6]\n  };\n};\nexport const generateNeutralColorPalettes = (bgBaseColor, textBaseColor, shadowColor) => {\n  const colorBgBase = bgBaseColor || '#fff';\n  const colorTextBase = textBaseColor || '#000';\n  const colorShadow = shadowColor || '#000';\n  return {\n    colorBgBase,\n    colorTextBase,\n    colorShadow,\n    colorText: getAlphaColor(colorTextBase, 0.88),\n    colorTextSecondary: getAlphaColor(colorTextBase, 0.65),\n    colorTextTertiary: getAlphaColor(colorTextBase, 0.45),\n    colorTextQuaternary: getAlphaColor(colorTextBase, 0.25),\n    colorFill: getAlphaColor(colorTextBase, 0.15),\n    colorFillSecondary: getAlphaColor(colorTextBase, 0.06),\n    colorFillTertiary: getAlphaColor(colorTextBase, 0.04),\n    colorFillQuaternary: getAlphaColor(colorTextBase, 0.02),\n    colorBgSolid: getAlphaColor(colorTextBase, 1),\n    colorBgSolidHover: getAlphaColor(colorTextBase, 0.75),\n    colorBgSolidActive: getAlphaColor(colorTextBase, 0.95),\n    colorBgLayout: getSolidColor(colorBgBase, 4),\n    colorBgContainer: getSolidColor(colorBgBase, 0),\n    colorBgElevated: getSolidColor(colorBgBase, 0),\n    colorBgSpotlight: getAlphaColor(colorTextBase, 0.85),\n    colorBgBlur: 'transparent',\n    colorBorder: getSolidColor(colorBgBase, 15),\n    colorBorderDisabled: getSolidColor(colorBgBase, 15),\n    colorBorderSecondary: getSolidColor(colorBgBase, 6)\n  };\n};","import { generate, presetPalettes, presetPrimaryColors } from '@ant-design/colors';\nimport { defaultPresetColors } from '../seed';\nimport genColorMapToken from '../shared/genColorMapToken';\nimport genCommonMapToken from '../shared/genCommonMapToken';\nimport genControlHeight from '../shared/genControlHeight';\nimport genFontMapToken from '../shared/genFontMapToken';\nimport genSizeMapToken from '../shared/genSizeMapToken';\nimport { generateColorPalettes, generateNeutralColorPalettes } from './colors';\nexport default function derivative(token) {\n  // pink is deprecated name of magenta, keep this for backwards compatibility\n  presetPrimaryColors.pink = presetPrimaryColors.magenta;\n  presetPalettes.pink = presetPalettes.magenta;\n  const colorPalettes = Object.keys(defaultPresetColors).map(colorKey => {\n    const colors = token[colorKey] === presetPrimaryColors[colorKey] ? presetPalettes[colorKey] : generate(token[colorKey]);\n    return Array.from({\n      length: 10\n    }, () => 1).reduce((prev, _, i) => {\n      prev[`${colorKey}-${i + 1}`] = colors[i];\n      prev[`${colorKey}${i + 1}`] = colors[i];\n      return prev;\n    }, {});\n  }).reduce((prev, cur) => {\n    prev = {\n      ...prev,\n      ...cur\n    };\n    return prev;\n  }, {});\n  return {\n    ...token,\n    ...colorPalettes,\n    // Colors\n    ...genColorMapToken(token, {\n      generateColorPalettes,\n      generateNeutralColorPalettes\n    }),\n    // Font\n    ...genFontMapToken(token.fontSize),\n    // Size\n    ...genSizeMapToken(token),\n    // Height\n    ...genControlHeight(token),\n    // Others\n    ...genCommonMapToken(token)\n  };\n}","import { createTheme } from '@ant-design/cssinjs';\nimport defaultDerivative from './index';\nconst defaultTheme = createTheme(defaultDerivative);\nexport default defaultTheme;","import React from 'react';\nimport defaultSeedToken from './themes/seed';\nexport { default as defaultTheme } from './themes/default/theme';\n// ================================ Context =================================\n// To ensure snapshot stable. We disable hashed in test env.\nexport const defaultConfig = {\n  token: defaultSeedToken,\n  override: {\n    override: defaultSeedToken\n  },\n  hashed: true\n};\nexport const DesignTokenContext = /*#__PURE__*/React.createContext(defaultConfig);","import { FastColor } from '@ant-design/fast-color';\nfunction isStableColor(color) {\n  return color >= 0 && color <= 255;\n}\nfunction getAlphaColor(frontColor, backgroundColor) {\n  const {\n    r: fR,\n    g: fG,\n    b: fB,\n    a: originAlpha\n  } = new FastColor(frontColor).toRgb();\n  if (originAlpha < 1) {\n    return frontColor;\n  }\n  const {\n    r: bR,\n    g: bG,\n    b: bB\n  } = new FastColor(backgroundColor).toRgb();\n  for (let fA = 0.01; fA <= 1; fA += 0.01) {\n    const r = Math.round((fR - bR * (1 - fA)) / fA);\n    const g = Math.round((fG - bG * (1 - fA)) / fA);\n    const b = Math.round((fB - bB * (1 - fA)) / fA);\n    if (isStableColor(r) && isStableColor(g) && isStableColor(b)) {\n      return new FastColor({\n        r,\n        g,\n        b,\n        a: Math.round(fA * 100) / 100\n      }).toRgbString();\n    }\n  }\n  // fallback\n  /* istanbul ignore next */\n  return new FastColor({\n    r: fR,\n    g: fG,\n    b: fB,\n    a: 1\n  }).toRgbString();\n}\nexport default getAlphaColor;","import { FastColor } from '@ant-design/fast-color';\nimport seedToken from '../themes/seed';\nimport getAlphaColor from './getAlphaColor';\n/**\n * Seed (designer) > Derivative (designer) > Alias (developer).\n *\n * Merge seed & derivative & override token and generate alias token for developer.\n */\nexport default function formatToken(derivativeToken) {\n  const {\n    override,\n    ...restToken\n  } = derivativeToken;\n  const overrideTokens = {\n    ...override\n  };\n  Object.keys(seedToken).forEach(token => {\n    delete overrideTokens[token];\n  });\n  const mergedToken = {\n    ...restToken,\n    ...overrideTokens\n  };\n  const shadowBaseColor = new FastColor(mergedToken.colorShadow);\n  const shadowBaseAlpha = shadowBaseColor.a;\n  const getShadowColor = alpha => shadowBaseColor.clone().setA(shadowBaseAlpha * alpha).toRgbString();\n  const screenXS = 480;\n  const screenSM = 576;\n  const screenMD = 768;\n  const screenLG = 992;\n  const screenXL = 1200;\n  const screenXXL = 1600;\n  const screenXXXL = 1920;\n  // Motion\n  if (mergedToken.motion === false) {\n    const fastDuration = '0s';\n    mergedToken.motionDurationFast = fastDuration;\n    mergedToken.motionDurationMid = fastDuration;\n    mergedToken.motionDurationSlow = fastDuration;\n  }\n  // Generate alias token\n  const aliasToken = {\n    ...mergedToken,\n    // ============== Background ============== //\n    colorFillContent: mergedToken.colorFillSecondary,\n    colorFillContentHover: mergedToken.colorFill,\n    colorFillAlter: mergedToken.colorFillQuaternary,\n    colorBgContainerDisabled: mergedToken.colorFillTertiary,\n    // ============== Split ============== //\n    colorBorderBg: mergedToken.colorBgContainer,\n    colorSplit: getAlphaColor(mergedToken.colorBorderSecondary, mergedToken.colorBgContainer),\n    // ============== Text ============== //\n    colorTextPlaceholder: mergedToken.colorTextQuaternary,\n    colorTextDisabled: mergedToken.colorTextQuaternary,\n    colorTextHeading: mergedToken.colorText,\n    colorTextLabel: mergedToken.colorTextSecondary,\n    colorTextDescription: mergedToken.colorTextTertiary,\n    colorTextLightSolid: mergedToken.colorWhite,\n    colorHighlight: mergedToken.colorError,\n    colorBgTextHover: mergedToken.colorFillSecondary,\n    colorBgTextActive: mergedToken.colorFill,\n    colorIcon: mergedToken.colorTextTertiary,\n    colorIconHover: mergedToken.colorText,\n    colorErrorOutline: getAlphaColor(mergedToken.colorErrorBg, mergedToken.colorBgContainer),\n    colorWarningOutline: getAlphaColor(mergedToken.colorWarningBg, mergedToken.colorBgContainer),\n    colorErrorAffix: mergedToken.colorError,\n    colorWarningAffix: mergedToken.colorWarning,\n    // Font\n    fontSizeIcon: mergedToken.fontSizeSM,\n    // Line\n    lineWidthFocus: mergedToken.focusOutline === false ? 0 : mergedToken.lineWidth * 3,\n    // Control\n    lineWidth: mergedToken.lineWidth,\n    controlOutlineWidth: mergedToken.lineWidth * 2,\n    // Checkbox size and expand icon size\n    controlInteractiveSize: mergedToken.controlHeight / 2,\n    controlItemBgHover: mergedToken.colorFillTertiary,\n    controlItemBgActive: mergedToken.colorPrimaryBg,\n    controlItemBgActiveHover: mergedToken.colorPrimaryBgHover,\n    controlItemBgActiveDisabled: mergedToken.colorFill,\n    controlTmpOutline: mergedToken.colorFillQuaternary,\n    controlOutline: getAlphaColor(mergedToken.colorPrimaryBg, mergedToken.colorBgContainer),\n    lineType: mergedToken.lineType,\n    borderRadius: mergedToken.borderRadius,\n    borderRadiusXS: mergedToken.borderRadiusXS,\n    borderRadiusSM: mergedToken.borderRadiusSM,\n    borderRadiusLG: mergedToken.borderRadiusLG,\n    fontWeightStrong: 600,\n    opacityLoading: 0.65,\n    linkDecoration: 'none',\n    linkHoverDecoration: 'none',\n    linkFocusDecoration: 'none',\n    controlPaddingHorizontal: 12,\n    controlPaddingHorizontalSM: 8,\n    paddingXXS: mergedToken.sizeXXS,\n    paddingXS: mergedToken.sizeXS,\n    paddingSM: mergedToken.sizeSM,\n    padding: mergedToken.size,\n    paddingMD: mergedToken.sizeMD,\n    paddingLG: mergedToken.sizeLG,\n    paddingXL: mergedToken.sizeXL,\n    paddingContentHorizontalLG: mergedToken.sizeLG,\n    paddingContentVerticalLG: mergedToken.sizeMS,\n    paddingContentHorizontal: mergedToken.sizeMS,\n    paddingContentVertical: mergedToken.sizeSM,\n    paddingContentHorizontalSM: mergedToken.size,\n    paddingContentVerticalSM: mergedToken.sizeXS,\n    marginXXS: mergedToken.sizeXXS,\n    marginXS: mergedToken.sizeXS,\n    marginSM: mergedToken.sizeSM,\n    margin: mergedToken.size,\n    marginMD: mergedToken.sizeMD,\n    marginLG: mergedToken.sizeLG,\n    marginXL: mergedToken.sizeXL,\n    marginXXL: mergedToken.sizeXXL,\n    boxShadow: `\n      0 6px 16px 0 ${getShadowColor(0.08)},\n      0 3px 6px -4px ${getShadowColor(0.12)},\n      0 9px 28px 8px ${getShadowColor(0.05)}\n    `,\n    boxShadowSecondary: `\n      0 6px 16px 0 ${getShadowColor(0.08)},\n      0 3px 6px -4px ${getShadowColor(0.12)},\n      0 9px 28px 8px ${getShadowColor(0.05)}\n    `,\n    boxShadowTertiary: `\n      0 1px 2px 0 ${getShadowColor(0.05)},\n      0 1px 6px -1px ${getShadowColor(0.03)},\n      0 2px 4px 0 ${getShadowColor(0.03)}\n    `,\n    screenXS,\n    screenXSMin: screenXS,\n    screenXSMax: screenSM - 1,\n    screenSM,\n    screenSMMin: screenSM,\n    screenSMMax: screenMD - 1,\n    screenMD,\n    screenMDMin: screenMD,\n    screenMDMax: screenLG - 1,\n    screenLG,\n    screenLGMin: screenLG,\n    screenLGMax: screenXL - 1,\n    screenXL,\n    screenXLMin: screenXL,\n    screenXLMax: screenXXL - 1,\n    screenXXL,\n    screenXXLMin: screenXXL,\n    screenXXLMax: screenXXXL - 1,\n    screenXXXL,\n    screenXXXLMin: screenXXXL,\n    boxShadowPopoverArrow: `2px 2px 5px ${getShadowColor(0.05)}`,\n    dropShadowPopover: `drop-shadow(0 6px 16px ${getShadowColor(0.08)}) drop-shadow(0 3px 6px ${getShadowColor(0.12)}) drop-shadow(0 9px 28px ${getShadowColor(0.05)})`,\n    boxShadowCard: `\n      0 1px 2px -2px ${getShadowColor(0.16)},\n      0 3px 6px 0 ${getShadowColor(0.12)},\n      0 5px 12px 4px ${getShadowColor(0.09)}\n    `,\n    boxShadowDrawerRight: `\n      -6px 0 16px 0 ${getShadowColor(0.08)},\n      -3px 0 6px -4px ${getShadowColor(0.12)},\n      -9px 0 28px 8px ${getShadowColor(0.05)}\n    `,\n    boxShadowDrawerLeft: `\n      6px 0 16px 0 ${getShadowColor(0.08)},\n      3px 0 6px -4px ${getShadowColor(0.12)},\n      9px 0 28px 8px ${getShadowColor(0.05)}\n    `,\n    boxShadowDrawerUp: `\n      0 6px 16px 0 ${getShadowColor(0.08)},\n      0 3px 6px -4px ${getShadowColor(0.12)},\n      0 9px 28px 8px ${getShadowColor(0.05)}\n    `,\n    boxShadowDrawerDown: `\n      0 -6px 16px 0 ${getShadowColor(0.08)},\n      0 -3px 6px -4px ${getShadowColor(0.12)},\n      0 -9px 28px 8px ${getShadowColor(0.05)}\n    `,\n    boxShadowTabsOverflowLeft: `inset 10px 0 8px -8px ${getShadowColor(0.08)}`,\n    boxShadowTabsOverflowRight: `inset -10px 0 8px -8px ${getShadowColor(0.08)}`,\n    boxShadowTabsOverflowTop: `inset 0 10px 8px -8px ${getShadowColor(0.08)}`,\n    boxShadowTabsOverflowBottom: `inset 0 -10px 8px -8px ${getShadowColor(0.08)}`,\n    // Override AliasToken\n    ...overrideTokens\n  };\n  return aliasToken;\n}","import React from 'react';\nimport { useCacheToken } from '@ant-design/cssinjs';\nimport { ConfigContext } from '../config-provider/context';\nimport version from '../version';\nimport { defaultTheme, DesignTokenContext } from './context';\nimport defaultSeedToken from './themes/seed';\nimport formatToken from './util/alias';\nexport const unitless = {\n  lineHeight: true,\n  lineHeightSM: true,\n  lineHeightLG: true,\n  lineHeightHeading1: true,\n  lineHeightHeading2: true,\n  lineHeightHeading3: true,\n  lineHeightHeading4: true,\n  lineHeightHeading5: true,\n  opacityLoading: true,\n  fontWeightStrong: true,\n  zIndexPopupBase: true,\n  zIndexBase: true,\n  opacityImage: true\n};\nexport const ignore = {\n  motionBase: true,\n  motionUnit: true\n};\nconst preserve = {\n  screenXS: true,\n  screenXSMin: true,\n  screenXSMax: true,\n  screenSM: true,\n  screenSMMin: true,\n  screenSMMax: true,\n  screenMD: true,\n  screenMDMin: true,\n  screenMDMax: true,\n  screenLG: true,\n  screenLGMin: true,\n  screenLGMax: true,\n  screenXL: true,\n  screenXLMin: true,\n  screenXLMax: true,\n  screenXXL: true,\n  screenXXLMin: true,\n  screenXXLMax: true,\n  screenXXXL: true,\n  screenXXXLMin: true\n};\nexport const getComputedToken = (originToken, overrideToken, theme) => {\n  const derivativeToken = theme.getDerivativeToken(originToken);\n  const {\n    override,\n    ...components\n  } = overrideToken;\n  // Merge with override\n  let mergedDerivativeToken = {\n    ...derivativeToken,\n    override\n  };\n  // Format if needed\n  mergedDerivativeToken = formatToken(mergedDerivativeToken);\n  if (components) {\n    Object.entries(components).forEach(([key, value]) => {\n      const {\n        theme: componentTheme,\n        ...componentTokens\n      } = value;\n      let mergedComponentToken = componentTokens;\n      if (componentTheme) {\n        mergedComponentToken = getComputedToken({\n          ...mergedDerivativeToken,\n          ...componentTokens\n        }, {\n          override: componentTokens\n        }, componentTheme);\n      }\n      mergedDerivativeToken[key] = mergedComponentToken;\n    });\n  }\n  return mergedDerivativeToken;\n};\n// ================================== Hook ==================================\nexport default function useToken() {\n  const {\n    token: rootDesignToken,\n    hashed,\n    theme,\n    override,\n    cssVar: ctxCssVar,\n    zeroRuntime\n  } = React.useContext(DesignTokenContext);\n  const {\n    csp,\n    getPrefixCls\n  } = React.useContext(ConfigContext);\n  const cssVar = {\n    prefix: ctxCssVar?.prefix ?? getPrefixCls(),\n    key: ctxCssVar?.key ?? 'css-var-root'\n  };\n  const salt = `${version}-${hashed || ''}`;\n  const mergedTheme = theme || defaultTheme;\n  const [token, hashId, realToken] = useCacheToken(mergedTheme, [defaultSeedToken, rootDesignToken], {\n    salt,\n    override,\n    getComputedToken,\n    cssVar: {\n      ...cssVar,\n      unitless,\n      ignore,\n      preserve\n    },\n    nonce: csp?.nonce\n  });\n  return [mergedTheme, realToken, hashed ? hashId : '', token, cssVar, !!zeroRuntime];\n}","import React from 'react';\nconst ZIndexContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== 'production') {\n  ZIndexContext.displayName = 'ZIndexContext';\n}\nexport default ZIndexContext;","import React from 'react';\nimport useToken from '../../theme/useToken';\nimport { devUseWarning } from '../warning';\nimport ZIndexContext from '../zindexContext';\n// Z-Index control range\n// Container: 1000 + offset 100 (max base + 10 * offset = 2000)\n// Popover: offset 50\n// Notification: Container Max zIndex + componentOffset\nconst CONTAINER_OFFSET = 100;\nconst CONTAINER_OFFSET_MAX_COUNT = 10;\nexport const CONTAINER_MAX_OFFSET = CONTAINER_OFFSET * CONTAINER_OFFSET_MAX_COUNT;\n/**\n * Static function will default be the `CONTAINER_MAX_OFFSET`.\n * But it still may have children component like Select, Dropdown.\n * So the warning zIndex should exceed the `CONTAINER_MAX_OFFSET`.\n */\nconst CONTAINER_MAX_OFFSET_WITH_CHILDREN = CONTAINER_MAX_OFFSET + CONTAINER_OFFSET;\nexport const containerBaseZIndexOffset = {\n  Modal: CONTAINER_OFFSET,\n  Drawer: CONTAINER_OFFSET,\n  Popover: CONTAINER_OFFSET,\n  Popconfirm: CONTAINER_OFFSET,\n  Tooltip: CONTAINER_OFFSET,\n  Tour: CONTAINER_OFFSET,\n  FloatButton: CONTAINER_OFFSET\n};\nexport const consumerBaseZIndexOffset = {\n  SelectLike: 50,\n  Dropdown: 50,\n  DatePicker: 50,\n  Menu: 50,\n  ImagePreview: 1\n};\nconst isContainerType = type => {\n  return type in containerBaseZIndexOffset;\n};\nexport const useZIndex = (componentType, customZIndex) => {\n  const [, token] = useToken();\n  const parentZIndex = React.useContext(ZIndexContext);\n  const isContainer = isContainerType(componentType);\n  let result;\n  if (customZIndex !== undefined) {\n    result = [customZIndex, customZIndex];\n  } else {\n    let zIndex = parentZIndex ?? 0;\n    if (isContainer) {\n      zIndex +=\n      // Use preset token zIndex by default but not stack when has parent container\n      (parentZIndex ? 0 : token.zIndexPopupBase) +\n      // Container offset\n      containerBaseZIndexOffset[componentType];\n    } else {\n      zIndex += consumerBaseZIndexOffset[componentType];\n    }\n    result = [parentZIndex === undefined ? customZIndex : zIndex, zIndex];\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    const warning = devUseWarning(componentType);\n    const maxZIndex = token.zIndexPopupBase + CONTAINER_MAX_OFFSET_WITH_CHILDREN;\n    const currentZIndex = result[0] || 0;\n    process.env.NODE_ENV !== \"production\" ? warning(customZIndex !== undefined || currentZIndex <= maxZIndex, 'usage', '`zIndex` is over design token `zIndexPopupBase` too much. It may cause unexpected override.') : void 0;\n  }\n  return result;\n};","\"use client\";\n\nimport { createContext } from 'react';\n// ZombieJ: We export single file here since\n// ConfigProvider use this which will make loop deps\n// to import whole `rc-component/form`\nexport default /*#__PURE__*/createContext(undefined);","import React from 'react';\nimport { isFunction } from './is';\nexport function isFragment(child) {\n  return child && /*#__PURE__*/React.isValidElement(child) && child.type === React.Fragment;\n}\nexport const replaceElement = (element, replacement, props) => {\n  if (! /*#__PURE__*/React.isValidElement(element)) {\n    return replacement;\n  }\n  return /*#__PURE__*/React.cloneElement(element, isFunction(props) ? props(element.props || {}) : props);\n};\nexport function cloneElement(element, props) {\n  return replaceElement(element, element, props);\n}","\"use client\";\n\nimport React from 'react';\nimport CSSMotion from '@rc-component/motion';\nimport { clsx } from 'clsx';\nimport { cloneElement } from '../../_util/reactNode';\nimport { ConfigContext } from '../../config-provider/context';\nconst MotionContent = ({\n  children\n}) => {\n  const {\n    getPrefixCls\n  } = React.useContext(ConfigContext);\n  const rootPrefixCls = getPrefixCls();\n  // This will never reach since we will not render this when no children\n  /* istanbul ignore next */\n  if (! /*#__PURE__*/React.isValidElement(children)) {\n    return children;\n  }\n  return /*#__PURE__*/React.createElement(CSSMotion, {\n    visible: true,\n    motionName: `${rootPrefixCls}-fade`,\n    motionAppear: true,\n    motionEnter: true,\n    motionLeave: false,\n    removeOnLeave: false\n  }, ({\n    style: motionStyle,\n    className: motionClassName\n  }) => {\n    return cloneElement(children, oriProps => ({\n      className: clsx(oriProps.className, motionClassName),\n      style: {\n        ...oriProps.style,\n        ...motionStyle\n      }\n    }));\n  });\n};\nexport default MotionContent;","\"use client\";\n\nimport React from 'react';\nimport { UniqueProvider as RcUniqueProvider } from '@rc-component/trigger';\nimport { isFunction } from '../../_util/is';\nimport MotionContent from './MotionContent';\nconst cachedPlacements = [null, null];\nfunction uniqueBuiltinPlacements(ori) {\n  if (cachedPlacements[0] !== ori) {\n    const target = {};\n    Object.keys(ori).forEach(placement => {\n      target[placement] = {\n        ...ori[placement],\n        dynamicInset: false\n      };\n    });\n    cachedPlacements[0] = ori;\n    cachedPlacements[1] = target;\n  }\n  return cachedPlacements[1];\n}\nconst UniqueProvider = ({\n  children\n}) => {\n  const renderPopup = options => {\n    const {\n      id,\n      builtinPlacements,\n      popup\n    } = options;\n    const popupEle = isFunction(popup) ? popup() : popup;\n    const parsedPlacements = uniqueBuiltinPlacements(builtinPlacements);\n    return {\n      ...options,\n      getPopupContainer: null,\n      arrow: false,\n      popup: /*#__PURE__*/React.createElement(MotionContent, {\n        key: id\n      }, popupEle),\n      builtinPlacements: parsedPlacements\n    };\n  };\n  return /*#__PURE__*/React.createElement(RcUniqueProvider, {\n    postTriggerProps: renderPopup\n  }, children);\n};\nexport default UniqueProvider;","\"use client\";\n\nimport * as React from 'react';\nconst DisabledContext = /*#__PURE__*/React.createContext(false);\nexport const DisabledContextProvider = ({\n  children,\n  disabled\n}) => {\n  const originDisabled = React.useContext(DisabledContext);\n  return /*#__PURE__*/React.createElement(DisabledContext.Provider, {\n    value: disabled ?? originDisabled\n  }, children);\n};\nexport default DisabledContext;","\"use client\";\n\nimport * as React from 'react';\nconst SizeContext = /*#__PURE__*/React.createContext(undefined);\nexport const SizeContextProvider = ({\n  children,\n  size\n}) => {\n  const originSize = React.useContext(SizeContext);\n  return /*#__PURE__*/React.createElement(SizeContext.Provider, {\n    value: size || originSize\n  }, children);\n};\nexport default SizeContext;","import { useContext } from 'react';\nimport DisabledContext from '../DisabledContext';\nimport SizeContext from '../SizeContext';\nfunction useConfig() {\n  const componentDisabled = useContext(DisabledContext);\n  const componentSize = useContext(SizeContext);\n  return {\n    componentDisabled,\n    componentSize\n  };\n}\nexport default useConfig;","function _arrayWithHoles(r) {\n  if (Array.isArray(r)) return r;\n}\nexport { _arrayWithHoles as default };","function _iterableToArrayLimit(r, l) {\n  var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n  if (null != t) {\n    var e,\n      n,\n      i,\n      u,\n      a = [],\n      f = !0,\n      o = !1;\n    try {\n      if (i = (t = t.call(r)).next, 0 === l) {\n        if (Object(t) !== t) return;\n        f = !1;\n      } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n    } catch (r) {\n      o = !0, n = r;\n    } finally {\n      try {\n        if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return;\n      } finally {\n        if (o) throw n;\n      }\n    }\n    return a;\n  }\n}\nexport { _iterableToArrayLimit as default };","function _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _nonIterableRest as default };","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nfunction _slicedToArray(r, e) {\n  return arrayWithHoles(r) || iterableToArrayLimit(r, e) || unsupportedIterableToArray(r, e) || nonIterableRest();\n}\nexport { _slicedToArray as default };","function _classCallCheck(a, n) {\n  if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\");\n}\nexport { _classCallCheck as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperties(e, r) {\n  for (var t = 0; t < r.length; t++) {\n    var o = r[t];\n    o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, toPropertyKey(o.key), o);\n  }\n}\nfunction _createClass(e, r, t) {\n  return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", {\n    writable: !1\n  }), e;\n}\nexport { _createClass as default };","function _assertThisInitialized(e) {\n  if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  return e;\n}\nexport { _assertThisInitialized as default };","import setPrototypeOf from \"./setPrototypeOf.js\";\nfunction _inherits(t, e) {\n  if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\");\n  t.prototype = Object.create(e && e.prototype, {\n    constructor: {\n      value: t,\n      writable: !0,\n      configurable: !0\n    }\n  }), Object.defineProperty(t, \"prototype\", {\n    writable: !1\n  }), e && setPrototypeOf(t, e);\n}\nexport { _inherits as default };","function _getPrototypeOf(t) {\n  return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {\n    return t.__proto__ || Object.getPrototypeOf(t);\n  }, _getPrototypeOf(t);\n}\nexport { _getPrototypeOf as default };","function _isNativeReflectConstruct() {\n  try {\n    var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n  } catch (t) {}\n  return (_isNativeReflectConstruct = function _isNativeReflectConstruct() {\n    return !!t;\n  })();\n}\nexport { _isNativeReflectConstruct as default };","import _typeof from \"./typeof.js\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nfunction _possibleConstructorReturn(t, e) {\n  if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e;\n  if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\");\n  return assertThisInitialized(t);\n}\nexport { _possibleConstructorReturn as default };","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nimport possibleConstructorReturn from \"./possibleConstructorReturn.js\";\nfunction _createSuper(t) {\n  var r = isNativeReflectConstruct();\n  return function () {\n    var e,\n      o = getPrototypeOf(t);\n    if (r) {\n      var s = getPrototypeOf(this).constructor;\n      e = Reflect.construct(o, arguments, s);\n    } else e = o.apply(this, arguments);\n    return possibleConstructorReturn(this, e);\n  };\n}\nexport { _createSuper as default };","import _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nvar AbstractCalculator = /*#__PURE__*/_createClass(function AbstractCalculator() {\n  _classCallCheck(this, AbstractCalculator);\n});\nexport default AbstractCalculator;","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport AbstractCalculator from \"./calculator\";\nvar CALC_UNIT = 'CALC_UNIT';\nvar regexp = new RegExp(CALC_UNIT, 'g');\nfunction unit(value) {\n  if (typeof value === 'number') {\n    return \"\".concat(value).concat(CALC_UNIT);\n  }\n  return value;\n}\nvar CSSCalculator = /*#__PURE__*/function (_AbstractCalculator) {\n  _inherits(CSSCalculator, _AbstractCalculator);\n  var _super = _createSuper(CSSCalculator);\n  function CSSCalculator(num, unitlessCssVar) {\n    var _this;\n    _classCallCheck(this, CSSCalculator);\n    _this = _super.call(this);\n    _defineProperty(_assertThisInitialized(_this), \"result\", '');\n    _defineProperty(_assertThisInitialized(_this), \"unitlessCssVar\", void 0);\n    _defineProperty(_assertThisInitialized(_this), \"lowPriority\", void 0);\n    var numType = _typeof(num);\n    _this.unitlessCssVar = unitlessCssVar;\n    if (num instanceof CSSCalculator) {\n      _this.result = \"(\".concat(num.result, \")\");\n    } else if (numType === 'number') {\n      _this.result = unit(num);\n    } else if (numType === 'string') {\n      _this.result = num;\n    }\n    return _this;\n  }\n  _createClass(CSSCalculator, [{\n    key: \"add\",\n    value: function add(num) {\n      if (num instanceof CSSCalculator) {\n        this.result = \"\".concat(this.result, \" + \").concat(num.getResult());\n      } else if (typeof num === 'number' || typeof num === 'string') {\n        this.result = \"\".concat(this.result, \" + \").concat(unit(num));\n      }\n      this.lowPriority = true;\n      return this;\n    }\n  }, {\n    key: \"sub\",\n    value: function sub(num) {\n      if (num instanceof CSSCalculator) {\n        this.result = \"\".concat(this.result, \" - \").concat(num.getResult());\n      } else if (typeof num === 'number' || typeof num === 'string') {\n        this.result = \"\".concat(this.result, \" - \").concat(unit(num));\n      }\n      this.lowPriority = true;\n      return this;\n    }\n  }, {\n    key: \"mul\",\n    value: function mul(num) {\n      if (this.lowPriority) {\n        this.result = \"(\".concat(this.result, \")\");\n      }\n      if (num instanceof CSSCalculator) {\n        this.result = \"\".concat(this.result, \" * \").concat(num.getResult(true));\n      } else if (typeof num === 'number' || typeof num === 'string') {\n        this.result = \"\".concat(this.result, \" * \").concat(num);\n      }\n      this.lowPriority = false;\n      return this;\n    }\n  }, {\n    key: \"div\",\n    value: function div(num) {\n      if (this.lowPriority) {\n        this.result = \"(\".concat(this.result, \")\");\n      }\n      if (num instanceof CSSCalculator) {\n        this.result = \"\".concat(this.result, \" / \").concat(num.getResult(true));\n      } else if (typeof num === 'number' || typeof num === 'string') {\n        this.result = \"\".concat(this.result, \" / \").concat(num);\n      }\n      this.lowPriority = false;\n      return this;\n    }\n  }, {\n    key: \"getResult\",\n    value: function getResult(force) {\n      return this.lowPriority || force ? \"(\".concat(this.result, \")\") : this.result;\n    }\n  }, {\n    key: \"equal\",\n    value: function equal(options) {\n      var _this2 = this;\n      var _ref = options || {},\n        cssUnit = _ref.unit;\n      var mergedUnit = true;\n      if (typeof cssUnit === 'boolean') {\n        mergedUnit = cssUnit;\n      } else if (Array.from(this.unitlessCssVar).some(function (cssVar) {\n        return _this2.result.includes(cssVar);\n      })) {\n        mergedUnit = false;\n      }\n      this.result = this.result.replace(regexp, mergedUnit ? 'px' : '');\n      if (typeof this.lowPriority !== 'undefined') {\n        return \"calc(\".concat(this.result, \")\");\n      }\n      return this.result;\n    }\n  }]);\n  return CSSCalculator;\n}(AbstractCalculator);\nexport { CSSCalculator as default };","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport AbstractCalculator from \"./calculator\";\nvar NumCalculator = /*#__PURE__*/function (_AbstractCalculator) {\n  _inherits(NumCalculator, _AbstractCalculator);\n  var _super = _createSuper(NumCalculator);\n  function NumCalculator(num) {\n    var _this;\n    _classCallCheck(this, NumCalculator);\n    _this = _super.call(this);\n    _defineProperty(_assertThisInitialized(_this), \"result\", 0);\n    if (num instanceof NumCalculator) {\n      _this.result = num.result;\n    } else if (typeof num === 'number') {\n      _this.result = num;\n    }\n    return _this;\n  }\n  _createClass(NumCalculator, [{\n    key: \"add\",\n    value: function add(num) {\n      if (num instanceof NumCalculator) {\n        this.result += num.result;\n      } else if (typeof num === 'number') {\n        this.result += num;\n      }\n      return this;\n    }\n  }, {\n    key: \"sub\",\n    value: function sub(num) {\n      if (num instanceof NumCalculator) {\n        this.result -= num.result;\n      } else if (typeof num === 'number') {\n        this.result -= num;\n      }\n      return this;\n    }\n  }, {\n    key: \"mul\",\n    value: function mul(num) {\n      if (num instanceof NumCalculator) {\n        this.result *= num.result;\n      } else if (typeof num === 'number') {\n        this.result *= num;\n      }\n      return this;\n    }\n  }, {\n    key: \"div\",\n    value: function div(num) {\n      if (num instanceof NumCalculator) {\n        this.result /= num.result;\n      } else if (typeof num === 'number') {\n        this.result /= num;\n      }\n      return this;\n    }\n  }, {\n    key: \"equal\",\n    value: function equal() {\n      return this.result;\n    }\n  }]);\n  return NumCalculator;\n}(AbstractCalculator);\nexport default NumCalculator;","import CSSCalculator from \"./CSSCalculator\";\nimport NumCalculator from \"./NumCalculator\";\nvar genCalc = function genCalc(type, unitlessCssVar) {\n  var Calculator = type === 'css' ? CSSCalculator : NumCalculator;\n  return function (num) {\n    return new Calculator(num, unitlessCssVar);\n  };\n};\nexport default genCalc;","var getCompVarPrefix = function getCompVarPrefix(component, prefix) {\n  return \"\".concat([prefix, component.replace(/([A-Z]+)([A-Z][a-z]+)/g, '$1-$2').replace(/([a-z])([A-Z])/g, '$1-$2')].filter(Boolean).join('-'));\n};\nexport default getCompVarPrefix;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { warning } from '@rc-component/util';\nfunction getComponentToken(component, token, defaultToken, options) {\n  var customToken = _objectSpread({}, token[component]);\n  if (options !== null && options !== void 0 && options.deprecatedTokens) {\n    var deprecatedTokens = options.deprecatedTokens;\n    deprecatedTokens.forEach(function (_ref) {\n      var _ref2 = _slicedToArray(_ref, 2),\n        oldTokenKey = _ref2[0],\n        newTokenKey = _ref2[1];\n      if (process.env.NODE_ENV !== 'production') {\n        warning(!(customToken !== null && customToken !== void 0 && customToken[oldTokenKey]), \"Component Token `\".concat(String(oldTokenKey), \"` of \").concat(String(component), \" is deprecated. Please use `\").concat(String(newTokenKey), \"` instead.\"));\n      }\n\n      // Should wrap with `if` clause, or there will be `undefined` in object.\n      if (customToken !== null && customToken !== void 0 && customToken[oldTokenKey] || customToken !== null && customToken !== void 0 && customToken[newTokenKey]) {\n        var _customToken$newToken;\n        (_customToken$newToken = customToken[newTokenKey]) !== null && _customToken$newToken !== void 0 ? _customToken$newToken : customToken[newTokenKey] = customToken === null || customToken === void 0 ? void 0 : customToken[oldTokenKey];\n      }\n    });\n  }\n  var mergedToken = _objectSpread(_objectSpread({}, defaultToken), customToken);\n\n  // Remove same value as global token to minimize size\n  Object.keys(mergedToken).forEach(function (key) {\n    if (mergedToken[key] === token[key]) {\n      delete mergedToken[key];\n    }\n  });\n  return mergedToken;\n}\nexport default getComponentToken;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nvar enableStatistic = process.env.NODE_ENV !== 'production' || typeof CSSINJS_STATISTIC !== 'undefined';\nvar recording = true;\n\n/**\n * This function will do as `Object.assign` in production. But will use Object.defineProperty:get to\n * pass all value access in development. To support statistic field usage with alias token.\n */\nexport function merge() {\n  for (var _len = arguments.length, objs = new Array(_len), _key = 0; _key < _len; _key++) {\n    objs[_key] = arguments[_key];\n  }\n  /* istanbul ignore next */\n  if (!enableStatistic) {\n    return Object.assign.apply(Object, [{}].concat(objs));\n  }\n  recording = false;\n  var ret = {};\n  objs.forEach(function (obj) {\n    if (_typeof(obj) !== 'object') {\n      return;\n    }\n    var keys = Object.keys(obj);\n    keys.forEach(function (key) {\n      Object.defineProperty(ret, key, {\n        configurable: true,\n        enumerable: true,\n        get: function get() {\n          return obj[key];\n        }\n      });\n    });\n  });\n  recording = true;\n  return ret;\n}\n\n/** @internal Internal Usage. Not use in your production. */\nexport var statistic = {};\n\n/** @internal Internal Usage. Not use in your production. */\nexport var _statistic_build_ = {};\n\n/* istanbul ignore next */\nfunction noop() {}\n\n/** Statistic token usage case. Should use `merge` function if you do not want spread record. */\nvar statisticToken = function statisticToken(token) {\n  var tokenKeys;\n  var proxy = token;\n  var flush = noop;\n  if (enableStatistic && typeof Proxy !== 'undefined') {\n    tokenKeys = new Set();\n    proxy = new Proxy(token, {\n      get: function get(obj, prop) {\n        if (recording) {\n          var _tokenKeys;\n          (_tokenKeys = tokenKeys) === null || _tokenKeys === void 0 || _tokenKeys.add(prop);\n        }\n        return obj[prop];\n      }\n    });\n    flush = function flush(componentName, componentToken) {\n      var _statistic$componentN;\n      statistic[componentName] = {\n        global: Array.from(tokenKeys),\n        component: _objectSpread(_objectSpread({}, (_statistic$componentN = statistic[componentName]) === null || _statistic$componentN === void 0 ? void 0 : _statistic$componentN.component), componentToken)\n      };\n    };\n  }\n  return {\n    token: proxy,\n    keys: tokenKeys,\n    flush: flush\n  };\n};\nexport default statisticToken;","import { merge as mergeToken } from \"./statistic\";\nfunction getDefaultComponentToken(component, token, getDefaultToken) {\n  if (typeof getDefaultToken === 'function') {\n    var _token$component;\n    return getDefaultToken(mergeToken(token, (_token$component = token[component]) !== null && _token$component !== void 0 ? _token$component : {}));\n  }\n  return getDefaultToken !== null && getDefaultToken !== void 0 ? getDefaultToken : {};\n}\nexport default getDefaultComponentToken;","import { unit } from '@ant-design/cssinjs';\nfunction genMaxMin(type) {\n  if (type === 'js') {\n    return {\n      max: Math.max,\n      min: Math.min\n    };\n  }\n  return {\n    max: function max() {\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n      return \"max(\".concat(args.map(function (value) {\n        return unit(value);\n      }).join(','), \")\");\n    },\n    min: function min() {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n      return \"min(\".concat(args.map(function (value) {\n        return unit(value);\n      }).join(','), \")\");\n    }\n  };\n}\nexport default genMaxMin;","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport React from 'react';\nvar BEAT_LIMIT = 1000 * 60 * 10;\n\n/**\n * A helper class to map keys to values.\n * It supports both primitive keys and object keys.\n */\nvar ArrayKeyMap = /*#__PURE__*/function () {\n  function ArrayKeyMap() {\n    _classCallCheck(this, ArrayKeyMap);\n    _defineProperty(this, \"map\", new Map());\n    // Use WeakMap to avoid memory leak\n    _defineProperty(this, \"objectIDMap\", new WeakMap());\n    _defineProperty(this, \"nextID\", 0);\n    _defineProperty(this, \"lastAccessBeat\", new Map());\n    // We will clean up the cache when reach the limit\n    _defineProperty(this, \"accessBeat\", 0);\n  }\n  _createClass(ArrayKeyMap, [{\n    key: \"set\",\n    value: function set(keys, value) {\n      // New set will trigger clear\n      this.clear();\n\n      // Set logic\n      var compositeKey = this.getCompositeKey(keys);\n      this.map.set(compositeKey, value);\n      this.lastAccessBeat.set(compositeKey, Date.now());\n    }\n  }, {\n    key: \"get\",\n    value: function get(keys) {\n      var compositeKey = this.getCompositeKey(keys);\n      var cache = this.map.get(compositeKey);\n      this.lastAccessBeat.set(compositeKey, Date.now());\n      this.accessBeat += 1;\n      return cache;\n    }\n  }, {\n    key: \"getCompositeKey\",\n    value: function getCompositeKey(keys) {\n      var _this = this;\n      var ids = keys.map(function (key) {\n        if (key && _typeof(key) === 'object') {\n          return \"obj_\".concat(_this.getObjectID(key));\n        }\n        return \"\".concat(_typeof(key), \"_\").concat(key);\n      });\n      return ids.join('|');\n    }\n  }, {\n    key: \"getObjectID\",\n    value: function getObjectID(obj) {\n      if (this.objectIDMap.has(obj)) {\n        return this.objectIDMap.get(obj);\n      }\n      var id = this.nextID;\n      this.objectIDMap.set(obj, id);\n      this.nextID += 1;\n      return id;\n    }\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      var _this2 = this;\n      if (this.accessBeat > 10000) {\n        var now = Date.now();\n        this.lastAccessBeat.forEach(function (beat, key) {\n          if (now - beat > BEAT_LIMIT) {\n            _this2.map.delete(key);\n            _this2.lastAccessBeat.delete(key);\n          }\n        });\n        this.accessBeat = 0;\n      }\n    }\n  }]);\n  return ArrayKeyMap;\n}();\nvar uniqueMap = new ArrayKeyMap();\n\n/**\n * Like `useMemo`, but this hook result will be shared across all instances.\n */\nfunction useUniqueMemo(memoFn, deps) {\n  return React.useMemo(function () {\n    var cachedValue = uniqueMap.get(deps);\n    if (cachedValue) {\n      return cachedValue;\n    }\n    var newValue = memoFn();\n    uniqueMap.set(deps, newValue);\n    return newValue;\n  }, deps);\n}\nexport default useUniqueMemo;","/**\n * Provide a default hook since not everyone needs to config this.\n */\nvar useDefaultCSP = function useDefaultCSP() {\n  return {};\n};\nexport default useDefaultCSP;","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { useMemo } from 'react';\nimport { token2CSSVar, useCSSVarRegister, useStyleRegister } from '@ant-design/cssinjs';\nimport genCalc from \"./calc\";\nimport getCompVarPrefix from \"./getCompVarPrefix\";\nimport getComponentToken from \"./getComponentToken\";\nimport getDefaultComponentToken from \"./getDefaultComponentToken\";\nimport genMaxMin from \"./maxmin\";\nimport statisticToken, { merge as mergeToken } from \"./statistic\";\nimport useUniqueMemo from \"../_util/hooks/useUniqueMemo\";\nimport useDefaultCSP from \"../hooks/useCSP\";\nfunction genStyleUtils(config) {\n  // Dependency inversion for preparing basic config.\n  var _config$useCSP = config.useCSP,\n    useCSP = _config$useCSP === void 0 ? useDefaultCSP : _config$useCSP,\n    useToken = config.useToken,\n    usePrefix = config.usePrefix,\n    getResetStyles = config.getResetStyles,\n    getCommonStyle = config.getCommonStyle,\n    getCompUnitless = config.getCompUnitless;\n  function genStyleHooks(component, styleFn, getDefaultToken, options) {\n    var componentName = Array.isArray(component) ? component[0] : component;\n    function prefixToken(key) {\n      return \"\".concat(String(componentName)).concat(key.slice(0, 1).toUpperCase()).concat(key.slice(1));\n    }\n\n    // Fill unitless\n    var originUnitless = (options === null || options === void 0 ? void 0 : options.unitless) || {};\n    var originCompUnitless = typeof getCompUnitless === 'function' ? getCompUnitless(component) : {};\n    var compUnitless = _objectSpread(_objectSpread({}, originCompUnitless), {}, _defineProperty({}, prefixToken('zIndexPopup'), true));\n    Object.keys(originUnitless).forEach(function (key) {\n      compUnitless[prefixToken(key)] = originUnitless[key];\n    });\n\n    // Options\n    var mergedOptions = _objectSpread(_objectSpread({}, options), {}, {\n      unitless: compUnitless,\n      prefixToken: prefixToken\n    });\n\n    // Hooks\n    var useStyle = genComponentStyleHook(component, styleFn, getDefaultToken, mergedOptions);\n    var useCSSVar = genCSSVarRegister(componentName, getDefaultToken, mergedOptions);\n    return function (prefixCls) {\n      var rootCls = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : prefixCls;\n      var hashId = useStyle(prefixCls, rootCls);\n\n      // Resolve function type to get dynamic extra prefix\n      var extraPrefixCls = options === null || options === void 0 ? void 0 : options.extraCssVarPrefixCls;\n      var resolvedExtraPrefixCls = typeof extraPrefixCls === 'function' ? extraPrefixCls({\n        prefixCls: prefixCls,\n        rootCls: rootCls\n      }) : extraPrefixCls;\n      var cssVarCls = useCSSVar(resolvedExtraPrefixCls !== null && resolvedExtraPrefixCls !== void 0 && resolvedExtraPrefixCls.length ? [rootCls].concat(_toConsumableArray(resolvedExtraPrefixCls)) : rootCls);\n      return [hashId, cssVarCls];\n    };\n  }\n  function genCSSVarRegister(component, getDefaultToken, options) {\n    var compUnitless = options.unitless,\n      prefixToken = options.prefixToken,\n      ignore = options.ignore;\n    return function (rootCls) {\n      var _useToken = useToken(),\n        cssVar = _useToken.cssVar,\n        realToken = _useToken.realToken;\n      var csp = useCSP();\n      useCSSVarRegister({\n        path: [component],\n        prefix: cssVar.prefix,\n        key: cssVar.key,\n        unitless: compUnitless,\n        ignore: ignore,\n        token: realToken,\n        scope: rootCls,\n        nonce: function nonce() {\n          return csp.nonce;\n        }\n      }, function () {\n        var defaultToken = getDefaultComponentToken(component, realToken, getDefaultToken);\n        var componentToken = getComponentToken(component, realToken, defaultToken, {\n          deprecatedTokens: options === null || options === void 0 ? void 0 : options.deprecatedTokens\n        });\n        if (defaultToken) {\n          Object.keys(defaultToken).forEach(function (key) {\n            componentToken[prefixToken(key)] = componentToken[key];\n            delete componentToken[key];\n          });\n        }\n        return componentToken;\n      });\n      return cssVar === null || cssVar === void 0 ? void 0 : cssVar.key;\n    };\n  }\n  function genComponentStyleHook(componentName, styleFn, getDefaultToken) {\n    var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    var cells = Array.isArray(componentName) ? componentName : [componentName, componentName];\n    var _cells = _slicedToArray(cells, 1),\n      component = _cells[0];\n    var concatComponent = cells.join('-');\n    var mergedLayer = config.layer || {\n      name: 'antd'\n    };\n\n    // Return new style hook\n    return function (prefixCls) {\n      var rootCls = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : prefixCls;\n      var _useToken2 = useToken(),\n        theme = _useToken2.theme,\n        realToken = _useToken2.realToken,\n        hashId = _useToken2.hashId,\n        token = _useToken2.token,\n        cssVar = _useToken2.cssVar,\n        zeroRuntime = _useToken2.zeroRuntime;\n\n      // Update of `disabledRuntimeStyle` would cause React hook error, so memoized it and never update.\n      var memoizedZeroRuntime = useMemo(function () {\n        return zeroRuntime;\n      }, []);\n      if (memoizedZeroRuntime) {\n        return hashId;\n      }\n      var _usePrefix = usePrefix(),\n        rootPrefixCls = _usePrefix.rootPrefixCls,\n        iconPrefixCls = _usePrefix.iconPrefixCls;\n      var csp = useCSP();\n      var type = 'css';\n\n      // Use unique memo to share the result across all instances\n      var calc = useUniqueMemo(function () {\n        var unitlessCssVar = new Set();\n        Object.keys(options.unitless || {}).forEach(function (key) {\n          // Some component proxy the AliasToken (e.g. Image) and some not (e.g. Modal)\n          // We should both pass in `unitlessCssVar` to make sure the CSSVar can be unitless.\n          unitlessCssVar.add(token2CSSVar(key, cssVar.prefix));\n          unitlessCssVar.add(token2CSSVar(key, getCompVarPrefix(component, cssVar.prefix)));\n        });\n        return genCalc(type, unitlessCssVar);\n      }, [type, component, cssVar === null || cssVar === void 0 ? void 0 : cssVar.prefix]);\n      var _genMaxMin = genMaxMin(type),\n        max = _genMaxMin.max,\n        min = _genMaxMin.min;\n\n      // Shared config\n      var sharedConfig = {\n        theme: theme,\n        token: token,\n        hashId: hashId,\n        nonce: function nonce() {\n          return csp.nonce;\n        },\n        clientOnly: options.clientOnly,\n        layer: mergedLayer,\n        // antd is always at top of styles\n        order: options.order || -999\n      };\n\n      // This if statement is safe, as it will only be used if the generator has the function. It's not dynamic.\n      if (typeof getResetStyles === 'function') {\n        // Generate style for all need reset tags.\n        useStyleRegister(_objectSpread(_objectSpread({}, sharedConfig), {}, {\n          clientOnly: false,\n          path: ['Shared', rootPrefixCls]\n        }), function () {\n          return getResetStyles(token, {\n            prefix: {\n              rootPrefixCls: rootPrefixCls,\n              iconPrefixCls: iconPrefixCls\n            },\n            csp: csp\n          });\n        });\n      }\n      useStyleRegister(_objectSpread(_objectSpread({}, sharedConfig), {}, {\n        path: [concatComponent, prefixCls, iconPrefixCls]\n      }), function () {\n        if (options.injectStyle === false) {\n          return [];\n        }\n        var _statisticToken = statisticToken(token),\n          proxyToken = _statisticToken.token,\n          flush = _statisticToken.flush;\n        var defaultComponentToken = getDefaultComponentToken(component, realToken, getDefaultToken);\n        var componentCls = \".\".concat(prefixCls);\n        var componentToken = getComponentToken(component, realToken, defaultComponentToken, {\n          deprecatedTokens: options.deprecatedTokens\n        });\n        if (defaultComponentToken && _typeof(defaultComponentToken) === 'object') {\n          Object.keys(defaultComponentToken).forEach(function (key) {\n            defaultComponentToken[key] = \"var(\".concat(token2CSSVar(key, getCompVarPrefix(component, cssVar.prefix)), \")\");\n          });\n        }\n        var mergedToken = mergeToken(proxyToken, {\n          componentCls: componentCls,\n          prefixCls: prefixCls,\n          iconCls: \".\".concat(iconPrefixCls),\n          antCls: \".\".concat(rootPrefixCls),\n          calc: calc,\n          max: max,\n          min: min\n        }, defaultComponentToken);\n        var styleInterpolation = styleFn(mergedToken, {\n          hashId: hashId,\n          prefixCls: prefixCls,\n          rootPrefixCls: rootPrefixCls,\n          iconPrefixCls: iconPrefixCls\n        });\n        flush(component, componentToken);\n        var commonStyle = typeof getCommonStyle === 'function' ? getCommonStyle(mergedToken, prefixCls, rootCls, options.resetFont) : null;\n        return [options.resetStyle === false ? null : commonStyle, styleInterpolation];\n      });\n      return hashId;\n    };\n  }\n  function genSubStyleComponent(componentName, styleFn, getDefaultToken) {\n    var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    var useStyle = genComponentStyleHook(componentName, styleFn, getDefaultToken, _objectSpread({\n      resetStyle: false,\n      // Sub Style should default after root one\n      order: -998\n    }, options));\n    var StyledComponent = function StyledComponent(_ref) {\n      var prefixCls = _ref.prefixCls,\n        _ref$rootCls = _ref.rootCls,\n        rootCls = _ref$rootCls === void 0 ? prefixCls : _ref$rootCls;\n      useStyle(prefixCls, rootCls);\n      return null;\n    };\n    if (process.env.NODE_ENV !== 'production') {\n      StyledComponent.displayName = \"SubStyle_\".concat(String(Array.isArray(componentName) ? componentName.join('.') : componentName));\n    }\n    return StyledComponent;\n  }\n  return {\n    genStyleHooks: genStyleHooks,\n    genSubStyleComponent: genSubStyleComponent,\n    genComponentStyleHook: genComponentStyleHook\n  };\n}\nexport default genStyleUtils;","\"use client\";\n\nimport { Keyframes, unit } from '@ant-design/cssinjs';\nexport const textEllipsis = {\n  overflow: 'hidden',\n  whiteSpace: 'nowrap',\n  textOverflow: 'ellipsis'\n};\nexport const resetComponent = (token, needInheritFontFamily = false) => ({\n  boxSizing: 'border-box',\n  margin: 0,\n  padding: 0,\n  color: token.colorText,\n  fontSize: token.fontSize,\n  // font-variant: @font-variant-base;\n  lineHeight: token.lineHeight,\n  listStyle: 'none',\n  // font-feature-settings: @font-feature-settings-base;\n  fontFamily: needInheritFontFamily ? 'inherit' : token.fontFamily\n});\nexport const resetIcon = () => ({\n  display: 'inline-flex',\n  alignItems: 'center',\n  color: 'inherit',\n  fontStyle: 'normal',\n  lineHeight: 0,\n  textAlign: 'center',\n  textTransform: 'none',\n  // for SVG icon, see https://blog.prototypr.io/align-svg-icons-to-text-and-say-goodbye-to-font-icons-d44b3d7b26b4\n  verticalAlign: '-0.125em',\n  textRendering: 'optimizeLegibility',\n  '-webkit-font-smoothing': 'antialiased',\n  '-moz-osx-font-smoothing': 'grayscale',\n  '> *': {\n    lineHeight: 1\n  },\n  svg: {\n    display: 'inline-block',\n    verticalAlign: 'inherit'\n  }\n});\nconst loadingCircle = new Keyframes('loadingCircle', {\n  '100%': {\n    transform: 'rotate(360deg)'\n  }\n});\nexport const clearFix = () => ({\n  // https://github.com/ant-design/ant-design/issues/21301#issuecomment-583955229\n  '&::before': {\n    display: 'table',\n    content: '\"\"'\n  },\n  '&::after': {\n    // https://github.com/ant-design/ant-design/issues/21864\n    display: 'table',\n    clear: 'both',\n    content: '\"\"'\n  }\n});\nexport const genFocusOutline = (token, offset) => ({\n  outline: `${unit(token.lineWidthFocus)} solid ${token.colorPrimaryBorder}`,\n  outlineOffset: offset ?? 1,\n  transition: [`outline-offset`, `outline`].map(prop => `${prop} 0s`).join(', ')\n});\nexport const genFocusStyle = (token, offset) => ({\n  '&:focus-visible': genFocusOutline(token, offset)\n});\nexport const genLinkStyle = token => ({\n  a: {\n    color: token.colorLink,\n    textDecoration: token.linkDecoration,\n    backgroundColor: 'transparent',\n    // remove the gray background on active links in IE 10.\n    outline: 'none',\n    cursor: 'pointer',\n    transition: `color ${token.motionDurationSlow}`,\n    '-webkit-text-decoration-skip': 'objects',\n    // remove gaps in links underline in iOS 8+ and Safari 8+.\n    '&:hover': {\n      color: token.colorLinkHover\n    },\n    '&:active': {\n      color: token.colorLinkActive\n    },\n    '&:active, &:hover': {\n      textDecoration: token.linkHoverDecoration,\n      outline: 0\n    },\n    // https://github.com/ant-design/ant-design/issues/22503\n    '&:focus': {\n      textDecoration: token.linkFocusDecoration,\n      outline: 0\n    },\n    ...genFocusStyle(token),\n    '&[disabled]': {\n      color: token.colorTextDisabled,\n      cursor: 'not-allowed'\n    }\n  }\n});\nexport const genCommonStyle = (token, componentPrefixCls, rootCls, resetFont) => {\n  const prefixSelector = `[class^=\"${componentPrefixCls}\"], [class*=\" ${componentPrefixCls}\"]`;\n  const rootPrefixSelector = rootCls ? `.${rootCls}` : prefixSelector;\n  const resetStyle = {\n    boxSizing: 'border-box',\n    '&::before, &::after': {\n      boxSizing: 'border-box'\n    }\n  };\n  let resetFontStyle = {};\n  if (resetFont !== false) {\n    resetFontStyle = {\n      fontFamily: token.fontFamily,\n      fontSize: token.fontSize\n    };\n  }\n  return {\n    [rootPrefixSelector]: {\n      ...resetFontStyle,\n      ...resetStyle,\n      [prefixSelector]: resetStyle\n    }\n  };\n};\nexport const genIconStyle = iconPrefixCls => ({\n  [`.${iconPrefixCls}`]: {\n    ...resetIcon(),\n    '&::before': {\n      display: 'none'\n    },\n    '&[tabindex]': {\n      cursor: 'pointer'\n    }\n  },\n  [`.${iconPrefixCls} .${iconPrefixCls}-icon`]: {\n    display: 'block'\n  },\n  [`.${iconPrefixCls}-spin`]: {\n    animationName: loadingCircle,\n    animationDuration: '1s',\n    animationIterationCount: 'infinite',\n    animationTimingFunction: 'linear'\n  }\n});\nexport const operationUnit = token => ({\n  // FIXME: This use link but is a operation unit. Seems should be a colorPrimary.\n  // And Typography use this to generate link style which should not do this.\n  color: token.colorLink,\n  textDecoration: token.linkDecoration,\n  outline: 'none',\n  cursor: 'pointer',\n  transition: `all ${token.motionDurationSlow}`,\n  border: 0,\n  padding: 0,\n  background: 'none',\n  userSelect: 'none',\n  ...genFocusStyle(token),\n  '&:hover': {\n    color: token.colorLinkHover,\n    textDecoration: token.linkHoverDecoration\n  },\n  '&:focus': {\n    color: token.colorLinkHover,\n    textDecoration: token.linkFocusDecoration\n  },\n  '&:active': {\n    color: token.colorLinkActive,\n    textDecoration: token.linkHoverDecoration\n  }\n});","import { useContext } from 'react';\nimport { genStyleUtils } from '@ant-design/cssinjs-utils';\nimport { ConfigContext, defaultIconPrefixCls } from '../../config-provider/context';\nimport { genCommonStyle, genIconStyle, genLinkStyle } from '../../style';\nimport useLocalToken, { unitless } from '../useToken';\nexport const {\n  genStyleHooks,\n  genComponentStyleHook,\n  genSubStyleComponent\n} = genStyleUtils({\n  usePrefix: () => {\n    const {\n      getPrefixCls,\n      iconPrefixCls\n    } = useContext(ConfigContext);\n    const rootPrefixCls = getPrefixCls();\n    return {\n      rootPrefixCls,\n      iconPrefixCls\n    };\n  },\n  useToken: () => {\n    const [theme, realToken, hashId, token, cssVar, zeroRuntime] = useLocalToken();\n    return {\n      theme,\n      realToken,\n      hashId,\n      token,\n      cssVar,\n      zeroRuntime\n    };\n  },\n  useCSP: () => {\n    const {\n      csp\n    } = useContext(ConfigContext);\n    return csp ?? {};\n  },\n  getResetStyles: (token, config) => {\n    const linkStyle = genLinkStyle(token);\n    return [linkStyle, {\n      '&': linkStyle\n    }, genIconStyle(config?.prefix.iconPrefixCls ?? defaultIconPrefixCls)];\n  },\n  getCommonStyle: genCommonStyle,\n  getCompUnitless: () => unitless\n});\nexport const genCssVar = (antCls, component) => {\n  const cssPrefix = `--${antCls.replace(/\\./g, '')}-${component}-`;\n  const varName = name => {\n    return `${cssPrefix}${name}`;\n  };\n  const varRef = (name, fallback) => {\n    return fallback ? `var(${cssPrefix}${name}, ${fallback})` : `var(${cssPrefix}${name})`;\n  };\n  return [varName, varRef];\n};","import { useStyleRegister } from '@ant-design/cssinjs';\nimport { genIconStyle } from '../../style';\nimport useToken from '../useToken';\nconst useResetIconStyle = (iconPrefixCls, csp) => {\n  const [theme, token] = useToken();\n  // Generate style for icons\n  return useStyleRegister({\n    theme,\n    token,\n    hashId: '',\n    path: ['ant-design-icons', iconPrefixCls],\n    nonce: () => csp?.nonce,\n    layer: {\n      name: 'antd'\n    }\n  }, () => genIconStyle(iconPrefixCls));\n};\nexport default useResetIconStyle;","import { useId } from 'react';\nimport { isEqual, useMemo } from '@rc-component/util';\nimport { isPlainObject } from '../../_util/is';\nimport { devUseWarning } from '../../_util/warning';\nimport { defaultConfig } from '../../theme/internal';\nexport default function useTheme(theme, parentTheme, config) {\n  const warning = devUseWarning('ConfigProvider');\n  const themeConfig = theme || {};\n  const parentThemeConfig = themeConfig.inherit === false || !parentTheme ? {\n    ...defaultConfig,\n    hashed: parentTheme?.hashed ?? defaultConfig.hashed,\n    cssVar: parentTheme?.cssVar,\n    zeroRuntime: parentTheme?.zeroRuntime\n  } : parentTheme;\n  // Generate a unique key for cssVar\n  const themeKey = useId();\n  if (process.env.NODE_ENV !== 'production') {\n    const cssVarEnabled = themeConfig.cssVar || parentThemeConfig.cssVar;\n    const validKey = !!(isPlainObject(themeConfig.cssVar) && themeConfig.cssVar?.key || themeKey);\n    process.env.NODE_ENV !== \"production\" ? warning(!cssVarEnabled || validKey, 'breaking', 'Missing key in `cssVar` config. Please upgrade to React 18 or set `cssVar.key` manually in each ConfigProvider inside `cssVar` enabled ConfigProvider.') : void 0;\n  }\n  return useMemo(() => {\n    if (!theme) {\n      return parentTheme;\n    }\n    // Override\n    const mergedComponents = {\n      ...parentThemeConfig.components\n    };\n    Object.keys(theme.components || {}).forEach(componentName => {\n      mergedComponents[componentName] = {\n        ...mergedComponents[componentName],\n        ...theme.components[componentName]\n      };\n    });\n    const cssVarKey = `css-var-${themeKey.replace(/:/g, '')}`;\n    const mergedCssVar = {\n      prefix: config?.prefixCls,\n      // Same as prefixCls by default\n      ...parentThemeConfig.cssVar,\n      ...themeConfig.cssVar,\n      key: themeConfig.cssVar?.key || cssVarKey\n    };\n    // Base token\n    return {\n      ...parentThemeConfig,\n      ...themeConfig,\n      token: {\n        ...parentThemeConfig.token,\n        ...themeConfig.token\n      },\n      components: mergedComponents,\n      cssVar: mergedCssVar\n    };\n  }, [themeConfig, parentThemeConfig, config?.prefixCls, themeKey], (prev, next) => prev.some((prevTheme, index) => {\n    const nextTheme = next[index];\n    return !isEqual(prevTheme, nextTheme, true);\n  }));\n}","\"use client\";\n\nimport * as React from 'react';\nimport { Provider as MotionProvider } from '@rc-component/motion';\nimport { useToken } from '../theme/internal';\nconst MotionCacheContext = /*#__PURE__*/React.createContext(true);\nif (process.env.NODE_ENV !== 'production') {\n  MotionCacheContext.displayName = 'MotionCacheContext';\n}\nexport default function MotionWrapper(props) {\n  const parentMotion = React.useContext(MotionCacheContext);\n  const {\n    children\n  } = props;\n  const [, token] = useToken();\n  const {\n    motion\n  } = token;\n  const needWrapMotionProviderRef = React.useRef(false);\n  needWrapMotionProviderRef.current || (needWrapMotionProviderRef.current = parentMotion !== motion);\n  if (needWrapMotionProviderRef.current) {\n    return /*#__PURE__*/React.createElement(MotionCacheContext.Provider, {\n      value: motion\n    }, /*#__PURE__*/React.createElement(MotionProvider, {\n      motion: motion\n    }, children));\n  }\n  return children;\n}","\"use client\";\n\nimport * as React from 'react';\nimport { devUseWarning } from '../_util/warning';\n/**\n * Warning for ConfigProviderProps.\n * This will be empty function in production.\n */\nconst PropWarning = /*#__PURE__*/React.memo(props => {\n  const {\n    dropdownMatchSelectWidth\n  } = props;\n  const warning = devUseWarning('ConfigProvider');\n  warning.deprecated(dropdownMatchSelectWidth === undefined, 'dropdownMatchSelectWidth', 'popupMatchSelectWidth');\n  return null;\n});\nif (process.env.NODE_ENV !== 'production') {\n  PropWarning.displayName = 'PropWarning';\n}\nexport default process.env.NODE_ENV !== 'production' ? PropWarning : () => null;","\"use client\";\n\nimport * as React from 'react';\nimport { createTheme, StyleContext as CssInJsStyleContext } from '@ant-design/cssinjs';\nimport IconContext from \"@ant-design/icons/es/components/Context\";\nimport { merge, useMemo } from '@rc-component/util';\nimport { isFunction, isPlainObject } from '../_util/is';\nimport warning, { devUseWarning, WarningContext } from '../_util/warning';\nimport ValidateMessagesContext from '../form/validateMessagesContext';\nimport LocaleProvider, { ANT_MARK } from '../locale';\nimport LocaleContext from '../locale/context';\nimport defaultLocale from '../locale/en_US';\nimport { defaultTheme, DesignTokenContext } from '../theme/context';\nimport defaultSeedToken from '../theme/themes/seed';\nimport UniqueProvider from '../tooltip/UniqueProvider';\nimport { ConfigConsumer, ConfigContext, defaultIconPrefixCls, defaultPrefixCls, Variants } from './context';\nimport { DisabledContextProvider } from './DisabledContext';\nimport useConfig from './hooks/useConfig';\nimport useTheme from './hooks/useTheme';\nimport MotionWrapper from './MotionWrapper';\nimport PropWarning from './PropWarning';\nimport SizeContext, { SizeContextProvider } from './SizeContext';\nimport useStyle from './style';\n/**\n * This component registers icon styles inside the DesignTokenContext.Provider\n * so that CSS variables use the correct cssVar key from the theme config.\n */\nconst IconStyle = ({\n  iconPrefixCls,\n  csp\n}) => {\n  useStyle(iconPrefixCls, csp);\n  return null;\n};\nexport { Variants };\n/**\n * Since too many feedback using static method like `Modal.confirm` not getting theme, we record the\n * theme register info here to help developer get warning info.\n */\nlet existThemeConfig = false;\nexport const warnContext = process.env.NODE_ENV !== 'production' ? componentName => {\n  process.env.NODE_ENV !== \"production\" ? warning(!existThemeConfig, componentName, `Static function can not consume context like dynamic theme. Please use 'App' component instead.`) : void 0;\n} : /* istanbul ignore next */\nnull;\nexport { ConfigConsumer, ConfigContext, defaultIconPrefixCls, defaultPrefixCls };\nexport const configConsumerProps = ['getTargetContainer', 'getPopupContainer', 'rootPrefixCls', 'getPrefixCls', 'renderEmpty', 'csp', 'autoInsertSpaceInButton', 'locale'];\n// These props is used by `useContext` directly in sub component\nconst PASSED_PROPS = ['getTargetContainer', 'getPopupContainer', 'renderEmpty', 'input', 'pagination', 'form', 'select', 'button'];\nlet globalPrefixCls;\nlet globalIconPrefixCls;\nlet globalTheme;\nlet globalHolderRender;\nfunction getGlobalPrefixCls() {\n  return globalPrefixCls || defaultPrefixCls;\n}\nfunction getGlobalIconPrefixCls() {\n  return globalIconPrefixCls || defaultIconPrefixCls;\n}\nconst setGlobalConfig = props => {\n  const {\n    prefixCls,\n    iconPrefixCls,\n    theme,\n    holderRender\n  } = props;\n  if (prefixCls !== undefined) {\n    globalPrefixCls = prefixCls;\n  }\n  if (iconPrefixCls !== undefined) {\n    globalIconPrefixCls = iconPrefixCls;\n  }\n  if ('holderRender' in props) {\n    globalHolderRender = holderRender;\n  }\n  if (theme) {\n    globalTheme = theme;\n  }\n};\nexport const globalConfig = () => ({\n  getPrefixCls: (suffixCls, customizePrefixCls) => {\n    if (customizePrefixCls) {\n      return customizePrefixCls;\n    }\n    return suffixCls ? `${getGlobalPrefixCls()}-${suffixCls}` : getGlobalPrefixCls();\n  },\n  getIconPrefixCls: getGlobalIconPrefixCls,\n  getRootPrefixCls: () => {\n    // If Global prefixCls provided, use this\n    if (globalPrefixCls) {\n      return globalPrefixCls;\n    }\n    // Fallback to default prefixCls\n    return getGlobalPrefixCls();\n  },\n  getTheme: () => globalTheme,\n  holderRender: globalHolderRender\n});\nconst ProviderChildren = props => {\n  const {\n    children,\n    csp: customCsp,\n    autoInsertSpaceInButton,\n    alert,\n    affix,\n    anchor,\n    app,\n    form,\n    locale: rawLocale,\n    componentSize,\n    direction,\n    space,\n    splitter,\n    virtual,\n    dropdownMatchSelectWidth,\n    popupMatchSelectWidth,\n    popupOverflow,\n    legacyLocale,\n    parentContext,\n    iconPrefixCls: customIconPrefixCls,\n    theme,\n    componentDisabled,\n    segmented,\n    statistic,\n    spin,\n    calendar,\n    carousel,\n    cascader,\n    collapse,\n    typography,\n    checkbox,\n    descriptions,\n    divider,\n    drawer,\n    skeleton,\n    steps,\n    image,\n    layout,\n    list,\n    listy,\n    mentions,\n    modal,\n    progress,\n    result,\n    slider,\n    breadcrumb,\n    masonry,\n    menu,\n    pagination,\n    input,\n    inputPassword,\n    inputSearch,\n    textArea,\n    otp,\n    empty,\n    badge,\n    borderBeam,\n    radio,\n    rate,\n    ribbon,\n    switch: SWITCH,\n    transfer,\n    avatar,\n    message,\n    tag,\n    table,\n    card,\n    cardMeta,\n    tabs,\n    timeline,\n    timePicker,\n    upload,\n    notification,\n    tree,\n    colorPicker,\n    datePicker,\n    rangePicker,\n    flex,\n    wave,\n    dropdown,\n    warning: warningConfig,\n    tour,\n    tooltip,\n    popover,\n    popconfirm,\n    qrcode,\n    floatButton,\n    floatButtonGroup,\n    variant,\n    inputNumber,\n    treeSelect,\n    watermark\n  } = props;\n  // https://github.com/ant-design/ant-design/issues/57295\n  const locale = React.useMemo(() => {\n    if (isPlainObject(rawLocale) && Object.prototype.hasOwnProperty.call(rawLocale, 'default') && rawLocale.default?.locale) {\n      return rawLocale.default;\n    }\n    return rawLocale;\n  }, [rawLocale]);\n  // =================================== Context ===================================\n  const getPrefixCls = React.useCallback((suffixCls, customizePrefixCls) => {\n    const {\n      prefixCls\n    } = props;\n    if (customizePrefixCls) {\n      return customizePrefixCls;\n    }\n    const mergedPrefixCls = prefixCls || parentContext.getPrefixCls('');\n    return suffixCls ? `${mergedPrefixCls}-${suffixCls}` : mergedPrefixCls;\n  }, [parentContext.getPrefixCls, props.prefixCls]);\n  const iconPrefixCls = customIconPrefixCls || parentContext.iconPrefixCls || defaultIconPrefixCls;\n  const csp = customCsp || parentContext.csp;\n  const mergedTheme = useTheme(theme, parentContext.theme, {\n    prefixCls: getPrefixCls('')\n  });\n  if (process.env.NODE_ENV !== 'production') {\n    existThemeConfig = existThemeConfig || !!mergedTheme;\n  }\n  const baseConfig = {\n    csp,\n    autoInsertSpaceInButton,\n    alert,\n    affix,\n    anchor,\n    app,\n    locale: locale || legacyLocale,\n    direction,\n    space,\n    splitter,\n    virtual,\n    popupMatchSelectWidth: popupMatchSelectWidth ?? dropdownMatchSelectWidth,\n    popupOverflow,\n    getPrefixCls,\n    iconPrefixCls,\n    theme: mergedTheme,\n    segmented,\n    statistic,\n    spin,\n    calendar,\n    carousel,\n    cascader,\n    collapse,\n    typography,\n    checkbox,\n    descriptions,\n    divider,\n    drawer,\n    skeleton,\n    steps,\n    image,\n    input,\n    inputPassword,\n    inputSearch,\n    textArea,\n    otp,\n    layout,\n    list,\n    listy,\n    mentions,\n    modal,\n    progress,\n    result,\n    slider,\n    breadcrumb,\n    masonry,\n    menu,\n    pagination,\n    empty,\n    badge,\n    borderBeam,\n    radio,\n    rate,\n    ribbon,\n    switch: SWITCH,\n    transfer,\n    avatar,\n    message,\n    tag,\n    table,\n    card,\n    cardMeta,\n    tabs,\n    timeline,\n    timePicker,\n    upload,\n    notification,\n    tree,\n    colorPicker,\n    datePicker,\n    rangePicker,\n    flex,\n    wave,\n    dropdown,\n    warning: warningConfig,\n    tour,\n    tooltip,\n    popover,\n    popconfirm,\n    qrcode,\n    floatButton,\n    floatButtonGroup,\n    variant,\n    inputNumber,\n    treeSelect,\n    watermark\n  };\n  if (process.env.NODE_ENV !== 'production') {\n    const warningFn = devUseWarning('ConfigProvider');\n    warningFn(!('autoInsertSpaceInButton' in props), 'deprecated', '`autoInsertSpaceInButton` is deprecated. Please use `{ button: { autoInsertSpace: boolean }}` instead.');\n  }\n  const config = {\n    ...parentContext\n  };\n  Object.keys(baseConfig).forEach(key => {\n    if (baseConfig[key] !== undefined) {\n      config[key] = baseConfig[key];\n    }\n  });\n  // Pass the props used by `useContext` directly with child component.\n  // These props should merged into `config`.\n  PASSED_PROPS.forEach(propName => {\n    const propValue = props[propName];\n    if (propValue) {\n      config[propName] = propValue;\n    }\n  });\n  if (typeof autoInsertSpaceInButton !== 'undefined') {\n    // merge deprecated api\n    config.button = {\n      autoInsertSpace: autoInsertSpaceInButton,\n      ...config.button\n    };\n  }\n  // https://github.com/ant-design/ant-design/issues/27617\n  const memoedConfig = useMemo(() => config, config, (prevConfig, currentConfig) => {\n    const prevKeys = Object.keys(prevConfig);\n    const currentKeys = Object.keys(currentConfig);\n    return prevKeys.length !== currentKeys.length || prevKeys.some(key => prevConfig[key] !== currentConfig[key]);\n  });\n  const {\n    layer\n  } = React.useContext(CssInJsStyleContext);\n  const memoIconContextValue = React.useMemo(() => ({\n    prefixCls: iconPrefixCls,\n    csp,\n    layer: layer ? 'antd' : undefined,\n    zeroRuntime: !!layer || mergedTheme?.zeroRuntime\n  }), [iconPrefixCls, csp, layer, mergedTheme?.zeroRuntime]);\n  let childNode = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(IconStyle, {\n    iconPrefixCls: iconPrefixCls,\n    csp: csp\n  }), /*#__PURE__*/React.createElement(PropWarning, {\n    dropdownMatchSelectWidth: dropdownMatchSelectWidth\n  }), children);\n  const validateMessages = React.useMemo(() => merge(defaultLocale.Form?.defaultValidateMessages || {}, memoedConfig.locale?.Form?.defaultValidateMessages || {}, memoedConfig.form?.validateMessages || {}, form?.validateMessages || {}), [memoedConfig, form?.validateMessages]);\n  if (Object.keys(validateMessages).length > 0) {\n    childNode = /*#__PURE__*/React.createElement(ValidateMessagesContext.Provider, {\n      value: validateMessages\n    }, childNode);\n  }\n  if (locale) {\n    childNode = /*#__PURE__*/React.createElement(LocaleProvider, {\n      locale: locale,\n      _ANT_MARK__: ANT_MARK\n    }, childNode);\n  }\n  if (iconPrefixCls || csp) {\n    childNode = /*#__PURE__*/React.createElement(IconContext.Provider, {\n      value: memoIconContextValue\n    }, childNode);\n  }\n  if (componentSize) {\n    childNode = /*#__PURE__*/React.createElement(SizeContextProvider, {\n      size: componentSize\n    }, childNode);\n  }\n  // =================================== Motion ===================================\n  childNode = /*#__PURE__*/React.createElement(MotionWrapper, null, childNode);\n  // ================================ Tooltip Unique ===============================\n  if (tooltip?.unique) {\n    childNode = /*#__PURE__*/React.createElement(UniqueProvider, null, childNode);\n  }\n  // ================================ Dynamic theme ================================\n  const memoTheme = React.useMemo(() => {\n    const {\n      algorithm,\n      token,\n      components,\n      cssVar,\n      ...rest\n    } = mergedTheme || {};\n    const themeObj = algorithm && (!Array.isArray(algorithm) || algorithm.length > 0) ? createTheme(algorithm) : defaultTheme;\n    const parsedComponents = {};\n    Object.entries(components || {}).forEach(([componentName, componentToken]) => {\n      const parsedToken = {\n        ...componentToken\n      };\n      if ('algorithm' in parsedToken) {\n        if (parsedToken.algorithm === true) {\n          parsedToken.theme = themeObj;\n        } else if (Array.isArray(parsedToken.algorithm) || isFunction(parsedToken.algorithm)) {\n          parsedToken.theme = createTheme(parsedToken.algorithm);\n        }\n        delete parsedToken.algorithm;\n      }\n      parsedComponents[componentName] = parsedToken;\n    });\n    const mergedToken = {\n      ...defaultSeedToken,\n      ...token\n    };\n    return {\n      ...rest,\n      theme: themeObj,\n      token: mergedToken,\n      components: parsedComponents,\n      override: {\n        override: mergedToken,\n        ...parsedComponents\n      },\n      cssVar\n    };\n  }, [mergedTheme]);\n  if (theme) {\n    childNode = /*#__PURE__*/React.createElement(DesignTokenContext.Provider, {\n      value: memoTheme\n    }, childNode);\n  }\n  // ================================== Warning ===================================\n  if (memoedConfig.warning) {\n    childNode = /*#__PURE__*/React.createElement(WarningContext.Provider, {\n      value: memoedConfig.warning\n    }, childNode);\n  }\n  // =================================== Render ===================================\n  if (componentDisabled !== undefined) {\n    childNode = /*#__PURE__*/React.createElement(DisabledContextProvider, {\n      disabled: componentDisabled\n    }, childNode);\n  }\n  return /*#__PURE__*/React.createElement(ConfigContext.Provider, {\n    value: memoedConfig\n  }, childNode);\n};\nconst ConfigProvider = props => {\n  const context = React.useContext(ConfigContext);\n  const antLocale = React.useContext(LocaleContext);\n  return /*#__PURE__*/React.createElement(ProviderChildren, {\n    parentContext: context,\n    legacyLocale: antLocale,\n    ...props\n  });\n};\nConfigProvider.ConfigContext = ConfigContext;\nConfigProvider.SizeContext = SizeContext;\nConfigProvider.config = setGlobalConfig;\nConfigProvider.useConfig = useConfig;\nObject.defineProperty(ConfigProvider, 'SizeContext', {\n  get: () => {\n    process.env.NODE_ENV !== \"production\" ? warning(false, 'ConfigProvider', 'ConfigProvider.SizeContext is deprecated. Please use `ConfigProvider.useConfig().componentSize` instead.') : void 0;\n    return SizeContext;\n  }\n});\nif (process.env.NODE_ENV !== 'production') {\n  ConfigProvider.displayName = 'ConfigProvider';\n}\nexport default ConfigProvider;","/**\n * This hook is only for cssVar to add root className for components.\n * If root ClassName is needed, this hook could be refactored with `-root`\n * @param prefixCls\n */\nconst useCSSVarCls = prefixCls => `${prefixCls}-css-var`;\nexport default useCSSVarCls;","import React from 'react';\nimport { isFunction, isString } from '../../_util/is';\nimport SizeContext from '../SizeContext';\nconst useSize = customSize => {\n  const size = React.useContext(SizeContext);\n  const mergedSize = React.useMemo(() => {\n    if (!customSize) {\n      return size;\n    }\n    if (isString(customSize)) {\n      return customSize ?? size;\n    }\n    if (isFunction(customSize)) {\n      return customSize(size);\n    }\n    return size;\n  }, [customSize, size]);\n  return mergedSize;\n};\nexport default useSize;","// form item name black list.  in form ,you can use form.id get the form item element.\n// use object hasOwnProperty will get better performance if black list is longer.\nconst formItemNameBlackList = ['parentNode'];\n// default form item id prefix.\nconst defaultItemNamePrefixCls = 'form_item';\nexport function toArray(candidate) {\n  if (candidate === undefined || candidate === false) {\n    return [];\n  }\n  return Array.isArray(candidate) ? candidate : [candidate];\n}\nexport function getFieldId(namePath, formName) {\n  if (!namePath.length) {\n    return undefined;\n  }\n  const mergedId = namePath.join('_');\n  if (formName) {\n    return `${formName}_${mergedId}`;\n  }\n  const isIllegalName = formItemNameBlackList.includes(mergedId);\n  return isIllegalName ? `${defaultItemNamePrefixCls}_${mergedId}` : mergedId;\n}\n/**\n * Get merged status by meta or passed `validateStatus`.\n */\nexport function getStatus(errors, warnings, meta, defaultValidateStatus, hasFeedback, validateStatus) {\n  let status = defaultValidateStatus;\n  if (validateStatus !== undefined) {\n    status = validateStatus;\n  } else if (meta.validating) {\n    status = 'validating';\n  } else if (errors.length) {\n    status = 'error';\n  } else if (warnings.length) {\n    status = 'warning';\n  } else if (meta.touched || hasFeedback && meta.validated) {\n    // success feedback should display when pass hasFeedback prop and current value is valid value\n    status = 'success';\n  }\n  return status;\n}","import * as React from 'react';\nimport { useForm as useRcForm } from '@rc-component/form';\nimport { getDOM } from '@rc-component/util';\nimport scrollIntoView from 'scroll-into-view-if-needed';\nimport { isFunction } from '../../_util/is';\nimport { getFieldId, toArray } from '../util';\nexport function toNamePathStr(name) {\n  const namePath = toArray(name);\n  return namePath.join('_');\n}\nfunction getFieldDOMNode(name, wrapForm) {\n  const field = wrapForm.getFieldInstance(name);\n  const fieldDom = getDOM(field);\n  if (fieldDom) {\n    return fieldDom;\n  }\n  const fieldId = getFieldId(toArray(name), wrapForm.__INTERNAL__.name);\n  if (fieldId) {\n    return document.getElementById(fieldId);\n  }\n}\nexport default function useForm(form) {\n  const [rcForm] = useRcForm();\n  const itemsRef = React.useRef({});\n  const wrapForm = React.useMemo(() => form ?? {\n    ...rcForm,\n    __INTERNAL__: {\n      itemRef: name => node => {\n        const namePathStr = toNamePathStr(name);\n        if (node) {\n          itemsRef.current[namePathStr] = node;\n        } else {\n          delete itemsRef.current[namePathStr];\n        }\n      }\n    },\n    scrollToField: (name, options = {}) => {\n      const {\n        focus,\n        ...restOpt\n      } = options;\n      const node = getFieldDOMNode(name, wrapForm);\n      if (node) {\n        scrollIntoView(node, {\n          scrollMode: 'if-needed',\n          block: 'nearest',\n          ...restOpt\n        });\n        // Focus if scroll success\n        if (focus) {\n          wrapForm.focusField(name);\n        }\n      }\n    },\n    focusField: name => {\n      const itemRef = wrapForm.getFieldInstance(name);\n      if (isFunction(itemRef?.focus)) {\n        itemRef.focus();\n      } else {\n        getFieldDOMNode(name, wrapForm)?.focus?.();\n      }\n    },\n    getFieldInstance: name => {\n      const namePathStr = toNamePathStr(name);\n      return itemsRef.current[namePathStr];\n    }\n  }, [form, rcForm]);\n  return [wrapForm];\n}","import * as React from 'react';\nconst RadioGroupContext = /*#__PURE__*/React.createContext(undefined);\nexport const RadioGroupContextProvider = RadioGroupContext.Provider;\nexport default RadioGroupContext;\nexport const RadioOptionTypeContext = /*#__PURE__*/React.createContext(undefined);\nexport const RadioOptionTypeContextProvider = RadioOptionTypeContext.Provider;","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport useControlledState from \"@rc-component/util/es/hooks/useControlledState\";\nimport { clsx } from 'clsx';\nimport * as React from 'react';\nimport { forwardRef, useImperativeHandle, useRef } from 'react';\nexport const Checkbox = /*#__PURE__*/forwardRef((props, ref) => {\n  const {\n    prefixCls = 'rc-checkbox',\n    className,\n    style,\n    checked,\n    disabled,\n    defaultChecked = false,\n    type = 'checkbox',\n    title,\n    onChange,\n    ...inputProps\n  } = props;\n  const inputRef = useRef(null);\n  const holderRef = useRef(null);\n  const [rawValue, setRawValue] = useControlledState(defaultChecked, checked);\n  useImperativeHandle(ref, () => ({\n    focus: options => {\n      inputRef.current?.focus(options);\n    },\n    blur: () => {\n      inputRef.current?.blur();\n    },\n    input: inputRef.current,\n    nativeElement: holderRef.current\n  }));\n  const classString = clsx(prefixCls, className, {\n    [`${prefixCls}-checked`]: rawValue,\n    [`${prefixCls}-disabled`]: disabled\n  });\n  const handleChange = e => {\n    if (disabled) {\n      return;\n    }\n    if (!('checked' in props)) {\n      setRawValue(e.target.checked);\n    }\n    onChange?.({\n      target: {\n        ...props,\n        type,\n        checked: e.target.checked\n      },\n      stopPropagation() {\n        e.stopPropagation();\n      },\n      preventDefault() {\n        e.preventDefault();\n      },\n      nativeEvent: e.nativeEvent\n    });\n  };\n  return /*#__PURE__*/React.createElement(\"span\", {\n    className: classString,\n    title: title,\n    style: style,\n    ref: holderRef\n  }, /*#__PURE__*/React.createElement(\"input\", _extends({}, inputProps, {\n    className: `${prefixCls}-input`,\n    ref: inputRef,\n    onChange: handleChange,\n    disabled: disabled,\n    checked: !!rawValue,\n    type: type\n  })));\n});\nexport default Checkbox;","import { genComponentStyleHook } from '../../theme/internal';\nimport { genCssVar } from '../../theme/util/genStyleUtils';\nconst genWaveStyle = token => {\n  const {\n    componentCls,\n    colorPrimary,\n    motionDurationSlow,\n    motionEaseInOut,\n    motionEaseOutCirc,\n    antCls\n  } = token;\n  const [, varRef] = genCssVar(antCls, 'wave');\n  return {\n    [componentCls]: {\n      position: 'absolute',\n      background: 'transparent',\n      pointerEvents: 'none',\n      boxSizing: 'border-box',\n      color: varRef('color', colorPrimary),\n      boxShadow: `0 0 0 0 currentcolor`,\n      opacity: 0.2,\n      // =================== Motion ===================\n      '&.wave-motion-appear': {\n        transition: [`box-shadow 0.4s`, `opacity 2s`].map(prop => `${prop} ${motionEaseOutCirc}`).join(','),\n        '&-active': {\n          boxShadow: `0 0 0 6px currentcolor`,\n          opacity: 0\n        },\n        '&.wave-quick': {\n          transition: [`box-shadow`, `opacity`].map(prop => `${prop} ${motionDurationSlow} ${motionEaseInOut}`).join(',')\n        }\n      }\n    }\n  };\n};\nexport default genComponentStyleHook('Wave', genWaveStyle);","import { defaultPrefixCls } from '../../config-provider';\nexport const TARGET_CLS = `${defaultPrefixCls}-wave-target`;","import { isString } from '../is';\nexport const isValidWaveColor = color => {\n  if (!color) {\n    return false;\n  }\n  return isString(color) && color !== '#fff' && color !== '#ffffff' && color !== 'rgb(255, 255, 255)' && color !== 'rgba(255, 255, 255, 1)' && !/rgba\\((?:\\d*, ){3}0\\)/i.test(color) &&\n  // any transparent rgba color\n  !/^#(?:[0-9a-f]{3}0|[0-9a-f]{6}00)$/i.test(color) &&\n  // any transparent hex color\n  color !== 'transparent' && color !== 'canvastext';\n};\nexport function getTargetWaveColor(node, colorSource = null) {\n  const style = getComputedStyle(node);\n  const {\n    borderTopColor,\n    borderColor,\n    backgroundColor\n  } = style;\n  if (colorSource && isValidWaveColor(style[colorSource])) {\n    return style[colorSource];\n  }\n  return [borderTopColor, borderColor, backgroundColor].find(isValidWaveColor) ?? null;\n}","\"use client\";\n\nimport * as React from 'react';\nimport CSSMotion from '@rc-component/motion';\nimport { composeRef, raf, render, unmount } from '@rc-component/util';\nimport { clsx } from 'clsx';\nimport { ConfigContext } from '../../config-provider';\nimport { genCssVar } from '../../theme/util/genStyleUtils';\nimport { isTransitionEvent } from '../is';\nimport { TARGET_CLS } from './interface';\nimport { getTargetWaveColor } from './util';\nfunction validateNum(value) {\n  return Number.isNaN(value) ? 0 : value;\n}\nconst WaveEffect = props => {\n  const {\n    className,\n    target,\n    component,\n    colorSource\n  } = props;\n  const divRef = React.useRef(null);\n  const {\n    getPrefixCls\n  } = React.useContext(ConfigContext);\n  const rootPrefixCls = getPrefixCls();\n  const [varName] = genCssVar(rootPrefixCls, 'wave');\n  // ===================== Effect =====================\n  const [waveColor, setWaveColor] = React.useState(null);\n  const [borderRadius, setBorderRadius] = React.useState([]);\n  const [left, setLeft] = React.useState(0);\n  const [top, setTop] = React.useState(0);\n  const [width, setWidth] = React.useState(0);\n  const [height, setHeight] = React.useState(0);\n  const [enabled, setEnabled] = React.useState(false);\n  const waveStyle = {\n    left,\n    top,\n    width,\n    height,\n    borderRadius: borderRadius.map(radius => `${radius}px`).join(' ')\n  };\n  if (waveColor) {\n    waveStyle[varName('color')] = waveColor;\n  }\n  function syncPos() {\n    const nodeStyle = getComputedStyle(target);\n    // Get wave color from target\n    setWaveColor(getTargetWaveColor(target, colorSource));\n    const isStatic = nodeStyle.position === 'static';\n    // Rect\n    const {\n      borderLeftWidth,\n      borderTopWidth\n    } = nodeStyle;\n    setLeft(isStatic ? target.offsetLeft : validateNum(-Number.parseFloat(borderLeftWidth)));\n    setTop(isStatic ? target.offsetTop : validateNum(-Number.parseFloat(borderTopWidth)));\n    setWidth(target.offsetWidth);\n    setHeight(target.offsetHeight);\n    // Get border radius\n    const {\n      borderTopLeftRadius,\n      borderTopRightRadius,\n      borderBottomLeftRadius,\n      borderBottomRightRadius\n    } = nodeStyle;\n    setBorderRadius([borderTopLeftRadius, borderTopRightRadius, borderBottomRightRadius, borderBottomLeftRadius].map(radius => validateNum(Number.parseFloat(radius))));\n  }\n  React.useEffect(() => {\n    if (target) {\n      // We need delay to check position here\n      // since UI may change after click\n      const id = raf(() => {\n        syncPos();\n        setEnabled(true);\n      });\n      // Add resize observer to follow size\n      let resizeObserver;\n      if (typeof ResizeObserver !== 'undefined') {\n        resizeObserver = new ResizeObserver(syncPos);\n        resizeObserver.observe(target);\n      }\n      return () => {\n        raf.cancel(id);\n        resizeObserver?.disconnect();\n      };\n    }\n  }, [target]);\n  if (!enabled) {\n    return null;\n  }\n  const isSmallComponent = (component === 'Checkbox' || component === 'Radio') && target?.classList.contains(TARGET_CLS);\n  return /*#__PURE__*/React.createElement(CSSMotion, {\n    visible: true,\n    motionAppear: true,\n    motionName: \"wave-motion\",\n    motionDeadline: 5000,\n    onAppearEnd: (_, event) => {\n      if (event.deadline || isTransitionEvent(event) && event.propertyName === 'opacity') {\n        const holder = divRef.current?.parentElement;\n        unmount(holder).then(() => {\n          holder?.remove();\n        });\n      }\n      return false;\n    }\n  }, ({\n    className: motionClassName\n  }, ref) => (/*#__PURE__*/React.createElement(\"div\", {\n    ref: composeRef(divRef, ref),\n    className: clsx(className, motionClassName, {\n      'wave-quick': isSmallComponent\n    }),\n    style: waveStyle\n  })));\n};\nconst showWaveEffect = (target, info) => {\n  const {\n    component\n  } = info;\n  // Skip for unchecked checkbox\n  if (component === 'Checkbox' && !target.querySelector('input')?.checked) {\n    return;\n  }\n  // Create holder\n  const holder = document.createElement('div');\n  holder.style.position = 'absolute';\n  holder.style.left = '0px';\n  holder.style.top = '0px';\n  target?.insertBefore(holder, target?.firstChild);\n  render(/*#__PURE__*/React.createElement(WaveEffect, {\n    ...info,\n    target: target\n  }), holder);\n};\nexport default showWaveEffect;","import * as React from 'react';\nimport { raf, useEvent } from '@rc-component/util';\nimport { ConfigContext } from '../../config-provider';\nimport useToken from '../../theme/useToken';\nimport { TARGET_CLS } from './interface';\nimport showWaveEffect from './WaveEffect';\nconst useWave = (nodeRef, className, component, colorSource) => {\n  const {\n    wave\n  } = React.useContext(ConfigContext);\n  const [, token, hashId] = useToken();\n  const showWave = useEvent(event => {\n    const node = nodeRef.current;\n    if (wave?.disabled || !node) {\n      return;\n    }\n    const targetNode = node.querySelector(`.${TARGET_CLS}`) || node;\n    const {\n      showEffect\n    } = wave || {};\n    // Customize wave effect\n    (showEffect || showWaveEffect)(targetNode, {\n      className,\n      token,\n      component,\n      event,\n      hashId,\n      colorSource\n    });\n  });\n  const rafIdRef = React.useRef(null);\n  // Clean up RAF on unmount to prevent memory leaks and stale callbacks\n  React.useEffect(() => () => {\n    raf.cancel(rafIdRef.current);\n  }, []);\n  // Merge trigger event into one for each frame\n  const showDebounceWave = event => {\n    raf.cancel(rafIdRef.current);\n    rafIdRef.current = raf(() => {\n      showWave(event);\n    });\n  };\n  return showDebounceWave;\n};\nexport default useWave;","import React, { useContext, useRef } from 'react';\nimport { composeRef, getNodeRef, isVisible, supportRef } from '@rc-component/util';\nimport { clsx } from 'clsx';\nimport { ConfigContext } from '../../config-provider';\nimport { cloneElement } from '../reactNode';\nimport useStyle from './style';\nimport useWave from './useWave';\nconst TRIGGER_TYPE_TO_EVENT_MAP = {\n  click: 'click',\n  mousedown: 'mousedown',\n  mouseup: 'mouseup',\n  pointerdown: 'pointerdown',\n  pointerup: 'pointerup'\n};\nconst Wave = props => {\n  const {\n    children,\n    disabled,\n    component,\n    colorSource\n  } = props;\n  const {\n    getPrefixCls,\n    wave\n  } = useContext(ConfigContext);\n  const containerRef = useRef(null);\n  // ============================== Style ===============================\n  const prefixCls = getPrefixCls('wave');\n  const hashId = useStyle(prefixCls);\n  // =============================== Wave ===============================\n  const showWave = useWave(containerRef, clsx(prefixCls, hashId), component, colorSource);\n  // ============================== Effect ==============================\n  React.useEffect(() => {\n    const node = containerRef.current;\n    if (!node || node.nodeType !== window.Node.ELEMENT_NODE || disabled) {\n      return;\n    }\n    const onClick = e => {\n      // Fix radio button click twice\n      if (!isVisible(e.target) || !node.getAttribute || node.getAttribute('disabled') || node.disabled || node.className.includes('disabled') && !node.className.includes('disabled:') || node.getAttribute('aria-disabled') === 'true' || node.className.includes('-leave')) {\n        return;\n      }\n      showWave(e);\n    };\n    const triggerType = wave?.triggerType;\n    const eventName = triggerType && triggerType in TRIGGER_TYPE_TO_EVENT_MAP ? TRIGGER_TYPE_TO_EVENT_MAP[triggerType] : 'click';\n    node.addEventListener(eventName, onClick, true);\n    return () => {\n      node.removeEventListener(eventName, onClick, true);\n    };\n  }, [disabled, wave?.triggerType]);\n  // ============================== Render ==============================\n  if (! /*#__PURE__*/React.isValidElement(children)) {\n    return children ?? null;\n  }\n  const ref = supportRef(children) ? composeRef(getNodeRef(children), containerRef) : containerRef;\n  return cloneElement(children, {\n    ref\n  });\n};\nif (process.env.NODE_ENV !== 'production') {\n  Wave.displayName = 'Wave';\n}\nexport default Wave;","import React from 'react';\nimport { raf } from '@rc-component/util';\n/**\n * When click on the label,\n * the event will be stopped to prevent the label from being clicked twice.\n * label click -> input click -> label click again\n */\nexport default function useBubbleLock(onOriginInputClick) {\n  const labelClickLockRef = React.useRef(null);\n  const clearLock = () => {\n    raf.cancel(labelClickLockRef.current);\n    labelClickLockRef.current = null;\n  };\n  const onLabelClick = () => {\n    clearLock();\n    labelClickLockRef.current = raf(() => {\n      labelClickLockRef.current = null;\n    });\n  };\n  const onInputClick = e => {\n    if (labelClickLockRef.current) {\n      e.stopPropagation();\n      clearLock();\n    }\n    onOriginInputClick?.(e);\n  };\n  return [onLabelClick, onInputClick];\n}","import { unit } from '@ant-design/cssinjs';\nimport { genFocusOutline, resetComponent } from '../../style';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\n// ============================== Styles ==============================\n// styles from RadioGroup only\nconst getGroupRadioStyle = token => {\n  const {\n    componentCls,\n    antCls,\n    lineWidth,\n    borderRadius,\n    borderRadiusLG,\n    borderRadiusSM,\n    calc\n  } = token;\n  const groupPrefixCls = `${componentCls}-group`;\n  const buttonWrapperCls = `${componentCls}-button-wrapper`;\n  const badgeCls = `${antCls}-badge`;\n  const genVerticalBadgeButtonStyle = radius => ({\n    [`> ${badgeCls}`]: {\n      width: 'auto'\n    },\n    [`> ${badgeCls} > ${buttonWrapperCls}`]: {\n      width: '100%'\n    },\n    [`> ${badgeCls}:not(:last-child)`]: {\n      marginBlockEnd: calc(lineWidth).mul(-1).equal()\n    },\n    [`> ${badgeCls} > ${buttonWrapperCls}:not(:last-child)`]: {\n      marginBlockEnd: 0\n    },\n    [`> ${badgeCls}:first-child > ${buttonWrapperCls}`]: {\n      borderStartStartRadius: radius,\n      borderStartEndRadius: radius,\n      borderEndStartRadius: 0,\n      borderEndEndRadius: 0\n    },\n    [`> ${badgeCls}:last-child > ${buttonWrapperCls}`]: {\n      borderStartStartRadius: 0,\n      borderStartEndRadius: 0,\n      borderEndStartRadius: radius,\n      borderEndEndRadius: radius\n    },\n    [`> ${badgeCls}:not(:first-child):not(:last-child) > ${buttonWrapperCls}`]: {\n      borderRadius: 0\n    },\n    [`> ${badgeCls}:first-child:last-child > ${buttonWrapperCls}`]: {\n      borderRadius: radius\n    }\n  });\n  return {\n    [groupPrefixCls]: {\n      ...resetComponent(token),\n      display: 'inline-block',\n      fontSize: 0,\n      // RTL\n      [`&${groupPrefixCls}-rtl`]: {\n        direction: 'rtl'\n      },\n      [`&${groupPrefixCls}-block`]: {\n        display: 'flex'\n      },\n      [`${antCls}-badge ${antCls}-badge-count`]: {\n        zIndex: 1\n      },\n      [`> ${antCls}-badge:not(:first-child) > ${antCls}-button-wrapper`]: {\n        borderInlineStart: 'none'\n      },\n      '&-vertical': {\n        display: 'flex',\n        flexDirection: 'column',\n        rowGap: token.marginXS,\n        [`&:has(> ${buttonWrapperCls}, > ${badgeCls} > ${buttonWrapperCls})`]: {\n          rowGap: 0\n        },\n        [`${componentCls}-wrapper`]: {\n          marginInlineEnd: 0\n        },\n        ...genVerticalBadgeButtonStyle(borderRadius),\n        [`&${groupPrefixCls}-large`]: {\n          ...genVerticalBadgeButtonStyle(borderRadiusLG)\n        },\n        [`&${groupPrefixCls}-small`]: {\n          ...genVerticalBadgeButtonStyle(borderRadiusSM)\n        }\n      }\n    }\n  };\n};\n// Styles from radio-wrapper\nconst getRadioBasicStyle = token => {\n  const {\n    componentCls,\n    wrapperMarginInlineEnd,\n    colorPrimary,\n    colorPrimaryHover,\n    radioSize,\n    motionDurationSlow,\n    motionDurationMid,\n    motionEaseInOutCirc,\n    colorBgContainer,\n    colorBorder,\n    lineWidth,\n    colorBgContainerDisabled,\n    colorTextDisabled,\n    paddingXS,\n    dotColorDisabled,\n    dotSize,\n    lineType,\n    radioColor,\n    radioBgColor\n  } = token;\n  return {\n    [`${componentCls}-wrapper`]: {\n      ...resetComponent(token),\n      display: 'inline-flex',\n      alignItems: 'baseline',\n      marginInlineStart: 0,\n      marginInlineEnd: wrapperMarginInlineEnd,\n      cursor: 'pointer',\n      '&:last-child': {\n        marginInlineEnd: 0\n      },\n      // RTL\n      [`&${componentCls}-wrapper-rtl`]: {\n        direction: 'rtl'\n      },\n      '&-disabled': {\n        cursor: 'not-allowed',\n        color: token.colorTextDisabled\n      },\n      '&::after': {\n        display: 'inline-block',\n        width: 0,\n        overflow: 'hidden',\n        content: '\"\\\\a0\"'\n      },\n      '&-block': {\n        flex: 1,\n        justifyContent: 'center'\n      },\n      // ===================== Radio =====================\n      [componentCls]: {\n        ...resetComponent(token),\n        position: 'relative',\n        whiteSpace: 'nowrap',\n        lineHeight: 1,\n        cursor: 'pointer',\n        alignSelf: 'center',\n        // Styles moved from inner\n        boxSizing: 'border-box',\n        display: 'block',\n        width: `calc(${radioSize} * 1px)`,\n        height: `calc(${radioSize} * 1px)`,\n        backgroundColor: colorBgContainer,\n        border: `${unit(lineWidth)} ${lineType} ${colorBorder}`,\n        borderRadius: '50%',\n        transition: `all ${motionDurationMid}`,\n        flex: 'none',\n        // Dot\n        '&:after': {\n          content: '\"\"',\n          position: 'absolute',\n          top: '50%',\n          left: '50%',\n          transform: 'translate(-50%, -50%) scale(0)',\n          width: `calc(${dotSize} * 1px)`,\n          height: `calc(${dotSize} * 1px)`,\n          backgroundColor: radioColor,\n          borderRadius: '50%',\n          transformOrigin: '50% 50%',\n          opacity: 0,\n          transition: `all ${motionDurationSlow} ${motionEaseInOutCirc}`\n        },\n        // Wrapper > Radio > input\n        [`${componentCls}-input`]: {\n          position: 'absolute',\n          inset: 0,\n          zIndex: 1,\n          cursor: 'pointer',\n          opacity: 0,\n          margin: 0\n        },\n        // Focus outline on radio when input is focus-visible\n        [`&:has(${componentCls}-input:focus-visible)`]: genFocusOutline(token)\n      },\n      // ===================== Hover =====================\n      [`&:hover:not(${componentCls}-wrapper-disabled) ${componentCls}`]: {\n        borderColor: colorPrimary\n      },\n      [`&:hover ${componentCls}-checked:not(${componentCls}-disabled)`]: {\n        backgroundColor: colorPrimaryHover,\n        borderColor: 'transparent'\n      },\n      // ==================== Checked ====================\n      [`${componentCls}-checked`]: {\n        backgroundColor: radioBgColor,\n        borderColor: colorPrimary,\n        '&::after': {\n          transform: `translate(-50%, -50%)`,\n          opacity: 1\n        }\n      },\n      // ==================== Disable ====================\n      [`${componentCls}-disabled`]: {\n        // Wrapper > Radio > input\n        [`&, ${componentCls}-input`]: {\n          cursor: 'not-allowed',\n          // Disabled for native input to enable Tooltip event handler\n          pointerEvents: 'none'\n        },\n        // Disabled radio styles\n        background: colorBgContainerDisabled,\n        borderColor: colorBorder,\n        '&::after': {\n          backgroundColor: dotColorDisabled\n        }\n      },\n      [`${componentCls}-disabled + span`]: {\n        color: colorTextDisabled,\n        cursor: 'not-allowed'\n      },\n      [`span${componentCls} + *`]: {\n        paddingInlineStart: paddingXS,\n        paddingInlineEnd: paddingXS\n      }\n    }\n  };\n};\n// Styles from radio-button\nconst getRadioButtonStyle = token => {\n  const {\n    buttonColor,\n    controlHeight,\n    componentCls,\n    lineWidth,\n    lineType,\n    colorBorder,\n    motionDurationMid,\n    buttonPaddingInline,\n    fontSize,\n    buttonBg,\n    fontSizeLG,\n    controlHeightLG,\n    controlHeightSM,\n    paddingXS,\n    borderRadius,\n    borderRadiusSM,\n    borderRadiusLG,\n    buttonCheckedBg,\n    buttonSolidCheckedColor,\n    colorTextDisabled,\n    colorBgContainerDisabled,\n    buttonCheckedBgDisabled,\n    buttonCheckedColorDisabled,\n    colorPrimary,\n    colorPrimaryHover,\n    colorPrimaryActive,\n    buttonSolidCheckedBg,\n    buttonSolidCheckedHoverBg,\n    buttonSolidCheckedActiveBg,\n    calc\n  } = token;\n  return {\n    [`${componentCls}-button-wrapper`]: {\n      position: 'relative',\n      display: 'inline-block',\n      height: controlHeight,\n      margin: 0,\n      paddingInline: buttonPaddingInline,\n      paddingBlock: 0,\n      color: buttonColor,\n      fontSize,\n      lineHeight: unit(calc(controlHeight).sub(calc(lineWidth).mul(2)).equal()),\n      background: buttonBg,\n      border: `${unit(lineWidth)} ${lineType} ${colorBorder}`,\n      // strange align fix for chrome but works\n      // https://gw.alipayobjects.com/zos/rmsportal/VFTfKXJuogBAXcvfAUWJ.gif\n      borderBlockStartWidth: calc(lineWidth).add(0.02).equal(),\n      borderInlineEndWidth: lineWidth,\n      cursor: 'pointer',\n      transition: [`color`, `background-color`, `box-shadow`].map(prop => `${prop} ${motionDurationMid}`).join(','),\n      a: {\n        color: buttonColor\n      },\n      [`> ${componentCls}-button`]: {\n        position: 'absolute',\n        insetBlockStart: 0,\n        insetInlineStart: 0,\n        zIndex: -1,\n        width: '100%',\n        height: '100%'\n      },\n      '&:not(:last-child)': {\n        marginInlineEnd: calc(lineWidth).mul(-1).equal()\n      },\n      '&:first-child': {\n        borderInlineStart: `${unit(lineWidth)} ${lineType} ${colorBorder}`,\n        borderStartStartRadius: borderRadius,\n        borderEndStartRadius: borderRadius\n      },\n      '&:last-child': {\n        borderStartEndRadius: borderRadius,\n        borderEndEndRadius: borderRadius\n      },\n      '&:first-child:last-child': {\n        borderRadius\n      },\n      [`${componentCls}-group-large &`]: {\n        height: controlHeightLG,\n        fontSize: fontSizeLG,\n        lineHeight: unit(calc(controlHeightLG).sub(calc(lineWidth).mul(2)).equal()),\n        '&:first-child': {\n          borderStartStartRadius: borderRadiusLG,\n          borderEndStartRadius: borderRadiusLG\n        },\n        '&:last-child': {\n          borderStartEndRadius: borderRadiusLG,\n          borderEndEndRadius: borderRadiusLG\n        }\n      },\n      [`${componentCls}-group-small &`]: {\n        height: controlHeightSM,\n        paddingInline: calc(paddingXS).sub(lineWidth).equal(),\n        paddingBlock: 0,\n        lineHeight: unit(calc(controlHeightSM).sub(calc(lineWidth).mul(2)).equal()),\n        '&:first-child': {\n          borderStartStartRadius: borderRadiusSM,\n          borderEndStartRadius: borderRadiusSM\n        },\n        '&:last-child': {\n          borderStartEndRadius: borderRadiusSM,\n          borderEndEndRadius: borderRadiusSM\n        }\n      },\n      [`${componentCls}-group-vertical > &`]: {\n        marginInlineEnd: 0,\n        borderRadius: 0,\n        '&:not(:last-child)': {\n          marginBlockEnd: calc(lineWidth).mul(-1).equal()\n        },\n        '&:first-child': {\n          borderStartStartRadius: borderRadius,\n          borderStartEndRadius: borderRadius,\n          borderEndStartRadius: 0,\n          borderEndEndRadius: 0\n        },\n        '&:last-child': {\n          borderStartStartRadius: 0,\n          borderStartEndRadius: 0,\n          borderEndStartRadius: borderRadius,\n          borderEndEndRadius: borderRadius\n        },\n        '&:first-child:last-child': {\n          borderRadius\n        }\n      },\n      [`${componentCls}-group-vertical${componentCls}-group-large > &`]: {\n        '&:first-child': {\n          borderStartStartRadius: borderRadiusLG,\n          borderStartEndRadius: borderRadiusLG\n        },\n        '&:last-child': {\n          borderEndStartRadius: borderRadiusLG,\n          borderEndEndRadius: borderRadiusLG\n        },\n        '&:first-child:last-child': {\n          borderRadius: borderRadiusLG\n        }\n      },\n      [`${componentCls}-group-vertical${componentCls}-group-small > &`]: {\n        '&:first-child': {\n          borderStartStartRadius: borderRadiusSM,\n          borderStartEndRadius: borderRadiusSM\n        },\n        '&:last-child': {\n          borderEndStartRadius: borderRadiusSM,\n          borderEndEndRadius: borderRadiusSM\n        },\n        '&:first-child:last-child': {\n          borderRadius: borderRadiusSM\n        }\n      },\n      '&:hover': {\n        position: 'relative',\n        color: colorPrimary\n      },\n      '&:has(:focus-visible)': genFocusOutline(token),\n      [`${componentCls}, input[type='checkbox'], input[type='radio']`]: {\n        width: 0,\n        height: 0,\n        opacity: 0,\n        pointerEvents: 'none'\n      },\n      [`&-checked:not(${componentCls}-button-wrapper-disabled)`]: {\n        zIndex: 1,\n        color: colorPrimary,\n        background: buttonCheckedBg,\n        borderColor: colorPrimary,\n        '&::before': {\n          backgroundColor: colorPrimary\n        },\n        '&:first-child': {\n          borderColor: colorPrimary\n        },\n        '&:hover': {\n          color: colorPrimaryHover,\n          borderColor: colorPrimaryHover,\n          '&::before': {\n            backgroundColor: colorPrimaryHover\n          }\n        },\n        '&:active': {\n          color: colorPrimaryActive,\n          borderColor: colorPrimaryActive,\n          '&::before': {\n            backgroundColor: colorPrimaryActive\n          }\n        }\n      },\n      [`${componentCls}-group-solid &-checked:not(${componentCls}-button-wrapper-disabled)`]: {\n        color: buttonSolidCheckedColor,\n        background: buttonSolidCheckedBg,\n        borderColor: buttonSolidCheckedBg,\n        '&:hover': {\n          color: buttonSolidCheckedColor,\n          background: buttonSolidCheckedHoverBg,\n          borderColor: buttonSolidCheckedHoverBg\n        },\n        '&:active': {\n          color: buttonSolidCheckedColor,\n          background: buttonSolidCheckedActiveBg,\n          borderColor: buttonSolidCheckedActiveBg\n        }\n      },\n      '&-disabled': {\n        color: colorTextDisabled,\n        backgroundColor: colorBgContainerDisabled,\n        borderColor: colorBorder,\n        cursor: 'not-allowed',\n        '&:first-child, &:hover': {\n          color: colorTextDisabled,\n          backgroundColor: colorBgContainerDisabled,\n          borderColor: colorBorder\n        }\n      },\n      [`&-disabled${componentCls}-button-wrapper-checked`]: {\n        color: buttonCheckedColorDisabled,\n        backgroundColor: buttonCheckedBgDisabled,\n        borderColor: colorBorder,\n        boxShadow: 'none'\n      },\n      '&-block': {\n        flex: 1,\n        textAlign: 'center'\n      }\n    }\n  };\n};\n// ============================== Export ==============================\nexport const prepareComponentToken = token => {\n  const {\n    wireframe,\n    padding,\n    marginXS,\n    lineWidth,\n    fontSizeLG,\n    colorText,\n    colorBgContainer,\n    colorTextDisabled,\n    controlItemBgActiveDisabled,\n    colorTextLightSolid,\n    colorPrimary,\n    colorPrimaryHover,\n    colorPrimaryActive,\n    colorWhite\n  } = token;\n  const dotPadding = 4; // Fixed value\n  const radioSize = fontSizeLG;\n  const radioDotSize = wireframe ? radioSize - dotPadding * 2 : radioSize - (dotPadding + lineWidth) * 2;\n  return {\n    // Radio\n    radioSize,\n    dotSize: radioDotSize,\n    dotColorDisabled: colorTextDisabled,\n    // Radio buttons\n    buttonSolidCheckedColor: colorTextLightSolid,\n    buttonSolidCheckedBg: colorPrimary,\n    buttonSolidCheckedHoverBg: colorPrimaryHover,\n    buttonSolidCheckedActiveBg: colorPrimaryActive,\n    buttonBg: colorBgContainer,\n    buttonCheckedBg: colorBgContainer,\n    buttonColor: colorText,\n    buttonCheckedBgDisabled: controlItemBgActiveDisabled,\n    buttonCheckedColorDisabled: colorTextDisabled,\n    buttonPaddingInline: padding - lineWidth,\n    wrapperMarginInlineEnd: marginXS,\n    // internal\n    radioColor: wireframe ? colorPrimary : colorWhite,\n    radioBgColor: wireframe ? colorBgContainer : colorPrimary\n  };\n};\nexport default genStyleHooks('Radio', token => {\n  const {\n    controlOutline,\n    controlOutlineWidth\n  } = token;\n  const radioFocusShadow = `0 0 0 ${unit(controlOutlineWidth)} ${controlOutline}`;\n  const radioButtonFocusShadow = radioFocusShadow;\n  const radioToken = mergeToken(token, {\n    radioFocusShadow,\n    radioButtonFocusShadow\n  });\n  return [getGroupRadioStyle(radioToken), getRadioBasicStyle(radioToken), getRadioButtonStyle(radioToken)];\n}, prepareComponentToken, {\n  unitless: {\n    radioSize: true,\n    dotSize: true\n  }\n});","\"use client\";\n\nimport * as React from 'react';\nimport RcCheckbox from '@rc-component/checkbox';\nimport { composeRef, isReactRenderable } from '@rc-component/util';\nimport { clsx } from 'clsx';\nimport { useMergeSemantic, useSemanticRootStyle } from '../_util/hooks/useMergeSemantic';\nimport { devUseWarning } from '../_util/warning';\nimport Wave from '../_util/wave';\nimport { TARGET_CLS } from '../_util/wave/interface';\nimport useBubbleLock from '../checkbox/useBubbleLock';\nimport { useComponentConfig } from '../config-provider/context';\nimport DisabledContext from '../config-provider/DisabledContext';\nimport useCSSVarCls from '../config-provider/hooks/useCSSVarCls';\nimport { FormItemInputContext } from '../form/context';\nimport RadioGroupContext, { RadioOptionTypeContext } from './context';\nimport useStyle from './style';\nconst InternalRadio = (props, ref) => {\n  const groupContext = React.useContext(RadioGroupContext);\n  const radioOptionTypeContext = React.useContext(RadioOptionTypeContext);\n  const {\n    getPrefixCls,\n    direction,\n    className: contextClassName,\n    style: contextStyle,\n    classNames: contextClassNames,\n    styles: contextStyles\n  } = useComponentConfig('radio');\n  const innerRef = React.useRef(null);\n  const mergedRef = composeRef(ref, innerRef);\n  const {\n    isFormItemInput\n  } = React.useContext(FormItemInputContext);\n  if (process.env.NODE_ENV !== 'production') {\n    const warning = devUseWarning('Radio');\n    process.env.NODE_ENV !== \"production\" ? warning(!('optionType' in props), 'usage', '`optionType` is only support in Radio.Group.') : void 0;\n  }\n  const onChange = e => {\n    props.onChange?.(e);\n    groupContext?.onChange?.(e);\n  };\n  const {\n    prefixCls: customizePrefixCls,\n    className,\n    rootClassName,\n    children,\n    style,\n    title,\n    classNames,\n    styles,\n    checked,\n    ...restProps\n  } = props;\n  const radioPrefixCls = getPrefixCls('radio', customizePrefixCls);\n  const isButtonType = (groupContext?.optionType || radioOptionTypeContext) === 'button';\n  const prefixCls = isButtonType ? `${radioPrefixCls}-button` : radioPrefixCls;\n  // Style\n  const rootCls = useCSSVarCls(radioPrefixCls);\n  const [hashId, cssVarCls] = useStyle(radioPrefixCls, rootCls);\n  const radioProps = {\n    ...restProps\n  };\n  // ===================== Disabled =====================\n  const disabled = React.useContext(DisabledContext);\n  // ====================== Checked ======================\n  const hasChecked = 'checked' in props;\n  let mergedChecked = checked;\n  if (groupContext) {\n    radioProps.name = groupContext.name;\n    radioProps.onChange = onChange;\n    mergedChecked = props.value === groupContext.value;\n    radioProps.disabled = radioProps.disabled ?? groupContext.disabled;\n  }\n  if (hasChecked || groupContext) {\n    radioProps.checked = mergedChecked;\n  }\n  radioProps.disabled = radioProps.disabled ?? disabled;\n  // =========== Merged Props for Semantic ===========\n  const mergedProps = {\n    ...props,\n    ...radioProps,\n    checked: mergedChecked\n  };\n  const contextStyleRoot = useSemanticRootStyle(contextStyle);\n  const styleRoot = useSemanticRootStyle(style);\n  const [mergedClassNames, mergedStyles] = useMergeSemantic([contextClassNames, classNames], [contextStyles, contextStyleRoot, styles, styleRoot], {\n    props: mergedProps\n  });\n  const wrapperClassString = clsx(`${prefixCls}-wrapper`, {\n    [`${prefixCls}-wrapper-checked`]: mergedChecked,\n    [`${prefixCls}-wrapper-disabled`]: radioProps.disabled,\n    [`${prefixCls}-wrapper-rtl`]: direction === 'rtl',\n    [`${prefixCls}-wrapper-in-form-item`]: isFormItemInput,\n    [`${prefixCls}-wrapper-block`]: !!groupContext?.block\n  }, contextClassName, className, rootClassName, mergedClassNames.root, hashId, cssVarCls, rootCls);\n  // ============================ Event Lock ============================\n  const [onLabelClick, onInputClick] = useBubbleLock(radioProps.onClick);\n  // ============================== Render ==============================\n  return /*#__PURE__*/React.createElement(Wave, {\n    component: \"Radio\",\n    disabled: radioProps.disabled\n  }, /*#__PURE__*/React.createElement(\"label\", {\n    className: wrapperClassString,\n    style: mergedStyles.root,\n    onMouseEnter: props.onMouseEnter,\n    onMouseLeave: props.onMouseLeave,\n    title: title,\n    onClick: onLabelClick\n  }, /*#__PURE__*/React.createElement(RcCheckbox, {\n    ...radioProps,\n    className: clsx(mergedClassNames.icon, {\n      [TARGET_CLS]: !isButtonType\n    }),\n    style: mergedStyles.icon,\n    type: \"radio\",\n    prefixCls: prefixCls,\n    ref: mergedRef,\n    onClick: onInputClick\n  }), isReactRenderable(children) ? (/*#__PURE__*/React.createElement(\"span\", {\n    className: clsx(`${prefixCls}-label`, mergedClassNames.label),\n    style: mergedStyles.label\n  }, children)) : null));\n};\nconst Radio = /*#__PURE__*/React.forwardRef(InternalRadio);\nif (process.env.NODE_ENV !== 'production') {\n  Radio.displayName = 'Radio';\n}\nexport default Radio;","\"use client\";\n\nimport * as React from 'react';\nimport { pickAttrs, useControlledState, useId } from '@rc-component/util';\nimport { clsx } from 'clsx';\nimport { useOrientation } from '../_util/hooks';\nimport { isNumber } from '../_util/is';\nimport { ConfigContext } from '../config-provider';\nimport useCSSVarCls from '../config-provider/hooks/useCSSVarCls';\nimport useSize from '../config-provider/hooks/useSize';\nimport { FormItemInputContext } from '../form/context';\nimport { toNamePathStr } from '../form/hooks/useForm';\nimport { RadioGroupContextProvider } from './context';\nimport Radio from './radio';\nimport useStyle from './style';\nconst RadioGroup = /*#__PURE__*/React.forwardRef((props, ref) => {\n  const {\n    getPrefixCls,\n    direction\n  } = React.useContext(ConfigContext);\n  const {\n    name: formItemName\n  } = React.useContext(FormItemInputContext);\n  const defaultName = useId(toNamePathStr(formItemName));\n  const {\n    prefixCls: customizePrefixCls,\n    className,\n    rootClassName,\n    options,\n    buttonStyle = 'outline',\n    disabled,\n    children,\n    size: customizeSize,\n    style,\n    id,\n    optionType,\n    name = defaultName,\n    defaultValue,\n    value: customizedValue,\n    block = false,\n    onChange,\n    onMouseEnter,\n    onMouseLeave,\n    onFocus,\n    onBlur,\n    orientation,\n    vertical,\n    role = 'radiogroup'\n  } = props;\n  const [value, setValue] = useControlledState(defaultValue, customizedValue);\n  const onRadioChange = React.useCallback(event => {\n    const lastValue = value;\n    const val = event.target.value;\n    setValue(val);\n    if (val !== lastValue) {\n      onChange?.(event);\n    }\n  }, [value, setValue, onChange]);\n  const prefixCls = getPrefixCls('radio', customizePrefixCls);\n  const groupPrefixCls = `${prefixCls}-group`;\n  // Style\n  const rootCls = useCSSVarCls(prefixCls);\n  const [hashId, cssVarCls] = useStyle(prefixCls, rootCls);\n  let childrenToRender = children;\n  // 如果存在 options, 优先使用\n  if (options && options.length > 0) {\n    childrenToRender = options.map(option => {\n      if (typeof option === 'string' || isNumber(option)) {\n        // 此处类型自动推导为 string\n        return /*#__PURE__*/React.createElement(Radio, {\n          key: option.toString(),\n          prefixCls: prefixCls,\n          disabled: disabled,\n          value: option,\n          checked: value === option\n        }, option);\n      }\n      // 此处类型自动推导为 { label: string value: string }\n      return /*#__PURE__*/React.createElement(Radio, {\n        key: `radio-group-value-options-${option.value}`,\n        prefixCls: prefixCls,\n        disabled: option.disabled || disabled,\n        value: option.value,\n        checked: value === option.value,\n        title: option.title,\n        style: option.style,\n        className: option.className,\n        id: option.id,\n        required: option.required,\n        onChange: option.onChange\n      }, option.label);\n    });\n  }\n  const mergedSize = useSize(customizeSize);\n  const [, mergedVertical] = useOrientation(orientation, vertical);\n  const classString = clsx(groupPrefixCls, `${groupPrefixCls}-${buttonStyle}`, {\n    [`${groupPrefixCls}-large`]: mergedSize === 'large',\n    [`${groupPrefixCls}-small`]: mergedSize === 'small',\n    [`${groupPrefixCls}-rtl`]: direction === 'rtl',\n    [`${groupPrefixCls}-block`]: block\n  }, className, rootClassName, hashId, cssVarCls, rootCls);\n  const memoizedValue = React.useMemo(() => ({\n    onChange: onRadioChange,\n    value,\n    disabled,\n    name,\n    optionType,\n    block\n  }), [onRadioChange, value, disabled, name, optionType, block]);\n  return /*#__PURE__*/React.createElement(\"div\", {\n    ...pickAttrs(props, {\n      aria: true,\n      data: true\n    }),\n    role: role,\n    className: clsx(classString, {\n      [`${prefixCls}-group-vertical`]: mergedVertical\n    }),\n    style: style,\n    onMouseEnter: onMouseEnter,\n    onMouseLeave: onMouseLeave,\n    onFocus: onFocus,\n    onBlur: onBlur,\n    id: id,\n    ref: ref\n  }, /*#__PURE__*/React.createElement(RadioGroupContextProvider, {\n    value: memoizedValue\n  }, childrenToRender));\n});\nexport default /*#__PURE__*/React.memo(RadioGroup);","\"use client\";\n\nimport * as React from 'react';\nimport { ConfigContext } from '../config-provider';\nimport { RadioOptionTypeContextProvider } from './context';\nimport Radio from './radio';\nconst RadioButton = (props, ref) => {\n  const {\n    getPrefixCls\n  } = React.useContext(ConfigContext);\n  const {\n    prefixCls: customizePrefixCls,\n    ...radioProps\n  } = props;\n  const prefixCls = getPrefixCls('radio', customizePrefixCls);\n  return /*#__PURE__*/React.createElement(RadioOptionTypeContextProvider, {\n    value: \"button\"\n  }, /*#__PURE__*/React.createElement(Radio, {\n    prefixCls: prefixCls,\n    ...radioProps,\n    type: \"radio\",\n    ref: ref\n  }));\n};\nexport default /*#__PURE__*/React.forwardRef(RadioButton);","import { useMemo } from 'react';\nexport const useAllowClear = (prefixCls, displayValues, allowClear, clearIcon, disabled = false, mergedSearchValue, mode) => {\n  // Convert boolean to object first\n  const allowClearConfig = useMemo(() => {\n    if (typeof allowClear === 'boolean') {\n      return {\n        allowClear\n      };\n    }\n    if (allowClear && typeof allowClear === 'object') {\n      return allowClear;\n    }\n    return {\n      allowClear: false\n    };\n  }, [allowClear]);\n  return useMemo(() => {\n    const mergedAllowClear = !disabled && allowClearConfig.allowClear !== false && (displayValues.length || mergedSearchValue) && !(mode === 'combobox' && mergedSearchValue === '');\n    return {\n      allowClear: mergedAllowClear,\n      clearIcon: mergedAllowClear ? allowClearConfig.clearIcon || clearIcon || '×' : null,\n      label: mergedAllowClear ? allowClearConfig.label ?? 'Clear' : ''\n    };\n  }, [allowClearConfig, clearIcon, disabled, displayValues.length, mergedSearchValue, mode]);\n};","/**\n * BaseSelect provide some parsed data into context.\n * You can use this hooks to get them.\n */\n\nimport * as React from 'react';\nexport const BaseSelectContext = /*#__PURE__*/React.createContext(null);\nexport default function useBaseProps() {\n  return React.useContext(BaseSelectContext);\n}","import * as React from 'react';\n\n/**\n * Locker return cached mark.\n * If set to `true`, will return `true` in a short time even if set `false`.\n * If set to `false` and then set to `true`, will change to `true`.\n * And after time duration, it will back to `null` automatically.\n */\nexport default function useLock(duration = 250) {\n  const lockRef = React.useRef(null);\n  const timeoutRef = React.useRef(null);\n\n  // Clean up\n  React.useEffect(() => () => {\n    window.clearTimeout(timeoutRef.current);\n  }, []);\n  function doLock(locked) {\n    if (locked || lockRef.current === null) {\n      lockRef.current = locked;\n    }\n    window.clearTimeout(timeoutRef.current);\n    timeoutRef.current = window.setTimeout(() => {\n      lockRef.current = null;\n    }, duration);\n  }\n  return [() => lockRef.current, doLock];\n}","import * as React from 'react';\nimport { useEvent } from '@rc-component/util';\nexport function isInside(elements, target) {\n  return elements.filter(element => element).some(element => element.contains(target) || element === target);\n}\nexport default function useSelectTriggerControl(elements, open, triggerOpen, customizedTrigger) {\n  const onGlobalMouseDown = useEvent(event => {\n    // If trigger is customized, Trigger will take control of popupVisible\n    if (customizedTrigger) {\n      return;\n    }\n    let target = event.target;\n    if (target.shadowRoot && event.composed) {\n      target = event.composedPath()[0] || target;\n    }\n    if (event._ori_target) {\n      target = event._ori_target;\n    }\n    if (open &&\n    // Marked by SelectInput mouseDown event\n    !isInside(elements(), target)) {\n      // Should trigger close\n      triggerOpen(false);\n    }\n  });\n  React.useEffect(() => {\n    window.addEventListener('mousedown', onGlobalMouseDown);\n    return () => window.removeEventListener('mousedown', onGlobalMouseDown);\n  }, [onGlobalMouseDown]);\n}","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport Trigger from '@rc-component/trigger';\nimport { clsx } from 'clsx';\nimport * as React from 'react';\nconst getBuiltInPlacements = popupMatchSelectWidth => {\n  // Enable horizontal overflow auto-adjustment when a custom dropdown width is provided\n  const adjustX = popupMatchSelectWidth === true ? 0 : 1;\n  return {\n    bottomLeft: {\n      points: ['tl', 'bl'],\n      offset: [0, 4],\n      overflow: {\n        adjustX,\n        adjustY: 1\n      },\n      htmlRegion: 'scroll'\n    },\n    bottomRight: {\n      points: ['tr', 'br'],\n      offset: [0, 4],\n      overflow: {\n        adjustX,\n        adjustY: 1\n      },\n      htmlRegion: 'scroll'\n    },\n    topLeft: {\n      points: ['bl', 'tl'],\n      offset: [0, -4],\n      overflow: {\n        adjustX,\n        adjustY: 1\n      },\n      htmlRegion: 'scroll'\n    },\n    topRight: {\n      points: ['br', 'tr'],\n      offset: [0, -4],\n      overflow: {\n        adjustX,\n        adjustY: 1\n      },\n      htmlRegion: 'scroll'\n    }\n  };\n};\nconst SelectTrigger = (props, ref) => {\n  const {\n    prefixCls,\n    disabled,\n    visible,\n    children,\n    popupElement,\n    animation,\n    transitionName,\n    popupStyle,\n    popupClassName,\n    direction = 'ltr',\n    placement,\n    builtinPlacements,\n    popupMatchSelectWidth,\n    popupRender,\n    popupAlign,\n    getPopupContainer,\n    empty,\n    onPopupVisibleChange,\n    onPopupMouseEnter,\n    onPopupMouseDown,\n    onPopupBlur,\n    ...restProps\n  } = props;\n\n  // We still use `dropdown` className to keep compatibility\n  // This is used for:\n  // 1. Styles\n  // 2. Animation\n  // 3. Theme customization\n  // Please do not modify this since it's a breaking change\n  const popupPrefixCls = `${prefixCls}-dropdown`;\n  let popupNode = popupElement;\n  if (popupRender) {\n    popupNode = popupRender(popupElement);\n  }\n  const mergedBuiltinPlacements = React.useMemo(() => builtinPlacements || getBuiltInPlacements(popupMatchSelectWidth), [builtinPlacements, popupMatchSelectWidth]);\n\n  // ===================== Motion ======================\n  const mergedTransitionName = animation ? `${popupPrefixCls}-${animation}` : transitionName;\n\n  // =================== Popup Width ===================\n  const isNumberPopupWidth = typeof popupMatchSelectWidth === 'number';\n  const stretch = React.useMemo(() => {\n    return popupMatchSelectWidth === false || isNumberPopupWidth ? 'minWidth' : 'width';\n  }, [popupMatchSelectWidth, isNumberPopupWidth]);\n  let mergedPopupStyle = popupStyle;\n  if (isNumberPopupWidth) {\n    mergedPopupStyle = {\n      ...popupStyle,\n      width: popupMatchSelectWidth\n    };\n  }\n\n  // ======================= Ref =======================\n  const triggerPopupRef = React.useRef(null);\n  React.useImperativeHandle(ref, () => ({\n    getPopupElement: () => triggerPopupRef.current?.popupElement\n  }));\n  return /*#__PURE__*/React.createElement(Trigger, _extends({}, restProps, {\n    showAction: onPopupVisibleChange ? ['click'] : [],\n    hideAction: onPopupVisibleChange ? ['click'] : [],\n    popupPlacement: placement || (direction === 'rtl' ? 'bottomRight' : 'bottomLeft'),\n    builtinPlacements: mergedBuiltinPlacements,\n    prefixCls: popupPrefixCls,\n    popupMotion: {\n      motionName: mergedTransitionName\n    },\n    popup: /*#__PURE__*/React.createElement(\"div\", {\n      onMouseEnter: onPopupMouseEnter,\n      onMouseDown: onPopupMouseDown,\n      onBlur: onPopupBlur\n    }, popupNode),\n    ref: triggerPopupRef,\n    stretch: stretch,\n    popupAlign: popupAlign,\n    popupVisible: visible,\n    getPopupContainer: getPopupContainer,\n    popupClassName: clsx(popupClassName, {\n      [`${popupPrefixCls}-empty`]: empty\n    }),\n    popupStyle: mergedPopupStyle,\n    onPopupVisibleChange: onPopupVisibleChange\n  }), children);\n};\nconst RefSelectTrigger = /*#__PURE__*/React.forwardRef(SelectTrigger);\nif (process.env.NODE_ENV !== 'production') {\n  RefSelectTrigger.displayName = 'SelectTrigger';\n}\nexport default RefSelectTrigger;","import { warning } from '@rc-component/util';\nfunction getKey(data, index) {\n  const {\n    key\n  } = data;\n  let value;\n  if ('value' in data) {\n    ({\n      value\n    } = data);\n  }\n  if (key !== null && key !== undefined) {\n    return key;\n  }\n  if (value !== undefined) {\n    return value;\n  }\n  return `rc-index-key-${index}`;\n}\nexport function isValidCount(value) {\n  return typeof value !== 'undefined' && !Number.isNaN(value);\n}\nexport function fillFieldNames(fieldNames, childrenAsData) {\n  const {\n    label,\n    value,\n    options,\n    groupLabel\n  } = fieldNames || {};\n  const mergedLabel = label || (childrenAsData ? 'children' : 'label');\n  return {\n    label: mergedLabel,\n    value: value || 'value',\n    options: options || 'options',\n    groupLabel: groupLabel || mergedLabel\n  };\n}\n\n/**\n * Flat options into flatten list.\n * We use `optionOnly` here is aim to avoid user use nested option group.\n * Here is simply set `key` to the index if not provided.\n */\nexport function flattenOptions(options, {\n  fieldNames,\n  childrenAsData\n} = {}) {\n  const flattenList = [];\n  const {\n    label: fieldLabel,\n    value: fieldValue,\n    options: fieldOptions,\n    groupLabel\n  } = fillFieldNames(fieldNames, false);\n  function dig(list, isGroupOption) {\n    if (!Array.isArray(list)) {\n      return;\n    }\n    list.forEach(data => {\n      if (isGroupOption || !(fieldOptions in data)) {\n        const value = data[fieldValue];\n\n        // Option\n        flattenList.push({\n          key: getKey(data, flattenList.length),\n          groupOption: isGroupOption,\n          data,\n          label: data[fieldLabel],\n          value\n        });\n      } else {\n        let grpLabel = data[groupLabel];\n        if (grpLabel === undefined && childrenAsData) {\n          grpLabel = data.label;\n        }\n\n        // Option Group\n        flattenList.push({\n          key: getKey(data, flattenList.length),\n          group: true,\n          data,\n          label: grpLabel\n        });\n        dig(data[fieldOptions], true);\n      }\n    });\n  }\n  dig(options, false);\n  return flattenList;\n}\n\n/**\n * Inject `props` into `option` for legacy usage\n */\nexport function injectPropsWithOption(option) {\n  const newOption = {\n    ...option\n  };\n  if (!('props' in newOption)) {\n    Object.defineProperty(newOption, 'props', {\n      get() {\n        warning(false, 'Return type is option instead of Option instance. Please read value directly instead of reading from `props`.');\n        return newOption;\n      }\n    });\n  }\n  return newOption;\n}\nexport const getSeparatedContent = (text, tokens, end) => {\n  if (!tokens || !tokens.length) {\n    return null;\n  }\n  let match = false;\n  const separate = (str, [token, ...restTokens]) => {\n    if (!token) {\n      return [str];\n    }\n    const list = str.split(token);\n    match = match || list.length > 1;\n    return list.reduce((prevList, unitStr) => [...prevList, ...separate(unitStr, restTokens)], []).filter(Boolean);\n  };\n  const list = separate(text, tokens);\n  if (match) {\n    return typeof end !== 'undefined' ? list.slice(0, end) : list;\n  } else {\n    return null;\n  }\n};","import * as React from 'react';\nexport default function Polite(props) {\n  const {\n    visible,\n    values\n  } = props;\n  if (!visible) {\n    return null;\n  }\n\n  // Only cut part of values since it's a screen reader\n  const MAX_COUNT = 50;\n  return /*#__PURE__*/React.createElement(\"span\", {\n    \"aria-live\": \"polite\",\n    style: {\n      width: 0,\n      height: 0,\n      position: 'absolute',\n      overflow: 'hidden',\n      opacity: 0\n    }\n  }, `${values.slice(0, MAX_COUNT).map(({\n    label,\n    value\n  }) => ['number', 'string'].includes(typeof label) ? label : value).join(', ')}`, values.length > MAX_COUNT ? ', ...' : null);\n}","import { useControlledState, useEvent } from '@rc-component/util';\nimport { useRef, useState, useEffect } from 'react';\nconst internalMacroTask = fn => {\n  const channel = new MessageChannel();\n  channel.port1.onmessage = fn;\n  channel.port2.postMessage(null);\n};\nexport const macroTask = (fn, times = 1) => {\n  if (times <= 0) {\n    fn();\n    return;\n  }\n  internalMacroTask(() => {\n    macroTask(fn, times - 1);\n  });\n};\n\n/**\n * Trigger by latest open call, if nextOpen is undefined, means toggle.\n * `weak` means this call can be ignored if previous call exists.\n */\n\n/**\n * When `open` is controlled, follow the controlled value;\n * Otherwise use uncontrolled logic.\n * Setting `open` takes effect immediately,\n * but setting it to `false` is delayed via MessageChannel.\n *\n * SSR handling: During SSR, `open` is always false to avoid Portal issues.\n * On client-side hydration, it syncs with the actual open state.\n */\nexport default function useOpen(defaultOpen, propOpen, onOpen, postOpen) {\n  // SSR not support Portal which means we need delay `open` for the first time render\n  const [rendered, setRendered] = useState(false);\n  useEffect(() => {\n    setRendered(true);\n  }, []);\n  const [stateOpen, internalSetOpen] = useControlledState(defaultOpen, propOpen);\n\n  // Lock for options update\n  const [lock, setLock] = useState(false);\n\n  // During SSR, always return false for open state\n  const ssrSafeOpen = rendered ? stateOpen : false;\n  const mergedOpen = postOpen(ssrSafeOpen);\n  const taskIdRef = useRef(0);\n  const triggerEvent = useEvent(nextOpen => {\n    if (onOpen && mergedOpen !== nextOpen) {\n      onOpen(nextOpen);\n    }\n    internalSetOpen(nextOpen);\n  });\n  const toggleOpen = useEvent((nextOpen, config = {}) => {\n    const {\n      cancelFun\n    } = config;\n    taskIdRef.current += 1;\n    const id = taskIdRef.current;\n    const nextOpenVal = typeof nextOpen === 'boolean' ? nextOpen : !mergedOpen;\n    setLock(!nextOpenVal);\n    function triggerUpdate() {\n      if (\n      // Always check if id is match\n      id === taskIdRef.current &&\n      // Check if need to cancel\n      !cancelFun?.()) {\n        triggerEvent(nextOpenVal);\n        setLock(false);\n      }\n    }\n\n    // Weak update can be ignored\n    if (nextOpenVal) {\n      triggerUpdate();\n    } else {\n      macroTask(() => {\n        triggerUpdate();\n      });\n    }\n  });\n  return [ssrSafeOpen, mergedOpen, toggleOpen, lock];\n}","import * as React from 'react';\n// Affix is a simple wrapper which should not read context or logical props\nexport default function Affix(props) {\n  const {\n    children,\n    ...restProps\n  } = props;\n  if (!children) {\n    return null;\n  }\n  return /*#__PURE__*/React.createElement(\"div\", restProps, children);\n}","import * as React from 'react';\nconst SelectInputContext = /*#__PURE__*/React.createContext(null);\nexport function useSelectInputContext() {\n  return React.useContext(SelectInputContext);\n}\nexport default SelectInputContext;","import * as React from 'react';\nimport { clsx } from 'clsx';\nimport { useSelectInputContext } from \"./context\";\nimport { composeRef, useLayoutEffect } from '@rc-component/util';\nimport useBaseProps from \"../hooks/useBaseProps\";\nconst Input = /*#__PURE__*/React.forwardRef((props, ref) => {\n  const {\n    onChange,\n    onKeyDown,\n    onBlur,\n    style,\n    syncWidth,\n    value,\n    className,\n    autoComplete,\n    ...restProps\n  } = props;\n  const {\n    prefixCls,\n    mode,\n    onSearch,\n    onSearchSubmit,\n    onInputBlur,\n    autoFocus,\n    tokenWithEnter,\n    placeholder,\n    components: {\n      input: InputComponent = 'input'\n    }\n  } = useSelectInputContext();\n  const {\n    id,\n    classNames,\n    styles,\n    open,\n    activeDescendantId,\n    role,\n    disabled\n  } = useBaseProps() || {};\n  const inputCls = clsx(`${prefixCls}-input`, classNames?.input, className);\n\n  // Used to handle input method composition status\n  const compositionStatusRef = React.useRef(false);\n\n  // Used to handle paste content, similar to original Selector implementation\n  const pastedTextRef = React.useRef(null);\n\n  // ============================== Refs ==============================\n  const inputRef = React.useRef(null);\n  React.useImperativeHandle(ref, () => inputRef.current);\n\n  // ============================== Data ==============================\n  // Handle input changes\n  const handleChange = event => {\n    let {\n      value: nextVal\n    } = event.target;\n\n    // Handle pasted text with tokenWithEnter, similar to original Selector implementation\n    if (tokenWithEnter && pastedTextRef.current && /[\\r\\n]/.test(pastedTextRef.current)) {\n      // CRLF will be treated as a single space for input element\n      const replacedText = pastedTextRef.current.replace(/[\\r\\n]+$/, '').replace(/\\r\\n/g, ' ').replace(/[\\r\\n]/g, ' ');\n      nextVal = nextVal.replace(replacedText, pastedTextRef.current);\n    }\n\n    // Reset pasted text reference\n    pastedTextRef.current = null;\n\n    // Call onSearch callback\n    if (onSearch) {\n      onSearch(nextVal, true, compositionStatusRef.current);\n    }\n\n    // Call original onChange callback\n    onChange?.(event);\n  };\n\n  // ============================ Keyboard ============================\n  // Handle keyboard events\n  const handleKeyDown = event => {\n    const {\n      key\n    } = event;\n    const {\n      value: nextVal\n    } = event.currentTarget;\n\n    // Handle Enter key submission - referencing Selector implementation\n    if (key === 'Enter' && mode === 'tags' && !open && !compositionStatusRef.current && onSearchSubmit) {\n      onSearchSubmit(nextVal);\n    }\n\n    // Call original onKeyDown callback\n    onKeyDown?.(event);\n  };\n\n  // Handle blur events\n  const handleBlur = event => {\n    // Call onInputBlur callback\n    onInputBlur?.();\n\n    // Call original onBlur callback\n    onBlur?.(event);\n  };\n\n  // Handle input method composition start\n  const handleCompositionStart = () => {\n    compositionStatusRef.current = true;\n  };\n\n  // Handle input method composition end\n  const handleCompositionEnd = event => {\n    compositionStatusRef.current = false;\n\n    // Trigger search when input method composition ends, similar to original Selector\n    if (mode !== 'combobox') {\n      const {\n        value: nextVal\n      } = event.currentTarget;\n      onSearch?.(nextVal, true, false);\n    }\n  };\n\n  // Handle paste events to track pasted content\n  const handlePaste = event => {\n    const {\n      clipboardData\n    } = event;\n    const pastedValue = clipboardData?.getData('text');\n    pastedTextRef.current = pastedValue || '';\n  };\n\n  // ============================= Width ==============================\n  const [widthCssVar, setWidthCssVar] = React.useState(undefined);\n\n  // When syncWidth is enabled, adjust input width based on content\n  useLayoutEffect(() => {\n    const input = inputRef.current;\n    if (syncWidth && input) {\n      input.style.width = '0px';\n      const scrollWidth = input.scrollWidth;\n      setWidthCssVar(scrollWidth);\n\n      // Reset input style\n      input.style.width = '';\n    }\n  }, [syncWidth, value]);\n\n  // ============================= Render =============================\n  // Extract shared input props\n  const sharedInputProps = {\n    id,\n    type: 'text',\n    ...restProps,\n    ref: inputRef,\n    style: {\n      ...styles?.input,\n      ...style,\n      '--select-input-width': widthCssVar\n    },\n    autoFocus,\n    autoComplete: autoComplete || 'new-password',\n    className: inputCls,\n    disabled,\n    value: value || '',\n    onChange: handleChange,\n    onKeyDown: handleKeyDown,\n    onBlur: handleBlur,\n    onPaste: handlePaste,\n    onCompositionStart: handleCompositionStart,\n    onCompositionEnd: handleCompositionEnd,\n    // Accessibility attributes\n    role: role || 'combobox',\n    'aria-expanded': open || false,\n    'aria-haspopup': 'listbox',\n    'aria-owns': open ? `${id}_list` : undefined,\n    'aria-autocomplete': 'list',\n    'aria-controls': open ? `${id}_list` : undefined,\n    'aria-activedescendant': open ? activeDescendantId : undefined\n  };\n\n  // Handle different InputComponent types\n  if ( /*#__PURE__*/React.isValidElement(InputComponent)) {\n    // If InputComponent is a ReactElement, use cloneElement with merged props\n    const existingProps = InputComponent.props || {};\n\n    // Start with shared props as base\n    const mergedProps = {\n      placeholder: props.placeholder || placeholder,\n      ...sharedInputProps,\n      ...existingProps\n    };\n\n    // Batch update function calls\n    Object.keys(existingProps).forEach(key => {\n      const existingValue = existingProps[key];\n      if (typeof existingValue === 'function') {\n        // Merge event handlers\n        mergedProps[key] = (...args) => {\n          existingValue(...args);\n          sharedInputProps[key]?.(...args);\n        };\n      }\n    });\n\n    // Update ref\n    mergedProps.ref = composeRef(InputComponent.ref, sharedInputProps.ref);\n    return /*#__PURE__*/React.cloneElement(InputComponent, mergedProps);\n  }\n\n  // If InputComponent is a component type, render normally\n  const Component = InputComponent;\n  return /*#__PURE__*/React.createElement(Component, sharedInputProps);\n});\nexport default Input;","import * as React from 'react';\nimport { clsx } from 'clsx';\nimport { useSelectInputContext } from \"../context\";\nimport useBaseProps from \"../../hooks/useBaseProps\";\nexport default function Placeholder(props) {\n  const {\n    prefixCls,\n    placeholder,\n    displayValues\n  } = useSelectInputContext();\n  const {\n    classNames,\n    styles\n  } = useBaseProps();\n  const {\n    show = true\n  } = props;\n  if (displayValues.length) {\n    return null;\n  }\n  return /*#__PURE__*/React.createElement(\"div\", {\n    className: clsx(`${prefixCls}-placeholder`, classNames?.placeholder),\n    style: {\n      ...(show ? {} : {\n        visibility: 'hidden'\n      }),\n      ...styles?.placeholder\n    }\n  }, placeholder);\n}","import * as React from 'react';\n\n// Use any here since we do not get the type during compilation\n/**\n * SelectContext is only used for Select. BaseSelect should not consume this context.\n */\n\nconst SelectContext = /*#__PURE__*/React.createContext(null);\nexport default SelectContext;","export function toArray(value) {\n  if (Array.isArray(value)) {\n    return value;\n  }\n  return value !== undefined ? [value] : [];\n}\nexport const isClient = typeof window !== 'undefined' && window.document && window.document.documentElement;\n\n/** Is client side and not jsdom */\nexport const isBrowserClient = process.env.NODE_ENV !== 'test' && isClient;\nexport function hasValue(value) {\n  return value !== undefined && value !== null;\n}\n\n/** combo mode no value judgment function */\nexport function isComboNoValue(value) {\n  return !value && value !== 0;\n}\nfunction isTitleType(title) {\n  return ['string', 'number'].includes(typeof title);\n}\nexport function getTitle(item) {\n  let title = undefined;\n  if (item) {\n    if (isTitleType(item.title)) {\n      title = item.title.toString();\n    } else if (isTitleType(item.label)) {\n      title = item.label.toString();\n    }\n  }\n  return title;\n}","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { clsx } from 'clsx';\nimport Input from \"../Input\";\nimport { useSelectInputContext } from \"../context\";\nimport useBaseProps from \"../../hooks/useBaseProps\";\nimport Placeholder from \"./Placeholder\";\nimport SelectContext from \"../../SelectContext\";\nimport { getTitle } from \"../../utils/commonUtil\";\nconst SingleContent = /*#__PURE__*/React.forwardRef(({\n  inputProps\n}, ref) => {\n  const {\n    prefixCls,\n    searchValue,\n    activeValue,\n    displayValues,\n    maxLength,\n    mode,\n    components\n  } = useSelectInputContext();\n  const {\n    triggerOpen,\n    title: rootTitle,\n    showSearch,\n    classNames,\n    styles\n  } = useBaseProps();\n  const selectContext = React.useContext(SelectContext);\n  const [inputChanged, setInputChanged] = React.useState(false);\n  const combobox = mode === 'combobox';\n  const displayValue = displayValues[0];\n\n  // Implement the same logic as the old SingleSelector\n  const mergedSearchValue = React.useMemo(() => {\n    if (combobox && activeValue && !inputChanged && triggerOpen) {\n      return activeValue;\n    }\n    return showSearch ? searchValue : '';\n  }, [combobox, activeValue, inputChanged, triggerOpen, searchValue, showSearch]);\n  const [optionClassName, optionStyle, optionTitle, hasOptionStyle] = React.useMemo(() => {\n    let className;\n    let style;\n    let titleValue;\n    if (displayValue && selectContext?.flattenOptions) {\n      const option = selectContext.flattenOptions.find(opt => opt.value === displayValue.value);\n      if (option?.data) {\n        className = option.data.className;\n        style = option.data.style;\n        titleValue = getTitle(option.data);\n      }\n    }\n    if (displayValue && !titleValue) {\n      titleValue = getTitle(displayValue);\n    }\n    if (rootTitle !== undefined) {\n      titleValue = rootTitle;\n    }\n    const nextHasStyle = !!className || !!style;\n    return [className, style, titleValue, nextHasStyle];\n  }, [displayValue, selectContext?.flattenOptions, rootTitle]);\n  React.useEffect(() => {\n    if (combobox) {\n      setInputChanged(false);\n    }\n  }, [combobox, activeValue]);\n\n  // ========================== Render ==========================\n  const showHasValueCls = displayValue && displayValue.label !== null && displayValue.label !== undefined && String(displayValue.label).trim() !== '';\n\n  // Render value\n  // Only render value when not using custom input in combobox mode\n  const shouldRenderValue = !(combobox && components?.input);\n  const renderValue = shouldRenderValue ? displayValue ? hasOptionStyle ? /*#__PURE__*/React.createElement(\"div\", {\n    className: clsx(`${prefixCls}-content-value`, optionClassName),\n    style: {\n      ...(mergedSearchValue ? {\n        visibility: 'hidden'\n      } : {}),\n      ...optionStyle\n    },\n    title: optionTitle\n  }, displayValue.label) : displayValue.label : /*#__PURE__*/React.createElement(Placeholder, {\n    show: !mergedSearchValue\n  }) : null;\n  // Render\n  return /*#__PURE__*/React.createElement(\"div\", {\n    className: clsx(`${prefixCls}-content`, showHasValueCls && `${prefixCls}-content-has-value`, mergedSearchValue && `${prefixCls}-content-has-search-value`, hasOptionStyle && `${prefixCls}-content-has-option-style`, classNames?.content),\n    style: styles?.content,\n    title: hasOptionStyle ? undefined : optionTitle\n  }, renderValue, /*#__PURE__*/React.createElement(Input, _extends({\n    ref: ref\n  }, inputProps, {\n    value: mergedSearchValue,\n    maxLength: mode === 'combobox' ? maxLength : undefined,\n    onChange: e => {\n      setInputChanged(true);\n      inputProps.onChange?.(e);\n    }\n  })));\n});\nexport default SingleContent;","import * as React from 'react';\nimport { clsx } from 'clsx';\n/**\n * Small wrapper for Select icons (clear/arrow/etc.).\n * Prevents default mousedown to avoid blurring or caret moves, and\n * renders a custom icon or a fallback icon span.\n *\n * DOM structure:\n * <span className={className} ...>\n *   { icon || <span className={`${className}-icon`}>{children}</span> }\n * </span>\n */\nconst TransBtn = props => {\n  const {\n    className,\n    style,\n    customizeIcon,\n    customizeIconProps,\n    children,\n    onMouseDown,\n    onClick\n  } = props;\n  const icon = typeof customizeIcon === 'function' ? customizeIcon(customizeIconProps) : customizeIcon;\n  return /*#__PURE__*/React.createElement(\"span\", {\n    className: className,\n    onMouseDown: event => {\n      event.preventDefault();\n      onMouseDown?.(event);\n    },\n    style: {\n      userSelect: 'none',\n      WebkitUserSelect: 'none',\n      ...style\n    },\n    unselectable: \"on\",\n    onClick: onClick,\n    \"aria-hidden\": true\n  }, icon !== undefined ? icon : /*#__PURE__*/React.createElement(\"span\", {\n    className: clsx(className.split(/\\s+/).map(cls => `${cls}-icon`))\n  }, children));\n};\nexport default TransBtn;","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport { clsx } from 'clsx';\nimport Overflow from '@rc-component/overflow';\nimport Input from \"../Input\";\nimport { useSelectInputContext } from \"../context\";\nimport TransBtn from \"../../TransBtn\";\nimport { getTitle } from \"../../utils/commonUtil\";\nimport useBaseProps from \"../../hooks/useBaseProps\";\nimport Placeholder from \"./Placeholder\";\nfunction itemKey(value) {\n  return value.key ?? value.value;\n}\nconst onPreventMouseDown = event => {\n  event.preventDefault();\n  event.stopPropagation();\n};\nexport default /*#__PURE__*/React.forwardRef(function MultipleContent({\n  inputProps\n}, ref) {\n  const {\n    prefixCls,\n    displayValues,\n    searchValue,\n    mode,\n    onSelectorRemove,\n    removeIcon: removeIconFromContext\n  } = useSelectInputContext();\n  const {\n    disabled,\n    showSearch,\n    triggerOpen,\n    rawOpen,\n    toggleOpen,\n    autoClearSearchValue,\n    tagRender: tagRenderFromContext,\n    maxTagPlaceholder: maxTagPlaceholderFromContext,\n    maxTagTextLength,\n    maxTagCount,\n    classNames,\n    styles\n  } = useBaseProps();\n  const selectionItemPrefixCls = `${prefixCls}-selection-item`;\n\n  // ===================== Search ======================\n  // Apply autoClearSearchValue logic: when dropdown is closed and autoClearSearchValue is not false (default true), clear search value\n  // Use rawOpen to avoid clearing search when emptyListContent blocks open\n  let computedSearchValue = searchValue;\n  if (!rawOpen && mode === 'multiple' && autoClearSearchValue !== false) {\n    computedSearchValue = '';\n  }\n  const inputValue = showSearch ? computedSearchValue || '' : '';\n  const inputEditable = showSearch && !disabled;\n\n  // Props from context with safe defaults\n  const removeIcon = removeIconFromContext ?? '×';\n  const maxTagPlaceholder = maxTagPlaceholderFromContext ?? (omittedValues => `+ ${omittedValues.length} ...`);\n  const tagRender = tagRenderFromContext;\n  const onToggleOpen = newOpen => {\n    toggleOpen(newOpen);\n  };\n  const onRemove = value => {\n    onSelectorRemove?.(value);\n  };\n\n  // ======================== Item ========================\n  // >>> Render Selector Node. Includes Item & Rest\n  const defaultRenderSelector = (item, content, itemDisabled, closable, onClose) => /*#__PURE__*/React.createElement(\"span\", {\n    title: getTitle(item),\n    className: clsx(selectionItemPrefixCls, {\n      [`${selectionItemPrefixCls}-disabled`]: itemDisabled\n    }, classNames?.item),\n    style: styles?.item\n  }, /*#__PURE__*/React.createElement(\"span\", {\n    className: clsx(`${selectionItemPrefixCls}-content`, classNames?.itemContent),\n    style: styles?.itemContent\n  }, content), closable && /*#__PURE__*/React.createElement(TransBtn, {\n    className: clsx(`${selectionItemPrefixCls}-remove`, classNames?.itemRemove),\n    style: styles?.itemRemove,\n    onMouseDown: onPreventMouseDown,\n    onClick: onClose,\n    customizeIcon: removeIcon\n  }, \"\\xD7\"));\n  const customizeRenderSelector = (value, content, itemDisabled, closable, onClose, isMaxTag, info) => {\n    const onMouseDown = e => {\n      onPreventMouseDown(e);\n      onToggleOpen(!triggerOpen);\n    };\n    return /*#__PURE__*/React.createElement(\"span\", {\n      onMouseDown: onMouseDown\n    }, tagRender({\n      label: content,\n      value,\n      index: info?.index,\n      disabled: itemDisabled,\n      closable,\n      onClose,\n      isMaxTag: !!isMaxTag\n    }));\n  };\n\n  // ====================== Overflow ======================\n  const renderItem = (valueItem, info) => {\n    const {\n      disabled: itemDisabled,\n      label,\n      value\n    } = valueItem;\n    const closable = !disabled && !itemDisabled;\n    let displayLabel = label;\n    if (typeof maxTagTextLength === 'number') {\n      if (typeof label === 'string' || typeof label === 'number') {\n        const strLabel = String(displayLabel);\n        if (strLabel.length > maxTagTextLength) {\n          displayLabel = `${strLabel.slice(0, maxTagTextLength)}...`;\n        }\n      }\n    }\n    const onClose = event => {\n      if (event) {\n        event.stopPropagation();\n      }\n      onRemove(valueItem);\n    };\n    return typeof tagRender === 'function' ? customizeRenderSelector(value, displayLabel, itemDisabled, closable, onClose, undefined, info) : defaultRenderSelector(valueItem, displayLabel, itemDisabled, closable, onClose);\n  };\n  const renderRest = omittedValues => {\n    // https://github.com/ant-design/ant-design/issues/48930\n    if (!displayValues.length) {\n      return null;\n    }\n    const content = typeof maxTagPlaceholder === 'function' ? maxTagPlaceholder(omittedValues) : maxTagPlaceholder;\n    return typeof tagRender === 'function' ? customizeRenderSelector(undefined, content, false, false, undefined, true) : defaultRenderSelector({\n      title: content\n    }, content, false);\n  };\n\n  // ======================= Render =======================\n  return /*#__PURE__*/React.createElement(Overflow, {\n    prefixCls: `${prefixCls}-content`,\n    className: classNames?.content,\n    style: styles?.content,\n    prefix: !displayValues.length && !inputValue && /*#__PURE__*/React.createElement(Placeholder, null),\n    data: displayValues,\n    renderItem: renderItem,\n    renderRest: renderRest,\n    suffix: /*#__PURE__*/React.createElement(Input, _extends({\n      ref: ref,\n      disabled: disabled,\n      readOnly: !inputEditable\n    }, inputProps, {\n      value: inputValue || '',\n      syncWidth: true\n    })),\n    itemKey: itemKey,\n    maxCount: maxTagCount\n  });\n});","import * as React from 'react';\nimport { pickAttrs } from '@rc-component/util';\nimport SingleContent from \"./SingleContent\";\nimport MultipleContent from \"./MultipleContent\";\nimport { useSelectInputContext } from \"../context\";\nimport useBaseProps from \"../../hooks/useBaseProps\";\nconst SelectContent = /*#__PURE__*/React.forwardRef(function SelectContent(_, ref) {\n  const {\n    multiple,\n    onInputKeyDown,\n    tabIndex\n  } = useSelectInputContext();\n  const baseProps = useBaseProps();\n  const {\n    showSearch\n  } = baseProps;\n  const ariaProps = pickAttrs(baseProps, {\n    aria: true\n  });\n  const sharedInputProps = {\n    ...ariaProps,\n    onKeyDown: onInputKeyDown,\n    readOnly: !showSearch,\n    tabIndex\n  };\n  if (multiple) {\n    return /*#__PURE__*/React.createElement(MultipleContent, {\n      ref: ref,\n      inputProps: sharedInputProps\n    });\n  }\n  return /*#__PURE__*/React.createElement(SingleContent, {\n    ref: ref,\n    inputProps: sharedInputProps\n  });\n});\nexport default SelectContent;","import { KeyCode } from '@rc-component/util';\n\n/** keyCode Judgment function */\nexport function isValidateOpenKey(currentKeyCode) {\n  return (\n    // Undefined for Edge bug:\n    // https://github.com/ant-design/ant-design/issues/51292\n    currentKeyCode &&\n    // Other keys\n    ![\n    // System function button\n    KeyCode.ESC, KeyCode.SHIFT, KeyCode.BACKSPACE, KeyCode.TAB, KeyCode.WIN_KEY, KeyCode.ALT, KeyCode.META, KeyCode.WIN_KEY_RIGHT, KeyCode.CTRL, KeyCode.SEMICOLON, KeyCode.EQUALS, KeyCode.CAPS_LOCK, KeyCode.CONTEXT_MENU,\n    // Arrow keys - should not trigger open when navigating in input\n    KeyCode.UP,\n    // KeyCode.DOWN,\n    KeyCode.LEFT, KeyCode.RIGHT,\n    // F1-F12\n    KeyCode.F1, KeyCode.F2, KeyCode.F3, KeyCode.F4, KeyCode.F5, KeyCode.F6, KeyCode.F7, KeyCode.F8, KeyCode.F9, KeyCode.F10, KeyCode.F11, KeyCode.F12].includes(currentKeyCode)\n  );\n}","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport Affix from \"./Affix\";\nimport SelectContent from \"./Content\";\nimport SelectInputContext from \"./context\";\nimport useBaseProps from \"../hooks/useBaseProps\";\nimport { composeRef, getDOM, KeyCode, omit, pickAttrs, useEvent } from '@rc-component/util';\nimport { isValidateOpenKey } from \"../utils/keyUtil\";\nimport { clsx } from 'clsx';\nconst DEFAULT_OMIT_PROPS = ['value', 'onChange', 'removeIcon', 'placeholder', 'maxTagCount', 'maxTagTextLength', 'maxTagPlaceholder', 'choiceTransitionName', 'onInputKeyDown', 'onPopupScroll', 'tabIndex', 'activeValue', 'onSelectorRemove', 'focused'];\nexport default /*#__PURE__*/React.forwardRef(function SelectInput(props, ref) {\n  const {\n    // Style\n    prefixCls,\n    className,\n    style,\n    // UI\n    prefix,\n    suffix,\n    clearIcon,\n    clearLabel,\n    children,\n    // Data\n    multiple,\n    displayValues,\n    placeholder,\n    mode,\n    // Search\n    searchValue,\n    onSearch,\n    onSearchSubmit,\n    onInputBlur,\n    // Input\n    maxLength,\n    autoFocus,\n    // Events\n    onMouseDown,\n    onClearMouseDown,\n    onInputKeyDown,\n    onSelectorRemove,\n    // Token handling\n    tokenWithEnter,\n    // Components\n    components,\n    ...restProps\n  } = props;\n  const {\n    triggerOpen,\n    toggleOpen,\n    showSearch,\n    disabled,\n    loading,\n    classNames,\n    styles\n  } = useBaseProps();\n  const rootRef = React.useRef(null);\n  const inputRef = React.useRef(null);\n\n  // Handle keyboard events similar to original Selector\n  const onInternalInputKeyDown = useEvent(event => {\n    const {\n      which\n    } = event;\n\n    // Compatible with multiple lines in TextArea\n    const isTextAreaElement = inputRef.current instanceof HTMLTextAreaElement;\n\n    // Prevent default behavior for up/down arrows when dropdown is open\n    if (!isTextAreaElement && triggerOpen && (which === KeyCode.UP || which === KeyCode.DOWN)) {\n      event.preventDefault();\n    }\n\n    // Call the original onInputKeyDown callback\n    if (onInputKeyDown) {\n      onInputKeyDown(event);\n    }\n\n    // Move within the text box for TextArea\n    if (isTextAreaElement && !triggerOpen && ~[KeyCode.UP, KeyCode.DOWN, KeyCode.LEFT, KeyCode.RIGHT].indexOf(which)) {\n      return;\n    }\n\n    // Open dropdown when a valid open key is pressed\n    const isModifier = event.ctrlKey || event.altKey || event.metaKey;\n    if (!isModifier && isValidateOpenKey(which)) {\n      toggleOpen(true);\n    }\n  });\n\n  // ====================== Refs ======================\n  React.useImperativeHandle(ref, () => {\n    return {\n      focus: options => {\n        // Focus the inner input if available, otherwise fall back to root div.\n        (inputRef.current || rootRef.current).focus?.(options);\n      },\n      blur: () => {\n        (inputRef.current || rootRef.current).blur?.();\n      },\n      // Use getDOM to handle nested nativeElement structure (e.g., when RootComponent is antd Input)\n      nativeElement: getDOM(rootRef.current)\n    };\n  });\n\n  // ====================== Open ======================\n  const onInternalMouseDown = useEvent(event => {\n    if (!disabled) {\n      const inputDOM = getDOM(inputRef.current);\n\n      // https://github.com/ant-design/ant-design/issues/56002\n      // Tell `useSelectTriggerControl` to ignore this event\n      // When icon is dynamic render, the parentNode will miss\n      // so we need to mark the event directly\n      event.nativeEvent._ori_target = inputDOM;\n      const isClickOnInput = inputDOM === event.target || inputDOM?.contains(event.target);\n      if (inputDOM && !isClickOnInput) {\n        event.preventDefault();\n      }\n\n      // Check if we should prevent closing when clicking on selector\n      // Don't close if: open && not multiple && (combobox mode || showSearch)\n      const shouldPreventCloseOnSingle = triggerOpen && !multiple && (mode === 'combobox' || showSearch);\n\n      // Don't close if: open && multiple && click on input\n      const shouldPreventCloseOnMultipleInput = triggerOpen && multiple && isClickOnInput;\n      const shouldPreventClose = shouldPreventCloseOnSingle || shouldPreventCloseOnMultipleInput;\n      if (!event.nativeEvent._select_lazy) {\n        inputRef.current?.focus();\n\n        // Only toggle open if we should not prevent close\n        if (!shouldPreventClose) {\n          toggleOpen();\n        }\n      } else if (triggerOpen && !multiple) {\n        // Lazy should also close when click clear icon in single select.\n        toggleOpen(false);\n      }\n    }\n    onMouseDown?.(event);\n  });\n\n  // ===================== Clear ======================\n  // The clear button lives inside the select root, whose `onKeyDown` treats\n  // Enter/Space as \"open the dropdown\" and calls `preventDefault` on them.\n  // That would cancel the native button activation, so keyboard users would\n  // never get the `click` event which performs the clear. Keep the activation\n  // keys scoped to the button itself.\n  const onClearKeyDown = event => {\n    if (event.key === 'Enter' || event.key === ' ') {\n      event.stopPropagation();\n    }\n  };\n\n  // =================== Components ===================\n  const {\n    root: RootComponent\n  } = components;\n\n  // ===================== Render =====================\n  const domProps = omit(restProps, DEFAULT_OMIT_PROPS);\n  const ariaProps = pickAttrs(domProps, {\n    aria: true\n  });\n  const ariaKeys = Object.keys(ariaProps);\n\n  // Create context value with wrapped callbacks\n  const contextValue = {\n    ...props,\n    onInputKeyDown: onInternalInputKeyDown\n  };\n  if (RootComponent) {\n    const originProps = RootComponent.props || {};\n    const mergedProps = {\n      ...originProps,\n      ...domProps\n    };\n    Object.keys(originProps).forEach(key => {\n      const originVal = originProps[key];\n      const domVal = domProps[key];\n      if (typeof originVal === 'function' && typeof domVal === 'function') {\n        mergedProps[key] = (...args) => {\n          domVal(...args);\n          originVal(...args);\n        };\n      }\n    });\n    if ( /*#__PURE__*/React.isValidElement(RootComponent)) {\n      return /*#__PURE__*/React.cloneElement(RootComponent, {\n        ...mergedProps,\n        ref: composeRef(RootComponent.ref, rootRef)\n      });\n    }\n    return /*#__PURE__*/React.createElement(RootComponent, _extends({}, mergedProps, {\n      ref: rootRef\n    }));\n  }\n  return /*#__PURE__*/React.createElement(SelectInputContext.Provider, {\n    value: contextValue\n  }, /*#__PURE__*/React.createElement(\"div\", _extends({}, omit(domProps, ariaKeys), {\n    // Style\n    ref: rootRef,\n    className: className,\n    style: style\n    // Mouse Events\n    ,\n    onMouseDown: onInternalMouseDown\n  }), /*#__PURE__*/React.createElement(Affix, {\n    className: clsx(`${prefixCls}-prefix`, classNames?.prefix),\n    style: styles?.prefix\n  }, prefix), /*#__PURE__*/React.createElement(SelectContent, {\n    ref: inputRef\n  }), /*#__PURE__*/React.createElement(Affix, {\n    className: clsx(`${prefixCls}-suffix`, {\n      [`${prefixCls}-suffix-loading`]: loading\n    }, classNames?.suffix),\n    style: styles?.suffix\n  }, suffix), clearIcon && /*#__PURE__*/React.createElement(\"button\", {\n    type: \"button\",\n    \"aria-label\": clearLabel,\n    className: clsx(`${prefixCls}-clear`, classNames?.clear),\n    style: styles?.clear,\n    onMouseDown: e => {\n      // Keep focus on the input and mark the native event so the root\n      // `onInternalMouseDown` handler does not open the dropdown.\n      // This must run on mousedown because the root handler fires\n      // before the button's onClick.\n      e.preventDefault();\n      e.nativeEvent._select_lazy = true;\n    },\n    onKeyDown: onClearKeyDown\n    // Clearing happens on click so it works for both pointer and\n    // keyboard (Enter/Space) activation.\n    ,\n    onClick: onClearMouseDown\n  }, clearIcon), children));\n});","import * as React from 'react';\nexport default function useComponents(components, getInputElement, getRawInputElement) {\n  return React.useMemo(() => {\n    let {\n      root,\n      input\n    } = components || {};\n\n    // root: getRawInputElement\n    if (getRawInputElement) {\n      root = getRawInputElement();\n    }\n\n    // input: getInputElement\n    if (getInputElement) {\n      input = getInputElement();\n    }\n    return {\n      root,\n      input\n    };\n  }, [components, getInputElement, getRawInputElement]);\n}","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport { clsx } from 'clsx';\nimport { getDOM, useEvent } from '@rc-component/util';\nimport * as React from 'react';\nimport { useAllowClear } from \"../hooks/useAllowClear\";\nimport { BaseSelectContext } from \"../hooks/useBaseProps\";\nimport useLock from \"../hooks/useLock\";\nimport useSelectTriggerControl, { isInside } from \"../hooks/useSelectTriggerControl\";\nimport SelectTrigger from \"../SelectTrigger\";\nimport { getSeparatedContent, isValidCount } from \"../utils/valueUtil\";\nimport Polite from \"./Polite\";\nimport useOpen, { macroTask } from \"../hooks/useOpen\";\nimport SelectInput from \"../SelectInput\";\nimport useComponents from \"../hooks/useComponents\";\n\n/**\n * ZombieJ:\n * We are currently refactoring the semantic structure of the component. Changelog:\n * - Remove `suffixIcon` and change to `suffix`.\n * - Add `components.root` for replacing response element.\n *   - Remove `getInputElement` and `getRawInputElement` since we can use `components.input` instead.\n */\n\nexport const isMultiple = mode => mode === 'tags' || mode === 'multiple';\nconst BaseSelect = /*#__PURE__*/React.forwardRef((props, ref) => {\n  const {\n    id,\n    prefixCls,\n    className,\n    styles,\n    classNames,\n    showSearch,\n    tagRender,\n    showScrollBar = 'optional',\n    direction,\n    omitDomProps,\n    // Value\n    displayValues,\n    onDisplayValuesChange,\n    emptyOptions,\n    notFoundContent = 'Not Found',\n    onClear,\n    maxCount,\n    placeholder,\n    // Mode\n    mode,\n    // Status\n    disabled,\n    loading,\n    // Customize Input\n    getInputElement,\n    getRawInputElement,\n    // Open\n    open,\n    defaultOpen,\n    onPopupVisibleChange,\n    // Active\n    activeValue,\n    onActiveValueChange,\n    activeDescendantId,\n    // Search\n    searchValue,\n    autoClearSearchValue,\n    onSearch,\n    onSearchSplit,\n    tokenSeparators,\n    // Icons\n    allowClear,\n    prefix,\n    suffix,\n    suffixIcon,\n    clearIcon,\n    // Dropdown\n    OptionList,\n    animation,\n    transitionName,\n    popupStyle,\n    popupClassName,\n    popupMatchSelectWidth,\n    popupRender,\n    popupAlign,\n    placement,\n    builtinPlacements,\n    getPopupContainer,\n    // Focus\n    showAction = [],\n    onFocus,\n    onBlur,\n    // Rest Events\n    onKeyUp,\n    onKeyDown,\n    onMouseDown,\n    // Components\n    components,\n    // Rest Props\n    ...restProps\n  } = props;\n\n  // ============================== MISC ==============================\n  const multiple = isMultiple(mode);\n\n  // ============================== Refs ==============================\n  const containerRef = React.useRef(null);\n  const triggerRef = React.useRef(null);\n  const listRef = React.useRef(null);\n\n  /** Used for component focused management */\n  const [focused, setFocused] = React.useState(false);\n\n  // =========================== Imperative ===========================\n  React.useImperativeHandle(ref, () => ({\n    focus: containerRef.current?.focus,\n    blur: containerRef.current?.blur,\n    scrollTo: arg => listRef.current?.scrollTo(arg),\n    nativeElement: getDOM(containerRef.current)\n  }));\n\n  // =========================== Components ===========================\n  const mergedComponents = useComponents(components, getInputElement, getRawInputElement);\n\n  // ========================== Search Value ==========================\n  const mergedSearchValue = React.useMemo(() => {\n    if (mode !== 'combobox') {\n      return searchValue;\n    }\n    const val = displayValues[0]?.value;\n    return typeof val === 'string' || typeof val === 'number' ? String(val) : '';\n  }, [searchValue, mode, displayValues]);\n\n  // ========================== Custom Input ==========================\n  // Only works in `combobox`\n  const customizeInputElement = mode === 'combobox' && typeof getInputElement === 'function' && getInputElement() || null;\n\n  // ============================== Open ==============================\n  // Not trigger `open` when `notFoundContent` is empty\n  const emptyListContent = !notFoundContent && emptyOptions;\n  const [rawOpen, mergedOpen, triggerOpen, lockOptions] = useOpen(defaultOpen || false, open, onPopupVisibleChange, nextOpen => disabled || emptyListContent ? false : nextOpen);\n\n  // ============================= Search =============================\n  const tokenWithEnter = React.useMemo(() => typeof tokenSeparators === 'function' || (tokenSeparators || []).some(tokenSeparator => ['\\n', '\\r\\n'].includes(tokenSeparator)), [tokenSeparators]);\n  const splitByTokenSeparators = React.useMemo(() => {\n    if (typeof tokenSeparators === 'function') {\n      return (input, end) => {\n        const tokens = tokenSeparators(input);\n        const isUnchanged = Array.isArray(tokens) && tokens.length === 1 && tokens[0] === input;\n        if (!Array.isArray(tokens) || !tokens.length || isUnchanged) {\n          return null;\n        }\n        return typeof end !== 'undefined' ? tokens.slice(0, end) : tokens;\n      };\n    }\n    return (input, end) => getSeparatedContent(input, tokenSeparators, end);\n  }, [tokenSeparators]);\n  const onInternalSearch = (searchText, fromTyping, isCompositing) => {\n    if (multiple && isValidCount(maxCount) && displayValues.length >= maxCount) {\n      return;\n    }\n    let ret = true;\n    let newSearchText = searchText;\n    onActiveValueChange?.(null);\n    const cap = isValidCount(maxCount) ? maxCount - displayValues.length : undefined;\n    const patchLabels = isCompositing ? null : splitByTokenSeparators(searchText, cap);\n\n    // Ignore combobox since it's not split-able\n    if (mode !== 'combobox' && patchLabels) {\n      newSearchText = '';\n      onSearchSplit?.(patchLabels);\n\n      // Should close when paste finish\n      triggerOpen(false);\n\n      // Tell Selector that break next actions\n      ret = false;\n    }\n    if (onSearch && mergedSearchValue !== newSearchText) {\n      onSearch(newSearchText, {\n        source: fromTyping ? 'typing' : 'effect'\n      });\n    }\n\n    // Open if from typing\n    if (searchText && fromTyping && ret) {\n      triggerOpen(true);\n    }\n    return ret;\n  };\n\n  // Only triggered when menu is closed & mode is tags\n  // If menu is open, OptionList will take charge\n  // If mode isn't tags, press enter is not meaningful when you can't see any option\n  const onInternalSearchSubmit = searchText => {\n    // prevent empty tags from appearing when you click the Enter button\n    if (!searchText || !searchText.trim()) {\n      return;\n    }\n    onSearch(searchText, {\n      source: 'submit'\n    });\n  };\n\n  // Clean up search value when the dropdown is closed.\n  // We use `rawOpen` here to avoid clearing the search input when the dropdown is\n  // programmatically closed due to `notFoundContent={null}` and no matching options.\n  // This allows the user to continue typing their search query.\n  React.useEffect(() => {\n    if (!rawOpen && !multiple && mode !== 'combobox') {\n      onInternalSearch('', false, false);\n    }\n  }, [rawOpen]);\n\n  // ============================ Disabled ============================\n  // Close dropdown & remove focus state when disabled change\n  React.useEffect(() => {\n    // After onBlur is triggered, the focused does not need to be reset\n    if (disabled) {\n      triggerOpen(false);\n      setFocused(false);\n    }\n  }, [disabled, mergedOpen]);\n\n  // ============================ Keyboard ============================\n  /**\n   * We record input value here to check if can press to clean up by backspace\n   * - null: Key is not down, this is reset by key up\n   * - true: Search text is empty when first time backspace down\n   * - false: Search text is not empty when first time backspace down\n   */\n  const [getClearLock, setClearLock] = useLock();\n  const keyLockRef = React.useRef(false);\n\n  // KeyDown\n  const onInternalKeyDown = event => {\n    const clearLock = getClearLock();\n    const {\n      key\n    } = event;\n    const isEnterKey = key === 'Enter';\n    const isSpaceKey = key === ' ';\n\n    // Enter or Space opens dropdown (ARIA combobox: spacebar should open)\n    if (isEnterKey || isSpaceKey) {\n      // Do not submit form when type in the input; prevent Space from scrolling page\n      const isCombobox = mode === 'combobox';\n      const isEditable = isCombobox || showSearch;\n      if (isSpaceKey && !isEditable || isEnterKey && !isCombobox) {\n        event.preventDefault();\n      }\n\n      // We only manage open state here, close logic should handle by list component\n      if (!mergedOpen) {\n        triggerOpen(true);\n      }\n    }\n    setClearLock(!!mergedSearchValue);\n\n    // Remove value by `backspace`\n    if (key === 'Backspace' && !clearLock && multiple && !mergedSearchValue && displayValues.length) {\n      const cloneDisplayValues = [...displayValues];\n      let removedDisplayValue = null;\n      for (let i = cloneDisplayValues.length - 1; i >= 0; i -= 1) {\n        const current = cloneDisplayValues[i];\n        if (!current.disabled) {\n          cloneDisplayValues.splice(i, 1);\n          removedDisplayValue = current;\n          break;\n        }\n      }\n      if (removedDisplayValue) {\n        onDisplayValuesChange(cloneDisplayValues, {\n          type: 'remove',\n          values: [removedDisplayValue]\n        });\n      }\n    }\n    if (mergedOpen && (!isEnterKey || !keyLockRef.current) && !isSpaceKey) {\n      // Lock the Enter key after it is pressed to avoid repeated triggering of the onChange event.\n      if (isEnterKey) {\n        keyLockRef.current = true;\n      }\n      listRef.current?.onKeyDown(event);\n    }\n    onKeyDown?.(event);\n  };\n\n  // KeyUp\n  const onInternalKeyUp = (event, ...rest) => {\n    if (mergedOpen) {\n      listRef.current?.onKeyUp(event, ...rest);\n    }\n    if (event.key === 'Enter') {\n      keyLockRef.current = false;\n    }\n    onKeyUp?.(event, ...rest);\n  };\n\n  // ============================ Selector ============================\n  const onSelectorRemove = useEvent(val => {\n    const newValues = displayValues.filter(i => i !== val);\n    onDisplayValuesChange(newValues, {\n      type: 'remove',\n      values: [val]\n    });\n  });\n  const onInputBlur = () => {\n    // Unlock the Enter key after the input blur; otherwise, the Enter key needs to be pressed twice to trigger the correct effect.\n    keyLockRef.current = false;\n  };\n\n  // ========================== Focus / Blur ==========================\n  const getSelectElements = () => [getDOM(containerRef.current), triggerRef.current?.getPopupElement()];\n\n  // Close when click on non-select element\n  useSelectTriggerControl(getSelectElements, mergedOpen, triggerOpen, !!mergedComponents.root);\n\n  // ========================== Focus / Blur ==========================\n  const internalMouseDownRef = React.useRef(false);\n  const onInternalFocus = event => {\n    setFocused(true);\n    if (!disabled) {\n      // `showAction` should handle `focus` if set\n      if (showAction.includes('focus')) {\n        triggerOpen(true);\n      }\n      onFocus?.(event);\n    }\n  };\n  const onRootBlur = () => {\n    // Delay close should check the activeElement\n    if (mergedOpen && !internalMouseDownRef.current) {\n      triggerOpen(false, {\n        cancelFun: () => isInside(getSelectElements(), document.activeElement)\n      });\n    }\n  };\n  const onInternalBlur = event => {\n    setFocused(false);\n    if (mergedSearchValue) {\n      // `tags` mode should move `searchValue` into values\n      if (mode === 'tags') {\n        onSearch(mergedSearchValue, {\n          source: 'submit'\n        });\n      } else if (mode === 'multiple') {\n        // `multiple` mode only clean the search value but not trigger event\n        onSearch('', {\n          source: 'blur'\n        });\n      }\n    }\n    onRootBlur();\n    if (!disabled) {\n      onBlur?.(event);\n    }\n  };\n  const onRootMouseDown = (event, ...restArgs) => {\n    const {\n      target\n    } = event;\n    const popupElement = triggerRef.current?.getPopupElement();\n\n    // We should give focus back to selector if clicked item is not focusable\n    if (popupElement?.contains(target) && triggerOpen) {\n      // Tell `open` not to close since it's safe in the popup\n      triggerOpen(true);\n    }\n    onMouseDown?.(event, ...restArgs);\n    internalMouseDownRef.current = true;\n    macroTask(() => {\n      internalMouseDownRef.current = false;\n    });\n  };\n\n  // ============================ Dropdown ============================\n  const [, forceUpdate] = React.useState({});\n  // We need force update here since popup dom is render async\n  function onPopupMouseEnter() {\n    forceUpdate({});\n  }\n\n  // Used for raw custom input trigger\n  let onTriggerVisibleChange;\n  if (!!mergedComponents.root) {\n    onTriggerVisibleChange = newOpen => {\n      triggerOpen(newOpen);\n    };\n  }\n\n  // ============================ Context =============================\n  const baseSelectContext = React.useMemo(() => ({\n    ...props,\n    notFoundContent,\n    open: mergedOpen,\n    triggerOpen: mergedOpen,\n    rawOpen,\n    id,\n    showSearch,\n    multiple,\n    toggleOpen: triggerOpen,\n    showScrollBar,\n    styles,\n    classNames,\n    lockOptions\n  }), [props, notFoundContent, triggerOpen, id, showSearch, multiple, mergedOpen, rawOpen, showScrollBar, styles, classNames, lockOptions]);\n\n  // ==================================================================\n  // ==                            Render                            ==\n  // ==================================================================\n\n  // ============================= Suffix =============================\n  const mergedSuffixIcon = React.useMemo(() => {\n    const nextSuffix = suffix ?? suffixIcon;\n    if (typeof nextSuffix === 'function') {\n      return nextSuffix({\n        searchValue: mergedSearchValue,\n        open: mergedOpen,\n        focused,\n        showSearch,\n        loading\n      });\n    }\n    return nextSuffix;\n  }, [suffix, suffixIcon, mergedSearchValue, mergedOpen, focused, showSearch, loading]);\n\n  // ============================= Clear ==============================\n  const onClearMouseDown = () => {\n    onClear?.();\n    containerRef.current?.focus();\n    onDisplayValuesChange([], {\n      type: 'clear',\n      values: displayValues\n    });\n    onInternalSearch('', false, false);\n  };\n  const {\n    allowClear: mergedAllowClear,\n    clearIcon: clearNode,\n    label: clearLabel\n  } = useAllowClear(prefixCls, displayValues, allowClear, clearIcon, disabled, mergedSearchValue, mode);\n\n  // =========================== OptionList ===========================\n  const optionList = /*#__PURE__*/React.createElement(OptionList, {\n    ref: listRef\n  });\n\n  // ============================= Select =============================\n  const mergedClassName = clsx(prefixCls, className, {\n    [`${prefixCls}-focused`]: focused,\n    [`${prefixCls}-multiple`]: multiple,\n    [`${prefixCls}-single`]: !multiple,\n    [`${prefixCls}-allow-clear`]: mergedAllowClear,\n    [`${prefixCls}-show-arrow`]: mergedSuffixIcon !== undefined && mergedSuffixIcon !== null,\n    [`${prefixCls}-disabled`]: disabled,\n    [`${prefixCls}-loading`]: loading,\n    [`${prefixCls}-open`]: mergedOpen,\n    [`${prefixCls}-customize-input`]: customizeInputElement,\n    [`${prefixCls}-show-search`]: showSearch\n  });\n\n  // >>> Render\n  let renderNode = /*#__PURE__*/React.createElement(SelectInput, _extends({}, restProps, {\n    // Ref\n    ref: containerRef\n    // Style\n    ,\n    prefixCls: prefixCls,\n    className: mergedClassName\n    // Focus state\n    ,\n    focused: focused\n    // UI\n    ,\n    prefix: prefix,\n    suffix: mergedSuffixIcon,\n    clearIcon: clearNode,\n    clearLabel: clearLabel\n    // Type or mode\n    ,\n    multiple: multiple,\n    mode: mode\n    // Values\n    ,\n    displayValues: displayValues,\n    placeholder: placeholder,\n    searchValue: mergedSearchValue,\n    activeValue: activeValue,\n    onSearch: onInternalSearch,\n    onSearchSubmit: onInternalSearchSubmit,\n    onInputBlur: onInputBlur,\n    onFocus: onInternalFocus,\n    onBlur: onInternalBlur,\n    onClearMouseDown: onClearMouseDown,\n    onKeyDown: onInternalKeyDown,\n    onKeyUp: onInternalKeyUp,\n    onSelectorRemove: onSelectorRemove\n    // Token handling\n    ,\n    tokenWithEnter: tokenWithEnter\n    // Open\n    ,\n    onMouseDown: onRootMouseDown\n    // Components\n    ,\n    components: mergedComponents\n  }));\n  renderNode = /*#__PURE__*/React.createElement(SelectTrigger, {\n    ref: triggerRef,\n    disabled: disabled,\n    prefixCls: prefixCls,\n    visible: mergedOpen,\n    popupElement: optionList,\n    animation: animation,\n    transitionName: transitionName,\n    popupStyle: popupStyle,\n    popupClassName: popupClassName,\n    direction: direction,\n    popupMatchSelectWidth: popupMatchSelectWidth,\n    popupRender: popupRender,\n    popupAlign: popupAlign,\n    placement: placement,\n    builtinPlacements: builtinPlacements,\n    getPopupContainer: getPopupContainer,\n    empty: emptyOptions,\n    onPopupVisibleChange: onTriggerVisibleChange,\n    onPopupMouseEnter: onPopupMouseEnter,\n    onPopupMouseDown: onRootMouseDown,\n    onPopupBlur: onRootBlur\n  }, renderNode);\n  return /*#__PURE__*/React.createElement(BaseSelectContext.Provider, {\n    value: baseSelectContext\n  }, /*#__PURE__*/React.createElement(Polite, {\n    visible: focused && !mergedOpen,\n    values: displayValues\n  }), renderNode);\n});\n\n// Set display name for dev\nif (process.env.NODE_ENV !== 'production') {\n  BaseSelect.displayName = 'BaseSelect';\n}\nexport default BaseSelect;","/* istanbul ignore file */\n\n/** This is a placeholder, not real render in dom */\nconst OptGroup = () => null;\nOptGroup.isSelectOptGroup = true;\nexport default OptGroup;","/* istanbul ignore file */\n\n/** This is a placeholder, not real render in dom */\nconst Option = () => null;\nOption.isSelectOption = true;\nexport default Option;","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from 'react';\nimport ResizeObserver from '@rc-component/resize-observer';\nimport { clsx } from 'clsx';\n/**\n * Fill component to provided the scroll content real height.\n */\nconst Filler = /*#__PURE__*/React.forwardRef(({\n  height,\n  offsetY,\n  offsetX,\n  children,\n  prefixCls,\n  onInnerResize,\n  innerProps,\n  rtl,\n  extra\n}, ref) => {\n  let outerStyle = {};\n  let innerStyle = {\n    display: 'flex',\n    flexDirection: 'column'\n  };\n  if (offsetY !== undefined) {\n    // Not set `width` since this will break `sticky: right`\n    outerStyle = {\n      height,\n      position: 'relative',\n      overflow: 'hidden'\n    };\n    innerStyle = {\n      ...innerStyle,\n      transform: `translateY(${offsetY}px)`,\n      [rtl ? 'marginRight' : 'marginLeft']: -offsetX,\n      position: 'absolute',\n      left: 0,\n      right: 0,\n      top: 0\n    };\n  }\n  return /*#__PURE__*/React.createElement(\"div\", {\n    style: outerStyle\n  }, /*#__PURE__*/React.createElement(ResizeObserver, {\n    onResize: ({\n      offsetHeight\n    }) => {\n      if (offsetHeight && onInnerResize) {\n        onInnerResize();\n      }\n    }\n  }, /*#__PURE__*/React.createElement(\"div\", _extends({\n    style: innerStyle,\n    className: clsx({\n      [`${prefixCls}-holder-inner`]: prefixCls\n    }),\n    ref: ref\n  }, innerProps), children, extra)));\n});\nFiller.displayName = 'Filler';\nexport default Filler;","import * as React from 'react';\nexport function Item({\n  children,\n  setRef\n}) {\n  const refFunc = React.useCallback(node => {\n    setRef(node);\n  }, [setRef]);\n  return /*#__PURE__*/React.cloneElement(children, {\n    ref: refFunc\n  });\n}","import * as React from 'react';\nimport { Item } from \"../Item\";\nexport default function useChildren(list, startIndex, endIndex, scrollWidth, offsetX, setNodeRef, renderFunc, {\n  getKey\n}) {\n  return list.slice(startIndex, endIndex + 1).map((item, index) => {\n    const eleIndex = startIndex + index;\n    const node = renderFunc(item, eleIndex, {\n      style: {\n        width: scrollWidth\n      },\n      offsetX\n    });\n    const key = getKey(item);\n    return /*#__PURE__*/React.createElement(Item, {\n      key: key,\n      setRef: ele => setNodeRef(item, ele)\n    }, node);\n  });\n}","/**\n * Get index with specific start index one by one. e.g.\n * min: 3, max: 9, start: 6\n *\n * Return index is:\n * [0]: 6\n * [1]: 7\n * [2]: 5\n * [3]: 8\n * [4]: 4\n * [5]: 9\n * [6]: 3\n */\nexport function getIndexByStartLoc(min, max, start, index) {\n  const beforeCount = start - min;\n  const afterCount = max - start;\n  const balanceCount = Math.min(beforeCount, afterCount) * 2;\n\n  // Balance\n  if (index <= balanceCount) {\n    const stepIndex = Math.floor(index / 2);\n    if (index % 2) {\n      return start + stepIndex + 1;\n    }\n    return start - stepIndex;\n  }\n\n  // One is out of range\n  if (beforeCount > afterCount) {\n    return start - (index - afterCount);\n  }\n  return start + (index - beforeCount);\n}\n\n/**\n * We assume that 2 list has only 1 item diff and others keeping the order.\n * So we can use dichotomy algorithm to find changed one.\n */\nexport function findListDiffIndex(originList, targetList, getKey) {\n  const originLen = originList.length;\n  const targetLen = targetList.length;\n  let shortList;\n  let longList;\n  if (originLen === 0 && targetLen === 0) {\n    return null;\n  }\n  if (originLen < targetLen) {\n    shortList = originList;\n    longList = targetList;\n  } else {\n    shortList = targetList;\n    longList = originList;\n  }\n  const notExistKey = {\n    __EMPTY_ITEM__: true\n  };\n  function getItemKey(item) {\n    if (item !== undefined) {\n      return getKey(item);\n    }\n    return notExistKey;\n  }\n\n  // Loop to find diff one\n  let diffIndex = null;\n  let multiple = Math.abs(originLen - targetLen) !== 1;\n  for (let i = 0; i < longList.length; i += 1) {\n    const shortKey = getItemKey(shortList[i]);\n    const longKey = getItemKey(longList[i]);\n    if (shortKey !== longKey) {\n      diffIndex = i;\n      multiple = multiple || shortKey !== getItemKey(longList[i + 1]);\n      break;\n    }\n  }\n  return diffIndex === null ? null : {\n    index: diffIndex,\n    multiple\n  };\n}","import * as React from 'react';\nimport { findListDiffIndex } from \"../utils/algorithmUtil\";\nexport default function useDiffItem(data, getKey, onDiff) {\n  const [prevData, setPrevData] = React.useState(data);\n  const [diffItem, setDiffItem] = React.useState(null);\n  React.useEffect(() => {\n    const diff = findListDiffIndex(prevData || [], data || [], getKey);\n    if (diff?.index !== undefined) {\n      onDiff?.(diff.index);\n      setDiffItem(data[diff.index]);\n    }\n    setPrevData(data);\n  }, [data]);\n  return [diffItem];\n}","const isFF = typeof navigator === 'object' && /Firefox/i.test(navigator.userAgent);\nexport default isFF;","import { useRef } from 'react';\nexport default ((isScrollAtTop, isScrollAtBottom, isScrollAtLeft, isScrollAtRight) => {\n  // Do lock for a wheel when scrolling\n  const lockRef = useRef(false);\n  const lockTimeoutRef = useRef(null);\n  function lockScroll() {\n    clearTimeout(lockTimeoutRef.current);\n    lockRef.current = true;\n    lockTimeoutRef.current = setTimeout(() => {\n      lockRef.current = false;\n    }, 50);\n  }\n\n  // Pass to ref since global add is in closure\n  const scrollPingRef = useRef({\n    top: isScrollAtTop,\n    bottom: isScrollAtBottom,\n    left: isScrollAtLeft,\n    right: isScrollAtRight\n  });\n  scrollPingRef.current.top = isScrollAtTop;\n  scrollPingRef.current.bottom = isScrollAtBottom;\n  scrollPingRef.current.left = isScrollAtLeft;\n  scrollPingRef.current.right = isScrollAtRight;\n  return (isHorizontal, delta, smoothOffset = false) => {\n    const originScroll = isHorizontal ?\n    // Pass origin wheel when on the left\n    delta < 0 && scrollPingRef.current.left ||\n    // Pass origin wheel when on the right\n    delta > 0 && scrollPingRef.current.right // Pass origin wheel when on the top\n    : delta < 0 && scrollPingRef.current.top ||\n    // Pass origin wheel when on the bottom\n    delta > 0 && scrollPingRef.current.bottom;\n    if (smoothOffset && originScroll) {\n      // No need lock anymore when it's smooth offset from touchMove interval\n      clearTimeout(lockTimeoutRef.current);\n      lockRef.current = false;\n    } else if (!originScroll || lockRef.current) {\n      lockScroll();\n    }\n    return !lockRef.current && originScroll;\n  };\n});","import { raf } from '@rc-component/util';\nimport { useRef } from 'react';\nimport isFF from \"../utils/isFirefox\";\nimport useOriginScroll from \"./useOriginScroll\";\nexport default function useFrameWheel(inVirtual, isScrollAtTop, isScrollAtBottom, isScrollAtLeft, isScrollAtRight, horizontalScroll,\n/***\n * Return `true` when you need to prevent default event\n */\nonWheelDelta) {\n  const offsetRef = useRef(0);\n  const nextFrameRef = useRef(null);\n\n  // Firefox patch\n  const wheelValueRef = useRef(null);\n  const isMouseScrollRef = useRef(false);\n\n  // Scroll status sync\n  const originScroll = useOriginScroll(isScrollAtTop, isScrollAtBottom, isScrollAtLeft, isScrollAtRight);\n  function onWheelY(e, deltaY) {\n    raf.cancel(nextFrameRef.current);\n\n    // Do nothing when scroll at the edge, Skip check when is in scroll\n    if (originScroll(false, deltaY)) return;\n\n    // Skip if nest List has handled this event\n    const event = e;\n    if (!event._virtualHandled) {\n      event._virtualHandled = true;\n    } else {\n      return;\n    }\n    offsetRef.current += deltaY;\n    wheelValueRef.current = deltaY;\n\n    // Proxy of scroll events\n    if (!isFF) {\n      event.preventDefault();\n    }\n    nextFrameRef.current = raf(() => {\n      // Patch a multiple for Firefox to fix wheel number too small\n      // ref: https://github.com/ant-design/ant-design/issues/26372#issuecomment-679460266\n      const patchMultiple = isMouseScrollRef.current ? 10 : 1;\n      onWheelDelta(offsetRef.current * patchMultiple, false);\n      offsetRef.current = 0;\n    });\n  }\n  function onWheelX(event, deltaX) {\n    onWheelDelta(deltaX, true);\n    if (!isFF) {\n      event.preventDefault();\n    }\n  }\n\n  // Check for which direction does wheel do. `sx` means `shift + wheel`\n  const wheelDirectionRef = useRef(null);\n  const wheelDirectionCleanRef = useRef(null);\n  function onWheel(event) {\n    if (!inVirtual) return;\n\n    // Wait for 2 frame to clean direction\n    raf.cancel(wheelDirectionCleanRef.current);\n    wheelDirectionCleanRef.current = raf(() => {\n      wheelDirectionRef.current = null;\n    }, 2);\n    const {\n      deltaX,\n      deltaY,\n      shiftKey\n    } = event;\n    let mergedDeltaX = deltaX;\n    let mergedDeltaY = deltaY;\n    if (wheelDirectionRef.current === 'sx' || !wheelDirectionRef.current && (shiftKey || false) && deltaY && !deltaX) {\n      mergedDeltaX = deltaY;\n      mergedDeltaY = 0;\n      wheelDirectionRef.current = 'sx';\n    }\n    const absX = Math.abs(mergedDeltaX);\n    const absY = Math.abs(mergedDeltaY);\n    if (wheelDirectionRef.current === null) {\n      wheelDirectionRef.current = horizontalScroll && absX > absY ? 'x' : 'y';\n    }\n    if (wheelDirectionRef.current === 'y') {\n      onWheelY(event, mergedDeltaY);\n    } else {\n      onWheelX(event, mergedDeltaX);\n    }\n  }\n\n  // A patch for firefox\n  function onFireFoxScroll(event) {\n    if (!inVirtual) return;\n    isMouseScrollRef.current = event.detail === wheelValueRef.current;\n  }\n  return [onWheel, onFireFoxScroll];\n}","import * as React from 'react';\n\n/**\n * Size info need loop query for the `heights` which will has the perf issue.\n * Let cache result for each render phase.\n */\nexport function useGetSize(mergedData, getKey, heights, itemHeight) {\n  const [key2Index, bottomList] = React.useMemo(() => [new Map(), []], [mergedData, heights.id, itemHeight]);\n  const getSize = (startKey, endKey = startKey) => {\n    // Get from cache first\n    let startIndex = key2Index.get(startKey);\n    let endIndex = key2Index.get(endKey);\n\n    // Loop to fill the cache\n    if (startIndex === undefined || endIndex === undefined) {\n      const dataLen = mergedData.length;\n      for (let i = bottomList.length; i < dataLen; i += 1) {\n        const item = mergedData[i];\n        const key = getKey(item);\n        key2Index.set(key, i);\n        const cacheHeight = heights.get(key) ?? itemHeight;\n        bottomList[i] = (bottomList[i - 1] || 0) + cacheHeight;\n        if (key === startKey) {\n          startIndex = i;\n        }\n        if (key === endKey) {\n          endIndex = i;\n        }\n        if (startIndex !== undefined && endIndex !== undefined) {\n          break;\n        }\n      }\n    }\n    return {\n      top: bottomList[startIndex - 1] || 0,\n      bottom: bottomList[endIndex]\n    };\n  };\n  return getSize;\n}","// Firefox has low performance of map.\nclass CacheMap {\n  maps;\n\n  // Used for cache key\n  // `useMemo` no need to update if `id` not change\n  id = 0;\n  diffRecords = new Map();\n  constructor() {\n    this.maps = Object.create(null);\n  }\n  set(key, value) {\n    // Record prev value\n    this.diffRecords.set(key, this.maps[key]);\n    this.maps[key] = value;\n    this.id += 1;\n  }\n  get(key) {\n    return this.maps[key];\n  }\n\n  /**\n   * CacheMap will record the key changed.\n   * To help to know what's update in the next render.\n   */\n  resetRecord() {\n    this.diffRecords.clear();\n  }\n  getRecord() {\n    return this.diffRecords;\n  }\n}\nexport default CacheMap;","import * as React from 'react';\nimport { useEffect, useRef } from 'react';\nimport CacheMap from \"../utils/CacheMap\";\nfunction parseNumber(value) {\n  const num = parseFloat(value);\n  return isNaN(num) ? 0 : num;\n}\nexport default function useHeights(getKey, onItemAdd, onItemRemove) {\n  const [updatedMark, setUpdatedMark] = React.useState(0);\n  const instanceRef = useRef(new Map());\n  const heightsRef = useRef(new CacheMap());\n  const promiseIdRef = useRef(0);\n  function cancelRaf() {\n    promiseIdRef.current += 1;\n  }\n  function collectHeight(sync = false) {\n    cancelRaf();\n    const doCollect = () => {\n      let changed = false;\n      instanceRef.current.forEach((element, key) => {\n        if (element && element.offsetParent) {\n          const {\n            offsetHeight\n          } = element;\n          const {\n            marginTop,\n            marginBottom\n          } = getComputedStyle(element);\n          const marginTopNum = parseNumber(marginTop);\n          const marginBottomNum = parseNumber(marginBottom);\n          const totalHeight = offsetHeight + marginTopNum + marginBottomNum;\n          if (heightsRef.current.get(key) !== totalHeight) {\n            heightsRef.current.set(key, totalHeight);\n            changed = true;\n          }\n        }\n      });\n\n      // Always trigger update mark to tell parent that should re-calculate heights when resized\n      if (changed) {\n        setUpdatedMark(c => c + 1);\n      }\n    };\n    if (sync) {\n      doCollect();\n    } else {\n      promiseIdRef.current += 1;\n      const id = promiseIdRef.current;\n      Promise.resolve().then(() => {\n        if (id === promiseIdRef.current) {\n          doCollect();\n        }\n      });\n    }\n  }\n  function setInstanceRef(item, instance) {\n    const key = getKey(item);\n    const origin = instanceRef.current.get(key);\n    if (instance) {\n      instanceRef.current.set(key, instance);\n      collectHeight();\n    } else {\n      instanceRef.current.delete(key);\n    }\n\n    // Instance changed\n    if (!origin !== !instance) {\n      if (instance) {\n        onItemAdd?.(item);\n      } else {\n        onItemRemove?.(item);\n      }\n    }\n  }\n  useEffect(() => {\n    return cancelRaf;\n  }, []);\n  return [setInstanceRef, collectHeight, heightsRef.current, updatedMark];\n}","import { useLayoutEffect } from '@rc-component/util';\nimport { useRef } from 'react';\nconst SMOOTH_PTG = 14 / 15;\nexport default function useMobileTouchMove(inVirtual, listRef, callback) {\n  const touchedRef = useRef(false);\n  const touchXRef = useRef(0);\n  const touchYRef = useRef(0);\n  const elementRef = useRef(null);\n\n  // Smooth scroll\n  const intervalRef = useRef(null);\n\n  /* eslint-disable prefer-const */\n  let cleanUpEvents;\n  const onTouchMove = e => {\n    if (touchedRef.current) {\n      const currentX = Math.ceil(e.touches[0].pageX);\n      const currentY = Math.ceil(e.touches[0].pageY);\n      let offsetX = touchXRef.current - currentX;\n      let offsetY = touchYRef.current - currentY;\n      const isHorizontal = Math.abs(offsetX) > Math.abs(offsetY);\n      if (isHorizontal) {\n        touchXRef.current = currentX;\n      } else {\n        touchYRef.current = currentY;\n      }\n      const scrollHandled = callback(isHorizontal, isHorizontal ? offsetX : offsetY, false, e);\n      if (scrollHandled) {\n        e.preventDefault();\n      }\n\n      // Smooth interval\n      clearInterval(intervalRef.current);\n      if (scrollHandled) {\n        intervalRef.current = setInterval(() => {\n          if (isHorizontal) {\n            offsetX *= SMOOTH_PTG;\n          } else {\n            offsetY *= SMOOTH_PTG;\n          }\n          const offset = Math.floor(isHorizontal ? offsetX : offsetY);\n          if (!callback(isHorizontal, offset, true) || Math.abs(offset) <= 0.1) {\n            clearInterval(intervalRef.current);\n          }\n        }, 16);\n      }\n    }\n  };\n  const onTouchEnd = () => {\n    touchedRef.current = false;\n    cleanUpEvents();\n  };\n  const onTouchStart = e => {\n    cleanUpEvents();\n    if (e.touches.length === 1 && !touchedRef.current) {\n      touchedRef.current = true;\n      touchXRef.current = Math.ceil(e.touches[0].pageX);\n      touchYRef.current = Math.ceil(e.touches[0].pageY);\n      elementRef.current = e.target;\n      elementRef.current.addEventListener('touchmove', onTouchMove, {\n        passive: false\n      });\n      elementRef.current.addEventListener('touchend', onTouchEnd, {\n        passive: true\n      });\n    }\n  };\n  cleanUpEvents = () => {\n    if (elementRef.current) {\n      elementRef.current.removeEventListener('touchmove', onTouchMove);\n      elementRef.current.removeEventListener('touchend', onTouchEnd);\n    }\n  };\n  useLayoutEffect(() => {\n    if (inVirtual) {\n      listRef.current.addEventListener('touchstart', onTouchStart, {\n        passive: true\n      });\n    }\n    return () => {\n      listRef.current?.removeEventListener('touchstart', onTouchStart);\n      cleanUpEvents();\n      clearInterval(intervalRef.current);\n    };\n  }, [inVirtual]);\n}","import { raf } from '@rc-component/util';\nimport * as React from 'react';\nfunction smoothScrollOffset(offset) {\n  return Math.floor(offset ** 0.5);\n}\nexport function getPageXY(e, horizontal) {\n  const obj = 'touches' in e ? e.touches[0] : e;\n  return obj[horizontal ? 'pageX' : 'pageY'] - window[horizontal ? 'scrollX' : 'scrollY'];\n}\nexport default function useScrollDrag(inVirtual, componentRef, onScrollOffset) {\n  React.useEffect(() => {\n    const ele = componentRef.current;\n    if (inVirtual && ele) {\n      let mouseDownLock = false;\n      let rafId;\n      let offset;\n      const stopScroll = () => {\n        raf.cancel(rafId);\n      };\n      const continueScroll = () => {\n        stopScroll();\n        rafId = raf(() => {\n          onScrollOffset(offset);\n          continueScroll();\n        });\n      };\n      const clearDragState = () => {\n        mouseDownLock = false;\n        stopScroll();\n      };\n      const onMouseDown = e => {\n        // Skip if element set draggable\n        if (e.target.draggable || e.button !== 0) {\n          return;\n        }\n        // Skip if nest List has handled this event\n        const event = e;\n        if (!event._virtualHandled) {\n          event._virtualHandled = true;\n          mouseDownLock = true;\n        }\n      };\n      const onMouseMove = e => {\n        if (mouseDownLock) {\n          const mouseY = getPageXY(e, false);\n          const {\n            top,\n            bottom\n          } = ele.getBoundingClientRect();\n          if (mouseY <= top) {\n            const diff = top - mouseY;\n            offset = -smoothScrollOffset(diff);\n            continueScroll();\n          } else if (mouseY >= bottom) {\n            const diff = mouseY - bottom;\n            offset = smoothScrollOffset(diff);\n            continueScroll();\n          } else {\n            stopScroll();\n          }\n        }\n      };\n      ele.addEventListener('mousedown', onMouseDown);\n      ele.ownerDocument.addEventListener('mouseup', clearDragState);\n      ele.ownerDocument.addEventListener('mousemove', onMouseMove);\n      ele.ownerDocument.addEventListener('dragend', clearDragState);\n      return () => {\n        ele.removeEventListener('mousedown', onMouseDown);\n        ele.ownerDocument.removeEventListener('mouseup', clearDragState);\n        ele.ownerDocument.removeEventListener('mousemove', onMouseMove);\n        ele.ownerDocument.removeEventListener('dragend', clearDragState);\n        stopScroll();\n      };\n    }\n  }, [inVirtual]);\n}","import * as React from 'react';\nimport { raf, useLayoutEffect, warning } from '@rc-component/util';\nconst MAX_TIMES = 10;\nfunction getOffset(rawOffset, info) {\n  const resolvedOffset = typeof rawOffset === 'function' ? rawOffset(info) : rawOffset;\n  return Number.isFinite(resolvedOffset) ? resolvedOffset : 0;\n}\nexport default function useScrollTo(containerRef, data, heights, itemHeight, getKey, getSize, collectHeight, syncScrollTop, triggerFlash) {\n  const scrollRef = React.useRef(undefined);\n  const [syncState, setSyncState] = React.useState(null);\n\n  // ========================== Sync Scroll ==========================\n  useLayoutEffect(() => {\n    if (syncState && syncState.times < MAX_TIMES) {\n      // Never reach\n      if (!containerRef.current) {\n        setSyncState(ori => ({\n          ...ori\n        }));\n        return;\n      }\n      collectHeight();\n      const {\n        targetAlign,\n        originAlign,\n        offset: rawOffset\n      } = syncState;\n      const index = syncState.index >= 0 ? syncState.index : data.findIndex(item => getKey(item) === syncState.key);\n      const mergedAlign = targetAlign || originAlign;\n      const offset = getOffset(rawOffset, {\n        getSize,\n        align: mergedAlign\n      });\n      const height = containerRef.current.clientHeight;\n      let needCollectHeight = index < 0;\n      let newTargetAlign = targetAlign;\n      let targetTop = null;\n\n      // Go to next frame if height not exist\n      if (height && index >= 0) {\n        // Get top & bottom\n        let stackTop = 0;\n        let itemTop = 0;\n        let itemBottom = 0;\n        const maxLen = Math.min(data.length - 1, index);\n        for (let i = 0; i <= maxLen; i += 1) {\n          const key = getKey(data[i]);\n          itemTop = stackTop;\n          const cacheHeight = heights.get(key);\n          itemBottom = itemTop + (cacheHeight === undefined ? itemHeight : cacheHeight);\n          stackTop = itemBottom;\n        }\n\n        // Check if need sync height (visible range has item not record height)\n        let leftHeight = mergedAlign === 'top' ? offset : height - offset;\n        for (let i = maxLen; i >= 0; i -= 1) {\n          const key = getKey(data[i]);\n          const cacheHeight = heights.get(key);\n          if (cacheHeight === undefined) {\n            needCollectHeight = true;\n            break;\n          }\n          leftHeight -= cacheHeight;\n          if (leftHeight <= 0) {\n            break;\n          }\n        }\n\n        // Scroll to\n        switch (mergedAlign) {\n          case 'top':\n            targetTop = itemTop - offset;\n            break;\n          case 'bottom':\n            targetTop = itemBottom - height + offset;\n            break;\n          default:\n            {\n              const {\n                scrollTop\n              } = containerRef.current;\n              const scrollBottom = scrollTop + height;\n              if (itemTop < scrollTop) {\n                newTargetAlign = 'top';\n              } else if (itemBottom > scrollBottom) {\n                newTargetAlign = 'bottom';\n              }\n            }\n        }\n        if (targetTop !== null) {\n          syncScrollTop(targetTop);\n        }\n\n        // One more time for sync\n        if (targetTop !== syncState.lastTop) {\n          needCollectHeight = true;\n        }\n      }\n\n      // Trigger next effect\n      if (needCollectHeight) {\n        setSyncState(prev => ({\n          ...prev,\n          times: prev.times + 1,\n          index,\n          targetAlign: newTargetAlign,\n          lastTop: targetTop\n        }));\n      }\n    } else if (process.env.NODE_ENV !== 'production' && syncState?.times === MAX_TIMES) {\n      warning(false, 'Seems `scrollTo` with `rc-virtual-list` reach the max limitation. Please fire issue for us. Thanks.');\n    }\n  }, [syncState, containerRef.current]);\n\n  // =========================== Scroll To ===========================\n  return arg => {\n    // When not argument provided, we think dev may want to show the scrollbar\n    if (arg === null || arg === undefined) {\n      triggerFlash();\n      return;\n    }\n\n    // Normal scroll logic\n    raf.cancel(scrollRef.current);\n    if (typeof arg === 'number') {\n      syncScrollTop(arg);\n    } else if (arg && typeof arg === 'object') {\n      let index;\n      let key;\n      const {\n        align\n      } = arg;\n      if ('index' in arg) {\n        ({\n          index\n        } = arg);\n      } else {\n        key = arg.key;\n        index = data.findIndex(item => getKey(item) === key);\n      }\n      const {\n        offset: rawOffset = 0\n      } = arg;\n      setSyncState({\n        times: 0,\n        index,\n        key,\n        offset: rawOffset,\n        originAlign: align\n      });\n    }\n  };\n}","import { clsx } from 'clsx';\nimport { raf, useEvent } from '@rc-component/util';\nimport * as React from 'react';\nimport { getPageXY } from \"./hooks/useScrollDrag\";\nfunction getScrollOffsetByThumbTop(thumbTop, enabledScrollRange, enabledOffsetRange) {\n  if (enabledScrollRange <= 0 || enabledOffsetRange <= 0) {\n    return 0;\n  }\n  const mergedThumbTop = Math.max(Math.min(thumbTop, enabledOffsetRange), 0);\n  const ptg = mergedThumbTop / enabledOffsetRange;\n  let nextScrollOffset = Math.ceil(ptg * enabledScrollRange);\n  nextScrollOffset = Math.max(nextScrollOffset, 0);\n  nextScrollOffset = Math.min(nextScrollOffset, enabledScrollRange);\n  return nextScrollOffset;\n}\nconst ScrollBar = /*#__PURE__*/React.forwardRef((props, ref) => {\n  const {\n    prefixCls,\n    rtl,\n    scrollOffset,\n    scrollRange,\n    onStartMove,\n    onStopMove,\n    onScroll,\n    horizontal,\n    spinSize,\n    containerSize,\n    style,\n    thumbStyle: propsThumbStyle,\n    showScrollBar\n  } = props;\n  const [dragging, setDragging] = React.useState(false);\n  const [pageXY, setPageXY] = React.useState(null);\n  const [startTop, setStartTop] = React.useState(null);\n  const isLTR = !rtl;\n\n  // ========================= Refs =========================\n  const scrollbarRef = React.useRef(null);\n  const thumbRef = React.useRef(null);\n\n  // ======================= Visible ========================\n  const [visible, setVisible] = React.useState(showScrollBar);\n  const visibleTimeoutRef = React.useRef(undefined);\n  const delayHidden = () => {\n    if (showScrollBar === true || showScrollBar === false) return;\n    clearTimeout(visibleTimeoutRef.current);\n    setVisible(true);\n    visibleTimeoutRef.current = setTimeout(() => {\n      setVisible(false);\n    }, 3000);\n  };\n\n  // ======================== Range =========================\n  const enableScrollRange = scrollRange - containerSize || 0;\n  const enableOffsetRange = containerSize - spinSize || 0;\n\n  // ========================= Top ==========================\n  const top = React.useMemo(() => {\n    if (scrollOffset === 0 || enableScrollRange === 0) {\n      return 0;\n    }\n    const ptg = scrollOffset / enableScrollRange;\n    return ptg * enableOffsetRange;\n  }, [scrollOffset, enableScrollRange, enableOffsetRange]);\n\n  // ====================== Container =======================\n  const isThumbTarget = target => {\n    return !!target && thumbRef.current?.contains(target);\n  };\n  const scrollToTrackPosition = e => {\n    const scrollbarEle = scrollbarRef.current;\n    if (!scrollbarEle) {\n      return;\n    }\n    const rect = scrollbarEle.getBoundingClientRect();\n    const pagePosition = getPageXY(e, horizontal);\n    let nextTop;\n    if (!Number.isFinite(pagePosition)) {\n      return;\n    }\n    if (horizontal) {\n      const horizontalStart = isLTR ? rect.left : rect.right;\n      if (!Number.isFinite(horizontalStart)) {\n        return;\n      }\n      nextTop = (isLTR ? pagePosition - horizontalStart : horizontalStart - pagePosition) - spinSize / 2;\n    } else {\n      if (!Number.isFinite(rect.top)) {\n        return;\n      }\n      nextTop = pagePosition - rect.top - spinSize / 2;\n    }\n    onScroll(getScrollOffsetByThumbTop(nextTop, enableScrollRange, enableOffsetRange), horizontal);\n  };\n  const onContainerMouseDown = e => {\n    e.stopPropagation();\n    e.preventDefault();\n    if (e.button !== 0 || isThumbTarget(e.target)) {\n      return;\n    }\n    scrollToTrackPosition(e);\n  };\n\n  // ======================== Thumb =========================\n  const stateRef = React.useRef({\n    top,\n    dragging,\n    pageY: pageXY,\n    startTop\n  });\n  stateRef.current = {\n    top,\n    dragging,\n    pageY: pageXY,\n    startTop\n  };\n  const onThumbMouseDown = useEvent(e => {\n    setDragging(true);\n    setPageXY(getPageXY(e, horizontal));\n    setStartTop(stateRef.current.top);\n    onStartMove();\n    e.stopPropagation();\n    e.preventDefault();\n  });\n\n  // ======================== Effect ========================\n\n  // React make event as passive, but we need to preventDefault\n  // Add event on dom directly instead.\n  // ref: https://github.com/facebook/react/issues/9809\n  React.useEffect(() => {\n    const onScrollbarTouchStart = e => {\n      e.preventDefault();\n    };\n    const scrollbarEle = scrollbarRef.current;\n    const thumbEle = thumbRef.current;\n    scrollbarEle.addEventListener('touchstart', onScrollbarTouchStart, {\n      passive: false\n    });\n    thumbEle.addEventListener('touchstart', onThumbMouseDown, {\n      passive: false\n    });\n    return () => {\n      scrollbarEle.removeEventListener('touchstart', onScrollbarTouchStart);\n      thumbEle.removeEventListener('touchstart', onThumbMouseDown);\n    };\n  }, [onThumbMouseDown]);\n\n  // Pass to effect\n  const enableScrollRangeRef = React.useRef(undefined);\n  enableScrollRangeRef.current = enableScrollRange;\n  const enableOffsetRangeRef = React.useRef(undefined);\n  enableOffsetRangeRef.current = enableOffsetRange;\n  React.useEffect(() => {\n    if (dragging) {\n      let moveRafId;\n      const onMouseMove = e => {\n        const {\n          dragging: stateDragging,\n          pageY: statePageY,\n          startTop: stateStartTop\n        } = stateRef.current;\n        raf.cancel(moveRafId);\n        const rect = scrollbarRef.current.getBoundingClientRect();\n        const scale = containerSize / (horizontal ? rect.width : rect.height);\n        if (stateDragging) {\n          const offset = (getPageXY(e, horizontal) - statePageY) * scale;\n          let newTop = stateStartTop;\n          if (!isLTR && horizontal) {\n            newTop -= offset;\n          } else {\n            newTop += offset;\n          }\n          const tmpEnableScrollRange = enableScrollRangeRef.current;\n          const tmpEnableOffsetRange = enableOffsetRangeRef.current;\n          const newScrollTop = getScrollOffsetByThumbTop(newTop, tmpEnableScrollRange, tmpEnableOffsetRange);\n          moveRafId = raf(() => {\n            onScroll(newScrollTop, horizontal);\n          });\n        }\n      };\n      const onMouseUp = () => {\n        setDragging(false);\n        onStopMove();\n      };\n      window.addEventListener('mousemove', onMouseMove, {\n        passive: true\n      });\n      window.addEventListener('touchmove', onMouseMove, {\n        passive: true\n      });\n      window.addEventListener('mouseup', onMouseUp, {\n        passive: true\n      });\n      window.addEventListener('touchend', onMouseUp, {\n        passive: true\n      });\n      return () => {\n        window.removeEventListener('mousemove', onMouseMove);\n        window.removeEventListener('touchmove', onMouseMove);\n        window.removeEventListener('mouseup', onMouseUp);\n        window.removeEventListener('touchend', onMouseUp);\n        raf.cancel(moveRafId);\n      };\n    }\n  }, [dragging]);\n  React.useEffect(() => {\n    delayHidden();\n    return () => {\n      clearTimeout(visibleTimeoutRef.current);\n    };\n  }, [scrollOffset]);\n\n  // ====================== Imperative ======================\n  React.useImperativeHandle(ref, () => ({\n    delayHidden\n  }));\n\n  // ======================== Render ========================\n  const scrollbarPrefixCls = `${prefixCls}-scrollbar`;\n  const containerStyle = {\n    position: 'absolute',\n    visibility: visible ? null : 'hidden'\n  };\n  const thumbStyle = {\n    position: 'absolute',\n    borderRadius: 99,\n    background: 'var(--rc-virtual-list-scrollbar-bg, rgba(0, 0, 0, 0.5))',\n    cursor: 'pointer',\n    userSelect: 'none'\n  };\n  if (horizontal) {\n    Object.assign(containerStyle, {\n      height: 8,\n      left: 0,\n      right: 0,\n      bottom: 0\n    });\n    Object.assign(thumbStyle, {\n      height: '100%',\n      width: spinSize,\n      [isLTR ? 'left' : 'right']: top\n    });\n  } else {\n    Object.assign(containerStyle, {\n      width: 8,\n      top: 0,\n      bottom: 0,\n      [isLTR ? 'right' : 'left']: 0\n    });\n    Object.assign(thumbStyle, {\n      width: '100%',\n      height: spinSize,\n      top\n    });\n  }\n  return /*#__PURE__*/React.createElement(\"div\", {\n    ref: scrollbarRef,\n    className: clsx(scrollbarPrefixCls, {\n      [`${scrollbarPrefixCls}-horizontal`]: horizontal,\n      [`${scrollbarPrefixCls}-vertical`]: !horizontal,\n      [`${scrollbarPrefixCls}-visible`]: visible\n    }),\n    style: {\n      ...containerStyle,\n      ...style\n    },\n    onMouseDown: onContainerMouseDown,\n    onMouseMove: delayHidden\n  }, /*#__PURE__*/React.createElement(\"div\", {\n    ref: thumbRef,\n    className: clsx(`${scrollbarPrefixCls}-thumb`, {\n      [`${scrollbarPrefixCls}-thumb-moving`]: dragging\n    }),\n    style: {\n      ...thumbStyle,\n      ...propsThumbStyle\n    },\n    onMouseDown: onThumbMouseDown\n  }));\n});\nif (process.env.NODE_ENV !== 'production') {\n  ScrollBar.displayName = 'ScrollBar';\n}\nexport default ScrollBar;","const MIN_SIZE = 20;\nexport function getSpinSize(containerSize = 0, scrollRange = 0) {\n  let baseSize = containerSize / scrollRange * containerSize;\n  if (isNaN(baseSize)) {\n    baseSize = 0;\n  }\n  baseSize = Math.max(baseSize, MIN_SIZE);\n  return Math.floor(baseSize);\n}","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport { clsx } from 'clsx';\nimport ResizeObserver from '@rc-component/resize-observer';\nimport { useEvent, useLayoutEffect } from '@rc-component/util';\nimport * as React from 'react';\nimport { useRef, useState } from 'react';\nimport { flushSync } from 'react-dom';\nimport Filler from \"./Filler\";\nimport useChildren from \"./hooks/useChildren\";\nimport useDiffItem from \"./hooks/useDiffItem\";\nimport useFrameWheel from \"./hooks/useFrameWheel\";\nimport { useGetSize } from \"./hooks/useGetSize\";\nimport useHeights from \"./hooks/useHeights\";\nimport useMobileTouchMove from \"./hooks/useMobileTouchMove\";\nimport useOriginScroll from \"./hooks/useOriginScroll\";\nimport useScrollDrag from \"./hooks/useScrollDrag\";\nimport useScrollTo from \"./hooks/useScrollTo\";\nimport ScrollBar from \"./ScrollBar\";\nimport { getSpinSize } from \"./utils/scrollbarUtil\";\nconst EMPTY_DATA = [];\nconst ScrollStyle = {\n  overflowY: 'auto',\n  overflowAnchor: 'none'\n};\nexport function RawList(props, ref) {\n  const {\n    prefixCls = 'rc-virtual-list',\n    className,\n    height,\n    itemHeight,\n    fullHeight = true,\n    style,\n    data,\n    children,\n    itemKey,\n    virtual,\n    direction,\n    scrollWidth,\n    component: Component = 'div',\n    onScroll,\n    onVirtualScroll,\n    onVisibleChange,\n    innerProps,\n    extraRender,\n    styles,\n    showScrollBar = 'optional',\n    ...restProps\n  } = props;\n\n  // =============================== Item Key ===============================\n  const getKey = React.useCallback(item => {\n    if (typeof itemKey === 'function') {\n      return itemKey(item);\n    }\n    return item?.[itemKey];\n  }, [itemKey]);\n\n  // ================================ Height ================================\n  const [setInstanceRef, collectHeight, heights, heightUpdatedMark] = useHeights(getKey, null, null);\n\n  // ================================= MISC =================================\n  const useVirtual = !!(virtual !== false && height && itemHeight);\n  const containerHeight = React.useMemo(() => Object.values(heights.maps).reduce((total, curr) => total + curr, 0), [heights.id, heights.maps]);\n  const inVirtual = useVirtual && data && (Math.max(itemHeight * data.length, containerHeight) > height || !!scrollWidth);\n  const isRTL = direction === 'rtl';\n  const mergedClassName = clsx(prefixCls, {\n    [`${prefixCls}-rtl`]: isRTL\n  }, className);\n  const mergedData = data || EMPTY_DATA;\n  const componentRef = useRef(null);\n  const fillerInnerRef = useRef(null);\n  const containerRef = useRef(null);\n\n  // =============================== Item Key ===============================\n\n  const [offsetTop, setOffsetTop] = useState(0);\n  const [offsetLeft, setOffsetLeft] = useState(0);\n  const [scrollMoving, setScrollMoving] = useState(false);\n  const onScrollbarStartMove = () => {\n    setScrollMoving(true);\n  };\n  const onScrollbarStopMove = () => {\n    setScrollMoving(false);\n  };\n  const sharedConfig = {\n    getKey\n  };\n\n  // ================================ Scroll ================================\n  function syncScrollTop(newTop) {\n    setOffsetTop(origin => {\n      let value;\n      if (typeof newTop === 'function') {\n        value = newTop(origin);\n      } else {\n        value = newTop;\n      }\n      const alignedTop = keepInRange(value);\n      componentRef.current.scrollTop = alignedTop;\n      return alignedTop;\n    });\n  }\n\n  // ================================ Legacy ================================\n  // Put ref here since the range is generate by follow\n  const rangeRef = useRef({\n    start: 0,\n    end: mergedData.length\n  });\n  const diffItemRef = useRef(undefined);\n  const [diffItem] = useDiffItem(mergedData, getKey);\n  diffItemRef.current = diffItem;\n\n  // ========================== Visible Calculation =========================\n  const {\n    scrollHeight,\n    start,\n    end,\n    offset: fillerOffset\n  } = React.useMemo(() => {\n    if (!useVirtual) {\n      return {\n        scrollHeight: undefined,\n        start: 0,\n        end: mergedData.length - 1,\n        offset: undefined\n      };\n    }\n\n    // Always use virtual scroll bar in avoid shaking\n    if (!inVirtual) {\n      return {\n        scrollHeight: fillerInnerRef.current?.offsetHeight || 0,\n        start: 0,\n        end: mergedData.length - 1,\n        offset: undefined\n      };\n    }\n    let itemTop = 0;\n    let startIndex;\n    let startOffset;\n    let endIndex;\n    const dataLen = mergedData.length;\n    for (let i = 0; i < dataLen; i += 1) {\n      const item = mergedData[i];\n      const key = getKey(item);\n      const cacheHeight = heights.get(key);\n      const currentItemBottom = itemTop + (cacheHeight === undefined ? itemHeight : cacheHeight);\n\n      // Check item top in the range\n      if (currentItemBottom >= offsetTop && startIndex === undefined) {\n        startIndex = i;\n        startOffset = itemTop;\n      }\n\n      // Check item bottom in the range. We will render additional one item for motion usage\n      if (currentItemBottom > offsetTop + height && endIndex === undefined) {\n        endIndex = i;\n      }\n      itemTop = currentItemBottom;\n    }\n\n    // When scrollTop at the end but data cut to small count will reach this\n    if (startIndex === undefined) {\n      startIndex = 0;\n      startOffset = 0;\n      endIndex = Math.ceil(height / itemHeight);\n    }\n    if (endIndex === undefined) {\n      endIndex = mergedData.length - 1;\n    }\n\n    // Give cache to improve scroll experience\n    endIndex = Math.min(endIndex + 1, mergedData.length - 1);\n    return {\n      scrollHeight: itemTop,\n      start: startIndex,\n      end: endIndex,\n      offset: startOffset\n    };\n  }, [inVirtual, useVirtual, offsetTop, mergedData, heightUpdatedMark, height]);\n  rangeRef.current.start = start;\n  rangeRef.current.end = end;\n\n  // When scroll up, first visible item get real height may not same as `itemHeight`,\n  // Which will make scroll jump.\n  // Let's sync scroll top to avoid jump\n  React.useLayoutEffect(() => {\n    const changedRecord = heights.getRecord();\n    if (changedRecord.size === 1) {\n      const recordKey = Array.from(changedRecord.keys())[0];\n      const prevCacheHeight = changedRecord.get(recordKey);\n\n      // Quick switch data may cause `start` not in `mergedData` anymore\n      const startItem = mergedData[start];\n      if (startItem && prevCacheHeight === undefined) {\n        const startIndexKey = getKey(startItem);\n        if (startIndexKey === recordKey) {\n          const realStartHeight = heights.get(recordKey);\n          const diffHeight = realStartHeight - itemHeight;\n          syncScrollTop(ori => {\n            return ori + diffHeight;\n          });\n        }\n      }\n    }\n    heights.resetRecord();\n  }, [scrollHeight]);\n\n  // ================================= Size =================================\n  const [size, setSize] = React.useState({\n    width: 0,\n    height\n  });\n  const onHolderResize = sizeInfo => {\n    setSize({\n      width: sizeInfo.offsetWidth,\n      height: sizeInfo.offsetHeight\n    });\n  };\n\n  // Hack on scrollbar to enable flash call\n  const verticalScrollBarRef = useRef(null);\n  const horizontalScrollBarRef = useRef(null);\n  const horizontalScrollBarSpinSize = React.useMemo(() => getSpinSize(size.width, scrollWidth), [size.width, scrollWidth]);\n  const verticalScrollBarSpinSize = React.useMemo(() => getSpinSize(size.height, scrollHeight), [size.height, scrollHeight]);\n\n  // =============================== In Range ===============================\n  const maxScrollHeight = scrollHeight - height;\n  const maxScrollHeightRef = useRef(maxScrollHeight);\n  maxScrollHeightRef.current = maxScrollHeight;\n  function keepInRange(newScrollTop) {\n    let newTop = newScrollTop;\n    if (!Number.isNaN(maxScrollHeightRef.current)) {\n      newTop = Math.min(newTop, maxScrollHeightRef.current);\n    }\n    newTop = Math.max(newTop, 0);\n    return newTop;\n  }\n  const isScrollAtTop = offsetTop <= 0;\n  const isScrollAtBottom = offsetTop >= maxScrollHeight;\n  const isScrollAtLeft = offsetLeft <= 0;\n  const isScrollAtRight = offsetLeft >= scrollWidth;\n  const originScroll = useOriginScroll(isScrollAtTop, isScrollAtBottom, isScrollAtLeft, isScrollAtRight);\n\n  // ================================ Scroll ================================\n  const getVirtualScrollInfo = () => ({\n    x: isRTL ? -offsetLeft : offsetLeft,\n    y: offsetTop\n  });\n  const lastVirtualScrollInfoRef = useRef(getVirtualScrollInfo());\n  const triggerScroll = useEvent(params => {\n    if (onVirtualScroll) {\n      const nextInfo = {\n        ...getVirtualScrollInfo(),\n        ...params\n      };\n\n      // Trigger when offset changed\n      if (lastVirtualScrollInfoRef.current.x !== nextInfo.x || lastVirtualScrollInfoRef.current.y !== nextInfo.y) {\n        onVirtualScroll(nextInfo);\n        lastVirtualScrollInfoRef.current = nextInfo;\n      }\n    }\n  });\n  function onScrollBar(newScrollOffset, horizontal) {\n    const newOffset = newScrollOffset;\n    if (horizontal) {\n      flushSync(() => {\n        setOffsetLeft(newOffset);\n      });\n      triggerScroll();\n    } else {\n      syncScrollTop(newOffset);\n    }\n  }\n\n  // When data size reduce. It may trigger native scroll event back to fit scroll position\n  function onFallbackScroll(e) {\n    const {\n      scrollTop: newScrollTop\n    } = e.currentTarget;\n    if (newScrollTop !== offsetTop) {\n      syncScrollTop(newScrollTop);\n    }\n\n    // Trigger origin onScroll\n    onScroll?.(e);\n    triggerScroll();\n  }\n  const keepInHorizontalRange = nextOffsetLeft => {\n    let tmpOffsetLeft = nextOffsetLeft;\n    const max = !!scrollWidth ? scrollWidth - size.width : 0;\n    tmpOffsetLeft = Math.max(tmpOffsetLeft, 0);\n    tmpOffsetLeft = Math.min(tmpOffsetLeft, max);\n    return tmpOffsetLeft;\n  };\n  const onWheelDelta = useEvent((offsetXY, fromHorizontal) => {\n    if (fromHorizontal) {\n      flushSync(() => {\n        setOffsetLeft(left => {\n          const nextOffsetLeft = left + (isRTL ? -offsetXY : offsetXY);\n          return keepInHorizontalRange(nextOffsetLeft);\n        });\n      });\n      triggerScroll();\n    } else {\n      syncScrollTop(top => {\n        const newTop = top + offsetXY;\n        return newTop;\n      });\n    }\n  });\n\n  // Since this added in global,should use ref to keep update\n  const [onRawWheel, onFireFoxScroll] = useFrameWheel(useVirtual, isScrollAtTop, isScrollAtBottom, isScrollAtLeft, isScrollAtRight, !!scrollWidth, onWheelDelta);\n\n  // Mobile touch move\n  useMobileTouchMove(useVirtual, componentRef, (isHorizontal, delta, smoothOffset, e) => {\n    const event = e;\n    if (originScroll(isHorizontal, delta, smoothOffset)) {\n      return false;\n    }\n\n    // Fix nest List trigger TouchMove event\n    if (!event || !event._virtualHandled) {\n      if (event) {\n        event._virtualHandled = true;\n      }\n      onRawWheel({\n        preventDefault() {},\n        deltaX: isHorizontal ? delta : 0,\n        deltaY: isHorizontal ? 0 : delta\n      });\n      return true;\n    }\n    return false;\n  });\n\n  // MouseDown drag for scroll\n  useScrollDrag(inVirtual, componentRef, offset => {\n    syncScrollTop(top => top + offset);\n  });\n  useLayoutEffect(() => {\n    // Firefox only\n    function onMozMousePixelScroll(e) {\n      // scrolling at top/bottom limit\n      const scrollingUpAtTop = isScrollAtTop && e.detail < 0;\n      const scrollingDownAtBottom = isScrollAtBottom && e.detail > 0;\n      if (useVirtual && !scrollingUpAtTop && !scrollingDownAtBottom) {\n        e.preventDefault();\n      }\n    }\n    const componentEle = componentRef.current;\n    componentEle.addEventListener('wheel', onRawWheel, {\n      passive: false\n    });\n    componentEle.addEventListener('DOMMouseScroll', onFireFoxScroll, {\n      passive: true\n    });\n    componentEle.addEventListener('MozMousePixelScroll', onMozMousePixelScroll, {\n      passive: false\n    });\n    return () => {\n      componentEle.removeEventListener('wheel', onRawWheel);\n      componentEle.removeEventListener('DOMMouseScroll', onFireFoxScroll);\n      componentEle.removeEventListener('MozMousePixelScroll', onMozMousePixelScroll);\n    };\n  }, [useVirtual, isScrollAtTop, isScrollAtBottom]);\n\n  // Sync scroll left\n  useLayoutEffect(() => {\n    if (scrollWidth) {\n      const newOffsetLeft = keepInHorizontalRange(offsetLeft);\n      setOffsetLeft(newOffsetLeft);\n      triggerScroll({\n        x: newOffsetLeft\n      });\n    }\n  }, [size.width, scrollWidth]);\n\n  // ================================= Ref ==================================\n  const delayHideScrollBar = () => {\n    verticalScrollBarRef.current?.delayHidden();\n    horizontalScrollBarRef.current?.delayHidden();\n  };\n  const getSize = useGetSize(mergedData, getKey, heights, itemHeight);\n  const scrollTo = useScrollTo(componentRef, mergedData, heights, itemHeight, getKey, getSize, () => collectHeight(true), syncScrollTop, delayHideScrollBar);\n  React.useImperativeHandle(ref, () => ({\n    nativeElement: containerRef.current,\n    getScrollInfo: getVirtualScrollInfo,\n    scrollTo: config => {\n      function isPosScroll(arg) {\n        return arg && typeof arg === 'object' && ('left' in arg || 'top' in arg);\n      }\n      if (isPosScroll(config)) {\n        // Scroll X\n        if (config.left !== undefined) {\n          setOffsetLeft(keepInHorizontalRange(config.left));\n        }\n\n        // Scroll Y\n        scrollTo(config.top);\n      } else {\n        scrollTo(config);\n      }\n    }\n  }));\n\n  // ================================ Effect ================================\n  /** We need told outside that some list not rendered */\n  useLayoutEffect(() => {\n    if (onVisibleChange) {\n      const renderList = mergedData.slice(start, end + 1);\n      onVisibleChange(renderList, mergedData);\n    }\n  }, [start, end, mergedData]);\n\n  // ================================ Extra =================================\n  const extraContent = extraRender?.({\n    start,\n    end,\n    virtual: inVirtual,\n    offsetX: offsetLeft,\n    scrollTop: offsetTop,\n    offsetY: fillerOffset,\n    rtl: isRTL,\n    getSize\n  });\n\n  // ================================ Render ================================\n  const listChildren = useChildren(mergedData, start, end, scrollWidth, offsetLeft, setInstanceRef, children, sharedConfig);\n  let componentStyle = null;\n  if (height) {\n    componentStyle = {\n      [fullHeight ? 'height' : 'maxHeight']: height,\n      ...ScrollStyle\n    };\n    if (useVirtual) {\n      componentStyle.overflowY = 'hidden';\n      if (scrollWidth) {\n        componentStyle.overflowX = 'hidden';\n      }\n      if (scrollMoving) {\n        componentStyle.pointerEvents = 'none';\n      }\n    }\n  }\n  const containerProps = {};\n  if (isRTL) {\n    containerProps.dir = 'rtl';\n  }\n  return /*#__PURE__*/React.createElement(\"div\", _extends({\n    ref: containerRef,\n    style: {\n      ...style,\n      position: 'relative'\n    },\n    className: mergedClassName\n  }, containerProps, restProps), /*#__PURE__*/React.createElement(ResizeObserver, {\n    onResize: onHolderResize\n  }, /*#__PURE__*/React.createElement(Component, {\n    className: `${prefixCls}-holder`,\n    style: componentStyle,\n    ref: componentRef,\n    onScroll: onFallbackScroll,\n    onMouseEnter: delayHideScrollBar\n  }, /*#__PURE__*/React.createElement(Filler, {\n    prefixCls: prefixCls,\n    height: scrollHeight,\n    offsetX: offsetLeft,\n    offsetY: fillerOffset,\n    scrollWidth: scrollWidth,\n    onInnerResize: collectHeight,\n    ref: fillerInnerRef,\n    innerProps: innerProps,\n    rtl: isRTL,\n    extra: extraContent\n  }, listChildren))), inVirtual && scrollHeight > height && /*#__PURE__*/React.createElement(ScrollBar, {\n    ref: verticalScrollBarRef,\n    prefixCls: prefixCls,\n    scrollOffset: offsetTop,\n    scrollRange: scrollHeight,\n    rtl: isRTL,\n    onScroll: onScrollBar,\n    onStartMove: onScrollbarStartMove,\n    onStopMove: onScrollbarStopMove,\n    spinSize: verticalScrollBarSpinSize,\n    containerSize: size.height,\n    style: styles?.verticalScrollBar,\n    thumbStyle: styles?.verticalScrollBarThumb,\n    showScrollBar: showScrollBar\n  }), inVirtual && scrollWidth > size.width && /*#__PURE__*/React.createElement(ScrollBar, {\n    ref: horizontalScrollBarRef,\n    prefixCls: prefixCls,\n    scrollOffset: offsetLeft,\n    scrollRange: scrollWidth,\n    rtl: isRTL,\n    onScroll: onScrollBar,\n    onStartMove: onScrollbarStartMove,\n    onStopMove: onScrollbarStopMove,\n    spinSize: horizontalScrollBarSpinSize,\n    containerSize: size.width,\n    horizontal: true,\n    style: styles?.horizontalScrollBar,\n    thumbStyle: styles?.horizontalScrollBarThumb,\n    showScrollBar: showScrollBar\n  }));\n}\nconst List = /*#__PURE__*/React.forwardRef(RawList);\nList.displayName = 'List';\nexport default List;","import * as React from 'react';\nimport { RawList } from \"./List\";\nconst List = /*#__PURE__*/React.forwardRef((props, ref) => RawList({\n  ...props,\n  virtual: false\n}, ref));\nList.displayName = 'List';\nexport default List;","import List from \"./List\";\nexport { default as MockList } from \"./mock\";\nexport default List;","/* istanbul ignore file */\nexport function isPlatformMac() {\n  return /(mac\\sos|macintosh)/i.test(navigator.appVersion);\n}","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport { clsx } from 'clsx';\nimport { KeyCode, omit, pickAttrs, useMemo } from '@rc-component/util';\nimport List from '@rc-component/virtual-list';\nimport * as React from 'react';\nimport { useEffect } from 'react';\nimport SelectContext from \"./SelectContext\";\nimport TransBtn from \"./TransBtn\";\nimport useBaseProps from \"./hooks/useBaseProps\";\nimport { isPlatformMac } from \"./utils/platformUtil\";\nimport { isValidCount } from \"./utils/valueUtil\";\n\n// export interface OptionListProps<OptionsType extends object[]> {\n\nfunction isTitleType(content) {\n  return typeof content === 'string' || typeof content === 'number';\n}\n\n/**\n * Using virtual list of option display.\n * Will fallback to dom if use customize render.\n */\nconst OptionList = (_, ref) => {\n  const {\n    prefixCls,\n    id,\n    open,\n    multiple,\n    mode,\n    searchValue,\n    toggleOpen,\n    notFoundContent,\n    onPopupScroll,\n    showScrollBar,\n    lockOptions\n  } = useBaseProps();\n  const {\n    maxCount,\n    flattenOptions,\n    onActiveValue,\n    defaultActiveFirstOption,\n    onSelect,\n    menuItemSelectedIcon,\n    rawValues,\n    fieldNames,\n    virtual,\n    direction,\n    listHeight,\n    listItemHeight,\n    optionRender,\n    classNames: contextClassNames,\n    styles: contextStyles\n  } = React.useContext(SelectContext);\n  const itemPrefixCls = `${prefixCls}-item`;\n  const memoFlattenOptions = useMemo(() => flattenOptions, [open, lockOptions], (prev, next) => next[0] && !next[1]);\n\n  // =========================== List ===========================\n  const listRef = React.useRef(null);\n  const overMaxCount = React.useMemo(() => multiple && isValidCount(maxCount) && rawValues?.size >= maxCount, [multiple, maxCount, rawValues?.size]);\n  const onListMouseDown = event => {\n    event.preventDefault();\n  };\n  const scrollIntoView = args => {\n    listRef.current?.scrollTo(typeof args === 'number' ? {\n      index: args\n    } : args);\n  };\n\n  // https://github.com/ant-design/ant-design/issues/34975\n  const isSelected = React.useCallback(value => {\n    if (mode === 'combobox') {\n      return false;\n    }\n    return rawValues.has(value);\n  }, [mode, [...rawValues].toString(), rawValues.size]);\n\n  // ========================== Active ==========================\n  const getEnabledActiveIndex = (index, offset = 1) => {\n    const len = memoFlattenOptions.length;\n    for (let i = 0; i < len; i += 1) {\n      const current = (index + i * offset + len) % len;\n      const {\n        group,\n        data\n      } = memoFlattenOptions[current] || {};\n      if (!group && !data?.disabled && (isSelected(data.value) || !overMaxCount)) {\n        return current;\n      }\n    }\n    return -1;\n  };\n  const [activeIndex, setActiveIndex] = React.useState(() => getEnabledActiveIndex(0));\n  const setActive = (index, fromKeyboard = false) => {\n    setActiveIndex(index);\n    const info = {\n      source: fromKeyboard ? 'keyboard' : 'mouse'\n    };\n\n    // Trigger active event\n    const flattenItem = memoFlattenOptions[index];\n    if (!flattenItem) {\n      onActiveValue(null, -1, info);\n      return;\n    }\n    onActiveValue(flattenItem.value, index, info);\n  };\n\n  // Auto active first item when list length or searchValue changed\n  useEffect(() => {\n    setActive(defaultActiveFirstOption !== false ? getEnabledActiveIndex(0) : -1);\n  }, [memoFlattenOptions.length, searchValue]);\n\n  // https://github.com/ant-design/ant-design/issues/48036\n  const isAriaSelected = React.useCallback(value => {\n    if (mode === 'combobox') {\n      return String(value).toLowerCase() === searchValue.toLowerCase();\n    }\n    return rawValues.has(value);\n  }, [mode, searchValue, [...rawValues].toString(), rawValues.size]);\n\n  // Auto scroll to item position in single mode\n  useEffect(() => {\n    /**\n     * React will skip `onChange` when component update.\n     * `setActive` function will call root accessibility state update which makes re-render.\n     * So we need to delay to let Input component trigger onChange first.\n     */\n    let timeoutId;\n    if (!multiple && open && rawValues.size === 1) {\n      const value = Array.from(rawValues)[0];\n      // Scroll to the option closest to the searchValue if searching.\n      const index = memoFlattenOptions.findIndex(({\n        data\n      }) => searchValue ? String(data.value).startsWith(searchValue) : data.value === value);\n      if (index !== -1) {\n        setActive(index);\n        timeoutId = setTimeout(() => {\n          scrollIntoView(index);\n        });\n      }\n    }\n\n    // Force trigger scrollbar visible when open\n    if (open) {\n      listRef.current?.scrollTo(undefined);\n    }\n    return () => clearTimeout(timeoutId);\n  }, [open, searchValue]);\n\n  // ========================== Values ==========================\n  const onSelectValue = value => {\n    if (value !== undefined) {\n      onSelect(value, {\n        selected: !rawValues.has(value)\n      });\n    }\n\n    // Single mode should always close by select\n    if (!multiple) {\n      toggleOpen(false);\n    }\n  };\n\n  // ========================= Keyboard =========================\n  React.useImperativeHandle(ref, () => ({\n    onKeyDown: event => {\n      const {\n        which,\n        ctrlKey\n      } = event;\n      switch (which) {\n        // >>> Arrow keys & ctrl + n/p on Mac\n        case KeyCode.N:\n        case KeyCode.P:\n        case KeyCode.UP:\n        case KeyCode.DOWN:\n          {\n            let offset = 0;\n            if (which === KeyCode.UP) {\n              offset = -1;\n            } else if (which === KeyCode.DOWN) {\n              offset = 1;\n            } else if (isPlatformMac() && ctrlKey) {\n              if (which === KeyCode.N) {\n                offset = 1;\n              } else if (which === KeyCode.P) {\n                offset = -1;\n              }\n            }\n            if (offset !== 0) {\n              const nextActiveIndex = getEnabledActiveIndex(activeIndex + offset, offset);\n              scrollIntoView(nextActiveIndex);\n              setActive(nextActiveIndex, true);\n            }\n            break;\n          }\n\n        // >>> Select (Tab / Enter)\n        case KeyCode.TAB:\n        case KeyCode.ENTER:\n          {\n            // value\n            const item = memoFlattenOptions[activeIndex];\n            if (!item || item.data.disabled) {\n              return onSelectValue(undefined);\n            }\n            if (!overMaxCount || rawValues.has(item.value)) {\n              onSelectValue(item.value);\n            } else {\n              onSelectValue(undefined);\n            }\n            if (open) {\n              event.preventDefault();\n            }\n            break;\n          }\n\n        // >>> Close\n        case KeyCode.ESC:\n          {\n            toggleOpen(false);\n            if (open) {\n              event.stopPropagation();\n            }\n          }\n      }\n    },\n    onKeyUp: () => {},\n    scrollTo: index => {\n      scrollIntoView(index);\n    }\n  }));\n\n  // ========================== Render ==========================\n  if (memoFlattenOptions.length === 0) {\n    return /*#__PURE__*/React.createElement(\"div\", {\n      role: \"listbox\",\n      id: `${id}_list`,\n      className: `${itemPrefixCls}-empty`,\n      onMouseDown: onListMouseDown\n    }, notFoundContent);\n  }\n  const omitFieldNameList = Object.keys(fieldNames).map(key => fieldNames[key]);\n  const getLabel = item => item.label;\n  function getItemAriaProps(item, index) {\n    const {\n      group\n    } = item;\n    return {\n      role: group ? 'presentation' : 'option',\n      id: `${id}_list_${index}`\n    };\n  }\n  const renderItem = index => {\n    const item = memoFlattenOptions[index];\n    if (!item) {\n      return null;\n    }\n    const itemData = item.data || {};\n    const {\n      value,\n      disabled\n    } = itemData;\n    const {\n      group\n    } = item;\n    const attrs = pickAttrs(itemData, true);\n    const mergedLabel = getLabel(item);\n    return item ? /*#__PURE__*/React.createElement(\"div\", _extends({\n      \"aria-label\": typeof mergedLabel === 'string' && !group ? mergedLabel : null\n    }, attrs, {\n      key: index\n    }, getItemAriaProps(item, index), {\n      \"aria-selected\": isAriaSelected(value),\n      \"aria-disabled\": disabled\n    }), value) : null;\n  };\n  const a11yProps = {\n    role: 'listbox',\n    id: `${id}_list`\n  };\n  return /*#__PURE__*/React.createElement(React.Fragment, null, virtual && /*#__PURE__*/React.createElement(\"div\", _extends({}, a11yProps, {\n    style: {\n      height: 0,\n      width: 0,\n      overflow: 'hidden'\n    }\n  }), renderItem(activeIndex - 1), renderItem(activeIndex), renderItem(activeIndex + 1)), /*#__PURE__*/React.createElement(List, {\n    prefixCls: `${prefixCls}-dropdown-list`,\n    itemKey: \"key\",\n    ref: listRef,\n    data: memoFlattenOptions,\n    height: listHeight,\n    itemHeight: listItemHeight,\n    fullHeight: false,\n    onMouseDown: onListMouseDown,\n    onScroll: onPopupScroll,\n    virtual: virtual,\n    direction: direction,\n    innerProps: virtual ? null : a11yProps,\n    showScrollBar: showScrollBar,\n    className: contextClassNames?.popup?.list,\n    style: contextStyles?.popup?.list\n  }, (item, itemIndex) => {\n    const {\n      group,\n      groupOption,\n      data,\n      label,\n      value\n    } = item;\n    const {\n      key\n    } = data;\n\n    // Group\n    if (group) {\n      const groupTitle = data.title ?? (isTitleType(label) ? label.toString() : undefined);\n      return /*#__PURE__*/React.createElement(\"div\", {\n        className: clsx(itemPrefixCls, `${itemPrefixCls}-group`, data.className),\n        title: groupTitle\n      }, label !== undefined ? label : key);\n    }\n    const {\n      disabled,\n      title,\n      children,\n      style,\n      className,\n      ...otherProps\n    } = data;\n    const passedProps = omit(otherProps, omitFieldNameList);\n\n    // Option\n    const selected = isSelected(value);\n    const mergedDisabled = disabled || !selected && overMaxCount;\n    const optionPrefixCls = `${itemPrefixCls}-option`;\n    const optionClassName = clsx(itemPrefixCls, optionPrefixCls, className, contextClassNames?.popup?.listItem, {\n      [`${optionPrefixCls}-grouped`]: groupOption,\n      [`${optionPrefixCls}-active`]: activeIndex === itemIndex && !mergedDisabled,\n      [`${optionPrefixCls}-disabled`]: mergedDisabled,\n      [`${optionPrefixCls}-selected`]: selected\n    });\n    const mergedLabel = getLabel(item);\n    const iconVisible = !menuItemSelectedIcon || typeof menuItemSelectedIcon === 'function' || selected;\n\n    // https://github.com/ant-design/ant-design/issues/34145\n    const content = typeof mergedLabel === 'number' ? mergedLabel : mergedLabel || value;\n    // https://github.com/ant-design/ant-design/issues/26717\n    let optionTitle = isTitleType(content) ? content.toString() : undefined;\n    if (title !== undefined) {\n      optionTitle = title;\n    }\n    return /*#__PURE__*/React.createElement(\"div\", _extends({}, pickAttrs(passedProps), !virtual ? getItemAriaProps(item, itemIndex) : {}, {\n      \"aria-selected\": virtual ? undefined : isAriaSelected(value),\n      \"aria-disabled\": mergedDisabled,\n      className: optionClassName,\n      title: optionTitle,\n      onMouseMove: () => {\n        if (activeIndex === itemIndex || mergedDisabled) {\n          return;\n        }\n        setActive(itemIndex);\n      },\n      onClick: () => {\n        if (!mergedDisabled) {\n          onSelectValue(value);\n        }\n      },\n      style: {\n        ...contextStyles?.popup?.listItem,\n        ...style\n      }\n    }), /*#__PURE__*/React.createElement(\"div\", {\n      className: `${optionPrefixCls}-content`\n    }, typeof optionRender === 'function' ? optionRender(item, {\n      index: itemIndex\n    }) : content), /*#__PURE__*/React.isValidElement(menuItemSelectedIcon) || selected, iconVisible && /*#__PURE__*/React.createElement(TransBtn, {\n      className: `${itemPrefixCls}-option-state`,\n      customizeIcon: menuItemSelectedIcon,\n      customizeIconProps: {\n        value,\n        disabled: mergedDisabled,\n        isSelected: selected\n      }\n    }, selected ? '✓' : null));\n  }));\n};\nconst RefOptionList = /*#__PURE__*/React.forwardRef(OptionList);\nif (process.env.NODE_ENV !== 'production') {\n  RefOptionList.displayName = 'OptionList';\n}\nexport default RefOptionList;","import * as React from 'react';\n/**\n * Cache `value` related LabeledValue & options.\n */\nexport default ((labeledValues, valueOptions) => {\n  const cacheRef = React.useRef({\n    values: new Map(),\n    options: new Map()\n  });\n  const filledLabeledValues = React.useMemo(() => {\n    const {\n      values: prevValueCache,\n      options: prevOptionCache\n    } = cacheRef.current;\n\n    // Fill label by cache\n    const patchedValues = labeledValues.map(item => {\n      if (item.label === undefined) {\n        return {\n          ...item,\n          label: prevValueCache.get(item.value)?.label\n        };\n      }\n      return item;\n    });\n\n    // Refresh cache\n    const valueCache = new Map();\n    const optionCache = new Map();\n    patchedValues.forEach(item => {\n      valueCache.set(item.value, item);\n      optionCache.set(item.value, valueOptions.get(item.value) || prevOptionCache.get(item.value));\n    });\n    cacheRef.current.values = valueCache;\n    cacheRef.current.options = optionCache;\n    return patchedValues;\n  }, [labeledValues, valueOptions]);\n  const getOption = React.useCallback(val => valueOptions.get(val) || cacheRef.current.options.get(val), [valueOptions]);\n  return [filledLabeledValues, getOption];\n});","import * as React from 'react';\nimport { toArray } from \"../utils/commonUtil\";\nimport { injectPropsWithOption } from \"../utils/valueUtil\";\nfunction includes(test, search) {\n  return toArray(test).join('').toUpperCase().includes(search);\n}\nexport default ((options, fieldNames, searchValue, filterOption, optionFilterProp) => {\n  return React.useMemo(() => {\n    if (!searchValue || filterOption === false) {\n      return options;\n    }\n    const {\n      options: fieldOptions,\n      label: fieldLabel,\n      value: fieldValue\n    } = fieldNames;\n    const filteredOptions = [];\n    const customizeFilter = typeof filterOption === 'function';\n    const upperSearch = searchValue.toUpperCase();\n    const filterFunc = customizeFilter ? filterOption : (_, option) => {\n      // Use provided `optionFilterProp`\n      if (optionFilterProp && optionFilterProp.length) {\n        return optionFilterProp.some(prop => includes(option[prop], upperSearch));\n      }\n\n      // Auto select `label` or `value` by option type\n      if (option[fieldOptions]) {\n        // hack `fieldLabel` since `OptionGroup` children is not `label`\n        return includes(option[fieldLabel !== 'children' ? fieldLabel : 'label'], upperSearch);\n      }\n      return includes(option[fieldValue], upperSearch);\n    };\n    const wrapOption = customizeFilter ? opt => injectPropsWithOption(opt) : opt => opt;\n    options.forEach(item => {\n      // Group should check child options\n      if (item[fieldOptions]) {\n        // Check group first\n        const matchGroup = filterFunc(searchValue, wrapOption(item));\n        if (matchGroup) {\n          filteredOptions.push(item);\n        } else {\n          // Check option\n          const subOptions = item[fieldOptions].filter(subItem => filterFunc(searchValue, wrapOption(subItem)));\n          if (subOptions.length) {\n            filteredOptions.push({\n              ...item,\n              [fieldOptions]: subOptions\n            });\n          }\n        }\n        return;\n      }\n      if (filterFunc(searchValue, wrapOption(item))) {\n        filteredOptions.push(item);\n      }\n    });\n    return filteredOptions;\n  }, [options, filterOption, optionFilterProp, searchValue, fieldNames]);\n});","import * as React from 'react';\nimport { toArray } from '@rc-component/util';\nfunction convertNodeToOption(node) {\n  const {\n    key,\n    props: {\n      children,\n      value,\n      ...restProps\n    }\n  } = node;\n  return {\n    key,\n    value: value !== undefined ? value : key,\n    children,\n    ...restProps\n  };\n}\nexport function convertChildrenToData(nodes, optionOnly = false) {\n  return toArray(nodes).map((node, index) => {\n    if (! /*#__PURE__*/React.isValidElement(node) || !node.type) {\n      return null;\n    }\n    const {\n      type: {\n        isSelectOptGroup\n      },\n      key,\n      props: {\n        children,\n        ...restProps\n      }\n    } = node;\n    if (optionOnly || !isSelectOptGroup) {\n      return convertNodeToOption(node);\n    }\n    return {\n      key: `__RC_SELECT_GRP__${key === null ? index : key}__`,\n      label: key,\n      ...restProps,\n      options: convertChildrenToData(children)\n    };\n  }).filter(data => data);\n}","import * as React from 'react';\nimport { convertChildrenToData } from \"../utils/legacyUtil\";\n\n/**\n * Parse `children` to `options` if `options` is not provided.\n * Then flatten the `options`.\n */\nconst useOptions = (options, children, fieldNames, optionFilterProp, optionLabelProp) => {\n  return React.useMemo(() => {\n    let mergedOptions = options;\n    const childrenAsData = !options;\n    if (childrenAsData) {\n      mergedOptions = convertChildrenToData(children);\n    }\n    const valueOptions = new Map();\n    const labelOptions = new Map();\n    const setLabelOptions = (labelOptionsMap, option, key) => {\n      if (key && typeof key === 'string') {\n        labelOptionsMap.set(option[key], option);\n      }\n    };\n    const dig = (optionList, isChildren = false) => {\n      // for loop to speed up collection speed\n      for (let i = 0; i < optionList.length; i += 1) {\n        const option = optionList[i];\n        if (!option[fieldNames.options] || isChildren) {\n          valueOptions.set(option[fieldNames.value], option);\n          setLabelOptions(labelOptions, option, fieldNames.label);\n          // https://github.com/ant-design/ant-design/issues/35304\n          optionFilterProp.forEach(prop => {\n            setLabelOptions(labelOptions, option, prop);\n          });\n          setLabelOptions(labelOptions, option, optionLabelProp);\n        } else {\n          dig(option[fieldNames.options], true);\n        }\n      }\n    };\n    dig(mergedOptions);\n    return {\n      options: mergedOptions,\n      valueOptions,\n      labelOptions\n    };\n  }, [options, children, fieldNames, optionFilterProp, optionLabelProp]);\n};\nexport default useOptions;","import * as React from 'react';\n\n/**\n * Same as `React.useCallback` but always return a memoized function\n * but redirect to real function.\n */\nexport default function useRefFunc(callback) {\n  const funcRef = React.useRef(callback);\n  funcRef.current = callback;\n  const cacheFn = React.useCallback((...args) => {\n    return funcRef.current(...args);\n  }, []);\n  return cacheFn;\n}","import * as React from 'react';\n\n// Convert `showSearch` to unique config\nexport default function useSearchConfig(showSearch, props, mode) {\n  const {\n    filterOption,\n    searchValue,\n    optionFilterProp,\n    filterSort,\n    onSearch,\n    autoClearSearchValue\n  } = props;\n  return React.useMemo(() => {\n    const isObject = typeof showSearch === 'object';\n    const searchConfig = {\n      filterOption,\n      searchValue,\n      optionFilterProp,\n      filterSort,\n      onSearch,\n      autoClearSearchValue,\n      ...(isObject ? showSearch : {})\n    };\n    return [isObject || mode === 'combobox' || mode === 'tags' || mode === 'multiple' && showSearch === undefined ? true : showSearch, searchConfig];\n  }, [mode, showSearch, filterOption, searchValue, optionFilterProp, filterSort, onSearch, autoClearSearchValue]);\n}","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/**\n * To match accessibility requirement, we always provide an input in the component.\n * Other element will not set `tabIndex` to avoid `onBlur` sequence problem.\n * For focused select, we set `aria-live=\"polite\"` to update the accessibility content.\n *\n * ref:\n * - keyboard: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/listbox_role#Keyboard_interactions\n *\n * New api:\n * - listHeight\n * - listItemHeight\n * - component\n *\n * Remove deprecated api:\n * - multiple\n * - tags\n * - combobox\n * - firstActiveValue\n * - dropdownMenuStyle\n * - openClassName (Not list in api)\n *\n * Update:\n * - `backfill` only support `combobox` mode\n * - `combobox` mode not support `labelInValue` since it's meaningless\n * - `getInputElement` only support `combobox` mode\n * - `onChange` return OptionData instead of ReactNode\n * - `filterOption` `onChange` `onSelect` accept OptionData instead of ReactNode\n * - `combobox` mode trigger `onChange` will get `undefined` if no `value` match in Option\n * - `combobox` mode not support `optionLabelProp`\n */\n\nimport { useControlledState, useId, warning } from '@rc-component/util';\nimport * as React from 'react';\nimport BaseSelect, { isMultiple } from \"./BaseSelect\";\nimport OptGroup from \"./OptGroup\";\nimport Option from \"./Option\";\nimport OptionList from \"./OptionList\";\nimport SelectContext from \"./SelectContext\";\nimport useCache from \"./hooks/useCache\";\nimport useFilterOptions from \"./hooks/useFilterOptions\";\nimport useOptions from \"./hooks/useOptions\";\nimport useRefFunc from \"./hooks/useRefFunc\";\nimport { hasValue, isComboNoValue, toArray } from \"./utils/commonUtil\";\nimport { fillFieldNames, flattenOptions, injectPropsWithOption } from \"./utils/valueUtil\";\nimport warningProps, { warningNullOptions } from \"./utils/warningPropsUtil\";\nimport useSearchConfig from \"./hooks/useSearchConfig\";\nconst OMIT_DOM_PROPS = ['inputValue'];\nfunction isRawValue(value) {\n  return !value || typeof value !== 'object';\n}\nconst Select = /*#__PURE__*/React.forwardRef((props, ref) => {\n  const {\n    id,\n    mode,\n    prefixCls = 'rc-select',\n    backfill,\n    fieldNames,\n    // Search\n    showSearch,\n    searchValue: legacySearchValue,\n    onSearch: legacyOnSearch,\n    autoClearSearchValue: legacyAutoClearSearchValue,\n    filterOption: legacyFilterOption,\n    optionFilterProp: legacyOptionFilterProp,\n    filterSort: legacyFilterSort,\n    // Select\n    onSelect,\n    onDeselect,\n    onActive,\n    popupMatchSelectWidth = true,\n    optionLabelProp,\n    options,\n    optionRender,\n    children,\n    defaultActiveFirstOption,\n    menuItemSelectedIcon,\n    virtual,\n    direction,\n    listHeight = 200,\n    listItemHeight = 20,\n    labelRender,\n    // Value\n    value,\n    defaultValue,\n    labelInValue,\n    onChange,\n    maxCount,\n    classNames,\n    styles,\n    ...restProps\n  } = props;\n  const searchProps = {\n    searchValue: legacySearchValue,\n    onSearch: legacyOnSearch,\n    autoClearSearchValue: legacyAutoClearSearchValue,\n    filterOption: legacyFilterOption,\n    optionFilterProp: legacyOptionFilterProp,\n    filterSort: legacyFilterSort\n  };\n  const [mergedShowSearch, searchConfig] = useSearchConfig(showSearch, searchProps, mode);\n  const {\n    filterOption,\n    searchValue,\n    optionFilterProp,\n    filterSort,\n    onSearch,\n    autoClearSearchValue = true\n  } = searchConfig;\n  const normalizedOptionFilterProp = React.useMemo(() => {\n    if (!optionFilterProp) return [];\n    return Array.isArray(optionFilterProp) ? optionFilterProp : [optionFilterProp];\n  }, [optionFilterProp]);\n  const mergedId = useId(id);\n  const multiple = isMultiple(mode);\n  const childrenAsData = !!(!options && children);\n  const mergedFilterOption = React.useMemo(() => {\n    if (filterOption === undefined && mode === 'combobox') {\n      return false;\n    }\n    return filterOption;\n  }, [filterOption, mode]);\n\n  // ========================= FieldNames =========================\n  const mergedFieldNames = React.useMemo(() => fillFieldNames(fieldNames, childrenAsData), /* eslint-disable react-hooks/exhaustive-deps */\n  [\n  // We stringify fieldNames to avoid unnecessary re-renders.\n  JSON.stringify(fieldNames), childrenAsData]\n  /* eslint-enable react-hooks/exhaustive-deps */);\n\n  // =========================== Search ===========================\n  const [internalSearchValue, setSearchValue] = useControlledState('', searchValue);\n  const mergedSearchValue = internalSearchValue || '';\n\n  // =========================== Option ===========================\n  const parsedOptions = useOptions(options, children, mergedFieldNames, normalizedOptionFilterProp, optionLabelProp);\n  const {\n    valueOptions,\n    labelOptions,\n    options: mergedOptions\n  } = parsedOptions;\n\n  // ========================= Wrap Value =========================\n  const convert2LabelValues = React.useCallback(draftValues => {\n    // Convert to array\n    const valueList = toArray(draftValues);\n\n    // Convert to labelInValue type\n    return valueList.map(val => {\n      let rawValue;\n      let rawLabel;\n      let rawDisabled;\n      let rawTitle;\n\n      // Fill label & value\n      if (isRawValue(val)) {\n        rawValue = val;\n      } else {\n        rawLabel = val.label;\n        rawValue = val.value;\n      }\n      const option = valueOptions.get(rawValue);\n      if (option) {\n        // Fill missing props\n        if (rawLabel === undefined) rawLabel = option?.[optionLabelProp || mergedFieldNames.label];\n        rawDisabled = option?.disabled;\n        rawTitle = option?.title;\n\n        // Warning if label not same as provided\n        if (process.env.NODE_ENV !== 'production' && !optionLabelProp) {\n          const optionLabel = option?.[mergedFieldNames.label];\n          if (optionLabel !== undefined && ! /*#__PURE__*/React.isValidElement(optionLabel) && ! /*#__PURE__*/React.isValidElement(rawLabel) && optionLabel !== rawLabel) {\n            warning(false, '`label` of `value` is not same as `label` in Select options.');\n          }\n        }\n      }\n      return {\n        label: rawLabel,\n        value: rawValue,\n        key: rawValue,\n        disabled: rawDisabled,\n        title: rawTitle\n      };\n    });\n  }, [mergedFieldNames, optionLabelProp, valueOptions]);\n\n  // =========================== Values ===========================\n  const [internalValue, setInternalValue] = useControlledState(defaultValue, value);\n\n  // Merged value with LabelValueType\n  const rawLabeledValues = React.useMemo(() => {\n    const newInternalValue = multiple && internalValue === null ? [] : internalValue;\n    const values = convert2LabelValues(newInternalValue);\n\n    // combobox no need save value when it's no value (exclude value equal 0)\n    if (mode === 'combobox' && isComboNoValue(values[0]?.value)) {\n      return [];\n    }\n    return values;\n  }, [internalValue, convert2LabelValues, mode, multiple]);\n\n  // Fill label with cache to avoid option remove\n  const [mergedValues, getMixedOption] = useCache(rawLabeledValues, valueOptions);\n  const displayValues = React.useMemo(() => {\n    // `null` need show as placeholder instead\n    // https://github.com/ant-design/ant-design/issues/25057\n    if (!mode && mergedValues.length === 1) {\n      const firstValue = mergedValues[0];\n      if (firstValue.value === null && (firstValue.label === null || firstValue.label === undefined)) {\n        return [];\n      }\n    }\n    return mergedValues.map(item => ({\n      ...item,\n      label: (typeof labelRender === 'function' ? labelRender(item) : item.label) ?? item.value\n    }));\n  }, [mode, mergedValues, labelRender]);\n\n  /** Convert `displayValues` to raw value type set */\n  const rawValues = React.useMemo(() => new Set(mergedValues.map(val => val.value)), [mergedValues]);\n  React.useEffect(() => {\n    if (mode === 'combobox') {\n      const strValue = mergedValues[0]?.value;\n      setSearchValue(hasValue(strValue) ? String(strValue) : '');\n    }\n  }, [mergedValues]);\n\n  // ======================= Display Option =======================\n  // Create a placeholder item if not exist in `options`\n  const createTagOption = useRefFunc((val, label) => {\n    const mergedLabel = label ?? val;\n    return {\n      [mergedFieldNames.value]: val,\n      [mergedFieldNames.label]: mergedLabel\n    };\n  });\n\n  // Fill tag as option if mode is `tags`\n  const filledTagOptions = React.useMemo(() => {\n    if (mode !== 'tags') {\n      return mergedOptions;\n    }\n\n    // >>> Tag mode\n    const cloneOptions = [...mergedOptions];\n\n    // Check if value exist in options (include new patch item)\n    const existOptions = val => valueOptions.has(val);\n\n    // Fill current value as option\n    [...mergedValues].sort((a, b) => a.value < b.value ? -1 : 1).forEach(item => {\n      const val = item.value;\n      if (!existOptions(val)) {\n        cloneOptions.push(createTagOption(val, item.label));\n      }\n    });\n    return cloneOptions;\n  }, [createTagOption, mergedOptions, valueOptions, mergedValues, mode]);\n  const filteredOptions = useFilterOptions(filledTagOptions, mergedFieldNames, mergedSearchValue, mergedFilterOption, normalizedOptionFilterProp);\n\n  // Fill options with search value if needed\n  const filledSearchOptions = React.useMemo(() => {\n    const hasItemMatchingSearch = item => {\n      if (normalizedOptionFilterProp.length) {\n        return normalizedOptionFilterProp.some(prop => item?.[prop] === mergedSearchValue);\n      }\n      return item?.value === mergedSearchValue;\n    };\n    if (mode !== 'tags' || !mergedSearchValue || filteredOptions.some(item => hasItemMatchingSearch(item))) {\n      return filteredOptions;\n    }\n    // ignore when search value equal select input value\n    if (filteredOptions.some(item => item[mergedFieldNames.value] === mergedSearchValue)) {\n      return filteredOptions;\n    }\n    // Skip creating temp tag option if it matches a disabled option value\n    if (valueOptions.get(mergedSearchValue)?.disabled) {\n      return filteredOptions;\n    }\n    // Fill search value as option\n    return [createTagOption(mergedSearchValue), ...filteredOptions];\n  }, [createTagOption, normalizedOptionFilterProp, mode, filteredOptions, mergedSearchValue, mergedFieldNames, valueOptions]);\n  const sorter = inputOptions => {\n    const sortedOptions = [...inputOptions].sort((a, b) => filterSort(a, b, {\n      searchValue: mergedSearchValue\n    }));\n    return sortedOptions.map(item => {\n      if (Array.isArray(item.options)) {\n        return {\n          ...item,\n          options: item.options.length > 0 ? sorter(item.options) : item.options\n        };\n      }\n      return item;\n    });\n  };\n  const orderedFilteredOptions = React.useMemo(() => {\n    if (!filterSort) {\n      return filledSearchOptions;\n    }\n    return sorter(filledSearchOptions);\n  }, [filledSearchOptions, filterSort, mergedSearchValue]);\n  const displayOptions = React.useMemo(() => flattenOptions(orderedFilteredOptions, {\n    fieldNames: mergedFieldNames,\n    childrenAsData\n  }), [orderedFilteredOptions, mergedFieldNames, childrenAsData]);\n\n  // =========================== Change ===========================\n  const triggerChange = values => {\n    const labeledValues = convert2LabelValues(values);\n    setInternalValue(labeledValues);\n    if (onChange && (\n    // Trigger event only when value changed\n    labeledValues.length !== mergedValues.length || labeledValues.some((newVal, index) => mergedValues[index]?.value !== newVal?.value))) {\n      const returnValues = labelInValue ? labeledValues.map(({\n        label: l,\n        value: v\n      }) => ({\n        label: l,\n        value: v\n      })) : labeledValues.map(v => v.value);\n      const returnOptions = labeledValues.map(v => injectPropsWithOption(getMixedOption(v.value)));\n      onChange(\n      // Value\n      multiple ? returnValues : returnValues[0],\n      // Option\n      multiple ? returnOptions : returnOptions[0]);\n    }\n  };\n\n  // ======================= Accessibility ========================\n  const [activeValue, setActiveValue] = React.useState(null);\n  const [accessibilityIndex, setAccessibilityIndex] = React.useState(0);\n  const mergedDefaultActiveFirstOption = defaultActiveFirstOption !== undefined ? defaultActiveFirstOption : mode !== 'combobox';\n  const activeEventRef = React.useRef(undefined);\n  const onActiveValue = React.useCallback((active, index, {\n    source = 'keyboard'\n  } = {}) => {\n    setAccessibilityIndex(index);\n    if (backfill && mode === 'combobox' && active !== null && source === 'keyboard') {\n      setActiveValue(String(active));\n    }\n\n    // Active will call multiple times.\n    // We only need trigger the last one.\n    const promise = Promise.resolve().then(() => {\n      if (activeEventRef.current === promise) {\n        onActive?.(active);\n      }\n    });\n    activeEventRef.current = promise;\n  }, [backfill, mode, onActive]);\n\n  // ========================= OptionList =========================\n  const triggerSelect = (val, selected, type) => {\n    const getSelectEnt = () => {\n      const option = getMixedOption(val);\n      return [labelInValue ? {\n        label: option?.[mergedFieldNames.label],\n        value: val\n      } : val, injectPropsWithOption(option)];\n    };\n    if (selected && onSelect) {\n      const [wrappedValue, option] = getSelectEnt();\n      onSelect(wrappedValue, option);\n    } else if (!selected && onDeselect && type !== 'clear') {\n      const [wrappedValue, option] = getSelectEnt();\n      onDeselect(wrappedValue, option);\n    }\n  };\n\n  // Used for OptionList selection\n  const onInternalSelect = useRefFunc((val, info) => {\n    let cloneValues;\n\n    // Single mode always trigger select only with option list\n    const mergedSelect = multiple ? info.selected : true;\n    if (mergedSelect) {\n      cloneValues = multiple ? [...mergedValues, val] : [val];\n    } else {\n      cloneValues = mergedValues.filter(v => v.value !== val);\n    }\n    triggerChange(cloneValues);\n    triggerSelect(val, mergedSelect);\n\n    // Clean search value if single or configured\n    if (mode === 'combobox') {\n      setActiveValue('');\n    } else if (!isMultiple || autoClearSearchValue) {\n      setSearchValue('');\n      setActiveValue('');\n    }\n  });\n\n  // ======================= Display Change =======================\n  // BaseSelect display values change\n  const onDisplayValuesChange = (nextValues, info) => {\n    triggerChange(nextValues);\n    const {\n      type,\n      values\n    } = info;\n    if (type === 'remove' || type === 'clear') {\n      values.forEach(item => {\n        triggerSelect(item.value, false, type);\n      });\n    }\n  };\n\n  // =========================== Search ===========================\n  const onInternalSearch = (searchText, info) => {\n    setSearchValue(searchText);\n    setActiveValue(null);\n\n    // [Submit] Tag mode should flush input\n    if (info.source === 'submit') {\n      const formatted = (searchText || '').trim();\n      // prevent empty tags from appearing when you click the Enter button\n      if (formatted) {\n        // Skip disabled options in tags mode\n        if (valueOptions.get(formatted)?.disabled) {\n          setSearchValue('');\n          return;\n        }\n        const newRawValues = Array.from(new Set([...rawValues, formatted]));\n        triggerChange(newRawValues);\n        triggerSelect(formatted, true);\n        setSearchValue('');\n      }\n      return;\n    }\n    if (info.source !== 'blur') {\n      if (mode === 'combobox') {\n        triggerChange(searchText);\n      }\n      onSearch?.(searchText);\n    }\n  };\n  const onInternalSearchSplit = words => {\n    let patchValues = words;\n    if (mode !== 'tags') {\n      patchValues = words.map(word => {\n        const opt = labelOptions.get(word);\n        return opt?.value;\n      }).filter(val => val !== undefined);\n    }\n\n    // Filter out disabled option values in tags mode\n    if (mode === 'tags') {\n      patchValues = patchValues.filter(val => !valueOptions.get(val)?.disabled);\n    }\n    const newRawValues = Array.from(new Set([...rawValues, ...patchValues]));\n    triggerChange(newRawValues);\n    newRawValues.forEach(newRawValue => {\n      triggerSelect(newRawValue, true);\n    });\n  };\n\n  // ========================== Context ===========================\n  const selectContext = React.useMemo(() => {\n    const realVirtual = virtual !== false && popupMatchSelectWidth !== false;\n    return {\n      ...parsedOptions,\n      flattenOptions: displayOptions,\n      onActiveValue,\n      defaultActiveFirstOption: mergedDefaultActiveFirstOption,\n      onSelect: onInternalSelect,\n      menuItemSelectedIcon,\n      rawValues,\n      fieldNames: mergedFieldNames,\n      virtual: realVirtual,\n      direction,\n      listHeight,\n      listItemHeight,\n      childrenAsData,\n      maxCount,\n      optionRender,\n      classNames,\n      styles\n    };\n  }, [maxCount, parsedOptions, displayOptions, onActiveValue, mergedDefaultActiveFirstOption, onInternalSelect, menuItemSelectedIcon, rawValues, mergedFieldNames, virtual, popupMatchSelectWidth, direction, listHeight, listItemHeight, childrenAsData, optionRender, classNames, styles]);\n\n  // ========================== Warning ===========================\n  if (process.env.NODE_ENV !== 'production') {\n    warningProps(props);\n    warningNullOptions(mergedOptions, mergedFieldNames);\n  }\n\n  // ==============================================================\n  // ==                          Render                          ==\n  // ==============================================================\n  return /*#__PURE__*/React.createElement(SelectContext.Provider, {\n    value: selectContext\n  }, /*#__PURE__*/React.createElement(BaseSelect, _extends({}, restProps, {\n    // >>> MISC\n    id: mergedId,\n    prefixCls: prefixCls,\n    ref: ref,\n    omitDomProps: OMIT_DOM_PROPS,\n    mode: mode\n    // >>> Style\n    ,\n    classNames: classNames,\n    styles: styles\n    // >>> Values\n    ,\n    displayValues: displayValues,\n    onDisplayValuesChange: onDisplayValuesChange,\n    maxCount: maxCount\n    // >>> Trigger\n    ,\n    direction: direction\n    // >>> Search\n    ,\n    showSearch: mergedShowSearch,\n    searchValue: mergedSearchValue,\n    onSearch: onInternalSearch,\n    autoClearSearchValue: autoClearSearchValue,\n    onSearchSplit: onInternalSearchSplit,\n    popupMatchSelectWidth: popupMatchSelectWidth\n    // >>> OptionList\n    ,\n    OptionList: OptionList,\n    emptyOptions: !displayOptions.length\n    // >>> Accessibility\n    ,\n    activeValue: activeValue,\n    activeDescendantId: `${mergedId}_list_${accessibilityIndex}`\n  })));\n});\nif (process.env.NODE_ENV !== 'production') {\n  Select.displayName = 'Select';\n}\nconst TypedSelect = Select;\nTypedSelect.Option = Option;\nTypedSelect.OptGroup = OptGroup;\nexport default TypedSelect;","import Select from \"./Select\";\nimport Option from \"./Option\";\nimport OptGroup from \"./OptGroup\";\nimport BaseSelect from \"./BaseSelect\";\nimport useBaseProps from \"./hooks/useBaseProps\";\nexport { Option, OptGroup, BaseSelect, useBaseProps };\nexport default Select;","import { defaultPrefixCls } from '../config-provider';\nimport { isTransitionEvent } from './is';\n// ================== Collapse Motion ==================\nconst getCollapsedHeight = () => ({\n  height: 0,\n  opacity: 0\n});\nconst getRealHeight = node => ({\n  height: node?.scrollHeight ?? 0,\n  opacity: node ? 1 : 0\n});\nconst getCurrentHeight = node => ({\n  height: node?.offsetHeight ?? 0\n});\nconst skipOpacityTransition = (_, event) => {\n  return event?.deadline === true || isTransitionEvent(event) && event.propertyName === 'height';\n};\nconst initCollapseMotion = (rootCls = defaultPrefixCls) => ({\n  motionName: `${rootCls}-motion-collapse`,\n  onAppearStart: getCollapsedHeight,\n  onEnterStart: getCollapsedHeight,\n  onAppearActive: getRealHeight,\n  onEnterActive: getRealHeight,\n  onLeaveStart: getCurrentHeight,\n  onLeaveActive: getCollapsedHeight,\n  onAppearEnd: skipOpacityTransition,\n  onEnterEnd: skipOpacityTransition,\n  onLeaveEnd: skipOpacityTransition,\n  motionDeadline: 500\n});\nconst _SelectPlacements = ['bottomLeft', 'bottomRight', 'topLeft', 'topRight'];\nconst getTransitionName = (rootPrefixCls, motion, transitionName) => {\n  if (transitionName !== undefined) {\n    return transitionName;\n  }\n  return `${rootPrefixCls}-${motion}`;\n};\nexport { getTransitionName };\nexport default initCollapseMotion;","const normalizeIcon = (value, key, fallback) => {\n  if (value === false) {\n    return null; // Explicitly return null when value is false\n  }\n  if (value === true) {\n    return fallback; // Return fallback when value is true\n  }\n  // More explicit if statement, avoiding inline if\n  if (value && key && value[key] !== undefined) {\n    return value[key]; // Return value[key] if it's explicitly defined\n  }\n  return fallback; // Return fallback when no value is found\n};\nexport default normalizeIcon;","\"use client\";\n\nimport * as React from 'react';\nimport { useControlledState } from '@rc-component/util';\nimport ConfigProvider, { ConfigContext } from '../config-provider';\nexport function withPureRenderTheme(Component) {\n  return props => (/*#__PURE__*/React.createElement(ConfigProvider, {\n    theme: {\n      token: {\n        motion: false,\n        zIndexPopupBase: 0\n      }\n    }\n  }, /*#__PURE__*/React.createElement(Component, {\n    ...props\n  })));\n}\n/* istanbul ignore next */\nconst genPurePanel = (Component, alignPropName, postProps, defaultPrefixCls, getDropdownCls) => {\n  const PurePanel = props => {\n    const {\n      prefixCls: customizePrefixCls,\n      style\n    } = props;\n    const holderRef = React.useRef(null);\n    const [popupHeight, setPopupHeight] = React.useState(0);\n    const [popupWidth, setPopupWidth] = React.useState(0);\n    const [open, setOpen] = useControlledState(false, props.open);\n    const {\n      getPrefixCls\n    } = React.useContext(ConfigContext);\n    const prefixCls = getPrefixCls(defaultPrefixCls || 'select', customizePrefixCls);\n    React.useEffect(() => {\n      // We do not care about ssr\n      setOpen(true);\n      if (typeof ResizeObserver !== 'undefined') {\n        const resizeObserver = new ResizeObserver(entries => {\n          const element = entries[0].target;\n          setPopupHeight(element.offsetHeight + 8);\n          setPopupWidth(element.offsetWidth);\n        });\n        const interval = setInterval(() => {\n          const dropdownCls = getDropdownCls ? `.${getDropdownCls(prefixCls)}` : `.${prefixCls}-dropdown`;\n          const popup = holderRef.current?.querySelector(dropdownCls);\n          if (popup) {\n            clearInterval(interval);\n            resizeObserver.observe(popup);\n          }\n        }, 10);\n        return () => {\n          clearInterval(interval);\n          resizeObserver.disconnect();\n        };\n      }\n    }, [prefixCls]);\n    let mergedProps = {\n      ...props,\n      style: {\n        ...style,\n        margin: 0\n      },\n      open,\n      getPopupContainer: () => holderRef.current\n    };\n    if (postProps) {\n      mergedProps = postProps(mergedProps);\n    }\n    if (alignPropName) {\n      mergedProps = {\n        ...mergedProps,\n        [alignPropName]: {\n          overflow: {\n            adjustX: false,\n            adjustY: false\n          }\n        }\n      };\n    }\n    const mergedStyle = {\n      paddingBottom: popupHeight,\n      position: 'relative',\n      minWidth: popupWidth\n    };\n    return /*#__PURE__*/React.createElement(\"div\", {\n      ref: holderRef,\n      style: mergedStyle\n    }, /*#__PURE__*/React.createElement(Component, {\n      ...mergedProps\n    }));\n  };\n  return withPureRenderTheme(PurePanel);\n};\nexport default genPurePanel;","import { clsx } from 'clsx';\nconst _InputStatuses = ['warning', 'error', '', 'success', 'validating'];\nexport const getStatusClassNames = (prefixCls, status, hasFeedback) => {\n  return clsx({\n    [`${prefixCls}-status-success`]: status === 'success',\n    [`${prefixCls}-status-warning`]: status === 'warning',\n    [`${prefixCls}-status-error`]: status === 'error',\n    [`${prefixCls}-status-validating`]: status === 'validating',\n    [`${prefixCls}-has-feedback`]: hasFeedback\n  });\n};\nexport const getMergedStatus = (contextStatus, customStatus) => customStatus || contextStatus;","import { FastColor } from '@ant-design/fast-color';\nexport const getAsSolidColor = (color, background) => {\n  if (color?.startsWith('var(') || background?.startsWith('var(')) {\n    return color;\n  }\n  return new FastColor(color).onBackground(background).toHexString();\n};","\"use client\";\n\nimport * as React from 'react';\nimport { useMemo } from 'react';\nimport { useLocale } from '../locale';\nimport { useToken } from '../theme/internal';\nimport { getAsSolidColor } from './utils';\nconst Empty = () => {\n  const [, token] = useToken();\n  const [locale] = useLocale('Empty');\n  const {\n    colorBgContainer,\n    colorFill,\n    colorFillSecondary,\n    colorFillTertiary,\n    colorTextQuaternary\n  } = token;\n  const {\n    panelBgColor,\n    borderColor,\n    detailColor,\n    shadowColor,\n    iconColor\n  } = useMemo(() => ({\n    panelBgColor: getAsSolidColor(colorFillTertiary, colorBgContainer),\n    borderColor: getAsSolidColor(colorTextQuaternary, colorBgContainer),\n    detailColor: getAsSolidColor(colorFill, colorBgContainer),\n    shadowColor: getAsSolidColor(colorFillSecondary, colorBgContainer),\n    iconColor: colorBgContainer\n  }), [colorBgContainer, colorFill, colorFillSecondary, colorFillTertiary, colorTextQuaternary]);\n  return /*#__PURE__*/React.createElement(\"svg\", {\n    width: \"184\",\n    height: \"152\",\n    viewBox: \"0 0 184 152\",\n    xmlns: \"http://www.w3.org/2000/svg\"\n  }, /*#__PURE__*/React.createElement(\"title\", null, locale?.description || 'Empty'), /*#__PURE__*/React.createElement(\"g\", {\n    fill: \"none\",\n    fillRule: \"evenodd\"\n  }, /*#__PURE__*/React.createElement(\"g\", {\n    transform: \"translate(24 31.7)\"\n  }, /*#__PURE__*/React.createElement(\"ellipse\", {\n    fillOpacity: \".8\",\n    fill: shadowColor,\n    cx: \"67.8\",\n    cy: \"106.9\",\n    rx: \"67.8\",\n    ry: \"12.7\"\n  }), /*#__PURE__*/React.createElement(\"path\", {\n    fill: borderColor,\n    d: \"M122 69.7 98.1 40.2a6 6 0 0 0-4.6-2.2H42.1a6 6 0 0 0-4.6 2.2l-24 29.5V85H122z\"\n  }), /*#__PURE__*/React.createElement(\"path\", {\n    fill: panelBgColor,\n    d: \"M33.8 0h68a4 4 0 0 1 4 4v93.3a4 4 0 0 1-4 4h-68a4 4 0 0 1-4-4V4a4 4 0 0 1 4-4\"\n  }), /*#__PURE__*/React.createElement(\"path\", {\n    fill: detailColor,\n    d: \"M42.7 10h50.2a2 2 0 0 1 2 2v25a2 2 0 0 1-2 2H42.7a2 2 0 0 1-2-2V12a2 2 0 0 1 2-2m.2 39.8h49.8a2.3 2.3 0 1 1 0 4.5H42.9a2.3 2.3 0 0 1 0-4.5m0 11.7h49.8a2.3 2.3 0 1 1 0 4.6H42.9a2.3 2.3 0 0 1 0-4.6m79 43.5a7 7 0 0 1-6.8 5.4H20.5a7 7 0 0 1-6.7-5.4l-.2-1.8V69.7h26.3c2.9 0 5.2 2.4 5.2 5.4s2.4 5.4 5.3 5.4h34.8c2.9 0 5.3-2.4 5.3-5.4s2.3-5.4 5.2-5.4H122v33.5q0 1-.2 1.8\"\n  })), /*#__PURE__*/React.createElement(\"path\", {\n    fill: detailColor,\n    d: \"m149.1 33.3-6.8 2.6a1 1 0 0 1-1.3-1.2l2-6.2q-4.1-4.5-4.2-10.4c0-10 10.1-18.1 22.6-18.1S184 8.1 184 18.1s-10.1 18-22.6 18q-6.8 0-12.3-2.8\"\n  }), /*#__PURE__*/React.createElement(\"g\", {\n    fill: iconColor,\n    transform: \"translate(149.7 15.4)\"\n  }, /*#__PURE__*/React.createElement(\"circle\", {\n    cx: \"20.7\",\n    cy: \"3.2\",\n    r: \"2.8\"\n  }), /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M5.7 5.6H0L2.9.7zM9.3.7h5v5h-5z\"\n  }))));\n};\nif (process.env.NODE_ENV !== 'production') {\n  Empty.displayName = 'EmptyImage';\n}\nexport default Empty;","\"use client\";\n\nimport * as React from 'react';\nimport { useMemo } from 'react';\nimport { useLocale } from '../locale';\nimport { useToken } from '../theme/internal';\nimport { getAsSolidColor } from './utils';\nconst Simple = () => {\n  const [, token] = useToken();\n  const [locale] = useLocale('Empty');\n  const {\n    colorFill,\n    colorFillTertiary,\n    colorFillQuaternary,\n    colorBgContainer\n  } = token;\n  const {\n    borderColor,\n    shadowColor,\n    contentColor\n  } = useMemo(() => ({\n    borderColor: getAsSolidColor(colorFill, colorBgContainer),\n    shadowColor: getAsSolidColor(colorFillTertiary, colorBgContainer),\n    contentColor: getAsSolidColor(colorFillQuaternary, colorBgContainer)\n  }), [colorFill, colorFillTertiary, colorFillQuaternary, colorBgContainer]);\n  return /*#__PURE__*/React.createElement(\"svg\", {\n    width: \"64\",\n    height: \"41\",\n    viewBox: \"0 0 64 41\",\n    xmlns: \"http://www.w3.org/2000/svg\"\n  }, /*#__PURE__*/React.createElement(\"title\", null, locale?.description || 'Empty'), /*#__PURE__*/React.createElement(\"g\", {\n    transform: \"translate(0 1)\",\n    fill: \"none\",\n    fillRule: \"evenodd\"\n  }, /*#__PURE__*/React.createElement(\"ellipse\", {\n    fill: shadowColor,\n    cx: \"32\",\n    cy: \"33\",\n    rx: \"32\",\n    ry: \"7\"\n  }), /*#__PURE__*/React.createElement(\"g\", {\n    fillRule: \"nonzero\",\n    stroke: borderColor\n  }, /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M55 12.8 44.9 1.3Q44 0 42.9 0H21.1q-1.2 0-2 1.3L9 12.8V22h46z\"\n  }), /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M41.6 16c0-1.7 1-3 2.2-3H55v18.1c0 2.2-1.3 3.9-3 3.9H12c-1.7 0-3-1.7-3-3.9V13h11.2c1.2 0 2.2 1.3 2.2 3s1 2.9 2.2 2.9h14.8c1.2 0 2.2-1.4 2.2-3\",\n    fill: contentColor\n  }))));\n};\nif (process.env.NODE_ENV !== 'production') {\n  Simple.displayName = 'SimpleImage';\n}\nexport default Simple;","import { genStyleHooks, mergeToken } from '../../theme/internal';\n// ============================== Shared ==============================\nconst genSharedEmptyStyle = token => {\n  const {\n    componentCls,\n    margin,\n    marginXS,\n    marginXL,\n    fontSize,\n    lineHeight\n  } = token;\n  return {\n    [componentCls]: {\n      marginInline: marginXS,\n      fontSize,\n      lineHeight,\n      textAlign: 'center',\n      // 原来 &-image 没有父子结构，现在为了外层承担我们的 hashId，改成父子结构\n      [`${componentCls}-image`]: {\n        height: token.emptyImgHeight,\n        marginBottom: marginXS,\n        opacity: token.opacityImage,\n        img: {\n          height: '100%'\n        },\n        svg: {\n          maxWidth: '100%',\n          height: '100%',\n          margin: 'auto'\n        }\n      },\n      [`${componentCls}-description`]: {\n        color: token.colorTextDescription\n      },\n      // 原来 &-footer 没有父子结构，现在为了外层承担我们的 hashId，改成父子结构\n      [`${componentCls}-footer`]: {\n        marginTop: margin\n      },\n      '&-normal': {\n        marginBlock: marginXL,\n        color: token.colorTextDescription,\n        [`${componentCls}-description`]: {\n          color: token.colorTextDescription\n        },\n        [`${componentCls}-image`]: {\n          height: token.emptyImgHeightMD\n        }\n      },\n      '&-small': {\n        marginBlock: marginXS,\n        color: token.colorTextDescription,\n        [`${componentCls}-image`]: {\n          height: token.emptyImgHeightSM\n        }\n      }\n    }\n  };\n};\n// ============================== Export ==============================\nexport default genStyleHooks('Empty', token => {\n  const {\n    componentCls,\n    controlHeightLG,\n    calc\n  } = token;\n  const emptyToken = mergeToken(token, {\n    emptyImgCls: `${componentCls}-img`,\n    emptyImgHeight: calc(controlHeightLG).mul(2.5).equal(),\n    emptyImgHeightMD: controlHeightLG,\n    emptyImgHeightSM: calc(controlHeightLG).mul(0.875).equal()\n  });\n  return genSharedEmptyStyle(emptyToken);\n});","\"use client\";\n\nimport * as React from 'react';\nimport { isReactRenderable } from '@rc-component/util';\nimport { clsx } from 'clsx';\nimport { useMergeSemantic, useSemanticRootStyle } from '../_util/hooks/useMergeSemantic';\nimport { devUseWarning } from '../_util/warning';\nimport { useComponentConfig } from '../config-provider/context';\nimport { useLocale } from '../locale';\nimport DefaultEmptyImg from './empty';\nimport SimpleEmptyImg from './simple';\nimport useStyle from './style';\nconst defaultEmptyImg = /*#__PURE__*/React.createElement(DefaultEmptyImg, null);\nconst simpleEmptyImg = /*#__PURE__*/React.createElement(SimpleEmptyImg, null);\nconst Empty = /*#__PURE__*/React.forwardRef((props, ref) => {\n  const {\n    className,\n    rootClassName,\n    prefixCls: customizePrefixCls,\n    image,\n    description,\n    children,\n    imageStyle,\n    style,\n    classNames,\n    styles,\n    ...restProps\n  } = props;\n  const {\n    getPrefixCls,\n    direction,\n    className: contextClassName,\n    style: contextStyle,\n    classNames: contextClassNames,\n    styles: contextStyles,\n    image: contextImage\n  } = useComponentConfig('empty');\n  const prefixCls = getPrefixCls('empty', customizePrefixCls);\n  const [hashId, cssVarCls] = useStyle(prefixCls);\n  const contextStyleRoot = useSemanticRootStyle(contextStyle);\n  const styleRoot = useSemanticRootStyle(style);\n  const [mergedClassNames, mergedStyles] = useMergeSemantic([contextClassNames, classNames], [contextStyles, contextStyleRoot, styles, styleRoot], {\n    props\n  });\n  const [locale] = useLocale('Empty');\n  const des = typeof description !== 'undefined' ? description : locale?.description;\n  const alt = typeof des === 'string' ? des : 'empty';\n  const mergedImage = image ?? contextImage ?? defaultEmptyImg;\n  let imageNode = null;\n  if (typeof mergedImage === 'string') {\n    imageNode = /*#__PURE__*/React.createElement(\"img\", {\n      draggable: false,\n      alt: alt,\n      src: mergedImage\n    });\n  } else {\n    imageNode = mergedImage;\n  }\n  // ============================= Warning ==============================\n  if (process.env.NODE_ENV !== 'production') {\n    const warning = devUseWarning('Empty');\n    [['imageStyle', 'styles.image']].forEach(([deprecatedName, newName]) => {\n      warning.deprecated(!(deprecatedName in props), deprecatedName, newName);\n    });\n  }\n  const nativeElementRef = React.useRef(null);\n  React.useImperativeHandle(ref, () => ({\n    nativeElement: nativeElementRef.current\n  }));\n  return /*#__PURE__*/React.createElement(\"div\", {\n    ref: nativeElementRef,\n    className: clsx(hashId, cssVarCls, prefixCls, contextClassName, {\n      [`${prefixCls}-normal`]: mergedImage === simpleEmptyImg,\n      [`${prefixCls}-rtl`]: direction === 'rtl'\n    }, className, rootClassName, mergedClassNames.root),\n    style: mergedStyles.root,\n    ...restProps\n  }, /*#__PURE__*/React.createElement(\"div\", {\n    className: clsx(`${prefixCls}-image`, mergedClassNames.image),\n    style: {\n      ...imageStyle,\n      ...mergedStyles.image\n    }\n  }, imageNode), isReactRenderable(des) && (/*#__PURE__*/React.createElement(\"div\", {\n    className: clsx(`${prefixCls}-description`, mergedClassNames.description),\n    style: mergedStyles.description\n  }, des)), isReactRenderable(children) && (/*#__PURE__*/React.createElement(\"div\", {\n    className: clsx(`${prefixCls}-footer`, mergedClassNames.footer),\n    style: mergedStyles.footer\n  }, children)));\n});\nEmpty.PRESENTED_IMAGE_DEFAULT = defaultEmptyImg;\nEmpty.PRESENTED_IMAGE_SIMPLE = simpleEmptyImg;\nif (process.env.NODE_ENV !== 'production') {\n  Empty.displayName = 'Empty';\n}\nexport default Empty;","\"use client\";\n\nimport React, { useContext } from 'react';\nimport { ConfigContext } from '.';\nimport Empty from '../empty';\nconst DefaultRenderEmpty = props => {\n  const {\n    componentName\n  } = props;\n  const {\n    getPrefixCls\n  } = useContext(ConfigContext);\n  const prefix = getPrefixCls('empty');\n  switch (componentName) {\n    case 'Table':\n    case 'List':\n      return /*#__PURE__*/React.createElement(Empty, {\n        image: Empty.PRESENTED_IMAGE_SIMPLE\n      });\n    case 'Select':\n    case 'TreeSelect':\n    case 'Cascader':\n    case 'Transfer':\n    case 'Mentions':\n      return /*#__PURE__*/React.createElement(Empty, {\n        image: Empty.PRESENTED_IMAGE_SIMPLE,\n        className: `${prefix}-small`\n      });\n    /**\n     * This type of component should satisfy the nullish coalescing operator(??) on the left-hand side.\n     * to let the component itself implement the logic.\n     * For example `Table.filter`.\n     */\n    case 'Table.filter':\n      // why `null`? legacy react16 node type `undefined` is not allowed.\n      return null;\n    default:\n      // Should never hit if we take all the component into consider.\n      return /*#__PURE__*/React.createElement(Empty, null);\n  }\n};\nexport default DefaultRenderEmpty;","import * as React from 'react';\nimport { ConfigContext, Variants } from '../../config-provider';\nimport { VariantContext } from '../context';\n/**\n * Compatible for legacy `bordered` prop.\n */\nconst useVariant = (component, variant, legacyBordered, fallbackComponent) => {\n  const config = React.useContext(ConfigContext);\n  const {\n    variant: configVariant,\n    [component]: componentConfig\n  } = config;\n  const ctxVariant = React.useContext(VariantContext);\n  const fallbackComponentConfig = fallbackComponent ? config[fallbackComponent] : undefined;\n  const configComponentVariant = componentConfig?.variant ?? fallbackComponentConfig?.variant;\n  const isVariantConfigured = typeof variant !== 'undefined' || legacyBordered === false || typeof ctxVariant !== 'undefined' || typeof configComponentVariant !== 'undefined' || typeof configVariant !== 'undefined';\n  let mergedVariant;\n  if (typeof variant !== 'undefined') {\n    mergedVariant = variant;\n  } else if (legacyBordered === false) {\n    mergedVariant = 'borderless';\n  } else {\n    // form variant > component global variant > fallback component global variant > global variant\n    mergedVariant = ctxVariant ?? configComponentVariant ?? configVariant ?? 'outlined';\n  }\n  const enableVariantCls = Variants.includes(mergedVariant);\n  return [mergedVariant, enableVariantCls, isVariantConfigured];\n};\nexport default useVariant;","\"use client\";\n\nimport * as React from 'react';\nimport { toArray } from '@rc-component/util';\nimport { clsx } from 'clsx';\nimport { useOrientation } from '../_util/hooks';\nimport { devUseWarning } from '../_util/warning';\nimport { ConfigContext } from '../config-provider';\nimport useSize from '../config-provider/hooks/useSize';\nimport useStyle from './style/compact';\nexport const SpaceCompactItemContext = /*#__PURE__*/React.createContext(null);\nexport const useCompactItemContext = (prefixCls, direction) => {\n  const compactItemContext = React.useContext(SpaceCompactItemContext);\n  const compactItemClassnames = React.useMemo(() => {\n    if (!compactItemContext) {\n      return '';\n    }\n    const {\n      compactDirection,\n      isFirstItem,\n      isLastItem\n    } = compactItemContext;\n    const separator = compactDirection === 'vertical' ? '-vertical-' : '-';\n    return clsx(`${prefixCls}-compact${separator}item`, {\n      [`${prefixCls}-compact${separator}first-item`]: isFirstItem,\n      [`${prefixCls}-compact${separator}last-item`]: isLastItem,\n      [`${prefixCls}-compact${separator}item-rtl`]: direction === 'rtl'\n    });\n  }, [prefixCls, direction, compactItemContext]);\n  return {\n    compactSize: compactItemContext?.compactSize,\n    compactDirection: compactItemContext?.compactDirection,\n    compactItemClassnames\n  };\n};\nexport const NoCompactStyle = props => {\n  const {\n    children\n  } = props;\n  return /*#__PURE__*/React.createElement(SpaceCompactItemContext.Provider, {\n    value: null\n  }, children);\n};\nconst CompactItem = props => {\n  const {\n    children,\n    ...others\n  } = props;\n  return /*#__PURE__*/React.createElement(SpaceCompactItemContext.Provider, {\n    value: React.useMemo(() => others, [others])\n  }, children);\n};\nconst Compact = /*#__PURE__*/React.forwardRef((props, ref) => {\n  const {\n    getPrefixCls,\n    direction: directionConfig\n  } = React.useContext(ConfigContext);\n  const {\n    size,\n    direction,\n    orientation,\n    block,\n    prefixCls: customizePrefixCls,\n    className,\n    rootClassName,\n    children,\n    vertical,\n    ...restProps\n  } = props;\n  // ======================== Warning ==========================\n  if (process.env.NODE_ENV !== 'production') {\n    const warning = devUseWarning('Space.Compact');\n    warning.deprecated(!direction, 'direction', 'orientation');\n  }\n  const [mergedOrientation, mergedVertical] = useOrientation(orientation, vertical, direction);\n  const mergedSize = useSize(ctx => size ?? ctx);\n  const prefixCls = getPrefixCls('space-compact', customizePrefixCls);\n  const [hashId] = useStyle(prefixCls);\n  const clx = clsx(prefixCls, hashId, {\n    [`${prefixCls}-rtl`]: directionConfig === 'rtl',\n    [`${prefixCls}-block`]: block,\n    [`${prefixCls}-vertical`]: mergedVertical\n  }, className, rootClassName);\n  const compactItemContext = React.useContext(SpaceCompactItemContext);\n  const nativeElementRef = React.useRef(null);\n  React.useImperativeHandle(ref, () => ({\n    nativeElement: nativeElementRef.current\n  }));\n  const childNodes = toArray(children);\n  const nodes = React.useMemo(() => childNodes.map((child, i) => {\n    const key = child?.key || `${prefixCls}-item-${i}`;\n    return /*#__PURE__*/React.createElement(CompactItem, {\n      key: key,\n      compactSize: mergedSize,\n      compactDirection: mergedOrientation,\n      isFirstItem: i === 0 && (!compactItemContext || compactItemContext?.isFirstItem),\n      isLastItem: i === childNodes.length - 1 && (!compactItemContext || compactItemContext?.isLastItem)\n    }, child);\n  }), [childNodes, compactItemContext, mergedOrientation, mergedSize, prefixCls]);\n  // =========================== Render ===========================\n  if (childNodes.length === 0) {\n    return null;\n  }\n  return /*#__PURE__*/React.createElement(\"div\", {\n    ref: nativeElementRef,\n    className: clx,\n    ...restProps\n  }, nodes);\n});\nexport default Compact;","const getBuiltInPlacements = popupOverflow => {\n  const htmlRegion = popupOverflow === 'scroll' ? 'scroll' : 'visible';\n  const sharedConfig = {\n    overflow: {\n      adjustX: true,\n      adjustY: true,\n      shiftY: true\n    },\n    htmlRegion,\n    dynamicInset: true\n  };\n  return {\n    bottomLeft: {\n      ...sharedConfig,\n      points: ['tl', 'bl'],\n      offset: [0, 4]\n    },\n    bottomRight: {\n      ...sharedConfig,\n      points: ['tr', 'br'],\n      offset: [0, 4]\n    },\n    topLeft: {\n      ...sharedConfig,\n      points: ['bl', 'tl'],\n      offset: [0, -4]\n    },\n    topRight: {\n      ...sharedConfig,\n      points: ['br', 'tr'],\n      offset: [0, -4]\n    }\n  };\n};\nfunction mergedBuiltinPlacements(buildInPlacements, popupOverflow) {\n  return buildInPlacements || getBuiltInPlacements(popupOverflow);\n}\nexport default mergedBuiltinPlacements;","// handle border collapse\nfunction compactItemBorder(token, parentCls, options, prefixCls) {\n  const {\n    focusElCls,\n    focus,\n    borderElCls\n  } = options;\n  const childCombinator = borderElCls ? '> *' : '';\n  const suffix = childCombinator ? ` ${childCombinator}` : '';\n  const genEffects = effects => effects.filter(Boolean).map(n => `&:${n}${suffix}`).join(',');\n  const hoverEffects = genEffects(['hover', focusElCls ? `hover${focusElCls}` : null]);\n  const focusEffects = genEffects([focus ? 'focus' : null, 'active']);\n  return {\n    [`&-item:not(${parentCls}-last-item)`]: {\n      marginInlineEnd: token.calc(token.lineWidth).mul(-1).equal()\n    },\n    [`&-item:not(${prefixCls}-status-success)`]: {\n      zIndex: 2\n    },\n    '&-item': {\n      [focusEffects]: {\n        zIndex: 3\n      },\n      [hoverEffects]: {\n        zIndex: 4\n      },\n      ...(focusElCls ? {\n        [`&${focusElCls}`]: {\n          zIndex: 3\n        }\n      } : {}),\n      [`&[disabled] ${childCombinator}`]: {\n        zIndex: 0\n      }\n    }\n  };\n}\n// handle border-radius\nfunction compactItemBorderRadius(prefixCls, parentCls, options) {\n  const {\n    borderElCls\n  } = options;\n  const childCombinator = borderElCls ? `> ${borderElCls}` : '';\n  return {\n    [`&-item:not(${parentCls}-first-item):not(${parentCls}-last-item) ${childCombinator}`]: {\n      borderRadius: 0\n    },\n    [`&-item:not(${parentCls}-last-item)${parentCls}-first-item`]: {\n      [`& ${childCombinator}, &${prefixCls}-sm ${childCombinator}, &${prefixCls}-lg ${childCombinator}`]: {\n        borderStartEndRadius: 0,\n        borderEndEndRadius: 0\n      }\n    },\n    [`&-item:not(${parentCls}-first-item)${parentCls}-last-item`]: {\n      [`& ${childCombinator}, &${prefixCls}-sm ${childCombinator}, &${prefixCls}-lg ${childCombinator}`]: {\n        borderStartStartRadius: 0,\n        borderEndStartRadius: 0\n      }\n    }\n  };\n}\nexport function genCompactItemStyle(token, options = {\n  focus: true\n}) {\n  const {\n    componentCls\n  } = token;\n  const {\n    componentCls: customizePrefixCls\n  } = options;\n  const mergedComponentCls = customizePrefixCls || componentCls;\n  const compactCls = `${mergedComponentCls}-compact`;\n  return {\n    [compactCls]: {\n      ...compactItemBorder(token, compactCls, options, mergedComponentCls),\n      ...compactItemBorderRadius(mergedComponentCls, compactCls, options)\n    }\n  };\n}","const initMotionCommon = duration => ({\n  animationDuration: duration,\n  animationFillMode: 'both'\n});\nexport const initMotion = (motionCls, inKeyframes, outKeyframes, duration, sameLevel = false) => {\n  const sameLevelPrefix = sameLevel ? '&' : '';\n  return {\n    [`\n      ${sameLevelPrefix}${motionCls}-enter,\n      ${sameLevelPrefix}${motionCls}-appear\n    `]: {\n      ...initMotionCommon(duration),\n      animationPlayState: 'paused'\n    },\n    [`${sameLevelPrefix}${motionCls}-leave`]: {\n      ...initMotionCommon(duration),\n      animationPlayState: 'paused'\n    },\n    [`\n      ${sameLevelPrefix}${motionCls}-enter${motionCls}-enter-active,\n      ${sameLevelPrefix}${motionCls}-appear${motionCls}-appear-active\n    `]: {\n      animationName: inKeyframes,\n      animationPlayState: 'running'\n    },\n    [`${sameLevelPrefix}${motionCls}-leave${motionCls}-leave-active`]: {\n      animationName: outKeyframes,\n      animationPlayState: 'running',\n      pointerEvents: 'none'\n    }\n  };\n};","import { Keyframes } from '@ant-design/cssinjs';\nimport { initMotion } from './motion';\nexport const moveDownIn = new Keyframes('antMoveDownIn', {\n  '0%': {\n    transform: 'translate3d(0, 100%, 0)',\n    transformOrigin: '0 0',\n    opacity: 0\n  },\n  '100%': {\n    transform: 'translate3d(0, 0, 0)',\n    transformOrigin: '0 0',\n    opacity: 1\n  }\n});\nexport const moveDownOut = new Keyframes('antMoveDownOut', {\n  '0%': {\n    transform: 'translate3d(0, 0, 0)',\n    transformOrigin: '0 0',\n    opacity: 1\n  },\n  '100%': {\n    transform: 'translate3d(0, 100%, 0)',\n    transformOrigin: '0 0',\n    opacity: 0\n  }\n});\nexport const moveLeftIn = new Keyframes('antMoveLeftIn', {\n  '0%': {\n    transform: 'translate3d(-100%, 0, 0)',\n    transformOrigin: '0 0',\n    opacity: 0\n  },\n  '100%': {\n    transform: 'translate3d(0, 0, 0)',\n    transformOrigin: '0 0',\n    opacity: 1\n  }\n});\nexport const moveLeftOut = new Keyframes('antMoveLeftOut', {\n  '0%': {\n    transform: 'translate3d(0, 0, 0)',\n    transformOrigin: '0 0',\n    opacity: 1\n  },\n  '100%': {\n    transform: 'translate3d(-100%, 0, 0)',\n    transformOrigin: '0 0',\n    opacity: 0\n  }\n});\nexport const moveRightIn = new Keyframes('antMoveRightIn', {\n  '0%': {\n    transform: 'translate3d(100%, 0, 0)',\n    transformOrigin: '0 0',\n    opacity: 0\n  },\n  '100%': {\n    transform: 'translate3d(0, 0, 0)',\n    transformOrigin: '0 0',\n    opacity: 1\n  }\n});\nexport const moveRightOut = new Keyframes('antMoveRightOut', {\n  '0%': {\n    transform: 'translate3d(0, 0, 0)',\n    transformOrigin: '0 0',\n    opacity: 1\n  },\n  '100%': {\n    transform: 'translate3d(100%, 0, 0)',\n    transformOrigin: '0 0',\n    opacity: 0\n  }\n});\nexport const moveUpIn = new Keyframes('antMoveUpIn', {\n  '0%': {\n    transform: 'translate3d(0, -100%, 0)',\n    transformOrigin: '0 0',\n    opacity: 0\n  },\n  '100%': {\n    transform: 'translate3d(0, 0, 0)',\n    transformOrigin: '0 0',\n    opacity: 1\n  }\n});\nexport const moveUpOut = new Keyframes('antMoveUpOut', {\n  '0%': {\n    transform: 'translate3d(0, 0, 0)',\n    transformOrigin: '0 0',\n    opacity: 1\n  },\n  '100%': {\n    transform: 'translate3d(0, -100%, 0)',\n    transformOrigin: '0 0',\n    opacity: 0\n  }\n});\nconst moveMotion = {\n  'move-up': {\n    inKeyframes: moveUpIn,\n    outKeyframes: moveUpOut\n  },\n  'move-down': {\n    inKeyframes: moveDownIn,\n    outKeyframes: moveDownOut\n  },\n  'move-left': {\n    inKeyframes: moveLeftIn,\n    outKeyframes: moveLeftOut\n  },\n  'move-right': {\n    inKeyframes: moveRightIn,\n    outKeyframes: moveRightOut\n  }\n};\nexport const initMoveMotion = (token, motionName) => {\n  const {\n    antCls\n  } = token;\n  const motionCls = `${antCls}-${motionName}`;\n  const {\n    inKeyframes,\n    outKeyframes\n  } = moveMotion[motionName];\n  return [initMotion(motionCls, inKeyframes, outKeyframes, token.motionDurationMid), {\n    [`\n        ${motionCls}-enter,\n        ${motionCls}-appear\n      `]: {\n      opacity: 0,\n      animationTimingFunction: token.motionEaseOutCirc\n    },\n    [`${motionCls}-leave`]: {\n      animationTimingFunction: token.motionEaseInOutCirc\n    }\n  }];\n};","import { Keyframes } from '@ant-design/cssinjs';\nimport { initMotion } from './motion';\nexport const slideUpIn = new Keyframes('antSlideUpIn', {\n  '0%': {\n    transform: 'scaleY(0.8)',\n    transformOrigin: '0% 0%',\n    opacity: 0\n  },\n  '100%': {\n    transform: 'scaleY(1)',\n    transformOrigin: '0% 0%',\n    opacity: 1\n  }\n});\nexport const slideUpOut = new Keyframes('antSlideUpOut', {\n  '0%': {\n    transform: 'scaleY(1)',\n    transformOrigin: '0% 0%',\n    opacity: 1\n  },\n  '100%': {\n    transform: 'scaleY(0.8)',\n    transformOrigin: '0% 0%',\n    opacity: 0\n  }\n});\nexport const slideDownIn = new Keyframes('antSlideDownIn', {\n  '0%': {\n    transform: 'scaleY(0.8)',\n    transformOrigin: '100% 100%',\n    opacity: 0\n  },\n  '100%': {\n    transform: 'scaleY(1)',\n    transformOrigin: '100% 100%',\n    opacity: 1\n  }\n});\nexport const slideDownOut = new Keyframes('antSlideDownOut', {\n  '0%': {\n    transform: 'scaleY(1)',\n    transformOrigin: '100% 100%',\n    opacity: 1\n  },\n  '100%': {\n    transform: 'scaleY(0.8)',\n    transformOrigin: '100% 100%',\n    opacity: 0\n  }\n});\nexport const slideLeftIn = new Keyframes('antSlideLeftIn', {\n  '0%': {\n    transform: 'scaleX(0.8)',\n    transformOrigin: '0% 0%',\n    opacity: 0\n  },\n  '100%': {\n    transform: 'scaleX(1)',\n    transformOrigin: '0% 0%',\n    opacity: 1\n  }\n});\nexport const slideLeftOut = new Keyframes('antSlideLeftOut', {\n  '0%': {\n    transform: 'scaleX(1)',\n    transformOrigin: '0% 0%',\n    opacity: 1\n  },\n  '100%': {\n    transform: 'scaleX(0.8)',\n    transformOrigin: '0% 0%',\n    opacity: 0\n  }\n});\nexport const slideRightIn = new Keyframes('antSlideRightIn', {\n  '0%': {\n    transform: 'scaleX(0.8)',\n    transformOrigin: '100% 0%',\n    opacity: 0\n  },\n  '100%': {\n    transform: 'scaleX(1)',\n    transformOrigin: '100% 0%',\n    opacity: 1\n  }\n});\nexport const slideRightOut = new Keyframes('antSlideRightOut', {\n  '0%': {\n    transform: 'scaleX(1)',\n    transformOrigin: '100% 0%',\n    opacity: 1\n  },\n  '100%': {\n    transform: 'scaleX(0.8)',\n    transformOrigin: '100% 0%',\n    opacity: 0\n  }\n});\nconst slideMotion = {\n  'slide-up': {\n    inKeyframes: slideUpIn,\n    outKeyframes: slideUpOut\n  },\n  'slide-down': {\n    inKeyframes: slideDownIn,\n    outKeyframes: slideDownOut\n  },\n  'slide-left': {\n    inKeyframes: slideLeftIn,\n    outKeyframes: slideLeftOut\n  },\n  'slide-right': {\n    inKeyframes: slideRightIn,\n    outKeyframes: slideRightOut\n  }\n};\nexport const initSlideMotion = (token, motionName) => {\n  const {\n    antCls\n  } = token;\n  const motionCls = `${antCls}-${motionName}`;\n  const {\n    inKeyframes,\n    outKeyframes\n  } = slideMotion[motionName];\n  return [initMotion(motionCls, inKeyframes, outKeyframes, token.motionDurationMid), {\n    [`\n      ${motionCls}-enter,\n      ${motionCls}-appear\n    `]: {\n      transform: 'scale(0)',\n      transformOrigin: '0% 0%',\n      opacity: 0,\n      animationTimingFunction: token.motionEaseOutQuint,\n      '&-prepare': {\n        transform: 'scale(1)'\n      }\n    },\n    [`${motionCls}-leave`]: {\n      animationTimingFunction: token.motionEaseInQuint\n    }\n  }];\n};","import { resetComponent, textEllipsis } from '../../style';\nimport { initMoveMotion, initSlideMotion, slideDownIn, slideDownOut, slideUpIn, slideUpOut } from '../../style/motion';\nconst genItemStyle = token => {\n  const {\n    optionHeight,\n    optionFontSize,\n    optionLineHeight,\n    optionPadding\n  } = token;\n  return {\n    position: 'relative',\n    display: 'block',\n    minHeight: optionHeight,\n    padding: optionPadding,\n    color: token.colorText,\n    fontWeight: 'normal',\n    fontSize: optionFontSize,\n    lineHeight: optionLineHeight,\n    boxSizing: 'border-box'\n  };\n};\nconst genSingleStyle = token => {\n  const {\n    antCls,\n    componentCls\n  } = token;\n  const selectItemCls = `${componentCls}-item`;\n  const slideUpEnterActive = `&${antCls}-slide-up-enter${antCls}-slide-up-enter-active`;\n  const slideUpAppearActive = `&${antCls}-slide-up-appear${antCls}-slide-up-appear-active`;\n  const slideUpLeaveActive = `&${antCls}-slide-up-leave${antCls}-slide-up-leave-active`;\n  const dropdownPlacementCls = `${componentCls}-dropdown-placement-`;\n  const selectedItemCls = `${selectItemCls}-option-selected`;\n  return [{\n    [`${componentCls}-dropdown`]: {\n      // ========================== Popup ==========================\n      ...resetComponent(token),\n      position: 'absolute',\n      top: -9999,\n      zIndex: token.zIndexPopup,\n      boxSizing: 'border-box',\n      padding: token.paddingXXS,\n      overflow: 'hidden',\n      fontSize: token.fontSize,\n      // Fix select render lag of long text in chrome\n      // https://github.com/ant-design/ant-design/issues/11456\n      // https://github.com/ant-design/ant-design/issues/11843\n      fontVariant: 'initial',\n      backgroundColor: token.colorBgElevated,\n      borderRadius: token.borderRadiusLG,\n      outline: 'none',\n      boxShadow: token.boxShadowSecondary,\n      [`\n          ${slideUpEnterActive}${dropdownPlacementCls}bottomLeft,\n          ${slideUpAppearActive}${dropdownPlacementCls}bottomLeft\n        `]: {\n        animationName: slideUpIn\n      },\n      [`\n          ${slideUpEnterActive}${dropdownPlacementCls}topLeft,\n          ${slideUpAppearActive}${dropdownPlacementCls}topLeft,\n          ${slideUpEnterActive}${dropdownPlacementCls}topRight,\n          ${slideUpAppearActive}${dropdownPlacementCls}topRight\n        `]: {\n        animationName: slideDownIn\n      },\n      [`${slideUpLeaveActive}${dropdownPlacementCls}bottomLeft`]: {\n        animationName: slideUpOut\n      },\n      [`\n          ${slideUpLeaveActive}${dropdownPlacementCls}topLeft,\n          ${slideUpLeaveActive}${dropdownPlacementCls}topRight\n        `]: {\n        animationName: slideDownOut\n      },\n      '&-hidden': {\n        display: 'none'\n      },\n      [`${componentCls}-dropdown-list-scrollbar`]: {\n        cursor: 'pointer',\n        '&:hover': {\n          backgroundColor: token.colorFillQuaternary\n        }\n      },\n      [selectItemCls]: {\n        ...genItemStyle(token),\n        cursor: 'pointer',\n        transition: `background-color ${token.motionDurationSlow} ease`,\n        borderRadius: token.borderRadiusSM,\n        // =========== Group ============\n        '&-group': {\n          color: token.colorTextDescription,\n          fontSize: token.fontSizeSM,\n          cursor: 'default'\n        },\n        // =========== Option ===========\n        '&-option': {\n          display: 'flex',\n          '&-content': {\n            flex: 'auto',\n            ...textEllipsis\n          },\n          '&-state': {\n            flex: 'none',\n            display: 'flex',\n            alignItems: 'center'\n          },\n          [`&-selected:not(${selectItemCls}-option-disabled)`]: {\n            color: token.optionSelectedColor,\n            fontWeight: token.optionSelectedFontWeight,\n            backgroundColor: token.optionSelectedBg,\n            [`${selectItemCls}-option-state`]: {\n              color: token.colorPrimary\n            }\n          },\n          [`&-active:not(${selectItemCls}-option-disabled)`]: {\n            backgroundColor: token.optionActiveBg\n          },\n          [`&-selected${selectItemCls}-option-active:not(${selectItemCls}-option-disabled)`]: {\n            backgroundColor: token.controlItemBgActiveHover\n          },\n          '&-disabled': {\n            [`&${selectItemCls}-option-selected`]: {\n              backgroundColor: token.colorBgContainerDisabled\n            },\n            color: token.colorTextDisabled,\n            cursor: 'not-allowed'\n          },\n          '&-grouped': {\n            paddingInlineStart: token.calc(token.controlPaddingHorizontal).mul(2).equal()\n          }\n        },\n        '&-empty': {\n          ...genItemStyle(token),\n          color: token.colorTextDisabled\n        }\n      },\n      // https://github.com/ant-design/ant-design/pull/46646\n      [`${selectedItemCls}:has(+ ${selectedItemCls})`]: {\n        borderEndStartRadius: 0,\n        borderEndEndRadius: 0,\n        [`& + ${selectedItemCls}`]: {\n          borderStartStartRadius: 0,\n          borderStartEndRadius: 0\n        }\n      },\n      // =========================== RTL ===========================\n      '&-rtl': {\n        direction: 'rtl'\n      }\n    }\n  },\n  // Follow code may reuse in other components\n  initSlideMotion(token, 'slide-up'), initSlideMotion(token, 'slide-down'), initMoveMotion(token, 'move-up'), initMoveMotion(token, 'move-down')];\n};\nexport default genSingleStyle;","const genSelectInputCustomizeStyle = token => {\n  const {\n    antCls,\n    componentCls\n  } = token;\n  const transparentBackground = {\n    background: 'transparent'\n  };\n  const disabledCustomizedInputSelector = ['> input[disabled]', '> textarea[disabled]', `> ${componentCls}-input`, `> ${antCls}-input-affix-wrapper-disabled`, `> ${antCls}-input-search`].join(', ');\n  return {\n    [`&${componentCls}-customize`]: {\n      border: 0,\n      padding: 0,\n      fontSize: 'inherit',\n      lineHeight: 'inherit',\n      [`${componentCls}-placeholder`]: {\n        display: 'none'\n      },\n      [`${componentCls}-content`]: {\n        margin: 0,\n        padding: 0,\n        '&-value': {\n          display: 'none'\n        }\n      },\n      [`&${componentCls}-filled ${componentCls}-content`]: {\n        [`${antCls}-input-filled`]: transparentBackground\n      },\n      [`&${componentCls}-disabled ${componentCls}-content`]: {\n        [disabledCustomizedInputSelector]: transparentBackground,\n        'input[disabled], textarea[disabled]': transparentBackground\n      }\n    }\n  };\n};\nexport default genSelectInputCustomizeStyle;","import { resetIcon, textEllipsis } from '../../style';\nimport { genCssVar } from '../../theme/util/genStyleUtils';\nconst FIXED_INPUT_MIN_WIDTH = 4;\nconst genSelectInputMultipleStyle = token => {\n  const {\n    componentCls,\n    calc,\n    iconCls,\n    paddingXS,\n    paddingXXS,\n    INTERNAL_FIXED_ITEM_MARGIN,\n    lineWidth,\n    lineType,\n    colorIcon,\n    colorIconHover,\n    inputPaddingHorizontalBase,\n    antCls\n  } = token;\n  const [varName, varRef] = genCssVar(antCls, 'select');\n  return {\n    '&-multiple': {\n      [varName('multi-item-background')]: token.multipleItemBg,\n      [varName('multi-item-border-color')]: 'transparent',\n      [varName('multi-item-border-radius')]: token.borderRadiusSM,\n      [varName('multi-item-height')]: token.multipleItemHeight,\n      [varName('multi-padding-base')]: `calc((${varRef('height')} - ${varRef('multi-item-height')}) / 2)`,\n      [varName('multi-padding-vertical')]: `calc(${varRef('multi-padding-base')} - ${INTERNAL_FIXED_ITEM_MARGIN} - ${lineWidth})`,\n      [varName('multi-item-padding-horizontal')]: `calc(${inputPaddingHorizontalBase} - ${varRef('multi-padding-vertical')} - ${lineWidth} * 2)`,\n      // ========================================================\n      // ==                        Base                        ==\n      // ========================================================\n      // ========================= Root =========================\n      paddingBlock: varRef('multi-padding-vertical'),\n      paddingInlineStart: `calc(${varRef('multi-padding-base')} - ${lineWidth})`,\n      // ======================== Prefix ========================\n      [`${componentCls}-prefix`]: {\n        marginInlineStart: varRef('multi-item-padding-horizontal')\n      },\n      [`${componentCls}-prefix + ${componentCls}-content`]: {\n        [`${componentCls}-placeholder`]: {\n          insetInlineStart: 0\n        },\n        [`${componentCls}-content-item${componentCls}-content-item-suffix`]: {\n          marginInlineStart: 0\n        }\n      },\n      // ===================== Placeholder ======================\n      [`${componentCls}-placeholder`]: {\n        position: 'absolute',\n        lineHeight: varRef('line-height'),\n        insetInlineStart: varRef('multi-item-padding-horizontal'),\n        width: `calc(100% - ${varRef('multi-item-padding-horizontal')})`,\n        top: '50%',\n        transform: 'translateY(-50%)'\n      },\n      // ======================= Content ========================\n      [`${componentCls}-content`]: {\n        flexWrap: 'wrap',\n        alignItems: 'center',\n        lineHeight: 1,\n        '&-item-prefix': {\n          height: varRef('font-size')\n        },\n        '&-item': {\n          lineHeight: 1,\n          maxWidth: `calc(100% - ${FIXED_INPUT_MIN_WIDTH}px)`\n        },\n        [`${componentCls}-content-item-prefix + ${componentCls}-content-item-suffix,\n          ${componentCls}-content-item-suffix:first-child`]: {\n          marginInlineStart: varRef('multi-item-padding-horizontal')\n        },\n        [`${componentCls}-selection-item`]: {\n          lineHeight: `calc(${varRef('multi-item-height')} - ${lineWidth} * 2)`,\n          border: `${lineWidth} ${lineType} ${varRef('multi-item-border-color')}`,\n          display: 'flex',\n          marginBlock: INTERNAL_FIXED_ITEM_MARGIN,\n          marginInlineEnd: calc(INTERNAL_FIXED_ITEM_MARGIN).mul(2).equal(),\n          background: varRef('multi-item-background'),\n          borderRadius: varRef('multi-item-border-radius'),\n          paddingInlineStart: paddingXS,\n          paddingInlineEnd: paddingXXS,\n          transition: ['height', 'line-height', 'padding'].map(key => `${key} ${token.motionDurationSlow}`).join(','),\n          // >>> Content\n          '&-content': {\n            ...textEllipsis,\n            marginInlineEnd: paddingXXS\n          },\n          // >>> Remove\n          '&-remove': {\n            ...resetIcon(),\n            display: 'inline-flex',\n            alignItems: 'center',\n            color: colorIcon,\n            fontWeight: 'bold',\n            fontSize: 10,\n            lineHeight: 'inherit',\n            cursor: 'pointer',\n            [`> ${iconCls}`]: {\n              verticalAlign: '-0.2em'\n            },\n            '&:hover': {\n              color: colorIconHover\n            }\n          }\n        },\n        [`${componentCls}-input`]: {\n          lineHeight: calc(INTERNAL_FIXED_ITEM_MARGIN).mul(2).add(varRef('multi-item-height')).equal(),\n          width: `calc(var(--select-input-width, 0) * 1px)`,\n          minWidth: FIXED_INPUT_MIN_WIDTH,\n          maxWidth: '100%',\n          transition: `line-height ${token.motionDurationSlow}`\n        }\n      },\n      // ========================================================\n      // ==                        Size                        ==\n      // ========================================================\n      [`&${componentCls}-sm`]: {\n        [varName('multi-item-height')]: token.multipleItemHeightSM,\n        [varName('multi-item-border-radius')]: token.borderRadiusXS\n      },\n      [`&${componentCls}-lg`]: {\n        [varName('multi-item-height')]: token.multipleItemHeightLG,\n        [varName('multi-item-border-radius')]: token.borderRadius\n      },\n      // ========================================================\n      // ==                      Variants                      ==\n      // ========================================================\n      [`&${componentCls}-filled`]: {\n        [varName('multi-item-border-color')]: token.colorSplit,\n        [varName('multi-item-background')]: token.colorBgContainer,\n        [`&${componentCls}-disabled`]: {\n          [varName('multi-item-border-color')]: 'transparent'\n        }\n      }\n    }\n  };\n};\nexport default genSelectInputMultipleStyle;","import { unit } from '@ant-design/cssinjs';\nimport { resetComponent, textEllipsis } from '../../style';\nimport { genCssVar } from '../../theme/util/genStyleUtils';\nimport genSelectInputCustomizeStyle from './select-input-customize';\nimport genSelectInputMultipleStyle from './select-input-multiple';\n/** Set CSS variables and hover/focus styles for a Select input based on provided colors. */\nconst genSelectInputVariableStyle = (token, colors) => {\n  const {\n    componentCls,\n    antCls\n  } = token;\n  const [varName] = genCssVar(antCls, 'select');\n  const {\n    border,\n    borderHover,\n    borderActive,\n    borderOutline\n  } = colors;\n  const baseBG = colors.background || token.selectorBg || token.colorBgContainer;\n  return {\n    [varName('border-color')]: border,\n    [varName('background-color')]: baseBG,\n    [varName('affix-color')]: colors.affixColor,\n    [`&:not(${componentCls}-disabled)`]: {\n      '&:hover': {\n        [varName('border-color')]: borderHover,\n        [varName('background-color')]: colors.backgroundHover || baseBG\n      },\n      [`&${componentCls}-focused`]: {\n        [varName('border-color')]: borderActive,\n        [varName('background-color')]: colors.backgroundActive || baseBG,\n        boxShadow: `0 0 0 ${unit(token.controlOutlineWidth)} ${borderOutline}`\n      }\n    },\n    [`&${componentCls}-disabled`]: {\n      [varName('border-color')]: colors.borderDisabled || colors.border,\n      [varName('background-color')]: colors.backgroundDisabled || colors.background\n    }\n  };\n};\n/** Generate variant-scoped variable styles and status overrides for a Select input */\nconst genSelectInputVariantStyle = (token, variant, colors, errorColors, warningColors, patchStyle) => {\n  const {\n    componentCls\n  } = token;\n  return {\n    [`&${componentCls}-${variant}`]: [genSelectInputVariableStyle(token, colors), {\n      [`&${componentCls}-status-error`]: genSelectInputVariableStyle(token, {\n        ...colors,\n        ...errorColors\n      }),\n      [`&${componentCls}-status-warning`]: genSelectInputVariableStyle(token, {\n        ...colors,\n        ...warningColors\n      })\n    }, patchStyle]\n  };\n};\nconst genSelectInputFocusVisibleStyle = (token, outlineColor) => ({\n  outline: `${unit(token.lineWidthFocus)} ${token.lineType} ${outlineColor}`,\n  outlineOffset: unit(token.calc(token.lineWidth).mul(-1).equal()),\n  transition: [`outline-offset`, `outline`].map(prop => `${prop} 0s`).join(', ')\n});\nconst genSelectInputStyle = token => {\n  const {\n    componentCls,\n    fontHeight,\n    controlHeight,\n    fontSizeIcon,\n    showArrowPaddingInlineEnd,\n    iconCls,\n    antCls,\n    max,\n    calc\n  } = token;\n  const [varName, varRef] = genCssVar(antCls, 'select');\n  const contentMarginInlineEnd = max(calc(showArrowPaddingInlineEnd).sub(fontSizeIcon).equal(), 0);\n  return {\n    [componentCls]: [{\n      // Border\n      [varName('border-radius')]: token.borderRadius,\n      [varName('border-color')]: '#000',\n      [varName('border-size')]: token.lineWidth,\n      // Background\n      [varName('background-color')]: token.colorBgContainer,\n      // Font\n      [varName('font-size')]: token.fontSize,\n      [varName('line-height')]: token.lineHeight,\n      [varName('font-height')]: fontHeight,\n      [varName('color')]: token.colorText,\n      [varName('affix-color')]: token.colorText,\n      // Size\n      [varName('height')]: controlHeight,\n      [varName('padding-horizontal')]: calc(token.paddingSM).sub(token.lineWidth).equal(),\n      [varName('padding-vertical')]: `calc((${varRef('height')} - ${varRef('font-height')}) / 2 - ${varRef('border-size')})`,\n      // ==========================================================\n      // ==                         Base                         ==\n      // ==========================================================\n      ...resetComponent(token),\n      display: 'inline-flex',\n      // gap: calc(token.paddingXXS).mul(1.5).equal(),\n      flexWrap: 'nowrap',\n      position: 'relative',\n      transition: `all ${token.motionDurationSlow}`,\n      alignItems: 'flex-start',\n      outline: 0,\n      cursor: 'pointer',\n      // Border\n      borderRadius: varRef('border-radius'),\n      borderWidth: varRef('border-size'),\n      borderStyle: token.lineType,\n      borderColor: varRef('border-color'),\n      // Background\n      background: varRef('background-color'),\n      // Font\n      fontSize: varRef('font-size'),\n      lineHeight: varRef('line-height'),\n      color: varRef('color'),\n      // Padding\n      paddingInline: varRef('padding-horizontal'),\n      paddingBlock: varRef('padding-vertical'),\n      // ========================= Prefix =========================\n      [`${componentCls}-prefix`]: {\n        color: varRef('affix-color'),\n        flex: 'none',\n        lineHeight: 1\n      },\n      // ====================== Placeholder =======================\n      [`${componentCls}-placeholder`]: {\n        ...textEllipsis,\n        color: token.colorTextPlaceholder,\n        pointerEvents: 'none',\n        zIndex: 1\n      },\n      // ======================== Content =========================\n      [`${componentCls}-content`]: {\n        flex: 'auto',\n        minWidth: 0,\n        position: 'relative',\n        display: 'flex',\n        marginInlineEnd: contentMarginInlineEnd,\n        '&:before': {\n          content: '\"\\\\a0\"',\n          width: 0,\n          overflow: 'hidden'\n        },\n        // >>> Value\n        '&-value': {\n          visibility: 'inherit'\n        },\n        // >>> Input: should only take effect for not customize mode\n        // input element with readOnly use cursor pointer\n        'input[readonly]': {\n          cursor: 'inherit',\n          caretColor: 'transparent'\n        }\n      },\n      // ========================= Suffix =========================\n      [`${componentCls}-suffix`]: {\n        flex: 'none',\n        color: token.colorTextQuaternary,\n        fontSize: token.fontSizeIcon,\n        lineHeight: 1,\n        transition: ['opacity', 'color'].map(prop => `${prop} ${token.motionDurationMid} ease`).join(', '),\n        '> :not(:last-child)': {\n          marginInlineEnd: token.marginXS\n        }\n      },\n      [`${componentCls}-prefix, ${componentCls}-suffix`]: {\n        alignSelf: 'center',\n        [iconCls]: {\n          verticalAlign: 'top'\n        }\n      },\n      // ==========================================================\n      // ==                       Disabled                       ==\n      // ==========================================================\n      '&-disabled': {\n        background: token.colorBgContainerDisabled,\n        [varName('color')]: token.colorTextDisabled,\n        cursor: 'not-allowed',\n        input: {\n          cursor: 'not-allowed'\n        }\n      },\n      // ==========================================================\n      // ==                         Size                         ==\n      // ==========================================================\n      '&-sm': {\n        [varName('height')]: token.controlHeightSM,\n        [varName('padding-horizontal')]: calc(token.paddingXS).sub(token.lineWidth).equal(),\n        [varName('border-radius')]: token.borderRadiusSM,\n        [`${componentCls}-clear`]: {\n          insetInlineEnd: varRef('padding-horizontal')\n        }\n      },\n      '&-lg': {\n        [varName('height')]: token.controlHeightLG,\n        [varName('font-size')]: token.fontSizeLG,\n        [varName('line-height')]: token.lineHeightLG,\n        [varName('font-height')]: token.fontHeightLG,\n        [varName('border-radius')]: token.borderRadiusLG\n      }\n    },\n    // ============================================================\n    // ==                         Input                          ==\n    // ============================================================\n    {\n      [`&:not(${componentCls}-customize)`]: {\n        [`${componentCls}-input`]: {\n          outline: 'none',\n          background: 'transparent',\n          appearance: 'none',\n          border: 0,\n          margin: 0,\n          padding: 0,\n          color: varRef('color'),\n          fontFamily: 'inherit',\n          fontSize: 'inherit',\n          '&::-webkit-search-cancel-button': {\n            display: 'none',\n            appearance: 'none'\n          }\n        }\n      }\n    },\n    // ============================================================\n    // ==                         Single                         ==\n    // ============================================================\n    {\n      [`&-single:not(${componentCls}-customize)`]: {\n        [`${componentCls}-input`]: {\n          position: 'absolute',\n          inset: 0,\n          lineHeight: 'inherit'\n        },\n        // Content center align\n        [`${componentCls}-content`]: {\n          ...textEllipsis,\n          alignSelf: 'center',\n          '&-has-value': {\n            display: 'block',\n            '&:before': {\n              display: 'none'\n            }\n          },\n          '&-has-search-value': {\n            color: 'transparent',\n            [`> *:not(${componentCls}-input)`]: {\n              opacity: 0\n            }\n          },\n          // >>> Value\n          '&-value': {\n            transition: `all ${token.motionDurationMid} ${token.motionEaseInOut}`,\n            zIndex: 1,\n            opacity: 1\n          }\n        },\n        // Dim the selected content while the dropdown is open. Shared by all select-like\n        // components (Select / Cascader / TreeSelect) since they render through the same\n        // `content` structure.\n        [`&${componentCls}-open ${componentCls}-content`]: {\n          '&-has-value': {\n            opacity: 0.25\n          },\n          '&-has-search-value': {\n            opacity: 1,\n            transition: `opacity ${token.motionDurationMid} ${token.motionEaseInOut}`,\n            color: 'transparent',\n            [`> *:not(${componentCls}-input)`]: {\n              opacity: 0\n            }\n          }\n        }\n      }\n    },\n    // ======================== Show Search =======================\n    {\n      [`&-show-search:not(${componentCls}-customize-input):not(${componentCls}-disabled)`]: {\n        cursor: 'text'\n      }\n    },\n    // ============================================================\n    // ==                        Multiple                        ==\n    // ============================================================\n    genSelectInputMultipleStyle(token),\n    // ========================= Variant ==========================\n    // >>> Outlined\n    genSelectInputVariantStyle(token, 'outlined', {\n      border: token.colorBorder,\n      borderHover: token.hoverBorderColor,\n      borderActive: token.activeBorderColor,\n      borderOutline: token.activeOutlineColor,\n      borderDisabled: token.colorBorderDisabled\n    },\n    // Error\n    {\n      border: token.colorError,\n      borderHover: token.colorErrorBorderHover,\n      borderActive: token.colorError,\n      borderOutline: token.colorErrorOutline,\n      affixColor: token.colorErrorAffix\n    },\n    // Warning\n    {\n      border: token.colorWarning,\n      borderHover: token.colorWarningHover,\n      borderActive: token.colorWarning,\n      borderOutline: token.colorWarningOutline,\n      affixColor: token.colorWarningAffix\n    }),\n    // >>> Filled\n    genSelectInputVariantStyle(token, 'filled', {\n      border: 'transparent',\n      borderHover: 'transparent',\n      borderActive: token.activeBorderColor,\n      borderOutline: 'transparent',\n      borderDisabled: token.colorBorderDisabled,\n      background: token.colorFillTertiary,\n      backgroundHover: token.colorFillSecondary,\n      backgroundActive: token.colorBgContainer\n    },\n    // Error\n    {\n      color: token.colorErrorText,\n      background: token.colorErrorBg,\n      backgroundHover: token.colorErrorBgHover,\n      borderActive: token.colorError\n    },\n    // Warning\n    {\n      background: token.colorWarningBg,\n      backgroundHover: token.colorWarningBgHover,\n      borderActive: token.colorWarning\n    }),\n    // >>> Borderless\n    genSelectInputVariantStyle(token, 'borderless', {\n      border: 'transparent',\n      borderHover: 'transparent',\n      borderActive: 'transparent',\n      borderOutline: 'transparent',\n      background: 'transparent'\n    }, {}, {}, {\n      [`&:not(${componentCls}-disabled):has(input:focus-visible), &:not(${componentCls}-disabled):has(textarea:focus-visible)`]: genSelectInputFocusVisibleStyle(token, token.activeBorderColor),\n      [`&${componentCls}-status-error:not(${componentCls}-disabled):has(input:focus-visible), &${componentCls}-status-error:not(${componentCls}-disabled):has(textarea:focus-visible)`]: genSelectInputFocusVisibleStyle(token, token.colorError),\n      [`&${componentCls}-status-warning:not(${componentCls}-disabled):has(input:focus-visible), &${componentCls}-status-warning:not(${componentCls}-disabled):has(textarea:focus-visible)`]: genSelectInputFocusVisibleStyle(token, token.colorWarning)\n    }),\n    // Underlined\n    genSelectInputVariantStyle(token, 'underlined', {\n      border: token.colorBorder,\n      borderHover: token.hoverBorderColor,\n      borderActive: token.activeBorderColor,\n      borderOutline: 'transparent'\n    },\n    // Error\n    {\n      border: token.colorError,\n      borderHover: token.colorErrorBorderHover,\n      borderActive: token.colorError\n    },\n    // Warning\n    {\n      border: token.colorWarning,\n      borderHover: token.colorWarningHover,\n      borderActive: token.colorWarning\n    }, {\n      borderRadius: 0,\n      borderTopColor: 'transparent',\n      borderInlineColor: 'transparent'\n    }),\n    // ============================================================\n    // ==                         Custom                         ==\n    // ============================================================\n    genSelectInputCustomizeStyle(token)]\n  };\n};\nexport default genSelectInputStyle;","export const prepareComponentToken = token => {\n  const {\n    fontSize,\n    lineHeight,\n    lineWidth,\n    lineWidthFocus,\n    controlHeight,\n    controlHeightSM,\n    controlHeightLG,\n    paddingXXS,\n    controlPaddingHorizontal,\n    zIndexPopupBase,\n    colorText,\n    fontWeightStrong,\n    controlItemBgActive,\n    controlItemBgHover,\n    colorBgContainer,\n    colorFillSecondary,\n    colorBgContainerDisabled,\n    colorTextDisabled,\n    colorPrimaryHover,\n    colorPrimary,\n    controlOutline\n  } = token;\n  // Item height default use `controlHeight - 2 * paddingXXS`,\n  // but some case `paddingXXS=0`.\n  // Let's fallback it.\n  const dblPaddingXXS = paddingXXS * 2;\n  const dblLineWidth = lineWidth * 2;\n  const multipleItemHeight = Math.min(controlHeight - dblPaddingXXS, controlHeight - dblLineWidth);\n  const multipleItemHeightSM = Math.min(controlHeightSM - dblPaddingXXS, controlHeightSM - dblLineWidth);\n  const multipleItemHeightLG = Math.min(controlHeightLG - dblPaddingXXS, controlHeightLG - dblLineWidth);\n  // FIXED_ITEM_MARGIN is a hardcode calculation since calc not support rounding\n  const INTERNAL_FIXED_ITEM_MARGIN = Math.floor(paddingXXS / 2);\n  const componentToken = {\n    lineWidthFocus: lineWidthFocus === 0 ? 0 : lineWidth,\n    INTERNAL_FIXED_ITEM_MARGIN,\n    zIndexPopup: zIndexPopupBase + 50,\n    optionSelectedColor: colorText,\n    optionSelectedFontWeight: fontWeightStrong,\n    optionSelectedBg: controlItemBgActive,\n    optionActiveBg: controlItemBgHover,\n    optionPadding: `${(controlHeight - fontSize * lineHeight) / 2}px ${controlPaddingHorizontal}px`,\n    optionFontSize: fontSize,\n    optionLineHeight: lineHeight,\n    optionHeight: controlHeight,\n    selectorBg: colorBgContainer,\n    clearBg: colorBgContainer,\n    singleItemHeightLG: controlHeightLG,\n    multipleItemBg: colorFillSecondary,\n    multipleItemBorderColor: 'transparent',\n    multipleItemHeight,\n    multipleItemHeightSM,\n    multipleItemHeightLG,\n    multipleSelectorBgDisabled: colorBgContainerDisabled,\n    multipleItemColorDisabled: colorTextDisabled,\n    multipleItemBorderColorDisabled: 'transparent',\n    showArrowPaddingInlineEnd: Math.ceil(token.fontSize * 1.25),\n    hoverBorderColor: colorPrimaryHover,\n    activeBorderColor: colorPrimary,\n    activeOutlineColor: controlOutline,\n    selectAffixPadding: paddingXXS\n  };\n  return componentToken;\n};","import { resetComponent, textEllipsis } from '../../style';\nimport { genCompactItemStyle } from '../../style/compact-item';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\nimport genDropdownStyle from './dropdown';\nimport genSelectInputStyle from './select-input';\nimport { prepareComponentToken } from './token';\n// =============================== Base ===============================\nconst genBaseStyle = token => {\n  const {\n    antCls,\n    componentCls,\n    motionDurationMid,\n    inputPaddingHorizontalBase\n  } = token;\n  const hoverShowClearStyle = {\n    [`${componentCls}-clear`]: {\n      opacity: 1\n    },\n    [`${componentCls}-suffix:not(:last-child)`]: {\n      opacity: 0,\n      pointerEvents: 'none'\n    },\n    [`&${componentCls}-allow-clear:not(${componentCls}-show-arrow):not(${componentCls}-customize) ${componentCls}-content`]: {\n      marginInlineEnd: token.showArrowPaddingInlineEnd\n    }\n  };\n  return {\n    [componentCls]: {\n      ...resetComponent(token),\n      // ======================== Selection ========================\n      [`${componentCls}-selection-item`]: {\n        flex: 1,\n        fontWeight: 'normal',\n        position: 'relative',\n        userSelect: 'none',\n        ...textEllipsis,\n        // https://github.com/ant-design/ant-design/issues/40421\n        [`> ${antCls}-typography`]: {\n          display: 'inline'\n        }\n      },\n      // ========================= Prefix ==========================\n      [`${componentCls}-prefix`]: {\n        flex: 'none',\n        marginInlineEnd: token.selectAffixPadding\n      },\n      // ========================== Clear ==========================\n      [`${componentCls}-clear`]: {\n        position: 'absolute',\n        top: '50%',\n        insetInlineStart: 'auto',\n        insetInlineEnd: inputPaddingHorizontalBase,\n        zIndex: 1,\n        display: 'inline-block',\n        width: token.fontSizeIcon,\n        height: token.fontSizeIcon,\n        marginTop: token.calc(token.fontSizeIcon).mul(-1).div(2).equal(),\n        padding: 0,\n        background: 'transparent',\n        color: token.colorTextQuaternary,\n        fontSize: token.fontSizeIcon,\n        fontFamily: 'inherit',\n        fontStyle: 'normal',\n        lineHeight: 1,\n        textAlign: 'center',\n        textTransform: 'none',\n        appearance: 'none',\n        border: 0,\n        cursor: 'pointer',\n        opacity: 0,\n        transition: ['color', 'opacity'].map(prop => `${prop} ${motionDurationMid} ease`).join(', '),\n        textRendering: 'auto',\n        // https://github.com/ant-design/ant-design/issues/54205\n        // Force GPU compositing on Safari to prevent flickering on opacity/transform transitions\n        transform: 'translateZ(0)',\n        '&:before': {\n          display: 'block'\n        },\n        '&:hover': {\n          color: token.colorIcon\n        }\n      },\n      '@media(hover:none)': hoverShowClearStyle,\n      '&:hover': hoverShowClearStyle\n    },\n    // ========================= Feedback ==========================\n    [`${componentCls}-status`]: {\n      '&-error, &-warning, &-success, &-validating': {\n        [`&${componentCls}-has-feedback`]: {\n          [`${componentCls}-clear`]: {\n            insetInlineEnd: token.calc(inputPaddingHorizontalBase).add(token.fontSize).add(token.paddingXS).equal()\n          }\n        }\n      }\n    }\n  };\n};\n// ============================== Styles ==============================\nconst genSelectStyle = token => {\n  const {\n    componentCls\n  } = token;\n  return [{\n    [componentCls]: {\n      // ==================== In Form ====================\n      [`&${componentCls}-in-form-item`]: {\n        width: '100%'\n      }\n    }\n  },\n  // =====================================================\n  // ==                       LTR                       ==\n  // =====================================================\n  // Base\n  genBaseStyle(token),\n  // Dropdown\n  genDropdownStyle(token),\n  // =====================================================\n  // ==                       RTL                       ==\n  // =====================================================\n  {\n    [`${componentCls}-rtl`]: {\n      direction: 'rtl'\n    }\n  },\n  // =====================================================\n  // ==             Space Compact                       ==\n  // =====================================================\n  genCompactItemStyle(token, {\n    focusElCls: `${componentCls}-focused`\n  })];\n};\n// ============================== Export ==============================\nexport default genStyleHooks('Select', (token, {\n  rootPrefixCls\n}) => {\n  const selectToken = mergeToken(token, {\n    rootPrefixCls,\n    inputPaddingHorizontalBase: token.calc(token.paddingSM).sub(token.lineWidth).equal(),\n    multipleSelectItemHeight: token.multipleItemHeight,\n    selectHeight: token.controlHeight\n  });\n  return [genSelectStyle(selectToken), genSelectInputStyle(selectToken)];\n}, prepareComponentToken, {\n  unitless: {\n    optionLineHeight: true,\n    optionSelectedFontWeight: true\n  }\n});","// This icon file is generated automatically.\nvar CheckOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 00-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z\" } }] }, \"name\": \"check\", \"theme\": \"outlined\" };\nexport default CheckOutlined;\n","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n// GENERATED BY ./scripts/generate.ts\n// DO NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport CheckOutlinedSvg from \"@ant-design/icons-svg/es/asn/CheckOutlined\";\nimport AntdIcon from \"../components/AntdIconLight\";\nconst CheckOutlined = (props, ref) => /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n  ref: ref,\n  icon: CheckOutlinedSvg\n}));\n\n/**![check](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTkxMiAxOTBoLTY5LjljLTkuOCAwLTE5LjEgNC41LTI1LjEgMTIuMkw0MDQuNyA3MjQuNSAyMDcgNDc0YTMyIDMyIDAgMDAtMjUuMS0xMi4ySDExMmMtNi43IDAtMTAuNCA3LjctNi4zIDEyLjlsMjczLjkgMzQ3YzEyLjggMTYuMiAzNy40IDE2LjIgNTAuMyAwbDQ4OC40LTYxOC45YzQuMS01LjEuNC0xMi44LTYuMy0xMi44eiIgLz48L3N2Zz4=) */\nconst RefIcon = /*#__PURE__*/React.forwardRef(CheckOutlined);\nif (process.env.NODE_ENV !== 'production') {\n  RefIcon.displayName = 'CheckOutlined';\n}\nexport default RefIcon;","// This icon file is generated automatically.\nvar DownOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z\" } }] }, \"name\": \"down\", \"theme\": \"outlined\" };\nexport default DownOutlined;\n","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n// GENERATED BY ./scripts/generate.ts\n// DO NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport DownOutlinedSvg from \"@ant-design/icons-svg/es/asn/DownOutlined\";\nimport AntdIcon from \"../components/AntdIconLight\";\nconst DownOutlined = (props, ref) => /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n  ref: ref,\n  icon: DownOutlinedSvg\n}));\n\n/**![down](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTg4NCAyNTZoLTc1Yy01LjEgMC05LjkgMi41LTEyLjkgNi42TDUxMiA2NTQuMiAyMjcuOSAyNjIuNmMtMy00LjEtNy44LTYuNi0xMi45LTYuNmgtNzVjLTYuNSAwLTEwLjMgNy40LTYuNSAxMi43bDM1Mi42IDQ4Ni4xYzEyLjggMTcuNiAzOSAxNy42IDUxLjcgMGwzNTIuNi00ODYuMWMzLjktNS4zLjEtMTIuNy02LjQtMTIuN3oiIC8+PC9zdmc+) */\nconst RefIcon = /*#__PURE__*/React.forwardRef(DownOutlined);\nif (process.env.NODE_ENV !== 'production') {\n  RefIcon.displayName = 'DownOutlined';\n}\nexport default RefIcon;","// This icon file is generated automatically.\nvar LoadingOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"0 0 1024 1024\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z\" } }] }, \"name\": \"loading\", \"theme\": \"outlined\" };\nexport default LoadingOutlined;\n","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n// GENERATED BY ./scripts/generate.ts\n// DO NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport LoadingOutlinedSvg from \"@ant-design/icons-svg/es/asn/LoadingOutlined\";\nimport AntdIcon from \"../components/AntdIconLight\";\nconst LoadingOutlined = (props, ref) => /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n  ref: ref,\n  icon: LoadingOutlinedSvg\n}));\n\n/**![loading](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjAgMCAxMDI0IDEwMjQiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTk4OCA1NDhjLTE5LjkgMC0zNi0xNi4xLTM2LTM2IDAtNTkuNC0xMS42LTExNy0zNC42LTE3MS4zYTQ0MC40NSA0NDAuNDUgMCAwMC05NC4zLTEzOS45IDQzNy43MSA0MzcuNzEgMCAwMC0xMzkuOS05NC4zQzYyOSA4My42IDU3MS40IDcyIDUxMiA3MmMtMTkuOSAwLTM2LTE2LjEtMzYtMzZzMTYuMS0zNiAzNi0zNmM2OS4xIDAgMTM2LjIgMTMuNSAxOTkuMyA0MC4zQzc3Mi4zIDY2IDgyNyAxMDMgODc0IDE1MGM0NyA0NyA4My45IDEwMS44IDEwOS43IDE2Mi43IDI2LjcgNjMuMSA0MC4yIDEzMC4yIDQwLjIgMTk5LjMuMSAxOS45LTE2IDM2LTM1LjkgMzZ6IiAvPjwvc3ZnPg==) */\nconst RefIcon = /*#__PURE__*/React.forwardRef(LoadingOutlined);\nif (process.env.NODE_ENV !== 'production') {\n  RefIcon.displayName = 'LoadingOutlined';\n}\nexport default RefIcon;","// This icon file is generated automatically.\nvar SearchOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M909.6 854.5L649.9 594.8C690.2 542.7 712 479 712 412c0-80.2-31.3-155.4-87.9-212.1-56.6-56.7-132-87.9-212.1-87.9s-155.5 31.3-212.1 87.9C143.2 256.5 112 331.8 112 412c0 80.1 31.3 155.5 87.9 212.1C256.5 680.8 331.8 712 412 712c67 0 130.6-21.8 182.7-62l259.7 259.6a8.2 8.2 0 0011.6 0l43.6-43.5a8.2 8.2 0 000-11.6zM570.4 570.4C528 612.7 471.8 636 412 636s-116-23.3-158.4-65.6C211.3 528 188 471.8 188 412s23.3-116.1 65.6-158.4C296 211.3 352.2 188 412 188s116.1 23.2 158.4 65.6S636 352.2 636 412s-23.3 116.1-65.6 158.4z\" } }] }, \"name\": \"search\", \"theme\": \"outlined\" };\nexport default SearchOutlined;\n","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n// GENERATED BY ./scripts/generate.ts\n// DO NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport SearchOutlinedSvg from \"@ant-design/icons-svg/es/asn/SearchOutlined\";\nimport AntdIcon from \"../components/AntdIconLight\";\nconst SearchOutlined = (props, ref) => /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n  ref: ref,\n  icon: SearchOutlinedSvg\n}));\n\n/**![search](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTkwOS42IDg1NC41TDY0OS45IDU5NC44QzY5MC4yIDU0Mi43IDcxMiA0NzkgNzEyIDQxMmMwLTgwLjItMzEuMy0xNTUuNC04Ny45LTIxMi4xLTU2LjYtNTYuNy0xMzItODcuOS0yMTIuMS04Ny45cy0xNTUuNSAzMS4zLTIxMi4xIDg3LjlDMTQzLjIgMjU2LjUgMTEyIDMzMS44IDExMiA0MTJjMCA4MC4xIDMxLjMgMTU1LjUgODcuOSAyMTIuMUMyNTYuNSA2ODAuOCAzMzEuOCA3MTIgNDEyIDcxMmM2NyAwIDEzMC42LTIxLjggMTgyLjctNjJsMjU5LjcgMjU5LjZhOC4yIDguMiAwIDAwMTEuNiAwbDQzLjYtNDMuNWE4LjIgOC4yIDAgMDAwLTExLjZ6TTU3MC40IDU3MC40QzUyOCA2MTIuNyA0NzEuOCA2MzYgNDEyIDYzNnMtMTE2LTIzLjMtMTU4LjQtNjUuNkMyMTEuMyA1MjggMTg4IDQ3MS44IDE4OCA0MTJzMjMuMy0xMTYuMSA2NS42LTE1OC40QzI5NiAyMTEuMyAzNTIuMiAxODggNDEyIDE4OHMxMTYuMSAyMy4yIDE1OC40IDY1LjZTNjM2IDM1Mi4yIDYzNiA0MTJzLTIzLjMgMTE2LjEtNjUuNiAxNTguNHoiIC8+PC9zdmc+) */\nconst RefIcon = /*#__PURE__*/React.forwardRef(SearchOutlined);\nif (process.env.NODE_ENV !== 'production') {\n  RefIcon.displayName = 'SearchOutlined';\n}\nexport default RefIcon;","\"use client\";\n\nimport * as React from 'react';\nimport CheckOutlined from \"@ant-design/icons/es/icons/CheckOutlined\";\nimport CloseCircleFilled from \"@ant-design/icons/es/icons/CloseCircleFilled\";\nimport CloseOutlined from \"@ant-design/icons/es/icons/CloseOutlined\";\nimport DownOutlined from \"@ant-design/icons/es/icons/DownOutlined\";\nimport LoadingOutlined from \"@ant-design/icons/es/icons/LoadingOutlined\";\nimport SearchOutlined from \"@ant-design/icons/es/icons/SearchOutlined\";\nimport fallbackProp from '../_util/fallbackProp';\nimport { devUseWarning } from '../_util/warning';\nexport default function useIcons({\n  suffixIcon,\n  contextSuffixIcon,\n  clearIcon,\n  contextClearIcon,\n  menuItemSelectedIcon,\n  contextMenuItemSelectedIcon,\n  removeIcon,\n  contextRemoveIcon,\n  loading,\n  loadingIcon,\n  contextLoadingIcon,\n  searchIcon,\n  contextSearchIcon,\n  multiple,\n  hasFeedback,\n  showSuffixIcon,\n  feedbackIcon,\n  showArrow,\n  componentName\n}) {\n  if (process.env.NODE_ENV !== 'production') {\n    const warning = devUseWarning(componentName);\n    warning.deprecated(!clearIcon, 'clearIcon', 'allowClear={{ clearIcon: React.ReactNode }}');\n  }\n  return React.useMemo(() => {\n    // Clear Icon\n    const mergedClearIcon = fallbackProp(clearIcon, contextClearIcon, /*#__PURE__*/React.createElement(CloseCircleFilled, null));\n    // Validation Feedback Icon\n    const getSuffixIconNode = arrowIcon => {\n      if (suffixIcon === null && !hasFeedback && !showArrow) {\n        return null;\n      }\n      return /*#__PURE__*/React.createElement(React.Fragment, null, showSuffixIcon !== false && arrowIcon, hasFeedback && feedbackIcon);\n    };\n    // Arrow item icon\n    let mergedSuffixIcon = null;\n    if (suffixIcon !== undefined) {\n      mergedSuffixIcon = getSuffixIconNode(suffixIcon);\n    } else if (loading) {\n      mergedSuffixIcon = getSuffixIconNode(fallbackProp(loadingIcon, contextLoadingIcon, /*#__PURE__*/React.createElement(LoadingOutlined, {\n        spin: true\n      })));\n    } else {\n      mergedSuffixIcon = ({\n        open,\n        showSearch\n      }) => {\n        if (open && showSearch) {\n          return getSuffixIconNode(fallbackProp(searchIcon, contextSearchIcon, /*#__PURE__*/React.createElement(SearchOutlined, null)));\n        }\n        return getSuffixIconNode(fallbackProp(contextSuffixIcon, /*#__PURE__*/React.createElement(DownOutlined, null)));\n      };\n    }\n    // Checked item icon\n    const mergedItemIcon = fallbackProp(menuItemSelectedIcon, contextMenuItemSelectedIcon, multiple ? /*#__PURE__*/React.createElement(CheckOutlined, null) : null);\n    const mergedRemoveIcon = fallbackProp(removeIcon, contextRemoveIcon, /*#__PURE__*/React.createElement(CloseOutlined, null));\n    return {\n      clearIcon: mergedClearIcon,\n      suffixIcon: mergedSuffixIcon,\n      itemIcon: mergedItemIcon,\n      removeIcon: mergedRemoveIcon\n    };\n  }, [suffixIcon, contextSuffixIcon, clearIcon, contextClearIcon, menuItemSelectedIcon, contextMenuItemSelectedIcon, removeIcon, contextRemoveIcon, loading, loadingIcon, contextLoadingIcon, searchIcon, contextSearchIcon, multiple, hasFeedback, showSuffixIcon, feedbackIcon, showArrow]);\n}","\"use client\";\n\nimport React from 'react';\nimport { isReactRenderable } from '@rc-component/util';\nimport { NoFormStyle } from '../form/context';\nimport { NoCompactStyle } from '../space/Compact';\nconst ContextIsolator = props => {\n  const {\n    space,\n    form,\n    children\n  } = props;\n  if (!isReactRenderable(children)) {\n    return null;\n  }\n  let result = children;\n  if (form) {\n    result = /*#__PURE__*/React.createElement(NoFormStyle, {\n      override: true,\n      status: true\n    }, result);\n  }\n  if (space) {\n    result = /*#__PURE__*/React.createElement(NoCompactStyle, null, result);\n  }\n  return result;\n};\nexport default ContextIsolator;","\"use client\";\n\nimport React from 'react';\nimport ContextIsolator from '../_util/ContextIsolator';\nfunction usePopupRender(renderFn) {\n  return React.useMemo(() => {\n    if (!renderFn) {\n      return undefined;\n    }\n    return (...args) => /*#__PURE__*/React.createElement(ContextIsolator, {\n      space: true\n    }, renderFn.apply(void 0, args));\n  }, [renderFn]);\n}\nexport default usePopupRender;","/**\n * Since Select, TreeSelect, Cascader is same Select like component.\n * We just use same hook to handle this logic.\n *\n * If `suffixIcon` is not equal to `null`, always show it.\n */\nexport default function useShowArrow(suffixIcon, showArrow) {\n  return showArrow !== undefined ? showArrow : suffixIcon !== null;\n}","\"use client\";\n\n// TODO: 4.0 - codemod should help to change `filterOption` to support node props.\nimport * as React from 'react';\nimport RcSelect, { OptGroup, Option } from '@rc-component/select';\nimport { omit } from '@rc-component/util';\nimport { clsx } from 'clsx';\nimport { useZIndex } from '../_util/hooks';\nimport { useMergeSemantic, useSemanticRootStyle } from '../_util/hooks/useMergeSemantic';\nimport { getTransitionName } from '../_util/motion';\nimport normalizeIcon from '../_util/normalizeIcon';\nimport genPurePanel from '../_util/PurePanel';\nimport { getMergedStatus, getStatusClassNames } from '../_util/statusUtils';\nimport { devUseWarning } from '../_util/warning';\nimport { ConfigContext } from '../config-provider';\nimport { useComponentConfig } from '../config-provider/context';\nimport DefaultRenderEmpty from '../config-provider/defaultRenderEmpty';\nimport DisabledContext from '../config-provider/DisabledContext';\nimport useCSSVarCls from '../config-provider/hooks/useCSSVarCls';\nimport useSize from '../config-provider/hooks/useSize';\nimport { FormItemInputContext } from '../form/context';\nimport useVariants from '../form/hooks/useVariants';\nimport { useCompactItemContext } from '../space/Compact';\nimport { useToken } from '../theme/internal';\nimport mergedBuiltinPlacements from './mergedBuiltinPlacements';\nimport useStyle from './style';\nimport useIcons from './useIcons';\nimport usePopupRender from './usePopupRender';\nimport useShowArrow from './useShowArrow';\nconst SECRET_COMBOBOX_MODE_DO_NOT_USE = 'SECRET_COMBOBOX_MODE_DO_NOT_USE';\nconst InternalSelect = (props, ref) => {\n  const {\n    prefixCls: customizePrefixCls,\n    bordered,\n    className,\n    rootClassName,\n    getPopupContainer,\n    popupClassName,\n    dropdownClassName,\n    listHeight = 256,\n    placement,\n    listItemHeight: customListItemHeight,\n    size: customizeSize,\n    disabled: customDisabled,\n    notFoundContent,\n    status: customStatus,\n    builtinPlacements,\n    dropdownMatchSelectWidth,\n    popupMatchSelectWidth,\n    direction: propDirection,\n    style,\n    allowClear,\n    variant: customizeVariant,\n    popupStyle,\n    dropdownStyle,\n    transitionName,\n    tagRender,\n    maxCount,\n    prefix,\n    dropdownRender,\n    /**\n     * @since 5.25.0\n     */\n    popupRender,\n    onDropdownVisibleChange,\n    onOpenChange,\n    styles,\n    classNames,\n    clearIcon,\n    showSearch,\n    ...rest\n  } = props;\n  const {\n    getPopupContainer: getContextPopupContainer,\n    getPrefixCls,\n    renderEmpty,\n    direction: contextDirection,\n    virtual,\n    popupMatchSelectWidth: contextPopupMatchSelectWidth,\n    popupOverflow\n  } = React.useContext(ConfigContext);\n  const {\n    showSearch: contextShowSearch,\n    allowClear: contextAllowClear,\n    style: contextStyle,\n    styles: contextStyles,\n    className: contextClassName,\n    classNames: contextClassNames,\n    clearIcon: contextClearIcon,\n    loadingIcon: contextLoadingIcon,\n    menuItemSelectedIcon: contextMenuItemSelectedIcon,\n    removeIcon: contextRemoveIcon,\n    suffixIcon: contextSuffixIcon\n  } = useComponentConfig('select');\n  const [, token] = useToken();\n  const listItemHeight = customListItemHeight ?? token?.controlHeight;\n  const prefixCls = getPrefixCls('select', customizePrefixCls);\n  const rootPrefixCls = getPrefixCls();\n  const direction = propDirection ?? contextDirection;\n  const {\n    compactSize,\n    compactItemClassnames\n  } = useCompactItemContext(prefixCls, direction);\n  const [variant, enableVariantCls] = useVariants('select', customizeVariant, bordered);\n  const rootCls = useCSSVarCls(prefixCls);\n  const [hashId, cssVarCls] = useStyle(prefixCls, rootCls);\n  const mode = React.useMemo(() => {\n    const {\n      mode: m\n    } = props;\n    if (m === 'combobox') {\n      return undefined;\n    }\n    if (m === SECRET_COMBOBOX_MODE_DO_NOT_USE) {\n      return 'combobox';\n    }\n    return m;\n  }, [props.mode]);\n  const isMultiple = mode === 'multiple' || mode === 'tags';\n  const showSuffixIcon = useShowArrow(props.suffixIcon, props.showArrow);\n  const mergedPopupMatchSelectWidth = popupMatchSelectWidth ?? dropdownMatchSelectWidth ?? contextPopupMatchSelectWidth;\n  const mergedPopupRender = usePopupRender(popupRender || dropdownRender);\n  const mergedOnOpenChange = onOpenChange || onDropdownVisibleChange;\n  // ===================== Form Status =====================\n  const {\n    status: contextStatus,\n    hasFeedback,\n    isFormItemInput,\n    feedbackIcon\n  } = React.useContext(FormItemInputContext);\n  const mergedStatus = getMergedStatus(contextStatus, customStatus);\n  // ===================== Empty =====================\n  let mergedNotFound;\n  if (notFoundContent !== undefined) {\n    mergedNotFound = notFoundContent;\n  } else if (mode === 'combobox') {\n    mergedNotFound = null;\n  } else {\n    mergedNotFound = renderEmpty?.('Select') || /*#__PURE__*/React.createElement(DefaultRenderEmpty, {\n      componentName: \"Select\"\n    });\n  }\n  // ===================== Icons =====================\n  const {\n    suffixIcon,\n    itemIcon,\n    removeIcon,\n    clearIcon: mergedClearIcon\n  } = useIcons({\n    ...rest,\n    multiple: isMultiple,\n    hasFeedback,\n    feedbackIcon,\n    showSuffixIcon,\n    prefixCls,\n    componentName: 'Select',\n    clearIcon,\n    searchIcon: normalizeIcon(showSearch, 'searchIcon'),\n    contextClearIcon,\n    contextLoadingIcon,\n    contextMenuItemSelectedIcon,\n    contextRemoveIcon,\n    contextSearchIcon: normalizeIcon(contextShowSearch, 'searchIcon'),\n    contextSuffixIcon\n  });\n  const finalAllowClear = allowClear ?? contextAllowClear;\n  const mergedAllowClear = finalAllowClear === true ? {\n    clearIcon: mergedClearIcon\n  } : finalAllowClear;\n  const mergedShowSearch = showSearch ?? contextShowSearch;\n  const selectProps = omit(rest, ['suffixIcon', 'itemIcon']);\n  const mergedSize = useSize(ctx => customizeSize ?? compactSize ?? ctx);\n  // ===================== Disabled =====================\n  const disabled = React.useContext(DisabledContext);\n  const mergedDisabled = customDisabled ?? disabled;\n  // ========== Merged Props for Semantic ==================\n  const mergedProps = {\n    ...props,\n    variant,\n    status: mergedStatus,\n    disabled: mergedDisabled,\n    size: mergedSize\n  };\n  const contextStyleRoot = useSemanticRootStyle(contextStyle);\n  const styleRoot = useSemanticRootStyle(style);\n  const [mergedClassNames, mergedStyles] = useMergeSemantic([contextClassNames, classNames], [contextStyles, contextStyleRoot, styles, styleRoot], {\n    props: mergedProps\n  }, {\n    popup: {\n      _default: 'root'\n    }\n  });\n  const mergedPopupClassName = clsx(mergedClassNames.popup.root, popupClassName, dropdownClassName, {\n    [`${prefixCls}-dropdown-${direction}`]: direction === 'rtl'\n  }, rootClassName, cssVarCls, rootCls, hashId);\n  const mergedPopupStyle = {\n    ...mergedStyles.popup?.root,\n    ...(popupStyle ?? dropdownStyle)\n  };\n  const mergedClassName = clsx({\n    [`${prefixCls}-lg`]: mergedSize === 'large',\n    [`${prefixCls}-sm`]: mergedSize === 'small',\n    [`${prefixCls}-rtl`]: direction === 'rtl',\n    [`${prefixCls}-${variant}`]: enableVariantCls,\n    [`${prefixCls}-in-form-item`]: isFormItemInput\n  }, getStatusClassNames(prefixCls, mergedStatus, hasFeedback), compactItemClassnames, contextClassName, className, mergedClassNames.root, rootClassName, cssVarCls, rootCls, hashId);\n  // ===================== Placement =====================\n  const memoPlacement = React.useMemo(() => {\n    if (placement !== undefined) {\n      return placement;\n    }\n    return direction === 'rtl' ? 'bottomRight' : 'bottomLeft';\n  }, [placement, direction]);\n  // ====================== Warning ======================\n  if (process.env.NODE_ENV !== 'production') {\n    const warning = devUseWarning('Select');\n    const deprecatedProps = {\n      dropdownMatchSelectWidth: 'popupMatchSelectWidth',\n      dropdownStyle: 'styles.popup.root',\n      dropdownClassName: 'classNames.popup.root',\n      popupClassName: 'classNames.popup.root',\n      dropdownRender: 'popupRender',\n      onDropdownVisibleChange: 'onOpenChange',\n      bordered: 'variant'\n    };\n    Object.entries(deprecatedProps).forEach(([oldProp, newProp]) => {\n      warning.deprecated(!(oldProp in props), oldProp, newProp);\n    });\n    process.env.NODE_ENV !== \"production\" ? warning(!('showArrow' in props), 'deprecated', '`showArrow` is deprecated which will be removed in next major version. It will be a default behavior, you can hide it by setting `suffixIcon` to null.') : void 0;\n    process.env.NODE_ENV !== \"production\" ? warning(!(typeof maxCount !== 'undefined' && !isMultiple), 'usage', '`maxCount` only works with mode `multiple` or `tags`') : void 0;\n  }\n  // ====================== zIndex =========================\n  const [zIndex] = useZIndex('SelectLike', mergedStyles.popup.root?.zIndex ?? mergedPopupStyle.zIndex);\n  // ====================== Render =======================\n  return /*#__PURE__*/React.createElement(RcSelect, {\n    ref: ref,\n    virtual: virtual,\n    classNames: mergedClassNames,\n    styles: mergedStyles,\n    showSearch: mergedShowSearch,\n    ...selectProps,\n    style: mergedStyles.root,\n    popupMatchSelectWidth: mergedPopupMatchSelectWidth,\n    transitionName: getTransitionName(rootPrefixCls, 'slide-up', transitionName),\n    builtinPlacements: mergedBuiltinPlacements(builtinPlacements, popupOverflow),\n    listHeight: listHeight,\n    listItemHeight: listItemHeight,\n    mode: mode,\n    prefixCls: prefixCls,\n    placement: memoPlacement,\n    direction: direction,\n    prefix: prefix,\n    suffixIcon: suffixIcon,\n    menuItemSelectedIcon: itemIcon,\n    removeIcon: removeIcon,\n    allowClear: mergedAllowClear,\n    notFoundContent: mergedNotFound,\n    className: mergedClassName,\n    getPopupContainer: getPopupContainer || getContextPopupContainer,\n    popupClassName: mergedPopupClassName,\n    disabled: mergedDisabled,\n    popupStyle: {\n      ...mergedStyles.popup.root,\n      ...mergedPopupStyle,\n      zIndex\n    },\n    maxCount: isMultiple ? maxCount : undefined,\n    tagRender: isMultiple ? tagRender : undefined,\n    popupRender: mergedPopupRender,\n    onPopupVisibleChange: mergedOnOpenChange\n  });\n};\nif (process.env.NODE_ENV !== 'production') {\n  InternalSelect.displayName = 'Select';\n}\nconst Select = /*#__PURE__*/React.forwardRef(InternalSelect);\n// We don't care debug panel\n/* istanbul ignore next */\nconst PurePanel = genPurePanel(Select, 'popupAlign');\nSelect.SECRET_COMBOBOX_MODE_DO_NOT_USE = SECRET_COMBOBOX_MODE_DO_NOT_USE;\nSelect.Option = Option;\nSelect.OptGroup = OptGroup;\nSelect._InternalPanelDoNotUseOrYouWillBeFired = PurePanel;\nif (process.env.NODE_ENV !== 'production') {\n  Select.displayName = 'Select';\n}\nexport default Select;","\"use client\";\n\nimport * as React from 'react';\nimport { useContext, useMemo } from 'react';\nimport { clsx } from 'clsx';\nimport { FormItemInputContext } from '../form/context';\nimport { Button, Group } from '../radio';\nimport Select from '../select';\nconst YEAR_SELECT_OFFSET = 10;\nconst YEAR_SELECT_TOTAL = 20;\nfunction YearSelect(props) {\n  const {\n    fullscreen,\n    validRange,\n    generateConfig,\n    locale,\n    prefixCls,\n    value,\n    onChange,\n    divRef\n  } = props;\n  const year = generateConfig.getYear(value || generateConfig.getNow());\n  let start = year - YEAR_SELECT_OFFSET;\n  let end = start + YEAR_SELECT_TOTAL;\n  if (validRange) {\n    start = generateConfig.getYear(validRange[0]);\n    end = generateConfig.getYear(validRange[1]) + 1;\n  }\n  const suffix = locale && locale.year === '年' ? '年' : '';\n  const options = [];\n  for (let index = start; index < end; index++) {\n    options.push({\n      label: `${index}${suffix}`,\n      value: index\n    });\n  }\n  return /*#__PURE__*/React.createElement(Select, {\n    size: fullscreen ? undefined : 'small',\n    options: options,\n    value: year,\n    className: `${prefixCls}-year-select`,\n    onChange: numYear => {\n      let newDate = generateConfig.setYear(value, numYear);\n      if (validRange) {\n        const [startDate, endDate] = validRange;\n        const newYear = generateConfig.getYear(newDate);\n        const newMonth = generateConfig.getMonth(newDate);\n        if (newYear === generateConfig.getYear(endDate) && newMonth > generateConfig.getMonth(endDate)) {\n          newDate = generateConfig.setMonth(newDate, generateConfig.getMonth(endDate));\n        }\n        if (newYear === generateConfig.getYear(startDate) && newMonth < generateConfig.getMonth(startDate)) {\n          newDate = generateConfig.setMonth(newDate, generateConfig.getMonth(startDate));\n        }\n      }\n      onChange(newDate);\n    },\n    getPopupContainer: () => divRef.current\n  });\n}\nfunction MonthSelect(props) {\n  const {\n    prefixCls,\n    fullscreen,\n    validRange,\n    value,\n    generateConfig,\n    locale,\n    onChange,\n    divRef\n  } = props;\n  const month = generateConfig.getMonth(value || generateConfig.getNow());\n  let start = 0;\n  let end = 11;\n  if (validRange) {\n    const [rangeStart, rangeEnd] = validRange;\n    const currentYear = generateConfig.getYear(value);\n    if (generateConfig.getYear(rangeEnd) === currentYear) {\n      end = generateConfig.getMonth(rangeEnd);\n    }\n    if (generateConfig.getYear(rangeStart) === currentYear) {\n      start = generateConfig.getMonth(rangeStart);\n    }\n  }\n  const months = locale.shortMonths || generateConfig.locale.getShortMonths(locale.locale);\n  const options = [];\n  for (let index = start; index <= end; index += 1) {\n    options.push({\n      label: months[index],\n      value: index\n    });\n  }\n  return /*#__PURE__*/React.createElement(Select, {\n    size: fullscreen ? undefined : 'small',\n    className: `${prefixCls}-month-select`,\n    value: month,\n    options: options,\n    onChange: newMonth => {\n      onChange(generateConfig.setMonth(value, newMonth));\n    },\n    getPopupContainer: () => divRef.current\n  });\n}\nfunction ModeSwitch(props) {\n  const {\n    prefixCls,\n    locale,\n    mode,\n    fullscreen,\n    onModeChange\n  } = props;\n  return /*#__PURE__*/React.createElement(Group, {\n    onChange: ({\n      target: {\n        value\n      }\n    }) => {\n      onModeChange(value);\n    },\n    value: mode,\n    size: fullscreen ? undefined : 'small',\n    className: `${prefixCls}-mode-switch`\n  }, /*#__PURE__*/React.createElement(Button, {\n    value: \"month\"\n  }, locale.month), /*#__PURE__*/React.createElement(Button, {\n    value: \"year\"\n  }, locale.year));\n}\nfunction CalendarHeader(props) {\n  const {\n    prefixCls,\n    fullscreen,\n    mode,\n    onChange,\n    onModeChange,\n    className,\n    style\n  } = props;\n  const divRef = React.useRef(null);\n  const formItemInputContext = useContext(FormItemInputContext);\n  const mergedFormItemInputContext = useMemo(() => ({\n    ...formItemInputContext,\n    isFormItemInput: false\n  }), [formItemInputContext]);\n  const sharedProps = {\n    ...props,\n    fullscreen,\n    divRef\n  };\n  return /*#__PURE__*/React.createElement(\"div\", {\n    className: clsx(`${prefixCls}-header`, className),\n    style: style,\n    ref: divRef\n  }, /*#__PURE__*/React.createElement(FormItemInputContext.Provider, {\n    value: mergedFormItemInputContext\n  }, /*#__PURE__*/React.createElement(YearSelect, {\n    ...sharedProps,\n    onChange: v => {\n      onChange(v, 'year');\n    }\n  }), mode === 'month' && (/*#__PURE__*/React.createElement(MonthSelect, {\n    ...sharedProps,\n    onChange: v => {\n      onChange(v, 'month');\n    }\n  }))), /*#__PURE__*/React.createElement(ModeSwitch, {\n    ...sharedProps,\n    onModeChange: onModeChange\n  }));\n}\nexport default CalendarHeader;","import { unit } from '@ant-design/cssinjs';\nimport { FastColor } from '@ant-design/fast-color';\nconst genPickerCellInnerStyle = token => {\n  const {\n    pickerCellCls,\n    pickerCellInnerCls,\n    cellHeight,\n    borderRadiusSM,\n    motionDurationMid,\n    cellHoverBg,\n    lineWidth,\n    lineType,\n    colorPrimary,\n    cellActiveWithRangeBg,\n    colorTextLightSolid,\n    colorTextDisabled,\n    cellBgDisabled,\n    colorFillSecondary\n  } = token;\n  return {\n    '&::before': {\n      position: 'absolute',\n      top: '50%',\n      insetInlineStart: 0,\n      insetInlineEnd: 0,\n      zIndex: 1,\n      height: cellHeight,\n      transform: 'translateY(-50%)',\n      content: '\"\"',\n      pointerEvents: 'none'\n    },\n    // >>> Default\n    [pickerCellInnerCls]: {\n      position: 'relative',\n      zIndex: 2,\n      display: 'inline-block',\n      minWidth: cellHeight,\n      height: cellHeight,\n      lineHeight: unit(cellHeight),\n      borderRadius: borderRadiusSM,\n      transition: `background-color ${motionDurationMid}`\n    },\n    // >>> Hover\n    [`&:hover:not(${pickerCellCls}-in-view):not(${pickerCellCls}-disabled),\n    &:hover:not(${pickerCellCls}-selected):not(${pickerCellCls}-range-start):not(${pickerCellCls}-range-end):not(${pickerCellCls}-disabled)`]: {\n      [pickerCellInnerCls]: {\n        background: cellHoverBg\n      }\n    },\n    // >>> Today\n    [`&-in-view${pickerCellCls}-today ${pickerCellInnerCls}`]: {\n      '&::before': {\n        position: 'absolute',\n        top: 0,\n        insetInlineEnd: 0,\n        bottom: 0,\n        insetInlineStart: 0,\n        zIndex: 1,\n        border: `${unit(lineWidth)} ${lineType} ${colorPrimary}`,\n        borderRadius: borderRadiusSM,\n        content: '\"\"'\n      }\n    },\n    // >>> In Range\n    [`&-in-view${pickerCellCls}-in-range,\n      &-in-view${pickerCellCls}-range-start,\n      &-in-view${pickerCellCls}-range-end`]: {\n      position: 'relative',\n      [`&:not(${pickerCellCls}-disabled):before`]: {\n        background: cellActiveWithRangeBg\n      }\n    },\n    // >>> Selected\n    [`&-in-view${pickerCellCls}-selected,\n      &-in-view${pickerCellCls}-range-start,\n      &-in-view${pickerCellCls}-range-end`]: {\n      [`&:not(${pickerCellCls}-disabled) ${pickerCellInnerCls}`]: {\n        color: colorTextLightSolid,\n        background: colorPrimary\n      },\n      [`&${pickerCellCls}-disabled ${pickerCellInnerCls}`]: {\n        background: colorFillSecondary\n      }\n    },\n    [`&-in-view${pickerCellCls}-range-start:not(${pickerCellCls}-disabled):before`]: {\n      insetInlineStart: '50%'\n    },\n    [`&-in-view${pickerCellCls}-range-end:not(${pickerCellCls}-disabled):before`]: {\n      insetInlineEnd: '50%'\n    },\n    // range start border-radius\n    [`&-in-view${pickerCellCls}-range-start:not(${pickerCellCls}-range-end) ${pickerCellInnerCls}`]: {\n      borderStartStartRadius: borderRadiusSM,\n      borderEndStartRadius: borderRadiusSM,\n      borderStartEndRadius: 0,\n      borderEndEndRadius: 0\n    },\n    // range end border-radius\n    [`&-in-view${pickerCellCls}-range-end:not(${pickerCellCls}-range-start) ${pickerCellInnerCls}`]: {\n      borderStartStartRadius: 0,\n      borderEndStartRadius: 0,\n      borderStartEndRadius: borderRadiusSM,\n      borderEndEndRadius: borderRadiusSM\n    },\n    // >>> Disabled\n    '&-disabled': {\n      color: colorTextDisabled,\n      cursor: 'not-allowed',\n      [pickerCellInnerCls]: {\n        background: 'transparent'\n      },\n      '&::before': {\n        background: cellBgDisabled\n      }\n    },\n    [`&-disabled${pickerCellCls}-today ${pickerCellInnerCls}::before`]: {\n      borderColor: colorTextDisabled\n    }\n  };\n};\nexport const genPanelStyle = token => {\n  const {\n    componentCls,\n    pickerCellCls,\n    pickerCellInnerCls,\n    pickerYearMonthCellWidth,\n    pickerControlIconSize,\n    cellWidth,\n    paddingSM,\n    paddingXS,\n    paddingXXS,\n    colorBgContainer,\n    lineWidth,\n    lineType,\n    borderRadiusLG,\n    colorPrimary,\n    colorTextHeading,\n    colorSplit,\n    pickerControlIconBorderWidth,\n    colorIcon,\n    textHeight,\n    motionDurationMid,\n    colorIconHover,\n    fontWeightStrong,\n    cellHeight,\n    pickerCellPaddingVertical,\n    colorTextDisabled,\n    colorText,\n    fontSize,\n    motionDurationSlow,\n    withoutTimeCellHeight,\n    pickerQuarterPanelContentHeight,\n    borderRadiusSM,\n    colorTextLightSolid,\n    cellHoverBg,\n    timeColumnHeight,\n    timeColumnWidth,\n    timeCellHeight,\n    controlItemBgActive,\n    marginXXS,\n    pickerDatePanelPaddingHorizontal,\n    pickerControlIconMargin\n  } = token;\n  const pickerPanelWidth = token.calc(cellWidth).mul(7).add(token.calc(pickerDatePanelPaddingHorizontal).mul(2)).equal();\n  return {\n    [componentCls]: {\n      '&-panel': {\n        display: 'inline-flex',\n        flexDirection: 'column',\n        textAlign: 'center',\n        background: colorBgContainer,\n        borderRadius: borderRadiusLG,\n        outline: 'none',\n        '&-focused': {\n          borderColor: colorPrimary\n        },\n        '&-rtl': {\n          [`${componentCls}-prev-icon,\n              ${componentCls}-super-prev-icon`]: {\n            transform: 'rotate(45deg)'\n          },\n          [`${componentCls}-next-icon,\n              ${componentCls}-super-next-icon`]: {\n            transform: 'rotate(-135deg)'\n          },\n          [`${componentCls}-time-panel`]: {\n            [`${componentCls}-content`]: {\n              direction: 'ltr',\n              '> *': {\n                direction: 'rtl'\n              }\n            }\n          }\n        }\n      },\n      // ========================================================\n      // =                     Shared Panel                     =\n      // ========================================================\n      '&-decade-panel, &-year-panel, &-quarter-panel, &-month-panel, &-week-panel, &-date-panel, &-time-panel': {\n        display: 'flex',\n        flexDirection: 'column',\n        width: pickerPanelWidth\n      },\n      // ======================= Header =======================\n      '&-header': {\n        display: 'flex',\n        padding: `0 ${unit(paddingXS)}`,\n        color: colorTextHeading,\n        borderBottom: `${unit(lineWidth)} ${lineType} ${colorSplit}`,\n        '> *': {\n          flex: 'none'\n        },\n        button: {\n          padding: 0,\n          color: colorIcon,\n          lineHeight: unit(textHeight),\n          background: 'transparent',\n          border: 0,\n          cursor: 'pointer',\n          transition: `color ${motionDurationMid}`,\n          fontSize: 'inherit',\n          display: 'inline-flex',\n          alignItems: 'center',\n          justifyContent: 'center',\n          '&:empty': {\n            display: 'none'\n          }\n        },\n        '> button': {\n          minWidth: '1.6em',\n          fontSize,\n          '&:hover': {\n            color: colorIconHover\n          },\n          '&:disabled': {\n            opacity: 0.25,\n            pointerEvents: 'none'\n          }\n        },\n        '&-view': {\n          flex: 'auto',\n          fontWeight: fontWeightStrong,\n          lineHeight: unit(textHeight),\n          '> button': {\n            color: 'inherit',\n            fontWeight: 'inherit',\n            verticalAlign: 'top',\n            '&:not(:first-child)': {\n              marginInlineStart: paddingXS\n            },\n            '&:hover': {\n              color: colorPrimary\n            }\n          }\n        }\n      },\n      // Arrow button\n      '&-prev-icon, &-next-icon, &-super-prev-icon, &-super-next-icon': {\n        position: 'relative',\n        width: pickerControlIconSize,\n        height: pickerControlIconSize,\n        '&::before': {\n          position: 'absolute',\n          top: 0,\n          insetInlineStart: 0,\n          width: pickerControlIconSize,\n          height: pickerControlIconSize,\n          border: `0 solid currentcolor`,\n          borderBlockStartWidth: pickerControlIconBorderWidth,\n          borderInlineStartWidth: pickerControlIconBorderWidth,\n          content: '\"\"'\n        }\n      },\n      '&-super-prev-icon, &-super-next-icon': {\n        '&::after': {\n          position: 'absolute',\n          top: pickerControlIconMargin,\n          insetInlineStart: pickerControlIconMargin,\n          display: 'inline-block',\n          width: pickerControlIconSize,\n          height: pickerControlIconSize,\n          border: '0 solid currentcolor',\n          borderBlockStartWidth: pickerControlIconBorderWidth,\n          borderInlineStartWidth: pickerControlIconBorderWidth,\n          content: '\"\"'\n        }\n      },\n      '&-prev-icon, &-super-prev-icon': {\n        transform: 'rotate(-45deg)'\n      },\n      '&-next-icon, &-super-next-icon': {\n        transform: 'rotate(135deg)'\n      },\n      // ======================== Body ========================\n      '&-content': {\n        width: '100%',\n        tableLayout: 'fixed',\n        borderCollapse: 'collapse',\n        'th, td': {\n          position: 'relative',\n          minWidth: cellHeight,\n          fontWeight: 'normal'\n        },\n        th: {\n          height: token.calc(cellHeight).add(token.calc(pickerCellPaddingVertical).mul(2)).equal(),\n          color: colorText,\n          verticalAlign: 'middle'\n        }\n      },\n      '&-cell': {\n        padding: `${unit(pickerCellPaddingVertical)} 0`,\n        color: colorTextDisabled,\n        cursor: 'pointer',\n        // In view\n        '&-in-view': {\n          color: colorText\n        },\n        ...genPickerCellInnerStyle(token)\n      },\n      '&-decade-panel, &-year-panel, &-quarter-panel, &-month-panel': {\n        [`${componentCls}-content`]: {\n          height: token.calc(withoutTimeCellHeight).mul(4).equal()\n        },\n        [pickerCellInnerCls]: {\n          padding: `0 ${unit(paddingXS)}`\n        }\n      },\n      '&-quarter-panel': {\n        [`${componentCls}-content`]: {\n          height: pickerQuarterPanelContentHeight\n        }\n      },\n      // ========================================================\n      // =                       Special                        =\n      // ========================================================\n      // ===================== Decade Panel =====================\n      '&-decade-panel': {\n        [pickerCellInnerCls]: {\n          padding: `0 ${unit(token.calc(paddingXS).div(2).equal())}`\n        },\n        [`${componentCls}-cell::before`]: {\n          display: 'none'\n        }\n      },\n      // ============= Year & Quarter & Month Panel =============\n      '&-year-panel, &-quarter-panel, &-month-panel': {\n        [`${componentCls}-body`]: {\n          padding: `0 ${unit(paddingXS)}`\n        },\n        [pickerCellInnerCls]: {\n          width: pickerYearMonthCellWidth\n        }\n      },\n      // ====================== Date Panel ======================\n      '&-date-panel': {\n        [`${componentCls}-body`]: {\n          padding: `${unit(paddingXS)} ${unit(pickerDatePanelPaddingHorizontal)}`\n        },\n        [`${componentCls}-content th`]: {\n          boxSizing: 'border-box',\n          padding: 0\n        }\n      },\n      // ====================== Week Panel ======================\n      '&-week-panel-row': {\n        td: {\n          '&:before': {\n            transition: `background-color ${motionDurationMid}`\n          },\n          '&:first-child:before': {\n            borderStartStartRadius: borderRadiusSM,\n            borderEndStartRadius: borderRadiusSM\n          },\n          '&:last-child:before': {\n            borderStartEndRadius: borderRadiusSM,\n            borderEndEndRadius: borderRadiusSM\n          }\n        },\n        '&:hover td:before': {\n          background: cellHoverBg\n        },\n        '&-range-start td, &-range-end td, &-selected td, &-hover td': {\n          // Rise priority to override hover style\n          [`&${pickerCellCls}`]: {\n            '&:before': {\n              background: colorPrimary\n            },\n            [`&${componentCls}-cell-week`]: {\n              color: new FastColor(colorTextLightSolid).setA(0.5).toHexString()\n            },\n            [pickerCellInnerCls]: {\n              color: colorTextLightSolid\n            }\n          }\n        },\n        '&-range-hover td:before': {\n          background: controlItemBgActive\n        }\n      },\n      // >>> ShowWeek\n      '&-week-panel, &-date-panel-show-week': {\n        [`${componentCls}-body`]: {\n          padding: `${unit(paddingXS)} ${unit(paddingSM)}`\n        },\n        [`${componentCls}-content th`]: {\n          width: 'auto'\n        }\n      },\n      // ==================== Datetime Panel ====================\n      '&-datetime-panel': {\n        display: 'flex',\n        [`${componentCls}-time-panel`]: {\n          borderInlineStart: `${unit(lineWidth)} ${lineType} ${colorSplit}`\n        },\n        [`${componentCls}-date-panel,\n          ${componentCls}-time-panel`]: {\n          transition: `opacity ${motionDurationSlow}`\n        },\n        // Keyboard\n        '&-active': {\n          [`${componentCls}-date-panel,\n            ${componentCls}-time-panel`]: {\n            opacity: 0.3,\n            '&-active': {\n              opacity: 1\n            }\n          }\n        }\n      },\n      // ====================== Time Panel ======================\n      '&-time-panel': {\n        width: 'auto',\n        minWidth: 'auto',\n        [`${componentCls}-content`]: {\n          display: 'flex',\n          flex: 'auto',\n          height: timeColumnHeight\n        },\n        '&-column': {\n          flex: '1 0 auto',\n          width: timeColumnWidth,\n          margin: `${unit(paddingXXS)} 0`,\n          padding: 0,\n          overflowY: 'auto',\n          textAlign: 'start',\n          listStyle: 'none',\n          transition: `background-color ${motionDurationMid}`,\n          overflowX: 'hidden',\n          '&::-webkit-scrollbar': {\n            width: 8,\n            backgroundColor: 'transparent'\n          },\n          '&::-webkit-scrollbar-thumb': {\n            backgroundColor: token.colorTextTertiary,\n            borderRadius: token.borderRadiusSM\n          },\n          // For Firefox\n          '&': {\n            scrollbarWidth: 'thin',\n            scrollbarColor: `${token.colorTextTertiary} transparent`\n          },\n          '&::after': {\n            display: 'block',\n            height: `calc(100% - ${unit(timeCellHeight)})`,\n            content: '\"\"'\n          },\n          '&:not(:first-child)': {\n            borderInlineStart: `${unit(lineWidth)} ${lineType} ${colorSplit}`\n          },\n          '&-active': {\n            background: new FastColor(controlItemBgActive).setA(0.2).toHexString()\n          },\n          '> li': {\n            margin: 0,\n            padding: 0,\n            [`&${componentCls}-time-panel-cell`]: {\n              marginInline: marginXXS,\n              [`${componentCls}-time-panel-cell-inner`]: {\n                display: 'block',\n                width: token.calc(timeColumnWidth).sub(token.calc(marginXXS).mul(2)).equal(),\n                height: timeCellHeight,\n                margin: 0,\n                paddingBlock: 0,\n                paddingInlineEnd: 0,\n                paddingInlineStart: token.calc(timeColumnWidth).sub(timeCellHeight).div(2).equal(),\n                color: colorText,\n                lineHeight: unit(timeCellHeight),\n                borderRadius: borderRadiusSM,\n                cursor: 'pointer',\n                transition: `background-color ${motionDurationMid}`,\n                '&:hover': {\n                  background: cellHoverBg\n                }\n              },\n              '&-selected': {\n                [`${componentCls}-time-panel-cell-inner`]: {\n                  background: controlItemBgActive\n                }\n              },\n              '&-disabled': {\n                [`${componentCls}-time-panel-cell-inner`]: {\n                  color: colorTextDisabled,\n                  background: 'transparent',\n                  cursor: 'not-allowed'\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  };\n};\nconst genPickerPanelStyle = token => {\n  const {\n    componentCls,\n    textHeight,\n    lineWidth,\n    paddingSM,\n    antCls,\n    colorPrimary,\n    cellActiveWithRangeBg,\n    colorPrimaryBorder,\n    lineType,\n    colorSplit\n  } = token;\n  return {\n    [`${componentCls}-dropdown`]: {\n      // ======================== Footer ========================\n      [`${componentCls}-footer`]: {\n        borderTop: `${unit(lineWidth)} ${lineType} ${colorSplit}`,\n        '&-extra': {\n          padding: `0 ${unit(paddingSM)}`,\n          lineHeight: unit(token.calc(textHeight).sub(token.calc(lineWidth).mul(2)).equal()),\n          textAlign: 'start',\n          '&:not(:last-child)': {\n            borderBottom: `${unit(lineWidth)} ${lineType} ${colorSplit}`\n          }\n        }\n      },\n      // ==================== Footer > Ranges ===================\n      [`${componentCls}-panels + ${componentCls}-footer ${componentCls}-ranges`]: {\n        justifyContent: 'space-between'\n      },\n      [`${componentCls}-ranges`]: {\n        marginBlock: 0,\n        paddingInline: unit(paddingSM),\n        overflow: 'hidden',\n        textAlign: 'start',\n        listStyle: 'none',\n        display: 'flex',\n        justifyContent: 'center',\n        alignItems: 'center',\n        '> li': {\n          lineHeight: unit(token.calc(textHeight).sub(token.calc(lineWidth).mul(2)).equal()),\n          display: 'inline-block'\n        },\n        [`${componentCls}-now-btn-disabled`]: {\n          pointerEvents: 'none',\n          color: token.colorTextDisabled\n        },\n        // https://github.com/ant-design/ant-design/issues/23687\n        [`${componentCls}-preset > ${antCls}-tag-blue`]: {\n          color: colorPrimary,\n          background: cellActiveWithRangeBg,\n          borderColor: colorPrimaryBorder,\n          cursor: 'pointer'\n        },\n        [`${componentCls}-ok`]: {\n          paddingBlock: token.calc(lineWidth).mul(2).equal(),\n          marginInlineStart: 'auto'\n        }\n      }\n    }\n  };\n};\nexport default genPickerPanelStyle;","import { FastColor } from '@ant-design/fast-color';\nimport { initComponentToken } from '../../input/style/token';\nimport { getArrowToken } from '../../style/roundedArrow';\nexport const initPickerPanelToken = token => {\n  const {\n    componentCls,\n    controlHeightLG,\n    paddingXXS,\n    padding\n  } = token;\n  return {\n    pickerCellCls: `${componentCls}-cell`,\n    pickerCellInnerCls: `${componentCls}-cell-inner`,\n    pickerYearMonthCellWidth: token.calc(controlHeightLG).mul(1.5).equal(),\n    pickerQuarterPanelContentHeight: token.calc(controlHeightLG).mul(1.4).equal(),\n    pickerCellPaddingVertical: token.calc(paddingXXS).add(token.calc(paddingXXS).div(2)).equal(),\n    pickerCellBorderGap: 2,\n    // Magic for gap between cells\n    pickerControlIconSize: 7,\n    pickerControlIconMargin: 4,\n    pickerControlIconBorderWidth: 1.5,\n    pickerDatePanelPaddingHorizontal: token.calc(padding).add(token.calc(paddingXXS).div(2)).equal() // 18 in normal\n  };\n};\nexport const initPanelComponentToken = token => {\n  const {\n    colorBgContainerDisabled,\n    controlHeight,\n    controlHeightSM,\n    controlHeightLG,\n    paddingXXS,\n    lineWidth\n  } = token;\n  // Item height default use `controlHeight - 2 * paddingXXS`,\n  // but some case `paddingXXS=0`.\n  // Let's fallback it.\n  const dblPaddingXXS = paddingXXS * 2;\n  const dblLineWidth = lineWidth * 2;\n  const multipleItemHeight = Math.min(controlHeight - dblPaddingXXS, controlHeight - dblLineWidth);\n  const multipleItemHeightSM = Math.min(controlHeightSM - dblPaddingXXS, controlHeightSM - dblLineWidth);\n  const multipleItemHeightLG = Math.min(controlHeightLG - dblPaddingXXS, controlHeightLG - dblLineWidth);\n  // FIXED_ITEM_MARGIN is a hardcode calculation since calc not support rounding\n  const INTERNAL_FIXED_ITEM_MARGIN = Math.floor(paddingXXS / 2);\n  const filledToken = {\n    INTERNAL_FIXED_ITEM_MARGIN,\n    cellHoverBg: token.controlItemBgHover,\n    cellActiveWithRangeBg: token.controlItemBgActive,\n    cellHoverWithRangeBg: new FastColor(token.colorPrimary).lighten(35).toHexString(),\n    cellRangeBorderColor: new FastColor(token.colorPrimary).lighten(20).toHexString(),\n    cellBgDisabled: colorBgContainerDisabled,\n    timeColumnWidth: controlHeightLG * 1.4,\n    timeColumnHeight: 28 * 8,\n    timeCellHeight: 28,\n    cellWidth: controlHeightSM * 1.5,\n    cellHeight: controlHeightSM,\n    textHeight: controlHeightLG,\n    withoutTimeCellHeight: controlHeightLG * 1.65,\n    multipleItemBg: token.colorFillSecondary,\n    multipleItemBorderColor: 'transparent',\n    multipleItemHeight,\n    multipleItemHeightSM,\n    multipleItemHeightLG,\n    multipleSelectorBgDisabled: colorBgContainerDisabled,\n    multipleItemColorDisabled: token.colorTextDisabled,\n    multipleItemBorderColorDisabled: 'transparent'\n  };\n  return filledToken;\n};\nexport const prepareComponentToken = token => ({\n  ...initComponentToken(token),\n  ...initPanelComponentToken(token),\n  ...getArrowToken(token),\n  presetsWidth: 120,\n  presetsMaxWidth: 200,\n  zIndexPopup: token.zIndexPopupBase + 50\n});","import { unit } from '@ant-design/cssinjs';\nimport { genPanelStyle, initPanelComponentToken, initPickerPanelToken } from '../../date-picker/style';\nimport { resetComponent } from '../../style';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\nexport const genCalendarStyles = token => {\n  const {\n    calendarCls,\n    componentCls,\n    fullBg,\n    fullPanelBg,\n    itemActiveBg\n  } = token;\n  return {\n    [calendarCls]: {\n      ...genPanelStyle(token),\n      ...resetComponent(token),\n      background: fullBg,\n      '&-rtl': {\n        direction: 'rtl'\n      },\n      [`${calendarCls}-header`]: {\n        display: 'flex',\n        justifyContent: 'flex-end',\n        padding: `${unit(token.paddingSM)} 0`,\n        [`${calendarCls}-year-select`]: {\n          minWidth: token.yearControlWidth\n        },\n        [`${calendarCls}-month-select`]: {\n          minWidth: token.monthControlWidth,\n          marginInlineStart: token.marginXS\n        },\n        [`${calendarCls}-mode-switch`]: {\n          marginInlineStart: token.marginXS\n        }\n      }\n    },\n    [`${calendarCls} ${componentCls}-panel`]: {\n      background: fullPanelBg,\n      border: 0,\n      borderTop: `${unit(token.lineWidth)} ${token.lineType} ${token.colorSplit}`,\n      borderRadius: 0,\n      [`${componentCls}-month-panel, ${componentCls}-date-panel`]: {\n        width: 'auto'\n      },\n      [`${componentCls}-body`]: {\n        padding: `${unit(token.paddingXS)} 0`\n      },\n      [`${componentCls}-content`]: {\n        width: '100%'\n      }\n    },\n    [`${calendarCls}-mini`]: {\n      borderRadius: token.borderRadiusLG,\n      [`${calendarCls}-header`]: {\n        paddingInlineEnd: token.paddingXS,\n        paddingInlineStart: token.paddingXS\n      },\n      [`${componentCls}-panel`]: {\n        borderRadius: `0 0 ${unit(token.borderRadiusLG)} ${unit(token.borderRadiusLG)}`\n      },\n      [`${componentCls}-content`]: {\n        height: token.miniContentHeight,\n        th: {\n          height: 'auto',\n          padding: 0,\n          lineHeight: unit(token.weekHeight)\n        }\n      },\n      [`${componentCls}-cell::before`]: {\n        pointerEvents: 'none'\n      }\n    },\n    [`${calendarCls}${calendarCls}-full`]: {\n      [`${componentCls}-panel`]: {\n        display: 'block',\n        width: '100%',\n        textAlign: 'end',\n        background: fullBg,\n        border: 0,\n        [`${componentCls}-body`]: {\n          'th, td': {\n            padding: 0\n          },\n          th: {\n            height: 'auto',\n            paddingInlineEnd: token.paddingSM,\n            paddingBottom: token.paddingXXS,\n            lineHeight: unit(token.weekHeight)\n          }\n        }\n      },\n      [`${componentCls}-cell-week ${componentCls}-cell-inner`]: {\n        display: 'block',\n        borderRadius: 0,\n        borderTop: `${unit(token.lineWidthBold)} ${token.lineType} ${token.colorSplit}`,\n        width: '100%',\n        height: token.calc(token.dateValueHeight).add(token.dateContentHeight).add(token.calc(token.paddingXS).div(2)).add(token.lineWidthBold).equal()\n      },\n      [`${componentCls}-cell`]: {\n        '&::before': {\n          display: 'none'\n        },\n        '&:hover': {\n          [`${calendarCls}-date`]: {\n            background: token.controlItemBgHover\n          }\n        },\n        [`${calendarCls}-date-today::before`]: {\n          display: 'none'\n        },\n        // >>> Selected\n        [`&-in-view${componentCls}-cell-selected`]: {\n          [`${calendarCls}-date, ${calendarCls}-date-today`]: {\n            background: itemActiveBg\n          }\n        },\n        '&-selected, &-selected:hover': {\n          [`${calendarCls}-date, ${calendarCls}-date-today`]: {\n            [`${calendarCls}-date-value`]: {\n              color: token.colorPrimary\n            }\n          }\n        }\n      },\n      [`${calendarCls}-date`]: {\n        display: 'block',\n        width: 'auto',\n        height: 'auto',\n        margin: `0 ${unit(token.calc(token.marginXS).div(2).equal())}`,\n        padding: `${unit(token.calc(token.paddingXS).div(2).equal())} ${unit(token.paddingXS)} 0`,\n        border: 0,\n        borderTop: `${unit(token.lineWidthBold)} ${token.lineType} ${token.colorSplit}`,\n        borderRadius: 0,\n        transition: `background-color ${token.motionDurationSlow}`,\n        '&-value': {\n          lineHeight: unit(token.dateValueHeight),\n          transition: `color ${token.motionDurationSlow}`\n        },\n        '&-content': {\n          position: 'static',\n          width: 'auto',\n          height: token.dateContentHeight,\n          overflowY: 'auto',\n          color: token.colorText,\n          lineHeight: token.lineHeight,\n          textAlign: 'start'\n        },\n        '&-today': {\n          borderColor: token.colorPrimary,\n          [`${calendarCls}-date-value`]: {\n            color: token.colorText\n          }\n        }\n      }\n    },\n    [`@media only screen and (max-width: ${unit(token.screenXS)}) `]: {\n      [calendarCls]: {\n        [`${calendarCls}-header`]: {\n          display: 'block',\n          [`${calendarCls}-year-select`]: {\n            width: '50%'\n          },\n          [`${calendarCls}-month-select`]: {\n            width: `calc(50% - ${unit(token.paddingXS)})`\n          },\n          [`${calendarCls}-mode-switch`]: {\n            width: '100%',\n            marginTop: token.marginXS,\n            marginInlineStart: 0,\n            '> label': {\n              width: '50%',\n              textAlign: 'center'\n            }\n          }\n        }\n      }\n    }\n  };\n};\nexport const prepareComponentToken = token => ({\n  fullBg: token.colorBgContainer,\n  fullPanelBg: token.colorBgContainer,\n  itemActiveBg: token.controlItemBgActive,\n  yearControlWidth: 80,\n  monthControlWidth: 70,\n  miniContentHeight: 256,\n  ...initPanelComponentToken(token)\n});\nexport default genStyleHooks('Calendar', token => {\n  const calendarCls = `${token.componentCls}-calendar`;\n  const calendarToken = mergeToken(token, initPickerPanelToken(token), {\n    calendarCls,\n    pickerCellInnerCls: `${token.componentCls}-cell-inner`,\n    dateValueHeight: token.controlHeightSM,\n    weekHeight: token.calc(token.controlHeightSM).mul(0.75).equal(),\n    dateContentHeight: token.calc(token.calc(token.fontHeightSM).add(token.marginXS)).mul(3).add(token.calc(token.lineWidth).mul(2)).equal()\n  });\n  return genCalendarStyles(calendarToken);\n}, prepareComponentToken);","\"use client\";\n\nimport * as React from 'react';\nimport { PickerPanel as RCPickerPanel } from '@rc-component/picker';\nimport { merge, useControlledState } from '@rc-component/util';\nimport { clsx } from 'clsx';\nimport { useMergeSemantic, useSemanticRootStyle } from '../_util/hooks/useMergeSemantic';\nimport { isFunction } from '../_util/is';\nimport { devUseWarning } from '../_util/warning';\nimport { useComponentConfig } from '../config-provider/context';\nimport { useLocale } from '../locale';\nimport CalendarHeader from './Header';\nimport enUS from './locale/en_US';\nimport useStyle from './style';\nconst isSameYear = (date1, date2, config) => {\n  const {\n    getYear\n  } = config;\n  return date1 && date2 && getYear(date1) === getYear(date2);\n};\nconst isSameMonth = (date1, date2, config) => {\n  const {\n    getMonth\n  } = config;\n  return isSameYear(date1, date2, config) && getMonth(date1) === getMonth(date2);\n};\nconst isSameDate = (date1, date2, config) => {\n  const {\n    getDate\n  } = config;\n  return isSameMonth(date1, date2, config) && getDate(date1) === getDate(date2);\n};\nconst generateCalendar = generateConfig => {\n  const InternalCalendar = (props, ref) => {\n    const {\n      prefixCls: customizePrefixCls,\n      className,\n      rootClassName,\n      style,\n      dateFullCellRender,\n      dateCellRender,\n      monthFullCellRender,\n      monthCellRender,\n      cellRender,\n      fullCellRender,\n      headerRender,\n      value,\n      defaultValue,\n      disabledDate,\n      mode,\n      validRange,\n      fullscreen = true,\n      showWeek,\n      onChange,\n      onPanelChange,\n      onSelect,\n      styles,\n      classNames\n    } = props;\n    const {\n      getPrefixCls,\n      direction,\n      className: contextClassName,\n      style: contextStyle,\n      classNames: contextClassNames,\n      styles: contextStyles\n    } = useComponentConfig('calendar');\n    // =========== Merged Props for Semantic ===========\n    const mergedProps = {\n      ...props,\n      mode,\n      fullscreen,\n      showWeek\n    };\n    const contextStyleRoot = useSemanticRootStyle(contextStyle);\n    const styleRoot = useSemanticRootStyle(style);\n    const [mergedClassNames, mergedStyles] = useMergeSemantic([contextClassNames, classNames], [contextStyles, contextStyleRoot, styles, styleRoot], {\n      props: mergedProps\n    });\n    const [rootCls, headerCls, panelClassNames, rootStyle, headerStyle, panelStyles] = React.useMemo(() => {\n      const {\n        root: nextRootClassName,\n        header: nextHeaderClassName,\n        ...nextPanelClassNames\n      } = mergedClassNames;\n      const {\n        root: nextRootStyle,\n        header: nextHeaderStyle,\n        ...nextPanelStyles\n      } = mergedStyles;\n      return [nextRootClassName, nextHeaderClassName, nextPanelClassNames, nextRootStyle, nextHeaderStyle, nextPanelStyles];\n    }, [mergedClassNames, mergedStyles]);\n    const mergedItemContentClassName = mergedClassNames.itemContent;\n    const mergedItemContentStyle = mergedStyles.itemContent;\n    const prefixCls = getPrefixCls('picker', customizePrefixCls);\n    const calendarPrefixCls = `${prefixCls}-calendar`;\n    const [hashId, cssVarCls] = useStyle(prefixCls, calendarPrefixCls);\n    const today = generateConfig.getNow();\n    // ====================== Warning =======================\n    if (process.env.NODE_ENV !== 'production') {\n      const warning = devUseWarning('Calendar');\n      [['dateFullCellRender', 'fullCellRender'], ['dateCellRender', 'cellRender'], ['monthFullCellRender', 'fullCellRender'], ['monthCellRender', 'cellRender']].forEach(([deprecatedName, newName]) => {\n        warning.deprecated(!(deprecatedName in props), deprecatedName, newName);\n      });\n    }\n    // ====================== State =======================\n    // Value\n    const [mergedValue, setMergedValue] = useControlledState(() => defaultValue || generateConfig.getNow(), value);\n    // Mode\n    const [mergedMode, setMergedMode] = useControlledState('month', mode);\n    const panelMode = React.useMemo(() => mergedMode === 'year' ? 'month' : 'date', [mergedMode]);\n    // Disabled Date\n    const mergedDisabledDate = React.useCallback(date => {\n      const notInRange = validRange ? generateConfig.isAfter(validRange[0], date) || generateConfig.isAfter(date, validRange[1]) : false;\n      return notInRange || !!disabledDate?.(date);\n    }, [disabledDate, validRange]);\n    // ====================== Events ======================\n    const triggerPanelChange = (date, newMode) => {\n      onPanelChange?.(date, newMode);\n    };\n    const triggerChange = date => {\n      setMergedValue(date);\n      if (!isSameDate(date, mergedValue, generateConfig)) {\n        // Trigger when month panel switch month\n        if (panelMode === 'date' && !isSameMonth(date, mergedValue, generateConfig) || panelMode === 'month' && !isSameYear(date, mergedValue, generateConfig)) {\n          triggerPanelChange(date, mergedMode);\n        }\n        onChange?.(date);\n      }\n    };\n    const triggerModeChange = newMode => {\n      setMergedMode(newMode);\n      triggerPanelChange(mergedValue, newMode);\n    };\n    const onInternalSelect = (date, source) => {\n      triggerChange(date);\n      onSelect?.(date, {\n        source\n      });\n    };\n    // ====================== Render ======================\n    const dateRender = React.useCallback((date, info) => {\n      if (isFunction(fullCellRender)) {\n        return fullCellRender(date, info);\n      }\n      if (isFunction(dateFullCellRender)) {\n        return dateFullCellRender(date);\n      }\n      return /*#__PURE__*/React.createElement(\"div\", {\n        className: clsx(`${prefixCls}-cell-inner`, `${calendarPrefixCls}-date`, {\n          [`${calendarPrefixCls}-date-today`]: isSameDate(today, date, generateConfig)\n        })\n      }, /*#__PURE__*/React.createElement(\"div\", {\n        className: `${calendarPrefixCls}-date-value`\n      }, String(generateConfig.getDate(date)).padStart(2, '0')), /*#__PURE__*/React.createElement(\"div\", {\n        className: clsx(`${calendarPrefixCls}-date-content`, mergedItemContentClassName),\n        style: mergedItemContentStyle\n      }, isFunction(cellRender) ? cellRender(date, info) : dateCellRender?.(date)));\n    }, [today, prefixCls, calendarPrefixCls, fullCellRender, dateFullCellRender, cellRender, dateCellRender, mergedItemContentClassName, mergedItemContentStyle]);\n    const monthRender = React.useCallback((date, info) => {\n      if (fullCellRender) {\n        return fullCellRender(date, info);\n      }\n      if (monthFullCellRender) {\n        return monthFullCellRender(date);\n      }\n      const months = info.locale.shortMonths || generateConfig.locale.getShortMonths(info.locale.locale);\n      return /*#__PURE__*/React.createElement(\"div\", {\n        className: clsx(`${prefixCls}-cell-inner`, `${calendarPrefixCls}-date`, {\n          [`${calendarPrefixCls}-date-today`]: isSameMonth(today, date, generateConfig)\n        })\n      }, /*#__PURE__*/React.createElement(\"div\", {\n        className: `${calendarPrefixCls}-date-value`\n      }, months[generateConfig.getMonth(date)]), /*#__PURE__*/React.createElement(\"div\", {\n        className: clsx(`${calendarPrefixCls}-date-content`, mergedItemContentClassName),\n        style: mergedItemContentStyle\n      }, isFunction(cellRender) ? cellRender(date, info) : monthCellRender?.(date)));\n    }, [today, prefixCls, calendarPrefixCls, fullCellRender, monthFullCellRender, cellRender, monthCellRender, mergedItemContentClassName, mergedItemContentStyle]);\n    const [contextLocale] = useLocale('Calendar', enUS);\n    const locale = merge(contextLocale, props.locale || {});\n    const mergedCellRender = (current, info) => {\n      if (info.type === 'date') {\n        return dateRender(current, info);\n      }\n      if (info.type === 'month') {\n        return monthRender(current, {\n          ...info,\n          locale: locale?.lang\n        });\n      }\n    };\n    const nativeElementRef = React.useRef(null);\n    React.useImperativeHandle(ref, () => ({\n      nativeElement: nativeElementRef.current\n    }));\n    return /*#__PURE__*/React.createElement(\"div\", {\n      ref: nativeElementRef,\n      className: clsx(calendarPrefixCls, {\n        [`${calendarPrefixCls}-full`]: fullscreen,\n        [`${calendarPrefixCls}-mini`]: !fullscreen,\n        [`${calendarPrefixCls}-rtl`]: direction === 'rtl'\n      }, contextClassName, className, rootClassName, rootCls, hashId, cssVarCls),\n      style: rootStyle\n    }, headerRender ? headerRender({\n      value: mergedValue,\n      type: mergedMode,\n      onChange: nextDate => {\n        onInternalSelect(nextDate, 'customize');\n      },\n      onTypeChange: triggerModeChange\n    }) : (/*#__PURE__*/React.createElement(CalendarHeader, {\n      className: headerCls,\n      style: headerStyle,\n      prefixCls: calendarPrefixCls,\n      value: mergedValue,\n      generateConfig: generateConfig,\n      mode: mergedMode,\n      fullscreen: fullscreen,\n      locale: locale?.lang,\n      validRange: validRange,\n      onChange: onInternalSelect,\n      onModeChange: triggerModeChange\n    })), /*#__PURE__*/React.createElement(RCPickerPanel, {\n      classNames: panelClassNames,\n      styles: panelStyles,\n      value: mergedValue,\n      prefixCls: prefixCls,\n      locale: locale?.lang,\n      generateConfig: generateConfig,\n      cellRender: mergedCellRender,\n      onSelect: nextDate => {\n        onInternalSelect(nextDate, panelMode);\n      },\n      mode: panelMode,\n      picker: panelMode,\n      disabledDate: mergedDisabledDate,\n      hideHeader: true,\n      showWeek: showWeek\n    }));\n  };\n  const Calendar = /*#__PURE__*/React.forwardRef(InternalCalendar);\n  if (process.env.NODE_ENV !== 'production') {\n    Calendar.displayName = 'Calendar';\n  }\n  return Calendar;\n};\nexport default generateCalendar;","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\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 */\nclass InvalidDateTimeError extends LuxonError {\n  constructor(reason) {\n    super(`Invalid DateTime: ${reason.toMessage()}`);\n  }\n}\n\n/**\n * @private\n */\nclass InvalidIntervalError extends LuxonError {\n  constructor(reason) {\n    super(`Invalid Interval: ${reason.toMessage()}`);\n  }\n}\n\n/**\n * @private\n */\nclass InvalidDurationError extends LuxonError {\n  constructor(reason) {\n    super(`Invalid Duration: ${reason.toMessage()}`);\n  }\n}\n\n/**\n * @private\n */\nclass ConflictingSpecificationError extends LuxonError {}\n\n/**\n * @private\n */\nclass InvalidUnitError extends LuxonError {\n  constructor(unit) {\n    super(`Invalid unit ${unit}`);\n  }\n}\n\n/**\n * @private\n */\nclass InvalidArgumentError extends LuxonError {}\n\n/**\n * @private\n */\nclass ZoneIsAbstractError extends LuxonError {\n  constructor() {\n    super(\"Zone is an abstract class\");\n  }\n}\n\n/**\n * @private\n */\n\nconst n = \"numeric\",\n  s = \"short\",\n  l = \"long\";\nconst DATE_SHORT = {\n  year: n,\n  month: n,\n  day: n\n};\nconst DATE_MED = {\n  year: n,\n  month: s,\n  day: n\n};\nconst DATE_MED_WITH_WEEKDAY = {\n  year: n,\n  month: s,\n  day: n,\n  weekday: s\n};\nconst DATE_FULL = {\n  year: n,\n  month: l,\n  day: n\n};\nconst DATE_HUGE = {\n  year: n,\n  month: l,\n  day: n,\n  weekday: l\n};\nconst TIME_SIMPLE = {\n  hour: n,\n  minute: n\n};\nconst TIME_WITH_SECONDS = {\n  hour: n,\n  minute: n,\n  second: n\n};\nconst TIME_WITH_SHORT_OFFSET = {\n  hour: n,\n  minute: n,\n  second: n,\n  timeZoneName: s\n};\nconst TIME_WITH_LONG_OFFSET = {\n  hour: n,\n  minute: n,\n  second: n,\n  timeZoneName: l\n};\nconst TIME_24_SIMPLE = {\n  hour: n,\n  minute: n,\n  hourCycle: \"h23\"\n};\nconst TIME_24_WITH_SECONDS = {\n  hour: n,\n  minute: n,\n  second: n,\n  hourCycle: \"h23\"\n};\nconst TIME_24_WITH_SHORT_OFFSET = {\n  hour: n,\n  minute: n,\n  second: n,\n  hourCycle: \"h23\",\n  timeZoneName: s\n};\nconst TIME_24_WITH_LONG_OFFSET = {\n  hour: n,\n  minute: n,\n  second: n,\n  hourCycle: \"h23\",\n  timeZoneName: l\n};\nconst DATETIME_SHORT = {\n  year: n,\n  month: n,\n  day: n,\n  hour: n,\n  minute: n\n};\nconst DATETIME_SHORT_WITH_SECONDS = {\n  year: n,\n  month: n,\n  day: n,\n  hour: n,\n  minute: n,\n  second: n\n};\nconst DATETIME_MED = {\n  year: n,\n  month: s,\n  day: n,\n  hour: n,\n  minute: n\n};\nconst DATETIME_MED_WITH_SECONDS = {\n  year: n,\n  month: s,\n  day: n,\n  hour: n,\n  minute: n,\n  second: n\n};\nconst DATETIME_MED_WITH_WEEKDAY = {\n  year: n,\n  month: s,\n  day: n,\n  weekday: s,\n  hour: n,\n  minute: n\n};\nconst DATETIME_FULL = {\n  year: n,\n  month: l,\n  day: n,\n  hour: n,\n  minute: n,\n  timeZoneName: s\n};\nconst 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};\nconst DATETIME_HUGE = {\n  year: n,\n  month: l,\n  day: n,\n  weekday: l,\n  hour: n,\n  minute: n,\n  timeZoneName: l\n};\nconst 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\n/**\n * @interface\n */\nclass 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\nlet singleton$1 = null;\n\n/**\n * Represents the local zone for this JavaScript environment.\n * @implements {Zone}\n */\nclass SystemZone extends Zone {\n  /**\n   * Get a singleton instance of the local zone\n   * @return {SystemZone}\n   */\n  static get instance() {\n    if (singleton$1 === null) {\n      singleton$1 = new SystemZone();\n    }\n    return singleton$1;\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, {\n    format,\n    locale\n  }) {\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\nconst dtfCache = new Map();\nfunction makeDTF(zoneName) {\n  let dtf = dtfCache.get(zoneName);\n  if (dtf === undefined) {\n    dtf = new Intl.DateTimeFormat(\"en-US\", {\n      hour12: false,\n      timeZone: zoneName,\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    dtfCache.set(zoneName, dtf);\n  }\n  return dtf;\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};\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}\nfunction partsOffset(dtf, date) {\n  const formatted = dtf.formatToParts(date);\n  const filled = [];\n  for (let i = 0; i < formatted.length; i++) {\n    const {\n      type,\n      value\n    } = formatted[i];\n    const pos = typeToPos[type];\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}\nconst ianaZoneCache = new Map();\n/**\n * A zone identified by an IANA identifier, like America/New_York\n * @implements {Zone}\n */\nclass IANAZone extends Zone {\n  /**\n   * @param {string} name - Zone name\n   * @return {IANAZone}\n   */\n  static create(name) {\n    let zone = ianaZoneCache.get(name);\n    if (zone === undefined) {\n      ianaZoneCache.set(name, zone = new IANAZone(name));\n    }\n    return zone;\n  }\n\n  /**\n   * Reset local caches. Should only be necessary in testing scenarios.\n   * @return {void}\n   */\n  static resetCache() {\n    ianaZoneCache.clear();\n    dtfCache.clear();\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\", {\n        timeZone: zone\n      }).format();\n      return true;\n    } catch (e) {\n      return false;\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, {\n    format,\n    locale\n  }) {\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    if (!this.valid) return NaN;\n    const date = new Date(ts);\n    if (isNaN(date)) return NaN;\n    const dtf = makeDTF(this.name);\n    let [year, month, day, adOrBc, hour, minute, second] = dtf.formatToParts ? partsOffset(dtf, date) : hackyOffset(dtf, date);\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    const asUTC = objToLocalTS({\n      year,\n      month,\n      day,\n      hour: adjustedHour,\n      minute,\n      second,\n      millisecond: 0\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\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}\nconst intlDTCache = new Map();\nfunction getCachedDTF(locString, opts = {}) {\n  const key = JSON.stringify([locString, opts]);\n  let dtf = intlDTCache.get(key);\n  if (dtf === undefined) {\n    dtf = new Intl.DateTimeFormat(locString, opts);\n    intlDTCache.set(key, dtf);\n  }\n  return dtf;\n}\nconst intlNumCache = new Map();\nfunction getCachedINF(locString, opts = {}) {\n  const key = JSON.stringify([locString, opts]);\n  let inf = intlNumCache.get(key);\n  if (inf === undefined) {\n    inf = new Intl.NumberFormat(locString, opts);\n    intlNumCache.set(key, inf);\n  }\n  return inf;\n}\nconst intlRelCache = new Map();\nfunction getCachedRTF(locString, opts = {}) {\n  const {\n    base,\n    ...cacheKeyOpts\n  } = opts; // exclude `base` from the options\n  const key = JSON.stringify([locString, cacheKeyOpts]);\n  let inf = intlRelCache.get(key);\n  if (inf === undefined) {\n    inf = new Intl.RelativeTimeFormat(locString, opts);\n    intlRelCache.set(key, inf);\n  }\n  return inf;\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}\nconst intlResolvedOptionsCache = new Map();\nfunction getCachedIntResolvedOptions(locString) {\n  let opts = intlResolvedOptionsCache.get(locString);\n  if (opts === undefined) {\n    opts = new Intl.DateTimeFormat(locString).resolvedOptions();\n    intlResolvedOptionsCache.set(locString, opts);\n  }\n  return opts;\n}\nconst weekInfoCache = new Map();\nfunction getCachedWeekInfo(locString) {\n  let data = weekInfoCache.get(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    // minimalDays was removed from WeekInfo: https://github.com/tc39/proposal-intl-locale-info/issues/86\n    if (!(\"minimalDays\" in data)) {\n      data = {\n        ...fallbackWeekSettings,\n        ...data\n      };\n    }\n    weekInfoCache.set(locString, data);\n  }\n  return data;\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  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    const {\n      numberingSystem,\n      calendar\n    } = options;\n    return [selectedStr, numberingSystem, calendar];\n  }\n}\nfunction intlConfigString(localeStr, numberingSystem, outputCalendar) {\n  if (outputCalendar || numberingSystem) {\n    if (!localeStr.includes(\"-u-\")) {\n      localeStr += \"-u\";\n    }\n    if (outputCalendar) {\n      localeStr += `-ca-${outputCalendar}`;\n    }\n    if (numberingSystem) {\n      localeStr += `-nu-${numberingSystem}`;\n    }\n    return localeStr;\n  } else {\n    return localeStr;\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}\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}\nfunction listStuff(loc, length, englishFn, intlFn) {\n  const mode = loc.listingMode();\n  if (mode === \"error\") {\n    return null;\n  } else if (mode === \"en\") {\n    return englishFn(length);\n  } else {\n    return intlFn(length);\n  }\n}\nfunction supportsFastNumbers(loc) {\n  if (loc.numberingSystem && loc.numberingSystem !== \"latn\") {\n    return false;\n  } else {\n    return loc.numberingSystem === \"latn\" || !loc.locale || loc.locale.startsWith(\"en\") || getCachedIntResolvedOptions(loc.locale).numberingSystem === \"latn\";\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    const {\n      padTo,\n      floor,\n      ...otherOpts\n    } = opts;\n    if (!forceSimple || Object.keys(otherOpts).length > 0) {\n      const intlOpts = {\n        useGrouping: false,\n        ...opts\n      };\n      if (opts.padTo > 0) intlOpts.minimumIntegerDigits = opts.padTo;\n      this.inf = getCachedINF(intl, intlOpts);\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    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({\n          minutes: dt.offset\n        });\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({\n        minutes: dt.offset\n      });\n      this.originalZone = dt.zone;\n    }\n    const intlOpts = {\n      ...this.opts\n    };\n    intlOpts.timeZone = intlOpts.timeZone || z;\n    this.dtf = getCachedDTF(intl, intlOpts);\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().map(({\n        value\n      }) => value).join(\"\");\n    }\n    return this.dtf.format(this.dt.toJSDate());\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  resolvedOptions() {\n    return this.dtf.resolvedOptions();\n  }\n}\n\n/**\n * @private\n */\nclass PolyRelFormatter {\n  constructor(intl, isEnglish, opts) {\n    this.opts = {\n      style: \"long\",\n      ...opts\n    };\n    if (!isEnglish && hasRelative()) {\n      this.rtf = getCachedRTF(intl, opts);\n    }\n  }\n  format(count, unit) {\n    if (this.rtf) {\n      return this.rtf.format(count, unit);\n    } else {\n      return formatRelativeTime(unit, count, this.opts.numeric, this.opts.style !== \"long\");\n    }\n  }\n  formatToParts(count, unit) {\n    if (this.rtf) {\n      return this.rtf.formatToParts(count, unit);\n    } else {\n      return [];\n    }\n  }\n}\nconst fallbackWeekSettings = {\n  firstDay: 1,\n  minimalDays: 4,\n  weekend: [6, 7]\n};\n\n/**\n * @private\n */\nclass Locale {\n  static fromOpts(opts) {\n    return Locale.create(opts.locale, opts.numberingSystem, opts.outputCalendar, opts.weekSettings, opts.defaultToEN);\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  static resetCache() {\n    sysLocaleCache = null;\n    intlDTCache.clear();\n    intlNumCache.clear();\n    intlRelCache.clear();\n    intlResolvedOptionsCache.clear();\n    weekInfoCache.clear();\n  }\n  static fromObject({\n    locale,\n    numberingSystem,\n    outputCalendar,\n    weekSettings\n  } = {}) {\n    return Locale.create(locale, numberingSystem, outputCalendar, weekSettings);\n  }\n  constructor(locale, numbering, outputCalendar, weekSettings, specifiedLocale) {\n    const [parsedLocale, parsedNumberingSystem, parsedOutputCalendar] = parseLocaleString(locale);\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    this.weekdaysCache = {\n      format: {},\n      standalone: {}\n    };\n    this.monthsCache = {\n      format: {},\n      standalone: {}\n    };\n    this.meridiemCache = null;\n    this.eraCache = {};\n    this.specifiedLocale = specifiedLocale;\n    this.fastNumbersCached = null;\n  }\n  get fastNumbers() {\n    if (this.fastNumbersCached == null) {\n      this.fastNumbersCached = supportsFastNumbers(this);\n    }\n    return this.fastNumbersCached;\n  }\n  listingMode() {\n    const isActuallyEn = this.isEnglish();\n    const hasNoWeirdness = (this.numberingSystem === null || this.numberingSystem === \"latn\") && (this.outputCalendar === null || this.outputCalendar === \"gregory\");\n    return isActuallyEn && hasNoWeirdness ? \"en\" : \"intl\";\n  }\n  clone(alts) {\n    if (!alts || Object.getOwnPropertyNames(alts).length === 0) {\n      return this;\n    } else {\n      return Locale.create(alts.locale || this.specifiedLocale, alts.numberingSystem || this.numberingSystem, alts.outputCalendar || this.outputCalendar, validateWeekSettings(alts.weekSettings) || this.weekSettings, alts.defaultToEN || false);\n    }\n  }\n  redefaultToEN(alts = {}) {\n    return this.clone({\n      ...alts,\n      defaultToEN: true\n    });\n  }\n  redefaultToSystem(alts = {}) {\n    return this.clone({\n      ...alts,\n      defaultToEN: false\n    });\n  }\n  months(length, format = false) {\n    return listStuff(this, length, months, () => {\n      // Workaround for \"ja\" locale: formatToParts does not label all parts of the month\n      // as \"month\" and for this locale there is no difference between \"format\" and \"non-format\".\n      // As such, just use format() instead of formatToParts() and take the whole string\n      const monthSpecialCase = this.intl === \"ja\" || this.intl.startsWith(\"ja-\");\n      format &= !monthSpecialCase;\n      const intl = format ? {\n          month: length,\n          day: \"numeric\"\n        } : {\n          month: length\n        },\n        formatStr = format ? \"format\" : \"standalone\";\n      if (!this.monthsCache[formatStr][length]) {\n        const mapper = !monthSpecialCase ? dt => this.extract(dt, intl, \"month\") : dt => this.dtFormatter(dt, intl).format();\n        this.monthsCache[formatStr][length] = mapMonths(mapper);\n      }\n      return this.monthsCache[formatStr][length];\n    });\n  }\n  weekdays(length, format = false) {\n    return listStuff(this, length, weekdays, () => {\n      const intl = format ? {\n          weekday: length,\n          year: \"numeric\",\n          month: \"long\",\n          day: \"numeric\"\n        } : {\n          weekday: length\n        },\n        formatStr = format ? \"format\" : \"standalone\";\n      if (!this.weekdaysCache[formatStr][length]) {\n        this.weekdaysCache[formatStr][length] = mapWeekdays(dt => this.extract(dt, intl, \"weekday\"));\n      }\n      return this.weekdaysCache[formatStr][length];\n    });\n  }\n  meridiems() {\n    return listStuff(this, undefined, () => meridiems, () => {\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 = {\n          hour: \"numeric\",\n          hourCycle: \"h12\"\n        };\n        this.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map(dt => this.extract(dt, intl, \"dayperiod\"));\n      }\n      return this.meridiemCache;\n    });\n  }\n  eras(length) {\n    return listStuff(this, length, eras, () => {\n      const intl = {\n        era: length\n      };\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 => this.extract(dt, intl, \"era\"));\n      }\n      return this.eraCache[length];\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  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  dtFormatter(dt, intlOpts = {}) {\n    return new PolyDateFormatter(dt, this.intl, intlOpts);\n  }\n  relFormatter(opts = {}) {\n    return new PolyRelFormatter(this.intl, this.isEnglish(), opts);\n  }\n  listFormatter(opts = {}) {\n    return getCachedLF(this.intl, opts);\n  }\n  isEnglish() {\n    return this.locale === \"en\" || this.locale.toLowerCase() === \"en-us\" || getCachedIntResolvedOptions(this.intl).locale.startsWith(\"en-us\");\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  getStartOfWeek() {\n    return this.getWeekSettings().firstDay;\n  }\n  getMinDaysInFirstWeek() {\n    return this.getWeekSettings().minimalDays;\n  }\n  getWeekendDays() {\n    return this.getWeekSettings().weekend;\n  }\n  equals(other) {\n    return this.locale === other.locale && this.numberingSystem === other.numberingSystem && this.outputCalendar === other.outputCalendar;\n  }\n  toString() {\n    return `Locale(${this.locale}, ${this.numberingSystem}, ${this.outputCalendar})`;\n  }\n}\n\nlet singleton = null;\n\n/**\n * A zone with a fixed offset (meaning no DST)\n * @implements {Zone}\n */\nclass 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  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\n/**\n * A zone that failed to parse. You should never need to instantiate this.\n * @implements {Zone}\n */\nclass 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/**\n * @private\n */\nfunction normalizeZone(input, defaultZone) {\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;else if (lowered === \"local\" || lowered === \"system\") return SystemZone.instance;else if (lowered === \"utc\" || lowered === \"gmt\") return FixedOffsetZone.utcInstance;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\nconst 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};\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};\nconst hanidecChars = numberingSystems.hanidec.replace(/[\\[|\\]]/g, \"\").split(\"\");\nfunction 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      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}}\nconst digitRegexCache = new Map();\nfunction resetDigitRegexCache() {\n  digitRegexCache.clear();\n}\nfunction digitRegex({\n  numberingSystem\n}, append = \"\") {\n  const ns = numberingSystem || \"latn\";\n  let appendCache = digitRegexCache.get(ns);\n  if (appendCache === undefined) {\n    appendCache = new Map();\n    digitRegexCache.set(ns, appendCache);\n  }\n  let regex = appendCache.get(append);\n  if (regex === undefined) {\n    regex = new RegExp(`${numberingSystems[ns]}${append}`);\n    appendCache.set(append, regex);\n  }\n  return regex;\n}\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 */\nclass 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\nclass Invalid {\n  constructor(reason, explanation) {\n    this.reason = reason;\n    this.explanation = explanation;\n  }\n  toMessage() {\n    if (this.explanation) {\n      return `${this.reason}: ${this.explanation}`;\n    } else {\n      return this.reason;\n    }\n  }\n}\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];\nfunction unitOutOfRange(unit, value) {\n  return new Invalid(\"unit out of range\", `you specified ${value} (of type ${typeof value}) as a ${unit}, which is invalid`);\n}\nfunction dayOfWeek(year, month, day) {\n  const d = new Date(Date.UTC(year, month - 1, day));\n  if (year < 100 && year >= 0) {\n    d.setUTCFullYear(d.getUTCFullYear() - 1900);\n  }\n  const js = d.getUTCDay();\n  return js === 0 ? 7 : js;\n}\nfunction computeOrdinal(year, month, day) {\n  return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1];\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 {\n    month: month0 + 1,\n    day\n  };\n}\nfunction isoWeekdayToLocal(isoWeekday, startOfWeek) {\n  return (isoWeekday - startOfWeek + 7) % 7 + 1;\n}\n\n/**\n * @private\n */\n\nfunction gregorianToWeek(gregObj, minDaysInFirstWeek = 4, startOfWeek = 1) {\n  const {\n      year,\n      month,\n      day\n    } = gregObj,\n    ordinal = computeOrdinal(year, month, day),\n    weekday = isoWeekdayToLocal(dayOfWeek(year, month, day), startOfWeek);\n  let weekNumber = Math.floor((ordinal - weekday + 14 - minDaysInFirstWeek) / 7),\n    weekYear;\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  return {\n    weekYear,\n    weekNumber,\n    weekday,\n    ...timeObject(gregObj)\n  };\n}\nfunction weekToGregorian(weekData, minDaysInFirstWeek = 4, startOfWeek = 1) {\n  const {\n      weekYear,\n      weekNumber,\n      weekday\n    } = weekData,\n    weekdayOfJan4 = isoWeekdayToLocal(dayOfWeek(weekYear, 1, minDaysInFirstWeek), startOfWeek),\n    yearInDays = daysInYear(weekYear);\n  let ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 7 + minDaysInFirstWeek,\n    year;\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  const {\n    month,\n    day\n  } = uncomputeOrdinal(year, ordinal);\n  return {\n    year,\n    month,\n    day,\n    ...timeObject(weekData)\n  };\n}\nfunction gregorianToOrdinal(gregData) {\n  const {\n    year,\n    month,\n    day\n  } = gregData;\n  const ordinal = computeOrdinal(year, month, day);\n  return {\n    year,\n    ordinal,\n    ...timeObject(gregData)\n  };\n}\nfunction ordinalToGregorian(ordinalData) {\n  const {\n    year,\n    ordinal\n  } = ordinalData;\n  const {\n    month,\n    day\n  } = uncomputeOrdinal(year, ordinal);\n  return {\n    year,\n    month,\n    day,\n    ...timeObject(ordinalData)\n  };\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 */\nfunction usesLocalWeekValues(obj, loc) {\n  const hasLocaleWeekData = !isUndefined(obj.localWeekday) || !isUndefined(obj.localWeekNumber) || !isUndefined(obj.localWeekYear);\n  if (hasLocaleWeekData) {\n    const hasIsoWeekData = !isUndefined(obj.weekday) || !isUndefined(obj.weekNumber) || !isUndefined(obj.weekYear);\n    if (hasIsoWeekData) {\n      throw new ConflictingSpecificationError(\"Cannot mix locale-based week fields with ISO-based week fields\");\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 {\n      minDaysInFirstWeek: 4,\n      startOfWeek: 1\n    };\n  }\n}\nfunction hasInvalidWeekData(obj, minDaysInFirstWeek = 4, startOfWeek = 1) {\n  const validYear = isInteger(obj.weekYear),\n    validWeek = integerBetween(obj.weekNumber, 1, weeksInWeekYear(obj.weekYear, minDaysInFirstWeek, startOfWeek)),\n    validWeekday = integerBetween(obj.weekday, 1, 7);\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}\nfunction hasInvalidOrdinalData(obj) {\n  const validYear = isInteger(obj.year),\n    validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year));\n  if (!validYear) {\n    return unitOutOfRange(\"year\", obj.year);\n  } else if (!validOrdinal) {\n    return unitOutOfRange(\"ordinal\", obj.ordinal);\n  } else return false;\n}\nfunction 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  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}\nfunction hasInvalidTimeData(obj) {\n  const {\n    hour,\n    minute,\n    second,\n    millisecond\n  } = obj;\n  const validHour = integerBetween(hour, 0, 23) || 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  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\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\n/**\n * @private\n */\n\n// TYPES\n\nfunction isUndefined(o) {\n  return typeof o === \"undefined\";\n}\nfunction isNumber(o) {\n  return typeof o === \"number\";\n}\nfunction isInteger(o) {\n  return typeof o === \"number\" && o % 1 === 0;\n}\nfunction isString(o) {\n  return typeof o === \"string\";\n}\nfunction isDate(o) {\n  return Object.prototype.toString.call(o) === \"[object Date]\";\n}\n\n// CAPABILITIES\n\nfunction hasRelative() {\n  try {\n    return typeof Intl !== \"undefined\" && !!Intl.RelativeTimeFormat;\n  } catch (e) {\n    return false;\n  }\n}\nfunction hasLocaleWeekInfo() {\n  try {\n    return typeof Intl !== \"undefined\" && !!Intl.Locale && (\"weekInfo\" in Intl.Locale.prototype || \"getWeekInfo\" in Intl.Locale.prototype);\n  } catch (e) {\n    return false;\n  }\n}\n\n// OBJECTS AND ARRAYS\n\nfunction maybeArray(thing) {\n  return Array.isArray(thing) ? thing : [thing];\n}\nfunction 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}\nfunction pick(obj, keys) {\n  return keys.reduce((a, k) => {\n    a[k] = obj[k];\n    return a;\n  }, {});\n}\nfunction hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\nfunction 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 (!integerBetween(settings.firstDay, 1, 7) || !integerBetween(settings.minimalDays, 1, 7) || !Array.isArray(settings.weekend) || settings.weekend.some(v => !integerBetween(v, 1, 7))) {\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\nfunction 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\nfunction floorMod(x, n) {\n  return x - n * Math.floor(x / n);\n}\nfunction 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}\nfunction parseInteger(string) {\n  if (isUndefined(string) || string === null || string === \"\") {\n    return undefined;\n  } else {\n    return parseInt(string, 10);\n  }\n}\nfunction parseFloating(string) {\n  if (isUndefined(string) || string === null || string === \"\") {\n    return undefined;\n  } else {\n    return parseFloat(string);\n  }\n}\nfunction 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}\nfunction roundTo(number, digits, rounding = \"round\") {\n  const factor = 10 ** digits;\n  switch (rounding) {\n    case \"expand\":\n      return number > 0 ? Math.ceil(number * factor) / factor : Math.floor(number * factor) / factor;\n    case \"trunc\":\n      return Math.trunc(number * factor) / factor;\n    case \"round\":\n      return Math.round(number * factor) / factor;\n    case \"floor\":\n      return Math.floor(number * factor) / factor;\n    case \"ceil\":\n      return Math.ceil(number * factor) / factor;\n    default:\n      throw new RangeError(`Value rounding ${rounding} is out of range`);\n  }\n}\n\n// DATE BASICS\n\nfunction isLeapYear(year) {\n  return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\nfunction daysInYear(year) {\n  return isLeapYear(year) ? 366 : 365;\n}\nfunction daysInMonth(year, month) {\n  const modMonth = floorMod(month - 1, 12) + 1,\n    modYear = year + (month - modMonth) / 12;\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)\nfunction objToLocalTS(obj) {\n  let d = Date.UTC(obj.year, obj.month - 1, obj.day, obj.hour, obj.minute, obj.second, obj.millisecond);\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}\nfunction 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}\nfunction untruncateYear(year) {\n  if (year > 99) {\n    return year;\n  } else return year > Settings.twoDigitCutoffYear ? 1900 + year : 2000 + year;\n}\n\n// PARSING\n\nfunction 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  if (timeZone) {\n    intlOpts.timeZone = timeZone;\n  }\n  const modified = {\n    timeZoneName: offsetFormat,\n    ...intlOpts\n  };\n  const parsed = new Intl.DateTimeFormat(locale, modified).formatToParts(date).find(m => m.type.toLowerCase() === \"timezonename\");\n  return parsed ? parsed.value : null;\n}\n\n// signedOffset('-5', '30') -> -330\nfunction 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  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\nfunction asNumber(value) {\n  const numericValue = Number(value);\n  if (typeof value === \"boolean\" || value === \"\" || !Number.isFinite(numericValue)) throw new InvalidArgumentError(`Invalid unit value ${value}`);\n  return numericValue;\n}\nfunction 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 */\nfunction 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  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}\nfunction timeObject(obj) {\n  return pick(obj, [\"hour\", \"minute\", \"second\", \"millisecond\"]);\n}\n\n/**\n * @private\n */\n\nconst monthsLong = [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"];\nconst monthsShort = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\nconst monthsNarrow = [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"];\nfunction 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}\nconst weekdaysLong = [\"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\", \"Sunday\"];\nconst weekdaysShort = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"];\nconst weekdaysNarrow = [\"M\", \"T\", \"W\", \"T\", \"F\", \"S\", \"S\"];\nfunction 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}\nconst meridiems = [\"AM\", \"PM\"];\nconst erasLong = [\"Before Christ\", \"Anno Domini\"];\nconst erasShort = [\"BC\", \"AD\"];\nconst erasNarrow = [\"B\", \"A\"];\nfunction 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}\nfunction meridiemForDateTime(dt) {\n  return meridiems[dt.hour < 12 ? 0 : 1];\n}\nfunction weekdayForDateTime(dt, length) {\n  return weekdays(length)[dt.weekday - 1];\n}\nfunction monthForDateTime(dt, length) {\n  return months(length)[dt.month - 1];\n}\nfunction eraForDateTime(dt, length) {\n  return eras(length)[dt.year < 0 ? 0 : 1];\n}\nfunction 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  const lastable = [\"hours\", \"minutes\", \"seconds\"].indexOf(unit) === -1;\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    }\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 ? singular ? lilUnits[1] : lilUnits[2] || lilUnits[1] : singular ? units[unit][0] : unit;\n  return isInPast ? `${fmtValue} ${fmtUnit} ago` : `in ${fmtValue} ${fmtUnit}`;\n}\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}\nconst macroTokenToFormatOpts = {\n  D: DATE_SHORT,\n  DD: DATE_MED,\n  DDD: DATE_FULL,\n  DDDD: DATE_HUGE,\n  t: TIME_SIMPLE,\n  tt: TIME_WITH_SECONDS,\n  ttt: TIME_WITH_SHORT_OFFSET,\n  tttt: TIME_WITH_LONG_OFFSET,\n  T: TIME_24_SIMPLE,\n  TT: TIME_24_WITH_SECONDS,\n  TTT: TIME_24_WITH_SHORT_OFFSET,\n  TTTT: TIME_24_WITH_LONG_OFFSET,\n  f: DATETIME_SHORT,\n  ff: DATETIME_MED,\n  fff: DATETIME_FULL,\n  ffff: DATETIME_HUGE,\n  F: DATETIME_SHORT_WITH_SECONDS,\n  FF: DATETIME_MED_WITH_SECONDS,\n  FFF: DATETIME_FULL_WITH_SECONDS,\n  FFFF: DATETIME_HUGE_WITH_SECONDS\n};\n\n/**\n * @private\n */\n\nclass Formatter {\n  static create(locale, opts = {}) {\n    return new Formatter(locale, opts);\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        // turn '' into a literal signal quote instead of just skipping the empty literal\n        if (currentFull.length > 0 || bracketed) {\n          splits.push({\n            literal: bracketed || /^\\s+$/.test(currentFull),\n            val: currentFull === \"\" ? \"'\" : currentFull\n          });\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({\n            literal: /^\\s+$/.test(currentFull),\n            val: currentFull\n          });\n        }\n        currentFull = c;\n        current = c;\n      }\n    }\n    if (currentFull.length > 0) {\n      splits.push({\n        literal: bracketed || /^\\s+$/.test(currentFull),\n        val: currentFull\n      });\n    }\n    return splits;\n  }\n  static macroTokenToFormatOpts(token) {\n    return macroTokenToFormatOpts[token];\n  }\n  constructor(locale, formatOpts) {\n    this.opts = formatOpts;\n    this.loc = locale;\n    this.systemLoc = null;\n  }\n  formatWithSystemDefault(dt, opts) {\n    if (this.systemLoc === null) {\n      this.systemLoc = this.loc.redefaultToSystem();\n    }\n    const df = this.systemLoc.dtFormatter(dt, {\n      ...this.opts,\n      ...opts\n    });\n    return df.format();\n  }\n  dtFormatter(dt, opts = {}) {\n    return this.loc.dtFormatter(dt, {\n      ...this.opts,\n      ...opts\n    });\n  }\n  formatDateTime(dt, opts) {\n    return this.dtFormatter(dt, opts).format();\n  }\n  formatDateTimeParts(dt, opts) {\n    return this.dtFormatter(dt, opts).formatToParts();\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  resolvedOptions(dt, opts) {\n    return this.dtFormatter(dt, opts).resolvedOptions();\n  }\n  num(n, p = 0, signDisplay = undefined) {\n    // we get some perf out of doing this here, annoyingly\n    if (this.opts.forceSimple) {\n      return padStart(n, p);\n    }\n    const opts = {\n      ...this.opts\n    };\n    if (p > 0) {\n      opts.padTo = p;\n    }\n    if (signDisplay) {\n      opts.signDisplay = signDisplay;\n    }\n    return this.loc.numberFormatter(opts).format(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        return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : \"\";\n      },\n      meridiem = () => knownEnglish ? meridiemForDateTime(dt) : string({\n        hour: \"numeric\",\n        hourCycle: \"h12\"\n      }, \"dayperiod\"),\n      month = (length, standalone) => knownEnglish ? monthForDateTime(dt, length) : string(standalone ? {\n        month: length\n      } : {\n        month: length,\n        day: \"numeric\"\n      }, \"month\"),\n      weekday = (length, standalone) => knownEnglish ? weekdayForDateTime(dt, length) : string(standalone ? {\n        weekday: length\n      } : {\n        weekday: length,\n        month: \"long\",\n        day: \"numeric\"\n      }, \"weekday\"),\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 => knownEnglish ? eraForDateTime(dt, length) : string({\n        era: length\n      }, \"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({\n              format: \"narrow\",\n              allowZ: this.opts.allowZ\n            });\n          case \"ZZ\":\n            // like +06:00\n            return formatOffset({\n              format: \"short\",\n              allowZ: this.opts.allowZ\n            });\n          case \"ZZZ\":\n            // like +0600\n            return formatOffset({\n              format: \"techie\",\n              allowZ: this.opts.allowZ\n            });\n          case \"ZZZZ\":\n            // like EST\n            return dt.zone.offsetName(dt.ts, {\n              format: \"short\",\n              locale: this.loc.locale\n            });\n          case \"ZZZZZ\":\n            // like Eastern Standard Time\n            return dt.zone.offsetName(dt.ts, {\n              format: \"long\",\n              locale: this.loc.locale\n            });\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({\n              day: \"numeric\"\n            }, \"day\") : this.num(dt.day);\n          case \"dd\":\n            return useDateTimeFormatter ? string({\n              day: \"2-digit\"\n            }, \"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 ? string({\n              month: \"numeric\",\n              day: \"numeric\"\n            }, \"month\") : this.num(dt.month);\n          case \"LL\":\n            // like 01, doesn't seem to work\n            return useDateTimeFormatter ? string({\n              month: \"2-digit\",\n              day: \"numeric\"\n            }, \"month\") : 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 ? string({\n              month: \"numeric\"\n            }, \"month\") : this.num(dt.month);\n          case \"MM\":\n            // like 01\n            return useDateTimeFormatter ? string({\n              month: \"2-digit\"\n            }, \"month\") : 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({\n              year: \"numeric\"\n            }, \"year\") : this.num(dt.year);\n          case \"yy\":\n            // like 14\n            return useDateTimeFormatter ? string({\n              year: \"2-digit\"\n            }, \"year\") : this.num(dt.year.toString().slice(-2), 2);\n          case \"yyyy\":\n            // like 0012\n            return useDateTimeFormatter ? string({\n              year: \"numeric\"\n            }, \"year\") : this.num(dt.year, 4);\n          case \"yyyyyy\":\n            // like 000012\n            return useDateTimeFormatter ? string({\n              year: \"numeric\"\n            }, \"year\") : 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    return stringifyTokens(Formatter.parseFormat(fmt), tokenToString);\n  }\n  formatDurationFromString(dur, fmt) {\n    const invertLargest = this.opts.signMode === \"negativeLargestOnly\" ? -1 : 1;\n    const tokenToField = token => {\n        switch (token[0]) {\n          case \"S\":\n            return \"milliseconds\";\n          case \"s\":\n            return \"seconds\";\n          case \"m\":\n            return \"minutes\";\n          case \"h\":\n            return \"hours\";\n          case \"d\":\n            return \"days\";\n          case \"w\":\n            return \"weeks\";\n          case \"M\":\n            return \"months\";\n          case \"y\":\n            return \"years\";\n          default:\n            return null;\n        }\n      },\n      tokenToString = (lildur, info) => token => {\n        const mapped = tokenToField(token);\n        if (mapped) {\n          const inversionFactor = info.isNegativeDuration && mapped !== info.largestUnit ? invertLargest : 1;\n          let signDisplay;\n          if (this.opts.signMode === \"negativeLargestOnly\" && mapped !== info.largestUnit) {\n            signDisplay = \"never\";\n          } else if (this.opts.signMode === \"all\") {\n            signDisplay = \"always\";\n          } else {\n            // \"auto\" and \"negative\" are the same, but \"auto\" has better support\n            signDisplay = \"auto\";\n          }\n          return this.num(lildur.get(mapped) * inversionFactor, token.length, signDisplay);\n        } else {\n          return token;\n        }\n      },\n      tokens = Formatter.parseFormat(fmt),\n      realTokens = tokens.reduce((found, {\n        literal,\n        val\n      }) => literal ? found : found.concat(val), []),\n      collapsed = dur.shiftTo(...realTokens.map(tokenToField).filter(t => t)),\n      durationInfo = {\n        isNegativeDuration: collapsed < 0,\n        // this relies on \"collapsed\" being based on \"shiftTo\", which builds up the object\n        // in order\n        largestUnit: Object.keys(collapsed.values)[0]\n      };\n    return stringifyTokens(tokens, tokenToString(collapsed, durationInfo));\n  }\n}\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})?)?/;\nfunction combineRegexes(...regexes) {\n  const full = regexes.reduce((f, r) => f + r.source, \"\");\n  return RegExp(`^${full}$`);\n}\nfunction combineExtractors(...extractors) {\n  return m => extractors.reduce(([mergedVals, mergedZone, cursor], ex) => {\n    const [val, zone, next] = ex(m, cursor);\n    return [{\n      ...mergedVals,\n      ...val\n    }, zone || mergedZone, next];\n  }, [{}, null, 1]).slice(0, 2);\n}\nfunction parse(s, ...patterns) {\n  if (s == null) {\n    return [null, null];\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}\nfunction simpleParse(...keys) {\n  return (match, cursor) => {\n    const ret = {};\n    let i;\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 = /(?:([Zz])|([+-]\\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(`(?:[Tt]${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(`${isoTimeBaseRegex.source} ?(?:${offsetRegex.source}|(${ianaRegex.source}))?`);\nconst sqlTimeExtensionRegex = RegExp(`(?: ${sqlTimeRegex.source})?`);\nfunction int(match, pos, fallback) {\n  const m = match[pos];\n  return isUndefined(m) ? fallback : parseInteger(m);\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  return [item, null, cursor + 3];\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  return [item, null, cursor + 4];\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}\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 = /^-?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)?)?)$/;\nfunction extractISODuration(match) {\n  const [s, yearStr, monthStr, weekStr, dayStr, hourStr, minuteStr, secondStr, millisecondsStr] = match;\n  const hasNegativePrefix = s[0] === \"-\";\n  const negativeSeconds = secondStr && secondStr[0] === \"-\";\n  const maybeNegate = (num, force = false) => num !== undefined && (force || num && hasNegativePrefix) ? -num : num;\n  return [{\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// 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};\nfunction fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n  const result = {\n    year: yearStr.length === 2 ? untruncateYear(parseInteger(yearStr)) : parseInteger(yearStr),\n    month: monthsShort.indexOf(monthStr) + 1,\n    day: parseInteger(dayStr),\n    hour: parseInteger(hourStr),\n    minute: parseInteger(minuteStr)\n  };\n  if (secondStr) result.second = parseInteger(secondStr);\n  if (weekdayStr) {\n    result.weekday = weekdayStr.length > 3 ? weekdaysLong.indexOf(weekdayStr) + 1 : weekdaysShort.indexOf(weekdayStr) + 1;\n  }\n  return result;\n}\n\n// RFC 2822/5322\nconst rfc2822 = /^(?:(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)))$/;\nfunction extractRFC2822(match) {\n  const [, weekdayStr, dayStr, monthStr, yearStr, hourStr, minuteStr, secondStr, obsOffset, milOffset, offHourStr, offMinuteStr] = match,\n    result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\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  return [result, new FixedOffsetZone(offset)];\n}\nfunction preprocessRFC2822(s) {\n  // Remove comments and folding whitespace and replace multiple-spaces with a single space\n  return s.replace(/\\([^()]*\\)|[\\n\\t]/g, \" \").replace(/(\\s\\s+)/g, \" \").trim();\n}\n\n// http date\n\nconst rfc1123 = /^(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 = /^(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 = /^(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})$/;\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}\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}\nconst isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex);\nconst isoWeekWithTimeExtensionRegex = combineRegexes(isoWeekRegex, isoTimeExtensionRegex);\nconst isoOrdinalWithTimeExtensionRegex = combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex);\nconst isoTimeCombinedRegex = combineRegexes(isoTimeRegex);\nconst extractISOYmdTimeAndOffset = combineExtractors(extractISOYmd, extractISOTime, extractISOOffset, extractIANAZone);\nconst extractISOWeekTimeAndOffset = combineExtractors(extractISOWeekData, extractISOTime, extractISOOffset, extractIANAZone);\nconst extractISOOrdinalDateAndTime = combineExtractors(extractISOOrdinalData, extractISOTime, extractISOOffset, extractIANAZone);\nconst extractISOTimeAndOffset = combineExtractors(extractISOTime, extractISOOffset, extractIANAZone);\n\n/*\n * @private\n */\n\nfunction parseISODate(s) {\n  return parse(s, [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset], [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset], [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDateAndTime], [isoTimeCombinedRegex, extractISOTimeAndOffset]);\n}\nfunction parseRFC2822Date(s) {\n  return parse(preprocessRFC2822(s), [rfc2822, extractRFC2822]);\n}\nfunction parseHTTPDate(s) {\n  return parse(s, [rfc1123, extractRFC1123Or850], [rfc850, extractRFC1123Or850], [ascii, extractASCII]);\n}\nfunction parseISODuration(s) {\n  return parse(s, [isoDuration, extractISODuration]);\n}\nconst extractISOTimeOnly = combineExtractors(extractISOTime);\nfunction parseISOTimeOnly(s) {\n  return parse(s, [isoTimeOnly, extractISOTimeOnly]);\n}\nconst sqlYmdWithTimeExtensionRegex = combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex);\nconst sqlTimeCombinedRegex = combineRegexes(sqlTimeRegex);\nconst extractISOTimeOffsetAndIANAZone = combineExtractors(extractISOTime, extractISOOffset, extractIANAZone);\nfunction parseSQL(s) {\n  return parse(s, [sqlYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset], [sqlTimeCombinedRegex, extractISOTimeOffsetAndIANAZone]);\n}\n\nconst INVALID$2 = \"Invalid Duration\";\n\n// unit conversion constants\nconst 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: {\n      minutes: 60,\n      seconds: 60 * 60,\n      milliseconds: 60 * 60 * 1000\n    },\n    minutes: {\n      seconds: 60,\n      milliseconds: 60 * 1000\n    },\n    seconds: {\n      milliseconds: 1000\n    }\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    ...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$1 = [\"years\", \"quarters\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\nconst reverseUnits = orderedUnits$1.slice(0).reverse();\n\n// clone really means \"create another instance just like this one, but with these changes\"\nfunction clone$1(dur, alts, clear = false) {\n  // deep merge for vals\n  const conf = {\n    values: clear ? alts.values : {\n      ...dur.values,\n      ...(alts.values || {})\n    },\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}\nfunction durationToMillis(matrix, vals) {\n  var _vals$milliseconds;\n  let sum = (_vals$milliseconds = vals.milliseconds) != null ? _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  orderedUnits$1.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$1.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 */\nclass Duration {\n  /**\n   * @private\n   */\n  constructor(config) {\n    const accurate = config.conversionAccuracy === \"longterm\" || false;\n    let matrix = accurate ? accurateMatrix : casualMatrix;\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({\n      milliseconds: count\n    }, 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(`Duration.fromObject: argument expected to be an object, got ${obj === null ? \"null\" : typeof obj}`);\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(`Unknown duration argument ${durationLike} of type ${typeof durationLike}`);\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    const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n    if (Settings.throwOnInvalid) {\n      throw new InvalidDurationError(invalid);\n    } else {\n      return new Duration({\n        invalid\n      });\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    if (!normalized) throw new InvalidUnitError(unit);\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   * @param {'negative'|'all'|'negativeLargestOnly'} [opts.signMode=negative] - How to handle signs\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   * @example Duration.fromObject({ days: 6, seconds: 2 }).toFormat(\"d s\", { signMode: \"all\" }) //=> \"+6 +2\"\n   * @example Duration.fromObject({ days: -6, seconds: -2 }).toFormat(\"d s\", { signMode: \"all\" }) //=> \"-6 -2\"\n   * @example Duration.fromObject({ days: -6, seconds: -2 }).toFormat(\"d s\", { signMode: \"negativeLargestOnly\" }) //=> \"-6 2\"\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 ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt) : INVALID$2;\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   * @param {boolean} [opts.showZeros=true] - Show all units previously used by the duration even if they are zero\n   * @example\n   * ```js\n   * var dur = Duration.fromObject({ months: 1, weeks: 0, hours: 5, minutes: 6 })\n   * dur.toHuman() //=> '1 month, 0 weeks, 5 hours, 6 minutes'\n   * dur.toHuman({ listStyle: \"long\" }) //=> '1 month, 0 weeks, 5 hours, and 6 minutes'\n   * dur.toHuman({ unitDisplay: \"short\" }) //=> '1 mth, 0 wks, 5 hr, 6 min'\n   * dur.toHuman({ showZeros: false }) //=> '1 month, 5 hours, 6 minutes'\n   * ```\n   */\n  toHuman(opts = {}) {\n    if (!this.isValid) return INVALID$2;\n    const showZeros = opts.showZeros !== false;\n    const l = orderedUnits$1.map(unit => {\n      const val = this.values[unit];\n      if (isUndefined(val) || val === 0 && !showZeros) {\n        return null;\n      }\n      return this.loc.numberFormatter({\n        style: \"unit\",\n        unitDisplay: \"long\",\n        ...opts,\n        unit: unit.slice(0, -1)\n      }).format(val);\n    }).filter(n => n);\n    return this.loc.listFormatter({\n      type: \"conjunction\",\n      style: opts.listStyle || \"narrow\",\n      ...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 {\n      ...this.values\n    };\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    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) 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    const millis = this.toMillis();\n    if (millis < 0 || millis >= 86400000) return null;\n    opts = {\n      suppressMilliseconds: false,\n      suppressSeconds: false,\n      includePrefix: false,\n      format: \"extended\",\n      ...opts,\n      includeOffset: false\n    };\n    const dateTime = DateTime.fromMillis(millis, {\n      zone: \"UTC\"\n    });\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    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    const dur = Duration.fromDurationLike(duration),\n      result = {};\n    for (const k of orderedUnits$1) {\n      if (hasOwnProperty(dur.values, k) || hasOwnProperty(this.values, k)) {\n        result[k] = dur.get(k) + this.get(k);\n      }\n    }\n    return clone$1(this, {\n      values: result\n    }, 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    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$1(this, {\n      values: result\n    }, 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    const mixed = {\n      ...this.values,\n      ...normalizeObject(values, Duration.normalizeUnit)\n    };\n    return clone$1(this, {\n      values: mixed\n    });\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({\n    locale,\n    numberingSystem,\n    conversionAccuracy,\n    matrix\n  } = {}) {\n    const loc = this.loc.clone({\n      locale,\n      numberingSystem\n    });\n    const opts = {\n      loc,\n      matrix,\n      conversionAccuracy\n    };\n    return clone$1(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$1(this, {\n      values: vals\n    }, 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$1(this, {\n      values: vals\n    }, 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    if (units.length === 0) {\n      return this;\n    }\n    units = units.map(u => Duration.normalizeUnit(u));\n    const built = {},\n      accumulated = {},\n      vals = this.toObject();\n    let lastUnit;\n    for (const k of orderedUnits$1) {\n      if (units.indexOf(k) >= 0) {\n        lastUnit = k;\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] += key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key];\n      }\n    }\n    normalizeValues(this.matrix, built);\n    return clone$1(this, {\n      values: built\n    }, 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(\"years\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\");\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$1(this, {\n      values: negated\n    }, true);\n  }\n\n  /**\n   * Removes all units with values equal to 0 from this Duration.\n   * @example Duration.fromObject({ years: 2, days: 0, hours: 0, minutes: 0 }).removeZeros().toObject() //=> { years: 2 }\n   * @return {Duration}\n   */\n  removeZeros() {\n    if (!this.isValid) return this;\n    const vals = removeZeroes(this.values);\n    return clone$1(this, {\n      values: vals\n    }, 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    if (!this.loc.equals(other.loc)) {\n      return false;\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    for (const u of orderedUnits$1) {\n      if (!eq(this.values[u], other.values[u])) {\n        return false;\n      }\n    }\n    return true;\n  }\n}\n\nconst INVALID$1 = \"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(\"end before start\", `The end of an interval must be after its start, but you had start=${start.toISO()} and end=${end.toISO()}`);\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 */\nclass 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    const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n    if (Settings.throwOnInvalid) {\n      throw new InvalidIntervalError(invalid);\n    } else {\n      return new Interval({\n        invalid\n      });\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    const validateError = validateStartEnd(builtStart, builtEnd);\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      let end, endIsValid;\n      try {\n        end = DateTime.fromISO(e, opts);\n        endIsValid = end.isValid;\n      } catch (e) {\n        endIsValid = false;\n      }\n      if (startIsValid && endIsValid) {\n        return Interval.fromDateTimes(start, end);\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. This is the first instant which is not part of the interval\n   * (Interval is half-open).\n   * @type {DateTime}\n   */\n  get end() {\n    return this.isValid ? this.e : null;\n  }\n\n  /**\n   * Returns the last DateTime included in the interval (since end is not part of the interval)\n   * @type {DateTime}\n   */\n  get lastDateTime() {\n    return this.isValid ? this.e ? this.e.minus(1) : null : 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 != null && opts.useLocaleWeeks) {\n      end = this.end.reconfigure({\n        locale: start.locale\n      });\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({\n    start,\n    end\n  } = {}) {\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.map(friendlyDateTime).filter(d => this.contains(d)).sort((a, b) => a.toMillis() - b.toMillis()),\n      results = [];\n    let {\n        s\n      } = this,\n      i = 0;\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    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    if (!this.isValid || !dur.isValid || dur.as(\"milliseconds\") === 0) {\n      return [];\n    }\n    let {\n        s\n      } = this,\n      idx = 1,\n      next;\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    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    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    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 an equivalent minimal set of Intervals.\n   * Combines overlapping and adjacent Intervals.\n   * The resulting array will contain the Intervals in ascending order, that is, starting with the earliest Interval\n   * and ending with the latest.\n   *\n   * @param {Array} intervals\n   * @return {Array}\n   */\n  static merge(intervals) {\n    const [found, final] = intervals.sort((a, b) => a.s - b.s).reduce(([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    }, [[], null]);\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,\n        type: \"s\"\n      }, {\n        time: i.e,\n        type: \"e\"\n      }]),\n      flattened = Array.prototype.concat(...ends),\n      arr = flattened.sort((a, b) => a.time - b.time);\n    for (const i of arr) {\n      currentCount += i.type === \"s\" ? 1 : -1;\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        start = null;\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)).map(i => this.intersection(i)).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$1;\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 = DATE_SHORT, opts = {}) {\n    return this.isValid ? Formatter.create(this.s.loc.clone(opts), formatOpts).formatInterval(this) : INVALID$1;\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$1;\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$1;\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$1;\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, {\n    separator = \" – \"\n  } = {}) {\n    if (!this.isValid) return INVALID$1;\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\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 */\nclass 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({\n      month: 12\n    });\n    return !zone.isUniversal && proto.offset !== proto.set({\n      month: 6\n    }).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({\n    locale = null,\n    locObj = null\n  } = {}) {\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({\n    locale = null,\n    locObj = null\n  } = {}) {\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({\n    locale = null,\n    locObj = null\n  } = {}) {\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(length = \"long\", {\n    locale = null,\n    numberingSystem = null,\n    locObj = null,\n    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(length = \"long\", {\n    locale = null,\n    numberingSystem = null,\n    locObj = null,\n    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\", {\n    locale = null,\n    numberingSystem = null,\n    locObj = null\n  } = {}) {\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(length = \"long\", {\n    locale = null,\n    numberingSystem = null,\n    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({\n    locale = null\n  } = {}) {\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\", {\n    locale = null\n  } = {}) {\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 {\n      relative: hasRelative(),\n      localeWeek: hasLocaleWeekInfo()\n    };\n  }\n}\n\nfunction dayDiff(earlier, later) {\n  const utcDayStart = dt => dt.toUTC(0, {\n      keepLocalTime: true\n    }).startOf(\"day\").valueOf(),\n    ms = utcDayStart(later) - utcDayStart(earlier);\n  return Math.floor(Duration.fromMillis(ms).as(\"days\"));\n}\nfunction highOrderDiffs(cursor, later, units) {\n  const differs = [[\"years\", (a, b) => b.year - a.year], [\"quarters\", (a, b) => b.quarter - a.quarter + (b.year - a.year) * 4], [\"months\", (a, b) => b.month - a.month + (b.year - a.year) * 12], [\"weeks\", (a, b) => {\n    const days = dayDiff(a, b);\n    return (days - days % 7) / 7;\n  }], [\"days\", dayDiff]];\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      results[unit] = differ(cursor, later);\n      highWater = earlier.plus(results);\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  return [cursor, results, highWater, lowestOrder];\n}\nfunction diff (earlier, later, units, opts) {\n  let [cursor, results, highWater, lowestOrder] = highOrderDiffs(earlier, later, units);\n  const remainingMillis = later - cursor;\n  const lowerOrderUnits = units.filter(u => [\"hours\", \"minutes\", \"seconds\", \"milliseconds\"].indexOf(u) >= 0);\n  if (lowerOrderUnits.length === 0) {\n    if (highWater < later) {\n      highWater = cursor.plus({\n        [lowestOrder]: 1\n      });\n    }\n    if (highWater !== cursor) {\n      results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor);\n    }\n  }\n  const duration = Duration.fromObject(results, opts);\n  if (lowerOrderUnits.length > 0) {\n    return Duration.fromMillis(remainingMillis, opts).shiftTo(...lowerOrderUnits).plus(duration);\n  } else {\n    return duration;\n  }\n}\n\nconst MISSING_FTP = \"missing Intl.DateTimeFormat.formatToParts support\";\nfunction intUnit(regex, post = i => i) {\n  return {\n    regex,\n    deser: ([s]) => post(parseDigits(s))\n  };\n}\nconst NBSP = String.fromCharCode(160);\nconst spaceOrNBSP = `[ ${NBSP}]`;\nconst spaceOrNBSPRegExp = new RegExp(spaceOrNBSP, \"g\");\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}\nfunction stripInsensitivities(s) {\n  return s.replace(/\\./g, \"\") // ignore dots that were made optional\n  .replace(spaceOrNBSPRegExp, \" \") // interchange space and nbsp\n  .toLowerCase();\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]) => strings.findIndex(i => stripInsensitivities(s) === stripInsensitivities(i)) + startIndex\n    };\n  }\n}\nfunction offset(regex, groups) {\n  return {\n    regex,\n    deser: ([, h, m]) => signedOffset(h, m),\n    groups\n  };\n}\nfunction simple(regex) {\n  return {\n    regex,\n    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 => ({\n      regex: RegExp(escapeToken(t.val)),\n      deser: ([s]) => s,\n      literal: true\n    }),\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  const unit = unitate(token) || {\n    invalidReason: MISSING_FTP\n  };\n  unit.token = token;\n  return unit;\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};\nfunction tokenForPart(part, formatOpts, resolvedOpts) {\n  const {\n    type,\n    value\n  } = part;\n  if (type === \"literal\") {\n    const isSpace = /^\\s+$/.test(value);\n    return {\n      literal: !isSpace,\n      val: isSpace ? \" \" : value\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  if (val) {\n    return {\n      literal: false,\n      val\n    };\n  }\n  return undefined;\n}\nfunction buildRegex(units) {\n  const re = units.map(u => u.regex).reduce((f, r) => `${f}(${r.source})`, \"\");\n  return [`^${re}$`, units];\n}\nfunction match(input, regex, handlers) {\n  const matches = input.match(regex);\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}\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  let zone = null;\n  let specificOffset;\n  if (!isUndefined(matches.z)) {\n    zone = IANAZone.create(matches.z);\n  }\n  if (!isUndefined(matches.Z)) {\n    if (!zone) {\n      zone = new FixedOffsetZone(matches.Z);\n    }\n    specificOffset = matches.Z;\n  }\n  if (!isUndefined(matches.q)) {\n    matches.M = (matches.q - 1) * 3 + 1;\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  if (matches.G === 0 && matches.y) {\n    matches.y = -matches.y;\n  }\n  if (!isUndefined(matches.u)) {\n    matches.S = parseMillis(matches.u);\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    return r;\n  }, {});\n  return [vals, zone, specificOffset];\n}\nlet dummyDateTimeCache = null;\nfunction getDummyDateTime() {\n  if (!dummyDateTimeCache) {\n    dummyDateTimeCache = DateTime.fromMillis(1555555555555);\n  }\n  return dummyDateTimeCache;\n}\nfunction maybeExpandMacroToken(token, locale) {\n  if (token.literal) {\n    return token;\n  }\n  const formatOpts = Formatter.macroTokenToFormatOpts(token.val);\n  const tokens = formatOptsToTokens(formatOpts, locale);\n  if (tokens == null || tokens.includes(undefined)) {\n    return token;\n  }\n  return tokens;\n}\nfunction expandMacroTokens(tokens, locale) {\n  return Array.prototype.concat(...tokens.map(t => maybeExpandMacroToken(t, locale)));\n}\n\n/**\n * @private\n */\n\nclass 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    if (!this.disqualifyingUnit) {\n      const [regexString, handlers] = buildRegex(this.units);\n      this.regex = RegExp(regexString, \"i\");\n      this.handlers = handlers;\n    }\n  }\n  explainFromTokens(input) {\n    if (!this.isValid) {\n      return {\n        input,\n        tokens: this.tokens,\n        invalidReason: this.invalidReason\n      };\n    } else {\n      const [rawMatches, matches] = match(input, this.regex, this.handlers),\n        [result, zone, specificOffset] = matches ? dateTimeFromMatches(matches) : [null, null, undefined];\n      if (hasOwnProperty(matches, \"a\") && hasOwnProperty(matches, \"H\")) {\n        throw new ConflictingSpecificationError(\"Can't include meridiem when specifying 24-hour format\");\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  get isValid() {\n    return !this.disqualifyingUnit;\n  }\n  get invalidReason() {\n    return this.disqualifyingUnit ? this.disqualifyingUnit.invalidReason : null;\n  }\n}\nfunction explainFromTokens(locale, input, format) {\n  const parser = new TokenParser(locale, format);\n  return parser.explainFromTokens(input);\n}\nfunction parseFromTokens(locale, input, format) {\n  const {\n    result,\n    zone,\n    specificOffset,\n    invalidReason\n  } = explainFromTokens(locale, input, format);\n  return [result, zone, specificOffset, invalidReason];\n}\nfunction formatOptsToTokens(formatOpts, locale) {\n  if (!formatOpts) {\n    return null;\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\nconst INVALID = \"Invalid DateTime\";\nconst MAX_DATE = 8.64e15;\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(dt.c, dt.loc.getMinDaysInFirstWeek(), dt.loc.getStartOfWeek());\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({\n    ...current,\n    ...alts,\n    old: current\n  });\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  const d = new Date(ts);\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: Math.min(inst.c.day, daysInMonth(year, month)) + Math.trunc(dur.days) + 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  let [ts, o] = fixOffset(localTS, oPre, inst.zone);\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  return {\n    ts,\n    o\n  };\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 {\n    setZone,\n    zone\n  } = 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(new Invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ${format}`));\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 ? Formatter.create(Locale.create(\"en-US\"), {\n    allowZ,\n    forceSimple: true\n  }).formatDateTimeFromString(dt, format) : null;\n}\nfunction toISODate(o, extended, precision) {\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  if (precision === \"year\") return c;\n  if (extended) {\n    c += \"-\";\n    c += padStart(o.c.month);\n    if (precision === \"month\") return c;\n    c += \"-\";\n  } else {\n    c += padStart(o.c.month);\n    if (precision === \"month\") return c;\n  }\n  c += padStart(o.c.day);\n  return c;\n}\nfunction toISOTime(o, extended, suppressSeconds, suppressMilliseconds, includeOffset, extendedZone, precision) {\n  let showSeconds = !suppressSeconds || o.c.millisecond !== 0 || o.c.second !== 0,\n    c = \"\";\n  switch (precision) {\n    case \"day\":\n    case \"month\":\n    case \"year\":\n      break;\n    default:\n      c += padStart(o.c.hour);\n      if (precision === \"hour\") break;\n      if (extended) {\n        c += \":\";\n        c += padStart(o.c.minute);\n        if (precision === \"minute\") break;\n        if (showSeconds) {\n          c += \":\";\n          c += padStart(o.c.second);\n        }\n      } else {\n        c += padStart(o.c.minute);\n        if (precision === \"minute\") break;\n        if (showSeconds) {\n          c += padStart(o.c.second);\n        }\n      }\n      if (precision === \"second\") break;\n      if (showSeconds && (!suppressMilliseconds || o.c.millisecond !== 0)) {\n        c += \".\";\n        c += padStart(o.c.millisecond, 3);\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  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 = [\"weekYear\", \"weekNumber\", \"weekday\", \"hour\", \"minute\", \"second\", \"millisecond\"],\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  if (!normalized) throw new InvalidUnitError(unit);\n  return normalized;\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).\n/**\n * @param {Zone} zone\n * @return {number}\n */\nfunction guessOffsetForZone(zone) {\n  if (zoneOffsetTs === undefined) {\n    zoneOffsetTs = Settings.now();\n  }\n\n  // Do not cache anything but IANA zones, because it is not safe to do so.\n  // Guessing an offset which is not present in the zone can cause wrong results from fixOffset\n  if (zone.type !== \"iana\") {\n    return zone.offset(zoneOffsetTs);\n  }\n  const zoneName = zone.name;\n  let offsetGuess = zoneOffsetGuessCache.get(zoneName);\n  if (offsetGuess === undefined) {\n    offsetGuess = zone.offset(zoneOffsetTs);\n    zoneOffsetGuessCache.set(zoneName, offsetGuess);\n  }\n  return offsetGuess;\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  const loc = Locale.fromObject(opts);\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    const invalid = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj);\n    if (invalid) {\n      return DateTime.invalid(invalid);\n    }\n    const offsetProvis = guessOffsetForZone(zone);\n    [ts, o] = objToTS(obj, offsetProvis, zone);\n  } else {\n    ts = Settings.now();\n  }\n  return new DateTime({\n    ts,\n    zone,\n    loc,\n    o\n  });\n}\nfunction diffRelative(start, end, opts) {\n  const round = isUndefined(opts.round) ? true : opts.round,\n    rounding = isUndefined(opts.rounding) ? \"trunc\" : opts.rounding,\n    format = (c, unit) => {\n      c = roundTo(c, round || opts.calendary ? 0 : 2, opts.calendary ? \"round\" : rounding);\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  if (opts.unit) {\n    return format(differ(opts.unit), opts.unit);\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}\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 */\nconst zoneOffsetGuessCache = new Map();\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 */\nclass DateTime {\n  /**\n   * @access private\n   */\n  constructor(config) {\n    const zone = config.zone || Settings.defaultZone;\n    let invalid = config.invalid || (Number.isNaN(config.ts) ? new Invalid(\"invalid input\") : null) || (!zone.isValid ? unsupportedZone(zone) : null);\n    /**\n     * @access private\n     */\n    this.ts = isUndefined(config.ts) ? Settings.now() : config.ts;\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      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({\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond\n    }, 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    opts.zone = FixedOffsetZone.utcInstance;\n    return quickDT({\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond\n    }, 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    const zoneToUse = normalizeZone(options.zone, Settings.defaultZone);\n    if (!zoneToUse.isValid) {\n      return DateTime.invalid(unsupportedZone(zoneToUse));\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(`fromMillis requires a numerical input, but received a ${typeof milliseconds} with value ${milliseconds}`);\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    const loc = Locale.fromObject(opts);\n    const normalized = normalizeObject(obj, normalizeUnitWithLocalWeeks);\n    const {\n      minDaysInFirstWeek,\n      startOfWeek\n    } = usesLocalWeekValues(normalized, loc);\n    const tsNow = Settings.now(),\n      offsetProvis = !isUndefined(opts.specificOffset) ? opts.specificOffset : 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(\"Can't mix weekYear/weekNumber units with year/month/day or ordinals\");\n    }\n    if (containsGregorMD && containsOrdinal) {\n      throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\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 ? hasInvalidWeekData(normalized, minDaysInFirstWeek, startOfWeek) : containsOrdinal ? hasInvalidOrdinalData(normalized) : hasInvalidGregorianData(normalized),\n      invalid = higherOrderInvalid || hasInvalidTimeData(normalized);\n    if (invalid) {\n      return DateTime.invalid(invalid);\n    }\n\n    // compute the actual time\n    const gregorian = useWeekData ? weekToGregorian(normalized, minDaysInFirstWeek, startOfWeek) : containsOrdinal ? ordinalToGregorian(normalized) : 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(\"mismatched weekday\", `you can't specify both a weekday of ${normalized.weekday} and a date of ${inst.toISO()}`);\n    }\n    if (!inst.isValid) {\n      return DateTime.invalid(inst.invalid);\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    const {\n        locale = null,\n        numberingSystem = null\n      } = 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    const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n    if (Settings.throwOnInvalid) {\n      throw new InvalidDateTimeError(invalid);\n    } else {\n      return new DateTime({\n        invalid\n      });\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  static resetCache() {\n    zoneOffsetTs = undefined;\n    zoneOffsetGuessCache.clear();\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\", {\n      locObj: this.loc\n    })[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\", {\n      locObj: this.loc\n    })[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\", {\n      locObj: this.loc\n    })[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\", {\n      locObj: this.loc\n    })[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 this.offset > this.set({\n        month: 1,\n        day: 1\n      }).offset || this.offset > this.set({\n        month: 5\n      }).offset;\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    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 (c1.hour === c2.hour && c1.minute === c2.minute && c1.second === c2.second && c1.millisecond === c2.millisecond) {\n      return [clone(this, {\n        ts: ts1\n      }), clone(this, {\n        ts: ts2\n      })];\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 ? weeksInWeekYear(this.localWeekYear, this.loc.getMinDaysInFirstWeek(), this.loc.getStartOfWeek()) : 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 {\n      locale,\n      numberingSystem,\n      calendar\n    } = Formatter.create(this.loc.clone(opts), opts).resolvedOptions(this);\n    return {\n      locale,\n      numberingSystem,\n      outputCalendar: calendar\n    };\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, {\n    keepLocalTime = false,\n    keepCalendarTime = false\n  } = {}) {\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, {\n        ts: newTS,\n        zone\n      });\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({\n    locale,\n    numberingSystem,\n    outputCalendar\n  } = {}) {\n    const loc = this.loc.clone({\n      locale,\n      numberingSystem,\n      outputCalendar\n    });\n    return clone(this, {\n      loc\n    });\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({\n      locale\n    });\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    const normalized = normalizeObject(values, normalizeUnitWithLocalWeeks);\n    const {\n      minDaysInFirstWeek,\n      startOfWeek\n    } = usesLocalWeekValues(normalized, this.loc);\n    const settingWeekStuff = !isUndefined(normalized.weekYear) || !isUndefined(normalized.weekNumber) || !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    if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n      throw new ConflictingSpecificationError(\"Can't mix weekYear/weekNumber units with year/month/day or ordinals\");\n    }\n    if (containsGregorMD && containsOrdinal) {\n      throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n    }\n    let mixed;\n    if (settingWeekStuff) {\n      mixed = weekToGregorian({\n        ...gregorianToWeek(this.c, minDaysInFirstWeek, startOfWeek),\n        ...normalized\n      }, minDaysInFirstWeek, startOfWeek);\n    } else if (!isUndefined(normalized.ordinal)) {\n      mixed = ordinalToGregorian({\n        ...gregorianToOrdinal(this.c),\n        ...normalized\n      });\n    } else {\n      mixed = {\n        ...this.toObject(),\n        ...normalized\n      };\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    const [ts, o] = objToTS(mixed, this.o, this.zone);\n    return clone(this, {\n      ts,\n      o\n    });\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, {\n    useLocaleWeeks = false\n  } = {}) {\n    if (!this.isValid) return this;\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      // no default, invalid units throw in normalizeUnit()\n    }\n\n    if (normalizedUnit === \"weeks\") {\n      if (useLocaleWeeks) {\n        const startOfWeek = this.loc.getStartOfWeek();\n        const {\n          weekday\n        } = 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    if (normalizedUnit === \"quarters\") {\n      const q = Math.ceil(this.month / 3);\n      o.month = (q - 1) * 3 + 1;\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 ? this.plus({\n      [unit]: 1\n    }).startOf(unit, opts).minus(1) : 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 ? Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this, fmt) : 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 = DATE_SHORT, opts = {}) {\n    return this.isValid ? Formatter.create(this.loc.clone(opts), formatOpts).formatDateTime(this) : 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 ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this) : [];\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   * @param {string} [opts.precision='milliseconds'] - truncate output to desired presicion: 'years', 'months', 'days', 'hours', 'minutes', 'seconds' or 'milliseconds'. When precision and suppressSeconds or suppressMilliseconds are used together, precision sets the maximum unit shown in the output, however seconds or milliseconds will still be suppressed if they are 0.\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   * @example DateTime.now().toISO({ precision: 'day' }) //=> '2017-04-22Z'\n   * @example DateTime.now().toISO({ precision: 'minute' }) //=> '2017-04-22T20:47Z'\n   * @return {string|null}\n   */\n  toISO({\n    format = \"extended\",\n    suppressSeconds = false,\n    suppressMilliseconds = false,\n    includeOffset = true,\n    extendedZone = false,\n    precision = \"milliseconds\"\n  } = {}) {\n    if (!this.isValid) {\n      return null;\n    }\n    precision = normalizeUnit(precision);\n    const ext = format === \"extended\";\n    let c = toISODate(this, ext, precision);\n    if (orderedUnits.indexOf(precision) >= 3) c += \"T\";\n    c += toISOTime(this, ext, suppressSeconds, suppressMilliseconds, includeOffset, extendedZone, precision);\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   * @param {string} [opts.precision='day'] - truncate output to desired precision: 'years', 'months', or 'days'.\n   * @example DateTime.utc(1982, 5, 25).toISODate() //=> '1982-05-25'\n   * @example DateTime.utc(1982, 5, 25).toISODate({ format: 'basic' }) //=> '19820525'\n   * @example DateTime.utc(1982, 5, 25).toISODate({ precision: 'month' }) //=> '1982-05'\n   * @return {string|null}\n   */\n  toISODate({\n    format = \"extended\",\n    precision = \"day\"\n  } = {}) {\n    if (!this.isValid) {\n      return null;\n    }\n    return toISODate(this, format === \"extended\", normalizeUnit(precision));\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   * @param {string} [opts.precision='milliseconds'] - truncate output to desired presicion: 'hours', 'minutes', 'seconds' or 'milliseconds'. When precision and suppressSeconds or suppressMilliseconds are used together, precision sets the maximum unit shown in the output, however seconds or milliseconds will still be suppressed if they are 0.\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   * @example DateTime.utc().set({ hour: 7, minute: 34, second: 56 }).toISOTime({ precision: 'minute' }) //=> '07:34Z'\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    precision = \"milliseconds\"\n  } = {}) {\n    if (!this.isValid) {\n      return null;\n    }\n    precision = normalizeUnit(precision);\n    let c = includePrefix && orderedUnits.indexOf(precision) >= 3 ? \"T\" : \"\";\n    return c + toISOTime(this, format === \"extended\", suppressSeconds, suppressMilliseconds, includeOffset, extendedZone, precision);\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|null}\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({\n    includeOffset = true,\n    includeZone = false,\n    includeOffsetSpace = true\n  } = {}) {\n    let fmt = \"HH:mm:ss.SSS\";\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    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    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 (including milliseconds in the fractional part) 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    const base = {\n      ...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    const durOpts = {\n      locale: this.locale,\n      numberingSystem: this.numberingSystem,\n      ...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    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|DateTime}\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    const inputMs = otherDateTime.valueOf();\n    const adjustedToZone = this.setZone(otherDateTime.zone, {\n      keepLocalTime: true\n    });\n    return adjustedToZone.startOf(unit, opts) <= inputMs && inputMs <= adjustedToZone.endOf(unit, opts);\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 this.isValid && other.isValid && this.valueOf() === other.valueOf() && this.zone.equals(other.zone) && this.loc.equals(other.loc);\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 towards zero 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 {string} [options.rounding=\"trunc\"] - rounding method to use when rounding the numbers in the output. Can be \"trunc\" (toward zero), \"expand\" (away from zero), \"round\", \"floor\", or \"ceil\".\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({}, {\n        zone: this.zone\n      }),\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    return diffRelative(options.base || DateTime.fromObject({}, {\n      zone: this.zone\n    }), 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 {\n        locale = null,\n        numberingSystem = null\n      } = 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 {\n        locale = null,\n        numberingSystem = null\n      } = 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(\"fromFormatParser requires an input string and a format parser\");\n    }\n    const {\n        locale = null,\n        numberingSystem = null\n      } = opts,\n      localeToUse = Locale.fromOpts({\n        locale,\n        numberingSystem,\n        defaultToEN: true\n      });\n    if (!localeToUse.equals(formatParser.locale)) {\n      throw new InvalidArgumentError(`fromFormatParser called with a locale of ${localeToUse}, ` + `but the format parser was created for ${formatParser.locale}`);\n    }\n    const {\n      result,\n      zone,\n      specificOffset,\n      invalidReason\n    } = formatParser.explainFromTokens(text);\n    if (invalidReason) {\n      return DateTime.invalid(invalidReason);\n    } else {\n      return parseDataToDateTime(result, zone, opts, `format ${formatParser.format}`, text, specificOffset);\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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 DATETIME_HUGE_WITH_SECONDS;\n  }\n}\n\n/**\n * @private\n */\nfunction 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(`Unknown datetime argument: ${dateTimeish}, of type ${typeof dateTimeish}`);\n  }\n}\n\nconst VERSION = \"3.7.2\";\n\nexports.DateTime = DateTime;\nexports.Duration = Duration;\nexports.FixedOffsetZone = FixedOffsetZone;\nexports.IANAZone = IANAZone;\nexports.Info = Info;\nexports.Interval = Interval;\nexports.InvalidZone = InvalidZone;\nexports.Settings = Settings;\nexports.SystemZone = SystemZone;\nexports.VERSION = VERSION;\nexports.Zone = Zone;\n//# sourceMappingURL=luxon.js.map\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _luxon = require(\"luxon\");\nvar weekDayFormatMap = {\n  zh_CN: 'narrow',\n  zh_TW: 'narrow'\n};\nvar weekDayLengthMap = {\n  en_US: 2,\n  en_GB: 2\n};\n\n/**\n * Normalizes part of a moment format string that should\n * not be escaped to a luxon compatible format string.\n *\n * @param part string\n * @returns string\n */\nvar normalizeFormatPart = function normalizeFormatPart(part) {\n  return part.replace(/Y/g, 'y').replace(/D/g, 'd').replace(/gg/g, 'kk').replace(/Q/g, 'q').replace(/([Ww])o/g, 'WW').replace(/A/g, 'a');\n};\n\n/**\n * Normalizes a moment compatible format string to a luxon compatible format string\n *\n * @param format string\n * @returns string\n */\nvar normalizeFormat = function normalizeFormat(format) {\n  return format\n  // moment escapes strings contained in brackets\n  .split(/[[\\]]/).map(function (part, index) {\n    var shouldEscape = index % 2 > 0;\n    return shouldEscape ? part : normalizeFormatPart(part);\n  })\n  // luxon escapes strings contained in single quotes\n  .join(\"'\");\n};\n\n/**\n * Normalizes language tags used to luxon compatible\n * language tags by replacing underscores with hyphen-minus.\n *\n * @param locale string\n * @returns string\n */\nvar normalizeLocale = function normalizeLocale(locale) {\n  return locale.replace(/_/g, '-');\n};\nvar generateConfig = {\n  // get\n  getNow: function getNow() {\n    /**\n     * The current time that can respond to tz settings is required. like `dayjs().tz()`.\n     * @see: https://github.com/ant-design/ant-design/issues/51282\n     *       https://github.com/react-component/picker/pull/878\n     */\n    return _luxon.DateTime.now();\n  },\n  getFixedDate: function getFixedDate(string) {\n    return _luxon.DateTime.fromFormat(string, 'yyyy-MM-dd');\n  },\n  getEndDate: function getEndDate(date) {\n    return date.endOf('month');\n  },\n  getWeekDay: function getWeekDay(date) {\n    return date.weekday;\n  },\n  getYear: function getYear(date) {\n    return date.year;\n  },\n  getMonth: function getMonth(date) {\n    return date.month - 1;\n  },\n  // getMonth should return 0-11, luxon month returns 1-12\n  getDate: function getDate(date) {\n    return date.day;\n  },\n  getHour: function getHour(date) {\n    return date.hour;\n  },\n  getMinute: function getMinute(date) {\n    return date.minute;\n  },\n  getSecond: function getSecond(date) {\n    return date.second;\n  },\n  getMillisecond: function getMillisecond(date) {\n    return date.millisecond;\n  },\n  // set\n  addYear: function addYear(date, diff) {\n    return date.plus({\n      year: diff\n    });\n  },\n  addMonth: function addMonth(date, diff) {\n    return date.plus({\n      month: diff\n    });\n  },\n  addDate: function addDate(date, diff) {\n    return date.plus({\n      day: diff\n    });\n  },\n  setYear: function setYear(date, year) {\n    return date.set({\n      year: year\n    });\n  },\n  setMonth: function setMonth(date, month) {\n    return date.set({\n      month: month + 1\n    });\n  },\n  // setMonth month argument is 0-11, luxon months are 1-12\n  setDate: function setDate(date, day) {\n    return date.set({\n      day: day\n    });\n  },\n  setHour: function setHour(date, hour) {\n    return date.set({\n      hour: hour\n    });\n  },\n  setMinute: function setMinute(date, minute) {\n    return date.set({\n      minute: minute\n    });\n  },\n  setSecond: function setSecond(date, second) {\n    return date.set({\n      second: second\n    });\n  },\n  setMillisecond: function setMillisecond(date, milliseconds) {\n    return date.set({\n      millisecond: milliseconds\n    });\n  },\n  // Compare\n  isAfter: function isAfter(date1, date2) {\n    return date1 > date2;\n  },\n  isValidate: function isValidate(date) {\n    return date.isValid;\n  },\n  locale: {\n    getWeekFirstDate: function getWeekFirstDate(locale, date) {\n      return date.setLocale(normalizeLocale(locale)).startOf('week');\n    },\n    getWeekFirstDay: function getWeekFirstDay(locale) {\n      return _luxon.DateTime.local().setLocale(normalizeLocale(locale)).startOf('week').weekday;\n    },\n    getWeek: function getWeek(locale, date) {\n      return date.setLocale(normalizeLocale(locale)).weekNumber;\n    },\n    getShortWeekDays: function getShortWeekDays(locale) {\n      var weekdays = _luxon.Info.weekdays(weekDayFormatMap[locale] || 'short', {\n        locale: normalizeLocale(locale)\n      });\n      var shifted = weekdays.map(function (weekday) {\n        return weekday.slice(0, weekDayLengthMap[locale]);\n      });\n\n      // getShortWeekDays should return weekday labels starting from Sunday.\n      // luxon returns them starting from Monday, so we have to shift the results.\n      shifted.unshift(shifted.pop());\n      return shifted;\n    },\n    getShortMonths: function getShortMonths(locale) {\n      return _luxon.Info.months('short', {\n        locale: normalizeLocale(locale)\n      });\n    },\n    format: function format(locale, date, _format) {\n      if (!date || !date.isValid) {\n        return null;\n      }\n      return date.setLocale(normalizeLocale(locale)).toFormat(normalizeFormat(_format));\n    },\n    parse: function parse(locale, text, formats) {\n      for (var i = 0; i < formats.length; i += 1) {\n        var normalizedFormat = normalizeFormat(formats[i]);\n        var date = _luxon.DateTime.fromFormat(text, normalizedFormat, {\n          locale: normalizeLocale(locale)\n        });\n        if (date.isValid) {\n          return date;\n        }\n      }\n      return null;\n    }\n  }\n};\nvar _default = exports.default = generateConfig;","import generateCalendar from 'antd/es/calendar/generateCalendar';\nimport luxonGenerateConfig from 'rc-picker/lib/generate/luxon';\nimport { DateTime } from 'luxon';\nimport i18n from '../../../i18n';\n\nconst MONDAY_WEEK_START = 1;\n\nconst customLuxonConfig = {\n  ...luxonGenerateConfig,\n  locale: {\n    ...luxonGenerateConfig.locale,\n    getShortWeekDays() {\n      return [0, 1, 2, 3, 4, 5, 6].map(weekday =>\n        DateTime.now().set({ weekday }).setLocale(i18n.language).toLocaleString({ weekday: 'short' })\n      );\n    },\n    getWeekFirstDay() {\n      return new Intl.Locale(navigator.language)?.getWeekInfo?.().firstDay ?? MONDAY_WEEK_START;\n    }\n  }\n};\n\nexport default generateCalendar(customLuxonConfig);\n",".calendar__rangeDates,\n.calendar__day {\n  width: 100%;\n\n  &::part(control) {\n    --goto-interactive-color-disabled: transparent;\n\n    background-color: transparent;\n    border-color: transparent;\n    font-weight: normal;\n    padding: 0;\n    width: auto;\n    min-width: 100%;\n    box-shadow: unset;\n\n    &:hover {\n      background-color: var(--goto-interactive-color-secondary-hover);\n    }\n  }\n}\n\n.calendar__day {\n  margin: -10px;\n}\n\n.calendar__day_selected {\n  background-color: var(--goto-icon-color-brand-default);\n\n  &::part(control) {\n    color: var(--goto-type-color-inverted);\n  }\n\n  &:hover {\n    color: var(--goto-type-color-default);\n  }\n}\n\n.calendar__day_inBetween {\n  background-color: var(--goto-interactive-color-secondary-hover);\n  border-radius: 0;\n}\n\n.calendar__header,\n.calendar__header_margin {\n  display: flex;\n  align-items: center;\n  padding-bottom: var(--goto-spacing-02);\n\n  > * {\n    flex-grow: 1;\n    text-align: center;\n  }\n}\n\n.calendar__header_margin {\n  margin-top: 10px;\n}\n","import { ChevronLeftIcon, ChevronRightIcon } from '@getgo/chameleon-icons/react';\nimport { Button, IconButton, Typography } from '@getgo/chameleon-web-react-wrapper';\nimport clsx from 'clsx';\nimport { isEmpty } from 'lodash';\nimport { DateTime, Interval } from 'luxon';\nimport React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector } from 'react-redux';\nimport { selectUserLocale } from '../../../store/selectors/analytics';\nimport { DateRange } from '../../../utils/date-range-filter.util';\nimport AntdCalendar from '../AntdCalendar/AntdCalendar';\nimport LocalizedDate from '../LocalizedDate/LocalizedDate';\nimport styles from './Calendar.module.scss';\n\nexport interface CalendarProps {\n  date: string | null;\n  onDateChange?: (param: DateTime) => void;\n  onDateRangeChange?: (param: DateRange) => void;\n  isRangeCalendar?: boolean;\n  dateRangeCalendarFilter?: DateRange;\n  minimalDate?: DateTime;\n  maximalDate?: DateTime;\n}\n\nconst Calendar: React.FC<CalendarProps> = ({\n  date,\n  onDateChange,\n  onDateRangeChange,\n  isRangeCalendar,\n  dateRangeCalendarFilter,\n  minimalDate,\n  maximalDate\n}) => {\n  const { t } = useTranslation();\n  const [selectedDate, setSelectedDate] = useState(date);\n  const locale = useSelector(selectUserLocale)!;\n\n  const formatDateLabel = (dayDate: string | null) => {\n    return dayDate && DateTime.fromISO(dayDate).setLocale(locale).toLocaleString(DateTime.DATE_FULL);\n  };\n\n  useEffect(() => {\n    setSelectedDate(date);\n  }, [date]);\n\n  const onRangeCalendarDateChange = (value: DateTime) => {\n    let newStartTime: string | undefined;\n    let newEndTime: string | undefined;\n\n    const isStartTime = !isEmpty(dateRangeCalendarFilter?.startTime);\n    const isEndTime = !isEmpty(dateRangeCalendarFilter?.endTime);\n\n    if (!isStartTime && !isEndTime) {\n      newStartTime = value.startOf('day').toUTC().toISO()!;\n      setSelectedDate(newStartTime);\n    } else if (\n      isStartTime &&\n      !isEndTime &&\n      DateTime.fromISO(dateRangeCalendarFilter!.startTime!).toMillis() > value.toMillis()\n    ) {\n      newStartTime = value.startOf('day').toUTC().toISO()!;\n      setSelectedDate(newStartTime);\n    } else if (isStartTime && !isEndTime) {\n      newStartTime = dateRangeCalendarFilter!.startTime!;\n      newEndTime = value.endOf('day').toUTC().toISO()!;\n      setSelectedDate(newEndTime);\n    } else if (isStartTime && isEndTime) {\n      newStartTime = value.startOf('day').toUTC().toISO()!;\n      newEndTime = undefined;\n      setSelectedDate(newStartTime);\n    }\n\n    onDateRangeChange?.({ startTime: newStartTime, endTime: newEndTime });\n  };\n\n  const getDayRender = (dayDate: DateTime) => {\n    const isDateDisabled = (minimalDate && dayDate < minimalDate) || (maximalDate && dayDate > maximalDate);\n\n    let isSelected = date && dayDate.startOf('day').equals(DateTime.fromISO(date).startOf('day'));\n    let isBetween = false;\n\n    if (isRangeCalendar) {\n      const startRangeDate = dateRangeCalendarFilter?.startTime\n        ? DateTime.fromISO(dateRangeCalendarFilter.startTime)\n        : null;\n      const endRangeDate = dateRangeCalendarFilter?.endTime ? DateTime.fromISO(dateRangeCalendarFilter.endTime) : null;\n      const isRangeDaySelected = !!(\n        (startRangeDate && startRangeDate.startOf('day').equals(dayDate.startOf('day'))) ||\n        (endRangeDate && endRangeDate.startOf('day').equals(dayDate.startOf('day')))\n      );\n\n      isSelected = isRangeDaySelected;\n      isBetween =\n        !isRangeDaySelected &&\n        !!startRangeDate &&\n        !!endRangeDate &&\n        Interval.fromDateTimes(startRangeDate.startOf('day'), endRangeDate.endOf('day')).contains(dayDate);\n    }\n\n    return (\n      <Button\n        aria-label={t('Select day {{chosenDate}}', { chosenDate: formatDateLabel(dayDate.toISO()) })}\n        variant=\"secondary\"\n        onClick={() => (isRangeCalendar ? onRangeCalendarDateChange(dayDate) : onDateChange?.(dayDate))}\n        disabled={isDateDisabled}\n        className={clsx({\n          [styles.calendar__day]: !isRangeCalendar,\n          [styles.calendar__rangeDates]: isRangeCalendar,\n          [styles.calendar__day_selected]: isSelected,\n          [styles.calendar__day_inBetween]: isBetween\n        })}>\n        <div>{dayDate.toFormat('d')}</div>\n      </Button>\n    );\n  };\n\n  const getCalendarHeader = ({ value, onChange }: { value: DateTime; onChange: (param: DateTime) => void }) => {\n    const previousMonth = value.minus({ month: 1 });\n    const nextMonth = value.plus({ month: 1 });\n    const isPreviousMonthDisabled = minimalDate && minimalDate.startOf('month') > previousMonth;\n    const isNextMonthDisabled = maximalDate && maximalDate.endOf('month') <= nextMonth;\n\n    return (\n      <div className={!isRangeCalendar ? styles.calendar__header_margin : styles.calendar__header}>\n        <IconButton\n          disabled={isPreviousMonthDisabled}\n          size=\"small\"\n          aria-label={t('Previous month')}\n          onClick={() => {\n            setSelectedDate(previousMonth.toISO());\n            onChange(previousMonth);\n          }}>\n          <ChevronLeftIcon alt={t('Previous month')} />\n        </IconButton>\n        <Typography tag=\"h1\" variant=\"body-medium\">\n          <LocalizedDate date={value} format=\"LLLL&nbsp;yyyy\" />\n        </Typography>\n        <IconButton\n          disabled={isNextMonthDisabled}\n          size=\"small\"\n          aria-label={t('Next month')}\n          onClick={() => {\n            setSelectedDate(nextMonth.toISO());\n            onChange(nextMonth);\n          }}>\n          <ChevronRightIcon alt={t('Next month')} />\n        </IconButton>\n      </div>\n    );\n  };\n\n  return (\n    <AntdCalendar\n      value={selectedDate ? DateTime.fromISO(selectedDate) : undefined}\n      fullscreen={false}\n      headerRender={getCalendarHeader}\n      fullCellRender={getDayRender}\n      // https://jira.ops.expertcity.com/browse/CCO-5870\n      // Our stored user local is a string, the calendar accept a PikerLocale object\n      // locale={locale}\n    />\n  );\n};\n\nexport default Calendar;\n",".dateRangeFilter__inner {\n  display: flex;\n  flex-direction: row;\n  border-bottom: 1px solid var(--goto-border-color-default);\n}\n\n.dateRangeFilter__options {\n  border-right: 1px solid var(--goto-border-color-default);\n  padding: var(--goto-spacing-01) 0 0;\n  font: var(--goto-body-small);\n  color: var(--goto-type-color-default);\n  list-style: none;\n  border-radius: 0;\n  display: flex;\n  flex-direction: column;\n}\n\n.dateRangeFilter__option {\n  color: var(--goto-type-color-default);\n\n  &::part(input-container) {\n    display: none;\n  }\n\n  &:hover {\n    border-color: var(--goto-interactive-color-primary-default);\n    background-color: var(--goto-interactive-color-primary-hover);\n\n    .dateRangeFilter__optionButton {\n      &::part(control) {\n        border-radius: 0;\n        color: var(--goto-interactive-color-inverted-primary-default);\n      }\n    }\n  }\n\n  &:not(:hover) {\n    chameleon-popover-content {\n      display: none;\n    }\n  }\n\n  &:active {\n    background-color: var(--goto-interactive-color-primary-pressed);\n    border-color: var(--goto-interactive-02);\n    box-shadow: none;\n    color: var(--goto-type-color-inverted);\n  }\n\n  > chameleon-tooltip-v2 {\n    width: 100%;\n  }\n}\n\n.dateRangeFilter__optionButton {\n  &::part(control) {\n    font-weight: normal;\n    justify-content: flex-start;\n  }\n}\n\n.dateRangeFilter__alertPanel {\n  padding: 0 var(--goto-spacing-04);\n  max-width: 430px;\n}\n\n.dateRangeFilter__alert {\n  margin: var(--goto-spacing-04) 0;\n}\n\n.dateRangeFilter__gutter {\n  padding: var(--goto-spacing-04) 0 var(--goto-spacing-04) var(--goto-spacing-04);\n}\n\n.dateRangeFilter__alertOutdatedPanel {\n  padding: 0 var(--goto-spacing-04);\n  max-width: 435px;\n}\n\n.dateRangeFilter__alertOutdated {\n  margin: var(--goto-spacing-04) 0;\n}\n\n.dateRangeFilter__outdatedIconsContainer {\n  display: flex;\n  gap: 10px;\n}\n\n.dateRangeFilter__alertIcon {\n  --goto-icon-color: var(--goto-icon-color-warning) !important;\n}\n\n.dateRangeFilter__rangeCalendarWrapper {\n  max-width: 300px;\n  padding: var(--goto-spacing-03);\n}\n",".timeRangeFilter {\n  display: flex;\n  align-items: center;\n  gap: var(--goto-spacing-03);\n  padding: var(--goto-spacing-03) var(--goto-spacing-04);\n  padding-bottom: 0;\n  flex-wrap: wrap;\n}\n\n.timeCombobox {\n  position: relative;\n  display: flex;\n  align-items: center;\n  border: 1px solid var(--goto-border-color-default);\n  border-radius: var(--goto-radius-small);\n  background-color: var(--goto-surface-color-default);\n  transition: background-color 0.15s ease;\n  overflow: hidden;\n\n  &--disabled {\n    cursor: not-allowed;\n  }\n\n  &:focus-within {\n    outline: 2px solid var(--goto-interactive-color-primary-default);\n    outline-offset: 2px;\n  }\n}\n\n.timeCombobox__input {\n  border: none;\n  background: transparent;\n  font: var(--goto-body-small);\n  color: var(--goto-type-color-default);\n  padding: var(--goto-spacing-02) var(--goto-spacing-02) var(--goto-spacing-02) var(--goto-spacing-03);\n  outline: none;\n  min-width: 90px;\n  transition: background-color 0.15s ease;\n\n  &:not(:disabled, :focus):hover {\n    background-color: var(--goto-interactive-color-secondary-hover);\n  }\n\n  &:disabled {\n    color: var(--goto-type-color-disabled);\n    cursor: not-allowed;\n  }\n\n  &::-webkit-datetime-edit-fields-wrapper {\n    padding: 0;\n  }\n\n  &::-webkit-calendar-picker-indicator {\n    display: none;\n  }\n}\n\n.timeCombobox__chevron {\n  flex-shrink: 0;\n  align-self: stretch;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  padding: 0 var(--goto-spacing-02);\n  border: none;\n  border-left: 1px solid var(--goto-border-color-default);\n  background: transparent;\n  cursor: pointer;\n  color: var(--goto-type-color-default);\n  transition: background-color 0.15s ease;\n\n  &:hover:not(:disabled) {\n    background-color: var(--goto-interactive-color-secondary-hover);\n  }\n\n  &:disabled {\n    cursor: not-allowed;\n    color: var(--goto-type-color-disabled);\n  }\n}\n\n.chevronIcon {\n  display: inline-flex;\n  transition: transform 0.05s ease;\n\n  &--open {\n    transform: rotate(180deg);\n  }\n}\n\n.timeCombobox__dropdown {\n  z-index: 1000;\n  background-color: var(--goto-surface-color-default);\n  border-radius: var(--goto-radius-small);\n  box-shadow: var(--goto-elevation-large);\n  max-height: 200px;\n  overflow-y: auto;\n  min-width: 120px;\n  display: flex;\n  flex-direction: column;\n}\n\n.timeCombobox__option {\n  background: none;\n  border: none;\n  text-align: left;\n  padding: var(--goto-spacing-02) var(--goto-spacing-03);\n  font: var(--goto-body-small);\n  color: var(--goto-type-color-default);\n  cursor: pointer;\n  white-space: nowrap;\n\n  &:hover {\n    background-color: var(--goto-interactive-color-secondary-hover);\n  }\n\n  &--selected {\n    background-color: var(--goto-interactive-color-secondary-hover);\n  }\n}\n","import { ChevronDownOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { Switch } from '@getgo/chameleon-web-react-wrapper';\nimport clsx from 'clsx';\nimport { DateTime } from 'luxon';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector } from 'react-redux';\nimport { MIXPANEL_EVENT_NAME } from '../../../constants/mixpanel';\nimport useMixpanel from '../../../hooks/useMixpanel';\nimport { selectUserLocale } from '../../../store/selectors/analytics';\nimport styles from './TimeRangeFilter.module.scss';\n\nconst MINUTES_STEP = 30;\nconst MINUTES_IN_DAY = 24 * 60;\nexport const END_OF_DAY_MINUTES = MINUTES_IN_DAY - 1; // 1439 = 23:59\n\nconst minutesToHHMM = (minutes: number): string => {\n  const h = Math.floor(minutes / 60);\n  const m = minutes % 60;\n  return `${String(h).padStart(2, '0')}:${String(m).padStart(2, '0')}`;\n};\n\nconst hhmmToMinutes = (hhmm: string): number => {\n  const [h, m] = hhmm.split(':').map(Number);\n  return h * 60 + (m ?? 0);\n};\n\nconst formatMinutes = (minutes: number, userLocale: string): string => {\n  const h = Math.floor(minutes / 60);\n  const m = minutes % 60;\n  return DateTime.fromObject({ hour: h, minute: m }).setLocale(userLocale).toLocaleString(DateTime.TIME_SIMPLE);\n};\n\nconst generateOptions = (minMinutes = 0): number[] => {\n  const options: number[] = [];\n  for (let m = 0; m < MINUTES_IN_DAY; m += MINUTES_STEP) {\n    if (m >= minMinutes) {\n      options.push(m);\n    }\n  }\n  if (!options.includes(END_OF_DAY_MINUTES)) {\n    // includes the last option (23:59) to avoid users selecting start time as 23:31 and not being able to select an end time\n    options.push(END_OF_DAY_MINUTES);\n  }\n  return options;\n};\n\ninterface TimeComboboxProps {\n  value: number;\n  onChange: (minutes: number) => void;\n  minTime?: number;\n  disabled?: boolean;\n  label: string;\n  userLocale: string;\n}\n\nconst TimeCombobox: React.FC<TimeComboboxProps> = ({\n  value,\n  onChange,\n  minTime = 0,\n  disabled = false,\n  label,\n  userLocale\n}) => {\n  const { t } = useTranslation();\n  const [isOpen, setIsOpen] = useState(false);\n  const [dropdownPos, setDropdownPos] = useState({ top: 0, left: 0 });\n  const popoverRef = useRef<HTMLDivElement>(null);\n  const triggerRef = useRef<HTMLDivElement>(null);\n  const inputRef = useRef<HTMLInputElement>(null);\n  const options = generateOptions(minTime);\n\n  const handleInputChange = useCallback(\n    (e: React.ChangeEvent<HTMLInputElement>) => {\n      e.stopPropagation();\n      const parsed = hhmmToMinutes(e.target.value);\n      if (!isNaN(parsed)) {\n        onChange(parsed);\n      }\n    },\n    [onChange]\n  );\n\n  const handleBlur = useCallback(() => {\n    if (value < minTime) {\n      onChange(minTime);\n    }\n  }, [value, minTime, onChange]);\n\n  const handleOptionClick = useCallback(\n    (minutes: number) => {\n      onChange(minutes);\n      setIsOpen(false);\n    },\n    [onChange]\n  );\n\n  const handleToggleDropdown = useCallback((e: React.MouseEvent) => {\n    e.stopPropagation();\n    inputRef.current?.blur();\n    if (!disabled && triggerRef.current) {\n      const rect = triggerRef.current.getBoundingClientRect();\n      setDropdownPos({ top: rect.bottom, left: rect.left });\n      setIsOpen(prev => !prev);\n    }\n  }, [disabled]);\n\n  useEffect(() => {\n    if (!isOpen) {\n      return;\n    }\n    const handleClickOutside = (e: MouseEvent) => {\n      if (\n        popoverRef.current &&\n        !popoverRef.current.contains(e.target as Node) &&\n        triggerRef.current &&\n        !triggerRef.current.contains(e.target as Node)\n      ) {\n        setIsOpen(false);\n      }\n    };\n    document.addEventListener('mousedown', handleClickOutside);\n    return () => document.removeEventListener('mousedown', handleClickOutside);\n  }, [isOpen]);\n\n  return (\n    <div\n      className={clsx(styles.timeCombobox, {\n        [styles['timeCombobox--open']]: isOpen,\n        [styles['timeCombobox--disabled']]: disabled\n      })}\n      ref={triggerRef}>\n      <input\n        ref={inputRef}\n        aria-label={label}\n        className={styles.timeCombobox__input}\n        type=\"time\"\n        value={minutesToHHMM(value)}\n        onChange={handleInputChange}\n        onBlur={handleBlur}\n        disabled={disabled}\n        lang={userLocale}\n      />\n      <button\n        type=\"button\"\n        aria-label={t('Open {{label}} options', { label })}\n        className={styles.timeCombobox__chevron}\n        disabled={disabled}\n        onMouseDown={(e: React.MouseEvent) => e.preventDefault()}\n        onClick={handleToggleDropdown}>\n        <span className={clsx(styles.chevronIcon, { [styles['chevronIcon--open']]: isOpen })}>\n          <ChevronDownOutlinedIcon color=\"currentColor\" />\n        </span>\n      </button>\n      {isOpen && (\n        <div\n          className={styles.timeCombobox__dropdown}\n          ref={popoverRef}\n          role=\"listbox\"\n          aria-label={label}\n          style={{ position: 'fixed', top: dropdownPos.top, left: dropdownPos.left }}>\n          {options.map(opt => (\n            <button\n              key={opt}\n              type=\"button\"\n              className={`${styles.timeCombobox__option} ${opt === value ? styles['timeCombobox__option--selected'] : ''}`}\n              role=\"option\"\n              aria-selected={opt === value}\n              onMouseDown={e => e.preventDefault()}\n              onClick={() => handleOptionClick(opt)}>\n              {formatMinutes(opt, userLocale)}\n            </button>\n          ))}\n        </div>\n      )}\n    </div>\n  );\n};\n\nexport interface TimeRangeState {\n  startMinutes: number;\n  endMinutes: number;\n  isAllDay: boolean;\n}\n\nexport interface TimeRangeFilterProps {\n  onChange: (startMinutes: number, endMinutes: number, isAllDay: boolean) => void;\n  onDateReset: boolean;\n  isSameDay?: boolean;\n  initialTimeRange?: TimeRangeState;\n}\n\nconst TimeRangeFilter: React.FC<TimeRangeFilterProps> = ({\n  onChange,\n  onDateReset,\n  isSameDay = true,\n  initialTimeRange\n}) => {\n  const { t } = useTranslation();\n  const userLocale = useSelector(selectUserLocale) ?? 'en-US';\n  const mixpanelTrack = useMixpanel();\n\n  const [isAllDay, setIsAllDay] = useState(initialTimeRange?.isAllDay ?? true);\n  const [startMinutes, setStartMinutes] = useState(initialTimeRange?.startMinutes ?? 0);\n  const [endMinutes, setEndMinutes] = useState(initialTimeRange?.endMinutes ?? END_OF_DAY_MINUTES);\n  const prevDateResetRef = useRef(onDateReset);\n  const prevInitialTimeRangeRef = useRef(initialTimeRange);\n\n  useEffect(() => {\n    if (prevDateResetRef.current !== onDateReset) {\n      prevDateResetRef.current = onDateReset;\n      setIsAllDay(true);\n      setStartMinutes(0);\n      setEndMinutes(END_OF_DAY_MINUTES);\n      onChange(0, END_OF_DAY_MINUTES, true);\n      return;\n    }\n    if (initialTimeRange && initialTimeRange !== prevInitialTimeRangeRef.current) {\n      prevInitialTimeRangeRef.current = initialTimeRange;\n      setIsAllDay(initialTimeRange.isAllDay);\n      setStartMinutes(initialTimeRange.startMinutes);\n      setEndMinutes(initialTimeRange.endMinutes);\n    }\n  }, [onDateReset, onChange, initialTimeRange]);\n\n  const handleAllDayToggle = useCallback(() => {\n    const next = !isAllDay;\n    setIsAllDay(next);\n    if (next) {\n      setStartMinutes(0);\n      setEndMinutes(END_OF_DAY_MINUTES);\n      onChange(0, END_OF_DAY_MINUTES, true);\n    } else {\n      void mixpanelTrack(MIXPANEL_EVENT_NAME.FILTER, {\n        Action: 'All day toggle turned off',\n        Component: 'TimeRangeFilter'\n      });\n      onChange(startMinutes, endMinutes, false);\n    }\n  }, [isAllDay, startMinutes, endMinutes, onChange, mixpanelTrack]);\n\n  const handleStartChange = useCallback(\n    (newStart: number) => {\n      setStartMinutes(newStart);\n      const newEnd = isSameDay && newStart > endMinutes ? newStart : endMinutes;\n      setEndMinutes(newEnd);\n      onChange(newStart, newEnd, false);\n    },\n    [isSameDay, endMinutes, onChange]\n  );\n\n  const handleEndChange = useCallback(\n    (newEnd: number) => {\n      setEndMinutes(newEnd);\n      onChange(startMinutes, newEnd, false);\n    },\n    [startMinutes, onChange]\n  );\n\n  return (\n    <div className={styles.timeRangeFilter}>\n      <TimeCombobox\n        value={startMinutes}\n        onChange={handleStartChange}\n        disabled={isAllDay}\n        label={t('Start time')}\n        userLocale={userLocale}\n      />\n      <TimeCombobox\n        value={endMinutes}\n        onChange={handleEndChange}\n        minTime={isSameDay ? startMinutes : 0}\n        disabled={isAllDay}\n        label={t('End time')}\n        userLocale={userLocale}\n      />\n      <Switch checked={isAllDay} onChange={handleAllDayToggle} aria-label={t('All day')}>\n        {t('All day')}\n      </Switch>\n    </div>\n  );\n};\n\nexport default TimeRangeFilter;\n","import { DateTime, Interval } from 'luxon';\nimport { useMemo } from 'react';\nimport { DateRange } from '../../../utils/date-range-filter.util';\n\nconst MAXIMUM_SELECTION_RANGE_IN_MONTHS = 13;\nconst MAXIMUM_YEARS_SELECTION_RANGE = 7;\n\nconst useDateRangeConstraints = (dateRange: DateRange) => {\n  const minimalDate = DateTime.now().minus({ years: MAXIMUM_YEARS_SELECTION_RANGE });\n  const maximalDate = useMemo(() => {\n    const endOfDayToday = DateTime.now().endOf('day');\n    if (dateRange.startTime) {\n      const startDate = DateTime.fromISO(dateRange.startTime).startOf('day');\n      const numberOfMonthsAvailable = Interval.fromDateTimes(startDate, endOfDayToday ).length('months');\n\n      if (numberOfMonthsAvailable < MAXIMUM_SELECTION_RANGE_IN_MONTHS) {\n        return endOfDayToday;\n      };\n\n      return startDate.plus({ months: MAXIMUM_SELECTION_RANGE_IN_MONTHS }).minus({ day: 1 });\n    };\n\n    return endOfDayToday;\n  } , [dateRange.startTime]);\n\n  return [minimalDate, maximalDate];\n};\n\nexport default useDateRangeConstraints;\n","import { TooltipWrapper } from '@analytics-common-ui/layout';\nimport { CalendarOutlinedIcon, AlertOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { Alert, Button, Typography } from '@getgo/chameleon-web-react-wrapper';\nimport { isEqual as _isEqual, isEmpty as _isEmpty } from 'lodash';\nimport { DateTime } from 'luxon';\nimport React, { useState, useEffect, useMemo, useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector } from 'react-redux';\nimport { dashboardTypes } from '../../../configs/dashboard.config';\nimport { FILTER_NAMES } from '../../../constants/filters';\nimport { SAVING_STRATEGY } from '../../../constants/filters-definitions';\nimport { MIXPANEL_EVENT_NAME } from '../../../constants/mixpanel';\nimport useMixpanel from '../../../hooks/useMixpanel';\nimport { selectCurrentDashboard, selectUserLocale } from '../../../store/selectors/analytics';\nimport { getDefaultEndTime } from '../../../store/selectors/default-date';\nimport { DateRangeFilter as DateRangeFilterType, FilterConfig } from '../../../types/config/FilterTypes';\nimport {\n  calculateDateRange,\n  deriveTimeRangeFromDateRange,\n  formatDateRange,\n  formatDateRangeForChip,\n  formatDateRangeWithTime,\n  applyTimeToDateRange,\n  selectedDateOptionsReadable,\n  SelectedDateOptions,\n  DateRange,\n  DurationBasedFilterUnits,\n  Filter,\n  TimeRange,\n  presetOptionsEndingNow\n} from '../../../utils/date-range-filter.util';\nimport BaseFilter from '../BaseFilter/BaseFilter';\nimport Calendar from '../Calendar/Calendar';\nimport styles from './DateRangeFilter.module.scss';\nimport TimeRangeFilter from './TimeRangeFilter';\nimport useDateRangeConstraints from './useDateRangeConstraints';\n\ntype DurationBasedFilter = {\n  min: number;\n  max: number;\n  unit: DurationBasedFilterUnits;\n};\n\ntype FilterElement = {\n  id: string;\n  name: string;\n  selected: boolean;\n  externalUserKey: string;\n};\n\ninterface DefaultFilters {\n  queues: FilterElement[];\n  agents: FilterElement[];\n  chatQueues: FilterElement[];\n  date: DateRangeFilterType;\n  timeInQueue: DurationBasedFilter;\n  callDuration: DurationBasedFilter;\n  outcomes: FilterElement[];\n  sentiments: FilterElement[];\n  [FILTER_NAMES.TOPICS]: FilterElement[];\n  [FILTER_NAMES.TOPIC_FLAGS]: FilterElement[];\n}\n\nexport interface DateRangeFilterProps {\n  defaultFilters: DefaultFilters | FilterConfig;\n  dateRange: DateRange;\n  onApply: (parameters: Filter) => void;\n}\n\nconst DateRangeFilter: React.FC<DateRangeFilterProps> = ({\n  dateRange = calculateDateRange('today'),\n  defaultFilters,\n  onApply,\n  ...props\n}) => {\n  const currentDashboard = useSelector(selectCurrentDashboard);\n  const userLocale = useSelector(selectUserLocale)!;\n  const mixpanelTrack = useMixpanel();\n  const { t } = useTranslation();\n  const [isOpen, setOpen] = useState(false);\n  const [date, setDate] = useState(dateRange);\n  const [selectedDate, setSelectedDate] = useState(dateRange.startTime);\n  const [hoveredOption, setHoveredOption] = useState<SelectedDateOptions | null>(null);\n  const [dateResetToggle, setDateResetToggle] = useState(false);\n  const [timeRange, setTimeRange] = useState<TimeRange>(() => deriveTimeRangeFromDateRange(dateRange));\n\n  useEffect(() => {\n    setDate(dateRange);\n    setSelectedDate(dateRange.startTime ?? dateRange.endTime);\n    setTimeRange(deriveTimeRangeFromDateRange(dateRange));\n  }, [dateRange]);\n\n  const endOfTodayTime = useSelector(getDefaultEndTime);\n  const [minimalDate, maximalDate] = useDateRangeConstraints(date);\n\n  const displayOutdatedWarning = useMemo(() => {\n    if (!dateRange.startTime) {\n      return false;\n    }\n\n    const minimalDateMillis = minimalDate.startOf('day').toMillis();\n    const startTimeMillis = DateTime.fromISO(dateRange.startTime).toMillis();\n    return (\n      currentDashboard?.type === dashboardTypes.CALL_REPORTS &&\n      !currentDashboard.isSystemDashboard &&\n      startTimeMillis < minimalDateMillis\n    );\n  }, [dateRange.startTime, currentDashboard?.isSystemDashboard, currentDashboard?.type, minimalDate]);\n\n  const onPopoverChange = (isOpen: boolean) => {\n    if (!isOpen) {\n      let dateToApply = { ...date };\n\n      if (dateToApply.startTime && !_isEmpty(dateToApply.startTime) && _isEmpty(dateToApply.endTime)) {\n        dateToApply.endTime = DateTime.fromISO(dateToApply.startTime).endOf('day').toUTC().toISO()!;\n      }\n      dateToApply = applyTimeToDateRange(dateToApply, timeRange, endOfTodayTime);\n      if (!_isEqual(dateRange, dateToApply)) {\n        onApply({ filter: FILTER_NAMES.DATE, value: { ...dateToApply } });\n      }\n    } else {\n      const eventData = {\n        Action: `Date option selected`,\n        Component: 'DateRangeFilter'\n      };\n      void mixpanelTrack(MIXPANEL_EVENT_NAME.FILTER, eventData);\n    }\n    setOpen(isOpen);\n  };\n\n  const handleCustomSetRange = (newDateRange: DateRange) => {\n    const eventData = {\n      Action: `Custom date range selected`,\n      Component: 'DateRangeFilter',\n      NextFilterValue: newDateRange\n    };\n    void mixpanelTrack(MIXPANEL_EVENT_NAME.FILTER, eventData);\n    setDate(newDateRange);\n    setDateResetToggle(prev => !prev);\n  };\n\n  const handleDateRangeSelection = (value: SelectedDateOptions) => {\n    const eventData = {\n      Action: `Preset date range selected`,\n      Component: 'DateRangeFilter',\n      NextFilterValue: value\n    };\n\n    void mixpanelTrack(MIXPANEL_EVENT_NAME.FILTER, eventData);\n    setDate(calculateDateRange(value, endOfTodayTime));\n    setDateResetToggle(prev => !prev);\n  };\n\n  const label = useMemo(() => {\n    if (!timeRange.isAllDay) {\n      return formatDateRangeWithTime(date, timeRange, userLocale);\n    }\n\n    const formatted = formatDateRangeForChip(date, endOfTodayTime, userLocale);\n\n    if (formatted.convenientOption) {\n      return t(selectedDateOptionsReadable.find(option => option.value === formatted.convenientOption)!.label);\n    }\n\n    return formatted.value;\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [date, timeRange, userLocale, t]);\n\n  const getTooltipLabel = () => {\n    const formatted = formatDateRangeForChip(dateRange, endOfTodayTime, userLocale);\n\n    if (formatted.convenientOption) {\n      return formatted.value;\n    }\n\n    return '';\n  };\n  const getTooltipDataAvailabilityLabel = () => {\n    const formatted = formatDateRangeForChip(dateRange, endOfTodayTime, userLocale);\n    const time = dateRange.endTime && DateTime.fromISO(dateRange.endTime).toFormat('HH:mm');\n    if (time && formatted.convenientOption && presetOptionsEndingNow.includes(formatted.convenientOption)) {\n      return t('Data available up to {{time}}', { time });\n    }\n    return null;\n  };\n\n  const getGutterLabel = () => {\n    if (!timeRange.isAllDay) {\n      return formatDateRangeWithTime(date, timeRange, userLocale);\n    }\n    return formatDateRange(date, DateTime.DATE_MED, undefined, undefined, userLocale);\n  };\n  const getOptionTooltipLabel = (option: SelectedDateOptions) =>\n    formatDateRange(calculateDateRange(option, endOfTodayTime), DateTime.DATE_SHORT);\n\n  const DateRangeIcon = useCallback(() => {\n    if (displayOutdatedWarning) {\n      return (\n        <div className={styles.dateRangeFilter__outdatedIconsContainer}>\n          <CalendarOutlinedIcon alt={t('Date range filter')} />\n          <AlertOutlinedIcon alt={t('Date range filter outdated')} class={styles.dateRangeFilter__alertIcon} />\n        </div>\n      );\n    }\n    return <CalendarOutlinedIcon alt={t('Date range filter')} />;\n  }, [displayOutdatedWarning, t]);\n\n  return (\n    <BaseFilter\n      {...props}\n      isOpen={isOpen}\n      onChange={onPopoverChange}\n      canReadOnlyApply\n      isApplyDisabled={_isEqual(date, dateRange)}\n      isResetDisabled={_isEqual(dateRange, defaultFilters.date)}\n      label={label}\n      tooltipLabel={getTooltipLabel()}\n      tooltipDataAvailabilityLabel={getTooltipDataAvailabilityLabel()}\n      icon={DateRangeIcon()}\n      filterSavingStrategy={SAVING_STRATEGY.ON_CLOSE}>\n      <div className={styles.dateRangeFilter__inner}>\n        <ul className={styles.dateRangeFilter__options}>\n          {selectedDateOptionsReadable.map(opt => (\n            <TooltipWrapper\n              is-open={hoveredOption === opt.value}\n              key={opt.value}\n              title={hoveredOption === opt.value && getOptionTooltipLabel(opt.value)}\n              position=\"top-center\">\n              <li\n                onMouseEnter={() => setHoveredOption(opt.value)}\n                key={opt.value}\n                className={styles.dateRangeFilter__option}>\n                <Button\n                  className={styles.dateRangeFilter__optionButton}\n                  fullWidth\n                  size=\"large\"\n                  variant=\"tertiary\"\n                  onClick={() => handleDateRangeSelection(opt.value)}>\n                  {t(opt.label)}\n                </Button>\n              </li>\n            </TooltipWrapper>\n          ))}\n        </ul>\n        <div className={styles.dateRangeFilter__rangeCalendarWrapper}>\n          <Calendar\n            date={selectedDate ?? null}\n            onDateRangeChange={handleCustomSetRange}\n            minimalDate={minimalDate}\n            maximalDate={maximalDate}\n            dateRangeCalendarFilter={date}\n            isRangeCalendar\n          />\n        </div>\n      </div>\n      {displayOutdatedWarning && (\n        <div className={styles.dateRangeFilter__alertOutdatedPanel}>\n          <Alert variant=\"warning\" className={styles.dateRangeFilter__alertOutdated}>\n            <Typography>{t('The selected date range is outdated or invalid.')}</Typography>\n            <Typography>{t('Check your dates and try again to view data filtered for that range.')}</Typography>\n          </Alert>\n        </div>\n      )}\n      <TimeRangeFilter\n        onDateReset={dateResetToggle}\n        onChange={(startMinutes, endMinutes, isAllDay) => setTimeRange({ startMinutes, endMinutes, isAllDay })}\n        isSameDay={\n          !date.startTime ||\n          !date.endTime ||\n          DateTime.fromISO(date.startTime).hasSame(DateTime.fromISO(date.endTime), 'day')\n        }\n        initialTimeRange={timeRange}\n      />\n      <Typography variant=\"body-small\" className={styles.dateRangeFilter__gutter} aria-live=\"polite\">\n        {getGutterLabel()}\n      </Typography>\n    </BaseFilter>\n  );\n};\n\nexport default DateRangeFilter;\n",".filterContainerTopFilters__filters {\n  display: flex;\n  gap: var(--goto-spacing-02);\n  align-items: center;\n}\n\n.filterContainerTopFilters__resetButton {\n  transform: scaleX(-1);\n\n  &:disabled::part(control) {\n    --goto-icon-color: var(--goto-icon-color-disabled);\n  }\n}\n","import { GroupOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { isEqual as _isEqual } from 'lodash';\nimport PropTypes from 'prop-types';\nimport { Menu, MenuItem, MenuSection } from '@getgo/chameleon-web-react-wrapper';\nimport BaseFilter from '../BaseFilter/BaseFilter';\n\nimport { FILTER_NAMES, GROUPING_FILTERS } from '../../../constants/filters.ts';\nimport { SAVING_STRATEGY } from '../../../constants/filters-definitions';\n\nconst GroupByFilter = ({ type, selectedOption, options, onApply, ...props }) => {\n  const { t } = useTranslation();\n  const [isOpen, setOpen] = useState(false);\n  const [optionToSelect, setOptionToSelect] = useState(selectedOption);\n\n  const getFilterValue = filterType => {\n    switch (filterType) {\n      case GROUPING_FILTERS.MESSAGE:\n        return FILTER_NAMES.MESSAGE_GROUP_BY;\n      case GROUPING_FILTERS.QUALITY_MANAGEMENT:\n        return FILTER_NAMES.QUALITY_MANAGEMENT_GROUP_BY;\n      default:\n        return FILTER_NAMES.GROUP_BY;\n    }\n  };\n  useEffect(() => {\n    setOptionToSelect(selectedOption);\n  }, [selectedOption]);\n\n  const handlePopoverChange = isOpen => {\n    if (!isOpen && selectedOption !== optionToSelect) {\n      onApply({\n        filter: getFilterValue(type),\n        value: options.map(o => ({ ...o, selected: o.id === optionToSelect }))\n      });\n    }\n\n    setOpen(isOpen);\n  };\n\n  const handleClose = (_, val) => {\n    setOpen(val);\n  };\n\n  const selectedOptionLabel = options.find(op => op.id === selectedOption)?.label;\n\n  const selectedOptionEqualToOptionToSelect = _isEqual(selectedOption, optionToSelect);\n\n  return (\n    <BaseFilter\n      {...props}\n      isOpen={isOpen}\n      onChange={handlePopoverChange}\n      onClose={handleClose}\n      isFilterChanged={!selectedOptionEqualToOptionToSelect}\n      canReadOnlyApply\n      isApplyDisabled={selectedOptionEqualToOptionToSelect}\n      isResetDisabled={selectedOptionEqualToOptionToSelect}\n      disabled={!selectedOption}\n      label={t(selectedOptionLabel)}\n      tooltipLabel={selectedOptionLabel}\n      icon={<GroupOutlinedIcon alt={t('Group by filter')} />}\n      filterSavingStrategy={SAVING_STRATEGY.ON_CLOSE}>\n      <Menu aria-label={t('Group by filter menu')}>\n        <MenuSection>{t('Group by')}</MenuSection>\n        {options.map(op => (\n          <MenuItem\n            label={op.label}\n            key={op.id}\n            checked={op.id === optionToSelect}\n            onClick={e => e.preventDefault()}\n            onMouseDown={() => {\n              setOptionToSelect(op.id);\n            }}\n            role=\"menuitemradio\">\n            {t(op.label)}\n          </MenuItem>\n        ))}\n      </Menu>\n    </BaseFilter>\n  );\n};\n\nGroupByFilter.propTypes = {\n  /** The type of the filter */\n  type: PropTypes.string.isRequired,\n  /** Function to call when the group by selection is applied */\n  onApply: PropTypes.func.isRequired,\n  /** Function to call to reset the group by to default */\n  selectedOption: PropTypes.string.isRequired,\n  /** The list of available group by options */\n  options: PropTypes.arrayOf(\n    PropTypes.shape({\n      id: PropTypes.string.isRequired,\n      label: PropTypes.string.isRequired\n    })\n  ).isRequired\n};\n\nexport default GroupByFilter;\n","import { isEqual as _isEqual } from 'lodash';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { IconButton } from '@getgo/chameleon-web-react-wrapper';\nimport { RefreshOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { useTranslation } from 'react-i18next';\nimport { useEffect, useMemo, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport DateRangeFilter from '../../DateRangeFilter/DateRangeFilter';\nimport {\n  DEFAULT_FILTERS,\n  GROUP_BY_OPTIONS,\n  MESSAGE_GROUP_BY_OPTIONS,\n  QUALITY_MANAGEMENT_GROUP_BY_OPTIONS,\n  GROUPING_FILTERS,\n  FILTER_NAMES\n} from '../../../../constants/filters.ts';\nimport { FILTER_POSITION, GROUP_BY_VALUES } from '../../../../constants/filters-definitions';\nimport { dateFilterPropType, filterElementPropType } from '../../../../utils/prop-types.util';\nimport styles from './FilterContainerTopFilters.module.scss';\nimport { TooltipWrapper } from '@analytics-common-ui/layout';\nimport { selectCurrentDashboard } from '../../../../store/selectors/analytics';\nimport useMixpanel from '../../../../hooks/useMixpanel.ts';\nimport { MIXPANEL_EVENT_NAME } from '../../../../constants/mixpanel.ts';\nimport GroupByFilter from '../../GroupByFilter/GroupByFilter';\nimport configs from '../../../../configs';\nimport { getPageIdFromDashboardType } from '../../../../utils/page.util.ts';\nimport { updateEndTime } from '../../../../store/Analytics/default-date.slice';\n\nconst FilterContainerTopFilters = ({ filters, baseFilters, isUserReadOnly, onApplyFilter }) => {\n  const { t } = useTranslation();\n  const dispatch = useDispatch();\n  const [firstLineFilters, setFirstLineFilters] = useState(filters);\n  const currentDashboard = useSelector(selectCurrentDashboard);\n  const mixpanelTrack = useMixpanel();\n  const dashboardConfig = configs[getPageIdFromDashboardType(currentDashboard?.type)];\n  const isResetDisabled = useMemo(\n    () =>\n      !!firstLineFilters.length &&\n      _isEqual(\n        firstLineFilters.find(el => el.filter === 'date')?.value,\n        baseFilters.find(el => el.filter === 'date')?.value\n      ) &&\n      _isEqual(\n        firstLineFilters.find(el => el.filter === 'groupBy')?.value,\n        baseFilters.find(el => el.filter === 'groupBy')?.value\n      ) &&\n      _isEqual(\n        firstLineFilters.find(el => el.filter === FILTER_NAMES.MESSAGE_GROUP_BY)?.value,\n        baseFilters.find(el => el.filter === FILTER_NAMES.MESSAGE_GROUP_BY)?.value\n      ) &&\n      _isEqual(\n        firstLineFilters.find(el => el.filter === FILTER_NAMES.QUALITY_MANAGEMENT_GROUP_BY)?.value,\n        baseFilters.find(el => el.filter === FILTER_NAMES.QUALITY_MANAGEMENT_GROUP_BY)?.value\n      ),\n    [baseFilters, firstLineFilters]\n  );\n\n  useEffect(() => {\n    setFirstLineFilters(filters || []);\n  }, [filters]);\n\n  const handleResetFilters = () => {\n    const eventData = {\n      Action: `Reset filters`,\n      Component: 'FilterContainerTopFilters'\n    };\n    mixpanelTrack(MIXPANEL_EVENT_NAME.FILTER, eventData);\n    dispatch(updateEndTime());\n    onApplyFilter(baseFilters, FILTER_POSITION.FIRST_LINE);\n  };\n\n  const handleApplyFilter = e => {\n    dispatch(updateEndTime());\n    const currentFilters = [...firstLineFilters];\n\n    const currentFilterIndex = currentFilters.findIndex(el => el.filter === e.filter);\n\n    if (currentFilterIndex === -1) {\n      currentFilters.push({ ...e, line: FILTER_POSITION.FIRST_LINE });\n      setFirstLineFilters(currentFilters);\n    } else {\n      currentFilters[currentFilterIndex] = { ...currentFilters[currentFilterIndex], value: e.value };\n    }\n\n    onApplyFilter(currentFilters, FILTER_POSITION.FIRST_LINE);\n  };\n\n  const handleResetFilter = e => {\n    const currentFilters = [...firstLineFilters];\n\n    const currentFilterIndex = currentFilters.findIndex(el => el.filter === e.filter);\n    if (currentFilterIndex !== -1) {\n      currentFilters[currentFilterIndex] = { ...currentFilters[currentFilterIndex], value: DEFAULT_FILTERS.date };\n    }\n\n    onApplyFilter(currentFilters);\n  };\n\n  return (\n    <div className={styles.filterContainerTopFilters__filters}>\n      <TooltipWrapper placement=\"bottom\" title={t('Reset filters')}>\n        {!isUserReadOnly && (\n          <IconButton\n            className={styles.filterContainerTopFilters__resetButton}\n            variant=\"primary\"\n            size=\"small\"\n            disabled={isResetDisabled}\n            label={t('Reset filters')}\n            onClick={handleResetFilters}>\n            <RefreshOutlinedIcon />\n          </IconButton>\n        )}\n      </TooltipWrapper>\n      <DateRangeFilter\n        dateRange={filters.find(el => el.filter === 'date')?.value}\n        onReset={handleResetFilter}\n        onApply={handleApplyFilter}\n        defaultFilters={DEFAULT_FILTERS}\n      />\n      {dashboardConfig.useGroupBy && (\n        <GroupByFilter\n          type={GROUPING_FILTERS.CALL}\n          selectedOption={filters.find(el => el.filter === 'groupBy')?.value?.find(op => op.selected)?.id}\n          options={GROUP_BY_OPTIONS}\n          onReset={handleResetFilter}\n          onApply={handleApplyFilter}\n        />\n      )}\n      {dashboardConfig.useMessageGroupBy && (\n        <GroupByFilter\n          type={GROUPING_FILTERS.MESSAGE}\n          selectedOption={\n            filters.find(el => el.filter === 'messageGroupBy')?.value?.find(op => op.selected)?.id ??\n            GROUP_BY_VALUES.UNGROUPED\n          }\n          options={MESSAGE_GROUP_BY_OPTIONS}\n          onReset={handleResetFilter}\n          onApply={handleApplyFilter}\n        />\n      )}\n      {dashboardConfig.useQualityEvaluationsGroupBy && (\n        <GroupByFilter\n          type={GROUPING_FILTERS.QUALITY_MANAGEMENT}\n          selectedOption={\n            filters.find(el => el.filter === FILTER_NAMES.QUALITY_MANAGEMENT_GROUP_BY)?.value?.find(op => op.selected)\n              ?.id ?? GROUP_BY_VALUES.UNGROUPED\n          }\n          options={QUALITY_MANAGEMENT_GROUP_BY_OPTIONS}\n          onReset={handleResetFilter}\n          onApply={handleApplyFilter}\n        />\n      )}\n    </div>\n  );\n};\n\nFilterContainerTopFilters.propTypes = {\n  /** Function called to apply a filter */\n  onApplyFilter: PropTypes.func,\n  /* Indicates if the user is readonly */\n  isUserReadOnly: PropTypes.bool,\n  /** The query filters  */\n  filters: PropTypes.arrayOf(\n    PropTypes.shape({\n      filter: PropTypes.string,\n      value: PropTypes.oneOfType([dateFilterPropType, filterElementPropType])\n    })\n  ),\n  /** The query filters base */\n  baseFilters: PropTypes.arrayOf(\n    PropTypes.shape({\n      filter: PropTypes.string,\n      value: PropTypes.oneOfType([dateFilterPropType, filterElementPropType])\n    })\n  )\n};\n\nexport default FilterContainerTopFilters;\n",".filterContainer {\n  gap: 0.75rem;\n  padding: 0.75rem 0;\n  border-bottom: 0.0625rem solid var(--goto-border-color-default);\n  margin-bottom: 0.375rem;\n  align-items: flex-start;\n}\n\n.filterContainer__sticky {\n  background: var(--goto-background-color-default);\n\n  --z-index: var(--goto-z-index-sticky);\n}\n\n.filterContainer_notificationsWrapper {\n  position: relative;\n}\n\n.filterContainer__filters {\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n}\n\n.filterContainer__header {\n  display: flex;\n  margin: var(--goto-spacing-03);\n  margin-top: 0;\n}\n\n.filterContainer__headerTitle {\n  max-width: 80%;\n}\n\n.filterContainer__headerLabel {\n  text-overflow: ellipsis;\n  overflow: hidden;\n  white-space: nowrap;\n  display: block;\n}\n\n.filterContainer__header__actions {\n  display: flex;\n  align-items: center;\n  margin-left: auto;\n  gap: 10px;\n}\n","const NOTIFICATION_EVENT = 'REPORTING:NOTIFICATION' as const;\n\nexport type Notification = {\n  message: string;\n  variant?: 'warning' | 'success' | 'danger' | 'info';\n  action?: string;\n  actionTitle?: string;\n  timeout?: number;\n};\n\nexport const onNotification = (callback: EventListener): void => {\n  window.addEventListener(NOTIFICATION_EVENT, callback);\n};\n\nexport const removeEventListener = (callback: EventListener): void => {\n  window.removeEventListener(NOTIFICATION_EVENT, callback);\n};\n\nexport const addNotification = (notification: Notification): void => {\n  window.dispatchEvent(\n    new CustomEvent(NOTIFICATION_EVENT, {\n      detail: {\n        ...notification\n      }\n    })\n  );\n};\n",".notifications {\n  display: flex;\n  flex-direction: column;\n  gap: 12px;\n  position: absolute;\n  left: 0;\n  margin-top: -8px;\n  background-color: var(--goto-surface-color-default);\n  width: 100%;\n  z-index: var(--goto-z-index-default);\n}\n\n.notifications__notification {\n  display: flex;\n  justify-content: space-between;\n  padding-top: var(--goto-spacing-02);\n}\n\n.notifications__content {\n  display: inline-flex;\n  justify-content: flex-start;\n  width: 100%;\n  gap: 5px;\n  align-items: center;\n}\n\n.notifications__icon_warning {\n  color: var(--goto-type-color-warning);\n}\n\n.notifications__icon_success {\n  color: var(--goto-type-color-success);\n}\n\n.notifications__icon_danger {\n  color: var(--goto-type-color-danger);\n}\n\n.notifications__icon_info {\n  color: var(--goto-interactive-color-primary-default);\n}\n\n.notifications__actionButton {\n  margin-left: auto;\n}\n","import { useDispatch, useSelector } from 'react-redux';\nimport { useEffect, useState } from 'react';\nimport { Alert, Button, Typography } from '@getgo/chameleon-web-react-wrapper';\nimport { onNotification, removeEventListener } from '../../../services/common/notifications.service';\nimport styles from './Notifications.module.scss';\nimport { applyFiltersQuery } from '../../../store/Analytics/filters.slice';\nimport { selectFiltersPreviousQuery } from '../../../store/selectors/filtersV2';\n\n/*\n * Display notifications based on inputs\n */\nconst Notifications = () => {\n  const [notifications, setNotifications] = useState([]);\n  const dispatch = useDispatch();\n  const filtersPreviousQuery = useSelector(selectFiltersPreviousQuery);\n\n  const removeNotification = id => {\n    setNotifications(previous => previous.filter(el => el.id !== id));\n  };\n\n  const onAction = (action, id) => {\n    switch (action) {\n      case 'UNDO_FILTERS':\n        dispatch(applyFiltersQuery(filtersPreviousQuery));\n        removeNotification(id);\n        break;\n      default:\n        throw new Error(`Unable to find notification action (${action})`);\n    }\n  };\n\n  const addNotification = message => {\n    const id = Date.now();\n    setNotifications(previous => [\n      ...previous,\n      {\n        id,\n        ...message.detail,\n        messageTimeout: message.detail.timeout ? setTimeout(() => removeNotification(id), message.detail.timeout) : null\n      }\n    ]);\n  };\n\n  useEffect(() => {\n    onNotification(addNotification);\n    return () => removeEventListener(addNotification);\n  });\n\n  return (\n    <div className={styles.notifications}>\n      {notifications.map(notification => (\n        <Alert\n          key={notification.id}\n          variant={notification.variant || 'info'}\n          closable\n          role=\"alert\"\n          onClose={() => removeNotification(notification.id)}\n          className={[styles.notifications__notification]}>\n          <div className={styles.notifications__content}>\n            <Typography tag=\"span\" variant=\"caption-medium-strong\">\n              {notification.message}\n            </Typography>\n            {notification.action && (\n              <Button\n                data-testid={`notification-action-${notification.actionTitle}`}\n                variant=\"success\"\n                size=\"small\"\n                className={styles.notifications__actionButton}\n                onClick={() => onAction(notification.action, notification.id)}>\n                {notification.actionTitle}\n              </Button>\n            )}\n          </div>\n        </Alert>\n      ))}\n    </div>\n  );\n};\n\nexport default Notifications;\n","import React from 'react';\nimport { useAccessCheck } from '../../hooks/permissions/useAccessCheck';\nimport type { AccessDescriptor } from '../../services/common/access.service';\n\nconst WithPermission =\n  (access: string | AccessDescriptor, Component: React.ComponentType<{ children: React.ReactNode }>) =>\n  // eslint-disable-next-line react/display-name\n  ({ children }: { children: React.ReactNode }) => {\n    const canAccess = useAccessCheck();\n    const accessDescriptor: AccessDescriptor = typeof access === 'string' ? { permission: access } : access;\n    if (canAccess(accessDescriptor)) {\n      return <Component>{children}</Component>;\n    }\n    return children;\n  };\n\nexport default WithPermission;\n","import { ReactNode, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport configs from '../../configs/index';\nimport { FILTER_NAMES } from '../../constants/filters';\nimport useFetch from '../../hooks/useFetch';\nimport { fetchTopicsFilters } from '../../services/common/filters.service';\nimport { setNetworkError } from '../../services/common/handle-errors.service';\nimport { applyFilter } from '../../store/Analytics/filters.slice';\nimport { selectCurrentOrganizationId } from '../../store/selectors/analytics';\nimport { selectQueriedDateRange, selectQueryReady } from '../../store/selectors/filtersV2';\nimport { RootState } from '../../types/store/RootState';\nimport { getPageIdFromDashboardType } from '../../utils/page.util';\n\ninterface WithTopicsFilterControllerProps {\n  children: ReactNode;\n}\n\nconst WithTopicsFilterController = ({ children }: WithTopicsFilterControllerProps) => {\n  const { currentOrganization, userId, currentLicense, locale, currentOrganizationPermissions, currentDashboard } =\n    useSelector((state: RootState) => state.analytics);\n  const organizationId = useSelector(selectCurrentOrganizationId) as string;\n  const { startTime, endTime } = useSelector(selectQueriedDateRange);\n  const queryReady = useSelector(selectQueryReady);\n  const dispatch = useDispatch();\n  const { t } = useTranslation();\n  const [shouldFetch, setShouldFetch] = useState(false);\n  const [, requestError] = useFetch(\n    async controller => {\n      if (shouldFetch) {\n        const topics = await fetchTopicsFilters(organizationId, startTime, endTime, controller);\n\n        dispatch(\n          applyFilter({\n            filter: FILTER_NAMES.TOPICS,\n            [FILTER_NAMES.TOPICS]:\n              (topics as Array<{ name: string }>)?.map(topic => ({\n                id: topic.name,\n                label: topic.name,\n                selected: true\n              })) ?? []\n          })\n        );\n      }\n    },\n    [startTime, endTime, shouldFetch]\n  );\n\n  useEffect(() => {\n    if (requestError) {\n      setNetworkError({\n        dispatch,\n        requestError,\n        permissions: currentOrganizationPermissions,\n        currentOrganization,\n        userId,\n        currentLicense,\n        message: t('An error occurred while fetching filters'),\n        locale\n      });\n    }\n  }, [currentLicense, currentOrganization, currentOrganizationPermissions, dispatch, locale, requestError, t, userId]);\n\n  useEffect(() => {\n    if (!queryReady) {\n      return;\n    }\n    const dashboardConfig = configs[getPageIdFromDashboardType(currentDashboard?.type)] || {};\n    setShouldFetch(\n      ((dashboardConfig?.availableFilters ?? {}) as Record<string, unknown>)[FILTER_NAMES.TOPICS] === true\n    );\n  }, [queryReady, startTime, endTime, currentDashboard?.type]);\n\n  return children;\n};\n\nexport default WithTopicsFilterController;\n","import { QUEUE_CALLER_CAPABILITIES, RESOURCES } from '../../constants/capabilities';\nimport WithPermission from '../withPermission/withPermission';\nimport WithTopicsFilterController from './withTopicsFilterController';\n\nexport default WithPermission(\n  { resource: RESOURCES.QUEUE_CALLER, capability: QUEUE_CALLER_CAPABILITIES.CAN_VIEW_SENTIMENT },\n  WithTopicsFilterController\n);\n","import { FILTER_NAMES } from '../constants/filters.ts';\n\nexport const getFilterDetails = filters => {\n  if (!filters || filters.length === 0) {\n    return [];\n  }\n  return filters.map(filter => {\n    switch (filter.filter) {\n      case FILTER_NAMES.DATE:\n        return {\n          filter: filter.filter,\n          value: filter.value\n        };\n      case FILTER_NAMES.GROUP_BY:\n      case FILTER_NAMES.MESSAGE_GROUP_BY:\n      case FILTER_NAMES.QUALITY_MANAGEMENT_GROUP_BY:\n        return {\n          filter: filter.filter,\n          value: filter.value.find(val => val.selected)?.id\n        };\n      case FILTER_NAMES.OPERATOR:\n        return {\n          filter: filter.filter,\n          value: filter.value\n        };\n      default:\n        return {\n          filter: filter.filter\n        };\n    }\n  });\n};\n","import { useState, useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport { isEqual as _isEqual } from 'lodash';\nimport PropTypes from 'prop-types';\nimport { Typography } from '@getgo/chameleon-web-react-wrapper';\nimport { FILTER_NAMES } from '../../../constants/filters.ts';\nimport { FILTER_POSITION } from '../../../constants/filters-definitions';\nimport { MIXPANEL_EVENT_NAME } from '../../../constants/mixpanel.ts';\nimport WithFilterController from '../../../hocs/withFilterController/withFilterController';\nimport useMixpanel from '../../../hooks/useMixpanel.ts';\nimport { applyFiltersQuery } from '../../../store/Analytics/filters.slice';\nimport {\n  selectCurrentDashboard,\n  selectIsUserReadOnly,\n  selectUserHasPermission\n} from '../../../store/selectors/analytics';\nimport TipsAndTricksBanner from '../TipsAndTricksBanner/TipsAndTricksBanner';\nimport FilterContainerActions from './FilterContainerActions/FilterContainerActions';\nimport FilterContainerBottomFilters from './FilterContainerBottomFilters/FilterContainerBottomFilters';\nimport FilterContainerTopFilters from './FilterContainerTopFilters/FilterContainerTopFilters';\nimport { setShowTipsAndTricks } from '../../../store/Analytics/events.slice';\nimport { PERMISSIONS } from '../../../constants/permissions.ts';\nimport { selectBaseQueryFilters, selectFiltersQuery, selectQueryChanged } from '../../../store/selectors/filtersV2';\nimport styles from './FilterContainer.module.scss';\nimport Notifications from '../Notifications/Notifications';\nimport WithTopicsFilterController from '../../../hocs/withFilterController';\nimport { getFilterDetails } from '../../../utils/mixpanel.util';\nimport { updateEndTime } from '../../../store/Analytics/default-date.slice';\nimport { useLocation, useNavigate } from 'react-router';\nimport useUrlParamsHandler from '../../../hooks/useUrlParamsHandler';\nimport useHasUrlParamsFiltersEnabled from '../../../hooks/useHasUrlParamsFiltersEnabled';\nimport { TooltipWrapper } from '@analytics-common-ui/layout';\nimport { getBoardName } from '../../../services/common/dashboards.service';\n\nconst FilterContainer = ({ showSettings, onSettingsClick }) => {\n  const dispatch = useDispatch();\n  const filtersQueryBase = useSelector(selectBaseQueryFilters);\n  const filtersQuery = useSelector(selectFiltersQuery);\n  const isUserReadOnly = useSelector(selectIsUserReadOnly);\n  const currentDashboard = useSelector(selectCurrentDashboard);\n  const queryChanged = useSelector(selectQueryChanged);\n  const mixpanelTrack = useMixpanel();\n  const hasAccess = useSelector(selectUserHasPermission);\n  const canViewTipsAndTricks = hasAccess(PERMISSIONS.TIPS_AND_TRICK_BANNER_VIEW);\n  const { t } = useTranslation();\n  const location = useLocation();\n  const navigate = useNavigate();\n  const [actualFilters, setActualFilters] = useState(filtersQuery);\n  const [actualBaseQuery, setActualBaseQuery] = useState(filtersQueryBase);\n  const { createFiltersUrlParams } = useUrlParamsHandler();\n  const hasUrlParamsFiltersEnabled = useHasUrlParamsFiltersEnabled();\n\n  const onApplyFilter = (lineFilters, line) => {\n    const currentFilters = filtersQuery.filter(el => el.line !== line);\n    const newFilters = [...currentFilters, ...lineFilters];\n    const isDeletingFilters = filtersQuery.length > newFilters.length;\n\n    const eventData = {\n      Action: `Apply filter complexity`,\n      Component: 'FilterContainer',\n      FilterLength: newFilters.length,\n      FiltersDetails: getFilterDetails(newFilters),\n      Operators: newFilters.filter(el => el.filter === FILTER_NAMES.OPERATOR),\n      Dashboard: currentDashboard?.type\n    };\n\n    mixpanelTrack(MIXPANEL_EVENT_NAME.FILTER, eventData);\n\n    const applyFilters = newFilters\n      .sort((a, b) => a.line.localeCompare(b.line))\n      .map(el => ({ ...el, id: el.id || crypto.randomUUID() }));\n\n    const applyFiltersWithoutLastOperator =\n      applyFilters.at(-1)?.filter === FILTER_NAMES.OPERATOR ? applyFilters.slice(0, -1) : applyFilters;\n    const actualFiltersWithoutLastOperator =\n      actualFilters.at(-1)?.filter === FILTER_NAMES.OPERATOR ? actualFilters.slice(0, -1) : actualFilters;\n\n    setActualFilters(applyFilters);\n\n    if (hasUrlParamsFiltersEnabled()) {\n      const queryString = createFiltersUrlParams(applyFilters, isDeletingFilters);\n      navigate(`${location.pathname}${queryString}`, { replace: true });\n    }\n\n    if (!_isEqual(applyFiltersWithoutLastOperator, actualFiltersWithoutLastOperator)) {\n      dispatch(applyFiltersQuery(applyFilters));\n    }\n    dispatch(updateEndTime());\n  };\n  useEffect(() => {\n    setActualBaseQuery(filtersQueryBase);\n  }, [filtersQueryBase]);\n\n  useEffect(() => {\n    setActualFilters(filtersQuery);\n  }, [filtersQuery]);\n\n  return (\n    <WithTopicsFilterController>\n      <WithFilterController>\n        {() => (\n          <div className={styles.filterContainer__sticky} data-hide-print>\n            <div className={styles.filterContainer}>\n              <div className={styles.filterContainer__header}>\n                <div className={styles.filterContainer__headerTitle}>\n                  <TooltipWrapper title={getBoardName(currentDashboard, t)} position=\"top-center\">\n                    <Typography variant=\"heading-medium\">\n                      <span className={styles.filterContainer__headerLabel}>{getBoardName(currentDashboard, t)}</span>\n                    </Typography>\n                  </TooltipWrapper>\n                </div>\n                <div className={styles.filterContainer__header__actions}>\n                  <FilterContainerActions\n                    filterHasBeenChanged={queryChanged}\n                    showSettings={showSettings}\n                    onSettingsClick={onSettingsClick}\n                  />\n                </div>\n              </div>\n              <div className={styles.filterContainer__filters}>\n                <FilterContainerTopFilters\n                  filters={actualFilters.filter(el => el.line === FILTER_POSITION.FIRST_LINE)}\n                  baseFilters={actualBaseQuery.filter(el => el.line === FILTER_POSITION.FIRST_LINE)}\n                  isUserReadOnly={isUserReadOnly}\n                  onApplyFilter={onApplyFilter}\n                />\n                <FilterContainerBottomFilters\n                  filters={actualFilters.filter(el => el.line === FILTER_POSITION.SECOND_LINE)}\n                  baseFilters={actualBaseQuery.filter(el => el.line === FILTER_POSITION.SECOND_LINE)}\n                  isUserReadOnly={isUserReadOnly}\n                  onApplyFilter={onApplyFilter}\n                />\n              </div>\n            </div>\n            <div>\n              {canViewTipsAndTricks && (\n                <TipsAndTricksBanner\n                  onClose={() => {\n                    dispatch(setShowTipsAndTricks({ showTipsAndTricks: false }));\n                  }}\n                  alertTitle={t('We are working to pull the data you requested.')}\n                  loadedTitle={t('Your report is ready! Thank you for your patience.')}\n                />\n              )}\n            </div>\n            <div className={styles.filterContainer_notificationsWrapper}>\n              <Notifications />\n            </div>\n          </div>\n        )}\n      </WithFilterController>\n    </WithTopicsFilterController>\n  );\n};\n\nFilterContainer.propTypes = {\n  /** Whether to show the settings button */\n  showSettings: PropTypes.bool,\n  /** Function to be called when the settings button is clicked */\n  onSettingsClick: PropTypes.func\n};\n\nexport default FilterContainer;\n",".banner {\n  margin-top: var(--goto-spacing-03);\n}\n","import { Alert } from '@getgo/chameleon-web-react-wrapper';\nimport { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector } from 'react-redux';\nimport { formatTimezone, getTimeZone } from '../../../services/common/users.service';\nimport { selectCurrentDashboard, selectUserLocale } from '../../../store/selectors/analytics';\nimport styles from './TimeZoneWarningBanner.module.scss';\n\ninterface TimeZoneWarningBannerProps {\n  /** When provided, uses this timezone instead of the Redux currentDashboard.timeZone.\n   *  Pass null to explicitly indicate \"no dashboard timezone\" in controlled mode. */\n  dashboardTimezone?: string | null;\n  className?: string;\n}\n\nconst TimeZoneWarningBanner = ({\n  dashboardTimezone: dashboardTimezoneProp,\n  className\n}: TimeZoneWarningBannerProps = {}) => {\n  const { t } = useTranslation();\n  const [dismissed, setDismissed] = useState(false);\n  const currentDashboard = useSelector(selectCurrentDashboard);\n  const userLocale = useSelector(selectUserLocale);\n\n  const dashboardId = currentDashboard?.id;\n  useEffect(() => {\n    setDismissed(false);\n  }, [dashboardId]);\n\n  const dashboardTimezone = dashboardTimezoneProp !== undefined ? dashboardTimezoneProp : currentDashboard?.timeZone;\n  const userTimezone = getTimeZone();\n\n  if (!dashboardTimezone || dashboardTimezone === userTimezone || dismissed) {\n    return null;\n  }\n\n  return (\n    <Alert className={className ?? styles.banner} variant=\"info\" closable onClose={() => setDismissed(true)}>\n      {t('This dashboard uses {{dashboardTimezone}} time zone.', {\n        dashboardTimezone: formatTimezone(dashboardTimezone, userLocale)\n      })}\n    </Alert>\n  );\n};\n\nexport default TimeZoneWarningBanner;\n",".dashboard__layout {\n  padding: 0 var(--goto-spacing-03);\n\n  @media print {\n    padding: 0;\n  }\n}\n\n.dashboard__stickyHeader {\n  position: sticky;\n  top: 0;\n  z-index: var(--goto-z-index-sticky);\n  background: var(--goto-background-color-default);\n}\n","import { trimEnd as _trimEnd } from 'lodash';\nimport { lazy, Suspense, useEffect, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Navigate, useLocation } from 'react-router';\nimport configs from '../../../configs';\nimport pageIds from '../../../constants/pages';\nimport WithDashboard from '../../../hocs/withDashboard/withDashboard';\nimport WithPermissions from '../../../hocs/withPermissions/withPermissions';\nimport { getPageId } from '../../../services/common/dashboards.service';\nimport { selectCurrentDashboard, selectIsUserReadOnly, selectFeatureFlag } from '../../../store/selectors/analytics';\nimport { DashboardPageConfigType } from '../../../types/dashboard/DashboardTypes';\nimport { FEATURE_FLAGS } from '../../../utils/feature-flag';\nimport ErrorBannerAlert from '../ErrorBannerAlert/ErrorBannerAlert';\nimport FeatureAnchor from '../FeatureAnchor/FeatureAnchor';\nimport FilterContainer from '../FilterContainer/FilterContainer';\nimport LoadingBar from '../LoadingBar/LoadingBar';\nimport TimeZoneWarningBanner from '../TimeZoneWarningBanner/TimeZoneWarningBanner';\nimport styles from './Dashboard.module.scss';\n\nconst defaultDashboardConfig: DashboardPageConfigType = {\n  scheduleEnabled: false,\n  analyticsFilters: false,\n  unifiedAnalyticsMigrated: false,\n  operators: [],\n  filterVersion: 2,\n  availableFilters: {\n    filtersToQuery: [],\n    order: []\n  },\n  export: {\n    enabled: false\n  }\n};\nconst CallReportsDashboardPreview = lazy(() => import('../../../pages/CallReportsDashboard/CallReportsDashboard'));\nconst MessageReportsDashboardPreview = lazy(\n  () => import('../../../pages/MessageReportsDashboard/MessageReportsDashboard')\n);\nconst AgentPerformanceDashboardPreview = lazy(\n  () => import('../../../pages/AgentPerformanceDashboard/AgentPerformanceDashboard')\n);\nconst QueueCallerDashboardPreview = lazy(() => import('../../../pages/QueueCallerDashboard/QueueCallerDashboard'));\n\nconst QueueCallerDashboardModuleFederationPreview = lazy(\n  () => import('../../../pages/QueueCallerDashboardModuleFederation/QueueCallerDashboardModuleFederation')\n);\n\nconst ResolvedConversationDashboardPreview = lazy(\n  () => import('../../../pages/ResolvedConversationDashboard/ResolvedConversationDashboard')\n);\nconst SatisfactionSurveyDashboardPreview = lazy(\n  () => import('../../../pages/SatisfactionSurveyDashboard/SatisfactionSurveyDashboard')\n);\nconst QualityManagementDashboardPreview = lazy(\n  () => import('../../../pages/QualityManagementDashboard/QualityManagementDashboard')\n);\n\nconst Dashboard = () => {\n  const [isDrawerOpen, setIsDrawerOpen] = useState(false);\n  const isReadonly = useSelector(selectIsUserReadOnly);\n  const currentDashboard = useSelector(selectCurrentDashboard);\n  const hasFeatureFlag = useSelector(selectFeatureFlag);\n  const location = useLocation();\n\n  useEffect(() => {\n    setIsDrawerOpen(false);\n  }, [currentDashboard]);\n\n  // If the last character of the url is '/'\n  if (location.pathname.endsWith('/')) {\n    return <Navigate replace to={_trimEnd(location.pathname, '/')} />;\n  }\n  const pageId = getPageId(currentDashboard?.type);\n\n  const dashboardConfig: DashboardPageConfigType = (pageId ? configs[pageId] : null) ?? defaultDashboardConfig;\n\n  const showFilterContainers = dashboardConfig.analyticsFilters;\n\n  const renderDashboardContent = () => {\n    switch (pageId) {\n      case pageIds.CALL_REPORTS:\n        return <CallReportsDashboardPreview isDrawerOpen={isDrawerOpen} setIsDrawerOpen={setIsDrawerOpen} />;\n      case pageIds.MESSAGE_REPORTS:\n        return <MessageReportsDashboardPreview isDrawerOpen={isDrawerOpen} setIsDrawerOpen={setIsDrawerOpen} />;\n      case pageIds.AGENT_EFFECTIVENESS:\n        return <AgentPerformanceDashboardPreview isDrawerOpen={isDrawerOpen} setIsDrawerOpen={setIsDrawerOpen} />;\n      case pageIds.QUEUE_CALLER:\n        return hasFeatureFlag(FEATURE_FLAGS.QUEUE_CALLER_DASHBOARD_MODULE_FEDERATION) ? (\n          <QueueCallerDashboardModuleFederationPreview isDrawerOpen={isDrawerOpen} setIsDrawerOpen={setIsDrawerOpen} />\n        ) : (\n          <QueueCallerDashboardPreview isDrawerOpen={isDrawerOpen} setIsDrawerOpen={setIsDrawerOpen} />\n        );\n      case pageIds.RESOLVED_CONVERSATIONS:\n        return <ResolvedConversationDashboardPreview isDrawerOpen={isDrawerOpen} setIsDrawerOpen={setIsDrawerOpen} />;\n      case pageIds.SATISFACTION_SURVEY:\n        return <SatisfactionSurveyDashboardPreview isDrawerOpen={isDrawerOpen} setIsDrawerOpen={setIsDrawerOpen} />;\n      case pageIds.QUALITY_MANAGEMENT:\n        return hasFeatureFlag(FEATURE_FLAGS.SAI_QUALITY_MANAGEMENT_DASHBOARD) ? (\n          <QualityManagementDashboardPreview isDrawerOpen={isDrawerOpen} setIsDrawerOpen={setIsDrawerOpen} />\n        ) : undefined;\n      default:\n        return undefined;\n    }\n  };\n\n  return (\n    <WithDashboard>\n      {({ loading }: { loading: boolean }) => (\n        <>\n          {loading && <LoadingBar />}\n          {!loading && currentDashboard && (\n            <div className={styles.dashboard__layout}>\n              <WithPermissions pageId={pageId} dashboard={currentDashboard}>\n                <div className={styles.dashboard__stickyHeader}>\n                  <TimeZoneWarningBanner />\n                  <ErrorBannerAlert />\n                  {showFilterContainers && (\n                    <FilterContainer showSettings={!isReadonly} onSettingsClick={() => setIsDrawerOpen(true)} />\n                  )}\n                </div>\n                <Suspense fallback={<LoadingBar />}>{renderDashboardContent()}</Suspense>\n              </WithPermissions>\n            </div>\n          )}\n          <FeatureAnchor />\n        </>\n      )}\n    </WithDashboard>\n  );\n};\n\nexport default Dashboard;\n","import { Navigate, useLocation, useParams } from 'react-router';\nimport { CALL_REPORTS_DASHBOARD_ID } from '../../../configs/call-reports.config';\nimport { QUALITY_MANAGEMENT_DASHBOARD_ID } from '../../../configs/quality-management.config';\nimport { SATISFACTION_SURVEY_DASHBOARD_ID } from '../../../configs/satisfaction-survey.config';\nimport Dashboard from '../Dashboard/Dashboard';\n\nconst SLUG_TO_DASHBOARD_ID = {\n  'call-reports': CALL_REPORTS_DASHBOARD_ID,\n  'quality-evaluations': QUALITY_MANAGEMENT_DASHBOARD_ID,\n  'satisfaction-surveys': SATISFACTION_SURVEY_DASHBOARD_ID\n};\n\nconst AnalyticsRedirect = () => {\n  const location = useLocation();\n  const search = location.search;\n  const hash = location.hash;\n  const { dashboardId } = useParams();\n\n  const redirectId = SLUG_TO_DASHBOARD_ID[dashboardId];\n  if (redirectId) {\n    return <Navigate to={`../${redirectId}${search}${hash}`} relative=\"path\" />;\n  }\n\n  return <Dashboard />;\n};\n\nexport default AnalyticsRedirect;\n","\"use client\";\nimport { createContext as y, Component as f, createElement as d, useContext as l, useState as p, useMemo as E, forwardRef as B } from \"react\";\nconst h = y(null), c = {\n  didCatch: !1,\n  error: null\n};\nclass m extends f {\n  constructor(e) {\n    super(e), this.resetErrorBoundary = this.resetErrorBoundary.bind(this), this.state = c;\n  }\n  static getDerivedStateFromError(e) {\n    return { didCatch: !0, error: e };\n  }\n  resetErrorBoundary(...e) {\n    const { didCatch: t } = this.state;\n    t && (this.props.onReset?.({\n      args: e,\n      reason: \"imperative-api\"\n    }), this.setState(c));\n  }\n  componentDidCatch(e, t) {\n    this.props.onError?.(e, t);\n  }\n  componentDidUpdate(e, t) {\n    const { didCatch: o } = this.state, { resetKeys: s } = this.props;\n    o && t.didCatch && C(e.resetKeys, s) && (this.props.onReset?.({\n      next: s,\n      prev: e.resetKeys,\n      reason: \"keys\"\n    }), this.setState(c));\n  }\n  render() {\n    const { children: e, fallbackRender: t, FallbackComponent: o, fallback: s } = this.props, { didCatch: n, error: a } = this.state;\n    let i = e;\n    if (n) {\n      const u = {\n        error: a,\n        resetErrorBoundary: this.resetErrorBoundary\n      };\n      if (typeof t == \"function\")\n        i = t(u);\n      else if (o)\n        i = d(o, u);\n      else if (s !== void 0)\n        i = s;\n      else\n        throw a;\n    }\n    return d(\n      h.Provider,\n      {\n        value: {\n          didCatch: n,\n          error: a,\n          resetErrorBoundary: this.resetErrorBoundary\n        }\n      },\n      i\n    );\n  }\n}\nfunction C(r = [], e = []) {\n  return r.length !== e.length || r.some((t, o) => !Object.is(t, e[o]));\n}\nfunction g(r) {\n  return r !== null && typeof r == \"object\" && \"didCatch\" in r && typeof r.didCatch == \"boolean\" && \"error\" in r && \"resetErrorBoundary\" in r && typeof r.resetErrorBoundary == \"function\";\n}\nfunction x(r) {\n  if (!g(r))\n    throw new Error(\"ErrorBoundaryContext not found\");\n}\nfunction k() {\n  const r = l(h);\n  x(r);\n  const { error: e, resetErrorBoundary: t } = r, [o, s] = p({\n    error: null,\n    hasError: !1\n  }), n = E(\n    () => ({\n      error: e,\n      resetBoundary: () => {\n        t(), s({ error: null, hasError: !1 });\n      },\n      showBoundary: (a) => s({\n        error: a,\n        hasError: !0\n      })\n    }),\n    [e, t]\n  );\n  if (o.hasError)\n    throw o.error;\n  return n;\n}\nfunction S(r) {\n  switch (typeof r) {\n    case \"object\": {\n      if (r !== null && \"message\" in r && typeof r.message == \"string\")\n        return r.message;\n      break;\n    }\n    case \"string\":\n      return r;\n  }\n}\nfunction w(r, e) {\n  const t = B(\n    (s, n) => d(\n      m,\n      e,\n      d(r, { ...s, ref: n })\n    )\n  ), o = r.displayName || r.name || \"Unknown\";\n  return t.displayName = `withErrorBoundary(${o})`, t;\n}\nexport {\n  m as ErrorBoundary,\n  h as ErrorBoundaryContext,\n  S as getErrorMessage,\n  k as useErrorBoundary,\n  w as withErrorBoundary\n};\n//# sourceMappingURL=react-error-boundary.js.map\n",".errorAlert__inputCopyErrorId {\n  &::part(control) {\n    text-overflow: ellipsis;\n    overflow: hidden;\n    max-width: 100%;\n    white-space: nowrap;\n  }\n\n  &::part(root) {\n    padding-right: var(--goto-spacing-04);\n    margin-top: var(--goto-spacing-02);\n  }\n\n  &_focused {\n    --goto-border: var(--goto-border-color-success);\n  }\n}\n","import { useSelector } from 'react-redux';\nimport { useMemo, useState } from 'react';\nimport { isEmpty as _isEmpty, trim as _trim } from 'lodash';\nimport { Dialog, Button, Typography, TextField } from '@getgo/chameleon-web-react-wrapper';\nimport { CheckboxCheckIcon, CopyOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { useTranslation, Trans } from 'react-i18next';\nimport PropTypes from 'prop-types';\n\nimport clsx from 'clsx';\nimport environment from '../../../environments';\nimport styles from './ErrorAlert.module.scss';\n\nconst ErrorAlert = ({ onClosed }) => {\n  const { t } = useTranslation();\n  const [hasErrorFocus, setHasErrorFocus] = useState(false);\n  const sentryEventId = useSelector(state => state.analytics.sentryEventId);\n  const error = useSelector(state => state.analytics.error);\n  const { message: errorMessage } = error?.errorStack ?? {};\n\n  const onCopyToClipboardFocus = () => {\n    navigator.clipboard.writeText(sentryEventId);\n    setHasErrorFocus(true);\n  };\n\n  const onCopyToClipboardLooseFocus = () => {\n    setHasErrorFocus(false);\n  };\n\n  const message = useMemo(() => {\n    if (!_isEmpty(errorMessage)) {\n      if (errorMessage.includes('Minified React error')) {\n        return (\n          <Trans>\n            <div>Something went wrong.</div>\n            <div>Go ahead and try again.</div>\n          </Trans>\n        );\n      } else if (errorMessage.includes('\\n')) {\n        return errorMessage.split('\\n').map(row => <div key={row}>{_trim(row)}</div>);\n      }\n    }\n    return null;\n  }, [errorMessage]);\n\n  if (!error || !sentryEventId) {\n    return null;\n  }\n\n  return (\n    <Dialog\n      open\n      closable\n      title={t('Error')}\n      onClosed={onClosed}\n      closeButtonLabel={t('Close error modal')}\n      actions={\n        <Button\n          onClick={() => {\n            window.open(environment.support.url, '_blank');\n          }}>\n          {t('Contact support')}\n        </Button>\n      }>\n      {(message || errorMessage) && (\n        <>\n          <Typography component=\"div\" variant=\"body-medium\" color=\"textPrimary\">\n            {message || errorMessage}\n          </Typography>\n          <Typography component=\"div\" variant=\"body-small\" color=\"textSecondary\">\n            <div>{t('If the error persists after reloading, please contact support.')}</div>\n          </Typography>\n          <TextField\n            className={clsx(styles.errorAlert__inputCopyErrorId, {\n              [styles.errorAlert__inputCopyErrorId_focused]: hasErrorFocus\n            })}\n            readOnly\n            fullwidth\n            value={t(`Error ID: {{errorId}}`, { errorId: sentryEventId })}\n            onBlur={onCopyToClipboardLooseFocus}\n            onFocus={onCopyToClipboardFocus}\n            success={hasErrorFocus}\n            helperText={hasErrorFocus ? t('Error ID copied!') : t('Copy error ID')}\n            trailingIcon={hasErrorFocus ? <CheckboxCheckIcon /> : <CopyOutlinedIcon />}\n          />\n        </>\n      )}\n    </Dialog>\n  );\n};\n\nErrorAlert.propTypes = {\n  /** Calback when error dialog closed  */\n  onClosed: PropTypes.func\n};\n\nexport default ErrorAlert;\n","import { useDispatch, useSelector } from 'react-redux';\nimport { ErrorBoundary } from 'react-error-boundary';\nimport ErrorAlert from '../ErrorAlert/ErrorAlert';\nimport errorTypes from '../../../constants/error-types';\nimport { setError, setSentryEventId } from '../../../store/Analytics/analytics.slice';\n\nconst ErrorBoundaryWrapper = function ({ children }) {\n  const dispatch = useDispatch();\n  const sentryEventId = useSelector(state => state.analytics.sentryEventId);\n  const currentOrganizationPermissions = useSelector(state => state.analytics.currentOrganizationPermissions);\n  const currentOrganization = useSelector(state => state.analytics.currentOrganization);\n  const userId = useSelector(state => state.analytics.userId);\n  const currentLicense = useSelector(state => state.analytics.currentLicense);\n  const locale = useSelector(state => state.analytics.locale);\n\n  const handleComponentErrors = error => {\n    dispatch(\n      setError({\n        errorStack: {\n          errorType: errorTypes.COMPONENT_ERROR,\n          exception: error,\n          message: error.message\n        },\n        userPermissions: currentOrganizationPermissions,\n        currentOrganization,\n        userId,\n        currentLicense,\n        locale,\n        onCaptureException: eventId => dispatch(setSentryEventId({ eventId }))\n      })\n    );\n  };\n\n  return (\n    <ErrorBoundary\n      onError={handleComponentErrors}\n      fallbackRender={({ error, resetErrorBoundary }) =>\n        error && <ErrorAlert errorBoundary={error} onClosed={resetErrorBoundary} isOpen sentryEventId={sentryEventId} />\n      }>\n      {children}\n    </ErrorBoundary>\n  );\n};\n\nexport default ErrorBoundaryWrapper;\n","import { useLocation } from 'react-router';\n\nexport const useIsSearchPage = (): boolean => {\n  const location = useLocation();\n  return location.pathname.split('/').filter(Boolean).includes('search');\n};\n","import { groupBy } from \"lodash\";\nimport { DashboardType, DashboardTypeWithChildren } from \"../types/dashboard/DashboardTypes\";\n\nexport const groupDashboardsByType = (\n  dashboards: DashboardType[],\n  groupingTypes: string[]\n): DashboardTypeWithChildren[] => {\n  const filtered = dashboards.filter(d => groupingTypes.includes(d.type));\n\n  const grouped: Record<string, DashboardType[]> = groupBy(filtered, 'type');\n\n  const result: DashboardTypeWithChildren[] = [];\n  for (const type of groupingTypes) {\n    const group = grouped[type];\n    if (!group) {\n      continue;\n    }\n    const system = group.find(d => d.isSystemDashboard);\n    if (system) {\n      const nonSystems = group.filter(d => !d.isSystemDashboard);\n      if (nonSystems.length) {\n        result.push({ ...system, children: nonSystems });\n      } else {\n        result.push({ ...system });\n      }\n    }\n  }\n\n  return result;\n};\n",".navBarAccordionItem {\n  margin-bottom: 32px;\n  width: 100%;\n  position: relative;\n  min-height: 36px;\n\n  &::part(heading) {\n    gap: 0;\n    margin: 0;\n    border: 0;\n    padding: 6px 8px 6px 2px;\n    height: 24px;\n    display: flex;\n    flex-direction: row-reverse;\n    place-content: center flex-start;\n    align-items: center;\n  }\n\n  // Chevron icon\n  &::part(icon) {\n    padding-inline-end: 0;\n\n    --goto-icon-color-default: var(--goto-neutral-400);\n  }\n\n  // Chevron icon expanded\n  &::part(expanded-icon) {\n    --goto-icon-size: 16px;\n  }\n\n  // Chevron icon collapsed\n  &::part(collapsed-icon) {\n    --goto-icon-size: 16px;\n  }\n\n  // Accordion icon\n  &::part(start) {\n    display: flex;\n\n    --goto-icon-color: var(--goto-blue-400);\n    --goto-icon-size: 16px;\n\n    padding: 0;\n    margin: 0 8px 0 2px;\n  }\n\n  > svg {\n    color: var(--goto-blue-400);\n  }\n\n  &::part(button) {\n    flex-basis: 100%;\n    color: var(--goto-neutral-400);\n    font: var(--goto-body-small-strong);\n    padding: 0;\n  }\n\n  // Children region\n  &::part(region) {\n    padding: 0 var(--goto-spacing-02);\n  }\n}\n","import { AccordionItem } from '@getgo/chameleon-web-react-wrapper';\nimport clsx from 'clsx';\nimport React from 'react';\nimport styles from './NavBarAccordionItem.module.scss';\n\nconst NavBarAccordionItem: React.FC<React.ComponentProps<typeof AccordionItem>> = ({\n  leadingIcon,\n  heading,\n  expanded = true,\n  children,\n  className,\n  onChange\n}) => {\n  return (\n    <AccordionItem\n      className={clsx(styles.navBarAccordionItem, className)}\n      leadingIcon={leadingIcon}\n      heading={heading}\n      expanded={expanded}\n      onChange={onChange}>\n      {children}\n    </AccordionItem>\n  );\n};\n\nexport default NavBarAccordionItem;\n","import { get as _get } from 'lodash';\nimport { useEffect } from 'react';\nimport { useParams } from 'react-router';\n\nexport const WINDOW_EVENT_DELETE_KEY = 'ANALYTICS:DASHBOARDS_DELETE';\nexport const EVENT_TYPE = {\n  DELETE: 'DELETE',\n  UNSHARE: 'UNSHARE',\n  RENAME: 'RENAME',\n  SAVE_AS: 'SAVE_AS',\n  SHARE: 'SHARE'\n} as const;\n\ntype EventTypeValue = (typeof EVENT_TYPE)[keyof typeof EVENT_TYPE];\n\ntype DashboardWindowEventDetail = {\n  id?: string;\n  type?: EventTypeValue | string;\n};\n\ntype UseDashboardWindowEventParams = {\n  key: string;\n  onEvent: (detail: DashboardWindowEventDetail) => void;\n  deps?: unknown[];\n};\n\nconst allowedTypes: string[] = Object.values(EVENT_TYPE);\n\nexport const useDashboardWindowEvent = ({ key, onEvent, deps }: UseDashboardWindowEventParams): void => {\n  const params = useParams();\n\n  const validateEvent = (args: CustomEvent<DashboardWindowEventDetail>) => {\n    const dashboardId = _get(params, ['dashboardId'], null);\n    if ((dashboardId && args?.detail?.id === dashboardId) || allowedTypes.includes(args.detail?.type ?? '')) {\n      onEvent({ id: args?.detail?.id, type: args.detail?.type });\n    }\n  };\n\n  useEffect(() => {\n    window.addEventListener(key, validateEvent as EventListener);\n    return () => {\n      window.removeEventListener(key, validateEvent as EventListener);\n    };\n    // TODO: handle eslint errors properly\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [params, deps]);\n};\n","// TODO merge both of them when reporting events are removed\n\n// TODO Temporary until we remove event mecanism\nexport const EVENT_TYPE = {\n  SAVE_AS: 'SAVE_AS',\n  SAVE: 'SAVE',\n  SHARE: 'SHARE',\n  SCHEDULE: 'SCHEDULE'\n};\n\n/**\n *  Send a window custom event\n *\n * @param {(string)} name The name of he event\n * @param {object} detail The event object\n * @returns {boolean} `true` if the event was sent successfully\n */\nexport const sendCustomEvent = (name: string | null | undefined, detail?: Record<string, unknown>): boolean => {\n  if (!name || !detail) {\n    return false;\n  }\n\n  // TODO Change the reporting name when reporting events removed\n  return window.dispatchEvent(\n    new CustomEvent(`REPORTING:${name}`, {\n      detail\n    })\n  );\n};\n\n/**\n *  Send an analytics window custom event\n *\n * @param {(string)} name The name of he event\n * @param {object} detail The event object\n * @returns {boolean} `true` if the event was sent successfully\n */\nexport const sendAnalyticsCustomEvent = (name: string | null | undefined, detail?: Record<string, unknown>): boolean => {\n  if (!name || !detail) {\n    return false;\n  }\n\n  return window.dispatchEvent(\n    new CustomEvent(`ANALYTICS:${name}`, {\n      detail\n    })\n  );\n};\n",".navBarDrawerItem__itemLabel {\n  color: var(--goto-interactive-color-persistent-active);\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n.navBarDrawerItem {\n  position: relative;\n  gap: 0;\n  margin: 0;\n  border: 0;\n  border-radius: var(--goto-radius-medium);\n  padding: 6px 8px 6px 20px;\n  height: 36px;\n  width: 100%;\n  display: inline-flex;\n  justify-content: flex-start;\n  align-items: center;\n  color: var(--goto-type-color-inverted);\n\n  &::part(start) {\n    --goto-icon-size: 16px;\n\n    width: 16px;\n    height: 16px;\n  }\n\n  > chameleon-svg {\n    --goto-icon-color: var(--goto-icon-color-persistent);\n\n    margin: 0;\n  }\n\n  > svg {\n    height: 16px;\n    width: 16px;\n    margin: 0;\n  }\n\n  &::part(content) {\n    color: var(--goto-type-color-inverted);\n    font: var(--goto-body-medium-strong);\n    margin-left: 8px;\n    display: inline-flex;\n  }\n\n  &[selected] {\n    background-color: transparent;\n    color: var(--goto-green-300);\n\n    &::part(content) {\n      color: var(--goto-green-300);\n    }\n\n    > chameleon-svg {\n      --goto-icon-color: var(--goto-green-300);\n    }\n\n    .navBarDrawerItem__itemLabel {\n      color: var(--goto-green-300);\n    }\n  }\n\n  &:hover {\n    background-color: var(--goto-neutral-800);\n  }\n}\n\n.navBarDrawerItem__tooltip {\n  width: 100%;\n}\n","import { TooltipWrapper } from '@analytics-common-ui/layout';\nimport { NavigationDrawerLinkComponent } from '@getgo/chameleon-web';\nimport { NavigationDrawerLink } from '@getgo/chameleon-web-react-wrapper';\nimport clsx from 'clsx';\nimport React, { PropsWithChildren, ReactNode, useRef, MouseEventHandler } from 'react';\nimport styles from './NavBarDrawerItem.module.scss';\ninterface NavBarDrawerItemProps extends PropsWithChildren {\n  leadingIcon?: ReactNode;\n  selected?: boolean;\n  role?: React.AriaRole;\n  title: string;\n  onClick: MouseEventHandler<NavigationDrawerLinkComponent>;\n  className?: string;\n}\n\nconst NavBarDrawerItem: React.FC<NavBarDrawerItemProps> = ({\n  leadingIcon,\n  title,\n  children,\n  role = 'button',\n  selected,\n  onClick,\n  className\n}) => {\n  const ref = useRef<HTMLDivElement>(null);\n\n  const drawerItem = (\n    <NavigationDrawerLink\n      role={role}\n      className={clsx(styles.navBarDrawerItem, className)}\n      selected={selected}\n      start={leadingIcon}\n      onClick={onClick}>\n      <div className={styles.navBarDrawerItem__itemLabel} data-testid=\"NavBarDrawerItem_label\" ref={ref}>\n        {title}\n      </div>\n      {children}\n    </NavigationDrawerLink>\n  );\n\n  if (title.length > 15) {\n    return (\n      <TooltipWrapper className={styles.navBarDrawerItem__tooltip} title={title} position=\"top-center\" max-width={200}>\n        {drawerItem}\n      </TooltipWrapper>\n    );\n  }\n\n  return drawerItem;\n};\n\nexport default NavBarDrawerItem;\n",".navBarItemMenu {\n  position: relative;\n  height: 24px;\n  width: 24px;\n  display: flex;\n  border-radius: var(--goto-radius-small);\n\n  &_hidden {\n    pointer-events: none;\n    display: none;\n  }\n\n  &:hover {\n    background-color: var(--goto-neutral-400);\n  }\n}\n\n.navBarItemMenu__popover {\n  color: var(--goto-type-color-inverted);\n\n  --z-index: var(--goto-z-index-dropdown);\n  --content-width: 150px;\n\n  &::part(popover) {\n    background-color: var(--goto-neutral-800);\n    border-color: var(--goto-neutral-500);\n    color: var(--goto-type-color-inverted);\n    box-shadow: var(--goto-elevation-large);\n    font-size: 1rem;\n    padding: 0;\n  }\n}\n\n.navBarItemMenu__button {\n  display: flex;\n\n  &::part(control) {\n    width: 24px;\n    height: 24px;\n    border: 0;\n  }\n\n  > chameleon-svg {\n    --goto-icon-size: 16px;\n    --goto-icon-color: var(--goto-interactive-color-persistent-active);\n  }\n\n  > svg {\n    color: var(--goto-type-color-inverted);\n  }\n\n  &_hidden {\n    display: none;\n  }\n\n  &_open {\n    > chameleon-svg {\n      --goto-icon-color: var(--goto-green-300);\n    }\n  }\n}\n\n.navBarItemMenu__menu {\n  background-color: var(--goto-neutral-800);\n  padding: 8px 0;\n  border: 1px solid var(--goto-neutral-600);\n  border-radius: var(--goto-radius-medium);\n}\n\n.navBarItemMenu__section {\n  display: inline-flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: 0 12px;\n  color: var(--goto-neutral-400);\n  font: var(--goto-caption-medium-strong);\n  font-size: 0.625rem;\n  line-height: 1rem;\n}\n\n.navBarItemMenu__item {\n  --goto-icon-color: var(--goto-focus-color-highlight-persistent);\n\n  color: var(--goto-focus-color-highlight-persistent);\n  font-size: 0.875rem;\n  margin: 0;\n  border: 0;\n  padding: 6px 16px 6px 12px;\n  height: 36px;\n  gap: 0;\n\n  chameleon-svg {\n    --goto-icon-size: 16px;\n  }\n\n  &::part(start) {\n    margin: 0;\n  }\n\n  &::part(content) {\n    width: 100%;\n    position: relative;\n    margin-left: 8px;\n  }\n\n  &::part(end) {\n    margin: 0;\n  }\n\n  > svg {\n    color: var(--goto-type-color-inverted);\n    padding: 1px;\n  }\n\n  &:hover {\n    background: var(--goto-surface-color-tertiary);\n  }\n}\n\n.navBarItemMenu__separator {\n  height: 1px;\n  border: 0;\n  padding: 0;\n  margin: var(--goto-spacing-01) var(--goto-spacing-03);\n  background-color: var(--goto-border-color-default);\n}\n","import { MoreMenuVerticalOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { IconButton, Popover, MenuItem, Menu } from '@getgo/chameleon-web-react-wrapper';\nimport PropTypes from 'prop-types';\nimport { isEmpty as _isEmpty, uniqueId } from 'lodash';\nimport clsx from 'clsx';\nimport { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport styles from './NavBarItemMenu.module.scss';\nimport { navBarItemMenuOptionsPropType } from '../../../utils/prop-types.util';\nimport { TooltipWrapper } from '@analytics-common-ui/layout';\nimport { MIXPANEL_EVENT_NAME } from '../../../constants/mixpanel.ts';\nimport useMixpanel from '../../../hooks/useMixpanel.ts';\n\nexport const NAVBARITEMMENU_OPTION_TYPE = {\n  SECTION: 'SECTION',\n  SORTING_SECTION: 'SORTING_SECTION',\n  ITEM: 'ITEM',\n  SEPARATOR: 'SEPARATOR'\n};\n\nconst NavBarItemMenu = ({ hidden = false, onChange, options = [], className, subLabel }) => {\n  const { t } = useTranslation();\n  const mixpanelTrack = useMixpanel();\n  const [isOpen, setMenuOpen] = useState(false);\n  const menuOptions = options.filter(el => !el.isHidden);\n  const hasItemOptions = !_isEmpty(menuOptions.filter(el => el.type === NAVBARITEMMENU_OPTION_TYPE.ITEM));\n\n  useEffect(() => {\n    onChange(isOpen);\n  }, [isOpen, onChange]);\n\n  const getMenuItem = ({\n    type,\n    id,\n    label,\n    leadingIcon,\n    trailingIcon,\n    tooltipTitle,\n    action,\n    mixpanelItemAction,\n    preventDefault\n  }) => {\n    const handleOnClick = e => {\n      if (preventDefault) {\n        e.preventDefault();\n        e.stopPropagation();\n        setMenuOpen(true);\n      }\n      const eventData = {\n        Action: `Board action clicked`,\n        Component: 'NavBarItemMenu',\n        ItemAction: mixpanelItemAction\n      };\n      mixpanelTrack(MIXPANEL_EVENT_NAME.DASHBOARD, eventData);\n      action();\n    };\n    switch (type) {\n      case NAVBARITEMMENU_OPTION_TYPE.SECTION:\n        return (\n          <div className={styles.navBarItemMenu__section} key={id}>\n            {leadingIcon}\n            {label}\n            {trailingIcon}\n          </div>\n        );\n\n      case NAVBARITEMMENU_OPTION_TYPE.SORTING_SECTION:\n        return (\n          <div className={styles.navBarItemMenu__section} key={id}>\n            {leadingIcon}\n            {label}\n            <TooltipWrapper position=\"right-center\" title={tooltipTitle}>\n              <IconButton label={tooltipTitle} className={styles.navBarItemMenu__button} onClick={handleOnClick}>\n                {trailingIcon}\n              </IconButton>\n            </TooltipWrapper>\n          </div>\n        );\n\n      case NAVBARITEMMENU_OPTION_TYPE.ITEM:\n        return (\n          <MenuItem\n            key={id}\n            size=\"small\"\n            leadingIcon={leadingIcon}\n            trailingIcon={trailingIcon}\n            onClick={handleOnClick}\n            className={styles.navBarItemMenu__item}>\n            {label}\n          </MenuItem>\n        );\n\n      case NAVBARITEMMENU_OPTION_TYPE.SEPARATOR:\n        return <hr key={id} className={styles.navBarItemMenu__separator} />;\n\n      default:\n        return null;\n    }\n  };\n\n  const menuId = `navbar-menu-${uniqueId()}`;\n\n  const label = subLabel\n    ? t('Open {{dashboard}} board menu options', { dashboard: subLabel })\n    : t('Open boards menu options');\n\n  return (\n    <div className={clsx(styles.navBarItemMenu, className, { [styles.navBarItemMenu_hidden]: !hasItemOptions })}>\n      {hasItemOptions && (\n        <>\n          <IconButton\n            id={menuId}\n            label={label}\n            size=\"small\"\n            data-testid={hidden ? 'popover-trigger-hidden' : 'popover-trigger'}\n            className={clsx(styles.navBarItemMenu__button, {\n              [styles.navBarItemMenu__button_hidden]: hidden,\n              [styles.navBarItemMenu__button_open]: isOpen\n            })}>\n            <MoreMenuVerticalOutlinedIcon />\n          </IconButton>\n          <Popover\n            data-testid=\"navbar-menu-popover\"\n            triggerId={menuId}\n            className={styles.navBarItemMenu__popover}\n            position=\"bottom-start\"\n            inverted\n            menu\n            isOpen={!hidden && isOpen}\n            hidden={hidden}\n            onChange={state => setMenuOpen(state?.detail?.isOpen)}\n            width={200}>\n            <Menu aria-label={label} className={styles.navBarItemMenu__menu}>\n              {menuOptions.map(el => getMenuItem(el))}\n            </Menu>\n          </Popover>\n        </>\n      )}\n    </div>\n  );\n};\n\nNavBarItemMenu.propTypes = {\n  /** If the menu is visible */\n  hidden: PropTypes.bool,\n\n  /**\n   * Handler when the popover change\n   *\n   * Expected format: `(evt: MouseEvent) => void`\n   */\n  onChange: PropTypes.func,\n\n  /** The menu options */\n  options: navBarItemMenuOptionsPropType,\n  /** The icon button sub label */\n  subLabel: PropTypes.string\n};\n\nexport default NavBarItemMenu;\n",".navBarItemMenuOverlay {\n  position: relative;\n  width: 100%;\n}\n\n.navBarItemMenuOverlay__menu {\n  position: absolute;\n  top: 6px;\n  right: 8px;\n  z-index: var(--goto-z-index-default);\n}\n","import { useEffect, useState } from 'react';\nimport { isEmpty as _isEmpty } from 'lodash';\nimport PropTypes from 'prop-types';\nimport NavBarItemMenu from '../NavBarItemMenu/NavBarItemMenu';\nimport { navBarItemMenuOptionsPropType } from '../../../utils/prop-types.util';\nimport styles from './NavBarItemMenuOverlay.module.scss';\nimport clsx from 'clsx';\n\nconst NavBarItemMenuOverlay = ({ children, menuOptions, subLabel, className, ...rest }) => {\n  const [isMenuVisible, setIsMenuVisible] = useState(false);\n  const [shouldMenuBeVisible, setShouldMenuBeVisible] = useState(false);\n  const [isMenuOpen, setIsMenuOpen] = useState(false);\n\n  useEffect(() => {\n    if (!_isEmpty(menuOptions)) {\n      if (!isMenuOpen && isMenuVisible !== shouldMenuBeVisible) {\n        setIsMenuVisible(shouldMenuBeVisible);\n      }\n    }\n  }, [isMenuOpen, shouldMenuBeVisible, isMenuVisible, menuOptions]);\n\n  return (\n    <div\n      {...rest}\n      className={styles.navBarItemMenuOverlay}\n      onMouseEnter={() => setShouldMenuBeVisible(true)}\n      onMouseLeave={() => setShouldMenuBeVisible(false)}>\n      {children}\n      <NavBarItemMenu\n        className={clsx(styles.navBarItemMenuOverlay__menu, className)}\n        hidden={!isMenuVisible}\n        onChange={state => setIsMenuOpen(state)}\n        options={menuOptions}\n        subLabel={subLabel}\n      />\n    </div>\n  );\n};\n\nNavBarItemMenuOverlay.propTypes = {\n  /** Children to render */\n  children: PropTypes.node.isRequired,\n  /** The menu options */\n  menuOptions: navBarItemMenuOptionsPropType,\n  /** The icon button sub label */\n  subLabel: PropTypes.string\n};\nexport default NavBarItemMenuOverlay;\n",".navBarDashbordDrawerItem {\n  padding: 6px 40px 6px 12px;\n\n  &:hover {\n    background-color: var(--goto-neutral-800);\n    border-radius: var(--goto-radius-medium);\n  }\n}\n","import { Card } from '@analytics-common-ui/layout';\nimport {\n  CopyOutlinedIcon,\n  EditOutlinedIcon,\n  HistoryOutlinedIcon,\n  ShareArrowOutlinedIcon,\n  SpacesFilledIcon,\n  SpacesOutlinedIcon,\n  TrashOutlinedIcon,\n  SharedBoardFilledIcon\n} from '@getgo/chameleon-icons/react';\nimport { isEmpty as _isEmpty } from 'lodash';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useLocation, useNavigate, useParams } from 'react-router';\nimport configs from '../../../configs';\nimport { MODALS } from '../../../constants/modals';\nimport { EVENT_TYPE } from '../../../hooks/dashboards/useDashboardWindowEvent';\nimport { useDashboardSchedulerPermission } from '../../../hooks/permissions/useDashboardSchedulerPermission';\nimport { useDashboardTypePermission } from '../../../hooks/permissions/useDashboardTypePermission';\nimport { useIsSearchPage } from '../../../hooks/useIsSearchPage';\nimport { getBoardName } from '../../../services/common/dashboards.service';\nimport { sendAnalyticsCustomEvent } from '../../../services/common/events.service';\nimport { getOrganizationPath } from '../../../services/common/organization.service';\nimport { setModalOpen } from '../../../store/Analytics/analytics.slice';\nimport { selectUserKey } from '../../../store/selectors/analytics';\nimport { DashboardPageConfigType, DashboardType } from '../../../types/dashboard/DashboardTypes';\nimport { StateType } from '../../../types/store/StateTypes';\nimport { getPageIdFromDashboardType } from '../../../utils/page.util';\nimport NavBarDrawerItem from '../NavBarDrawerItem/NavBarDrawerItem';\n\nimport { NAVBARITEMMENU_OPTION_TYPE } from '../NavBarItemMenu/NavBarItemMenu';\nimport NavBarItemMenuOverlay from '../NavBarItemMenuOverlay/NavBarItemMenuOverlay';\nimport styles from './NavBarDashboardDrawerItem.module.scss';\n\nexport interface NavBarDashboardDrawerItemProps {\n  dashboard: DashboardType;\n  templateId?: string;\n}\n\nconst NavBarDashboardDrawerItem: React.FC<NavBarDashboardDrawerItemProps> = ({ dashboard, templateId }) => {\n  const { t } = useTranslation();\n  const { currentOrganization } = useSelector((state: StateType) => state.analytics);\n  const userKey: string = useSelector(selectUserKey) as string;\n  const location = useLocation();\n  const navigate = useNavigate();\n  const { dashboardId: currentDashboardId } = useParams();\n  const dispatch = useDispatch();\n  const { id, ownerUserKey, isSystemDashboard, isSharedDashboard, type } = dashboard;\n  const { savingPermission, editingPermission, sharingPermission, unsharingPermission } = useDashboardTypePermission();\n  const dashboardConfig: DashboardPageConfigType = configs[getPageIdFromDashboardType(type)];\n  const { getSchedulerPermissionByType } = useDashboardSchedulerPermission();\n  const isSearchPage = useIsSearchPage();\n\n  const urlTemplateId = new URLSearchParams(location.search).get('templateId');\n\n  const handleDashboardLinkClick = (e: React.MouseEvent) => {\n    const element = e.target as HTMLElement;\n\n    // Prevent three dots menu click to continue\n    // TODO I am sorry, handle with chameleon or change the method\n    if (\n      element?.tagName !== 'CHAMELEON-NAVIGATION-DRAWER-LINK' &&\n      element?.parentElement?.tagName !== 'CHAMELEON-NAVIGATION-DRAWER' &&\n      element?.parentElement?.tagName !== 'CHAMELEON-NAVIGATION-DRAWER-LINK'\n    ) {\n      return;\n    }\n\n    if (\n      location.pathname !== `/${getOrganizationPath(currentOrganization)}/dashboard/${dashboard.id}` ||\n      urlTemplateId != templateId\n    ) {\n      void navigate(\n        `${getOrganizationPath(currentOrganization)}/dashboard/${dashboard.id}${templateId ? `?templateId=${templateId}` : ''}`\n      );\n    }\n  };\n\n  const getBoardIcon = () => {\n    if (isSharedDashboard) {\n      return <SharedBoardFilledIcon />;\n    }\n    if (isSystemDashboard) {\n      return <SpacesFilledIcon />;\n    }\n    return <SpacesOutlinedIcon />;\n  };\n\n  const getBoardMenuOptions = () => {\n    const isDashboardOwner = !isSystemDashboard && ownerUserKey === userKey;\n    const isShared = !isSystemDashboard && ownerUserKey !== userKey && isSharedDashboard;\n\n    const canSave: boolean = savingPermission(type);\n    const canModify: boolean = isDashboardOwner && editingPermission(type);\n    const canShare: boolean = isDashboardOwner && sharingPermission(type);\n    const canUnShare: boolean = isDashboardOwner && isShared && unsharingPermission(type);\n    const canSchedule: boolean =\n      getSchedulerPermissionByType(type) && isDashboardOwner && dashboardConfig.scheduleEnabled;\n\n    return [\n      {\n        type: NAVBARITEMMENU_OPTION_TYPE.SECTION,\n        id: 1,\n        label: t('Board actions'),\n        tata: <Card title={undefined}>toto</Card>\n      },\n      {\n        type: NAVBARITEMMENU_OPTION_TYPE.ITEM,\n        id: 2,\n        leadingIcon: <CopyOutlinedIcon />,\n        label: t('Save as...'),\n        mixpanelItemAction: 'Save',\n        isHidden: !canSave,\n        action: () =>\n          dispatch(\n            setModalOpen({\n              modal: MODALS.SAVE_DASHBOARD,\n              dashboardId: id,\n              templateId: templateId\n            })\n          )\n      },\n      {\n        type: NAVBARITEMMENU_OPTION_TYPE.ITEM,\n        id: 3,\n        leadingIcon: <EditOutlinedIcon />,\n        label: t('Rename'),\n        mixpanelItemAction: 'Rename',\n        isHidden: !canModify,\n        action: () =>\n          dispatch(\n            setModalOpen({\n              modal: MODALS.RENAME_DASHBOARD,\n              dashboardId: id\n            })\n          )\n      },\n      {\n        type: NAVBARITEMMENU_OPTION_TYPE.ITEM,\n        id: 4,\n        leadingIcon: <ShareArrowOutlinedIcon />,\n        label: t('Share'),\n        mixpanelItemAction: 'Share',\n        isHidden: !canShare,\n        action: () =>\n          dispatch(\n            setModalOpen({\n              modal: MODALS.SHARE_DASHBOARD,\n              dashboardId: id\n            })\n          )\n      },\n      {\n        type: NAVBARITEMMENU_OPTION_TYPE.ITEM,\n        id: 5,\n        leadingIcon: <HistoryOutlinedIcon />,\n        label: t('Schedule'),\n        mixpanelItemAction: 'Schedule',\n        isHidden: !canSchedule,\n        action: () =>\n          dispatch(\n            setModalOpen({\n              modal: MODALS.ADD_SCHEDULED_DASHBOARD,\n              dashboardId: id\n            })\n          )\n      },\n      {\n        type: NAVBARITEMMENU_OPTION_TYPE.SEPARATOR,\n        id: 6,\n        isHidden: !canModify && !canUnShare\n      },\n      {\n        type: NAVBARITEMMENU_OPTION_TYPE.ITEM,\n        id: 7,\n        leadingIcon: <TrashOutlinedIcon />,\n        label: t('Delete'),\n        mixpanelItemAction: 'Delete',\n        isHidden: !canModify,\n        action: () => sendAnalyticsCustomEvent('DASHBOARDS_DELETE', { id, type: EVENT_TYPE.DELETE })\n      },\n      {\n        type: NAVBARITEMMENU_OPTION_TYPE.ITEM,\n        id: 8,\n        leadingIcon: <TrashOutlinedIcon />,\n        label: t('Delete'),\n        mixpanelItemAction: 'Unshare',\n        isHidden: !canUnShare,\n        action: () => sendAnalyticsCustomEvent('DASHBOARDS_DELETE', { id, type: EVENT_TYPE.UNSHARE })\n      }\n    ];\n  };\n\n  return (\n    <NavBarItemMenuOverlay\n      data-testid={!isSystemDashboard ? `menu-custom-board-${id}` : undefined}\n      menuOptions={getBoardMenuOptions()}\n      subLabel={getBoardName(dashboard, t, !_isEmpty(templateId)) as string}\n      className={null}>\n      <NavBarDrawerItem\n        className={styles.navBarDashbordDrawerItem}\n        leadingIcon={getBoardIcon()}\n        title={getBoardName(dashboard, t, !_isEmpty(templateId)) as string}\n        selected={!isSearchPage && id === currentDashboardId && urlTemplateId == templateId}\n        onClick={handleDashboardLinkClick}\n      />\n    </NavBarItemMenuOverlay>\n  );\n};\n\nexport default NavBarDashboardDrawerItem;\n","import { isNaN as _isNaN } from 'lodash';\n\nexport const SORTING_TYPE = {\n  ALPHABETICAL: 'ALPHABETICAL',\n  DATE_CREATED: 'DATE_CREATED',\n  RECENTLY_UPDATED: 'RECENTLY_UPDATED'\n};\n\nexport const SORTING_ORDER = {\n  ASCENDING: 'ASCENDING',\n  DESCENDING: 'DESCENDING'\n};\n\nconst sortBoards = (a, b, type) => {\n  switch (type) {\n    case SORTING_TYPE.ALPHABETICAL:\n      return a.name.localeCompare(b.name);\n    case SORTING_TYPE.DATE_CREATED:\n      return b.createdTime - a.createdTime;\n    case SORTING_TYPE.RECENTLY_UPDATED:\n      if (_isNaN(b.lastUpdatedTime)) {\n        return -1;\n      }\n      if (_isNaN(a.lastUpdatedTime)) {\n        return 1;\n      }\n      return b.lastUpdatedTime - a.lastUpdatedTime;\n\n    default:\n      return 0;\n  }\n};\n\nexport const getSortedBoards = (dashboards, sortingType, sortingOrder) => {\n  const systemBoards = dashboards\n    .filter(({ isSystemDashboard }) => isSystemDashboard)\n    .sort((a, b) => sortBoards(a, b, SORTING_TYPE.ALPHABETICAL));\n\n  const normalBoards = dashboards\n    .filter(({ isSystemDashboard }) => !isSystemDashboard)\n    .sort((a, b) => sortBoards(a, b, sortingType));\n\n  if (sortingOrder === SORTING_ORDER.DESCENDING) {\n    normalBoards.reverse();\n  }\n\n  return [...systemBoards, ...normalBoards];\n};\n",".navBarDashboardDrawerAccordionItem__Section__Header__Button {\n  border-radius: var(--goto-radius-medium);\n\n  &::part(control) {\n    justify-content: flex-start;\n    gap: 0;\n    padding-left: 5px;\n  }\n\n  &::part(content) {\n    max-width: calc(100% - 85px);\n  }\n\n  &:hover {\n    background-color: var(--goto-neutral-800);\n    border-radius: var(--goto-radius-medium);\n  }\n}\n\n.navBarDashboardDrawerAccordionItem__Section__Header__Button__Label {\n  &::part(text) {\n    color: var(--goto-interactive-color-persistent-active);\n    font: var(--goto-body-medium-strong);\n    max-width: 100%;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    text-align: left;\n  }\n}\n\n.navBarDashboardDrawerAccordionItem__Section__Header__Button__Icon {\n  chameleon-svg {\n    --goto-icon-color: var(--goto-interactive-color-persistent-active);\n  }\n\n  &::part(control):hover {\n    background-color: transparent;\n  }\n}\n\n.navBarDashboardDrawerAccordionItem__Section__Header__Button__TextBadge {\n  background-color: var(--goto-surface-color-tertiary);\n  color: var(--goto-interactive-color-persistent-active);\n  margin-left: var(--goto-spacing-02);\n}\n\n.navBarDashboardDrawerAccordionItem__Section__Content_Expanded {\n  display: block;\n  opacity: 1;\n  max-height: none;\n}\n\n.navBarDashboardDrawerAccordionItem__Section__Content_Collapsed {\n  display: none;\n  opacity: 0;\n  max-height: 0;\n  overflow: hidden;\n}\n\n.navBarDashboardDrawerAccordionItem__Section__Content {\n  transition: opacity 0.2s ease-in-out;\n}\n\n.navBarDashboardDrawerAccordionItem__Section__Header__Button__Selected {\n  .navBarDashboardDrawerAccordionItem__Section__Header__Button__Label {\n    &::part(text) {\n      color: var(--goto-green-300);\n    }\n  }\n\n  .navBarDashboardDrawerAccordionItem__Section__Header__Button__Icon {\n    chameleon-svg {\n      --goto-icon-color: var(--goto-green-300);\n    }\n  }\n}\n\n.navBarDashboardDrawerAccordionItem__Section_Expanded {\n  background-color: var(--goto-neutral-700);\n  border-radius: var(--goto-radius-medium);\n\n  .navBarDashboardDrawerAccordionItem__Section__Header__Button {\n    &::part(control) {\n      padding-left: 3px;\n      background-color: var(--goto-neutral-700);\n\n      &:hover {\n        background-color: var(--goto-neutral-800);\n      }\n    }\n\n    &::part(content) {\n      max-width: calc(100% - 60px);\n    }\n\n    &:hover {\n      background-color: var(--goto-neutral-800);\n    }\n  }\n\n  .navBarDashboardDrawerAccordionItem__Section__Header__Button__TextBadge {\n    display: none;\n  }\n}\n\n.navBarDashboardDrawerAccordionItem__Section_Selected.navBarDashboardDrawerAccordionItem__Section_Expanded {\n  background-color: var(--goto-neutral-900);\n  border-radius: var(--goto-radius-medium);\n  border: 2px solid var(--goto-neutral-700);\n\n  .navBarDashboardDrawerAccordionItem__Section__Header__Button {\n    &::part(control) {\n      background-color: var(--goto-neutral-900);\n\n      &:hover {\n        background-color: var(--goto-neutral-800);\n      }\n    }\n  }\n}\n","import { Card } from '@analytics-common-ui/layout';\nimport { ChevronDownOutlinedIcon, ChevronRightOutlinedIcon, CopyOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { ButtonComponent } from '@getgo/chameleon-web';\nimport { Button, IconButton, TextBadge, Typography } from '@getgo/chameleon-web-react-wrapper';\nimport clsx from 'clsx';\nimport { FC, KeyboardEvent, MouseEvent, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useLocation, useNavigate } from 'react-router';\nimport { MODALS } from '../../../constants/modals';\nimport { useDashboardTypePermission } from '../../../hooks/permissions/useDashboardTypePermission';\nimport { useIsSearchPage } from '../../../hooks/useIsSearchPage';\nimport { getOrganizationPath } from '../../../services/common/organization.service';\nimport { setModalOpen } from '../../../store/Analytics/analytics.slice';\nimport { selectCurrentDashboard } from '../../../store/selectors/analytics';\nimport { DashboardType, DashboardTypeWithChildren } from '../../../types/dashboard/DashboardTypes';\nimport { Organizations, StateType } from '../../../types/store/StateTypes';\nimport NavBarDashboardDrawerItem from '../NavBarDashboardDrawerItem/NavBarDashboardDrawerItem';\nimport { NAVBARITEMMENU_OPTION_TYPE } from '../NavBarItemMenu/NavBarItemMenu';\nimport NavBarItemMenuOverlay from '../NavBarItemMenuOverlay/NavBarItemMenuOverlay';\nimport styles from './NavBarDashboardDrawerAccordionItem.module.scss';\n\nexport interface NavBarDashboardDrawerAccordionItemProps {\n  dashboard: DashboardTypeWithChildren;\n}\n\nconst NavBarDashboardDrawerAccordionItem: FC<NavBarDashboardDrawerAccordionItemProps> = ({ dashboard }) => {\n  const { t } = useTranslation();\n  const dispatch = useDispatch();\n  const currentDashboard: DashboardType = useSelector(selectCurrentDashboard) as DashboardType;\n  const location = useLocation();\n  const navigate = useNavigate();\n  const { savingPermission } = useDashboardTypePermission();\n  const { currentOrganization } = useSelector((state: StateType) => state.analytics);\n  const { id, children, type, route } = dashboard;\n  const childrenTotal = children?.length ?? 0;\n\n  // Generate unique IDs for accessibility\n  const contentId = `dashboard-content-${id}`;\n  const buttonId = `dashboard-button-${id}`;\n  const sectionId = `dashboard-section-${id}`;\n\n  const [isExpanded, setIsExpanded] = useState(false);\n  const isOnSearchPath = useIsSearchPage();\n  const isTopDashboardSelected = !isOnSearchPath && id === currentDashboard?.id;\n  const hasChildrenSelected = !isOnSearchPath && !!children?.some(child => child.id === currentDashboard?.id);\n  const isPanelDashboardSelected = isTopDashboardSelected || hasChildrenSelected;\n\n  useEffect(() => {\n    if (hasChildrenSelected) {\n      setIsExpanded(true);\n    } else if (!isPanelDashboardSelected) {\n      setIsExpanded(false);\n    }\n  }, [hasChildrenSelected, isPanelDashboardSelected]);\n\n  const getBoardName = (): string => route.label ?? '';\n\n  const routeToDashboard = (organization: Organizations, dashboardId: string) => {\n    if (location.pathname !== `/${getOrganizationPath(organization)}/dashboard/${dashboardId}`) {\n      void navigate(`${getOrganizationPath(organization)}/dashboard/${dashboard.id}`);\n    }\n  };\n\n  const handleButtonClick = (e: MouseEvent<ButtonComponent>) => {\n    const target = e.target as HTMLElement;\n    setIsExpanded(prevState => !prevState);\n    if (target?.tagName === 'CHAMELEON-TYPOGRAPHY') {\n      routeToDashboard(currentOrganization, dashboard.id);\n    }\n  };\n\n  const handleKeyDown = (e: KeyboardEvent<ButtonComponent>) => {\n    if (e.key === 'Enter' || e.key === ' ') {\n      e.preventDefault();\n      routeToDashboard(currentOrganization, dashboard.id);\n    }\n  };\n\n  const ChevronIcon = isExpanded ? <ChevronDownOutlinedIcon /> : <ChevronRightOutlinedIcon />;\n\n  const getBoardMenuOptions = () => {\n    const canSave: boolean = savingPermission(type);\n\n    return [\n      {\n        type: NAVBARITEMMENU_OPTION_TYPE.SECTION,\n        id: 1,\n        label: t('Board actions'),\n        tata: <Card title={undefined}>toto</Card>\n      },\n      {\n        type: NAVBARITEMMENU_OPTION_TYPE.ITEM,\n        id: 2,\n        leadingIcon: <CopyOutlinedIcon />,\n        label: t('Save as...'),\n        mixpanelItemAction: 'Save',\n        isHidden: !canSave,\n        action: () =>\n          dispatch(\n            setModalOpen({\n              modal: MODALS.SAVE_DASHBOARD,\n              dashboardId: id\n            })\n          )\n      }\n    ];\n  };\n\n  return (\n    <NavBarItemMenuOverlay\n      data-testid={`menu-custom-board-${id}`}\n      menuOptions={getBoardMenuOptions()}\n      subLabel={getBoardName()}\n      className={null}>\n      <section\n        className={clsx({\n          [styles.navBarDashboardDrawerAccordionItem__Section_Selected]: isPanelDashboardSelected,\n          [styles.navBarDashboardDrawerAccordionItem__Section_Expanded]: isExpanded\n        })}\n        data-testid={sectionId}>\n        <div>\n          <Button\n            role=\"button\"\n            id={buttonId}\n            data-testid={buttonId}\n            variant=\"tertiary\"\n            fullWidth\n            leadingIcon={\n              <IconButton\n                aria-hidden=\"true\"\n                tabIndex={-1}\n                className={styles.navBarDashboardDrawerAccordionItem__Section__Header__Button__Icon}>\n                {ChevronIcon}\n              </IconButton>\n            }\n            trailingIcon={\n              <TextBadge\n                aria-label={t('Saved dashboards', { count: childrenTotal })}\n                className={styles.navBarDashboardDrawerAccordionItem__Section__Header__Button__TextBadge}>\n                {childrenTotal}\n              </TextBadge>\n            }\n            aria-label={getBoardName()}\n            aria-expanded={isExpanded}\n            aria-controls={contentId}\n            onClick={handleButtonClick}\n            onKeyDown={handleKeyDown}\n            className={clsx(styles.navBarDashboardDrawerAccordionItem__Section__Header__Button, {\n              [styles.navBarDashboardDrawerAccordionItem__Section__Header__Button__Selected]: isTopDashboardSelected\n            })}>\n            <Typography className={styles.navBarDashboardDrawerAccordionItem__Section__Header__Button__Label}>\n              {getBoardName()}\n            </Typography>\n          </Button>\n        </div>\n        <div\n          role=\"region\"\n          aria-labelledby={buttonId}\n          id={contentId}\n          data-testid={contentId}\n          aria-hidden={!isExpanded}\n          className={clsx(\n            styles.navBarDashboardDrawerAccordionItem__Section__Content,\n            isExpanded\n              ? styles.navBarDashboardDrawerAccordionItem__Section__Content_Expanded\n              : styles.navBarDashboardDrawerAccordionItem__Section__Content_Collapsed\n          )}>\n          {children?.map(childDashboard => (\n            <NavBarDashboardDrawerItem key={childDashboard.id} dashboard={childDashboard} />\n          ))}\n        </div>\n      </section>\n    </NavBarItemMenuOverlay>\n  );\n};\n\nexport default NavBarDashboardDrawerAccordionItem;\n",".navBarDashboardsAccordionItem {\n  &::part(heading) {\n    padding: 6px 40px 6px 2px;\n  }\n}\n\n.navBarDashboardsAccordionItem__moreButton {\n  display: inline-flex;\n  justify-content: center;\n  align-items: center;\n  width: 100%;\n\n  &::part(control) {\n    width: 100%;\n    height: 36px;\n  }\n\n  > chameleon-svg {\n    --goto-icon-color: var(--goto-type-color-inverted);\n    --goto-icon-size: 24px;\n  }\n\n  &:hover {\n    background-color: var(--goto-surface-color-tertiary);\n  }\n}\n\n.navBarDashboardsAccordionItem_NavBarItemMenuOverlay {\n  right: var(--goto-spacing-04);\n}\n","import {\n  CalendarOutlinedIcon,\n  CheckmarkOutlinedIcon,\n  ChevronComboOutlinedIcon,\n  MoreMenuHorizontalOutlinedIcon,\n  SortingAscendingArrowFilledIcon,\n  SortingDescendingArrowFilledIcon,\n  SortingAzFilledIcon,\n  SortingZaFilledIcon\n} from '@getgo/chameleon-icons/react';\nimport { IconButton } from '@getgo/chameleon-web-react-wrapper';\nimport React, { ReactNode, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { MIXPANEL_EVENT_NAME } from '../../../constants/mixpanel';\nimport useMixpanel from '../../../hooks/useMixpanel';\nimport { retrieve, store } from '../../../services/common/local-storage.service';\nimport { DashboardTypeWithChildren } from '../../../types/dashboard/DashboardTypes';\nimport { getSortedBoards, SORTING_ORDER, SORTING_TYPE } from '../../../utils/dashboardSorting.util';\nimport NavBarAccordionItem from '../NavBarAccordionItem/NavBarAccordionItem';\nimport NavBarDashboardDrawerAccordionItem from '../NavBarDashboardDrawerAccordionItem/NavBarDashboardDrawerAccordionItem';\nimport NavBarDashboardDrawerItem from '../NavBarDashboardDrawerItem/NavBarDashboardDrawerItem';\nimport { NAVBARITEMMENU_OPTION_TYPE } from '../NavBarItemMenu/NavBarItemMenu';\nimport NavBarItemMenuOverlay from '../NavBarItemMenuOverlay/NavBarItemMenuOverlay';\nimport styles from './NavBarDashboardsAccordionItem.module.scss';\n\nexport interface NavBarDashboardsAccordionItemProps {\n  leadingIcon: ReactNode;\n  header: ReactNode;\n  dashboards: DashboardTypeWithChildren[];\n  isShared: boolean;\n}\n\nconst NavBarDashboardsAccordionItem: React.FC<NavBarDashboardsAccordionItemProps> = ({\n  leadingIcon,\n  header,\n  dashboards,\n  isShared\n}) => {\n  const { t } = useTranslation();\n  const mixpanelTrack = useMixpanel();\n  const [boardsLimit, setBoardsLimit] = useState<number>(Infinity);\n  const [sortingType, setSortingType] = useState<string>(SORTING_TYPE.ALPHABETICAL);\n  const [sortingOrder, setSortingOrder] = useState<string>(SORTING_ORDER.ASCENDING);\n  const [showMore, setShowMore] = useState<boolean>(false);\n\n  const keyPrefix = isShared && 'SHARED_';\n  const KEYS = {\n    BOARDS_LIMIT: `${keyPrefix}BOARDS_LIMIT`,\n    SORTING_TYPE: `${keyPrefix}SORTING_TYPE`,\n    SORTING_ORDER: `${keyPrefix}SORTING_ORDER`\n  };\n\n  const sortedBoards = getSortedBoards(dashboards, sortingType, sortingOrder);\n\n  useEffect(() => {\n    try {\n      setBoardsLimit(retrieve(KEYS.BOARDS_LIMIT, Infinity) as number);\n      setSortingType(retrieve(KEYS.SORTING_TYPE, SORTING_TYPE.ALPHABETICAL) as string);\n      setSortingOrder(retrieve(KEYS.SORTING_ORDER, SORTING_ORDER.ASCENDING) as string);\n    } catch (e) {\n      console.error(e);\n    }\n    setShowMore(false);\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  const handleSetBoardsLimit = async (limit: number) => {\n    const eventData = {\n      Action: `Update boards limit`,\n      PreviousBoardLimit: boardsLimit,\n      NewBoardLimit: limit,\n      IsSharedBoard: isShared\n    };\n    void mixpanelTrack(MIXPANEL_EVENT_NAME.NAVBAR_ACCORDION_ACTIONS, eventData);\n\n    try {\n      store(KEYS.BOARDS_LIMIT, limit);\n    } catch (e) {\n      console.error(e);\n    }\n\n    setBoardsLimit(limit);\n    setShowMore(false);\n  };\n\n  const handleMoreButton = () => {\n    const eventData = {\n      Action: `Temporary update boards limit to infinity`,\n      PreviousBoardLimit: boardsLimit,\n      NewBoardLimit: Infinity,\n      IsSharedBoard: isShared\n    };\n    void mixpanelTrack(MIXPANEL_EVENT_NAME.NAVBAR_ACCORDION_ACTIONS, eventData);\n\n    setBoardsLimit(Infinity);\n    setShowMore(true);\n  };\n\n  const handleSetSortingType = (type: string) => {\n    const eventData = {\n      Action: `Update boards sorting type`,\n      PreviousSortingType: sortingType,\n      NewSortingType: type,\n      IsSharedBoard: isShared\n    };\n    void mixpanelTrack(MIXPANEL_EVENT_NAME.NAVBAR_ACCORDION_ACTIONS, eventData);\n\n    try {\n      store(KEYS.SORTING_TYPE, type);\n    } catch (e) {\n      console.error(e);\n    }\n\n    setSortingType(type);\n    setShowMore(false);\n  };\n\n  const handleSetSortingOrder = (order: string) => {\n    const eventData = {\n      Action: `Update boards sorting order`,\n      PreviousSortingOrder: sortingOrder,\n      NewSortingOrder: order,\n      IsSharedBoard: isShared\n    };\n    void mixpanelTrack(MIXPANEL_EVENT_NAME.NAVBAR_ACCORDION_ACTIONS, eventData);\n\n    try {\n      store(KEYS.SORTING_ORDER, order);\n    } catch (e) {\n      console.error(e);\n    }\n\n    setSortingOrder(order);\n    setShowMore(false);\n  };\n\n  const handleOnChange = () => {\n    setShowMore(false);\n  };\n\n  const getAccordionMenuOptions = () => {\n    return [\n      {\n        type: NAVBARITEMMENU_OPTION_TYPE.SECTION,\n        id: 1,\n        label: t('Max boards per section'),\n        isHidden: false\n      },\n      {\n        type: NAVBARITEMMENU_OPTION_TYPE.ITEM,\n        id: 2,\n        label: t('10 boards'),\n        leadingIcon,\n        trailingIcon: boardsLimit === 10 && <CheckmarkOutlinedIcon />,\n        isHidden: false,\n        action: () => handleSetBoardsLimit(10),\n        preventDefault: true\n      },\n      {\n        type: NAVBARITEMMENU_OPTION_TYPE.ITEM,\n        id: 3,\n        label: t('25 boards'),\n        leadingIcon,\n        trailingIcon: boardsLimit === 25 && <CheckmarkOutlinedIcon />,\n        isHidden: false,\n        action: () => handleSetBoardsLimit(25),\n        preventDefault: true\n      },\n      {\n        type: NAVBARITEMMENU_OPTION_TYPE.ITEM,\n        id: 4,\n        label: t('Show all'),\n        leadingIcon,\n        trailingIcon: boardsLimit === Infinity && <CheckmarkOutlinedIcon />,\n        isHidden: false,\n        action: () => handleSetBoardsLimit(Infinity),\n        preventDefault: true\n      },\n      {\n        type: NAVBARITEMMENU_OPTION_TYPE.SORTING_SECTION,\n        id: 5,\n        label: t('Sort by'),\n        trailingIcon:\n          sortingOrder === SORTING_ORDER.ASCENDING ? (\n            <SortingAscendingArrowFilledIcon />\n          ) : (\n            <SortingDescendingArrowFilledIcon />\n          ),\n        tooltipTitle: sortingOrder === SORTING_ORDER.ASCENDING ? t('Ascending order') : t('Descending order'),\n        isHidden: false,\n        action: () =>\n          handleSetSortingOrder(\n            sortingOrder === SORTING_ORDER.ASCENDING ? SORTING_ORDER.DESCENDING : SORTING_ORDER.ASCENDING\n          ),\n        preventDefault: true\n      },\n      {\n        type: NAVBARITEMMENU_OPTION_TYPE.ITEM,\n        id: 6,\n        label: t('Alphabetical'),\n        leadingIcon: sortingOrder === SORTING_ORDER.ASCENDING ? <SortingAzFilledIcon /> : <SortingZaFilledIcon />,\n        trailingIcon: sortingType === SORTING_TYPE.ALPHABETICAL && <CheckmarkOutlinedIcon />,\n        isHidden: false,\n        action: () => handleSetSortingType(SORTING_TYPE.ALPHABETICAL),\n        preventDefault: true\n      },\n      {\n        type: NAVBARITEMMENU_OPTION_TYPE.ITEM,\n        id: 7,\n        label: t('Date created'),\n        leadingIcon: <CalendarOutlinedIcon />,\n        trailingIcon: sortingType === SORTING_TYPE.DATE_CREATED && <CheckmarkOutlinedIcon />,\n        isHidden: false,\n        action: () => handleSetSortingType(SORTING_TYPE.DATE_CREATED),\n        preventDefault: true\n      },\n      {\n        type: NAVBARITEMMENU_OPTION_TYPE.ITEM,\n        id: 8,\n        label: t('Recently updated'),\n        leadingIcon: <ChevronComboOutlinedIcon />,\n        trailingIcon: sortingType === SORTING_TYPE.RECENTLY_UPDATED && <CheckmarkOutlinedIcon />,\n        isHidden: false,\n        action: () => handleSetSortingType(SORTING_TYPE.RECENTLY_UPDATED),\n        preventDefault: true\n      }\n    ];\n  };\n\n  const getDrawerItem = (board: DashboardTypeWithChildren) => (\n    <NavBarDashboardDrawerItem key={board.id} dashboard={board} />\n  );\n\n  const getDrawerAccordionItem = (board: DashboardTypeWithChildren) => (\n    <NavBarDashboardDrawerAccordionItem key={board.id} dashboard={board} />\n  );\n\n  const getInnerDrawerItem = (board: DashboardTypeWithChildren) =>\n    board.children?.length ? getDrawerAccordionItem(board) : getDrawerItem(board);\n\n  const getShowMoreButton = () => {\n    if (!showMore) {\n      return (\n        <IconButton\n          label={t('Show more boards')}\n          className={styles.navBarDashboardsAccordionItem__moreButton}\n          onClick={handleMoreButton}>\n          <MoreMenuHorizontalOutlinedIcon />\n        </IconButton>\n      );\n    }\n    return sortedBoards.slice(boardsLimit).map(getDrawerItem);\n  };\n\n  return (\n    <NavBarItemMenuOverlay\n      menuOptions={getAccordionMenuOptions()}\n      subLabel={null}\n      className={styles.navBarDashboardsAccordionItem_NavBarItemMenuOverlay}>\n      <NavBarAccordionItem\n        className={styles.navBarDashboardsAccordionItem}\n        leadingIcon={leadingIcon}\n        heading={header}\n        onChange={handleOnChange}>\n        {sortedBoards.slice(0, boardsLimit).map(getInnerDrawerItem)}\n        {dashboards.length > boardsLimit && getShowMoreButton()}\n      </NavBarAccordionItem>\n    </NavBarItemMenuOverlay>\n  );\n};\n\nexport default NavBarDashboardsAccordionItem;\n",".navbar {\n  overflow-y: auto;\n\n  &_shared {\n    padding-top: var(--goto-spacing-06);\n  }\n}\n\n.navbar__drawer {\n  display: flex;\n  flex-direction: column;\n  background-color: var(--goto-interactive-color-persistent-default);\n  min-height: 100%;\n  padding: var(--goto-spacing-03) 0;\n  width: 250px;\n  font-size: 1rem;\n  position: relative;\n\n  &_readonly {\n    width: 10px;\n  }\n}\n\n.navbar__scrollbar {\n  width: 100%;\n  position: absolute;\n  inset: 8px 0 52px;\n  overflow: hidden auto;\n\n  &::-webkit-scrollbar {\n    width: 16px;\n  }\n\n  &::-webkit-scrollbar-thumb {\n    border: 4px solid transparent;\n    border-radius: 100px;\n    background-color: var(--goto-icon-color-secondary);\n    background-clip: content-box;\n\n    &:hover {\n      background-color: var(--goto-interactive-color-primary-hover);\n    }\n  }\n}\n\n.navbar__links {\n  position: absolute;\n  left: 0;\n  right: 0;\n  bottom: var(--goto-spacing-02);\n  height: 36px;\n  margin: 0 var(--goto-spacing-02);\n  display: inline-flex;\n  justify-content: space-evenly;\n  place-items: center center;\n\n  .navbar__links__item {\n    padding: var(--goto-spacing-01) var(--goto-spacing-02);\n    justify-content: center;\n\n    &::part(start) {\n      margin-right: var(--goto-spacing-01);\n    }\n\n    &::part(content) {\n      flex: initial;\n      margin-left: var(--goto-spacing-01);\n      line-height: 1rem;\n      text-align: center;\n    }\n  }\n\n  .navbar__links__separator {\n    height: 1rem;\n    width: 0;\n    border: 1px solid var(--goto-type-color-inverted);\n    margin: 0 var(--goto-spacing-02);\n  }\n}\n","import {\n  HistoryOutlinedIcon,\n  WrenchOutlinedIcon,\n  SharedBoardFilledIcon,\n  BoardsFilledIcon\n} from '@getgo/chameleon-icons/react';\nimport { Accordion, NavigationDrawer } from '@getgo/chameleon-web-react-wrapper';\nimport clsx from 'clsx';\nimport { isEmpty as _isEmpty } from 'lodash';\nimport { DateTime } from 'luxon';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector } from 'react-redux';\nimport { useNavigate, useLocation } from 'react-router';\nimport configs from '../../../configs';\nimport { enhancedBoardTypes, essentialBoardTypes } from '../../../configs/dashboard.config';\nimport { routes as reportingRouteConfig } from '../../../constants/routes';\nimport { useAccessCheck } from '../../../hooks/permissions/useAccessCheck';\nimport { useDashboardSchedulerPermission } from '../../../hooks/permissions/useDashboardSchedulerPermission';\nimport { useIsSearchPage } from '../../../hooks/useIsSearchPage';\nimport { getPageId } from '../../../services/common/dashboards.service';\nimport { getOrganizationPath } from '../../../services/common/organization.service';\nimport {\n  selectCurrentDashboards,\n  selectFeatureFlag,\n  selectUserHasOnlyOneSharedBoard\n} from '../../../store/selectors/analytics';\n\nimport { DashboardRouteType, DashboardType } from '../../../types/dashboard/DashboardTypes';\nimport { Organizations, StateType } from '../../../types/store/StateTypes';\nimport { groupDashboardsByType } from '../../../utils/dashboardGrouping.util';\nimport { FEATURE_FLAGS } from '../../../utils/feature-flag';\nimport NavBarAccordionItem from '../NavBarAccordionItem/NavBarAccordionItem';\nimport NavBarDashboardDrawerItem from '../NavBarDashboardDrawerItem/NavBarDashboardDrawerItem';\nimport NavBarDashboardsAccordionItem from '../NavBarDashboardsAccordionItem/NavBarDashboardsAccordionItem';\nimport NavBarDrawerItem from '../NavBarDrawerItem/NavBarDrawerItem';\nimport styles from './NavBar.module.scss';\n\nconst NavBar = () => {\n  const currentDashboards = useSelector<StateType, DashboardType[]>(selectCurrentDashboards);\n  const hasOneBoard = useSelector(selectUserHasOnlyOneSharedBoard);\n  const { t } = useTranslation();\n  const navigate = useNavigate();\n  const location = useLocation();\n  const hasFeatureFlag = useSelector(selectFeatureFlag);\n  const displayNewSidebarEnabled = !!hasFeatureFlag(FEATURE_FLAGS.ENABLE_NEW_SIDEBAR);\n\n  const currentOrganization = useSelector<StateType, Organizations>(\n    (state: StateType) => state.analytics.currentOrganization\n  );\n  const isSearchPage = useIsSearchPage();\n  const hasAccess = useAccessCheck();\n\n  // A route declaring no `access` at all is a misconfiguration, not an unrestricted route\n  const hasRouteAccess = (route?: DashboardRouteType): boolean => {\n    if (!route?.access) {\n      return false;\n    }\n\n    return hasAccess(route.access) || (!!route.secondaryAccess && hasAccess(route.secondaryAccess));\n  };\n\n  const formattedBoards = currentDashboards.map(dashboard => {\n    const route = reportingRouteConfig.find(el => el.type === dashboard.type) as DashboardRouteType;\n    return {\n      ...dashboard,\n      route,\n      createdTime: DateTime.fromISO(dashboard.createdTime as string).valueOf(),\n      lastUpdatedTime: DateTime.fromISO(dashboard.lastUpdatedTime as string).valueOf()\n    };\n  });\n\n  const ownedBoards = formattedBoards\n    .filter(({ isSharedDashboard }) => !isSharedDashboard)\n    .filter(({ route }) => hasRouteAccess(route));\n\n  const essentialBoards = groupDashboardsByType(ownedBoards, essentialBoardTypes);\n  const enhancedBoards = groupDashboardsByType(ownedBoards, enhancedBoardTypes);\n\n  const sharedBoards = formattedBoards.filter(({ isSharedDashboard }) => isSharedDashboard);\n\n  const templateBoards = formattedBoards\n    .filter(({ isSystemDashboard }) => isSystemDashboard)\n    .map(dashboard => {\n      const pageId = getPageId(dashboard.type);\n      const config = configs[pageId ?? ''];\n      const templates = config?.templates\n        ? Object.values(config.templates).filter(\n            template =>\n              hasAccess(template.access) && (template.featureFlag === undefined || hasFeatureFlag(template.featureFlag))\n          )\n        : [];\n      return templates.map(x => ({\n        ...dashboard,\n        templateId: x.id,\n        name: t(x.name),\n        filters: { version: config.filterVersion, items: x.query }\n      }));\n    })\n    .flat(1)\n    .sort((a, b) => a.name.localeCompare(b.name));\n\n  const { hasSchedulerPermissionWithRead } = useDashboardSchedulerPermission();\n\n  return (\n    <div data-hide-print>\n      <NavigationDrawer\n        labelId=\"board\"\n        size=\"large\"\n        className={clsx(styles.navbar__drawer, { [styles.navbar__drawer_readonly]: hasOneBoard })}>\n        <div className={styles.navbar__scrollbar}>\n          <Accordion chevronPosition=\"left\" size=\"large\">\n            {displayNewSidebarEnabled ? (\n              <>\n                {!_isEmpty(essentialBoards) && (\n                  <div aria-labelledby=\"essentialmenulabel\">\n                    <NavBarDashboardsAccordionItem\n                      leadingIcon={<BoardsFilledIcon />}\n                      header={<span id=\"essentialmenulabel\">{t('Essential')}</span>}\n                      dashboards={essentialBoards}\n                      isShared={false}\n                    />\n                  </div>\n                )}\n                {!_isEmpty(enhancedBoards) && (\n                  <div aria-labelledby=\"enhancedmenulabel\">\n                    <NavBarDashboardsAccordionItem\n                      leadingIcon={<BoardsFilledIcon />}\n                      header={<span id=\"enhancedmenulabel\">{t('Enhanced')}</span>}\n                      dashboards={enhancedBoards}\n                      isShared={false}\n                    />\n                  </div>\n                )}\n              </>\n            ) : (\n              <>\n                {!_isEmpty(ownedBoards) && (\n                  <div aria-labelledby=\"boardmenulabel\" data-testid=\"boardmenulabel\">\n                    <NavBarDashboardsAccordionItem\n                      leadingIcon={<BoardsFilledIcon />}\n                      header={<span id=\"board\">{t('Boards')}</span>}\n                      dashboards={ownedBoards}\n                      isShared={false}\n                    />\n                  </div>\n                )}\n              </>\n            )}\n\n            {!_isEmpty(templateBoards) && (\n              <div aria-labelledby=\"templatesmenulabel\">\n                <div>\n                  <NavBarAccordionItem leadingIcon={<BoardsFilledIcon />} heading={t('Templates')}>\n                    {templateBoards.map(({ templateId, ...dashboard }) => (\n                      <NavBarDashboardDrawerItem\n                        key={`${dashboard.id}${templateId}`}\n                        dashboard={dashboard}\n                        templateId={templateId}\n                      />\n                    ))}\n                  </NavBarAccordionItem>\n                </div>\n              </div>\n            )}\n            {!hasOneBoard && !_isEmpty(sharedBoards) && (\n              <div aria-labelledby=\"sharedboardmenulabel\" data-testid=\"sharedboardmenulabel\">\n                <NavBarDashboardsAccordionItem\n                  leadingIcon={<SharedBoardFilledIcon />}\n                  header={t('Shared with me')}\n                  dashboards={sharedBoards}\n                  isShared\n                />\n              </div>\n            )}\n            {hasSchedulerPermissionWithRead && (\n              <div aria-labelledby=\"toolsmenulabel\">\n                <div>\n                  <NavBarAccordionItem leadingIcon={<WrenchOutlinedIcon />} heading={t('Tools')}>\n                    <NavBarDrawerItem\n                      leadingIcon={<HistoryOutlinedIcon />}\n                      title={t('Schedule manager')}\n                      role=\"link\"\n                      selected={\n                        !isSearchPage &&\n                        (location.pathname === `/${getOrganizationPath(currentOrganization)}/scheduled-boards`\n                          ? true\n                          : undefined)\n                      }\n                      onClick={() => void navigate(`${getOrganizationPath(currentOrganization)}/scheduled-boards`)}\n                    />\n                  </NavBarAccordionItem>\n                </div>\n              </div>\n            )}\n          </Accordion>\n        </div>\n      </NavigationDrawer>\n    </div>\n  );\n};\n\nexport default NavBar;\n",".organizationSwitcher {\n  &::part(selected-value) {\n    color: var(--goto-type-color-default);\n    font: var(--goto-body-medium);\n  }\n}\n","import { Select, Option } from '@getgo/chameleon-web-react-wrapper';\nimport { ChangeEvent } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { MIXPANEL_EVENT_NAME } from '../../../constants/mixpanel';\nimport useMixpanel from '../../../hooks/useMixpanel';\nimport { setQueriedCachedFilters } from '../../../services/common/filters.service';\nimport { changeOrganization } from '../../../store/Analytics/analytics.slice';\nimport { unloadFilters } from '../../../store/Analytics/filters.slice';\nimport { RootState } from '../../../types/store/RootState';\nimport styles from './OrganizationSwitcher.module.scss';\n\nconst OrganizationSwitcher = () => {\n  const { currentOrganization, organizations } = useSelector((state: RootState) => state.analytics);\n  const dispatch = useDispatch();\n  const mixpanelTrack = useMixpanel();\n\n  const onChange = (event: ChangeEvent<HTMLSelectElement>) => {\n    const organization = organizations.find(el => el.id === event.target.value);\n\n    const eventData = {\n      Action: `Organization change`,\n      Component: 'Header',\n      OrganizationName: organization?.name\n    };\n\n    void mixpanelTrack(MIXPANEL_EVENT_NAME.ORGANIZATIONS, eventData);\n    dispatch(changeOrganization({ organizationId: event.target.value }));\n\n    dispatch(unloadFilters());\n    setQueriedCachedFilters([]);\n  };\n\n  return (\n    <Select className={styles.organizationSwitcher} noBorder size=\"small\" onChange={onChange}>\n      {organizations.map(el => (\n        <Option key={el.id} value={el.id} selected={currentOrganization.id === el.id}>\n          {el.name}\n        </Option>\n      ))}\n    </Select>\n  );\n};\n\nexport default OrganizationSwitcher;\n",".header__container {\n  grid-area: header;\n  align-items: center;\n  background-color: var(--goto-surface-color-default);\n  border-bottom: 1px solid var(--goto-border-color-default);\n  box-sizing: border-box;\n  display: grid;\n  grid-auto-flow: column;\n  grid-template-columns: min-content;\n  gap: var(--goto-spacing-04);\n  min-height: 3rem;\n  padding: 0 var(--goto-spacing-04);\n  position: relative;\n  z-index: var(--goto-z-index-header);\n}\n\n.header__title {\n  justify-self: center;\n}\n\n.header__avatar {\n  cursor: pointer;\n  justify-self: end;\n}\n\n.header__loginMenu_spacing {\n  padding: 0 var(--goto-spacing-02);\n}\n\n.header__loginMenu_submenu {\n  background-color: var(--goto-surface-color-secondary);\n  border: 1px solid var(--goto-border-color-default);\n  box-shadow: var(--goto-elevation-large);\n  margin-left: -4px;\n}\n\n.header__loginMenu_selected {\n  font: var(--goto-body-small-strong);\n}\n","import {\n  ChevronRightOutlinedIcon,\n  ClockOutlinedIcon,\n  FontOutlinedIcon,\n  SignOutOutlinedIcon\n} from '@getgo/chameleon-icons/react';\nimport { GotoLogo, Menu, MenuItem, MenuSeparator, Popover, Typography } from '@getgo/chameleon-web-react-wrapper';\nimport { GotoAvatar, GotoTopbarGlobalSearch } from '@goto/shell-react-components';\nimport clsx from 'clsx';\nimport { useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useNavigate } from 'react-router';\nimport { createTierLabelsMap } from '../../../constants/license';\nimport { MIXPANEL_EVENT_NAME } from '../../../constants/mixpanel';\nimport { ZINDEX } from '../../../constants/z-index';\nimport environment from '../../../environments';\nimport useMixpanel from '../../../hooks/useMixpanel';\nimport { formatTimezone, getTimeZone } from '../../../services/common/users.service';\nimport { setLocale } from '../../../store/Analytics/analytics.slice';\nimport { selectHasContactCenter, selectUserKey, selectCurrentOrganization } from '../../../store/selectors/analytics';\nimport type { RootState } from '../../../types/store/RootState';\nimport { FEATURE_FLAGS } from '../../../utils/feature-flag';\nimport { getAuth, getUserEmail, getUserName, hasFeatureFlag } from '../../../utils/shell';\nimport OrganizationSwitcher from '../OrganizationSwitcher/OrganizationSwitcher';\nimport styles from './Header.module.scss';\n\ntype LocaleOption = { value: string; label: string; default?: boolean; icon: string };\n\nconst getLocales = (): LocaleOption[] => [\n  { value: 'de-DE', label: 'Deutsch', icon: '🇩🇪' },\n  { value: 'en-US', label: 'English', default: true, icon: '🇺🇸' },\n  { value: 'es-ES', label: 'Español', icon: '🇲🇽' },\n  { value: 'fr-FR', label: 'Français', icon: '🇫🇷' },\n  { value: 'it-IT', label: 'Italiano', icon: '🇮🇹' },\n  { value: 'pt-BR', label: 'Português', icon: '🇧🇷' }\n];\n\nconst Header = () => {\n  const dispatch = useDispatch();\n  const userKey = useSelector(selectUserKey);\n  const { t } = useTranslation();\n  const mixpanelTrack = useMixpanel();\n  const { locale, currentLicense } = useSelector((state: RootState) => state.analytics);\n  const hasContactCenter = useSelector(selectHasContactCenter);\n  const navigate = useNavigate();\n  const currentOrganization = useSelector(selectCurrentOrganization);\n\n  const languageSubMenu = useMemo(\n    () => (\n      <Menu className={styles.header__loginMenu_submenu} aria-label={t('Language menu')}>\n        {getLocales().map(_locale => (\n          <MenuItem\n            key={_locale.value}\n            leadingIcon={<span>{_locale.icon}</span>}\n            onClick={() => {\n              const eventData = {\n                Action: `Locale change`,\n                Component: 'Header',\n                NewLocale: _locale.value\n              };\n              void mixpanelTrack(MIXPANEL_EVENT_NAME.LOCALE, eventData);\n              dispatch(setLocale({ locale: _locale.value }));\n            }}\n            className={clsx({ [styles.header__loginMenu_selected]: _locale.value === locale })}>\n            {`${_locale.label}`}\n          </MenuItem>\n        ))}\n      </Menu>\n    ),\n    [locale, t, dispatch, mixpanelTrack]\n  );\n\n  const createSearchUrl = (base64Query: string) => `/${currentOrganization?.domain}/search/${base64Query}`;\n  const pathBeforeNavigationToSearchPageSessionStorageKey = 'path-before-navigation-to-search-page';\n\n  const logoutAction = () => {\n    // TODO add mixpanel event on the logout\n    void getAuth()?.logout();\n  };\n\n  const tierLabelsMap = createTierLabelsMap();\n\n  return (\n    <header className={styles.header__container}>\n      <GotoLogo />\n      <OrganizationSwitcher />\n      {hasFeatureFlag(FEATURE_FLAGS.GLOBAL_SEARCH_TRANSCRIPT_IN_ANALYTICS) && (\n        <GotoTopbarGlobalSearch\n          data-hide-print\n          searchFieldAction={(base64SearchQuery: string) => {\n            if (base64SearchQuery && currentOrganization) {\n              window.sessionStorage.setItem(\n                pathBeforeNavigationToSearchPageSessionStorageKey,\n                window.location.pathname\n              );\n              void navigate(createSearchUrl(base64SearchQuery));\n            }\n          }}\n        />\n      )}\n      <div className={styles.header__avatar} data-hide-print>\n        <GotoAvatar\n          id=\"popover-header-avatar\"\n          externalUserKey={userKey ?? undefined}\n          givenName={getUserName()?.givenName}\n          size=\"small\"\n        />\n        <Popover triggerId=\"popover-header-avatar\" zIndex={ZINDEX.CHAMELEON_DROPDOWN} menu>\n          <Menu aria-label={t('Open user profile menu')}>\n            <MenuItem size=\"small\" className={styles.header__loginMenu_spacing}>\n              <Typography>{`${getUserName()?.givenName} ${getUserName()?.lastName}`}</Typography>\n            </MenuItem>\n            <MenuItem size=\"small\" className={styles.header__loginMenu_spacing}>\n              <Typography color=\"type-color-secondary\" variant=\"caption-medium-strong\">\n                {getUserEmail()}\n              </Typography>\n            </MenuItem>\n            {\n              <MenuItem size=\"small\" className={styles.header__loginMenu_spacing}>\n                <Typography color=\"type-color-secondary\" variant=\"caption-medium-strong\">\n                  {formatTimezone(getTimeZone(), locale)}\n                </Typography>\n              </MenuItem>\n            }\n            <MenuSeparator />\n            <MenuItem\n              leadingIcon={<FontOutlinedIcon />}\n              trailingIcon={<ChevronRightOutlinedIcon />}\n              subMenu={languageSubMenu}>\n              {t('Manage language')}\n            </MenuItem>\n            {\n              <MenuItem\n                leadingIcon={<ClockOutlinedIcon />}\n                onClick={() => window.open(environment.api.profile.url, '_blank')}>\n                {t('Change time zone')}\n              </MenuItem>\n            }\n            <MenuItem leadingIcon={<SignOutOutlinedIcon />} onClick={logoutAction}>\n              {t('Sign out')}\n            </MenuItem>\n            <MenuSeparator />\n            <Typography\n              variant=\"caption-small\"\n              color=\"type-color-secondary\"\n              className={styles.header__loginMenu_spacing}>\n              {t('Version: {{version}}', { version: environment.appVersion })}\n            </Typography>\n            {hasContactCenter && (\n              <Typography\n                variant=\"caption-small\"\n                color=\"type-color-secondary\"\n                className={styles.header__loginMenu_spacing}>\n                {t('License: {{currentLicense}}', { currentLicense: tierLabelsMap[currentLicense] })}\n              </Typography>\n            )}\n          </Menu>\n        </Popover>\n      </div>\n    </header>\n  );\n};\n\nexport default Header;\n",".layout {\n  display: flex;\n  flex-direction: column;\n  height: 100vh;\n\n  @media print {\n    height: auto;\n  }\n}\n\n.layout__container {\n  display: grid;\n  grid-area: container;\n  grid-template-areas: 'sidebar content';\n  grid-template-columns: auto 1fr;\n  overflow: hidden;\n  height: 100%;\n}\n\n.layout__content {\n  grid-area: content;\n  overflow-y: auto;\n  border-left: 1px var(--goto-border-color-default) solid;\n\n  @media print {\n    border: 0;\n  }\n}\n\n.sr-only {\n  border: 0;\n  clip-path: inset(50%);\n  width: 1px;\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n}\n",".loading {\n  position: absolute;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n}\n","import { LaunchScreen } from '@getgo/chameleon-web-react-wrapper';\nimport styles from './Loading.module.scss';\n\nconst Loading = () => {\n  return (\n    <div className={styles.loading} role=\"alert\" aria-busy=\"true\">\n      <LaunchScreen />\n    </div>\n  );\n};\n\nexport default Loading;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { getDefaultBoard } from '../../services/common/dashboards.service';\nimport { selectCapabilities, selectCurrentDashboards } from '../../store/selectors/analytics';\nimport { DashboardType } from '../../types/dashboard/DashboardTypes';\nimport { RootState } from '../../types/store/RootState';\n\ninterface WithDefaultBoardChildrenProps {\n  defaultBoard: DashboardType | null | undefined;\n}\n\ninterface WithDefaultBoardProps {\n  children: (props: WithDefaultBoardChildrenProps) => React.ReactNode;\n}\n\nconst WithDefaultBoard = ({ children }: WithDefaultBoardProps) => {\n  const currentOrganizationPermissions = useSelector(\n    (state: RootState) => state.analytics.currentOrganizationPermissions\n  );\n  const currentDashboards = useSelector(selectCurrentDashboards);\n  const capabilities = useSelector(selectCapabilities);\n\n  const defaultBoard = getDefaultBoard(currentDashboards, currentOrganizationPermissions, capabilities) as\n    DashboardType | null | undefined;\n\n  return children({ defaultBoard });\n};\n\nexport default WithDefaultBoard;\n",".error__glass {\n  width: 50%;\n  height: 50%;\n  margin-top: 5%;\n}\n\n.error__link {\n  &_spaced {\n    margin-top: 50px;\n  }\n}\n\n.error__actions {\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n\n  &_spaced {\n    margin-top: 50px;\n  }\n}\n","import { Button, ButtonLink } from '@getgo/chameleon-web-react-wrapper';\nimport clsx from 'clsx';\nimport { isEmpty as _isEmpty } from 'lodash';\nimport { useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector } from 'react-redux';\nimport { useNavigate } from 'react-router';\nimport { GlassIcon } from '../../../assets/images';\nimport ErrorPage from '../../../components/common/ErrorPage/ErrorPage';\nimport { MIXPANEL_EVENT_NAME } from '../../../constants/mixpanel';\nimport environment from '../../../environments';\nimport useMixpanel from '../../../hooks/useMixpanel';\nimport { getOrganizationPath } from '../../../services/common/organization.service';\nimport { selectCurrentDashboards } from '../../../store/selectors/analytics';\nimport type { RootState } from '../../../types/store/RootState';\nimport styles from './404.module.scss';\n\nconst Component = () => {\n  const { currentOrganization } = useSelector((state: RootState) => state.analytics);\n  const currentDashboards = useSelector(selectCurrentDashboards);\n  const { t } = useTranslation();\n  const mixpanelTrack = useMixpanel();\n  const navigate = useNavigate();\n\n  useEffect(() => {\n    const eventData = {\n      Action: `Navigation to the 404 page`,\n      Component: '404'\n    };\n\n    void mixpanelTrack(MIXPANEL_EVENT_NAME.ERROR_PAGES, eventData);\n  }, [mixpanelTrack]);\n\n  return (\n    <ErrorPage\n      icon={<GlassIcon className={styles.error__glass} />}\n      title={t('Sorry')}\n      text={t('The page you are looking for does not exist!')}>\n      <div className={clsx(styles.error__actions, { [styles.error__actions_spaced]: !_isEmpty(currentDashboards) })}>\n        {!_isEmpty(currentDashboards) && (\n          <Button\n            className={styles.error__link}\n            role=\"link\"\n            variant=\"primary\"\n            onClick={() => void navigate(`${getOrganizationPath(currentOrganization)}`)}>\n            {t('Home', { context: 'Button that redirect to the home page' })}\n          </Button>\n        )}\n        <ButtonLink\n          className={clsx(styles.error__link, { [styles.error__link_spaced]: _isEmpty(currentDashboards) })}\n          variant={_isEmpty(currentDashboards) ? 'primary' : 'tertiary'}\n          size=\"medium\"\n          href={environment.support.url}\n          target=\"blank\">\n          {t('Contact support', { context: 'Link to support page' })}\n        </ButtonLink>\n      </div>\n    </ErrorPage>\n  );\n};\n\nComponent.displayName = 'Error404';\n\nexport { Component };\n","import { TimeLimitStaticPictogram } from '@getgo/chameleon-pictograms/react';\nimport { useEffect } from 'react';\nimport { Trans, useTranslation } from 'react-i18next';\nimport ErrorPage from '../../../components/common/ErrorPage/ErrorPage';\nimport { MIXPANEL_EVENT_NAME } from '../../../constants/mixpanel';\nimport environment from '../../../environments';\nimport useMixpanel from '../../../hooks/useMixpanel';\n\nconst Component = () => {\n  const { t } = useTranslation();\n  const mixpanelTrack = useMixpanel();\n\n  useEffect(() => {\n    void mixpanelTrack(MIXPANEL_EVENT_NAME.ERROR_PAGES, {\n      Action: 'Navigation to the invalid timezone page',\n      Component: 'InvalidTimezone'\n    });\n  }, [mixpanelTrack]);\n\n  return (\n    <ErrorPage\n      icon={<TimeLimitStaticPictogram {...({ size: 'xlarge', style: { height: 200, width: 200 } } as object)} />}\n      title={t('Your time zone configuration is invalid')}\n      text={\n        <Trans>\n          Please update your time zone by clicking in{' '}\n          <a href={environment.api.profile.url} target=\"_blank\" rel=\"noopener noreferrer\">\n            your profile settings\n          </a>\n          .\n        </Trans>\n      }\n    />\n  );\n};\n\nComponent.displayName = 'InvalidTimezone';\n\nexport { Component };\n","import { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { createDashboard, getSlicedDashboardName } from '../../services/common/dashboards.service';\nimport { getTimeZone } from '../../services/common/users.service';\nimport { addDashboard } from '../../store/Analytics/analytics.slice';\nimport { selectCurrentOrganizationId } from '../../store/selectors/analytics';\nimport { QueryFilter } from '../../types/config/FilterTypes';\nimport { DashboardType } from '../../types/dashboard/DashboardTypes';\nimport { Snackbar } from '../../utils/snackbar';\n\ntype CreateDashboardParams = {\n  dashboard: Pick<DashboardType, 'type'>;\n  filters: QueryFilter[] | Record<string, unknown>;\n  boardName: string;\n  onFinish: (id: string) => void;\n  onError: (error: unknown) => void;\n};\n\nconst useCreateDashboard = () => {\n  const { t } = useTranslation();\n  const organizationId = useSelector(selectCurrentOrganizationId)!;\n  const dispatch = useDispatch();\n\n  const create = async ({ dashboard, filters, boardName, onFinish, onError }: CreateDashboardParams): Promise<void> => {\n    const controller = new AbortController();\n    const newDashboard = {\n      type: dashboard.type,\n      name: boardName,\n      filters,\n      timeZone: getTimeZone()\n    };\n\n    try {\n      Snackbar.startProgress(\n        t('Creating {{dashboardName}}', { dashboardName: getSlicedDashboardName(newDashboard, t) })\n      );\n      // TODO - remove cast when dashboard.service.js is migrated to TS\n      const dashboardResponse = (await createDashboard(organizationId, newDashboard, controller)) as DashboardType;\n      Snackbar.completeProgress();\n\n      dispatch(addDashboard(dashboardResponse));\n      Snackbar.showStatus(t('Board has been created.'));\n      onFinish(dashboardResponse.id);\n    } catch (error) {\n      Snackbar.close();\n      onError(error);\n    }\n  };\n  return create;\n};\n\nexport default useCreateDashboard;\n","import { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n  deleteDashboard as deleteDashboardQuery,\n  getSlicedDashboardName\n} from '../../services/common/dashboards.service';\nimport { deleteDashboard as deleteDashboardStore } from '../../store/Analytics/analytics.slice';\nimport { selectCurrentOrganizationId } from '../../store/selectors/analytics';\nimport { DashboardType } from '../../types/dashboard/DashboardTypes';\nimport { Snackbar } from '../../utils/snackbar';\n\ntype DeleteDashboardParams = {\n  dashboard: Pick<DashboardType, 'id' | 'name'>;\n  onFinish: () => void;\n};\n\nconst useDeleteDashboard = () => {\n  const { t } = useTranslation();\n  const organizationId = useSelector(selectCurrentOrganizationId)!;\n  const dispatch = useDispatch();\n\n  const deleteDashboard = async ({ dashboard, onFinish }: DeleteDashboardParams): Promise<void> => {\n    const controller = new AbortController();\n\n    let message: string;\n\n    try {\n      Snackbar.startProgress(t('Deleting {{dashboardName}}', { dashboardName: getSlicedDashboardName(dashboard, t) }));\n\n      await deleteDashboardQuery(organizationId, dashboard.id, controller);\n      Snackbar.completeProgress();\n\n      dispatch(deleteDashboardStore({ id: dashboard.id }));\n\n      message = t('Board has been deleted.');\n    } catch (error) {\n      console.error(error);\n\n      Snackbar.close();\n      message = t('An error occurred while deleting the board.');\n    }\n    Snackbar.showStatus(message);\n\n    onFinish();\n  };\n\n  return deleteDashboard;\n};\n\nexport default useDeleteDashboard;\n","import { isFunction as _isFunction } from 'lodash';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useParams, useNavigate } from 'react-router';\nimport {\n  createPermissionsDashboard,\n  deletePermissionsDashboard,\n  deleteUserPermissionsDashboard,\n  getSlicedDashboardName\n} from '../../services/common/dashboards.service';\nimport { deleteDashboard as deleteDashboardStore } from '../../store/Analytics/analytics.slice';\nimport { selectCurrentOrganizationId, selectUserKey } from '../../store/selectors/analytics';\nimport { DashboardType } from '../../types/dashboard/DashboardTypes';\nimport { StateType } from '../../types/store/StateTypes';\nimport { Snackbar } from '../../utils/snackbar';\n\ntype DashboardUser = {\n  userKey: string;\n};\n\ntype UnShareResult = {\n  removedUsers?: DashboardUser[];\n};\n\ntype ShareDashboard = Pick<DashboardType, 'id'> & { name?: string };\n\ntype ShareParams = {\n  dashboard: ShareDashboard;\n  users: DashboardUser[];\n  onFinish?: () => void;\n};\n\ntype UnShareParams = {\n  dashboard: ShareDashboard;\n  users: DashboardUser[];\n  onFinish?: (result: UnShareResult) => void;\n};\n\ntype UnShareUserParams = {\n  dashboard: ShareDashboard;\n  onFinish: () => void;\n};\n\nconst useShareDashboard = () => {\n  const { t } = useTranslation();\n  const dispatch = useDispatch();\n  const navigate = useNavigate();\n  const { basename } = useSelector((state: StateType) => state.analytics);\n  const organizationId = useSelector(selectCurrentOrganizationId)!;\n  const userKey = useSelector(selectUserKey) as string;\n  const { dashboardId: viewingDashboardId } = useParams();\n\n  const share = async ({ dashboard, users, onFinish }: ShareParams): Promise<void> => {\n    const controller = new AbortController();\n\n    let message: string;\n    try {\n      Snackbar.startProgress(t('Sharing {{dashboardName}}', { dashboardName: getSlicedDashboardName(dashboard, t) }));\n\n      await createPermissionsDashboard(organizationId, dashboard.id, users, controller);\n      Snackbar.completeProgress();\n\n      message = t('Board has been shared.');\n    } catch (error) {\n      console.error(error);\n\n      Snackbar.close();\n      message = t('An error occurred while sharing the board.');\n    }\n    Snackbar.showStatus(message);\n\n    if (_isFunction(onFinish)) {\n      onFinish();\n    }\n  };\n\n  const unShare = async ({ dashboard, users, onFinish }: UnShareParams): Promise<void> => {\n    const controller = new AbortController();\n\n    let message: string;\n    let removedUsers: { items?: DashboardUser[] } | null = null;\n    try {\n      Snackbar.startProgress(\n        t('Updating {{dashboardName}} permissions', {\n          dashboardName: getSlicedDashboardName(dashboard, t)\n        })\n      );\n\n      removedUsers = (await deletePermissionsDashboard(\n        organizationId,\n        dashboard.id,\n        users.map(u => u.userKey),\n        controller\n      )) as {\n        items?: DashboardUser[];\n      } | null;\n      Snackbar.completeProgress();\n\n      message = t('Board permissions has been updated.');\n    } catch (error) {\n      console.error(error);\n\n      Snackbar.close();\n      message = t('An error occurred while updating board permissions.');\n    }\n\n    Snackbar.showStatus(message);\n\n    if (_isFunction(onFinish)) {\n      onFinish({ removedUsers: removedUsers?.items });\n    }\n  };\n\n  const unShareUser = async ({ dashboard, onFinish }: UnShareUserParams): Promise<void> => {\n    const controller = new AbortController();\n\n    let message: string;\n\n    try {\n      Snackbar.startProgress(t('Deleting {{dashboardName}}', { dashboardName: getSlicedDashboardName(dashboard, t) }));\n\n      await deleteUserPermissionsDashboard(organizationId, dashboard.id, userKey, controller);\n      Snackbar.completeProgress();\n\n      dispatch(deleteDashboardStore({ id: dashboard.id }));\n\n      message = t('Board has been deleted.');\n\n      if (viewingDashboardId && viewingDashboardId === dashboard.id) {\n        void navigate(`${basename}/${organizationId}`);\n      }\n    } catch (error) {\n      console.error(error);\n      Snackbar.close();\n      message = t('An error occurred while deleting the board.');\n    }\n    Snackbar.showStatus(message);\n\n    onFinish();\n  };\n\n  return { share, unShare, unShareUser };\n};\n\nexport default useShareDashboard;\n","import React, { useEffect, useState, useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useNavigate, useLocation } from 'react-router';\nimport configs from '../../configs/index';\nimport { MIXPANEL_EVENT_NAME } from '../../constants/mixpanel';\nimport useCreateDashboard from '../../hooks/dashboards/useCreateDashboard';\nimport {\n  EVENT_TYPE,\n  useDashboardWindowEvent,\n  WINDOW_EVENT_DELETE_KEY\n} from '../../hooks/dashboards/useDashboardWindowEvent';\nimport useDeleteDashboard from '../../hooks/dashboards/useDeleteDashboard';\nimport useShareDashboard from '../../hooks/dashboards/useShareDashboard';\nimport useUpdateDashboard from '../../hooks/dashboards/useUpdateDashboard';\nimport useMixpanel from '../../hooks/useMixpanel';\nimport { getDashboardNameAndType } from '../../services/common/dashboards.service';\nimport {\n  applyMandatoryFilters,\n  parseFiltersToQueryV2,\n  parseQueryToFiltersV2\n} from '../../services/common/filters.service';\nimport { getOrganizationPath } from '../../services/common/organization.service';\nimport { setModalOpen } from '../../store/Analytics/analytics.slice';\nimport { selectCurrentDashboard, selectCurrentDashboards } from '../../store/selectors/analytics';\nimport { getDefaultEndTime } from '../../store/selectors/default-date';\nimport { selectAnalyticsFilters, selectFiltersQuery } from '../../store/selectors/filtersV2';\nimport { DashboardType } from '../../types/dashboard/DashboardTypes';\nimport { RootState } from '../../types/store/RootState';\nimport { getFilterQueryPerDashboardType } from '../../utils/filters.util';\nimport { getPageIdFromDashboardType } from '../../utils/page.util';\n\nexport interface ModalOpenedType {\n  dashboard?: DashboardType;\n  modal?: string;\n  templateId?: string;\n  [key: string]: unknown;\n}\n\nexport interface WithDashboardModalsChildrenProps {\n  onDashboardDelete: () => void;\n  onDashboardSave: (boardName: string, savingDashboard: DashboardType) => void;\n  onDashboardRename: (boardName: string) => void;\n}\n\ninterface WithDashboardModalsProps {\n  setModalError: (message: string | null) => void;\n  modalOpened?: ModalOpenedType;\n  onModalClose: () => void;\n  children: (props: WithDashboardModalsChildrenProps) => React.ReactNode;\n}\n\nconst WithDashboardModals = ({ setModalError, modalOpened, onModalClose, children }: WithDashboardModalsProps) => {\n  const dashboards = useSelector(selectCurrentDashboards);\n  const currentDashboard = useSelector(selectCurrentDashboard);\n  const filtersQuery = useSelector(selectFiltersQuery);\n  const currentFilters = useSelector(selectAnalyticsFilters);\n  const endOfTodayTime = useSelector(getDefaultEndTime);\n  const [currentBoard, setCurrentBoard] = useState(false);\n  const mixpanelTrack = useMixpanel();\n  const dispatch = useDispatch();\n  const update = useUpdateDashboard();\n  const create = useCreateDashboard();\n  const deleteDashboard = useDeleteDashboard();\n  const { unShareUser } = useShareDashboard();\n  const navigate = useNavigate();\n  const { search } = useLocation();\n  const currentOrganization = useSelector((state: RootState) => state.analytics.currentOrganization);\n\n  const dashboardModal = modalOpened?.dashboard;\n  const dashboardConfig = configs[getPageIdFromDashboardType(dashboardModal?.type)];\n  const filterVersion = dashboardConfig?.filterVersion ?? 2;\n  const urlTemplateId = new URLSearchParams(search).get('templateId') ?? undefined;\n\n  const dashboardFilterQuery = useMemo(\n    () => getFilterQueryPerDashboardType(dashboardModal?.type, filtersQuery) as unknown[],\n    [dashboardModal?.type, filtersQuery]\n  );\n\n  useEffect(() => {\n    if (modalOpened) {\n      //templateId is not sent from the FilterContainerActions since we want to save the modified filters instead of the template\n      if (\n        currentDashboard &&\n        currentDashboard.id === modalOpened.dashboard?.id &&\n        (!modalOpened.templateId || urlTemplateId === modalOpened.templateId)\n      ) {\n        setCurrentBoard(true);\n      } else {\n        if (!dashboards.find(el => el.id === modalOpened.dashboard?.id)) {\n          return;\n        }\n        setCurrentBoard(false);\n      }\n    }\n  }, [currentDashboard, dashboards, modalOpened, urlTemplateId]);\n\n  // TODO Remove that function when all Reporting filter container actions are migrated\n  const onDashboardModalOpen = ({ id, type }: { id?: string; type?: string }) => {\n    if (!id || !type) {\n      return;\n    }\n    if (currentDashboard && currentDashboard.id === id) {\n      setCurrentBoard(true);\n    } else {\n      if (!dashboards.find(el => el.id === id)) {\n        return;\n      }\n      setCurrentBoard(false);\n    }\n\n    dispatch(setModalOpen({ modal: type, dashboardId: id }));\n  };\n\n  const onDashboardRename = (boardName: string) => {\n    if (!dashboardModal) {\n      return;\n    }\n\n    const eventData = {\n      Action: `Dashboard rename`,\n      Component: 'Dashboard',\n      Dashboard: dashboardModal?.type\n    };\n\n    void mixpanelTrack(MIXPANEL_EVENT_NAME.DASHBOARD, eventData);\n\n    void update({\n      dashboard: dashboardModal,\n      boardName,\n      onFinish: onModalClose\n    });\n  };\n\n  const onDashboardSave = (boardName: string, savingDashboard: DashboardType) => {\n    const eventData = {\n      Action: `Dashboard save`,\n      Component: 'Dashboard',\n      Dashboard: getDashboardNameAndType(savingDashboard)\n    };\n    void mixpanelTrack(MIXPANEL_EVENT_NAME.DASHBOARD, eventData);\n\n    const filtersToSave = parseQueryToFiltersV2(dashboardFilterQuery, endOfTodayTime, currentDashboard?.type);\n    const dashboardFilters = dashboardConfig?.templates?.[modalOpened?.templateId as string]?.query;\n\n    const getNonCurrentBoardFilters = () => {\n      const mandatoryFilters = dashboardConfig?.availableFilters?.mandatoryFilters ?? [];\n      const filterQuery = parseFiltersToQueryV2(\n        { version: filterVersion, items: dashboardFilters ?? [] },\n        currentFilters,\n        endOfTodayTime\n      );\n      return parseQueryToFiltersV2(\n        applyMandatoryFilters(filterQuery, mandatoryFilters, currentFilters),\n        endOfTodayTime,\n        dashboardModal?.type\n      );\n    };\n\n    void create({\n      dashboard: savingDashboard,\n      boardName,\n      filters: currentBoard ? filtersToSave : getNonCurrentBoardFilters(),\n      onFinish: (dashboardId: string) => {\n        onModalClose();\n        void navigate(`${getOrganizationPath(currentOrganization)}/dashboard/${dashboardId}`);\n      },\n      onError: (error: unknown) => {\n        setModalError(error instanceof Error ? error.message : String(error));\n      }\n    });\n  };\n\n  const onDashboardDelete = () => {\n    if (!dashboardModal) {\n      return;\n    }\n\n    const eventData = {\n      Action: `Dashboard delete`,\n      Component: 'Dashboard',\n      Dashboard: getDashboardNameAndType(dashboardModal)\n    };\n\n    void mixpanelTrack(MIXPANEL_EVENT_NAME.DASHBOARD, eventData);\n\n    if (modalOpened?.modal === EVENT_TYPE.UNSHARE) {\n      void unShareUser({\n        dashboard: dashboardModal,\n        onFinish: () => {\n          onModalClose();\n        }\n      });\n    } else {\n      void deleteDashboard({\n        dashboard: dashboardModal,\n        onFinish: () => {\n          onModalClose();\n          if (currentDashboard?.id === dashboardModal?.id) {\n            void navigate(`/${getOrganizationPath(currentOrganization)}`);\n          }\n        }\n      });\n    }\n  };\n\n  useDashboardWindowEvent({ key: WINDOW_EVENT_DELETE_KEY, onEvent: onDashboardModalOpen, deps: dashboards });\n\n  return children({\n    onDashboardDelete,\n    onDashboardSave,\n    onDashboardRename\n  });\n};\n\nexport default WithDashboardModals;\n","import { useCallback, useEffect } from 'react';\nimport { useParams } from 'react-router';\n\nexport const WINDOW_EVENT_SCHEDULE_KEY = 'REPORTING:DASHBOARDS_SCHEDULE';\nexport const WINDOW_EVENT_EXPORT_KEY = 'REPORTING:EXPORT';\nexport const WINDOW_EVENT_CRADLE_TO_GRAVE_MODAL_KEY = 'REPORTING:CRADLE_TO_GRAVE_MODAL';\n\nexport type WindowEventDetail = {\n  id?: string;\n  type?: string;\n  startTime?: string;\n  queueCallerId?: string;\n};\n\ntype UseWindowEventParams = {\n  key: string;\n  onEvent: (detail: WindowEventDetail) => void;\n  deps?: unknown[];\n};\n\nexport const useWindowEvent = ({ key, onEvent, deps }: UseWindowEventParams): void => {\n  const params = useParams();\n\n  const handleEvent = useCallback(\n    (args: CustomEvent<WindowEventDetail>) => {\n      onEvent({\n        id: args.detail?.id,\n        type: args.detail?.type,\n        startTime: args.detail?.startTime,\n        queueCallerId: args.detail?.queueCallerId\n      });\n    },\n    [onEvent]\n  );\n\n  useEffect(() => {\n    window.addEventListener(key, handleEvent as EventListener);\n    return () => {\n      window.removeEventListener(key, handleEvent as EventListener);\n    };\n  }, [params, key, handleEvent, deps]);\n};\n",".callReportModal__titleContainer {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}\n\n// Instead of using Dialog prop, we do custom sizing\nchameleon-dialog.callReportModal__dialog {\n  [slot='title'] {\n    width: 100%;\n  }\n\n  &::part(content) {\n    min-height: 580px;\n  }\n\n  // Hide bottom of Dialog component\n  &::part(actions) {\n    display: none;\n  }\n}\n\nchameleon-tabs {\n  display: block;\n}\n\n.callReportModal__tabTooltip {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  font: var(--goto-body-medium);\n\n  chameleon-svg {\n    margin: auto;\n    padding-right: var(--goto-spacing-02);\n\n    --goto-icon-color: var(--goto-icon-color-warning);\n  }\n}\n\n.callReportModal__tabHidden {\n  display: none;\n}\n\n.callReportModal__summaryContainer {\n  padding: var(--goto-spacing-01) 0 0;\n  margin: var(--goto-spacing-01) 0;\n}\n\n.callReportModal__summaryWrapper {\n  background-color: var(--goto-background-color-secondary);\n  padding: var(--goto-spacing-04);\n  margin: var(--goto-spacing-04) 0;\n  border-radius: 8px;\n}\n\n.callReportModal__summaryText {\n  &::part(text) {\n    display: flex;\n    align-items: center;\n  }\n\n  >chameleon-svg {\n    padding-right: var(--goto-spacing-02);\n  }\n}\n\n.callReportModal__summaryText b {\n  padding-left: var(--goto-spacing-01);\n  padding-right: var(--goto-spacing-01);\n}\n\n.callReportModal__containerMargin {\n  margin: var(--goto-spacing-04);\n}\n\n.callReportModal__AITranscription {\n  margin-top: var(--goto-spacing-01);\n\n  chameleon-svg {\n    /* TODO replace when chameleon icon will support gradient ticket: CCO-5805 */\n    --goto-icon-color: var(--goto-purple-400);\n  }\n}\n","export const callDispositions = [\n  {\n    /* i18n.t('Closed lost') */\n    name: 'Closed lost',\n    id: 'a001cb29-a2c4-47a1-ba66-7d08a12459e9',\n    /* i18n.t('Sales') */\n    category: 'Sales'\n  },\n  {\n    /* i18n.t('Closed won') */\n    name: 'Closed won',\n    id: 'f3c3c325-b15a-4b5c-8355-e305f832eab3',\n    category: 'Sales'\n  },\n  {\n    /* i18n.t('Interested') */\n    name: 'Interested',\n    id: '26cc1953-d253-4b83-a458-f623ad6509d1',\n    category: 'Sales'\n  },\n  {\n    /* i18n.t('Callback') */\n    name: 'Callback',\n    id: 'e3cf0f47-2760-479d-8b34-83f619d39a3c',\n    category: 'Sales'\n  },\n  {\n    /* i18n.t('Issue resolved') */\n    name: 'Issue resolved',\n    id: '3ecf50c9-c991-44b0-842d-0e7a01a64aa1',\n    /* i18n.t('Service') */\n    category: 'Service'\n  },\n  {\n    /* i18n.t('Issue opened') */\n    name: 'Issue opened',\n    id: 'e1f5e6ca-7b52-45aa-8e84-eb0d9b7c0b7e',\n    category: 'Service'\n  },\n  {\n    /* i18n.t('No answer') */\n    name: 'No answer',\n    id: '834ed136-0978-4737-8488-c98f67ff4d26',\n    category: 'Service'\n  },\n  {\n    /* i18n.t('Waiting on customer') */\n    name: 'Waiting on customer',\n    id: 'd62e3d70-a642-40ca-b84b-8c4c575b1b0d',\n    category: 'Service'\n  },\n  {\n    /* i18n.t('Waiting on internal') */\n    name: 'Waiting on internal',\n    id: '43bf9848-40bd-4222-99c7-56a3eaab7e27',\n    category: 'Service'\n  },\n  {\n    /* i18n.t('Wrong number') */\n    name: 'Wrong number',\n    id: 'c5b46f89-cf28-4d01-b31a-61bd66df4652',\n    /* i18n.t('Miscellaneous') */\n    category: 'Miscellaneous'\n  },\n  {\n    /* i18n.t('Voicemail') */\n    name: 'Voicemail',\n    id: '2b4c7181-4f75-4189-b369-77b4097ae6a9',\n    category: 'Miscellaneous'\n  },\n  {\n    /* i18n.t('Transferred') */\n    name: 'Transferred',\n    id: '10d9c2a7-cd7b-49ff-9c0a-01ed6e8880d4',\n    category: 'Miscellaneous'\n  }\n];\n","import { callStatuses } from '../types/CallReport';\n\nexport const callReportStatuses = {\n  // i18n.t('Voicemail reached')\n  VOICEMAIL: 'Voicemail reached',\n  // i18n.t('Ringing')\n  RINGING: 'Ringing',\n  // i18n.t('Connected')\n  CONNECTED: 'Connected',\n  // i18n.t('Disconnected')\n  DISCONNECTING: 'Disconnected',\n  // i18n.t('Hangup')\n  HANG_UP: 'Hangup',\n  // i18n.t('Transferring')\n  IN_DIRECT_TRANSFER: 'Transferring',\n  // i18n.t('On Hold')\n  ON_HOLD: 'On Hold',\n  // i18n.t('Parked')\n  PARKED: 'Parked',\n  // i18n.t('Listening')\n  LISTENING: 'Listening',\n  // i18n.t('Whispering')\n  WHISPERING: 'Whispering',\n  // i18n.t('Call started')\n  CALL_STARTED: 'Call started',\n  // i18n.t('Entering queue')\n  QUEUE: 'Entering queue',\n  // i18n.t('Wrap up')\n  WRAP_UP: 'Wrap up',\n  // i18n.t('Survey answered')\n  CSAT_SCORE: 'Survey answered'\n};\n\nexport const callReportGroupStatuses = {\n  // i18n.t('Entered dial plan')\n  [callStatuses.ENTERED_DIAL_PLAN]: 'Entered dial plan',\n  // i18n.t('Auto attendant')\n  [callStatuses.AUTO_ATTENDANT]: 'Auto attendant',\n  // i18n.t('Schedule')\n  [callStatuses.SCHEDULE]: 'Schedule',\n  // i18n.t('Play sound clip')\n  [callStatuses.SOUND_CLIP]: 'Play sound clip',\n  // i18n.t('Caller info')\n  [callStatuses.CALLER_INFO]: 'Caller info',\n  // i18n.t('External number')\n  [callStatuses.EXTERNAL_NUMBER]: 'External number',\n  // i18n.t('Queue')\n  [callStatuses.QUEUE]: 'Queue',\n  // i18n.t('Connecting voicemail')\n  [callStatuses.CONNECTING_VOICEMAIL]: 'Connecting voicemail',\n  // i18n.t('Voicemail reached')\n  [callStatuses.VOICEMAIL]: 'Voicemail reached',\n  // i18n.t('Transferring - Attended')\n  [callStatuses.ENTERED_WARM_TRANSFER]: 'Transferring - Attended',\n  // i18n.t('Connected')\n  [callStatuses.CONNECTED_WARM_TRANSFER]: 'Connected',\n  // i18n.t('Transferring - Drop off')\n  [callStatuses.DISCONNECTED_WARM_TRANSFER]: 'Transferring - Drop off',\n  // i18n.t('Connected')\n  [callStatuses.CONNECTED_VIRTUAL_ASSISTANT]: 'Connected',\n  // i18n.t('AI initiated', { context: 'AI receptionist initiated'})\n  [callStatuses.INIT_VIRTUAL_ASSISTANT]: 'AI initiated',\n  // i18n.t('Connecting')\n  [callStatuses.CONNECTING_VIRTUAL_ASSISTANT]: 'Connecting',\n  // i18n.t('Outcome')\n  [callStatuses.OUTCOME_VIRTUAL_ASSISTANT]: 'Outcome',\n  // i18n.t('Transferring - Blind')\n  [callStatuses.TRANSFER_VIRTUAL_ASSISTANT]: 'Transferring - Blind',\n  // i18n.t('Knowledge accessed')\n  [callStatuses.KNOWLEDGE_SEARCH_VIRTUAL_ASSISTANT]: 'Knowledge accessed',\n  // i18n.t('Info captured')\n  [callStatuses.INFO_CAPTURE_VIRTUAL_ASSISTANT]: 'Info captured',\n  // i18n.t('Scheduling - Booked')\n  [callStatuses.SCHEDULING_BOOKED_VIRTUAL_ASSISTANT]: 'Scheduling - Booked',\n  // i18n.t('Scheduling - Modified')\n  [callStatuses.SCHEDULING_MODIFIED_VIRTUAL_ASSISTANT]: 'Scheduling - Modified',\n  // i18n.t('Scheduling - Cancelled')\n  [callStatuses.SCHEDULING_CANCELLED_VIRTUAL_ASSISTANT]: 'Scheduling - Cancelled',\n  // i18n.t('Scheduling - Error')\n  [callStatuses.SCHEDULING_ERROR_VIRTUAL_ASSISTANT]: 'Scheduling - Error',\n  // i18n.t('Scheduling - Incomplete')\n  [callStatuses.SCHEDULING_INCOMPLETE_VIRTUAL_ASSISTANT]: 'Scheduling - Incomplete',\n  // i18n.t('Text sent')\n  [callStatuses.TEXT_MESSAGE_SENT_VIRTUAL_ASSISTANT]: 'Text sent',\n  // i18n.t('Directory referenced')\n  [callStatuses.DIRECTORY_SEARCH_VIRTUAL_ASSISTANT]: 'Directory referenced'\n};\n\nexport const extensionTypes = {\n  // i18n.t('Phone number')\n  PHONE_NUMBER: 'Phone number',\n  // i18n.t('Line')\n  LINE: 'Line',\n  // i18n.t('Call queue')\n  CALL_QUEUE: 'Call queue',\n  // i18n.t('Agent')\n  AGENT: 'Agent',\n  // i18n.t('Voicemail')\n  VOICEMAIL: 'Voicemail',\n  // i18n.t('Voicemail box')\n  VOICEMAIL_BOX: 'Voicemail box',\n  // i18n.t('Dial plan')\n  DIAL_PLAN: 'Dial plan',\n  // i18n.t('Conference bridge')\n  CONFERENCE_BRIDGE: 'Conference bridge',\n  // i18n.t('Ring group')\n  RING_GROUP: 'Ring group',\n  // i18n.t('Direct')\n  DIRECT: 'Direct',\n  // i18n.t('AI', { context: 'AI Receptionist'})\n  VIRTUAL_ASSISTANT: 'AI'\n};\n\nexport const leftQueueReasons = {\n  // i18n.t('Answered')\n  ANSWERED: 'Answered',\n  // i18n.t('Abandoned')\n  ABANDON: 'Abandoned',\n  // i18n.t('DTMF exit')\n  DTMF_EXIT: 'DTMF exit',\n  // i18n.t('Timeout')\n  TIMEOUT: 'Timeout',\n  // i18n.t('Left empty')\n  LEFT_EMPTY: 'Left empty',\n  // i18n.t('Joined empty')\n  JOINED_EMPTY: 'Joined empty',\n  // i18n.t('Queue full')\n  QUEUE_FULL: 'Queue full',\n  // i18n.t('Replace callback')\n  REPLACED_CALLBACK: 'Replace callback',\n  // i18n.t('Callback dispatched')\n  CALLBACK_DISPATCHED: 'Callback dispatched',\n  // i18n.t('Unknown')\n  UNKNOWN: 'Unknown',\n  // i18n.t('Answered elsewhere')\n  ANSWERED_ELSEWHERE: 'Answered elsewhere',\n  // i18n.t('Removed by supervisor')\n  REMOVED_BY_SUPERVISOR: 'Removed by supervisor',\n  // i18n.t('Entered another queue')\n  ENTERED_ANOTHER_QUEUE: 'Entered another queue',\n  // i18n.t('Transfer completed')\n  TRANSFER_COMPLETED: 'Transfer completed',\n  // i18n.t('Relocated')\n  RELOCATED: 'Relocated',\n  // i18n.t('Callback failed')\n  CALLBACK_FAILED: 'Callback failed'\n};\n\n/**\n * Outcomes\n * i18n.t('Outflowed Customer')\n * i18n.t('Outflowed System')\n * i18n.t('Outflowed User')\n * i18n.t('Callback Pending')\n * * */\nexport const outcomes = [\n  // i18n.t('Abandoned')\n  { key: 'abandoned', label: 'Abandoned', colorClass: 'background-color-red' },\n  // i18n.t('Handled')\n  { key: 'handled', label: 'Handled', colorClass: 'background-color-green' },\n  // i18n.t('Outflowed Customer')\n  { key: 'outflowed customer', label: 'Outflowed Customer', colorClass: 'background-color-yellow' },\n  // i18n.t('Outflowed System')\n  { key: 'outflowed system', label: 'Outflowed System', colorClass: 'background-color-purple' },\n  // i18n.t('Outflowed User')\n  { key: 'outflowed user', label: 'Outflowed User', colorClass: 'background-color-blue' },\n  // i18n.t('Timed out (legacy)')\n  { key: 'timedOut', label: 'Timed out (legacy)', colorClass: 'background-color-yellow' }\n];\n\nexport const voicemailStatuses = {\n  // i18n.t('Success', {context: 'Success to reach the voicemail'})\n  SUCCESS: 'Success',\n  // i18n.t('Failed', {context: 'Failed to reach the voicemail'})\n  FAILED: 'Failed'\n};\n\nexport const extensionDetails = {\n  // i18n.t('Pressed')\n  DIALED_OPTION: 'Pressed',\n  // i18n.t('Open')\n  OPEN_SCHEDULE: 'Open',\n  // i18n.t('Closed')\n  CLOSED_SCHEDULE: 'Closed',\n  // i18n.t('On holiday')\n  ON_HOLIDAY: 'On holiday'\n};\n\nexport const hangupDetails = {\n  // i18n.t('Recipient')\n  RECIPIENT: 'Recipient',\n  // i18n.t('Caller')\n  CALLER: 'Caller'\n};\n\nexport const satisfactionScoreLabels = {\n  // i18n.t('1 (Very dissatisfied)')\n  1: '1 (Very dissatisfied)',\n  // i18n.t('2 (Dissatisfied)')\n  2: '2 (Dissatisfied)',\n  // i18n.t('3 (Neutral)')\n  3: '3 (Neutral)',\n  // i18n.t('4 (Satisfied)')\n  4: '4 (Satisfied)',\n  // i18n.t('5 (Very satisfied)')\n  5: '5 (Very satisfied)'\n};\n\nexport const getSatisfactionScoreLabel = (score, t) => {\n  const label = satisfactionScoreLabels[score];\n  return label ? t(label) : t('Unknown');\n};\n\nexport const unknownType = 'Unknown';\n\nexport const inverseStatusIcons = ['CONNECTED', 'DISCONNECTING', 'WHISPERING', 'WRAP_UP'];\n\nexport const timeLineIgnoreStatusDuration = ['WRAP_UP'];\n\nexport const rotateStatusIcons = ['QUEUE'];\n\nexport const TRANSFERRER_NAME = 'transferrer_name';\nexport const TRANSFERRER_NUMBER = 'transferrer_number';\n\nexport const DESTINATION_NAME = 'destination_name';\nexport const DESTINATION_NUMBER = 'destination_number';\n\nexport const DESTINATION_TYPE = 'destination_type';\n","export const SENTIMENT_BUCKET = {\n  MOSTLY_POSITIVE: 'mostly-positive',\n  POSITIVE: 'positive',\n  SLIGHTLY_POSITIVE: 'slightly-positive',\n  NEUTRAL: 'neutral-positive',\n  SLIGHTLY_NEGATIVE: 'slightly-negative',\n  NEGATIVE: 'negative',\n  MOSTLY_NEGATIVE: 'mostly-negative'\n} as const;\nexport type SentimentBucket = (typeof SENTIMENT_BUCKET)[keyof typeof SENTIMENT_BUCKET];\n\nexport const OVERALL_SENTIMENT = {\n  NEGATIVE: 'NEGATIVE',\n  NEUTRAL: 'NEUTRAL',\n  POSITIVE: 'POSITIVE',\n  UNAVAILABLE: 'UNAVAILABLE'\n} as const;\nexport type OverallSentiment = (typeof OVERALL_SENTIMENT)[keyof typeof OVERALL_SENTIMENT];\n\nexport const ORDERED_SENTIMENT_BUCKETS = [\n  SENTIMENT_BUCKET.MOSTLY_NEGATIVE,\n  SENTIMENT_BUCKET.NEGATIVE,\n  SENTIMENT_BUCKET.SLIGHTLY_NEGATIVE,\n  SENTIMENT_BUCKET.NEUTRAL,\n  SENTIMENT_BUCKET.SLIGHTLY_POSITIVE,\n  SENTIMENT_BUCKET.POSITIVE,\n  SENTIMENT_BUCKET.MOSTLY_POSITIVE\n] as const;\nexport type OverallSentimentBuckets = (typeof ORDERED_SENTIMENT_BUCKETS)[keyof typeof ORDERED_SENTIMENT_BUCKETS];\n",".listItem{\n  gap: var(--goto-spacing-02);\n}\n\n.row {\n    flex-direction: row;\n    display: flex;\n    align-items: center;\n}\n\n.separator {\n  list-style: none;\n  border-right: 1px var(--goto-border-color-default) solid;\n  height: 92px;\n  margin: 0 var(--goto-spacing-04);\n}","import { Typography } from '@getgo/chameleon-web-react-wrapper';\nimport { ReactNode } from 'react';\nimport styles from './CallReportMetricListItem.module.css';\n\nexport interface CallReportMetricListItemProps {\n  title: string;\n  icon?: ReactNode;\n  children: ReactNode;\n  hasDivider?: boolean;\n}\n\nexport const CallReportMetricListItem = ({ title, icon, children, hasDivider }: CallReportMetricListItemProps) => {\n  return (\n    <>\n      <li className={styles.listItem}>\n        <span className={styles.row}>\n          {icon}\n          <Typography color=\"type-color-default\" variant=\"heading-small\">\n            {title}\n          </Typography>\n        </span>\n        <span className={styles.row}>{children}</span>\n      </li>\n      {hasDivider && <li className={styles.separator} role=\"separator\" aria-orientation=\"vertical\" />}\n    </>\n  );\n};\n",".callReportAiQMCard__multipleParticipants {\n    display: flex;\n    align-items: center;\n    flex-direction: row;\n    gap: var(--goto-spacing-01);\n    margin-right: var(--goto-spacing-01);\n}\n","import { TooltipWrapper } from '@analytics-common-ui/layout';\nimport { BadgeOutlinedIcon, GoPilotSparklesOutlinedIcon, PersonFilledIcon } from '@getgo/chameleon-icons/react';\nimport { Link, Typography } from '@getgo/chameleon-web-react-wrapper';\nimport { useTranslation } from 'react-i18next';\nimport { MIXPANEL_EVENT_NAME } from '../../../../constants/mixpanel';\nimport environment from '../../../../environments';\nimport useMixpanel from '../../../../hooks/useMixpanel';\nimport { CallReportMetricListItem } from '../CallReportMetricListItem/CallReportMetricListItem';\nimport { AiQMEvaluationScore, AiQmEvaluationScoreEntry } from '../CallReportSummary/CallReportSummary';\nimport styles from './CallReportAiQMCard.module.css';\n\nexport interface CallReportAiQMCardProps {\n  evaluationScore?: AiQMEvaluationScore;\n  showAIQMDetail: boolean;\n}\n\nexport const CallReportAiQMCard = ({ evaluationScore = {}, showAIQMDetail }: CallReportAiQMCardProps) => {\n  const { t } = useTranslation();\n  const participants: AiQmEvaluationScoreEntry[] = Object.values(evaluationScore);\n  const count = participants.length;\n\n  // Check if all scores are null/undefined\n  const participantsWithScore = participants.filter(entry => entry.score != null);\n  const hasAnyValidScore = participantsWithScore.length > 0;\n  const avgScore: number = hasAnyValidScore\n    ? participantsWithScore.reduce((sum, entry) => sum + entry.score!, 0) / participantsWithScore.length\n    : 0;\n\n  const mixpanelTrack = useMixpanel();\n\n  return (\n    <CallReportMetricListItem\n      title={count > 1 ? t('Avg QM score') : t('QM score')}\n      icon={<GoPilotSparklesOutlinedIcon size=\"24px\" />}>\n      {showAIQMDetail ? (\n        <>\n          <BadgeOutlinedIcon size=\"24px\" color=\"var(--goto-icon-color-success)\" />\n          {count > 1 && (\n            <div className={styles.callReportAiQMCard__multipleParticipants}>\n              <PersonFilledIcon size=\"18px\" />\n              <TooltipWrapper\n                title={\n                  <ul>\n                    {participants.map(entry => (\n                      <li key={entry.participant.userId}>\n                        {entry.score != null\n                          ? t(`{{number}} - {{name}}: {{score}}%`, {\n                              number: entry.participant.number,\n                              name: entry.participant.name,\n                              score: entry.score.toFixed(0)\n                            })\n                          : t(`{{number}} - {{name}}: - -`, {\n                              number: entry.participant.number,\n                              name: entry.participant.name\n                            })}\n                      </li>\n                    ))}\n                  </ul>\n                }>\n                <Typography variant=\"body-large-strong\">{`(${count})`}</Typography>\n              </TooltipWrapper>\n            </div>\n          )}\n          <Typography variant=\"body-large\" color=\"type-color-default\">\n            {!hasAnyValidScore ? '- -' : t(`{{score}}%`, { score: avgScore.toFixed(0) })}\n          </Typography>\n        </>\n      ) : (\n        <Link\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n          href={environment.support.urlAIQMScore}\n          onClick={() => {\n            void mixpanelTrack(MIXPANEL_EVENT_NAME.PLG_QM_UPSELL_INTERACTION, {\n              Action: `Clicked on learn more link`,\n              Component: 'CallReportAiQMCard'\n            });\n          }}\n          variant=\"body-large\">\n          {t('Learn more')}\n        </Link>\n      )}\n    </CallReportMetricListItem>\n  );\n};\n",".very-dissatisfied {\n  --goto-icon-color: var(--goto-icon-color-danger);\n}\n\n.dissatisfied {\n  --goto-icon-color: var(--goto-icon-color-warning);\n}\n\n.neutral {\n  --goto-icon-color: var(--goto-dataviz-color-purple-default);\n}\n\n.satisfied {\n  --goto-icon-color: var(--goto-dataviz-color-blue-default);\n}\n\n.very-satisfied {\n  --goto-icon-color: var(--goto-icon-color-success);\n}","import { StarOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { Typography } from '@getgo/chameleon-web-react-wrapper';\nimport { useTranslation } from 'react-i18next';\nimport { CallReportMetricListItem } from '../CallReportMetricListItem/CallReportMetricListItem';\nimport styles from './CallReportCSATCard.module.css';\n\nexport interface CallReportCSATCardProps {\n  csatScore: number;\n}\n\nconst TypographyColorMap: {\n  [key: string]: string;\n} = {\n  1: 'very-dissatisfied',\n  2: 'dissatisfied',\n  3: 'neutral',\n  4: 'satisfied',\n  5: 'very-satisfied'\n};\n\nexport const useSatisfactionScoreLabel = (csatScore: number) => {\n  const { t } = useTranslation();\n  const labels: { [key: number]: string } = {\n    1: t('1 : Very dissatisfied'),\n    2: t('2 : Dissatisfied'),\n    3: t('3 : Neutral'),\n    4: t('4 : Satisfied'),\n    5: t('5 : Very satisfied')\n  };\n  return labels[csatScore] || t('Unknown');\n};\n\nexport const CallReportCSATCard = ({ csatScore }: CallReportCSATCardProps) => {\n  const { t } = useTranslation();\n\n  const satisfactionScoreLabel = useSatisfactionScoreLabel(csatScore);\n\n  return (\n    <CallReportMetricListItem title={t('CSAT')}>\n      <StarOutlinedIcon size=\"24px\" class={styles[TypographyColorMap[csatScore]]} />\n      <Typography variant=\"body-large-strong\" color=\"type-color-default\">\n        {satisfactionScoreLabel}\n      </Typography>\n    </CallReportMetricListItem>\n  );\n};\n","import { EmojiHappyOutlinedIcon, EmojiNeutralOutlinedIcon, EmojiSadOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport PropTypes from 'prop-types';\nimport { OVERALL_SENTIMENT } from '../../../constants/sentiments';\n\nexport const SentimentIcon = ({ sentiment, className }) => {\n  switch (sentiment) {\n    case OVERALL_SENTIMENT.POSITIVE:\n      return <EmojiHappyOutlinedIcon class={className} color=\"var(--goto-icon-color-success)\" size=\"24px\" />;\n    case OVERALL_SENTIMENT.NEGATIVE:\n      return <EmojiSadOutlinedIcon class={className} color=\"var(--goto-icon-color-danger)\" size=\"24px\" />;\n    case OVERALL_SENTIMENT.NEUTRAL:\n      return <EmojiNeutralOutlinedIcon class={className} color=\"var(--goto-icon-color-disabled)\" size=\"24px\" />;\n    default:\n      return '\\u2014 \\u2014';\n  }\n};\n\nSentimentIcon.propTypes = {\n  /* Sentiment icon/color */\n  sentiment: PropTypes.oneOf([...Object.values(OVERALL_SENTIMENT), undefined])\n};\n",".negative {\n  --goto-icon-color: var(--goto-icon-color-danger);\n}\n\n.positive {\n    --goto-icon-color: var(--goto-icon-color-success);\n}\n\n.neutral {\n    --goto-icon-color: var(--goto-icon-color-secondary) !important;\n}","import { GoPilotSparklesOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { Link, Typography } from '@getgo/chameleon-web-react-wrapper';\nimport { useTranslation } from 'react-i18next';\nimport { MIXPANEL_EVENT_NAME } from '../../../../constants/mixpanel';\nimport { OVERALL_SENTIMENT, OverallSentiment } from '../../../../constants/sentiments';\nimport environment from '../../../../environments';\nimport useMixpanel from '../../../../hooks/useMixpanel';\nimport { SentimentIcon } from '../../../cc-boards/SentimentIcon/SentimentIcon';\nimport { CallReportMetricListItem } from '../CallReportMetricListItem/CallReportMetricListItem';\nimport styles from './CallReportSentimentCard.module.css';\n\nexport interface CallReportSentimentCardProps {\n  sentiment?: OverallSentiment;\n  showSentimentDetail: boolean;\n}\n\nconst TypographyColorMap: {\n  [key: string]: string;\n} = {\n  [OVERALL_SENTIMENT.NEGATIVE]: 'negative',\n  [OVERALL_SENTIMENT.POSITIVE]: 'positive',\n  [OVERALL_SENTIMENT.NEUTRAL]: 'neutral'\n};\n\nexport const CallReportSentimentCard = ({ sentiment, showSentimentDetail }: CallReportSentimentCardProps) => {\n  const { t } = useTranslation();\n\n  const mixpanelTrack = useMixpanel();\n\n  return (\n    <CallReportMetricListItem title={t('Sentiment')} icon={<GoPilotSparklesOutlinedIcon size=\"24px\" />}>\n      {showSentimentDetail && sentiment ? (\n        <>\n          <SentimentIcon sentiment={sentiment} className={styles[TypographyColorMap[sentiment]]} />\n          <Typography variant=\"body-large\" color=\"type-color-default\">\n            {getSentimentText(sentiment, t)}\n          </Typography>\n        </>\n      ) : (\n        <Link\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n          href={environment.support.urlAdvancedReporting}\n          onClick={() => {\n            void mixpanelTrack(MIXPANEL_EVENT_NAME.PLG_AR_UPSELL_INTERACTION, {\n              Action: `Clicked on learn more link`,\n              Component: 'CallReportSentimentCard'\n            });\n          }}\n          variant=\"body-large\">\n          {t('Learn more')}\n        </Link>\n      )}\n    </CallReportMetricListItem>\n  );\n};\n\nconst getSentimentText = (sentiment: OverallSentiment, t: (key: string) => string): string => {\n  switch (sentiment) {\n    case OVERALL_SENTIMENT.NEGATIVE:\n      return t('Negative');\n    case OVERALL_SENTIMENT.POSITIVE:\n      return t('Positive');\n    default:\n      return t('Neutral');\n  }\n};\n",".callReportTextCard__author {\n  display: flex;\n  align-items: center;\n  gap: var(--goto-spacing-02);\n  margin-bottom: var(--goto-spacing-02);\n}\n","import { GoPilotSparklesOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { Typography } from '@getgo/chameleon-web-react-wrapper';\nimport { GotoAvatar } from '@goto/shell-react-components';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport styles from './CallReportTextCard.module.scss';\n\nconst CallReportTextCard = ({ text, author, isFromAI }) => {\n  const { t } = useTranslation();\n\n  if (!text) {\n    return null;\n  }\n\n  return (\n    <div>\n      {(isFromAI || author) && (\n        <div className={styles.callReportTextCard__author}>\n          {isFromAI ? (\n            <>\n              <GoPilotSparklesOutlinedIcon size=\"24px\" />\n              <Typography tag=\"span\" variant=\"avatar-medium\">\n                {t('by AI')}\n              </Typography>\n            </>\n          ) : (\n            <>\n              <GotoAvatar\n                size=\"xsmall\"\n                externalUserKey={author.externalUserKey}\n                givenName={author.firstName}\n                familyName={author.lastName}\n              />\n              <Typography tag=\"span\" variant=\"avatar-medium\">\n                {t('by {{who}}', { who: `${author.firstName} ${author.lastName}` })}\n              </Typography>\n            </>\n          )}\n        </div>\n      )}\n      <Typography>{text}</Typography>\n    </div>\n  );\n};\n\nCallReportTextCard.propTypes = {\n  /** The text * */\n  text: PropTypes.string,\n\n  /** Author of the text. * */\n  author: PropTypes.shape({\n    externalUserKey: PropTypes.string,\n    firstName: PropTypes.string,\n    lastName: PropTypes.string\n  }),\n\n  /** Was the text generated by AI * */\n  isFromAI: PropTypes.bool\n};\n\nexport default CallReportTextCard;\n",".callReportSummary {\n  justify-content: flex-start;\n  border-radius: 8px;\n}\n\n.callReportSummary__details {\n  margin: 0;\n  padding: var(--goto-spacing-03) 0;\n  min-height: 450px;\n}\n\n.callReportSummary__horizontal_separator {\n  border-bottom: 1px var(--goto-border-color-default) solid;\n  margin: var(--goto-spacing-04) 0;\n}\n\n.callReportSummary__verticalSeparator {\n  border-right: 1px var(--goto-border-color-default) solid;\n  height: 92px;\n  margin: 0 var(--goto-spacing-04);\n}\n\n.callReportSummary__details__section {\n  border: 2px solid var(--goto-border-color-inverted);\n  border-radius: var(--goto-spacing-02);\n  padding: var(--goto-spacing-04) var(--goto-spacing-06);\n  margin-bottom: var(--goto-spacing-04);\n}\n\n.callReportSummary__pill {\n  --goto-type-color-default: var(--goto-type-color-inverted);\n  --goto-interactive-color-neutral-default: var(--goto-interactive-color-primary-default);\n  --goto-interactive-color-secondary-hover: var(--goto-interactive-color-primary-default);\n  --goto-interactive-color-neutral-hover: var(--goto-interactive-color-primary-default);\n  --goto-icon-color-default: var(--goto-type-color-inverted);\n\n  cursor: default;\n\n  &_white {\n    --goto-type-color-default: var(--goto-type-color);\n\n    cursor: default;\n  }\n\n  chameleon-svg {\n    --goto-icon-color: var(--goto-type-color-inverted);\n  }\n}\n\n.callReportSummary__list {\n  margin: 0;\n  list-style: none;\n  min-width: 200px;\n  display: flex;\n  align-items: center;\n  padding: 0;\n  height: 92px;\n\n  > li:not([role='separator']) {\n    display: flex;\n    flex-direction: column;\n    flex-basis: calc(100% / 3 - ((var(--goto-spacing-04) + 1px) * 2));\n\n    > span {\n      display: flex;\n      align-items: center;\n\n      > chameleon-svg {\n        margin-right: var(--goto-spacing-02);\n      }\n    }\n\n    > * {\n      display: inline;\n    }\n  }\n}\n\n.callReportSummary__verticalList {\n  padding: 0;\n\n  > li {\n    display: flex;\n    align-items: center;\n    margin-bottom: var(--goto-spacing-02);\n  }\n}\n\n.callReportSummary__round {\n  display: inline-block;\n  width: 0.5rem;\n  height: 0.5rem;\n  border-radius: 50%;\n  margin-right: var(--goto-spacing-01);\n}\n\n.callReportSummary__pillsList {\n  display: inline-flex !important;\n  gap: var(--goto-spacing-02);\n  flex-wrap: wrap;\n  margin-left: var(--goto-spacing-02);\n\n  --chip-max-width: 430px;\n}\n\n.callReportSummary__sentiment {\n  display: flex;\n  align-items: center;\n  margin-top: var(--goto-spacing-02);\n  margin-bottom: var(--goto-spacing-02);\n  gap: var(--goto-spacing-01);\n}\n\n.callReportSummary__sentimentIcon {\n  margin-right: var(--goto-spacing-02);\n}\n\n.callReportSummary__topics {\n  display: flex;\n  flex-direction: row;\n  margin-top: var(--goto-spacing-02);\n}\n\n.callReportSummary__topicsLabel {\n  flex-shrink: 0;\n}\n\n.callReportSummary__topicList {\n  display: flex;\n  flex-wrap: wrap;\n  min-width: 0;\n  gap: var(--goto-spacing-02);\n  margin-left: var(--goto-spacing-02);\n  margin-bottom: var(--goto-spacing-02);\n}\n\n.callReportSummary__topicPill {\n  overflow: hidden;\n}\n\n.callReportSummary__topicText {\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n","import { TooltipWrapper } from '@analytics-common-ui/layout';\nimport { formatDuration } from '@analytics-common-ui/utils';\nimport {\n  ClockOutlinedIcon,\n  GoPilotSparklesOutlinedIcon,\n  PersonOutlinedIcon,\n  PhoneIncomingOutlinedIcon,\n  TimeLimitOutlinedIcon,\n  TrendingOutlinedIcon,\n  VirtualReceptionistOutlinedIcon\n} from '@getgo/chameleon-icons/react';\nimport { Chip, Typography } from '@getgo/chameleon-web-react-wrapper';\nimport clsx from 'clsx';\nimport { isEmpty as _isEmpty } from 'lodash';\nimport { DateTime } from 'luxon';\nimport { Fragment, useState, useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector } from 'react-redux';\nimport { callDispositions } from '../../../../constants/call-dispositions';\nimport { outcomes } from '../../../../constants/call-report-modal';\nimport { PERMISSIONS } from '../../../../constants/permissions';\nimport { OVERALL_SENTIMENT, OverallSentiment } from '../../../../constants/sentiments';\nimport { ZINDEX } from '../../../../constants/z-index';\nimport { selectUserHasPermission } from '../../../../store/selectors/analytics';\nimport LocalizedDate from '../../LocalizedDate/LocalizedDate';\nimport { CallReportAiQMCard } from '../CallReportAiQMCard/CallReportAiQMCard';\nimport { CallReportCSATCard } from '../CallReportCSATCard/CallReportCSATCard';\nimport { CallReportMetricListItem } from '../CallReportMetricListItem/CallReportMetricListItem';\nimport { CallReportSentimentCard } from '../CallReportSentimentCard/CallReportSentimentCard';\nimport CallReportTextCard from '../CallReportTextCard/CallReportTextCard';\nimport styles from './CallReportSummary.module.scss';\n\nconst VISIBLE_TAG_COUNT = 2;\nexport type ParticipantType =\n  | 'PHONE_NUMBER'\n  | 'LINE'\n  | 'CALL_QUEUE'\n  | 'DIAL_PLAN'\n  | 'VOICEMAIL'\n  | 'VOICEMAIL_BOX'\n  | 'CONFERENCE_BRIDGE'\n  | 'RING_GROUP'\n  | 'VIRTUAL_PARTICIPANT'\n  | 'AGENT';\n\nexport interface CallParticipant {\n  id: string;\n  name?: string;\n  number?: string;\n  type?: ParticipantType;\n}\n\nexport type LastParticipantType = ParticipantType | 'VIRTUAL_PARTICIPANT';\n\nexport interface Tag {\n  id?: string;\n  name?: string;\n}\n\nexport interface Disposition {\n  id?: string;\n  name: string;\n  category: string;\n}\n\nexport interface TextSummaryAuthor {\n  externalUserKey?: string;\n  firstName?: string;\n  lastName?: string;\n}\n\nexport interface CsatScore {\n  result?: string;\n  score?: number;\n}\n\nexport interface AiQmEvaluationScoreParticipant {\n  number: string;\n  name: string;\n  type: string;\n  userId: string;\n}\n\nexport interface AiQmEvaluationScoreEntry {\n  score: number | null;\n  participant: AiQmEvaluationScoreParticipant;\n}\n\nexport type AiQMEvaluationScore = {\n  [id: string]: AiQmEvaluationScoreEntry;\n};\n\n/**\n * Main Props Type\n */\nexport interface CallReportSummaryProps {\n  /** The list of call's participants */\n  participants?: CallParticipant[];\n  /** The last participant */\n  lastParticipant?: CallParticipant;\n  /** The call start time */\n  callStarted?: string;\n  /** The call end time */\n  callEnded?: string;\n  /** The call duration in milliseconds */\n  durationMs: number;\n  /** The call outcome */\n  outcome: string;\n  /** The list of tags */\n  tags?: Tag[];\n  /** Call disposition */\n  disposition?: Disposition;\n  /** Text representation of the Call Summary */\n  textSummary?: string;\n  /** The Agent who has edited the textSummary. If null, textSummary was never edited */\n  textSummaryAuthor?: TextSummaryAuthor | null;\n  /** Detected Sentiment for the call */\n  sentiment?: OverallSentiment;\n  /** List of detected Topics for the call */\n  topics?: string[];\n  /** CSAT satisfaction score object with result and score */\n  csatScore?: CsatScore;\n  /** Indicates if the call is a queue call */\n  isQueueCall?: boolean;\n  /** AI QM Evaluation Score, key is e.g. \"1\", \"2\", etc. */\n  aiqmEvaluationScore?: AiQMEvaluationScore;\n  /** Permissions for various features */\n  permissions?: {\n    aiSentiment: boolean;\n    aiQM: boolean;\n  };\n}\n\nconst DEFAULT_PERMISSIONS = {\n  aiSentiment: false,\n  aiQM: false\n};\n\nconst CallReportSummary = ({\n  callStarted,\n  callEnded,\n  durationMs,\n  outcome,\n  tags,\n  participants,\n  lastParticipant,\n  disposition: customDisposition,\n  textSummary,\n  textSummaryAuthor,\n  sentiment,\n  topics,\n  csatScore,\n  isQueueCall = true,\n  aiqmEvaluationScore,\n  permissions = DEFAULT_PERMISSIONS\n}: CallReportSummaryProps) => {\n  const { t } = useTranslation();\n  const hasPermission = useSelector(selectUserHasPermission);\n  const { aiQM: aiQMPermission, aiSentiment: aiSentimentPermission } = permissions;\n  const [allParticipantsVisible, setAllParticipantsVisible] = useState(false);\n  const [allTagsVisible, setAllTagsVisible] = useState(false);\n  // legacy support for disposition; when name isnt present, display it based on the local collection\n  const disposition = customDisposition?.name\n    ? customDisposition\n    : callDispositions.find(d => d.id === customDisposition?.id);\n  const maxParticipants = 5;\n\n  const satisfactionScore = useMemo(() => {\n    if (csatScore?.result === 'ANSWERED' && csatScore.score) {\n      return csatScore.score;\n    }\n    return undefined;\n  }, [csatScore]);\n\n  const formatOutcome = (callOutcome: string) => {\n    const parsedOutcome = outcomes.find(el => el.key === callOutcome);\n\n    if (parsedOutcome) {\n      return (\n        <>\n          <span className={clsx(styles.callReportSummary__round, parsedOutcome.colorClass)} />\n          {t(parsedOutcome.label)}\n        </>\n      );\n    }\n\n    return (\n      <>\n        <span className={clsx(styles.callReportSummary__round, 'background-color-purple')} />\n        {t(callOutcome)}\n      </>\n    );\n  };\n\n  const getParticipantPill = (participant: CallParticipant, key: string) => {\n    let icon;\n    let participantName;\n    switch (participant.type) {\n      case 'PHONE_NUMBER':\n        icon = <PhoneIncomingOutlinedIcon />;\n        participantName =\n          participant.name && participant.name !== participant.number\n            ? `${participant.number}: ${participant.name}`\n            : participant.number;\n        break;\n      case 'VIRTUAL_PARTICIPANT':\n        icon = <VirtualReceptionistOutlinedIcon />;\n        participantName = participant.name;\n        break;\n      case 'AGENT':\n      default:\n        icon = <PersonOutlinedIcon />;\n        participantName = participant.name;\n    }\n    return (\n      <Chip size=\"small\" key={key} className={styles.callReportSummary__pill} avatar={icon}>\n        {participantName}\n      </Chip>\n    );\n  };\n\n  const isSummaryCardEmpty = _isEmpty(textSummary) && _isEmpty(topics);\n\n  const showSentiment =\n    (aiSentimentPermission && !_isEmpty(sentiment) && sentiment !== OVERALL_SENTIMENT.UNAVAILABLE) ||\n    (!aiSentimentPermission && _isEmpty(sentiment));\n\n  const showAIQM =\n    (aiQMPermission && !_isEmpty(aiqmEvaluationScore)) || (!aiQMPermission && _isEmpty(aiqmEvaluationScore));\n\n  const showCSAT = !_isEmpty(csatScore);\n\n  const metricCardItems = [\n    showSentiment && (\n      <CallReportSentimentCard key=\"sentiment\" sentiment={sentiment} showSentimentDetail={aiSentimentPermission} />\n    ),\n    showCSAT && satisfactionScore && <CallReportCSATCard key=\"csat\" csatScore={satisfactionScore} />,\n    showAIQM && <CallReportAiQMCard key=\"aiqm\" evaluationScore={aiqmEvaluationScore} showAIQMDetail={aiQMPermission} />\n  ].filter(Boolean);\n\n  return (\n    <div className={styles.callReportSummary}>\n      <div className={styles.callReportSummary__details}>\n        {!isSummaryCardEmpty && (\n          <div className={styles.callReportSummary__details__section}>\n            {!_isEmpty(textSummary) && (\n              <div data-testid=\"summary-card\">\n                <CallReportTextCard text={textSummary} author={textSummaryAuthor} isFromAI={!textSummaryAuthor} />\n              </div>\n            )}\n            {!_isEmpty(topics) && (\n              <div className={styles.callReportSummary__topics} data-testid=\"summary-topics\">\n                <Typography\n                  className={styles.callReportSummary__topicsLabel}\n                  color=\"type-color-default\"\n                  variant=\"body-small-strong\"\n                >\n                  {t('Topics:')}\n                </Typography>\n                <div className={styles.callReportSummary__topicList}>\n                  {topics?.map((topic, i) => (\n                    <Chip size=\"small\" key={`topic-${i.toString()}`} className={styles.callReportSummary__topicPill}>\n                      <TooltipWrapper maxWidth={300} title={<>{topic}</>}>\n                        <div className={styles.callReportSummary__topicText}>{topic}</div>\n                      </TooltipWrapper>\n                    </Chip>\n                  ))}\n                </div>\n              </div>\n            )}\n          </div>\n        )}\n        {!!metricCardItems.length && (\n          <div className={styles.callReportSummary__details__section}>\n            <ul className={styles.callReportSummary__list}>\n              {metricCardItems.map((item, idx) => (\n                <Fragment key={`call-report-card-${idx.toString()}`}>\n                  {item}\n                  {idx < metricCardItems.length - 1 && <div className={styles.callReportSummary__verticalSeparator} />}\n                </Fragment>\n              ))}\n            </ul>\n          </div>\n        )}\n        <div className={styles.callReportSummary__details__section}>\n          <ul className={styles.callReportSummary__list}>\n            <CallReportMetricListItem title={t('Time')} icon={<ClockOutlinedIcon size=\"24px\" />} hasDivider>\n              <Typography variant=\"body-small\">\n                <LocalizedDate date={callStarted} format={DateTime.TIME_SIMPLE} />\n                &nbsp;-&nbsp;\n                <LocalizedDate date={callEnded} format={DateTime.TIME_SIMPLE} />\n              </Typography>\n            </CallReportMetricListItem>\n            <CallReportMetricListItem title={t('Duration')} icon={<TimeLimitOutlinedIcon size=\"24px\" />} hasDivider>\n              <Typography variant=\"body-small\">{formatDuration(durationMs)}</Typography>\n            </CallReportMetricListItem>\n            {isQueueCall && (\n              <CallReportMetricListItem title={t('Outcome')} icon={<TrendingOutlinedIcon size=\"24px\" />}>\n                <Typography variant=\"body-small\">{formatOutcome(outcome)}</Typography>\n              </CallReportMetricListItem>\n            )}\n          </ul>\n        </div>\n        <div className={styles.callReportSummary__details__section}>\n          <ul className={styles.callReportSummary__verticalList}>\n            <li>\n              <Typography color=\"type-color-default\" variant=\"body-small-strong\">\n                {t('Participants:')}\n              </Typography>\n              <div className={styles.callReportSummary__pillsList}>\n                {participants\n                  ?.slice(0, allParticipantsVisible ? participants.length : maxParticipants)\n                  .map((participant, i) => getParticipantPill(participant, `participant-${i.toString()}`))}\n                {!allParticipantsVisible && participants && participants.length > maxParticipants && (\n                  <TooltipWrapper title={t('View all participants')} zIndex={ZINDEX.TOOLTIP}>\n                    <Chip\n                      aria-label={t('View all participants')}\n                      onClick={() => setAllParticipantsVisible(true)}\n                      size=\"small\"\n                      className={styles.callReportSummary__pill}\n                    >\n                      {t('+{{numberOfUsers}} more', {\n                        numberOfUsers: participants.length - maxParticipants,\n                        count: participants.length - maxParticipants\n                      })}\n                    </Chip>\n                  </TooltipWrapper>\n                )}\n              </div>\n            </li>\n            <>\n              {isQueueCall && (\n                <li>\n                  <Typography color=\"type-color-default\" variant=\"body-small-strong\">\n                    {t('Last agent in the call:')}\n                  </Typography>\n                  <div className={styles.callReportSummary__pillsList}>\n                    {lastParticipant && getParticipantPill(lastParticipant, lastParticipant.id)}\n                  </div>\n                </li>\n              )}\n              <div className={styles.callReportSummary__horizontal_separator} />\n              <li>\n                {hasPermission(PERMISSIONS.VOICE_AI_DISPOSITION) && (\n                  <GoPilotSparklesOutlinedIcon size=\"16px\" style={{ marginRight: 'var(--goto-spacing-02)' }} />\n                )}\n                <Typography color=\"type-color-default\" variant=\"body-small-strong\">\n                  {t('Disposition:')}\n                </Typography>\n                <Typography variant=\"body-small\">\n                  <div className={styles.callReportSummary__pillsList}>\n                    {disposition && (\n                      <Chip size=\"small\" className={styles.callReportSummary__pill_white}>\n                        {t(disposition.category)} - {t(disposition.name)}\n                      </Chip>\n                    )}\n                  </div>\n                </Typography>\n              </li>\n\n              <li>\n                {hasPermission(PERMISSIONS.VOICE_AI_TAGS) && (\n                  <GoPilotSparklesOutlinedIcon size=\"16px\" style={{ marginRight: 'var(--goto-spacing-02)' }} />\n                )}\n                <Typography color=\"type-color-default\" variant=\"body-small-strong\">\n                  {t('Tags:')}\n                </Typography>\n                <Typography variant=\"body-small\">\n                  <div className={styles.callReportSummary__pillsList}>\n                    {tags?.slice(0, allTagsVisible ? tags.length : VISIBLE_TAG_COUNT).map(tag => (\n                      <Chip size=\"small\" key={tag.id} className={styles.callReportSummary__pill_white}>\n                        {tag.name}\n                      </Chip>\n                    ))}\n                    {!allTagsVisible && tags && tags.length > VISIBLE_TAG_COUNT && (\n                      <TooltipWrapper title={t('View all tags')} zIndex={ZINDEX.TOOLTIP}>\n                        <Chip\n                          aria-label={t('View all tags')}\n                          onClick={() => setAllTagsVisible(true)}\n                          size=\"small\"\n                          type=\"button\"\n                          className={styles.callReportSummary__pill_white}\n                        >\n                          {t('+{{numberOfTags}} more', {\n                            numberOfTags: tags.length - VISIBLE_TAG_COUNT,\n                            count: tags.length - VISIBLE_TAG_COUNT\n                          })}\n                        </Chip>\n                      </TooltipWrapper>\n                    )}\n                  </div>\n                </Typography>\n              </li>\n            </>\n          </ul>\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport default CallReportSummary;\n",".callReportModal__exportButton:disabled::part(control) {\n  --goto-icon-color: var(--goto-icon-color-disabled);\n}\n","import { DownloadOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { IconButton, Tooltip } from '@getgo/chameleon-web-react-wrapper';\nimport PropTypes from 'prop-types';\nimport { useCallback, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector } from 'react-redux';\nimport { downloadFileFromLink } from '../../../../utils/file.util';\nimport { MIXPANEL_EVENT_NAME } from '../../../../constants/mixpanel.ts';\nimport useMixpanel from '../../../../hooks/useMixpanel.ts';\nimport { ExportModal } from '@analytics-common-ui/core';\nimport { selectCurrentOrganizationId, selectFeatureFlag } from '../../../../store/selectors/analytics';\nimport { FEATURE_FLAGS } from '../../../../utils/feature-flag';\nimport { recordingPropType } from '../../../../utils/prop-types.util';\nimport styles from './CallReportExportButton.module.scss';\nimport {\n  getCallReportExportFile,\n  getRecordingUrlFromId,\n  getTranscriptExportFile\n} from '../../../../services/common/call-report.service';\nimport { Snackbar } from '../../../../utils/snackbar';\n\nconst MIXPANEL_EVENT_COMPONENT = 'CallReportExport';\n\nconst CallReportExportButton = ({\n  conversationId,\n  legId,\n  startTime,\n  recording,\n  hasInteractionDetails,\n  disabled,\n  modalTitle,\n  callerNumber\n}) => {\n  const { t } = useTranslation();\n  const mixpanelTrack = useMixpanel();\n  const [exportModalOpen, setExportModalOpen] = useState(false);\n  const [isExportDisabled, setIsExportDisabled] = useState(disabled);\n  const organizationId = useSelector(selectCurrentOrganizationId);\n  const hasFeatureFlag = useSelector(selectFeatureFlag);\n  const [exportLoading, setExportLoading] = useState(false);\n\n  const handleCloseModal = () => {\n    setExportModalOpen(false);\n  };\n\n  const handleExportOpen = () => {\n    mixpanelTrack(MIXPANEL_EVENT_NAME.CONVERSATION_DETAIL, {\n      Action: 'Clicked on open export dialog',\n      Component: MIXPANEL_EVENT_COMPONENT\n    });\n    setExportModalOpen(true);\n  };\n\n  const handleExportClose = () => {\n    mixpanelTrack(MIXPANEL_EVENT_NAME.CONVERSATION_DETAIL, {\n      Action: 'Clicked on close export dialog',\n      Component: MIXPANEL_EVENT_COMPONENT\n    });\n    handleCloseModal();\n  };\n\n  const handleCsvExport = useCallback(\n    async optionNames => {\n      setExportLoading(true);\n      handleCloseModal();\n\n      const callDetailsChecked = optionNames.includes('callDetails');\n      const transcriptionChecked = optionNames.includes('transcription');\n\n      const controller = new AbortController();\n      try {\n        if (callDetailsChecked) {\n          mixpanelTrack(MIXPANEL_EVENT_NAME.CONVERSATION_DETAIL, {\n            Action: 'Clicked on export call report file',\n            Component: MIXPANEL_EVENT_COMPONENT,\n            Type: 'CSV_FILE'\n          });\n          getCallReportExportFile(organizationId, legId, conversationId, startTime, controller, t, setExportLoading);\n        }\n\n        if (transcriptionChecked && recording?.id) {\n          mixpanelTrack(MIXPANEL_EVENT_NAME.CONVERSATION_DETAIL, {\n            Action: 'Clicked on export transcript file',\n            Component: MIXPANEL_EVENT_COMPONENT,\n            Type: 'CSV_FILE'\n          });\n          const transcriptController = new AbortController();\n          getTranscriptExportFile(\n            organizationId,\n            recording.id,\n            callerNumber,\n            transcriptController,\n            t,\n            setExportLoading,\n            conversationId\n          );\n        }\n\n        if (!callDetailsChecked && !transcriptionChecked) {\n          setExportLoading(false);\n        }\n      } catch (error) {\n        console.error(error);\n        Snackbar.showStatus(t('Export failed.'));\n        setExportLoading(false);\n      }\n    },\n    [callerNumber, conversationId, legId, mixpanelTrack, organizationId, recording?.id, startTime, t]\n  );\n\n  const handleAudioExport = useCallback(async () => {\n    setExportLoading(true);\n    handleCloseModal();\n\n    const controller = new AbortController();\n    try {\n      mixpanelTrack(MIXPANEL_EVENT_NAME.CONVERSATION_DETAIL, {\n        Action: 'Clicked on download recording file',\n        Component: MIXPANEL_EVENT_COMPONENT,\n        Type: 'AUDIO_FILE'\n      });\n\n      const recordingUrl = await getRecordingUrlFromId(organizationId, recording.id, conversationId, controller);\n      downloadFileFromLink(recordingUrl);\n      setExportLoading(false);\n      Snackbar.showStatus(t('Your recording download is complete.'));\n    } catch (error) {\n      console.error(error);\n      Snackbar.showStatus(t('Recording download failed.'));\n      setExportLoading(false);\n    }\n  }, [conversationId, mixpanelTrack, organizationId, recording?.id, t]);\n\n  const csvConfig = !hasInteractionDetails\n    ? undefined\n    : {\n        handleExport: handleCsvExport,\n        options: [\n          { name: 'callDetails', label: t('Call details') },\n          ...(recording?.transcriptEnabled ? [{ name: 'transcription', label: t('Call transcription') }] : [])\n        ],\n        defaultSelected: ['callDetails'],\n        message: t('Details will export to a single CSV file.')\n      };\n\n  const audioConfig = !recording?.id\n    ? undefined\n    : {\n        handleExport: handleAudioExport,\n        options: [{ name: recording.id, label: recording.label ?? t('Recording') }],\n        defaultSelected: [recording.id],\n        message: t('Please note that each recording will be exported as an individual playable MP3 file.')\n      };\n\n  useEffect(() => {\n    setIsExportDisabled(disabled || exportModalOpen || !(hasInteractionDetails || recording?.id));\n  }, [disabled, exportModalOpen, recording, hasInteractionDetails]);\n\n  return (\n    <>\n      <IconButton\n        id=\"export-conversation-detail\"\n        className={styles.callReportModal__exportButton}\n        label={t('Export conversation detail')}\n        size=\"small\"\n        isLoading={exportLoading}\n        disabled={isExportDisabled}\n        onClick={handleExportOpen}>\n        <DownloadOutlinedIcon />\n      </IconButton>\n      <Tooltip triggerId=\"export-conversation-detail\" position=\"top-center\">\n        {t('Export conversation detail')}\n      </Tooltip>\n\n      {exportModalOpen && (\n        <ExportModal\n          title={t('Export: Details for {{context}}', { context: modalTitle ?? '' })}\n          showTzComingSoonMessage={!hasFeatureFlag(FEATURE_FLAGS.CSV_EXPORT_STANDARDIZATION)}\n          open={exportModalOpen}\n          onClose={handleExportClose}\n          csv={csvConfig}\n          audio={audioConfig}\n        />\n      )}\n    </>\n  );\n};\n\nCallReportExportButton.propTypes = {\n  conversationId: PropTypes.string,\n  legId: PropTypes.string,\n  startTime: PropTypes.string,\n  recording: recordingPropType,\n  hasInteractionDetails: PropTypes.bool,\n  disabled: PropTypes.bool,\n  modalTitle: PropTypes.string,\n  callerNumber: PropTypes.string\n};\nexport default CallReportExportButton;\n",".callReportModal__copyCheckmark {\n  chameleon-svg {\n    --goto-icon-color: var(--goto-icon-color-success);\n  }\n}","import { CopyOutlinedIcon, CheckmarkOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { IconButton, Tooltip } from '@getgo/chameleon-web-react-wrapper';\nimport { useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector } from 'react-redux';\nimport { dashboardTypes } from '../../../../configs/dashboard.config';\nimport { MIXPANEL_EVENT_NAME } from '../../../../constants/mixpanel';\nimport useMixpanel from '../../../../hooks/useMixpanel';\nimport { selectCurrentDashboard } from '../../../../store/selectors/analytics';\nimport { Snackbar } from '../../../../utils/snackbar';\nimport styles from './CallReportOverviewLink.module.scss';\n\nconst CallReportOverviewLinkButton = () => {\n  const { t } = useTranslation();\n  const [overviewLink, setOverviewLink] = useState(false);\n  const dashboard = useSelector(selectCurrentDashboard);\n  const mixpanelTrack = useMixpanel();\n\n  const MIXPANEL_EVENT_COMPONENT = 'CallReportOverviewLinkButton';\n\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  const handleCopyLink = async () => {\n    try {\n      const eventData = {\n        Action: 'Clicked copy URL',\n        Component: MIXPANEL_EVENT_COMPONENT\n      };\n      setOverviewLink(true);\n      await mixpanelTrack(MIXPANEL_EVENT_NAME.CONVERSATION_DETAIL, eventData);\n      await navigator.clipboard.writeText(window.location.href);\n      setTimeout(() => {\n        setOverviewLink(false);\n      }, 1500);\n      Snackbar.showStatusWithSubtext(t('Overview URL copied'), t('You can share it with your team now'));\n    } catch (e) {\n      console.error(e);\n    }\n  };\n\n  const copyButton = useMemo(() => {\n    if (dashboard?.type === dashboardTypes.CALL_REPORTS) {\n      if (overviewLink) {\n        return (\n          <>\n            <IconButton\n              id=\"link-copied\"\n              label={t('Link copied')}\n              className={styles.callReportModal__copyCheckmark}\n              size=\"small\">\n              <CheckmarkOutlinedIcon />\n            </IconButton>\n            <Tooltip triggerId=\"link-copied\" position=\"top-center\">\n              <div>{t('Overview URL copied')}</div>\n              {t('You can share it with your team')}\n            </Tooltip>\n          </>\n        );\n      } else {\n        return (\n          <>\n            <IconButton\n              id=\"copy-link\"\n              label={t('Copy link')}\n              size=\"small\"\n              onClick={() => {\n                void (async () => {\n                  await handleCopyLink();\n                })();\n              }}>\n              <CopyOutlinedIcon />\n            </IconButton>\n            <Tooltip triggerId=\"copy-link\" position=\"top-center\">\n              {t('Copy interaction link')}\n            </Tooltip>\n          </>\n        );\n      }\n    }\n  }, [overviewLink, dashboard?.type, handleCopyLink, t]);\n\n  return <>{copyButton}</>;\n};\n\nexport default CallReportOverviewLinkButton;\n",".callReportNotes__container {\n  display: flex;\n  flex-direction: column;\n  row-gap: var(--goto-spacing-02);\n}\n\n.callReportNotes__item {\n  background-color: var(--goto-background-color-secondary);\n  padding: var(--goto-spacing-04);\n  border-radius: var(--goto-radius-medium);\n  box-shadow: var(--goto-elevation-medium);\n}\n","import PropTypes from 'prop-types';\nimport { isEmpty as _isEmpty } from 'lodash';\nimport styles from './CallReportNotes.module.scss';\nimport CallReportTextCard from '../CallReportTextCard/CallReportTextCard';\n\nconst CallReportNotes = ({ note, noteAuthor, summary, summaryAuthor }) => (\n  <div className={styles.callReportNotes__container}>\n    {!_isEmpty(note) && (\n      <div className={styles.callReportNotes__item} data-testid=\"notes-item-note\">\n        <CallReportTextCard text={note} author={noteAuthor} isFromAI={false} />\n      </div>\n    )}\n    {!_isEmpty(summary) && (\n      <div className={styles.callReportNotes__item} data-testid=\"notes-item-summary\">\n        <CallReportTextCard text={summary} author={summaryAuthor} isFromAI={!summaryAuthor} />\n      </div>\n    )}\n  </div>\n);\n\nCallReportNotes.propTypes = {\n  /** The text of the note * */\n  note: PropTypes.string,\n\n  /** Author of the note * */\n  noteAuthor: PropTypes.shape({\n    externalUserKey: PropTypes.string,\n    firstName: PropTypes.string,\n    lastName: PropTypes.string\n  }),\n\n  /** The text of the summary * */\n  summary: PropTypes.string,\n\n  /** Author of the summary * */\n  summaryAuthor: PropTypes.shape({\n    externalUserKey: PropTypes.string,\n    firstName: PropTypes.string,\n    lastName: PropTypes.string\n  })\n};\n\nexport default CallReportNotes;\n","td {\n  position: relative;\n}\n\n.callReportDetail__container {\n  display: flex;\n  gap: 0.5em;\n  align-items: center;\n}\n\n.callReportDetail__timelineWrapper {\n  width: 100%;\n  overflow-y: auto;\n  padding: var(--goto-spacing-01) 0 var(--goto-spacing-02) 0;\n  margin: var(--goto-spacing-01) 0 var(--goto-spacing-02) 0;\n}\n\n.callReportDetail__icon {\n  margin-left: 7px;\n  z-index: 0;\n}\n\n// Connected, Listening, Whispering, Handled\n.callReportDetail__green400 {\n  chameleon-svg {\n    --goto-icon-color: var(--goto-badge-color-voice);\n  }\n}\n\n// On hold, Parked\n.callReportDetail__yellow400 {\n  chameleon-svg {\n    --goto-icon-color: var(--goto-yellow-400);\n  }\n}\n\n// Ringing, virtual assistant\n.callReportDetail__purple500 {\n  chameleon-svg {\n    --goto-icon-color: var(--goto-purple-500);\n  }\n}\n\n// Transferring, Hangup, Wrap up\n.callReportDetail__blue300 {\n  chameleon-svg {\n    --goto-icon-color: var(--goto-blue-300);\n  }\n}\n\n// Warm transfer\n.callReportDetail__orange400 {\n  chameleon-svg {\n    --goto-icon-color: var(--goto-orange-400);\n  }\n}\n\n// Abandoned, Disconnecting, Drop off\n.callReportDetail__red500 {\n  chameleon-svg {\n    --goto-icon-color: var(--goto-red-500);\n  }\n}\n\n// Abandoned, Disconnecting, Drop off\n.callReportDetail__default {\n  chameleon-svg {\n    --goto-icon-color: var(--goto-interactive-color-primary-default);\n  }\n}\n\n// Unknown\n.callReportDetail__unknown {\n  chameleon-svg {\n    --goto-icon-color: var(--goto-badge-color-disabled);\n  }\n}\n\n.callReportDetail__iconRotate {\n  transform: rotate(90deg);\n}\n\n.callReportDetail__iconAxisX {\n  transform: scaleX(-1);\n}\n\n.callReportDetail__tableWrapper {\n  margin-bottom: var(--goto-spacing-11);\n\n  > table {\n    width: 100%;\n  }\n}\n\n.callReportDetail__table {\n  font: var(--goto-body-small);\n  color: var(--goto-type-color-default);\n  min-height: 350px;\n  max-height: 350px;\n\n  > table {\n    width: 100%;\n  }\n}\n\n.callReportDetail__tablePagination {\n  width: 100%;\n  bottom: 0;\n  max-height: var(--goto-spacing-05);\n}\n\n.callReportDetail__groupIcon {\n  background-color: var(--goto-yellow-400);\n}\n\n.callReportDetail__groupContainer {\n  display: flex;\n  gap: 0.5em;\n  align-items: center;\n  top: 0;\n  height: 100%;\n}\n\n.callReportDetail__groupClickableOverlay {\n  position: absolute;\n  width: 30px;\n  height: 100%;\n  cursor: pointer;\n  z-index: 1;\n}\n\n.callReportDetail__groupIconsDefaultColor {\n  chameleon-svg {\n    --goto-icon-color: var(--goto-surface-color-persistent);\n  }\n}\n\n.callReportDetail__groupIconsPersistentColor {\n  chameleon-svg {\n    --goto-icon-color: var(--goto-icon-color-persistent);\n  }\n}\n\n.callReportDetail__groupContainer::before {\n  content: '';\n  width: 30px;\n  height: 100%;\n  position: absolute;\n}\n\n.callReportDetail__dialPlan::before {\n  background-color: var(--goto-surface-color-warning-default);\n}\n\n.callReportDetail__warmTransfer::before {\n  background-color: var(--goto-badge-color-meeting);\n}\n\n.callReportDetail__virtualAssistant::before {\n  background-color: var(--goto-purple-500);\n}\n\n.callReportDetail__groupFirstElement::before {\n  border-top-right-radius: var(--goto-radius-circle);\n  border-top-left-radius: var(--goto-radius-circle);\n}\n\n.callReportDetail__groupCollapsed::before {\n  border-radius: var(--goto-radius-circle);\n  height: 30px;\n  width: 30px;\n}\n\n.callReportDetail__groupLastElement::before {\n  border-bottom-right-radius: var(--goto-radius-circle);\n  border-bottom-left-radius: var(--goto-radius-circle);\n}\n\n.callReportDetail__tooltip {\n  font: var(--goto-body-small);\n  color: var(--goto-type-color-brand-default);\n  display: inline-flex;\n\n  &:hover {\n    cursor: pointer;\n    color: var(--goto-interactive-color-persistent-active);\n\n    --goto-icon-color: var(--goto-interactive-color-persistent-active);\n\n    background-color: var(--goto-interactive-color-persistent-pressed);\n    border-radius: var(--goto-radius-large);\n    padding: 0 var(--goto-spacing-03);\n    margin: 0 calc(var(--goto-spacing-03) * -1);\n  }\n}\n",".callReportsTimeline {\n  display: flex;\n  height: 16px;\n  margin: var(--goto-layout-01);\n}\n\n.callReportsTimeline__timelineIcon {\n  display: flex;\n  min-width: 26px;\n  position: relative;\n}\n\n.callReportsTimeline__groupTimeline {\n  display: flex;\n  height: 16px;\n}\n\n.callReportsTimeline__iconAxisX {\n  chameleon-svg {\n    transform: scaleX(-1);\n  }\n}\n\n.callReportsTimeline__iconRotate {\n  chameleon-svg {\n    transform: rotate(90deg);\n  }\n}\n",".callReportsTimelineIcon__iconContainer {\n  position: absolute;\n  display: flex;\n  align-items: center;\n  top: -7px;\n  left: -2px;\n}\n\n.callReportsTimelineIcon__iconShape {\n  display: flex;\n  width: 30px;\n  height: 30px;\n  border-radius: 50%;\n  border: 3px solid transparent;\n  justify-content: center;\n  align-items: center;\n  background-color: var(--goto-background-color-default);\n}\n\n.callReportsTimelineGroupIcon__iconShape {\n  display: flex;\n  width: 30px;\n  height: 30px;\n  border: 3px solid transparent;\n  justify-content: center;\n  align-items: center;\n}\n\n.callReportsTimelineGroupIcon__groupFirstElement {\n  border-top-left-radius: 45%;\n  border-bottom-left-radius: 45%;\n}\n\n.callReportsTimelineGroupIcon__groupLastElement {\n  border-top-right-radius: 45%;\n  border-bottom-right-radius: 45%;\n}\n\n.callReportsTimelineIcon__iconAxisX {\n  chameleon-svg {\n    transform: scaleX(-1);\n  }\n}\n\n.callReportsTimelineIcon__iconRotate {\n  chameleon-svg {\n    transform: rotate(90deg);\n  }\n}\n\n.callReportsTimelineIcon__groupIconsDefaultColor {\n  chameleon-svg {\n    --goto-icon-color: var(--goto-surface-color-persistent);\n  }\n}\n\n.callReportsTimelineIcon__groupIconsInvertedColor {\n  chameleon-svg {\n    --goto-icon-color: var(--goto-surface-color-persistent);\n  }\n}\n","import { TooltipWrapper } from '@analytics-common-ui/layout';\nimport clsx from 'clsx';\nimport { isEmpty as _isEmpty } from 'lodash';\nimport React from 'react';\nimport { groupTypes } from '../../../../types/CallReport';\nimport styles from './CallReportsTimelineIcon.module.scss';\n\nexport type CallReportsTimelineIconParams = {\n  icon: React.ReactNode;\n  circleColor: string;\n  group?: string;\n  isFirstGroupElement?: boolean;\n  isLastGroupElement?: boolean;\n  /** The icon's tooltip content */\n  tooltipContent?: string | React.ReactNode;\n  iconColor?: string;\n};\n\nconst CallReportsTimelineIcon = ({\n  icon,\n  circleColor,\n  tooltipContent,\n  group,\n  isFirstGroupElement,\n  isLastGroupElement,\n  iconColor\n}: CallReportsTimelineIconParams) => {\n  if (group) {\n    return (\n      <div className={styles.callReportsTimelineIcon__iconContainer}>\n        <div\n          className={clsx(styles.callReportsTimelineGroupIcon__iconShape, {\n            [styles.callReportsTimelineIcon__groupIconsDefaultColor]: group !== groupTypes.VIRTUAL_ASSISTANT,\n            [styles.callReportsTimelineGroupIcon__groupFirstElement]: isFirstGroupElement,\n            [styles.callReportsTimelineGroupIcon__groupLastElement]: isLastGroupElement\n          })}\n          style={{ backgroundColor: circleColor, '--goto-icon-color': iconColor } as React.CSSProperties}>\n          {icon}\n        </div>\n      </div>\n    );\n  }\n\n  return (\n    <div className={clsx(styles.callReportsTimelineIcon__iconContainer)}>\n      <TooltipWrapper title={tooltipContent || ''} hidden={_isEmpty(tooltipContent)}>\n        <span\n          data-testid=\"icon-wrapper\"\n          className={styles.callReportsTimelineIcon__iconShape}\n          style={{ borderColor: circleColor }}>\n          {icon}\n        </span>\n      </TooltipWrapper>\n    </div>\n  );\n};\n\nexport default CallReportsTimelineIcon;\n","import clsx from 'clsx';\nimport { flatten as _flatten, sumBy as _sumBy } from 'lodash';\nimport PropTypes from 'prop-types';\nimport styles from './CallReportsTimeline.module.scss';\nimport CallReportsTimelineIcon from '../CallReportsTimelineIcon/CallReportsTimelineIcon.tsx';\nimport {\n  inverseStatusIcons,\n  rotateStatusIcons,\n  timeLineIgnoreStatusDuration\n} from '../../../../constants/call-report-modal';\n\nconst CallReportsTimeline = ({ callReports, totalDuration }) => {\n  const getLinePercentage = (duration, status) => {\n    return timeLineIgnoreStatusDuration.includes(status) ? 0 : (duration / totalDuration) * 100;\n  };\n\n  const getLineColor = color => {\n    switch (color) {\n      case 'green400':\n        return 'var(--goto-badge-color-voice)';\n      case 'yellow400':\n        return 'var(--goto-yellow-400)';\n      case 'purple500':\n      case 'color-virtualAssistantGroup':\n        return 'var(--goto-purple-500)';\n      case 'color-virtualAssistantGroupLine':\n        return 'var(--goto-purple-600)';\n      case 'red500':\n        return 'var(--goto-red-500)';\n      case 'blue300':\n        return 'var(--goto-blue-300)';\n      case 'orange400':\n        return 'var(--goto-orange-400)';\n      case 'color-dialPlanGroup':\n        return 'var(--goto-surface-color-warning-default)';\n      case 'color-dialPlanGroupLine':\n        return 'var(--goto-dataviz-color-yellow-default)';\n      case 'color-warmTransferGroup':\n        return 'var(--goto-badge-color-meeting)';\n      case 'color-warmTransferGroupLine':\n        return 'var(--goto-orange-400)';\n      default:\n        return 'var(--goto-badge-color-disabled)';\n    }\n  };\n\n  const getIconColor = color => {\n    if (color === 'yellow400' || color === 'blue300' || color === 'color-dialPlanGroup') {\n      return 'black';\n    } else {\n      return 'white';\n    }\n  };\n\n  const getIconDisplayOnTimeline = (el, prefix, group, isFirstGroupElement, isLastGroupElement) => {\n    return (\n      <div\n        key={`${prefix}-${el.timestamp}`}\n        data-testid={`${prefix}-${el.timestamp}`}\n        className={clsx(styles.callReportsTimeline__timelineIcon, {\n          [styles.callReportsTimeline__iconAxisX]: inverseStatusIcons.includes(el.status),\n          [styles.callReportsTimeline__iconRotate]: rotateStatusIcons.includes(el.status)\n        })}\n        style={\n          group\n            ? undefined\n            : { flexBasis: `${getLinePercentage(el.duration, el.status)}%`, backgroundColor: getLineColor(el.color) }\n        }>\n        <CallReportsTimelineIcon\n          icon={el.icon}\n          circleColor={getLineColor(el.color)}\n          group={group}\n          isFirstGroupElement={isFirstGroupElement}\n          isLastGroupElement={isLastGroupElement}\n          iconColor={getIconColor(el.color)}\n        />\n      </div>\n    );\n  };\n\n  const sortTimelineData = data => {\n    // In the event when Disconnected and Hangup are at the same time, we need to guarantee that Hangup will be first in the list\n    const indexDisconnected = data.findIndex(el => el.status === 'DISCONNECTING');\n    const indexHangup = data.findIndex(el => el.status === 'HANG_UP');\n    const sortedData = [...data];\n    if (indexDisconnected !== -1 && indexHangup !== -1 && indexDisconnected < indexHangup) {\n      [sortedData[indexDisconnected], sortedData[indexHangup]] = [\n        sortedData[indexHangup],\n        sortedData[indexDisconnected]\n      ];\n    }\n    return sortedData;\n  };\n\n  const getLines = () => {\n    const sortedData = sortTimelineData(callReports);\n    return sortedData.map((el, index) => {\n      if (el.groupType) {\n        const prefix = `group-${el.groupType}-${index}`;\n        const duration = _sumBy(el.callReportItems, x => x.duration ?? 0);\n        const { color } = el.callReportItems[0];\n        return (\n          <div\n            key={prefix}\n            data-testid={prefix}\n            className={styles.callReportsTimeline__groupTimeline}\n            style={{\n              flexBasis: `${getLinePercentage(duration)}%`,\n              backgroundColor: getLineColor(`${color}Line`)\n            }}>\n            {el.callReportItems.map((groupEl, idx) =>\n              getIconDisplayOnTimeline(\n                groupEl,\n                `${prefix}-${idx}`,\n                el.groupType,\n                idx === 0,\n                idx === el.callReportItems.length - 1\n              )\n            )}\n          </div>\n        );\n      }\n\n      return getIconDisplayOnTimeline(el, `line-${index}-`);\n    });\n  };\n\n  return (\n    <div className={styles.callReportsTimeline} data-testid=\"container\">\n      {_flatten(getLines())}\n    </div>\n  );\n};\n\nCallReportsTimeline.propTypes = {\n  /** Total duration of the call, used in order to calculate the percentage of each lines */\n  totalDuration: PropTypes.number,\n  /** The call events */\n  callReports: PropTypes.arrayOf(\n    PropTypes.shape({\n      color: PropTypes.string,\n      icon: PropTypes.node,\n      groupId: PropTypes.number,\n      groupType: PropTypes.string,\n      timestamp: PropTypes.string,\n      duration: PropTypes.number,\n      callReportItems: PropTypes.arrayOf(\n        PropTypes.shape({\n          icon: PropTypes.node,\n          color: PropTypes.string,\n          duration: PropTypes.number,\n          timestamp: PropTypes.string\n        })\n      )\n    })\n  )\n};\n\nexport default CallReportsTimeline;\n",".groupDetailsColumn__container {\n  display: flex;\n  gap: 0.5em;\n  align-items: center;\n}\n\n.groupDetailsColumn__queueContents {\n  padding: var(--goto-spacing-01);\n}\n\n.groupDetailsColumn__fadingTooltipContent {\n  display: flex;\n  align-items: center;\n  font: var(--goto-body-small);\n  color: var(--goto-type-color-brand-default);\n  gap: var(--goto-spacing-02);\n\n  &:hover {\n    color: var(--goto-interactive-color-persistent-active);\n  }\n}\n\n.groupDetailsColumn__simpleTooltip {\n  cursor: pointer;\n}\n\n.groupDetailsColumn__tooltip {\n  &[is-open],\n  &:hover {\n    cursor: pointer;\n    color: var(--goto-interactive-color-persistent-active);\n\n    --goto-icon-color: var(--goto-interactive-color-persistent-active);\n\n    background-color: var(--goto-interactive-color-persistent-pressed);\n    border-radius: var(--goto-radius-large);\n    padding: 0 var(--goto-spacing-03);\n    margin: 0 calc(var(--goto-spacing-03) * -1);\n  }\n}\n\n.groupDetailsColumn__tooltip[is-open] .groupDetailsColumn__container {\n  color: var(--goto-interactive-color-persistent-active);\n}\n\n.groupDetailsColumn__iconRotate {\n  display: flex;\n  transform: rotate(-90deg);\n}\n\n.groupDetailsColumn__tooltipIconColorBlack {\n  display: flex;\n\n  --goto-icon-color: var(--goto-brand-color-black);\n}\n",".callReportTooltip__content {\n  padding: var(--goto-spacing-04);\n  min-width: 320px;\n  max-width: 512px;\n  max-height: 400px;\n  overflow-y: auto;\n  overflow-wrap: anywhere;\n}\n\n.callReportTooltip__icon {\n  border-radius: var(--goto-radius-circle);\n  background-color: var(--goto-purple-500);\n  padding: var(--goto-spacing-03);\n  margin-right: var(--goto-spacing-03);\n\n  chameleon-svg {\n    --goto-icon-size: 20px;\n    --goto-icon-color: var(--goto-type-color-inverted);\n  }\n}\n\n.callReportTooltip__row {\n  display: flex;\n  padding: var(--goto-spacing-02) 0 var(--goto-spacing-02) 0;\n  align-items: center;\n  color: var(--goto-type-color-default);\n\n  &:not(:last-child) {\n    border-bottom: 1px solid var(--goto-border-color-default);\n  }\n\n  & > * {\n    overflow-wrap: anywhere;\n    min-width: 0;\n  }\n}\n\n.callReportTooltip__bold {\n  font-weight: 600;\n}\n\n.callReportTooltip__popover {\n  --arrow-size: 0;\n}\n\n.callReportTooltip__chip {\n  color: var(--goto-type-color-brand-default);\n  display: inline-flex;\n  gap: 0.5em;\n  align-items: center;\n\n  &[is-open],\n  &:hover {\n    cursor: pointer;\n    color: var(--goto-interactive-color-persistent-active);\n\n    --goto-icon-color: var(--goto-interactive-color-persistent-active);\n\n    background-color: var(--goto-interactive-color-persistent-pressed);\n    border-radius: var(--goto-radius-large);\n    padding: 0 var(--goto-spacing-03);\n    margin: 0 calc(var(--goto-spacing-03) * -1);\n  }\n}\n","import { Popover, Typography } from '@getgo/chameleon-web-react-wrapper';\nimport { uniqueId } from 'lodash';\nimport React, { PropsWithChildren, ReactNode, useState } from 'react';\nimport { ZINDEX } from '../../../../../constants/z-index';\nimport callReportToolTipStyles from './CallReportTooltip.module.scss';\n\nexport const TRIGGER_TEST_ID_PREFIX = 'tooltip-trigger-';\nexport const TITLE_TEST_ID_PREFIX = 'tooltip-title-';\n\nexport const CallReportTooltipRow: React.FC<PropsWithChildren> = ({ children }) => {\n  return <div className={callReportToolTipStyles.callReportTooltip__row}>{children}</div>;\n};\n\ninterface CallReportTooltipProperties {\n  title: string;\n  icon: ReactNode;\n  triggerIcon?: ReactNode;\n  content: ReactNode;\n  triggerLabel: ReactNode;\n}\n\nexport const CallReportTooltip: React.FC<CallReportTooltipProperties> = ({\n  title,\n  icon,\n  triggerIcon,\n  content,\n  triggerLabel\n}) => {\n  const [triggerId] = useState(() => `call-report-tooltip-${uniqueId()}`);\n\n  const popoverContent = (\n    <div className={callReportToolTipStyles.callReportTooltip__content}>\n      <CallReportTooltipRow>\n        <span className={callReportToolTipStyles.callReportTooltip__icon}>{icon}</span>\n        &nbsp;\n        <Typography variant=\"heading-small\" data-testid={`${TITLE_TEST_ID_PREFIX}${title}`}>\n          {title}\n        </Typography>\n      </CallReportTooltipRow>\n      {content}\n    </div>\n  );\n\n  const handleTriggerClick = (event: React.MouseEvent) => {\n    event.stopPropagation();\n  };\n\n  const handleKeyDown = (event: React.KeyboardEvent) => {\n    if (event.key === 'Enter' || event.key === ' ') {\n      event.stopPropagation();\n    }\n  };\n\n  return (\n    <>\n      <div\n        id={triggerId}\n        data-testid={`${TRIGGER_TEST_ID_PREFIX}${triggerLabel}`}\n        data-interactive=\"true\"\n        className={callReportToolTipStyles.callReportTooltip__chip}\n        onClick={handleTriggerClick}\n        role=\"button\"\n        tabIndex={0}\n        onKeyDown={handleKeyDown}>\n        {triggerIcon ?? icon}&nbsp;{triggerLabel}\n      </div>\n      <Popover\n        className={callReportToolTipStyles.callReportTooltip__popover}\n        triggerId={triggerId}\n        position=\"top-center\"\n        zIndex={ZINDEX.TOOLTIP}>\n        {popoverContent}\n      </Popover>\n    </>\n  );\n};\n","import { BlockOutlinedIcon, NotificationsAlertOutlinedIcon, PhoneHangUpOutlinedIcon, PhoneTransferOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { Typography } from '@getgo/chameleon-web-react-wrapper';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { isVaOutcome, VA_OUTCOME, VA_OUTCOME_CAPTIONS } from '../../../../../../constants/va-outcome';\nimport { GroupDetail, ITEM_DETAIL_IDENTIFIER } from '../../../../../../types/CallReport';\nimport { CallReportTooltip, CallReportTooltipRow } from '../CallReportTooltip';\n\nexport type VirtualAssistantTooltipParams = {\n  details: GroupDetail[]\n};\n\nconst VA_OUTCOME_DESCRIPTION = {\n  /* i18n.t('The AI receptionist used one of its conversation flow abilities to handle the call without use of escalation or transfer.') */\n  [VA_OUTCOME.HANDLED]: 'The AI receptionist used one of its conversation flow abilities to handle the call without use of escalation or transfer.',\n  /* i18n.t('The AI receptionist successfully transferred the call to an extension.') */\n  [VA_OUTCOME.TRANSFERRED]: 'The AI receptionist successfully transferred the call to an extension.',\n  /* i18n.t('The caller hung up before the call could be successfully transferred or handled.') */\n  [VA_OUTCOME.ABANDONED]: 'The caller hung up before the call could be successfully transferred or handled.',\n  /* i18n.t('The call escalated to the default queue via caller request, option key, a period of inactivity, or too many resolution attempts.') */\n  [VA_OUTCOME.ESCALATED]: 'The call escalated to the default queue via caller request, option key, a period of inactivity, or too many resolution attempts.',\n  /* i18n.t('Due to an error, the call either ended or moved on to the next node in the dial plan.') */\n  [VA_OUTCOME.ERROR]: 'Due to an error, the call either ended or moved on to the next node in the dial plan.'\n};\n\nconst getVirtualAssistantIcon = (outcome: string): React.ReactNode => {\n  switch (outcome) {\n    case VA_OUTCOME.HANDLED:\n    case VA_OUTCOME.TRANSFERRED:\n      return <PhoneTransferOutlinedIcon />;\n    case VA_OUTCOME.ABANDONED:\n      return <PhoneHangUpOutlinedIcon />;\n    case VA_OUTCOME.ESCALATED:\n      return <NotificationsAlertOutlinedIcon />;\n    case VA_OUTCOME.ERROR:\n      return <BlockOutlinedIcon />;\n    default:\n      return null;\n  }\n};\n\nconst VirtualAssistantTooltip: React.FC<VirtualAssistantTooltipParams> = ({ details }) => {\n  const { t } = useTranslation();\n\n  const getOutcome = (): string => {\n    const result = details.find(d => d.id === ITEM_DETAIL_IDENTIFIER.RESULT)?.value as string;\n    return isVaOutcome(result) ? VA_OUTCOME[result] : result;\n  }\n\n  const getOutcomeCaption = (outcome: string): string => {\n    return isVaOutcome(outcome) ? VA_OUTCOME_CAPTIONS[outcome] : outcome;\n  }\n\n  const getOutcomeDescription = (outcome: string): string => {\n    return isVaOutcome(outcome) ? VA_OUTCOME_DESCRIPTION[outcome] : outcome;\n  }\n\n  const getCallReason = (): string => {\n    return details.find(d => d.id === ITEM_DETAIL_IDENTIFIER.CALL_REASON)?.value as string;\n  }\n\n  const outcome = getOutcome();\n  const icon = getVirtualAssistantIcon(outcome);\n  const outcomeCaption = getOutcomeCaption(outcome);\n  const callReason = getCallReason();\n  const outcomeDescription = getOutcomeDescription(outcome);\n\n  const content = (\n    <>\n      {callReason &&\n        (\n          <CallReportTooltipRow>\n            <Typography variant=\"caption-medium\">\n              <Typography variant=\"caption-medium-strong\">\n                {t('Reason')}:&nbsp;\n              </Typography>\n              {callReason}\n            </Typography>\n          </CallReportTooltipRow>\n        )\n      }\n      <CallReportTooltipRow>\n        <Typography variant=\"caption-medium\">\n          <Typography variant=\"caption-medium-strong\">\n            {t('Outcome')}:&nbsp;\n          </Typography>\n          {t(outcomeDescription)}\n        </Typography>\n      </CallReportTooltipRow>\n    </>\n  );\n\n  const triggerLabel = t(outcomeCaption);\n\n  return (\n    <CallReportTooltip\n      title={outcomeCaption}\n      triggerLabel={triggerLabel}\n      icon={icon}\n      content={content}\n    />\n  );\n};\n\nexport default VirtualAssistantTooltip;\n","import { has, isObject } from 'lodash';\n\ninterface InfoCaptureEntry {\n  name: string;\n  value: string;\n}\n\nexport interface AIActionInfoCapture {\n  formName: string;\n  formData: InfoCaptureEntry[];\n}\n\nexport interface Article {\n  name: string;\n  url: string | undefined;\n  id: number;\n  status: ArticleStatus;\n}\n\nexport const ARTICLE_STATUS = {\n  GONE: 'GONE',\n  UNKNOWN: 'UNKNOWN',\n  PRESENT: 'PRESENT'\n};\nexport type ArticleStatus = (typeof ARTICLE_STATUS)[keyof typeof ARTICLE_STATUS];\n\nexport interface ArticleCollection {\n  collectionName: string;\n  articles: Article[];\n}\n\nexport interface AIActionKnowledgeSearch {\n  articlesCount: number;\n  articles: ArticleCollection[];\n}\n\nexport const FAILED_STEP = {\n  CUSTOMER_LOOKUP: 'CUSTOMER_LOOKUP',\n  SERVICE_LOOKUP: 'SERVICE_LOOKUP',\n  TIME_LOOKUP: 'TIME_LOOKUP',\n  APPOINTMENT_BOOK: 'APPOINTMENT_BOOK',\n  APPOINTMENT_MODIFY: 'APPOINTMENT_MODIFY',\n  APPOINTMENT_CANCEL: 'APPOINTMENT_CANCEL'\n} as const;\nexport type FailedStep = (typeof FAILED_STEP)[keyof typeof FAILED_STEP];\n\nexport const LAST_COMPLETED_STEP = {\n  CUSTOMER_LOOKUP: 'CUSTOMER_LOOKUP',\n  SERVICE_LOOKUP: 'SERVICE_LOOKUP',\n  TIME_LOOKUP: 'TIME_LOOKUP',\n} as const\nexport type LastCompletedStep = (typeof LAST_COMPLETED_STEP)[keyof typeof LAST_COMPLETED_STEP]\n\nexport interface AIActionScheduling {\n  eventId: string;\n  virtualParticipantId: string;\n  failedStep?: FailedStep;\n  lastCompletedStep?: LastCompletedStep;\n  data: Array<{ name: string; value: string | string[] }>;\n}\n\nexport interface AIActionDirectorySearch {\n  searchName: string;\n  resultCount: number;\n}\n\nexport type AIActionValue = AIActionInfoCapture | AIActionKnowledgeSearch | AIActionScheduling | AIActionDirectorySearch;\n\nexport const isAIActionInfoCapture = (action: unknown): action is AIActionInfoCapture =>\n  isObject(action) && has(action, 'formName') && has(action, 'formData');\n\nexport const isAIActionKnowledgeSearch = (action: unknown): action is AIActionKnowledgeSearch =>\n  isObject(action) && has(action, 'articlesCount') && has(action, 'articles');\n\nexport const isAIActionScheduling = (action: unknown): action is AIActionScheduling =>\n  isObject(action) && has(action, 'eventId') && has(action, 'virtualParticipantId') && has(action, 'data');\n\nexport const isAIActionDirectorySearch = (action: unknown): action is AIActionDirectorySearch =>\n  isObject(action) && has(action, 'searchName') && has(action, 'resultCount');\n",".knowledgeAccessedToolTip_articlesContainer {\n  width: 100%;\n}\n\n.knowledgeAccessedToolTip_collectionName {\n  margin-bottom: var(--goto-spacing-02);\n}\n\n.knowledgeAccessedToolTip_article {\n  display: flex;\n  padding: var(--goto-spacing-02);\n  border-radius: var(--goto-radius-small);\n  background-color: var(--goto-surface-color-secondary);\n  flex-grow: 1;\n  margin-bottom: var(--goto-spacing-02);\n  overflow-wrap: break-word;\n  min-width: 0;\n}\n\n.knowledgeAccessedToolTip_articleIcon {\n  flex-grow: 0;\n  padding-top: var(--goto-spacing-01);\n  padding-right: var(--goto-spacing-02);\n}\n\n.knowledgeAccessedToolTip_articleContent {\n  flex-grow: 1;\n  max-width: 400px;\n  overflow-wrap: anywhere;\n  min-width: 0;\n  white-space: normal;\n\n  chameleon-typography {\n    white-space: normal;\n    overflow-wrap: break-word;\n  }\n}\n\n.knowledgeAccessedToolTip_articleLink {\n  color: var(--goto-type-color-brand-default);\n  text-decoration: none;\n  overflow-wrap: anywhere;\n}\n\n.knowledgeAccessedToolTip_articleMovedDeleted {\n  display: flex;\n\n  chameleon-svg {\n    margin: var(--goto-spacing-01) 0;\n\n    --goto-icon-color: var(--goto-icon-color-danger);\n  }\n}\n","import { AlertOutlinedIcon, BookOutlinedIcon, RemoteSupportOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { Link, Typography } from '@getgo/chameleon-web-react-wrapper';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { callReportGroupStatuses } from '../../../../../../constants/call-report-modal';\nimport { Article, ARTICLE_STATUS, isAIActionKnowledgeSearch } from '../../../../../../types/ai-actions/AiActions.model';\nimport { callStatuses, GroupDetail, ITEM_DETAIL_IDENTIFIER } from '../../../../../../types/CallReport';\nimport { CallReportTooltip, CallReportTooltipRow } from '../CallReportTooltip';\nimport styles from './KnowledgeAccessedTooltip.module.scss';\n\nexport type KnowledgeAccessedTooltipParams = {\n  details: GroupDetail[];\n};\n\nconst KnowledgeAccessedTooltip: React.FC<KnowledgeAccessedTooltipParams> = ({ details }) => {\n  const { t } = useTranslation();\n\n  const getKnowledgeSearchAction = () => {\n    const detail = details.find((d: GroupDetail) => d.id === ITEM_DETAIL_IDENTIFIER.KNOWLEDGE_SEARCH);\n    return isAIActionKnowledgeSearch(detail?.value) ? detail.value : undefined;\n  };\n\n  const title = callReportGroupStatuses[callStatuses.KNOWLEDGE_SEARCH_VIRTUAL_ASSISTANT] ;\n  const { articles, articlesCount } = getKnowledgeSearchAction() ?? { articles: [], articlesCount: 0 };\n\n  const getArticleName = (article: Article) => {\n    const articleName = (\n      <>\n        <strong>{article.name}</strong> {t('retrieved')}\n      </>\n    );\n    if (article.status !== ARTICLE_STATUS.GONE) {\n      return (\n        <>\n          <Link\n            href={article.url}\n            data-testid={`article-link-${article.id}`}\n            className={styles.knowledgeAccessedToolTip_articleLink}\n            rel=\"noopener noreferrer\"\n            target=\"_blank\">\n            {articleName}\n          </Link>\n        </>\n      );\n    }\n\n    return articleName;\n  };\n\n  const content = (\n    <CallReportTooltipRow>\n      <div className={styles.knowledgeAccessedToolTip_articlesContainer}>\n        {articles.map(articlesCollection => (\n          <React.Fragment key={articlesCollection.collectionName}>\n            <Typography className={styles.knowledgeAccessedToolTip_collectionName} variant=\"body-small-strong\">\n              {articlesCollection.collectionName}:\n            </Typography>\n            {articlesCollection.articles.map(article => (\n              <div key={article.name} className={styles.knowledgeAccessedToolTip_article}>\n                <div className={styles.knowledgeAccessedToolTip_articleIcon}>\n                  <BookOutlinedIcon />\n                </div>\n                <div className={styles.knowledgeAccessedToolTip_articleContent}>\n                  <Typography variant=\"body-small\">{getArticleName(article)}</Typography>\n                  {article.status === ARTICLE_STATUS.GONE && (\n                    <div className={styles.knowledgeAccessedToolTip_articleMovedDeleted}>\n                      <div>\n                        <AlertOutlinedIcon />\n                      </div>\n                      <div>\n                        <Typography color=\"type-color-secondary\" variant=\"body-small\">\n                          {t('This article was moved or deleted and is no longer linked to this receptionist')}\n                        </Typography>\n                      </div>\n                    </div>\n                  )}\n                </div>\n              </div>\n            ))}\n          </React.Fragment>\n        ))}\n      </div>\n    </CallReportTooltipRow>\n  );\n\n  const triggerLabel =\n    articlesCount > 1\n      ? t('{{articlesCount}} articles', {\n          context: 'Multiple articles accessed',\n          articlesCount\n        })\n      : t('{{articlesCount}} article', {\n          context: 'Single article accessed',\n          articlesCount\n        });\n\n  return (\n    <CallReportTooltip\n      title={title}\n      triggerLabel={triggerLabel}\n      triggerIcon={<RemoteSupportOutlinedIcon />}\n      icon={<BookOutlinedIcon />}\n      content={content}\n    />\n  );\n};\n\nexport default KnowledgeAccessedTooltip;\n",".infoCapturedToolTip_container {\n  width: 100%;\n}\n\n.infoCapturedToolTip_formName {\n  margin-bottom: var(--goto-spacing-02);\n}\n\n.infoCapturedToolTip_formContent {\n  padding: var(--goto-spacing-02);\n  border-radius: var(--goto-radius-small);\n  background-color: var(--goto-surface-color-secondary);\n  flex-grow: 1;\n  margin-bottom: var(--goto-spacing-02);\n  overflow-wrap: break-word;\n  min-width: 0;\n}\n\n.infoCapturedToolTip_formEntry {\n  padding: var(--goto-spacing-02);\n  line-height: 1.5;\n  width: 100%;\n  font-size: var(--goto-typography-font-size-body-small, 14px);\n  color: var(--goto-type-color-default);\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.25em;\n}\n\n.infoCapturedToolTip_formEntryName {\n  white-space: nowrap !important;\n  flex-shrink: 0;\n  flex-grow: 0;\n}\n\n.infoCapturedToolTip_formEntryValue {\n  overflow-wrap: break-word !important;\n  word-break: break-all;\n  white-space: normal !important;\n  flex-grow: 1;\n  flex-shrink: 1;\n  min-width: 0;\n}\n","import { PollsOutlinedIcon, RemoteSupportOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { Typography } from '@getgo/chameleon-web-react-wrapper';\nimport { isEmpty } from 'lodash';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { callReportGroupStatuses } from '../../../../../../constants/call-report-modal';\nimport { isAIActionInfoCapture } from '../../../../../../types/ai-actions/AiActions.model';\nimport { callStatuses, GroupDetail, ITEM_DETAIL_IDENTIFIER } from '../../../../../../types/CallReport';\nimport { CallReportTooltip, CallReportTooltipRow } from '../CallReportTooltip';\nimport styles from './InfoCapturedTooltip.module.scss';\n\nexport type InfoCapturedTooltipParams = {\n  details: GroupDetail[];\n};\n\nconst InfoCapturedTooltip: React.FC<InfoCapturedTooltipParams> = ({ details }) => {\n  const { t } = useTranslation();\n\n  const getInfoCapturedAction = () => {\n    const detail = details.find((d: GroupDetail) => d.id === ITEM_DETAIL_IDENTIFIER.INFO_CAPTURE);\n    return isAIActionInfoCapture(detail?.value) ? detail.value : undefined;\n  };\n\n  // TODO remove casting and enforce type upstream\n  const title = callReportGroupStatuses[callStatuses.INFO_CAPTURE_VIRTUAL_ASSISTANT] as string;\n  const formName = getInfoCapturedAction()?.formName ?? '';\n  const formData = getInfoCapturedAction()?.formData ?? [];\n\n  const content = (\n    <CallReportTooltipRow>\n      <div className={styles.infoCapturedToolTip_container}>\n        <Typography className={styles.infoCapturedToolTip_formName} variant=\"body-small-strong\">\n          {formName}:\n        </Typography>\n        <div className={styles.infoCapturedToolTip_formContent}>\n          {isEmpty(formData) && (\n            <Typography variant=\"body-small\" color=\"type-color-disabled\">\n              {t('Info currently unavailable', {\n                context: 'Fallback until the AI Info captured becomes available'\n              })}\n            </Typography>\n          )}\n          {formData.map(formEntry => (\n            <div key={formEntry.name} className={styles.infoCapturedToolTip_formEntry}>\n              <div className={styles.infoCapturedToolTip_formEntryName}>\n                <Typography variant=\"body-small-strong\">{formEntry.name}:</Typography>\n              </div>\n              <div className={styles.infoCapturedToolTip_formEntryValue}>\n                <Typography variant=\"body-small\">{formEntry.value}</Typography>\n              </div>\n            </div>\n          ))}\n        </div>\n      </div>\n    </CallReportTooltipRow>\n  );\n\n  const triggerLabel = t('1 ability called', {\n    context: 'Single form captured'\n  });\n\n  return (\n    <CallReportTooltip\n      title={title}\n      triggerLabel={triggerLabel}\n      triggerIcon={<RemoteSupportOutlinedIcon />}\n      icon={<PollsOutlinedIcon />}\n      content={content}\n    />\n  );\n};\n\nexport default InfoCapturedTooltip;\n","export const SCHEDULING_FIELD_TYPE = {\n  TEXT: 'text',\n  DATE_TIME: 'dateTime',\n  LIST: 'list',\n} as const;\n\nexport type SchedulingFieldType = typeof SCHEDULING_FIELD_TYPE[keyof typeof SCHEDULING_FIELD_TYPE];\n\n\nexport interface SchedulingFieldDefinition {\n  translationKey: string;\n  order: number;\n  type: SchedulingFieldType;\n}\n\nexport interface SchedulingFieldConfig {\n  [fieldName: string]: SchedulingFieldDefinition;\n}\n\n/**\n * Centralized configuration for scheduling form fields\n * Maps field names to their translation keys and display order\n * Using human-readable keys for i18n (the key IS the English translation)\n */\nexport const SCHEDULING_FIELD_CONFIG: SchedulingFieldConfig = {\n  'date and time': {\n    // i18n.t('Date and time')\n    translationKey: 'Date and time',\n    order: 4,\n    type: SCHEDULING_FIELD_TYPE.DATE_TIME,\n  },\n  'name': {\n    // i18n.t('Name')\n    translationKey: 'Name',\n    order: 1,\n    type: SCHEDULING_FIELD_TYPE.TEXT,\n  },\n  'services': {\n    // i18n.t('Services')\n    translationKey: 'Services',\n    order: 3,\n    type: SCHEDULING_FIELD_TYPE.LIST,\n  },\n  'vehicle': {\n    // i18n.t('Vehicle')\n    translationKey: 'Vehicle',\n    order: 2,\n    type: SCHEDULING_FIELD_TYPE.TEXT,\n  },\n} as const;\n","import { orderBy } from 'lodash';\n\nimport { SCHEDULING_FIELD_CONFIG, SchedulingFieldDefinition } from \"../configs/scheduling-fields.config\";\n\nexport const UNKNOWN_FIELD_ORDER = 999;\n\nexport const getSchedulingFieldConfig = (fieldName: string): SchedulingFieldDefinition | undefined => {\n  return SCHEDULING_FIELD_CONFIG[fieldName.toLowerCase()];\n};\n\nexport const getFieldDisplayOrder = (fieldName: string): number => {\n  const config = getSchedulingFieldConfig(fieldName);\n  return config?.order ?? UNKNOWN_FIELD_ORDER;\n};\n\nexport const sortFormDataByOrder = (\n  formData: Array<{ name: string; value: string | string[] }>\n): Array<{ name: string; value: string | string[] }> => {\n  return orderBy(\n    formData,\n    [\n      (item) => getFieldDisplayOrder(item.name),\n      (item) => item.name.toLowerCase(),\n    ],\n    ['asc', 'asc']\n  );\n};\n","import { useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport {\n  SCHEDULING_FIELD_TYPE,\n  SchedulingFieldType,\n} from '../configs/scheduling-fields.config';\nimport { getSchedulingFieldConfig, sortFormDataByOrder } from '../utils/scheduling-fields.util';\nimport { sanitizeText } from '../utils/strings.util';\n\nexport interface TranslatedFormField {\n  originalName: string;\n  displayLabel: string;\n  formattedValue: string;\n  type: SchedulingFieldType;\n}\n\nexport const useSchedulingFieldTranslation = (\n  formData: Array<{ name: string; value: string | string[] }>\n): TranslatedFormField[] => {\n  const { t } = useTranslation();\n\n  return useMemo(() => {\n    const sortedData = sortFormDataByOrder(formData);\n\n    return sortedData.map((field) => {\n      const config = getSchedulingFieldConfig(field.name);\n\n      const displayLabel = config\n        ? t(config.translationKey)\n        : field.name;\n\n      const type = config?.type ?? SCHEDULING_FIELD_TYPE.TEXT;\n      const formattedValue = formatFieldValue(field.value, type);\n\n      return {\n        originalName: field.name,\n        displayLabel,\n        formattedValue,\n        type,\n      };\n    });\n  }, [formData, t]);\n};\n\nconst formatFieldValue = (value: string | string[], type: SchedulingFieldType): string => {\n  switch (type) {\n    case SCHEDULING_FIELD_TYPE.DATE_TIME:\n      if (Array.isArray(value)) {\n        throw new Error('DATE_TIME field type does not support array values');\n      }\n      return value;\n    case SCHEDULING_FIELD_TYPE.LIST:\n      if (Array.isArray(value)) {\n        return value.map(item => sanitizeText(item)).join(', ');\n      }\n      return sanitizeText(value);\n    case SCHEDULING_FIELD_TYPE.TEXT:\n    default:\n      if (Array.isArray(value)) {\n        throw new Error('TEXT field type does not support array values');\n      }\n      return sanitizeText(value);\n  }\n};\n",".schedulingTooltip_container {\n  width: 100%;\n}\n\n.schedulingTooltip_header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--goto-spacing-02);\n  margin-bottom: var(--goto-spacing-03);\n}\n\n.schedulingTooltip_headerLeft {\n  display: flex;\n  align-items: center;\n  gap: var(--goto-spacing-01);\n}\n\n.schedulingTooltip_formContent {\n  padding: var(--goto-spacing-02);\n  border-radius: var(--goto-radius-small);\n  background-color: var(--goto-surface-color-secondary);\n  flex-grow: 1;\n  margin-bottom: var(--goto-spacing-02);\n  overflow-wrap: break-word;\n  min-width: 0;\n}\n\n.schedulingTooltip_formEntry {\n  padding: var(--goto-spacing-02);\n  line-height: 1.5;\n  width: 100%;\n  font-size: var(--goto-typography-font-size-body-small, 14px);\n  color: var(--goto-type-color-default);\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.25em;\n}\n\n.schedulingTooltip_formEntryName {\n  white-space: nowrap !important;\n  flex-shrink: 0;\n  flex-grow: 0;\n}\n\n.schedulingTooltip_formEntryValue {\n  overflow-wrap: break-word !important;\n  word-break: break-all;\n  white-space: normal !important;\n  flex-grow: 1;\n  flex-shrink: 1;\n  min-width: 0;\n}\n","import * as ChameleonIcons from '@getgo/chameleon-icons/react';\nimport { TextBadge, Typography } from '@getgo/chameleon-web-react-wrapper';\nimport { isEmpty } from 'lodash';\nimport type { ComponentType } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { SCHEDULING_FIELD_TYPE } from '../../../../../../configs/scheduling-fields.config';\nimport bucketSize from '../../../../../../constants/buckets';\nimport { useSchedulingFieldTranslation } from '../../../../../../hooks/useSchedulingFieldTranslation';\nimport { AIActionScheduling, FailedStep, FAILED_STEP, LAST_COMPLETED_STEP, LastCompletedStep, isAIActionScheduling } from '../../../../../../types/ai-actions/AiActions.model';\nimport { GroupDetail, ITEM_DETAIL_IDENTIFIER } from '../../../../../../types/CallReport';\nimport { getDateFormat } from '../../../../../../utils/date-time.util';\nimport { sanitizeText } from '../../../../../../utils/strings.util';\nimport LocalizedDate from '../../../../LocalizedDate/LocalizedDate';\nimport { CallReportTooltip, CallReportTooltipRow } from '../CallReportTooltip';\nimport styles from './SchedulingTooltip.module.scss';\n\nexport type SchedulingTooltipParams = {\n  details: GroupDetail[];\n};\n\ntype SchedulingBadgeProps = {\n  details: GroupDetail[];\n};\n\ntype SchedulingFormData = Array<{ name: string; value: string | string[] }>;\n\nconst CONNECTION_NAME_FIELD = 'connection name';\nconst CONNECTION_PROVIDER_FIELD = 'connection provider';\n\nconst findSchedulingDetail = (details: GroupDetail[]): GroupDetail | undefined => {\n  return details.find((d: GroupDetail) =>\n    d.id === ITEM_DETAIL_IDENTIFIER.SCHEDULING_BOOKED_VIRTUAL_ASSISTANT ||\n    d.id === ITEM_DETAIL_IDENTIFIER.SCHEDULING_MODIFIED_VIRTUAL_ASSISTANT ||\n    d.id === ITEM_DETAIL_IDENTIFIER.SCHEDULING_CANCELLED_VIRTUAL_ASSISTANT ||\n    d.id === ITEM_DETAIL_IDENTIFIER.SCHEDULING_ERROR_VIRTUAL_ASSISTANT ||\n    d.id === ITEM_DETAIL_IDENTIFIER.SCHEDULING_INCOMPLETE_VIRTUAL_ASSISTANT\n  );\n};\n\nconst getFailedStepMessage = (failedStep: FailedStep | undefined, t: (key: string) => string): string => {\n  if (!failedStep) {\n    return t('An error occurred during scheduling');\n  }\n\n  switch (failedStep) {\n    case FAILED_STEP.CUSTOMER_LOOKUP:\n      return t('Unable to find customer information');\n    case FAILED_STEP.SERVICE_LOOKUP:\n      return t('Unable to find service information');\n    case FAILED_STEP.TIME_LOOKUP:\n      return t('Unable to find available time slots');\n    case FAILED_STEP.APPOINTMENT_BOOK:\n      return t('Unable to book appointment');\n    case FAILED_STEP.APPOINTMENT_MODIFY:\n      return t('Unable to modify appointment');\n    case FAILED_STEP.APPOINTMENT_CANCEL:\n      return t('Unable to cancel appointment');\n    default:\n      return t('An error occurred during scheduling');\n  }\n};\n\nconst getLastCompletedStepMessage = (lastCompletedStep: LastCompletedStep | undefined, t: (key: string) => string): string | undefined => {\n  switch (lastCompletedStep) {\n    case LAST_COMPLETED_STEP.CUSTOMER_LOOKUP:\n      return t('Exited after customer lookup')\n    case LAST_COMPLETED_STEP.SERVICE_LOOKUP:\n      return t('Exited after service lookup')\n    case LAST_COMPLETED_STEP.TIME_LOOKUP:\n      return t('Exited after time lookup')\n    default:\n      return undefined\n  }\n};\n\nconst sanitizeAndFormatStringValue = (field: { name: string; value: string | string[] } | undefined): string | undefined => {\n  if (field && typeof field.value === 'string' && field.value.trim() !== '') {\n    return sanitizeText(field.value);\n  }\n  return undefined;\n};\n\nconst extractConnectionDetails = (\n  formData: SchedulingFormData\n): { connectionName: string | undefined; connectionProvider: string | undefined; filteredFormData: SchedulingFormData } => {\n  const connectionNameField = formData.find(field => field.name.toLowerCase() === CONNECTION_NAME_FIELD);\n  const connectionProviderField = formData.find(field => field.name.toLowerCase() === CONNECTION_PROVIDER_FIELD);\n  const filteredFormData = formData.filter(field =>  field.name.toLowerCase() !== CONNECTION_NAME_FIELD && field.name.toLowerCase() !== CONNECTION_PROVIDER_FIELD);\n\n  const connectionName = sanitizeAndFormatStringValue(connectionNameField);\n  const connectionProvider = sanitizeAndFormatStringValue(connectionProviderField);\n\n  return { connectionName, connectionProvider, filteredFormData };\n};\n\nconst SchedulingBadge = ({ details }:SchedulingBadgeProps) => {\n  const { t } = useTranslation();\n\n  const schedulingDetail = findSchedulingDetail(details);\n\n  if (!schedulingDetail) {\n    return <TextBadge variant=\"danger\">{t('Unknown')}</TextBadge>;\n  }\n\n  switch (schedulingDetail.id) {\n    case ITEM_DETAIL_IDENTIFIER.SCHEDULING_BOOKED_VIRTUAL_ASSISTANT:\n      return <TextBadge variant=\"success\">{t('Booked')}</TextBadge>;\n    case ITEM_DETAIL_IDENTIFIER.SCHEDULING_MODIFIED_VIRTUAL_ASSISTANT:\n      return <TextBadge variant=\"success\">{t('Modified')}</TextBadge>;\n    case ITEM_DETAIL_IDENTIFIER.SCHEDULING_CANCELLED_VIRTUAL_ASSISTANT:\n      return <TextBadge variant=\"danger\">{t('Cancelled')}</TextBadge>;\n    case ITEM_DETAIL_IDENTIFIER.SCHEDULING_ERROR_VIRTUAL_ASSISTANT:\n      return <TextBadge variant=\"danger\">{t('Error')}</TextBadge>;\n    case ITEM_DETAIL_IDENTIFIER.SCHEDULING_INCOMPLETE_VIRTUAL_ASSISTANT:\n      return <TextBadge variant=\"warning\">{t('Incomplete')}</TextBadge>;\n    default:\n      return <TextBadge variant=\"danger\">{t('Unknown')}</TextBadge>;\n  }\n};\n\n/**\n * Maps API provider values to their icon component name when the value does not\n * directly match the PascalCase icon name (e.g. \"athenahealth\" → \"AthenaIcon\").\n * Only exceptions need to be listed here; everything else is resolved dynamically.\n */\nconst PROVIDER_ICON_EXCEPTIONS: Record<string, string> = {\n  athenahealth: 'AthenaIcon',\n};\n\nconst buildIconKey = (provider: string): string => {\n  const normalizedProvider = provider.toLowerCase().trim();\n  return PROVIDER_ICON_EXCEPTIONS[normalizedProvider] ??\n    `${provider.charAt(0).toUpperCase()}${provider.slice(1)}Icon`;\n}\n\nconst ConnectionProviderLogo = ({ provider }: { provider: string | undefined }) => {\n  if (!provider) {\n    return <ChameleonIcons.XtimeIcon />;\n  }\n\n  const normalizedProvider = provider.toLowerCase().trim();\n  const iconKey = buildIconKey(normalizedProvider);\n\n  const iconsMap = ChameleonIcons as unknown as Record<string, ComponentType>;\n  let Icon: ComponentType | undefined;\n  try {\n    Icon = iconsMap[iconKey];\n  } catch {\n    Icon = undefined;\n  }\n\n  return Icon ? <Icon /> : <ChameleonIcons.IntegrationsOutlinedIcon />;\n};\n\nconst getConnectionDisplayName = (\n  connectionName: string | undefined,\n  connectionProvider: string | undefined\n): string => {\n  if (connectionName) {\n    return connectionName;\n  }\n\n  if (connectionProvider) {\n    const trimmedConnectionProvider = connectionProvider.trim();\n    return trimmedConnectionProvider.charAt(0).toUpperCase() + trimmedConnectionProvider.slice(1);\n  }\n\n  return 'Xtime'; // last default for backward compatibility\n};\n/**\n *\n * **Adding New Fields:**\n * To add support for new scheduling fields, update:\n * 1. `src/configs/scheduling-fields.config.ts` - Add field configuration\n * 2. Run `pnpm run i18n` to extract keys to en-US.json\n * *\n */\nconst SchedulingTooltip =({ details }: SchedulingTooltipParams) => {\n  const { t } = useTranslation();\n\n\n  const schedulingDetailItem = findSchedulingDetail(details);\n  const schedulingDetail: AIActionScheduling | undefined = schedulingDetailItem && isAIActionScheduling(schedulingDetailItem.value)\n    ? schedulingDetailItem.value\n    : undefined;\n\n  const isError = schedulingDetailItem?.id === ITEM_DETAIL_IDENTIFIER.SCHEDULING_ERROR_VIRTUAL_ASSISTANT;\n  const failedStepMessage = isError ? getFailedStepMessage(schedulingDetail?.failedStep, t) : undefined;\n\n  const isIncomplete = schedulingDetailItem?.id === ITEM_DETAIL_IDENTIFIER.SCHEDULING_INCOMPLETE_VIRTUAL_ASSISTANT;\n  const lastCompletedStepMessage = isIncomplete ? getLastCompletedStepMessage(schedulingDetail?.lastCompletedStep, t) : undefined;\n\n  const formData = schedulingDetail?.data ?? [];\n\n  const { connectionName, connectionProvider, filteredFormData } = extractConnectionDetails(formData);\n  const translatedFields = useSchedulingFieldTranslation(filteredFormData);\n  const connectionDisplayName = getConnectionDisplayName(connectionName, connectionProvider);\n\n  const content = (\n    <CallReportTooltipRow>\n      <div className={styles.schedulingTooltip_container}>\n        <div className={styles.schedulingTooltip_header}>\n          <div className={styles.schedulingTooltip_headerLeft}>\n            <ConnectionProviderLogo provider={connectionProvider} />{connectionDisplayName}\n          </div>\n          <SchedulingBadge details={details} />\n        </div>\n        <div className={styles.schedulingTooltip_formContent}>\n          {isError ? (\n            <Typography variant=\"body-small\" color=\"type-color-secondary\">\n              {failedStepMessage}\n            </Typography>\n          ) : isIncomplete && lastCompletedStepMessage ? (\n            <Typography variant=\"body-small\" color=\"type-color-secondary\">\n              {lastCompletedStepMessage}\n            </Typography>\n          ) : (\n            <>\n              {isEmpty(translatedFields) ? (\n                <Typography variant=\"body-small\" color=\"type-color-disabled\">\n                  {t('Info currently unavailable', {\n                    context: 'Fallback until the AI schedule actions becomes available'\n                  })}\n                </Typography>\n              ) : (\n                translatedFields.map(field => (\n                  <div key={field.originalName} className={styles.schedulingTooltip_formEntry}>\n                    <div className={styles.schedulingTooltip_formEntryName}>\n                      <Typography variant=\"body-small-strong\">{field.displayLabel}:</Typography>\n                    </div>\n                    <div className={styles.schedulingTooltip_formEntryValue}>\n                      <Typography variant=\"body-small\">\n                        {field.type === SCHEDULING_FIELD_TYPE.DATE_TIME ? (\n                          <LocalizedDate date={field.formattedValue} format={getDateFormat(bucketSize.HOUR)} />\n                        ) : (\n                          field.formattedValue\n                        )}\n                      </Typography>\n                    </div>\n                  </div>\n                ))\n              )}\n            </>\n          )}\n        </div>\n      </div>\n    </CallReportTooltipRow>\n  );\n\n  const triggerLabel = t('1 ability called', {\n    context: 'Single form captured'\n  });\n\n  return (\n    <CallReportTooltip\n      title={t('Scheduling')}\n      triggerLabel={triggerLabel}\n      triggerIcon={<ChameleonIcons.RemoteSupportOutlinedIcon />}\n      icon={<ChameleonIcons.CalendarOutlinedIcon />}\n      content={content}\n    />\n  );\n};\n\nexport default SchedulingTooltip;\n","export const TooltipColors = {\n  RED: 'background-color-red',\n  GREEN: 'background-color-dial-plan-green',\n  PURPLE: 'background-color-dial-plan-purple',\n  ACAPULCO_DIVE: 'background-color-dial-plan-acapulcoDive',\n  YELLOW: 'background-color-dial-plan-yellow',\n  DARK_YELLOW: 'background-color-dial-plan-darkYellow'\n};\n",".tooltipWithColor__content {\n  display: flex;\n  flex-direction: column;\n  justify-content: flex-start;\n  align-items: flex-start;\n\n  > * {\n    width: 100%;\n    padding: 0 var(--goto-spacing-01);\n    text-align: left;\n  }\n}\n\n.tooltipWithColor__text {\n  cursor: pointer;\n\n  --arrow-size: 0;\n\n  padding: 0;\n}\n\n.tooltipWithColor__title {\n  display: flex;\n\n  --goto-icon-color: var(--goto-icon-color-persistent);\n\n  align-items: center;\n  justify-content: flex-start;\n  padding: var(--goto-spacing-02) var(--goto-spacing-03);\n  border-radius: var(--goto-radius-medium) var(--goto-radius-medium) 0 0;\n  margin: -5px 0 0 -8px;\n  width: calc(100% + 16px);\n\n  chameleon-svg {\n    padding-right: var(--goto-spacing-01);\n  }\n}\n\n.tooltipWithColor__tooltip {\n  padding: 0;\n}\n\n.tooltipWithColor__contentText {\n  --goto-icon-color: --goto-icon-color-inverted;\n\n  display: flex;\n  padding: var(--goto-spacing-05) var(--goto-spacing-03);\n  justify-content: center;\n  align-items: center;\n\n  chameleon-svg {\n    padding-right: var(--goto-spacing-01);\n  }\n}\n\n","import clsx from 'clsx';\nimport PropTypes from 'prop-types';\nimport { TooltipWrapper } from '@analytics-common-ui/layout';\nimport styles from './TooltipWithColor.module.scss';\nimport { ZINDEX } from '../../../constants/z-index';\nimport { TooltipColors } from '../../../constants/colors';\n\nconst TooltipWithColor = ({ title, titleBackgroundColor, content, classes, children }) => {\n  const getTooltipContent = () => {\n    return (\n      <div className={styles.tooltipWithColor__content}>\n        <div className={clsx(styles.tooltipWithColor__title, titleBackgroundColor)}>{title}</div>\n        <div className={styles.tooltipWithColor__contentText}>{content}</div>\n      </div>\n    );\n  };\n\n  return (\n    <TooltipWrapper\n      compact\n      max-width=\"300\"\n      title={getTooltipContent()}\n      zIndex={ZINDEX.TOOLTIP}\n      className={clsx(styles.tooltipWithColor__text, classes?.tooltipWithColor__root)}>\n      {children}\n    </TooltipWrapper>\n  );\n};\n\nTooltipWithColor.propTypes = {\n  /** The title to display */\n  title: PropTypes.node,\n  /** The content to display */\n  content: PropTypes.node,\n  /** Classes definition for the tooltip\n   *\n   * Only tooltipWithColor__title is supported\n   * */\n  classes: PropTypes.shape({\n    tooltipWithColor__root: PropTypes.string\n  }),\n  /** The background color of the title */\n  titleBackgroundColor: PropTypes.oneOf(Object.values(TooltipColors))\n};\n\nexport default TooltipWithColor;\n",".container {\n  display: flex;\n  gap: 0.5em;\n  align-items: center;\n}\n\n.tooltip {\n  &[is-open],\n  &:hover {\n    cursor: pointer;\n    color: var(--goto-interactive-color-persistent-active);\n\n    --goto-icon-color: var(--goto-interactive-color-persistent-active);\n\n    background-color: var(--goto-interactive-color-persistent-pressed);\n    border-radius: var(--goto-radius-large);\n    padding: 0 var(--goto-spacing-03);\n    margin: 0 calc(var(--goto-spacing-03) * -1);\n  }\n}\n\n.tooltip[is-open] .container {\n  color: var(--goto-interactive-color-persistent-active);\n}\n\n.tooltipIconColorBlack {\n  display: flex;\n\n  --goto-icon-color: var(--goto-brand-color-black);\n}\n\n.iconRotate {\n  display: flex;\n  transform: rotate(-90deg);\n}\n\n.queueContents {\n  padding: var(--goto-spacing-01);\n}\n","import { VoicemailOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { Typography } from '@getgo/chameleon-web-react-wrapper';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { voicemailStatuses } from '../../../../../../constants/call-report-modal';\nimport { TooltipColors } from '../../../../../../constants/colors';\nimport { GroupDetail, ITEM_DETAIL_IDENTIFIER } from '../../../../../../types/CallReport';\nimport TooltipWithColor from '../../../../TooltipWithColor/TooltipWithColor';\nimport styles from '../groupDetailsTooltip.module.scss';\n\nexport type VoicemailTooltipProps = {\n  details: GroupDetail[];\n};\n\nconst VoicemailTooltip: React.FC<VoicemailTooltipProps> = ({ details }) => {\n  const { t } = useTranslation();\n\n  const voicemailStatus = details.find(d => d.id === ITEM_DETAIL_IDENTIFIER.STATUS)?.value as string;\n\n  const trigger = (\n    <div className={styles.container}>\n      <VoicemailOutlinedIcon />\n      {t('Voicemail')}\n    </div>\n  );\n\n  if (!voicemailStatus) {\n    return trigger;\n  }\n\n  return (\n    <TooltipWithColor\n      titleBackgroundColor={TooltipColors.GREEN}\n      title={\n        <>\n          <VoicemailOutlinedIcon />\n          <Typography variant=\"caption-medium\" color=\"type-color-brand-default\">\n            {t('Voicemail')}\n          </Typography>\n        </>\n      }\n      content={\n        <>\n          {t('Status:')}&nbsp;\n          <Typography tag=\"span\" variant=\"caption-medium\" color=\"type-color-secondary-inverted\">\n            {t((voicemailStatuses as Record<string, string>)[voicemailStatus] ?? voicemailStatus)}\n          </Typography>\n        </>\n      }>\n      <Typography color=\"type-color-brand-default\">\n        <div className={styles.tooltip}>{trigger}</div>\n      </Typography>\n    </TooltipWithColor>\n  );\n};\n\nexport default VoicemailTooltip;\n","import { DialPadOutlinedIcon, PersonOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { Typography } from '@getgo/chameleon-web-react-wrapper';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { extensionDetails } from '../../../../../../constants/call-report-modal';\nimport { TooltipColors } from '../../../../../../constants/colors';\nimport { GroupDetail, ITEM_DETAIL_IDENTIFIER } from '../../../../../../types/CallReport';\nimport TooltipWithColor from '../../../../TooltipWithColor/TooltipWithColor';\nimport styles from '../groupDetailsTooltip.module.scss';\n\nexport type AutoAttendantTooltipProps = {\n  details: GroupDetail[];\n};\n\nconst AutoAttendantTooltip: React.FC<AutoAttendantTooltipProps> = ({ details }) => {\n  const { t } = useTranslation();\n\n  const result = details.find(d => d.id === ITEM_DETAIL_IDENTIFIER.RESULT)?.value as string;\n  const option = details.find(d => d.id === ITEM_DETAIL_IDENTIFIER.OPTION)?.value as string;\n\n  let displayValue: string | undefined;\n\n  if (result === ITEM_DETAIL_IDENTIFIER.INVALID_OPTION) {\n    displayValue = t('Invalid option', { context: 'Auto attendant option' });\n  } else if (result && option) {\n    displayValue = `${t((extensionDetails as Record<string, string>)[result])} (${t('Opt {{option}}', {\n      context: 'Auto attendant option',\n      option\n    })})`;\n  }\n\n  const trigger = (\n    <div className={styles.container}>\n      {displayValue && <PersonOutlinedIcon />}\n      {displayValue}\n    </div>\n  );\n\n  if (!option) {\n    return trigger;\n  }\n\n  return (\n    <TooltipWithColor\n      titleBackgroundColor={TooltipColors.GREEN}\n      title={\n        <>\n          <DialPadOutlinedIcon />\n          <Typography variant=\"caption-medium\" color=\"type-color-brand-default\">\n            {t('Auto attendant node')}\n          </Typography>\n        </>\n      }\n      content={\n        <>\n          <PersonOutlinedIcon />\n          {t('Customer pressed:')}&nbsp;\n          <Typography variant=\"caption-medium\" color=\"type-color-secondary-inverted\">\n            {t('Option {{option}}', { option, context: 'Customer phone option pressed' })}\n          </Typography>\n        </>\n      }>\n      <Typography color=\"type-color-brand-default\">\n        <div className={styles.tooltip}>{trigger}</div>\n      </Typography>\n    </TooltipWithColor>\n  );\n};\n\nexport default AutoAttendantTooltip;\n","import { CameraRoomViewOutlinedIcon, TimeLimitOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { Typography } from '@getgo/chameleon-web-react-wrapper';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { extensionDetails } from '../../../../../../constants/call-report-modal';\nimport { TooltipColors } from '../../../../../../constants/colors';\nimport { GroupDetail, ITEM_DETAIL_IDENTIFIER } from '../../../../../../types/CallReport';\nimport TooltipWithColor from '../../../../TooltipWithColor/TooltipWithColor';\nimport styles from '../groupDetailsTooltip.module.scss';\n\nexport type ScheduleTooltipProps = {\n  details: GroupDetail[];\n};\n\nconst ScheduleTooltip: React.FC<ScheduleTooltipProps> = ({ details }) => {\n  const { t } = useTranslation();\n\n  const result = details.find(d => d.id === ITEM_DETAIL_IDENTIFIER.RESULT)?.value as string;\n  const displayValue = result ? t((extensionDetails as Record<string, string>)[result]) : '';\n\n  const trigger = (\n    <div className={styles.container}>\n      {displayValue && <CameraRoomViewOutlinedIcon />}\n      {displayValue}\n    </div>\n  );\n\n  if (!result) {\n    return trigger;\n  }\n\n  return (\n    <TooltipWithColor\n      titleBackgroundColor={TooltipColors.PURPLE}\n      title={\n        <>\n          <TimeLimitOutlinedIcon />\n          <Typography variant=\"caption-medium\" color=\"type-color-brand-default\">\n            {t('Schedule node')}\n          </Typography>\n        </>\n      }\n      content={\n        <>\n          <CameraRoomViewOutlinedIcon />\n          {t('Schedule selected:')}&nbsp;\n          <Typography tag=\"span\" variant=\"caption-medium\" color=\"type-color-secondary-inverted\">\n            {t((extensionDetails as Record<string, string>)[result])}\n          </Typography>\n        </>\n      }>\n      <Typography color=\"type-color-brand-default\">\n        <div className={styles.tooltip}>{trigger}</div>\n      </Typography>\n    </TooltipWithColor>\n  );\n};\n\nexport default ScheduleTooltip;\n","import { PhoneTransferOutlinedIcon, SmartphoneOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { Typography } from '@getgo/chameleon-web-react-wrapper';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { TooltipColors } from '../../../../../../constants/colors';\nimport { GroupDetail, ITEM_DETAIL_IDENTIFIER } from '../../../../../../types/CallReport';\nimport TooltipWithColor from '../../../../TooltipWithColor/TooltipWithColor';\nimport styles from '../groupDetailsTooltip.module.scss';\n\nexport type ExternalNumberTooltipProps = {\n  details: GroupDetail[];\n};\n\nconst ExternalNumberTooltip: React.FC<ExternalNumberTooltipProps> = ({ details }) => {\n  const { t } = useTranslation();\n\n  const number = details.find(d => d.id === ITEM_DETAIL_IDENTIFIER.NUMBER)?.value as string;\n\n  const trigger = (\n    <div className={styles.container}>\n      <PhoneTransferOutlinedIcon />\n      {t('Transferred')}\n    </div>\n  );\n\n  return (\n    <TooltipWithColor\n      titleBackgroundColor={TooltipColors.YELLOW}\n      title={\n        <>\n          <div className={styles.tooltipIconColorBlack}>\n            <SmartphoneOutlinedIcon />\n          </div>\n          <Typography variant=\"caption-medium\" color=\"type-color-default\">\n            {t('External number')}\n          </Typography>\n        </>\n      }\n      content={\n        <>\n          <PhoneTransferOutlinedIcon />\n          {t('Blindly transferred:')}&nbsp;\n          <Typography tag=\"span\" variant=\"caption-medium\" color=\"type-color-secondary-inverted\">\n            {number ?? t('to the external number')}\n          </Typography>\n        </>\n      }>\n      <Typography color=\"type-color-brand-default\">\n        <div className={styles.tooltip}>{trigger}</div>\n      </Typography>\n    </TooltipWithColor>\n  );\n};\n\nexport default ExternalNumberTooltip;\n","import { HalfStarOutlinedIcon, PersonOutlinedIcon, StarOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { Typography } from '@getgo/chameleon-web-react-wrapper';\nimport { toArray as _toArray } from 'lodash';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { TooltipColors } from '../../../../../../constants/colors';\nimport { GroupDetail, ITEM_DETAIL_IDENTIFIER } from '../../../../../../types/CallReport';\nimport TooltipWithColor from '../../../../TooltipWithColor/TooltipWithColor';\nimport styles from '../groupDetailsTooltip.module.scss';\n\nexport type CallerInfoTooltipProps = {\n  details: GroupDetail[];\n};\n\nconst MAX_DISPLAYED_INTENTS = 2;\n\nconst CallerInfoTooltip: React.FC<CallerInfoTooltipProps> = ({ details }) => {\n  const { t } = useTranslation();\n\n  const intentsRaw = details.find(d => d.id === ITEM_DETAIL_IDENTIFIER.INTENTS)?.value;\n  const intents = intentsRaw ? (_toArray(intentsRaw) as Array<{ intent: string }>) : [];\n\n  let displayedIntents = intents.map(x => x.intent);\n\n  if (displayedIntents.length > MAX_DISPLAYED_INTENTS) {\n    displayedIntents = displayedIntents.slice(0, MAX_DISPLAYED_INTENTS).concat([\n      t('+{{numberOfIntents}} more', {\n        numberOfIntents: displayedIntents.length - MAX_DISPLAYED_INTENTS,\n        count: displayedIntents.length - MAX_DISPLAYED_INTENTS\n      })\n    ]);\n  }\n\n  const displayValue = displayedIntents.length > 0 ? displayedIntents.join(', ') : '';\n\n  const trigger = (\n    <div className={styles.container}>\n      {displayValue && <HalfStarOutlinedIcon />}\n      {displayValue}\n    </div>\n  );\n\n  if (!intents.length) {\n    return trigger;\n  }\n\n  return (\n    <TooltipWithColor\n      titleBackgroundColor={TooltipColors.ACAPULCO_DIVE}\n      title={\n        <>\n          <PersonOutlinedIcon />\n          <Typography variant=\"caption-medium\" color=\"type-color-brand-default\">\n            {t('Caller info node')}\n          </Typography>\n        </>\n      }\n      content={\n        <>\n          <StarOutlinedIcon />\n          {t('Intents:')}&nbsp;\n          <Typography tag=\"span\" variant=\"caption-medium\" color=\"type-color-secondary-inverted\">\n            {intents.map(x => x.intent).join(', ')}\n          </Typography>\n        </>\n      }>\n      <Typography color=\"type-color-brand-default\">\n        <div className={styles.tooltip}>{trigger}</div>\n      </Typography>\n    </TooltipWithColor>\n  );\n};\n\nexport default CallerInfoTooltip;\n","import { formatDuration } from '@analytics-common-ui/utils';\nimport { FineAdjustmentOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { Typography } from '@getgo/chameleon-web-react-wrapper';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { TooltipColors } from '../../../../../../constants/colors';\nimport { GroupDetail, ITEM_DETAIL_IDENTIFIER } from '../../../../../../types/CallReport';\nimport TooltipWithColor from '../../../../TooltipWithColor/TooltipWithColor';\nimport styles from '../groupDetailsTooltip.module.scss';\n\nexport type QueueGroupDetailsTooltipProps = {\n  details: GroupDetail[];\n};\n\nconst QueueGroupDetailsTooltip: React.FC<QueueGroupDetailsTooltipProps> = ({ details }) => {\n  const { t } = useTranslation();\n\n  const name = details.find(d => d.id === ITEM_DETAIL_IDENTIFIER.QUEUE_NAME)?.value as string;\n  const type = details.find(d => d.id === ITEM_DETAIL_IDENTIFIER.QUEUE_TYPE)?.value as string;\n  const wrapUp = details.find(d => d.id === ITEM_DETAIL_IDENTIFIER.QUEUE_WRAP_UP)?.value as number;\n  const intents = details.find(d => d.id === ITEM_DETAIL_IDENTIFIER.INTENTS)?.value as string[];\n  const callbackOffered = details.find(d => d.id === ITEM_DETAIL_IDENTIFIER.QUEUE_CALLBACK_OFFERED)?.value as boolean;\n\n  const hasContent = name || type || wrapUp >= 0 || intents?.length || callbackOffered;\n\n  const trigger = (\n    <div className={styles.container}>\n      <span className={styles.iconRotate}>\n        <FineAdjustmentOutlinedIcon />\n      </span>\n      {name}\n    </div>\n  );\n\n  if (!hasContent) {\n    return trigger;\n  }\n\n  return (\n    <TooltipWithColor\n      titleBackgroundColor={TooltipColors.DARK_YELLOW}\n      title={\n        <>\n          <span className={styles.iconRotate}>\n            <FineAdjustmentOutlinedIcon />\n          </span>\n          <Typography variant=\"caption-medium\" color=\"type-color-brand-default\">\n            {t('Queue node')}\n          </Typography>\n        </>\n      }\n      content={\n        <div>\n          {name && (\n            <div className={styles.queueContents}>\n              {t('Queue name:')}&nbsp;\n              <Typography tag=\"span\" variant=\"caption-medium\" color=\"type-color-secondary-inverted\">\n                {name}\n              </Typography>\n            </div>\n          )}\n          {type && (\n            <div className={styles.queueContents}>\n              {t('Queue type:')}&nbsp;\n              <Typography tag=\"span\" variant=\"caption-medium\" color=\"type-color-secondary-inverted\">\n                {type}\n              </Typography>\n            </div>\n          )}\n          {wrapUp >= 0 && (\n            <div className={styles.queueContents}>\n              {t('Queue configured wrap up:')}&nbsp;\n              <Typography tag=\"span\" variant=\"caption-medium\" color=\"type-color-secondary-inverted\">\n                {formatDuration(wrapUp)}\n              </Typography>\n            </div>\n          )}\n          {intents?.length > 0 && (\n            <div className={styles.queueContents}>\n              {t('Intents:')}&nbsp;\n              <Typography tag=\"span\" variant=\"caption-medium\" color=\"type-color-secondary-inverted\">\n                {intents.join(', ')}\n              </Typography>\n            </div>\n          )}\n          {callbackOffered && (\n            <div className={styles.queueContents}>\n              {t('Queue callback offered:')}&nbsp;\n              <Typography tag=\"span\" variant=\"caption-medium\" color=\"type-color-secondary-inverted\">\n                {callbackOffered\n                  ? t('Yes', { context: 'Queue callback was offered' })\n                  : t('No', { context: 'Queue callback was not offered' })}\n              </Typography>\n            </div>\n          )}\n        </div>\n      }\n    >\n      <Typography color=\"type-color-brand-default\">\n        <div className={styles.tooltip}>{trigger}</div>\n      </Typography>\n    </TooltipWithColor>\n  );\n};\n\nexport default QueueGroupDetailsTooltip;\n",".queueTooltip__icon {\n  transform: rotate(90deg);\n}\n","import { formatDuration } from '@analytics-common-ui/utils';\nimport { FineAdjustmentOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { Typography } from '@getgo/chameleon-web-react-wrapper';\nimport { isEmpty, truncate } from 'lodash';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { GroupDetail, ITEM_DETAIL_IDENTIFIER } from '../../../../../../types/CallReport';\nimport { CallReportTooltip, CallReportTooltipRow } from '../CallReportTooltip';\nimport queueTooltipStyles from './QueueTooltip.module.scss';\n\nconst getTooltipRecord = (title: string, content: string) => (\n  <>\n    {title}&nbsp;\n    <Typography tag=\"span\" variant=\"caption-medium\" color=\"type-color-secondary\">\n      {content}\n    </Typography>\n  </>\n);\n\nexport type QueueTooltipParams = {\n  details: GroupDetail[];\n};\n\nconst QueueTooltip: React.FC<QueueTooltipParams> = ({ details }) => {\n  const { t } = useTranslation();\n\n  // TODO add type guards to detect the proper typing instead of casting\n  const queueName = details.find(d => d.id === ITEM_DETAIL_IDENTIFIER.QUEUE_NAME)?.value as string;\n  const type = details.find(d => d.id === ITEM_DETAIL_IDENTIFIER.QUEUE_TYPE)?.value as string;\n  const wrapUp = details.find(d => d.id === ITEM_DETAIL_IDENTIFIER.QUEUE_WRAP_UP)?.value as number;\n  const intents = details.find(d => d.id === ITEM_DETAIL_IDENTIFIER.INTENTS)?.value as string[];\n  const callbackOffered = details.find(d => d.id === ITEM_DETAIL_IDENTIFIER.QUEUE_CALLBACK_OFFERED)?.value as boolean;\n\n  const content = (\n    <>\n      {type && <CallReportTooltipRow>{getTooltipRecord(t('Queue type:'), type)}</CallReportTooltipRow>}\n      {wrapUp !== undefined && (\n        <CallReportTooltipRow>\n          {getTooltipRecord(t('Queue configured wrap up:'), formatDuration(wrapUp))}\n        </CallReportTooltipRow>\n      )}\n      {!isEmpty(intents) && (\n        <CallReportTooltipRow>{getTooltipRecord(t('Intents:'), intents.join(', '))}</CallReportTooltipRow>\n      )}\n      {callbackOffered !== undefined && (\n        <CallReportTooltipRow>\n          {getTooltipRecord(\n            t('Queue callback offered:'),\n            callbackOffered\n              ? t('Yes', { context: 'Queue callback was offered' })\n              : t('No', { context: 'Queue callback was not offered' })\n          )}\n        </CallReportTooltipRow>\n      )}\n    </>\n  );\n\n  const triggerLabel = truncate(queueName, { length: 23 });\n\n  const icon = (\n    <div className={queueTooltipStyles.queueTooltip__icon}>\n      <FineAdjustmentOutlinedIcon />\n    </div>\n  );\n\n  return <CallReportTooltip title={queueName} triggerLabel={triggerLabel} icon={icon} content={content} />;\n};\n\nexport default QueueTooltip;\n",".directoryReferencedTooltip_container {\n  width: 100%;\n}\n\n.directoryReferencedTooltip_searchRow {\n  display: flex;\n  align-items: center;\n  gap: var(--goto-spacing-02);\n  margin-bottom: var(--goto-spacing-02);\n}\n\n.directoryReferencedTooltip_resultBox {\n  padding: var(--goto-spacing-04) var(--goto-spacing-02);\n  border-radius: var(--goto-radius-large);\n  background-color: var(--goto-surface-color-secondary);\n  text-align: center;\n}\n","import { ContactAddressBookOutlinedIcon, RemoteSupportOutlinedIcon, SearchOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { Typography } from '@getgo/chameleon-web-react-wrapper';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { callReportGroupStatuses } from '../../../../../../constants/call-report-modal';\nimport { isAIActionDirectorySearch } from '../../../../../../types/ai-actions/AiActions.model';\nimport { callStatuses, GroupDetail, ITEM_DETAIL_IDENTIFIER } from '../../../../../../types/CallReport';\nimport { CallReportTooltip, CallReportTooltipRow } from '../CallReportTooltip';\nimport styles from './DirectoryReferencedTooltip.module.scss';\n\nexport type DirectoryReferencedTooltipParams = {\n  details: GroupDetail[];\n};\n\nconst CLARIFICATION_THRESHOLD = 5;\n\nconst DirectoryReferencedTooltip: React.FC<DirectoryReferencedTooltipParams> = ({ details }) => {\n  const { t } = useTranslation();\n\n  const getDirectorySearchAction = () => {\n    const detail = details.find((d: GroupDetail) => d.id === ITEM_DETAIL_IDENTIFIER.DIRECTORY_SEARCH);\n    return isAIActionDirectorySearch(detail?.value) ? detail.value : undefined;\n  };\n\n  const title = callReportGroupStatuses[callStatuses.DIRECTORY_SEARCH_VIRTUAL_ASSISTANT] as string;\n  const action = getDirectorySearchAction();\n  const searchName = action?.searchName ?? '';\n  const resultCount = action?.resultCount ?? 0;\n\n  const content = (\n    <CallReportTooltipRow>\n      <div className={styles.directoryReferencedTooltip_container}>\n        <div className={styles.directoryReferencedTooltip_searchRow}>\n          <SearchOutlinedIcon />\n          <Typography variant=\"body-small-strong\">\n            {t('Request for {{searchName}}', {\n              context: 'Directory search query',\n              searchName\n            })}\n          </Typography>\n        </div>\n        <div className={styles.directoryReferencedTooltip_resultBox}>\n          <Typography\n            variant=\"body-small-strong\"\n            color=\"type-color-secondary\"\n          >\n            {resultCount > 0\n              ? t('{{resultCount}} matches found', {\n                  context: 'Directory search result count',\n                  count: resultCount,\n                  resultCount\n                })\n              : t('No results found', {\n                  context: 'Directory search no results'\n                })}\n          </Typography>\n          {resultCount >= CLARIFICATION_THRESHOLD && (\n            <Typography variant=\"caption-medium\" color=\"type-color-secondary\">\n              {t('Clarification required (5+ results)', {\n                context: 'Directory search clarification needed'\n              })}\n            </Typography>\n          )}\n        </div>\n      </div>\n    </CallReportTooltipRow>\n  );\n\n  const triggerLabel = t('1 ability called', {\n    context: 'Single form captured'\n  });\n\n  return (\n    <CallReportTooltip\n      title={title}\n      triggerLabel={triggerLabel}\n      triggerIcon={<RemoteSupportOutlinedIcon />}\n      icon={<ContactAddressBookOutlinedIcon />}\n      content={content}\n    />\n  );\n};\n\nexport default DirectoryReferencedTooltip;\n","import PropTypes from 'prop-types';\nimport { truncate as _truncate } from 'lodash';\nimport { Typography } from '@getgo/chameleon-web-react-wrapper';\nimport {\n  PersonFilledIcon,\n  SmallArrowRightFilledIcon,\n  VoicemailOutlinedIcon,\n  VirtualReceptionistOutlinedIcon,\n  PhoneNumberFilledIcon,\n  VectorOutlinedIcon,\n  FlowchartFilledIcon\n} from '@getgo/chameleon-icons/react';\nimport { useCallback, useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport {\n  TRANSFERRER_NAME,\n  DESTINATION_NAME,\n  DESTINATION_NUMBER,\n  TRANSFERRER_NUMBER,\n  DESTINATION_TYPE\n} from '../../../../../constants/call-report-modal';\nimport styles from './GroupDetailsColumn.module.scss';\nimport VirtualAssistantTooltip from '../tooltips/VirtualAssistantTooltip/VirtualAssistantTooltip';\nimport { TooltipWrapper } from '@analytics-common-ui/layout';\nimport { ZINDEX } from '../../../../../constants/z-index';\nimport {\n  callStatuses,\n  dialPlanStatuses,\n  warmTransferStatuses,\n  ITEM_DETAIL_IDENTIFIER\n} from '../../../../../types/CallReport.ts';\nimport KnowledgeAccessedTooltip from '../tooltips/KnowledgeAccessedTooltip/KnowledgeAccessedTooltip';\nimport InfoCapturedTooltip from '../tooltips/InfoCaptured/InfoCapturedTooltip';\nimport SchedulingTooltip from '../tooltips/Scheduling/SchedulingTooltip';\nimport VoicemailTooltip from '../tooltips/VoicemailTooltip/VoicemailTooltip';\nimport AutoAttendantTooltip from '../tooltips/AutoAttendantTooltip/AutoAttendantTooltip';\nimport ScheduleTooltip from '../tooltips/ScheduleTooltip/ScheduleTooltip';\nimport ExternalNumberTooltip from '../tooltips/ExternalNumberTooltip/ExternalNumberTooltip';\nimport CallerInfoTooltip from '../tooltips/CallerInfoTooltip/CallerInfoTooltip';\nimport QueueGroupDetailsTooltip from '../tooltips/QueueGroupDetailsTooltip/QueueGroupDetailsTooltip';\nimport QueueTooltip from '../tooltips/QueueTooltip/QueueTooltip';\nimport DirectoryReferencedTooltip from '../tooltips/DirectoryReferencedTooltip/DirectoryReferencedTooltip';\n\nconst callReportGroupDetailsIcons = {\n  ENTERED_DIAL_PLAN: '',\n  SOUND_CLIP: <VoicemailOutlinedIcon />,\n  CONNECTED_VIRTUAL_ASSISTANT: <VirtualReceptionistOutlinedIcon />,\n  PHONE_NUMBER: <PhoneNumberFilledIcon />,\n  LINE: <VectorOutlinedIcon />,\n  AGENT: <PersonFilledIcon />,\n  VIRTUAL_ASSISTANT: <VirtualReceptionistOutlinedIcon />,\n  VOICEMAIL: <VoicemailOutlinedIcon />,\n  VOICEMAIL_BOX: <VoicemailOutlinedIcon />,\n  DIAL_PLAN: <FlowchartFilledIcon />\n};\nconst PARTICIPANT_MAX_LENGTH = 27;\n\nconst STATUS_TOOLTIP_BUILDERS = {\n  [callStatuses.VOICEMAIL]: VoicemailTooltip,\n  [dialPlanStatuses.AUTO_ATTENDANT]: AutoAttendantTooltip,\n  [dialPlanStatuses.SCHEDULE]: ScheduleTooltip,\n  [dialPlanStatuses.EXTERNAL_NUMBER]: ExternalNumberTooltip,\n  [dialPlanStatuses.CALLER_INFO]: CallerInfoTooltip,\n  [dialPlanStatuses.QUEUE]: QueueGroupDetailsTooltip,\n  [callStatuses.OUTCOME_VIRTUAL_ASSISTANT]: VirtualAssistantTooltip,\n  [callStatuses.KNOWLEDGE_SEARCH_VIRTUAL_ASSISTANT]: KnowledgeAccessedTooltip,\n  [callStatuses.INFO_CAPTURE_VIRTUAL_ASSISTANT]: InfoCapturedTooltip,\n  [callStatuses.SCHEDULING_BOOKED_VIRTUAL_ASSISTANT]: SchedulingTooltip,\n  [callStatuses.SCHEDULING_MODIFIED_VIRTUAL_ASSISTANT]: SchedulingTooltip,\n  [callStatuses.SCHEDULING_CANCELLED_VIRTUAL_ASSISTANT]: SchedulingTooltip,\n  [callStatuses.SCHEDULING_ERROR_VIRTUAL_ASSISTANT]: SchedulingTooltip,\n  [callStatuses.SCHEDULING_INCOMPLETE_VIRTUAL_ASSISTANT]: SchedulingTooltip,\n  [callStatuses.DIRECTORY_SEARCH_VIRTUAL_ASSISTANT]: DirectoryReferencedTooltip\n};\n\nexport const GroupDetailsColumn = ({ groupItem }) => {\n  const { t } = useTranslation();\n\n  const getWarmTransferDisplay = useCallback(\n    detail => {\n      const transferrerName = detail.find(el => el.id === TRANSFERRER_NAME)?.value ?? '';\n      const transferrerNumber = detail.find(el => el.id === TRANSFERRER_NUMBER)?.value;\n\n      const destinationName = detail.find(el => el.id === DESTINATION_NAME)?.value ?? '';\n      const destinationNumber = detail.find(el => el.id === DESTINATION_NUMBER)?.value;\n\n      const infoTransferrer = transferrerNumber ? `(${transferrerNumber}) ${transferrerName}` : '';\n      const transferrerMaxLength = 18;\n\n      const infoDestination = `(${destinationNumber}) ${destinationName}`;\n      const destinationMaxLengthWithTransferrer = 16;\n      const destinationMaxLengthWithoutTransferrer = 20;\n      const destinationMaxLength = transferrerNumber\n        ? destinationMaxLengthWithTransferrer - infoTransferrer.length\n        : destinationMaxLengthWithoutTransferrer;\n\n      return (\n        <>\n          {transferrerNumber && (\n            <>\n              <PersonFilledIcon />\n              <TooltipWrapper\n                zIndex={ZINDEX.TOOLTIP}\n                hidden={infoTransferrer.length <= transferrerMaxLength}\n                title={t(`${infoTransferrer} is transferring to ${infoDestination}`)}\n                placement=\"top\">\n                <Typography\n                  className={styles.groupDetailsColumn__simpleTooltip}\n                  color={infoTransferrer.length > transferrerMaxLength && 'type-color-brand-default'}>\n                  {_truncate(infoTransferrer, { length: transferrerMaxLength })}\n                </Typography>\n              </TooltipWrapper>\n              {destinationNumber && destinationMaxLength >= 3 && <SmallArrowRightFilledIcon />}\n            </>\n          )}\n          {destinationNumber && infoTransferrer.length <= transferrerMaxLength && (\n            <>\n              {destinationMaxLength >= 3 && <PersonFilledIcon />}\n              <TooltipWrapper\n                zIndex={ZINDEX.TOOLTIP}\n                hidden={infoDestination.length <= destinationMaxLength}\n                title={`${infoDestination}`}\n                placement=\"top\">\n                <Typography\n                  className={styles.groupDetailsColumn__simpleTooltip}\n                  color={infoDestination.length > destinationMaxLength && 'type-color-brand-default'}>\n                  {_truncate(infoDestination, { length: destinationMaxLength })}\n                </Typography>\n              </TooltipWrapper>\n            </>\n          )}\n        </>\n      );\n    },\n    [t]\n  );\n\n  const getGroupDetailDisplay = useCallback(\n    (detail, status) => {\n      if (warmTransferStatuses[status]) {\n        return getWarmTransferDisplay(detail);\n      }\n\n      if (status === callStatuses.CONNECTED_VIRTUAL_ASSISTANT) {\n        const values = [\n          detail.find(d => d.id === ITEM_DETAIL_IDENTIFIER.VIRTUAL_ASSISTANT_NUMBER)?.value,\n          detail.find(d => d.id === ITEM_DETAIL_IDENTIFIER.VIRTUAL_ASSISTANT_NAME)?.value\n        ].filter(Boolean);\n        const virtualAssistantName = values.join(' - ');\n\n        return (\n          <TooltipWrapper\n            zIndex={ZINDEX.TOOLTIP}\n            hidden={virtualAssistantName.length <= PARTICIPANT_MAX_LENGTH}\n            title={virtualAssistantName}\n            placement=\"top\">\n            <Typography\n              className={styles.groupDetailsColumn__simpleTooltip}\n              color={virtualAssistantName.length > PARTICIPANT_MAX_LENGTH && 'type-color-brand-default'}>\n              {_truncate(virtualAssistantName, { length: PARTICIPANT_MAX_LENGTH })}\n            </Typography>\n          </TooltipWrapper>\n        );\n      }\n\n      if (status === callStatuses.TRANSFER_VIRTUAL_ASSISTANT && detail.length > 0) {\n        const destinationType = detail.find(el => el.id === DESTINATION_TYPE)?.value;\n        const destinationName = detail.find(el => el.id === DESTINATION_NAME)?.value;\n        const destinationNumber = detail.find(el => el.id === DESTINATION_NUMBER)?.value;\n\n        if (!destinationName && !destinationNumber) {\n          return '';\n        }\n\n        switch (destinationType) {\n          case 'CALL_QUEUE': {\n            const queueDetails = detail.map(el => {\n              if (el.id === DESTINATION_NAME) {\n                return { ...el, id: ITEM_DETAIL_IDENTIFIER.QUEUE_NAME };\n              }\n              return el;\n            });\n            return <QueueTooltip details={queueDetails} />;\n          }\n          default: {\n            const icon = callReportGroupDetailsIcons[destinationType];\n            const numberDisplay = destinationNumber ? `(${destinationNumber})` : '';\n            const destinationLabel = [numberDisplay, destinationName].filter(Boolean).join(' ');\n            return (\n              <div className={styles.groupDetailsColumn__container}>\n                {icon && <span className={styles.icon}>{icon}</span>}\n                <span>{destinationLabel}</span>\n              </div>\n            );\n          }\n        }\n      }\n\n      return '';\n    },\n    [getWarmTransferDisplay]\n  );\n\n  const getGroupDetail = useCallback(\n    (detail, status) => {\n      const detailDisplay = getGroupDetailDisplay(detail, status);\n      const extensionNameIcon = callReportGroupDetailsIcons[status];\n\n      return (\n        <div className={styles.groupDetailsColumn__container}>\n          {detailDisplay && extensionNameIcon}\n          {detailDisplay}\n        </div>\n      );\n    },\n    [getGroupDetailDisplay]\n  );\n\n  const details = useMemo(() => {\n    const TooltipComponent = STATUS_TOOLTIP_BUILDERS[groupItem.status];\n\n    if (TooltipComponent) {\n      return <TooltipComponent details={groupItem.details} />;\n    }\n\n    return getGroupDetail(groupItem.details, groupItem.status);\n  }, [getGroupDetail, groupItem.details, groupItem.status]);\n\n  return groupItem.details?.length > 0 ? <div>{details}</div> : '';\n};\n\nGroupDetailsColumn.propTypes = {\n  /** The call reports items and duration */\n  groupItem: PropTypes.shape({\n    items: PropTypes.arrayOf(PropTypes.shape),\n    details: PropTypes.arrayOf(PropTypes.shape),\n    status: PropTypes.string\n  })\n};\n\nexport default GroupDetailsColumn;\n","import PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { DateTime } from 'luxon';\nimport { useState, useMemo, useCallback } from 'react';\nimport { isEmpty as _isEmpty, isNumber as _isNumber, flatten as _flatten } from 'lodash';\nimport { useTranslation } from 'react-i18next';\nimport {\n  PersonFilledIcon,\n  RoomPhysicalOutlinedIcon,\n  PhoneNumberFilledIcon,\n  VoicemailOutlinedIcon,\n  FlowchartFilledIcon,\n  ConferencePhoneFilledIcon,\n  FineAdjustmentOutlinedIcon,\n  VectorOutlinedIcon,\n  PersonOutlinedIcon,\n  PhoneHangUpOutlinedIcon,\n  PieChartOutlinedIcon,\n  VirtualReceptionistOutlinedIcon,\n  DialPadOutlinedIcon\n} from '@getgo/chameleon-icons/react';\nimport { Typography } from '@getgo/chameleon-web-react-wrapper';\nimport {\n  callReportStatuses,\n  extensionTypes,\n  inverseStatusIcons,\n  rotateStatusIcons,\n  unknownType,\n  DESTINATION_TYPE,\n  callReportGroupStatuses,\n  voicemailStatuses,\n  hangupDetails,\n  leftQueueReasons,\n  outcomes,\n  getSatisfactionScoreLabel\n} from '../../../../constants/call-report-modal';\nimport { TABLE_SORT_DIRECTIONS } from '@analytics-common-ui/core';\nimport { formatDuration } from '@analytics-common-ui/utils';\nimport Table from '../../Table/Table';\nimport { getDisplayTimeFormat } from '../../../../utils/date-time.util';\nimport styles from './CallReportDetail.module.scss';\nimport {\n  getColorFromStatus,\n  getGroupColorFromType,\n  getIconFromStatus\n} from '../../../../services/common/call-report.service';\nimport CallReportsTimeline from '../CallReportsTimeline/CallReportsTimeline';\nimport { emptyValue } from '../../../../constants/format';\nimport GroupDetailsColumn from './GroupDetailsColumn/GroupDetailsColumn';\nimport TooltipWithColor from '../../TooltipWithColor/TooltipWithColor';\nimport { TooltipColors } from '../../../../constants/colors';\nimport QueueTooltip from './tooltips/QueueTooltip/QueueTooltip';\nimport { ITEM_DETAIL_IDENTIFIER, callStatuses, groupTypes, warmTransferStatuses } from '../../../../types/CallReport';\n\nconst ROWS_PER_PAGE = 50;\n\nconst callReportExtensionTypeIcons = {\n  PHONE_NUMBER: <PhoneNumberFilledIcon />,\n  LINE: <VectorOutlinedIcon />,\n  CALL_QUEUE: (\n    <span className={styles.callReportDetail__iconRotate}>\n      <FineAdjustmentOutlinedIcon />\n    </span>\n  ),\n  VOICEMAIL: <VoicemailOutlinedIcon />,\n  VOICEMAIL_BOX: <VoicemailOutlinedIcon />,\n  DIAL_PLAN: <FlowchartFilledIcon />,\n  CONFERENCE_BRIDGE: <ConferencePhoneFilledIcon />,\n  RING_GROUP: <RoomPhysicalOutlinedIcon />,\n  DIRECT: <PersonFilledIcon />,\n  AGENT: <PersonFilledIcon />,\n  VIRTUAL_ASSISTANT: <VirtualReceptionistOutlinedIcon />\n};\n\nconst getColorStyle = color => {\n  switch (color) {\n    case 'green400':\n      return styles.callReportDetail__green400;\n    case 'yellow400':\n      return styles.callReportDetail__yellow400;\n    case 'purple500':\n      return styles.callReportDetail__purple500;\n    case 'red500':\n      return styles.callReportDetail__red500;\n    case 'blue300':\n      return styles.callReportDetail__blue300;\n    case 'orange400':\n      return styles.callReportDetail__orange400;\n    case 'color-dialPlanGroup':\n    case 'color-warmTransferGroup':\n      return styles.callReportDetail__groupIconsDefaultColor;\n    case 'color-virtualAssistantGroup':\n      return styles.callReportDetail__groupIconsPersistentColor;\n    case 'default':\n      return styles.callReportDetail__default;\n    default:\n      return styles.callReportDetail__unknown;\n  }\n};\nconst UNKNOWN = 'unknown';\n\nconst CallReportDetail = ({ callReports }) => {\n  const defaultSort = { sortingOrder: TABLE_SORT_DIRECTIONS.ASC, columnName: 'timestamp' };\n\n  const { t } = useTranslation();\n  const [sort, setSort] = useState(defaultSort);\n  const [collapsedGroupsState, setCollapsedGroupsState] = useState({});\n\n  const reportColumns = useMemo(\n    () => [\n      {\n        id: '1',\n        name: 'status',\n        label: t('Status'),\n        sortable: true,\n        width: 230\n      },\n      {\n        id: '2',\n        name: 'timestamp',\n        label: t('Timestamp'),\n        sortable: true,\n        width: 130\n      },\n      {\n        id: '3',\n        name: 'duration',\n        label: t('Duration'),\n        sortable: true,\n        width: 100\n      },\n      {\n        id: '4',\n        name: 'details',\n        label: t('Details'),\n        sortable: true,\n        width: 230\n      },\n      {\n        id: '5',\n        name: 'extensionType',\n        label: t('Ext. Type'),\n        sortable: true\n      }\n    ],\n    [t]\n  );\n\n  const getDisplayStatus = useCallback(\n    (status, groupType, isFirstGroupElement, isLastGroupElement, isCollapsed, onIconClick) => {\n      const reportStatus = groupType\n        ? t(callReportGroupStatuses[status]) || t(unknownType)\n        : t(callReportStatuses[status]) || t(unknownType);\n      const color = groupType ? getGroupColorFromType(groupType) : getColorFromStatus(status);\n\n      const statusIcon = (\n        <span\n          className={clsx(styles.callReportDetail__icon, getColorStyle(color), {\n            [styles.callReportDetail__iconAxisX]: inverseStatusIcons.includes(status),\n            [styles.callReportDetail__iconRotate]: rotateStatusIcons.includes(status)\n          })}>\n          {getIconFromStatus(status)}\n        </span>\n      );\n\n      return (\n        <div\n          className={clsx(groupType ? styles.callReportDetail__groupContainer : styles.callReportDetail__container, {\n            [styles.callReportDetail__groupFirstElement]: !isCollapsed && isFirstGroupElement,\n            [styles.callReportDetail__groupLastElement]: !isCollapsed && isLastGroupElement,\n            [styles.callReportDetail__groupCollapsed]: isCollapsed,\n            [styles.callReportDetail__dialPlan]: groupType === groupTypes.DIAL_PLAN,\n            [styles.callReportDetail__warmTransfer]: groupType === groupTypes.WARM_TRANSFER,\n            [styles.callReportDetail__virtualAssistant]: groupType === groupTypes.VIRTUAL_ASSISTANT\n          })}>\n          {isFirstGroupElement && (\n            <span\n              className={styles.callReportDetail__groupClickableOverlay}\n              onClick={onIconClick}\n              onKeyDown={onIconClick}\n              role=\"button\"\n              tabIndex={0}\n            />\n          )}\n          {statusIcon}\n          <span />\n          {reportStatus}\n        </div>\n      );\n    },\n    [t]\n  );\n\n  const getReportExtensionName = participants =>\n    `(${participants[0].number}) ${participants.map(participant => participant.name).join(', ')}`;\n\n  const getDisplayDetails = useCallback(\n    (status, details) => {\n      switch (status) {\n        case callStatuses.DISCONNECTING:\n          {\n            const leftQueueReason = details.find(d => d.id === ITEM_DETAIL_IDENTIFIER.leftQueueReason)?.value;\n            const outcome = details.find(d => d.id === ITEM_DETAIL_IDENTIFIER.outcome)?.value;\n\n            if (leftQueueReason && outcome) {\n              const parsedOutcome = outcomes.find(el => el.key === outcome);\n\n              return {\n                displayValue: (\n                  <TooltipWithColor\n                    titleBackgroundColor={parsedOutcome?.colorClass || TooltipColors.PURPLE}\n                    title={\n                      <>\n                        <PieChartOutlinedIcon />\n                        <Typography variant=\"caption-medium\" color=\"interactive-color-persistent-active\">\n                          {t('Left queue reason')}\n                        </Typography>\n                      </>\n                    }\n                    content={\n                      <>\n                        {t('Left queue reason:')}&nbsp;\n                        <Typography tag=\"span\" variant=\"caption-medium\" color=\"type-color-secondary-inverted\">\n                          {t(leftQueueReasons[leftQueueReason] || leftQueueReason)}\n                        </Typography>\n                      </>\n                    }>\n                    <div className={clsx(styles.callReportDetail__tooltip, styles.callReportDetail__container)}>\n                      <span>{t(parsedOutcome?.label || outcome)}</span>\n                    </div>\n                  </TooltipWithColor>\n                ),\n                sortValue: t(parsedOutcome?.label || outcome)\n              };\n            }\n          }\n          break;\n        case callStatuses.QUEUE:\n          {\n            const queueName = details.find(d => d.id === ITEM_DETAIL_IDENTIFIER.QUEUE_NAME)?.value;\n            if (queueName) {\n              return {\n                displayValue: <QueueTooltip details={details} />,\n                sortValue: queueName\n              };\n            }\n          }\n\n          break;\n\n        case callStatuses.VOICEMAIL:\n          {\n            const voicemailStatus = details.find(d => d.id === ITEM_DETAIL_IDENTIFIER.STATUS)?.value;\n            if (voicemailStatus) {\n              return {\n                displayValue: (\n                  <TooltipWithColor\n                    titleBackgroundColor={TooltipColors.GREEN}\n                    title={\n                      <>\n                        <VoicemailOutlinedIcon />\n                        <Typography variant=\"caption-medium\" color=\"interactive-color-persistent-active\">\n                          {t('Voicemail')}\n                        </Typography>\n                      </>\n                    }\n                    content={\n                      <>\n                        {t('Status:')}&nbsp;\n                        <Typography tag=\"span\" variant=\"caption-medium\" color=\"type-color-secondary-inverted\">\n                          {t(voicemailStatuses[voicemailStatus] ?? voicemailStatus)}\n                        </Typography>\n                      </>\n                    }>\n                    <div className={clsx(styles.callReportDetail__tooltip, styles.callReportDetail__container)}>\n                      <VoicemailOutlinedIcon />\n                      <span>{t('Voicemail')}</span>\n                    </div>\n                  </TooltipWithColor>\n                ),\n                sortValue: t('Voicemail')\n              };\n            }\n          }\n\n          break;\n\n        case callStatuses.HANG_UP:\n          {\n            const hangupStatus = details.find(d => d.id === ITEM_DETAIL_IDENTIFIER.HANG_UP_BY)?.value;\n\n            if (hangupStatus) {\n              return {\n                displayValue: (\n                  <TooltipWithColor\n                    titleBackgroundColor={TooltipColors.ACAPULCO_DIVE}\n                    title={\n                      <>\n                        <PhoneHangUpOutlinedIcon />\n                        <Typography variant=\"caption-medium\" color=\"interactive-color-persistent-active\">\n                          {t('Hangup')}\n                        </Typography>\n                      </>\n                    }\n                    content={\n                      <>\n                        {t('Hangup by:')}&nbsp;\n                        <Typography tag=\"span\" variant=\"caption-medium\" color=\"type-color-secondary-inverted\">\n                          {t(hangupDetails[hangupStatus] ?? hangupStatus)}\n                        </Typography>\n                      </>\n                    }>\n                    <div className={clsx(styles.callReportDetail__tooltip, styles.callReportDetail__container)}>\n                      <PersonOutlinedIcon />\n                      <span>{t(hangupDetails[hangupStatus] ?? hangupStatus)}</span>\n                    </div>\n                  </TooltipWithColor>\n                ),\n                sortValue: t(hangupDetails[hangupStatus] ?? hangupStatus)\n              };\n            }\n          }\n\n          break;\n\n        case callStatuses.CSAT_SCORE:\n          {\n            const csatScore = details.find(d => d.id === ITEM_DETAIL_IDENTIFIER.CSAT_SCORE)?.value;\n\n            if (csatScore) {\n              const satisfactionLabel = getSatisfactionScoreLabel(csatScore, t);\n              return {\n                displayValue: (\n                  <TooltipWithColor\n                    titleBackgroundColor={TooltipColors.GREEN}\n                    title={\n                      <>\n                        <DialPadOutlinedIcon />\n                        <Typography variant=\"caption-medium\" color=\"interactive-color-persistent-active\">\n                          {t('Satisfaction survey data')}\n                        </Typography>\n                      </>\n                    }\n                    content={\n                      <>\n                        {t('Answer given:')}&nbsp;\n                        <Typography tag=\"span\" variant=\"caption-medium\" color=\"type-color-secondary-inverted\">\n                          {satisfactionLabel}\n                        </Typography>\n                      </>\n                    }>\n                    <div className={clsx(styles.callReportDetail__tooltip, styles.callReportDetail__container)}>\n                      <DialPadOutlinedIcon />\n                      <span>{t('Pressed (opt. {{option}})', { option: csatScore })}</span>\n                    </div>\n                  </TooltipWithColor>\n                ),\n                sortValue: satisfactionLabel\n              };\n            }\n          }\n\n          break;\n\n        default:\n          return { displayValue: '', sortValue: '' };\n      }\n\n      return { displayValue: '', sortValue: '' };\n    },\n    [t]\n  );\n\n  const getDisplayExtensionType = useCallback(\n    item => {\n      if (item.extensionType) {\n        return t(extensionTypes[item.extensionType] ?? unknownType);\n      }\n\n      return emptyValue;\n    },\n    [t]\n  );\n\n  const parseGroupExtension = (groupType, groupItem) => {\n    if (extensionTypes[groupType]) {\n      return extensionTypes[groupType];\n    }\n\n    if (warmTransferStatuses[groupItem.status]) {\n      const destinationType = groupItem.details?.find(el => el.id === DESTINATION_TYPE)?.value;\n\n      if (destinationType) {\n        return extensionTypes[destinationType];\n      }\n    }\n\n    return extensionTypes[groupType];\n  };\n\n  const parseCallReportsGroup = useCallback(\n    (groupType, groupId, item) => {\n      const sortPrefix = `${groupType}_${groupId}`;\n      const isCollapsed = !!collapsedGroupsState[groupId];\n\n      const toggleGroup = () =>\n        setCollapsedGroupsState(prev => ({\n          ...prev,\n          [groupId]: !collapsedGroupsState[groupId]\n        }));\n\n      return (\n        item.callReportItems?.map((groupItem, index) => {\n          return {\n            id: `${index}_${groupItem.timestamp}_${groupItem.status}`,\n            groupId,\n            isDisabled: !callReportGroupStatuses[groupItem.status],\n            isCollapsed: index > 0 && isCollapsed,\n            values: [\n              {\n                name: 'status',\n                value: getDisplayStatus(\n                  groupItem.status,\n                  item.groupType,\n                  index === 0,\n                  index === item.callReportItems.length - 1,\n                  isCollapsed,\n                  toggleGroup\n                ),\n                sortValue: t(callReportGroupStatuses[item.callReportItems[0].status]) || t(unknownType)\n              },\n              {\n                name: 'duration',\n                value: groupItem.duration ? formatDuration(groupItem.duration) : emptyValue,\n                sortValue: item.callReportItems[0].duration || 0\n              },\n              {\n                name: 'timestamp',\n                value: getDisplayTimeFormat(groupItem.timestamp),\n                sortValue: DateTime.fromISO(item.callReportItems[0].timestamp).toMillis()\n              },\n              {\n                name: 'details',\n                value: <GroupDetailsColumn groupItem={groupItem} />,\n                sortValue: emptyValue\n              },\n              {\n                name: 'extensionType',\n                value: parseGroupExtension(groupType, groupItem),\n                sortValue: `${sortPrefix}`\n              }\n            ]\n          };\n        }) ?? []\n      );\n    },\n    [collapsedGroupsState, getDisplayStatus, t]\n  );\n\n  const getCallReportsData = useCallback(\n    callReportsData => {\n      const getDisplayExtensionName = (status, participants) => {\n        if (_isEmpty(participants)) {\n          return { displayValue: null, sortValue: '' };\n        }\n\n        if (status === callStatuses.WRAP_UP) {\n          const wrapUpDetails = t('Wrapped up by {{name}}', { name: participants[0].name });\n          const extensionNameIcon = callReportExtensionTypeIcons[participants[0].type];\n          return {\n            displayValue: (\n              <div className={clsx(styles.callReportDetail__container)}>\n                {extensionNameIcon}\n                {wrapUpDetails}\n              </div>\n            ),\n            sortValue: wrapUpDetails\n          };\n        }\n\n        const reportExtensionName = getReportExtensionName(participants);\n        const color = getColorFromStatus(status);\n        const extensionNameIcon =\n          getColorFromStatus(status) === UNKNOWN ? (\n            <span className={getColorStyle(color)}>{callReportExtensionTypeIcons[participants[0].type]}</span>\n          ) : (\n            callReportExtensionTypeIcons[participants[0].type]\n          );\n\n        return {\n          displayValue: (\n            <div className={styles.callReportDetail__container}>\n              {extensionNameIcon}\n              {reportExtensionName}\n            </div>\n          ),\n          sortValue: reportExtensionName\n        };\n      };\n      const getDetails = item => {\n        if (item.details?.length > 0) {\n          return getDisplayDetails(item.status, item.details);\n        }\n\n        if (item.participants?.length > 0) {\n          return getDisplayExtensionName(item.status, item.participants);\n        }\n\n        return { sortValue: emptyValue, displayValue: emptyValue };\n      };\n      return (\n        callReportsData?.items?.map((item, idx) => {\n          if (item.groupType) {\n            return parseCallReportsGroup(item.groupType, item.groupId, item);\n          }\n\n          let timestampPrefix = '';\n\n          // In the event when Disconnected and Hangup are at the same time, we need to guarantee that Hangup will be first in the list\n          if (item.status === callStatuses.HANG_UP) {\n            timestampPrefix = 0;\n          } else if (item.status === callStatuses.DISCONNECTING) {\n            timestampPrefix = 1;\n          }\n\n          const details = getDetails(item);\n          const displayExtensionType = getDisplayExtensionType(item);\n          return {\n            id: `${idx}_${item.timestamp}_${item.status}`,\n            values: [\n              {\n                name: 'status',\n                value: getDisplayStatus(item.status),\n                sortValue: t(callReportStatuses[item.status]) || t(unknownType)\n              },\n              {\n                name: 'duration',\n                value: item.duration ? formatDuration(item.duration) : emptyValue,\n                sortValue: item.duration || 0\n              },\n              {\n                name: 'timestamp',\n                value: getDisplayTimeFormat(item.timestamp),\n                sortValue: DateTime.fromISO(item.timestamp).toMillis() + timestampPrefix\n              },\n              {\n                name: 'details',\n                value: details.displayValue,\n                sortValue: details.sortValue\n              },\n              {\n                name: 'extensionType',\n                value: displayExtensionType,\n                sortValue: displayExtensionType\n              }\n            ],\n            isDisabled:\n              !callReportStatuses[item.status] ||\n              !(_isEmpty(item.participants) || (item.extensionType ? extensionTypes[item.extensionType] : true))\n          };\n        }) ?? []\n      );\n    },\n    [t, getDisplayDetails, getDisplayStatus, getDisplayExtensionType, parseCallReportsGroup]\n  );\n\n  const sortCallReportsData = (sortValue, callReportsData) =>\n    [...callReportsData].sort((a, b) => {\n      const valueA = a.values.find(v => v.name === sortValue.columnName).sortValue;\n      const valueB = b.values.find(v => v.name === sortValue.columnName).sortValue;\n\n      if (sortValue.sortingOrder === TABLE_SORT_DIRECTIONS.ASC) {\n        return _isNumber(valueA) ? valueA - valueB : valueA.localeCompare(valueB);\n      }\n\n      if (sortValue.sortingOrder === TABLE_SORT_DIRECTIONS.DESC) {\n        return _isNumber(valueB) ? valueB - valueA : valueB.localeCompare(valueA);\n      }\n\n      return 0;\n    });\n\n  const callReportsDataTable = useMemo(() => {\n    const callReportsData = _flatten(getCallReportsData(callReports));\n    return sortCallReportsData(sort, callReportsData);\n  }, [callReports, getCallReportsData, sort]);\n\n  const handleOnSort = (sortingOrder, columnName) => {\n    setSort({ sortingOrder, columnName });\n  };\n\n  const addItemIcons = items =>\n    items.map(el => ({\n      ...el,\n      callReportItems: el.callReportItems?.map(groupEl => ({\n        ...groupEl,\n        icon: getIconFromStatus(groupEl.status),\n        color: getGroupColorFromType(el.groupType)\n      })),\n      icon: getIconFromStatus(el.status),\n      color: getColorFromStatus(el.status)\n    }));\n\n  return (\n    <>\n      {callReportsDataTable.length > 0 && callReports?.durationMs > 0 && (\n        <div className={styles.callReportDetail__timelineWrapper}>\n          <CallReportsTimeline callReports={addItemIcons(callReports.items)} totalDuration={callReports?.durationMs} />\n        </div>\n      )}\n      <div className={styles.callReportDetail__tableWrapper}>\n        <Table\n          classes={{ table: styles.callReportDetail__table, pagination: styles.callReportDetail__tablePagination }}\n          aria-describedby=\"call-reports-summary\"\n          data={callReportsDataTable}\n          sort={sort}\n          onSort={handleOnSort}\n          columns={reportColumns}\n          nbRowsPerPage={ROWS_PER_PAGE}\n          showPagination={callReportsDataTable.length > ROWS_PER_PAGE}\n        />\n      </div>\n    </>\n  );\n};\n\nCallReportDetail.propTypes = {\n  /** The call reports items and duration */\n  callReports: PropTypes.shape({\n    items: PropTypes.arrayOf(PropTypes.shape),\n    durationMs: PropTypes.number\n  })\n};\n\nexport default CallReportDetail;\n",".callReportsNoDataAvailable {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  text-align: center;\n  padding: var(--goto-spacing-04);\n}\n\n.callReportsNoDataAvailable__icon {\n  padding: var(--goto-spacing-04);\n}\n\n.callReportsNoDataAvailable__heading {\n  padding: var(--goto-spacing-02);\n}\n\n.callReportsNoDataAvailable__body {\n  padding: var(--goto-spacing-02);\n  max-width: 310px;\n}\n","import PropTypes from 'prop-types';\nimport { Typography } from '@getgo/chameleon-web-react-wrapper';\nimport { AlertStaticPictogram } from '@getgo/chameleon-pictograms/react';\nimport { useTranslation } from 'react-i18next';\nimport styles from './CallReportsNoDataAvailable.module.scss';\n\nconst CallReportsNoDataAvailable = ({ text, header }) => {\n  const { t } = useTranslation();\n\n  return (\n    <div className={styles.callReportsNoDataAvailable}>\n      <div className={styles.callReportsNoDataAvailable__icon}>\n        <AlertStaticPictogram size=\"xlarge\" />\n      </div>\n      <Typography className={styles.callReportsNoDataAvailable__heading} variant=\"heading-small\">\n        {header || t('No data available!')}\n      </Typography>\n      {text && (\n        <Typography\n          className={styles.callReportsNoDataAvailable__body}\n          color=\"type-color-secondary\"\n          variant=\"body-small\">\n          {text}\n        </Typography>\n      )}\n    </div>\n  );\n};\n\nCallReportsNoDataAvailable.propTypes = {\n  /** The header to display  */\n  header: PropTypes.string,\n  /** The text to display  */\n  text: PropTypes.node\n};\n\nexport default CallReportsNoDataAvailable;\n",".audioPlayerSkeleton {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n}\n\n.audioPlayerSkeleton__ControlsSection {\n  display: flex;\n  flex: 1 1 auto;\n  justify-content: space-between;\n  align-items: center;\n  height: 36px;\n}\n\n.audioPlayerSkeleton__ProgressSection {\n  display: flex;\n  flex: 3 1 auto;\n  align-items: center;\n  width: 100%;\n  height: 36px;\n}\n\n@keyframes progress-bar {\n  from {\n    background-position: 0 0;\n  }\n\n  to {\n    background-position: -100% 0;\n  }\n}\n\n.audioPlayerSkeleton__ProgressIndicator {\n  background-color: var(--goto-surface-color-tertiary);\n  width: 100%;\n  height: 5px;\n  border-radius: 2px;\n  margin: 0 var(--goto-spacing-04);\n  position: relative;\n  overflow: hidden;\n}\n\n.audioPlayerSkeleton__ProgressBar {\n  height: 5px;\n  border-radius: 2px;\n  width: 100%;\n  position: absolute;\n  animation: progress-bar 9s linear infinite;\n  background-size: 200% 100%;\n  background-image: repeating-linear-gradient(\n    -45deg,\n    var(--goto-surface-color-tertiary),\n    var(--goto-surface-color-tertiary) 8px,\n    #98B6C9 8px,\n    #98B6C9 16px\n  );\n}\n\n.audioPlayerSkeleton__SpeedSelect {\n  width: 85px;\n}\n","import { Typography, IconButton, Select, Option } from '@getgo/chameleon-web-react-wrapper';\nimport PropTypes from 'prop-types';\nimport {\n  Rewind10OutlinedIcon,\n  Forward10OutlinedIcon,\n  SkipNextFilledIcon,\n  SkipPreviousFilledIcon,\n  SpeakerOnOutlinedIcon\n} from '@getgo/chameleon-icons/react';\nimport { useTranslation } from 'react-i18next';\n\nimport styles from './AudioPlayerSkeleton.module.scss';\n\nconst AudioPlayerSkeleton = ({ isNextDisabled, isPreviousDisabled }) => {\n  const { t } = useTranslation();\n  return (\n    <div>\n      <div className={styles.audioPlayerSkeleton}>\n        <div data-testid=\"audio-player-control-section\" className={styles.audioPlayerSkeleton__ControlsSection}>\n          <IconButton label={t('Previous audio')} variant=\"primary\" disabled={isPreviousDisabled}>\n            <SkipPreviousFilledIcon size=\"24px\" />\n          </IconButton>\n          <IconButton label={t('Forward 10 seconds')} disabled>\n            <Rewind10OutlinedIcon size=\"24px\" />\n          </IconButton>\n          <IconButton size=\"xxlarge\" isLoading label={t('Play the audio')} />\n          <IconButton label={t('Forward 10 seconds')} disabled>\n            <Forward10OutlinedIcon size=\"24px\" />\n          </IconButton>\n          <IconButton label={t('Next audio')} variant=\"primary\" disabled={isNextDisabled}>\n            <SkipNextFilledIcon size=\"24px\" />\n          </IconButton>\n        </div>\n        <div data-testid=\"audio-player-progress-section\" className={styles.audioPlayerSkeleton__ProgressSection}>\n          <IconButton\n            label={t('Mute')}\n            variant=\"primary\"\n            size=\"small\"\n            disabled\n            data-testid=\"audio-player-volume-button\">\n            <SpeakerOnOutlinedIcon size=\"16px\" />\n          </IconButton>\n          <Typography color=\"type-color-disabled\" style={{ width: '45px' }}>\n            --:--\n          </Typography>\n          <div className={styles.audioPlayerSkeleton__ProgressIndicator}>\n            <div className={styles.audioPlayerSkeleton__ProgressBar} />\n          </div>\n          <Typography color=\"type-color-disabled\" style={{ width: '45px' }}>\n            --:--\n          </Typography>\n          <Select\n            data-testid=\"audio-player-speed-select\"\n            disabled\n            size=\"small\"\n            inDialog\n            className={styles.audioPlayerSkeleton__SpeedSelect}>\n            <Option value=\"1x\" label=\"1x\" selected></Option>\n          </Select>\n        </div>\n      </div>\n    </div>\n  );\n};\nAudioPlayerSkeleton.propTypes = {\n  /** Define if previous button is disabled  */\n  isPreviousDisabled: PropTypes.bool,\n  /** Define if next button is disabled  */\n  isNextDisabled: PropTypes.bool\n};\nexport default AudioPlayerSkeleton;\n","\n.callReportModalPlayer__errorMessage {\n  display: flex;\n  width: 100%;\n  justify-content: center;\n  align-items: center;\n  padding: var(--goto-spacing-02) 0 var(--goto-spacing-04);\n\n  >* {\n    display: inline-block;\n    vertical-align: text-bottom;\n  }\n\n  >chameleon-svg {\n    padding-right: var(--goto-spacing-01);\n  }\n}\n\n.callReportModalPlayer__externalLink {\n  color: var(--goto-green-300);\n  vertical-align: inherit;\n  font-weight: 700;\n}","import environment from '../../environments';\nimport { analyticsFetchService } from './analytics-fetch.service';\n\nexport const PBX_FEATURE_FLAGS = {\n  CALL_RECORDING_V2: 'call.recording.v2',\n  CALL_RECORDING_V1: 'call.recording.v1'\n} as const;\n\ntype PbxFeatureFlagResponse = {\n  setting: string;\n};\n\nexport const fetchPbxFeatureFlag = async (\n  orgId: string,\n  flag: string,\n  controller: AbortController\n): Promise<boolean> => {\n  const url = new URL(`${environment.api.pbxFeatureFlag.url}${orgId}/${flag}`);\n  const acceptHeader = { Accept: 'application/json' };\n  const response = await analyticsFetchService<PbxFeatureFlagResponse>(url, controller, false, acceptHeader);\n  return response.setting === 'ENABLED';\n};\n","'use client';\n\nimport { createElement, forwardRef, useState, useEffect } from 'react';\n\nconst defaultIconDimensions = Object.freeze(\n  {\n    left: 0,\n    top: 0,\n    width: 16,\n    height: 16\n  }\n);\nconst defaultIconTransformations = Object.freeze({\n  rotate: 0,\n  vFlip: false,\n  hFlip: false\n});\nconst defaultIconProps = Object.freeze({\n  ...defaultIconDimensions,\n  ...defaultIconTransformations\n});\nconst defaultExtendedIconProps = Object.freeze({\n  ...defaultIconProps,\n  body: \"\",\n  hidden: false\n});\n\nfunction mergeIconTransformations(obj1, obj2) {\n  const result = {};\n  if (!obj1.hFlip !== !obj2.hFlip) {\n    result.hFlip = true;\n  }\n  if (!obj1.vFlip !== !obj2.vFlip) {\n    result.vFlip = true;\n  }\n  const rotate = ((obj1.rotate || 0) + (obj2.rotate || 0)) % 4;\n  if (rotate) {\n    result.rotate = rotate;\n  }\n  return result;\n}\n\nfunction mergeIconData(parent, child) {\n  const result = mergeIconTransformations(parent, child);\n  for (const key in defaultExtendedIconProps) {\n    if (key in defaultIconTransformations) {\n      if (key in parent && !(key in result)) {\n        result[key] = defaultIconTransformations[key];\n      }\n    } else if (key in child) {\n      result[key] = child[key];\n    } else if (key in parent) {\n      result[key] = parent[key];\n    }\n  }\n  return result;\n}\n\nfunction getIconsTree(data, names) {\n  const icons = data.icons;\n  const aliases = data.aliases || /* @__PURE__ */ Object.create(null);\n  const resolved = /* @__PURE__ */ Object.create(null);\n  function resolve(name) {\n    if (icons[name]) {\n      return resolved[name] = [];\n    }\n    if (!(name in resolved)) {\n      resolved[name] = null;\n      const parent = aliases[name] && aliases[name].parent;\n      const value = parent && resolve(parent);\n      if (value) {\n        resolved[name] = [parent].concat(value);\n      }\n    }\n    return resolved[name];\n  }\n  (Object.keys(icons).concat(Object.keys(aliases))).forEach(resolve);\n  return resolved;\n}\n\nfunction internalGetIconData(data, name, tree) {\n  const icons = data.icons;\n  const aliases = data.aliases || /* @__PURE__ */ Object.create(null);\n  let currentProps = {};\n  function parse(name2) {\n    currentProps = mergeIconData(\n      icons[name2] || aliases[name2],\n      currentProps\n    );\n  }\n  parse(name);\n  tree.forEach(parse);\n  return mergeIconData(data, currentProps);\n}\n\nfunction parseIconSet(data, callback) {\n  const names = [];\n  if (typeof data !== \"object\" || typeof data.icons !== \"object\") {\n    return names;\n  }\n  if (data.not_found instanceof Array) {\n    data.not_found.forEach((name) => {\n      callback(name, null);\n      names.push(name);\n    });\n  }\n  const tree = getIconsTree(data);\n  for (const name in tree) {\n    const item = tree[name];\n    if (item) {\n      callback(name, internalGetIconData(data, name, item));\n      names.push(name);\n    }\n  }\n  return names;\n}\n\nconst optionalPropertyDefaults = {\n  provider: \"\",\n  aliases: {},\n  not_found: {},\n  ...defaultIconDimensions\n};\nfunction checkOptionalProps(item, defaults) {\n  for (const prop in defaults) {\n    if (prop in item && typeof item[prop] !== typeof defaults[prop]) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction quicklyValidateIconSet(obj) {\n  if (typeof obj !== \"object\" || obj === null) {\n    return null;\n  }\n  const data = obj;\n  if (typeof data.prefix !== \"string\" || !obj.icons || typeof obj.icons !== \"object\") {\n    return null;\n  }\n  if (!checkOptionalProps(obj, optionalPropertyDefaults)) {\n    return null;\n  }\n  const icons = data.icons;\n  for (const name in icons) {\n    const icon = icons[name];\n    if (\n      // Name cannot be empty\n      !name || // Must have body\n      typeof icon.body !== \"string\" || // Check other props\n      !checkOptionalProps(\n        icon,\n        defaultExtendedIconProps\n      )\n    ) {\n      return null;\n    }\n  }\n  const aliases = data.aliases || /* @__PURE__ */ Object.create(null);\n  for (const name in aliases) {\n    const icon = aliases[name];\n    const parent = icon.parent;\n    if (\n      // Name cannot be empty\n      !name || // Parent must be set and point to existing icon\n      typeof parent !== \"string\" || !icons[parent] && !aliases[parent] || // Check other props\n      !checkOptionalProps(\n        icon,\n        defaultExtendedIconProps\n      )\n    ) {\n      return null;\n    }\n  }\n  return data;\n}\n\nconst matchIconName = /^[a-z0-9]+(-[a-z0-9]+)*$/;\nconst stringToIcon = (value, validate, allowSimpleName, provider = \"\") => {\n  const colonSeparated = value.split(\":\");\n  if (value.slice(0, 1) === \"@\") {\n    if (colonSeparated.length < 2 || colonSeparated.length > 3) {\n      return null;\n    }\n    provider = colonSeparated.shift().slice(1);\n  }\n  if (colonSeparated.length > 3 || !colonSeparated.length) {\n    return null;\n  }\n  if (colonSeparated.length > 1) {\n    const name2 = colonSeparated.pop();\n    const prefix = colonSeparated.pop();\n    const result = {\n      // Allow provider without '@': \"provider:prefix:name\"\n      provider: colonSeparated.length > 0 ? colonSeparated[0] : provider,\n      prefix,\n      name: name2\n    };\n    return validate && !validateIconName(result) ? null : result;\n  }\n  const name = colonSeparated[0];\n  const dashSeparated = name.split(\"-\");\n  if (dashSeparated.length > 1) {\n    const result = {\n      provider,\n      prefix: dashSeparated.shift(),\n      name: dashSeparated.join(\"-\")\n    };\n    return validate && !validateIconName(result) ? null : result;\n  }\n  if (allowSimpleName && provider === \"\") {\n    const result = {\n      provider,\n      prefix: \"\",\n      name\n    };\n    return validate && !validateIconName(result, allowSimpleName) ? null : result;\n  }\n  return null;\n};\nconst validateIconName = (icon, allowSimpleName) => {\n  if (!icon) {\n    return false;\n  }\n  return !!// Check prefix: cannot be empty, unless allowSimpleName is enabled\n  // Check name: cannot be empty\n  ((allowSimpleName && icon.prefix === \"\" || !!icon.prefix) && !!icon.name);\n};\n\nconst dataStorage = /* @__PURE__ */ Object.create(null);\nfunction newStorage(provider, prefix) {\n  return {\n    provider,\n    prefix,\n    icons: /* @__PURE__ */ Object.create(null),\n    missing: /* @__PURE__ */ new Set()\n  };\n}\nfunction getStorage(provider, prefix) {\n  const providerStorage = dataStorage[provider] || (dataStorage[provider] = /* @__PURE__ */ Object.create(null));\n  return providerStorage[prefix] || (providerStorage[prefix] = newStorage(provider, prefix));\n}\nfunction addIconSet(storage, data) {\n  if (!quicklyValidateIconSet(data)) {\n    return [];\n  }\n  return parseIconSet(data, (name, icon) => {\n    if (icon) {\n      storage.icons[name] = icon;\n    } else {\n      storage.missing.add(name);\n    }\n  });\n}\nfunction addIconToStorage(storage, name, icon) {\n  try {\n    if (typeof icon.body === \"string\") {\n      storage.icons[name] = { ...icon };\n      return true;\n    }\n  } catch (err) {\n  }\n  return false;\n}\nfunction listIcons(provider, prefix) {\n  let allIcons = [];\n  const providers = typeof provider === \"string\" ? [provider] : Object.keys(dataStorage);\n  providers.forEach((provider2) => {\n    const prefixes = typeof provider2 === \"string\" && typeof prefix === \"string\" ? [prefix] : Object.keys(dataStorage[provider2] || {});\n    prefixes.forEach((prefix2) => {\n      const storage = getStorage(provider2, prefix2);\n      allIcons = allIcons.concat(\n        Object.keys(storage.icons).map(\n          (name) => (provider2 !== \"\" ? \"@\" + provider2 + \":\" : \"\") + prefix2 + \":\" + name\n        )\n      );\n    });\n  });\n  return allIcons;\n}\n\nlet simpleNames = false;\nfunction allowSimpleNames(allow) {\n  if (typeof allow === \"boolean\") {\n    simpleNames = allow;\n  }\n  return simpleNames;\n}\nfunction getIconData(name) {\n  const icon = typeof name === \"string\" ? stringToIcon(name, true, simpleNames) : name;\n  if (icon) {\n    const storage = getStorage(icon.provider, icon.prefix);\n    const iconName = icon.name;\n    return storage.icons[iconName] || (storage.missing.has(iconName) ? null : void 0);\n  }\n}\nfunction addIcon(name, data) {\n  const icon = stringToIcon(name, true, simpleNames);\n  if (!icon) {\n    return false;\n  }\n  const storage = getStorage(icon.provider, icon.prefix);\n  if (data) {\n    return addIconToStorage(storage, icon.name, data);\n  } else {\n    storage.missing.add(icon.name);\n    return true;\n  }\n}\nfunction addCollection(data, provider) {\n  if (typeof data !== \"object\") {\n    return false;\n  }\n  if (typeof provider !== \"string\") {\n    provider = data.provider || \"\";\n  }\n  if (simpleNames && !provider && !data.prefix) {\n    let added = false;\n    if (quicklyValidateIconSet(data)) {\n      data.prefix = \"\";\n      parseIconSet(data, (name, icon) => {\n        if (addIcon(name, icon)) {\n          added = true;\n        }\n      });\n    }\n    return added;\n  }\n  const prefix = data.prefix;\n  if (!validateIconName({\n    prefix,\n    name: \"a\"\n  })) {\n    return false;\n  }\n  const storage = getStorage(provider, prefix);\n  return !!addIconSet(storage, data);\n}\nfunction iconLoaded(name) {\n  return !!getIconData(name);\n}\nfunction getIcon(name) {\n  const result = getIconData(name);\n  return result ? {\n    ...defaultIconProps,\n    ...result\n  } : result;\n}\n\nconst defaultIconSizeCustomisations = Object.freeze({\n  width: null,\n  height: null\n});\nconst defaultIconCustomisations = Object.freeze({\n  // Dimensions\n  ...defaultIconSizeCustomisations,\n  // Transformations\n  ...defaultIconTransformations\n});\n\nconst unitsSplit = /(-?[0-9.]*[0-9]+[0-9.]*)/g;\nconst unitsTest = /^-?[0-9.]*[0-9]+[0-9.]*$/g;\nfunction calculateSize(size, ratio, precision) {\n  if (ratio === 1) {\n    return size;\n  }\n  precision = precision || 100;\n  if (typeof size === \"number\") {\n    return Math.ceil(size * ratio * precision) / precision;\n  }\n  if (typeof size !== \"string\") {\n    return size;\n  }\n  const oldParts = size.split(unitsSplit);\n  if (oldParts === null || !oldParts.length) {\n    return size;\n  }\n  const newParts = [];\n  let code = oldParts.shift();\n  let isNumber = unitsTest.test(code);\n  while (true) {\n    if (isNumber) {\n      const num = parseFloat(code);\n      if (isNaN(num)) {\n        newParts.push(code);\n      } else {\n        newParts.push(Math.ceil(num * ratio * precision) / precision);\n      }\n    } else {\n      newParts.push(code);\n    }\n    code = oldParts.shift();\n    if (code === void 0) {\n      return newParts.join(\"\");\n    }\n    isNumber = !isNumber;\n  }\n}\n\nfunction splitSVGDefs(content, tag = \"defs\") {\n  let defs = \"\";\n  const index = content.indexOf(\"<\" + tag);\n  while (index >= 0) {\n    const start = content.indexOf(\">\", index);\n    const end = content.indexOf(\"</\" + tag);\n    if (start === -1 || end === -1) {\n      break;\n    }\n    const endEnd = content.indexOf(\">\", end);\n    if (endEnd === -1) {\n      break;\n    }\n    defs += content.slice(start + 1, end).trim();\n    content = content.slice(0, index).trim() + content.slice(endEnd + 1);\n  }\n  return {\n    defs,\n    content\n  };\n}\nfunction mergeDefsAndContent(defs, content) {\n  return defs ? \"<defs>\" + defs + \"</defs>\" + content : content;\n}\nfunction wrapSVGContent(body, start, end) {\n  const split = splitSVGDefs(body);\n  return mergeDefsAndContent(split.defs, start + split.content + end);\n}\n\nconst isUnsetKeyword = (value) => value === \"unset\" || value === \"undefined\" || value === \"none\";\nfunction iconToSVG(icon, customisations) {\n  const fullIcon = {\n    ...defaultIconProps,\n    ...icon\n  };\n  const fullCustomisations = {\n    ...defaultIconCustomisations,\n    ...customisations\n  };\n  const box = {\n    left: fullIcon.left,\n    top: fullIcon.top,\n    width: fullIcon.width,\n    height: fullIcon.height\n  };\n  let body = fullIcon.body;\n  [fullIcon, fullCustomisations].forEach((props) => {\n    const transformations = [];\n    const hFlip = props.hFlip;\n    const vFlip = props.vFlip;\n    let rotation = props.rotate;\n    if (hFlip) {\n      if (vFlip) {\n        rotation += 2;\n      } else {\n        transformations.push(\n          \"translate(\" + (box.width + box.left).toString() + \" \" + (0 - box.top).toString() + \")\"\n        );\n        transformations.push(\"scale(-1 1)\");\n        box.top = box.left = 0;\n      }\n    } else if (vFlip) {\n      transformations.push(\n        \"translate(\" + (0 - box.left).toString() + \" \" + (box.height + box.top).toString() + \")\"\n      );\n      transformations.push(\"scale(1 -1)\");\n      box.top = box.left = 0;\n    }\n    let tempValue;\n    if (rotation < 0) {\n      rotation -= Math.floor(rotation / 4) * 4;\n    }\n    rotation = rotation % 4;\n    switch (rotation) {\n      case 1:\n        tempValue = box.height / 2 + box.top;\n        transformations.unshift(\n          \"rotate(90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\"\n        );\n        break;\n      case 2:\n        transformations.unshift(\n          \"rotate(180 \" + (box.width / 2 + box.left).toString() + \" \" + (box.height / 2 + box.top).toString() + \")\"\n        );\n        break;\n      case 3:\n        tempValue = box.width / 2 + box.left;\n        transformations.unshift(\n          \"rotate(-90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\"\n        );\n        break;\n    }\n    if (rotation % 2 === 1) {\n      if (box.left !== box.top) {\n        tempValue = box.left;\n        box.left = box.top;\n        box.top = tempValue;\n      }\n      if (box.width !== box.height) {\n        tempValue = box.width;\n        box.width = box.height;\n        box.height = tempValue;\n      }\n    }\n    if (transformations.length) {\n      body = wrapSVGContent(\n        body,\n        '<g transform=\"' + transformations.join(\" \") + '\">',\n        \"</g>\"\n      );\n    }\n  });\n  const customisationsWidth = fullCustomisations.width;\n  const customisationsHeight = fullCustomisations.height;\n  const boxWidth = box.width;\n  const boxHeight = box.height;\n  let width;\n  let height;\n  if (customisationsWidth === null) {\n    height = customisationsHeight === null ? \"1em\" : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n    width = calculateSize(height, boxWidth / boxHeight);\n  } else {\n    width = customisationsWidth === \"auto\" ? boxWidth : customisationsWidth;\n    height = customisationsHeight === null ? calculateSize(width, boxHeight / boxWidth) : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n  }\n  const attributes = {};\n  const setAttr = (prop, value) => {\n    if (!isUnsetKeyword(value)) {\n      attributes[prop] = value.toString();\n    }\n  };\n  setAttr(\"width\", width);\n  setAttr(\"height\", height);\n  const viewBox = [box.left, box.top, boxWidth, boxHeight];\n  attributes.viewBox = viewBox.join(\" \");\n  return {\n    attributes,\n    viewBox,\n    body\n  };\n}\n\nconst regex = /\\sid=\"(\\S+)\"/g;\nconst randomPrefix = \"IconifyId\" + Date.now().toString(16) + (Math.random() * 16777216 | 0).toString(16);\nlet counter = 0;\nfunction replaceIDs(body, prefix = randomPrefix) {\n  const ids = [];\n  let match;\n  while (match = regex.exec(body)) {\n    ids.push(match[1]);\n  }\n  if (!ids.length) {\n    return body;\n  }\n  const suffix = \"suffix\" + (Math.random() * 16777216 | Date.now()).toString(16);\n  ids.forEach((id) => {\n    const newID = typeof prefix === \"function\" ? prefix(id) : prefix + (counter++).toString();\n    const escapedID = id.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n    body = body.replace(\n      // Allowed characters before id: [#;\"]\n      // Allowed characters after id: [)\"], .[a-z]\n      new RegExp('([#;\"])(' + escapedID + ')([\")]|\\\\.[a-z])', \"g\"),\n      \"$1\" + newID + suffix + \"$3\"\n    );\n  });\n  body = body.replace(new RegExp(suffix, \"g\"), \"\");\n  return body;\n}\n\nconst storage = /* @__PURE__ */ Object.create(null);\nfunction setAPIModule(provider, item) {\n  storage[provider] = item;\n}\nfunction getAPIModule(provider) {\n  return storage[provider] || storage[\"\"];\n}\n\nfunction createAPIConfig(source) {\n  let resources;\n  if (typeof source.resources === \"string\") {\n    resources = [source.resources];\n  } else {\n    resources = source.resources;\n    if (!(resources instanceof Array) || !resources.length) {\n      return null;\n    }\n  }\n  const result = {\n    // API hosts\n    resources,\n    // Root path\n    path: source.path || \"/\",\n    // URL length limit\n    maxURL: source.maxURL || 500,\n    // Timeout before next host is used.\n    rotate: source.rotate || 750,\n    // Timeout before failing query.\n    timeout: source.timeout || 5e3,\n    // Randomise default API end point.\n    random: source.random === true,\n    // Start index\n    index: source.index || 0,\n    // Receive data after time out (used if time out kicks in first, then API module sends data anyway).\n    dataAfterTimeout: source.dataAfterTimeout !== false\n  };\n  return result;\n}\nconst configStorage = /* @__PURE__ */ Object.create(null);\nconst fallBackAPISources = [\n  \"https://api.simplesvg.com\",\n  \"https://api.unisvg.com\"\n];\nconst fallBackAPI = [];\nwhile (fallBackAPISources.length > 0) {\n  if (fallBackAPISources.length === 1) {\n    fallBackAPI.push(fallBackAPISources.shift());\n  } else {\n    if (Math.random() > 0.5) {\n      fallBackAPI.push(fallBackAPISources.shift());\n    } else {\n      fallBackAPI.push(fallBackAPISources.pop());\n    }\n  }\n}\nconfigStorage[\"\"] = createAPIConfig({\n  resources: [\"https://api.iconify.design\"].concat(fallBackAPI)\n});\nfunction addAPIProvider(provider, customConfig) {\n  const config = createAPIConfig(customConfig);\n  if (config === null) {\n    return false;\n  }\n  configStorage[provider] = config;\n  return true;\n}\nfunction getAPIConfig(provider) {\n  return configStorage[provider];\n}\nfunction listAPIProviders() {\n  return Object.keys(configStorage);\n}\n\nconst detectFetch = () => {\n  let callback;\n  try {\n    callback = fetch;\n    if (typeof callback === \"function\") {\n      return callback;\n    }\n  } catch (err) {\n  }\n};\nlet fetchModule = detectFetch();\nfunction setFetch(fetch2) {\n  fetchModule = fetch2;\n}\nfunction getFetch() {\n  return fetchModule;\n}\nfunction calculateMaxLength(provider, prefix) {\n  const config = getAPIConfig(provider);\n  if (!config) {\n    return 0;\n  }\n  let result;\n  if (!config.maxURL) {\n    result = 0;\n  } else {\n    let maxHostLength = 0;\n    config.resources.forEach((item) => {\n      const host = item;\n      maxHostLength = Math.max(maxHostLength, host.length);\n    });\n    const url = prefix + \".json?icons=\";\n    result = config.maxURL - maxHostLength - config.path.length - url.length;\n  }\n  return result;\n}\nfunction shouldAbort(status) {\n  return status === 404;\n}\nconst prepare = (provider, prefix, icons) => {\n  const results = [];\n  const maxLength = calculateMaxLength(provider, prefix);\n  const type = \"icons\";\n  let item = {\n    type,\n    provider,\n    prefix,\n    icons: []\n  };\n  let length = 0;\n  icons.forEach((name, index) => {\n    length += name.length + 1;\n    if (length >= maxLength && index > 0) {\n      results.push(item);\n      item = {\n        type,\n        provider,\n        prefix,\n        icons: []\n      };\n      length = name.length;\n    }\n    item.icons.push(name);\n  });\n  results.push(item);\n  return results;\n};\nfunction getPath(provider) {\n  if (typeof provider === \"string\") {\n    const config = getAPIConfig(provider);\n    if (config) {\n      return config.path;\n    }\n  }\n  return \"/\";\n}\nconst send = (host, params, callback) => {\n  if (!fetchModule) {\n    callback(\"abort\", 424);\n    return;\n  }\n  let path = getPath(params.provider);\n  switch (params.type) {\n    case \"icons\": {\n      const prefix = params.prefix;\n      const icons = params.icons;\n      const iconsList = icons.join(\",\");\n      const urlParams = new URLSearchParams({\n        icons: iconsList\n      });\n      path += prefix + \".json?\" + urlParams.toString();\n      break;\n    }\n    case \"custom\": {\n      const uri = params.uri;\n      path += uri.slice(0, 1) === \"/\" ? uri.slice(1) : uri;\n      break;\n    }\n    default:\n      callback(\"abort\", 400);\n      return;\n  }\n  let defaultError = 503;\n  fetchModule(host + path).then((response) => {\n    const status = response.status;\n    if (status !== 200) {\n      setTimeout(() => {\n        callback(shouldAbort(status) ? \"abort\" : \"next\", status);\n      });\n      return;\n    }\n    defaultError = 501;\n    return response.json();\n  }).then((data) => {\n    if (typeof data !== \"object\" || data === null) {\n      setTimeout(() => {\n        if (data === 404) {\n          callback(\"abort\", data);\n        } else {\n          callback(\"next\", defaultError);\n        }\n      });\n      return;\n    }\n    setTimeout(() => {\n      callback(\"success\", data);\n    });\n  }).catch(() => {\n    callback(\"next\", defaultError);\n  });\n};\nconst fetchAPIModule = {\n  prepare,\n  send\n};\n\nfunction sortIcons(icons) {\n  const result = {\n    loaded: [],\n    missing: [],\n    pending: []\n  };\n  const storage = /* @__PURE__ */ Object.create(null);\n  icons.sort((a, b) => {\n    if (a.provider !== b.provider) {\n      return a.provider.localeCompare(b.provider);\n    }\n    if (a.prefix !== b.prefix) {\n      return a.prefix.localeCompare(b.prefix);\n    }\n    return a.name.localeCompare(b.name);\n  });\n  let lastIcon = {\n    provider: \"\",\n    prefix: \"\",\n    name: \"\"\n  };\n  icons.forEach((icon) => {\n    if (lastIcon.name === icon.name && lastIcon.prefix === icon.prefix && lastIcon.provider === icon.provider) {\n      return;\n    }\n    lastIcon = icon;\n    const provider = icon.provider;\n    const prefix = icon.prefix;\n    const name = icon.name;\n    const providerStorage = storage[provider] || (storage[provider] = /* @__PURE__ */ Object.create(null));\n    const localStorage = providerStorage[prefix] || (providerStorage[prefix] = getStorage(provider, prefix));\n    let list;\n    if (name in localStorage.icons) {\n      list = result.loaded;\n    } else if (prefix === \"\" || localStorage.missing.has(name)) {\n      list = result.missing;\n    } else {\n      list = result.pending;\n    }\n    const item = {\n      provider,\n      prefix,\n      name\n    };\n    list.push(item);\n  });\n  return result;\n}\n\nfunction removeCallback(storages, id) {\n  storages.forEach((storage) => {\n    const items = storage.loaderCallbacks;\n    if (items) {\n      storage.loaderCallbacks = items.filter((row) => row.id !== id);\n    }\n  });\n}\nfunction updateCallbacks(storage) {\n  if (!storage.pendingCallbacksFlag) {\n    storage.pendingCallbacksFlag = true;\n    setTimeout(() => {\n      storage.pendingCallbacksFlag = false;\n      const items = storage.loaderCallbacks ? storage.loaderCallbacks.slice(0) : [];\n      if (!items.length) {\n        return;\n      }\n      let hasPending = false;\n      const provider = storage.provider;\n      const prefix = storage.prefix;\n      items.forEach((item) => {\n        const icons = item.icons;\n        const oldLength = icons.pending.length;\n        icons.pending = icons.pending.filter((icon) => {\n          if (icon.prefix !== prefix) {\n            return true;\n          }\n          const name = icon.name;\n          if (storage.icons[name]) {\n            icons.loaded.push({\n              provider,\n              prefix,\n              name\n            });\n          } else if (storage.missing.has(name)) {\n            icons.missing.push({\n              provider,\n              prefix,\n              name\n            });\n          } else {\n            hasPending = true;\n            return true;\n          }\n          return false;\n        });\n        if (icons.pending.length !== oldLength) {\n          if (!hasPending) {\n            removeCallback([storage], item.id);\n          }\n          item.callback(\n            icons.loaded.slice(0),\n            icons.missing.slice(0),\n            icons.pending.slice(0),\n            item.abort\n          );\n        }\n      });\n    });\n  }\n}\nlet idCounter = 0;\nfunction storeCallback(callback, icons, pendingSources) {\n  const id = idCounter++;\n  const abort = removeCallback.bind(null, pendingSources, id);\n  if (!icons.pending.length) {\n    return abort;\n  }\n  const item = {\n    id,\n    icons,\n    callback,\n    abort\n  };\n  pendingSources.forEach((storage) => {\n    (storage.loaderCallbacks || (storage.loaderCallbacks = [])).push(item);\n  });\n  return abort;\n}\n\nfunction listToIcons(list, validate = true, simpleNames = false) {\n  const result = [];\n  list.forEach((item) => {\n    const icon = typeof item === \"string\" ? stringToIcon(item, validate, simpleNames) : item;\n    if (icon) {\n      result.push(icon);\n    }\n  });\n  return result;\n}\n\n// src/config.ts\nvar defaultConfig = {\n  resources: [],\n  index: 0,\n  timeout: 2e3,\n  rotate: 750,\n  random: false,\n  dataAfterTimeout: false\n};\n\n// src/query.ts\nfunction sendQuery(config, payload, query, done) {\n  const resourcesCount = config.resources.length;\n  const startIndex = config.random ? Math.floor(Math.random() * resourcesCount) : config.index;\n  let resources;\n  if (config.random) {\n    let list = config.resources.slice(0);\n    resources = [];\n    while (list.length > 1) {\n      const nextIndex = Math.floor(Math.random() * list.length);\n      resources.push(list[nextIndex]);\n      list = list.slice(0, nextIndex).concat(list.slice(nextIndex + 1));\n    }\n    resources = resources.concat(list);\n  } else {\n    resources = config.resources.slice(startIndex).concat(config.resources.slice(0, startIndex));\n  }\n  const startTime = Date.now();\n  let status = \"pending\";\n  let queriesSent = 0;\n  let lastError;\n  let timer = null;\n  let queue = [];\n  let doneCallbacks = [];\n  if (typeof done === \"function\") {\n    doneCallbacks.push(done);\n  }\n  function resetTimer() {\n    if (timer) {\n      clearTimeout(timer);\n      timer = null;\n    }\n  }\n  function abort() {\n    if (status === \"pending\") {\n      status = \"aborted\";\n    }\n    resetTimer();\n    queue.forEach((item) => {\n      if (item.status === \"pending\") {\n        item.status = \"aborted\";\n      }\n    });\n    queue = [];\n  }\n  function subscribe(callback, overwrite) {\n    if (overwrite) {\n      doneCallbacks = [];\n    }\n    if (typeof callback === \"function\") {\n      doneCallbacks.push(callback);\n    }\n  }\n  function getQueryStatus() {\n    return {\n      startTime,\n      payload,\n      status,\n      queriesSent,\n      queriesPending: queue.length,\n      subscribe,\n      abort\n    };\n  }\n  function failQuery() {\n    status = \"failed\";\n    doneCallbacks.forEach((callback) => {\n      callback(void 0, lastError);\n    });\n  }\n  function clearQueue() {\n    queue.forEach((item) => {\n      if (item.status === \"pending\") {\n        item.status = \"aborted\";\n      }\n    });\n    queue = [];\n  }\n  function moduleResponse(item, response, data) {\n    const isError = response !== \"success\";\n    queue = queue.filter((queued) => queued !== item);\n    switch (status) {\n      case \"pending\":\n        break;\n      case \"failed\":\n        if (isError || !config.dataAfterTimeout) {\n          return;\n        }\n        break;\n      default:\n        return;\n    }\n    if (response === \"abort\") {\n      lastError = data;\n      failQuery();\n      return;\n    }\n    if (isError) {\n      lastError = data;\n      if (!queue.length) {\n        if (!resources.length) {\n          failQuery();\n        } else {\n          execNext();\n        }\n      }\n      return;\n    }\n    resetTimer();\n    clearQueue();\n    if (!config.random) {\n      const index = config.resources.indexOf(item.resource);\n      if (index !== -1 && index !== config.index) {\n        config.index = index;\n      }\n    }\n    status = \"completed\";\n    doneCallbacks.forEach((callback) => {\n      callback(data);\n    });\n  }\n  function execNext() {\n    if (status !== \"pending\") {\n      return;\n    }\n    resetTimer();\n    const resource = resources.shift();\n    if (resource === void 0) {\n      if (queue.length) {\n        timer = setTimeout(() => {\n          resetTimer();\n          if (status === \"pending\") {\n            clearQueue();\n            failQuery();\n          }\n        }, config.timeout);\n        return;\n      }\n      failQuery();\n      return;\n    }\n    const item = {\n      status: \"pending\",\n      resource,\n      callback: (status2, data) => {\n        moduleResponse(item, status2, data);\n      }\n    };\n    queue.push(item);\n    queriesSent++;\n    timer = setTimeout(execNext, config.rotate);\n    query(resource, payload, item.callback);\n  }\n  setTimeout(execNext);\n  return getQueryStatus;\n}\n\n// src/index.ts\nfunction initRedundancy(cfg) {\n  const config = {\n    ...defaultConfig,\n    ...cfg\n  };\n  let queries = [];\n  function cleanup() {\n    queries = queries.filter((item) => item().status === \"pending\");\n  }\n  function query(payload, queryCallback, doneCallback) {\n    const query2 = sendQuery(\n      config,\n      payload,\n      queryCallback,\n      (data, error) => {\n        cleanup();\n        if (doneCallback) {\n          doneCallback(data, error);\n        }\n      }\n    );\n    queries.push(query2);\n    return query2;\n  }\n  function find(callback) {\n    return queries.find((value) => {\n      return callback(value);\n    }) || null;\n  }\n  const instance = {\n    query,\n    find,\n    setIndex: (index) => {\n      config.index = index;\n    },\n    getIndex: () => config.index,\n    cleanup\n  };\n  return instance;\n}\n\nfunction emptyCallback$1() {\n}\nconst redundancyCache = /* @__PURE__ */ Object.create(null);\nfunction getRedundancyCache(provider) {\n  if (!redundancyCache[provider]) {\n    const config = getAPIConfig(provider);\n    if (!config) {\n      return;\n    }\n    const redundancy = initRedundancy(config);\n    const cachedReundancy = {\n      config,\n      redundancy\n    };\n    redundancyCache[provider] = cachedReundancy;\n  }\n  return redundancyCache[provider];\n}\nfunction sendAPIQuery(target, query, callback) {\n  let redundancy;\n  let send;\n  if (typeof target === \"string\") {\n    const api = getAPIModule(target);\n    if (!api) {\n      callback(void 0, 424);\n      return emptyCallback$1;\n    }\n    send = api.send;\n    const cached = getRedundancyCache(target);\n    if (cached) {\n      redundancy = cached.redundancy;\n    }\n  } else {\n    const config = createAPIConfig(target);\n    if (config) {\n      redundancy = initRedundancy(config);\n      const moduleKey = target.resources ? target.resources[0] : \"\";\n      const api = getAPIModule(moduleKey);\n      if (api) {\n        send = api.send;\n      }\n    }\n  }\n  if (!redundancy || !send) {\n    callback(void 0, 424);\n    return emptyCallback$1;\n  }\n  return redundancy.query(query, send, callback)().abort;\n}\n\nfunction emptyCallback() {\n}\nfunction loadedNewIcons(storage) {\n  if (!storage.iconsLoaderFlag) {\n    storage.iconsLoaderFlag = true;\n    setTimeout(() => {\n      storage.iconsLoaderFlag = false;\n      updateCallbacks(storage);\n    });\n  }\n}\nfunction checkIconNamesForAPI(icons) {\n  const valid = [];\n  const invalid = [];\n  icons.forEach((name) => {\n    (name.match(matchIconName) ? valid : invalid).push(name);\n  });\n  return {\n    valid,\n    invalid\n  };\n}\nfunction parseLoaderResponse(storage, icons, data) {\n  function checkMissing() {\n    const pending = storage.pendingIcons;\n    icons.forEach((name) => {\n      if (pending) {\n        pending.delete(name);\n      }\n      if (!storage.icons[name]) {\n        storage.missing.add(name);\n      }\n    });\n  }\n  if (data && typeof data === \"object\") {\n    try {\n      const parsed = addIconSet(storage, data);\n      if (!parsed.length) {\n        checkMissing();\n        return;\n      }\n    } catch (err) {\n      console.error(err);\n    }\n  }\n  checkMissing();\n  loadedNewIcons(storage);\n}\nfunction parsePossiblyAsyncResponse(response, callback) {\n  if (response instanceof Promise) {\n    response.then((data) => {\n      callback(data);\n    }).catch(() => {\n      callback(null);\n    });\n  } else {\n    callback(response);\n  }\n}\nfunction loadNewIcons(storage, icons) {\n  if (!storage.iconsToLoad) {\n    storage.iconsToLoad = icons;\n  } else {\n    storage.iconsToLoad = storage.iconsToLoad.concat(icons).sort();\n  }\n  if (!storage.iconsQueueFlag) {\n    storage.iconsQueueFlag = true;\n    setTimeout(() => {\n      storage.iconsQueueFlag = false;\n      const { provider, prefix } = storage;\n      const icons2 = storage.iconsToLoad;\n      delete storage.iconsToLoad;\n      if (!icons2 || !icons2.length) {\n        return;\n      }\n      const customIconLoader = storage.loadIcon;\n      if (storage.loadIcons && (icons2.length > 1 || !customIconLoader)) {\n        parsePossiblyAsyncResponse(\n          storage.loadIcons(icons2, prefix, provider),\n          (data) => {\n            parseLoaderResponse(storage, icons2, data);\n          }\n        );\n        return;\n      }\n      if (customIconLoader) {\n        icons2.forEach((name) => {\n          const response = customIconLoader(name, prefix, provider);\n          parsePossiblyAsyncResponse(response, (data) => {\n            const iconSet = data ? {\n              prefix,\n              icons: {\n                [name]: data\n              }\n            } : null;\n            parseLoaderResponse(storage, [name], iconSet);\n          });\n        });\n        return;\n      }\n      const { valid, invalid } = checkIconNamesForAPI(icons2);\n      if (invalid.length) {\n        parseLoaderResponse(storage, invalid, null);\n      }\n      if (!valid.length) {\n        return;\n      }\n      const api = prefix.match(matchIconName) ? getAPIModule(provider) : null;\n      if (!api) {\n        parseLoaderResponse(storage, valid, null);\n        return;\n      }\n      const params = api.prepare(provider, prefix, valid);\n      params.forEach((item) => {\n        sendAPIQuery(provider, item, (data) => {\n          parseLoaderResponse(storage, item.icons, data);\n        });\n      });\n    });\n  }\n}\nconst loadIcons = (icons, callback) => {\n  const cleanedIcons = listToIcons(icons, true, allowSimpleNames());\n  const sortedIcons = sortIcons(cleanedIcons);\n  if (!sortedIcons.pending.length) {\n    let callCallback = true;\n    if (callback) {\n      setTimeout(() => {\n        if (callCallback) {\n          callback(\n            sortedIcons.loaded,\n            sortedIcons.missing,\n            sortedIcons.pending,\n            emptyCallback\n          );\n        }\n      });\n    }\n    return () => {\n      callCallback = false;\n    };\n  }\n  const newIcons = /* @__PURE__ */ Object.create(null);\n  const sources = [];\n  let lastProvider, lastPrefix;\n  sortedIcons.pending.forEach((icon) => {\n    const { provider, prefix } = icon;\n    if (prefix === lastPrefix && provider === lastProvider) {\n      return;\n    }\n    lastProvider = provider;\n    lastPrefix = prefix;\n    sources.push(getStorage(provider, prefix));\n    const providerNewIcons = newIcons[provider] || (newIcons[provider] = /* @__PURE__ */ Object.create(null));\n    if (!providerNewIcons[prefix]) {\n      providerNewIcons[prefix] = [];\n    }\n  });\n  sortedIcons.pending.forEach((icon) => {\n    const { provider, prefix, name } = icon;\n    const storage = getStorage(provider, prefix);\n    const pendingQueue = storage.pendingIcons || (storage.pendingIcons = /* @__PURE__ */ new Set());\n    if (!pendingQueue.has(name)) {\n      pendingQueue.add(name);\n      newIcons[provider][prefix].push(name);\n    }\n  });\n  sources.forEach((storage) => {\n    const list = newIcons[storage.provider][storage.prefix];\n    if (list.length) {\n      loadNewIcons(storage, list);\n    }\n  });\n  return callback ? storeCallback(callback, sortedIcons, sources) : emptyCallback;\n};\nconst loadIcon = (icon) => {\n  return new Promise((fulfill, reject) => {\n    const iconObj = typeof icon === \"string\" ? stringToIcon(icon, true) : icon;\n    if (!iconObj) {\n      reject(icon);\n      return;\n    }\n    loadIcons([iconObj || icon], (loaded) => {\n      if (loaded.length && iconObj) {\n        const data = getIconData(iconObj);\n        if (data) {\n          fulfill({\n            ...defaultIconProps,\n            ...data\n          });\n          return;\n        }\n      }\n      reject(icon);\n    });\n  });\n};\n\nfunction setCustomIconsLoader(loader, prefix, provider) {\n  getStorage(provider || \"\", prefix).loadIcons = loader;\n}\nfunction setCustomIconLoader(loader, prefix, provider) {\n  getStorage(provider || \"\", prefix).loadIcon = loader;\n}\n\nfunction mergeCustomisations(defaults, item) {\n  const result = {\n    ...defaults\n  };\n  for (const key in item) {\n    const value = item[key];\n    const valueType = typeof value;\n    if (key in defaultIconSizeCustomisations) {\n      if (value === null || value && (valueType === \"string\" || valueType === \"number\")) {\n        result[key] = value;\n      }\n    } else if (valueType === typeof result[key]) {\n      result[key] = key === \"rotate\" ? value % 4 : value;\n    }\n  }\n  return result;\n}\n\nconst separator = /[\\s,]+/;\nfunction flipFromString(custom, flip) {\n  flip.split(separator).forEach((str) => {\n    const value = str.trim();\n    switch (value) {\n      case \"horizontal\":\n        custom.hFlip = true;\n        break;\n      case \"vertical\":\n        custom.vFlip = true;\n        break;\n    }\n  });\n}\n\nfunction rotateFromString(value, defaultValue = 0) {\n  const units = value.replace(/^-?[0-9.]*/, \"\");\n  function cleanup(value2) {\n    while (value2 < 0) {\n      value2 += 4;\n    }\n    return value2 % 4;\n  }\n  if (units === \"\") {\n    const num = parseInt(value);\n    return isNaN(num) ? 0 : cleanup(num);\n  } else if (units !== value) {\n    let split = 0;\n    switch (units) {\n      case \"%\":\n        split = 25;\n        break;\n      case \"deg\":\n        split = 90;\n    }\n    if (split) {\n      let num = parseFloat(value.slice(0, value.length - units.length));\n      if (isNaN(num)) {\n        return 0;\n      }\n      num = num / split;\n      return num % 1 === 0 ? cleanup(num) : 0;\n    }\n  }\n  return defaultValue;\n}\n\nfunction iconToHTML(body, attributes) {\n  let renderAttribsHTML = body.indexOf(\"xlink:\") === -1 ? \"\" : ' xmlns:xlink=\"http://www.w3.org/1999/xlink\"';\n  for (const attr in attributes) {\n    renderAttribsHTML += \" \" + attr + '=\"' + attributes[attr] + '\"';\n  }\n  return '<svg xmlns=\"http://www.w3.org/2000/svg\"' + renderAttribsHTML + \">\" + body + \"</svg>\";\n}\n\nfunction encodeSVGforURL(svg) {\n  return svg.replace(/\"/g, \"'\").replace(/%/g, \"%25\").replace(/#/g, \"%23\").replace(/</g, \"%3C\").replace(/>/g, \"%3E\").replace(/\\s+/g, \" \");\n}\nfunction svgToData(svg) {\n  return \"data:image/svg+xml,\" + encodeSVGforURL(svg);\n}\nfunction svgToURL(svg) {\n  return 'url(\"' + svgToData(svg) + '\")';\n}\n\nlet policy;\nfunction createPolicy() {\n  try {\n    policy = window.trustedTypes.createPolicy(\"iconify\", {\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n      createHTML: (s) => s\n    });\n  } catch (err) {\n    policy = null;\n  }\n}\nfunction cleanUpInnerHTML(html) {\n  if (policy === void 0) {\n    createPolicy();\n  }\n  return policy ? policy.createHTML(html) : html;\n}\n\nconst defaultExtendedIconCustomisations = {\n    ...defaultIconCustomisations,\n    inline: false,\n};\n\n/**\n * Default SVG attributes\n */\nconst svgDefaults = {\n    'xmlns': 'http://www.w3.org/2000/svg',\n    'xmlnsXlink': 'http://www.w3.org/1999/xlink',\n    'aria-hidden': true,\n    'role': 'img',\n};\n/**\n * Style modes\n */\nconst commonProps = {\n    display: 'inline-block',\n};\nconst monotoneProps = {\n    backgroundColor: 'currentColor',\n};\nconst coloredProps = {\n    backgroundColor: 'transparent',\n};\n// Dynamically add common props to variables above\nconst propsToAdd = {\n    Image: 'var(--svg)',\n    Repeat: 'no-repeat',\n    Size: '100% 100%',\n};\nconst propsToAddTo = {\n    WebkitMask: monotoneProps,\n    mask: monotoneProps,\n    background: coloredProps,\n};\nfor (const prefix in propsToAddTo) {\n    const list = propsToAddTo[prefix];\n    for (const prop in propsToAdd) {\n        list[prefix + prop] = propsToAdd[prop];\n    }\n}\n/**\n * Default values for customisations for inline icon\n */\nconst inlineDefaults = {\n    ...defaultExtendedIconCustomisations,\n    inline: true,\n};\n/**\n * Fix size: add 'px' to numbers\n */\nfunction fixSize(value) {\n    return value + (value.match(/^[-0-9.]+$/) ? 'px' : '');\n}\n/**\n * Render icon\n */\nconst render = (\n// Icon must be validated before calling this function\nicon, \n// Partial properties\nprops, \n// Icon name\nname) => {\n    // Get default properties\n    const defaultProps = props.inline\n        ? inlineDefaults\n        : defaultExtendedIconCustomisations;\n    // Get all customisations\n    const customisations = mergeCustomisations(defaultProps, props);\n    // Check mode\n    const mode = props.mode || 'svg';\n    // Create style\n    const style = {};\n    const customStyle = props.style || {};\n    // Create SVG component properties\n    const componentProps = {\n        ...(mode === 'svg' ? svgDefaults : {}),\n    };\n    if (name) {\n        const iconName = stringToIcon(name, false, true);\n        if (iconName) {\n            const classNames = ['iconify'];\n            const props = [\n                'provider',\n                'prefix',\n            ];\n            for (const prop of props) {\n                if (iconName[prop]) {\n                    classNames.push('iconify--' + iconName[prop]);\n                }\n            }\n            componentProps.className = classNames.join(' ');\n        }\n    }\n    // Get element properties\n    for (let key in props) {\n        const value = props[key];\n        if (value === void 0) {\n            continue;\n        }\n        switch (key) {\n            // Properties to ignore\n            case 'icon':\n            case 'style':\n            case 'children':\n            case 'onLoad':\n            case 'mode':\n            case 'ssr':\n                break;\n            // Forward ref\n            case '_ref':\n                componentProps.ref = value;\n                break;\n            // Merge class names\n            case 'className':\n                componentProps[key] =\n                    (componentProps[key] ? componentProps[key] + ' ' : '') +\n                        value;\n                break;\n            // Boolean attributes\n            case 'inline':\n            case 'hFlip':\n            case 'vFlip':\n                customisations[key] =\n                    value === true || value === 'true' || value === 1;\n                break;\n            // Flip as string: 'horizontal,vertical'\n            case 'flip':\n                if (typeof value === 'string') {\n                    flipFromString(customisations, value);\n                }\n                break;\n            // Color: copy to style\n            case 'color':\n                style.color = value;\n                break;\n            // Rotation as string\n            case 'rotate':\n                if (typeof value === 'string') {\n                    customisations[key] = rotateFromString(value);\n                }\n                else if (typeof value === 'number') {\n                    customisations[key] = value;\n                }\n                break;\n            // Remove aria-hidden\n            case 'ariaHidden':\n            case 'aria-hidden':\n                if (value !== true && value !== 'true') {\n                    delete componentProps['aria-hidden'];\n                }\n                break;\n            // Copy missing property if it does not exist in customisations\n            default:\n                if (defaultProps[key] === void 0) {\n                    componentProps[key] = value;\n                }\n        }\n    }\n    // Generate icon\n    const item = iconToSVG(icon, customisations);\n    const renderAttribs = item.attributes;\n    // Inline display\n    if (customisations.inline) {\n        style.verticalAlign = '-0.125em';\n    }\n    if (mode === 'svg') {\n        // Add style\n        componentProps.style = {\n            ...style,\n            ...customStyle,\n        };\n        // Add icon stuff\n        Object.assign(componentProps, renderAttribs);\n        // Counter for ids based on \"id\" property to render icons consistently on server and client\n        let localCounter = 0;\n        let id = props.id;\n        if (typeof id === 'string') {\n            // Convert '-' to '_' to avoid errors in animations\n            id = id.replace(/-/g, '_');\n        }\n        // Add icon stuff\n        componentProps.dangerouslySetInnerHTML = {\n            __html: cleanUpInnerHTML(replaceIDs(item.body, id ? () => id + 'ID' + localCounter++ : 'iconifyReact')),\n        };\n        return createElement('svg', componentProps);\n    }\n    // Render <span> with style\n    const { body, width, height } = icon;\n    const useMask = mode === 'mask' ||\n        (mode === 'bg' ? false : body.indexOf('currentColor') !== -1);\n    // Generate SVG\n    const html = iconToHTML(body, {\n        ...renderAttribs,\n        width: width + '',\n        height: height + '',\n    });\n    // Generate style\n    componentProps.style = {\n        ...style,\n        '--svg': svgToURL(html),\n        'width': fixSize(renderAttribs.width),\n        'height': fixSize(renderAttribs.height),\n        ...commonProps,\n        ...(useMask ? monotoneProps : coloredProps),\n        ...customStyle,\n    };\n    return createElement('span', componentProps);\n};\n\n/**\n * Enable cache\n *\n * @deprecated No longer used\n */\nfunction enableCache(storage) {\n    //\n}\n/**\n * Disable cache\n *\n * @deprecated No longer used\n */\nfunction disableCache(storage) {\n    //\n}\n/**\n * Initialise stuff\n */\n// Enable short names\nallowSimpleNames(true);\n// Set API module\nsetAPIModule('', fetchAPIModule);\n/**\n * Browser stuff\n */\nif (typeof document !== 'undefined' && typeof window !== 'undefined') {\n    const _window = window;\n    // Load icons from global \"IconifyPreload\"\n    if (_window.IconifyPreload !== void 0) {\n        const preload = _window.IconifyPreload;\n        const err = 'Invalid IconifyPreload syntax.';\n        if (typeof preload === 'object' && preload !== null) {\n            (preload instanceof Array ? preload : [preload]).forEach((item) => {\n                try {\n                    if (\n                    // Check if item is an object and not null/array\n                    typeof item !== 'object' ||\n                        item === null ||\n                        item instanceof Array ||\n                        // Check for 'icons' and 'prefix'\n                        typeof item.icons !== 'object' ||\n                        typeof item.prefix !== 'string' ||\n                        // Add icon set\n                        !addCollection(item)) {\n                        console.error(err);\n                    }\n                }\n                catch (e) {\n                    console.error(err);\n                }\n            });\n        }\n    }\n    // Set API from global \"IconifyProviders\"\n    if (_window.IconifyProviders !== void 0) {\n        const providers = _window.IconifyProviders;\n        if (typeof providers === 'object' && providers !== null) {\n            for (let key in providers) {\n                const err = 'IconifyProviders[' + key + '] is invalid.';\n                try {\n                    const value = providers[key];\n                    if (typeof value !== 'object' ||\n                        !value ||\n                        value.resources === void 0) {\n                        continue;\n                    }\n                    if (!addAPIProvider(key, value)) {\n                        console.error(err);\n                    }\n                }\n                catch (e) {\n                    console.error(err);\n                }\n            }\n        }\n    }\n}\nfunction IconComponent(props) {\n    const [mounted, setMounted] = useState(!!props.ssr);\n    const [abort, setAbort] = useState({});\n    // Get initial state\n    function getInitialState(mounted) {\n        if (mounted) {\n            const name = props.icon;\n            if (typeof name === 'object') {\n                // Icon as object\n                return {\n                    name: '',\n                    data: name,\n                };\n            }\n            const data = getIconData(name);\n            if (data) {\n                return {\n                    name,\n                    data,\n                };\n            }\n        }\n        return {\n            name: '',\n        };\n    }\n    const [state, setState] = useState(getInitialState(!!props.ssr));\n    // Cancel loading\n    function cleanup() {\n        const callback = abort.callback;\n        if (callback) {\n            callback();\n            setAbort({});\n        }\n    }\n    // Change state if it is different\n    function changeState(newState) {\n        if (JSON.stringify(state) !== JSON.stringify(newState)) {\n            cleanup();\n            setState(newState);\n            return true;\n        }\n    }\n    // Update state\n    function updateState() {\n        var _a;\n        const name = props.icon;\n        if (typeof name === 'object') {\n            // Icon as object\n            changeState({\n                name: '',\n                data: name,\n            });\n            return;\n        }\n        // New icon or got icon data\n        const data = getIconData(name);\n        if (changeState({\n            name,\n            data,\n        })) {\n            if (data === undefined) {\n                // Load icon, update state when done\n                const callback = loadIcons([name], updateState);\n                setAbort({\n                    callback,\n                });\n            }\n            else if (data) {\n                // Icon data is available: trigger onLoad callback if present\n                (_a = props.onLoad) === null || _a === void 0 ? void 0 : _a.call(props, name);\n            }\n        }\n    }\n    // Mounted state, cleanup for loader\n    useEffect(() => {\n        setMounted(true);\n        return cleanup;\n    }, []);\n    // Icon changed or component mounted\n    useEffect(() => {\n        if (mounted) {\n            updateState();\n        }\n    }, [props.icon, mounted]);\n    // Render icon\n    const { name, data } = state;\n    if (!data) {\n        return props.children\n            ? props.children\n            : props.fallback\n                ? props.fallback\n                : createElement('span', {});\n    }\n    return render({\n        ...defaultIconProps,\n        ...data,\n    }, props, name);\n}\n/**\n * Block icon\n *\n * @param props - Component properties\n */\nconst Icon = forwardRef((props, ref) => IconComponent({\n    ...props,\n    _ref: ref,\n}));\n/**\n * Inline icon (has negative verticalAlign that makes it behave like icon font)\n *\n * @param props - Component properties\n */\nconst InlineIcon = forwardRef((props, ref) => IconComponent({\n    inline: true,\n    ...props,\n    _ref: ref,\n}));\n/**\n * Internal API\n */\nconst _api = {\n    getAPIConfig,\n    setAPIModule,\n    sendAPIQuery,\n    setFetch,\n    getFetch,\n    listAPIProviders,\n};\n\nexport { Icon, InlineIcon, _api, addAPIProvider, addCollection, addIcon, iconToSVG as buildIcon, calculateSize, disableCache, enableCache, getIcon, iconLoaded as iconExists, iconLoaded, listIcons, loadIcon, loadIcons, replaceIDs, setCustomIconLoader, setCustomIconsLoader };\n","export const getMainLayoutClassName = layout => {\n  switch (layout) {\n    case 'stacked':\n      return 'rhap_stacked';\n    case 'stacked-reverse':\n      return 'rhap_stacked-reverse';\n    case 'horizontal':\n      return 'rhap_horizontal';\n    case 'horizontal-reverse':\n      return 'rhap_horizontal-reverse';\n    default:\n      return 'rhap_stacked';\n  }\n};\nexport const getPosX = event => {\n  if (event instanceof MouseEvent) {\n    return event.clientX;\n  } else {\n    return event.touches[0].clientX;\n  }\n};\nconst addHeadingZero = num => {\n  return num > 9 ? num.toString() : `0${num}`;\n};\nexport const getDisplayTimeBySeconds = (seconds, totalSeconds, timeFormat) => {\n  if (!isFinite(seconds)) {\n    return null;\n  }\n  const min = Math.floor(seconds / 60);\n  const minStr = addHeadingZero(min);\n  const secStr = addHeadingZero(Math.floor(seconds % 60));\n  const minStrForHour = addHeadingZero(Math.floor(min % 60));\n  const hourStr = Math.floor(min / 60);\n  const mmSs = `${minStr}:${secStr}`;\n  const hhMmSs = `${hourStr}:${minStrForHour}:${secStr}`;\n  if (timeFormat === 'auto') {\n    if (totalSeconds >= 3600) {\n      return hhMmSs;\n    } else {\n      return mmSs;\n    }\n  } else if (timeFormat === 'mm:ss') {\n    return mmSs;\n  } else if (timeFormat === 'hh:mm:ss') {\n    return hhMmSs;\n  }\n};\nexport function throttle(func, limit) {\n  let inThrottle = false;\n  return arg => {\n    if (!inThrottle) {\n      func(arg);\n      inThrottle = true;\n      setTimeout(() => inThrottle = false, limit);\n    }\n  };\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport React, { Component, forwardRef } from 'react';\nimport { getPosX, throttle } from './utils';\nclass ProgressBar extends Component {\n  timeOnMouseMove = 0;\n  hasAddedAudioEventListener = false;\n  state = {\n    isDraggingProgress: false,\n    currentTimePos: '0%',\n    hasDownloadProgressAnimation: false,\n    downloadProgressArr: [],\n    waitingForSeekCallback: false\n  };\n  getDuration() {\n    const {\n      audio,\n      srcDuration\n    } = this.props;\n    return typeof srcDuration === 'undefined' ? audio.duration : srcDuration;\n  }\n  getCurrentProgress = event => {\n    const {\n      audio,\n      progressBar\n    } = this.props;\n    const isSingleFileProgressiveDownload = audio.src.indexOf('blob:') !== 0 && typeof this.props.srcDuration === 'undefined';\n    if (isSingleFileProgressiveDownload && (!audio.src || !isFinite(audio.currentTime) || !progressBar.current)) {\n      return {\n        currentTime: 0,\n        currentTimePos: '0%'\n      };\n    }\n    const progressBarRect = progressBar.current.getBoundingClientRect();\n    const maxRelativePos = progressBarRect.width;\n    let relativePos = getPosX(event) - progressBarRect.left;\n    if (relativePos < 0) {\n      relativePos = 0;\n    } else if (relativePos > maxRelativePos) {\n      relativePos = maxRelativePos;\n    }\n    const duration = this.getDuration();\n    const currentTime = duration * relativePos / maxRelativePos;\n    return {\n      currentTime,\n      currentTimePos: `${(relativePos / maxRelativePos * 100).toFixed(2)}%`\n    };\n  };\n  handleContextMenu = event => {\n    event.preventDefault();\n  };\n  handleMouseDownOrTouchStartProgressBar = event => {\n    event.stopPropagation();\n    const {\n      currentTime,\n      currentTimePos\n    } = this.getCurrentProgress(event.nativeEvent);\n    if (isFinite(currentTime)) {\n      this.timeOnMouseMove = currentTime;\n      this.setState({\n        isDraggingProgress: true,\n        currentTimePos\n      });\n      if (event.nativeEvent instanceof MouseEvent) {\n        window.addEventListener('mousemove', this.handleWindowMouseOrTouchMove);\n        window.addEventListener('mouseup', this.handleWindowMouseOrTouchUp);\n      } else {\n        window.addEventListener('touchmove', this.handleWindowMouseOrTouchMove);\n        window.addEventListener('touchend', this.handleWindowMouseOrTouchUp);\n      }\n    }\n  };\n  handleWindowMouseOrTouchMove = event => {\n    if (event instanceof MouseEvent) {\n      event.preventDefault();\n    }\n    event.stopPropagation();\n    const windowSelection = window.getSelection();\n    if (windowSelection && windowSelection.type === 'Range') {\n      windowSelection.empty();\n    }\n    const {\n      isDraggingProgress\n    } = this.state;\n    if (isDraggingProgress) {\n      const {\n        currentTime,\n        currentTimePos\n      } = this.getCurrentProgress(event);\n      this.timeOnMouseMove = currentTime;\n      this.setState({\n        currentTimePos\n      });\n    }\n  };\n  handleWindowMouseOrTouchUp = event => {\n    event.stopPropagation();\n    const newTime = this.timeOnMouseMove;\n    const {\n      audio,\n      onChangeCurrentTimeError,\n      onSeek\n    } = this.props;\n    if (onSeek) {\n      this.setState({\n        isDraggingProgress: false,\n        waitingForSeekCallback: true\n      }, () => {\n        onSeek(audio, newTime).then(() => this.setState({\n          waitingForSeekCallback: false\n        }), err => {\n          const message = err instanceof Error ? err.message : String(err);\n          throw new Error(message);\n        });\n      });\n    } else {\n      const newProps = {\n        isDraggingProgress: false\n      };\n      if (audio.readyState === audio.HAVE_NOTHING || audio.readyState === audio.HAVE_METADATA || !isFinite(newTime)) {\n        try {\n          audio.load();\n        } catch (err) {\n          newProps.currentTimePos = '0%';\n          return onChangeCurrentTimeError && onChangeCurrentTimeError(err);\n        }\n      }\n      audio.currentTime = newTime;\n      this.setState(newProps);\n    }\n    if (event instanceof MouseEvent) {\n      window.removeEventListener('mousemove', this.handleWindowMouseOrTouchMove);\n      window.removeEventListener('mouseup', this.handleWindowMouseOrTouchUp);\n    } else {\n      window.removeEventListener('touchmove', this.handleWindowMouseOrTouchMove);\n      window.removeEventListener('touchend', this.handleWindowMouseOrTouchUp);\n    }\n  };\n  handleAudioTimeUpdate = throttle(e => {\n    const {\n      isDraggingProgress\n    } = this.state;\n    const audio = e.target;\n    if (isDraggingProgress || this.state.waitingForSeekCallback === true) return;\n    const {\n      currentTime\n    } = audio;\n    const duration = this.getDuration();\n    this.setState({\n      currentTimePos: `${(currentTime / duration * 100 || 0).toFixed(2)}%`\n    });\n  }, this.props.progressUpdateInterval);\n  handleAudioDownloadProgressUpdate = e => {\n    const audio = e.target;\n    const duration = this.getDuration();\n    const downloadProgressArr = [];\n    for (let i = 0; i < audio.buffered.length; i++) {\n      const bufferedStart = audio.buffered.start(i);\n      const bufferedEnd = audio.buffered.end(i);\n      downloadProgressArr.push({\n        left: `${Math.round(100 / duration * bufferedStart) || 0}%`,\n        width: `${Math.round(100 / duration * (bufferedEnd - bufferedStart)) || 0}%`\n      });\n    }\n    clearTimeout(this.downloadProgressAnimationTimer);\n    this.setState({\n      downloadProgressArr,\n      hasDownloadProgressAnimation: true\n    });\n    this.downloadProgressAnimationTimer = setTimeout(() => {\n      this.setState({\n        hasDownloadProgressAnimation: false\n      });\n    }, 200);\n  };\n  initialize() {\n    const {\n      audio\n    } = this.props;\n    if (audio && !this.hasAddedAudioEventListener) {\n      this.audio = audio;\n      this.hasAddedAudioEventListener = true;\n      audio.addEventListener('timeupdate', this.handleAudioTimeUpdate);\n      audio.addEventListener('progress', this.handleAudioDownloadProgressUpdate);\n    }\n  }\n  componentDidMount() {\n    this.initialize();\n  }\n  componentDidUpdate() {\n    this.initialize();\n  }\n  componentWillUnmount() {\n    if (this.audio && this.hasAddedAudioEventListener) {\n      this.audio.removeEventListener('timeupdate', this.handleAudioTimeUpdate);\n      this.audio.removeEventListener('progress', this.handleAudioDownloadProgressUpdate);\n    }\n    clearTimeout(this.downloadProgressAnimationTimer);\n  }\n  render() {\n    const {\n      showDownloadProgress,\n      showFilledProgress,\n      progressBar,\n      i18nProgressBar\n    } = this.props;\n    const {\n      currentTimePos,\n      downloadProgressArr,\n      hasDownloadProgressAnimation\n    } = this.state;\n    return React.createElement(\"div\", {\n      className: \"rhap_progress-container\",\n      ref: progressBar,\n      \"aria-label\": i18nProgressBar,\n      role: \"progressbar\",\n      \"aria-valuemin\": 0,\n      \"aria-valuemax\": 100,\n      \"aria-valuenow\": Number(currentTimePos.split('%')[0]),\n      tabIndex: 0,\n      onMouseDown: this.handleMouseDownOrTouchStartProgressBar,\n      onTouchStart: this.handleMouseDownOrTouchStartProgressBar,\n      onContextMenu: this.handleContextMenu\n    }, React.createElement(\"div\", {\n      className: `rhap_progress-bar ${showDownloadProgress ? 'rhap_progress-bar-show-download' : ''}`\n    }, React.createElement(\"div\", {\n      className: \"rhap_progress-indicator\",\n      style: {\n        left: currentTimePos\n      }\n    }), showFilledProgress && React.createElement(\"div\", {\n      className: \"rhap_progress-filled\",\n      style: {\n        width: currentTimePos\n      }\n    }), showDownloadProgress && downloadProgressArr.map(({\n      left,\n      width\n    }, i) => React.createElement(\"div\", {\n      key: i,\n      className: \"rhap_download-progress\",\n      style: {\n        left,\n        width,\n        transitionDuration: hasDownloadProgressAnimation ? '.2s' : '0s'\n      }\n    }))));\n  }\n}\nconst ProgressBarForwardRef = (props, ref) => React.createElement(ProgressBar, _extends({}, props, {\n  progressBar: ref\n}));\nexport default forwardRef(ProgressBarForwardRef);\nexport { ProgressBar, ProgressBarForwardRef };","import { PureComponent } from 'react';\nimport { getDisplayTimeBySeconds } from './utils';\nclass CurrentTime extends PureComponent {\n  hasAddedAudioEventListener = false;\n  constructor(props) {\n    super(props);\n    const {\n      audio,\n      defaultCurrentTime,\n      isLeftTime,\n      timeFormat\n    } = props;\n    let currentTime = defaultCurrentTime;\n    if (audio) {\n      currentTime = getDisplayTimeBySeconds(isLeftTime ? audio.duration - audio.currentTime : audio.currentTime, audio.duration, timeFormat);\n    }\n    this.state = {\n      currentTime\n    };\n  }\n  state = {\n    currentTime: this.props.defaultCurrentTime\n  };\n  handleAudioCurrentTimeChange = e => {\n    const audio = e.target;\n    const {\n      isLeftTime,\n      timeFormat,\n      defaultCurrentTime\n    } = this.props;\n    this.setState({\n      currentTime: getDisplayTimeBySeconds(isLeftTime ? audio.duration - audio.currentTime : audio.currentTime, audio.duration, timeFormat) || defaultCurrentTime\n    });\n  };\n  addAudioEventListeners = () => {\n    const {\n      audio\n    } = this.props;\n    if (audio && !this.hasAddedAudioEventListener) {\n      this.audio = audio;\n      this.hasAddedAudioEventListener = true;\n      audio.addEventListener('timeupdate', this.handleAudioCurrentTimeChange);\n      audio.addEventListener('loadedmetadata', this.handleAudioCurrentTimeChange);\n    }\n  };\n  componentDidMount() {\n    this.addAudioEventListeners();\n  }\n  componentDidUpdate() {\n    this.addAudioEventListeners();\n  }\n  componentWillUnmount() {\n    if (this.audio && this.hasAddedAudioEventListener) {\n      this.audio.removeEventListener('timeupdate', this.handleAudioCurrentTimeChange);\n      this.audio.removeEventListener('loadedmetadata', this.handleAudioCurrentTimeChange);\n    }\n  }\n  render() {\n    return this.state.currentTime;\n  }\n}\nexport default CurrentTime;","import { PureComponent } from 'react';\nimport { getDisplayTimeBySeconds } from './utils';\nclass Duration extends PureComponent {\n  hasAddedAudioEventListener = false;\n  constructor(props) {\n    super(props);\n    const {\n      audio,\n      timeFormat,\n      defaultDuration\n    } = props;\n    this.state = {\n      duration: audio ? getDisplayTimeBySeconds(audio.duration, audio.duration, timeFormat) : defaultDuration\n    };\n  }\n  state = {\n    duration: this.props.audio ? getDisplayTimeBySeconds(this.props.audio.duration, this.props.audio.duration, this.props.timeFormat) : this.props.defaultDuration\n  };\n  handleAudioDurationChange = e => {\n    const audio = e.target;\n    const {\n      timeFormat,\n      defaultDuration\n    } = this.props;\n    this.setState({\n      duration: getDisplayTimeBySeconds(audio.duration, audio.duration, timeFormat) || defaultDuration\n    });\n  };\n  addAudioEventListeners = () => {\n    const {\n      audio\n    } = this.props;\n    if (audio && !this.hasAddedAudioEventListener) {\n      this.audio = audio;\n      this.hasAddedAudioEventListener = true;\n      audio.addEventListener('durationchange', this.handleAudioDurationChange);\n      audio.addEventListener('abort', this.handleAudioDurationChange);\n    }\n  };\n  componentDidMount() {\n    this.addAudioEventListeners();\n  }\n  componentDidUpdate() {\n    this.addAudioEventListeners();\n  }\n  componentWillUnmount() {\n    if (this.audio && this.hasAddedAudioEventListener) {\n      this.audio.removeEventListener('durationchange', this.handleAudioDurationChange);\n      this.audio.removeEventListener('abort', this.handleAudioDurationChange);\n    }\n  }\n  render() {\n    return this.state.duration;\n  }\n}\nexport default Duration;","import React, { Component, createRef } from 'react';\nimport { getPosX } from './utils';\nclass VolumeControls extends Component {\n  hasAddedAudioEventListener = false;\n  volumeBar = createRef();\n  volumeAnimationTimer = 0;\n  lastVolume = this.props.volume;\n  state = {\n    currentVolumePos: `${(this.lastVolume / 1 * 100 || 0).toFixed(2)}%`,\n    hasVolumeAnimation: false,\n    isDraggingVolume: false\n  };\n  getCurrentVolume = event => {\n    const {\n      audio\n    } = this.props;\n    if (!this.volumeBar.current) {\n      return {\n        currentVolume: audio.volume,\n        currentVolumePos: this.state.currentVolumePos\n      };\n    }\n    const volumeBarRect = this.volumeBar.current.getBoundingClientRect();\n    const maxRelativePos = volumeBarRect.width;\n    const relativePos = getPosX(event) - volumeBarRect.left;\n    let currentVolume;\n    let currentVolumePos;\n    if (relativePos < 0) {\n      currentVolume = 0;\n      currentVolumePos = '0%';\n    } else if (relativePos > volumeBarRect.width) {\n      currentVolume = 1;\n      currentVolumePos = '100%';\n    } else {\n      currentVolume = relativePos / maxRelativePos;\n      currentVolumePos = `${relativePos / maxRelativePos * 100}%`;\n    }\n    return {\n      currentVolume,\n      currentVolumePos\n    };\n  };\n  handleContextMenu = event => {\n    event.preventDefault();\n  };\n  handleClickVolumeButton = () => {\n    const {\n      audio\n    } = this.props;\n    if (audio.volume > 0) {\n      this.lastVolume = audio.volume;\n      audio.volume = 0;\n    } else {\n      audio.volume = this.lastVolume;\n    }\n  };\n  handleVolumnControlMouseOrTouchDown = event => {\n    event.stopPropagation();\n    const {\n      audio\n    } = this.props;\n    const {\n      currentVolume,\n      currentVolumePos\n    } = this.getCurrentVolume(event.nativeEvent);\n    audio.volume = currentVolume;\n    this.setState({\n      isDraggingVolume: true,\n      currentVolumePos\n    });\n    if (event.nativeEvent instanceof MouseEvent) {\n      window.addEventListener('mousemove', this.handleWindowMouseOrTouchMove);\n      window.addEventListener('mouseup', this.handleWindowMouseOrTouchUp);\n    } else {\n      window.addEventListener('touchmove', this.handleWindowMouseOrTouchMove);\n      window.addEventListener('touchend', this.handleWindowMouseOrTouchUp);\n    }\n  };\n  handleWindowMouseOrTouchMove = event => {\n    if (event instanceof MouseEvent) {\n      event.preventDefault();\n    }\n    event.stopPropagation();\n    const {\n      audio\n    } = this.props;\n    const windowSelection = window.getSelection();\n    if (windowSelection && windowSelection.type === 'Range') {\n      windowSelection.empty();\n    }\n    const {\n      isDraggingVolume\n    } = this.state;\n    if (isDraggingVolume) {\n      const {\n        currentVolume,\n        currentVolumePos\n      } = this.getCurrentVolume(event);\n      audio.volume = currentVolume;\n      this.setState({\n        currentVolumePos\n      });\n    }\n  };\n  handleWindowMouseOrTouchUp = event => {\n    event.stopPropagation();\n    this.setState({\n      isDraggingVolume: false\n    });\n    if (event instanceof MouseEvent) {\n      window.removeEventListener('mousemove', this.handleWindowMouseOrTouchMove);\n      window.removeEventListener('mouseup', this.handleWindowMouseOrTouchUp);\n    } else {\n      window.removeEventListener('touchmove', this.handleWindowMouseOrTouchMove);\n      window.removeEventListener('touchend', this.handleWindowMouseOrTouchUp);\n    }\n  };\n  handleAudioVolumeChange = e => {\n    const {\n      isDraggingVolume\n    } = this.state;\n    const {\n      volume\n    } = e.target;\n    if (this.lastVolume > 0 && volume === 0 || this.lastVolume === 0 && volume > 0) {\n      this.props.onMuteChange();\n    }\n    this.lastVolume = volume;\n    if (isDraggingVolume) return;\n    this.setState({\n      hasVolumeAnimation: true,\n      currentVolumePos: `${(volume / 1 * 100 || 0).toFixed(2)}%`\n    });\n    clearTimeout(this.volumeAnimationTimer);\n    this.volumeAnimationTimer = setTimeout(() => {\n      this.setState({\n        hasVolumeAnimation: false\n      });\n    }, 100);\n  };\n  componentDidUpdate() {\n    const {\n      audio\n    } = this.props;\n    if (audio && !this.hasAddedAudioEventListener) {\n      this.audio = audio;\n      this.hasAddedAudioEventListener = true;\n      audio.addEventListener('volumechange', this.handleAudioVolumeChange);\n    }\n  }\n  componentWillUnmount() {\n    if (this.audio && this.hasAddedAudioEventListener) {\n      this.audio.removeEventListener('volumechange', this.handleAudioVolumeChange);\n    }\n    clearTimeout(this.volumeAnimationTimer);\n  }\n  render() {\n    const {\n      audio,\n      showFilledVolume,\n      i18nVolumeControl\n    } = this.props;\n    const {\n      currentVolumePos,\n      hasVolumeAnimation\n    } = this.state;\n    const {\n      volume\n    } = audio || {};\n    return React.createElement(\"div\", {\n      ref: this.volumeBar,\n      onMouseDown: this.handleVolumnControlMouseOrTouchDown,\n      onTouchStart: this.handleVolumnControlMouseOrTouchDown,\n      onContextMenu: this.handleContextMenu,\n      role: \"progressbar\",\n      \"aria-label\": i18nVolumeControl,\n      \"aria-valuemin\": 0,\n      \"aria-valuemax\": 100,\n      \"aria-valuenow\": Number((volume * 100).toFixed(0)),\n      tabIndex: 0,\n      className: \"rhap_volume-bar-area\"\n    }, React.createElement(\"div\", {\n      className: \"rhap_volume-bar\"\n    }, React.createElement(\"div\", {\n      className: \"rhap_volume-indicator\",\n      style: {\n        left: currentVolumePos,\n        transitionDuration: hasVolumeAnimation ? '.1s' : '0s'\n      }\n    }), showFilledVolume && React.createElement(\"div\", {\n      className: \"rhap_volume-filled\",\n      style: {\n        width: currentVolumePos\n      }\n    })));\n  }\n}\nexport default VolumeControls;","export let RHAP_UI = function (RHAP_UI) {\n  RHAP_UI[\"CURRENT_TIME\"] = \"CURRENT_TIME\";\n  RHAP_UI[\"CURRENT_LEFT_TIME\"] = \"CURRENT_LEFT_TIME\";\n  RHAP_UI[\"PROGRESS_BAR\"] = \"PROGRESS_BAR\";\n  RHAP_UI[\"DURATION\"] = \"DURATION\";\n  RHAP_UI[\"ADDITIONAL_CONTROLS\"] = \"ADDITIONAL_CONTROLS\";\n  RHAP_UI[\"MAIN_CONTROLS\"] = \"MAIN_CONTROLS\";\n  RHAP_UI[\"VOLUME_CONTROLS\"] = \"VOLUME_CONTROLS\";\n  RHAP_UI[\"LOOP\"] = \"LOOP\";\n  RHAP_UI[\"VOLUME\"] = \"VOLUME\";\n  return RHAP_UI;\n}({});","import React, { Component, cloneElement, isValidElement, createRef } from 'react';\nimport { Icon } from '@iconify/react';\nimport ProgressBar from './ProgressBar';\nimport CurrentTime from './CurrentTime';\nimport Duration from './Duration';\nimport VolumeBar from './VolumeBar';\nimport { RHAP_UI } from './constants';\nimport { throttle, getMainLayoutClassName, getDisplayTimeBySeconds } from './utils';\nclass H5AudioPlayer extends Component {\n  static defaultI18nAriaLabels = {\n    player: 'Audio player',\n    progressControl: 'Audio progress control',\n    volumeControl: 'Volume control',\n    play: 'Play',\n    pause: 'Pause',\n    rewind: 'Rewind',\n    forward: 'Forward',\n    previous: 'Previous',\n    next: 'Skip',\n    loop: 'Disable loop',\n    loopOff: 'Enable loop',\n    volume: 'Mute',\n    volumeMute: 'Unmute'\n  };\n  static defaultProps = {\n    progressJumpSteps: {\n      backward: 5_000,\n      forward: 5_000\n    },\n    progressJumpStep: 5_000,\n    volumeJumpStep: 0.1\n  };\n  audio = createRef();\n  progressBar = createRef();\n  container = createRef();\n  lastVolume = this.props.volume ?? 1;\n  togglePlay = e => {\n    e.stopPropagation();\n    const audio = this.audio.current;\n    if ((audio.paused || audio.ended) && audio.src) {\n      this.playAudioPromise();\n    } else if (!audio.paused) {\n      audio.pause();\n    }\n  };\n  playAudioPromise = () => {\n    if (this.audio.current.error) {\n      this.audio.current.load();\n    }\n    const playPromise = this.audio.current.play();\n    if (playPromise) {\n      playPromise.then(null).catch(err => {\n        const {\n          onPlayError\n        } = this.props;\n        const message = err instanceof Error ? err.message : String(err);\n        onPlayError && onPlayError(new Error(message));\n      });\n    } else {\n      this.forceUpdate();\n    }\n  };\n  isPlaying = () => {\n    const audio = this.audio.current;\n    if (!audio) return false;\n    return !audio.paused && !audio.ended;\n  };\n  handlePlay = e => {\n    this.forceUpdate();\n    this.props.onPlay && this.props.onPlay(e);\n  };\n  handlePause = e => {\n    if (!this.audio) return;\n    this.forceUpdate();\n    this.props.onPause && this.props.onPause(e);\n  };\n  handleEnded = e => {\n    if (!this.audio) return;\n    this.forceUpdate();\n    this.props.onEnded && this.props.onEnded(e);\n  };\n  handleAbort = e => {\n    this.props.onAbort && this.props.onAbort(e);\n  };\n  handleClickVolumeButton = () => {\n    const audio = this.audio.current;\n    if (audio.volume > 0) {\n      this.lastVolume = audio.volume;\n      audio.volume = 0;\n    } else {\n      audio.volume = this.lastVolume;\n    }\n  };\n  handleMuteChange = () => {\n    this.forceUpdate();\n  };\n  handleClickLoopButton = () => {\n    this.audio.current.loop = !this.audio.current.loop;\n    this.forceUpdate();\n  };\n  handleClickRewind = () => {\n    const {\n      progressJumpSteps,\n      progressJumpStep\n    } = this.props;\n    const jumpStep = progressJumpSteps.backward || progressJumpStep;\n    this.setJumpTime(-jumpStep);\n  };\n  handleClickForward = () => {\n    const {\n      progressJumpSteps,\n      progressJumpStep\n    } = this.props;\n    const jumpStep = progressJumpSteps.forward || progressJumpStep;\n    this.setJumpTime(jumpStep);\n  };\n  setJumpTime = time => {\n    const audio = this.audio.current;\n    const {\n      duration,\n      currentTime: prevTime\n    } = audio;\n    if (audio.readyState === audio.HAVE_NOTHING || audio.readyState === audio.HAVE_METADATA || !isFinite(duration) || !isFinite(prevTime)) {\n      try {\n        audio.load();\n      } catch (err) {\n        return this.props.onChangeCurrentTimeError && this.props.onChangeCurrentTimeError(err);\n      }\n    }\n    let currentTime = prevTime + time / 1000;\n    if (currentTime < 0) {\n      audio.currentTime = 0;\n      currentTime = 0;\n    } else if (currentTime > duration) {\n      audio.currentTime = duration;\n      currentTime = duration;\n    } else {\n      audio.currentTime = currentTime;\n    }\n  };\n  setJumpVolume = volume => {\n    const audio = this.audio.current;\n    const volumeStep = Number(volume);\n    const currentVolume = audio?.volume;\n    if (!audio || !Number.isFinite(volumeStep) || !Number.isFinite(currentVolume)) {\n      return;\n    }\n    let newVolume = currentVolume + volumeStep;\n    if (newVolume < 0) newVolume = 0;else if (newVolume > 1) newVolume = 1;\n    audio.volume = newVolume;\n  };\n  handleKeyDown = e => {\n    if (this.props.hasDefaultKeyBindings ?? true) {\n      switch (e.key) {\n        case ' ':\n          if (e.target === this.container.current || e.target === this.progressBar.current) {\n            e.preventDefault();\n            this.togglePlay(e);\n          }\n          break;\n        case 'ArrowLeft':\n          this.handleClickRewind();\n          break;\n        case 'ArrowRight':\n          this.handleClickForward();\n          break;\n        case 'ArrowUp':\n          e.preventDefault();\n          this.setJumpVolume(this.props.volumeJumpStep);\n          break;\n        case 'ArrowDown':\n          e.preventDefault();\n          this.setJumpVolume(-this.props.volumeJumpStep);\n          break;\n        case 'l':\n          this.handleClickLoopButton();\n          break;\n        case 'm':\n          this.handleClickVolumeButton();\n          break;\n      }\n    }\n  };\n  renderUIModules = modules => {\n    return modules.map((comp, i) => this.renderUIModule(comp, i));\n  };\n  renderUIModule = (comp, key) => {\n    const {\n      defaultCurrentTime = '--:--',\n      progressUpdateInterval = 20,\n      showDownloadProgress = true,\n      showFilledProgress = true,\n      showFilledVolume = false,\n      defaultDuration = '--:--',\n      customIcons = {},\n      showSkipControls = false,\n      onClickPrevious,\n      onClickNext,\n      onChangeCurrentTimeError,\n      showJumpControls = true,\n      customAdditionalControls = [RHAP_UI.LOOP],\n      customVolumeControls = [RHAP_UI.VOLUME],\n      muted = false,\n      timeFormat = 'auto',\n      volume: volumeProp = 1,\n      loop: loopProp = false,\n      mse,\n      i18nAriaLabels = H5AudioPlayer.defaultI18nAriaLabels\n    } = this.props;\n    switch (comp) {\n      case RHAP_UI.CURRENT_TIME:\n        return React.createElement(\"div\", {\n          key: key,\n          id: \"rhap_current-time\",\n          className: \"rhap_time rhap_current-time\"\n        }, React.createElement(CurrentTime, {\n          audio: this.audio.current,\n          isLeftTime: false,\n          defaultCurrentTime: defaultCurrentTime,\n          timeFormat: timeFormat\n        }));\n      case RHAP_UI.CURRENT_LEFT_TIME:\n        return React.createElement(\"div\", {\n          key: key,\n          id: \"rhap_current-left-time\",\n          className: \"rhap_time rhap_current-left-time\"\n        }, React.createElement(CurrentTime, {\n          audio: this.audio.current,\n          isLeftTime: true,\n          defaultCurrentTime: defaultCurrentTime,\n          timeFormat: timeFormat\n        }));\n      case RHAP_UI.PROGRESS_BAR:\n        return React.createElement(ProgressBar, {\n          key: key,\n          ref: this.progressBar,\n          audio: this.audio.current,\n          progressUpdateInterval: progressUpdateInterval,\n          showDownloadProgress: showDownloadProgress,\n          showFilledProgress: showFilledProgress,\n          onSeek: mse && mse.onSeek,\n          onChangeCurrentTimeError: onChangeCurrentTimeError,\n          srcDuration: mse && mse.srcDuration,\n          i18nProgressBar: i18nAriaLabels.progressControl\n        });\n      case RHAP_UI.DURATION:\n        return React.createElement(\"div\", {\n          key: key,\n          className: \"rhap_time rhap_total-time\"\n        }, mse && mse.srcDuration ? getDisplayTimeBySeconds(mse.srcDuration, mse.srcDuration, this.props.timeFormat) : React.createElement(Duration, {\n          audio: this.audio.current,\n          defaultDuration: defaultDuration,\n          timeFormat: timeFormat\n        }));\n      case RHAP_UI.ADDITIONAL_CONTROLS:\n        return React.createElement(\"div\", {\n          key: key,\n          className: \"rhap_additional-controls\"\n        }, this.renderUIModules(customAdditionalControls));\n      case RHAP_UI.MAIN_CONTROLS:\n        {\n          const isPlaying = this.isPlaying();\n          let actionIcon;\n          if (isPlaying) {\n            actionIcon = customIcons.pause ? customIcons.pause : React.createElement(Icon, {\n              icon: \"mdi:pause-circle\",\n              ssr: true\n            });\n          } else {\n            actionIcon = customIcons.play ? customIcons.play : React.createElement(Icon, {\n              icon: \"mdi:play-circle\",\n              ssr: true\n            });\n          }\n          return React.createElement(\"div\", {\n            key: key,\n            className: \"rhap_main-controls\"\n          }, showSkipControls && React.createElement(\"button\", {\n            \"aria-label\": i18nAriaLabels.previous,\n            className: \"rhap_button-clear rhap_main-controls-button rhap_skip-button\",\n            type: \"button\",\n            onClick: onClickPrevious\n          }, customIcons.previous ? customIcons.previous : React.createElement(Icon, {\n            icon: \"mdi:skip-previous\",\n            ssr: true\n          })), showJumpControls && React.createElement(\"button\", {\n            \"aria-label\": i18nAriaLabels.rewind,\n            className: \"rhap_button-clear rhap_main-controls-button rhap_rewind-button\",\n            type: \"button\",\n            onClick: this.handleClickRewind\n          }, customIcons.rewind ? customIcons.rewind : React.createElement(Icon, {\n            icon: \"mdi:rewind\",\n            ssr: true\n          })), React.createElement(\"button\", {\n            \"aria-label\": isPlaying ? i18nAriaLabels.pause : i18nAriaLabels.play,\n            className: \"rhap_button-clear rhap_main-controls-button rhap_play-pause-button\",\n            type: \"button\",\n            onClick: this.togglePlay\n          }, actionIcon), showJumpControls && React.createElement(\"button\", {\n            \"aria-label\": i18nAriaLabels.forward,\n            className: \"rhap_button-clear rhap_main-controls-button rhap_forward-button\",\n            type: \"button\",\n            onClick: this.handleClickForward\n          }, customIcons.forward ? customIcons.forward : React.createElement(Icon, {\n            icon: \"mdi:fast-forward\",\n            ssr: true\n          })), showSkipControls && React.createElement(\"button\", {\n            \"aria-label\": i18nAriaLabels.next,\n            className: \"rhap_button-clear rhap_main-controls-button rhap_skip-button\",\n            type: \"button\",\n            onClick: onClickNext\n          }, customIcons.next ? customIcons.next : React.createElement(Icon, {\n            icon: \"mdi:skip-next\",\n            ssr: true\n          })));\n        }\n      case RHAP_UI.VOLUME_CONTROLS:\n        return React.createElement(\"div\", {\n          key: key,\n          className: \"rhap_volume-controls\"\n        }, this.renderUIModules(customVolumeControls));\n      case RHAP_UI.LOOP:\n        {\n          const loop = this.audio.current ? this.audio.current.loop : loopProp;\n          let loopIcon;\n          if (loop) {\n            loopIcon = customIcons.loop ? customIcons.loop : React.createElement(Icon, {\n              icon: \"mdi:repeat\",\n              ssr: true\n            });\n          } else {\n            loopIcon = customIcons.loopOff ? customIcons.loopOff : React.createElement(Icon, {\n              icon: \"mdi:repeat-off\",\n              ssr: true\n            });\n          }\n          return React.createElement(\"button\", {\n            key: key,\n            \"aria-label\": loop ? i18nAriaLabels.loop : i18nAriaLabels.loopOff,\n            className: \"rhap_button-clear rhap_repeat-button\",\n            type: \"button\",\n            onClick: this.handleClickLoopButton\n          }, loopIcon);\n        }\n      case RHAP_UI.VOLUME:\n        {\n          const {\n            volume = muted ? 0 : volumeProp\n          } = this.audio.current || {};\n          let volumeIcon;\n          if (volume) {\n            volumeIcon = customIcons.volume ? customIcons.volume : React.createElement(Icon, {\n              icon: \"mdi:volume-high\",\n              ssr: true\n            });\n          } else {\n            volumeIcon = customIcons.volume ? customIcons.volumeMute : React.createElement(Icon, {\n              icon: \"mdi:volume-mute\",\n              ssr: true\n            });\n          }\n          return React.createElement(\"div\", {\n            key: key,\n            className: \"rhap_volume-container\"\n          }, React.createElement(\"button\", {\n            \"aria-label\": volume ? i18nAriaLabels.volume : i18nAriaLabels.volumeMute,\n            onClick: this.handleClickVolumeButton,\n            type: \"button\",\n            className: \"rhap_button-clear rhap_volume-button\"\n          }, volumeIcon), React.createElement(VolumeBar, {\n            audio: this.audio.current,\n            volume: volume,\n            onMuteChange: this.handleMuteChange,\n            showFilledVolume: showFilledVolume,\n            i18nVolumeControl: i18nAriaLabels.volumeControl\n          }));\n        }\n      default:\n        if (!isValidElement(comp)) {\n          return null;\n        }\n        return comp.key ? comp : cloneElement(comp, {\n          key\n        });\n    }\n  };\n  componentDidMount() {\n    this.forceUpdate();\n    const audio = this.audio.current;\n    if (this.props.muted) {\n      audio.volume = 0;\n    } else {\n      audio.volume = this.lastVolume;\n    }\n    audio.addEventListener('error', e => {\n      const target = e.target;\n      if (target.error && target.currentTime === target.duration) {\n        return this.props.onEnded && this.props.onEnded(e);\n      }\n      this.props.onError && this.props.onError(e);\n    });\n    audio.addEventListener('canplay', e => {\n      this.props.onCanPlay && this.props.onCanPlay(e);\n    });\n    audio.addEventListener('canplaythrough', e => {\n      this.props.onCanPlayThrough && this.props.onCanPlayThrough(e);\n    });\n    audio.addEventListener('play', this.handlePlay);\n    audio.addEventListener('abort', this.handleAbort);\n    audio.addEventListener('ended', this.handleEnded);\n    audio.addEventListener('playing', e => {\n      this.props.onPlaying && this.props.onPlaying(e);\n    });\n    audio.addEventListener('seeking', e => {\n      this.props.onSeeking && this.props.onSeeking(e);\n    });\n    audio.addEventListener('seeked', e => {\n      this.props.onSeeked && this.props.onSeeked(e);\n    });\n    audio.addEventListener('waiting', e => {\n      this.props.onWaiting && this.props.onWaiting(e);\n    });\n    audio.addEventListener('emptied', e => {\n      this.props.onEmptied && this.props.onEmptied(e);\n    });\n    audio.addEventListener('stalled', e => {\n      this.props.onStalled && this.props.onStalled(e);\n    });\n    audio.addEventListener('suspend', e => {\n      this.props.onSuspend && this.props.onSuspend(e);\n    });\n    audio.addEventListener('loadstart', e => {\n      this.props.onLoadStart && this.props.onLoadStart(e);\n    });\n    audio.addEventListener('loadedmetadata', e => {\n      this.props.onLoadedMetaData && this.props.onLoadedMetaData(e);\n    });\n    audio.addEventListener('loadeddata', e => {\n      this.props.onLoadedData && this.props.onLoadedData(e);\n    });\n    audio.addEventListener('pause', this.handlePause);\n    audio.addEventListener('timeupdate', throttle(e => {\n      this.props.onListen && this.props.onListen(e);\n    }, this.props.listenInterval));\n    audio.addEventListener('volumechange', e => {\n      this.props.onVolumeChange && this.props.onVolumeChange(e);\n    });\n    audio.addEventListener('encrypted', e => {\n      const {\n        mse\n      } = this.props;\n      mse && mse.onEcrypted && mse.onEcrypted(e);\n    });\n  }\n  componentDidUpdate(prevProps) {\n    const {\n      src,\n      autoPlayAfterSrcChange\n    } = this.props;\n    if (prevProps.src !== src) {\n      if (autoPlayAfterSrcChange) {\n        this.playAudioPromise();\n      } else {\n        this.forceUpdate();\n      }\n    }\n  }\n  render() {\n    const {\n      className = '',\n      src,\n      loop: loopProp = false,\n      preload = 'auto',\n      autoPlay = false,\n      crossOrigin,\n      mediaGroup,\n      header,\n      footer,\n      layout = 'stacked',\n      customProgressBarSection = [RHAP_UI.CURRENT_TIME, RHAP_UI.PROGRESS_BAR, RHAP_UI.DURATION],\n      customControlsSection = [RHAP_UI.ADDITIONAL_CONTROLS, RHAP_UI.MAIN_CONTROLS, RHAP_UI.VOLUME_CONTROLS],\n      children,\n      style,\n      i18nAriaLabels = H5AudioPlayer.defaultI18nAriaLabels\n    } = this.props;\n    const loop = this.audio.current ? this.audio.current.loop : loopProp;\n    const loopClass = loop ? 'rhap_loop--on' : 'rhap_loop--off';\n    const isPlayingClass = this.isPlaying() ? 'rhap_play-status--playing' : 'rhap_play-status--paused';\n    return React.createElement(\"div\", {\n      role: \"group\",\n      tabIndex: 0,\n      \"aria-label\": i18nAriaLabels.player,\n      className: `rhap_container ${loopClass} ${isPlayingClass} ${className}`,\n      onKeyDown: this.handleKeyDown,\n      ref: this.container,\n      style: style\n    }, React.createElement(\"audio\", {\n      src: src,\n      controls: false,\n      loop: loop,\n      autoPlay: autoPlay,\n      preload: preload,\n      crossOrigin: crossOrigin,\n      mediaGroup: mediaGroup,\n      ref: this.audio\n    }, children), header && React.createElement(\"div\", {\n      className: \"rhap_header\"\n    }, header), React.createElement(\"div\", {\n      className: `rhap_main ${getMainLayoutClassName(layout)}`\n    }, React.createElement(\"div\", {\n      className: \"rhap_progress-section\"\n    }, this.renderUIModules(customProgressBarSection)), React.createElement(\"div\", {\n      className: \"rhap_controls-section\"\n    }, this.renderUIModules(customControlsSection))), footer && React.createElement(\"div\", {\n      className: \"rhap_footer\"\n    }, footer));\n  }\n}\nexport default H5AudioPlayer;\nexport { RHAP_UI };",".speedSelect {\n   width: 85px;\n}\n\n.speedSelect__option__content {\n   display: flex;\n   justify-content: space-between;\n   align-items: center;\n}\n","import { CheckmarkFilledIcon } from '@getgo/chameleon-icons/react';\nimport { Select, Option } from '@getgo/chameleon-web-react-wrapper'\nimport { ChangeEvent } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport styles from './SpeedSelect.module.scss';\n\nexport type SpeedSelectProps = {\n  playbackRate: number;\n  onPlaybackRate: (rate: number) => void;\n}\n\nconst SPEED_OPTIONS = [0.5, 1, 1.25, 1.5, 1.75, 2];\n\nconst SpeedSelect = ({playbackRate, onPlaybackRate}: SpeedSelectProps)=> {\n  const { t } = useTranslation();\n\n  const onChangeHandler = (e: ChangeEvent<HTMLSelectElement>) => onPlaybackRate(Number(e.target.value));\n\n  return (\n    <Select\n      aria-label={\n        t('Select recording speed')\n      }\n      size=\"small\"\n      inDialog\n      value={String(playbackRate)}\n      onChange={onChangeHandler}\n      className={styles.speedSelect}\n      selectedValue={`${playbackRate}x`}\n    >\n      {SPEED_OPTIONS.map((value) => (\n        <Option key={value} value={value}>\n          <div className={styles.speedSelect__option__content}>\n            <span>{value}x</span>\n            {value === playbackRate && <CheckmarkFilledIcon />}\n          </div>\n        </Option>\n      ))}\n    </Select>\n  );\n}\n\nexport default SpeedSelect;\n",".audioPlayer__iconButton {\n  width: 36px;\n  max-width: 36px;\n\n  &::part(control) {\n    width: 100%;\n    padding: 0;\n    margin: 0;\n\n    &:disabled {\n      --goto-icon-color: var(--goto-icon-color-disabled);\n\n      svg,\n      path {\n        fill: var(--goto-icon-color-disabled);\n      }\n    }\n  }\n}\n\n.audioPlayer__volumeButton{\n  chameleon-svg {\n    --goto-icon-size: 16px !important;\n  }\n}\n","import { useEffect, useRef, useState } from 'react';\nimport type React from 'react';\nimport H5AudioPlayer from 'react-h5-audio-player';\nimport { MIXPANEL_EVENT_NAME } from '../constants/mixpanel';\nimport useMixpanel from './useMixpanel';\n\ntype UseAudioPlayerParams = {\n  source: string | null | undefined;\n  onPlay: () => void;\n  onAudioError: (e: Event) => void;\n  onNext: () => void;\n  onPrevious: () => void;\n};\n\nexport const useAudioPlayer = ({ source, onPlay, onAudioError, onNext, onPrevious }: UseAudioPlayerParams) => {\n  const ref = useRef<H5AudioPlayer>(null);\n  const [currentTime, setCurrentTime] = useState(0);\n  const [playbackRate, setPlaybackRate] = useState(1);\n  const mixpanelTrack = useMixpanel();\n\n  useEffect(() => {\n    if (source && ref && ref.current) {\n      ref.current.audio.current!.playbackRate = playbackRate;\n    }\n  }, [playbackRate, ref, source]);\n\n  useEffect(() => {\n    if (source && ref && currentTime > 0) {\n      ref.current!.audio.current!.currentTime = currentTime;\n    }\n  }, [source, ref, currentTime]);\n\n  const onAudioPlay = (e: Event) => {\n    const target = e.target as HTMLAudioElement;\n    const eventData = {\n      Action: `Play click`,\n      Component: 'AudioPlayer',\n      duration: target?.duration || 0\n    };\n    void mixpanelTrack(MIXPANEL_EVENT_NAME.AUDIO_PLAYER, eventData);\n\n    onPlay();\n  };\n\n  const onError = (e: Event) => {\n    const target = e.target as HTMLAudioElement;\n    const eventData = {\n      Action: `Retry after error`,\n      Component: 'AudioPlayer',\n      RetryTime: target?.currentTime || 0\n    };\n    void mixpanelTrack(MIXPANEL_EVENT_NAME.AUDIO_PLAYER, eventData);\n\n    setCurrentTime(target.currentTime);\n\n    onAudioError(e);\n  };\n\n  const onAudioNext = (e: React.SyntheticEvent) => {\n    const target = e.target as HTMLAudioElement;\n    const eventData = {\n      Action: `Next audio click`,\n      Component: 'AudioPlayer',\n      duration: target?.duration || 0\n    };\n    void mixpanelTrack(MIXPANEL_EVENT_NAME.AUDIO_PLAYER, eventData);\n\n    onNext();\n  };\n\n  const onAudioPrevious = (e: React.SyntheticEvent) => {\n    const target = e.target as HTMLAudioElement;\n    const eventData = {\n      Action: `Previous audio click`,\n      Component: 'AudioPlayer',\n      duration: target?.duration || 0\n    };\n    void mixpanelTrack(MIXPANEL_EVENT_NAME.AUDIO_PLAYER, eventData);\n\n    onPrevious();\n  };\n\n  const onPlaybackRate = (rate: number) => {\n    const eventData = {\n      Action: `Change playback rate`,\n      Component: 'AudioPlayer',\n      PlaybackRate: rate\n    };\n    void mixpanelTrack(MIXPANEL_EVENT_NAME.AUDIO_PLAYER, eventData);\n\n    setPlaybackRate(rate);\n  };\n\n  return {\n    ref,\n    onError,\n    onAudioNext,\n    onAudioPlay,\n    onAudioPrevious,\n    onPlaybackRate,\n    playbackRate\n  };\n};\n","import PropTypes from 'prop-types';\nimport ReactAudioPlayer, { RHAP_UI } from 'react-h5-audio-player';\nimport { IconButton } from '@getgo/chameleon-web-react-wrapper';\nimport SpeedSelect from '../SpeedSelect/SpeedSelect';\nimport {\n  Rewind10OutlinedIcon,\n  Forward10OutlinedIcon,\n  PlayCircleOutlinedIcon,\n  PauseCircleOutlinedIcon,\n  SkipPreviousFilledIcon,\n  SkipNextFilledIcon,\n  SpeakerOnOutlinedIcon,\n  SpeakerOffOutlinedIcon\n} from '@getgo/chameleon-icons/react';\nimport { useTranslation } from 'react-i18next';\nimport { TooltipWrapper } from '@analytics-common-ui/layout';\nimport styles from './AudioPlayer.module.scss';\nimport '../../../assets/styles/AudioPlayer.scss';\nimport { ZINDEX } from '../../../constants/z-index';\nimport { useAudioPlayer } from '../../../hooks/useAudioPlayer';\n\nconst AudioPlayer = ({\n  isDisabled,\n  onPlay,\n  onAudioError,\n  source,\n  onNext,\n  onPrevious,\n  showSkipControls,\n  isPreviousDisabled,\n  isNextDisabled\n}) => {\n  const { t } = useTranslation();\n  const { ref, onError, onAudioNext, onAudioPlay, onAudioPrevious, onPlaybackRate, playbackRate } = useAudioPlayer({\n    source,\n    onPlay,\n    onAudioError,\n    onNext,\n    onPrevious\n  });\n\n  return (\n    <ReactAudioPlayer\n      ref={ref}\n      autoPlay\n      autoPlayAfterSrcChange={false}\n      layout=\"stacked-reverse\"\n      customAdditionalControls={[]}\n      customVolumeControls={[]}\n      customProgressBarSection={[\n        RHAP_UI.VOLUME,\n        RHAP_UI.CURRENT_TIME,\n        RHAP_UI.PROGRESS_BAR,\n        RHAP_UI.DURATION,\n        <SpeedSelect key=\"speed-select\" playbackRate={playbackRate} onPlaybackRate={onPlaybackRate} />\n      ]}\n      showSkipControls={showSkipControls}\n      showFilledProgress\n      {...(isDisabled && { customProgressBarSection: [] })}\n      src={source}\n      onPlay={onAudioPlay}\n      onError={onError}\n      onClickNext={onAudioNext}\n      onClickPrevious={onAudioPrevious}\n      progressJumpSteps={{ backward: 10000, forward: 10000 }}\n      customIcons={{\n        play: (\n          <TooltipWrapper title={t('Play the audio')} zIndex={ZINDEX.TOOLTIP}>\n            <IconButton\n              disabled={isDisabled}\n              label={t('Play the audio')}\n              variant=\"primary\"\n              onClick={onPlay}\n              className={styles.audioPlayer__iconButton}>\n              <PlayCircleOutlinedIcon size=\"36px\" />\n            </IconButton>\n          </TooltipWrapper>\n        ),\n        pause: (\n          <TooltipWrapper title={t('Pause the audio')} zIndex={ZINDEX.TOOLTIP}>\n            <IconButton\n              disabled={isDisabled}\n              label={t('Pause the audio')}\n              variant=\"primary\"\n              onClick={onPlay}\n              className={styles.audioPlayer__iconButton}>\n              <PauseCircleOutlinedIcon size=\"36px\" />\n            </IconButton>\n          </TooltipWrapper>\n        ),\n        forward: (\n          <TooltipWrapper title={t('Forward 10 seconds')} zIndex={ZINDEX.TOOLTIP}>\n            <IconButton\n              label={t('Forward 10 seconds')}\n              variant=\"primary\"\n              disabled={isDisabled || !source}\n              className={styles.audioPlayer__iconButton}>\n              <Forward10OutlinedIcon size=\"24px\" />\n            </IconButton>\n          </TooltipWrapper>\n        ),\n        rewind: (\n          <TooltipWrapper title={t('Rewind 10 seconds')} zIndex={ZINDEX.TOOLTIP}>\n            <IconButton\n              label={t('Rewind 10 seconds')}\n              variant=\"primary\"\n              disabled={isDisabled || !source}\n              className={styles.audioPlayer__iconButton}>\n              <Rewind10OutlinedIcon size=\"24px\" />\n            </IconButton>\n          </TooltipWrapper>\n        ),\n        previous: (\n          <TooltipWrapper title={t('Previous audio')} zIndex={ZINDEX.TOOLTIP}>\n            <IconButton\n              label={t('Previous audio')}\n              variant=\"primary\"\n              disabled={isPreviousDisabled}\n              className={styles.audioPlayer__iconButton}>\n              <SkipPreviousFilledIcon size=\"24px\" />\n            </IconButton>\n          </TooltipWrapper>\n        ),\n        next: (\n          <TooltipWrapper title={t('Next audio')} zIndex={ZINDEX.TOOLTIP}>\n            <IconButton\n              label={t('Next audio')}\n              variant=\"primary\"\n              disabled={isNextDisabled}\n              className={styles.audioPlayer__iconButton}>\n              <SkipNextFilledIcon size=\"24px\" />\n            </IconButton>\n          </TooltipWrapper>\n        ),\n        volume: (\n          <TooltipWrapper title={t('Mute')} zIndex={ZINDEX.TOOLTIP}>\n            <IconButton label={t('Mute')} variant=\"primary\" size=\"small\" className={styles.audioPlayer__volumeButton}>\n              <SpeakerOnOutlinedIcon size=\"24px\" />\n            </IconButton>\n          </TooltipWrapper>\n        ),\n        volumeMute: (\n          <TooltipWrapper title={t('Unmute')} zIndex={ZINDEX.TOOLTIP}>\n            <IconButton label={t('Unmute')} variant=\"primary\" size=\"small\" className={styles.audioPlayer__volumeButton}>\n              <SpeakerOffOutlinedIcon size=\"24px\" />\n            </IconButton>\n          </TooltipWrapper>\n        )\n      }}\n    />\n  );\n};\n\nAudioPlayer.propTypes = {\n  /** Define if the player is disabled  */\n  isDisabled: PropTypes.bool,\n  /** Function fired when play clicked  */\n  onPlay: PropTypes.func,\n  /** Function fired when error on audio  */\n  onAudioError: PropTypes.func,\n  /** The URL of the audio to play  */\n  source: PropTypes.string,\n  /** Function fired when next clicked  */\n  onNext: PropTypes.func,\n  /** Function fired when previous clicked  */\n  onPrevious: PropTypes.func,\n  /** Define if the player show the skip controls  */\n  showSkipControls: PropTypes.bool,\n  /** Define if previous button is disabled  */\n  isPreviousDisabled: PropTypes.bool,\n  /** Define if next button is disabled  */\n  isNextDisabled: PropTypes.bool\n};\n\nexport default AudioPlayer;\n","export const recordingsStatuses = {\n  NO_ACCESS: 'NO_ACCESS',\n  RECORDINGS_AVAILABLE: 'RECORDINGS_AVAILABLE',\n  NO_RECORDING: 'NO_RECORDING',\n  UNSUPPORTED: 'UNSUPPORTED'\n};\n","import { DateTime } from 'luxon';\nimport PropTypes from 'prop-types';\nimport { useEffect, useState, useMemo } from 'react';\nimport { Trans, useTranslation } from 'react-i18next';\nimport { useSelector } from 'react-redux';\nimport { AlertOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { Typography, Select, Option } from '@getgo/chameleon-web-react-wrapper';\n\nimport AudioPlayerSkeleton from '../../AudioPlayerSkeleton/AudioPlayerSkeleton';\nimport useMixpanel from '../../../../hooks/useMixpanel.ts';\nimport { MIXPANEL_EVENT_NAME } from '../../../../constants/mixpanel.ts';\nimport {\n  getAudioRecordUrl,\n  fetchRecordingStatus,\n  fetchRecordingToken\n} from '../../../../services/common/call-report.service';\nimport useFetch from '../../../../hooks/useFetch';\nimport { selectCurrentOrganizationId, selectCurrentOrganization } from '../../../../store/selectors/analytics';\nimport styles from './CallReportModalPlayer.module.scss';\nimport { PBX_FEATURE_FLAGS } from '../../../../services/common/pbx-feature-flag.service';\nimport AudioPlayer from '../../AudioPlayer/AudioPlayer';\nimport { recordingsStatuses } from '../../../../constants/recordings';\nimport { sortRecordingsByCaller } from '../../../../utils/recordings.util';\nimport { recordingPropType } from '../../../../utils/prop-types.util';\nimport { GLOBAL_STATUS } from '../../../../constants/status';\nimport { fetchPbxFeatureFlag } from '../../../../services/common/pbx-feature-flag.service';\nimport environment from '../../../../environments';\n\nconst CallReportModalPlayer = ({\n  loading,\n  conversationId,\n  recordingsStatus,\n  recordings,\n  currentRecording,\n  onSetCurrentRecording\n}) => {\n  const organizationId = useSelector(selectCurrentOrganizationId);\n  const currentOrganization = useSelector(selectCurrentOrganization);\n  const { t } = useTranslation();\n  const mixpanelTrack = useMixpanel();\n  const [recordingStatus, setRecordingStatus] = useState(null);\n  const [audioSource, setAudioSource] = useState(null);\n  const [audioTokenExpiration, setAudioTokenExpiration] = useState(null);\n\n  // TODO: retrieve on init instead of each time we open the modal\n  const [isCallRecordingV2Enabled, setIsCallRecordingV2Enabled] = useState(null);\n  const [isV2featureFlagLoading, v2FeatureFlagError] = useFetch(async controller => {\n    const result = await fetchPbxFeatureFlag(organizationId, PBX_FEATURE_FLAGS.CALL_RECORDING_V2, controller);\n    setIsCallRecordingV2Enabled(!!result);\n  }, []);\n\n  const callRecordings = useMemo(() => {\n    return recordings ? sortRecordingsByCaller(recordings) : [];\n  }, [recordings]);\n\n  const currentRecordingIndex = useMemo(\n    () => callRecordings.findIndex(x => x.id === currentRecording?.id),\n    [callRecordings, currentRecording?.id]\n  );\n\n  const downloadAudio = async () => {\n    try {\n      const controller = new AbortController();\n      const result = await fetchRecordingToken(organizationId, currentRecording.id, conversationId, controller);\n\n      setAudioTokenExpiration(result.token.expires);\n\n      setAudioSource(getAudioRecordUrl(organizationId, currentRecording.id, result.token.token));\n    } catch (e) {\n      console.error(e);\n\n      setRecordingStatus(GLOBAL_STATUS.ERROR);\n    }\n  };\n\n  const onAudioError = async e => {\n    if (e?.target?.error?.code === MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED) {\n      setRecordingStatus(recordingsStatuses.UNSUPPORTED);\n    } else if (audioTokenExpiration) {\n      const expirationTokenDate = DateTime.fromISO(audioTokenExpiration);\n      if (expirationTokenDate < DateTime.now()) {\n        downloadAudio();\n      }\n    } else {\n      console.error('Unable to play the audio', e.target.error);\n    }\n  };\n\n  const [recordingStatusLoading, recordingRequestError] = useFetch(\n    async controller => {\n      if (currentRecording?.id) {\n        const result = await fetchRecordingStatus(organizationId, currentRecording.id, conversationId, controller);\n\n        setRecordingStatus(result.status);\n      }\n    },\n    [currentRecording?.id]\n  );\n\n  const onNextHandler = () => {\n    if (currentRecordingIndex < callRecordings.length - 1) {\n      setAudioSource(null);\n      onSetCurrentRecording(callRecordings[currentRecordingIndex + 1]);\n    }\n  };\n\n  const onPreviousHandler = () => {\n    if (currentRecordingIndex > 0) {\n      setAudioSource(null);\n      onSetCurrentRecording(callRecordings[currentRecordingIndex - 1]);\n    }\n  };\n\n  const onChangeRecordingHandler = e => {\n    const eventData = {\n      Action: 'Changed selected audio file',\n      Component: 'AudioPlayer'\n    };\n    mixpanelTrack(MIXPANEL_EVENT_NAME.AUDIO_PLAYER, eventData);\n\n    setAudioSource(null);\n    onSetCurrentRecording(callRecordings.find(callRecording => callRecording.id === e.target.value));\n  };\n\n  const getPlayerErrorMessage = () => {\n    if (!isCallRecordingV2Enabled) {\n      return (\n        <Typography color=\"type-color-warning\" className={styles.callReportModalPlayer__errorMessage}>\n          <AlertOutlinedIcon color=\"type-color-warning\" />\n          <Trans>\n            Play v1 recordings in the{' '}\n            <a\n              href={`${environment.crPortalUrl}/${currentOrganization.domain}`}\n              target=\"_blank\"\n              rel=\"noopener noreferrer\"\n              className={styles.callReportModalPlayer__externalLink}>\n              old portal\n            </a>\n            , or contact support to enable v2\n          </Trans>\n        </Typography>\n      );\n    }\n\n    if (recordingsStatus === recordingsStatuses.NO_ACCESS) {\n      return (\n        <Typography color=\"type-color-warning\" className={styles.callReportModalPlayer__errorMessage}>\n          <AlertOutlinedIcon color=\"type-color-warning\" />\n          <Trans>\n            {\"You don't have the user permissions required to play \"}\n            <a\n              href={environment.support.urlCallRecording}\n              target=\"_blank\"\n              rel=\"noopener noreferrer\"\n              className={styles.callReportModalPlayer__externalLink}>\n              recordings\n            </a>\n          </Trans>\n        </Typography>\n      );\n    }\n\n    if (recordingStatus === recordingsStatuses.UNSUPPORTED) {\n      return (\n        <Typography color=\"type-color-warning\" className={styles.callReportModalPlayer__errorMessage}>\n          <AlertOutlinedIcon color=\"type-color-warning\" />\n          &nbsp;\n          {t(`Couldn't play the recording. Export details to download the recording file.`)}\n        </Typography>\n      );\n    }\n\n    if (recordingsStatus === recordingsStatuses.NO_RECORDING) {\n      return (\n        <Typography color=\"type-color-warning\" className={styles.callReportModalPlayer__errorMessage}>\n          <AlertOutlinedIcon color=\"type-color-warning\" />\n          <Trans>\n            Recordings must be enabled in the{' '}\n            <a\n              href={environment.support.urlCallRecording}\n              target=\"_blank\"\n              rel=\"noopener noreferrer\"\n              className={styles.callReportModalPlayer__externalLink}>\n              admin portal\n            </a>{' '}\n            to be played here\n          </Trans>\n        </Typography>\n      );\n    }\n\n    if (recordingStatus !== GLOBAL_STATUS.UPLOADED && !recordingStatusLoading) {\n      return (\n        <Typography color=\"type-color-warning\" className={styles.callReportModalPlayer__errorMessage}>\n          <AlertOutlinedIcon color=\"type-color-warning\" /> {t('Recording not available')}\n        </Typography>\n      );\n    }\n\n    return null;\n  };\n\n  useEffect(() => {\n    if (recordingRequestError || v2FeatureFlagError) {\n      console.error(recordingRequestError);\n\n      setRecordingStatus(GLOBAL_STATUS.ERROR);\n    }\n  }, [recordingRequestError, v2FeatureFlagError]);\n\n  const isLoadingAudioPlayer = recordingStatusLoading || isV2featureFlagLoading;\n  const isAudioPlayerDisabled = recordingStatus !== GLOBAL_STATUS.UPLOADED || !isCallRecordingV2Enabled;\n  const isFirstRecording = currentRecordingIndex === 0;\n  const isLastRecording = callRecordings?.length > 0 && currentRecordingIndex === callRecordings.length - 1;\n\n  return (\n    <>\n      {callRecordings.length > 1 && (\n        <Select\n          size=\"small\"\n          inDialog\n          onChange={onChangeRecordingHandler}\n          value={currentRecording?.id}\n          aria-label={t('Select audio recording')}>\n          {callRecordings.map(callRecording => (\n            <Option value={callRecording.id} key={callRecording.id}>\n              {callRecording.label}\n            </Option>\n          ))}\n        </Select>\n      )}\n      {loading || isLoadingAudioPlayer ? (\n        <AudioPlayerSkeleton isPreviousDisabled={isFirstRecording} isNextDisabled={isLastRecording} />\n      ) : (\n        <>\n          <AudioPlayer\n            isDisabled={isAudioPlayerDisabled}\n            isPreviousDisabled={isFirstRecording}\n            isNextDisabled={isLastRecording}\n            showSkipControls={callRecordings.length > 1}\n            onAudioError={onAudioError}\n            onPlay={() => !audioSource && downloadAudio()}\n            source={audioSource}\n            onNext={onNextHandler}\n            onPrevious={onPreviousHandler}\n          />\n          {getPlayerErrorMessage()}\n        </>\n      )}\n    </>\n  );\n};\n\nCallReportModalPlayer.propTypes = {\n  /* Flag if the data is loading */\n  loading: PropTypes.bool,\n  /* The status of the recording on the call report */\n  recordingsStatus: PropTypes.string,\n  /* The conversation id */\n  conversationId: PropTypes.string,\n  /* The list of recordings */\n  recordings: PropTypes.arrayOf(recordingPropType),\n  /* The callback when a recording is selected */\n  onSetCurrentRecording: PropTypes.func,\n  /* The currently selected recording */\n  currentRecording: recordingPropType\n};\n\nexport default CallReportModalPlayer;\n",".callReportTranscript__container {\n  overflow-y: auto;\n  max-height: 535px;\n  border-radius: var(--goto-radius-medium);\n  padding: var(--goto-spacing-04);\n}\n\n.callReportTranscript__containerBackgroundColorLightMode {\n  background-color: var(--goto-blue-100);\n}\n\n.callReportTranscript__containerBackgroundColorDarkMode {\n  background-color: var(--goto-neutral-500);\n}\n\n.callReportTranscript__chatContainer {\n  display: flex;\n  flex-direction: column;\n  padding: var(--goto-spacing-01);\n}\n\n.callReportTranscript__callerWord {\n  font-weight: bold;\n}\n\n.callReportTranscript__timeBox {\n  padding: 0 var(--goto-spacing-01);\n\n  &_caller {\n    align-self: flex-start;\n  }\n\n  &_other {\n    align-self: flex-end;\n  }\n}\n\n.callReportTranscript__chatBox {\n  max-width: 400px;\n  padding: var(--goto-spacing-02);\n  margin: var(--goto-spacing-01);\n  border-radius: var(--goto-radius-medium);\n  box-shadow: var(--goto-elevation-medium);\n\n  &_caller {\n    background-color: var(--goto-neutral-050);\n    align-self: flex-start;\n  }\n\n  &_other {\n    background-color: var(--goto-dataviz-color-green-hover);\n    align-self: flex-end;\n  }\n}\n","import PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { Typography } from '@getgo/chameleon-web-react-wrapper';\nimport clsx from 'clsx';\n\nimport { useSelector } from 'react-redux';\nimport { THEME } from '../../../../constants/theme';\nimport { selectUserTheme } from '../../../../store/selectors/analytics';\n\nimport styles from './CallReportTranscript.module.scss';\nimport { transcriptSource } from '../../../../constants/transcripts';\nimport { getDisplayTranscriptStartTimeFormat } from '../../../../utils/date-time.util';\n\nconst CallReportTranscript = ({ transcripts }) => {\n  const userTheme = useSelector(selectUserTheme);\n\n  const { t } = useTranslation();\n\n  return (\n    <div\n      className={clsx(\n        styles.callReportTranscript__container,\n        userTheme === THEME.LIGHT\n          ? styles.callReportTranscript__containerBackgroundColorLightMode\n          : styles.callReportTranscript__containerBackgroundColorDarkMode\n      )}>\n      {transcripts.map((transcript, index) => {\n        const isCaller = transcript.source === transcriptSource.CALLER;\n\n        return (\n          <div key={`transcript-${index.toString()}`} className={styles.callReportTranscript__chatContainer}>\n            <Typography\n              className={clsx(styles.callReportTranscript__timeBox, {\n                [styles.callReportTranscript__timeBox_caller]: isCaller,\n                [styles.callReportTranscript__timeBox_other]: !isCaller\n              })}\n              color={userTheme === THEME.LIGHT ? 'neutral-300' : 'neutral-100'}>\n              {isCaller && <span className={styles.callReportTranscript__callerWord}>{t('Caller')}</span>}\n              &nbsp;{getDisplayTranscriptStartTimeFormat(transcript.startTime)}\n            </Typography>\n\n            <Typography\n              className={clsx(styles.callReportTranscript__chatBox, {\n                [styles.callReportTranscript__chatBox_caller]: isCaller,\n                [styles.callReportTranscript__chatBox_other]: !isCaller\n              })}\n              color=\"neutral-700\">\n              {transcript.transcript}\n            </Typography>\n          </div>\n        );\n      })}\n    </div>\n  );\n};\n\nCallReportTranscript.propTypes = {\n  /** Results of Transcript */\n  transcripts: PropTypes.arrayOf(\n    PropTypes.shape({\n      source: PropTypes.string,\n      startTime: PropTypes.string,\n      transcript: PropTypes.string\n    })\n  )\n};\n\nexport default CallReportTranscript;\n",".callReportUnauthorized__outerWrapper {\n  display: flex;\n  justify-content: center;\n  width: 100%; /* Take full width */\n  padding-top: var(--goto-spacing-06);\n  padding-bottom: var(--goto-spacing-06);\n}\n\n.callReportUnauthorized__wrapper {\n  text-align: center;\n  width: 500px; /* Limit width to 500px */\n}\n\n.callReportUnauthorized__icon {\n  display: flex;\n  justify-content: center;\n  padding: 10px 0\n}\n\n.callReportUnauthorized__heading {\n  display: block;\n  padding-bottom: var(--goto-spacing-05);\n}\n\n.callReportUnauthorized__link {\n  color: var(--goto-type-color-brand-default);\n  text-decoration: none;\n}\n\n.callReportUnauthorized__link:hover {\n  text-decoration: underline;\n}\n","import { Typography } from '@getgo/chameleon-web-react-wrapper';\nimport { Trans, useTranslation } from 'react-i18next';\nimport { AlertStaticPictogram } from '@getgo/chameleon-pictograms/react';\nimport styles from './CallReportUpgradePrompt.module.scss';\nimport useMixpanel from '../../../../hooks/useMixpanel.ts';\nimport { MIXPANEL_EVENT_NAME } from '../../../../constants/mixpanel.ts';\nimport PropTypes from 'prop-types';\n\nexport const CallReportUpgradePrompt = ({ upgradeMessage, buyAddOnLink }) => {\n  const { t } = useTranslation();\n  const mixpanelTrack = useMixpanel();\n\n  return (\n    <div className={styles.callReportUnauthorized__outerWrapper}>\n      <div className={styles.callReportUnauthorized__wrapper}>\n        <div className={styles.callReportUnauthorized__icon}>\n          <AlertStaticPictogram />\n        </div>\n        <Typography className={styles.callReportUnauthorized__heading} variant=\"heading-medium\">\n          {t('Upgrade to access this feature')}\n        </Typography>\n        <Typography\n          color=\"type-color-secondary\"\n          className={styles.callReportUnauthorized__heading}\n          variant=\"body-medium\">\n          {upgradeMessage}\n        </Typography>\n        <Typography\n          color=\"type-color-secondary\"\n          className={styles.callReportUnauthorized__heading}\n          variant=\"body-medium\">\n          {t(\n            'Upgrading to an Advanced Reporting or Contact Center license will give you access to this feature and more.'\n          )}\n        </Typography>\n        <Typography\n          color=\"type-color-secondary\"\n          className={styles.callReportUnauthorized__heading}\n          variant=\"body-medium\">\n          <Trans>\n            Discover your{' '}\n            <a\n              href={buyAddOnLink}\n              onClick={() => {\n                const eventData = {\n                  Action: `Clicked on upgrade options`,\n                  Component: 'CallReportUpdatePropmt',\n                  ModalName: 'Call report update prompt'\n                };\n                mixpanelTrack(MIXPANEL_EVENT_NAME.CONVERSATION_DETAIL, eventData);\n              }}\n              className={styles.callReportUnauthorized__link}\n              target=\"_blank\"\n              rel=\"noopener noreferrer\">\n              upgrade options\n            </a>\n          </Trans>\n        </Typography>\n      </div>\n    </div>\n  );\n};\n\nCallReportUpgradePrompt.propTypes = {\n  /** Upgrade message the user will see */\n  upgradeMessage: PropTypes.string.isRequired,\n  /** Link to go to to buy the add-on */\n  buyAddOnLink: PropTypes.string.isRequired\n};\n","import environment from '../environments';\n\nexport const REPORTING_AND_ANALYTICS_PRODUCT_CODE = 'REPORTING_AND_ANALYTICS';\nexport const GOTO_PRICING_PAGE = 'https://www.goto.com/pricing/connect';\n\nexport const getProductAddOnBuyLink = (purchasableProducts, lmiAccountKey) => {\n  if (purchasableProducts?.id === REPORTING_AND_ANALYTICS_PRODUCT_CODE) {\n    return `${environment.api.gotoAdmin.url}/${lmiAccountKey}${purchasableProducts.uri}`;\n  }\n  return GOTO_PRICING_PAGE;\n};\n",".callReportAiInsight {\n  gap: var(--goto-spacing-04);\n  display: flex;\n  flex-direction: column;\n  padding: var(--goto-spacing-03) 0;\n}\n\n.callReportAiInsight__details__section {\n  border: 2px solid var(--goto-border-color-inverted);\n  border-radius: var(--goto-spacing-02);\n  padding: var(--goto-spacing-04) var(--goto-spacing-06);\n}\n\n.callReportAiInsight__list {\n  margin: 0;\n  list-style: none;\n  min-width: 200px;\n  display: flex;\n  align-items: center;\n  padding: 0;\n  height: 92px;\n\n  > li:not([role='separator']) {\n    display: flex;\n    flex-direction: column;\n    flex-basis: calc(100% / 2 - ((var(--goto-spacing-04) + 1px)));\n\n    > span {\n      display: flex;\n      align-items: center;\n\n      > chameleon-svg {\n        margin-right: var(--goto-spacing-02);\n      }\n    }\n\n    > * {\n      display: inline;\n    }\n  }\n}\n\n.callReportAiInsight__horizontal_separator {\n  border-bottom: 1px var(--goto-border-color-default) solid;\n  margin: var(--goto-spacing-04) 0;\n}\n\n.caption{ \n    align-self: center;\n}","import { TypographyColor } from '@getgo/chameleon-core/next';\nimport {\n  CalendarAddOutlinedIcon,\n  CalendarOutlinedIcon,\n  CashOutlinedIcon,\n  CheckmarkOutlinedIcon,\n  CloseOutlinedIcon,\n  MessageFeedbackOutlinedIcon,\n  TagOutlinedIcon\n} from '@getgo/chameleon-icons/react';\nimport { Typography } from '@getgo/chameleon-web-react-wrapper';\nimport { TFunction } from 'i18next';\nimport { ReactNode } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { CallReportMetricListItem } from '../CallReportMetricListItem/CallReportMetricListItem';\nimport styles from './CallReportAiInsight.module.css';\n\nexport interface CallReportAiInsightProps {\n  profanity?: boolean;\n  appointmentOpportunity?: boolean;\n  appointmentSet?: boolean;\n  salePitched?: boolean;\n  saleClosed?: boolean;\n  hasAppointmentsPermission?: boolean;\n  hasProfanityPermission?: boolean;\n  hasSalesPermission?: boolean;\n}\n\ntype MetricVariant = 'default' | 'profanity';\n\ninterface AiInsightMetric {\n  key: string;\n  title: string;\n  icon: ReactNode;\n  value?: boolean;\n  hasDivider?: boolean;\n  variant?: MetricVariant;\n}\n\nconst isDefined = (value: boolean | null | undefined): value is boolean  => value !== undefined && value !== null;\n\nconst getStatusIcon = (value?: boolean) => {\n  if (!isDefined(value)) {\n    return null;\n  }\n  if (value) {\n    return <CheckmarkOutlinedIcon size=\"24px\" color=\"var(--goto-icon-color-success)\" />;\n  }\n  return <CloseOutlinedIcon size=\"24px\" color=\"var(--goto-icon-color-danger)\" />;\n};\n\nconst metricVariants: Record<\n  MetricVariant,\n  { showStatusIcon: boolean; getText: (t: TFunction, value: boolean) => string; getColor: (value: boolean) => TypographyColor }\n> = {\n  default: {\n    showStatusIcon: true,\n    getText: (t, value) => (value ? t('Yes') : t('No')),\n    getColor: (value) => (value ? 'type-color-success' : 'type-color-default')\n  },\n  profanity: {\n    showStatusIcon: false,\n    getText: (t, value) => (value ? t('Detected') : t('Not detected')),\n    getColor: (value) => (value ? 'type-color-danger' : 'type-color-success')\n  }\n};\n\nexport const CallReportAiInsight = ({\n  profanity,\n  appointmentOpportunity,\n  appointmentSet,\n  salePitched,\n  saleClosed,\n  hasAppointmentsPermission = false,\n  hasProfanityPermission = false,\n  hasSalesPermission = false\n}: CallReportAiInsightProps) => {\n  const { t } = useTranslation();\n\n  if (!hasAppointmentsPermission && !hasProfanityPermission && !hasSalesPermission) {\n    return null;\n  }\n\n  const sections: { permission: boolean; metrics: AiInsightMetric[] }[] = [\n    {\n      permission: hasProfanityPermission,\n      metrics: [\n        {\n          key: 'profanity',\n          title: t('Profanity'),\n          icon: <MessageFeedbackOutlinedIcon size=\"24px\" />,\n          value: profanity,\n          variant: 'profanity'\n        }\n      ]\n    },\n    {\n      permission: hasAppointmentsPermission,\n      metrics: [\n        {\n          key: 'appointmentOpportunity',\n          title: t('Appointment opportunity'),\n          icon: <CalendarOutlinedIcon size=\"24px\" />,\n          value: appointmentOpportunity,\n          hasDivider: true\n        },\n        {\n          key: 'appointmentSet',\n          title: t('Appointment set'),\n          icon: <CalendarAddOutlinedIcon size=\"24px\" />,\n          value: appointmentSet\n        }\n      ]\n    },\n    {\n      permission: hasSalesPermission,\n      metrics: [\n        {\n          key: 'salePitched',\n          title: t('Sale(s) opportunity'),\n          icon: <TagOutlinedIcon size=\"24px\" />,\n          value: salePitched,\n          hasDivider: true\n        },\n        {\n          key: 'saleClosed',\n          title: t('Sale agreement'),\n          icon: <CashOutlinedIcon size=\"24px\" />,\n          value: saleClosed\n        }\n      ]\n    }\n  ];\n\n  const renderMetric = ({ key, title, icon, value, hasDivider, variant = 'default' }: AiInsightMetric) => {\n    const { showStatusIcon, getText, getColor } = metricVariants[variant];\n    const text = isDefined(value) ? getText(t, value) : '- -';\n    const color: TypographyColor = isDefined(value) ? getColor(value) : 'type-color-default';\n\n    return (\n      <CallReportMetricListItem key={key} title={title} icon={icon} hasDivider={hasDivider}>\n        {showStatusIcon && getStatusIcon(value)}\n        <Typography variant=\"body-large\" color={color}>\n          {text}\n        </Typography>\n      </CallReportMetricListItem>\n    );\n  };\n\n  return (\n    <div className={styles.callReportAiInsight}>\n      {sections\n        .filter(({ permission }) => permission)\n        .map(({ metrics }) => (\n          <div key={metrics[0].key} className={styles.callReportAiInsight__details__section}>\n            <ul className={styles.callReportAiInsight__list}>{metrics.map(renderMetric)}</ul>\n          </div>\n        ))}\n\n      <Typography className={styles.caption} variant=\"caption-medium\" color=\"type-color-disabled\">\n        {t('AI insights are detected from the Transcript')}\n      </Typography>\n    </div>\n  );\n};\n","import { DateTime } from 'luxon';\nimport { isEmpty as _isEmpty, first } from 'lodash';\nimport PropTypes from 'prop-types';\nimport { useEffect, useState, useMemo, useCallback } from 'react';\nimport { Trans, useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useNavigate, useLocation } from 'react-router';\nimport {\n  AlertOutlinedIcon,\n  GoPilotSparklesOutlinedIcon,\n  PhoneIncomingOutlinedIcon,\n  PhoneOutgoingOutlinedIcon\n} from '@getgo/chameleon-icons/react';\nimport { Dialog, Typography, Tabs, Tab, TabPanel } from '@getgo/chameleon-web-react-wrapper';\nimport clsx from 'clsx';\nimport { TooltipWrapper } from '@analytics-common-ui/layout';\nimport useMixpanel from '../../../hooks/useMixpanel.ts';\nimport { MIXPANEL_EVENT_NAME } from '../../../constants/mixpanel.ts';\nimport { fetchCallReport, fetchTranscripts } from '../../../services/common/call-report.service';\nimport useFetch from '../../../hooks/useFetch';\nimport {\n  selectCurrentOrganizationId,\n  selectHasContactCenter,\n  selectUserHasPermission,\n  selectCurrentLmiAccountKey,\n  selectFeatureFlag\n} from '../../../store/selectors/analytics';\nimport { setNetworkError } from '../../../services/common/handle-errors.service';\nimport { formatDuration } from '@analytics-common-ui/utils';\nimport styles from './CallReportModal.module.scss';\nimport CallReportSummary from './CallReportSummary/CallReportSummary';\nimport CallReportExportButton from './CallReportExport/CallReportExportButton';\nimport CallReportOverviewLinkButton from './CallReportOverviewLink/CallReportOverviewLinkButton';\nimport CallReportNotes from './CallReportNotes/CallReportNotes';\nimport CallReportDetail from './CallReportDetail/CallReportDetail';\nimport CallReportsNoDataAvailable from './CallReportsNoDataAvailable/CallReportsNoDataAvailable';\nimport CallReportModalPlayer from './CallReportModalPlayer/CallReportModalPlayer';\nimport { PERMISSIONS } from '../../../constants/permissions.ts';\nimport CallReportTranscript from './CallReportTranscript/CallReportTranscript';\nimport { HttpCodes } from '../../../constants/http-status';\nimport { ZINDEX } from '../../../constants/z-index';\nimport { CallReportUpgradePrompt } from './CallReportUpgradePrompt/CallReportUpgradePrompt';\nimport { recordingsStatuses } from '../../../constants/recordings';\nimport { sortRecordingsByCaller, toParticipantsAsText } from '../../../utils/recordings.util';\nimport LoadingBar from '../LoadingBar/LoadingBar';\nimport { CALL_REPORT_MODAL_TABS, getCallReportTabFromHash, getCallReportTabHashName } from '../../../constants/modals';\nimport { getProductAddOnBuyLink } from '../../../utils/product-exploration';\nimport { FEATURE_FLAGS } from '../../../utils/feature-flag';\nimport { CallReportAiInsight } from './CallReportAiInsight/CallReportAiInsight';\nimport { addNotification } from '../../../services/common/notifications.service';\n\nconst CallReportModal = ({\n  isOpen,\n  onClose,\n  legId,\n  conversationId,\n  startTime,\n  queueCallerId,\n  showTranscriptionUpgradePrompt = false,\n  initialOpeningTab = CALL_REPORT_MODAL_TABS.SUMMARY\n}) => {\n  const organizationId = useSelector(selectCurrentOrganizationId);\n  const dispatch = useDispatch();\n  const { t } = useTranslation();\n  const mixpanelTrack = useMixpanel();\n  const navigate = useNavigate();\n  const location = useLocation();\n  const [callReports, setCallReports] = useState({});\n  const [callRecordings, setCallRecordings] = useState([]);\n  const [currentRecording, setCurrentRecording] = useState({});\n  const [transcripts, setTranscripts] = useState({ items: [], notFound: false, hasPermission: false });\n  const [showNoDataInfo, setShowNoDataInfo] = useState(false);\n\n  const hasPermission = useSelector(selectUserHasPermission);\n  const hasFeatureFlag = useSelector(selectFeatureFlag);\n  const isGenericCallReport = !!conversationId;\n  const hasConversationReviewPermission =\n    hasPermission(PERMISSIONS.UNIFIED_ANALYTICS_CONVERSATION_REVIEW) || isGenericCallReport;\n  const hasContactCenter = useSelector(selectHasContactCenter);\n\n  const userId = useSelector(state => state.analytics.userId);\n  const currentLicense = useSelector(state => state.analytics.currentLicense);\n  const locale = useSelector(state => state.analytics.locale);\n  const currentOrganizationPermissions = useSelector(state => state.analytics.currentOrganizationPermissions);\n  const currentOrganization = useSelector(state => state.analytics.currentOrganization);\n\n  const hasAIInsightsProfanityPermission = hasPermission(PERMISSIONS.UNIFIED_ANALYTICS_AI_INSIGHTS_PROFANITY);\n  const hasAIInsightsAppointmentsPermission = hasPermission(PERMISSIONS.UNIFIED_ANALYTICS_AI_INSIGHTS_APPOINTMENTS);\n  const hasAIInsightsSalesPermission = hasPermission(PERMISSIONS.UNIFIED_ANALYTICS_AI_INSIGHTS_SALES);\n  const hasAIInsightsPermission =\n    hasAIInsightsProfanityPermission || hasAIInsightsAppointmentsPermission || hasAIInsightsSalesPermission;\n\n  const activeTab = getCallReportTabFromHash(location.hash, initialOpeningTab);\n\n  const handleTabClick = tabName => {\n    const currentSearch = location.search;\n    const newHash = getCallReportTabHashName(tabName);\n\n    if (currentSearch === '') {\n      return;\n    }\n\n    navigate(`${location.pathname}${currentSearch}${newHash}`, { replace: true });\n  };\n\n  const currentLmiAccountKey = useSelector(selectCurrentLmiAccountKey);\n\n  useEffect(() => {\n    if (isOpen) {\n      setCallReports({});\n      setCallRecordings([]);\n      setCurrentRecording({});\n    }\n  }, [isOpen]);\n\n  const getRecordingLabel = callRecording =>\n    callRecording?.participant\n      ? toParticipantsAsText(\n          callRecording.participant.number,\n          callRecording.participant?.name,\n          callRecording.participant?.type,\n          t\n        )\n      : '';\n\n  const [loading, requestError] = useFetch(\n    async controller => {\n      if (isOpen) {\n        const result = await fetchCallReport(\n          organizationId,\n          legId,\n          conversationId,\n          queueCallerId,\n          startTime,\n          controller\n        );\n        setCallReports(result);\n        if (result.recordings) {\n          const recordings = sortRecordingsByCaller(\n            result.recordings.map(x => ({ ...x, label: getRecordingLabel(x) }))\n          );\n          setCallRecordings(recordings);\n          setCurrentRecording(first(recordings) ?? {});\n        }\n\n        const eventData = {\n          Action: 'Opened Call Report Modal',\n          Component: 'CallReportModal'\n        };\n        mixpanelTrack(MIXPANEL_EVENT_NAME.CONVERSATION_DETAIL, eventData);\n      }\n    },\n    [isOpen]\n  );\n\n  const [loadingTranscripts, requestTranscriptsError] = useFetch(\n    async controller => {\n      const transcriptEnabled = currentRecording?.transcriptEnabled;\n      if (currentRecording?.id && transcriptEnabled) {\n        const result = await fetchTranscripts(organizationId, currentRecording.id, controller, conversationId);\n        setTranscripts({ items: result?.items || [], notFound: false, hasPermission: transcriptEnabled });\n      } else {\n        setTranscripts({\n          items: [],\n          notFound: false,\n          hasPermission: currentRecording?.transcriptEnabled\n        });\n      }\n    },\n    [currentRecording?.id]\n  );\n\n  const isCallUnderHour = DateTime.fromISO(startTime).plus({ hours: 1 }) > DateTime.now();\n\n  const isTranscriptVisible = () => {\n    if (isGenericCallReport && callReports) {\n      return true;\n    }\n    if ((currentRecording && !currentRecording.transcriptEnabled) || !transcripts.hasPermission) {\n      return false;\n    }\n\n    return (currentRecording && !_isEmpty(currentRecording.id)) || showNoDataInfo;\n  };\n\n  const displayInteractionDetailsContent = useMemo(\n    () => !showNoDataInfo && !_isEmpty(callReports.items),\n    [showNoDataInfo, callReports.items]\n  );\n\n  const unavailableHeaderTranscript = useMemo(() => {\n    if (transcripts.notFound) {\n      return isCallUnderHour ? t('No transcript yet') : t('No transcript data');\n    }\n\n    if (callReports?.recordingsStatus === recordingsStatuses.NO_ACCESS) {\n      return t('Access unavailable');\n    }\n    return _isEmpty(transcripts.items) ? t('No transcript data') : '';\n  }, [t, transcripts.notFound, transcripts.items, callReports.recordingsStatus, isCallUnderHour]);\n\n  const unavailableTextTranscript = useMemo(() => {\n    if (transcripts.notFound) {\n      return isCallUnderHour\n        ? t('Check back later for a completed transcript.')\n        : t('The transcript is not ready yet or the call is too old for a transcript.');\n    }\n\n    if (callReports?.recordingsStatus === recordingsStatuses.NO_ACCESS) {\n      return t('You don’t have the user permission required to access transcripts.');\n    }\n\n    if (_isEmpty(transcripts.items)) {\n      return t('The recording did not contain sufficient data for a transcript to be created.');\n    }\n\n    return '';\n  }, [t, transcripts.notFound, transcripts.items, callReports.recordingsStatus, isCallUnderHour]);\n\n  const getTooltipTranscript = () => {\n    if (showTranscriptionUpgradePrompt) {\n      return t('Upgrade your license to access this feature');\n    }\n\n    if (transcripts.notFound && isCallUnderHour) {\n      return t('A transcript is being processed');\n    }\n\n    if (callReports?.recordingsStatus === recordingsStatuses.NO_ACCESS) {\n      return t('You do not have permission to view transcripts');\n    }\n\n    return _isEmpty(transcripts.items) || transcripts.notFound ? t('A transcript could not be created') : '';\n  };\n\n  const getBuyAddOnLink = useCallback(\n    () => getProductAddOnBuyLink(currentOrganization.purchasableProducts, currentLmiAccountKey),\n    [currentOrganization.purchasableProducts, currentLmiAccountKey]\n  );\n\n  const transcriptContent = useMemo(() => {\n    const isLoading = loadingTranscripts || loading;\n    if (isLoading) {\n      return <LoadingBar />;\n    }\n    if (showTranscriptionUpgradePrompt) {\n      return (\n        <CallReportUpgradePrompt\n          upgradeMessage={t('Your GoTo license doesn’t include transcription.')}\n          buyAddOnLink={getBuyAddOnLink()}\n        />\n      );\n    }\n    if (\n      transcripts.notFound ||\n      _isEmpty(transcripts.items) ||\n      callReports?.recordingsStatus === recordingsStatuses.NO_ACCESS\n    ) {\n      return <CallReportsNoDataAvailable text={unavailableTextTranscript} header={unavailableHeaderTranscript} />;\n    }\n\n    return (\n      <div className={styles.callReportModal__containerMargin}>\n        <CallReportTranscript transcripts={transcripts.items} />\n      </div>\n    );\n  }, [\n    t,\n    loading,\n    showTranscriptionUpgradePrompt,\n    loadingTranscripts,\n    transcripts.items,\n    transcripts.notFound,\n    callReports.recordingsStatus,\n    unavailableTextTranscript,\n    unavailableHeaderTranscript,\n    getBuyAddOnLink\n  ]);\n\n  const tabs = [\n    {\n      id: CALL_REPORT_MODAL_TABS.SUMMARY,\n      title: t('Summary'),\n      label: 'Summary',\n      hasPermission: hasConversationReviewPermission || isGenericCallReport,\n      displayContent: !_isEmpty(callReports.summary),\n      unavailableHeader: t('No summary yet'),\n      unavailableText: t('Check back later for summary data.'),\n      tooltip: _isEmpty(callReports.summary) ? t('Check back later for summary data') : '',\n      content: <CallReportSummary {...callReports.summary} permissions={callReports.permissions} />,\n      isVisible: true,\n      isDisabled: showNoDataInfo || loading\n    },\n    {\n      id: CALL_REPORT_MODAL_TABS.DETAILS,\n      title: t('Details'),\n      label: 'Details',\n      hasPermission: true,\n      displayContent: displayInteractionDetailsContent,\n      unavailableHeader: isCallUnderHour ? t('No data yet') : t('No data'),\n      unavailableText: isCallUnderHour\n        ? t('Check back later for details.')\n        : t('There is no data available for this call.'),\n      tooltip: '',\n      content: <CallReportDetail callReports={callReports} />,\n      isVisible: true,\n      isDisabled: false\n    },\n    {\n      id: CALL_REPORT_MODAL_TABS.NOTES,\n      title: t('Notes', { context: 'Notes added to a call by an agent' }),\n      label: 'Notes',\n      hasPermission: hasPermission(PERMISSIONS.UNIFIED_ANALYTICS_CONVERSATION_REVIEW),\n      displayContent: !_isEmpty(callReports.note) || !_isEmpty(callReports.summary?.textSummary),\n      unavailableHeader: t('No notes available'),\n      unavailableText: t('Notes taken during calls appear here.'),\n      tooltip:\n        _isEmpty(callReports.note) && _isEmpty(callReports.summary?.textSummary)\n          ? t('There were no notes taken for this call')\n          : '',\n      content: (\n        <div className={styles.callReportModal__containerMargin}>\n          <CallReportNotes\n            note={callReports.note}\n            noteAuthor={callReports.noteAuthor}\n            summary={callReports.summary?.textSummary}\n            summaryAuthor={callReports.summary?.textSummaryAuthor}\n          />\n        </div>\n      ),\n      isVisible: hasContactCenter && !!callReports.summary && (callReports.summary.isQueueCall ?? true),\n      isDisabled: showNoDataInfo || loading\n    },\n    {\n      icon: (\n        <div\n          aria-label={t('AI transcription available')}\n          data-testid=\"go-pilot-tab-icon\"\n          className={styles.callReportModal__AITranscription}>\n          <GoPilotSparklesOutlinedIcon />\n        </div>\n      ),\n      id: CALL_REPORT_MODAL_TABS.TRANSCRIPT,\n      label: 'Transcript',\n      title: t('Transcript'),\n      hasPermission: transcripts.hasPermission || isGenericCallReport,\n      displayContent: (!transcripts.notFound && !_isEmpty(transcripts.items)) || isGenericCallReport,\n      unavailableHeader: unavailableHeaderTranscript,\n      unavailableText: unavailableTextTranscript,\n      tooltip: getTooltipTranscript(),\n      content: transcriptContent,\n      isVisible: isTranscriptVisible(),\n      isDisabled: showNoDataInfo\n    },\n    {\n      id: CALL_REPORT_MODAL_TABS.INSIGHTS,\n      title: t('AI insights'),\n      label: 'AI insights',\n      hasPermission: hasAIInsightsPermission && hasFeatureFlag(FEATURE_FLAGS.SAI_ANALYTICS_AUTOMOTIVE),\n      displayContent: !_isEmpty(callReports.aiInsights),\n      unavailableHeader: t('AI insights are on the way'),\n      unavailableText: t('Check back later for interaction insights.'),\n      tooltip: _isEmpty(callReports.aiInsights) ? t('Insights on the way') : '',\n      content: (\n        <CallReportAiInsight\n          {...callReports.aiInsights}\n          hasAppointmentsPermission={hasAIInsightsAppointmentsPermission}\n          hasProfanityPermission={hasAIInsightsProfanityPermission}\n          hasSalesPermission={hasAIInsightsSalesPermission}\n        />\n      ),\n      isVisible: hasAIInsightsPermission && hasFeatureFlag(FEATURE_FLAGS.SAI_ANALYTICS_AUTOMOTIVE),\n      isDisabled: showNoDataInfo || loading\n    }\n  ];\n\n  const onTabChange = event => {\n    const tab = tabs.find(el => el.id === event?.currentTarget?.activeid);\n\n    if (tab) {\n      const eventData = {\n        Action: 'Call Report Modal navigation',\n        Component: 'CallReportModal',\n        Tab: tab.label\n      };\n      handleTabClick(tab.id);\n      mixpanelTrack(MIXPANEL_EVENT_NAME.CONVERSATION_DETAIL, eventData);\n    }\n  };\n\n  const displayError = useCallback(\n    (requestError, message) => {\n      console.error(requestError);\n      setNetworkError({\n        dispatch,\n        requestError,\n        permissions: currentOrganizationPermissions,\n        currentOrganization,\n        userId,\n        currentLicense,\n        message,\n        locale\n      });\n    },\n    [currentLicense, currentOrganization, currentOrganizationPermissions, dispatch, locale, userId]\n  );\n\n  useEffect(() => {\n    if (!requestError) {\n      return;\n    }\n    if (requestError?.status === HttpCodes.FORBIDDEN) {\n      onClose();\n      navigate('/');\n      return;\n    }\n\n    if (requestError?.status === HttpCodes.NOT_FOUND) {\n      if (requestError?.response?.errorCode === 'NOT_READY') {\n        addNotification({\n          message: t('This call report is being prepared. Please check back in a few minutes.'),\n          variant: 'warning'\n        });\n        onClose();\n        return;\n      }\n      // ignore others not found errors\n    } else {\n      const conversationSpaceId = requestError.response?.additionalInfo?.conversationSpaceId;\n      displayError(\n        requestError,\n        t('An error occurred while fetching call reports for conversation space {{conversationSpace}}.', {\n          conversationSpace: conversationSpaceId ?? ''\n        })\n      );\n    }\n    setShowNoDataInfo(requestError);\n    // TODO: handle eslint errors properly\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [requestError, t, navigate]);\n\n  useEffect(() => {\n    if (requestTranscriptsError) {\n      if (![HttpCodes.FORBIDDEN, HttpCodes.NOT_FOUND].includes(requestTranscriptsError?.status)) {\n        displayError(requestTranscriptsError, t('An error occurred while fetching the transcript.'));\n      }\n      setTranscripts({\n        items: [],\n        notFound: requestTranscriptsError.status === HttpCodes.NOT_FOUND,\n        hasPermission: requestTranscriptsError.status !== HttpCodes.FORBIDDEN\n      });\n    }\n  }, [requestTranscriptsError, displayError, t]);\n\n  const callReportTitleAndExportButton = useMemo(\n    () => (\n      <div className={styles.callReportModal__titleContainer}>\n        {t('Interaction overview:')} {callReports.callerNumber}\n        <div>\n          <CallReportOverviewLinkButton />\n          <CallReportExportButton\n            conversationId={conversationId}\n            legId={legId}\n            startTime={startTime}\n            recording={currentRecording}\n            hasInteractionDetails={!!callReports.items}\n            disabled={!callReports.items && !currentRecording?.id}\n            modalTitle={callReports.callerNumber}\n            callerNumber={callReports.callerNumber}\n          />\n        </div>\n      </div>\n    ),\n    [t, callReports.callerNumber, callReports.items, conversationId, legId, startTime, currentRecording]\n  );\n\n  const getSummary = () => {\n    const { callerNumber } = callReports;\n    const callStartTime = DateTime.fromISO(callReports.callStarted).setLocale(locale).toFormat('tt, DDD');\n    const duration = formatDuration(callReports.durationMs);\n    const Icon = callReports.direction === 'OUTBOUND' ? PhoneOutgoingOutlinedIcon : PhoneIncomingOutlinedIcon;\n\n    return (\n      <Typography variant=\"caption-medium\" className={styles.callReportModal__summaryText}>\n        <Icon />\n        <Trans id=\"call-reports-summary\" t={t} context=\"summary of a call\">\n          {{ callerNumber }} started at <b>{{ callStartTime }}</b> Total duration: <b>{{ duration }}</b>\n        </Trans>\n      </Typography>\n    );\n  };\n\n  const getTabs = () => {\n    return (\n      <>\n        {tabs.map(x => {\n          const showTooltip = !_isEmpty(x.tooltip) && !showNoDataInfo;\n\n          return (\n            <>\n              <Tab\n                className={clsx({ [styles.callReportModal__tabHidden]: !x.isVisible })}\n                key={x.id}\n                id={x.id}\n                disabled={x.isDisabled}>\n                {!showTooltip && x.icon}\n                <TooltipWrapper\n                  title={x.tooltip}\n                  placement=\"top\"\n                  zIndex={ZINDEX.TOOLTIP}\n                  hidden={!showTooltip}\n                  maxWidth={200}>\n                  <span className={styles.callReportModal__tabTooltip}>\n                    {showTooltip && <AlertOutlinedIcon />}\n                    {x.title}\n                  </span>\n                </TooltipWrapper>\n              </Tab>\n              <TabPanel\n                className={clsx({ [styles.callReportModal__tabHidden]: !x.isVisible })}\n                key={`${x.id}-panel`}\n                id={`${x.id}-panel`}>\n                {x.hasPermission &&\n                  (x.displayContent ? (\n                    x.content\n                  ) : (\n                    <CallReportsNoDataAvailable text={x.unavailableText} header={x.unavailableHeader} />\n                  ))}\n              </TabPanel>\n            </>\n          );\n        })}\n      </>\n    );\n  };\n\n  return (\n    <Dialog\n      className={styles.callReportModal__dialog}\n      closable\n      open={isOpen}\n      onClosed={onClose}\n      title={callReportTitleAndExportButton}\n      closeButtonLabel={t('Close call reports modal')}\n      size=\"xlarge\"\n      data-testid=\"call-report-dialog\">\n      {isOpen && (\n        <>\n          {!showNoDataInfo && (\n            <div className={styles.callReportModal__summaryContainer}>\n              <div className={styles.callReportModal__summaryWrapper}>\n                <CallReportModalPlayer\n                  loading={loading}\n                  conversationId={conversationId}\n                  recordings={callRecordings}\n                  recordingsStatus={callReports?.recordingsStatus}\n                  currentRecording={currentRecording}\n                  onSetCurrentRecording={setCurrentRecording}\n                />\n                {!loading && getSummary()}\n              </div>\n            </div>\n          )}\n          {loading ? (\n            <LoadingBar />\n          ) : (\n            <Tabs onChange={onTabChange} activeid={activeTab} aria-label={t('Interaction overview navigation')}>\n              {getTabs()}\n            </Tabs>\n          )}\n        </>\n      )}\n    </Dialog>\n  );\n};\n\nCallReportModal.propTypes = {\n  /** Is the modal open */\n  isOpen: PropTypes.bool,\n  /** Function called when the modal is closed */\n  onClose: PropTypes.func.isRequired,\n  /** The selected call id */\n  legId: PropTypes.string,\n  /** The conversation id */\n  conversationId: PropTypes.string,\n  /** The call start time */\n  startTime: PropTypes.string,\n  /** The primary key of queue caller row */\n  queueCallerId: PropTypes.string,\n  /** Is the user entitled to see transcription */\n  showTranscriptionUpgradePrompt: PropTypes.bool,\n  /** Initial opening tab */\n  initialOpeningTab: PropTypes.string\n};\n\nexport default CallReportModal;\n",".deleteDashboardModal__title {\n  display: flex;\n  vertical-align: middle;\n\n  chameleon-svg {\n    margin-right: var(--goto-spacing-02);\n    margin-top: 3px;\n  }\n}\n","import PropTypes from 'prop-types';\nimport { unescape as _unescape } from 'lodash';\nimport { Button, Dialog, LinearProgress, Typography } from '@getgo/chameleon-web-react-wrapper';\nimport { useTranslation } from 'react-i18next';\nimport { useEffect, useState } from 'react';\nimport { TrashOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport styles from './DeleteDashboardModal.module.scss';\n\nconst DeleteDashboardModal = ({ isOpen, dashboard, onClose, onDelete }) => {\n  const { t } = useTranslation();\n  const [deleting, setDeleting] = useState(false);\n\n  const handleDelete = () => {\n    setDeleting(true);\n    onDelete();\n  };\n\n  useEffect(() => {\n    setDeleting(false);\n  }, [isOpen]);\n\n  const onCancel = () => {\n    onClose();\n  };\n\n  return (\n    <Dialog\n      closable\n      open={isOpen}\n      onClosed={onCancel}\n      closeButtonLabel={t('Close dashboard deletion modal')}\n      title={\n        <span className={styles.deleteDashboardModal__title}>\n          <TrashOutlinedIcon /> {t('Delete board')}\n        </span>\n      }\n      actions={\n        <>\n          <Button data-testid=\"delete-board\" disabled={deleting} onClick={handleDelete} variant=\"danger\">\n            {t('Delete')}\n          </Button>\n          <Button onClick={onCancel} variant=\"neutral\">\n            {t('Cancel')}\n          </Button>\n        </>\n      }>\n      {dashboard && (\n        <Typography>\n          {t('Are you sure you want to delete {{dashboardName}}?', { dashboardName: _unescape(dashboard.name) })}\n        </Typography>\n      )}\n      {deleting && <LinearProgress />}\n    </Dialog>\n  );\n};\n\nDeleteDashboardModal.propTypes = {\n  /** The dashboard to delete */\n  dashboard: PropTypes.shape({\n    name: PropTypes.string,\n    type: PropTypes.string,\n    isSystemDashboard: PropTypes.bool\n  }),\n  /** Is the modal open */\n  isOpen: PropTypes.bool,\n  /** On closing the modal */\n  onClose: PropTypes.func,\n  /** The delete action */\n  onDelete: PropTypes.func\n};\n\nexport default DeleteDashboardModal;\n","import PropTypes from 'prop-types';\nimport { Button, Dialog, LinearProgress, TextField } from '@getgo/chameleon-web-react-wrapper';\nimport { useTranslation } from 'react-i18next';\nimport { escape as _escape, unescape as _unescape, isEmpty as _isEmpty, size as _size, trim as _trim } from 'lodash';\nimport { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport useFetch from '../../../hooks/useFetch';\nimport { fetchDashboard, getBoardName } from '../../../services/common/dashboards.service';\nimport { selectCurrentOrganization, selectIsDashboardNameUnique } from '../../../store/selectors/analytics';\nimport { setNetworkError } from '../../../services/common/handle-errors.service';\nimport { MIXPANEL_EVENT_NAME } from '../../../constants/mixpanel.ts';\nimport useMixpanel from '../../../hooks/useMixpanel.ts';\n\nconst SaveDashboardModal = ({ dashboardToSave, isOpen, isRename, onClose, onSave, onRename, saveError }) => {\n  const { t } = useTranslation();\n  const dispatch = useDispatch();\n  const mixpanelTrack = useMixpanel();\n  const currentOrganization = useSelector(selectCurrentOrganization);\n  const { currentOrganizationPermissions, userId, currentLicense } = useSelector(state => state.analytics);\n\n  const [boardName, setBoardName] = useState('');\n  const [isBoardNameValid, setIsBoardNameValid] = useState(true);\n  const [isSaveSuccessful, setIsSaveSuccessful] = useState(true);\n  const [savingDashboard, setSavingDashboard] = useState(dashboardToSave);\n  const [saving, setSaving] = useState(false);\n  const { locale } = useSelector(state => state.analytics);\n  const isBoardUnique = useSelector(selectIsDashboardNameUnique);\n\n  useEffect(() => {\n    setIsSaveSuccessful(!saveError);\n    setSaving(false);\n  }, [saveError]);\n\n  const [isLoading, requestError] = useFetch(\n    async controller => {\n      if (isOpen && !dashboardToSave.filters) {\n        const requestedDashboard = await fetchDashboard(currentOrganization.id, dashboardToSave.id, controller);\n        setSavingDashboard(requestedDashboard);\n      } else {\n        setSavingDashboard(dashboardToSave);\n      }\n    },\n    [isOpen, dashboardToSave]\n  );\n\n  useEffect(() => {\n    if (requestError) {\n      console.error(requestError);\n      setNetworkError({\n        dispatch,\n        requestError,\n        permissions: currentOrganizationPermissions,\n        currentOrganization,\n        userId,\n        currentLicense,\n        message: t('An error occurred while fetching dashboard to save'),\n        locale\n      });\n      onClose();\n    }\n    // TODO: handle eslint errors properly\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [requestError]);\n\n  const getErrorMessage = () => {\n    if (_isEmpty(_trim(boardName))) {\n      return t('Board name is required');\n    }\n    if (_size(boardName) > 255) {\n      return t('Must not exceed 255 characters');\n    }\n    if (!isBoardUnique(boardName)) {\n      return t('A board with that name already exists.');\n    }\n    return null;\n  };\n\n  useEffect(() => {\n    setBoardName('');\n    setSaving(false);\n    setIsBoardNameValid(true);\n  }, [isOpen]);\n\n  useEffect(() => {\n    setIsBoardNameValid(getErrorMessage() === null);\n    // TODO: handle eslint errors properly\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [boardName]);\n\n  const onCancel = () => {\n    const eventData = {\n      Action: `Dashboard save canceled`,\n      Component: 'SaveDashboardModal'\n    };\n    mixpanelTrack(MIXPANEL_EVENT_NAME.DASHBOARD, eventData);\n    onClose();\n  };\n\n  const onBoardNameChange = e => {\n    setIsSaveSuccessful(true);\n    setBoardName(e.target.value);\n  };\n\n  const getSaveHelperText = () => {\n    if (!isSaveSuccessful) {\n      return t('An error occurred while creating the board, please try again!');\n    }\n    if (!isBoardNameValid) {\n      return getErrorMessage();\n    }\n    return t('The saved board will appear in the Board section on your left sidebar');\n  };\n\n  const getRenameHelperText = () => {\n    if (!isSaveSuccessful) {\n      return t('An error occurred while updating the board, please try again!');\n    }\n    if (!isBoardNameValid) {\n      return getErrorMessage();\n    }\n    return '';\n  };\n\n  const getHelperText = () => (isRename ? getRenameHelperText() : getSaveHelperText());\n\n  const handleSave = () => {\n    setSaving(true);\n    const asyncStarted = onSave(_escape(boardName), savingDashboard);\n    if (asyncStarted) {\n      setSaving(false);\n    }\n  };\n\n  const handleRename = () => {\n    setSaving(true);\n    onRename(_escape(boardName));\n  };\n\n  const getPlaceholder = () => {\n    if (!savingDashboard) {\n      return t('Board Name');\n    }\n\n    return getBoardName(savingDashboard, t);\n  };\n\n  return (\n    <Dialog\n      closable\n      open={isOpen}\n      onClosed={onCancel}\n      closeButtonLabel={isRename ? t('Close rename modal') : t('Close save modal')}\n      title={isRename ? t('Rename') : t('Save as new board')}\n      data-testid=\"save-dashboard-dialog\"\n      actions={\n        <>\n          {isRename ? (\n            <Button\n              disabled={_isEmpty(boardName) || !isBoardNameValid || saving}\n              onClick={handleRename}\n              variant=\"primary\">\n              {t('Rename')}\n            </Button>\n          ) : (\n            <Button\n              disabled={_isEmpty(boardName) || !isBoardNameValid || saving}\n              onClick={handleSave}\n              variant=\"primary\">\n              {t('Save')}\n            </Button>\n          )}\n          <Button onClick={onCancel} variant=\"neutral\">\n            {t('Cancel')}\n          </Button>\n        </>\n      }>\n      {isOpen &&\n        (isLoading ? (\n          <LinearProgress />\n        ) : (\n          <>\n            <TextField\n              error={!isBoardNameValid || saveError}\n              fullwidth\n              // TODO: handle eslint errors properly\n              // eslint-disable-next-line jsx-a11y/no-autofocus\n              autoFocus\n              helperText={getHelperText()}\n              onChange={onBoardNameChange}\n              placeholder={getPlaceholder()}\n              value={_unescape(isRename ? savingDashboard?.name : boardName)}>\n              {t('Board name')}\n            </TextField>\n            {saving && <LinearProgress />}\n          </>\n        ))}\n    </Dialog>\n  );\n};\n\nSaveDashboardModal.propTypes = {\n  /** The dashboard to save */\n  dashboardToSave: PropTypes.shape({\n    id: PropTypes.string,\n    name: PropTypes.string,\n    type: PropTypes.string,\n    filters: PropTypes.shape({}),\n    isSystemDashboard: PropTypes.bool\n  }),\n  /** Is the modal open */\n  isOpen: PropTypes.bool,\n  /** The dashboard to update */\n  isRename: PropTypes.bool,\n  /** On closing the modal */\n  onClose: PropTypes.func,\n  /** The save action */\n  onSave: PropTypes.func,\n  /** The rename action */\n  onRename: PropTypes.func,\n  /** The save error */\n  saveError: PropTypes.shape({\n    message: PropTypes.string\n  })\n};\n\nexport default SaveDashboardModal;\n",".selectDropdown {\n  display: flex;\n  flex-grow: 1;\n  border-radius: 4px;\n  background-color: var(--goto-surface-color-default);\n  border: 1px solid var(--goto-border-color-default);\n  padding: 1px var(--goto-spacing-02);\n  margin-top: 1px;\n  align-items: center;\n  position: relative;\n  height: 33px;\n\n  &_focused {\n    border: 2px solid var(--goto-interactive-color-primary-default);\n  }\n\n  > chameleon-icon-button {\n    margin-left: auto;\n  }\n}\n\n.selectDropdown__searchInput {\n  width: auto;\n  border: 0;\n  padding: var(--goto-spacing-01) 0;\n  line-height: 16px;\n\n  &:focus {\n    border: 0;\n    outline: none;\n  }\n}\n\n.selectDropdown__dropdown {\n  position: absolute;\n  background-color: var(--goto-background-color-default);\n  box-shadow: var(--goto-elevation-medium);\n  padding: var(--goto-spacing-02);\n  margin-top: var(--goto-spacing-01);\n  border-radius: 8px;\n  overflow-y: auto;\n  max-height: 220px;\n  display: none;\n  right: 0;\n  top: 40px;\n  z-index: var(--goto-z-index-dropdown);\n\n  &_visible {\n    display: block;\n  }\n}\n\n.selectDropdown__wrapper {\n  position: fixed;\n  inset: 0;\n  display: none;\n  z-index: var(--goto-z-index-dropdown);\n\n  &_visible {\n    display: block;\n  }\n}\n\n.selectDropdown__menuCheckbox {\n  vertical-align: text-top;\n  margin-left: var(--goto-spacing-01);\n}\n\n.selectDropdown__menuCheckboxWrapper {\n  padding: 0 var(--goto-spacing-03);\n  margin-bottom: var(--goto-spacing-01);\n}\n\n.selectDropdown__pill {\n  --goto-type-color-default: var(--goto-type-color-inverted);\n  --goto-interactive-color-neutral-default: var(--goto-interactive-color-primary-default);\n  --goto-interactive-color-secondary-hover: var(--goto-interactive-color-primary-default);\n  --goto-interactive-color-neutral-hover: var(--goto-interactive-color-primary-default);\n  --goto-icon-color-default: var(--goto-type-color-inverted);\n\n  margin: 2px 0 0 var(--goto-spacing-01);\n\n  chameleon-svg {\n    --goto-icon-color: var(--goto-type-color-inverted);\n  }\n}\n\n.selectDropdown__inputWrapper {\n  display: flex;\n  flex-wrap: wrap;\n}\n","import { isEmpty as _isEmpty } from 'lodash';\nimport { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport PropTypes from 'prop-types';\nimport { Chip, MenuSection, Menu, Checkbox, IconButton, Typography } from '@getgo/chameleon-web-react-wrapper';\nimport clsx from 'clsx';\nimport styles from './SelectDropdown.module.scss';\nimport { TooltipWrapper } from '@analytics-common-ui/layout';\nimport { ZINDEX } from '../../../constants/z-index';\n\nconst SelectDropdown = ({ title, trailingIcon, dropdownTitle, optionSelectionChange, options, disabled }) => {\n  const { t } = useTranslation();\n  const [isInputFocused, setIsInputFocused] = useState(false);\n\n  return (\n    <>\n      <div\n        tabIndex={0}\n        role=\"button\"\n        aria-label={t('Close')}\n        onKeyDown={() => setIsInputFocused(false)}\n        onClick={() => setIsInputFocused(false)}\n        className={clsx(styles.selectDropdown__wrapper, {\n          [styles.selectDropdown__wrapper_visible]: isInputFocused\n        })}\n      />\n      {title && <Typography variant=\"caption-medium-strong\">{title}</Typography>}\n      <div\n        className={clsx(styles.selectDropdown, {\n          [styles.selectDropdown_focused]: isInputFocused\n        })}>\n        <div className={styles.selectDropdown__inputWrapper}>\n          {options &&\n            options\n              .filter(el => el.selected)\n              .map(selectedValue => (\n                <Chip\n                  size=\"small\"\n                  closable={!disabled}\n                  key={selectedValue.id}\n                  onClose={() => optionSelectionChange(selectedValue.id)}\n                  className={styles.selectDropdown__pill}\n                  avatar={selectedValue.icon}>\n                  {selectedValue.label}\n                </Chip>\n              ))}\n        </div>\n        {trailingIcon && (\n          <IconButton\n            aria-label={dropdownTitle}\n            aria-controls=\"dropdown-menu\"\n            variant=\"primary\"\n            size=\"small\"\n            onClick={() => setIsInputFocused(true)}>\n            {trailingIcon}\n          </IconButton>\n        )}\n        <div\n          className={clsx(styles.selectDropdown__dropdown, {\n            [styles.selectDropdown__dropdown_visible]: isInputFocused\n          })}>\n          <Menu id=\"dropdown-menu\" aria-labelledby=\"dropdown-title\" disabled={disabled}>\n            {dropdownTitle && <MenuSection id=\"dropdown-title\">{dropdownTitle}</MenuSection>}\n            {options.map(el => (\n              <TooltipWrapper\n                hidden={!el.disabled || _isEmpty(el.disabledTooltip)}\n                title={el.disabledTooltip ?? ''}\n                key={el.id}\n                zIndex={ZINDEX.TOOLTIP}>\n                <div className={styles.selectDropdown__menuCheckboxWrapper}>\n                  <Checkbox\n                    id={`checkbox-${el.id}`}\n                    aria-label={el.label}\n                    onClick={() => optionSelectionChange(el.id)}\n                    className={styles.selectDropdown__menuCheckbox}\n                    disabled={el.disabled}\n                    checked={el.selected}>\n                    <span>{el.label}</span>\n                  </Checkbox>\n                </div>\n              </TooltipWrapper>\n            ))}\n          </Menu>\n        </div>\n      </div>\n    </>\n  );\n};\n\nSelectDropdown.propTypes = {\n  /* The title of the dropdown */\n  title: PropTypes.string,\n  /* The trailing icon of the selector */\n  trailingIcon: PropTypes.node,\n  /* The title of the dropdown */\n  dropdownTitle: PropTypes.string,\n  /* The function fired when selection change */\n  optionSelectionChange: PropTypes.func.isRequired,\n  /* The list of available options */\n  options: PropTypes.arrayOf(\n    PropTypes.shape({\n      id: PropTypes.string.isRequired,\n      disabled: PropTypes.bool.isRequired,\n      selected: PropTypes.bool.isRequired,\n      label: PropTypes.string.isRequired,\n      icon: PropTypes.node\n    })\n  ).isRequired,\n  /* Whether the dropdown is disabled */\n  disabled: PropTypes.bool\n};\n\nexport default SelectDropdown;\n","import environment from '../../environments';\n\nconst AVATAR_SIZES = {\n  SMALL: 'small',\n  MEDIUM: 'medium',\n  LARGE: 'large',\n  X_LARGE: 'xlarge'\n} as const;\nexport type AvatarSizes = (typeof AVATAR_SIZES)[keyof typeof AVATAR_SIZES];\n\nexport const getAvatarUrls = (userKey: string) => ({\n  urlSmall: `${environment.api.avatar.url}${userKey}_${AVATAR_SIZES.SMALL}.jpg`,\n  urlMedium: `${environment.api.avatar.url}${userKey}_${AVATAR_SIZES.MEDIUM}.jpg`,\n  urlLarge: `${environment.api.avatar.url}${userKey}_${AVATAR_SIZES.LARGE}.jpg`,\n  urlXLarge: `${environment.api.avatar.url}${userKey}_${AVATAR_SIZES.X_LARGE}.jpg`\n});\n",".usersSearch__usersListWrapper {\n  position: absolute;\n  box-shadow: var(--goto-elevation-medium);\n  padding: var(--goto-spacing-04) var(--goto-spacing-02);\n  margin-top: var(--goto-spacing-01);\n  border-radius: 4px;\n  display: none;\n  border: 1px solid var(--goto-border-color-default);\n  background-color: var(--goto-background-color-default);\n  z-index: var(--goto-z-index-dropdown);\n  width: 100%;\n\n  &_visible {\n    display: block;\n  }\n\n  &_maxUsersReached {\n    margin-top: calc(var(--goto-spacing-04) * -1);\n  }\n}\n\n.usersSearch__usersList {\n  overflow-y: auto;\n  max-height: 200px;\n}\n\n.usersSearch__searchInput {\n  width: auto;\n  flex-grow: 2;\n  border: 0;\n  padding: var(--goto-spacing-01) 0;\n  line-height: 16px;\n  min-height: 36px;\n  background-color: var(--goto-background-color-default);\n\n  &:focus {\n    border: 0;\n    outline: none;\n  }\n}\n\n.usersSearch__search {\n  display: flex;\n  flex-wrap: wrap;\n  border-radius: 4px;\n  background-color: var(--goto-surface-color-default);\n  border: 1px solid var(--goto-border-color-default);\n  padding: 1px var(--goto-spacing-02);\n  margin-top: var(--goto-spacing-02);\n  align-items: center;\n  position: relative;\n\n  &_focused {\n    border: 2px solid var(--goto-interactive-color-primary-default);\n  }\n\n  &_error {\n    border: 3px double var(--goto-border-color-danger) !important;\n    border-radius: var(--goto-radius-medium);\n  }\n\n  >* {\n    &:not(:last-child) {\n      margin-right: var(--goto-spacing-02);\n    }\n  }\n}\n\n.usersSearch__helperText {\n  color: var(--goto-type-color-secondary);\n  margin-top: var(--goto-spacing-02);\n\n  &_maxUsersReached {\n    color: var(--goto-border-color-danger);\n  }\n}\n\n.usersSearch__errorIcon {\n  position: absolute;\n  margin-top: 10px;\n  right: var(--goto-spacing-02);\n  top: 0;\n}\n\n.usersSearch__usersListRows {\n  display: flex;\n  gap: 12px;\n  flex-direction: column;\n\n  .usersSearch__usersListRow {\n    display: flex;\n    gap: 8px;\n    align-items: center;\n    padding: var(--goto-spacing-01);\n    border: 0;\n    text-align: left;\n\n    &_disabled {\n      chameleon-typography {\n        &::part(text) {\n          color: var(--goto-type-color-disabled) !important;\n        }\n      }\n\n      chameleon-avatar {\n        opacity: 0.5;\n      }\n\n      label,\n      chameleon-checkbox,\n      chameleon-avatar {\n        cursor: not-allowed;\n      }\n    }\n\n    .usersSearch__label {\n      display: flex;\n      align-items: center;\n      width: 100%;\n\n      >span {\n        margin-left: var(--goto-spacing-04);\n\n        chameleon-typography {\n          line-height: 12px;\n        }\n      }\n    }\n\n    &:not(&_disabled) {\n      &:hover {\n        cursor: pointer;\n        background-color: var(--goto-interactive-color-secondary-hover);\n      }\n    }\n\n    &_selected {\n      background-color: var(--goto-surface-color-brand-secondary);\n    }\n\n  }\n}\n\n.usersSearch__pill {\n  --goto-type-color-default: var(--goto-type-color-inverted);\n  --goto-interactive-color-neutral-default: var(--goto-interactive-color-primary-default);\n  --goto-interactive-color-secondary-hover: var(--goto-interactive-color-primary-default);\n  --goto-interactive-color-neutral-hover: var(--goto-interactive-color-primary-default);\n  --goto-icon-color-default: var(--goto-type-color-inverted);\n\n  margin-top: var(--goto-spacing-01);\n  align-self: flex-start;\n  height: 28px;\n\n  chameleon-svg {\n    --goto-icon-color: var(--goto-type-color-inverted);\n  }\n}\n\n.usersSearch__pillMore {\n  --goto-interactive-color-neutral-default: var(--goto-surface-color-tertiary);\n  --goto-interactive-color-secondary-hover: var(--goto-surface-color-tertiary);\n\n  height: 28px;\n}\n\n.usersSearch__email {\n  padding-top: var(--goto-spacing-01);\n}\n\n.usersSearch__avatarPill {\n  height: 28px;\n  width: 28px;\n}\n\n.usersSearch__searchWrapper {\n  position: absolute;\n  width: 100vh;\n  height: 100vh;\n  top: 0;\n  left: 0;\n  display: none;\n\n  &_visible {\n    display: block;\n  }\n}\n\n.usersSearch__tooltipValue {\n  padding: var(--goto-spacing-02);\n}","import PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { Avatar, Checkbox, Chip, Typography } from '@getgo/chameleon-web-react-wrapper';\nimport { SearchOutlinedIcon, AlertOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { useTranslation } from 'react-i18next';\nimport { useMemo, useState, useRef } from 'react';\nimport { findIndex as _findIndex, isEmpty as _isEmpty, last as _last } from 'lodash';\nimport { getAvatarUrls } from '../../../services/common/avatars.service';\nimport styles from './UsersSearch.module.scss';\nimport useMixpanel from '../../../hooks/useMixpanel.ts';\nimport { MIXPANEL_EVENT_NAME } from '../../../constants/mixpanel.ts';\nimport { TooltipWrapper } from '@analytics-common-ui/layout';\nimport { ZINDEX } from '../../../constants/z-index';\nimport LoadingBar from '../LoadingBar/LoadingBar';\nimport { Snackbar } from '../../../utils/snackbar';\n\nconst UsersSearch = ({\n  users,\n  onSearch,\n  loading,\n  handleSelectionChange,\n  defaultSelectedUsers = [],\n  selectedUsers,\n  disabled,\n  maxSelectedUsers\n}) => {\n  const searchInput = useRef(null);\n  const mixpanelTrack = useMixpanel();\n  const { t } = useTranslation();\n  const [isSearchVisible, setIsSearchVisible] = useState(false);\n  const [userSearch, setUserSearch] = useState('');\n\n  const inputKeyEventUp = event => {\n    setIsSearchVisible(true);\n    onSearch(event.target.value);\n  };\n\n  const onRemoveUser = userId => {\n    if (defaultSelectedUsers.find(el => el.userId === userId)) {\n      const eventData = {\n        Action: `Remove existing user`,\n        Component: 'UsersSearch'\n      };\n\n      mixpanelTrack(MIXPANEL_EVENT_NAME.SCHEDULER, eventData);\n\n      Snackbar.showStatus(\n        t('The deleted user will still be able to access the board, but will not receive any notifications.')\n      );\n    }\n  };\n\n  const inputKeyEventDown = event => {\n    const currentSelectedUsers = [...selectedUsers];\n    const key = event.keyCode || event.charCode;\n    const backspaceKeyCode = 8;\n    if (\n      _isEmpty(event.target.value) &&\n      (key === backspaceKeyCode || event.key === 'Backspace') &&\n      !_isEmpty(currentSelectedUsers)\n    ) {\n      const dashboardUser = users.find(el => el.userId === _last(currentSelectedUsers).userId);\n      if (dashboardUser) {\n        dashboardUser.selected = false;\n      }\n      onRemoveUser(_last(currentSelectedUsers).userId);\n      currentSelectedUsers.pop();\n      handleSelectionChange(currentSelectedUsers);\n    }\n  };\n\n  const onCloseChip = userId => {\n    const currentSelectedUsers = [...selectedUsers];\n    const chipIndex = _findIndex(currentSelectedUsers, ['userId', userId]);\n    if (chipIndex > -1) {\n      const scheduledUser = users.find(el => el.userId === userId);\n      if (scheduledUser) {\n        scheduledUser.selected = false;\n      }\n      onRemoveUser(userId);\n      currentSelectedUsers.splice(chipIndex, 1);\n      handleSelectionChange(currentSelectedUsers);\n    }\n  };\n\n  const toggleUser = user => {\n    const currentSelectedUsers = [...selectedUsers];\n    const userIndex = _findIndex(currentSelectedUsers, ['userId', user.userId]);\n    if (userIndex === -1) {\n      user.selected = true;\n      currentSelectedUsers.push(user);\n    } else {\n      user.selected = false;\n      currentSelectedUsers.splice(userIndex, 1);\n    }\n\n    handleSelectionChange(currentSelectedUsers);\n    setUserSearch('');\n    onSearch();\n    searchInput.current.focus();\n  };\n\n  const maxUsersReached = useMemo(() => selectedUsers.length >= maxSelectedUsers, [selectedUsers, maxSelectedUsers]);\n\n  const getUsersTooltip = tooltipUsers => {\n    const maxEntries = 5;\n    return tooltipUsers.slice(1, maxEntries + 1).map((user, i) => (\n      <div key={user.userId} className={styles.usersSearch__tooltipValue}>\n        <Typography tag=\"span\" variant=\"caption-medium\" color=\"type-color-inverted\">\n          {user.firstName} {user.lastName}\n        </Typography>\n        {i === maxEntries - 1 && tooltipUsers.length > maxEntries && (\n          <Typography tag=\"span\" variant=\"caption-medium\" color=\"type-color-inverted\">\n            &nbsp;({t('...more', { context: 'more entries in list' })})\n          </Typography>\n        )}\n      </div>\n    ));\n  };\n\n  return (\n    <>\n      <div\n        tabIndex={0}\n        role=\"button\"\n        aria-label={t('Close')}\n        onKeyDown={() => setIsSearchVisible(false)}\n        onClick={() => setIsSearchVisible(false)}\n        className={clsx(styles.usersSearch__searchWrapper, {\n          [styles.usersSearch__searchWrapper_visible]: isSearchVisible\n        })}\n      />\n      <Typography variant=\"caption-medium-strong\">{t('Invite users / emails within your organization')}</Typography>\n      <div\n        className={clsx(styles.usersSearch__search, {\n          [styles.usersSearch__search_focused]: isSearchVisible,\n          [styles.usersSearch__search_error]: maxUsersReached\n        })}>\n        <SearchOutlinedIcon />\n        {selectedUsers.slice(0, isSearchVisible ? selectedUsers.length : 1).map(selectedUser => (\n          <Chip\n            size=\"small\"\n            label={t('Remove {{firstName}} {{lastName}}', {\n              firstName: selectedUser.firstName,\n              lastName: selectedUser.lastName\n            })}\n            closable={!disabled}\n            key={selectedUser.userId}\n            onClose={() => onCloseChip(selectedUser.userId)}\n            onClick={() => setIsSearchVisible(true)}\n            className={styles.usersSearch__pill}\n            avatar={\n              <Avatar\n                label={t('Avatar for {{firstName}} {{lastName}}', {\n                  firstName: selectedUser.firstName,\n                  lastName: selectedUser.lastName\n                })}\n                className={styles.usersSearch__avatarPill}>\n                <img\n                  alt={`${selectedUser.firstName} ${selectedUser.lastName}`}\n                  title={`${selectedUser.firstName} ${selectedUser.lastName}`}\n                  src={getAvatarUrls(selectedUser.userKey).urlMedium}\n                />\n              </Avatar>\n            }>\n            {selectedUser.firstName} {selectedUser.lastName}\n          </Chip>\n        ))}\n        {!isSearchVisible && selectedUsers.length > 1 && (\n          <TooltipWrapper title={getUsersTooltip(selectedUsers)} zIndex={ZINDEX.TOOLTIP}>\n            <Chip onClick={() => setIsSearchVisible(true)} size=\"small\" className={styles.usersSearch__pillMore}>\n              {t('+{{numberOfUsers}} more', {\n                numberOfUsers: selectedUsers.length - 1,\n                count: selectedUsers.length - 1\n              })}\n            </Chip>\n          </TooltipWrapper>\n        )}\n        <input\n          placeholder={selectedUsers.length === 0 ? t('Search user or email') : ''}\n          ref={searchInput}\n          className={styles.usersSearch__searchInput}\n          onFocus={() => setIsSearchVisible(true)}\n          onKeyDown={inputKeyEventDown}\n          onKeyUp={inputKeyEventUp}\n          value={userSearch}\n          onChange={e => setUserSearch(e.target.value)}\n          disabled={disabled}\n        />\n        {maxUsersReached && (\n          <div className={styles.usersSearch__errorIcon}>\n            <TooltipWrapper\n              title={t('You can only invite up to {{maxSelectedUsers}} users.', { maxSelectedUsers: maxSelectedUsers })}\n              zIndex={ZINDEX.TOOLTIP}>\n              <AlertOutlinedIcon color=\"var(--goto-border-color-danger)\" />\n            </TooltipWrapper>\n          </div>\n        )}\n      </div>\n      {maxUsersReached && (\n        <Typography\n          variant=\"caption-medium\"\n          color=\"type-color-error\"\n          className={styles.usersSearch__helperText_maxUsersReached}>\n          {t('Inviting limit reached. Remove a user to add a new one.')}\n        </Typography>\n      )}\n      <div\n        className={clsx(styles.usersSearch__usersListWrapper, {\n          [styles.usersSearch__usersListWrapper_visible]: (!_isEmpty(users) && isSearchVisible) || loading,\n          [styles.usersSearch__usersListWrapper_maxUsersReached]: maxUsersReached\n        })}>\n        {loading && <LoadingBar />}\n        <div className={clsx(styles.usersSearch__usersList)}>\n          <div className={styles.usersSearch__usersListRows}>\n            {users &&\n              users.map(user => (\n                <div\n                  key={user.userId}\n                  className={clsx(styles.usersSearch__usersListRow, {\n                    [styles.usersSearch__usersListRow_disabled]: user.disabled,\n                    [styles.usersSearch__usersListRow_selected]: user.selected\n                  })}>\n                  <Checkbox\n                    aria-label={`${user.firstName} ${user.lastName}`}\n                    id={`checkbox-${user.userId}`}\n                    onClick={() => toggleUser(user)}\n                    checked={user.selected}\n                    disabled={user.disabled}\n                  />\n                  <label htmlFor={`checkbox-${user.userId}`} className={styles.usersSearch__label}>\n                    <Avatar\n                      label={t('Avatar for {{firstName}} {{lastName}}', {\n                        firstName: user.firstName,\n                        lastName: user.lastName\n                      })}>\n                      <img\n                        alt={`${user.firstName} ${user.lastName}`}\n                        title={`${user.firstName} ${user.lastName}`}\n                        src={getAvatarUrls(user.userKey).urlMedium}\n                      />\n                    </Avatar>\n                    <span>\n                      <Typography variant=\"caption-medium-strong\">\n                        {user.firstName} {user.lastName}\n                      </Typography>\n                      <Typography\n                        variant=\"caption-small\"\n                        color=\"type-color-secondary\"\n                        className={styles.usersSearch__email}>\n                        {user.email}\n                      </Typography>\n                    </span>\n                  </label>\n                </div>\n              ))}\n          </div>\n        </div>\n      </div>\n    </>\n  );\n};\n\n/* The user list to search */\nUsersSearch.propTypes = {\n  /* The search function */\n  onSearch: PropTypes.func.isRequired,\n  /* The users selection change function */\n  handleSelectionChange: PropTypes.func.isRequired,\n  /* The users list */\n  users: PropTypes.arrayOf(\n    PropTypes.shape({\n      userId: PropTypes.string,\n      firstName: PropTypes.string,\n      lastName: PropTypes.string,\n      email: PropTypes.string,\n      userKey: PropTypes.string,\n      selected: PropTypes.bool,\n      disabled: PropTypes.bool\n    })\n  ),\n  /* The selected users list */\n  selectedUsers: PropTypes.arrayOf(\n    PropTypes.shape({\n      userId: PropTypes.string,\n      firstName: PropTypes.string,\n      lastName: PropTypes.string,\n      email: PropTypes.string,\n      userKey: PropTypes.string,\n      selected: PropTypes.bool,\n      disabled: PropTypes.bool\n    })\n  ),\n  /* The default selected users list */\n  defaultSelectedUsers: PropTypes.arrayOf(\n    PropTypes.shape({\n      userId: PropTypes.string,\n      firstName: PropTypes.string,\n      lastName: PropTypes.string,\n      email: PropTypes.string,\n      userKey: PropTypes.string,\n      selected: PropTypes.bool,\n      disabled: PropTypes.bool\n    })\n  ),\n  /* Is the component loading */\n  loading: PropTypes.bool,\n  /* Whether the input is disabled */\n  disabled: PropTypes.bool,\n  /* Maximum number of users that can be selected */\n  maxSelectedUsers: PropTypes.number\n};\n\nexport default UsersSearch;\n",".readOnlyField__label {\n  margin-bottom: calc(var(--goto-spacing-01) * -1);\n}\n","import { TextField, Typography } from '@getgo/chameleon-web-react-wrapper';\nimport React from 'react';\nimport styles from './ReadOnlyField.module.scss';\n\ninterface ReadOnlyFieldProps {\n  label: string;\n  value: string;\n  trailingValue?: React.ReactNode;\n}\n\nconst ReadOnlyField = ({ label, value, trailingValue }: ReadOnlyFieldProps) => (\n  <TextField fullwidth readOnly value={value} trailingIcon={trailingValue}>\n    <Typography variant=\"button-small\" className={styles.readOnlyField__label}>\n      {label}\n    </Typography>\n  </TextField>\n);\n\nexport default ReadOnlyField;\n",".addScheduledDashboardModal {\n  position: relative;\n  overflow: hidden;\n  padding: var(--goto-spacing-05) var(--goto-spacing-01) var(--goto-spacing-08) var(--goto-spacing-01);\n}\n\nchameleon-select {\n  // TODO Remove the max-height when Chameleon has a fix for the Selects options overflow (from the screen).\n  // While that fix does not cover all the resolutions, it should cover most cases.\n  // https://logmein.slack.com/archives/CA5AW4WNN/p1662563191689879\n  --max-height: 300px;\n}\n\n.addScheduledDashboardModal__row {\n  margin-top: var(--goto-spacing-04);\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  align-items: flex-start;\n\n  &_alignEnd {\n    align-items: flex-end;\n  }\n\n  chameleon-select {\n    width: 100%;\n  }\n\n  & > :first-child {\n    flex-grow: 3;\n\n    &.addScheduledDashboardModal__notifyBy {\n      flex-grow: 0;\n    }\n  }\n\n  & > :nth-child(2) {\n    flex-grow: 1;\n    margin-left: var(--goto-spacing-02);\n  }\n\n  & > :nth-child(3) {\n    flex-grow: 15;\n\n    > chameleon-select {\n      width: 100%;\n    }\n  }\n}\n\n.addScheduledDashboardModal__dialog {\n  overflow-y: visible;\n\n  &::part(body) {\n    overflow: hidden visible;\n  }\n}\n\n.addScheduledDashboardModal__scheduledDateInput {\n  width: 100%;\n\n  &::part(control) {\n    font-size: var(--type-ramp-base-font-size);\n  }\n\n  &::part(root) {\n    margin-right: 0;\n    padding-right: var(--goto-spacing-04);\n  }\n}\n\n.addScheduledDashboardModal__alert {\n  margin-bottom: var(--goto-spacing-05);\n}\n\n.addScheduledDashboardModal__scheduledTimeContainer {\n  width: 100%;\n}\n\n.addScheduledDashboardModal__scheduledDateContainer {\n  width: 100%;\n  margin-right: var(--goto-spacing-02);\n}\n\n.addScheduledDashboardModal__repeatsContainer {\n  width: 100%;\n}\n\n.addScheduledDashboardModal__calendar_wrapper {\n  position: fixed;\n  inset: 0;\n  display: none;\n  z-index: var(--goto-z-index-overlay);\n\n  &_visible {\n    display: block;\n  }\n}\n\n.addScheduledDashboardModal__scheduledCalendarWrapper {\n  position: fixed;\n  z-index: var(--goto-z-index-overlay);\n  transform: translateY(-350px);\n  width: 350px;\n  border: 1px solid var(--goto-border-color-default);\n  box-shadow: var(--goto-elevation-medium);\n  border-radius: var(--goto-radius-small);\n}\n\n.addScheduledDashboardModal__boardName__label {\n  margin-bottom: calc(var(--goto-spacing-01) * -1);\n}\n\n.addScheduledDashboardModal__selectedDashboard {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n}\n\n.addScheduledDashboardModal__readOnlyDashboard {\n  margin-right: .75rem;\n}\n","import type { TypographyColor } from '@getgo/chameleon-core/next';\nimport {\n  AddOutlinedIcon,\n  AlertOutlinedIcon,\n  CalendarOutlinedIcon,\n  DownloadOutlinedIcon,\n  LinkOutlinedIcon,\n  VisibilityOnOutlinedIcon\n} from '@getgo/chameleon-icons/react';\nimport type { DialogComponent } from '@getgo/chameleon-web';\nimport { Alert, Button, Dialog, Option, Select, TextField, Typography } from '@getgo/chameleon-web-react-wrapper';\nimport clsx from 'clsx';\nimport { isEmpty as _isEmpty, keyBy, mapValues } from 'lodash';\nimport { DateTime } from 'luxon';\nimport { type ReactElement, useEffect, useMemo, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport dashboardConfigs, { dashboardTypes, getDashboardTypeString } from '../../../../configs/dashboard.config';\nimport { MIXPANEL_EVENT_NAME } from '../../../../constants/mixpanel';\nimport { FREQUENCIES_VALUES, NOTIFICATION_TYPE, SCHEDULED_DASHBOARD_DATES } from '../../../../constants/scheduler';\nimport { STATUS } from '../../../../constants/status';\nimport useFetch from '../../../../hooks/useFetch';\nimport useMixpanel from '../../../../hooks/useMixpanel';\nimport { getSlicedDashboardName } from '../../../../services/common/dashboards.service';\nimport { setNetworkError } from '../../../../services/common/handle-errors.service';\nimport {\n  fetchScheduledDashboardUsers,\n  saveScheduledDashboard,\n  ScheduledDashboardUser\n} from '../../../../services/common/scheduled-dashboards.service';\nimport { getTimeZone } from '../../../../services/common/users.service';\nimport {\n  selectCurrentDashboards,\n  selectCurrentOrganizationId,\n  selectFeatureFlag,\n  selectUserLocale\n} from '../../../../store/selectors/analytics';\nimport { DashboardType } from '../../../../types/dashboard/DashboardTypes';\nimport type { ScheduleDashboardType } from '../../../../types/dashboard/ScheduleTypes';\nimport type { RootState } from '../../../../types/store/RootState';\nimport { getSortedBoards, SORTING_ORDER, SORTING_TYPE } from '../../../../utils/dashboardSorting.util';\nimport { selectedDateOptionsReadable } from '../../../../utils/date-range-filter.util';\nimport { getDayHours } from '../../../../utils/date-time.util';\nimport { FEATURE_FLAGS } from '../../../../utils/feature-flag';\nimport { Snackbar } from '../../../../utils/snackbar';\nimport Calendar from '../../Calendar/Calendar';\nimport SelectDropdown from '../../SelectDropdown/SelectDropdown';\nimport TimeZoneWarningBanner from '../../TimeZoneWarningBanner/TimeZoneWarningBanner';\nimport UsersSearch from '../../UsersSearch/UsersSearch';\nimport ReadOnlyField from '../ReadOnlyField/ReadOnlyField';\nimport styles from './AddScheduledDashboardModal.module.scss';\n\ntype EditableScheduledDashboard = ScheduleDashboardType & {\n  isScheduleOwner: boolean;\n  dashboardId: string;\n  dateRange?: string | null;\n  fileTypes?: string[];\n  notificationType?: string;\n};\n\ntype FileTypeOption = {\n  id: string;\n  value: string;\n  label: string;\n  icon: ReactElement;\n  selected: boolean;\n  disabled: boolean;\n  alwaysIncluded: boolean;\n  disabledTooltip?: string;\n};\n\ntype EditableInputs = EditableScheduledDashboard & {\n  scheduledTime: string | null;\n  fileTypesOptions: FileTypeOption[];\n  scheduledDashboard: string | undefined;\n};\n\ninterface AddScheduledDashboardModalProps {\n  isOpen: boolean;\n  onClose: () => void;\n  editableScheduledDashboard?: EditableScheduledDashboard;\n  defaultSelectedDashboardId?: string;\n}\n\nconst MODAL_OFFSET_HEIGHT = 500;\nconst MAX_SELECTED_USERS = 50;\n\nconst AddScheduledDashboardModal = ({\n  isOpen,\n  onClose,\n  editableScheduledDashboard,\n  defaultSelectedDashboardId\n}: AddScheduledDashboardModalProps) => {\n  const ref = useRef<DialogComponent>(null);\n  const { t } = useTranslation();\n  const dispatch = useDispatch();\n  const organizationId = useSelector(selectCurrentOrganizationId);\n  const mixpanelTrack = useMixpanel();\n  const dashboards = useSelector(selectCurrentDashboards);\n  const userLocale = useSelector(selectUserLocale);\n  const dayHours = getDayHours();\n  const featureFlagSelector = useSelector(selectFeatureFlag);\n  const scheduleFeatureFlagEnabled = featureFlagSelector(FEATURE_FLAGS.ENABLE_SCHEDULE_REPORTING);\n  const { currentOrganization, userId, currentLicense, locale, currentOrganizationPermissions } = useSelector(\n    (state: RootState) => state.analytics\n  );\n  const isEditModal = !!editableScheduledDashboard;\n  const isReadOnly = isEditModal && !editableScheduledDashboard.canManageSchedule;\n  const [users, setUsers] = useState<ScheduledDashboardUser[]>([]);\n  const [search, setSearch] = useState('');\n  const [selectedUsers, setSelectedUsers] = useState<ScheduledDashboardUser[]>([]);\n  const [isCalendarVisible, setIsCalendarVisible] = useState(false);\n  const [modalLoading, setModalLoading] = useState(true);\n  const [scheduleDate, setScheduleDate] = useState(DateTime.now().toISO());\n  const [scheduledDashboard, setScheduledDashboard] = useState<string | undefined>(\n    dashboards.find(el => !el.isSystemDashboard && !el.isSharedDashboard)?.id\n  );\n  const maxUsersReached = useMemo(() => selectedUsers.length > MAX_SELECTED_USERS, [selectedUsers]);\n  const [scheduledTime, setScheduledTime] = useState<string | null>(null);\n  const [datesOverride, setDatesOverride] = useState(SCHEDULED_DASHBOARD_DATES.NO_OVERRIDE);\n  const [frequency, setFrequency] = useState(FREQUENCIES_VALUES.ONCE.value);\n  const [scheduledError, setScheduledError] = useState<string | null>(null);\n  const [notificationType, setNotificationType] = useState(NOTIFICATION_TYPE.EMAIL);\n  const [editableInputs, setEditableInputs] = useState<EditableInputs | null>(null);\n\n  const selectedDashboardObject = useMemo(\n    () => dashboards.find(d => d.id === scheduledDashboard),\n    [dashboards, scheduledDashboard]\n  );\n\n  const effectiveTimezone = useMemo(() => {\n    if (selectedDashboardObject?.timeZone) {\n      return selectedDashboardObject.timeZone;\n    }\n    return getTimeZone();\n  }, [selectedDashboardObject]);\n\n  const customDashboards = getSortedBoards(\n    dashboards.filter(el => !el.isSystemDashboard && !el.isSharedDashboard),\n    SORTING_TYPE.ALPHABETICAL,\n    SORTING_ORDER.ASCENDING\n  ) as DashboardType[];\n\n  const allowedCustomDashboards = customDashboards.filter(customBoard => {\n    const isScheduleEnabled = dashboardConfigs[customBoard.type]?.scheduleEnabled;\n\n    if ([dashboardTypes.CALL_REPORTS, dashboardTypes.MESSAGE_REPORTS].includes(customBoard.type)) {\n      return scheduleFeatureFlagEnabled && isScheduleEnabled;\n    }\n\n    return isScheduleEnabled;\n  });\n\n  const renderSelectedDashboardText = (dashboardId: string) => {\n    const dashboard = allowedCustomDashboards.find(dashboard => dashboard.id === dashboardId);\n    if (!dashboard) {\n      return;\n    }\n    return (\n      <div className={styles.addScheduledDashboardModal__selectedDashboard}>\n        {getSlicedDashboardName(dashboard)}\n        <Typography variant=\"caption-medium\" color=\"type-color-secondary\">\n          {}\n          {getDashboardTypeString(dashboard.type, t)}\n        </Typography>\n      </div>\n    );\n  };\n\n  const fileTypes = useMemo<FileTypeOption[]>(\n    () => [\n      {\n        id: '1',\n        value: 'LINK',\n        label: t('Board link'),\n        icon: <LinkOutlinedIcon />,\n        selected: true,\n        disabled: false,\n        alwaysIncluded: true\n      },\n      {\n        id: '2',\n        value: 'CSV',\n        label: t('CSV file'),\n        icon: <DownloadOutlinedIcon />,\n        selected: false,\n        disabled: false,\n        disabledTooltip: t('Selected board does not support that type.'),\n        alwaysIncluded: false\n      }\n    ],\n    [t]\n  );\n\n  const dateRangeOptionLabels = useMemo(\n    () =>\n      mapValues(\n        keyBy(\n          [...selectedDateOptionsReadable, { value: SCHEDULED_DASHBOARD_DATES.NO_OVERRIDE, label: 'Board dates' }],\n          'value'\n        ),\n        v => t(v.label)\n      ),\n    [t]\n  );\n\n  const scheduleTimeLabels = useMemo(() => mapValues(keyBy(dayHours, 'hour'), v => v.date), [dayHours]);\n  const [fileTypesOptions, setFileTypesOptions] = useState<FileTypeOption[]>(fileTypes);\n\n  const getDashboardType = () => {\n    const scheduledDashboardIsEditableSchedule =\n      isEditModal && editableScheduledDashboard?.dashboardId === scheduledDashboard;\n    const selectedDashboard = dashboards.find(d => d.id === scheduledDashboard);\n    return scheduledDashboardIsEditableSchedule ? editableScheduledDashboard?.dashboardType : selectedDashboard?.type;\n  };\n\n  useEffect(() => {\n    if (!modalLoading) {\n      const dashboardType = getDashboardType();\n      const exportEnabled = dashboardType && dashboardConfigs[dashboardType]?.export?.enabled;\n\n      const updatedOptions = fileTypesOptions.map(option => {\n        if (option.alwaysIncluded) {\n          return option;\n        }\n\n        return {\n          ...option,\n          disabled: !exportEnabled,\n          selected: !!(exportEnabled && option.selected)\n        };\n      });\n\n      setFileTypesOptions(updatedOptions);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [scheduledDashboard, modalLoading, dashboards]);\n\n  const hasBeenModified = useMemo(\n    () =>\n      editableInputs &&\n      (scheduledTime !== editableInputs.scheduledTime ||\n        fileTypesOptions !== editableInputs.fileTypesOptions ||\n        scheduledDashboard !== editableInputs.scheduledDashboard ||\n        selectedUsers !== editableInputs.recipients ||\n        frequency !== editableInputs.frequency ||\n        notificationType !== editableInputs.notificationType ||\n        datesOverride !== editableInputs.dateRange ||\n        scheduleDate !== editableInputs.startTime),\n    [\n      editableInputs,\n      scheduledTime,\n      scheduleDate,\n      fileTypesOptions,\n      scheduledDashboard,\n      selectedUsers,\n      frequency,\n      notificationType,\n      datesOverride\n    ]\n  );\n\n  const [loading, requestError] = useFetch(\n    async (controller: AbortController) => {\n      if (isOpen && !_isEmpty(search)) {\n        if (!organizationId) {\n          return;\n        }\n        const requestedUsers = await fetchScheduledDashboardUsers(\n          organizationId,\n          editableScheduledDashboard?.id,\n          search,\n          controller\n        );\n        setUsers(\n          requestedUsers.items.map((el: ScheduledDashboardUser) => ({\n            ...el,\n            selected: !!selectedUsers.find(selected => selected.userId === el.userId)\n          }))\n        );\n      } else if (_isEmpty(search)) {\n        setUsers([]);\n      }\n    },\n    [isOpen, search]\n  );\n\n  useEffect(() => {\n    if (requestError) {\n      console.error(requestError);\n      setNetworkError({\n        dispatch,\n        requestError,\n        permissions: currentOrganizationPermissions,\n        currentOrganization,\n        userId,\n        currentLicense,\n        message: t('An error occurred while fetching scheduled dashboard users'),\n        locale\n      });\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [currentLicense, dispatch, requestError, t]);\n\n  useEffect(() => {\n    if (isOpen) {\n      setModalLoading(true);\n\n      const defaultFilesTypesOptions = editableScheduledDashboard\n        ? fileTypesOptions.map(el => ({ ...el, selected: !!editableScheduledDashboard.fileTypes?.includes(el.value) }))\n        : fileTypes;\n\n      const defaultScheduledBoard = editableScheduledDashboard\n        ? editableScheduledDashboard.dashboardId\n        : defaultSelectedDashboardId || dashboards.find(el => !el.isSystemDashboard && !el.isSharedDashboard)?.id;\n\n      const defaultDashboard = dashboards.find(d => d.id === defaultScheduledBoard);\n      const defaultTimezone = defaultDashboard?.timeZone ? defaultDashboard.timeZone : getTimeZone();\n      const defaultScheduledTime = editableScheduledDashboard\n        ? dayHours.find(\n            el =>\n              el.unifiedHours ===\n              DateTime.fromISO(editableScheduledDashboard.startTime).setZone(defaultTimezone).toFormat('H')\n          )?.hour\n        : dayHours[0].hour;\n\n      setScheduledDashboard(defaultScheduledBoard);\n      setFileTypesOptions(defaultFilesTypesOptions);\n      setScheduledTime(defaultScheduledTime ?? null);\n\n      if (editableScheduledDashboard) {\n        setSelectedUsers(editableScheduledDashboard.recipients?.filter(el => el.status !== STATUS.DELETED) ?? []);\n        setScheduleDate(\n          DateTime.fromISO(editableScheduledDashboard.startTime).setZone(defaultTimezone).startOf('day').toISO() ??\n            scheduleDate\n        );\n        setFrequency(editableScheduledDashboard.frequency);\n        setNotificationType(editableScheduledDashboard.notificationType ?? NOTIFICATION_TYPE.EMAIL);\n        setDatesOverride(editableScheduledDashboard.dateRange ?? SCHEDULED_DASHBOARD_DATES.NO_OVERRIDE);\n\n        // Saving in the state the default values of an editable schedule to perform checks to disable or not\n        // the submit button.\n        setEditableInputs({\n          ...editableScheduledDashboard,\n          scheduledTime: defaultScheduledTime ?? null,\n          fileTypesOptions: defaultFilesTypesOptions,\n          scheduledDashboard: defaultScheduledBoard,\n          dateRange: editableScheduledDashboard.dateRange ?? SCHEDULED_DASHBOARD_DATES.NO_OVERRIDE\n        });\n      }\n      setModalLoading(false);\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [editableScheduledDashboard, defaultSelectedDashboardId, isOpen, dashboards, fileTypes, JSON.stringify(dayHours)]);\n\n  const fileTypesOptionSelectionChange = (id: string) => {\n    const currentOptions = [...fileTypesOptions];\n    const selectedOptionIndex = currentOptions.findIndex(el => el.id === id);\n    currentOptions[selectedOptionIndex].selected = !currentOptions[selectedOptionIndex].selected;\n    setFileTypesOptions(currentOptions);\n  };\n\n  const onSearch = (requestedSearch: string) => {\n    setSearch(requestedSearch);\n  };\n\n  const handleSelectionChange = (selected: ScheduledDashboardUser[]) => {\n    setSelectedUsers(selected);\n  };\n\n  const onScheduleDateChange = (date: DateTime) => {\n    setScheduleDate(date.toISO() ?? scheduleDate);\n    setIsCalendarVisible(false);\n  };\n\n  const isScheduleDisabled =\n    !scheduledTime ||\n    _isEmpty(scheduledDashboard) ||\n    _isEmpty(selectedUsers) ||\n    !fileTypesOptions.find(el => el.selected) ||\n    !scheduledDashboard ||\n    maxUsersReached;\n\n  // This code is here to allow a select options to be outside the Dialog\n  // It will reset the overflow on the content dialog only when the modal is not scrollable.\n  // TODO: remove/adapt when Chameleon-Web dialog allow to customize the .content overflow.\n  const calculateOverflow = () => {\n    const shadowRoot = ref.current?.shadowRoot;\n    if (!shadowRoot) {\n      return;\n    }\n    const modalContent = shadowRoot.querySelector('.content') as HTMLElement | null;\n    const modal = shadowRoot.querySelector('.goto-dialog') as HTMLElement | null;\n    if (!modalContent || !modal) {\n      return;\n    }\n    if (modal.offsetHeight > MODAL_OFFSET_HEIGHT) {\n      modalContent.style.overflow = 'visible';\n    } else {\n      modalContent.style.overflow = 'scroll';\n    }\n  };\n\n  const handleClose = () => {\n    const eventData = getEventData(isReadOnly ? 'Close view schedule' : 'Close schedule');\n    void mixpanelTrack(MIXPANEL_EVENT_NAME.SCHEDULER, eventData);\n    setSearch('');\n    setUsers([]);\n    setScheduledError(null);\n    setSelectedUsers([]);\n    setScheduledDashboard(undefined);\n    onClose();\n  };\n\n  useEffect(() => {\n    const handleResize = () => {\n      calculateOverflow();\n    };\n    if (isOpen) {\n      calculateOverflow();\n      window.addEventListener('resize', handleResize);\n    }\n    return () => {\n      window.removeEventListener('resize', handleResize);\n    };\n  }, [isOpen]);\n\n  const getEventData = (action: string) => {\n    const dashboardType = getDashboardType();\n    return {\n      Action: action,\n      Component: 'Scheduler',\n      FileTypes: fileTypesOptions.filter(el => el.selected && !el.disabled).map(el => el.value),\n      UsersLength: selectedUsers.length,\n      DashboardType: dashboardType,\n      Frequency: frequency,\n      NotificationType: notificationType,\n      DateRange: datesOverride\n    };\n  };\n\n  const onSave = async () => {\n    if (!organizationId) {\n      return;\n    }\n    const controller = new AbortController();\n    const scheduleId = editableScheduledDashboard?.id ?? null;\n\n    void mixpanelTrack(MIXPANEL_EVENT_NAME.SCHEDULER, getEventData(scheduleId ? 'Update schedule' : 'New schedule'));\n\n    try {\n      Snackbar.startProgress(scheduleId ? t('Updating scheduled board') : t('Scheduling dashboard'));\n\n      await saveScheduledDashboard(\n        organizationId,\n        scheduleId,\n        selectedUsers.map(el => ({ userKey: el.userKey })),\n        scheduledDashboard,\n        DateTime.fromISO(scheduleDate)\n          .setZone(effectiveTimezone, { keepLocalTime: true })\n          .startOf('day')\n          .plus({ hours: Number(scheduledTime) })\n          .toUTC()\n          .toISO(),\n        datesOverride === SCHEDULED_DASHBOARD_DATES.NO_OVERRIDE ? null : datesOverride,\n        frequency,\n        fileTypesOptions.filter(el => el.selected && !el.disabled).map(el => el.value),\n        notificationType,\n        controller,\n        effectiveTimezone\n      );\n\n      Snackbar.completeProgressWithStatus(\n        scheduleId ? t('Scheduled board has been updated.') : t('Board has been scheduled.')\n      );\n      handleClose();\n    } catch (e) {\n      console.error(e);\n      Snackbar.close();\n      setScheduledError(\n        scheduleId\n          ? t('An error occurred while updating the scheduled dashboard, please try again.')\n          : t('An error occurred while scheduling the board, please try again.')\n      );\n    }\n  };\n\n  return (\n    <Dialog\n      ref={ref}\n      open={isOpen}\n      closable\n      onClosing={handleClose}\n      closeButtonLabel={t('Close schedule modal')}\n      titleSlot={\n        isEditModal ? (\n          !isReadOnly ? (\n            t('Edit scheduled board')\n          ) : (\n            <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n              <VisibilityOnOutlinedIcon size=\"24px\" />\n              {t('View scheduled board')}\n            </div>\n          )\n        ) : (\n          t('Schedule board')\n        )\n      }\n      size=\"large\"\n      className={styles.addScheduledDashboardModal__dialog}\n      actions={\n        <>\n          {isEditModal ? (\n            !isReadOnly && (\n              <Button\n                onClick={() => void onSave()}\n                variant=\"primary\"\n                disabled={loading || !hasBeenModified || isScheduleDisabled}>\n                {t('Update')}\n              </Button>\n            )\n          ) : (\n            <Button onClick={() => void onSave()} variant=\"primary\" disabled={loading || isScheduleDisabled}>\n              {t('Schedule')}\n            </Button>\n          )}\n          <Button variant=\"neutral\" onClick={handleClose}>\n            {!isReadOnly ? t('Cancel') : t('Close')}\n          </Button>\n        </>\n      }>\n      {!requestError && (\n        <div className={styles.addScheduledDashboardModal}>\n          {scheduledError && (\n            <Alert icon={<AlertOutlinedIcon />} variant=\"danger\" className={styles.addScheduledDashboardModal__alert}>\n              {scheduledError}\n            </Alert>\n          )}\n          <TimeZoneWarningBanner\n            key={scheduledDashboard}\n            dashboardTimezone={selectedDashboardObject?.timeZone ?? null}\n            className={styles.addScheduledDashboardModal__alert}\n          />\n          {isOpen && (\n            <UsersSearch\n              loading={loading}\n              users={users}\n              selectedUsers={selectedUsers}\n              defaultSelectedUsers={\n                (editableScheduledDashboard?.recipients?.filter(el => el.status !== STATUS.DELETED) ??\n                  []) as unknown as never[]\n              }\n              onSearch={onSearch}\n              search={search}\n              handleSelectionChange={handleSelectionChange}\n              disabled={isReadOnly || (isEditModal && !editableScheduledDashboard.isScheduleOwner)}\n              maxSelectedUsers={MAX_SELECTED_USERS}\n            />\n          )}\n          <div className={styles.addScheduledDashboardModal__row}>\n            <div className={styles.addScheduledDashboardModal__notifyBy}>\n              <Select\n                size=\"medium\"\n                fullwidth\n                inDialog\n                value={notificationType}\n                onChange={e => setNotificationType(e.target.value)}\n                label={t('Notify by')}\n                disabled>\n                <Option value={NOTIFICATION_TYPE.EMAIL}>{t('Email', { context: 'Dropdown selectable option' })}</Option>\n              </Select>\n            </div>\n            <div>\n              <SelectDropdown\n                title={t('Generated report file type')}\n                trailingIcon={!isReadOnly ? <AddOutlinedIcon /> : undefined}\n                dropdownTitle={t('Select file type')}\n                options={fileTypesOptions}\n                optionSelectionChange={fileTypesOptionSelectionChange}\n                disabled={isReadOnly}\n              />\n            </div>\n          </div>\n          <div className={styles.addScheduledDashboardModal__row}>\n            <div data-testid=\"select-board\">\n              {!isEditModal || (!isReadOnly && editableScheduledDashboard.isScheduleOwner) ? (\n                <>\n                  <Select\n                    error={allowedCustomDashboards.length === 0}\n                    inDialog\n                    label={t('Board')}\n                    onChange={e => setScheduledDashboard(e.target.value)}\n                    value={scheduledDashboard}\n                    selectedValue={renderSelectedDashboardText(scheduledDashboard ?? '')}>\n                    {allowedCustomDashboards.map(dashboard => (\n                      <Option\n                        key={dashboard.id}\n                        value={dashboard.id}\n                        end={\n                          <Typography variant=\"caption-medium\" color=\"type-color-secondary\">\n                            {}\n                            {getDashboardTypeString(dashboard.type, t)}\n                          </Typography>\n                        }>\n                        {getSlicedDashboardName(dashboard)}\n                      </Option>\n                    ))}\n                  </Select>\n                  {allowedCustomDashboards.length === 0 && (\n                    <Typography\n                      variant=\"caption-medium\"\n                      color={'surface-color-danger-default' as unknown as TypographyColor}>\n                      {t(`There are no custom boards to schedule.`)}\n                    </Typography>\n                  )}\n                </>\n              ) : (\n                <ReadOnlyField\n                  label={t('Board')}\n                  value={editableScheduledDashboard.dashboardName}\n                  trailingValue={\n                    // TODO: remove css class when chameleon fixes the margin issue for trailing icons\n                    // PR link: https://github.com/jive/chameleon/pull/2424\n                    <Typography\n                      variant=\"caption-medium\"\n                      color=\"type-color-secondary\"\n                      noWrap={true}\n                      className={styles.addScheduledDashboardModal__readOnlyDashboard}>\n                      {getDashboardTypeString(editableScheduledDashboard.dashboardType, t)}\n                    </Typography>\n                  }\n                />\n              )}\n            </div>\n\n            <div data-testid=\"select-scheduled-dates\">\n              {!isReadOnly ? (\n                <Select\n                  inDialog\n                  label={t('Date range')}\n                  value={datesOverride}\n                  onChange={e => setDatesOverride(e.target.value)}>\n                  <Option value={SCHEDULED_DASHBOARD_DATES.NO_OVERRIDE}>{t('Board dates')}</Option>\n                  {selectedDateOptionsReadable.map(el => (\n                    <Option key={el.value} value={el.value}>\n                      {t(el.label)}\n                    </Option>\n                  ))}\n                </Select>\n              ) : (\n                <ReadOnlyField label={t('Date range')} value={dateRangeOptionLabels[datesOverride]} />\n              )}\n            </div>\n          </div>\n          <div\n            className={clsx(styles.addScheduledDashboardModal__row, styles.addScheduledDashboardModal__row_alignEnd)}>\n            <div\n              className={styles.addScheduledDashboardModal__scheduledTimeContainer}\n              data-testid=\"select-scheduled-time\">\n              {!isReadOnly ? (\n                <Select\n                  fullwidth\n                  inDialog\n                  label={t('Scheduled time')}\n                  value={scheduledTime ?? undefined}\n                  onChange={e => setScheduledTime(e.target.value)}>\n                  {dayHours.map(el => (\n                    <Option key={el.date} value={el.hour}>\n                      {el.date}\n                    </Option>\n                  ))}\n                </Select>\n              ) : (\n                <ReadOnlyField label={t('Scheduled time')} value={scheduleTimeLabels[scheduledTime ?? '']} />\n              )}\n            </div>\n            <div\n              className={styles.addScheduledDashboardModal__scheduledDateContainer}\n              data-testid=\"select-scheduled-date\">\n              <TextField\n                className={styles.addScheduledDashboardModal__scheduledDateInput}\n                value={DateTime.fromISO(scheduleDate)\n                  .setZone(effectiveTimezone)\n                  .setLocale(userLocale ?? 'en')\n                  .toLocaleString(DateTime.DATE_FULL)}\n                readOnly\n                onClick={!isReadOnly ? () => setIsCalendarVisible(true) : undefined}\n                trailingIcon={!isReadOnly ? <CalendarOutlinedIcon /> : undefined}>\n                {t('Scheduled date')}\n              </TextField>\n              {!isReadOnly && (\n                <div\n                  tabIndex={0}\n                  role=\"button\"\n                  aria-label={t('Close')}\n                  onKeyDown={() => setIsCalendarVisible(false)}\n                  onClick={() => setIsCalendarVisible(false)}\n                  className={clsx(styles.addScheduledDashboardModal__calendar_wrapper, {\n                    [styles.addScheduledDashboardModal__calendar_wrapper_visible]: isCalendarVisible\n                  })}\n                />\n              )}\n              {isCalendarVisible && (\n                <div className={styles.addScheduledDashboardModal__scheduledCalendarWrapper}>\n                  <Calendar\n                    date={scheduleDate}\n                    onDateChange={onScheduleDateChange}\n                    minimalDate={DateTime.now()\n                      .setZone(effectiveTimezone)\n                      .startOf('day')\n                      .setZone(DateTime.local().zoneName, { keepLocalTime: true })}\n                  />\n                </div>\n              )}\n            </div>\n            <div className={styles.addScheduledDashboardModal__repeatsContainer} data-testid=\"select-repeats\">\n              {!isReadOnly ? (\n                <Select\n                  fullwidth\n                  inDialog\n                  label={t('Repeats')}\n                  value={frequency}\n                  onChange={e => setFrequency(e.target.value)}>\n                  {Object.values(FREQUENCIES_VALUES).map(defaultFrequency => (\n                    <Option key={defaultFrequency.value} value={defaultFrequency.value}>\n                      {t(defaultFrequency.selector)}\n                    </Option>\n                  ))}\n                </Select>\n              ) : (\n                <ReadOnlyField\n                  label={t('Repeats')}\n                  value={t(FREQUENCIES_VALUES[frequency as keyof typeof FREQUENCIES_VALUES].selector)}\n                />\n              )}\n            </div>\n          </div>\n        </div>\n      )}\n    </Dialog>\n  );\n};\n\nexport default AddScheduledDashboardModal;\n",".deleteScheduledDashboardModal__title {\n  display: flex;\n  vertical-align: middle;\n\n  chameleon-svg {\n    margin-right: var(--goto-spacing-02);\n    margin-top: 3px;\n  }\n}\n","import { TrashOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { Button, Dialog, LinearProgress, Typography } from '@getgo/chameleon-web-react-wrapper';\nimport { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector } from 'react-redux';\nimport { MIXPANEL_EVENT_NAME } from '../../../../constants/mixpanel';\nimport useMixpanel from '../../../../hooks/useMixpanel';\nimport { getPageId } from '../../../../services/common/dashboards.service';\nimport { deleteScheduledDashboard } from '../../../../services/common/scheduled-dashboards.service';\nimport { selectCurrentOrganizationId } from '../../../../store/selectors/analytics';\nimport { Snackbar } from '../../../../utils/snackbar';\nimport styles from './DeleteScheduledDashboardModal.module.scss';\n\ninterface DeleteScheduledDashboardModalProps {\n  isOpen?: boolean;\n  scheduledDashboard?: { id: string; dashboardType: string };\n  onClose?: () => void;\n}\n\nconst DeleteScheduledDashboardModal = ({ isOpen, scheduledDashboard, onClose }: DeleteScheduledDashboardModalProps) => {\n  const { t } = useTranslation();\n  const [deleting, setDeleting] = useState(false);\n  const mixpanelTrack = useMixpanel();\n  const organizationId = useSelector(selectCurrentOrganizationId);\n\n  const handleDelete = async () => {\n    if (!scheduledDashboard) {\n      return;\n    }\n    if (!organizationId) {\n      return;\n    }\n    const controller = new AbortController();\n    setDeleting(true);\n\n    const eventData = {\n      Action: `Scheduled Dashboard delete`,\n      Component: 'Delete Scheduled Dashboard Modal',\n      Dashboard: getPageId(scheduledDashboard.dashboardType),\n      DashboardType: scheduledDashboard.dashboardType\n    };\n\n    void mixpanelTrack(MIXPANEL_EVENT_NAME.SCHEDULER, eventData);\n\n    let message: string;\n    try {\n      Snackbar.startProgress(\n        t('Deleting scheduled {{dashboardName}} board', {\n          dashboardName: getPageId(scheduledDashboard.dashboardType)\n        })\n      );\n\n      await deleteScheduledDashboard(organizationId, scheduledDashboard.id, controller);\n      Snackbar.completeProgress();\n\n      message = t('Scheduled board has been deleted.');\n\n      onClose?.();\n    } catch (error) {\n      console.error(error);\n      Snackbar.close();\n      message = t('An error occurred while deleting the scheduled board.');\n    }\n    Snackbar.showStatus(message);\n  };\n\n  useEffect(() => {\n    setDeleting(false);\n  }, [isOpen]);\n\n  const onCancel = () => {\n    onClose?.();\n  };\n\n  return (\n    <Dialog\n      closable\n      open={!!isOpen}\n      onClosed={onCancel}\n      closeButtonLabel={t('Close delete schedule modal')}\n      titleSlot={\n        <span className={styles.deleteScheduledDashboardModal__title}>\n          <TrashOutlinedIcon /> {t('Delete scheduled board')}\n        </span>\n      }\n      actions={\n        <>\n          <Button disabled={deleting} onClick={() => void handleDelete()} variant=\"danger\">\n            {t('Delete')}\n          </Button>\n          <Button onClick={onCancel} variant=\"neutral\">\n            {t('Cancel')}\n          </Button>\n        </>\n      }>\n      {scheduledDashboard && (\n        <Typography>\n          {t('Are you sure you want to delete the scheduled {{dashboardName}} board?', {\n            dashboardName: getPageId(scheduledDashboard.dashboardType)\n          })}\n        </Typography>\n      )}\n      {deleting && <LinearProgress />}\n    </Dialog>\n  );\n};\n\nexport default DeleteScheduledDashboardModal;\n","import { Button, Dialog, Typography } from '@getgo/chameleon-web-react-wrapper';\nimport { useTranslation } from 'react-i18next';\n\ninterface MaxSchedulesReachedModalProps {\n  isOpen: boolean;\n  onClose: () => void;\n}\n\nconst MaxSchedulesReachedModal = ({ isOpen, onClose }: MaxSchedulesReachedModalProps) => {\n  const { t } = useTranslation();\n\n  return (\n    <Dialog\n      open={isOpen}\n      closable\n      onClosing={onClose}\n      closeButtonLabel={t('Close max schedules modal')}\n      titleSlot={t('Max schedules reached')}\n      size=\"small\"\n      actions={\n        <Button variant=\"primary\" onClick={onClose}>\n          {t('Close')}\n        </Button>\n      }\n    >\n      <div>\n        <Typography variant=\"body-medium\">\n          {t(\"You can't add any more schedules. Remove an existing schedule before adding a new one.\")}\n        </Typography>\n      </div>\n    </Dialog>\n  );\n};\n\nexport default MaxSchedulesReachedModal;\n","import { escape as _escape, includes as _includes, isEmpty as _isEmpty } from 'lodash';\nimport React, { useEffect, useState } from 'react';\nimport { MIXPANEL_EVENT_NAME } from '../../constants/mixpanel';\nimport useShareDashboard from '../../hooks/dashboards/useShareDashboard';\nimport useFetch from '../../hooks/useFetch';\nimport useMixpanel from '../../hooks/useMixpanel';\nimport { fetchDashboardPermissions, fetchUsers } from '../../services/common/dashboards.service';\nimport { DashboardType } from '../../types/dashboard/DashboardTypes';\nimport { Organizations } from '../../types/store/StateTypes';\n\ninterface DashboardUser {\n  id?: string;\n  userId?: string;\n  userKey: string;\n  isShared?: boolean;\n  isOwner?: boolean;\n  selected?: boolean;\n  disabled?: boolean;\n  [key: string]: unknown;\n}\n\nexport interface WithShareDashboardModalChildrenProps {\n  isLoading: boolean;\n  requestError: unknown;\n  areUsersLoading: boolean;\n  usersRequestError: unknown;\n  dashboardUsers: DashboardUser[];\n  selectedUsers: DashboardUser[];\n  currentDashboardUsers: DashboardUser[];\n  isSharing: boolean;\n  pageIndex: number;\n  maxPagesIndex: number;\n  rowsPerPage: number;\n  total: number;\n  onUnShare: (users: DashboardUser[]) => void;\n  handleSelectionChange: (selected: DashboardUser[]) => void;\n  onShare: () => void;\n  onPageChange: (page: number) => void;\n  onRowsPerPage: (value: number) => void;\n  onSearch: (search: string) => void;\n}\n\ninterface WithShareDashboardModalProps {\n  isOpen: boolean;\n  onClose: () => void;\n  onCloseManageModal: () => void;\n  dashboard: DashboardType;\n  currentOrganization: Organizations;\n  children: (props: WithShareDashboardModalChildrenProps) => React.ReactNode;\n}\n\nconst WithShareDashboardModal = ({\n  isOpen,\n  onClose,\n  onCloseManageModal,\n  dashboard,\n  currentOrganization,\n  children\n}: WithShareDashboardModalProps) => {\n  const { share, unShare } = useShareDashboard();\n  const [pageIndex, setPageIndex] = useState(0);\n  const [maxPagesIndex, setMaxPagesIndex] = useState(0);\n  const [search, setSearch] = useState('');\n  const [rowsPerPage, setRowsPerPage] = useState(25);\n  const [total, setTotal] = useState(0);\n  const [dashboardUsers, setDashboardUsers] = useState<DashboardUser[]>([]);\n  const [selectedUsers, setSelectedUsers] = useState<DashboardUser[]>([]);\n  const [currentDashboardUsers, setCurrentDashboardUsers] = useState<DashboardUser[]>([]);\n  const [isSharing, setIsSharing] = useState(false);\n  const mixpanelTrack = useMixpanel();\n\n  const onPageChange = (requestedPage: number) => {\n    setPageIndex(requestedPage);\n  };\n\n  const onSearch = (requestedSearch: string) => {\n    setSearch(requestedSearch);\n    setPageIndex(0);\n  };\n\n  const onRowsPerPage = (value: number) => {\n    setRowsPerPage(value);\n    setPageIndex(0);\n  };\n\n  const onShare = () => {\n    setIsSharing(true);\n\n    const eventData = {\n      Action: `Dashboard share`,\n      Component: 'Share',\n      Dashboard: dashboard.type,\n      SharedUsersNumber: selectedUsers.length\n    };\n\n    void mixpanelTrack(MIXPANEL_EVENT_NAME.DASHBOARD, eventData);\n\n    void share({\n      dashboard,\n      users: selectedUsers.map(el => ({\n        userKey: el.userKey\n      })),\n      onFinish: onClose\n    });\n  };\n\n  const handleSelectionChange = (selected: DashboardUser[]) => {\n    setSelectedUsers(selected);\n  };\n\n  const onCloseUnShare = ({ removedUsers }: { removedUsers: DashboardUser[] }) => {\n    if (!_isEmpty(removedUsers)) {\n      const removedDashboardUsers = [...dashboardUsers];\n      removedUsers.forEach(removedUser => {\n        const user = currentDashboardUsers.find(el => el.id === removedUser.id);\n        if (user) {\n          const modifiedUser = removedDashboardUsers.find(el => el.userKey === user.userKey);\n          if (modifiedUser) {\n            modifiedUser.disabled = false;\n          }\n        }\n      });\n      setDashboardUsers(removedDashboardUsers);\n\n      const removedUsersIds = removedUsers.map(el => el.id);\n      const currentDashboardPermissions = [...currentDashboardUsers];\n      const filteredDashboardUsers = currentDashboardPermissions.filter(el => !_includes(removedUsersIds, el.id));\n      setCurrentDashboardUsers(filteredDashboardUsers);\n      onCloseManageModal();\n    }\n  };\n\n  const onUnShare = (unsharedUsers: DashboardUser[]) => {\n    const eventData = {\n      Action: `Dashboard unshare`,\n      Component: 'Share',\n      Dashboard: dashboard.type,\n      UnSharedUsersNumber: selectedUsers.length\n    };\n\n    void mixpanelTrack(MIXPANEL_EVENT_NAME.DASHBOARD, eventData);\n\n    void unShare({\n      dashboard,\n      users: unsharedUsers.map(el => ({ userKey: el.userKey })),\n      onFinish: ({ removedUsers }) => onCloseUnShare({ removedUsers: removedUsers ?? [] })\n    });\n  };\n\n  useEffect(() => {\n    setPageIndex(0);\n    setSearch('');\n    setDashboardUsers([]);\n    setSelectedUsers([]);\n    setIsSharing(false);\n  }, [isOpen]);\n\n  const [isLoading, requestError] = useFetch(\n    async controller => {\n      if (isOpen) {\n        const permissions = await fetchDashboardPermissions(currentOrganization.id, dashboard.id, controller);\n        setCurrentDashboardUsers((permissions as { items: DashboardUser[] }).items);\n      }\n    },\n    [isOpen]\n  );\n\n  const [areUsersLoading, usersRequestError] = useFetch(\n    async controller => {\n      if (isOpen && !isLoading) {\n        const users = (await fetchUsers(\n          currentOrganization.id,\n          dashboard.id,\n          pageIndex,\n          rowsPerPage,\n          _escape(search),\n          controller\n        )) as { items: DashboardUser[]; matchesTotal: number; total: number };\n        setDashboardUsers(\n          users?.items.map((el: DashboardUser) => ({\n            ...el,\n            selected: !!selectedUsers.find(selected => selected.userId === el.userId),\n            disabled: el.isShared || el.isOwner\n          })) || []\n        );\n        if (search) {\n          setMaxPagesIndex(Math.floor(users.matchesTotal / rowsPerPage) || 0);\n          setTotal(users.matchesTotal || 0);\n        } else {\n          setMaxPagesIndex(Math.floor(users.total / rowsPerPage) || 0);\n          setTotal(users.total || 0);\n        }\n      }\n    },\n    [isOpen, isLoading, pageIndex, rowsPerPage, search]\n  );\n\n  return children({\n    isLoading,\n    requestError,\n    areUsersLoading,\n    usersRequestError,\n    dashboardUsers,\n    selectedUsers,\n    currentDashboardUsers,\n    isSharing,\n    pageIndex,\n    maxPagesIndex,\n    rowsPerPage,\n    total,\n    onUnShare,\n    handleSelectionChange,\n    onShare,\n    onPageChange,\n    onRowsPerPage,\n    onSearch\n  });\n};\n\nexport default WithShareDashboardModal;\n",".dashboardShareUser__search {\n  display: flex;\n  flex-wrap: wrap;\n  border-radius: var(--goto-radius-small);\n  background-color: var(--goto-surface-color-default);\n  border: 1px solid var(--goto-border-color-default);\n  padding: 1px var(--goto-spacing-02);\n  margin-top: var(--goto-spacing-02);\n  gap: 0 var(--goto-spacing-02);\n  align-items: center;\n\n  &_focused {\n    border: 2px solid var(--goto-interactive-color-primary-default);\n  }\n\n  chameleon-svg {\n    --goto-icon-color: var(--goto-avatar-color-secondary);\n  }\n}\n\n.dashboardShareUser__searchInput__wrapper {\n  display: flex;\n  flex-flow: row nowrap;\n  flex-grow: 2;\n  align-items: center;\n  gap: 0 var(--goto-spacing-02);\n}\n\n.dashboardShareUser__pill {\n  align-self: flex-start;\n  margin-top: var(--goto-spacing-01);\n\n  --goto-type-color-default: var(--goto-type-color-inverted);\n  --goto-interactive-color-neutral-default: var(--goto-interactive-color-primary-default);\n  --goto-interactive-color-secondary-hover: var(--goto-interactive-color-primary-default);\n  --goto-interactive-color-neutral-hover: var(--goto-interactive-color-primary-default);\n  --goto-icon-color-default: var(--goto-type-color-inverted);\n}\n\n.dashboardShareUser__searchInput {\n  width: auto;\n  flex-grow: 2;\n  border: 0;\n  padding: var(--goto-spacing-01) 0;\n  line-height: 32px;\n  background-color: var(--goto-background-color-default);\n\n  &:focus {\n    border: 0;\n    outline: none;\n  }\n}\n\n.dashboardShareUser__wrapper {\n  height: 30vh;\n  overflow: auto;\n  margin-top: var(--goto-spacing-02);\n\n  .dashboardShareUser__table {\n    width: 100%;\n    outline: none;\n\n    .dashboardShareUser__tableRow {\n      align-items: center;\n      cursor: pointer;\n      height: var(--goto-spacing-10);\n\n\n      .dashboardShareUser__name {\n        display: flex;\n        align-items: center;\n\n        > span {\n          padding-left: var(--goto-spacing-02);\n        }\n      }\n\n      .dashboardShareUser__tableColAvatar {\n        width: 280px;\n      }\n    }\n  }\n}\n\n.dashboardShareUser__nothingToDisplay {\n  padding-top: 25px;\n}\n","import { useState } from 'react';\nimport { isEmpty as _isEmpty, times as _times, findIndex as _findIndex, last as _last } from 'lodash';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport clsx from 'clsx';\nimport {\n  Avatar,\n  Chip,\n  DataTable,\n  DataTableBody,\n  DataTableCell,\n  DataTableHeaderCell,\n  DataTableHeader,\n  DataTableRow,\n  Skeleton\n} from '@getgo/chameleon-web-react-wrapper';\nimport { SearchOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport styles from './DashboardShareUser.module.scss';\nimport Pagination from '../Pagination/Pagination';\nimport NothingToDisplay from '../NothingToDisplay/NothingToDisplay';\nimport { getAvatarUrls } from '../../../services/common/avatars.service';\n\n// TODO merge with the UserSearch component\nconst DashboardShareUser = ({\n  dashboardUsers,\n  selectedUsers,\n  areUsersLoading,\n  onSearch,\n  pageIndex,\n  maxPagesIndex,\n  handleSelectionChange,\n  ...paginationProps\n}) => {\n  const { t } = useTranslation();\n  const [isInputFocused, setIsInputFocused] = useState(false);\n\n  const inputKeyEventUp = event => {\n    onSearch(event.target.value);\n  };\n\n  const inputKeyEventDown = event => {\n    const currentSelectedUsers = [...selectedUsers];\n    const key = event.keyCode || event.charCode;\n    const backspaceKeyCode = 8;\n    if (\n      _isEmpty(event.target.value) &&\n      (key === backspaceKeyCode || event.key === 'Backspace') &&\n      !_isEmpty(currentSelectedUsers)\n    ) {\n      const dashboardUser = dashboardUsers.find(el => el.userId === _last(currentSelectedUsers).userId);\n      if (dashboardUser) {\n        dashboardUser.selected = false;\n      }\n      currentSelectedUsers.pop();\n      handleSelectionChange(currentSelectedUsers);\n    }\n  };\n\n  const onCloseChip = userId => {\n    const currentSelectedUsers = [...selectedUsers];\n    const chipIndex = _findIndex(currentSelectedUsers, ['userId', userId]);\n    if (chipIndex > -1) {\n      const dashboardUser = dashboardUsers.find(el => el.userId === userId);\n      if (dashboardUser) {\n        dashboardUser.selected = false;\n      }\n      currentSelectedUsers.splice(chipIndex, 1);\n      handleSelectionChange(currentSelectedUsers);\n    }\n  };\n\n  const toggleUser = user => {\n    const currentSelectedUsers = [...selectedUsers];\n    const userIndex = _findIndex(currentSelectedUsers, ['userId', user.userId]);\n    if (userIndex === -1) {\n      user.selected = true;\n      currentSelectedUsers.push(user);\n    } else {\n      user.selected = false;\n      currentSelectedUsers.splice(userIndex, 1);\n    }\n\n    handleSelectionChange(currentSelectedUsers);\n  };\n\n  const buildSkeleton = i => (\n    <DataTableRow key={i}>\n      <DataTableCell>\n        <Skeleton variant=\"rectangle\" />\n      </DataTableCell>\n      <DataTableCell>\n        <Skeleton variant=\"rectangle\" />\n      </DataTableCell>\n    </DataTableRow>\n  );\n\n  return (\n    <>\n      <div\n        className={clsx(styles.dashboardShareUser__search, {\n          [styles.dashboardShareUser__search_focused]: isInputFocused\n        })}>\n        {selectedUsers.map(selectedUser => (\n          <Chip\n            label={t('Remove {{firstName}} {{lastName}}', {\n              firstName: selectedUser.firstName,\n              lastName: selectedUser.lastName\n            })}\n            closable\n            key={selectedUser.userId}\n            onClose={() => onCloseChip(selectedUser.userId)}\n            className={styles.dashboardShareUser__pill}\n            avatar={\n              <Avatar\n                label={t('Avatar for {{firstName}} {{lastName}}', {\n                  firstName: selectedUser.firstName,\n                  lastName: selectedUser.lastName\n                })}>\n                <img\n                  alt={`${selectedUser.firstName} ${selectedUser.lastName}`}\n                  title={`${selectedUser.firstName} ${selectedUser.lastName}`}\n                  src={getAvatarUrls(selectedUser.userKey).urlMedium}\n                />\n              </Avatar>\n            }>\n            {selectedUser.firstName} {selectedUser.lastName}\n          </Chip>\n        ))}\n        <div className={styles.dashboardShareUser__searchInput__wrapper}>\n          <SearchOutlinedIcon />\n          <input\n            placeholder={t('Search users')}\n            className={styles.dashboardShareUser__searchInput}\n            onBlur={() => setIsInputFocused(false)}\n            onFocus={() => setIsInputFocused(true)}\n            onKeyDown={inputKeyEventDown}\n            onKeyUp={inputKeyEventUp}\n          />\n        </div>\n      </div>\n      <div className={styles.dashboardShareUser__wrapper}>\n        <DataTable className={styles.dashboardShareUser__table}>\n          <DataTableHeader>\n            <DataTableRow condensed>\n              <DataTableHeaderCell disabled>{t('Name')}</DataTableHeaderCell>\n              <DataTableHeaderCell disabled>{t('Email')}</DataTableHeaderCell>\n            </DataTableRow>\n          </DataTableHeader>\n          <DataTableBody>\n            {areUsersLoading\n              ? _times(3, buildSkeleton)\n              : dashboardUsers.map(user => (\n                  <DataTableRow\n                    className={styles.dashboardShareUser__tableRow}\n                    key={user.userId}\n                    onClick={() => !user.disabled && toggleUser(user)}\n                    disabled={user.disabled}\n                    selected={user.selected}>\n                    <DataTableCell className={styles.dashboardShareUser__tableColAvatar}>\n                      <div className={styles.dashboardShareUser__name}>\n                        <Avatar\n                          label={t('Avatar for {{firstName}} {{lastName}}', {\n                            firstName: user.firstName,\n                            lastName: user.lastName\n                          })}>\n                          <img\n                            alt={`${user.firstName} ${user.lastName}`}\n                            title={`${user.firstName} ${user.lastName}`}\n                            src={getAvatarUrls(user.userKey).urlMedium}\n                          />\n                        </Avatar>\n                        <span>\n                          {user.firstName} {user.lastName}\n                        </span>\n                      </div>\n                    </DataTableCell>\n                    <DataTableCell>{user.email}</DataTableCell>\n                  </DataTableRow>\n                ))}\n          </DataTableBody>\n        </DataTable>\n\n        {!areUsersLoading && _isEmpty(dashboardUsers) && (\n          <NothingToDisplay title={t('No users to display')} className={styles.dashboardShareUser__nothingToDisplay} />\n        )}\n\n        {!areUsersLoading && !_isEmpty(dashboardUsers) && (\n          <Pagination\n            previousPage={!areUsersLoading && pageIndex > 0}\n            nextPage={!areUsersLoading && pageIndex + 1 < maxPagesIndex}\n            pageIndex={pageIndex}\n            {...paginationProps}\n          />\n        )}\n      </div>\n    </>\n  );\n};\n\nDashboardShareUser.propTypes = {\n  /* The user list for the dashboard */\n  dashboardUsers: PropTypes.arrayOf(\n    PropTypes.shape({\n      userId: PropTypes.string,\n      firstName: PropTypes.string,\n      lastName: PropTypes.string,\n      email: PropTypes.string,\n      userKey: PropTypes.string,\n      selected: PropTypes.bool\n    })\n  ),\n  /* Selected users */\n  selectedUsers: PropTypes.arrayOf(\n    PropTypes.shape({\n      userId: PropTypes.string,\n      firstName: PropTypes.string,\n      lastName: PropTypes.string,\n      email: PropTypes.string,\n      userKey: PropTypes.string\n    })\n  ).isRequired,\n  /* The search function */\n  onSearch: PropTypes.func,\n  /* Component is loading */\n  areUsersLoading: PropTypes.bool.isRequired,\n  /* The current page number */\n  pageIndex: PropTypes.number.isRequired,\n  /* The total pages number */\n  maxPagesIndex: PropTypes.number.isRequired,\n  /* The function when selection changes */\n  handleSelectionChange: PropTypes.func.isRequired\n};\n\nexport default DashboardShareUser;\n",".shareDashboardModal__sharedWith {\n  border-top: 1px var(--goto-border-color-default) solid;\n  margin-top: var(--goto-spacing-02);\n  padding-top: var(--goto-spacing-02);\n}\n\n.shareDashboardModal__sharedWithHeader {\n  display: flex;\n  justify-content: space-between;\n}\n\n.shareDashboardModal__sharedWithList {\n  padding: var(--goto-spacing-02) var(--goto-spacing-02) var(--goto-spacing-04);\n}\n\n.shareDashboardModal__shareLink {\n  position: relative;\n  border-top: 1px var(--goto-border-color-default) solid;\n}\n\n.shareDashboardModal__inputShareLink {\n  &::part(control) {\n    text-overflow: ellipsis;\n    overflow: hidden;\n    max-width: 100%;\n    white-space: nowrap;\n  }\n\n  &::part(root) {\n    padding-right: var(--goto-spacing-04);\n  }\n\n  &_focused {\n    --goto-border: var(--goto-border-color-success);\n  }\n}\n\n.shareDashboardModal__manageButton {\n  &::part(control) {\n    padding: 0 var(--goto-spacing-02);\n    height: auto;\n    background-color: transparent;\n\n    &:hover {\n      background-color: var(--goto-interactive-color-secondary-hover);\n      color: var(--goto-interactive-color-brand-hover);\n    }\n\n    &[aria-disabled] {\n      background-color: transparent !important;\n    }\n  }\n}\n\n.shareDashboardModal__linkFilledIconColor {\n  margin-top: 3px;\n\n  chameleon-svg {\n    --goto-icon-color: var(--goto-type-color-secondary);\n  }\n}\n",".manageShareDashboard__list {\n  display: flex;\n  list-style-type: none;\n  flex-direction: column;\n  justify-content: flex-start;\n  margin: 0;\n  padding: 0;\n}\n\n.manageShareDashboard__listElement {\n  display: flex;\n\n  > label {\n    display: flex;\n    align-items: center;\n  }\n\n  &:not(:first-child) {\n    margin-top: var(--goto-spacing-03);\n  }\n}\n\n.manageShareDashboard__listAvatar {\n  margin: 0 var(--goto-spacing-03);\n}\n\n.manageShareDashboard__listEmail{\n color: var(--goto-type-color-secondary-inverted);\n  margin: 0 var(--goto-spacing-03);\n}\n","import { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Dialog, Button, Checkbox, Avatar, Typography, LinearProgress } from '@getgo/chameleon-web-react-wrapper';\nimport { useTranslation } from 'react-i18next';\nimport { isEmpty as _isEmpty, findIndex as _findIndex } from 'lodash';\nimport styles from './ManageShareDashboardModal.module.scss';\nimport { getAvatarUrls } from '../../../services/common/avatars.service';\n\nconst ManageShareDashboardModal = ({ isOpen, onUnShare, currentDashboardUsers, onCloseManageShareModal }) => {\n  const { t } = useTranslation();\n  const [selectedUsers, setSelectedUsers] = useState([]);\n  const [isLoading, setIsLoading] = useState(false);\n\n  useEffect(() => {\n    if (isOpen) {\n      setSelectedUsers(currentDashboardUsers.map(el => ({ ...el, selected: true })));\n      setIsLoading(false);\n    }\n  }, [isOpen, currentDashboardUsers]);\n\n  const toggleSelectedUser = user => {\n    const currentSelectedUsers = [...selectedUsers];\n    const userIndex = _findIndex(currentSelectedUsers, ['id', user.id]);\n    currentSelectedUsers[userIndex].selected = !currentSelectedUsers[userIndex].selected;\n    setSelectedUsers(currentSelectedUsers);\n  };\n\n  const handleApply = () => {\n    setIsLoading(true);\n    onUnShare(selectedUsers.filter(el => !el.selected));\n  };\n\n  return (\n    <Dialog\n      size=\"large\"\n      closable\n      open={isOpen}\n      onClosed={onCloseManageShareModal}\n      closeButtonLabel={t('Close share modal')}\n      title={t('Select team members')}\n      actions={\n        <>\n          <Button\n            disabled={isLoading || _isEmpty(selectedUsers.find(el => !el.selected))}\n            onClick={handleApply}\n            variant=\"primary\">\n            {t('Apply')}\n          </Button>\n          <Button onClick={onCloseManageShareModal} variant=\"neutral\">\n            {t('Cancel')}\n          </Button>\n        </>\n      }>\n      {isOpen && (\n        <>\n          <ul className={styles.manageShareDashboard__list}>\n            {selectedUsers.map(el => (\n              <li key={el.id} className={styles.manageShareDashboard__listElement}>\n                <Checkbox\n                  aria-label={`${el.firstName} ${el.lastName}`}\n                  id={`checkbox-${el.id}`}\n                  checked={el.selected}\n                  onClick={() => toggleSelectedUser(el)}\n                />\n                <label htmlFor={`checkbox-${el.id}`}>\n                  <Avatar\n                    label={t('Avatar for {{firstName}} {{lastName}}', {\n                      firstName: el.firstName,\n                      lastName: el.lastName\n                    })}\n                    size=\"small\"\n                    key={el.id}\n                    className={styles.manageShareDashboard__listAvatar}>\n                    <img\n                      alt={`${el.firstName} ${el.lastName}`}\n                      title={`${el.firstName} ${el.lastName}`}\n                      src={getAvatarUrls(el.userKey).urlMedium}\n                    />\n                  </Avatar>\n                  <Typography variant=\"caption-medium-strong\">\n                    {el.firstName} {el.lastName}\n                  </Typography>\n                  <div className={styles.manageShareDashboard__listEmail}>|</div>\n                  <Typography variant=\"caption-medium\" color=\"type-color-secondary\">\n                    {el.email}\n                  </Typography>\n                </label>\n              </li>\n            ))}\n          </ul>\n          {isLoading && <LinearProgress />}\n        </>\n      )}\n    </Dialog>\n  );\n};\n\nManageShareDashboardModal.propTypes = {\n  /* The user list for the dashboard */\n  currentDashboardUsers: PropTypes.arrayOf(\n    PropTypes.shape({\n      id: PropTypes.string,\n      firstName: PropTypes.string,\n      lastName: PropTypes.string,\n      email: PropTypes.string,\n      userKey: PropTypes.string,\n      selected: PropTypes.bool\n    })\n  ),\n  /** Is the modal open */\n  isOpen: PropTypes.bool,\n  /** The un share function */\n  onUnShare: PropTypes.func,\n  /* The close modal function */\n  onCloseManageShareModal: PropTypes.func\n};\n\nexport default ManageShareDashboardModal;\n","import { LinkOutlinedIcon, CheckboxCheckIcon, CopyOutlinedIcon } from '@getgo/chameleon-icons/react';\nimport { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { isEmpty as _isEmpty } from 'lodash';\nimport { useSelector } from 'react-redux';\nimport {\n  Button,\n  Dialog,\n  LinearProgress,\n  AvatarGroup,\n  Avatar,\n  Typography,\n  TextField\n} from '@getgo/chameleon-web-react-wrapper';\nimport { useTranslation } from 'react-i18next';\nimport clsx from 'clsx';\nimport WithShareDashboardModal from '../../../hocs/withShareDashboardModal/withShareDashboardModal';\nimport DashboardShareUser from '../DashboardShareUser/DashboardShareUser';\nimport styles from './ShareDashboardModal.module.scss';\nimport { getAvatarUrls } from '../../../services/common/avatars.service';\nimport ManageShareDashboardModal from '../ManageShareDashboardModal/ManageShareDashboardModal';\nimport { getOrganizationPath } from '../../../services/common/organization.service';\nimport { getSlicedDashboardName } from '../../../services/common/dashboards.service';\n\nconst ShareDashboardModal = ({ dashboard, isOpen, onClose }) => {\n  const { t } = useTranslation();\n  const { currentOrganization } = useSelector(state => state.analytics);\n  const [hasDashboardLinkFocus, setHasDashboardLinkFocus] = useState(false);\n  const { basename, domain } = useSelector(state => state.analytics);\n  const [isManageModalOpen, setIsManageModalOpen] = useState(false);\n\n  const onCopyLinkInputFocus = async e => {\n    await navigator.clipboard.writeText(e.target.value);\n    setHasDashboardLinkFocus(true);\n  };\n\n  const onCopyLinkInputLooseFocus = () => {\n    setHasDashboardLinkFocus(false);\n  };\n\n  const getBaseNameUrl = () => {\n    const baseUrl = `/${getOrganizationPath(currentOrganization)}/dashboard/${dashboard.id}`;\n    const separator = basename.match(/^\\/(.*)/) ? '' : '/';\n\n    return `${domain}${separator}${basename}${baseUrl}`;\n  };\n\n  const getShareLink = () =>\n    _isEmpty(basename)\n      ? `${domain}/${getOrganizationPath(currentOrganization)}/dashboard/${dashboard.id}`\n      : getBaseNameUrl();\n\n  return (\n    <WithShareDashboardModal\n      onClose={onClose}\n      onCloseManageModal={() => setIsManageModalOpen(false)}\n      isOpen={isOpen}\n      dashboard={dashboard}\n      currentOrganization={currentOrganization}>\n      {({\n        isLoading,\n        areUsersLoading,\n        dashboardUsers,\n        currentDashboardUsers,\n        selectedUsers,\n        handleSelectionChange,\n        isSharing,\n        onShare,\n        onSearch,\n        onUnShare,\n        ...paginationProps\n      }) => (\n        <>\n          <Dialog\n            size=\"xlarge\"\n            closable={!isManageModalOpen}\n            open={isOpen}\n            onClosed={() => onClose()}\n            closeButtonLabel={t('Close share modal')}\n            title={t('Share - {{dashboardName}}', { dashboardName: getSlicedDashboardName(dashboard, t) })}\n            actions={\n              <>\n                <Button disabled={isSharing || _isEmpty(selectedUsers)} onClick={onShare} variant=\"primary\">\n                  {t('Share')}\n                </Button>\n                <Button onClick={onClose} variant=\"neutral\">\n                  {t('Cancel')}\n                </Button>\n              </>\n            }>\n            <>\n              {isLoading ? (\n                <LinearProgress />\n              ) : (\n                <>\n                  <DashboardShareUser\n                    dashboardUsers={dashboardUsers}\n                    selectedUsers={selectedUsers}\n                    handleSelectionChange={handleSelectionChange}\n                    areUsersLoading={areUsersLoading}\n                    onSearch={onSearch}\n                    {...paginationProps}\n                  />\n                  {currentDashboardUsers && (\n                    <div className={styles.shareDashboardModal__sharedWith} data-testid=\"shared-with-section\">\n                      <div className={styles.shareDashboardModal__sharedWithHeader}>\n                        <Typography variant=\"body-small-semibold\">{t('Shared with:')}</Typography>\n                        <Button\n                          disabled={_isEmpty(currentDashboardUsers)}\n                          onClick={() => setIsManageModalOpen(true)}\n                          variant=\"tertiary\"\n                          className={styles.shareDashboardModal__manageButton}>\n                          {t('Manage')}\n                        </Button>\n                      </div>\n                      <AvatarGroup className={styles.shareDashboardModal__sharedWithList} max=\"25\">\n                        {currentDashboardUsers.map(el => (\n                          <Avatar\n                            label={t('Avatar for {{firstName}} {{lastName}}', {\n                              firstName: el.firstName,\n                              lastName: el.lastName\n                            })}\n                            size=\"medium\"\n                            key={el.id}>\n                            <img\n                              alt={`${el.firstName} ${el.lastName}`}\n                              title={`${el.firstName} ${el.lastName}`}\n                              src={getAvatarUrls(el.userKey).urlMedium}\n                            />\n                          </Avatar>\n                        ))}\n                      </AvatarGroup>\n                    </div>\n                  )}\n                  <div className={styles.shareDashboardModal__shareLink}>\n                    <TextField\n                      className={clsx(styles.shareDashboardModal__inputShareLink, {\n                        [styles.shareDashboardModal__inputShareLink_focused]: hasDashboardLinkFocus\n                      })}\n                      readOnly\n                      fullwidth\n                      value={getShareLink()}\n                      onBlur={onCopyLinkInputLooseFocus}\n                      onFocus={onCopyLinkInputFocus}\n                      leadingIcon={\n                        <span className={styles.shareDashboardModal__linkFilledIconColor}>\n                          <LinkOutlinedIcon />\n                        </span>\n                      }\n                      success={hasDashboardLinkFocus}\n                      helperText={hasDashboardLinkFocus ? t('Link copied!') : t('Copy link')}\n                      trailingIcon={hasDashboardLinkFocus ? <CheckboxCheckIcon /> : <CopyOutlinedIcon />}\n                    />\n                  </div>\n                </>\n              )}\n              {isSharing && <LinearProgress />}\n            </>\n          </Dialog>\n          <ManageShareDashboardModal\n            isOpen={isManageModalOpen}\n            currentDashboardUsers={currentDashboardUsers}\n            onUnShare={onUnShare}\n            onCloseManageShareModal={() => setIsManageModalOpen(false)}\n          />\n        </>\n      )}\n    </WithShareDashboardModal>\n  );\n};\n\nShareDashboardModal.propTypes = {\n  /** The dashboard to save */\n  dashboard: PropTypes.shape({\n    id: PropTypes.string,\n    name: PropTypes.string,\n    type: PropTypes.string,\n    isSystemDashboard: PropTypes.bool\n  }),\n  /** Is the modal open */\n  isOpen: PropTypes.bool,\n  /** On closing the modal */\n  onClose: PropTypes.func\n};\n\nexport default ShareDashboardModal;\n","import { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useNavigate, useLocation } from 'react-router';\nimport { dashboardTypes } from '../../../configs/dashboard.config';\nimport { MIXPANEL_EVENT_NAME } from '../../../constants/mixpanel';\nimport { MODALS } from '../../../constants/modals';\nimport WithDashboardModals, { type ModalOpenedType } from '../../../hocs/withDashboardModals/withDashboardModals';\nimport { EVENT_TYPE } from '../../../hooks/dashboards/useDashboardWindowEvent';\nimport useMixpanel from '../../../hooks/useMixpanel';\nimport {\n  useWindowEvent,\n  WINDOW_EVENT_CRADLE_TO_GRAVE_MODAL_KEY,\n  WINDOW_EVENT_SCHEDULE_KEY\n} from '../../../hooks/useWindowEvent';\nimport { setModalOpen } from '../../../store/Analytics/analytics.slice';\nimport { selectModalOpened } from '../../../store/selectors/analytics';\nimport type { ScheduleDashboardType } from '../../../types/dashboard/ScheduleTypes';\nimport CallReportModal from '../CallReportModal/CallReportModal';\nimport DeleteDashboardModal from '../DeleteDashboardModal/DeleteDashboardModal';\nimport SaveDashboardModal from '../SaveDashboardModal/SaveDashboardModal';\nimport AddScheduledDashboardModal from '../Scheduler/AddScheduledDashboardModal/AddScheduledDashboardModal';\nimport DeleteScheduledDashboardModal from '../Scheduler/DeleteScheduledDashboardModal/DeleteScheduledDashboardModal';\nimport MaxSchedulesReachedModal from '../Scheduler/MaxSchedulesReachedModal/MaxSchedulesReachedModal';\nimport ShareDashboardModal from '../ShareDashboardModal/ShareDashboardModal';\n\nexport const ModalsManager = () => {\n  const dispatch = useDispatch();\n  const navigate = useNavigate();\n  const location = useLocation();\n  type EditableScheduled = ScheduleDashboardType & {\n    isScheduleOwner: boolean;\n    dashboardId: string;\n    dateRange?: string | null;\n    fileTypes?: string[];\n    notificationType?: string;\n  };\n  type ModalOpened = {\n    modal?: string;\n    dashboard?: { id?: string; type?: string; [key: string]: unknown };\n    legId?: string;\n    startTime?: string;\n    queueCallerId?: string;\n    conversationId?: string;\n    showTranscriptionUpgradePrompt?: boolean;\n    initialOpeningTab?: string;\n    editableScheduledDashboard?: EditableScheduled;\n    dashboardId?: string;\n  } | null;\n  const modalOpened = useSelector(selectModalOpened) as ModalOpened;\n  const [currentModalOpened, setCurrentModalOpened] = useState<ModalOpened>(null);\n  const [modalError, setModalError] = useState<string | null>(null);\n  const mixpanelTrack = useMixpanel();\n  // this is to handle the behavior when we opened the modal with deep link and we do back in the browser, it should close the modal\n  const shouldCloseReportModal =\n    currentModalOpened?.dashboard?.type === dashboardTypes.CALL_REPORTS &&\n    currentModalOpened?.modal === MODALS.CALL_REPORT &&\n    !new URLSearchParams(location.search).has('conversationId');\n\n  const handleModalCloseNavigation = () => {\n    const params = new URLSearchParams(location.search);\n\n    if (!params.has('conversationId')) {\n      return;\n    }\n\n    params.delete('conversationId');\n    const newSearch = params.toString();\n\n    void navigate(`${location.pathname}${newSearch.length > 0 ? `?${newSearch}` : ''}`, { replace: true });\n  };\n\n  const onModalClose = () => {\n    setModalError(null);\n    handleModalCloseNavigation();\n\n    const eventData = {\n      Action: `Modal closed`,\n      Component: 'ModalsManager',\n      ModalName: currentModalOpened?.modal\n    };\n    void mixpanelTrack(MIXPANEL_EVENT_NAME.MODALS, eventData);\n\n    dispatch(setModalOpen(null));\n  };\n\n  useEffect(() => {\n    setCurrentModalOpened(modalOpened);\n  }, [modalOpened]);\n\n  useEffect(() => {\n    if (shouldCloseReportModal) {\n      dispatch(setModalOpen(null));\n    }\n  });\n\n  const onScheduleDashboardOpen = (event: { id?: string }) => {\n    dispatch(setModalOpen({ modal: MODALS.ADD_SCHEDULED_DASHBOARD, dashboardId: event.id }));\n  };\n  useWindowEvent({ key: WINDOW_EVENT_SCHEDULE_KEY, onEvent: onScheduleDashboardOpen, deps: [] });\n\n  const onCradleToGraveModalOpen = (event: { id?: string; startTime?: string; queueCallerId?: string }) => {\n    dispatch(\n      setModalOpen({\n        modal: MODALS.CALL_REPORT,\n        legId: event.id,\n        startTime: event.startTime,\n        queueCallerId: event.queueCallerId\n      })\n    );\n  };\n  useWindowEvent({ key: WINDOW_EVENT_CRADLE_TO_GRAVE_MODAL_KEY, onEvent: onCradleToGraveModalOpen, deps: [] });\n\n  return (\n    <>\n      {currentModalOpened?.modal === MODALS.CALL_REPORT && (\n        <CallReportModal\n          isOpen\n          onClose={onModalClose}\n          legId={modalOpened?.legId}\n          startTime={modalOpened?.startTime}\n          queueCallerId={modalOpened?.queueCallerId}\n          conversationId={modalOpened?.conversationId}\n          showTranscriptionUpgradePrompt={modalOpened?.showTranscriptionUpgradePrompt}\n          initialOpeningTab={modalOpened?.initialOpeningTab}\n        />\n      )}\n      {currentModalOpened?.modal === MODALS.ADD_SCHEDULED_DASHBOARD && (\n        <AddScheduledDashboardModal\n          isOpen\n          editableScheduledDashboard={modalOpened?.editableScheduledDashboard}\n          defaultSelectedDashboardId={modalOpened?.dashboard?.id}\n          onClose={onModalClose}\n        />\n      )}\n      {currentModalOpened?.modal === MODALS.DELETE_SCHEDULED_DASHBOARD && (\n        <DeleteScheduledDashboardModal\n          isOpen\n          scheduledDashboard={modalOpened?.editableScheduledDashboard}\n          onClose={onModalClose}\n        />\n      )}\n      {currentModalOpened?.modal === MODALS.MAX_SCHEDULES_REACHED && (\n        <MaxSchedulesReachedModal isOpen onClose={onModalClose} />\n      )}\n      <WithDashboardModals\n        setModalError={setModalError}\n        modalOpened={(currentModalOpened as ModalOpenedType | undefined) ?? undefined}\n        onModalClose={onModalClose}>\n        {({ onDashboardDelete, onDashboardSave, onDashboardRename }) => {\n          return (\n            <div>\n              {modalOpened?.dashboard && (\n                <>\n                  <SaveDashboardModal\n                    isOpen={\n                      modalOpened?.dashboard &&\n                      (currentModalOpened?.modal === EVENT_TYPE.SAVE_AS ||\n                        currentModalOpened?.modal === EVENT_TYPE.RENAME ||\n                        currentModalOpened?.modal === MODALS.SAVE_DASHBOARD ||\n                        currentModalOpened?.modal === MODALS.RENAME_DASHBOARD)\n                    }\n                    dashboardToSave={modalOpened?.dashboard}\n                    isRename={\n                      currentModalOpened?.modal === EVENT_TYPE.RENAME ||\n                      currentModalOpened?.modal === MODALS.RENAME_DASHBOARD\n                    }\n                    onClose={onModalClose}\n                    onSave={onDashboardSave}\n                    onRename={onDashboardRename}\n                    saveError={modalError}\n                  />\n                  <DeleteDashboardModal\n                    isOpen={\n                      (modalOpened?.dashboard && currentModalOpened?.modal === EVENT_TYPE.DELETE) ||\n                      currentModalOpened?.modal === EVENT_TYPE.UNSHARE\n                    }\n                    dashboard={modalOpened?.dashboard}\n                    onClose={onModalClose}\n                    onDelete={onDashboardDelete}\n                  />\n                  <ShareDashboardModal\n                    isOpen={\n                      (modalOpened?.dashboard && currentModalOpened?.modal === EVENT_TYPE.SHARE) ||\n                      currentModalOpened?.modal === MODALS.SHARE_DASHBOARD\n                    }\n                    dashboard={modalOpened?.dashboard}\n                    onClose={onModalClose}\n                  />\n                </>\n              )}\n            </div>\n          );\n        }}\n      </WithDashboardModals>\n    </>\n  );\n};\n\nexport default ModalsManager;\n",".timeoutDialog__body {\n    display: flex;\n    flex-direction: row;\n}\n\n.timeoutDialog__messageContainer {\n    padding-left: var(--goto-layout-02);\n}\n\n.timeoutDialog__messageContainer_support {\n    padding-top: var(--goto-spacing-02);\n}\n\n.timeoutDialog__actionsBody {\n    display: flex;\n}\n","import { ExternalLinkOutlinedIcon, InfoFilledIcon } from '@getgo/chameleon-icons/react';\nimport { Button, Dialog, Link, Typography } from '@getgo/chameleon-web-react-wrapper';\nimport PropTypes from 'prop-types';\nimport { useMemo } from 'react';\nimport { Trans, useTranslation } from 'react-i18next';\nimport { useAccessCheck } from '../../../hooks/permissions/useAccessCheck.ts';\nimport { getExportAccess } from '../../../services/common/export-config.service';\nimport styles from './TimeoutDialog.module.scss';\nimport { configPropType } from '../../../utils/prop-types.util';\nimport ExportButton from '../Export/ExportButton/ExportButton';\n\nconst TimeoutDialog = ({ dialogOpen, onClose, onExport, supportUrl, pageConfig }) => {\n  const { t } = useTranslation();\n  const canAccess = useAccessCheck();\n\n  const isExportDisabled = useMemo(\n    () => !pageConfig?.export?.enabled || !canAccess(getExportAccess(pageConfig.export.type)),\n    [pageConfig.export, canAccess]\n  );\n\n  if (!dialogOpen) {\n    return null;\n  }\n\n  return (\n    <Dialog\n      open={dialogOpen}\n      closable\n      onClosed={onClose}\n      closeButtonLabel={t('Close timeout modal')}\n      title={t('Request Timeout')}\n      data-testid=\"timeout-dialog\"\n      actions={\n        <div className={styles.timeoutDialog__actionsBody}>\n          <Button variant=\"neutral\" onClick={onClose}>\n            {t('Back')}\n          </Button>\n          <ExportButton\n            type={pageConfig.export?.type}\n            disabled={isExportDisabled}\n            tooltipLabel={isExportDisabled ? t('Export is currently unavailable') : ''}\n            onClick={onExport}\n            onExportDone={onClose}\n            size=\"medium\"\n            isIconButton={false}\n          />\n        </div>\n      }\n      size=\"large\">\n      <div className={styles.timeoutDialog__body}>\n        <InfoFilledIcon />\n        <div className={styles.timeoutDialog__messageContainer}>\n          <Typography variant=\"body-medium\">{t('The requested dataset is too large to be displayed.')}</Typography>\n          <Typography variant=\"body-medium\">\n            {t(\n              'You can go back and reduce your selection (smaller date range, fewer queues, fewer agents, etc ) or you can export this selection instead.'\n            )}\n          </Typography>\n          <Typography className={styles.timeoutDialog__messageContainer_support} variant=\"caption-medium\">\n            <Trans t={t} tOptions={{ context: 'Link to support site for timeout dialog' }}>\n              For more information, please visit our{' '}\n              <Link role=\"link\" variant=\"caption-medium\" href={supportUrl} target=\"_blank\" rel=\"noopener noreferrer\">\n                support site <ExternalLinkOutlinedIcon />\n              </Link>\n            </Trans>\n          </Typography>\n        </div>\n      </div>\n    </Dialog>\n  );\n};\n\nTimeoutDialog.propTypes = {\n  /** If the dialog is open */\n  dialogOpen: PropTypes.bool.isRequired,\n  /**\n   * When the dialog is closed.\n   *\n   * Expects a function of the following form: `() => void`\n   */\n  onClose: PropTypes.func.isRequired,\n  /**\n   * When the export button is clicked.\n   *\n   * Expects a function of the following form: `() => void`\n   */\n  onExport: PropTypes.func,\n  /** The support Url */\n  supportUrl: PropTypes.string.isRequired,\n  /** The page configuration */\n  pageConfig: configPropType.isRequired\n};\n\nexport default TimeoutDialog;\n","import environment from '../../environments';\nimport { analyticsFetchService } from './analytics-fetch.service';\n\nexport type PurchasableFeatureAddOn = {\n  id: string;\n  uri?: string;\n};\n\nconst getProductExplorationUrl = (organizationId: string): string =>\n  `${environment.api.analyticsBff.url}/organizations/${organizationId}/callreportaddons`;\n\nexport const fetchPurchasableProducts = async (\n  controller: AbortController,\n  organizationId: string\n): Promise<PurchasableFeatureAddOn | undefined> => {\n  return await analyticsFetchService<PurchasableFeatureAddOn | undefined>(\n    getProductExplorationUrl(organizationId),\n    controller\n  );\n};\n","import { useEffect, useState } from 'react';\nimport { useLocation, useNavigate, Outlet } from 'react-router';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Settings } from 'luxon';\nimport PropTypes from 'prop-types';\nimport { I18nextProvider, useTranslation } from 'react-i18next';\nimport { isEmpty as _isEmpty } from 'lodash';\nimport { getDefaultLocale, getUserKey } from '../../../utils/shell';\nimport NavBar from '../NavBar/NavBar';\nimport Header from '../Header/Header';\nimport styles from './Layout.module.scss';\nimport i18n, { setupi18n } from '../../../i18n';\nimport { store, retrieve } from '../../../services/common/local-storage.service.ts';\nimport Loading from '../Loading/Loading';\nimport ErrorAlert from '../ErrorAlert/ErrorAlert';\nimport useFetch from '../../../hooks/useFetch';\nimport {\n  setApplicationLoaded,\n  setApplicationUpdated,\n  setBasename,\n  setError,\n  setLocale,\n  updateOrganizationPurchasableProducts\n} from '../../../store/Analytics/analytics.slice';\nimport { setNetworkError } from '../../../services/common/handle-errors.service';\nimport WithDefaultBoard from '../../../hocs/withDefaultBoard/withDefaultBoard';\nimport InitServiceFactory from '../../../services/init-flow/InitFactory';\nimport { InvalidOrganizationIdError } from '../../../services/init-flow/InvalidOrganizationIdError';\nimport { selectCurrentDashboard, selectUserTheme, selectIsUserReadOnly } from '../../../store/selectors/analytics';\nimport { Component as Error404 } from '../../../pages/errors/404/404';\nimport { Component as InvalidTimezone } from '../../../pages/errors/invalid-timezone/InvalidTimezone';\nimport { NoOrganizationIdError } from '../../../services/init-flow/NoOrganizationIdError';\nimport ModalsManager from '../ModalsManager/ModalsManager';\nimport { isUUID } from '../../../utils/format.util';\nimport { MIXPANEL_EVENT_NAME } from '../../../constants/mixpanel.ts';\nimport useMixpanel from '../../../hooks/useMixpanel.ts';\nimport { selectShowTimeoutDialog } from '../../../store/selectors/events';\nimport { setShowTimeoutDialog } from '../../../store/Analytics/events.slice';\nimport TimeoutDialog from '../TimeoutDialog/TimeoutDialog';\nimport environment from '../../../environments';\nimport configs from '../../../configs';\nimport { getPageIdFromDashboardType } from '../../../utils/page.util.ts';\nimport { THEME } from '../../../constants/theme';\nimport '../../../assets/styles/App.scss';\nimport { applyFiltersQuery } from '../../../store/Analytics/filters.slice';\nimport { NoDashboardError } from '../../../services/init-flow/NoDashboardError';\nimport '../../../assets/styles/Calendar.scss';\nimport { fetchPurchasableProducts } from '../../../services/common/product-exploration-service';\nimport { setNavigator } from '../../../utils/navigation.utils';\nimport { getTimeZone, isValidTimezone } from '../../../services/common/users.service';\n\n// TODO handle hooks correctly on the whole file\n/* eslint-disable react-hooks/exhaustive-deps */\nconst Layout = function ({ rootRoute }) {\n  const theme = useSelector(selectUserTheme);\n  const location = useLocation();\n  const navigate = useNavigate();\n  const dispatch = useDispatch();\n  const isReadonly = useSelector(selectIsUserReadOnly);\n  const [organizationError, setOrganizationError] = useState(false);\n  const [invalidTimezone, setInvalidTimezone] = useState(false);\n  const mixpanelTrack = useMixpanel();\n  const showTimeoutDialog = useSelector(selectShowTimeoutDialog);\n  const currentDashboard = useSelector(selectCurrentDashboard);\n  const userTheme = useSelector(selectUserTheme);\n  const pageConfig = currentDashboard?.type ? configs[getPageIdFromDashboardType(currentDashboard.type)] : {};\n\n  const { t } = useTranslation();\n\n  const {\n    appLoaded,\n    locale,\n    basename,\n    currentOrganization,\n    currentOrganizationPermissions,\n    userId,\n    currentLicense,\n    currentOrganizationId\n  } = useSelector(state => state.analytics);\n\n  if (!i18n.isInitialized) {\n    setupi18n(locale);\n  }\n\n  useEffect(() => {\n    setNavigator(navigate);\n  }, [navigate]);\n\n  useEffect(() => {\n    if (i18n.isInitialized && locale) {\n      i18n.changeLanguage(locale);\n      store('locale', locale);\n    } else if (!locale) {\n      dispatch(setLocale({ locale: retrieve('locale', getDefaultLocale()) }));\n    }\n  }, [locale]);\n\n  const [loading, requestError] = useFetch(\n    async controller => {\n      if (!appLoaded) {\n        const splitPath = location.pathname.split('/');\n        const orgFromPath = _isEmpty(splitPath) ? null : splitPath[1];\n        try {\n          const initialData = await InitServiceFactory.initApp(orgFromPath, controller);\n\n          if (\n            (orgFromPath && isUUID(orgFromPath) && initialData.currentOrganization.domain) ||\n            (orgFromPath && orgFromPath !== initialData.currentOrganization.domain)\n          ) {\n            const eventData = {\n              Action: `Redirection from uuid to domain name`,\n              Component: 'Layout',\n              OrgIdFromPath: orgFromPath,\n              Organization: initialData.currentOrganization\n            };\n\n            mixpanelTrack(MIXPANEL_EVENT_NAME.ORGANIZATIONS, eventData);\n\n            if (orgFromPath) {\n              const splitDashboard = location.pathname.split(`${orgFromPath}/`);\n              if (splitDashboard && !_isEmpty(splitDashboard[1])) {\n                const queryString = window.location.search;\n                navigate(`${initialData.currentOrganization.domain}/${splitDashboard[1]}${queryString}`);\n              } else {\n                navigate(initialData.currentOrganization.domain);\n              }\n            }\n          }\n\n          dispatch(\n            setApplicationLoaded({\n              ...initialData,\n              userKey: getUserKey()\n            })\n          );\n          const tz = getTimeZone();\n          Settings.defaultZone = tz;\n          setInvalidTimezone(!isValidTimezone(tz));\n        } catch (e) {\n          if (e instanceof InvalidOrganizationIdError || e instanceof NoDashboardError) {\n            setOrganizationError(true);\n            navigate(`/`);\n          } else if (e instanceof NoOrganizationIdError) {\n            // Triggered when the user has no organizations to see.\n            // Can be fired when a readonly user lost his last shared dashboard.\n\n            setOrganizationError(true);\n            navigate(`/`);\n          } else {\n            throw e;\n          }\n        }\n      }\n    },\n    [appLoaded]\n  );\n\n  useEffect(() => {\n    if (appLoaded) {\n      const eventData = {\n        Action: `Load application`,\n        Component: 'Layout',\n        IsReadonly: isReadonly,\n        Theme: userTheme\n      };\n      mixpanelTrack(MIXPANEL_EVENT_NAME.APPLICATION, eventData);\n    }\n  }, [appLoaded]);\n\n  useEffect(() => {\n    dispatch(\n      setBasename({\n        basename: rootRoute !== '/' ? rootRoute : '',\n        domain: `${window.location.protocol}//${window.location.host}`\n      })\n    );\n  }, [basename]);\n\n  const [changingPbx, changingPbxError] = useFetch(\n    async controller => {\n      if (InitServiceFactory.hasBeenInitialized && currentOrganizationId) {\n        try {\n          const splitPath = location.pathname.split('/');\n          const orgFromPath = _isEmpty(splitPath) ? null : splitPath[1];\n\n          const updatedData = await InitServiceFactory.changePbx(currentOrganizationId, controller, orgFromPath);\n          navigate(updatedData.currentOrganization.domain || updatedData.currentOrganization.id);\n          dispatch(applyFiltersQuery([]));\n\n          dispatch(\n            setApplicationUpdated({\n              ...updatedData\n            })\n          );\n          const tz = getTimeZone();\n          Settings.defaultZone = tz;\n          setInvalidTimezone(!isValidTimezone(tz));\n        } catch (e) {\n          if (e instanceof InvalidOrganizationIdError || e instanceof NoDashboardError) {\n            navigate(`${e.organizationId}`);\n          } else {\n            console.error(`Error while changing organization`, e);\n            throw e;\n          }\n        }\n      }\n    },\n    [currentOrganizationId]\n  );\n\n  useEffect(() => {\n    if (requestError) {\n      if (requestError.status === 403 && location.pathname.includes('dashboard')) {\n        // if the user does not have access, we redirect to the home page so analytics is loaded with the users' organization.\n        window.location.href = rootRoute;\n      } else {\n        setNetworkError({\n          dispatch,\n          requestError: requestError || changingPbxError,\n          permissions: currentOrganizationPermissions,\n          currentOrganization,\n          userId,\n          currentLicense,\n          message: 'An error occurred while fetching main loading', // TODO find a way to translate that error\n          locale\n        });\n      }\n    }\n  }, [requestError, changingPbxError]);\n\n  useFetch(\n    async controller => {\n      if (currentOrganization?.id) {\n        try {\n          const purchasableProducts = await fetchPurchasableProducts(controller, currentOrganization.id);\n          dispatch(\n            updateOrganizationPurchasableProducts({\n              purchasableProducts\n            })\n          );\n        } catch (e) {\n          console.error('Cannot load purchasable products', e);\n        }\n      }\n    },\n    [currentOrganization?.id]\n  );\n\n  const handleTimeoutDialogClose = () => {\n    dispatch(setShowTimeoutDialog({ showTimeoutDialog: false }));\n  };\n\n  const resetError = () => {\n    dispatch(setError(null));\n  };\n\n  useEffect(() => {\n    document.title = t('GoTo Analytics');\n    if (theme === THEME.DARK) {\n      document.body.classList.add('theme-dark');\n    } else {\n      document.body.classList.remove('theme-dark');\n    }\n  }, [theme]);\n\n  return (\n    <I18nextProvider i18n={i18n}>\n      <TimeoutDialog\n        dialogOpen={showTimeoutDialog}\n        onClose={handleTimeoutDialogClose}\n        supportUrl={environment.support.url}\n        pageConfig={pageConfig}\n      />\n\n      {organizationError && <Error404 />}\n      {!organizationError && (loading || changingPbx || !appLoaded) && <Loading />}\n      {!organizationError && !loading && !changingPbx && appLoaded && (\n        <div className={styles.layout}>\n          <Header />\n          <div className={styles.layout__container}>\n            <NavBar />\n            <div className={styles.layout__content}>\n              {invalidTimezone ? (\n                <InvalidTimezone />\n              ) : (\n                <>\n                  <ModalsManager />\n                  <WithDefaultBoard>\n                    {({ defaultBoard }) => <Outlet context={{ defaultBoard, currentOrganization }} />}\n                  </WithDefaultBoard>\n                </>\n              )}\n            </div>\n          </div>\n        </div>\n      )}\n      <ErrorAlert onClosed={resetError} />\n    </I18nextProvider>\n  );\n};\n\nLayout.propTypes = {\n  /** The base path on which the app is deployed */\n  rootRoute: PropTypes.string.isRequired\n};\n\nexport default Layout;\n\n/* eslint-enable react-hooks/exhaustive-deps */\n","import { useOutletContext, Navigate } from 'react-router';\n\nconst NavigateWrapper = ({ hasOrganizationId }) => {\n  const { defaultBoard, currentOrganization } = useOutletContext();\n\n  const getNavigate = () => {\n    if (hasOrganizationId) {\n      return defaultBoard ? (\n        <Navigate to={`/${currentOrganization.id}/dashboard/${defaultBoard.id}`} />\n      ) : (\n        <Navigate to=\"restricted\" />\n      );\n    }\n\n    return <Navigate replace to={`${currentOrganization.domain || currentOrganization.id}`} />;\n  };\n\n  return getNavigate();\n};\n\nexport default NavigateWrapper;\n","import { GotoSearchResultsPage } from '@goto/shell-react-components';\nimport { useParams } from 'react-router';\n\n/**\n * Wrapper component that forces GotoSearchResultsPage to re-render when search parameters change\n */\nconst DirectSearchResultsPage = () => {\n  const { searchParams } = useParams();\n\n  return <GotoSearchResultsPage key={searchParams} />;\n};\n\nexport default DirectSearchResultsPage;\n","import { createBrowserRouter } from 'react-router';\nimport AnalyticsRedirect from './components/common/AnalyticsRedirect/AnalyticsRedirect';\nimport ErrorBoundaryWrapper from './components/common/ErrorBoundaryWrapper/ErrorBoundaryWrapper';\nimport Layout from './components/common/Layout/Layout';\nimport NavigateWrapper from './components/common/NavigateWrapper/NavigateWrapper';\nimport DirectSearchResultsPage from './components/SearchResults/DirectSearchResultsPage';\n\nconst getRouter = rootRoute =>\n  createBrowserRouter(\n    [\n      {\n        path: '/',\n        children: [\n          {\n            element: (\n              <ErrorBoundaryWrapper>\n                <Layout rootRoute={rootRoute} />\n              </ErrorBoundaryWrapper>\n            ),\n            children: [\n              {\n                path: ':organizationId',\n                children: [\n                  {\n                    path: 'search/:searchParams',\n                    element: <DirectSearchResultsPage />\n                  },\n                  {\n                    path: 'dashboard/:dashboardId',\n                    element: <AnalyticsRedirect />\n                  },\n                  {\n                    path: 'restricted',\n                    lazy: () => import('./pages/errors/403/403')\n                  },\n                  {\n                    path: 'not-found',\n                    lazy: () => import('./pages/errors/404/404')\n                  },\n                  {\n                    path: 'scheduled-boards',\n                    lazy: () => import('./pages/ScheduledDashboards/ScheduledDashboards')\n                  },\n                  {\n                    path: 'scheduled-boards/:generatedScheduleId/download/:fileType',\n                    lazy: () => import('./pages/ScheduledExportDownload/ScheduledExportDownload')\n                  },\n                  {\n                    index: true,\n                    path: '*',\n                    element: <NavigateWrapper hasOrganizationId />\n                  }\n                ]\n              },\n              {\n                index: true,\n                element: <NavigateWrapper />\n              }\n            ]\n          }\n        ]\n      }\n    ],\n    {\n      basename: `${rootRoute}`\n    }\n  );\n\nexport default getRouter;\n","import * as Sentry from '@sentry/browser';\nimport environment from '../../environments';\n\nexport const initSentry = (): void => {\n  Sentry.init({\n    dsn: 'https://11b89b46c4f747eea681dfe2b714ff33@o173976.ingest.sentry.io/6049715',\n    environment: environment.key,\n    release: environment.appVersion,\n    // Removing dedupe as it crashes the Sentry SDK\n    integrations: integrations => integrations.filter(int => int.name !== 'Dedupe')\n  });\n};\n","import { Provider } from 'react-redux';\nimport { RouterProvider } from 'react-router';\nimport ThemeProvider from './components/common/StoreThemeProvider/StoreThemeProvider';\nimport { ErrorBannersProvider } from './providers/ErrorBannersProvider';\nimport getRouter from './Router';\nimport { initSentry } from './services/common/sentry.service';\nimport { store } from './store/store';\nimport '@ucc-messaging/inbox-common-ui/dist/index.css';\nimport '@ucc-messaging/components/dist/index.css';\nimport '@ucc/cc-common-ui/style.css';\nimport '@analytics-common-ui/layout/dist/layout.css';\nimport '@analytics-common-ui/core/dist/core.css';\nimport '@analytics-common-ui/d3-adapter/dist/d3-adapter.css';\n\ninitSentry();\n\ninterface AppProps {\n  rootRoute?: string;\n}\n\nconst App = function ({ rootRoute = '/analytics' }: AppProps) {\n  return (\n    <Provider store={store}>\n      <ErrorBannersProvider>\n        <ThemeProvider>\n          <RouterProvider router={getRouter(rootRoute)} />\n        </ThemeProvider>\n      </ErrorBannersProvider>\n    </Provider>\n  );\n};\n\nexport default App;\n","import App from './App';\nimport StandaloneApp from './StandaloneApp';\n\nexport const AnalyticsExperienceEntry = App;\nexport const AnalyticsExperienceDevEntry = StandaloneApp;\n","import { createComponentDefinitionForReact } from '@goto/shell-utils';\nimport React from 'react';\nimport ReactDOM from 'react-dom/client';\nimport { AnalyticsExperienceDevEntry, AnalyticsExperienceEntry } from './analytics-experience.entry';\nimport environment from './environments';\nimport { retrieve } from './services/common/local-storage.service';\n\nconst isDevEnv = import.meta.env.VITE_IS_DEV_ENVIRONMENT;\n\nconst loadCSS = (src, parent) =>\n  new Promise((resolve, reject) => {\n    const link = window.document.createElement('link');\n    link.rel = 'stylesheet';\n    link.type = 'text/css';\n    link.href = src;\n    link.media = 'all';\n    link.onload = () => {\n      resolve(link);\n    };\n    link.onerror = reject;\n    if (parent) {\n      parent.appendChild(link);\n    }\n  });\n\nexport const lifecycles = createComponentDefinitionForReact({\n  React,\n  ReactDOM,\n  renderType: 'createRoot',\n  rootComponent: isDevEnv ? AnalyticsExperienceDevEntry : AnalyticsExperienceEntry,\n  domElementGetter: () => document.getElementById('goto--content'),\n  errorBoundary(err, info) {\n    console.error('Analytics-experience error: ', err, info);\n    return null;\n  }\n});\n\nexport const { bootstrap } = lifecycles;\n\nconst getStylePath = () => {\n  const caretIndex = environment.appVersion.indexOf('-');\n\n  const versionWithoutSemver =\n    caretIndex > -1 ? environment.appVersion.substring(caretIndex + 1) : environment.appVersion;\n\n  if (versionWithoutSemver.includes('-SNAPSHOT')) {\n    const gotoExtensionOverride = retrieve('goto-extensions-override');\n    if (gotoExtensionOverride && Array.isArray(gotoExtensionOverride)) {\n      const override = gotoExtensionOverride.find(override => override.id === '@ucc/cc-analytics-style');\n      if (override) {\n        return override.url;\n      }\n    }\n  }\n\n  const featureBranchName = versionWithoutSemver.includes('-SNAPSHOT')\n    ? `${versionWithoutSemver.replace('-SNAPSHOT', '').toLowerCase()}/`\n    : '';\n\n  return `${import.meta.env.BASE_URL}${featureBranchName}style.css`;\n};\n\nlet styles;\nexport const mount = async props => {\n  if (!isDevEnv && !styles) {\n    styles = await loadCSS(`${getStylePath()}?version=${environment.appVersion}`, window.document.head);\n  }\n  return lifecycles.mount(props);\n};\n\nexport const unmount = props => {\n  if (!isDevEnv && styles) {\n    window.document.head.removeChild(styles);\n    styles = null;\n  }\n  return lifecycles.unmount(props);\n};\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,588,693,694,695,696,697,698,699,700],"mappings":"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"}