{
  "version": 3,
  "sources": ["../../node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react.production.min.js", "../../node_modules/.pnpm/react@18.3.1/node_modules/react/index.js", "../../node_modules/.pnpm/scheduler@0.23.2/node_modules/scheduler/cjs/scheduler.production.min.js", "../../node_modules/.pnpm/scheduler@0.23.2/node_modules/scheduler/index.js", "../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js", "../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/index.js", "../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@18.3.1/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js", "../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@18.3.1/node_modules/use-sync-external-store/shim/index.js", "../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/client.js", "../../node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react-jsx-runtime.production.min.js", "../../node_modules/.pnpm/react@18.3.1/node_modules/react/jsx-runtime.js", "../../node_modules/.pnpm/void-elements@3.1.0/node_modules/void-elements/index.js", "../../node_modules/.pnpm/is-buffer@2.0.5/node_modules/is-buffer/index.js", "../../node_modules/.pnpm/extend@3.0.2/node_modules/extend/index.js", "../../node_modules/.pnpm/prop-types@15.8.1/node_modules/prop-types/lib/ReactPropTypesSecret.js", "../../node_modules/.pnpm/prop-types@15.8.1/node_modules/prop-types/factoryWithThrowingShims.js", "../../node_modules/.pnpm/prop-types@15.8.1/node_modules/prop-types/index.js", "../../node_modules/.pnpm/react-is@18.3.1/node_modules/react-is/cjs/react-is.production.min.js", "../../node_modules/.pnpm/react-is@18.3.1/node_modules/react-is/index.js", "../../node_modules/.pnpm/inline-style-parser@0.1.1/node_modules/inline-style-parser/index.js", "../../node_modules/.pnpm/style-to-object@0.3.0/node_modules/style-to-object/index.js", "../../src/host/actions.ts", "../../src/host/bridge.ts", "../../src/host/pageContext.ts", "../../node_modules/.pnpm/@tanstack+query-core@4.44.0/node_modules/@tanstack/query-core/src/subscribable.ts", "../../node_modules/.pnpm/@tanstack+query-core@4.44.0/node_modules/@tanstack/query-core/src/utils.ts", "../../node_modules/.pnpm/@tanstack+query-core@4.44.0/node_modules/@tanstack/query-core/src/focusManager.ts", "../../node_modules/.pnpm/@tanstack+query-core@4.44.0/node_modules/@tanstack/query-core/src/onlineManager.ts", "../../node_modules/.pnpm/@tanstack+query-core@4.44.0/node_modules/@tanstack/query-core/src/retryer.ts", "../../node_modules/.pnpm/@tanstack+query-core@4.44.0/node_modules/@tanstack/query-core/src/logger.ts", "../../node_modules/.pnpm/@tanstack+query-core@4.44.0/node_modules/@tanstack/query-core/src/notifyManager.ts", "../../node_modules/.pnpm/@tanstack+query-core@4.44.0/node_modules/@tanstack/query-core/src/removable.ts", "../../node_modules/.pnpm/@tanstack+query-core@4.44.0/node_modules/@tanstack/query-core/src/query.ts", "../../node_modules/.pnpm/@tanstack+query-core@4.44.0/node_modules/@tanstack/query-core/src/queryCache.ts", "../../node_modules/.pnpm/@tanstack+query-core@4.44.0/node_modules/@tanstack/query-core/src/mutation.ts", "../../node_modules/.pnpm/@tanstack+query-core@4.44.0/node_modules/@tanstack/query-core/src/mutationCache.ts", "../../node_modules/.pnpm/@tanstack+query-core@4.44.0/node_modules/@tanstack/query-core/src/infiniteQueryBehavior.ts", "../../node_modules/.pnpm/@tanstack+query-core@4.44.0/node_modules/@tanstack/query-core/src/queryClient.ts", "../../node_modules/.pnpm/@tanstack+query-core@4.44.0/node_modules/@tanstack/query-core/src/queryObserver.ts", "../../node_modules/.pnpm/@tanstack+query-core@4.44.0/node_modules/@tanstack/query-core/src/mutationObserver.ts", "../../node_modules/.pnpm/@tanstack+react-query@4.44.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@tanstack/react-query/src/useSyncExternalStore.ts", "../../node_modules/.pnpm/@tanstack+react-query@4.44.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@tanstack/react-query/src/QueryClientProvider.tsx", "../../node_modules/.pnpm/@tanstack+react-query@4.44.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@tanstack/react-query/src/isRestoring.tsx", "../../node_modules/.pnpm/@tanstack+react-query@4.44.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@tanstack/react-query/src/QueryErrorResetBoundary.tsx", "../../node_modules/.pnpm/@tanstack+react-query@4.44.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@tanstack/react-query/src/utils.ts", "../../node_modules/.pnpm/@tanstack+react-query@4.44.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@tanstack/react-query/src/errorBoundaryUtils.ts", "../../node_modules/.pnpm/@tanstack+react-query@4.44.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@tanstack/react-query/src/suspense.ts", "../../node_modules/.pnpm/@tanstack+react-query@4.44.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@tanstack/react-query/src/useBaseQuery.ts", "../../node_modules/.pnpm/@tanstack+react-query@4.44.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@tanstack/react-query/src/useQuery.ts", "../../node_modules/.pnpm/@tanstack+react-query@4.44.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@tanstack/react-query/src/useMutation.ts", "../../src/host/main.tsx", "../../src/components/Samuel.tsx", "../../src/context/config-context.ts", "../../src/util/session-storage.ts", "../../src/hooks/queries.ts", "../../src/context/ChatAnalyticsContext.ts", "../../src/components/icons.tsx", "../../node_modules/.pnpm/react-i18next@14.1.3_i18next@23.16.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-i18next/dist/es/Trans.js", "../../node_modules/.pnpm/react-i18next@14.1.3_i18next@23.16.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-i18next/dist/es/TransWithoutContext.js", "../../node_modules/.pnpm/html-parse-stringify@3.0.1/node_modules/html-parse-stringify/src/parse-tag.js", "../../node_modules/.pnpm/html-parse-stringify@3.0.1/node_modules/html-parse-stringify/src/parse.js", "../../node_modules/.pnpm/html-parse-stringify@3.0.1/node_modules/html-parse-stringify/src/stringify.js", "../../node_modules/.pnpm/html-parse-stringify@3.0.1/node_modules/html-parse-stringify/src/index.js", "../../node_modules/.pnpm/react-i18next@14.1.3_i18next@23.16.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-i18next/dist/es/utils.js", "../../node_modules/.pnpm/react-i18next@14.1.3_i18next@23.16.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-i18next/dist/es/unescape.js", "../../node_modules/.pnpm/react-i18next@14.1.3_i18next@23.16.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-i18next/dist/es/defaults.js", "../../node_modules/.pnpm/react-i18next@14.1.3_i18next@23.16.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-i18next/dist/es/i18nInstance.js", "../../node_modules/.pnpm/react-i18next@14.1.3_i18next@23.16.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-i18next/dist/es/context.js", "../../node_modules/.pnpm/react-i18next@14.1.3_i18next@23.16.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-i18next/dist/es/initReactI18next.js", "../../node_modules/.pnpm/react-i18next@14.1.3_i18next@23.16.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-i18next/dist/es/useTranslation.js", "../../node_modules/.pnpm/react-i18next@14.1.3_i18next@23.16.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-i18next/dist/es/withTranslation.js", "../../node_modules/.pnpm/react-i18next@14.1.3_i18next@23.16.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-i18next/dist/es/I18nextProvider.js", "../../node_modules/.pnpm/react-i18next@14.1.3_i18next@23.16.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-i18next/dist/es/withSSR.js", "../../node_modules/.pnpm/react-i18next@14.1.3_i18next@23.16.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-i18next/dist/es/useSSR.js", "../../src/components/ChatButton.tsx", "../../src/components/AssistantHeader.tsx", "../../src/components/ChatInput.tsx", "../../src/components/AssistantAbout.tsx", "../../src/components/ChatMessages.tsx", "../../node_modules/.pnpm/react-markdown@8.0.4_@types+react@18.3.31_react@18.3.1_supports-color@7.2.0/node_modules/react-markdown/lib/uri-transformer.js", "../../node_modules/.pnpm/react-markdown@8.0.4_@types+react@18.3.31_react@18.3.1_supports-color@7.2.0/node_modules/react-markdown/lib/react-markdown.js", "../../node_modules/.pnpm/vfile@5.3.7/node_modules/vfile/lib/index.js", "../../node_modules/.pnpm/unist-util-stringify-position@3.0.3/node_modules/unist-util-stringify-position/lib/index.js", "../../node_modules/.pnpm/vfile-message@3.1.4/node_modules/vfile-message/lib/index.js", "../../node_modules/.pnpm/vfile@5.3.7/node_modules/vfile/lib/minpath.browser.js", "../../node_modules/.pnpm/vfile@5.3.7/node_modules/vfile/lib/minproc.browser.js", "../../node_modules/.pnpm/vfile@5.3.7/node_modules/vfile/lib/minurl.shared.js", "../../node_modules/.pnpm/vfile@5.3.7/node_modules/vfile/lib/minurl.browser.js", "../../node_modules/.pnpm/bail@2.0.2/node_modules/bail/index.js", "../../node_modules/.pnpm/unified@10.1.2/node_modules/unified/lib/index.js", "../../node_modules/.pnpm/is-plain-obj@4.1.0/node_modules/is-plain-obj/index.js", "../../node_modules/.pnpm/trough@2.2.0/node_modules/trough/lib/index.js", "../../node_modules/.pnpm/mdast-util-to-string@3.2.0/node_modules/mdast-util-to-string/lib/index.js", "../../node_modules/.pnpm/micromark-util-chunked@1.1.0/node_modules/micromark-util-chunked/index.js", "../../node_modules/.pnpm/micromark-util-combine-extensions@1.1.0/node_modules/micromark-util-combine-extensions/index.js", "../../node_modules/.pnpm/micromark-util-character@1.2.0/node_modules/micromark-util-character/lib/unicode-punctuation-regex.js", "../../node_modules/.pnpm/micromark-util-character@1.2.0/node_modules/micromark-util-character/index.js", "../../node_modules/.pnpm/micromark-factory-space@1.1.0/node_modules/micromark-factory-space/index.js", "../../node_modules/.pnpm/micromark@3.2.0_supports-color@7.2.0/node_modules/micromark/lib/initialize/content.js", "../../node_modules/.pnpm/micromark@3.2.0_supports-color@7.2.0/node_modules/micromark/lib/initialize/document.js", "../../node_modules/.pnpm/micromark-util-classify-character@1.1.0/node_modules/micromark-util-classify-character/index.js", "../../node_modules/.pnpm/micromark-util-resolve-all@1.1.0/node_modules/micromark-util-resolve-all/index.js", "../../node_modules/.pnpm/micromark-core-commonmark@1.1.0/node_modules/micromark-core-commonmark/lib/attention.js", "../../node_modules/.pnpm/micromark-core-commonmark@1.1.0/node_modules/micromark-core-commonmark/lib/autolink.js", "../../node_modules/.pnpm/micromark-core-commonmark@1.1.0/node_modules/micromark-core-commonmark/lib/blank-line.js", "../../node_modules/.pnpm/micromark-core-commonmark@1.1.0/node_modules/micromark-core-commonmark/lib/block-quote.js", "../../node_modules/.pnpm/micromark-core-commonmark@1.1.0/node_modules/micromark-core-commonmark/lib/character-escape.js", "../../node_modules/.pnpm/decode-named-character-reference@1.3.0/node_modules/decode-named-character-reference/index.dom.js", "../../node_modules/.pnpm/micromark-core-commonmark@1.1.0/node_modules/micromark-core-commonmark/lib/character-reference.js", "../../node_modules/.pnpm/micromark-core-commonmark@1.1.0/node_modules/micromark-core-commonmark/lib/code-fenced.js", "../../node_modules/.pnpm/micromark-core-commonmark@1.1.0/node_modules/micromark-core-commonmark/lib/code-indented.js", "../../node_modules/.pnpm/micromark-core-commonmark@1.1.0/node_modules/micromark-core-commonmark/lib/code-text.js", "../../node_modules/.pnpm/micromark-util-subtokenize@1.1.0/node_modules/micromark-util-subtokenize/index.js", "../../node_modules/.pnpm/micromark-core-commonmark@1.1.0/node_modules/micromark-core-commonmark/lib/content.js", "../../node_modules/.pnpm/micromark-factory-destination@1.1.0/node_modules/micromark-factory-destination/index.js", "../../node_modules/.pnpm/micromark-factory-label@1.1.0/node_modules/micromark-factory-label/index.js", "../../node_modules/.pnpm/micromark-factory-title@1.1.0/node_modules/micromark-factory-title/index.js", "../../node_modules/.pnpm/micromark-factory-whitespace@1.1.0/node_modules/micromark-factory-whitespace/index.js", "../../node_modules/.pnpm/micromark-util-normalize-identifier@1.1.0/node_modules/micromark-util-normalize-identifier/index.js", "../../node_modules/.pnpm/micromark-core-commonmark@1.1.0/node_modules/micromark-core-commonmark/lib/definition.js", "../../node_modules/.pnpm/micromark-core-commonmark@1.1.0/node_modules/micromark-core-commonmark/lib/hard-break-escape.js", "../../node_modules/.pnpm/micromark-core-commonmark@1.1.0/node_modules/micromark-core-commonmark/lib/heading-atx.js", "../../node_modules/.pnpm/micromark-util-html-tag-name@1.2.0/node_modules/micromark-util-html-tag-name/index.js", "../../node_modules/.pnpm/micromark-core-commonmark@1.1.0/node_modules/micromark-core-commonmark/lib/html-flow.js", "../../node_modules/.pnpm/micromark-core-commonmark@1.1.0/node_modules/micromark-core-commonmark/lib/html-text.js", "../../node_modules/.pnpm/micromark-core-commonmark@1.1.0/node_modules/micromark-core-commonmark/lib/label-end.js", "../../node_modules/.pnpm/micromark-core-commonmark@1.1.0/node_modules/micromark-core-commonmark/lib/label-start-image.js", "../../node_modules/.pnpm/micromark-core-commonmark@1.1.0/node_modules/micromark-core-commonmark/lib/label-start-link.js", "../../node_modules/.pnpm/micromark-core-commonmark@1.1.0/node_modules/micromark-core-commonmark/lib/line-ending.js", "../../node_modules/.pnpm/micromark-core-commonmark@1.1.0/node_modules/micromark-core-commonmark/lib/thematic-break.js", "../../node_modules/.pnpm/micromark-core-commonmark@1.1.0/node_modules/micromark-core-commonmark/lib/list.js", "../../node_modules/.pnpm/micromark-core-commonmark@1.1.0/node_modules/micromark-core-commonmark/lib/setext-underline.js", "../../node_modules/.pnpm/micromark@3.2.0_supports-color@7.2.0/node_modules/micromark/lib/initialize/flow.js", "../../node_modules/.pnpm/micromark@3.2.0_supports-color@7.2.0/node_modules/micromark/lib/initialize/text.js", "../../node_modules/.pnpm/micromark@3.2.0_supports-color@7.2.0/node_modules/micromark/lib/create-tokenizer.js", "../../node_modules/.pnpm/micromark@3.2.0_supports-color@7.2.0/node_modules/micromark/lib/constructs.js", "../../node_modules/.pnpm/micromark@3.2.0_supports-color@7.2.0/node_modules/micromark/lib/parse.js", "../../node_modules/.pnpm/micromark@3.2.0_supports-color@7.2.0/node_modules/micromark/lib/preprocess.js", "../../node_modules/.pnpm/micromark@3.2.0_supports-color@7.2.0/node_modules/micromark/lib/postprocess.js", "../../node_modules/.pnpm/micromark-util-decode-numeric-character-reference@1.1.0/node_modules/micromark-util-decode-numeric-character-reference/index.js", "../../node_modules/.pnpm/micromark-util-decode-string@1.1.0/node_modules/micromark-util-decode-string/index.js", "../../node_modules/.pnpm/mdast-util-from-markdown@1.3.1_supports-color@7.2.0/node_modules/mdast-util-from-markdown/lib/index.js", "../../node_modules/.pnpm/remark-parse@10.0.2_supports-color@7.2.0/node_modules/remark-parse/lib/index.js", "../../node_modules/.pnpm/mdast-util-to-hast@12.3.0/node_modules/mdast-util-to-hast/lib/handlers/blockquote.js", "../../node_modules/.pnpm/mdast-util-to-hast@12.3.0/node_modules/mdast-util-to-hast/lib/handlers/break.js", "../../node_modules/.pnpm/mdast-util-to-hast@12.3.0/node_modules/mdast-util-to-hast/lib/handlers/code.js", "../../node_modules/.pnpm/mdast-util-to-hast@12.3.0/node_modules/mdast-util-to-hast/lib/handlers/delete.js", "../../node_modules/.pnpm/mdast-util-to-hast@12.3.0/node_modules/mdast-util-to-hast/lib/handlers/emphasis.js", "../../node_modules/.pnpm/micromark-util-sanitize-uri@1.2.0/node_modules/micromark-util-sanitize-uri/index.js", "../../node_modules/.pnpm/mdast-util-to-hast@12.3.0/node_modules/mdast-util-to-hast/lib/handlers/footnote-reference.js", "../../node_modules/.pnpm/mdast-util-to-hast@12.3.0/node_modules/mdast-util-to-hast/lib/handlers/footnote.js", "../../node_modules/.pnpm/mdast-util-to-hast@12.3.0/node_modules/mdast-util-to-hast/lib/handlers/heading.js", "../../node_modules/.pnpm/mdast-util-to-hast@12.3.0/node_modules/mdast-util-to-hast/lib/handlers/html.js", "../../node_modules/.pnpm/mdast-util-to-hast@12.3.0/node_modules/mdast-util-to-hast/lib/revert.js", "../../node_modules/.pnpm/mdast-util-to-hast@12.3.0/node_modules/mdast-util-to-hast/lib/handlers/image-reference.js", "../../node_modules/.pnpm/mdast-util-to-hast@12.3.0/node_modules/mdast-util-to-hast/lib/handlers/image.js", "../../node_modules/.pnpm/mdast-util-to-hast@12.3.0/node_modules/mdast-util-to-hast/lib/handlers/inline-code.js", "../../node_modules/.pnpm/mdast-util-to-hast@12.3.0/node_modules/mdast-util-to-hast/lib/handlers/link-reference.js", "../../node_modules/.pnpm/mdast-util-to-hast@12.3.0/node_modules/mdast-util-to-hast/lib/handlers/link.js", "../../node_modules/.pnpm/mdast-util-to-hast@12.3.0/node_modules/mdast-util-to-hast/lib/handlers/list-item.js", "../../node_modules/.pnpm/mdast-util-to-hast@12.3.0/node_modules/mdast-util-to-hast/lib/handlers/list.js", "../../node_modules/.pnpm/mdast-util-to-hast@12.3.0/node_modules/mdast-util-to-hast/lib/handlers/paragraph.js", "../../node_modules/.pnpm/mdast-util-to-hast@12.3.0/node_modules/mdast-util-to-hast/lib/handlers/root.js", "../../node_modules/.pnpm/mdast-util-to-hast@12.3.0/node_modules/mdast-util-to-hast/lib/handlers/strong.js", "../../node_modules/.pnpm/unist-util-position@4.0.4/node_modules/unist-util-position/lib/index.js", "../../node_modules/.pnpm/mdast-util-to-hast@12.3.0/node_modules/mdast-util-to-hast/lib/handlers/table.js", "../../node_modules/.pnpm/mdast-util-to-hast@12.3.0/node_modules/mdast-util-to-hast/lib/handlers/table-row.js", "../../node_modules/.pnpm/mdast-util-to-hast@12.3.0/node_modules/mdast-util-to-hast/lib/handlers/table-cell.js", "../../node_modules/.pnpm/trim-lines@3.0.1/node_modules/trim-lines/index.js", "../../node_modules/.pnpm/mdast-util-to-hast@12.3.0/node_modules/mdast-util-to-hast/lib/handlers/text.js", "../../node_modules/.pnpm/mdast-util-to-hast@12.3.0/node_modules/mdast-util-to-hast/lib/handlers/thematic-break.js", "../../node_modules/.pnpm/mdast-util-to-hast@12.3.0/node_modules/mdast-util-to-hast/lib/handlers/index.js", "../../node_modules/.pnpm/unist-util-is@5.2.1/node_modules/unist-util-is/lib/index.js", "../../node_modules/.pnpm/unist-util-visit-parents@5.1.3/node_modules/unist-util-visit-parents/lib/index.js", "../../node_modules/.pnpm/unist-util-visit@4.1.2/node_modules/unist-util-visit/lib/index.js", "../../node_modules/.pnpm/unist-util-generated@2.0.1/node_modules/unist-util-generated/lib/index.js", "../../node_modules/.pnpm/mdast-util-definitions@5.1.2/node_modules/mdast-util-definitions/lib/index.js", "../../node_modules/.pnpm/mdast-util-to-hast@12.3.0/node_modules/mdast-util-to-hast/lib/state.js", "../../node_modules/.pnpm/mdast-util-to-hast@12.3.0/node_modules/mdast-util-to-hast/lib/footer.js", "../../node_modules/.pnpm/mdast-util-to-hast@12.3.0/node_modules/mdast-util-to-hast/lib/index.js", "../../node_modules/.pnpm/remark-rehype@10.1.0/node_modules/remark-rehype/lib/index.js", "../../node_modules/.pnpm/property-information@6.5.0/node_modules/property-information/lib/util/schema.js", "../../node_modules/.pnpm/property-information@6.5.0/node_modules/property-information/lib/util/merge.js", "../../node_modules/.pnpm/property-information@6.5.0/node_modules/property-information/lib/normalize.js", "../../node_modules/.pnpm/property-information@6.5.0/node_modules/property-information/lib/util/info.js", "../../node_modules/.pnpm/property-information@6.5.0/node_modules/property-information/lib/util/types.js", "../../node_modules/.pnpm/property-information@6.5.0/node_modules/property-information/lib/util/defined-info.js", "../../node_modules/.pnpm/property-information@6.5.0/node_modules/property-information/lib/util/create.js", "../../node_modules/.pnpm/property-information@6.5.0/node_modules/property-information/lib/xlink.js", "../../node_modules/.pnpm/property-information@6.5.0/node_modules/property-information/lib/xml.js", "../../node_modules/.pnpm/property-information@6.5.0/node_modules/property-information/lib/util/case-sensitive-transform.js", "../../node_modules/.pnpm/property-information@6.5.0/node_modules/property-information/lib/util/case-insensitive-transform.js", "../../node_modules/.pnpm/property-information@6.5.0/node_modules/property-information/lib/xmlns.js", "../../node_modules/.pnpm/property-information@6.5.0/node_modules/property-information/lib/aria.js", "../../node_modules/.pnpm/property-information@6.5.0/node_modules/property-information/lib/html.js", "../../node_modules/.pnpm/property-information@6.5.0/node_modules/property-information/lib/svg.js", "../../node_modules/.pnpm/property-information@6.5.0/node_modules/property-information/lib/find.js", "../../node_modules/.pnpm/property-information@6.5.0/node_modules/property-information/lib/hast-to-react.js", "../../node_modules/.pnpm/property-information@6.5.0/node_modules/property-information/index.js", "../../node_modules/.pnpm/react-markdown@8.0.4_@types+react@18.3.31_react@18.3.1_supports-color@7.2.0/node_modules/react-markdown/lib/rehype-filter.js", "../../node_modules/.pnpm/react-markdown@8.0.4_@types+react@18.3.31_react@18.3.1_supports-color@7.2.0/node_modules/react-markdown/lib/ast-to-react.js", "../../node_modules/.pnpm/hast-util-whitespace@2.0.1/node_modules/hast-util-whitespace/index.js", "../../node_modules/.pnpm/space-separated-tokens@2.0.2/node_modules/space-separated-tokens/index.js", "../../node_modules/.pnpm/comma-separated-tokens@2.0.3/node_modules/comma-separated-tokens/index.js", "../../src/util/variant-colors.ts", "../../src/components/ChatProductCarousel.tsx", "../../src/util/constrain-image.ts", "../../src/util/format-price.ts", "../../src/util/shopping-assistant-nav.ts", "../../src/hooks/useInView.ts", "../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs", "../../node_modules/.pnpm/tailwind-merge@3.6.0/node_modules/tailwind-merge/src/lib/utils.ts", "../../node_modules/.pnpm/tailwind-merge@3.6.0/node_modules/tailwind-merge/src/lib/class-group-utils.ts", "../../node_modules/.pnpm/tailwind-merge@3.6.0/node_modules/tailwind-merge/src/lib/lru-cache.ts", "../../node_modules/.pnpm/tailwind-merge@3.6.0/node_modules/tailwind-merge/src/lib/parse-class-name.ts", "../../node_modules/.pnpm/tailwind-merge@3.6.0/node_modules/tailwind-merge/src/lib/sort-modifiers.ts", "../../node_modules/.pnpm/tailwind-merge@3.6.0/node_modules/tailwind-merge/src/lib/config-utils.ts", "../../node_modules/.pnpm/tailwind-merge@3.6.0/node_modules/tailwind-merge/src/lib/merge-classlist.ts", "../../node_modules/.pnpm/tailwind-merge@3.6.0/node_modules/tailwind-merge/src/lib/tw-join.ts", "../../node_modules/.pnpm/tailwind-merge@3.6.0/node_modules/tailwind-merge/src/lib/create-tailwind-merge.ts", "../../node_modules/.pnpm/tailwind-merge@3.6.0/node_modules/tailwind-merge/src/lib/from-theme.ts", "../../node_modules/.pnpm/tailwind-merge@3.6.0/node_modules/tailwind-merge/src/lib/validators.ts", "../../node_modules/.pnpm/tailwind-merge@3.6.0/node_modules/tailwind-merge/src/lib/default-config.ts", "../../node_modules/.pnpm/tailwind-merge@3.6.0/node_modules/tailwind-merge/src/lib/merge-configs.ts", "../../node_modules/.pnpm/tailwind-merge@3.6.0/node_modules/tailwind-merge/src/lib/extend-tailwind-merge.ts", "../../node_modules/.pnpm/tailwind-merge@3.6.0/node_modules/tailwind-merge/src/lib/tw-merge.ts", "../../src/util/cn.ts", "../../src/components/SuggestedReplies.tsx", "../../src/components/SuggestionPillList.tsx", "../../src/components/WelcomeRecsCarousel.tsx", "../../node_modules/.pnpm/micromark-extension-gfm-autolink-literal@1.0.5/node_modules/micromark-extension-gfm-autolink-literal/lib/syntax.js", "../../node_modules/.pnpm/micromark-extension-gfm-footnote@1.1.2/node_modules/micromark-extension-gfm-footnote/lib/syntax.js", "../../node_modules/.pnpm/micromark-extension-gfm-strikethrough@1.0.7/node_modules/micromark-extension-gfm-strikethrough/lib/syntax.js", "../../node_modules/.pnpm/micromark-extension-gfm-table@1.0.7/node_modules/micromark-extension-gfm-table/lib/edit-map.js", "../../node_modules/.pnpm/micromark-extension-gfm-table@1.0.7/node_modules/micromark-extension-gfm-table/lib/infer.js", "../../node_modules/.pnpm/micromark-extension-gfm-table@1.0.7/node_modules/micromark-extension-gfm-table/lib/syntax.js", "../../node_modules/.pnpm/micromark-extension-gfm-task-list-item@1.0.5/node_modules/micromark-extension-gfm-task-list-item/lib/syntax.js", "../../node_modules/.pnpm/micromark-extension-gfm@2.0.3/node_modules/micromark-extension-gfm/index.js", "../../node_modules/.pnpm/ccount@2.0.1/node_modules/ccount/index.js", "../../node_modules/.pnpm/escape-string-regexp@5.0.0/node_modules/escape-string-regexp/index.js", "../../node_modules/.pnpm/mdast-util-find-and-replace@2.2.2/node_modules/mdast-util-find-and-replace/lib/index.js", "../../node_modules/.pnpm/mdast-util-gfm-autolink-literal@1.0.3/node_modules/mdast-util-gfm-autolink-literal/lib/index.js", "../../node_modules/.pnpm/mdast-util-to-markdown@1.5.0/node_modules/mdast-util-to-markdown/lib/util/association.js", "../../node_modules/.pnpm/mdast-util-to-markdown@1.5.0/node_modules/mdast-util-to-markdown/lib/util/container-flow.js", "../../node_modules/.pnpm/mdast-util-to-markdown@1.5.0/node_modules/mdast-util-to-markdown/lib/util/indent-lines.js", "../../node_modules/.pnpm/mdast-util-to-markdown@1.5.0/node_modules/mdast-util-to-markdown/lib/util/pattern-compile.js", "../../node_modules/.pnpm/mdast-util-to-markdown@1.5.0/node_modules/mdast-util-to-markdown/lib/util/pattern-in-scope.js", "../../node_modules/.pnpm/mdast-util-to-markdown@1.5.0/node_modules/mdast-util-to-markdown/lib/util/safe.js", "../../node_modules/.pnpm/mdast-util-to-markdown@1.5.0/node_modules/mdast-util-to-markdown/lib/util/track.js", "../../node_modules/.pnpm/mdast-util-gfm-footnote@1.0.2/node_modules/mdast-util-gfm-footnote/lib/index.js", "../../node_modules/.pnpm/mdast-util-to-markdown@1.5.0/node_modules/mdast-util-to-markdown/lib/util/container-phrasing.js", "../../node_modules/.pnpm/mdast-util-gfm-strikethrough@1.0.3/node_modules/mdast-util-gfm-strikethrough/lib/index.js", "../../node_modules/.pnpm/mdast-util-to-markdown@1.5.0/node_modules/mdast-util-to-markdown/lib/handle/inline-code.js", "../../node_modules/.pnpm/markdown-table@3.0.4/node_modules/markdown-table/index.js", "../../node_modules/.pnpm/mdast-util-gfm-table@1.0.7_supports-color@7.2.0/node_modules/mdast-util-gfm-table/lib/index.js", "../../node_modules/.pnpm/mdast-util-to-markdown@1.5.0/node_modules/mdast-util-to-markdown/lib/util/check-bullet.js", "../../node_modules/.pnpm/mdast-util-to-markdown@1.5.0/node_modules/mdast-util-to-markdown/lib/util/check-list-item-indent.js", "../../node_modules/.pnpm/mdast-util-to-markdown@1.5.0/node_modules/mdast-util-to-markdown/lib/handle/list-item.js", "../../node_modules/.pnpm/mdast-util-gfm-task-list-item@1.0.2/node_modules/mdast-util-gfm-task-list-item/lib/index.js", "../../node_modules/.pnpm/mdast-util-gfm@2.0.2_supports-color@7.2.0/node_modules/mdast-util-gfm/lib/index.js", "../../node_modules/.pnpm/remark-gfm@3.0.1_supports-color@7.2.0/node_modules/remark-gfm/index.js", "../../src/components/ChatPanel.tsx", "../../src/i18n/resources.ts", "../../node_modules/.pnpm/i18next@23.16.8/node_modules/i18next/dist/esm/i18next.js", "../../src/i18n/index.ts", "../../src/hooks/useChatAnalytics.ts", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/runtime.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Entity.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ReplayToolCall.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/AppApiEndpointsAisOnboardingAgentSchemaReplayMessage.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/BrandStylingColorPair.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/BrandStylingColors.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/BrandTextStyle.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/BrandStylingButtonFont.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/BrandStylingButton.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/BrandStylingButtonText.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/BrandStylingButtons.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/PaletteColor.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/BrandStylingFontVariant.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/BrandStylingFontSlot.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/BrandStylingFonts.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/FontSpec.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Typography.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/BrandStylingArtifact.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/AisProvisioningCompetitor.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/AisProvisioningTotals.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/AisProvisioningPrompt.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/AisProvisioningPromptCategory.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/AisProvisioningArtifact.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/WebsiteSnapshotCard.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/IdentityArtifact.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/KnowledgeBaseDocument.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/KnowledgeBaseArtifact.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/VoiceAudience.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/VoiceCard.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/BrandVoiceArtifact.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ProductCatalogArtifact.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ProductSyncArtifact.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/AiscSourceContextArtifact.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/AisFunnelGenerationArtifact.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/EcommerceArtifact.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/OnboardingArtifacts.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/SuggestedAction.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/MissingRequirement.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/SuggestedPlanStep.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ToolAvailability.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/OnboardingReadModel.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/AISOnboardingConversationResponse.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/AISOnboardingRequest.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/UserSelectedSelector.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/UserFeedback.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/BatchCustomizationRequest.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/AnomalyContext.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/BehavioralAnomalyRequest.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ClickRequest.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ConsultativeAssistantRequest.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ConsultativeAssistantResponse.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/DPPExperimentCreationRequest.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ExperimentVariant.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ExperimentConfig.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/DPPExperimentCreationResponse1.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/DetectorRunRequest.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/DetectorRunResponse.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/GenerateBrandVoiceRequest.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/GenerateBrandVoiceResponse.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/GenerateImageRequest.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/GenerateImageResponse.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/GenerateTitleRequest.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/GenerateTitleResponse.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/HealthCheckResponse.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/MainSiteSnippetResponse.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ModuleCustomizationPropChange.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ModuleCustomizationCSSDeclarationChange.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ModuleCustomizationSessionChange.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/LiftedSchemaEntry.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/CSSRule.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ModuleCustomizationResponse.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/StyleTransferResult1.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ModuleAgentType.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/CustomModuleConfigField.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/CustomModuleBundleResponse.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ClarifyingQuestionOption.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ClarifyingQuestion.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/CalloutBlock.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ChartSeries.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/PieSlice.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ChartDatum.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ChartBlock.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/DividerBlock.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/HeadingBlock.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/KpiItem.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/KpiGridBlock.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ListBlock.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ParagraphBlock.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/SessionListBlock.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/TableColumn.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/TableBlock.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/DocumentBlocksInner.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Document.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/AgentResponse.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ModuleCustomizationResult.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/BatchCustomizationResponse.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ModuleAgentOutput.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ModuleAgentContextRequirement.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ShopMetadata.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ModuleAgentTool.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ModuleAgentRequest.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ModuleCustomizationSingleRequest.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ModuleGeneratorRequest.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/GeneratedModuleStatus.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ModuleJobResponse.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ClarifyingQuestionAnswer.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/EditorContext.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/OmniAgentRequest.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/RateLimitStatus.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/SamuelCapabilities.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/SamuelRequest.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/SamuelResponse.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/SearchRequest.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ShoppingAssistantRequest.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ShoppingAssistantResponse.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ShoppingAssistantV2Request.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/SimilarRequest.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/SimilarResult.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/SimilarResponse.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/StartModuleJobRequest.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/PersistedShop.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/SessionRef.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/BundleInfo.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ButtonWidth.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Category.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/AspectRatio1.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ButtonStyle.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ButtonAttributes.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/CtaButton1.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/CtaBorderRad.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Alignment.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Format.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Display1.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Placement1.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Navigation.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Mobile6.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Desktop7.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Padding1.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Mobile5.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Desktop6.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Size1.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Spacing1.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/AspectRatio3.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Display.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Attrs5.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Carousel.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Media.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Y1.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/X1.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Height.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Width.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Crop.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/AspectRatio.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Zoom.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Desktop.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Mobile.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Layout1.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ImageAttributes.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/DesktopItem.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/MobileItem.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Media3.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Components3.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/DeviceType.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Layout.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/DeliveryCadenceOrder.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ViewType.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/SubscriptionOptions.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/VariantSelectorModule.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/HeroProduct.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/TestimonialReview.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/TabStyle.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/StickyPosition.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Color.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/CtaBtnStyle.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Section.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Avatar.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Theme.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Style.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/ButtonStyle1.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Name.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Icon.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Position2.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Module.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/Response1.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/StrategizeOutput.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/StrategizeOutput1.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/models/VariantComparisonRequest.js", "../../node_modules/.pnpm/@fermat+agents-api@0.2.15/node_modules/@fermat/agents-api/dist/esm/apis/DefaultApi.js", "../../src/hooks/useChatMutation.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/tools/display.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/tools/catchUserErrors.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/tools/utils/numberUtils.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/tools/utils/timeUtils.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/tools/utils/byteUtils.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/tools/utils/polyfills.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/tools/utils/objectUtils.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/tools/getGlobalObject.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/tools/getZoneJsOriginalValue.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/tools/monitor.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/tools/timer.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/tools/observable.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/tools/utils/functionUtils.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/tools/utils/stringUtils.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/tools/utils/browserDetection.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/tools/experimentalFeatures.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/browser/cookie.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/domain/session/storeStrategies/sessionStoreStrategy.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/tools/utils/typeUtils.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/domain/user/user.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/domain/session/sessionConstants.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/domain/session/sessionStateValidation.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/domain/session/sessionState.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/domain/session/oldCookiesMigration.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/domain/session/storeStrategies/sessionInCookie.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/domain/session/storeStrategies/sessionInLocalStorage.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/domain/session/sessionStoreOperations.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/domain/session/sessionStore.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/domain/trackingConsent.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/tools/serialisation/jsonStringify.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/tools/utils/urlPolyfill.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/domain/configuration/intakeSites.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/domain/configuration/endpointBuilder.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/domain/configuration/tags.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/domain/configuration/transportConfiguration.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/domain/configuration/configuration.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/tools/stackTrace/computeStackTrace.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/tools/stackTrace/handlingStack.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/tools/instrumentMethod.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/tools/serialisation/sanitize.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/domain/error/error.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/domain/error/error.types.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/domain/error/trackRuntimeError.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/boot/init.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/boot/displayAlreadyInitializedError.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/browser/addEventListener.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/domain/report/reportObservable.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/tools/sendToExtension.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/tools/mergeInto.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/domain/connectivity/connectivity.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/tools/utils/arrayUtils.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/tools/boundedBuffer.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/domain/telemetry/rawTelemetryEvent.types.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/domain/telemetry/telemetry.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/tools/valueHistory.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/domain/session/sessionManager.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/tools/utils/responseUtils.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/transport/sendWithRetryStrategy.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/transport/httpRequest.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/transport/eventBridge.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/browser/pageExitObservable.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/transport/batch.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/transport/flushController.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/transport/startBatchWithReplica.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/tools/encoder.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/tools/abstractLifeCycle.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/domain/eventRateLimiter/createEventRateLimiter.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/browser/xhrObservable.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/browser/fetchObservable.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/domain/console/consoleObservable.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/domain/context/contextManager.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/domain/context/storeContextManager.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/domain/context/customerDataTracker.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/tools/readBytesFromStream.ts", "../../node_modules/.pnpm/@datadog+browser-core@5.35.1/node_modules/@datadog/browser-core/src/domain/synthetics/syntheticsWorkerValues.ts", "../../node_modules/.pnpm/@datadog+browser-logs@5.35.1/node_modules/@datadog/browser-logs/src/domain/logger/isAuthorized.ts", "../../node_modules/.pnpm/@datadog+browser-logs@5.35.1/node_modules/@datadog/browser-logs/src/domain/createErrorFieldFromRawError.ts", "../../node_modules/.pnpm/@datadog+browser-logs@5.35.1/node_modules/@datadog/browser-logs/src/domain/logger.ts", "../../node_modules/.pnpm/@datadog+browser-logs@5.35.1/node_modules/@datadog/browser-logs/src/domain/contexts/commonContext.ts", "../../node_modules/.pnpm/@datadog+browser-logs@5.35.1/node_modules/@datadog/browser-logs/src/domain/configuration.ts", "../../node_modules/.pnpm/@datadog+browser-logs@5.35.1/node_modules/@datadog/browser-logs/src/boot/preStartLogs.ts", "../../node_modules/.pnpm/@datadog+browser-logs@5.35.1/node_modules/@datadog/browser-logs/src/boot/logsPublicApi.ts", "../../node_modules/.pnpm/@datadog+browser-logs@5.35.1/node_modules/@datadog/browser-logs/src/domain/logsSessionManager.ts", "../../node_modules/.pnpm/@datadog+browser-logs@5.35.1/node_modules/@datadog/browser-logs/src/domain/contexts/rumInternalContext.ts", "../../node_modules/.pnpm/@datadog+browser-logs@5.35.1/node_modules/@datadog/browser-logs/src/domain/assembly.ts", "../../node_modules/.pnpm/@datadog+browser-logs@5.35.1/node_modules/@datadog/browser-logs/src/domain/console/consoleCollection.ts", "../../node_modules/.pnpm/@datadog+browser-logs@5.35.1/node_modules/@datadog/browser-logs/src/domain/report/reportCollection.ts", "../../node_modules/.pnpm/@datadog+browser-logs@5.35.1/node_modules/@datadog/browser-logs/src/domain/networkError/networkErrorCollection.ts", "../../node_modules/.pnpm/@datadog+browser-logs@5.35.1/node_modules/@datadog/browser-logs/src/domain/runtimeError/runtimeErrorCollection.ts", "../../node_modules/.pnpm/@datadog+browser-logs@5.35.1/node_modules/@datadog/browser-logs/src/domain/lifeCycle.ts", "../../node_modules/.pnpm/@datadog+browser-logs@5.35.1/node_modules/@datadog/browser-logs/src/domain/logger/loggerCollection.ts", "../../node_modules/.pnpm/@datadog+browser-logs@5.35.1/node_modules/@datadog/browser-logs/src/transport/startLogsBatch.ts", "../../node_modules/.pnpm/@datadog+browser-logs@5.35.1/node_modules/@datadog/browser-logs/src/transport/startLogsBridge.ts", "../../node_modules/.pnpm/@datadog+browser-logs@5.35.1/node_modules/@datadog/browser-logs/src/domain/contexts/internalContext.ts", "../../node_modules/.pnpm/@datadog+browser-logs@5.35.1/node_modules/@datadog/browser-logs/src/domain/reportError.ts", "../../node_modules/.pnpm/@datadog+browser-logs@5.35.1/node_modules/@datadog/browser-logs/src/domain/logsTelemetry.ts", "../../node_modules/.pnpm/@datadog+browser-logs@5.35.1/node_modules/@datadog/browser-logs/src/boot/startLogs.ts", "../../node_modules/.pnpm/@datadog+browser-logs@5.35.1/node_modules/@datadog/browser-logs/src/entries/main.ts", "../../src/util/datadog-logger.ts", "../../src/util/theme-vars.ts", "../../src/host/environments.ts", "../../src/components/SamuelFacade.tsx"],
  "sourcesContent": ["/**\n * @license React\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var l=Symbol.for(\"react.element\"),n=Symbol.for(\"react.portal\"),p=Symbol.for(\"react.fragment\"),q=Symbol.for(\"react.strict_mode\"),r=Symbol.for(\"react.profiler\"),t=Symbol.for(\"react.provider\"),u=Symbol.for(\"react.context\"),v=Symbol.for(\"react.forward_ref\"),w=Symbol.for(\"react.suspense\"),x=Symbol.for(\"react.memo\"),y=Symbol.for(\"react.lazy\"),z=Symbol.iterator;function A(a){if(null===a||\"object\"!==typeof a)return null;a=z&&a[z]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}\nvar B={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,D={};function E(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}E.prototype.isReactComponent={};\nE.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(\"setState(...): takes an object of state variables to update or a function which returns an object of state variables.\");this.updater.enqueueSetState(this,a,b,\"setState\")};E.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};function F(){}F.prototype=E.prototype;function G(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}var H=G.prototype=new F;\nH.constructor=G;C(H,E.prototype);H.isPureReactComponent=!0;var I=Array.isArray,J=Object.prototype.hasOwnProperty,K={current:null},L={key:!0,ref:!0,__self:!0,__source:!0};\nfunction M(a,b,e){var d,c={},k=null,h=null;if(null!=b)for(d in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=\"\"+b.key),b)J.call(b,d)&&!L.hasOwnProperty(d)&&(c[d]=b[d]);var g=arguments.length-2;if(1===g)c.children=e;else if(1<g){for(var f=Array(g),m=0;m<g;m++)f[m]=arguments[m+2];c.children=f}if(a&&a.defaultProps)for(d in g=a.defaultProps,g)void 0===c[d]&&(c[d]=g[d]);return{$$typeof:l,type:a,key:k,ref:h,props:c,_owner:K.current}}\nfunction N(a,b){return{$$typeof:l,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}}function O(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===l}function escape(a){var b={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+a.replace(/[=:]/g,function(a){return b[a]})}var P=/\\/+/g;function Q(a,b){return\"object\"===typeof a&&null!==a&&null!=a.key?escape(\"\"+a.key):b.toString(36)}\nfunction R(a,b,e,d,c){var k=typeof a;if(\"undefined\"===k||\"boolean\"===k)a=null;var h=!1;if(null===a)h=!0;else switch(k){case \"string\":case \"number\":h=!0;break;case \"object\":switch(a.$$typeof){case l:case n:h=!0}}if(h)return h=a,c=c(h),a=\"\"===d?\".\"+Q(h,0):d,I(c)?(e=\"\",null!=a&&(e=a.replace(P,\"$&/\")+\"/\"),R(c,b,e,\"\",function(a){return a})):null!=c&&(O(c)&&(c=N(c,e+(!c.key||h&&h.key===c.key?\"\":(\"\"+c.key).replace(P,\"$&/\")+\"/\")+a)),b.push(c)),1;h=0;d=\"\"===d?\".\":d+\":\";if(I(a))for(var g=0;g<a.length;g++){k=\na[g];var f=d+Q(k,g);h+=R(k,b,e,f,c)}else if(f=A(a),\"function\"===typeof f)for(a=f.call(a),g=0;!(k=a.next()).done;)k=k.value,f=d+Q(k,g++),h+=R(k,b,e,f,c);else if(\"object\"===k)throw b=String(a),Error(\"Objects are not valid as a React child (found: \"+(\"[object Object]\"===b?\"object with keys {\"+Object.keys(a).join(\", \")+\"}\":b)+\"). If you meant to render a collection of children, use an array instead.\");return h}\nfunction S(a,b,e){if(null==a)return a;var d=[],c=0;R(a,d,\"\",\"\",function(a){return b.call(e,a,c++)});return d}function T(a){if(-1===a._status){var b=a._result;b=b();b.then(function(b){if(0===a._status||-1===a._status)a._status=1,a._result=b},function(b){if(0===a._status||-1===a._status)a._status=2,a._result=b});-1===a._status&&(a._status=0,a._result=b)}if(1===a._status)return a._result.default;throw a._result;}\nvar U={current:null},V={transition:null},W={ReactCurrentDispatcher:U,ReactCurrentBatchConfig:V,ReactCurrentOwner:K};function X(){throw Error(\"act(...) is not supported in production builds of React.\");}\nexports.Children={map:S,forEach:function(a,b,e){S(a,function(){b.apply(this,arguments)},e)},count:function(a){var b=0;S(a,function(){b++});return b},toArray:function(a){return S(a,function(a){return a})||[]},only:function(a){if(!O(a))throw Error(\"React.Children.only expected to receive a single React element child.\");return a}};exports.Component=E;exports.Fragment=p;exports.Profiler=r;exports.PureComponent=G;exports.StrictMode=q;exports.Suspense=w;\nexports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=W;exports.act=X;\nexports.cloneElement=function(a,b,e){if(null===a||void 0===a)throw Error(\"React.cloneElement(...): The argument must be a React element, but you passed \"+a+\".\");var d=C({},a.props),c=a.key,k=a.ref,h=a._owner;if(null!=b){void 0!==b.ref&&(k=b.ref,h=K.current);void 0!==b.key&&(c=\"\"+b.key);if(a.type&&a.type.defaultProps)var g=a.type.defaultProps;for(f in b)J.call(b,f)&&!L.hasOwnProperty(f)&&(d[f]=void 0===b[f]&&void 0!==g?g[f]:b[f])}var f=arguments.length-2;if(1===f)d.children=e;else if(1<f){g=Array(f);\nfor(var m=0;m<f;m++)g[m]=arguments[m+2];d.children=g}return{$$typeof:l,type:a.type,key:c,ref:k,props:d,_owner:h}};exports.createContext=function(a){a={$$typeof:u,_currentValue:a,_currentValue2:a,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null};a.Provider={$$typeof:t,_context:a};return a.Consumer=a};exports.createElement=M;exports.createFactory=function(a){var b=M.bind(null,a);b.type=a;return b};exports.createRef=function(){return{current:null}};\nexports.forwardRef=function(a){return{$$typeof:v,render:a}};exports.isValidElement=O;exports.lazy=function(a){return{$$typeof:y,_payload:{_status:-1,_result:a},_init:T}};exports.memo=function(a,b){return{$$typeof:x,type:a,compare:void 0===b?null:b}};exports.startTransition=function(a){var b=V.transition;V.transition={};try{a()}finally{V.transition=b}};exports.unstable_act=X;exports.useCallback=function(a,b){return U.current.useCallback(a,b)};exports.useContext=function(a){return U.current.useContext(a)};\nexports.useDebugValue=function(){};exports.useDeferredValue=function(a){return U.current.useDeferredValue(a)};exports.useEffect=function(a,b){return U.current.useEffect(a,b)};exports.useId=function(){return U.current.useId()};exports.useImperativeHandle=function(a,b,e){return U.current.useImperativeHandle(a,b,e)};exports.useInsertionEffect=function(a,b){return U.current.useInsertionEffect(a,b)};exports.useLayoutEffect=function(a,b){return U.current.useLayoutEffect(a,b)};\nexports.useMemo=function(a,b){return U.current.useMemo(a,b)};exports.useReducer=function(a,b,e){return U.current.useReducer(a,b,e)};exports.useRef=function(a){return U.current.useRef(a)};exports.useState=function(a){return U.current.useState(a)};exports.useSyncExternalStore=function(a,b,e){return U.current.useSyncExternalStore(a,b,e)};exports.useTransition=function(){return U.current.useTransition()};exports.version=\"18.3.1\";\n", "'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react.production.min.js');\n} else {\n  module.exports = require('./cjs/react.development.js');\n}\n", "/**\n * @license React\n * scheduler.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';function f(a,b){var c=a.length;a.push(b);a:for(;0<c;){var d=c-1>>>1,e=a[d];if(0<g(e,b))a[d]=b,a[c]=e,c=d;else break a}}function h(a){return 0===a.length?null:a[0]}function k(a){if(0===a.length)return null;var b=a[0],c=a.pop();if(c!==b){a[0]=c;a:for(var d=0,e=a.length,w=e>>>1;d<w;){var m=2*(d+1)-1,C=a[m],n=m+1,x=a[n];if(0>g(C,c))n<e&&0>g(x,C)?(a[d]=x,a[n]=c,d=n):(a[d]=C,a[m]=c,d=m);else if(n<e&&0>g(x,c))a[d]=x,a[n]=c,d=n;else break a}}return b}\nfunction g(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}var r=[],t=[],u=1,v=null,y=3,z=!1,A=!1,B=!1,D=\"function\"===typeof setTimeout?setTimeout:null,E=\"function\"===typeof clearTimeout?clearTimeout:null,F=\"undefined\"!==typeof setImmediate?setImmediate:null;\n\"undefined\"!==typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function G(a){for(var b=h(t);null!==b;){if(null===b.callback)k(t);else if(b.startTime<=a)k(t),b.sortIndex=b.expirationTime,f(r,b);else break;b=h(t)}}function H(a){B=!1;G(a);if(!A)if(null!==h(r))A=!0,I(J);else{var b=h(t);null!==b&&K(H,b.startTime-a)}}\nfunction J(a,b){A=!1;B&&(B=!1,E(L),L=-1);z=!0;var c=y;try{G(b);for(v=h(r);null!==v&&(!(v.expirationTime>b)||a&&!M());){var d=v.callback;if(\"function\"===typeof d){v.callback=null;y=v.priorityLevel;var e=d(v.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?v.callback=e:v===h(r)&&k(r);G(b)}else k(r);v=h(r)}if(null!==v)var w=!0;else{var m=h(t);null!==m&&K(H,m.startTime-b);w=!1}return w}finally{v=null,y=c,z=!1}}var N=!1,O=null,L=-1,P=5,Q=-1;\nfunction M(){return exports.unstable_now()-Q<P?!1:!0}function R(){if(null!==O){var a=exports.unstable_now();Q=a;var b=!0;try{b=O(!0,a)}finally{b?S():(N=!1,O=null)}}else N=!1}var S;if(\"function\"===typeof F)S=function(){F(R)};else if(\"undefined\"!==typeof MessageChannel){var T=new MessageChannel,U=T.port2;T.port1.onmessage=R;S=function(){U.postMessage(null)}}else S=function(){D(R,0)};function I(a){O=a;N||(N=!0,S())}function K(a,b){L=D(function(){a(exports.unstable_now())},b)}\nexports.unstable_IdlePriority=5;exports.unstable_ImmediatePriority=1;exports.unstable_LowPriority=4;exports.unstable_NormalPriority=3;exports.unstable_Profiling=null;exports.unstable_UserBlockingPriority=2;exports.unstable_cancelCallback=function(a){a.callback=null};exports.unstable_continueExecution=function(){A||z||(A=!0,I(J))};\nexports.unstable_forceFrameRate=function(a){0>a||125<a?console.error(\"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"):P=0<a?Math.floor(1E3/a):5};exports.unstable_getCurrentPriorityLevel=function(){return y};exports.unstable_getFirstCallbackNode=function(){return h(r)};exports.unstable_next=function(a){switch(y){case 1:case 2:case 3:var b=3;break;default:b=y}var c=y;y=b;try{return a()}finally{y=c}};exports.unstable_pauseExecution=function(){};\nexports.unstable_requestPaint=function(){};exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=y;y=a;try{return b()}finally{y=c}};\nexports.unstable_scheduleCallback=function(a,b,c){var d=exports.unstable_now();\"object\"===typeof c&&null!==c?(c=c.delay,c=\"number\"===typeof c&&0<c?d+c:d):c=d;switch(a){case 1:var e=-1;break;case 2:e=250;break;case 5:e=1073741823;break;case 4:e=1E4;break;default:e=5E3}e=c+e;a={id:u++,callback:b,priorityLevel:a,startTime:c,expirationTime:e,sortIndex:-1};c>d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};\nexports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};\n", "'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n  module.exports = require('./cjs/scheduler.development.js');\n}\n", "/**\n * @license React\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),ca=require(\"scheduler\");function p(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;c<arguments.length;c++)b+=\"&args[]=\"+encodeURIComponent(arguments[c]);return\"Minified React error #\"+a+\"; visit \"+b+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}var da=new Set,ea={};function fa(a,b){ha(a,b);ha(a+\"Capture\",b)}\nfunction ha(a,b){ea[a]=b;for(a=0;a<b.length;a++)da.add(b[a])}\nvar ia=!(\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement),ja=Object.prototype.hasOwnProperty,ka=/^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$/,la=\n{},ma={};function oa(a){if(ja.call(ma,a))return!0;if(ja.call(la,a))return!1;if(ka.test(a))return ma[a]=!0;la[a]=!0;return!1}function pa(a,b,c,d){if(null!==c&&0===c.type)return!1;switch(typeof b){case \"function\":case \"symbol\":return!0;case \"boolean\":if(d)return!1;if(null!==c)return!c.acceptsBooleans;a=a.toLowerCase().slice(0,5);return\"data-\"!==a&&\"aria-\"!==a;default:return!1}}\nfunction qa(a,b,c,d){if(null===b||\"undefined\"===typeof b||pa(a,b,c,d))return!0;if(d)return!1;if(null!==c)switch(c.type){case 3:return!b;case 4:return!1===b;case 5:return isNaN(b);case 6:return isNaN(b)||1>b}return!1}function v(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g}var z={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){z[a]=new v(a,0,!1,a,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];z[b]=new v(b,1,!1,a[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){z[a]=new v(a,2,!1,a.toLowerCase(),null,!1,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){z[a]=new v(a,2,!1,a,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){z[a]=new v(a,3,!1,a.toLowerCase(),null,!1,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){z[a]=new v(a,3,!0,a,null,!1,!1)});[\"capture\",\"download\"].forEach(function(a){z[a]=new v(a,4,!1,a,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){z[a]=new v(a,6,!1,a,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(a){z[a]=new v(a,5,!1,a.toLowerCase(),null,!1,!1)});var ra=/[\\-:]([a-z])/g;function sa(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(ra,\nsa);z[b]=new v(b,1,!1,a,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!1,!1)});\nz.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!0,!0)});\nfunction ta(a,b,c,d){var e=z.hasOwnProperty(b)?z[b]:null;if(null!==e?0!==e.type:d||!(2<b.length)||\"o\"!==b[0]&&\"O\"!==b[0]||\"n\"!==b[1]&&\"N\"!==b[1])qa(b,c,e,d)&&(c=null),d||null===e?oa(b)&&(null===c?a.removeAttribute(b):a.setAttribute(b,\"\"+c)):e.mustUseProperty?a[e.propertyName]=null===c?3===e.type?!1:\"\":c:(b=e.attributeName,d=e.attributeNamespace,null===c?a.removeAttribute(b):(e=e.type,c=3===e||4===e&&!0===c?\"\":\"\"+c,d?a.setAttributeNS(d,b,c):a.setAttribute(b,c)))}\nvar ua=aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,va=Symbol.for(\"react.element\"),wa=Symbol.for(\"react.portal\"),ya=Symbol.for(\"react.fragment\"),za=Symbol.for(\"react.strict_mode\"),Aa=Symbol.for(\"react.profiler\"),Ba=Symbol.for(\"react.provider\"),Ca=Symbol.for(\"react.context\"),Da=Symbol.for(\"react.forward_ref\"),Ea=Symbol.for(\"react.suspense\"),Fa=Symbol.for(\"react.suspense_list\"),Ga=Symbol.for(\"react.memo\"),Ha=Symbol.for(\"react.lazy\");Symbol.for(\"react.scope\");Symbol.for(\"react.debug_trace_mode\");\nvar Ia=Symbol.for(\"react.offscreen\");Symbol.for(\"react.legacy_hidden\");Symbol.for(\"react.cache\");Symbol.for(\"react.tracing_marker\");var Ja=Symbol.iterator;function Ka(a){if(null===a||\"object\"!==typeof a)return null;a=Ja&&a[Ja]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}var A=Object.assign,La;function Ma(a){if(void 0===La)try{throw Error();}catch(c){var b=c.stack.trim().match(/\\n( *(at )?)/);La=b&&b[1]||\"\"}return\"\\n\"+La+a}var Na=!1;\nfunction Oa(a,b){if(!a||Na)return\"\";Na=!0;var c=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(b)if(b=function(){throw Error();},Object.defineProperty(b.prototype,\"props\",{set:function(){throw Error();}}),\"object\"===typeof Reflect&&Reflect.construct){try{Reflect.construct(b,[])}catch(l){var d=l}Reflect.construct(a,[],b)}else{try{b.call()}catch(l){d=l}a.call(b.prototype)}else{try{throw Error();}catch(l){d=l}a()}}catch(l){if(l&&d&&\"string\"===typeof l.stack){for(var e=l.stack.split(\"\\n\"),\nf=d.stack.split(\"\\n\"),g=e.length-1,h=f.length-1;1<=g&&0<=h&&e[g]!==f[h];)h--;for(;1<=g&&0<=h;g--,h--)if(e[g]!==f[h]){if(1!==g||1!==h){do if(g--,h--,0>h||e[g]!==f[h]){var k=\"\\n\"+e[g].replace(\" at new \",\" at \");a.displayName&&k.includes(\"<anonymous>\")&&(k=k.replace(\"<anonymous>\",a.displayName));return k}while(1<=g&&0<=h)}break}}}finally{Na=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:\"\")?Ma(a):\"\"}\nfunction Pa(a){switch(a.tag){case 5:return Ma(a.type);case 16:return Ma(\"Lazy\");case 13:return Ma(\"Suspense\");case 19:return Ma(\"SuspenseList\");case 0:case 2:case 15:return a=Oa(a.type,!1),a;case 11:return a=Oa(a.type.render,!1),a;case 1:return a=Oa(a.type,!0),a;default:return\"\"}}\nfunction Qa(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ya:return\"Fragment\";case wa:return\"Portal\";case Aa:return\"Profiler\";case za:return\"StrictMode\";case Ea:return\"Suspense\";case Fa:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case Ca:return(a.displayName||\"Context\")+\".Consumer\";case Ba:return(a._context.displayName||\"Context\")+\".Provider\";case Da:var b=a.render;a=a.displayName;a||(a=b.displayName||\nb.name||\"\",a=\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");return a;case Ga:return b=a.displayName||null,null!==b?b:Qa(a.type)||\"Memo\";case Ha:b=a._payload;a=a._init;try{return Qa(a(b))}catch(c){}}return null}\nfunction Ra(a){var b=a.type;switch(a.tag){case 24:return\"Cache\";case 9:return(b.displayName||\"Context\")+\".Consumer\";case 10:return(b._context.displayName||\"Context\")+\".Provider\";case 18:return\"DehydratedFragment\";case 11:return a=b.render,a=a.displayName||a.name||\"\",b.displayName||(\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");case 7:return\"Fragment\";case 5:return b;case 4:return\"Portal\";case 3:return\"Root\";case 6:return\"Text\";case 16:return Qa(b);case 8:return b===za?\"StrictMode\":\"Mode\";case 22:return\"Offscreen\";\ncase 12:return\"Profiler\";case 21:return\"Scope\";case 13:return\"Suspense\";case 19:return\"SuspenseList\";case 25:return\"TracingMarker\";case 1:case 0:case 17:case 2:case 14:case 15:if(\"function\"===typeof b)return b.displayName||b.name||null;if(\"string\"===typeof b)return b}return null}function Sa(a){switch(typeof a){case \"boolean\":case \"number\":case \"string\":case \"undefined\":return a;case \"object\":return a;default:return\"\"}}\nfunction Ta(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction Ua(a){var b=Ta(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function Va(a){a._valueTracker||(a._valueTracker=Ua(a))}function Wa(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=Ta(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Xa(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}\nfunction Ya(a,b){var c=b.checked;return A({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Za(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Sa(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function ab(a,b){b=b.checked;null!=b&&ta(a,\"checked\",b,!1)}\nfunction bb(a,b){ab(a,b);var c=Sa(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?cb(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&cb(a,b.type,Sa(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction db(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction cb(a,b,c){if(\"number\"!==b||Xa(a.ownerDocument)!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}var eb=Array.isArray;\nfunction fb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e<c.length;e++)b[\"$\"+c[e]]=!0;for(c=0;c<a.length;c++)e=b.hasOwnProperty(\"$\"+a[c].value),a[c].selected!==e&&(a[c].selected=e),e&&d&&(a[c].defaultSelected=!0)}else{c=\"\"+Sa(c);b=null;for(e=0;e<a.length;e++){if(a[e].value===c){a[e].selected=!0;d&&(a[e].defaultSelected=!0);return}null!==b||a[e].disabled||(b=a[e])}null!==b&&(b.selected=!0)}}\nfunction gb(a,b){if(null!=b.dangerouslySetInnerHTML)throw Error(p(91));return A({},b,{value:void 0,defaultValue:void 0,children:\"\"+a._wrapperState.initialValue})}function hb(a,b){var c=b.value;if(null==c){c=b.children;b=b.defaultValue;if(null!=c){if(null!=b)throw Error(p(92));if(eb(c)){if(1<c.length)throw Error(p(93));c=c[0]}b=c}null==b&&(b=\"\");c=b}a._wrapperState={initialValue:Sa(c)}}\nfunction ib(a,b){var c=Sa(b.value),d=Sa(b.defaultValue);null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&a.defaultValue!==c&&(a.defaultValue=c));null!=d&&(a.defaultValue=\"\"+d)}function jb(a){var b=a.textContent;b===a._wrapperState.initialValue&&\"\"!==b&&null!==b&&(a.value=b)}function kb(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}\nfunction lb(a,b){return null==a||\"http://www.w3.org/1999/xhtml\"===a?kb(b):\"http://www.w3.org/2000/svg\"===a&&\"foreignObject\"===b?\"http://www.w3.org/1999/xhtml\":a}\nvar mb,nb=function(a){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(\"http://www.w3.org/2000/svg\"!==a.namespaceURI||\"innerHTML\"in a)a.innerHTML=b;else{mb=mb||document.createElement(\"div\");mb.innerHTML=\"<svg>\"+b.valueOf().toString()+\"</svg>\";for(b=mb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction ob(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar pb={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,\nzoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},qb=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(pb).forEach(function(a){qb.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);pb[b]=pb[a]})});function rb(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||pb.hasOwnProperty(a)&&pb[a]?(\"\"+b).trim():b+\"px\"}\nfunction sb(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=rb(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var tb=A({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction ub(a,b){if(b){if(tb[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(p(137,a));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(p(60));if(\"object\"!==typeof b.dangerouslySetInnerHTML||!(\"__html\"in b.dangerouslySetInnerHTML))throw Error(p(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(p(62));}}\nfunction vb(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var wb=null;function xb(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var yb=null,zb=null,Ab=null;\nfunction Bb(a){if(a=Cb(a)){if(\"function\"!==typeof yb)throw Error(p(280));var b=a.stateNode;b&&(b=Db(b),yb(a.stateNode,a.type,b))}}function Eb(a){zb?Ab?Ab.push(a):Ab=[a]:zb=a}function Fb(){if(zb){var a=zb,b=Ab;Ab=zb=null;Bb(a);if(b)for(a=0;a<b.length;a++)Bb(b[a])}}function Gb(a,b){return a(b)}function Hb(){}var Ib=!1;function Jb(a,b,c){if(Ib)return a(b,c);Ib=!0;try{return Gb(a,b,c)}finally{if(Ib=!1,null!==zb||null!==Ab)Hb(),Fb()}}\nfunction Kb(a,b){var c=a.stateNode;if(null===c)return null;var d=Db(c);if(null===d)return null;c=d[b];a:switch(b){case \"onClick\":case \"onClickCapture\":case \"onDoubleClick\":case \"onDoubleClickCapture\":case \"onMouseDown\":case \"onMouseDownCapture\":case \"onMouseMove\":case \"onMouseMoveCapture\":case \"onMouseUp\":case \"onMouseUpCapture\":case \"onMouseEnter\":(d=!d.disabled)||(a=a.type,d=!(\"button\"===a||\"input\"===a||\"select\"===a||\"textarea\"===a));a=!d;break a;default:a=!1}if(a)return null;if(c&&\"function\"!==\ntypeof c)throw Error(p(231,b,typeof c));return c}var Lb=!1;if(ia)try{var Mb={};Object.defineProperty(Mb,\"passive\",{get:function(){Lb=!0}});window.addEventListener(\"test\",Mb,Mb);window.removeEventListener(\"test\",Mb,Mb)}catch(a){Lb=!1}function Nb(a,b,c,d,e,f,g,h,k){var l=Array.prototype.slice.call(arguments,3);try{b.apply(c,l)}catch(m){this.onError(m)}}var Ob=!1,Pb=null,Qb=!1,Rb=null,Sb={onError:function(a){Ob=!0;Pb=a}};function Tb(a,b,c,d,e,f,g,h,k){Ob=!1;Pb=null;Nb.apply(Sb,arguments)}\nfunction Ub(a,b,c,d,e,f,g,h,k){Tb.apply(this,arguments);if(Ob){if(Ob){var l=Pb;Ob=!1;Pb=null}else throw Error(p(198));Qb||(Qb=!0,Rb=l)}}function Vb(a){var b=a,c=a;if(a.alternate)for(;b.return;)b=b.return;else{a=b;do b=a,0!==(b.flags&4098)&&(c=b.return),a=b.return;while(a)}return 3===b.tag?c:null}function Wb(a){if(13===a.tag){var b=a.memoizedState;null===b&&(a=a.alternate,null!==a&&(b=a.memoizedState));if(null!==b)return b.dehydrated}return null}function Xb(a){if(Vb(a)!==a)throw Error(p(188));}\nfunction Yb(a){var b=a.alternate;if(!b){b=Vb(a);if(null===b)throw Error(p(188));return b!==a?null:a}for(var c=a,d=b;;){var e=c.return;if(null===e)break;var f=e.alternate;if(null===f){d=e.return;if(null!==d){c=d;continue}break}if(e.child===f.child){for(f=e.child;f;){if(f===c)return Xb(e),a;if(f===d)return Xb(e),b;f=f.sibling}throw Error(p(188));}if(c.return!==d.return)c=e,d=f;else{for(var g=!1,h=e.child;h;){if(h===c){g=!0;c=e;d=f;break}if(h===d){g=!0;d=e;c=f;break}h=h.sibling}if(!g){for(h=f.child;h;){if(h===\nc){g=!0;c=f;d=e;break}if(h===d){g=!0;d=f;c=e;break}h=h.sibling}if(!g)throw Error(p(189));}}if(c.alternate!==d)throw Error(p(190));}if(3!==c.tag)throw Error(p(188));return c.stateNode.current===c?a:b}function Zb(a){a=Yb(a);return null!==a?$b(a):null}function $b(a){if(5===a.tag||6===a.tag)return a;for(a=a.child;null!==a;){var b=$b(a);if(null!==b)return b;a=a.sibling}return null}\nvar ac=ca.unstable_scheduleCallback,bc=ca.unstable_cancelCallback,cc=ca.unstable_shouldYield,dc=ca.unstable_requestPaint,B=ca.unstable_now,ec=ca.unstable_getCurrentPriorityLevel,fc=ca.unstable_ImmediatePriority,gc=ca.unstable_UserBlockingPriority,hc=ca.unstable_NormalPriority,ic=ca.unstable_LowPriority,jc=ca.unstable_IdlePriority,kc=null,lc=null;function mc(a){if(lc&&\"function\"===typeof lc.onCommitFiberRoot)try{lc.onCommitFiberRoot(kc,a,void 0,128===(a.current.flags&128))}catch(b){}}\nvar oc=Math.clz32?Math.clz32:nc,pc=Math.log,qc=Math.LN2;function nc(a){a>>>=0;return 0===a?32:31-(pc(a)/qc|0)|0}var rc=64,sc=4194304;\nfunction tc(a){switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return a&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;\ndefault:return a}}function uc(a,b){var c=a.pendingLanes;if(0===c)return 0;var d=0,e=a.suspendedLanes,f=a.pingedLanes,g=c&268435455;if(0!==g){var h=g&~e;0!==h?d=tc(h):(f&=g,0!==f&&(d=tc(f)))}else g=c&~e,0!==g?d=tc(g):0!==f&&(d=tc(f));if(0===d)return 0;if(0!==b&&b!==d&&0===(b&e)&&(e=d&-d,f=b&-b,e>=f||16===e&&0!==(f&4194240)))return b;0!==(d&4)&&(d|=c&16);b=a.entangledLanes;if(0!==b)for(a=a.entanglements,b&=d;0<b;)c=31-oc(b),e=1<<c,d|=a[c],b&=~e;return d}\nfunction vc(a,b){switch(a){case 1:case 2:case 4:return b+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return b+5E3;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return-1;case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}\nfunction wc(a,b){for(var c=a.suspendedLanes,d=a.pingedLanes,e=a.expirationTimes,f=a.pendingLanes;0<f;){var g=31-oc(f),h=1<<g,k=e[g];if(-1===k){if(0===(h&c)||0!==(h&d))e[g]=vc(h,b)}else k<=b&&(a.expiredLanes|=h);f&=~h}}function xc(a){a=a.pendingLanes&-1073741825;return 0!==a?a:a&1073741824?1073741824:0}function yc(){var a=rc;rc<<=1;0===(rc&4194240)&&(rc=64);return a}function zc(a){for(var b=[],c=0;31>c;c++)b.push(a);return b}\nfunction Ac(a,b,c){a.pendingLanes|=b;536870912!==b&&(a.suspendedLanes=0,a.pingedLanes=0);a=a.eventTimes;b=31-oc(b);a[b]=c}function Bc(a,b){var c=a.pendingLanes&~b;a.pendingLanes=b;a.suspendedLanes=0;a.pingedLanes=0;a.expiredLanes&=b;a.mutableReadLanes&=b;a.entangledLanes&=b;b=a.entanglements;var d=a.eventTimes;for(a=a.expirationTimes;0<c;){var e=31-oc(c),f=1<<e;b[e]=0;d[e]=-1;a[e]=-1;c&=~f}}\nfunction Cc(a,b){var c=a.entangledLanes|=b;for(a=a.entanglements;c;){var d=31-oc(c),e=1<<d;e&b|a[d]&b&&(a[d]|=b);c&=~e}}var C=0;function Dc(a){a&=-a;return 1<a?4<a?0!==(a&268435455)?16:536870912:4:1}var Ec,Fc,Gc,Hc,Ic,Jc=!1,Kc=[],Lc=null,Mc=null,Nc=null,Oc=new Map,Pc=new Map,Qc=[],Rc=\"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit\".split(\" \");\nfunction Sc(a,b){switch(a){case \"focusin\":case \"focusout\":Lc=null;break;case \"dragenter\":case \"dragleave\":Mc=null;break;case \"mouseover\":case \"mouseout\":Nc=null;break;case \"pointerover\":case \"pointerout\":Oc.delete(b.pointerId);break;case \"gotpointercapture\":case \"lostpointercapture\":Pc.delete(b.pointerId)}}\nfunction Tc(a,b,c,d,e,f){if(null===a||a.nativeEvent!==f)return a={blockedOn:b,domEventName:c,eventSystemFlags:d,nativeEvent:f,targetContainers:[e]},null!==b&&(b=Cb(b),null!==b&&Fc(b)),a;a.eventSystemFlags|=d;b=a.targetContainers;null!==e&&-1===b.indexOf(e)&&b.push(e);return a}\nfunction Uc(a,b,c,d,e){switch(b){case \"focusin\":return Lc=Tc(Lc,a,b,c,d,e),!0;case \"dragenter\":return Mc=Tc(Mc,a,b,c,d,e),!0;case \"mouseover\":return Nc=Tc(Nc,a,b,c,d,e),!0;case \"pointerover\":var f=e.pointerId;Oc.set(f,Tc(Oc.get(f)||null,a,b,c,d,e));return!0;case \"gotpointercapture\":return f=e.pointerId,Pc.set(f,Tc(Pc.get(f)||null,a,b,c,d,e)),!0}return!1}\nfunction Vc(a){var b=Wc(a.target);if(null!==b){var c=Vb(b);if(null!==c)if(b=c.tag,13===b){if(b=Wb(c),null!==b){a.blockedOn=b;Ic(a.priority,function(){Gc(c)});return}}else if(3===b&&c.stateNode.current.memoizedState.isDehydrated){a.blockedOn=3===c.tag?c.stateNode.containerInfo:null;return}}a.blockedOn=null}\nfunction Xc(a){if(null!==a.blockedOn)return!1;for(var b=a.targetContainers;0<b.length;){var c=Yc(a.domEventName,a.eventSystemFlags,b[0],a.nativeEvent);if(null===c){c=a.nativeEvent;var d=new c.constructor(c.type,c);wb=d;c.target.dispatchEvent(d);wb=null}else return b=Cb(c),null!==b&&Fc(b),a.blockedOn=c,!1;b.shift()}return!0}function Zc(a,b,c){Xc(a)&&c.delete(b)}function $c(){Jc=!1;null!==Lc&&Xc(Lc)&&(Lc=null);null!==Mc&&Xc(Mc)&&(Mc=null);null!==Nc&&Xc(Nc)&&(Nc=null);Oc.forEach(Zc);Pc.forEach(Zc)}\nfunction ad(a,b){a.blockedOn===b&&(a.blockedOn=null,Jc||(Jc=!0,ca.unstable_scheduleCallback(ca.unstable_NormalPriority,$c)))}\nfunction bd(a){function b(b){return ad(b,a)}if(0<Kc.length){ad(Kc[0],a);for(var c=1;c<Kc.length;c++){var d=Kc[c];d.blockedOn===a&&(d.blockedOn=null)}}null!==Lc&&ad(Lc,a);null!==Mc&&ad(Mc,a);null!==Nc&&ad(Nc,a);Oc.forEach(b);Pc.forEach(b);for(c=0;c<Qc.length;c++)d=Qc[c],d.blockedOn===a&&(d.blockedOn=null);for(;0<Qc.length&&(c=Qc[0],null===c.blockedOn);)Vc(c),null===c.blockedOn&&Qc.shift()}var cd=ua.ReactCurrentBatchConfig,dd=!0;\nfunction ed(a,b,c,d){var e=C,f=cd.transition;cd.transition=null;try{C=1,fd(a,b,c,d)}finally{C=e,cd.transition=f}}function gd(a,b,c,d){var e=C,f=cd.transition;cd.transition=null;try{C=4,fd(a,b,c,d)}finally{C=e,cd.transition=f}}\nfunction fd(a,b,c,d){if(dd){var e=Yc(a,b,c,d);if(null===e)hd(a,b,d,id,c),Sc(a,d);else if(Uc(e,a,b,c,d))d.stopPropagation();else if(Sc(a,d),b&4&&-1<Rc.indexOf(a)){for(;null!==e;){var f=Cb(e);null!==f&&Ec(f);f=Yc(a,b,c,d);null===f&&hd(a,b,d,id,c);if(f===e)break;e=f}null!==e&&d.stopPropagation()}else hd(a,b,d,null,c)}}var id=null;\nfunction Yc(a,b,c,d){id=null;a=xb(d);a=Wc(a);if(null!==a)if(b=Vb(a),null===b)a=null;else if(c=b.tag,13===c){a=Wb(b);if(null!==a)return a;a=null}else if(3===c){if(b.stateNode.current.memoizedState.isDehydrated)return 3===b.tag?b.stateNode.containerInfo:null;a=null}else b!==a&&(a=null);id=a;return null}\nfunction jd(a){switch(a){case \"cancel\":case \"click\":case \"close\":case \"contextmenu\":case \"copy\":case \"cut\":case \"auxclick\":case \"dblclick\":case \"dragend\":case \"dragstart\":case \"drop\":case \"focusin\":case \"focusout\":case \"input\":case \"invalid\":case \"keydown\":case \"keypress\":case \"keyup\":case \"mousedown\":case \"mouseup\":case \"paste\":case \"pause\":case \"play\":case \"pointercancel\":case \"pointerdown\":case \"pointerup\":case \"ratechange\":case \"reset\":case \"resize\":case \"seeked\":case \"submit\":case \"touchcancel\":case \"touchend\":case \"touchstart\":case \"volumechange\":case \"change\":case \"selectionchange\":case \"textInput\":case \"compositionstart\":case \"compositionend\":case \"compositionupdate\":case \"beforeblur\":case \"afterblur\":case \"beforeinput\":case \"blur\":case \"fullscreenchange\":case \"focus\":case \"hashchange\":case \"popstate\":case \"select\":case \"selectstart\":return 1;case \"drag\":case \"dragenter\":case \"dragexit\":case \"dragleave\":case \"dragover\":case \"mousemove\":case \"mouseout\":case \"mouseover\":case \"pointermove\":case \"pointerout\":case \"pointerover\":case \"scroll\":case \"toggle\":case \"touchmove\":case \"wheel\":case \"mouseenter\":case \"mouseleave\":case \"pointerenter\":case \"pointerleave\":return 4;\ncase \"message\":switch(ec()){case fc:return 1;case gc:return 4;case hc:case ic:return 16;case jc:return 536870912;default:return 16}default:return 16}}var kd=null,ld=null,md=null;function nd(){if(md)return md;var a,b=ld,c=b.length,d,e=\"value\"in kd?kd.value:kd.textContent,f=e.length;for(a=0;a<c&&b[a]===e[a];a++);var g=c-a;for(d=1;d<=g&&b[c-d]===e[f-d];d++);return md=e.slice(a,1<d?1-d:void 0)}\nfunction od(a){var b=a.keyCode;\"charCode\"in a?(a=a.charCode,0===a&&13===b&&(a=13)):a=b;10===a&&(a=13);return 32<=a||13===a?a:0}function pd(){return!0}function qd(){return!1}\nfunction rd(a){function b(b,d,e,f,g){this._reactName=b;this._targetInst=e;this.type=d;this.nativeEvent=f;this.target=g;this.currentTarget=null;for(var c in a)a.hasOwnProperty(c)&&(b=a[c],this[c]=b?b(f):f[c]);this.isDefaultPrevented=(null!=f.defaultPrevented?f.defaultPrevented:!1===f.returnValue)?pd:qd;this.isPropagationStopped=qd;return this}A(b.prototype,{preventDefault:function(){this.defaultPrevented=!0;var a=this.nativeEvent;a&&(a.preventDefault?a.preventDefault():\"unknown\"!==typeof a.returnValue&&\n(a.returnValue=!1),this.isDefaultPrevented=pd)},stopPropagation:function(){var a=this.nativeEvent;a&&(a.stopPropagation?a.stopPropagation():\"unknown\"!==typeof a.cancelBubble&&(a.cancelBubble=!0),this.isPropagationStopped=pd)},persist:function(){},isPersistent:pd});return b}\nvar sd={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(a){return a.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},td=rd(sd),ud=A({},sd,{view:0,detail:0}),vd=rd(ud),wd,xd,yd,Ad=A({},ud,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:zd,button:0,buttons:0,relatedTarget:function(a){return void 0===a.relatedTarget?a.fromElement===a.srcElement?a.toElement:a.fromElement:a.relatedTarget},movementX:function(a){if(\"movementX\"in\na)return a.movementX;a!==yd&&(yd&&\"mousemove\"===a.type?(wd=a.screenX-yd.screenX,xd=a.screenY-yd.screenY):xd=wd=0,yd=a);return wd},movementY:function(a){return\"movementY\"in a?a.movementY:xd}}),Bd=rd(Ad),Cd=A({},Ad,{dataTransfer:0}),Dd=rd(Cd),Ed=A({},ud,{relatedTarget:0}),Fd=rd(Ed),Gd=A({},sd,{animationName:0,elapsedTime:0,pseudoElement:0}),Hd=rd(Gd),Id=A({},sd,{clipboardData:function(a){return\"clipboardData\"in a?a.clipboardData:window.clipboardData}}),Jd=rd(Id),Kd=A({},sd,{data:0}),Ld=rd(Kd),Md={Esc:\"Escape\",\nSpacebar:\" \",Left:\"ArrowLeft\",Up:\"ArrowUp\",Right:\"ArrowRight\",Down:\"ArrowDown\",Del:\"Delete\",Win:\"OS\",Menu:\"ContextMenu\",Apps:\"ContextMenu\",Scroll:\"ScrollLock\",MozPrintableKey:\"Unidentified\"},Nd={8:\"Backspace\",9:\"Tab\",12:\"Clear\",13:\"Enter\",16:\"Shift\",17:\"Control\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Escape\",32:\" \",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"ArrowLeft\",38:\"ArrowUp\",39:\"ArrowRight\",40:\"ArrowDown\",45:\"Insert\",46:\"Delete\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",116:\"F5\",117:\"F6\",118:\"F7\",\n119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"NumLock\",145:\"ScrollLock\",224:\"Meta\"},Od={Alt:\"altKey\",Control:\"ctrlKey\",Meta:\"metaKey\",Shift:\"shiftKey\"};function Pd(a){var b=this.nativeEvent;return b.getModifierState?b.getModifierState(a):(a=Od[a])?!!b[a]:!1}function zd(){return Pd}\nvar Qd=A({},ud,{key:function(a){if(a.key){var b=Md[a.key]||a.key;if(\"Unidentified\"!==b)return b}return\"keypress\"===a.type?(a=od(a),13===a?\"Enter\":String.fromCharCode(a)):\"keydown\"===a.type||\"keyup\"===a.type?Nd[a.keyCode]||\"Unidentified\":\"\"},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:zd,charCode:function(a){return\"keypress\"===a.type?od(a):0},keyCode:function(a){return\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0},which:function(a){return\"keypress\"===\na.type?od(a):\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0}}),Rd=rd(Qd),Sd=A({},Ad,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),Td=rd(Sd),Ud=A({},ud,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:zd}),Vd=rd(Ud),Wd=A({},sd,{propertyName:0,elapsedTime:0,pseudoElement:0}),Xd=rd(Wd),Yd=A({},Ad,{deltaX:function(a){return\"deltaX\"in a?a.deltaX:\"wheelDeltaX\"in a?-a.wheelDeltaX:0},\ndeltaY:function(a){return\"deltaY\"in a?a.deltaY:\"wheelDeltaY\"in a?-a.wheelDeltaY:\"wheelDelta\"in a?-a.wheelDelta:0},deltaZ:0,deltaMode:0}),Zd=rd(Yd),$d=[9,13,27,32],ae=ia&&\"CompositionEvent\"in window,be=null;ia&&\"documentMode\"in document&&(be=document.documentMode);var ce=ia&&\"TextEvent\"in window&&!be,de=ia&&(!ae||be&&8<be&&11>=be),ee=String.fromCharCode(32),fe=!1;\nfunction ge(a,b){switch(a){case \"keyup\":return-1!==$d.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"focusout\":return!0;default:return!1}}function he(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var ie=!1;function je(a,b){switch(a){case \"compositionend\":return he(b);case \"keypress\":if(32!==b.which)return null;fe=!0;return ee;case \"textInput\":return a=b.data,a===ee&&fe?null:a;default:return null}}\nfunction ke(a,b){if(ie)return\"compositionend\"===a||!ae&&ge(a,b)?(a=nd(),md=ld=kd=null,ie=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1<b.char.length)return b.char;if(b.which)return String.fromCharCode(b.which)}return null;case \"compositionend\":return de&&\"ko\"!==b.locale?null:b.data;default:return null}}\nvar le={color:!0,date:!0,datetime:!0,\"datetime-local\":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function me(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return\"input\"===b?!!le[a.type]:\"textarea\"===b?!0:!1}function ne(a,b,c,d){Eb(d);b=oe(b,\"onChange\");0<b.length&&(c=new td(\"onChange\",\"change\",null,c,d),a.push({event:c,listeners:b}))}var pe=null,qe=null;function re(a){se(a,0)}function te(a){var b=ue(a);if(Wa(b))return a}\nfunction ve(a,b){if(\"change\"===a)return b}var we=!1;if(ia){var xe;if(ia){var ye=\"oninput\"in document;if(!ye){var ze=document.createElement(\"div\");ze.setAttribute(\"oninput\",\"return;\");ye=\"function\"===typeof ze.oninput}xe=ye}else xe=!1;we=xe&&(!document.documentMode||9<document.documentMode)}function Ae(){pe&&(pe.detachEvent(\"onpropertychange\",Be),qe=pe=null)}function Be(a){if(\"value\"===a.propertyName&&te(qe)){var b=[];ne(b,qe,a,xb(a));Jb(re,b)}}\nfunction Ce(a,b,c){\"focusin\"===a?(Ae(),pe=b,qe=c,pe.attachEvent(\"onpropertychange\",Be)):\"focusout\"===a&&Ae()}function De(a){if(\"selectionchange\"===a||\"keyup\"===a||\"keydown\"===a)return te(qe)}function Ee(a,b){if(\"click\"===a)return te(b)}function Fe(a,b){if(\"input\"===a||\"change\"===a)return te(b)}function Ge(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var He=\"function\"===typeof Object.is?Object.is:Ge;\nfunction Ie(a,b){if(He(a,b))return!0;if(\"object\"!==typeof a||null===a||\"object\"!==typeof b||null===b)return!1;var c=Object.keys(a),d=Object.keys(b);if(c.length!==d.length)return!1;for(d=0;d<c.length;d++){var e=c[d];if(!ja.call(b,e)||!He(a[e],b[e]))return!1}return!0}function Je(a){for(;a&&a.firstChild;)a=a.firstChild;return a}\nfunction Ke(a,b){var c=Je(a);a=0;for(var d;c;){if(3===c.nodeType){d=a+c.textContent.length;if(a<=b&&d>=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Je(c)}}function Le(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Le(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Me(){for(var a=window,b=Xa();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Xa(a.document)}return b}function Ne(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nfunction Oe(a){var b=Me(),c=a.focusedElem,d=a.selectionRange;if(b!==c&&c&&c.ownerDocument&&Le(c.ownerDocument.documentElement,c)){if(null!==d&&Ne(c))if(b=d.start,a=d.end,void 0===a&&(a=b),\"selectionStart\"in c)c.selectionStart=b,c.selectionEnd=Math.min(a,c.value.length);else if(a=(b=c.ownerDocument||document)&&b.defaultView||window,a.getSelection){a=a.getSelection();var e=c.textContent.length,f=Math.min(d.start,e);d=void 0===d.end?f:Math.min(d.end,e);!a.extend&&f>d&&(e=d,d=f,f=e);e=Ke(c,f);var g=Ke(c,\nd);e&&g&&(1!==a.rangeCount||a.anchorNode!==e.node||a.anchorOffset!==e.offset||a.focusNode!==g.node||a.focusOffset!==g.offset)&&(b=b.createRange(),b.setStart(e.node,e.offset),a.removeAllRanges(),f>d?(a.addRange(b),a.extend(g.node,g.offset)):(b.setEnd(g.node,g.offset),a.addRange(b)))}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});\"function\"===typeof c.focus&&c.focus();for(c=0;c<b.length;c++)a=b[c],a.element.scrollLeft=a.left,a.element.scrollTop=a.top}}\nvar Pe=ia&&\"documentMode\"in document&&11>=document.documentMode,Qe=null,Re=null,Se=null,Te=!1;\nfunction Ue(a,b,c){var d=c.window===c?c.document:9===c.nodeType?c:c.ownerDocument;Te||null==Qe||Qe!==Xa(d)||(d=Qe,\"selectionStart\"in d&&Ne(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Se&&Ie(Se,d)||(Se=d,d=oe(Re,\"onSelect\"),0<d.length&&(b=new td(\"onSelect\",\"select\",null,b,c),a.push({event:b,listeners:d}),b.target=Qe)))}\nfunction Ve(a,b){var c={};c[a.toLowerCase()]=b.toLowerCase();c[\"Webkit\"+a]=\"webkit\"+b;c[\"Moz\"+a]=\"moz\"+b;return c}var We={animationend:Ve(\"Animation\",\"AnimationEnd\"),animationiteration:Ve(\"Animation\",\"AnimationIteration\"),animationstart:Ve(\"Animation\",\"AnimationStart\"),transitionend:Ve(\"Transition\",\"TransitionEnd\")},Xe={},Ye={};\nia&&(Ye=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete We.animationend.animation,delete We.animationiteration.animation,delete We.animationstart.animation),\"TransitionEvent\"in window||delete We.transitionend.transition);function Ze(a){if(Xe[a])return Xe[a];if(!We[a])return a;var b=We[a],c;for(c in b)if(b.hasOwnProperty(c)&&c in Ye)return Xe[a]=b[c];return a}var $e=Ze(\"animationend\"),af=Ze(\"animationiteration\"),bf=Ze(\"animationstart\"),cf=Ze(\"transitionend\"),df=new Map,ef=\"abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel\".split(\" \");\nfunction ff(a,b){df.set(a,b);fa(b,[a])}for(var gf=0;gf<ef.length;gf++){var hf=ef[gf],jf=hf.toLowerCase(),kf=hf[0].toUpperCase()+hf.slice(1);ff(jf,\"on\"+kf)}ff($e,\"onAnimationEnd\");ff(af,\"onAnimationIteration\");ff(bf,\"onAnimationStart\");ff(\"dblclick\",\"onDoubleClick\");ff(\"focusin\",\"onFocus\");ff(\"focusout\",\"onBlur\");ff(cf,\"onTransitionEnd\");ha(\"onMouseEnter\",[\"mouseout\",\"mouseover\"]);ha(\"onMouseLeave\",[\"mouseout\",\"mouseover\"]);ha(\"onPointerEnter\",[\"pointerout\",\"pointerover\"]);\nha(\"onPointerLeave\",[\"pointerout\",\"pointerover\"]);fa(\"onChange\",\"change click focusin focusout input keydown keyup selectionchange\".split(\" \"));fa(\"onSelect\",\"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\" \"));fa(\"onBeforeInput\",[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]);fa(\"onCompositionEnd\",\"compositionend focusout keydown keypress keyup mousedown\".split(\" \"));fa(\"onCompositionStart\",\"compositionstart focusout keydown keypress keyup mousedown\".split(\" \"));\nfa(\"onCompositionUpdate\",\"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \"));var lf=\"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting\".split(\" \"),mf=new Set(\"cancel close invalid load scroll toggle\".split(\" \").concat(lf));\nfunction nf(a,b,c){var d=a.type||\"unknown-event\";a.currentTarget=c;Ub(d,b,void 0,a);a.currentTarget=null}\nfunction se(a,b){b=0!==(b&4);for(var c=0;c<a.length;c++){var d=a[c],e=d.event;d=d.listeners;a:{var f=void 0;if(b)for(var g=d.length-1;0<=g;g--){var h=d[g],k=h.instance,l=h.currentTarget;h=h.listener;if(k!==f&&e.isPropagationStopped())break a;nf(e,h,l);f=k}else for(g=0;g<d.length;g++){h=d[g];k=h.instance;l=h.currentTarget;h=h.listener;if(k!==f&&e.isPropagationStopped())break a;nf(e,h,l);f=k}}}if(Qb)throw a=Rb,Qb=!1,Rb=null,a;}\nfunction D(a,b){var c=b[of];void 0===c&&(c=b[of]=new Set);var d=a+\"__bubble\";c.has(d)||(pf(b,a,2,!1),c.add(d))}function qf(a,b,c){var d=0;b&&(d|=4);pf(c,a,d,b)}var rf=\"_reactListening\"+Math.random().toString(36).slice(2);function sf(a){if(!a[rf]){a[rf]=!0;da.forEach(function(b){\"selectionchange\"!==b&&(mf.has(b)||qf(b,!1,a),qf(b,!0,a))});var b=9===a.nodeType?a:a.ownerDocument;null===b||b[rf]||(b[rf]=!0,qf(\"selectionchange\",!1,b))}}\nfunction pf(a,b,c,d){switch(jd(b)){case 1:var e=ed;break;case 4:e=gd;break;default:e=fd}c=e.bind(null,b,c,a);e=void 0;!Lb||\"touchstart\"!==b&&\"touchmove\"!==b&&\"wheel\"!==b||(e=!0);d?void 0!==e?a.addEventListener(b,c,{capture:!0,passive:e}):a.addEventListener(b,c,!0):void 0!==e?a.addEventListener(b,c,{passive:e}):a.addEventListener(b,c,!1)}\nfunction hd(a,b,c,d,e){var f=d;if(0===(b&1)&&0===(b&2)&&null!==d)a:for(;;){if(null===d)return;var g=d.tag;if(3===g||4===g){var h=d.stateNode.containerInfo;if(h===e||8===h.nodeType&&h.parentNode===e)break;if(4===g)for(g=d.return;null!==g;){var k=g.tag;if(3===k||4===k)if(k=g.stateNode.containerInfo,k===e||8===k.nodeType&&k.parentNode===e)return;g=g.return}for(;null!==h;){g=Wc(h);if(null===g)return;k=g.tag;if(5===k||6===k){d=f=g;continue a}h=h.parentNode}}d=d.return}Jb(function(){var d=f,e=xb(c),g=[];\na:{var h=df.get(a);if(void 0!==h){var k=td,n=a;switch(a){case \"keypress\":if(0===od(c))break a;case \"keydown\":case \"keyup\":k=Rd;break;case \"focusin\":n=\"focus\";k=Fd;break;case \"focusout\":n=\"blur\";k=Fd;break;case \"beforeblur\":case \"afterblur\":k=Fd;break;case \"click\":if(2===c.button)break a;case \"auxclick\":case \"dblclick\":case \"mousedown\":case \"mousemove\":case \"mouseup\":case \"mouseout\":case \"mouseover\":case \"contextmenu\":k=Bd;break;case \"drag\":case \"dragend\":case \"dragenter\":case \"dragexit\":case \"dragleave\":case \"dragover\":case \"dragstart\":case \"drop\":k=\nDd;break;case \"touchcancel\":case \"touchend\":case \"touchmove\":case \"touchstart\":k=Vd;break;case $e:case af:case bf:k=Hd;break;case cf:k=Xd;break;case \"scroll\":k=vd;break;case \"wheel\":k=Zd;break;case \"copy\":case \"cut\":case \"paste\":k=Jd;break;case \"gotpointercapture\":case \"lostpointercapture\":case \"pointercancel\":case \"pointerdown\":case \"pointermove\":case \"pointerout\":case \"pointerover\":case \"pointerup\":k=Td}var t=0!==(b&4),J=!t&&\"scroll\"===a,x=t?null!==h?h+\"Capture\":null:h;t=[];for(var w=d,u;null!==\nw;){u=w;var F=u.stateNode;5===u.tag&&null!==F&&(u=F,null!==x&&(F=Kb(w,x),null!=F&&t.push(tf(w,F,u))));if(J)break;w=w.return}0<t.length&&(h=new k(h,n,null,c,e),g.push({event:h,listeners:t}))}}if(0===(b&7)){a:{h=\"mouseover\"===a||\"pointerover\"===a;k=\"mouseout\"===a||\"pointerout\"===a;if(h&&c!==wb&&(n=c.relatedTarget||c.fromElement)&&(Wc(n)||n[uf]))break a;if(k||h){h=e.window===e?e:(h=e.ownerDocument)?h.defaultView||h.parentWindow:window;if(k){if(n=c.relatedTarget||c.toElement,k=d,n=n?Wc(n):null,null!==\nn&&(J=Vb(n),n!==J||5!==n.tag&&6!==n.tag))n=null}else k=null,n=d;if(k!==n){t=Bd;F=\"onMouseLeave\";x=\"onMouseEnter\";w=\"mouse\";if(\"pointerout\"===a||\"pointerover\"===a)t=Td,F=\"onPointerLeave\",x=\"onPointerEnter\",w=\"pointer\";J=null==k?h:ue(k);u=null==n?h:ue(n);h=new t(F,w+\"leave\",k,c,e);h.target=J;h.relatedTarget=u;F=null;Wc(e)===d&&(t=new t(x,w+\"enter\",n,c,e),t.target=u,t.relatedTarget=J,F=t);J=F;if(k&&n)b:{t=k;x=n;w=0;for(u=t;u;u=vf(u))w++;u=0;for(F=x;F;F=vf(F))u++;for(;0<w-u;)t=vf(t),w--;for(;0<u-w;)x=\nvf(x),u--;for(;w--;){if(t===x||null!==x&&t===x.alternate)break b;t=vf(t);x=vf(x)}t=null}else t=null;null!==k&&wf(g,h,k,t,!1);null!==n&&null!==J&&wf(g,J,n,t,!0)}}}a:{h=d?ue(d):window;k=h.nodeName&&h.nodeName.toLowerCase();if(\"select\"===k||\"input\"===k&&\"file\"===h.type)var na=ve;else if(me(h))if(we)na=Fe;else{na=De;var xa=Ce}else(k=h.nodeName)&&\"input\"===k.toLowerCase()&&(\"checkbox\"===h.type||\"radio\"===h.type)&&(na=Ee);if(na&&(na=na(a,d))){ne(g,na,c,e);break a}xa&&xa(a,h,d);\"focusout\"===a&&(xa=h._wrapperState)&&\nxa.controlled&&\"number\"===h.type&&cb(h,\"number\",h.value)}xa=d?ue(d):window;switch(a){case \"focusin\":if(me(xa)||\"true\"===xa.contentEditable)Qe=xa,Re=d,Se=null;break;case \"focusout\":Se=Re=Qe=null;break;case \"mousedown\":Te=!0;break;case \"contextmenu\":case \"mouseup\":case \"dragend\":Te=!1;Ue(g,c,e);break;case \"selectionchange\":if(Pe)break;case \"keydown\":case \"keyup\":Ue(g,c,e)}var $a;if(ae)b:{switch(a){case \"compositionstart\":var ba=\"onCompositionStart\";break b;case \"compositionend\":ba=\"onCompositionEnd\";\nbreak b;case \"compositionupdate\":ba=\"onCompositionUpdate\";break b}ba=void 0}else ie?ge(a,c)&&(ba=\"onCompositionEnd\"):\"keydown\"===a&&229===c.keyCode&&(ba=\"onCompositionStart\");ba&&(de&&\"ko\"!==c.locale&&(ie||\"onCompositionStart\"!==ba?\"onCompositionEnd\"===ba&&ie&&($a=nd()):(kd=e,ld=\"value\"in kd?kd.value:kd.textContent,ie=!0)),xa=oe(d,ba),0<xa.length&&(ba=new Ld(ba,a,null,c,e),g.push({event:ba,listeners:xa}),$a?ba.data=$a:($a=he(c),null!==$a&&(ba.data=$a))));if($a=ce?je(a,c):ke(a,c))d=oe(d,\"onBeforeInput\"),\n0<d.length&&(e=new Ld(\"onBeforeInput\",\"beforeinput\",null,c,e),g.push({event:e,listeners:d}),e.data=$a)}se(g,b)})}function tf(a,b,c){return{instance:a,listener:b,currentTarget:c}}function oe(a,b){for(var c=b+\"Capture\",d=[];null!==a;){var e=a,f=e.stateNode;5===e.tag&&null!==f&&(e=f,f=Kb(a,c),null!=f&&d.unshift(tf(a,f,e)),f=Kb(a,b),null!=f&&d.push(tf(a,f,e)));a=a.return}return d}function vf(a){if(null===a)return null;do a=a.return;while(a&&5!==a.tag);return a?a:null}\nfunction wf(a,b,c,d,e){for(var f=b._reactName,g=[];null!==c&&c!==d;){var h=c,k=h.alternate,l=h.stateNode;if(null!==k&&k===d)break;5===h.tag&&null!==l&&(h=l,e?(k=Kb(c,f),null!=k&&g.unshift(tf(c,k,h))):e||(k=Kb(c,f),null!=k&&g.push(tf(c,k,h))));c=c.return}0!==g.length&&a.push({event:b,listeners:g})}var xf=/\\r\\n?/g,yf=/\\u0000|\\uFFFD/g;function zf(a){return(\"string\"===typeof a?a:\"\"+a).replace(xf,\"\\n\").replace(yf,\"\")}function Af(a,b,c){b=zf(b);if(zf(a)!==b&&c)throw Error(p(425));}function Bf(){}\nvar Cf=null,Df=null;function Ef(a,b){return\"textarea\"===a||\"noscript\"===a||\"string\"===typeof b.children||\"number\"===typeof b.children||\"object\"===typeof b.dangerouslySetInnerHTML&&null!==b.dangerouslySetInnerHTML&&null!=b.dangerouslySetInnerHTML.__html}\nvar Ff=\"function\"===typeof setTimeout?setTimeout:void 0,Gf=\"function\"===typeof clearTimeout?clearTimeout:void 0,Hf=\"function\"===typeof Promise?Promise:void 0,Jf=\"function\"===typeof queueMicrotask?queueMicrotask:\"undefined\"!==typeof Hf?function(a){return Hf.resolve(null).then(a).catch(If)}:Ff;function If(a){setTimeout(function(){throw a;})}\nfunction Kf(a,b){var c=b,d=0;do{var e=c.nextSibling;a.removeChild(c);if(e&&8===e.nodeType)if(c=e.data,\"/$\"===c){if(0===d){a.removeChild(e);bd(b);return}d--}else\"$\"!==c&&\"$?\"!==c&&\"$!\"!==c||d++;c=e}while(c);bd(b)}function Lf(a){for(;null!=a;a=a.nextSibling){var b=a.nodeType;if(1===b||3===b)break;if(8===b){b=a.data;if(\"$\"===b||\"$!\"===b||\"$?\"===b)break;if(\"/$\"===b)return null}}return a}\nfunction Mf(a){a=a.previousSibling;for(var b=0;a;){if(8===a.nodeType){var c=a.data;if(\"$\"===c||\"$!\"===c||\"$?\"===c){if(0===b)return a;b--}else\"/$\"===c&&b++}a=a.previousSibling}return null}var Nf=Math.random().toString(36).slice(2),Of=\"__reactFiber$\"+Nf,Pf=\"__reactProps$\"+Nf,uf=\"__reactContainer$\"+Nf,of=\"__reactEvents$\"+Nf,Qf=\"__reactListeners$\"+Nf,Rf=\"__reactHandles$\"+Nf;\nfunction Wc(a){var b=a[Of];if(b)return b;for(var c=a.parentNode;c;){if(b=c[uf]||c[Of]){c=b.alternate;if(null!==b.child||null!==c&&null!==c.child)for(a=Mf(a);null!==a;){if(c=a[Of])return c;a=Mf(a)}return b}a=c;c=a.parentNode}return null}function Cb(a){a=a[Of]||a[uf];return!a||5!==a.tag&&6!==a.tag&&13!==a.tag&&3!==a.tag?null:a}function ue(a){if(5===a.tag||6===a.tag)return a.stateNode;throw Error(p(33));}function Db(a){return a[Pf]||null}var Sf=[],Tf=-1;function Uf(a){return{current:a}}\nfunction E(a){0>Tf||(a.current=Sf[Tf],Sf[Tf]=null,Tf--)}function G(a,b){Tf++;Sf[Tf]=a.current;a.current=b}var Vf={},H=Uf(Vf),Wf=Uf(!1),Xf=Vf;function Yf(a,b){var c=a.type.contextTypes;if(!c)return Vf;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}\nfunction Zf(a){a=a.childContextTypes;return null!==a&&void 0!==a}function $f(){E(Wf);E(H)}function ag(a,b,c){if(H.current!==Vf)throw Error(p(168));G(H,b);G(Wf,c)}function bg(a,b,c){var d=a.stateNode;b=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in b))throw Error(p(108,Ra(a)||\"Unknown\",e));return A({},c,d)}\nfunction cg(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Vf;Xf=H.current;G(H,a);G(Wf,Wf.current);return!0}function dg(a,b,c){var d=a.stateNode;if(!d)throw Error(p(169));c?(a=bg(a,b,Xf),d.__reactInternalMemoizedMergedChildContext=a,E(Wf),E(H),G(H,a)):E(Wf);G(Wf,c)}var eg=null,fg=!1,gg=!1;function hg(a){null===eg?eg=[a]:eg.push(a)}function ig(a){fg=!0;hg(a)}\nfunction jg(){if(!gg&&null!==eg){gg=!0;var a=0,b=C;try{var c=eg;for(C=1;a<c.length;a++){var d=c[a];do d=d(!0);while(null!==d)}eg=null;fg=!1}catch(e){throw null!==eg&&(eg=eg.slice(a+1)),ac(fc,jg),e;}finally{C=b,gg=!1}}return null}var kg=[],lg=0,mg=null,ng=0,og=[],pg=0,qg=null,rg=1,sg=\"\";function tg(a,b){kg[lg++]=ng;kg[lg++]=mg;mg=a;ng=b}\nfunction ug(a,b,c){og[pg++]=rg;og[pg++]=sg;og[pg++]=qg;qg=a;var d=rg;a=sg;var e=32-oc(d)-1;d&=~(1<<e);c+=1;var f=32-oc(b)+e;if(30<f){var g=e-e%5;f=(d&(1<<g)-1).toString(32);d>>=g;e-=g;rg=1<<32-oc(b)+e|c<<e|d;sg=f+a}else rg=1<<f|c<<e|d,sg=a}function vg(a){null!==a.return&&(tg(a,1),ug(a,1,0))}function wg(a){for(;a===mg;)mg=kg[--lg],kg[lg]=null,ng=kg[--lg],kg[lg]=null;for(;a===qg;)qg=og[--pg],og[pg]=null,sg=og[--pg],og[pg]=null,rg=og[--pg],og[pg]=null}var xg=null,yg=null,I=!1,zg=null;\nfunction Ag(a,b){var c=Bg(5,null,null,0);c.elementType=\"DELETED\";c.stateNode=b;c.return=a;b=a.deletions;null===b?(a.deletions=[c],a.flags|=16):b.push(c)}\nfunction Cg(a,b){switch(a.tag){case 5:var c=a.type;b=1!==b.nodeType||c.toLowerCase()!==b.nodeName.toLowerCase()?null:b;return null!==b?(a.stateNode=b,xg=a,yg=Lf(b.firstChild),!0):!1;case 6:return b=\"\"===a.pendingProps||3!==b.nodeType?null:b,null!==b?(a.stateNode=b,xg=a,yg=null,!0):!1;case 13:return b=8!==b.nodeType?null:b,null!==b?(c=null!==qg?{id:rg,overflow:sg}:null,a.memoizedState={dehydrated:b,treeContext:c,retryLane:1073741824},c=Bg(18,null,null,0),c.stateNode=b,c.return=a,a.child=c,xg=a,yg=\nnull,!0):!1;default:return!1}}function Dg(a){return 0!==(a.mode&1)&&0===(a.flags&128)}function Eg(a){if(I){var b=yg;if(b){var c=b;if(!Cg(a,b)){if(Dg(a))throw Error(p(418));b=Lf(c.nextSibling);var d=xg;b&&Cg(a,b)?Ag(d,c):(a.flags=a.flags&-4097|2,I=!1,xg=a)}}else{if(Dg(a))throw Error(p(418));a.flags=a.flags&-4097|2;I=!1;xg=a}}}function Fg(a){for(a=a.return;null!==a&&5!==a.tag&&3!==a.tag&&13!==a.tag;)a=a.return;xg=a}\nfunction Gg(a){if(a!==xg)return!1;if(!I)return Fg(a),I=!0,!1;var b;(b=3!==a.tag)&&!(b=5!==a.tag)&&(b=a.type,b=\"head\"!==b&&\"body\"!==b&&!Ef(a.type,a.memoizedProps));if(b&&(b=yg)){if(Dg(a))throw Hg(),Error(p(418));for(;b;)Ag(a,b),b=Lf(b.nextSibling)}Fg(a);if(13===a.tag){a=a.memoizedState;a=null!==a?a.dehydrated:null;if(!a)throw Error(p(317));a:{a=a.nextSibling;for(b=0;a;){if(8===a.nodeType){var c=a.data;if(\"/$\"===c){if(0===b){yg=Lf(a.nextSibling);break a}b--}else\"$\"!==c&&\"$!\"!==c&&\"$?\"!==c||b++}a=a.nextSibling}yg=\nnull}}else yg=xg?Lf(a.stateNode.nextSibling):null;return!0}function Hg(){for(var a=yg;a;)a=Lf(a.nextSibling)}function Ig(){yg=xg=null;I=!1}function Jg(a){null===zg?zg=[a]:zg.push(a)}var Kg=ua.ReactCurrentBatchConfig;\nfunction Lg(a,b,c){a=c.ref;if(null!==a&&\"function\"!==typeof a&&\"object\"!==typeof a){if(c._owner){c=c._owner;if(c){if(1!==c.tag)throw Error(p(309));var d=c.stateNode}if(!d)throw Error(p(147,a));var e=d,f=\"\"+a;if(null!==b&&null!==b.ref&&\"function\"===typeof b.ref&&b.ref._stringRef===f)return b.ref;b=function(a){var b=e.refs;null===a?delete b[f]:b[f]=a};b._stringRef=f;return b}if(\"string\"!==typeof a)throw Error(p(284));if(!c._owner)throw Error(p(290,a));}return a}\nfunction Mg(a,b){a=Object.prototype.toString.call(b);throw Error(p(31,\"[object Object]\"===a?\"object with keys {\"+Object.keys(b).join(\", \")+\"}\":a));}function Ng(a){var b=a._init;return b(a._payload)}\nfunction Og(a){function b(b,c){if(a){var d=b.deletions;null===d?(b.deletions=[c],b.flags|=16):d.push(c)}}function c(c,d){if(!a)return null;for(;null!==d;)b(c,d),d=d.sibling;return null}function d(a,b){for(a=new Map;null!==b;)null!==b.key?a.set(b.key,b):a.set(b.index,b),b=b.sibling;return a}function e(a,b){a=Pg(a,b);a.index=0;a.sibling=null;return a}function f(b,c,d){b.index=d;if(!a)return b.flags|=1048576,c;d=b.alternate;if(null!==d)return d=d.index,d<c?(b.flags|=2,c):d;b.flags|=2;return c}function g(b){a&&\nnull===b.alternate&&(b.flags|=2);return b}function h(a,b,c,d){if(null===b||6!==b.tag)return b=Qg(c,a.mode,d),b.return=a,b;b=e(b,c);b.return=a;return b}function k(a,b,c,d){var f=c.type;if(f===ya)return m(a,b,c.props.children,d,c.key);if(null!==b&&(b.elementType===f||\"object\"===typeof f&&null!==f&&f.$$typeof===Ha&&Ng(f)===b.type))return d=e(b,c.props),d.ref=Lg(a,b,c),d.return=a,d;d=Rg(c.type,c.key,c.props,null,a.mode,d);d.ref=Lg(a,b,c);d.return=a;return d}function l(a,b,c,d){if(null===b||4!==b.tag||\nb.stateNode.containerInfo!==c.containerInfo||b.stateNode.implementation!==c.implementation)return b=Sg(c,a.mode,d),b.return=a,b;b=e(b,c.children||[]);b.return=a;return b}function m(a,b,c,d,f){if(null===b||7!==b.tag)return b=Tg(c,a.mode,d,f),b.return=a,b;b=e(b,c);b.return=a;return b}function q(a,b,c){if(\"string\"===typeof b&&\"\"!==b||\"number\"===typeof b)return b=Qg(\"\"+b,a.mode,c),b.return=a,b;if(\"object\"===typeof b&&null!==b){switch(b.$$typeof){case va:return c=Rg(b.type,b.key,b.props,null,a.mode,c),\nc.ref=Lg(a,null,b),c.return=a,c;case wa:return b=Sg(b,a.mode,c),b.return=a,b;case Ha:var d=b._init;return q(a,d(b._payload),c)}if(eb(b)||Ka(b))return b=Tg(b,a.mode,c,null),b.return=a,b;Mg(a,b)}return null}function r(a,b,c,d){var e=null!==b?b.key:null;if(\"string\"===typeof c&&\"\"!==c||\"number\"===typeof c)return null!==e?null:h(a,b,\"\"+c,d);if(\"object\"===typeof c&&null!==c){switch(c.$$typeof){case va:return c.key===e?k(a,b,c,d):null;case wa:return c.key===e?l(a,b,c,d):null;case Ha:return e=c._init,r(a,\nb,e(c._payload),d)}if(eb(c)||Ka(c))return null!==e?null:m(a,b,c,d,null);Mg(a,c)}return null}function y(a,b,c,d,e){if(\"string\"===typeof d&&\"\"!==d||\"number\"===typeof d)return a=a.get(c)||null,h(b,a,\"\"+d,e);if(\"object\"===typeof d&&null!==d){switch(d.$$typeof){case va:return a=a.get(null===d.key?c:d.key)||null,k(b,a,d,e);case wa:return a=a.get(null===d.key?c:d.key)||null,l(b,a,d,e);case Ha:var f=d._init;return y(a,b,c,f(d._payload),e)}if(eb(d)||Ka(d))return a=a.get(c)||null,m(b,a,d,e,null);Mg(b,d)}return null}\nfunction n(e,g,h,k){for(var l=null,m=null,u=g,w=g=0,x=null;null!==u&&w<h.length;w++){u.index>w?(x=u,u=null):x=u.sibling;var n=r(e,u,h[w],k);if(null===n){null===u&&(u=x);break}a&&u&&null===n.alternate&&b(e,u);g=f(n,g,w);null===m?l=n:m.sibling=n;m=n;u=x}if(w===h.length)return c(e,u),I&&tg(e,w),l;if(null===u){for(;w<h.length;w++)u=q(e,h[w],k),null!==u&&(g=f(u,g,w),null===m?l=u:m.sibling=u,m=u);I&&tg(e,w);return l}for(u=d(e,u);w<h.length;w++)x=y(u,e,w,h[w],k),null!==x&&(a&&null!==x.alternate&&u.delete(null===\nx.key?w:x.key),g=f(x,g,w),null===m?l=x:m.sibling=x,m=x);a&&u.forEach(function(a){return b(e,a)});I&&tg(e,w);return l}function t(e,g,h,k){var l=Ka(h);if(\"function\"!==typeof l)throw Error(p(150));h=l.call(h);if(null==h)throw Error(p(151));for(var u=l=null,m=g,w=g=0,x=null,n=h.next();null!==m&&!n.done;w++,n=h.next()){m.index>w?(x=m,m=null):x=m.sibling;var t=r(e,m,n.value,k);if(null===t){null===m&&(m=x);break}a&&m&&null===t.alternate&&b(e,m);g=f(t,g,w);null===u?l=t:u.sibling=t;u=t;m=x}if(n.done)return c(e,\nm),I&&tg(e,w),l;if(null===m){for(;!n.done;w++,n=h.next())n=q(e,n.value,k),null!==n&&(g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);I&&tg(e,w);return l}for(m=d(e,m);!n.done;w++,n=h.next())n=y(m,e,w,n.value,k),null!==n&&(a&&null!==n.alternate&&m.delete(null===n.key?w:n.key),g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);a&&m.forEach(function(a){return b(e,a)});I&&tg(e,w);return l}function J(a,d,f,h){\"object\"===typeof f&&null!==f&&f.type===ya&&null===f.key&&(f=f.props.children);if(\"object\"===typeof f&&null!==f){switch(f.$$typeof){case va:a:{for(var k=\nf.key,l=d;null!==l;){if(l.key===k){k=f.type;if(k===ya){if(7===l.tag){c(a,l.sibling);d=e(l,f.props.children);d.return=a;a=d;break a}}else if(l.elementType===k||\"object\"===typeof k&&null!==k&&k.$$typeof===Ha&&Ng(k)===l.type){c(a,l.sibling);d=e(l,f.props);d.ref=Lg(a,l,f);d.return=a;a=d;break a}c(a,l);break}else b(a,l);l=l.sibling}f.type===ya?(d=Tg(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Rg(f.type,f.key,f.props,null,a.mode,h),h.ref=Lg(a,d,f),h.return=a,a=h)}return g(a);case wa:a:{for(l=f.key;null!==\nd;){if(d.key===l)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=Sg(f,a.mode,h);d.return=a;a=d}return g(a);case Ha:return l=f._init,J(a,d,l(f._payload),h)}if(eb(f))return n(a,d,f,h);if(Ka(f))return t(a,d,f,h);Mg(a,f)}return\"string\"===typeof f&&\"\"!==f||\"number\"===typeof f?(f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):\n(c(a,d),d=Qg(f,a.mode,h),d.return=a,a=d),g(a)):c(a,d)}return J}var Ug=Og(!0),Vg=Og(!1),Wg=Uf(null),Xg=null,Yg=null,Zg=null;function $g(){Zg=Yg=Xg=null}function ah(a){var b=Wg.current;E(Wg);a._currentValue=b}function bh(a,b,c){for(;null!==a;){var d=a.alternate;(a.childLanes&b)!==b?(a.childLanes|=b,null!==d&&(d.childLanes|=b)):null!==d&&(d.childLanes&b)!==b&&(d.childLanes|=b);if(a===c)break;a=a.return}}\nfunction ch(a,b){Xg=a;Zg=Yg=null;a=a.dependencies;null!==a&&null!==a.firstContext&&(0!==(a.lanes&b)&&(dh=!0),a.firstContext=null)}function eh(a){var b=a._currentValue;if(Zg!==a)if(a={context:a,memoizedValue:b,next:null},null===Yg){if(null===Xg)throw Error(p(308));Yg=a;Xg.dependencies={lanes:0,firstContext:a}}else Yg=Yg.next=a;return b}var fh=null;function gh(a){null===fh?fh=[a]:fh.push(a)}\nfunction hh(a,b,c,d){var e=b.interleaved;null===e?(c.next=c,gh(b)):(c.next=e.next,e.next=c);b.interleaved=c;return ih(a,d)}function ih(a,b){a.lanes|=b;var c=a.alternate;null!==c&&(c.lanes|=b);c=a;for(a=a.return;null!==a;)a.childLanes|=b,c=a.alternate,null!==c&&(c.childLanes|=b),c=a,a=a.return;return 3===c.tag?c.stateNode:null}var jh=!1;function kh(a){a.updateQueue={baseState:a.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}\nfunction lh(a,b){a=a.updateQueue;b.updateQueue===a&&(b.updateQueue={baseState:a.baseState,firstBaseUpdate:a.firstBaseUpdate,lastBaseUpdate:a.lastBaseUpdate,shared:a.shared,effects:a.effects})}function mh(a,b){return{eventTime:a,lane:b,tag:0,payload:null,callback:null,next:null}}\nfunction nh(a,b,c){var d=a.updateQueue;if(null===d)return null;d=d.shared;if(0!==(K&2)){var e=d.pending;null===e?b.next=b:(b.next=e.next,e.next=b);d.pending=b;return ih(a,c)}e=d.interleaved;null===e?(b.next=b,gh(d)):(b.next=e.next,e.next=b);d.interleaved=b;return ih(a,c)}function oh(a,b,c){b=b.updateQueue;if(null!==b&&(b=b.shared,0!==(c&4194240))){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nfunction ph(a,b){var c=a.updateQueue,d=a.alternate;if(null!==d&&(d=d.updateQueue,c===d)){var e=null,f=null;c=c.firstBaseUpdate;if(null!==c){do{var g={eventTime:c.eventTime,lane:c.lane,tag:c.tag,payload:c.payload,callback:c.callback,next:null};null===f?e=f=g:f=f.next=g;c=c.next}while(null!==c);null===f?e=f=b:f=f.next=b}else e=f=b;c={baseState:d.baseState,firstBaseUpdate:e,lastBaseUpdate:f,shared:d.shared,effects:d.effects};a.updateQueue=c;return}a=c.lastBaseUpdate;null===a?c.firstBaseUpdate=b:a.next=\nb;c.lastBaseUpdate=b}\nfunction qh(a,b,c,d){var e=a.updateQueue;jh=!1;var f=e.firstBaseUpdate,g=e.lastBaseUpdate,h=e.shared.pending;if(null!==h){e.shared.pending=null;var k=h,l=k.next;k.next=null;null===g?f=l:g.next=l;g=k;var m=a.alternate;null!==m&&(m=m.updateQueue,h=m.lastBaseUpdate,h!==g&&(null===h?m.firstBaseUpdate=l:h.next=l,m.lastBaseUpdate=k))}if(null!==f){var q=e.baseState;g=0;m=l=k=null;h=f;do{var r=h.lane,y=h.eventTime;if((d&r)===r){null!==m&&(m=m.next={eventTime:y,lane:0,tag:h.tag,payload:h.payload,callback:h.callback,\nnext:null});a:{var n=a,t=h;r=b;y=c;switch(t.tag){case 1:n=t.payload;if(\"function\"===typeof n){q=n.call(y,q,r);break a}q=n;break a;case 3:n.flags=n.flags&-65537|128;case 0:n=t.payload;r=\"function\"===typeof n?n.call(y,q,r):n;if(null===r||void 0===r)break a;q=A({},q,r);break a;case 2:jh=!0}}null!==h.callback&&0!==h.lane&&(a.flags|=64,r=e.effects,null===r?e.effects=[h]:r.push(h))}else y={eventTime:y,lane:r,tag:h.tag,payload:h.payload,callback:h.callback,next:null},null===m?(l=m=y,k=q):m=m.next=y,g|=r;\nh=h.next;if(null===h)if(h=e.shared.pending,null===h)break;else r=h,h=r.next,r.next=null,e.lastBaseUpdate=r,e.shared.pending=null}while(1);null===m&&(k=q);e.baseState=k;e.firstBaseUpdate=l;e.lastBaseUpdate=m;b=e.shared.interleaved;if(null!==b){e=b;do g|=e.lane,e=e.next;while(e!==b)}else null===f&&(e.shared.lanes=0);rh|=g;a.lanes=g;a.memoizedState=q}}\nfunction sh(a,b,c){a=b.effects;b.effects=null;if(null!==a)for(b=0;b<a.length;b++){var d=a[b],e=d.callback;if(null!==e){d.callback=null;d=c;if(\"function\"!==typeof e)throw Error(p(191,e));e.call(d)}}}var th={},uh=Uf(th),vh=Uf(th),wh=Uf(th);function xh(a){if(a===th)throw Error(p(174));return a}\nfunction yh(a,b){G(wh,b);G(vh,a);G(uh,th);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:lb(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=lb(b,a)}E(uh);G(uh,b)}function zh(){E(uh);E(vh);E(wh)}function Ah(a){xh(wh.current);var b=xh(uh.current);var c=lb(b,a.type);b!==c&&(G(vh,a),G(uh,c))}function Bh(a){vh.current===a&&(E(uh),E(vh))}var L=Uf(0);\nfunction Ch(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||\"$?\"===c.data||\"$!\"===c.data))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.flags&128))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}var Dh=[];\nfunction Eh(){for(var a=0;a<Dh.length;a++)Dh[a]._workInProgressVersionPrimary=null;Dh.length=0}var Fh=ua.ReactCurrentDispatcher,Gh=ua.ReactCurrentBatchConfig,Hh=0,M=null,N=null,O=null,Ih=!1,Jh=!1,Kh=0,Lh=0;function P(){throw Error(p(321));}function Mh(a,b){if(null===b)return!1;for(var c=0;c<b.length&&c<a.length;c++)if(!He(a[c],b[c]))return!1;return!0}\nfunction Nh(a,b,c,d,e,f){Hh=f;M=b;b.memoizedState=null;b.updateQueue=null;b.lanes=0;Fh.current=null===a||null===a.memoizedState?Oh:Ph;a=c(d,e);if(Jh){f=0;do{Jh=!1;Kh=0;if(25<=f)throw Error(p(301));f+=1;O=N=null;b.updateQueue=null;Fh.current=Qh;a=c(d,e)}while(Jh)}Fh.current=Rh;b=null!==N&&null!==N.next;Hh=0;O=N=M=null;Ih=!1;if(b)throw Error(p(300));return a}function Sh(){var a=0!==Kh;Kh=0;return a}\nfunction Th(){var a={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};null===O?M.memoizedState=O=a:O=O.next=a;return O}function Uh(){if(null===N){var a=M.alternate;a=null!==a?a.memoizedState:null}else a=N.next;var b=null===O?M.memoizedState:O.next;if(null!==b)O=b,N=a;else{if(null===a)throw Error(p(310));N=a;a={memoizedState:N.memoizedState,baseState:N.baseState,baseQueue:N.baseQueue,queue:N.queue,next:null};null===O?M.memoizedState=O=a:O=O.next=a}return O}\nfunction Vh(a,b){return\"function\"===typeof b?b(a):b}\nfunction Wh(a){var b=Uh(),c=b.queue;if(null===c)throw Error(p(311));c.lastRenderedReducer=a;var d=N,e=d.baseQueue,f=c.pending;if(null!==f){if(null!==e){var g=e.next;e.next=f.next;f.next=g}d.baseQueue=e=f;c.pending=null}if(null!==e){f=e.next;d=d.baseState;var h=g=null,k=null,l=f;do{var m=l.lane;if((Hh&m)===m)null!==k&&(k=k.next={lane:0,action:l.action,hasEagerState:l.hasEagerState,eagerState:l.eagerState,next:null}),d=l.hasEagerState?l.eagerState:a(d,l.action);else{var q={lane:m,action:l.action,hasEagerState:l.hasEagerState,\neagerState:l.eagerState,next:null};null===k?(h=k=q,g=d):k=k.next=q;M.lanes|=m;rh|=m}l=l.next}while(null!==l&&l!==f);null===k?g=d:k.next=h;He(d,b.memoizedState)||(dh=!0);b.memoizedState=d;b.baseState=g;b.baseQueue=k;c.lastRenderedState=d}a=c.interleaved;if(null!==a){e=a;do f=e.lane,M.lanes|=f,rh|=f,e=e.next;while(e!==a)}else null===e&&(c.lanes=0);return[b.memoizedState,c.dispatch]}\nfunction Xh(a){var b=Uh(),c=b.queue;if(null===c)throw Error(p(311));c.lastRenderedReducer=a;var d=c.dispatch,e=c.pending,f=b.memoizedState;if(null!==e){c.pending=null;var g=e=e.next;do f=a(f,g.action),g=g.next;while(g!==e);He(f,b.memoizedState)||(dh=!0);b.memoizedState=f;null===b.baseQueue&&(b.baseState=f);c.lastRenderedState=f}return[f,d]}function Yh(){}\nfunction Zh(a,b){var c=M,d=Uh(),e=b(),f=!He(d.memoizedState,e);f&&(d.memoizedState=e,dh=!0);d=d.queue;$h(ai.bind(null,c,d,a),[a]);if(d.getSnapshot!==b||f||null!==O&&O.memoizedState.tag&1){c.flags|=2048;bi(9,ci.bind(null,c,d,e,b),void 0,null);if(null===Q)throw Error(p(349));0!==(Hh&30)||di(c,b,e)}return e}function di(a,b,c){a.flags|=16384;a={getSnapshot:b,value:c};b=M.updateQueue;null===b?(b={lastEffect:null,stores:null},M.updateQueue=b,b.stores=[a]):(c=b.stores,null===c?b.stores=[a]:c.push(a))}\nfunction ci(a,b,c,d){b.value=c;b.getSnapshot=d;ei(b)&&fi(a)}function ai(a,b,c){return c(function(){ei(b)&&fi(a)})}function ei(a){var b=a.getSnapshot;a=a.value;try{var c=b();return!He(a,c)}catch(d){return!0}}function fi(a){var b=ih(a,1);null!==b&&gi(b,a,1,-1)}\nfunction hi(a){var b=Th();\"function\"===typeof a&&(a=a());b.memoizedState=b.baseState=a;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:Vh,lastRenderedState:a};b.queue=a;a=a.dispatch=ii.bind(null,M,a);return[b.memoizedState,a]}\nfunction bi(a,b,c,d){a={tag:a,create:b,destroy:c,deps:d,next:null};b=M.updateQueue;null===b?(b={lastEffect:null,stores:null},M.updateQueue=b,b.lastEffect=a.next=a):(c=b.lastEffect,null===c?b.lastEffect=a.next=a:(d=c.next,c.next=a,a.next=d,b.lastEffect=a));return a}function ji(){return Uh().memoizedState}function ki(a,b,c,d){var e=Th();M.flags|=a;e.memoizedState=bi(1|b,c,void 0,void 0===d?null:d)}\nfunction li(a,b,c,d){var e=Uh();d=void 0===d?null:d;var f=void 0;if(null!==N){var g=N.memoizedState;f=g.destroy;if(null!==d&&Mh(d,g.deps)){e.memoizedState=bi(b,c,f,d);return}}M.flags|=a;e.memoizedState=bi(1|b,c,f,d)}function mi(a,b){return ki(8390656,8,a,b)}function $h(a,b){return li(2048,8,a,b)}function ni(a,b){return li(4,2,a,b)}function oi(a,b){return li(4,4,a,b)}\nfunction pi(a,b){if(\"function\"===typeof b)return a=a(),b(a),function(){b(null)};if(null!==b&&void 0!==b)return a=a(),b.current=a,function(){b.current=null}}function qi(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return li(4,4,pi.bind(null,b,a),c)}function ri(){}function si(a,b){var c=Uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&Mh(b,d[1]))return d[0];c.memoizedState=[a,b];return a}\nfunction ti(a,b){var c=Uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&Mh(b,d[1]))return d[0];a=a();c.memoizedState=[a,b];return a}function ui(a,b,c){if(0===(Hh&21))return a.baseState&&(a.baseState=!1,dh=!0),a.memoizedState=c;He(c,b)||(c=yc(),M.lanes|=c,rh|=c,a.baseState=!0);return b}function vi(a,b){var c=C;C=0!==c&&4>c?c:4;a(!0);var d=Gh.transition;Gh.transition={};try{a(!1),b()}finally{C=c,Gh.transition=d}}function wi(){return Uh().memoizedState}\nfunction xi(a,b,c){var d=yi(a);c={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(zi(a))Ai(b,c);else if(c=hh(a,b,c,d),null!==c){var e=R();gi(c,a,d,e);Bi(c,b,d)}}\nfunction ii(a,b,c){var d=yi(a),e={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(zi(a))Ai(b,e);else{var f=a.alternate;if(0===a.lanes&&(null===f||0===f.lanes)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState,h=f(g,c);e.hasEagerState=!0;e.eagerState=h;if(He(h,g)){var k=b.interleaved;null===k?(e.next=e,gh(b)):(e.next=k.next,k.next=e);b.interleaved=e;return}}catch(l){}finally{}c=hh(a,b,e,d);null!==c&&(e=R(),gi(c,a,d,e),Bi(c,b,d))}}\nfunction zi(a){var b=a.alternate;return a===M||null!==b&&b===M}function Ai(a,b){Jh=Ih=!0;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}function Bi(a,b,c){if(0!==(c&4194240)){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nvar Rh={readContext:eh,useCallback:P,useContext:P,useEffect:P,useImperativeHandle:P,useInsertionEffect:P,useLayoutEffect:P,useMemo:P,useReducer:P,useRef:P,useState:P,useDebugValue:P,useDeferredValue:P,useTransition:P,useMutableSource:P,useSyncExternalStore:P,useId:P,unstable_isNewReconciler:!1},Oh={readContext:eh,useCallback:function(a,b){Th().memoizedState=[a,void 0===b?null:b];return a},useContext:eh,useEffect:mi,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return ki(4194308,\n4,pi.bind(null,b,a),c)},useLayoutEffect:function(a,b){return ki(4194308,4,a,b)},useInsertionEffect:function(a,b){return ki(4,2,a,b)},useMemo:function(a,b){var c=Th();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=Th();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};d.queue=a;a=a.dispatch=xi.bind(null,M,a);return[d.memoizedState,a]},useRef:function(a){var b=\nTh();a={current:a};return b.memoizedState=a},useState:hi,useDebugValue:ri,useDeferredValue:function(a){return Th().memoizedState=a},useTransition:function(){var a=hi(!1),b=a[0];a=vi.bind(null,a[1]);Th().memoizedState=a;return[b,a]},useMutableSource:function(){},useSyncExternalStore:function(a,b,c){var d=M,e=Th();if(I){if(void 0===c)throw Error(p(407));c=c()}else{c=b();if(null===Q)throw Error(p(349));0!==(Hh&30)||di(d,b,c)}e.memoizedState=c;var f={value:c,getSnapshot:b};e.queue=f;mi(ai.bind(null,d,\nf,a),[a]);d.flags|=2048;bi(9,ci.bind(null,d,f,c,b),void 0,null);return c},useId:function(){var a=Th(),b=Q.identifierPrefix;if(I){var c=sg;var d=rg;c=(d&~(1<<32-oc(d)-1)).toString(32)+c;b=\":\"+b+\"R\"+c;c=Kh++;0<c&&(b+=\"H\"+c.toString(32));b+=\":\"}else c=Lh++,b=\":\"+b+\"r\"+c.toString(32)+\":\";return a.memoizedState=b},unstable_isNewReconciler:!1},Ph={readContext:eh,useCallback:si,useContext:eh,useEffect:$h,useImperativeHandle:qi,useInsertionEffect:ni,useLayoutEffect:oi,useMemo:ti,useReducer:Wh,useRef:ji,useState:function(){return Wh(Vh)},\nuseDebugValue:ri,useDeferredValue:function(a){var b=Uh();return ui(b,N.memoizedState,a)},useTransition:function(){var a=Wh(Vh)[0],b=Uh().memoizedState;return[a,b]},useMutableSource:Yh,useSyncExternalStore:Zh,useId:wi,unstable_isNewReconciler:!1},Qh={readContext:eh,useCallback:si,useContext:eh,useEffect:$h,useImperativeHandle:qi,useInsertionEffect:ni,useLayoutEffect:oi,useMemo:ti,useReducer:Xh,useRef:ji,useState:function(){return Xh(Vh)},useDebugValue:ri,useDeferredValue:function(a){var b=Uh();return null===\nN?b.memoizedState=a:ui(b,N.memoizedState,a)},useTransition:function(){var a=Xh(Vh)[0],b=Uh().memoizedState;return[a,b]},useMutableSource:Yh,useSyncExternalStore:Zh,useId:wi,unstable_isNewReconciler:!1};function Ci(a,b){if(a&&a.defaultProps){b=A({},b);a=a.defaultProps;for(var c in a)void 0===b[c]&&(b[c]=a[c]);return b}return b}function Di(a,b,c,d){b=a.memoizedState;c=c(d,b);c=null===c||void 0===c?b:A({},b,c);a.memoizedState=c;0===a.lanes&&(a.updateQueue.baseState=c)}\nvar Ei={isMounted:function(a){return(a=a._reactInternals)?Vb(a)===a:!1},enqueueSetState:function(a,b,c){a=a._reactInternals;var d=R(),e=yi(a),f=mh(d,e);f.payload=b;void 0!==c&&null!==c&&(f.callback=c);b=nh(a,f,e);null!==b&&(gi(b,a,e,d),oh(b,a,e))},enqueueReplaceState:function(a,b,c){a=a._reactInternals;var d=R(),e=yi(a),f=mh(d,e);f.tag=1;f.payload=b;void 0!==c&&null!==c&&(f.callback=c);b=nh(a,f,e);null!==b&&(gi(b,a,e,d),oh(b,a,e))},enqueueForceUpdate:function(a,b){a=a._reactInternals;var c=R(),d=\nyi(a),e=mh(c,d);e.tag=2;void 0!==b&&null!==b&&(e.callback=b);b=nh(a,e,d);null!==b&&(gi(b,a,d,c),oh(b,a,d))}};function Fi(a,b,c,d,e,f,g){a=a.stateNode;return\"function\"===typeof a.shouldComponentUpdate?a.shouldComponentUpdate(d,f,g):b.prototype&&b.prototype.isPureReactComponent?!Ie(c,d)||!Ie(e,f):!0}\nfunction Gi(a,b,c){var d=!1,e=Vf;var f=b.contextType;\"object\"===typeof f&&null!==f?f=eh(f):(e=Zf(b)?Xf:H.current,d=b.contextTypes,f=(d=null!==d&&void 0!==d)?Yf(a,e):Vf);b=new b(c,f);a.memoizedState=null!==b.state&&void 0!==b.state?b.state:null;b.updater=Ei;a.stateNode=b;b._reactInternals=a;d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=e,a.__reactInternalMemoizedMaskedChildContext=f);return b}\nfunction Hi(a,b,c,d){a=b.state;\"function\"===typeof b.componentWillReceiveProps&&b.componentWillReceiveProps(c,d);\"function\"===typeof b.UNSAFE_componentWillReceiveProps&&b.UNSAFE_componentWillReceiveProps(c,d);b.state!==a&&Ei.enqueueReplaceState(b,b.state,null)}\nfunction Ii(a,b,c,d){var e=a.stateNode;e.props=c;e.state=a.memoizedState;e.refs={};kh(a);var f=b.contextType;\"object\"===typeof f&&null!==f?e.context=eh(f):(f=Zf(b)?Xf:H.current,e.context=Yf(a,f));e.state=a.memoizedState;f=b.getDerivedStateFromProps;\"function\"===typeof f&&(Di(a,b,f,c),e.state=a.memoizedState);\"function\"===typeof b.getDerivedStateFromProps||\"function\"===typeof e.getSnapshotBeforeUpdate||\"function\"!==typeof e.UNSAFE_componentWillMount&&\"function\"!==typeof e.componentWillMount||(b=e.state,\n\"function\"===typeof e.componentWillMount&&e.componentWillMount(),\"function\"===typeof e.UNSAFE_componentWillMount&&e.UNSAFE_componentWillMount(),b!==e.state&&Ei.enqueueReplaceState(e,e.state,null),qh(a,c,e,d),e.state=a.memoizedState);\"function\"===typeof e.componentDidMount&&(a.flags|=4194308)}function Ji(a,b){try{var c=\"\",d=b;do c+=Pa(d),d=d.return;while(d);var e=c}catch(f){e=\"\\nError generating stack: \"+f.message+\"\\n\"+f.stack}return{value:a,source:b,stack:e,digest:null}}\nfunction Ki(a,b,c){return{value:a,source:null,stack:null!=c?c:null,digest:null!=b?b:null}}function Li(a,b){try{console.error(b.value)}catch(c){setTimeout(function(){throw c;})}}var Mi=\"function\"===typeof WeakMap?WeakMap:Map;function Ni(a,b,c){c=mh(-1,c);c.tag=3;c.payload={element:null};var d=b.value;c.callback=function(){Oi||(Oi=!0,Pi=d);Li(a,b)};return c}\nfunction Qi(a,b,c){c=mh(-1,c);c.tag=3;var d=a.type.getDerivedStateFromError;if(\"function\"===typeof d){var e=b.value;c.payload=function(){return d(e)};c.callback=function(){Li(a,b)}}var f=a.stateNode;null!==f&&\"function\"===typeof f.componentDidCatch&&(c.callback=function(){Li(a,b);\"function\"!==typeof d&&(null===Ri?Ri=new Set([this]):Ri.add(this));var c=b.stack;this.componentDidCatch(b.value,{componentStack:null!==c?c:\"\"})});return c}\nfunction Si(a,b,c){var d=a.pingCache;if(null===d){d=a.pingCache=new Mi;var e=new Set;d.set(b,e)}else e=d.get(b),void 0===e&&(e=new Set,d.set(b,e));e.has(c)||(e.add(c),a=Ti.bind(null,a,b,c),b.then(a,a))}function Ui(a){do{var b;if(b=13===a.tag)b=a.memoizedState,b=null!==b?null!==b.dehydrated?!0:!1:!0;if(b)return a;a=a.return}while(null!==a);return null}\nfunction Vi(a,b,c,d,e){if(0===(a.mode&1))return a===b?a.flags|=65536:(a.flags|=128,c.flags|=131072,c.flags&=-52805,1===c.tag&&(null===c.alternate?c.tag=17:(b=mh(-1,1),b.tag=2,nh(c,b,1))),c.lanes|=1),a;a.flags|=65536;a.lanes=e;return a}var Wi=ua.ReactCurrentOwner,dh=!1;function Xi(a,b,c,d){b.child=null===a?Vg(b,null,c,d):Ug(b,a.child,c,d)}\nfunction Yi(a,b,c,d,e){c=c.render;var f=b.ref;ch(b,e);d=Nh(a,b,c,d,f,e);c=Sh();if(null!==a&&!dh)return b.updateQueue=a.updateQueue,b.flags&=-2053,a.lanes&=~e,Zi(a,b,e);I&&c&&vg(b);b.flags|=1;Xi(a,b,d,e);return b.child}\nfunction $i(a,b,c,d,e){if(null===a){var f=c.type;if(\"function\"===typeof f&&!aj(f)&&void 0===f.defaultProps&&null===c.compare&&void 0===c.defaultProps)return b.tag=15,b.type=f,bj(a,b,f,d,e);a=Rg(c.type,null,d,b,b.mode,e);a.ref=b.ref;a.return=b;return b.child=a}f=a.child;if(0===(a.lanes&e)){var g=f.memoizedProps;c=c.compare;c=null!==c?c:Ie;if(c(g,d)&&a.ref===b.ref)return Zi(a,b,e)}b.flags|=1;a=Pg(f,d);a.ref=b.ref;a.return=b;return b.child=a}\nfunction bj(a,b,c,d,e){if(null!==a){var f=a.memoizedProps;if(Ie(f,d)&&a.ref===b.ref)if(dh=!1,b.pendingProps=d=f,0!==(a.lanes&e))0!==(a.flags&131072)&&(dh=!0);else return b.lanes=a.lanes,Zi(a,b,e)}return cj(a,b,c,d,e)}\nfunction dj(a,b,c){var d=b.pendingProps,e=d.children,f=null!==a?a.memoizedState:null;if(\"hidden\"===d.mode)if(0===(b.mode&1))b.memoizedState={baseLanes:0,cachePool:null,transitions:null},G(ej,fj),fj|=c;else{if(0===(c&1073741824))return a=null!==f?f.baseLanes|c:c,b.lanes=b.childLanes=1073741824,b.memoizedState={baseLanes:a,cachePool:null,transitions:null},b.updateQueue=null,G(ej,fj),fj|=a,null;b.memoizedState={baseLanes:0,cachePool:null,transitions:null};d=null!==f?f.baseLanes:c;G(ej,fj);fj|=d}else null!==\nf?(d=f.baseLanes|c,b.memoizedState=null):d=c,G(ej,fj),fj|=d;Xi(a,b,e,c);return b.child}function gj(a,b){var c=b.ref;if(null===a&&null!==c||null!==a&&a.ref!==c)b.flags|=512,b.flags|=2097152}function cj(a,b,c,d,e){var f=Zf(c)?Xf:H.current;f=Yf(b,f);ch(b,e);c=Nh(a,b,c,d,f,e);d=Sh();if(null!==a&&!dh)return b.updateQueue=a.updateQueue,b.flags&=-2053,a.lanes&=~e,Zi(a,b,e);I&&d&&vg(b);b.flags|=1;Xi(a,b,c,e);return b.child}\nfunction hj(a,b,c,d,e){if(Zf(c)){var f=!0;cg(b)}else f=!1;ch(b,e);if(null===b.stateNode)ij(a,b),Gi(b,c,d),Ii(b,c,d,e),d=!0;else if(null===a){var g=b.stateNode,h=b.memoizedProps;g.props=h;var k=g.context,l=c.contextType;\"object\"===typeof l&&null!==l?l=eh(l):(l=Zf(c)?Xf:H.current,l=Yf(b,l));var m=c.getDerivedStateFromProps,q=\"function\"===typeof m||\"function\"===typeof g.getSnapshotBeforeUpdate;q||\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\"function\"!==typeof g.componentWillReceiveProps||\n(h!==d||k!==l)&&Hi(b,g,d,l);jh=!1;var r=b.memoizedState;g.state=r;qh(b,d,g,e);k=b.memoizedState;h!==d||r!==k||Wf.current||jh?(\"function\"===typeof m&&(Di(b,c,m,d),k=b.memoizedState),(h=jh||Fi(b,c,h,d,r,k,l))?(q||\"function\"!==typeof g.UNSAFE_componentWillMount&&\"function\"!==typeof g.componentWillMount||(\"function\"===typeof g.componentWillMount&&g.componentWillMount(),\"function\"===typeof g.UNSAFE_componentWillMount&&g.UNSAFE_componentWillMount()),\"function\"===typeof g.componentDidMount&&(b.flags|=4194308)):\n(\"function\"===typeof g.componentDidMount&&(b.flags|=4194308),b.memoizedProps=d,b.memoizedState=k),g.props=d,g.state=k,g.context=l,d=h):(\"function\"===typeof g.componentDidMount&&(b.flags|=4194308),d=!1)}else{g=b.stateNode;lh(a,b);h=b.memoizedProps;l=b.type===b.elementType?h:Ci(b.type,h);g.props=l;q=b.pendingProps;r=g.context;k=c.contextType;\"object\"===typeof k&&null!==k?k=eh(k):(k=Zf(c)?Xf:H.current,k=Yf(b,k));var y=c.getDerivedStateFromProps;(m=\"function\"===typeof y||\"function\"===typeof g.getSnapshotBeforeUpdate)||\n\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\"function\"!==typeof g.componentWillReceiveProps||(h!==q||r!==k)&&Hi(b,g,d,k);jh=!1;r=b.memoizedState;g.state=r;qh(b,d,g,e);var n=b.memoizedState;h!==q||r!==n||Wf.current||jh?(\"function\"===typeof y&&(Di(b,c,y,d),n=b.memoizedState),(l=jh||Fi(b,c,l,d,r,n,k)||!1)?(m||\"function\"!==typeof g.UNSAFE_componentWillUpdate&&\"function\"!==typeof g.componentWillUpdate||(\"function\"===typeof g.componentWillUpdate&&g.componentWillUpdate(d,n,k),\"function\"===typeof g.UNSAFE_componentWillUpdate&&\ng.UNSAFE_componentWillUpdate(d,n,k)),\"function\"===typeof g.componentDidUpdate&&(b.flags|=4),\"function\"===typeof g.getSnapshotBeforeUpdate&&(b.flags|=1024)):(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=1024),b.memoizedProps=d,b.memoizedState=n),g.props=d,g.state=n,g.context=k,d=l):(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&r===\na.memoizedState||(b.flags|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=1024),d=!1)}return jj(a,b,c,d,f,e)}\nfunction jj(a,b,c,d,e,f){gj(a,b);var g=0!==(b.flags&128);if(!d&&!g)return e&&dg(b,c,!1),Zi(a,b,f);d=b.stateNode;Wi.current=b;var h=g&&\"function\"!==typeof c.getDerivedStateFromError?null:d.render();b.flags|=1;null!==a&&g?(b.child=Ug(b,a.child,null,f),b.child=Ug(b,null,h,f)):Xi(a,b,h,f);b.memoizedState=d.state;e&&dg(b,c,!0);return b.child}function kj(a){var b=a.stateNode;b.pendingContext?ag(a,b.pendingContext,b.pendingContext!==b.context):b.context&&ag(a,b.context,!1);yh(a,b.containerInfo)}\nfunction lj(a,b,c,d,e){Ig();Jg(e);b.flags|=256;Xi(a,b,c,d);return b.child}var mj={dehydrated:null,treeContext:null,retryLane:0};function nj(a){return{baseLanes:a,cachePool:null,transitions:null}}\nfunction oj(a,b,c){var d=b.pendingProps,e=L.current,f=!1,g=0!==(b.flags&128),h;(h=g)||(h=null!==a&&null===a.memoizedState?!1:0!==(e&2));if(h)f=!0,b.flags&=-129;else if(null===a||null!==a.memoizedState)e|=1;G(L,e&1);if(null===a){Eg(b);a=b.memoizedState;if(null!==a&&(a=a.dehydrated,null!==a))return 0===(b.mode&1)?b.lanes=1:\"$!\"===a.data?b.lanes=8:b.lanes=1073741824,null;g=d.children;a=d.fallback;return f?(d=b.mode,f=b.child,g={mode:\"hidden\",children:g},0===(d&1)&&null!==f?(f.childLanes=0,f.pendingProps=\ng):f=pj(g,d,0,null),a=Tg(a,d,c,null),f.return=b,a.return=b,f.sibling=a,b.child=f,b.child.memoizedState=nj(c),b.memoizedState=mj,a):qj(b,g)}e=a.memoizedState;if(null!==e&&(h=e.dehydrated,null!==h))return rj(a,b,g,d,h,e,c);if(f){f=d.fallback;g=b.mode;e=a.child;h=e.sibling;var k={mode:\"hidden\",children:d.children};0===(g&1)&&b.child!==e?(d=b.child,d.childLanes=0,d.pendingProps=k,b.deletions=null):(d=Pg(e,k),d.subtreeFlags=e.subtreeFlags&14680064);null!==h?f=Pg(h,f):(f=Tg(f,g,c,null),f.flags|=2);f.return=\nb;d.return=b;d.sibling=f;b.child=d;d=f;f=b.child;g=a.child.memoizedState;g=null===g?nj(c):{baseLanes:g.baseLanes|c,cachePool:null,transitions:g.transitions};f.memoizedState=g;f.childLanes=a.childLanes&~c;b.memoizedState=mj;return d}f=a.child;a=f.sibling;d=Pg(f,{mode:\"visible\",children:d.children});0===(b.mode&1)&&(d.lanes=c);d.return=b;d.sibling=null;null!==a&&(c=b.deletions,null===c?(b.deletions=[a],b.flags|=16):c.push(a));b.child=d;b.memoizedState=null;return d}\nfunction qj(a,b){b=pj({mode:\"visible\",children:b},a.mode,0,null);b.return=a;return a.child=b}function sj(a,b,c,d){null!==d&&Jg(d);Ug(b,a.child,null,c);a=qj(b,b.pendingProps.children);a.flags|=2;b.memoizedState=null;return a}\nfunction rj(a,b,c,d,e,f,g){if(c){if(b.flags&256)return b.flags&=-257,d=Ki(Error(p(422))),sj(a,b,g,d);if(null!==b.memoizedState)return b.child=a.child,b.flags|=128,null;f=d.fallback;e=b.mode;d=pj({mode:\"visible\",children:d.children},e,0,null);f=Tg(f,e,g,null);f.flags|=2;d.return=b;f.return=b;d.sibling=f;b.child=d;0!==(b.mode&1)&&Ug(b,a.child,null,g);b.child.memoizedState=nj(g);b.memoizedState=mj;return f}if(0===(b.mode&1))return sj(a,b,g,null);if(\"$!\"===e.data){d=e.nextSibling&&e.nextSibling.dataset;\nif(d)var h=d.dgst;d=h;f=Error(p(419));d=Ki(f,d,void 0);return sj(a,b,g,d)}h=0!==(g&a.childLanes);if(dh||h){d=Q;if(null!==d){switch(g&-g){case 4:e=2;break;case 16:e=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:e=32;break;case 536870912:e=268435456;break;default:e=0}e=0!==(e&(d.suspendedLanes|g))?0:e;\n0!==e&&e!==f.retryLane&&(f.retryLane=e,ih(a,e),gi(d,a,e,-1))}tj();d=Ki(Error(p(421)));return sj(a,b,g,d)}if(\"$?\"===e.data)return b.flags|=128,b.child=a.child,b=uj.bind(null,a),e._reactRetry=b,null;a=f.treeContext;yg=Lf(e.nextSibling);xg=b;I=!0;zg=null;null!==a&&(og[pg++]=rg,og[pg++]=sg,og[pg++]=qg,rg=a.id,sg=a.overflow,qg=b);b=qj(b,d.children);b.flags|=4096;return b}function vj(a,b,c){a.lanes|=b;var d=a.alternate;null!==d&&(d.lanes|=b);bh(a.return,b,c)}\nfunction wj(a,b,c,d,e){var f=a.memoizedState;null===f?a.memoizedState={isBackwards:b,rendering:null,renderingStartTime:0,last:d,tail:c,tailMode:e}:(f.isBackwards=b,f.rendering=null,f.renderingStartTime=0,f.last=d,f.tail=c,f.tailMode=e)}\nfunction xj(a,b,c){var d=b.pendingProps,e=d.revealOrder,f=d.tail;Xi(a,b,d.children,c);d=L.current;if(0!==(d&2))d=d&1|2,b.flags|=128;else{if(null!==a&&0!==(a.flags&128))a:for(a=b.child;null!==a;){if(13===a.tag)null!==a.memoizedState&&vj(a,c,b);else if(19===a.tag)vj(a,c,b);else if(null!==a.child){a.child.return=a;a=a.child;continue}if(a===b)break a;for(;null===a.sibling;){if(null===a.return||a.return===b)break a;a=a.return}a.sibling.return=a.return;a=a.sibling}d&=1}G(L,d);if(0===(b.mode&1))b.memoizedState=\nnull;else switch(e){case \"forwards\":c=b.child;for(e=null;null!==c;)a=c.alternate,null!==a&&null===Ch(a)&&(e=c),c=c.sibling;c=e;null===c?(e=b.child,b.child=null):(e=c.sibling,c.sibling=null);wj(b,!1,e,c,f);break;case \"backwards\":c=null;e=b.child;for(b.child=null;null!==e;){a=e.alternate;if(null!==a&&null===Ch(a)){b.child=e;break}a=e.sibling;e.sibling=c;c=e;e=a}wj(b,!0,c,null,f);break;case \"together\":wj(b,!1,null,null,void 0);break;default:b.memoizedState=null}return b.child}\nfunction ij(a,b){0===(b.mode&1)&&null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2)}function Zi(a,b,c){null!==a&&(b.dependencies=a.dependencies);rh|=b.lanes;if(0===(c&b.childLanes))return null;if(null!==a&&b.child!==a.child)throw Error(p(153));if(null!==b.child){a=b.child;c=Pg(a,a.pendingProps);b.child=c;for(c.return=b;null!==a.sibling;)a=a.sibling,c=c.sibling=Pg(a,a.pendingProps),c.return=b;c.sibling=null}return b.child}\nfunction yj(a,b,c){switch(b.tag){case 3:kj(b);Ig();break;case 5:Ah(b);break;case 1:Zf(b.type)&&cg(b);break;case 4:yh(b,b.stateNode.containerInfo);break;case 10:var d=b.type._context,e=b.memoizedProps.value;G(Wg,d._currentValue);d._currentValue=e;break;case 13:d=b.memoizedState;if(null!==d){if(null!==d.dehydrated)return G(L,L.current&1),b.flags|=128,null;if(0!==(c&b.child.childLanes))return oj(a,b,c);G(L,L.current&1);a=Zi(a,b,c);return null!==a?a.sibling:null}G(L,L.current&1);break;case 19:d=0!==(c&\nb.childLanes);if(0!==(a.flags&128)){if(d)return xj(a,b,c);b.flags|=128}e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null,e.lastEffect=null);G(L,L.current);if(d)break;else return null;case 22:case 23:return b.lanes=0,dj(a,b,c)}return Zi(a,b,c)}var zj,Aj,Bj,Cj;\nzj=function(a,b){for(var c=b.child;null!==c;){if(5===c.tag||6===c.tag)a.appendChild(c.stateNode);else if(4!==c.tag&&null!==c.child){c.child.return=c;c=c.child;continue}if(c===b)break;for(;null===c.sibling;){if(null===c.return||c.return===b)return;c=c.return}c.sibling.return=c.return;c=c.sibling}};Aj=function(){};\nBj=function(a,b,c,d){var e=a.memoizedProps;if(e!==d){a=b.stateNode;xh(uh.current);var f=null;switch(c){case \"input\":e=Ya(a,e);d=Ya(a,d);f=[];break;case \"select\":e=A({},e,{value:void 0});d=A({},d,{value:void 0});f=[];break;case \"textarea\":e=gb(a,e);d=gb(a,d);f=[];break;default:\"function\"!==typeof e.onClick&&\"function\"===typeof d.onClick&&(a.onclick=Bf)}ub(c,d);var g;c=null;for(l in e)if(!d.hasOwnProperty(l)&&e.hasOwnProperty(l)&&null!=e[l])if(\"style\"===l){var h=e[l];for(g in h)h.hasOwnProperty(g)&&\n(c||(c={}),c[g]=\"\")}else\"dangerouslySetInnerHTML\"!==l&&\"children\"!==l&&\"suppressContentEditableWarning\"!==l&&\"suppressHydrationWarning\"!==l&&\"autoFocus\"!==l&&(ea.hasOwnProperty(l)?f||(f=[]):(f=f||[]).push(l,null));for(l in d){var k=d[l];h=null!=e?e[l]:void 0;if(d.hasOwnProperty(l)&&k!==h&&(null!=k||null!=h))if(\"style\"===l)if(h){for(g in h)!h.hasOwnProperty(g)||k&&k.hasOwnProperty(g)||(c||(c={}),c[g]=\"\");for(g in k)k.hasOwnProperty(g)&&h[g]!==k[g]&&(c||(c={}),c[g]=k[g])}else c||(f||(f=[]),f.push(l,\nc)),c=k;else\"dangerouslySetInnerHTML\"===l?(k=k?k.__html:void 0,h=h?h.__html:void 0,null!=k&&h!==k&&(f=f||[]).push(l,k)):\"children\"===l?\"string\"!==typeof k&&\"number\"!==typeof k||(f=f||[]).push(l,\"\"+k):\"suppressContentEditableWarning\"!==l&&\"suppressHydrationWarning\"!==l&&(ea.hasOwnProperty(l)?(null!=k&&\"onScroll\"===l&&D(\"scroll\",a),f||h===k||(f=[])):(f=f||[]).push(l,k))}c&&(f=f||[]).push(\"style\",c);var l=f;if(b.updateQueue=l)b.flags|=4}};Cj=function(a,b,c,d){c!==d&&(b.flags|=4)};\nfunction Dj(a,b){if(!I)switch(a.tailMode){case \"hidden\":b=a.tail;for(var c=null;null!==b;)null!==b.alternate&&(c=b),b=b.sibling;null===c?a.tail=null:c.sibling=null;break;case \"collapsed\":c=a.tail;for(var d=null;null!==c;)null!==c.alternate&&(d=c),c=c.sibling;null===d?b||null===a.tail?a.tail=null:a.tail.sibling=null:d.sibling=null}}\nfunction S(a){var b=null!==a.alternate&&a.alternate.child===a.child,c=0,d=0;if(b)for(var e=a.child;null!==e;)c|=e.lanes|e.childLanes,d|=e.subtreeFlags&14680064,d|=e.flags&14680064,e.return=a,e=e.sibling;else for(e=a.child;null!==e;)c|=e.lanes|e.childLanes,d|=e.subtreeFlags,d|=e.flags,e.return=a,e=e.sibling;a.subtreeFlags|=d;a.childLanes=c;return b}\nfunction Ej(a,b,c){var d=b.pendingProps;wg(b);switch(b.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return S(b),null;case 1:return Zf(b.type)&&$f(),S(b),null;case 3:d=b.stateNode;zh();E(Wf);E(H);Eh();d.pendingContext&&(d.context=d.pendingContext,d.pendingContext=null);if(null===a||null===a.child)Gg(b)?b.flags|=4:null===a||a.memoizedState.isDehydrated&&0===(b.flags&256)||(b.flags|=1024,null!==zg&&(Fj(zg),zg=null));Aj(a,b);S(b);return null;case 5:Bh(b);var e=xh(wh.current);\nc=b.type;if(null!==a&&null!=b.stateNode)Bj(a,b,c,d,e),a.ref!==b.ref&&(b.flags|=512,b.flags|=2097152);else{if(!d){if(null===b.stateNode)throw Error(p(166));S(b);return null}a=xh(uh.current);if(Gg(b)){d=b.stateNode;c=b.type;var f=b.memoizedProps;d[Of]=b;d[Pf]=f;a=0!==(b.mode&1);switch(c){case \"dialog\":D(\"cancel\",d);D(\"close\",d);break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",d);break;case \"video\":case \"audio\":for(e=0;e<lf.length;e++)D(lf[e],d);break;case \"source\":D(\"error\",d);break;case \"img\":case \"image\":case \"link\":D(\"error\",\nd);D(\"load\",d);break;case \"details\":D(\"toggle\",d);break;case \"input\":Za(d,f);D(\"invalid\",d);break;case \"select\":d._wrapperState={wasMultiple:!!f.multiple};D(\"invalid\",d);break;case \"textarea\":hb(d,f),D(\"invalid\",d)}ub(c,f);e=null;for(var g in f)if(f.hasOwnProperty(g)){var h=f[g];\"children\"===g?\"string\"===typeof h?d.textContent!==h&&(!0!==f.suppressHydrationWarning&&Af(d.textContent,h,a),e=[\"children\",h]):\"number\"===typeof h&&d.textContent!==\"\"+h&&(!0!==f.suppressHydrationWarning&&Af(d.textContent,\nh,a),e=[\"children\",\"\"+h]):ea.hasOwnProperty(g)&&null!=h&&\"onScroll\"===g&&D(\"scroll\",d)}switch(c){case \"input\":Va(d);db(d,f,!0);break;case \"textarea\":Va(d);jb(d);break;case \"select\":case \"option\":break;default:\"function\"===typeof f.onClick&&(d.onclick=Bf)}d=e;b.updateQueue=d;null!==d&&(b.flags|=4)}else{g=9===e.nodeType?e:e.ownerDocument;\"http://www.w3.org/1999/xhtml\"===a&&(a=kb(c));\"http://www.w3.org/1999/xhtml\"===a?\"script\"===c?(a=g.createElement(\"div\"),a.innerHTML=\"<script>\\x3c/script>\",a=a.removeChild(a.firstChild)):\n\"string\"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),\"select\"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[Of]=b;a[Pf]=d;zj(a,b,!1,!1);b.stateNode=a;a:{g=vb(c,d);switch(c){case \"dialog\":D(\"cancel\",a);D(\"close\",a);e=d;break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",a);e=d;break;case \"video\":case \"audio\":for(e=0;e<lf.length;e++)D(lf[e],a);e=d;break;case \"source\":D(\"error\",a);e=d;break;case \"img\":case \"image\":case \"link\":D(\"error\",\na);D(\"load\",a);e=d;break;case \"details\":D(\"toggle\",a);e=d;break;case \"input\":Za(a,d);e=Ya(a,d);D(\"invalid\",a);break;case \"option\":e=d;break;case \"select\":a._wrapperState={wasMultiple:!!d.multiple};e=A({},d,{value:void 0});D(\"invalid\",a);break;case \"textarea\":hb(a,d);e=gb(a,d);D(\"invalid\",a);break;default:e=d}ub(c,e);h=e;for(f in h)if(h.hasOwnProperty(f)){var k=h[f];\"style\"===f?sb(a,k):\"dangerouslySetInnerHTML\"===f?(k=k?k.__html:void 0,null!=k&&nb(a,k)):\"children\"===f?\"string\"===typeof k?(\"textarea\"!==\nc||\"\"!==k)&&ob(a,k):\"number\"===typeof k&&ob(a,\"\"+k):\"suppressContentEditableWarning\"!==f&&\"suppressHydrationWarning\"!==f&&\"autoFocus\"!==f&&(ea.hasOwnProperty(f)?null!=k&&\"onScroll\"===f&&D(\"scroll\",a):null!=k&&ta(a,f,k,g))}switch(c){case \"input\":Va(a);db(a,d,!1);break;case \"textarea\":Va(a);jb(a);break;case \"option\":null!=d.value&&a.setAttribute(\"value\",\"\"+Sa(d.value));break;case \"select\":a.multiple=!!d.multiple;f=d.value;null!=f?fb(a,!!d.multiple,f,!1):null!=d.defaultValue&&fb(a,!!d.multiple,d.defaultValue,\n!0);break;default:\"function\"===typeof e.onClick&&(a.onclick=Bf)}switch(c){case \"button\":case \"input\":case \"select\":case \"textarea\":d=!!d.autoFocus;break a;case \"img\":d=!0;break a;default:d=!1}}d&&(b.flags|=4)}null!==b.ref&&(b.flags|=512,b.flags|=2097152)}S(b);return null;case 6:if(a&&null!=b.stateNode)Cj(a,b,a.memoizedProps,d);else{if(\"string\"!==typeof d&&null===b.stateNode)throw Error(p(166));c=xh(wh.current);xh(uh.current);if(Gg(b)){d=b.stateNode;c=b.memoizedProps;d[Of]=b;if(f=d.nodeValue!==c)if(a=\nxg,null!==a)switch(a.tag){case 3:Af(d.nodeValue,c,0!==(a.mode&1));break;case 5:!0!==a.memoizedProps.suppressHydrationWarning&&Af(d.nodeValue,c,0!==(a.mode&1))}f&&(b.flags|=4)}else d=(9===c.nodeType?c:c.ownerDocument).createTextNode(d),d[Of]=b,b.stateNode=d}S(b);return null;case 13:E(L);d=b.memoizedState;if(null===a||null!==a.memoizedState&&null!==a.memoizedState.dehydrated){if(I&&null!==yg&&0!==(b.mode&1)&&0===(b.flags&128))Hg(),Ig(),b.flags|=98560,f=!1;else if(f=Gg(b),null!==d&&null!==d.dehydrated){if(null===\na){if(!f)throw Error(p(318));f=b.memoizedState;f=null!==f?f.dehydrated:null;if(!f)throw Error(p(317));f[Of]=b}else Ig(),0===(b.flags&128)&&(b.memoizedState=null),b.flags|=4;S(b);f=!1}else null!==zg&&(Fj(zg),zg=null),f=!0;if(!f)return b.flags&65536?b:null}if(0!==(b.flags&128))return b.lanes=c,b;d=null!==d;d!==(null!==a&&null!==a.memoizedState)&&d&&(b.child.flags|=8192,0!==(b.mode&1)&&(null===a||0!==(L.current&1)?0===T&&(T=3):tj()));null!==b.updateQueue&&(b.flags|=4);S(b);return null;case 4:return zh(),\nAj(a,b),null===a&&sf(b.stateNode.containerInfo),S(b),null;case 10:return ah(b.type._context),S(b),null;case 17:return Zf(b.type)&&$f(),S(b),null;case 19:E(L);f=b.memoizedState;if(null===f)return S(b),null;d=0!==(b.flags&128);g=f.rendering;if(null===g)if(d)Dj(f,!1);else{if(0!==T||null!==a&&0!==(a.flags&128))for(a=b.child;null!==a;){g=Ch(a);if(null!==g){b.flags|=128;Dj(f,!1);d=g.updateQueue;null!==d&&(b.updateQueue=d,b.flags|=4);b.subtreeFlags=0;d=c;for(c=b.child;null!==c;)f=c,a=d,f.flags&=14680066,\ng=f.alternate,null===g?(f.childLanes=0,f.lanes=a,f.child=null,f.subtreeFlags=0,f.memoizedProps=null,f.memoizedState=null,f.updateQueue=null,f.dependencies=null,f.stateNode=null):(f.childLanes=g.childLanes,f.lanes=g.lanes,f.child=g.child,f.subtreeFlags=0,f.deletions=null,f.memoizedProps=g.memoizedProps,f.memoizedState=g.memoizedState,f.updateQueue=g.updateQueue,f.type=g.type,a=g.dependencies,f.dependencies=null===a?null:{lanes:a.lanes,firstContext:a.firstContext}),c=c.sibling;G(L,L.current&1|2);return b.child}a=\na.sibling}null!==f.tail&&B()>Gj&&(b.flags|=128,d=!0,Dj(f,!1),b.lanes=4194304)}else{if(!d)if(a=Ch(g),null!==a){if(b.flags|=128,d=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),Dj(f,!0),null===f.tail&&\"hidden\"===f.tailMode&&!g.alternate&&!I)return S(b),null}else 2*B()-f.renderingStartTime>Gj&&1073741824!==c&&(b.flags|=128,d=!0,Dj(f,!1),b.lanes=4194304);f.isBackwards?(g.sibling=b.child,b.child=g):(c=f.last,null!==c?c.sibling=g:b.child=g,f.last=g)}if(null!==f.tail)return b=f.tail,f.rendering=\nb,f.tail=b.sibling,f.renderingStartTime=B(),b.sibling=null,c=L.current,G(L,d?c&1|2:c&1),b;S(b);return null;case 22:case 23:return Hj(),d=null!==b.memoizedState,null!==a&&null!==a.memoizedState!==d&&(b.flags|=8192),d&&0!==(b.mode&1)?0!==(fj&1073741824)&&(S(b),b.subtreeFlags&6&&(b.flags|=8192)):S(b),null;case 24:return null;case 25:return null}throw Error(p(156,b.tag));}\nfunction Ij(a,b){wg(b);switch(b.tag){case 1:return Zf(b.type)&&$f(),a=b.flags,a&65536?(b.flags=a&-65537|128,b):null;case 3:return zh(),E(Wf),E(H),Eh(),a=b.flags,0!==(a&65536)&&0===(a&128)?(b.flags=a&-65537|128,b):null;case 5:return Bh(b),null;case 13:E(L);a=b.memoizedState;if(null!==a&&null!==a.dehydrated){if(null===b.alternate)throw Error(p(340));Ig()}a=b.flags;return a&65536?(b.flags=a&-65537|128,b):null;case 19:return E(L),null;case 4:return zh(),null;case 10:return ah(b.type._context),null;case 22:case 23:return Hj(),\nnull;case 24:return null;default:return null}}var Jj=!1,U=!1,Kj=\"function\"===typeof WeakSet?WeakSet:Set,V=null;function Lj(a,b){var c=a.ref;if(null!==c)if(\"function\"===typeof c)try{c(null)}catch(d){W(a,b,d)}else c.current=null}function Mj(a,b,c){try{c()}catch(d){W(a,b,d)}}var Nj=!1;\nfunction Oj(a,b){Cf=dd;a=Me();if(Ne(a)){if(\"selectionStart\"in a)var c={start:a.selectionStart,end:a.selectionEnd};else a:{c=(c=a.ownerDocument)&&c.defaultView||window;var d=c.getSelection&&c.getSelection();if(d&&0!==d.rangeCount){c=d.anchorNode;var e=d.anchorOffset,f=d.focusNode;d=d.focusOffset;try{c.nodeType,f.nodeType}catch(F){c=null;break a}var g=0,h=-1,k=-1,l=0,m=0,q=a,r=null;b:for(;;){for(var y;;){q!==c||0!==e&&3!==q.nodeType||(h=g+e);q!==f||0!==d&&3!==q.nodeType||(k=g+d);3===q.nodeType&&(g+=\nq.nodeValue.length);if(null===(y=q.firstChild))break;r=q;q=y}for(;;){if(q===a)break b;r===c&&++l===e&&(h=g);r===f&&++m===d&&(k=g);if(null!==(y=q.nextSibling))break;q=r;r=q.parentNode}q=y}c=-1===h||-1===k?null:{start:h,end:k}}else c=null}c=c||{start:0,end:0}}else c=null;Df={focusedElem:a,selectionRange:c};dd=!1;for(V=b;null!==V;)if(b=V,a=b.child,0!==(b.subtreeFlags&1028)&&null!==a)a.return=b,V=a;else for(;null!==V;){b=V;try{var n=b.alternate;if(0!==(b.flags&1024))switch(b.tag){case 0:case 11:case 15:break;\ncase 1:if(null!==n){var t=n.memoizedProps,J=n.memoizedState,x=b.stateNode,w=x.getSnapshotBeforeUpdate(b.elementType===b.type?t:Ci(b.type,t),J);x.__reactInternalSnapshotBeforeUpdate=w}break;case 3:var u=b.stateNode.containerInfo;1===u.nodeType?u.textContent=\"\":9===u.nodeType&&u.documentElement&&u.removeChild(u.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(p(163));}}catch(F){W(b,b.return,F)}a=b.sibling;if(null!==a){a.return=b.return;V=a;break}V=b.return}n=Nj;Nj=!1;return n}\nfunction Pj(a,b,c){var d=b.updateQueue;d=null!==d?d.lastEffect:null;if(null!==d){var e=d=d.next;do{if((e.tag&a)===a){var f=e.destroy;e.destroy=void 0;void 0!==f&&Mj(b,c,f)}e=e.next}while(e!==d)}}function Qj(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}function Rj(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:a=c;break;default:a=c}\"function\"===typeof b?b(a):b.current=a}}\nfunction Sj(a){var b=a.alternate;null!==b&&(a.alternate=null,Sj(b));a.child=null;a.deletions=null;a.sibling=null;5===a.tag&&(b=a.stateNode,null!==b&&(delete b[Of],delete b[Pf],delete b[of],delete b[Qf],delete b[Rf]));a.stateNode=null;a.return=null;a.dependencies=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.stateNode=null;a.updateQueue=null}function Tj(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction Uj(a){a:for(;;){for(;null===a.sibling;){if(null===a.return||Tj(a.return))return null;a=a.return}a.sibling.return=a.return;for(a=a.sibling;5!==a.tag&&6!==a.tag&&18!==a.tag;){if(a.flags&2)continue a;if(null===a.child||4===a.tag)continue a;else a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}\nfunction Vj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=Bf));else if(4!==d&&(a=a.child,null!==a))for(Vj(a,b,c),a=a.sibling;null!==a;)Vj(a,b,c),a=a.sibling}\nfunction Wj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(Wj(a,b,c),a=a.sibling;null!==a;)Wj(a,b,c),a=a.sibling}var X=null,Xj=!1;function Yj(a,b,c){for(c=c.child;null!==c;)Zj(a,b,c),c=c.sibling}\nfunction Zj(a,b,c){if(lc&&\"function\"===typeof lc.onCommitFiberUnmount)try{lc.onCommitFiberUnmount(kc,c)}catch(h){}switch(c.tag){case 5:U||Lj(c,b);case 6:var d=X,e=Xj;X=null;Yj(a,b,c);X=d;Xj=e;null!==X&&(Xj?(a=X,c=c.stateNode,8===a.nodeType?a.parentNode.removeChild(c):a.removeChild(c)):X.removeChild(c.stateNode));break;case 18:null!==X&&(Xj?(a=X,c=c.stateNode,8===a.nodeType?Kf(a.parentNode,c):1===a.nodeType&&Kf(a,c),bd(a)):Kf(X,c.stateNode));break;case 4:d=X;e=Xj;X=c.stateNode.containerInfo;Xj=!0;\nYj(a,b,c);X=d;Xj=e;break;case 0:case 11:case 14:case 15:if(!U&&(d=c.updateQueue,null!==d&&(d=d.lastEffect,null!==d))){e=d=d.next;do{var f=e,g=f.destroy;f=f.tag;void 0!==g&&(0!==(f&2)?Mj(c,b,g):0!==(f&4)&&Mj(c,b,g));e=e.next}while(e!==d)}Yj(a,b,c);break;case 1:if(!U&&(Lj(c,b),d=c.stateNode,\"function\"===typeof d.componentWillUnmount))try{d.props=c.memoizedProps,d.state=c.memoizedState,d.componentWillUnmount()}catch(h){W(c,b,h)}Yj(a,b,c);break;case 21:Yj(a,b,c);break;case 22:c.mode&1?(U=(d=U)||null!==\nc.memoizedState,Yj(a,b,c),U=d):Yj(a,b,c);break;default:Yj(a,b,c)}}function ak(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Kj);b.forEach(function(b){var d=bk.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nfunction ck(a,b){var c=b.deletions;if(null!==c)for(var d=0;d<c.length;d++){var e=c[d];try{var f=a,g=b,h=g;a:for(;null!==h;){switch(h.tag){case 5:X=h.stateNode;Xj=!1;break a;case 3:X=h.stateNode.containerInfo;Xj=!0;break a;case 4:X=h.stateNode.containerInfo;Xj=!0;break a}h=h.return}if(null===X)throw Error(p(160));Zj(f,g,e);X=null;Xj=!1;var k=e.alternate;null!==k&&(k.return=null);e.return=null}catch(l){W(e,b,l)}}if(b.subtreeFlags&12854)for(b=b.child;null!==b;)dk(b,a),b=b.sibling}\nfunction dk(a,b){var c=a.alternate,d=a.flags;switch(a.tag){case 0:case 11:case 14:case 15:ck(b,a);ek(a);if(d&4){try{Pj(3,a,a.return),Qj(3,a)}catch(t){W(a,a.return,t)}try{Pj(5,a,a.return)}catch(t){W(a,a.return,t)}}break;case 1:ck(b,a);ek(a);d&512&&null!==c&&Lj(c,c.return);break;case 5:ck(b,a);ek(a);d&512&&null!==c&&Lj(c,c.return);if(a.flags&32){var e=a.stateNode;try{ob(e,\"\")}catch(t){W(a,a.return,t)}}if(d&4&&(e=a.stateNode,null!=e)){var f=a.memoizedProps,g=null!==c?c.memoizedProps:f,h=a.type,k=a.updateQueue;\na.updateQueue=null;if(null!==k)try{\"input\"===h&&\"radio\"===f.type&&null!=f.name&&ab(e,f);vb(h,g);var l=vb(h,f);for(g=0;g<k.length;g+=2){var m=k[g],q=k[g+1];\"style\"===m?sb(e,q):\"dangerouslySetInnerHTML\"===m?nb(e,q):\"children\"===m?ob(e,q):ta(e,m,q,l)}switch(h){case \"input\":bb(e,f);break;case \"textarea\":ib(e,f);break;case \"select\":var r=e._wrapperState.wasMultiple;e._wrapperState.wasMultiple=!!f.multiple;var y=f.value;null!=y?fb(e,!!f.multiple,y,!1):r!==!!f.multiple&&(null!=f.defaultValue?fb(e,!!f.multiple,\nf.defaultValue,!0):fb(e,!!f.multiple,f.multiple?[]:\"\",!1))}e[Pf]=f}catch(t){W(a,a.return,t)}}break;case 6:ck(b,a);ek(a);if(d&4){if(null===a.stateNode)throw Error(p(162));e=a.stateNode;f=a.memoizedProps;try{e.nodeValue=f}catch(t){W(a,a.return,t)}}break;case 3:ck(b,a);ek(a);if(d&4&&null!==c&&c.memoizedState.isDehydrated)try{bd(b.containerInfo)}catch(t){W(a,a.return,t)}break;case 4:ck(b,a);ek(a);break;case 13:ck(b,a);ek(a);e=a.child;e.flags&8192&&(f=null!==e.memoizedState,e.stateNode.isHidden=f,!f||\nnull!==e.alternate&&null!==e.alternate.memoizedState||(fk=B()));d&4&&ak(a);break;case 22:m=null!==c&&null!==c.memoizedState;a.mode&1?(U=(l=U)||m,ck(b,a),U=l):ck(b,a);ek(a);if(d&8192){l=null!==a.memoizedState;if((a.stateNode.isHidden=l)&&!m&&0!==(a.mode&1))for(V=a,m=a.child;null!==m;){for(q=V=m;null!==V;){r=V;y=r.child;switch(r.tag){case 0:case 11:case 14:case 15:Pj(4,r,r.return);break;case 1:Lj(r,r.return);var n=r.stateNode;if(\"function\"===typeof n.componentWillUnmount){d=r;c=r.return;try{b=d,n.props=\nb.memoizedProps,n.state=b.memoizedState,n.componentWillUnmount()}catch(t){W(d,c,t)}}break;case 5:Lj(r,r.return);break;case 22:if(null!==r.memoizedState){gk(q);continue}}null!==y?(y.return=r,V=y):gk(q)}m=m.sibling}a:for(m=null,q=a;;){if(5===q.tag){if(null===m){m=q;try{e=q.stateNode,l?(f=e.style,\"function\"===typeof f.setProperty?f.setProperty(\"display\",\"none\",\"important\"):f.display=\"none\"):(h=q.stateNode,k=q.memoizedProps.style,g=void 0!==k&&null!==k&&k.hasOwnProperty(\"display\")?k.display:null,h.style.display=\nrb(\"display\",g))}catch(t){W(a,a.return,t)}}}else if(6===q.tag){if(null===m)try{q.stateNode.nodeValue=l?\"\":q.memoizedProps}catch(t){W(a,a.return,t)}}else if((22!==q.tag&&23!==q.tag||null===q.memoizedState||q===a)&&null!==q.child){q.child.return=q;q=q.child;continue}if(q===a)break a;for(;null===q.sibling;){if(null===q.return||q.return===a)break a;m===q&&(m=null);q=q.return}m===q&&(m=null);q.sibling.return=q.return;q=q.sibling}}break;case 19:ck(b,a);ek(a);d&4&&ak(a);break;case 21:break;default:ck(b,\na),ek(a)}}function ek(a){var b=a.flags;if(b&2){try{a:{for(var c=a.return;null!==c;){if(Tj(c)){var d=c;break a}c=c.return}throw Error(p(160));}switch(d.tag){case 5:var e=d.stateNode;d.flags&32&&(ob(e,\"\"),d.flags&=-33);var f=Uj(a);Wj(a,f,e);break;case 3:case 4:var g=d.stateNode.containerInfo,h=Uj(a);Vj(a,h,g);break;default:throw Error(p(161));}}catch(k){W(a,a.return,k)}a.flags&=-3}b&4096&&(a.flags&=-4097)}function hk(a,b,c){V=a;ik(a,b,c)}\nfunction ik(a,b,c){for(var d=0!==(a.mode&1);null!==V;){var e=V,f=e.child;if(22===e.tag&&d){var g=null!==e.memoizedState||Jj;if(!g){var h=e.alternate,k=null!==h&&null!==h.memoizedState||U;h=Jj;var l=U;Jj=g;if((U=k)&&!l)for(V=e;null!==V;)g=V,k=g.child,22===g.tag&&null!==g.memoizedState?jk(e):null!==k?(k.return=g,V=k):jk(e);for(;null!==f;)V=f,ik(f,b,c),f=f.sibling;V=e;Jj=h;U=l}kk(a,b,c)}else 0!==(e.subtreeFlags&8772)&&null!==f?(f.return=e,V=f):kk(a,b,c)}}\nfunction kk(a){for(;null!==V;){var b=V;if(0!==(b.flags&8772)){var c=b.alternate;try{if(0!==(b.flags&8772))switch(b.tag){case 0:case 11:case 15:U||Qj(5,b);break;case 1:var d=b.stateNode;if(b.flags&4&&!U)if(null===c)d.componentDidMount();else{var e=b.elementType===b.type?c.memoizedProps:Ci(b.type,c.memoizedProps);d.componentDidUpdate(e,c.memoizedState,d.__reactInternalSnapshotBeforeUpdate)}var f=b.updateQueue;null!==f&&sh(b,f,d);break;case 3:var g=b.updateQueue;if(null!==g){c=null;if(null!==b.child)switch(b.child.tag){case 5:c=\nb.child.stateNode;break;case 1:c=b.child.stateNode}sh(b,g,c)}break;case 5:var h=b.stateNode;if(null===c&&b.flags&4){c=h;var k=b.memoizedProps;switch(b.type){case \"button\":case \"input\":case \"select\":case \"textarea\":k.autoFocus&&c.focus();break;case \"img\":k.src&&(c.src=k.src)}}break;case 6:break;case 4:break;case 12:break;case 13:if(null===b.memoizedState){var l=b.alternate;if(null!==l){var m=l.memoizedState;if(null!==m){var q=m.dehydrated;null!==q&&bd(q)}}}break;case 19:case 17:case 21:case 22:case 23:case 25:break;\ndefault:throw Error(p(163));}U||b.flags&512&&Rj(b)}catch(r){W(b,b.return,r)}}if(b===a){V=null;break}c=b.sibling;if(null!==c){c.return=b.return;V=c;break}V=b.return}}function gk(a){for(;null!==V;){var b=V;if(b===a){V=null;break}var c=b.sibling;if(null!==c){c.return=b.return;V=c;break}V=b.return}}\nfunction jk(a){for(;null!==V;){var b=V;try{switch(b.tag){case 0:case 11:case 15:var c=b.return;try{Qj(4,b)}catch(k){W(b,c,k)}break;case 1:var d=b.stateNode;if(\"function\"===typeof d.componentDidMount){var e=b.return;try{d.componentDidMount()}catch(k){W(b,e,k)}}var f=b.return;try{Rj(b)}catch(k){W(b,f,k)}break;case 5:var g=b.return;try{Rj(b)}catch(k){W(b,g,k)}}}catch(k){W(b,b.return,k)}if(b===a){V=null;break}var h=b.sibling;if(null!==h){h.return=b.return;V=h;break}V=b.return}}\nvar lk=Math.ceil,mk=ua.ReactCurrentDispatcher,nk=ua.ReactCurrentOwner,ok=ua.ReactCurrentBatchConfig,K=0,Q=null,Y=null,Z=0,fj=0,ej=Uf(0),T=0,pk=null,rh=0,qk=0,rk=0,sk=null,tk=null,fk=0,Gj=Infinity,uk=null,Oi=!1,Pi=null,Ri=null,vk=!1,wk=null,xk=0,yk=0,zk=null,Ak=-1,Bk=0;function R(){return 0!==(K&6)?B():-1!==Ak?Ak:Ak=B()}\nfunction yi(a){if(0===(a.mode&1))return 1;if(0!==(K&2)&&0!==Z)return Z&-Z;if(null!==Kg.transition)return 0===Bk&&(Bk=yc()),Bk;a=C;if(0!==a)return a;a=window.event;a=void 0===a?16:jd(a.type);return a}function gi(a,b,c,d){if(50<yk)throw yk=0,zk=null,Error(p(185));Ac(a,c,d);if(0===(K&2)||a!==Q)a===Q&&(0===(K&2)&&(qk|=c),4===T&&Ck(a,Z)),Dk(a,d),1===c&&0===K&&0===(b.mode&1)&&(Gj=B()+500,fg&&jg())}\nfunction Dk(a,b){var c=a.callbackNode;wc(a,b);var d=uc(a,a===Q?Z:0);if(0===d)null!==c&&bc(c),a.callbackNode=null,a.callbackPriority=0;else if(b=d&-d,a.callbackPriority!==b){null!=c&&bc(c);if(1===b)0===a.tag?ig(Ek.bind(null,a)):hg(Ek.bind(null,a)),Jf(function(){0===(K&6)&&jg()}),c=null;else{switch(Dc(d)){case 1:c=fc;break;case 4:c=gc;break;case 16:c=hc;break;case 536870912:c=jc;break;default:c=hc}c=Fk(c,Gk.bind(null,a))}a.callbackPriority=b;a.callbackNode=c}}\nfunction Gk(a,b){Ak=-1;Bk=0;if(0!==(K&6))throw Error(p(327));var c=a.callbackNode;if(Hk()&&a.callbackNode!==c)return null;var d=uc(a,a===Q?Z:0);if(0===d)return null;if(0!==(d&30)||0!==(d&a.expiredLanes)||b)b=Ik(a,d);else{b=d;var e=K;K|=2;var f=Jk();if(Q!==a||Z!==b)uk=null,Gj=B()+500,Kk(a,b);do try{Lk();break}catch(h){Mk(a,h)}while(1);$g();mk.current=f;K=e;null!==Y?b=0:(Q=null,Z=0,b=T)}if(0!==b){2===b&&(e=xc(a),0!==e&&(d=e,b=Nk(a,e)));if(1===b)throw c=pk,Kk(a,0),Ck(a,d),Dk(a,B()),c;if(6===b)Ck(a,d);\nelse{e=a.current.alternate;if(0===(d&30)&&!Ok(e)&&(b=Ik(a,d),2===b&&(f=xc(a),0!==f&&(d=f,b=Nk(a,f))),1===b))throw c=pk,Kk(a,0),Ck(a,d),Dk(a,B()),c;a.finishedWork=e;a.finishedLanes=d;switch(b){case 0:case 1:throw Error(p(345));case 2:Pk(a,tk,uk);break;case 3:Ck(a,d);if((d&130023424)===d&&(b=fk+500-B(),10<b)){if(0!==uc(a,0))break;e=a.suspendedLanes;if((e&d)!==d){R();a.pingedLanes|=a.suspendedLanes&e;break}a.timeoutHandle=Ff(Pk.bind(null,a,tk,uk),b);break}Pk(a,tk,uk);break;case 4:Ck(a,d);if((d&4194240)===\nd)break;b=a.eventTimes;for(e=-1;0<d;){var g=31-oc(d);f=1<<g;g=b[g];g>e&&(e=g);d&=~f}d=e;d=B()-d;d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*lk(d/1960))-d;if(10<d){a.timeoutHandle=Ff(Pk.bind(null,a,tk,uk),d);break}Pk(a,tk,uk);break;case 5:Pk(a,tk,uk);break;default:throw Error(p(329));}}}Dk(a,B());return a.callbackNode===c?Gk.bind(null,a):null}\nfunction Nk(a,b){var c=sk;a.current.memoizedState.isDehydrated&&(Kk(a,b).flags|=256);a=Ik(a,b);2!==a&&(b=tk,tk=c,null!==b&&Fj(b));return a}function Fj(a){null===tk?tk=a:tk.push.apply(tk,a)}\nfunction Ok(a){for(var b=a;;){if(b.flags&16384){var c=b.updateQueue;if(null!==c&&(c=c.stores,null!==c))for(var d=0;d<c.length;d++){var e=c[d],f=e.getSnapshot;e=e.value;try{if(!He(f(),e))return!1}catch(g){return!1}}}c=b.child;if(b.subtreeFlags&16384&&null!==c)c.return=b,b=c;else{if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return!0;b=b.return}b.sibling.return=b.return;b=b.sibling}}return!0}\nfunction Ck(a,b){b&=~rk;b&=~qk;a.suspendedLanes|=b;a.pingedLanes&=~b;for(a=a.expirationTimes;0<b;){var c=31-oc(b),d=1<<c;a[c]=-1;b&=~d}}function Ek(a){if(0!==(K&6))throw Error(p(327));Hk();var b=uc(a,0);if(0===(b&1))return Dk(a,B()),null;var c=Ik(a,b);if(0!==a.tag&&2===c){var d=xc(a);0!==d&&(b=d,c=Nk(a,d))}if(1===c)throw c=pk,Kk(a,0),Ck(a,b),Dk(a,B()),c;if(6===c)throw Error(p(345));a.finishedWork=a.current.alternate;a.finishedLanes=b;Pk(a,tk,uk);Dk(a,B());return null}\nfunction Qk(a,b){var c=K;K|=1;try{return a(b)}finally{K=c,0===K&&(Gj=B()+500,fg&&jg())}}function Rk(a){null!==wk&&0===wk.tag&&0===(K&6)&&Hk();var b=K;K|=1;var c=ok.transition,d=C;try{if(ok.transition=null,C=1,a)return a()}finally{C=d,ok.transition=c,K=b,0===(K&6)&&jg()}}function Hj(){fj=ej.current;E(ej)}\nfunction Kk(a,b){a.finishedWork=null;a.finishedLanes=0;var c=a.timeoutHandle;-1!==c&&(a.timeoutHandle=-1,Gf(c));if(null!==Y)for(c=Y.return;null!==c;){var d=c;wg(d);switch(d.tag){case 1:d=d.type.childContextTypes;null!==d&&void 0!==d&&$f();break;case 3:zh();E(Wf);E(H);Eh();break;case 5:Bh(d);break;case 4:zh();break;case 13:E(L);break;case 19:E(L);break;case 10:ah(d.type._context);break;case 22:case 23:Hj()}c=c.return}Q=a;Y=a=Pg(a.current,null);Z=fj=b;T=0;pk=null;rk=qk=rh=0;tk=sk=null;if(null!==fh){for(b=\n0;b<fh.length;b++)if(c=fh[b],d=c.interleaved,null!==d){c.interleaved=null;var e=d.next,f=c.pending;if(null!==f){var g=f.next;f.next=e;d.next=g}c.pending=d}fh=null}return a}\nfunction Mk(a,b){do{var c=Y;try{$g();Fh.current=Rh;if(Ih){for(var d=M.memoizedState;null!==d;){var e=d.queue;null!==e&&(e.pending=null);d=d.next}Ih=!1}Hh=0;O=N=M=null;Jh=!1;Kh=0;nk.current=null;if(null===c||null===c.return){T=1;pk=b;Y=null;break}a:{var f=a,g=c.return,h=c,k=b;b=Z;h.flags|=32768;if(null!==k&&\"object\"===typeof k&&\"function\"===typeof k.then){var l=k,m=h,q=m.tag;if(0===(m.mode&1)&&(0===q||11===q||15===q)){var r=m.alternate;r?(m.updateQueue=r.updateQueue,m.memoizedState=r.memoizedState,\nm.lanes=r.lanes):(m.updateQueue=null,m.memoizedState=null)}var y=Ui(g);if(null!==y){y.flags&=-257;Vi(y,g,h,f,b);y.mode&1&&Si(f,l,b);b=y;k=l;var n=b.updateQueue;if(null===n){var t=new Set;t.add(k);b.updateQueue=t}else n.add(k);break a}else{if(0===(b&1)){Si(f,l,b);tj();break a}k=Error(p(426))}}else if(I&&h.mode&1){var J=Ui(g);if(null!==J){0===(J.flags&65536)&&(J.flags|=256);Vi(J,g,h,f,b);Jg(Ji(k,h));break a}}f=k=Ji(k,h);4!==T&&(T=2);null===sk?sk=[f]:sk.push(f);f=g;do{switch(f.tag){case 3:f.flags|=65536;\nb&=-b;f.lanes|=b;var x=Ni(f,k,b);ph(f,x);break a;case 1:h=k;var w=f.type,u=f.stateNode;if(0===(f.flags&128)&&(\"function\"===typeof w.getDerivedStateFromError||null!==u&&\"function\"===typeof u.componentDidCatch&&(null===Ri||!Ri.has(u)))){f.flags|=65536;b&=-b;f.lanes|=b;var F=Qi(f,h,b);ph(f,F);break a}}f=f.return}while(null!==f)}Sk(c)}catch(na){b=na;Y===c&&null!==c&&(Y=c=c.return);continue}break}while(1)}function Jk(){var a=mk.current;mk.current=Rh;return null===a?Rh:a}\nfunction tj(){if(0===T||3===T||2===T)T=4;null===Q||0===(rh&268435455)&&0===(qk&268435455)||Ck(Q,Z)}function Ik(a,b){var c=K;K|=2;var d=Jk();if(Q!==a||Z!==b)uk=null,Kk(a,b);do try{Tk();break}catch(e){Mk(a,e)}while(1);$g();K=c;mk.current=d;if(null!==Y)throw Error(p(261));Q=null;Z=0;return T}function Tk(){for(;null!==Y;)Uk(Y)}function Lk(){for(;null!==Y&&!cc();)Uk(Y)}function Uk(a){var b=Vk(a.alternate,a,fj);a.memoizedProps=a.pendingProps;null===b?Sk(a):Y=b;nk.current=null}\nfunction Sk(a){var b=a;do{var c=b.alternate;a=b.return;if(0===(b.flags&32768)){if(c=Ej(c,b,fj),null!==c){Y=c;return}}else{c=Ij(c,b);if(null!==c){c.flags&=32767;Y=c;return}if(null!==a)a.flags|=32768,a.subtreeFlags=0,a.deletions=null;else{T=6;Y=null;return}}b=b.sibling;if(null!==b){Y=b;return}Y=b=a}while(null!==b);0===T&&(T=5)}function Pk(a,b,c){var d=C,e=ok.transition;try{ok.transition=null,C=1,Wk(a,b,c,d)}finally{ok.transition=e,C=d}return null}\nfunction Wk(a,b,c,d){do Hk();while(null!==wk);if(0!==(K&6))throw Error(p(327));c=a.finishedWork;var e=a.finishedLanes;if(null===c)return null;a.finishedWork=null;a.finishedLanes=0;if(c===a.current)throw Error(p(177));a.callbackNode=null;a.callbackPriority=0;var f=c.lanes|c.childLanes;Bc(a,f);a===Q&&(Y=Q=null,Z=0);0===(c.subtreeFlags&2064)&&0===(c.flags&2064)||vk||(vk=!0,Fk(hc,function(){Hk();return null}));f=0!==(c.flags&15990);if(0!==(c.subtreeFlags&15990)||f){f=ok.transition;ok.transition=null;\nvar g=C;C=1;var h=K;K|=4;nk.current=null;Oj(a,c);dk(c,a);Oe(Df);dd=!!Cf;Df=Cf=null;a.current=c;hk(c,a,e);dc();K=h;C=g;ok.transition=f}else a.current=c;vk&&(vk=!1,wk=a,xk=e);f=a.pendingLanes;0===f&&(Ri=null);mc(c.stateNode,d);Dk(a,B());if(null!==b)for(d=a.onRecoverableError,c=0;c<b.length;c++)e=b[c],d(e.value,{componentStack:e.stack,digest:e.digest});if(Oi)throw Oi=!1,a=Pi,Pi=null,a;0!==(xk&1)&&0!==a.tag&&Hk();f=a.pendingLanes;0!==(f&1)?a===zk?yk++:(yk=0,zk=a):yk=0;jg();return null}\nfunction Hk(){if(null!==wk){var a=Dc(xk),b=ok.transition,c=C;try{ok.transition=null;C=16>a?16:a;if(null===wk)var d=!1;else{a=wk;wk=null;xk=0;if(0!==(K&6))throw Error(p(331));var e=K;K|=4;for(V=a.current;null!==V;){var f=V,g=f.child;if(0!==(V.flags&16)){var h=f.deletions;if(null!==h){for(var k=0;k<h.length;k++){var l=h[k];for(V=l;null!==V;){var m=V;switch(m.tag){case 0:case 11:case 15:Pj(8,m,f)}var q=m.child;if(null!==q)q.return=m,V=q;else for(;null!==V;){m=V;var r=m.sibling,y=m.return;Sj(m);if(m===\nl){V=null;break}if(null!==r){r.return=y;V=r;break}V=y}}}var n=f.alternate;if(null!==n){var t=n.child;if(null!==t){n.child=null;do{var J=t.sibling;t.sibling=null;t=J}while(null!==t)}}V=f}}if(0!==(f.subtreeFlags&2064)&&null!==g)g.return=f,V=g;else b:for(;null!==V;){f=V;if(0!==(f.flags&2048))switch(f.tag){case 0:case 11:case 15:Pj(9,f,f.return)}var x=f.sibling;if(null!==x){x.return=f.return;V=x;break b}V=f.return}}var w=a.current;for(V=w;null!==V;){g=V;var u=g.child;if(0!==(g.subtreeFlags&2064)&&null!==\nu)u.return=g,V=u;else b:for(g=w;null!==V;){h=V;if(0!==(h.flags&2048))try{switch(h.tag){case 0:case 11:case 15:Qj(9,h)}}catch(na){W(h,h.return,na)}if(h===g){V=null;break b}var F=h.sibling;if(null!==F){F.return=h.return;V=F;break b}V=h.return}}K=e;jg();if(lc&&\"function\"===typeof lc.onPostCommitFiberRoot)try{lc.onPostCommitFiberRoot(kc,a)}catch(na){}d=!0}return d}finally{C=c,ok.transition=b}}return!1}function Xk(a,b,c){b=Ji(c,b);b=Ni(a,b,1);a=nh(a,b,1);b=R();null!==a&&(Ac(a,1,b),Dk(a,b))}\nfunction W(a,b,c){if(3===a.tag)Xk(a,a,c);else for(;null!==b;){if(3===b.tag){Xk(b,a,c);break}else if(1===b.tag){var d=b.stateNode;if(\"function\"===typeof b.type.getDerivedStateFromError||\"function\"===typeof d.componentDidCatch&&(null===Ri||!Ri.has(d))){a=Ji(c,a);a=Qi(b,a,1);b=nh(b,a,1);a=R();null!==b&&(Ac(b,1,a),Dk(b,a));break}}b=b.return}}\nfunction Ti(a,b,c){var d=a.pingCache;null!==d&&d.delete(b);b=R();a.pingedLanes|=a.suspendedLanes&c;Q===a&&(Z&c)===c&&(4===T||3===T&&(Z&130023424)===Z&&500>B()-fk?Kk(a,0):rk|=c);Dk(a,b)}function Yk(a,b){0===b&&(0===(a.mode&1)?b=1:(b=sc,sc<<=1,0===(sc&130023424)&&(sc=4194304)));var c=R();a=ih(a,b);null!==a&&(Ac(a,b,c),Dk(a,c))}function uj(a){var b=a.memoizedState,c=0;null!==b&&(c=b.retryLane);Yk(a,c)}\nfunction bk(a,b){var c=0;switch(a.tag){case 13:var d=a.stateNode;var e=a.memoizedState;null!==e&&(c=e.retryLane);break;case 19:d=a.stateNode;break;default:throw Error(p(314));}null!==d&&d.delete(b);Yk(a,c)}var Vk;\nVk=function(a,b,c){if(null!==a)if(a.memoizedProps!==b.pendingProps||Wf.current)dh=!0;else{if(0===(a.lanes&c)&&0===(b.flags&128))return dh=!1,yj(a,b,c);dh=0!==(a.flags&131072)?!0:!1}else dh=!1,I&&0!==(b.flags&1048576)&&ug(b,ng,b.index);b.lanes=0;switch(b.tag){case 2:var d=b.type;ij(a,b);a=b.pendingProps;var e=Yf(b,H.current);ch(b,c);e=Nh(null,b,d,a,e,c);var f=Sh();b.flags|=1;\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof?(b.tag=1,b.memoizedState=null,b.updateQueue=\nnull,Zf(d)?(f=!0,cg(b)):f=!1,b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null,kh(b),e.updater=Ei,b.stateNode=e,e._reactInternals=b,Ii(b,d,a,c),b=jj(null,b,d,!0,f,c)):(b.tag=0,I&&f&&vg(b),Xi(null,b,e,c),b=b.child);return b;case 16:d=b.elementType;a:{ij(a,b);a=b.pendingProps;e=d._init;d=e(d._payload);b.type=d;e=b.tag=Zk(d);a=Ci(d,a);switch(e){case 0:b=cj(null,b,d,a,c);break a;case 1:b=hj(null,b,d,a,c);break a;case 11:b=Yi(null,b,d,a,c);break a;case 14:b=$i(null,b,d,Ci(d.type,a),c);break a}throw Error(p(306,\nd,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),cj(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),hj(a,b,d,e,c);case 3:a:{kj(b);if(null===a)throw Error(p(387));d=b.pendingProps;f=b.memoizedState;e=f.element;lh(a,b);qh(b,d,null,c);var g=b.memoizedState;d=g.element;if(f.isDehydrated)if(f={element:d,isDehydrated:!1,cache:g.cache,pendingSuspenseBoundaries:g.pendingSuspenseBoundaries,transitions:g.transitions},b.updateQueue.baseState=\nf,b.memoizedState=f,b.flags&256){e=Ji(Error(p(423)),b);b=lj(a,b,d,c,e);break a}else if(d!==e){e=Ji(Error(p(424)),b);b=lj(a,b,d,c,e);break a}else for(yg=Lf(b.stateNode.containerInfo.firstChild),xg=b,I=!0,zg=null,c=Vg(b,null,d,c),b.child=c;c;)c.flags=c.flags&-3|4096,c=c.sibling;else{Ig();if(d===e){b=Zi(a,b,c);break a}Xi(a,b,d,c)}b=b.child}return b;case 5:return Ah(b),null===a&&Eg(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,g=e.children,Ef(d,e)?g=null:null!==f&&Ef(d,f)&&(b.flags|=32),\ngj(a,b),Xi(a,b,g,c),b.child;case 6:return null===a&&Eg(b),null;case 13:return oj(a,b,c);case 4:return yh(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Ug(b,null,d,c):Xi(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),Yi(a,b,d,e,c);case 7:return Xi(a,b,b.pendingProps,c),b.child;case 8:return Xi(a,b,b.pendingProps.children,c),b.child;case 12:return Xi(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;f=b.memoizedProps;\ng=e.value;G(Wg,d._currentValue);d._currentValue=g;if(null!==f)if(He(f.value,g)){if(f.children===e.children&&!Wf.current){b=Zi(a,b,c);break a}}else for(f=b.child,null!==f&&(f.return=b);null!==f;){var h=f.dependencies;if(null!==h){g=f.child;for(var k=h.firstContext;null!==k;){if(k.context===d){if(1===f.tag){k=mh(-1,c&-c);k.tag=2;var l=f.updateQueue;if(null!==l){l=l.shared;var m=l.pending;null===m?k.next=k:(k.next=m.next,m.next=k);l.pending=k}}f.lanes|=c;k=f.alternate;null!==k&&(k.lanes|=c);bh(f.return,\nc,b);h.lanes|=c;break}k=k.next}}else if(10===f.tag)g=f.type===b.type?null:f.child;else if(18===f.tag){g=f.return;if(null===g)throw Error(p(341));g.lanes|=c;h=g.alternate;null!==h&&(h.lanes|=c);bh(g,c,b);g=f.sibling}else g=f.child;if(null!==g)g.return=f;else for(g=f;null!==g;){if(g===b){g=null;break}f=g.sibling;if(null!==f){f.return=g.return;g=f;break}g=g.return}f=g}Xi(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,d=b.pendingProps.children,ch(b,c),e=eh(e),d=d(e),b.flags|=1,Xi(a,b,d,c),\nb.child;case 14:return d=b.type,e=Ci(d,b.pendingProps),e=Ci(d.type,e),$i(a,b,d,e,c);case 15:return bj(a,b,b.type,b.pendingProps,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),ij(a,b),b.tag=1,Zf(d)?(a=!0,cg(b)):a=!1,ch(b,c),Gi(b,d,e),Ii(b,d,e,c),jj(null,b,d,!0,a,c);case 19:return xj(a,b,c);case 22:return dj(a,b,c)}throw Error(p(156,b.tag));};function Fk(a,b){return ac(a,b)}\nfunction $k(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.subtreeFlags=this.flags=0;this.deletions=null;this.childLanes=this.lanes=0;this.alternate=null}function Bg(a,b,c,d){return new $k(a,b,c,d)}function aj(a){a=a.prototype;return!(!a||!a.isReactComponent)}\nfunction Zk(a){if(\"function\"===typeof a)return aj(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===Da)return 11;if(a===Ga)return 14}return 2}\nfunction Pg(a,b){var c=a.alternate;null===c?(c=Bg(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.type=a.type,c.flags=0,c.subtreeFlags=0,c.deletions=null);c.flags=a.flags&14680064;c.childLanes=a.childLanes;c.lanes=a.lanes;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{lanes:b.lanes,firstContext:b.firstContext};\nc.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction Rg(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)aj(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case ya:return Tg(c.children,e,f,b);case za:g=8;e|=8;break;case Aa:return a=Bg(12,c,b,e|2),a.elementType=Aa,a.lanes=f,a;case Ea:return a=Bg(13,c,b,e),a.elementType=Ea,a.lanes=f,a;case Fa:return a=Bg(19,c,b,e),a.elementType=Fa,a.lanes=f,a;case Ia:return pj(c,e,f,b);default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case Ba:g=10;break a;case Ca:g=9;break a;case Da:g=11;\nbreak a;case Ga:g=14;break a;case Ha:g=16;d=null;break a}throw Error(p(130,null==a?a:typeof a,\"\"));}b=Bg(g,c,b,e);b.elementType=a;b.type=d;b.lanes=f;return b}function Tg(a,b,c,d){a=Bg(7,a,d,b);a.lanes=c;return a}function pj(a,b,c,d){a=Bg(22,a,d,b);a.elementType=Ia;a.lanes=c;a.stateNode={isHidden:!1};return a}function Qg(a,b,c){a=Bg(6,a,null,b);a.lanes=c;return a}\nfunction Sg(a,b,c){b=Bg(4,null!==a.children?a.children:[],a.key,b);b.lanes=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction al(a,b,c,d,e){this.tag=b;this.containerInfo=a;this.finishedWork=this.pingCache=this.current=this.pendingChildren=null;this.timeoutHandle=-1;this.callbackNode=this.pendingContext=this.context=null;this.callbackPriority=0;this.eventTimes=zc(0);this.expirationTimes=zc(-1);this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0;this.entanglements=zc(0);this.identifierPrefix=d;this.onRecoverableError=e;this.mutableSourceEagerHydrationData=\nnull}function bl(a,b,c,d,e,f,g,h,k){a=new al(a,b,c,h,k);1===b?(b=1,!0===f&&(b|=8)):b=0;f=Bg(3,null,null,b);a.current=f;f.stateNode=a;f.memoizedState={element:d,isDehydrated:c,cache:null,transitions:null,pendingSuspenseBoundaries:null};kh(f);return a}function cl(a,b,c){var d=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:wa,key:null==d?null:\"\"+d,children:a,containerInfo:b,implementation:c}}\nfunction dl(a){if(!a)return Vf;a=a._reactInternals;a:{if(Vb(a)!==a||1!==a.tag)throw Error(p(170));var b=a;do{switch(b.tag){case 3:b=b.stateNode.context;break a;case 1:if(Zf(b.type)){b=b.stateNode.__reactInternalMemoizedMergedChildContext;break a}}b=b.return}while(null!==b);throw Error(p(171));}if(1===a.tag){var c=a.type;if(Zf(c))return bg(a,c,b)}return b}\nfunction el(a,b,c,d,e,f,g,h,k){a=bl(c,d,!0,a,e,f,g,h,k);a.context=dl(null);c=a.current;d=R();e=yi(c);f=mh(d,e);f.callback=void 0!==b&&null!==b?b:null;nh(c,f,e);a.current.lanes=e;Ac(a,e,d);Dk(a,d);return a}function fl(a,b,c,d){var e=b.current,f=R(),g=yi(e);c=dl(c);null===b.context?b.context=c:b.pendingContext=c;b=mh(f,g);b.payload={element:a};d=void 0===d?null:d;null!==d&&(b.callback=d);a=nh(e,b,g);null!==a&&(gi(a,e,g,f),oh(a,e,g));return g}\nfunction gl(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return a.child.stateNode;default:return a.child.stateNode}}function hl(a,b){a=a.memoizedState;if(null!==a&&null!==a.dehydrated){var c=a.retryLane;a.retryLane=0!==c&&c<b?c:b}}function il(a,b){hl(a,b);(a=a.alternate)&&hl(a,b)}function jl(){return null}var kl=\"function\"===typeof reportError?reportError:function(a){console.error(a)};function ll(a){this._internalRoot=a}\nml.prototype.render=ll.prototype.render=function(a){var b=this._internalRoot;if(null===b)throw Error(p(409));fl(a,b,null,null)};ml.prototype.unmount=ll.prototype.unmount=function(){var a=this._internalRoot;if(null!==a){this._internalRoot=null;var b=a.containerInfo;Rk(function(){fl(null,a,null,null)});b[uf]=null}};function ml(a){this._internalRoot=a}\nml.prototype.unstable_scheduleHydration=function(a){if(a){var b=Hc();a={blockedOn:null,target:a,priority:b};for(var c=0;c<Qc.length&&0!==b&&b<Qc[c].priority;c++);Qc.splice(c,0,a);0===c&&Vc(a)}};function nl(a){return!(!a||1!==a.nodeType&&9!==a.nodeType&&11!==a.nodeType)}function ol(a){return!(!a||1!==a.nodeType&&9!==a.nodeType&&11!==a.nodeType&&(8!==a.nodeType||\" react-mount-point-unstable \"!==a.nodeValue))}function pl(){}\nfunction ql(a,b,c,d,e){if(e){if(\"function\"===typeof d){var f=d;d=function(){var a=gl(g);f.call(a)}}var g=el(b,d,a,0,null,!1,!1,\"\",pl);a._reactRootContainer=g;a[uf]=g.current;sf(8===a.nodeType?a.parentNode:a);Rk();return g}for(;e=a.lastChild;)a.removeChild(e);if(\"function\"===typeof d){var h=d;d=function(){var a=gl(k);h.call(a)}}var k=bl(a,0,!1,null,null,!1,!1,\"\",pl);a._reactRootContainer=k;a[uf]=k.current;sf(8===a.nodeType?a.parentNode:a);Rk(function(){fl(b,k,c,d)});return k}\nfunction rl(a,b,c,d,e){var f=c._reactRootContainer;if(f){var g=f;if(\"function\"===typeof e){var h=e;e=function(){var a=gl(g);h.call(a)}}fl(b,g,a,e)}else g=ql(c,b,a,e,d);return gl(g)}Ec=function(a){switch(a.tag){case 3:var b=a.stateNode;if(b.current.memoizedState.isDehydrated){var c=tc(b.pendingLanes);0!==c&&(Cc(b,c|1),Dk(b,B()),0===(K&6)&&(Gj=B()+500,jg()))}break;case 13:Rk(function(){var b=ih(a,1);if(null!==b){var c=R();gi(b,a,1,c)}}),il(a,1)}};\nFc=function(a){if(13===a.tag){var b=ih(a,134217728);if(null!==b){var c=R();gi(b,a,134217728,c)}il(a,134217728)}};Gc=function(a){if(13===a.tag){var b=yi(a),c=ih(a,b);if(null!==c){var d=R();gi(c,a,b,d)}il(a,b)}};Hc=function(){return C};Ic=function(a,b){var c=C;try{return C=a,b()}finally{C=c}};\nyb=function(a,b,c){switch(b){case \"input\":bb(a,c);b=c.name;if(\"radio\"===c.type&&null!=b){for(c=a;c.parentNode;)c=c.parentNode;c=c.querySelectorAll(\"input[name=\"+JSON.stringify(\"\"+b)+'][type=\"radio\"]');for(b=0;b<c.length;b++){var d=c[b];if(d!==a&&d.form===a.form){var e=Db(d);if(!e)throw Error(p(90));Wa(d);bb(d,e)}}}break;case \"textarea\":ib(a,c);break;case \"select\":b=c.value,null!=b&&fb(a,!!c.multiple,b,!1)}};Gb=Qk;Hb=Rk;\nvar sl={usingClientEntryPoint:!1,Events:[Cb,ue,Db,Eb,Fb,Qk]},tl={findFiberByHostInstance:Wc,bundleType:0,version:\"18.3.1\",rendererPackageName:\"react-dom\"};\nvar ul={bundleType:tl.bundleType,version:tl.version,rendererPackageName:tl.rendererPackageName,rendererConfig:tl.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:ua.ReactCurrentDispatcher,findHostInstanceByFiber:function(a){a=Zb(a);return null===a?null:a.stateNode},findFiberByHostInstance:tl.findFiberByHostInstance||\njl,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:\"18.3.1-next-f1338f8080-20240426\"};if(\"undefined\"!==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var vl=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!vl.isDisabled&&vl.supportsFiber)try{kc=vl.inject(ul),lc=vl}catch(a){}}exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=sl;\nexports.createPortal=function(a,b){var c=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!nl(b))throw Error(p(200));return cl(a,b,null,c)};exports.createRoot=function(a,b){if(!nl(a))throw Error(p(299));var c=!1,d=\"\",e=kl;null!==b&&void 0!==b&&(!0===b.unstable_strictMode&&(c=!0),void 0!==b.identifierPrefix&&(d=b.identifierPrefix),void 0!==b.onRecoverableError&&(e=b.onRecoverableError));b=bl(a,1,!1,null,null,c,!1,d,e);a[uf]=b.current;sf(8===a.nodeType?a.parentNode:a);return new ll(b)};\nexports.findDOMNode=function(a){if(null==a)return null;if(1===a.nodeType)return a;var b=a._reactInternals;if(void 0===b){if(\"function\"===typeof a.render)throw Error(p(188));a=Object.keys(a).join(\",\");throw Error(p(268,a));}a=Zb(b);a=null===a?null:a.stateNode;return a};exports.flushSync=function(a){return Rk(a)};exports.hydrate=function(a,b,c){if(!ol(b))throw Error(p(200));return rl(null,a,b,!0,c)};\nexports.hydrateRoot=function(a,b,c){if(!nl(a))throw Error(p(405));var d=null!=c&&c.hydratedSources||null,e=!1,f=\"\",g=kl;null!==c&&void 0!==c&&(!0===c.unstable_strictMode&&(e=!0),void 0!==c.identifierPrefix&&(f=c.identifierPrefix),void 0!==c.onRecoverableError&&(g=c.onRecoverableError));b=el(b,null,a,1,null!=c?c:null,e,!1,f,g);a[uf]=b.current;sf(a);if(d)for(a=0;a<d.length;a++)c=d[a],e=c._getVersion,e=e(c._source),null==b.mutableSourceEagerHydrationData?b.mutableSourceEagerHydrationData=[c,e]:b.mutableSourceEagerHydrationData.push(c,\ne);return new ml(b)};exports.render=function(a,b,c){if(!ol(b))throw Error(p(200));return rl(null,a,b,!1,c)};exports.unmountComponentAtNode=function(a){if(!ol(a))throw Error(p(40));return a._reactRootContainer?(Rk(function(){rl(null,null,a,!1,function(){a._reactRootContainer=null;a[uf]=null})}),!0):!1};exports.unstable_batchedUpdates=Qk;\nexports.unstable_renderSubtreeIntoContainer=function(a,b,c,d){if(!ol(c))throw Error(p(200));if(null==a||void 0===a._reactInternals)throw Error(p(38));return rl(a,b,c,!1,d)};exports.version=\"18.3.1-next-f1338f8080-20240426\";\n", "'use strict';\n\nfunction checkDCE() {\n  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n  if (\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n  ) {\n    return;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    // This branch is unreachable because this function is only called\n    // in production, but the condition is true only in development.\n    // Therefore if the branch is still here, dead code elimination wasn't\n    // properly applied.\n    // Don't change the message. React DevTools relies on it. Also make sure\n    // this message doesn't occur elsewhere in this function, or it will cause\n    // a false positive.\n    throw new Error('^_^');\n  }\n  try {\n    // Verify that the code above has been dead code eliminated (DCE'd).\n    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n  } catch (err) {\n    // DevTools shouldn't crash React, no matter what.\n    // We should still report in case we break this code.\n    console.error(err);\n  }\n}\n\nif (process.env.NODE_ENV === 'production') {\n  // DCE check should happen before ReactDOM bundle executes so that\n  // DevTools can report bad minification during injection.\n  checkDCE();\n  module.exports = require('./cjs/react-dom.production.min.js');\n} else {\n  module.exports = require('./cjs/react-dom.development.js');\n}\n", "/**\n * @license React\n * use-sync-external-store-shim.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 = require(\"react\");\nfunction is(x, y) {\n  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n  useState = React.useState,\n  useEffect = React.useEffect,\n  useLayoutEffect = React.useLayoutEffect,\n  useDebugValue = React.useDebugValue;\nfunction useSyncExternalStore$2(subscribe, getSnapshot) {\n  var value = getSnapshot(),\n    _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),\n    inst = _useState[0].inst,\n    forceUpdate = _useState[1];\n  useLayoutEffect(\n    function () {\n      inst.value = value;\n      inst.getSnapshot = getSnapshot;\n      checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n    },\n    [subscribe, value, getSnapshot]\n  );\n  useEffect(\n    function () {\n      checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n      return subscribe(function () {\n        checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n      });\n    },\n    [subscribe]\n  );\n  useDebugValue(value);\n  return value;\n}\nfunction checkIfSnapshotChanged(inst) {\n  var latestGetSnapshot = inst.getSnapshot;\n  inst = inst.value;\n  try {\n    var nextValue = latestGetSnapshot();\n    return !objectIs(inst, nextValue);\n  } catch (error) {\n    return !0;\n  }\n}\nfunction useSyncExternalStore$1(subscribe, getSnapshot) {\n  return getSnapshot();\n}\nvar shim =\n  \"undefined\" === typeof window ||\n  \"undefined\" === typeof window.document ||\n  \"undefined\" === typeof window.document.createElement\n    ? useSyncExternalStore$1\n    : useSyncExternalStore$2;\nexports.useSyncExternalStore =\n  void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n", "'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('../cjs/use-sync-external-store-shim.production.js');\n} else {\n  module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n", "'use strict';\n\nvar m = require('react-dom');\nif (process.env.NODE_ENV === 'production') {\n  exports.createRoot = m.createRoot;\n  exports.hydrateRoot = m.hydrateRoot;\n} else {\n  var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n  exports.createRoot = function(c, o) {\n    i.usingClientEntryPoint = true;\n    try {\n      return m.createRoot(c, o);\n    } finally {\n      i.usingClientEntryPoint = false;\n    }\n  };\n  exports.hydrateRoot = function(c, h, o) {\n    i.usingClientEntryPoint = true;\n    try {\n      return m.hydrateRoot(c, h, o);\n    } finally {\n      i.usingClientEntryPoint = false;\n    }\n  };\n}\n", "/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n", "'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n  module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n", "/**\n * This file automatically generated from `pre-publish.js`.\n * Do not manually edit.\n */\n\nmodule.exports = {\n  \"area\": true,\n  \"base\": true,\n  \"br\": true,\n  \"col\": true,\n  \"embed\": true,\n  \"hr\": true,\n  \"img\": true,\n  \"input\": true,\n  \"link\": true,\n  \"meta\": true,\n  \"param\": true,\n  \"source\": true,\n  \"track\": true,\n  \"wbr\": true\n};\n", "/*!\n * Determine if an object is a Buffer\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n\nmodule.exports = function isBuffer (obj) {\n  return obj != null && obj.constructor != null &&\n    typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n", "'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar defineProperty = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\n// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target\nvar setProperty = function setProperty(target, options) {\n\tif (defineProperty && options.name === '__proto__') {\n\t\tdefineProperty(target, options.name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\tvalue: options.newValue,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\ttarget[options.name] = options.newValue;\n\t}\n};\n\n// Return undefined instead of __proto__ if '__proto__' is not an own property\nvar getProperty = function getProperty(obj, name) {\n\tif (name === '__proto__') {\n\t\tif (!hasOwn.call(obj, name)) {\n\t\t\treturn void 0;\n\t\t} else if (gOPD) {\n\t\t\t// In early versions of node, obj['__proto__'] is buggy when obj has\n\t\t\t// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.\n\t\t\treturn gOPD(obj, name).value;\n\t\t}\n\t}\n\n\treturn obj[name];\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = getProperty(target, name);\n\t\t\t\tcopy = getProperty(options, name);\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: extend(deep, clone, copy) });\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: copy });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n", "/**\n * Copyright (c) 2013-present, Facebook, Inc.\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';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n", "/**\n * Copyright (c) 2013-present, Facebook, Inc.\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';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n  function shim(props, propName, componentName, location, propFullName, secret) {\n    if (secret === ReactPropTypesSecret) {\n      // It is still safe when called from React.\n      return;\n    }\n    var err = new Error(\n      'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n      'Use PropTypes.checkPropTypes() to call them. ' +\n      'Read more at http://fb.me/use-check-prop-types'\n    );\n    err.name = 'Invariant Violation';\n    throw err;\n  };\n  shim.isRequired = shim;\n  function getShim() {\n    return shim;\n  };\n  // Important!\n  // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n  var ReactPropTypes = {\n    array: shim,\n    bigint: shim,\n    bool: shim,\n    func: shim,\n    number: shim,\n    object: shim,\n    string: shim,\n    symbol: shim,\n\n    any: shim,\n    arrayOf: getShim,\n    element: shim,\n    elementType: shim,\n    instanceOf: getShim,\n    node: shim,\n    objectOf: getShim,\n    oneOf: getShim,\n    oneOfType: getShim,\n    shape: getShim,\n    exact: getShim,\n\n    checkPropTypes: emptyFunctionWithReset,\n    resetWarningCache: emptyFunction\n  };\n\n  ReactPropTypes.PropTypes = ReactPropTypes;\n\n  return ReactPropTypes;\n};\n", "/**\n * Copyright (c) 2013-present, Facebook, Inc.\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\nif (process.env.NODE_ENV !== 'production') {\n  var ReactIs = require('react-is');\n\n  // By explicitly using `prop-types` you are opting into new development behavior.\n  // http://fb.me/prop-types-in-prod\n  var throwOnDirectAccess = true;\n  module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n  // By explicitly using `prop-types` you are opting into new production behavior.\n  // http://fb.me/prop-types-in-prod\n  module.exports = require('./factoryWithThrowingShims')();\n}\n", "/**\n * @license React\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var b=Symbol.for(\"react.element\"),c=Symbol.for(\"react.portal\"),d=Symbol.for(\"react.fragment\"),e=Symbol.for(\"react.strict_mode\"),f=Symbol.for(\"react.profiler\"),g=Symbol.for(\"react.provider\"),h=Symbol.for(\"react.context\"),k=Symbol.for(\"react.server_context\"),l=Symbol.for(\"react.forward_ref\"),m=Symbol.for(\"react.suspense\"),n=Symbol.for(\"react.suspense_list\"),p=Symbol.for(\"react.memo\"),q=Symbol.for(\"react.lazy\"),t=Symbol.for(\"react.offscreen\"),u;u=Symbol.for(\"react.module.reference\");\nfunction v(a){if(\"object\"===typeof a&&null!==a){var r=a.$$typeof;switch(r){case b:switch(a=a.type,a){case d:case f:case e:case m:case n:return a;default:switch(a=a&&a.$$typeof,a){case k:case h:case l:case q:case p:case g:return a;default:return r}}case c:return r}}}exports.ContextConsumer=h;exports.ContextProvider=g;exports.Element=b;exports.ForwardRef=l;exports.Fragment=d;exports.Lazy=q;exports.Memo=p;exports.Portal=c;exports.Profiler=f;exports.StrictMode=e;exports.Suspense=m;\nexports.SuspenseList=n;exports.isAsyncMode=function(){return!1};exports.isConcurrentMode=function(){return!1};exports.isContextConsumer=function(a){return v(a)===h};exports.isContextProvider=function(a){return v(a)===g};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===b};exports.isForwardRef=function(a){return v(a)===l};exports.isFragment=function(a){return v(a)===d};exports.isLazy=function(a){return v(a)===q};exports.isMemo=function(a){return v(a)===p};\nexports.isPortal=function(a){return v(a)===c};exports.isProfiler=function(a){return v(a)===f};exports.isStrictMode=function(a){return v(a)===e};exports.isSuspense=function(a){return v(a)===m};exports.isSuspenseList=function(a){return v(a)===n};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===d||a===f||a===e||a===m||a===n||a===t||\"object\"===typeof a&&null!==a&&(a.$$typeof===q||a.$$typeof===p||a.$$typeof===g||a.$$typeof===h||a.$$typeof===l||a.$$typeof===u||void 0!==a.getModuleId)?!0:!1};exports.typeOf=v;\n", "'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-is.production.min.js');\n} else {\n  module.exports = require('./cjs/react-is.development.js');\n}\n", "// http://www.w3.org/TR/CSS21/grammar.html\n// https://github.com/visionmedia/css-parse/pull/49#issuecomment-30088027\nvar COMMENT_REGEX = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\n\nvar NEWLINE_REGEX = /\\n/g;\nvar WHITESPACE_REGEX = /^\\s*/;\n\n// declaration\nvar PROPERTY_REGEX = /^(\\*?[-#/*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/;\nvar COLON_REGEX = /^:\\s*/;\nvar VALUE_REGEX = /^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^)]*?\\)|[^};])+)/;\nvar SEMICOLON_REGEX = /^[;\\s]*/;\n\n// https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim#Polyfill\nvar TRIM_REGEX = /^\\s+|\\s+$/g;\n\n// strings\nvar NEWLINE = '\\n';\nvar FORWARD_SLASH = '/';\nvar ASTERISK = '*';\nvar EMPTY_STRING = '';\n\n// types\nvar TYPE_COMMENT = 'comment';\nvar TYPE_DECLARATION = 'declaration';\n\n/**\n * @param {String} style\n * @param {Object} [options]\n * @return {Object[]}\n * @throws {TypeError}\n * @throws {Error}\n */\nmodule.exports = function(style, options) {\n  if (typeof style !== 'string') {\n    throw new TypeError('First argument must be a string');\n  }\n\n  if (!style) return [];\n\n  options = options || {};\n\n  /**\n   * Positional.\n   */\n  var lineno = 1;\n  var column = 1;\n\n  /**\n   * Update lineno and column based on `str`.\n   *\n   * @param {String} str\n   */\n  function updatePosition(str) {\n    var lines = str.match(NEWLINE_REGEX);\n    if (lines) lineno += lines.length;\n    var i = str.lastIndexOf(NEWLINE);\n    column = ~i ? str.length - i : column + str.length;\n  }\n\n  /**\n   * Mark position and patch `node.position`.\n   *\n   * @return {Function}\n   */\n  function position() {\n    var start = { line: lineno, column: column };\n    return function(node) {\n      node.position = new Position(start);\n      whitespace();\n      return node;\n    };\n  }\n\n  /**\n   * Store position information for a node.\n   *\n   * @constructor\n   * @property {Object} start\n   * @property {Object} end\n   * @property {undefined|String} source\n   */\n  function Position(start) {\n    this.start = start;\n    this.end = { line: lineno, column: column };\n    this.source = options.source;\n  }\n\n  /**\n   * Non-enumerable source string.\n   */\n  Position.prototype.content = style;\n\n  var errorsList = [];\n\n  /**\n   * Error `msg`.\n   *\n   * @param {String} msg\n   * @throws {Error}\n   */\n  function error(msg) {\n    var err = new Error(\n      options.source + ':' + lineno + ':' + column + ': ' + msg\n    );\n    err.reason = msg;\n    err.filename = options.source;\n    err.line = lineno;\n    err.column = column;\n    err.source = style;\n\n    if (options.silent) {\n      errorsList.push(err);\n    } else {\n      throw err;\n    }\n  }\n\n  /**\n   * Match `re` and return captures.\n   *\n   * @param {RegExp} re\n   * @return {undefined|Array}\n   */\n  function match(re) {\n    var m = re.exec(style);\n    if (!m) return;\n    var str = m[0];\n    updatePosition(str);\n    style = style.slice(str.length);\n    return m;\n  }\n\n  /**\n   * Parse whitespace.\n   */\n  function whitespace() {\n    match(WHITESPACE_REGEX);\n  }\n\n  /**\n   * Parse comments.\n   *\n   * @param {Object[]} [rules]\n   * @return {Object[]}\n   */\n  function comments(rules) {\n    var c;\n    rules = rules || [];\n    while ((c = comment())) {\n      if (c !== false) {\n        rules.push(c);\n      }\n    }\n    return rules;\n  }\n\n  /**\n   * Parse comment.\n   *\n   * @return {Object}\n   * @throws {Error}\n   */\n  function comment() {\n    var pos = position();\n    if (FORWARD_SLASH != style.charAt(0) || ASTERISK != style.charAt(1)) return;\n\n    var i = 2;\n    while (\n      EMPTY_STRING != style.charAt(i) &&\n      (ASTERISK != style.charAt(i) || FORWARD_SLASH != style.charAt(i + 1))\n    ) {\n      ++i;\n    }\n    i += 2;\n\n    if (EMPTY_STRING === style.charAt(i - 1)) {\n      return error('End of comment missing');\n    }\n\n    var str = style.slice(2, i - 2);\n    column += 2;\n    updatePosition(str);\n    style = style.slice(i);\n    column += 2;\n\n    return pos({\n      type: TYPE_COMMENT,\n      comment: str\n    });\n  }\n\n  /**\n   * Parse declaration.\n   *\n   * @return {Object}\n   * @throws {Error}\n   */\n  function declaration() {\n    var pos = position();\n\n    // prop\n    var prop = match(PROPERTY_REGEX);\n    if (!prop) return;\n    comment();\n\n    // :\n    if (!match(COLON_REGEX)) return error(\"property missing ':'\");\n\n    // val\n    var val = match(VALUE_REGEX);\n\n    var ret = pos({\n      type: TYPE_DECLARATION,\n      property: trim(prop[0].replace(COMMENT_REGEX, EMPTY_STRING)),\n      value: val\n        ? trim(val[0].replace(COMMENT_REGEX, EMPTY_STRING))\n        : EMPTY_STRING\n    });\n\n    // ;\n    match(SEMICOLON_REGEX);\n\n    return ret;\n  }\n\n  /**\n   * Parse declarations.\n   *\n   * @return {Object[]}\n   */\n  function declarations() {\n    var decls = [];\n\n    comments(decls);\n\n    // declarations\n    var decl;\n    while ((decl = declaration())) {\n      if (decl !== false) {\n        decls.push(decl);\n        comments(decls);\n      }\n    }\n\n    return decls;\n  }\n\n  whitespace();\n  return declarations();\n};\n\n/**\n * Trim `str`.\n *\n * @param {String} str\n * @return {String}\n */\nfunction trim(str) {\n  return str ? str.replace(TRIM_REGEX, EMPTY_STRING) : EMPTY_STRING;\n}\n", "var parse = require('inline-style-parser');\n\n/**\n * Parses inline style to object.\n *\n * @example\n * // returns { 'line-height': '42' }\n * StyleToObject('line-height: 42;');\n *\n * @param  {String}      style      - The inline style.\n * @param  {Function}    [iterator] - The iterator function.\n * @return {null|Object}\n */\nfunction StyleToObject(style, iterator) {\n  var output = null;\n  if (!style || typeof style !== 'string') {\n    return output;\n  }\n\n  var declaration;\n  var declarations = parse(style);\n  var hasIterator = typeof iterator === 'function';\n  var property;\n  var value;\n\n  for (var i = 0, len = declarations.length; i < len; i++) {\n    declaration = declarations[i];\n    property = declaration.property;\n    value = declaration.value;\n\n    if (hasIterator) {\n      iterator(property, value, declaration);\n    } else if (value) {\n      output || (output = {});\n      output[property] = value;\n    }\n  }\n\n  return output;\n}\n\nmodule.exports = StyleToObject;\n", "import type { AssistantActionConfig } from \"../types\";\nimport type { ProductV1 } from \"@fermat/product-api\";\n\n/** Version stamped on every assistant action payload. Increment on breaking payload changes. */\n// v2 replaced the internal rootProductId in `productId` with the brand's catalog id, renamed\n// variantExternalId to variantId, and dropped the unused externalId/sku fields.\n// v3 renamed variantId to skuId, the two keys brand cart APIs already ask for. It also re-emits\n// the v1 `variantExternalId` under `@deprecated`: a live brand integration keys on that name, and\n// renaming a field out from under a deployed listener is what broke it. Read `version`, not the\n// key set, to tell versions apart.\nexport const ASSISTANT_ACTION_VERSION = 3 as const;\n\nexport type AssistantActionType =\n  | \"add_to_cart\"\n  | \"checkout\"\n  | \"view_cart\"\n  | \"navigate_to_product\";\n\n/**\n * Normalized, host-agnostic line item. Deliberately NOT ProductV1 \u2014 this is a public contract.\n * Every id here is the BRAND's own catalog id, never a Fermat-internal one: a host reaching for\n * `productId` must get a value its cart API accepts.\n */\nexport interface AssistantLineItem {\n  /** Brand catalog product id (Rithum \"SNZK1OK\"). Absent when the catalog carries none. */\n  productId?: string;\n  /** Brand catalog variant id (Rithum \"SNZK1OK-GLOGREDAY-L\"). */\n  skuId?: string;\n  /** @deprecated v1 name for `skuId`, always the same value. Kept for already-deployed brand\n   * listeners. Remove once every integration reads `skuId`. */\n  variantExternalId?: string;\n  quantity: number;\n  /** Fermat product locator; only Fermat-hosted funnels resolve products by it. */\n  handle: string;\n  name?: string;\n  price?: number;\n  currency?: string;\n  imageUrl?: string;\n}\n\nexport interface AssistantAction {\n  version: typeof ASSISTANT_ACTION_VERSION;\n  type: AssistantActionType;\n  source: \"assistant\";\n  items: AssistantLineItem[];\n  url?: string;\n  metadata?: Record<string, string | number | boolean>;\n}\n\n/** Project an internal ProductV1 to a public line item. ProductV1 never leaves the package. */\nexport function toLineItem(\n  product: ProductV1,\n  requestedSkuId?: string,\n  quantity = 1,\n): AssistantLineItem {\n  const variants = product.productVariants ?? [];\n  const variant =\n    (requestedSkuId && variants.find((v) => v.externalId === requestedSkuId)) ||\n    variants[0];\n  // Variant-first, matching the card: the payload must picture the variant the shopper saw.\n  const image = variant?.images?.[0] ?? product.images?.[0];\n  const parsedPrice =\n    variant?.unitPrice != null ? Number(variant.unitPrice) : undefined;\n  return {\n    // `||`, not `??`: the catalog serves \"\" rather than null for at least one absent id (observed on\n    // a Rithum variant's `sku`), and an empty productId reaches a brand cart API as a malformed add\n    // rather than an omitted field. Whether externalId itself is ever \"\" is unconfirmed.\n    productId: product.externalId || undefined,\n    // Never echo the requested id: a request that matched nothing resolved to variants[0], so\n    // echoing it would name a variant the shopper was not shown and the host must not add.\n    skuId: variant?.externalId || undefined,\n    // Same value, never a second source of truth: a host reading either name adds the same variant.\n    variantExternalId: variant?.externalId || undefined,\n    handle: product.handle,\n    quantity,\n    // Variant-first like `imageUrl` above: a payload naming \"Blue Jacket\" beside the red variant's\n    // photo and price is what a host cart line renders, and it contradicts itself.\n    name: variant?.name || product.name,\n    price:\n      parsedPrice != null && Number.isFinite(parsedPrice)\n        ? parsedPrice\n        : undefined,\n    currency: variant?.currency ?? undefined,\n    imageUrl: image?.src,\n  };\n}\n\n/** Action flags after defaults are applied. */\nexport interface ResolvedActions {\n  navigate_to_product: boolean;\n  add_to_cart: boolean;\n}\n\n/** navigate_to_product is ON unless explicitly false; add_to_cart is OFF unless explicitly true. */\nexport function resolveActions(raw?: AssistantActionConfig): ResolvedActions {\n  return {\n    navigate_to_product: raw?.navigate_to_product !== false,\n    add_to_cart: raw?.add_to_cart === true,\n  };\n}\n", "import type { AssistantAction } from \"./actions\";\nimport type { ChatEvent } from \"../types\";\n\n/** One-way analytics bridge: postMessages mapped events up to the Claire parent. Wire shape mirrors claire-pixel shopping-assistant.ts; keep in sync. */\n\n/** Maps the widget's canonical `Assistant *` names to the pixel `assistant_*` types Claire records. */\nexport const ASSISTANT_EVENT_MAP: Record<string, string> = {\n  \"Assistant opened\": \"assistant_opened\",\n  \"Assistant closed\": \"assistant_closed\",\n  \"Assistant interacted\": \"assistant_interacted\",\n  \"Assistant message sent\": \"assistant_message_sent\",\n  \"Assistant reset\": \"assistant_reset\",\n  \"Assistant product clicked\": \"assistant_product_clicked\",\n  \"Assistant product atc clicked\": \"assistant_product_atc_clicked\",\n  \"Assistant conversation turn completed\":\n    \"assistant_conversation_turn_completed\",\n  \"Assistant feedback submitted\": \"assistant_feedback_submitted\",\n  \"Assistant error\": \"assistant_error\",\n  // Live-agent handoff funnel (FDE-472). An event name missing from this map is DROPPED by\n  // toBridgeMessage, so a new tracked event is not observable until it is listed here.\n  \"Assistant handoff suggested\": \"assistant_handoff_suggested\",\n  \"Assistant handoff prompted\": \"assistant_handoff_prompted\",\n  \"Assistant handoff requested\": \"assistant_handoff_requested\",\n  \"Assistant handoff dismissed\": \"assistant_handoff_dismissed\",\n};\n\nexport const BRIDGE_MESSAGE_TAG = \"bridge\";\nexport const BRIDGE_PROTOCOL_VERSION = 1;\n\n/** Control-channel message type: asks the Claire parent to resize the iframe element. The iframe\n *  can't resize its own host box, so collapse/expand is delegated to Claire. Not an analytics event. */\nexport const RESIZE_MESSAGE_TYPE = \"resize\";\nexport type IframeSizeMode = \"collapsed\" | \"expanded\";\n\n/** Control-channel message type: asks the Claire parent to navigate the host page to a product. The\n *  cross-origin iframe can't navigate its parent, so Claire owns navigation policy. Not an analytics\n *  event. Keep this constant + the message shape in sync with claire-pixel shopping-assistant.ts. */\nexport const NAVIGATE_MESSAGE_TYPE = \"navigate\";\n\n/** Control-channel message type: the assistant asks the host to add an item to its cart. Carries an\n *  AssistantAction in properties. Claire re-dispatches it as a DOM event the host page (hosted-tiles\n *  or brand site) handles. Keep in sync with claire-pixel shopping-assistant.ts. Not an analytics event. */\nexport const ADD_TO_CART_MESSAGE_TYPE = \"add_to_cart\";\n\n/** Control-channel message type: the assistant asks the host to open its cart (the post-add \"View\n *  Cart\" affordance). Mirrors add_to_cart, carries an AssistantAction; Claire re-dispatches it as a\n *  DOM event the host handles. Keep in sync with claire-pixel shopping-assistant.ts. Not analytics. */\nexport const VIEW_CART_MESSAGE_TYPE = \"view_cart\";\n\n/** The control-message types carried by an AssistantAction sink (see createActionSink). Union of the\n *  message-type constants (each is a string-literal const), so callers can't pass an arbitrary type. */\nexport type ActionMessageType =\n  | typeof ADD_TO_CART_MESSAGE_TYPE\n  | typeof VIEW_CART_MESSAGE_TYPE;\n\n/** Control-channel message type: the shopper confirmed a transfer to the brand's live-agent channel\n *  (FDE-472). Carries no payload: which vendor opens, and with what seed text, is host-side policy in\n *  Claire. Keep in sync with claire-pixel shopping-assistant.ts. Not an analytics event. */\nexport const EXTERNAL_HANDOFF_MESSAGE_TYPE = \"external_handoff\";\n\n/** Control-channel message type: the shopper tapped a contact link in an assistant message\n *  (FDE-472). The iframe sandbox carries neither allow-popups nor allow-top-navigation, so Claire\n *  performs the open and re-checks its own scheme/origin gate; `links=1` decides only what the\n *  iframe RENDERS. Keep in sync with claire-pixel shopping-assistant.ts. Not an analytics event:\n *  Claire tracks the outcome as assistant_link_opened / assistant_link_blocked. */\nexport const OPEN_LINK_MESSAGE_TYPE = \"open_link\";\n\n/** Control-channel message type: the inline facade launcher asks Claire to open the warm floating\n *  drawer seeded with a prompt (chip click or input submit). Claire calls expand() and forwards the\n *  prompt on the open command. Keep in sync with claire-pixel shopping-assistant.ts. Not an analytics\n *  event. */\nexport const FACADE_OPEN_MESSAGE_TYPE = \"facade_open\";\n\n/** Control-channel message type: the facade posts its measured content height so Claire can auto-size\n *  the small inline iframe. Gated on hostResize=1. Keep in sync with claire-pixel\n *  shopping-assistant.ts. Not an analytics event. */\nexport const CONTENT_HEIGHT_MESSAGE_TYPE = \"content_height\";\n\n/** Which destination rule Claire applies. Fermat funnel/tile -> same-origin \"?product=\" route;\n *  org-only brand site -> the product's canonical brand PDP URL. The widget derives this from its\n *  launch mode; it selects a branch but does not by itself authorize a destination. */\nexport type NavSurface = \"fermat-funnel\" | \"brand-site\";\n\n/** Payload posted with a navigate control message. */\nexport interface NavigateProperties {\n  /** ProductV1.handle, sanitized by Claire before it reaches a URL. */\n  handle: string;\n  /** ProductV1.productUrl, the brand canonical PDP URL. Used by the brand-site branch only. */\n  productUrl?: string;\n  /** ProductV1.rootProductId, swapped into a /pt DPP route's trailing segment. */\n  rootProductId?: string;\n  /** ProductV1.externalId, swapped into a /pf DPP route's trailing segment (its productRef is the\n   *  external product id, not the rootProductId). Both let Claire load the SELECTED product, not the\n   *  template hero; ignored on the ?product= and brand-site branches. */\n  externalId?: string;\n  /** externalId of the VARIANT the assistant picked, when it picked one. Rides as the\n   *  variant_external_id query param on a DPP route, since those routes key their path on the\n   *  product. Absent means product-level, and Claire then clears any stale param. */\n  variantExternalId?: string;\n  surface: NavSurface;\n}\n\nexport interface BridgeMessage {\n  __claire: typeof BRIDGE_MESSAGE_TAG;\n  v: number;\n  type: string;\n  properties?: Record<string, unknown>;\n  ts: number;\n}\n\n/** Build the wire message for an analytics event, or null when the name is unmapped. */\nexport function toBridgeMessage(\n  event: ChatEvent,\n  now: number,\n): BridgeMessage | null {\n  const type = ASSISTANT_EVENT_MAP[event.name];\n  if (!type) return null;\n  return {\n    __claire: BRIDGE_MESSAGE_TAG,\n    v: BRIDGE_PROTOCOL_VERSION,\n    type,\n    properties: event.properties,\n    ts: now,\n  };\n}\n\n/** targetOrigin for postMessage: the referrer's origin when available, else \"*\" (safe; Claire validates the sender on receipt). */\nexport function hostTargetOrigin(): string {\n  if (typeof document !== \"undefined\" && document.referrer) {\n    try {\n      return new URL(document.referrer).origin;\n    } catch {\n      /* fall through to wildcard */\n    }\n  }\n  return \"*\";\n}\n\n/** Control sink (SamuelConfig.onResize); posts a collapse/expand request to the Claire parent so\n *  it can show its launcher and tear down / recreate the iframe. No-ops when not framed. */\nexport function createResizeSink(\n  target: Window | null = typeof window !== \"undefined\" ? window.parent : null,\n): (mode: IframeSizeMode) => void {\n  const origin = hostTargetOrigin();\n  return (mode: IframeSizeMode) => {\n    if (!target || target === window) return;\n    const message: BridgeMessage = {\n      __claire: BRIDGE_MESSAGE_TAG,\n      v: BRIDGE_PROTOCOL_VERSION,\n      type: RESIZE_MESSAGE_TYPE,\n      properties: { mode },\n      ts: Date.now(),\n    };\n    target.postMessage(message, origin);\n  };\n}\n\n/** Control sink (SamuelConfig.onNavigateToProduct path); posts a navigate request to the Claire\n *  parent so it can apply navigation policy and move the host page. No-ops when not framed. */\nexport function createNavSink(\n  target: Window | null = typeof window !== \"undefined\" ? window.parent : null,\n): (props: NavigateProperties) => void {\n  const origin = hostTargetOrigin();\n  return (props: NavigateProperties) => {\n    if (!target || target === window) return;\n    const message: BridgeMessage = {\n      __claire: BRIDGE_MESSAGE_TAG,\n      v: BRIDGE_PROTOCOL_VERSION,\n      type: NAVIGATE_MESSAGE_TYPE,\n      properties: { ...props },\n      ts: Date.now(),\n    };\n    target.postMessage(message, origin);\n  };\n}\n\n/** Control sink (SamuelConfig.onExternalHandoff); posts a handoff request to the Claire parent, which\n *  owns the vendor integration. No-ops when not framed. */\nexport function createExternalHandoffSink(\n  target: Window | null = typeof window !== \"undefined\" ? window.parent : null,\n): () => void {\n  const origin = hostTargetOrigin();\n  return () => {\n    if (!target || target === window) return;\n    const message: BridgeMessage = {\n      __claire: BRIDGE_MESSAGE_TAG,\n      v: BRIDGE_PROTOCOL_VERSION,\n      type: EXTERNAL_HANDOFF_MESSAGE_TYPE,\n      properties: {},\n      ts: Date.now(),\n    };\n    target.postMessage(message, origin);\n  };\n}\n\n/** Control sink (SamuelConfig.onOpenLink); posts a contact-link open request to the Claire parent,\n *  which owns the scheme/origin gate and the open itself. `messageCount` rides along because Claire\n *  holds no conversation state, so its link events cannot derive a turn position. Claire does not\n *  read the field yet: FDE-472 lands the host side separately.\n *\n *  Unframed (the playground, a widget-owned placement) there is no Claire to ask, so it opens the\n *  link directly and the surface stays usable. */\nexport function createOpenLinkSink(\n  target: Window | null = typeof window !== \"undefined\" ? window.parent : null,\n): (url: string, messageCount: number) => void {\n  const origin = hostTargetOrigin();\n  return (url: string, messageCount: number) => {\n    if (!target || target === window) {\n      if (typeof window !== \"undefined\") {\n        window.open(url, \"_blank\", \"noopener,noreferrer\");\n      }\n      return;\n    }\n    const message: BridgeMessage = {\n      __claire: BRIDGE_MESSAGE_TAG,\n      v: BRIDGE_PROTOCOL_VERSION,\n      type: OPEN_LINK_MESSAGE_TYPE,\n      properties: { url, message_count: messageCount },\n      ts: Date.now(),\n    };\n    target.postMessage(message, origin);\n  };\n}\n\n/** Shared AssistantAction control-sink factory: posts the action to the Claire parent under the\n *  given control-message type. No-ops when not framed. Backs createAtcSink/createViewCartSink, which\n *  carry the identical AssistantAction payload and differ only in message type. */\nfunction createActionSink(\n  messageType: ActionMessageType,\n  target: Window | null,\n): (action: AssistantAction) => void {\n  const origin = hostTargetOrigin();\n  return (action: AssistantAction) => {\n    if (!target || target === window) return;\n    const message: BridgeMessage = {\n      __claire: BRIDGE_MESSAGE_TAG,\n      v: BRIDGE_PROTOCOL_VERSION,\n      type: messageType,\n      properties: { ...action },\n      ts: Date.now(),\n    };\n    target.postMessage(message, origin);\n  };\n}\n\n/** Control sink (SamuelConfig.onAddToCart path); posts an add_to_cart AssistantAction to the Claire\n *  parent, which re-dispatches it to the host page. No-ops when not framed. */\nexport function createAtcSink(\n  target: Window | null = typeof window !== \"undefined\" ? window.parent : null,\n): (action: AssistantAction) => void {\n  return createActionSink(ADD_TO_CART_MESSAGE_TYPE, target);\n}\n\n/** Control sink (SamuelConfig.onViewCart path); posts a view_cart AssistantAction to the Claire\n *  parent, which re-dispatches it to the host page so it opens its cart. No-ops when not framed. */\nexport function createViewCartSink(\n  target: Window | null = typeof window !== \"undefined\" ? window.parent : null,\n): (action: AssistantAction) => void {\n  return createActionSink(VIEW_CART_MESSAGE_TYPE, target);\n}\n\n/** Control sink (facade launcher); posts a facade_open request carrying the seed prompt to the Claire\n *  parent, which opens the warm drawer and forwards the prompt. No-ops when not framed. */\nexport function createFacadeOpenSink(\n  target: Window | null = typeof window !== \"undefined\" ? window.parent : null,\n): (prompt: string) => void {\n  const origin = hostTargetOrigin();\n  return (prompt: string) => {\n    if (!target || target === window) return;\n    const message: BridgeMessage = {\n      __claire: BRIDGE_MESSAGE_TAG,\n      v: BRIDGE_PROTOCOL_VERSION,\n      type: FACADE_OPEN_MESSAGE_TYPE,\n      properties: { prompt },\n      ts: Date.now(),\n    };\n    target.postMessage(message, origin);\n  };\n}\n\n/** Control sink (facade auto-size); posts the facade's measured content height to the Claire parent,\n *  which sizes the inline iframe. No-ops when not framed. */\nexport function createHeightSink(\n  target: Window | null = typeof window !== \"undefined\" ? window.parent : null,\n  origin: string = hostTargetOrigin(),\n): (height: number) => void {\n  return (height: number) => {\n    if (!target || target === window) return;\n    const message: BridgeMessage = {\n      __claire: BRIDGE_MESSAGE_TAG,\n      v: BRIDGE_PROTOCOL_VERSION,\n      type: CONTENT_HEIGHT_MESSAGE_TYPE,\n      properties: { height },\n      ts: Date.now(),\n    };\n    target.postMessage(message, origin);\n  };\n}\n\n/** Analytics sink (SamuelConfig.onEvent); posts mapped events to the Claire parent, no-ops when not framed or unmapped. */\nexport function createBridgeSink(\n  target: Window | null = typeof window !== \"undefined\" ? window.parent : null,\n): (event: ChatEvent) => void {\n  const origin = hostTargetOrigin();\n  return (event: ChatEvent) => {\n    if (!target || target === window) return;\n    const message = toBridgeMessage(event, Date.now());\n    if (message) target.postMessage(message, origin);\n  };\n}\n", "/**\n * The host page the shopper is currently on, as reported by Claire's `page_context` command.\n *\n * A module store rather than a prop or context because the command arrives on `window`, above any\n * React root, and two different roots need it: the chat app (which owns its own state via\n * `SamuelHandle.setPageContext`) and the inline facade, which mounts no chat runtime and renders\n * only starter questions. Registering the listener once and writing here keeps a single normalize\n * and a single source of truth for both.\n *\n * `null` means the host has reported nothing yet, which is not the same as \"reported a page with no\n * product\": consumers fall back to the mount-time values the iframe URL carried only while this is\n * null.\n */\nexport interface HostPageContext {\n  productHandle?: string;\n  pageUrl?: string;\n}\n\nlet current: HostPageContext | null = null;\nconst listeners = new Set<() => void>();\n\n/** Record the host's current page and notify subscribers. */\nexport function setHostPageContext(next: HostPageContext): void {\n  current = next;\n  for (const listener of listeners) listener();\n}\n\n/**\n * The latest reported page, or null before the first report. Returns the same object reference\n * until the next report, which is what `useSyncExternalStore` requires of a snapshot.\n */\nexport function getHostPageContext(): HostPageContext | null {\n  return current;\n}\n\nexport function subscribeHostPageContext(onChange: () => void): () => void {\n  listeners.add(onChange);\n  return () => {\n    listeners.delete(onChange);\n  };\n}\n\n/** Test seam: drop the recorded page and every subscriber. */\nexport function resetHostPageContext(): void {\n  current = null;\n  listeners.clear();\n}\n", "type Listener = () => void\n\nexport class Subscribable<TListener extends Function = Listener> {\n  protected listeners: Set<{ listener: TListener }>\n\n  constructor() {\n    this.listeners = new Set()\n    this.subscribe = this.subscribe.bind(this)\n  }\n\n  subscribe(listener: TListener): () => void {\n    const identity = { listener }\n    this.listeners.add(identity)\n\n    this.onSubscribe()\n\n    return () => {\n      this.listeners.delete(identity)\n      this.onUnsubscribe()\n    }\n  }\n\n  hasListeners(): boolean {\n    return this.listeners.size > 0\n  }\n\n  protected onSubscribe(): void {\n    // Do nothing\n  }\n\n  protected onUnsubscribe(): void {\n    // Do nothing\n  }\n}\n", "import type { Mutation } from './mutation'\nimport type { Query } from './query'\nimport type {\n  FetchStatus,\n  MutationFunction,\n  MutationKey,\n  MutationOptions,\n  QueryFunction,\n  QueryKey,\n  QueryOptions,\n} from './types'\n\n// TYPES\n\nexport interface QueryFilters {\n  /**\n   * Filter to active queries, inactive queries or all queries\n   */\n  type?: QueryTypeFilter\n  /**\n   * Match query key exactly\n   */\n  exact?: boolean\n  /**\n   * Include queries matching this predicate function\n   */\n  predicate?: (query: Query) => boolean\n  /**\n   * Include queries matching this query key\n   */\n  queryKey?: QueryKey\n  /**\n   * Include or exclude stale queries\n   */\n  stale?: boolean\n  /**\n   * Include queries matching their fetchStatus\n   */\n  fetchStatus?: FetchStatus\n}\n\nexport interface MutationFilters {\n  /**\n   * Match mutation key exactly\n   */\n  exact?: boolean\n  /**\n   * Include mutations matching this predicate function\n   */\n  predicate?: (mutation: Mutation<any, any, any>) => boolean\n  /**\n   * Include mutations matching this mutation key\n   */\n  mutationKey?: MutationKey\n  /**\n   * Include or exclude fetching mutations\n   */\n  fetching?: boolean\n}\n\nexport type DataUpdateFunction<TInput, TOutput> = (input: TInput) => TOutput\n\nexport type Updater<TInput, TOutput> =\n  | TOutput\n  | DataUpdateFunction<TInput, TOutput>\n\nexport type QueryTypeFilter = 'all' | 'active' | 'inactive'\n\n// UTILS\n\nexport const isServer = typeof window === 'undefined' || 'Deno' in window\n\nexport function noop(): undefined {\n  return undefined\n}\n\nexport function functionalUpdate<TInput, TOutput>(\n  updater: Updater<TInput, TOutput>,\n  input: TInput,\n): TOutput {\n  return typeof updater === 'function'\n    ? (updater as DataUpdateFunction<TInput, TOutput>)(input)\n    : updater\n}\n\nexport function isValidTimeout(value: unknown): value is number {\n  return typeof value === 'number' && value >= 0 && value !== Infinity\n}\n\nexport function difference<T>(array1: T[], array2: T[]): T[] {\n  return array1.filter((x) => !array2.includes(x))\n}\n\nexport function replaceAt<T>(array: T[], index: number, value: T): T[] {\n  const copy = array.slice(0)\n  copy[index] = value\n  return copy\n}\n\nexport function timeUntilStale(updatedAt: number, staleTime?: number): number {\n  return Math.max(updatedAt + (staleTime || 0) - Date.now(), 0)\n}\n\nexport function parseQueryArgs<\n  TOptions extends QueryOptions<any, any, any, TQueryKey>,\n  TQueryKey extends QueryKey = QueryKey,\n>(\n  arg1: TQueryKey | TOptions,\n  arg2?: QueryFunction<any, TQueryKey> | TOptions,\n  arg3?: TOptions,\n): TOptions {\n  if (!isQueryKey(arg1)) {\n    return arg1 as TOptions\n  }\n\n  if (typeof arg2 === 'function') {\n    return { ...arg3, queryKey: arg1, queryFn: arg2 } as TOptions\n  }\n\n  return { ...arg2, queryKey: arg1 } as TOptions\n}\n\nexport function parseMutationArgs<\n  TOptions extends MutationOptions<any, any, any, any>,\n>(\n  arg1: MutationKey | MutationFunction<any, any> | TOptions,\n  arg2?: MutationFunction<any, any> | TOptions,\n  arg3?: TOptions,\n): TOptions {\n  if (isQueryKey(arg1)) {\n    if (typeof arg2 === 'function') {\n      return { ...arg3, mutationKey: arg1, mutationFn: arg2 } as TOptions\n    }\n    return { ...arg2, mutationKey: arg1 } as TOptions\n  }\n\n  if (typeof arg1 === 'function') {\n    return { ...arg2, mutationFn: arg1 } as TOptions\n  }\n\n  return { ...arg1 } as TOptions\n}\n\nexport function parseFilterArgs<\n  TFilters extends QueryFilters,\n  TOptions = unknown,\n>(\n  arg1?: QueryKey | TFilters,\n  arg2?: TFilters | TOptions,\n  arg3?: TOptions,\n): [TFilters, TOptions | undefined] {\n  return (\n    isQueryKey(arg1) ? [{ ...arg2, queryKey: arg1 }, arg3] : [arg1 || {}, arg2]\n  ) as [TFilters, TOptions]\n}\n\nexport function parseMutationFilterArgs<\n  TFilters extends MutationFilters,\n  TOptions = unknown,\n>(\n  arg1?: QueryKey | TFilters,\n  arg2?: TFilters | TOptions,\n  arg3?: TOptions,\n): [TFilters, TOptions | undefined] {\n  return (\n    isQueryKey(arg1)\n      ? [{ ...arg2, mutationKey: arg1 }, arg3]\n      : [arg1 || {}, arg2]\n  ) as [TFilters, TOptions]\n}\n\nexport function matchQuery(\n  filters: QueryFilters,\n  query: Query<any, any, any, any>,\n): boolean {\n  const {\n    type = 'all',\n    exact,\n    fetchStatus,\n    predicate,\n    queryKey,\n    stale,\n  } = filters\n\n  if (isQueryKey(queryKey)) {\n    if (exact) {\n      if (query.queryHash !== hashQueryKeyByOptions(queryKey, query.options)) {\n        return false\n      }\n    } else if (!partialMatchKey(query.queryKey, queryKey)) {\n      return false\n    }\n  }\n\n  if (type !== 'all') {\n    const isActive = query.isActive()\n    if (type === 'active' && !isActive) {\n      return false\n    }\n    if (type === 'inactive' && isActive) {\n      return false\n    }\n  }\n\n  if (typeof stale === 'boolean' && query.isStale() !== stale) {\n    return false\n  }\n\n  if (\n    typeof fetchStatus !== 'undefined' &&\n    fetchStatus !== query.state.fetchStatus\n  ) {\n    return false\n  }\n\n  if (predicate && !predicate(query)) {\n    return false\n  }\n\n  return true\n}\n\nexport function matchMutation(\n  filters: MutationFilters,\n  mutation: Mutation<any, any>,\n): boolean {\n  const { exact, fetching, predicate, mutationKey } = filters\n  if (isQueryKey(mutationKey)) {\n    if (!mutation.options.mutationKey) {\n      return false\n    }\n    if (exact) {\n      if (\n        hashQueryKey(mutation.options.mutationKey) !== hashQueryKey(mutationKey)\n      ) {\n        return false\n      }\n    } else if (!partialMatchKey(mutation.options.mutationKey, mutationKey)) {\n      return false\n    }\n  }\n\n  if (\n    typeof fetching === 'boolean' &&\n    (mutation.state.status === 'loading') !== fetching\n  ) {\n    return false\n  }\n\n  if (predicate && !predicate(mutation)) {\n    return false\n  }\n\n  return true\n}\n\nexport function hashQueryKeyByOptions<TQueryKey extends QueryKey = QueryKey>(\n  queryKey: TQueryKey,\n  options?: QueryOptions<any, any, any, TQueryKey>,\n): string {\n  const hashFn = options?.queryKeyHashFn || hashQueryKey\n  return hashFn(queryKey)\n}\n\n/**\n * Default query keys hash function.\n * Hashes the value into a stable hash.\n */\nexport function hashQueryKey(queryKey: QueryKey): string {\n  return JSON.stringify(queryKey, (_, val) =>\n    isPlainObject(val)\n      ? Object.keys(val)\n          .sort()\n          .reduce((result, key) => {\n            result[key] = val[key]\n            return result\n          }, {} as any)\n      : val,\n  )\n}\n\n/**\n * Checks if key `b` partially matches with key `a`.\n */\nexport function partialMatchKey(a: QueryKey, b: QueryKey): boolean {\n  return partialDeepEqual(a, b)\n}\n\n/**\n * Checks if `b` partially matches with `a`.\n */\nexport function partialDeepEqual(a: any, b: any): boolean {\n  if (a === b) {\n    return true\n  }\n\n  if (typeof a !== typeof b) {\n    return false\n  }\n\n  if (a && b && typeof a === 'object' && typeof b === 'object') {\n    return !Object.keys(b).some((key) => !partialDeepEqual(a[key], b[key]))\n  }\n\n  return false\n}\n\n/**\n * This function returns `a` if `b` is deeply equal.\n * If not, it will replace any deeply equal children of `b` with those of `a`.\n * This can be used for structural sharing between JSON values for example.\n */\nexport function replaceEqualDeep<T>(a: unknown, b: T, depth?: number): T\nexport function replaceEqualDeep(a: any, b: any, depth = 0): any {\n  if (a === b) {\n    return a\n  }\n\n  if (depth > 500) return b\n\n  const array = isPlainArray(a) && isPlainArray(b)\n\n  if (array || (isPlainObject(a) && isPlainObject(b))) {\n    const aSize = array ? a.length : Object.keys(a).length\n    const bItems = array ? b : Object.keys(b)\n    const bSize = bItems.length\n    const copy: any = array ? [] : {}\n\n    let equalItems = 0\n\n    for (let i = 0; i < bSize; i++) {\n      const key = array ? i : bItems[i]\n      copy[key] = replaceEqualDeep(a[key], b[key], depth + 1)\n      if (copy[key] === a[key]) {\n        equalItems++\n      }\n    }\n\n    return aSize === bSize && equalItems === aSize ? a : copy\n  }\n\n  return b\n}\n\n/**\n * Shallow compare objects. Only works with objects that always have the same properties.\n */\nexport function shallowEqualObjects<T>(a: T, b: T): boolean {\n  if ((a && !b) || (b && !a)) {\n    return false\n  }\n\n  for (const key in a) {\n    if (a[key] !== b[key]) {\n      return false\n    }\n  }\n\n  return true\n}\n\nexport function isPlainArray(value: unknown) {\n  return Array.isArray(value) && value.length === Object.keys(value).length\n}\n\n// Copied from: https://github.com/jonschlinkert/is-plain-object\nexport function isPlainObject(o: any): o is Object {\n  if (!hasObjectPrototype(o)) {\n    return false\n  }\n\n  // If has modified constructor\n  const ctor = o.constructor\n  if (typeof ctor === 'undefined') {\n    return true\n  }\n\n  // If has modified prototype\n  const prot = ctor.prototype\n  if (!hasObjectPrototype(prot)) {\n    return false\n  }\n\n  // If constructor does not have an Object-specific method\n  if (!prot.hasOwnProperty('isPrototypeOf')) {\n    return false\n  }\n\n  // Most likely a plain Object\n  return true\n}\n\nfunction hasObjectPrototype(o: any): boolean {\n  return Object.prototype.toString.call(o) === '[object Object]'\n}\n\nexport function isQueryKey(value: unknown): value is QueryKey {\n  return Array.isArray(value)\n}\n\nexport function isError(value: any): value is Error {\n  return value instanceof Error\n}\n\nexport function sleep(timeout: number): Promise<void> {\n  return new Promise((resolve) => {\n    setTimeout(resolve, timeout)\n  })\n}\n\n/**\n * Schedules a microtask.\n * This can be useful to schedule state updates after rendering.\n */\nexport function scheduleMicrotask(callback: () => void) {\n  sleep(0).then(callback)\n}\n\nexport function getAbortController(): AbortController | undefined {\n  if (typeof AbortController === 'function') {\n    return new AbortController()\n  }\n  return\n}\n\nexport function replaceData<\n  TData,\n  TOptions extends QueryOptions<any, any, any, any>,\n>(prevData: TData | undefined, data: TData, options: TOptions): TData {\n  // Use prev data if an isDataEqual function is defined and returns `true`\n  if (options.isDataEqual?.(prevData, data)) {\n    return prevData as TData\n  } else if (typeof options.structuralSharing === 'function') {\n    return options.structuralSharing(prevData, data)\n  } else if (options.structuralSharing !== false) {\n    // Structurally share data between prev and new data if needed\n    return replaceEqualDeep(prevData, data)\n  }\n  return data\n}\n", "import { Subscribable } from './subscribable'\nimport { isServer } from './utils'\n\ntype SetupFn = (\n  setFocused: (focused?: boolean) => void,\n) => (() => void) | undefined\n\nexport class FocusManager extends Subscribable {\n  private focused?: boolean\n  private cleanup?: () => void\n\n  private setup: SetupFn\n\n  constructor() {\n    super()\n    this.setup = (onFocus) => {\n      // addEventListener does not exist in React Native, but window does\n      // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n      if (!isServer && window.addEventListener) {\n        const listener = () => onFocus()\n        // Listen to visibillitychange and focus\n        window.addEventListener('visibilitychange', listener, false)\n        window.addEventListener('focus', listener, false)\n\n        return () => {\n          // Be sure to unsubscribe if a new handler is set\n          window.removeEventListener('visibilitychange', listener)\n          window.removeEventListener('focus', listener)\n        }\n      }\n      return\n    }\n  }\n\n  protected onSubscribe(): void {\n    if (!this.cleanup) {\n      this.setEventListener(this.setup)\n    }\n  }\n\n  protected onUnsubscribe() {\n    if (!this.hasListeners()) {\n      this.cleanup?.()\n      this.cleanup = undefined\n    }\n  }\n\n  setEventListener(setup: SetupFn): void {\n    this.setup = setup\n    this.cleanup?.()\n    this.cleanup = setup((focused) => {\n      if (typeof focused === 'boolean') {\n        this.setFocused(focused)\n      } else {\n        this.onFocus()\n      }\n    })\n  }\n\n  setFocused(focused?: boolean): void {\n    const changed = this.focused !== focused\n    if (changed) {\n      this.focused = focused\n      this.onFocus()\n    }\n  }\n\n  onFocus(): void {\n    this.listeners.forEach(({ listener }) => {\n      listener()\n    })\n  }\n\n  isFocused(): boolean {\n    if (typeof this.focused === 'boolean') {\n      return this.focused\n    }\n\n    // document global can be unavailable in react native\n    if (typeof document === 'undefined') {\n      return true\n    }\n\n    return [undefined, 'visible', 'prerender'].includes(\n      document.visibilityState,\n    )\n  }\n}\n\nexport const focusManager = new FocusManager()\n", "import { Subscribable } from './subscribable'\nimport { isServer } from './utils'\n\ntype SetupFn = (\n  setOnline: (online?: boolean) => void,\n) => (() => void) | undefined\n\nconst onlineEvents = ['online', 'offline'] as const\n\nexport class OnlineManager extends Subscribable {\n  private online?: boolean\n  private cleanup?: () => void\n\n  private setup: SetupFn\n\n  constructor() {\n    super()\n    this.setup = (onOnline) => {\n      // addEventListener does not exist in React Native, but window does\n      // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n      if (!isServer && window.addEventListener) {\n        const listener = () => onOnline()\n        // Listen to online\n        onlineEvents.forEach((event) => {\n          window.addEventListener(event, listener, false)\n        })\n\n        return () => {\n          // Be sure to unsubscribe if a new handler is set\n          onlineEvents.forEach((event) => {\n            window.removeEventListener(event, listener)\n          })\n        }\n      }\n\n      return\n    }\n  }\n\n  protected onSubscribe(): void {\n    if (!this.cleanup) {\n      this.setEventListener(this.setup)\n    }\n  }\n\n  protected onUnsubscribe() {\n    if (!this.hasListeners()) {\n      this.cleanup?.()\n      this.cleanup = undefined\n    }\n  }\n\n  setEventListener(setup: SetupFn): void {\n    this.setup = setup\n    this.cleanup?.()\n    this.cleanup = setup((online?: boolean) => {\n      if (typeof online === 'boolean') {\n        this.setOnline(online)\n      } else {\n        this.onOnline()\n      }\n    })\n  }\n\n  setOnline(online?: boolean): void {\n    const changed = this.online !== online\n\n    if (changed) {\n      this.online = online\n      this.onOnline()\n    }\n  }\n\n  onOnline(): void {\n    this.listeners.forEach(({ listener }) => {\n      listener()\n    })\n  }\n\n  isOnline(): boolean {\n    if (typeof this.online === 'boolean') {\n      return this.online\n    }\n\n    if (\n      typeof navigator === 'undefined' ||\n      typeof navigator.onLine === 'undefined'\n    ) {\n      return true\n    }\n\n    return navigator.onLine\n  }\n}\n\nexport const onlineManager = new OnlineManager()\n", "import { focusManager } from './focusManager'\nimport { onlineManager } from './onlineManager'\nimport { sleep } from './utils'\nimport type { CancelOptions, NetworkMode } from './types'\n\n// TYPES\n\ninterface RetryerConfig<TData = unknown, TError = unknown> {\n  fn: () => TData | Promise<TData>\n  abort?: () => void\n  onError?: (error: TError) => void\n  onSuccess?: (data: TData) => void\n  onFail?: (failureCount: number, error: TError) => void\n  onPause?: () => void\n  onContinue?: () => void\n  retry?: RetryValue<TError>\n  retryDelay?: RetryDelayValue<TError>\n  networkMode: NetworkMode | undefined\n}\n\nexport interface Retryer<TData = unknown> {\n  promise: Promise<TData>\n  cancel: (cancelOptions?: CancelOptions) => void\n  continue: () => Promise<unknown>\n  cancelRetry: () => void\n  continueRetry: () => void\n}\n\nexport type RetryValue<TError> = boolean | number | ShouldRetryFunction<TError>\n\ntype ShouldRetryFunction<TError> = (\n  failureCount: number,\n  error: TError,\n) => boolean\n\nexport type RetryDelayValue<TError> = number | RetryDelayFunction<TError>\n\ntype RetryDelayFunction<TError = unknown> = (\n  failureCount: number,\n  error: TError,\n) => number\n\nfunction defaultRetryDelay(failureCount: number) {\n  return Math.min(1000 * 2 ** failureCount, 30000)\n}\n\nexport function canFetch(networkMode: NetworkMode | undefined): boolean {\n  return (networkMode ?? 'online') === 'online'\n    ? onlineManager.isOnline()\n    : true\n}\n\nexport class CancelledError {\n  revert?: boolean\n  silent?: boolean\n  constructor(options?: CancelOptions) {\n    this.revert = options?.revert\n    this.silent = options?.silent\n  }\n}\n\nexport function isCancelledError(value: any): value is CancelledError {\n  return value instanceof CancelledError\n}\n\nexport function createRetryer<TData = unknown, TError = unknown>(\n  config: RetryerConfig<TData, TError>,\n): Retryer<TData> {\n  let isRetryCancelled = false\n  let failureCount = 0\n  let isResolved = false\n  let continueFn: ((value?: unknown) => boolean) | undefined\n  let promiseResolve: (data: TData) => void\n  let promiseReject: (error: TError) => void\n\n  const promise = new Promise<TData>((outerResolve, outerReject) => {\n    promiseResolve = outerResolve\n    promiseReject = outerReject\n  })\n\n  const cancel = (cancelOptions?: CancelOptions): void => {\n    if (!isResolved) {\n      reject(new CancelledError(cancelOptions))\n\n      config.abort?.()\n    }\n  }\n  const cancelRetry = () => {\n    isRetryCancelled = true\n  }\n\n  const continueRetry = () => {\n    isRetryCancelled = false\n  }\n\n  const shouldPause = () =>\n    !focusManager.isFocused() ||\n    (config.networkMode !== 'always' && !onlineManager.isOnline())\n\n  const resolve = (value: any) => {\n    if (!isResolved) {\n      isResolved = true\n      config.onSuccess?.(value)\n      continueFn?.()\n      promiseResolve(value)\n    }\n  }\n\n  const reject = (value: any) => {\n    if (!isResolved) {\n      isResolved = true\n      config.onError?.(value)\n      continueFn?.()\n      promiseReject(value)\n    }\n  }\n\n  const pause = () => {\n    return new Promise((continueResolve) => {\n      continueFn = (value) => {\n        const canContinue = isResolved || !shouldPause()\n        if (canContinue) {\n          continueResolve(value)\n        }\n        return canContinue\n      }\n      config.onPause?.()\n    }).then(() => {\n      continueFn = undefined\n      if (!isResolved) {\n        config.onContinue?.()\n      }\n    })\n  }\n\n  // Create loop function\n  const run = () => {\n    // Do nothing if already resolved\n    if (isResolved) {\n      return\n    }\n\n    let promiseOrValue: any\n\n    // Execute query\n    try {\n      promiseOrValue = config.fn()\n    } catch (error) {\n      promiseOrValue = Promise.reject(error)\n    }\n\n    Promise.resolve(promiseOrValue)\n      .then(resolve)\n      .catch((error) => {\n        // Stop if the fetch is already resolved\n        if (isResolved) {\n          return\n        }\n\n        // Do we need to retry the request?\n        const retry = config.retry ?? 3\n        const retryDelay = config.retryDelay ?? defaultRetryDelay\n        const delay =\n          typeof retryDelay === 'function'\n            ? retryDelay(failureCount, error)\n            : retryDelay\n        const shouldRetry =\n          retry === true ||\n          (typeof retry === 'number' && failureCount < retry) ||\n          (typeof retry === 'function' && retry(failureCount, error))\n\n        if (isRetryCancelled || !shouldRetry) {\n          // We are done if the query does not need to be retried\n          reject(error)\n          return\n        }\n\n        failureCount++\n\n        // Notify on fail\n        config.onFail?.(failureCount, error)\n\n        // Delay\n        sleep(delay)\n          // Pause if the document is not visible or when the device is offline\n          .then(() => {\n            if (shouldPause()) {\n              return pause()\n            }\n            return\n          })\n          .then(() => {\n            if (isRetryCancelled) {\n              reject(error)\n            } else {\n              run()\n            }\n          })\n      })\n  }\n\n  // Start loop\n  if (canFetch(config.networkMode)) {\n    run()\n  } else {\n    pause().then(run)\n  }\n\n  return {\n    promise,\n    cancel,\n    continue: () => {\n      const didContinue = continueFn?.()\n      return didContinue ? promise : Promise.resolve()\n    },\n    cancelRetry,\n    continueRetry,\n  }\n}\n", "export interface Logger {\n  log: LogFunction\n  warn: LogFunction\n  error: LogFunction\n}\n\ntype LogFunction = (...args: any[]) => void\n\nexport const defaultLogger: Logger = console\n", "import { scheduleMicrotask } from './utils'\n\n// TYPES\n\ntype NotifyCallback = () => void\n\ntype NotifyFunction = (callback: () => void) => void\n\ntype BatchNotifyFunction = (callback: () => void) => void\n\ntype BatchCallsCallback<T extends unknown[]> = (...args: T) => void\n\nexport function createNotifyManager() {\n  let queue: NotifyCallback[] = []\n  let transactions = 0\n  let notifyFn: NotifyFunction = (callback) => {\n    callback()\n  }\n  let batchNotifyFn: BatchNotifyFunction = (callback: () => void) => {\n    callback()\n  }\n\n  const batch = <T>(callback: () => T): T => {\n    let result\n    transactions++\n    try {\n      result = callback()\n    } finally {\n      transactions--\n      if (!transactions) {\n        flush()\n      }\n    }\n    return result\n  }\n\n  const schedule = (callback: NotifyCallback): void => {\n    if (transactions) {\n      queue.push(callback)\n    } else {\n      scheduleMicrotask(() => {\n        notifyFn(callback)\n      })\n    }\n  }\n\n  /**\n   * All calls to the wrapped function will be batched.\n   */\n  const batchCalls = <T extends unknown[]>(\n    callback: BatchCallsCallback<T>,\n  ): BatchCallsCallback<T> => {\n    return (...args) => {\n      schedule(() => {\n        callback(...args)\n      })\n    }\n  }\n\n  const flush = (): void => {\n    const originalQueue = queue\n    queue = []\n    if (originalQueue.length) {\n      scheduleMicrotask(() => {\n        batchNotifyFn(() => {\n          originalQueue.forEach((callback) => {\n            notifyFn(callback)\n          })\n        })\n      })\n    }\n  }\n\n  /**\n   * Use this method to set a custom notify function.\n   * This can be used to for example wrap notifications with `React.act` while running tests.\n   */\n  const setNotifyFunction = (fn: NotifyFunction) => {\n    notifyFn = fn\n  }\n\n  /**\n   * Use this method to set a custom function to batch notifications together into a single tick.\n   * By default React Query will use the batch function provided by ReactDOM or React Native.\n   */\n  const setBatchNotifyFunction = (fn: BatchNotifyFunction) => {\n    batchNotifyFn = fn\n  }\n\n  return {\n    batch,\n    batchCalls,\n    schedule,\n    setNotifyFunction,\n    setBatchNotifyFunction,\n  } as const\n}\n\n// SINGLETON\nexport const notifyManager = createNotifyManager()\n", "import { isServer, isValidTimeout } from './utils'\n\nexport abstract class Removable {\n  cacheTime!: number\n  private gcTimeout?: ReturnType<typeof setTimeout>\n\n  destroy(): void {\n    this.clearGcTimeout()\n  }\n\n  protected scheduleGc(): void {\n    this.clearGcTimeout()\n\n    if (isValidTimeout(this.cacheTime)) {\n      this.gcTimeout = setTimeout(() => {\n        this.optionalRemove()\n      }, this.cacheTime)\n    }\n  }\n\n  protected updateCacheTime(newCacheTime: number | undefined): void {\n    // Default to 5 minutes (Infinity for server-side) if no cache time is set\n    this.cacheTime = Math.max(\n      this.cacheTime || 0,\n      newCacheTime ?? (isServer ? Infinity : 5 * 60 * 1000),\n    )\n  }\n\n  protected clearGcTimeout() {\n    if (this.gcTimeout) {\n      clearTimeout(this.gcTimeout)\n      this.gcTimeout = undefined\n    }\n  }\n\n  protected abstract optionalRemove(): void\n}\n", "import { getAbortController, noop, replaceData, timeUntilStale } from './utils'\nimport { defaultLogger } from './logger'\nimport { notifyManager } from './notifyManager'\nimport { canFetch, createRetryer, isCancelledError } from './retryer'\nimport { Removable } from './removable'\nimport type {\n  CancelOptions,\n  FetchStatus,\n  InitialDataFunction,\n  QueryFunctionContext,\n  QueryKey,\n  QueryMeta,\n  QueryOptions,\n  QueryStatus,\n  SetDataOptions,\n} from './types'\nimport type { QueryCache } from './queryCache'\nimport type { QueryObserver } from './queryObserver'\nimport type { Logger } from './logger'\nimport type { Retryer } from './retryer'\n\n// TYPES\n\ninterface QueryConfig<\n  TQueryFnData,\n  TError,\n  TData,\n  TQueryKey extends QueryKey = QueryKey,\n> {\n  cache: QueryCache\n  queryKey: TQueryKey\n  queryHash: string\n  logger?: Logger\n  options?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>\n  defaultOptions?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>\n  state?: QueryState<TData, TError>\n}\n\nexport interface QueryState<TData = unknown, TError = unknown> {\n  data: TData | undefined\n  dataUpdateCount: number\n  dataUpdatedAt: number\n  error: TError | null\n  errorUpdateCount: number\n  errorUpdatedAt: number\n  fetchFailureCount: number\n  fetchFailureReason: TError | null\n  fetchMeta: any\n  isInvalidated: boolean\n  status: QueryStatus\n  fetchStatus: FetchStatus\n}\n\nexport interface FetchContext<\n  TQueryFnData,\n  TError,\n  TData,\n  TQueryKey extends QueryKey = QueryKey,\n> {\n  fetchFn: () => unknown | Promise<unknown>\n  fetchOptions?: FetchOptions\n  signal?: AbortSignal\n  options: QueryOptions<TQueryFnData, TError, TData, any>\n  queryKey: TQueryKey\n  state: QueryState<TData, TError>\n}\n\nexport interface QueryBehavior<\n  TQueryFnData = unknown,\n  TError = unknown,\n  TData = TQueryFnData,\n  TQueryKey extends QueryKey = QueryKey,\n> {\n  onFetch: (\n    context: FetchContext<TQueryFnData, TError, TData, TQueryKey>,\n  ) => void\n}\n\nexport interface FetchOptions {\n  cancelRefetch?: boolean\n  meta?: any\n}\n\ninterface FailedAction<TError> {\n  type: 'failed'\n  failureCount: number\n  error: TError\n}\n\ninterface FetchAction {\n  type: 'fetch'\n  meta?: any\n}\n\ninterface SuccessAction<TData> {\n  data: TData | undefined\n  type: 'success'\n  dataUpdatedAt?: number\n  manual?: boolean\n}\n\ninterface ErrorAction<TError> {\n  type: 'error'\n  error: TError\n}\n\ninterface InvalidateAction {\n  type: 'invalidate'\n}\n\ninterface PauseAction {\n  type: 'pause'\n}\n\ninterface ContinueAction {\n  type: 'continue'\n}\n\ninterface SetStateAction<TData, TError> {\n  type: 'setState'\n  state: Partial<QueryState<TData, TError>>\n  setStateOptions?: SetStateOptions\n}\n\nexport type Action<TData, TError> =\n  | ContinueAction\n  | ErrorAction<TError>\n  | FailedAction<TError>\n  | FetchAction\n  | InvalidateAction\n  | PauseAction\n  | SetStateAction<TData, TError>\n  | SuccessAction<TData>\n\nexport interface SetStateOptions {\n  meta?: any\n}\n\n// CLASS\n\nexport class Query<\n  TQueryFnData = unknown,\n  TError = unknown,\n  TData = TQueryFnData,\n  TQueryKey extends QueryKey = QueryKey,\n> extends Removable {\n  queryKey: TQueryKey\n  queryHash: string\n  options!: QueryOptions<TQueryFnData, TError, TData, TQueryKey>\n  initialState: QueryState<TData, TError>\n  revertState?: QueryState<TData, TError>\n  state: QueryState<TData, TError>\n  isFetchingOptimistic?: boolean\n\n  private cache: QueryCache\n  private logger: Logger\n  private promise?: Promise<TData>\n  private retryer?: Retryer<TData>\n  private observers: QueryObserver<any, any, any, any, any>[]\n  private defaultOptions?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>\n  private abortSignalConsumed: boolean\n\n  constructor(config: QueryConfig<TQueryFnData, TError, TData, TQueryKey>) {\n    super()\n\n    this.abortSignalConsumed = false\n    this.defaultOptions = config.defaultOptions\n    this.setOptions(config.options)\n    this.observers = []\n    this.cache = config.cache\n    this.logger = config.logger || defaultLogger\n    this.queryKey = config.queryKey\n    this.queryHash = config.queryHash\n    this.initialState = config.state || getDefaultState(this.options)\n    this.state = this.initialState\n    this.scheduleGc()\n  }\n\n  get meta(): QueryMeta | undefined {\n    return this.options.meta\n  }\n\n  private setOptions(\n    options?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n  ): void {\n    this.options = { ...this.defaultOptions, ...options }\n\n    this.updateCacheTime(this.options.cacheTime)\n  }\n\n  protected optionalRemove() {\n    if (!this.observers.length && this.state.fetchStatus === 'idle') {\n      this.cache.remove(this)\n    }\n  }\n\n  setData(\n    newData: TData,\n    options?: SetDataOptions & { manual: boolean },\n  ): TData {\n    const data = replaceData(this.state.data, newData, this.options)\n\n    // Set data and mark it as cached\n    this.dispatch({\n      data,\n      type: 'success',\n      dataUpdatedAt: options?.updatedAt,\n      manual: options?.manual,\n    })\n\n    return data\n  }\n\n  setState(\n    state: Partial<QueryState<TData, TError>>,\n    setStateOptions?: SetStateOptions,\n  ): void {\n    this.dispatch({ type: 'setState', state, setStateOptions })\n  }\n\n  cancel(options?: CancelOptions): Promise<void> {\n    const promise = this.promise\n    this.retryer?.cancel(options)\n    return promise ? promise.then(noop).catch(noop) : Promise.resolve()\n  }\n\n  destroy(): void {\n    super.destroy()\n\n    this.cancel({ silent: true })\n  }\n\n  reset(): void {\n    this.destroy()\n    this.setState(this.initialState)\n  }\n\n  isActive(): boolean {\n    return this.observers.some((observer) => observer.options.enabled !== false)\n  }\n\n  isDisabled(): boolean {\n    return this.getObserversCount() > 0 && !this.isActive()\n  }\n\n  isStale(): boolean {\n    return (\n      this.state.isInvalidated ||\n      !this.state.dataUpdatedAt ||\n      this.observers.some((observer) => observer.getCurrentResult().isStale)\n    )\n  }\n\n  isStaleByTime(staleTime = 0): boolean {\n    return (\n      this.state.isInvalidated ||\n      !this.state.dataUpdatedAt ||\n      !timeUntilStale(this.state.dataUpdatedAt, staleTime)\n    )\n  }\n\n  onFocus(): void {\n    const observer = this.observers.find((x) => x.shouldFetchOnWindowFocus())\n\n    if (observer) {\n      observer.refetch({ cancelRefetch: false })\n    }\n\n    // Continue fetch if currently paused\n    this.retryer?.continue()\n  }\n\n  onOnline(): void {\n    const observer = this.observers.find((x) => x.shouldFetchOnReconnect())\n\n    if (observer) {\n      observer.refetch({ cancelRefetch: false })\n    }\n\n    // Continue fetch if currently paused\n    this.retryer?.continue()\n  }\n\n  addObserver(observer: QueryObserver<any, any, any, any, any>): void {\n    if (!this.observers.includes(observer)) {\n      this.observers.push(observer)\n\n      // Stop the query from being garbage collected\n      this.clearGcTimeout()\n\n      this.cache.notify({ type: 'observerAdded', query: this, observer })\n    }\n  }\n\n  removeObserver(observer: QueryObserver<any, any, any, any, any>): void {\n    if (this.observers.includes(observer)) {\n      this.observers = this.observers.filter((x) => x !== observer)\n\n      if (!this.observers.length) {\n        // If the transport layer does not support cancellation\n        // we'll let the query continue so the result can be cached\n        if (this.retryer) {\n          if (this.abortSignalConsumed) {\n            this.retryer.cancel({ revert: true })\n          } else {\n            this.retryer.cancelRetry()\n          }\n        }\n\n        this.scheduleGc()\n      }\n\n      this.cache.notify({ type: 'observerRemoved', query: this, observer })\n    }\n  }\n\n  getObserversCount(): number {\n    return this.observers.length\n  }\n\n  invalidate(): void {\n    if (!this.state.isInvalidated) {\n      this.dispatch({ type: 'invalidate' })\n    }\n  }\n\n  fetch(\n    options?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n    fetchOptions?: FetchOptions,\n  ): Promise<TData> {\n    if (this.state.fetchStatus !== 'idle') {\n      if (this.state.dataUpdatedAt && fetchOptions?.cancelRefetch) {\n        // Silently cancel current fetch if the user wants to cancel refetches\n        this.cancel({ silent: true })\n      } else if (this.promise) {\n        // make sure that retries that were potentially cancelled due to unmounts can continue\n        this.retryer?.continueRetry()\n        // Return current promise if we are already fetching\n        return this.promise\n      }\n    }\n\n    // Update config if passed, otherwise the config from the last execution is used\n    if (options) {\n      this.setOptions(options)\n    }\n\n    // Use the options from the first observer with a query function if no function is found.\n    // This can happen when the query is hydrated or created with setQueryData.\n    if (!this.options.queryFn) {\n      const observer = this.observers.find((x) => x.options.queryFn)\n      if (observer) {\n        this.setOptions(observer.options)\n      }\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (!Array.isArray(this.options.queryKey)) {\n        this.logger.error(\n          `As of v4, queryKey needs to be an Array. If you are using a string like 'repoData', please change it to an Array, e.g. ['repoData']`,\n        )\n      }\n    }\n\n    const abortController = getAbortController()\n\n    // Create query function context\n    const queryFnContext: QueryFunctionContext<TQueryKey> = {\n      queryKey: this.queryKey,\n      pageParam: undefined,\n      meta: this.meta,\n    }\n\n    // Adds an enumerable signal property to the object that\n    // which sets abortSignalConsumed to true when the signal\n    // is read.\n    const addSignalProperty = (object: unknown) => {\n      Object.defineProperty(object, 'signal', {\n        enumerable: true,\n        get: () => {\n          if (abortController) {\n            this.abortSignalConsumed = true\n            return abortController.signal\n          }\n          return undefined\n        },\n      })\n    }\n\n    addSignalProperty(queryFnContext)\n\n    // Create fetch function\n    const fetchFn = () => {\n      if (!this.options.queryFn) {\n        return Promise.reject(\n          `Missing queryFn for queryKey '${this.options.queryHash}'`,\n        )\n      }\n      this.abortSignalConsumed = false\n      return this.options.queryFn(queryFnContext)\n    }\n\n    // Trigger behavior hook\n    const context: FetchContext<TQueryFnData, TError, TData, TQueryKey> = {\n      fetchOptions,\n      options: this.options,\n      queryKey: this.queryKey,\n      state: this.state,\n      fetchFn,\n    }\n\n    addSignalProperty(context)\n\n    this.options.behavior?.onFetch(context)\n\n    // Store state in case the current fetch needs to be reverted\n    this.revertState = this.state\n\n    // Set to fetching state if not already in it\n    if (\n      this.state.fetchStatus === 'idle' ||\n      this.state.fetchMeta !== context.fetchOptions?.meta\n    ) {\n      this.dispatch({ type: 'fetch', meta: context.fetchOptions?.meta })\n    }\n\n    const onError = (error: TError | { silent?: boolean }) => {\n      // Optimistically update state if needed\n      if (!(isCancelledError(error) && error.silent)) {\n        this.dispatch({\n          type: 'error',\n          error: error as TError,\n        })\n      }\n\n      if (!isCancelledError(error)) {\n        // Notify cache callback\n        this.cache.config.onError?.(error, this as Query<any, any, any, any>)\n        this.cache.config.onSettled?.(\n          this.state.data,\n          error,\n          this as Query<any, any, any, any>,\n        )\n\n        if (process.env.NODE_ENV !== 'production') {\n          this.logger.error(error)\n        }\n      }\n\n      if (!this.isFetchingOptimistic) {\n        // Schedule query gc after fetching\n        this.scheduleGc()\n      }\n      this.isFetchingOptimistic = false\n    }\n\n    // Try to fetch the data\n    this.retryer = createRetryer({\n      fn: context.fetchFn as () => TData,\n      abort: abortController?.abort.bind(abortController),\n      onSuccess: (data) => {\n        if (typeof data === 'undefined') {\n          if (process.env.NODE_ENV !== 'production') {\n            this.logger.error(\n              `Query data cannot be undefined. Please make sure to return a value other than undefined from your query function. Affected query key: ${this.queryHash}`,\n            )\n          }\n          onError(new Error(`${this.queryHash} data is undefined`) as any)\n          return\n        }\n\n        this.setData(data as TData)\n\n        // Notify cache callback\n        this.cache.config.onSuccess?.(data, this as Query<any, any, any, any>)\n        this.cache.config.onSettled?.(\n          data,\n          this.state.error,\n          this as Query<any, any, any, any>,\n        )\n\n        if (!this.isFetchingOptimistic) {\n          // Schedule query gc after fetching\n          this.scheduleGc()\n        }\n        this.isFetchingOptimistic = false\n      },\n      onError,\n      onFail: (failureCount, error) => {\n        this.dispatch({ type: 'failed', failureCount, error })\n      },\n      onPause: () => {\n        this.dispatch({ type: 'pause' })\n      },\n      onContinue: () => {\n        this.dispatch({ type: 'continue' })\n      },\n      retry: context.options.retry,\n      retryDelay: context.options.retryDelay,\n      networkMode: context.options.networkMode,\n    })\n\n    this.promise = this.retryer.promise\n\n    return this.promise\n  }\n\n  private dispatch(action: Action<TData, TError>): void {\n    const reducer = (\n      state: QueryState<TData, TError>,\n    ): QueryState<TData, TError> => {\n      switch (action.type) {\n        case 'failed':\n          return {\n            ...state,\n            fetchFailureCount: action.failureCount,\n            fetchFailureReason: action.error,\n          }\n        case 'pause':\n          return {\n            ...state,\n            fetchStatus: 'paused',\n          }\n        case 'continue':\n          return {\n            ...state,\n            fetchStatus: 'fetching',\n          }\n        case 'fetch':\n          return {\n            ...state,\n            fetchFailureCount: 0,\n            fetchFailureReason: null,\n            fetchMeta: action.meta ?? null,\n            fetchStatus: canFetch(this.options.networkMode)\n              ? 'fetching'\n              : 'paused',\n            ...(!state.dataUpdatedAt && {\n              error: null,\n              status: 'loading',\n            }),\n          }\n        case 'success':\n          return {\n            ...state,\n            data: action.data,\n            dataUpdateCount: state.dataUpdateCount + 1,\n            dataUpdatedAt: action.dataUpdatedAt ?? Date.now(),\n            error: null,\n            isInvalidated: false,\n            status: 'success',\n            ...(!action.manual && {\n              fetchStatus: 'idle',\n              fetchFailureCount: 0,\n              fetchFailureReason: null,\n            }),\n          }\n        case 'error':\n          const error = action.error as unknown\n\n          if (isCancelledError(error) && error.revert && this.revertState) {\n            return { ...this.revertState, fetchStatus: 'idle' }\n          }\n\n          return {\n            ...state,\n            error: error as TError,\n            errorUpdateCount: state.errorUpdateCount + 1,\n            errorUpdatedAt: Date.now(),\n            fetchFailureCount: state.fetchFailureCount + 1,\n            fetchFailureReason: error as TError,\n            fetchStatus: 'idle',\n            status: 'error',\n          }\n        case 'invalidate':\n          return {\n            ...state,\n            isInvalidated: true,\n          }\n        case 'setState':\n          return {\n            ...state,\n            ...action.state,\n          }\n      }\n    }\n\n    this.state = reducer(this.state)\n\n    notifyManager.batch(() => {\n      this.observers.forEach((observer) => {\n        observer.onQueryUpdate(action)\n      })\n\n      this.cache.notify({ query: this, type: 'updated', action })\n    })\n  }\n}\n\nfunction getDefaultState<\n  TQueryFnData,\n  TError,\n  TData,\n  TQueryKey extends QueryKey,\n>(\n  options: QueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n): QueryState<TData, TError> {\n  const data =\n    typeof options.initialData === 'function'\n      ? (options.initialData as InitialDataFunction<TData>)()\n      : options.initialData\n\n  const hasData = typeof data !== 'undefined'\n\n  const initialDataUpdatedAt = hasData\n    ? typeof options.initialDataUpdatedAt === 'function'\n      ? (options.initialDataUpdatedAt as () => number | undefined)()\n      : options.initialDataUpdatedAt\n    : 0\n\n  return {\n    data,\n    dataUpdateCount: 0,\n    dataUpdatedAt: hasData ? initialDataUpdatedAt ?? Date.now() : 0,\n    error: null,\n    errorUpdateCount: 0,\n    errorUpdatedAt: 0,\n    fetchFailureCount: 0,\n    fetchFailureReason: null,\n    fetchMeta: null,\n    isInvalidated: false,\n    status: hasData ? 'success' : 'loading',\n    fetchStatus: 'idle',\n  }\n}\n", "import { hashQueryKeyByOptions, matchQuery, parseFilterArgs } from './utils'\nimport { Query } from './query'\nimport { notifyManager } from './notifyManager'\nimport { Subscribable } from './subscribable'\nimport type { QueryFilters } from './utils'\nimport type { Action, QueryState } from './query'\nimport type { NotifyEvent, OmitKeyof, QueryKey, QueryOptions } from './types'\nimport type { QueryClient } from './queryClient'\nimport type { QueryObserver } from './queryObserver'\n\n// TYPES\n\ninterface QueryCacheConfig {\n  onError?: (error: unknown, query: Query<unknown, unknown, unknown>) => void\n  onSuccess?: (data: unknown, query: Query<unknown, unknown, unknown>) => void\n  onSettled?: (\n    data: unknown | undefined,\n    error: unknown | null,\n    query: Query<unknown, unknown, unknown>,\n  ) => void\n}\n\ninterface QueryHashMap {\n  [hash: string]: Query<any, any, any, any>\n}\n\ninterface NotifyEventQueryAdded extends NotifyEvent {\n  type: 'added'\n  query: Query<any, any, any, any>\n}\n\ninterface NotifyEventQueryRemoved extends NotifyEvent {\n  type: 'removed'\n  query: Query<any, any, any, any>\n}\n\ninterface NotifyEventQueryUpdated extends NotifyEvent {\n  type: 'updated'\n  query: Query<any, any, any, any>\n  action: Action<any, any>\n}\n\ninterface NotifyEventQueryObserverAdded extends NotifyEvent {\n  type: 'observerAdded'\n  query: Query<any, any, any, any>\n  observer: QueryObserver<any, any, any, any, any>\n}\n\ninterface NotifyEventQueryObserverRemoved extends NotifyEvent {\n  type: 'observerRemoved'\n  query: Query<any, any, any, any>\n  observer: QueryObserver<any, any, any, any, any>\n}\n\ninterface NotifyEventQueryObserverResultsUpdated extends NotifyEvent {\n  type: 'observerResultsUpdated'\n  query: Query<any, any, any, any>\n}\n\ninterface NotifyEventQueryObserverOptionsUpdated extends NotifyEvent {\n  type: 'observerOptionsUpdated'\n  query: Query<any, any, any, any>\n  observer: QueryObserver<any, any, any, any, any>\n}\n\nexport type QueryCacheNotifyEvent =\n  | NotifyEventQueryAdded\n  | NotifyEventQueryRemoved\n  | NotifyEventQueryUpdated\n  | NotifyEventQueryObserverAdded\n  | NotifyEventQueryObserverRemoved\n  | NotifyEventQueryObserverResultsUpdated\n  | NotifyEventQueryObserverOptionsUpdated\n\ntype QueryCacheListener = (event: QueryCacheNotifyEvent) => void\n\n// CLASS\n\nexport class QueryCache extends Subscribable<QueryCacheListener> {\n  config: QueryCacheConfig\n\n  private queries: Query<any, any, any, any>[]\n  private queriesMap: QueryHashMap\n\n  constructor(config?: QueryCacheConfig) {\n    super()\n    this.config = config || {}\n    this.queries = []\n    this.queriesMap = {}\n  }\n\n  build<TQueryFnData, TError, TData, TQueryKey extends QueryKey>(\n    client: QueryClient,\n    options: QueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n    state?: QueryState<TData, TError>,\n  ): Query<TQueryFnData, TError, TData, TQueryKey> {\n    const queryKey = options.queryKey!\n    const queryHash =\n      options.queryHash ?? hashQueryKeyByOptions(queryKey, options)\n    let query = this.get<TQueryFnData, TError, TData, TQueryKey>(queryHash)\n\n    if (!query) {\n      query = new Query({\n        cache: this,\n        logger: client.getLogger(),\n        queryKey,\n        queryHash,\n        options: client.defaultQueryOptions(options),\n        state,\n        defaultOptions: client.getQueryDefaults(queryKey),\n      })\n      this.add(query)\n    }\n\n    return query\n  }\n\n  add(query: Query<any, any, any, any>): void {\n    if (!this.queriesMap[query.queryHash]) {\n      this.queriesMap[query.queryHash] = query\n      this.queries.push(query)\n      this.notify({\n        type: 'added',\n        query,\n      })\n    }\n  }\n\n  remove(query: Query<any, any, any, any>): void {\n    const queryInMap = this.queriesMap[query.queryHash]\n\n    if (queryInMap) {\n      query.destroy()\n\n      this.queries = this.queries.filter((x) => x !== query)\n\n      if (queryInMap === query) {\n        delete this.queriesMap[query.queryHash]\n      }\n\n      this.notify({ type: 'removed', query })\n    }\n  }\n\n  clear(): void {\n    notifyManager.batch(() => {\n      this.queries.forEach((query) => {\n        this.remove(query)\n      })\n    })\n  }\n\n  get<\n    TQueryFnData = unknown,\n    TError = unknown,\n    TData = TQueryFnData,\n    TQueryKey extends QueryKey = QueryKey,\n  >(\n    queryHash: string,\n  ): Query<TQueryFnData, TError, TData, TQueryKey> | undefined {\n    return this.queriesMap[queryHash]\n  }\n\n  getAll(): Query[] {\n    return this.queries\n  }\n\n  find<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData>(\n    filters: QueryFilters,\n  ): Query<TQueryFnData, TError, TData> | undefined\n  /**\n   * @deprecated This method should be used with only one object argument.\n   */\n  find<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData>(\n    queryKey: QueryKey,\n    filters?: OmitKeyof<QueryFilters, 'queryKey'>,\n  ): Query<TQueryFnData, TError, TData> | undefined\n  /**\n   * @deprecated This method should be used with only one object argument.\n   */\n  find<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData>(\n    arg1: QueryKey | QueryFilters,\n    arg2?: OmitKeyof<QueryFilters, 'queryKey'>,\n  ): Query<TQueryFnData, TError, TData> | undefined {\n    const [filters] = parseFilterArgs(arg1, arg2)\n\n    if (typeof filters.exact === 'undefined') {\n      filters.exact = true\n    }\n\n    return this.queries.find((query) => matchQuery(filters, query))\n  }\n\n  findAll(filters?: QueryFilters): Query[]\n  /**\n   * @deprecated This method should be used with only one object argument.\n   */\n  findAll(\n    queryKey?: QueryKey,\n    filters?: OmitKeyof<QueryFilters, 'queryKey'>,\n  ): Query[]\n  /**\n   * @deprecated This method should be used with only one object argument.\n   */\n  findAll(\n    arg1?: QueryKey | QueryFilters,\n    arg2?: OmitKeyof<QueryFilters, 'queryKey'>,\n  ): Query[]\n  /**\n   * @deprecated This method should be used with only one object argument.\n   */\n  findAll(\n    arg1?: QueryKey | QueryFilters,\n    arg2?: OmitKeyof<QueryFilters, 'queryKey'>,\n  ): Query[] {\n    const [filters] = parseFilterArgs(arg1, arg2)\n    return Object.keys(filters).length > 0\n      ? this.queries.filter((query) => matchQuery(filters, query))\n      : this.queries\n  }\n\n  notify(event: QueryCacheNotifyEvent) {\n    notifyManager.batch(() => {\n      this.listeners.forEach(({ listener }) => {\n        listener(event)\n      })\n    })\n  }\n\n  onFocus(): void {\n    notifyManager.batch(() => {\n      this.queries.forEach((query) => {\n        query.onFocus()\n      })\n    })\n  }\n\n  onOnline(): void {\n    notifyManager.batch(() => {\n      this.queries.forEach((query) => {\n        query.onOnline()\n      })\n    })\n  }\n}\n", "import { defaultLogger } from './logger'\nimport { notifyManager } from './notifyManager'\nimport { Removable } from './removable'\nimport { canFetch, createRetryer } from './retryer'\nimport type { MutationMeta, MutationOptions, MutationStatus } from './types'\nimport type { MutationCache } from './mutationCache'\nimport type { MutationObserver } from './mutationObserver'\nimport type { Logger } from './logger'\nimport type { Retryer } from './retryer'\n\n// TYPES\n\ninterface MutationConfig<TData, TError, TVariables, TContext> {\n  mutationId: number\n  mutationCache: MutationCache\n  options: MutationOptions<TData, TError, TVariables, TContext>\n  logger?: Logger\n  defaultOptions?: MutationOptions<TData, TError, TVariables, TContext>\n  state?: MutationState<TData, TError, TVariables, TContext>\n  meta?: MutationMeta\n}\n\nexport interface MutationState<\n  TData = unknown,\n  TError = unknown,\n  TVariables = void,\n  TContext = unknown,\n> {\n  context: TContext | undefined\n  data: TData | undefined\n  error: TError | null\n  failureCount: number\n  failureReason: TError | null\n  isPaused: boolean\n  status: MutationStatus\n  variables: TVariables | undefined\n}\n\ninterface FailedAction<TError> {\n  type: 'failed'\n  failureCount: number\n  error: TError | null\n}\n\ninterface LoadingAction<TVariables, TContext> {\n  type: 'loading'\n  variables?: TVariables\n  context?: TContext\n}\n\ninterface SuccessAction<TData> {\n  type: 'success'\n  data: TData\n}\n\ninterface ErrorAction<TError> {\n  type: 'error'\n  error: TError\n}\n\ninterface PauseAction {\n  type: 'pause'\n}\n\ninterface ContinueAction {\n  type: 'continue'\n}\n\ninterface SetStateAction<TData, TError, TVariables, TContext> {\n  type: 'setState'\n  state: MutationState<TData, TError, TVariables, TContext>\n}\n\nexport type Action<TData, TError, TVariables, TContext> =\n  | ContinueAction\n  | ErrorAction<TError>\n  | FailedAction<TError>\n  | LoadingAction<TVariables, TContext>\n  | PauseAction\n  | SetStateAction<TData, TError, TVariables, TContext>\n  | SuccessAction<TData>\n\n// CLASS\n\nexport class Mutation<\n  TData = unknown,\n  TError = unknown,\n  TVariables = void,\n  TContext = unknown,\n> extends Removable {\n  state: MutationState<TData, TError, TVariables, TContext>\n  options!: MutationOptions<TData, TError, TVariables, TContext>\n  mutationId: number\n\n  private observers: MutationObserver<TData, TError, TVariables, TContext>[]\n  private defaultOptions?: MutationOptions<TData, TError, TVariables, TContext>\n  private mutationCache: MutationCache\n  private logger: Logger\n  private retryer?: Retryer<TData>\n\n  constructor(config: MutationConfig<TData, TError, TVariables, TContext>) {\n    super()\n\n    this.defaultOptions = config.defaultOptions\n    this.mutationId = config.mutationId\n    this.mutationCache = config.mutationCache\n    this.logger = config.logger || defaultLogger\n    this.observers = []\n    this.state = config.state || getDefaultState()\n\n    this.setOptions(config.options)\n    this.scheduleGc()\n  }\n\n  setOptions(\n    options?: MutationOptions<TData, TError, TVariables, TContext>,\n  ): void {\n    this.options = { ...this.defaultOptions, ...options }\n\n    this.updateCacheTime(this.options.cacheTime)\n  }\n\n  get meta(): MutationMeta | undefined {\n    return this.options.meta\n  }\n\n  setState(state: MutationState<TData, TError, TVariables, TContext>): void {\n    this.dispatch({ type: 'setState', state })\n  }\n\n  addObserver(observer: MutationObserver<any, any, any, any>): void {\n    if (!this.observers.includes(observer)) {\n      this.observers.push(observer)\n\n      // Stop the mutation from being garbage collected\n      this.clearGcTimeout()\n\n      this.mutationCache.notify({\n        type: 'observerAdded',\n        mutation: this,\n        observer,\n      })\n    }\n  }\n\n  removeObserver(observer: MutationObserver<any, any, any, any>): void {\n    this.observers = this.observers.filter((x) => x !== observer)\n\n    this.scheduleGc()\n\n    this.mutationCache.notify({\n      type: 'observerRemoved',\n      mutation: this,\n      observer,\n    })\n  }\n\n  protected optionalRemove() {\n    if (!this.observers.length) {\n      if (this.state.status === 'loading') {\n        this.scheduleGc()\n      } else {\n        this.mutationCache.remove(this)\n      }\n    }\n  }\n\n  continue(): Promise<unknown> {\n    return this.retryer?.continue() ?? this.execute()\n  }\n\n  async execute(): Promise<TData> {\n    const executeMutation = () => {\n      this.retryer = createRetryer({\n        fn: () => {\n          if (!this.options.mutationFn) {\n            return Promise.reject('No mutationFn found')\n          }\n          return this.options.mutationFn(this.state.variables!)\n        },\n        onFail: (failureCount, error) => {\n          this.dispatch({ type: 'failed', failureCount, error })\n        },\n        onPause: () => {\n          this.dispatch({ type: 'pause' })\n        },\n        onContinue: () => {\n          this.dispatch({ type: 'continue' })\n        },\n        retry: this.options.retry ?? 0,\n        retryDelay: this.options.retryDelay,\n        networkMode: this.options.networkMode,\n      })\n\n      return this.retryer.promise\n    }\n\n    const restored = this.state.status === 'loading'\n    try {\n      if (!restored) {\n        this.dispatch({ type: 'loading', variables: this.options.variables! })\n        // Notify cache callback\n        await this.mutationCache.config.onMutate?.(\n          this.state.variables,\n          this as Mutation<unknown, unknown, unknown, unknown>,\n        )\n        const context = await this.options.onMutate?.(this.state.variables!)\n        if (context !== this.state.context) {\n          this.dispatch({\n            type: 'loading',\n            context,\n            variables: this.state.variables,\n          })\n        }\n      }\n      const data = await executeMutation()\n\n      // Notify cache callback\n      await this.mutationCache.config.onSuccess?.(\n        data,\n        this.state.variables,\n        this.state.context,\n        this as Mutation<unknown, unknown, unknown, unknown>,\n      )\n\n      await this.options.onSuccess?.(\n        data,\n        this.state.variables!,\n        this.state.context!,\n      )\n\n      // Notify cache callback\n      await this.mutationCache.config.onSettled?.(\n        data,\n        null,\n        this.state.variables,\n        this.state.context,\n        this as Mutation<unknown, unknown, unknown, unknown>,\n      )\n\n      await this.options.onSettled?.(\n        data,\n        null,\n        this.state.variables!,\n        this.state.context,\n      )\n\n      this.dispatch({ type: 'success', data })\n      return data\n    } catch (error) {\n      try {\n        // Notify cache callback\n        await this.mutationCache.config.onError?.(\n          error,\n          this.state.variables,\n          this.state.context,\n          this as Mutation<unknown, unknown, unknown, unknown>,\n        )\n\n        if (process.env.NODE_ENV !== 'production') {\n          this.logger.error(error)\n        }\n\n        await this.options.onError?.(\n          error as TError,\n          this.state.variables!,\n          this.state.context,\n        )\n\n        // Notify cache callback\n        await this.mutationCache.config.onSettled?.(\n          undefined,\n          error,\n          this.state.variables,\n          this.state.context,\n          this as Mutation<unknown, unknown, unknown, unknown>,\n        )\n\n        await this.options.onSettled?.(\n          undefined,\n          error as TError,\n          this.state.variables!,\n          this.state.context,\n        )\n        throw error\n      } finally {\n        this.dispatch({ type: 'error', error: error as TError })\n      }\n    }\n  }\n\n  private dispatch(action: Action<TData, TError, TVariables, TContext>): void {\n    const reducer = (\n      state: MutationState<TData, TError, TVariables, TContext>,\n    ): MutationState<TData, TError, TVariables, TContext> => {\n      switch (action.type) {\n        case 'failed':\n          return {\n            ...state,\n            failureCount: action.failureCount,\n            failureReason: action.error,\n          }\n        case 'pause':\n          return {\n            ...state,\n            isPaused: true,\n          }\n        case 'continue':\n          return {\n            ...state,\n            isPaused: false,\n          }\n        case 'loading':\n          return {\n            ...state,\n            context: action.context,\n            data: undefined,\n            failureCount: 0,\n            failureReason: null,\n            error: null,\n            isPaused: !canFetch(this.options.networkMode),\n            status: 'loading',\n            variables: action.variables,\n          }\n        case 'success':\n          return {\n            ...state,\n            data: action.data,\n            failureCount: 0,\n            failureReason: null,\n            error: null,\n            status: 'success',\n            isPaused: false,\n          }\n        case 'error':\n          return {\n            ...state,\n            data: undefined,\n            error: action.error,\n            failureCount: state.failureCount + 1,\n            failureReason: action.error,\n            isPaused: false,\n            status: 'error',\n          }\n        case 'setState':\n          return {\n            ...state,\n            ...action.state,\n          }\n      }\n    }\n    this.state = reducer(this.state)\n\n    notifyManager.batch(() => {\n      this.observers.forEach((observer) => {\n        observer.onMutationUpdate(action)\n      })\n      this.mutationCache.notify({\n        mutation: this,\n        type: 'updated',\n        action,\n      })\n    })\n  }\n}\n\nexport function getDefaultState<\n  TData,\n  TError,\n  TVariables,\n  TContext,\n>(): MutationState<TData, TError, TVariables, TContext> {\n  return {\n    context: undefined,\n    data: undefined,\n    error: null,\n    failureCount: 0,\n    failureReason: null,\n    isPaused: false,\n    status: 'idle',\n    variables: undefined,\n  }\n}\n", "import { notifyManager } from './notifyManager'\nimport { Mutation } from './mutation'\nimport { matchMutation, noop } from './utils'\nimport { Subscribable } from './subscribable'\nimport type { MutationObserver } from './mutationObserver'\nimport type { MutationOptions, NotifyEvent } from './types'\nimport type { QueryClient } from './queryClient'\nimport type { Action, MutationState } from './mutation'\nimport type { MutationFilters } from './utils'\n\n// TYPES\n\ninterface MutationCacheConfig {\n  onError?: (\n    error: unknown,\n    variables: unknown,\n    context: unknown,\n    mutation: Mutation<unknown, unknown, unknown>,\n  ) => Promise<unknown> | unknown\n  onSuccess?: (\n    data: unknown,\n    variables: unknown,\n    context: unknown,\n    mutation: Mutation<unknown, unknown, unknown>,\n  ) => Promise<unknown> | unknown\n  onMutate?: (\n    variables: unknown,\n    mutation: Mutation<unknown, unknown, unknown>,\n  ) => Promise<unknown> | unknown\n  onSettled?: (\n    data: unknown | undefined,\n    error: unknown | null,\n    variables: unknown,\n    context: unknown,\n    mutation: Mutation<unknown, unknown, unknown>,\n  ) => Promise<unknown> | unknown\n}\n\ninterface NotifyEventMutationAdded extends NotifyEvent {\n  type: 'added'\n  mutation: Mutation<any, any, any, any>\n}\ninterface NotifyEventMutationRemoved extends NotifyEvent {\n  type: 'removed'\n  mutation: Mutation<any, any, any, any>\n}\n\ninterface NotifyEventMutationObserverAdded extends NotifyEvent {\n  type: 'observerAdded'\n  mutation: Mutation<any, any, any, any>\n  observer: MutationObserver<any, any, any>\n}\n\ninterface NotifyEventMutationObserverRemoved extends NotifyEvent {\n  type: 'observerRemoved'\n  mutation: Mutation<any, any, any, any>\n  observer: MutationObserver<any, any, any>\n}\n\ninterface NotifyEventMutationObserverOptionsUpdated extends NotifyEvent {\n  type: 'observerOptionsUpdated'\n  mutation?: Mutation<any, any, any, any>\n  observer: MutationObserver<any, any, any, any>\n}\n\ninterface NotifyEventMutationUpdated extends NotifyEvent {\n  type: 'updated'\n  mutation: Mutation<any, any, any, any>\n  action: Action<any, any, any, any>\n}\n\ntype MutationCacheNotifyEvent =\n  | NotifyEventMutationAdded\n  | NotifyEventMutationRemoved\n  | NotifyEventMutationObserverAdded\n  | NotifyEventMutationObserverRemoved\n  | NotifyEventMutationObserverOptionsUpdated\n  | NotifyEventMutationUpdated\n\ntype MutationCacheListener = (event: MutationCacheNotifyEvent) => void\n\n// CLASS\n\nexport class MutationCache extends Subscribable<MutationCacheListener> {\n  config: MutationCacheConfig\n\n  private mutations: Mutation<any, any, any, any>[]\n  private mutationId: number\n  private resuming: Promise<unknown> | undefined\n\n  constructor(config?: MutationCacheConfig) {\n    super()\n    this.config = config || {}\n    this.mutations = []\n    this.mutationId = 0\n  }\n\n  build<TData, TError, TVariables, TContext>(\n    client: QueryClient,\n    options: MutationOptions<TData, TError, TVariables, TContext>,\n    state?: MutationState<TData, TError, TVariables, TContext>,\n  ): Mutation<TData, TError, TVariables, TContext> {\n    const mutation = new Mutation({\n      mutationCache: this,\n      logger: client.getLogger(),\n      mutationId: ++this.mutationId,\n      options: client.defaultMutationOptions(options),\n      state,\n      defaultOptions: options.mutationKey\n        ? client.getMutationDefaults(options.mutationKey)\n        : undefined,\n    })\n\n    this.add(mutation)\n\n    return mutation\n  }\n\n  add(mutation: Mutation<any, any, any, any>): void {\n    this.mutations.push(mutation)\n    this.notify({ type: 'added', mutation })\n  }\n\n  remove(mutation: Mutation<any, any, any, any>): void {\n    this.mutations = this.mutations.filter((x) => x !== mutation)\n    this.notify({ type: 'removed', mutation })\n  }\n\n  clear(): void {\n    notifyManager.batch(() => {\n      this.mutations.forEach((mutation) => {\n        this.remove(mutation)\n      })\n    })\n  }\n\n  getAll(): Mutation[] {\n    return this.mutations\n  }\n\n  find<TData = unknown, TError = unknown, TVariables = any, TContext = unknown>(\n    filters: MutationFilters,\n  ): Mutation<TData, TError, TVariables, TContext> | undefined {\n    if (typeof filters.exact === 'undefined') {\n      filters.exact = true\n    }\n\n    return this.mutations.find((mutation) => matchMutation(filters, mutation))\n  }\n\n  findAll(filters: MutationFilters): Mutation[] {\n    return this.mutations.filter((mutation) => matchMutation(filters, mutation))\n  }\n\n  notify(event: MutationCacheNotifyEvent) {\n    notifyManager.batch(() => {\n      this.listeners.forEach(({ listener }) => {\n        listener(event)\n      })\n    })\n  }\n\n  resumePausedMutations(): Promise<unknown> {\n    this.resuming = (this.resuming ?? Promise.resolve())\n      .then(() => {\n        const pausedMutations = this.mutations.filter((x) => x.state.isPaused)\n        return notifyManager.batch(() =>\n          pausedMutations.reduce(\n            (promise, mutation) =>\n              promise.then(() => mutation.continue().catch(noop)),\n            Promise.resolve() as Promise<unknown>,\n          ),\n        )\n      })\n      .then(() => {\n        this.resuming = undefined\n      })\n\n    return this.resuming\n  }\n}\n", "import type { QueryBehavior } from './query'\n\nimport type {\n  InfiniteData,\n  QueryFunctionContext,\n  QueryOptions,\n  RefetchQueryFilters,\n} from './types'\n\nexport function infiniteQueryBehavior<\n  TQueryFnData,\n  TError,\n  TData,\n>(): QueryBehavior<TQueryFnData, TError, InfiniteData<TData>> {\n  return {\n    onFetch: (context) => {\n      context.fetchFn = () => {\n        const refetchPage: RefetchQueryFilters['refetchPage'] | undefined =\n          context.fetchOptions?.meta?.refetchPage\n        const fetchMore = context.fetchOptions?.meta?.fetchMore\n        const pageParam = fetchMore?.pageParam\n        const isFetchingNextPage = fetchMore?.direction === 'forward'\n        const isFetchingPreviousPage = fetchMore?.direction === 'backward'\n        const oldPages = context.state.data?.pages || []\n        const oldPageParams = context.state.data?.pageParams || []\n        let newPageParams = oldPageParams\n        let cancelled = false\n\n        const addSignalProperty = (object: unknown) => {\n          Object.defineProperty(object, 'signal', {\n            enumerable: true,\n            get: () => {\n              if (context.signal?.aborted) {\n                cancelled = true\n              } else {\n                context.signal?.addEventListener('abort', () => {\n                  cancelled = true\n                })\n              }\n              return context.signal\n            },\n          })\n        }\n\n        // Get query function\n        const queryFn =\n          context.options.queryFn ||\n          (() =>\n            Promise.reject(\n              `Missing queryFn for queryKey '${context.options.queryHash}'`,\n            ))\n\n        const buildNewPages = (\n          pages: unknown[],\n          param: unknown,\n          page: unknown,\n          previous?: boolean,\n        ) => {\n          newPageParams = previous\n            ? [param, ...newPageParams]\n            : [...newPageParams, param]\n          return previous ? [page, ...pages] : [...pages, page]\n        }\n\n        // Create function to fetch a page\n        const fetchPage = (\n          pages: unknown[],\n          manual?: boolean,\n          param?: unknown,\n          previous?: boolean,\n        ): Promise<unknown[]> => {\n          if (cancelled) {\n            return Promise.reject('Cancelled')\n          }\n\n          if (typeof param === 'undefined' && !manual && pages.length) {\n            return Promise.resolve(pages)\n          }\n\n          const queryFnContext: QueryFunctionContext = {\n            queryKey: context.queryKey,\n            pageParam: param,\n            meta: context.options.meta,\n          }\n\n          addSignalProperty(queryFnContext)\n\n          const queryFnResult = queryFn(queryFnContext)\n\n          const promise = Promise.resolve(queryFnResult).then((page) =>\n            buildNewPages(pages, param, page, previous),\n          )\n\n          return promise\n        }\n\n        let promise: Promise<unknown[]>\n\n        // Fetch first page?\n        if (!oldPages.length) {\n          promise = fetchPage([])\n        }\n\n        // Fetch next page?\n        else if (isFetchingNextPage) {\n          const manual = typeof pageParam !== 'undefined'\n          const param = manual\n            ? pageParam\n            : getNextPageParam(context.options, oldPages)\n          promise = fetchPage(oldPages, manual, param)\n        }\n\n        // Fetch previous page?\n        else if (isFetchingPreviousPage) {\n          const manual = typeof pageParam !== 'undefined'\n          const param = manual\n            ? pageParam\n            : getPreviousPageParam(context.options, oldPages)\n          promise = fetchPage(oldPages, manual, param, true)\n        }\n\n        // Refetch pages\n        else {\n          newPageParams = []\n\n          const manual = typeof context.options.getNextPageParam === 'undefined'\n\n          const shouldFetchFirstPage =\n            refetchPage && oldPages[0]\n              ? refetchPage(oldPages[0], 0, oldPages)\n              : true\n\n          // Fetch first page\n          promise = shouldFetchFirstPage\n            ? fetchPage([], manual, oldPageParams[0])\n            : Promise.resolve(buildNewPages([], oldPageParams[0], oldPages[0]))\n\n          // Fetch remaining pages\n          for (let i = 1; i < oldPages.length; i++) {\n            promise = promise.then((pages) => {\n              const shouldFetchNextPage =\n                refetchPage && oldPages[i]\n                  ? refetchPage(oldPages[i], i, oldPages)\n                  : true\n\n              if (shouldFetchNextPage) {\n                const param = manual\n                  ? oldPageParams[i]\n                  : getNextPageParam(context.options, pages)\n                return fetchPage(pages, manual, param)\n              }\n              return Promise.resolve(\n                buildNewPages(pages, oldPageParams[i], oldPages[i]),\n              )\n            })\n          }\n        }\n\n        const finalPromise = promise.then((pages) => ({\n          pages,\n          pageParams: newPageParams,\n        }))\n\n        return finalPromise\n      }\n    },\n  }\n}\n\nexport function getNextPageParam(\n  options: QueryOptions<any, any>,\n  pages: unknown[],\n): unknown | undefined {\n  return options.getNextPageParam?.(pages[pages.length - 1], pages)\n}\n\nexport function getPreviousPageParam(\n  options: QueryOptions<any, any>,\n  pages: unknown[],\n): unknown | undefined {\n  return options.getPreviousPageParam?.(pages[0], pages)\n}\n\n/**\n * Checks if there is a next page.\n * Returns `undefined` if it cannot be determined.\n */\nexport function hasNextPage(\n  options: QueryOptions<any, any, any, any>,\n  pages?: unknown,\n): boolean | undefined {\n  if (options.getNextPageParam && Array.isArray(pages)) {\n    const nextPageParam = getNextPageParam(options, pages)\n    return (\n      typeof nextPageParam !== 'undefined' &&\n      nextPageParam !== null &&\n      nextPageParam !== false\n    )\n  }\n  return\n}\n\n/**\n * Checks if there is a previous page.\n * Returns `undefined` if it cannot be determined.\n */\nexport function hasPreviousPage(\n  options: QueryOptions<any, any, any, any>,\n  pages?: unknown,\n): boolean | undefined {\n  if (options.getPreviousPageParam && Array.isArray(pages)) {\n    const previousPageParam = getPreviousPageParam(options, pages)\n    return (\n      typeof previousPageParam !== 'undefined' &&\n      previousPageParam !== null &&\n      previousPageParam !== false\n    )\n  }\n  return\n}\n", "import {\n  functionalUpdate,\n  hashQueryKey,\n  hashQueryKeyByOptions,\n  noop,\n  parseFilterArgs,\n  parseQueryArgs,\n  partialMatchKey,\n} from './utils'\nimport { QueryCache } from './queryCache'\nimport { MutationCache } from './mutationCache'\nimport { focusManager } from './focusManager'\nimport { onlineManager } from './onlineManager'\nimport { notifyManager } from './notifyManager'\nimport { infiniteQueryBehavior } from './infiniteQueryBehavior'\nimport { defaultLogger } from './logger'\nimport type { OmitKeyof } from '@tanstack/query-core'\nimport type { CancelOptions, DefaultedQueryObserverOptions } from './types'\nimport type { Logger } from './logger'\nimport type { QueryState } from './query'\nimport type {\n  DefaultOptions,\n  FetchInfiniteQueryOptions,\n  FetchQueryOptions,\n  InfiniteData,\n  InvalidateOptions,\n  InvalidateQueryFilters,\n  MutationKey,\n  MutationObserverOptions,\n  MutationOptions,\n  QueryClientConfig,\n  QueryFunction,\n  QueryKey,\n  QueryObserverOptions,\n  QueryOptions,\n  RefetchOptions,\n  RefetchQueryFilters,\n  ResetOptions,\n  ResetQueryFilters,\n  SetDataOptions,\n  WithRequired,\n} from './types'\nimport type { MutationFilters, QueryFilters, Updater } from './utils'\n\n// TYPES\n\ninterface QueryDefaults {\n  queryKey: QueryKey\n  defaultOptions: QueryOptions<any, any, any>\n}\n\ninterface MutationDefaults {\n  mutationKey: MutationKey\n  defaultOptions: MutationOptions<any, any, any, any>\n}\n\n// CLASS\n\nexport class QueryClient {\n  private queryCache: QueryCache\n  private mutationCache: MutationCache\n  private logger: Logger\n  private defaultOptions: DefaultOptions\n  private queryDefaults: QueryDefaults[]\n  private mutationDefaults: MutationDefaults[]\n  private mountCount: number\n  private unsubscribeFocus?: () => void\n  private unsubscribeOnline?: () => void\n\n  constructor(config: QueryClientConfig = {}) {\n    this.queryCache = config.queryCache || new QueryCache()\n    this.mutationCache = config.mutationCache || new MutationCache()\n    this.logger = config.logger || defaultLogger\n    this.defaultOptions = config.defaultOptions || {}\n    this.queryDefaults = []\n    this.mutationDefaults = []\n    this.mountCount = 0\n\n    if (process.env.NODE_ENV !== 'production' && config.logger) {\n      this.logger.error(\n        `Passing a custom logger has been deprecated and will be removed in the next major version.`,\n      )\n    }\n  }\n\n  mount(): void {\n    this.mountCount++\n    if (this.mountCount !== 1) return\n\n    this.unsubscribeFocus = focusManager.subscribe(() => {\n      if (focusManager.isFocused()) {\n        this.resumePausedMutations()\n        this.queryCache.onFocus()\n      }\n    })\n    this.unsubscribeOnline = onlineManager.subscribe(() => {\n      if (onlineManager.isOnline()) {\n        this.resumePausedMutations()\n        this.queryCache.onOnline()\n      }\n    })\n  }\n\n  unmount(): void {\n    this.mountCount--\n    if (this.mountCount !== 0) return\n\n    this.unsubscribeFocus?.()\n    this.unsubscribeFocus = undefined\n\n    this.unsubscribeOnline?.()\n    this.unsubscribeOnline = undefined\n  }\n\n  isFetching(filters?: QueryFilters): number\n  /**\n   * @deprecated This method should be used with only one object argument.\n   */\n  isFetching(\n    queryKey?: QueryKey,\n    filters?: OmitKeyof<QueryFilters, 'queryKey'>,\n  ): number\n  /**\n   * @deprecated This method should be used with only one object argument.\n   */\n  isFetching(arg1?: QueryKey | QueryFilters, arg2?: QueryFilters): number {\n    const [filters] = parseFilterArgs(arg1, arg2)\n    filters.fetchStatus = 'fetching'\n    return this.queryCache.findAll(filters).length\n  }\n\n  isMutating(filters?: MutationFilters): number {\n    return this.mutationCache.findAll({ ...filters, fetching: true }).length\n  }\n\n  getQueryData<TQueryFnData = unknown>(\n    queryKey: QueryKey,\n  ): TQueryFnData | undefined\n  /**\n   * @deprecated This method will accept only queryKey in the next major version.\n   */\n  getQueryData<TQueryFnData = unknown>(\n    queryKey: QueryKey,\n    filters: OmitKeyof<QueryFilters, 'queryKey'>,\n  ): TQueryFnData | undefined\n  /**\n   * @deprecated This method will accept only queryKey in the next major version.\n   */\n  getQueryData<TQueryFnData = unknown>(\n    queryKey: QueryKey,\n    filters?: OmitKeyof<QueryFilters, 'queryKey'>,\n  ): TQueryFnData | undefined {\n    return this.queryCache.find<TQueryFnData>(queryKey, filters)?.state.data\n  }\n\n  ensureQueryData<\n    TQueryFnData = unknown,\n    TError = unknown,\n    TData = TQueryFnData,\n    TQueryKey extends QueryKey = QueryKey,\n  >(\n    options: WithRequired<\n      FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n      'queryKey'\n    >,\n  ): Promise<TData>\n  /**\n   * @deprecated This method should be used with only one object argument.\n   */\n  ensureQueryData<\n    TQueryFnData = unknown,\n    TError = unknown,\n    TData = TQueryFnData,\n    TQueryKey extends QueryKey = QueryKey,\n  >(\n    queryKey: TQueryKey,\n    options?: OmitKeyof<\n      FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n      'queryKey'\n    >,\n  ): Promise<TData>\n  /**\n   * @deprecated This method should be used with only one object argument.\n   */\n  ensureQueryData<\n    TQueryFnData = unknown,\n    TError = unknown,\n    TData = TQueryFnData,\n    TQueryKey extends QueryKey = QueryKey,\n  >(\n    queryKey: TQueryKey,\n    queryFn: QueryFunction<TQueryFnData, TQueryKey>,\n    options?: OmitKeyof<\n      FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n      'queryKey' | 'queryFn'\n    >,\n  ): Promise<TData>\n  /**\n   * @deprecated This method should be used with only one object argument.\n   */\n  ensureQueryData<\n    TQueryFnData,\n    TError,\n    TData = TQueryFnData,\n    TQueryKey extends QueryKey = QueryKey,\n  >(\n    arg1:\n      | TQueryKey\n      | WithRequired<\n          FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n          'queryKey'\n        >,\n    arg2?:\n      | QueryFunction<TQueryFnData, TQueryKey>\n      | FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n    arg3?: FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n  ): Promise<TData> {\n    const parsedOptions = parseQueryArgs(arg1, arg2, arg3)\n    const cachedData = this.getQueryData<TData>(parsedOptions.queryKey!)\n\n    return cachedData\n      ? Promise.resolve(cachedData)\n      : this.fetchQuery(parsedOptions)\n  }\n\n  getQueriesData<TQueryFnData = unknown>(\n    filters: QueryFilters,\n  ): [QueryKey, TQueryFnData | undefined][]\n  /**\n   * @deprecated This method should be used with only one object argument.\n   */\n  getQueriesData<TQueryFnData = unknown>(\n    queryKey: QueryKey,\n  ): [QueryKey, TQueryFnData | undefined][]\n  /**\n   * @deprecated This method should be used with only one object argument.\n   */\n  getQueriesData<TQueryFnData = unknown>(\n    queryKeyOrFilters: QueryKey | QueryFilters,\n  ): [QueryKey, TQueryFnData | undefined][] {\n    return this.getQueryCache()\n      .findAll(queryKeyOrFilters)\n      .map(({ queryKey, state }) => {\n        const data = state.data as TQueryFnData | undefined\n        return [queryKey, data]\n      })\n  }\n\n  setQueryData<TQueryFnData>(\n    queryKey: QueryKey,\n    updater: Updater<TQueryFnData | undefined, TQueryFnData | undefined>,\n    options?: SetDataOptions,\n  ): TQueryFnData | undefined {\n    const query = this.queryCache.find<TQueryFnData>(queryKey)\n    const prevData = query?.state.data\n    const data = functionalUpdate(updater, prevData)\n\n    if (typeof data === 'undefined') {\n      return undefined\n    }\n\n    const parsedOptions = parseQueryArgs(queryKey)\n    const defaultedOptions = this.defaultQueryOptions(parsedOptions)\n    return this.queryCache\n      .build(this, defaultedOptions)\n      .setData(data, { ...options, manual: true })\n  }\n\n  setQueriesData<TQueryFnData>(\n    filters: QueryFilters,\n    updater: Updater<TQueryFnData | undefined, TQueryFnData | undefined>,\n    options?: SetDataOptions,\n  ): [QueryKey, TQueryFnData | undefined][]\n  /**\n   * @deprecated This method should be used with only one object argument.\n   */\n  setQueriesData<TQueryFnData>(\n    queryKey: QueryKey,\n    updater: Updater<TQueryFnData | undefined, TQueryFnData | undefined>,\n    options?: SetDataOptions,\n  ): [QueryKey, TQueryFnData | undefined][]\n  /**\n   * @deprecated This method should be used with only one object argument.\n   */\n  setQueriesData<TQueryFnData>(\n    queryKeyOrFilters: QueryKey | QueryFilters,\n    updater: Updater<TQueryFnData | undefined, TQueryFnData | undefined>,\n    options?: SetDataOptions,\n  ): [QueryKey, TQueryFnData | undefined][] {\n    return notifyManager.batch(() =>\n      this.getQueryCache()\n        .findAll(queryKeyOrFilters)\n        .map(({ queryKey }) => [\n          queryKey,\n          this.setQueryData<TQueryFnData>(queryKey, updater, options),\n        ]),\n    )\n  }\n\n  getQueryState<TQueryFnData = unknown, TError = undefined>(\n    queryKey: QueryKey,\n    /**\n     * @deprecated This filters will be removed in the next major version.\n     */\n    filters?: OmitKeyof<QueryFilters, 'queryKey'>,\n  ): QueryState<TQueryFnData, TError> | undefined {\n    return this.queryCache.find<TQueryFnData, TError>(queryKey, filters)?.state\n  }\n\n  removeQueries(filters?: QueryFilters): void\n  /**\n   * @deprecated This method should be used with only one object argument.\n   */\n  removeQueries(\n    queryKey?: QueryKey,\n    filters?: OmitKeyof<QueryFilters, 'queryKey'>,\n  ): void\n  /**\n   * @deprecated This method should be used with only one object argument.\n   */\n  removeQueries(\n    arg1?: QueryKey | QueryFilters,\n    arg2?: OmitKeyof<QueryFilters, 'queryKey'>,\n  ): void {\n    const [filters] = parseFilterArgs(arg1, arg2)\n    const queryCache = this.queryCache\n    notifyManager.batch(() => {\n      queryCache.findAll(filters).forEach((query) => {\n        queryCache.remove(query)\n      })\n    })\n  }\n\n  resetQueries<TPageData = unknown>(\n    filters?: ResetQueryFilters<TPageData>,\n    options?: ResetOptions,\n  ): Promise<void>\n  /**\n   * @deprecated This method should be used with only one object argument.\n   */\n  resetQueries<TPageData = unknown>(\n    queryKey?: QueryKey,\n    filters?: OmitKeyof<ResetQueryFilters<TPageData>, 'queryKey'>,\n    options?: ResetOptions,\n  ): Promise<void>\n  /**\n   * @deprecated This method should be used with only one object argument.\n   */\n  resetQueries(\n    arg1?: QueryKey | ResetQueryFilters,\n    arg2?: OmitKeyof<ResetQueryFilters, 'queryKey'> | ResetOptions,\n    arg3?: ResetOptions,\n  ): Promise<void> {\n    const [filters, options] = parseFilterArgs(arg1, arg2, arg3)\n    const queryCache = this.queryCache\n\n    const refetchFilters: RefetchQueryFilters = {\n      type: 'active',\n      ...filters,\n    }\n\n    return notifyManager.batch(() => {\n      queryCache.findAll(filters).forEach((query) => {\n        query.reset()\n      })\n      return this.refetchQueries(refetchFilters, options)\n    })\n  }\n\n  cancelQueries(filters?: QueryFilters, options?: CancelOptions): Promise<void>\n  /**\n   * @deprecated This method should be used with only one object argument.\n   */\n  cancelQueries(\n    queryKey?: QueryKey,\n    filters?: OmitKeyof<QueryFilters, 'queryKey'>,\n    options?: CancelOptions,\n  ): Promise<void>\n  /**\n   * @deprecated This method should be used with only one object argument.\n   */\n  cancelQueries(\n    arg1?: QueryKey | QueryFilters,\n    arg2?: OmitKeyof<QueryFilters, 'queryKey'> | CancelOptions,\n    arg3?: CancelOptions,\n  ): Promise<void> {\n    const [filters, cancelOptions = {}] = parseFilterArgs(arg1, arg2, arg3)\n\n    if (typeof cancelOptions.revert === 'undefined') {\n      cancelOptions.revert = true\n    }\n\n    const promises = notifyManager.batch(() =>\n      this.queryCache\n        .findAll(filters)\n        .map((query) => query.cancel(cancelOptions)),\n    )\n\n    return Promise.all(promises).then(noop).catch(noop)\n  }\n\n  invalidateQueries<TPageData = unknown>(\n    filters?: InvalidateQueryFilters<TPageData>,\n    options?: InvalidateOptions,\n  ): Promise<void>\n  /**\n   * @deprecated This method should be used with only one object argument.\n   */\n  invalidateQueries<TPageData = unknown>(\n    queryKey?: QueryKey,\n    filters?: OmitKeyof<InvalidateQueryFilters<TPageData>, 'queryKey'>,\n    options?: InvalidateOptions,\n  ): Promise<void>\n  /**\n   * @deprecated This method should be used with only one object argument.\n   */\n  invalidateQueries(\n    arg1?: QueryKey | InvalidateQueryFilters,\n    arg2?: OmitKeyof<InvalidateQueryFilters, 'queryKey'> | InvalidateOptions,\n    arg3?: InvalidateOptions,\n  ): Promise<void> {\n    const [filters, options] = parseFilterArgs(arg1, arg2, arg3)\n\n    return notifyManager.batch(() => {\n      this.queryCache.findAll(filters).forEach((query) => {\n        query.invalidate()\n      })\n\n      if (filters.refetchType === 'none') {\n        return Promise.resolve()\n      }\n      const refetchFilters: RefetchQueryFilters = {\n        ...filters,\n        type: filters.refetchType ?? filters.type ?? 'active',\n      }\n      return this.refetchQueries(refetchFilters, options)\n    })\n  }\n\n  refetchQueries<TPageData = unknown>(\n    filters?: RefetchQueryFilters<TPageData>,\n    options?: RefetchOptions,\n  ): Promise<void>\n  /**\n   * @deprecated This method should be used with only one object argument.\n   */\n  refetchQueries<TPageData = unknown>(\n    queryKey?: QueryKey,\n    filters?: OmitKeyof<RefetchQueryFilters<TPageData>, 'queryKey'>,\n    options?: RefetchOptions,\n  ): Promise<void>\n  /**\n   * @deprecated This method should be used with only one object argument.\n   */\n  refetchQueries(\n    arg1?: QueryKey | RefetchQueryFilters,\n    arg2?: OmitKeyof<RefetchQueryFilters, 'queryKey'> | RefetchOptions,\n    arg3?: RefetchOptions,\n  ): Promise<void> {\n    const [filters, options] = parseFilterArgs(arg1, arg2, arg3)\n\n    const promises = notifyManager.batch(() =>\n      this.queryCache\n        .findAll(filters)\n        .filter((query) => !query.isDisabled())\n        .map((query) =>\n          query.fetch(undefined, {\n            ...options,\n            cancelRefetch: options?.cancelRefetch ?? true,\n            meta: { refetchPage: filters.refetchPage },\n          }),\n        ),\n    )\n\n    let promise = Promise.all(promises).then(noop)\n\n    if (!options?.throwOnError) {\n      promise = promise.catch(noop)\n    }\n\n    return promise\n  }\n\n  fetchQuery<\n    TQueryFnData = unknown,\n    TError = unknown,\n    TData = TQueryFnData,\n    TQueryKey extends QueryKey = QueryKey,\n  >(\n    options: FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n  ): Promise<TData>\n  /**\n   * @deprecated This method should be used with only one object argument.\n   */\n  fetchQuery<\n    TQueryFnData = unknown,\n    TError = unknown,\n    TData = TQueryFnData,\n    TQueryKey extends QueryKey = QueryKey,\n  >(\n    queryKey: TQueryKey,\n    options?: OmitKeyof<\n      FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n      'queryKey'\n    >,\n  ): Promise<TData>\n  /**\n   * @deprecated This method should be used with only one object argument.\n   */\n  fetchQuery<\n    TQueryFnData = unknown,\n    TError = unknown,\n    TData = TQueryFnData,\n    TQueryKey extends QueryKey = QueryKey,\n  >(\n    queryKey: TQueryKey,\n    queryFn: QueryFunction<TQueryFnData, TQueryKey>,\n    options?: OmitKeyof<\n      FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n      'queryKey' | 'queryFn'\n    >,\n  ): Promise<TData>\n  /**\n   * @deprecated This method should be used with only one object argument.\n   */\n  fetchQuery<\n    TQueryFnData,\n    TError,\n    TData = TQueryFnData,\n    TQueryKey extends QueryKey = QueryKey,\n  >(\n    arg1: TQueryKey | FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n    arg2?:\n      | QueryFunction<TQueryFnData, TQueryKey>\n      | OmitKeyof<\n          FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n          'queryKey'\n        >,\n    arg3?: OmitKeyof<\n      FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n      'queryKey' | 'queryFn'\n    >,\n  ): Promise<TData> {\n    const parsedOptions = parseQueryArgs(arg1, arg2, arg3)\n    const defaultedOptions = this.defaultQueryOptions(parsedOptions)\n\n    // https://github.com/tannerlinsley/react-query/issues/652\n    if (typeof defaultedOptions.retry === 'undefined') {\n      defaultedOptions.retry = false\n    }\n\n    const query = this.queryCache.build(this, defaultedOptions)\n\n    return query.isStaleByTime(defaultedOptions.staleTime)\n      ? query.fetch(defaultedOptions)\n      : Promise.resolve(query.state.data as TData)\n  }\n\n  prefetchQuery<\n    TQueryFnData = unknown,\n    TError = unknown,\n    TData = TQueryFnData,\n    TQueryKey extends QueryKey = QueryKey,\n  >(\n    options: FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n  ): Promise<void>\n  /**\n   * @deprecated This method should be used with only one object argument.\n   */\n  prefetchQuery<\n    TQueryFnData = unknown,\n    TError = unknown,\n    TData = TQueryFnData,\n    TQueryKey extends QueryKey = QueryKey,\n  >(\n    queryKey: TQueryKey,\n    options?: OmitKeyof<\n      FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n      'queryKey'\n    >,\n  ): Promise<void>\n  /**\n   * @deprecated This method should be used with only one object argument.\n   */\n  prefetchQuery<\n    TQueryFnData = unknown,\n    TError = unknown,\n    TData = TQueryFnData,\n    TQueryKey extends QueryKey = QueryKey,\n  >(\n    queryKey: TQueryKey,\n    queryFn: QueryFunction<TQueryFnData, TQueryKey>,\n    options?: OmitKeyof<\n      FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n      'queryKey' | 'queryFn'\n    >,\n  ): Promise<void>\n  /**\n   * @deprecated This method should be used with only one object argument.\n   */\n  prefetchQuery<\n    TQueryFnData = unknown,\n    TError = unknown,\n    TData = TQueryFnData,\n    TQueryKey extends QueryKey = QueryKey,\n  >(\n    arg1: TQueryKey | FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n    arg2?:\n      | QueryFunction<TQueryFnData, TQueryKey>\n      | OmitKeyof<\n          FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n          'queryKey'\n        >,\n    arg3?: OmitKeyof<\n      FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n      'queryKey' | 'queryFn'\n    >,\n  ): Promise<void> {\n    return this.fetchQuery(arg1 as any, arg2 as any, arg3)\n      .then(noop)\n      .catch(noop)\n  }\n\n  fetchInfiniteQuery<\n    TQueryFnData = unknown,\n    TError = unknown,\n    TData = TQueryFnData,\n    TQueryKey extends QueryKey = QueryKey,\n  >(\n    options: FetchInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n  ): Promise<InfiniteData<TData>>\n  /**\n   * @deprecated This method should be used with only one object argument.\n   */\n  fetchInfiniteQuery<\n    TQueryFnData = unknown,\n    TError = unknown,\n    TData = TQueryFnData,\n    TQueryKey extends QueryKey = QueryKey,\n  >(\n    queryKey: TQueryKey,\n    options?: OmitKeyof<\n      FetchInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n      'queryKey'\n    >,\n  ): Promise<InfiniteData<TData>>\n  /**\n   * @deprecated This method should be used with only one object argument.\n   */\n  fetchInfiniteQuery<\n    TQueryFnData = unknown,\n    TError = unknown,\n    TData = TQueryFnData,\n    TQueryKey extends QueryKey = QueryKey,\n  >(\n    queryKey: TQueryKey,\n    queryFn: QueryFunction<TQueryFnData, TQueryKey>,\n    options?: OmitKeyof<\n      FetchInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n      'queryKey' | 'queryFn'\n    >,\n  ): Promise<InfiniteData<TData>>\n  /**\n   * @deprecated This method should be used with only one object argument.\n   */\n  fetchInfiniteQuery<\n    TQueryFnData,\n    TError,\n    TData = TQueryFnData,\n    TQueryKey extends QueryKey = QueryKey,\n  >(\n    arg1:\n      | TQueryKey\n      | FetchInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n    arg2?:\n      | QueryFunction<TQueryFnData, TQueryKey>\n      | OmitKeyof<\n          FetchInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n          'queryKey'\n        >,\n    arg3?: OmitKeyof<\n      FetchInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n      'queryKey' | 'queryFn'\n    >,\n  ): Promise<InfiniteData<TData>> {\n    const parsedOptions = parseQueryArgs(arg1, arg2, arg3)\n    parsedOptions.behavior = infiniteQueryBehavior<\n      TQueryFnData,\n      TError,\n      TData\n    >()\n    return this.fetchQuery(parsedOptions)\n  }\n\n  prefetchInfiniteQuery<\n    TQueryFnData = unknown,\n    TError = unknown,\n    TData = TQueryFnData,\n    TQueryKey extends QueryKey = QueryKey,\n  >(\n    options: FetchInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n  ): Promise<void>\n  /**\n   * @deprecated This method should be used with only one object argument.\n   */\n  prefetchInfiniteQuery<\n    TQueryFnData = unknown,\n    TError = unknown,\n    TData = TQueryFnData,\n    TQueryKey extends QueryKey = QueryKey,\n  >(\n    queryKey: TQueryKey,\n    options?: OmitKeyof<\n      FetchInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n      'queryKey'\n    >,\n  ): Promise<void>\n  /**\n   * @deprecated This method should be used with only one object argument.\n   */\n  prefetchInfiniteQuery<\n    TQueryFnData = unknown,\n    TError = unknown,\n    TData = TQueryFnData,\n    TQueryKey extends QueryKey = QueryKey,\n  >(\n    queryKey: TQueryKey,\n    queryFn: QueryFunction<TQueryFnData, TQueryKey>,\n    options?: OmitKeyof<\n      FetchInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n      'queryKey' | 'queryFn'\n    >,\n  ): Promise<void>\n  /**\n   * @deprecated This method should be used with only one object argument.\n   */\n  prefetchInfiniteQuery<\n    TQueryFnData,\n    TError,\n    TData = TQueryFnData,\n    TQueryKey extends QueryKey = QueryKey,\n  >(\n    arg1:\n      | TQueryKey\n      | FetchInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n    arg2?:\n      | QueryFunction<TQueryFnData, TQueryKey>\n      | OmitKeyof<\n          FetchInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n          'queryKey'\n        >,\n    arg3?: OmitKeyof<\n      FetchInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n      'queryKey' | 'queryFn'\n    >,\n  ): Promise<void> {\n    return this.fetchInfiniteQuery(arg1 as any, arg2 as any, arg3)\n      .then(noop)\n      .catch(noop)\n  }\n\n  resumePausedMutations(): Promise<unknown> {\n    return this.mutationCache.resumePausedMutations()\n  }\n\n  getQueryCache(): QueryCache {\n    return this.queryCache\n  }\n\n  getMutationCache(): MutationCache {\n    return this.mutationCache\n  }\n\n  getLogger(): Logger {\n    return this.logger\n  }\n\n  getDefaultOptions(): DefaultOptions {\n    return this.defaultOptions\n  }\n\n  setDefaultOptions(options: DefaultOptions): void {\n    this.defaultOptions = options\n  }\n\n  setQueryDefaults(\n    queryKey: QueryKey,\n    options: QueryObserverOptions<unknown, any, any, any>,\n  ): void {\n    const result = this.queryDefaults.find(\n      (x) => hashQueryKey(queryKey) === hashQueryKey(x.queryKey),\n    )\n    if (result) {\n      result.defaultOptions = options\n    } else {\n      this.queryDefaults.push({ queryKey, defaultOptions: options })\n    }\n  }\n\n  getQueryDefaults(\n    queryKey?: QueryKey,\n  ): QueryObserverOptions<any, any, any, any, any> | undefined {\n    if (!queryKey) {\n      return undefined\n    }\n\n    // Get the first matching defaults\n    const firstMatchingDefaults = this.queryDefaults.find((x) =>\n      partialMatchKey(queryKey, x.queryKey),\n    )\n\n    // Additional checks and error in dev mode\n    if (process.env.NODE_ENV !== 'production') {\n      // Retrieve all matching defaults for the given key\n      const matchingDefaults = this.queryDefaults.filter((x) =>\n        partialMatchKey(queryKey, x.queryKey),\n      )\n      // It is ok not having defaults, but it is error prone to have more than 1 default for a given key\n      if (matchingDefaults.length > 1) {\n        this.logger.error(\n          `[QueryClient] Several query defaults match with key '${JSON.stringify(\n            queryKey,\n          )}'. The first matching query defaults are used. Please check how query defaults are registered. Order does matter here. cf. https://react-query.tanstack.com/reference/QueryClient#queryclientsetquerydefaults.`,\n        )\n      }\n    }\n\n    return firstMatchingDefaults?.defaultOptions\n  }\n\n  setMutationDefaults(\n    mutationKey: MutationKey,\n    options: MutationObserverOptions<any, any, any, any>,\n  ): void {\n    const result = this.mutationDefaults.find(\n      (x) => hashQueryKey(mutationKey) === hashQueryKey(x.mutationKey),\n    )\n    if (result) {\n      result.defaultOptions = options\n    } else {\n      this.mutationDefaults.push({ mutationKey, defaultOptions: options })\n    }\n  }\n\n  getMutationDefaults(\n    mutationKey?: MutationKey,\n  ): MutationObserverOptions<any, any, any, any> | undefined {\n    if (!mutationKey) {\n      return undefined\n    }\n\n    // Get the first matching defaults\n    const firstMatchingDefaults = this.mutationDefaults.find((x) =>\n      partialMatchKey(mutationKey, x.mutationKey),\n    )\n\n    // Additional checks and error in dev mode\n    if (process.env.NODE_ENV !== 'production') {\n      // Retrieve all matching defaults for the given key\n      const matchingDefaults = this.mutationDefaults.filter((x) =>\n        partialMatchKey(mutationKey, x.mutationKey),\n      )\n      // It is ok not having defaults, but it is error prone to have more than 1 default for a given key\n      if (matchingDefaults.length > 1) {\n        this.logger.error(\n          `[QueryClient] Several mutation defaults match with key '${JSON.stringify(\n            mutationKey,\n          )}'. The first matching mutation defaults are used. Please check how mutation defaults are registered. Order does matter here. cf. https://react-query.tanstack.com/reference/QueryClient#queryclientsetmutationdefaults.`,\n        )\n      }\n    }\n\n    return firstMatchingDefaults?.defaultOptions\n  }\n\n  defaultQueryOptions<\n    TQueryFnData,\n    TError,\n    TData,\n    TQueryData,\n    TQueryKey extends QueryKey,\n  >(\n    options?:\n      | QueryObserverOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>\n      | DefaultedQueryObserverOptions<\n          TQueryFnData,\n          TError,\n          TData,\n          TQueryData,\n          TQueryKey\n        >,\n  ): DefaultedQueryObserverOptions<\n    TQueryFnData,\n    TError,\n    TData,\n    TQueryData,\n    TQueryKey\n  > {\n    if (options?._defaulted) {\n      return options as DefaultedQueryObserverOptions<\n        TQueryFnData,\n        TError,\n        TData,\n        TQueryData,\n        TQueryKey\n      >\n    }\n\n    const defaultedOptions = {\n      ...this.defaultOptions.queries,\n      ...this.getQueryDefaults(options?.queryKey),\n      ...options,\n      _defaulted: true,\n    }\n\n    if (!defaultedOptions.queryHash && defaultedOptions.queryKey) {\n      defaultedOptions.queryHash = hashQueryKeyByOptions(\n        defaultedOptions.queryKey,\n        defaultedOptions,\n      )\n    }\n\n    // dependent default values\n    if (typeof defaultedOptions.refetchOnReconnect === 'undefined') {\n      defaultedOptions.refetchOnReconnect =\n        defaultedOptions.networkMode !== 'always'\n    }\n    if (typeof defaultedOptions.useErrorBoundary === 'undefined') {\n      defaultedOptions.useErrorBoundary = !!defaultedOptions.suspense\n    }\n\n    return defaultedOptions as DefaultedQueryObserverOptions<\n      TQueryFnData,\n      TError,\n      TData,\n      TQueryData,\n      TQueryKey\n    >\n  }\n\n  defaultMutationOptions<T extends MutationOptions<any, any, any, any>>(\n    options?: T,\n  ): T {\n    if (options?._defaulted) {\n      return options\n    }\n    return {\n      ...this.defaultOptions.mutations,\n      ...this.getMutationDefaults(options?.mutationKey),\n      ...options,\n      _defaulted: true,\n    } as T\n  }\n\n  clear(): void {\n    this.queryCache.clear()\n    this.mutationCache.clear()\n  }\n}\n", "import {\n  isServer,\n  isValidTimeout,\n  noop,\n  replaceData,\n  shallowEqualObjects,\n  timeUntilStale,\n} from './utils'\nimport { notifyManager } from './notifyManager'\nimport { focusManager } from './focusManager'\nimport { Subscribable } from './subscribable'\nimport { canFetch, isCancelledError } from './retryer'\nimport type {\n  PlaceholderDataFunction,\n  QueryKey,\n  QueryObserverBaseResult,\n  QueryObserverOptions,\n  QueryObserverResult,\n  QueryOptions,\n  RefetchOptions,\n} from './types'\nimport type { Action, FetchOptions, Query, QueryState } from './query'\nimport type { QueryClient } from './queryClient'\nimport type { DefaultedQueryObserverOptions, RefetchPageFilters } from './types'\n\ntype QueryObserverListener<TData, TError> = (\n  result: QueryObserverResult<TData, TError>,\n) => void\n\nexport interface NotifyOptions {\n  cache?: boolean\n  listeners?: boolean\n  onError?: boolean\n  onSuccess?: boolean\n}\n\nexport interface ObserverFetchOptions extends FetchOptions {\n  throwOnError?: boolean\n}\n\nexport class QueryObserver<\n  TQueryFnData = unknown,\n  TError = unknown,\n  TData = TQueryFnData,\n  TQueryData = TQueryFnData,\n  TQueryKey extends QueryKey = QueryKey,\n> extends Subscribable<QueryObserverListener<TData, TError>> {\n  options: QueryObserverOptions<\n    TQueryFnData,\n    TError,\n    TData,\n    TQueryData,\n    TQueryKey\n  >\n\n  private client: QueryClient\n  private currentQuery!: Query<TQueryFnData, TError, TQueryData, TQueryKey>\n  private currentQueryInitialState!: QueryState<TQueryData, TError>\n  private currentResult!: QueryObserverResult<TData, TError>\n  private currentResultState?: QueryState<TQueryData, TError>\n  private currentResultOptions?: QueryObserverOptions<\n    TQueryFnData,\n    TError,\n    TData,\n    TQueryData,\n    TQueryKey\n  >\n  private previousQueryResult?: QueryObserverResult<TData, TError>\n  private selectError: TError | null\n  private selectFn?: (data: TQueryData) => TData\n  private selectResult?: TData\n  private staleTimeoutId?: ReturnType<typeof setTimeout>\n  private refetchIntervalId?: ReturnType<typeof setInterval>\n  private currentRefetchInterval?: number | false\n  private trackedProps!: Set<keyof QueryObserverResult>\n\n  constructor(\n    client: QueryClient,\n    options: QueryObserverOptions<\n      TQueryFnData,\n      TError,\n      TData,\n      TQueryData,\n      TQueryKey\n    >,\n  ) {\n    super()\n\n    this.client = client\n    this.options = options\n    this.trackedProps = new Set()\n    this.selectError = null\n    this.bindMethods()\n    this.setOptions(options)\n  }\n\n  protected bindMethods(): void {\n    this.remove = this.remove.bind(this)\n    this.refetch = this.refetch.bind(this)\n  }\n\n  protected onSubscribe(): void {\n    if (this.listeners.size === 1) {\n      this.currentQuery.addObserver(this)\n\n      if (shouldFetchOnMount(this.currentQuery, this.options)) {\n        this.executeFetch()\n      }\n\n      this.updateTimers()\n    }\n  }\n\n  protected onUnsubscribe(): void {\n    if (!this.hasListeners()) {\n      this.destroy()\n    }\n  }\n\n  shouldFetchOnReconnect(): boolean {\n    return shouldFetchOn(\n      this.currentQuery,\n      this.options,\n      this.options.refetchOnReconnect,\n    )\n  }\n\n  shouldFetchOnWindowFocus(): boolean {\n    return shouldFetchOn(\n      this.currentQuery,\n      this.options,\n      this.options.refetchOnWindowFocus,\n    )\n  }\n\n  destroy(): void {\n    this.listeners = new Set()\n    this.clearStaleTimeout()\n    this.clearRefetchInterval()\n    this.currentQuery.removeObserver(this)\n  }\n\n  setOptions(\n    options?: QueryObserverOptions<\n      TQueryFnData,\n      TError,\n      TData,\n      TQueryData,\n      TQueryKey\n    >,\n    notifyOptions?: NotifyOptions,\n  ): void {\n    const prevOptions = this.options\n    const prevQuery = this.currentQuery\n\n    this.options = this.client.defaultQueryOptions(options)\n\n    if (\n      process.env.NODE_ENV !== 'production' &&\n      typeof options?.isDataEqual !== 'undefined'\n    ) {\n      this.client\n        .getLogger()\n        .error(\n          `The isDataEqual option has been deprecated and will be removed in the next major version. You can achieve the same functionality by passing a function as the structuralSharing option`,\n        )\n    }\n\n    if (!shallowEqualObjects(prevOptions, this.options)) {\n      this.client.getQueryCache().notify({\n        type: 'observerOptionsUpdated',\n        query: this.currentQuery,\n        observer: this,\n      })\n    }\n\n    if (\n      typeof this.options.enabled !== 'undefined' &&\n      typeof this.options.enabled !== 'boolean'\n    ) {\n      throw new Error('Expected enabled to be a boolean')\n    }\n\n    // Keep previous query key if the user does not supply one\n    if (!this.options.queryKey) {\n      this.options.queryKey = prevOptions.queryKey\n    }\n\n    this.updateQuery()\n\n    const mounted = this.hasListeners()\n\n    // Fetch if there are subscribers\n    if (\n      mounted &&\n      shouldFetchOptionally(\n        this.currentQuery,\n        prevQuery,\n        this.options,\n        prevOptions,\n      )\n    ) {\n      this.executeFetch()\n    }\n\n    // Update result\n    this.updateResult(notifyOptions)\n\n    // Update stale interval if needed\n    if (\n      mounted &&\n      (this.currentQuery !== prevQuery ||\n        this.options.enabled !== prevOptions.enabled ||\n        this.options.staleTime !== prevOptions.staleTime)\n    ) {\n      this.updateStaleTimeout()\n    }\n\n    const nextRefetchInterval = this.computeRefetchInterval()\n\n    // Update refetch interval if needed\n    if (\n      mounted &&\n      (this.currentQuery !== prevQuery ||\n        this.options.enabled !== prevOptions.enabled ||\n        nextRefetchInterval !== this.currentRefetchInterval)\n    ) {\n      this.updateRefetchInterval(nextRefetchInterval)\n    }\n  }\n\n  getOptimisticResult(\n    options: DefaultedQueryObserverOptions<\n      TQueryFnData,\n      TError,\n      TData,\n      TQueryData,\n      TQueryKey\n    >,\n  ): QueryObserverResult<TData, TError> {\n    const query = this.client.getQueryCache().build(this.client, options)\n\n    const result = this.createResult(query, options)\n\n    if (shouldAssignObserverCurrentProperties(this, result, options)) {\n      // this assigns the optimistic result to the current Observer\n      // because if the query function changes, useQuery will be performing\n      // an effect where it would fetch again.\n      // When the fetch finishes, we perform a deep data cloning in order\n      // to reuse objects references. This deep data clone is performed against\n      // the `observer.currentResult.data` property\n      // When QueryKey changes, we refresh the query and get new `optimistic`\n      // result, while we leave the `observer.currentResult`, so when new data\n      // arrives, it finds the old `observer.currentResult` which is related\n      // to the old QueryKey. Which means that currentResult and selectData are\n      // out of sync already.\n      // To solve this, we move the cursor of the currentResult everytime\n      // an observer reads an optimistic value.\n\n      // When keeping the previous data, the result doesn't change until new\n      // data arrives.\n      this.currentResult = result\n      this.currentResultOptions = this.options\n      this.currentResultState = this.currentQuery.state\n    }\n    return result\n  }\n\n  getCurrentResult(): QueryObserverResult<TData, TError> {\n    return this.currentResult\n  }\n\n  trackResult(\n    result: QueryObserverResult<TData, TError>,\n  ): QueryObserverResult<TData, TError> {\n    const trackedResult = {} as QueryObserverResult<TData, TError>\n\n    Object.keys(result).forEach((key) => {\n      Object.defineProperty(trackedResult, key, {\n        configurable: false,\n        enumerable: true,\n        get: () => {\n          this.trackedProps.add(key as keyof QueryObserverResult)\n          return result[key as keyof QueryObserverResult]\n        },\n      })\n    })\n\n    return trackedResult\n  }\n\n  getCurrentQuery(): Query<TQueryFnData, TError, TQueryData, TQueryKey> {\n    return this.currentQuery\n  }\n\n  remove(): void {\n    this.client.getQueryCache().remove(this.currentQuery)\n  }\n\n  refetch<TPageData>({\n    refetchPage,\n    ...options\n  }: RefetchOptions & RefetchPageFilters<TPageData> = {}): Promise<\n    QueryObserverResult<TData, TError>\n  > {\n    return this.fetch({\n      ...options,\n      meta: { refetchPage },\n    })\n  }\n\n  fetchOptimistic(\n    options: QueryObserverOptions<\n      TQueryFnData,\n      TError,\n      TData,\n      TQueryData,\n      TQueryKey\n    >,\n  ): Promise<QueryObserverResult<TData, TError>> {\n    const defaultedOptions = this.client.defaultQueryOptions(options)\n\n    const query = this.client\n      .getQueryCache()\n      .build(this.client, defaultedOptions)\n    query.isFetchingOptimistic = true\n\n    return query.fetch().then(() => this.createResult(query, defaultedOptions))\n  }\n\n  protected fetch(\n    fetchOptions: ObserverFetchOptions,\n  ): Promise<QueryObserverResult<TData, TError>> {\n    return this.executeFetch({\n      ...fetchOptions,\n      cancelRefetch: fetchOptions.cancelRefetch ?? true,\n    }).then(() => {\n      this.updateResult()\n      return this.currentResult\n    })\n  }\n\n  private executeFetch(\n    fetchOptions?: ObserverFetchOptions,\n  ): Promise<TQueryData | undefined> {\n    // Make sure we reference the latest query as the current one might have been removed\n    this.updateQuery()\n\n    // Fetch\n    let promise: Promise<TQueryData | undefined> = this.currentQuery.fetch(\n      this.options as QueryOptions<TQueryFnData, TError, TQueryData, TQueryKey>,\n      fetchOptions,\n    )\n\n    if (!fetchOptions?.throwOnError) {\n      promise = promise.catch(noop)\n    }\n\n    return promise\n  }\n\n  private updateStaleTimeout(): void {\n    this.clearStaleTimeout()\n\n    if (\n      isServer ||\n      this.currentResult.isStale ||\n      !isValidTimeout(this.options.staleTime)\n    ) {\n      return\n    }\n\n    const time = timeUntilStale(\n      this.currentResult.dataUpdatedAt,\n      this.options.staleTime,\n    )\n\n    // The timeout is sometimes triggered 1 ms before the stale time expiration.\n    // To mitigate this issue we always add 1 ms to the timeout.\n    const timeout = time + 1\n\n    this.staleTimeoutId = setTimeout(() => {\n      if (!this.currentResult.isStale) {\n        this.updateResult()\n      }\n    }, timeout)\n  }\n\n  private computeRefetchInterval() {\n    return typeof this.options.refetchInterval === 'function'\n      ? this.options.refetchInterval(this.currentResult.data, this.currentQuery)\n      : this.options.refetchInterval ?? false\n  }\n\n  private updateRefetchInterval(nextInterval: number | false): void {\n    this.clearRefetchInterval()\n\n    this.currentRefetchInterval = nextInterval\n\n    if (\n      isServer ||\n      this.options.enabled === false ||\n      !isValidTimeout(this.currentRefetchInterval) ||\n      this.currentRefetchInterval === 0\n    ) {\n      return\n    }\n\n    this.refetchIntervalId = setInterval(() => {\n      if (\n        this.options.refetchIntervalInBackground ||\n        focusManager.isFocused()\n      ) {\n        this.executeFetch()\n      }\n    }, this.currentRefetchInterval)\n  }\n\n  private updateTimers(): void {\n    this.updateStaleTimeout()\n    this.updateRefetchInterval(this.computeRefetchInterval())\n  }\n\n  private clearStaleTimeout(): void {\n    if (this.staleTimeoutId) {\n      clearTimeout(this.staleTimeoutId)\n      this.staleTimeoutId = undefined\n    }\n  }\n\n  private clearRefetchInterval(): void {\n    if (this.refetchIntervalId) {\n      clearInterval(this.refetchIntervalId)\n      this.refetchIntervalId = undefined\n    }\n  }\n\n  protected createResult(\n    query: Query<TQueryFnData, TError, TQueryData, TQueryKey>,\n    options: QueryObserverOptions<\n      TQueryFnData,\n      TError,\n      TData,\n      TQueryData,\n      TQueryKey\n    >,\n  ): QueryObserverResult<TData, TError> {\n    const prevQuery = this.currentQuery\n    const prevOptions = this.options\n    const prevResult = this.currentResult as\n      | QueryObserverResult<TData, TError>\n      | undefined\n    const prevResultState = this.currentResultState\n    const prevResultOptions = this.currentResultOptions\n    const queryChange = query !== prevQuery\n    const queryInitialState = queryChange\n      ? query.state\n      : this.currentQueryInitialState\n    const prevQueryResult = queryChange\n      ? this.currentResult\n      : this.previousQueryResult\n\n    const { state } = query\n    let { dataUpdatedAt, error, errorUpdatedAt, fetchStatus, status } = state\n    let isPreviousData = false\n    let isPlaceholderData = false\n    let data: TData | undefined\n\n    // Optimistically set result in fetching state if needed\n    if (options._optimisticResults) {\n      const mounted = this.hasListeners()\n\n      const fetchOnMount = !mounted && shouldFetchOnMount(query, options)\n\n      const fetchOptionally =\n        mounted && shouldFetchOptionally(query, prevQuery, options, prevOptions)\n\n      if (fetchOnMount || fetchOptionally) {\n        fetchStatus = canFetch(query.options.networkMode)\n          ? 'fetching'\n          : 'paused'\n        if (!dataUpdatedAt) {\n          status = 'loading'\n        }\n      }\n      if (options._optimisticResults === 'isRestoring') {\n        fetchStatus = 'idle'\n      }\n    }\n\n    // Keep previous data if needed\n    if (\n      options.keepPreviousData &&\n      !state.dataUpdatedAt &&\n      prevQueryResult?.isSuccess &&\n      status !== 'error'\n    ) {\n      data = prevQueryResult.data\n      dataUpdatedAt = prevQueryResult.dataUpdatedAt\n      status = prevQueryResult.status\n      isPreviousData = true\n    }\n    // Select data if needed\n    else if (options.select && typeof state.data !== 'undefined') {\n      // Memoize select result\n      if (\n        prevResult &&\n        state.data === prevResultState?.data &&\n        options.select === this.selectFn\n      ) {\n        data = this.selectResult\n      } else {\n        try {\n          this.selectFn = options.select\n          data = options.select(state.data)\n          data = replaceData(prevResult?.data, data, options)\n          this.selectResult = data\n          this.selectError = null\n        } catch (selectError) {\n          if (process.env.NODE_ENV !== 'production') {\n            this.client.getLogger().error(selectError)\n          }\n          this.selectError = selectError as TError\n        }\n      }\n    }\n    // Use query data\n    else {\n      data = state.data as unknown as TData\n    }\n\n    // Show placeholder data if needed\n    if (\n      typeof options.placeholderData !== 'undefined' &&\n      typeof data === 'undefined' &&\n      status === 'loading'\n    ) {\n      let placeholderData\n\n      // Memoize placeholder data\n      if (\n        prevResult?.isPlaceholderData &&\n        options.placeholderData === prevResultOptions?.placeholderData\n      ) {\n        placeholderData = prevResult.data\n      } else {\n        placeholderData =\n          typeof options.placeholderData === 'function'\n            ? (options.placeholderData as PlaceholderDataFunction<TQueryData>)()\n            : options.placeholderData\n        if (options.select && typeof placeholderData !== 'undefined') {\n          try {\n            placeholderData = options.select(placeholderData)\n            this.selectError = null\n          } catch (selectError) {\n            if (process.env.NODE_ENV !== 'production') {\n              this.client.getLogger().error(selectError)\n            }\n            this.selectError = selectError as TError\n          }\n        }\n      }\n\n      if (typeof placeholderData !== 'undefined') {\n        status = 'success'\n        data = replaceData(prevResult?.data, placeholderData, options) as TData\n        isPlaceholderData = true\n      }\n    }\n\n    if (this.selectError) {\n      error = this.selectError as any\n      data = this.selectResult\n      errorUpdatedAt = Date.now()\n      status = 'error'\n    }\n\n    const isFetching = fetchStatus === 'fetching'\n    const isLoading = status === 'loading'\n    const isError = status === 'error'\n\n    const result: QueryObserverBaseResult<TData, TError> = {\n      status,\n      fetchStatus,\n      isLoading,\n      isSuccess: status === 'success',\n      isError,\n      isInitialLoading: isLoading && isFetching,\n      data,\n      dataUpdatedAt,\n      error,\n      errorUpdatedAt,\n      failureCount: state.fetchFailureCount,\n      failureReason: state.fetchFailureReason,\n      errorUpdateCount: state.errorUpdateCount,\n      isFetched: state.dataUpdateCount > 0 || state.errorUpdateCount > 0,\n      isFetchedAfterMount:\n        state.dataUpdateCount > queryInitialState.dataUpdateCount ||\n        state.errorUpdateCount > queryInitialState.errorUpdateCount,\n      isFetching,\n      isRefetching: isFetching && !isLoading,\n      isLoadingError: isError && state.dataUpdatedAt === 0,\n      isPaused: fetchStatus === 'paused',\n      isPlaceholderData,\n      isPreviousData,\n      isRefetchError: isError && state.dataUpdatedAt !== 0,\n      isStale: isStale(query, options),\n      refetch: this.refetch,\n      remove: this.remove,\n    }\n\n    return result as QueryObserverResult<TData, TError>\n  }\n\n  updateResult(notifyOptions?: NotifyOptions): void {\n    const prevResult = this.currentResult as\n      | QueryObserverResult<TData, TError>\n      | undefined\n\n    const nextResult = this.createResult(this.currentQuery, this.options)\n    this.currentResultState = this.currentQuery.state\n    this.currentResultOptions = this.options\n\n    // Only notify and update result if something has changed\n    if (shallowEqualObjects(nextResult, prevResult)) {\n      return\n    }\n\n    this.currentResult = nextResult\n\n    // Determine which callbacks to trigger\n    const defaultNotifyOptions: NotifyOptions = { cache: true }\n\n    const shouldNotifyListeners = (): boolean => {\n      if (!prevResult) {\n        return true\n      }\n\n      const { notifyOnChangeProps } = this.options\n      const notifyOnChangePropsValue =\n        typeof notifyOnChangeProps === 'function'\n          ? notifyOnChangeProps()\n          : notifyOnChangeProps\n\n      if (\n        notifyOnChangePropsValue === 'all' ||\n        (!notifyOnChangePropsValue && !this.trackedProps.size)\n      ) {\n        return true\n      }\n\n      const includedProps = new Set(\n        notifyOnChangePropsValue ?? this.trackedProps,\n      )\n\n      if (this.options.useErrorBoundary) {\n        includedProps.add('error')\n      }\n\n      return Object.keys(this.currentResult).some((key) => {\n        const typedKey = key as keyof QueryObserverResult\n        const changed = this.currentResult[typedKey] !== prevResult[typedKey]\n        return changed && includedProps.has(typedKey)\n      })\n    }\n\n    if (notifyOptions?.listeners !== false && shouldNotifyListeners()) {\n      defaultNotifyOptions.listeners = true\n    }\n\n    this.notify({ ...defaultNotifyOptions, ...notifyOptions })\n  }\n\n  private updateQuery(): void {\n    const query = this.client.getQueryCache().build(this.client, this.options)\n\n    if (query === this.currentQuery) {\n      return\n    }\n\n    const prevQuery = this.currentQuery as\n      | Query<TQueryFnData, TError, TQueryData, TQueryKey>\n      | undefined\n    this.currentQuery = query\n    this.currentQueryInitialState = query.state\n    this.previousQueryResult = this.currentResult\n\n    if (this.hasListeners()) {\n      prevQuery?.removeObserver(this)\n      query.addObserver(this)\n    }\n  }\n\n  onQueryUpdate(action: Action<TData, TError>): void {\n    const notifyOptions: NotifyOptions = {}\n\n    if (action.type === 'success') {\n      notifyOptions.onSuccess = !action.manual\n    } else if (action.type === 'error' && !isCancelledError(action.error)) {\n      notifyOptions.onError = true\n    }\n\n    this.updateResult(notifyOptions)\n\n    if (this.hasListeners()) {\n      this.updateTimers()\n    }\n  }\n\n  private notify(notifyOptions: NotifyOptions): void {\n    notifyManager.batch(() => {\n      // First trigger the configuration callbacks\n      if (notifyOptions.onSuccess) {\n        this.options.onSuccess?.(this.currentResult.data!)\n        this.options.onSettled?.(this.currentResult.data!, null)\n      } else if (notifyOptions.onError) {\n        this.options.onError?.(this.currentResult.error!)\n        this.options.onSettled?.(undefined, this.currentResult.error!)\n      }\n\n      // Then trigger the listeners\n      if (notifyOptions.listeners) {\n        this.listeners.forEach(({ listener }) => {\n          listener(this.currentResult)\n        })\n      }\n\n      // Then the cache listeners\n      if (notifyOptions.cache) {\n        this.client.getQueryCache().notify({\n          query: this.currentQuery,\n          type: 'observerResultsUpdated',\n        })\n      }\n    })\n  }\n}\n\nfunction shouldLoadOnMount(\n  query: Query<any, any, any, any>,\n  options: QueryObserverOptions<any, any, any, any>,\n): boolean {\n  return (\n    options.enabled !== false &&\n    !query.state.dataUpdatedAt &&\n    !(query.state.status === 'error' && options.retryOnMount === false)\n  )\n}\n\nfunction shouldFetchOnMount(\n  query: Query<any, any, any, any>,\n  options: QueryObserverOptions<any, any, any, any, any>,\n): boolean {\n  return (\n    shouldLoadOnMount(query, options) ||\n    (query.state.dataUpdatedAt > 0 &&\n      shouldFetchOn(query, options, options.refetchOnMount))\n  )\n}\n\nfunction shouldFetchOn(\n  query: Query<any, any, any, any>,\n  options: QueryObserverOptions<any, any, any, any, any>,\n  field: typeof options['refetchOnMount'] &\n    typeof options['refetchOnWindowFocus'] &\n    typeof options['refetchOnReconnect'],\n) {\n  if (options.enabled !== false) {\n    const value = typeof field === 'function' ? field(query) : field\n\n    return value === 'always' || (value !== false && isStale(query, options))\n  }\n  return false\n}\n\nfunction shouldFetchOptionally(\n  query: Query<any, any, any, any>,\n  prevQuery: Query<any, any, any, any>,\n  options: QueryObserverOptions<any, any, any, any, any>,\n  prevOptions: QueryObserverOptions<any, any, any, any, any>,\n): boolean {\n  return (\n    options.enabled !== false &&\n    (query !== prevQuery || prevOptions.enabled === false) &&\n    (!options.suspense || query.state.status !== 'error') &&\n    isStale(query, options)\n  )\n}\n\nfunction isStale(\n  query: Query<any, any, any, any>,\n  options: QueryObserverOptions<any, any, any, any, any>,\n): boolean {\n  return query.isStaleByTime(options.staleTime)\n}\n\n// this function would decide if we will update the observer's 'current'\n// properties after an optimistic reading via getOptimisticResult\nfunction shouldAssignObserverCurrentProperties<\n  TQueryFnData = unknown,\n  TError = unknown,\n  TData = TQueryFnData,\n  TQueryData = TQueryFnData,\n  TQueryKey extends QueryKey = QueryKey,\n>(\n  observer: QueryObserver<TQueryFnData, TError, TData, TQueryData, TQueryKey>,\n  optimisticResult: QueryObserverResult<TData, TError>,\n  options: DefaultedQueryObserverOptions<\n    TQueryFnData,\n    TError,\n    TData,\n    TQueryData,\n    TQueryKey\n  >,\n) {\n  // it is important to keep this condition like this for three reasons:\n  // 1. It will get removed in the v5\n  // 2. it reads: don't update the properties if we want to keep the previous\n  // data.\n  // 3. The opposite condition (!options.keepPreviousData) would fallthrough\n  // and will result in a bad decision\n  if (options.keepPreviousData) {\n    return false\n  }\n\n  // this means we want to put some placeholder data when pending and queryKey\n  // changed.\n  if (options.placeholderData !== undefined) {\n    // re-assign properties only if current data is placeholder data\n    // which means that data did not arrive yet, so, if there is some cached data\n    // we need to \"prepare\" to receive it\n    return optimisticResult.isPlaceholderData\n  }\n\n  // if the newly created result isn't what the observer is holding as current,\n  // then we'll need to update the properties as well\n  if (!shallowEqualObjects(observer.getCurrentResult(), optimisticResult)) {\n    return true\n  }\n\n  // basically, just keep previous properties if nothing changed\n  return false\n}\n", "import { getDefaultState } from './mutation'\nimport { notifyManager } from './notifyManager'\nimport { Subscribable } from './subscribable'\nimport { shallowEqualObjects } from './utils'\nimport type { QueryClient } from './queryClient'\nimport type {\n  MutateOptions,\n  MutationObserverBaseResult,\n  MutationObserverOptions,\n  MutationObserverResult,\n} from './types'\nimport type { Action, Mutation } from './mutation'\n\n// TYPES\n\ntype MutationObserverListener<TData, TError, TVariables, TContext> = (\n  result: MutationObserverResult<TData, TError, TVariables, TContext>,\n) => void\n\ninterface NotifyOptions {\n  listeners?: boolean\n  onError?: boolean\n  onSuccess?: boolean\n}\n\n// CLASS\n\nexport class MutationObserver<\n  TData = unknown,\n  TError = unknown,\n  TVariables = void,\n  TContext = unknown,\n> extends Subscribable<\n  MutationObserverListener<TData, TError, TVariables, TContext>\n> {\n  options!: MutationObserverOptions<TData, TError, TVariables, TContext>\n\n  private client: QueryClient\n  private currentResult!: MutationObserverResult<\n    TData,\n    TError,\n    TVariables,\n    TContext\n  >\n  private currentMutation?: Mutation<TData, TError, TVariables, TContext>\n  private mutateOptions?: MutateOptions<TData, TError, TVariables, TContext>\n\n  constructor(\n    client: QueryClient,\n    options: MutationObserverOptions<TData, TError, TVariables, TContext>,\n  ) {\n    super()\n\n    this.client = client\n    this.setOptions(options)\n    this.bindMethods()\n    this.updateResult()\n  }\n\n  protected bindMethods(): void {\n    this.mutate = this.mutate.bind(this)\n    this.reset = this.reset.bind(this)\n  }\n\n  setOptions(\n    options?: MutationObserverOptions<TData, TError, TVariables, TContext>,\n  ) {\n    const prevOptions = this.options\n    this.options = this.client.defaultMutationOptions(options)\n    if (!shallowEqualObjects(prevOptions, this.options)) {\n      this.client.getMutationCache().notify({\n        type: 'observerOptionsUpdated',\n        mutation: this.currentMutation,\n        observer: this,\n      })\n    }\n    this.currentMutation?.setOptions(this.options)\n  }\n\n  protected onUnsubscribe(): void {\n    if (!this.hasListeners()) {\n      this.currentMutation?.removeObserver(this)\n    }\n  }\n\n  onMutationUpdate(action: Action<TData, TError, TVariables, TContext>): void {\n    this.updateResult()\n\n    // Determine which callbacks to trigger\n    const notifyOptions: NotifyOptions = {\n      listeners: true,\n    }\n\n    if (action.type === 'success') {\n      notifyOptions.onSuccess = true\n    } else if (action.type === 'error') {\n      notifyOptions.onError = true\n    }\n\n    this.notify(notifyOptions)\n  }\n\n  getCurrentResult(): MutationObserverResult<\n    TData,\n    TError,\n    TVariables,\n    TContext\n  > {\n    return this.currentResult\n  }\n\n  reset(): void {\n    this.currentMutation = undefined\n    this.updateResult()\n    this.notify({ listeners: true })\n  }\n\n  mutate(\n    variables?: TVariables,\n    options?: MutateOptions<TData, TError, TVariables, TContext>,\n  ): Promise<TData> {\n    this.mutateOptions = options\n\n    if (this.currentMutation) {\n      this.currentMutation.removeObserver(this)\n    }\n\n    this.currentMutation = this.client.getMutationCache().build(this.client, {\n      ...this.options,\n      variables:\n        typeof variables !== 'undefined' ? variables : this.options.variables,\n    })\n\n    this.currentMutation.addObserver(this)\n\n    return this.currentMutation.execute()\n  }\n\n  private updateResult(): void {\n    const state = this.currentMutation\n      ? this.currentMutation.state\n      : getDefaultState<TData, TError, TVariables, TContext>()\n\n    const isLoading = state.status === 'loading'\n    const result: MutationObserverBaseResult<\n      TData,\n      TError,\n      TVariables,\n      TContext\n    > = {\n      ...state,\n      isLoading,\n      isPending: isLoading,\n      isSuccess: state.status === 'success',\n      isError: state.status === 'error',\n      isIdle: state.status === 'idle',\n      mutate: this.mutate,\n      reset: this.reset,\n    }\n\n    this.currentResult = result as MutationObserverResult<\n      TData,\n      TError,\n      TVariables,\n      TContext\n    >\n  }\n\n  private notify(options: NotifyOptions) {\n    notifyManager.batch(() => {\n      // First trigger the mutate callbacks\n      if (this.mutateOptions && this.hasListeners()) {\n        if (options.onSuccess) {\n          this.mutateOptions.onSuccess?.(\n            this.currentResult.data!,\n            this.currentResult.variables!,\n            this.currentResult.context!,\n          )\n          this.mutateOptions.onSettled?.(\n            this.currentResult.data!,\n            null,\n            this.currentResult.variables!,\n            this.currentResult.context,\n          )\n        } else if (options.onError) {\n          this.mutateOptions.onError?.(\n            this.currentResult.error!,\n            this.currentResult.variables!,\n            this.currentResult.context,\n          )\n          this.mutateOptions.onSettled?.(\n            undefined,\n            this.currentResult.error,\n            this.currentResult.variables!,\n            this.currentResult.context,\n          )\n        }\n      }\n\n      // Then trigger the listeners\n      if (options.listeners) {\n        this.listeners.forEach(({ listener }) => {\n          listener(this.currentResult)\n        })\n      }\n    })\n  }\n}\n", "'use client'\n// Temporary workaround due to an issue with react-native uSES - https://github.com/TanStack/query/pull/3601\nimport { useSyncExternalStore as uSES } from 'use-sync-external-store/shim/index.js'\n\nexport const useSyncExternalStore = uSES\n", "'use client'\nimport * as React from 'react'\n\nimport type { QueryClient } from '@tanstack/query-core'\nimport type { ContextOptions } from './types'\n\ndeclare global {\n  interface Window {\n    ReactQueryClientContext?: React.Context<QueryClient | undefined>\n  }\n}\n\nexport const defaultContext = React.createContext<QueryClient | undefined>(\n  undefined,\n)\nconst QueryClientSharingContext = React.createContext<boolean>(false)\n\n// If we are given a context, we will use it.\n// Otherwise, if contextSharing is on, we share the first and at least one\n// instance of the context across the window\n// to ensure that if React Query is used across\n// different bundles or microfrontends they will\n// all use the same **instance** of context, regardless\n// of module scoping.\nfunction getQueryClientContext(\n  context: React.Context<QueryClient | undefined> | undefined,\n  contextSharing: boolean,\n) {\n  if (context) {\n    return context\n  }\n  if (contextSharing && typeof window !== 'undefined') {\n    if (!window.ReactQueryClientContext) {\n      window.ReactQueryClientContext = defaultContext\n    }\n\n    return window.ReactQueryClientContext\n  }\n\n  return defaultContext\n}\n\nexport const useQueryClient = ({ context }: ContextOptions = {}) => {\n  const queryClient = React.useContext(\n    getQueryClientContext(context, React.useContext(QueryClientSharingContext)),\n  )\n\n  if (!queryClient) {\n    throw new Error('No QueryClient set, use QueryClientProvider to set one')\n  }\n\n  return queryClient\n}\n\ntype QueryClientProviderPropsBase = {\n  client: QueryClient\n  children?: React.ReactNode\n}\ntype QueryClientProviderPropsWithContext = ContextOptions & {\n  contextSharing?: never\n} & QueryClientProviderPropsBase\ntype QueryClientProviderPropsWithContextSharing = {\n  context?: never\n  contextSharing?: boolean\n} & QueryClientProviderPropsBase\n\nexport type QueryClientProviderProps =\n  | QueryClientProviderPropsWithContext\n  | QueryClientProviderPropsWithContextSharing\n\nexport const QueryClientProvider = ({\n  client,\n  children,\n  context,\n  contextSharing = false,\n}: QueryClientProviderProps): React.JSX.Element => {\n  React.useEffect(() => {\n    client.mount()\n    return () => {\n      client.unmount()\n    }\n  }, [client])\n\n  if (process.env.NODE_ENV !== 'production' && contextSharing) {\n    client\n      .getLogger()\n      .error(\n        `The contextSharing option has been deprecated and will be removed in the next major version`,\n      )\n  }\n\n  const Context = getQueryClientContext(context, contextSharing)\n\n  return (\n    <QueryClientSharingContext.Provider value={!context && contextSharing}>\n      <Context.Provider value={client}>{children}</Context.Provider>\n    </QueryClientSharingContext.Provider>\n  )\n}\n", "'use client'\nimport * as React from 'react'\n\nconst IsRestoringContext = React.createContext(false)\n\nexport const useIsRestoring = () => React.useContext(IsRestoringContext)\nexport const IsRestoringProvider = IsRestoringContext.Provider\n", "'use client'\nimport * as React from 'react'\n\n// CONTEXT\n\nexport interface QueryErrorResetBoundaryValue {\n  clearReset: () => void\n  isReset: () => boolean\n  reset: () => void\n}\n\nfunction createValue(): QueryErrorResetBoundaryValue {\n  let isReset = false\n  return {\n    clearReset: () => {\n      isReset = false\n    },\n    reset: () => {\n      isReset = true\n    },\n    isReset: () => {\n      return isReset\n    },\n  }\n}\n\nconst QueryErrorResetBoundaryContext = React.createContext(createValue())\n\n// HOOK\n\nexport const useQueryErrorResetBoundary = () =>\n  React.useContext(QueryErrorResetBoundaryContext)\n\n// COMPONENT\n\nexport interface QueryErrorResetBoundaryProps {\n  children:\n    | ((value: QueryErrorResetBoundaryValue) => React.ReactNode)\n    | React.ReactNode\n}\n\nexport const QueryErrorResetBoundary = ({\n  children,\n}: QueryErrorResetBoundaryProps) => {\n  const [value] = React.useState(() => createValue())\n  return (\n    <QueryErrorResetBoundaryContext.Provider value={value}>\n      {typeof children === 'function'\n        ? (children as Function)(value)\n        : children}\n    </QueryErrorResetBoundaryContext.Provider>\n  )\n}\n", "export function shouldThrowError<T extends (...args: any[]) => boolean>(\n  _useErrorBoundary: boolean | T | undefined,\n  params: Parameters<T>,\n): boolean {\n  // Allow useErrorBoundary function to override throwing behavior on a per-error basis\n  if (typeof _useErrorBoundary === 'function') {\n    return _useErrorBoundary(...params)\n  }\n\n  return !!_useErrorBoundary\n}\n", "'use client'\nimport * as React from 'react'\nimport { shouldThrowError } from './utils'\nimport type {\n  DefaultedQueryObserverOptions,\n  Query,\n  QueryKey,\n  QueryObserverResult,\n  UseErrorBoundary,\n} from '@tanstack/query-core'\nimport type { QueryErrorResetBoundaryValue } from './QueryErrorResetBoundary'\n\nexport const ensurePreventErrorBoundaryRetry = <\n  TQueryFnData,\n  TError,\n  TData,\n  TQueryData,\n  TQueryKey extends QueryKey,\n>(\n  options: DefaultedQueryObserverOptions<\n    TQueryFnData,\n    TError,\n    TData,\n    TQueryData,\n    TQueryKey\n  >,\n  errorResetBoundary: QueryErrorResetBoundaryValue,\n) => {\n  if (options.suspense || options.useErrorBoundary) {\n    // Prevent retrying failed query if the error boundary has not been reset yet\n    if (!errorResetBoundary.isReset()) {\n      options.retryOnMount = false\n    }\n  }\n}\n\nexport const useClearResetErrorBoundary = (\n  errorResetBoundary: QueryErrorResetBoundaryValue,\n) => {\n  React.useEffect(() => {\n    errorResetBoundary.clearReset()\n  }, [errorResetBoundary])\n}\n\nexport const getHasError = <\n  TData,\n  TError,\n  TQueryFnData,\n  TQueryData,\n  TQueryKey extends QueryKey,\n>({\n  result,\n  errorResetBoundary,\n  useErrorBoundary,\n  query,\n}: {\n  result: QueryObserverResult<TData, TError>\n  errorResetBoundary: QueryErrorResetBoundaryValue\n  useErrorBoundary: UseErrorBoundary<\n    TQueryFnData,\n    TError,\n    TQueryData,\n    TQueryKey\n  >\n  query: Query<TQueryFnData, TError, TQueryData, TQueryKey>\n}) => {\n  return (\n    result.isError &&\n    !errorResetBoundary.isReset() &&\n    !result.isFetching &&\n    shouldThrowError(useErrorBoundary, [result.error, query])\n  )\n}\n", "import type { DefaultedQueryObserverOptions } from '@tanstack/query-core'\nimport type { QueryObserver } from '@tanstack/query-core'\nimport type { QueryErrorResetBoundaryValue } from './QueryErrorResetBoundary'\nimport type { QueryObserverResult } from '@tanstack/query-core'\nimport type { QueryKey } from '@tanstack/query-core'\n\n/**\n * Ensures minimum staleTime and cacheTime values when suspense is enabled.\n * Despite the name, this function guards both staleTime and cacheTime to prevent\n * infinite re-render loops with synchronous queries.\n *\n * @deprecated in v5 - replaced by ensureSuspenseTimers\n */\nexport const ensureStaleTime = (\n  defaultedOptions: DefaultedQueryObserverOptions<any, any, any, any, any>,\n) => {\n  if (defaultedOptions.suspense) {\n    // Always set stale time when using suspense to prevent\n    // fetching again when directly mounting after suspending\n    if (typeof defaultedOptions.staleTime !== 'number') {\n      defaultedOptions.staleTime = 1000\n    }\n\n    if (typeof defaultedOptions.cacheTime === 'number') {\n      defaultedOptions.cacheTime = Math.max(defaultedOptions.cacheTime, 1000)\n    }\n  }\n}\n\nexport const willFetch = (\n  result: QueryObserverResult<any, any>,\n  isRestoring: boolean,\n) => result.isLoading && result.isFetching && !isRestoring\n\nexport const shouldSuspend = (\n  defaultedOptions:\n    | DefaultedQueryObserverOptions<any, any, any, any, any>\n    | undefined,\n  result: QueryObserverResult<any, any>,\n  isRestoring: boolean,\n) => defaultedOptions?.suspense && willFetch(result, isRestoring)\n\nexport const fetchOptimistic = <\n  TQueryFnData,\n  TError,\n  TData,\n  TQueryData,\n  TQueryKey extends QueryKey,\n>(\n  defaultedOptions: DefaultedQueryObserverOptions<\n    TQueryFnData,\n    TError,\n    TData,\n    TQueryData,\n    TQueryKey\n  >,\n  observer: QueryObserver<TQueryFnData, TError, TData, TQueryData, TQueryKey>,\n  errorResetBoundary: QueryErrorResetBoundaryValue,\n) =>\n  observer\n    .fetchOptimistic(defaultedOptions)\n    .then(({ data }) => {\n      defaultedOptions.onSuccess?.(data as TData)\n      defaultedOptions.onSettled?.(data, null)\n    })\n    .catch((error) => {\n      errorResetBoundary.clearReset()\n      defaultedOptions.onError?.(error)\n      defaultedOptions.onSettled?.(undefined, error)\n    })\n", "'use client'\nimport * as React from 'react'\n\nimport { notifyManager } from '@tanstack/query-core'\nimport { useSyncExternalStore } from './useSyncExternalStore'\nimport { useQueryErrorResetBoundary } from './QueryErrorResetBoundary'\nimport { useQueryClient } from './QueryClientProvider'\nimport { useIsRestoring } from './isRestoring'\nimport {\n  ensurePreventErrorBoundaryRetry,\n  getHasError,\n  useClearResetErrorBoundary,\n} from './errorBoundaryUtils'\nimport { ensureStaleTime, fetchOptimistic, shouldSuspend } from './suspense'\nimport type { QueryKey, QueryObserver } from '@tanstack/query-core'\nimport type { UseBaseQueryOptions } from './types'\n\nexport function useBaseQuery<\n  TQueryFnData,\n  TError,\n  TData,\n  TQueryData,\n  TQueryKey extends QueryKey,\n>(\n  options: UseBaseQueryOptions<\n    TQueryFnData,\n    TError,\n    TData,\n    TQueryData,\n    TQueryKey\n  >,\n  Observer: typeof QueryObserver,\n) {\n  const queryClient = useQueryClient({ context: options.context })\n  const isRestoring = useIsRestoring()\n  const errorResetBoundary = useQueryErrorResetBoundary()\n  const defaultedOptions = queryClient.defaultQueryOptions(options)\n\n  // Make sure results are optimistically set in fetching state before subscribing or updating options\n  defaultedOptions._optimisticResults = isRestoring\n    ? 'isRestoring'\n    : 'optimistic'\n\n  // Include callbacks in batch renders\n  if (defaultedOptions.onError) {\n    defaultedOptions.onError = notifyManager.batchCalls(\n      defaultedOptions.onError,\n    )\n  }\n\n  if (defaultedOptions.onSuccess) {\n    defaultedOptions.onSuccess = notifyManager.batchCalls(\n      defaultedOptions.onSuccess,\n    )\n  }\n\n  if (defaultedOptions.onSettled) {\n    defaultedOptions.onSettled = notifyManager.batchCalls(\n      defaultedOptions.onSettled,\n    )\n  }\n\n  ensureStaleTime(defaultedOptions)\n  ensurePreventErrorBoundaryRetry(defaultedOptions, errorResetBoundary)\n\n  useClearResetErrorBoundary(errorResetBoundary)\n\n  const [observer] = React.useState(\n    () =>\n      new Observer<TQueryFnData, TError, TData, TQueryData, TQueryKey>(\n        queryClient,\n        defaultedOptions,\n      ),\n  )\n\n  const result = observer.getOptimisticResult(defaultedOptions)\n\n  useSyncExternalStore(\n    React.useCallback(\n      (onStoreChange) => {\n        const unsubscribe = isRestoring\n          ? () => undefined\n          : observer.subscribe(notifyManager.batchCalls(onStoreChange))\n\n        // Update result to make sure we did not miss any query updates\n        // between creating the observer and subscribing to it.\n        observer.updateResult()\n\n        return unsubscribe\n      },\n      [observer, isRestoring],\n    ),\n    () => observer.getCurrentResult(),\n    () => observer.getCurrentResult(),\n  )\n\n  React.useEffect(() => {\n    // Do not notify on updates because of changes in the options because\n    // these changes should already be reflected in the optimistic result.\n    observer.setOptions(defaultedOptions, { listeners: false })\n  }, [defaultedOptions, observer])\n\n  // Handle suspense\n  if (shouldSuspend(defaultedOptions, result, isRestoring)) {\n    throw fetchOptimistic(defaultedOptions, observer, errorResetBoundary)\n  }\n\n  // Handle error boundary\n  if (\n    getHasError({\n      result,\n      errorResetBoundary,\n      useErrorBoundary: defaultedOptions.useErrorBoundary,\n      query: observer.getCurrentQuery(),\n    })\n  ) {\n    throw result.error\n  }\n\n  // Handle result property usage tracking\n  return !defaultedOptions.notifyOnChangeProps\n    ? observer.trackResult(result)\n    : result\n}\n", "'use client'\nimport { QueryObserver, parseQueryArgs } from '@tanstack/query-core'\nimport { useBaseQuery } from './useBaseQuery'\nimport type {\n  InitialDataFunction,\n  NonUndefinedGuard,\n  OmitKeyof,\n  QueryFunction,\n  QueryKey,\n} from '@tanstack/query-core'\nimport type {\n  DefinedUseQueryResult,\n  UseQueryOptions,\n  UseQueryResult,\n} from './types'\n\n// HOOK\nexport function useQuery<\n  TQueryFnData = unknown,\n  TError = unknown,\n  TData = TQueryFnData,\n  TQueryKey extends QueryKey = QueryKey,\n>(\n  options: OmitKeyof<\n    UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n    'initialData'\n  > & {\n    initialData:\n      | NonUndefinedGuard<TQueryFnData>\n      | (() => NonUndefinedGuard<TQueryFnData>)\n  },\n): DefinedUseQueryResult<TData, TError>\nexport function useQuery<\n  TQueryFnData = unknown,\n  TError = unknown,\n  TData = TQueryFnData,\n  TQueryKey extends QueryKey = QueryKey,\n>(\n  options: OmitKeyof<\n    UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n    'initialData'\n  > & {\n    initialData?:\n      | undefined\n      | InitialDataFunction<NonUndefinedGuard<TQueryFnData>>\n      | NonUndefinedGuard<TQueryFnData>\n  },\n): UseQueryResult<TData, TError>\nexport function useQuery<\n  TQueryFnData = unknown,\n  TError = unknown,\n  TData = TQueryFnData,\n  TQueryKey extends QueryKey = QueryKey,\n>(\n  options: UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n): UseQueryResult<TData, TError>\n\n/** @deprecated This function overload will be removed in the next major version. */\nexport function useQuery<\n  TQueryFnData = unknown,\n  TError = unknown,\n  TData = TQueryFnData,\n  TQueryKey extends QueryKey = QueryKey,\n>(\n  queryKey: TQueryKey,\n  options?: OmitKeyof<\n    UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n    'queryKey' | 'initialData'\n  >,\n): UseQueryResult<TData, TError>\n/** @deprecated This function overload will be removed in the next major version. */\nexport function useQuery<\n  TQueryFnData = unknown,\n  TError = unknown,\n  TData = TQueryFnData,\n  TQueryKey extends QueryKey = QueryKey,\n>(\n  queryKey: TQueryKey,\n  options?: OmitKeyof<\n    UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n    'queryKey' | 'initialData'\n  > & { initialData: TQueryFnData | (() => TQueryFnData) },\n): DefinedUseQueryResult<TData, TError>\n/** @deprecated This function overload will be removed in the next major version. */\nexport function useQuery<\n  TQueryFnData = unknown,\n  TError = unknown,\n  TData = TQueryFnData,\n  TQueryKey extends QueryKey = QueryKey,\n>(\n  queryKey: TQueryKey,\n  options?: OmitKeyof<\n    UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n    'queryKey'\n  >,\n): UseQueryResult<TData, TError>\n/** @deprecated This function overload will be removed in the next major version. */\nexport function useQuery<\n  TQueryFnData = unknown,\n  TError = unknown,\n  TData = TQueryFnData,\n  TQueryKey extends QueryKey = QueryKey,\n>(\n  queryKey: TQueryKey,\n  queryFn: QueryFunction<TQueryFnData, TQueryKey>,\n  options?: OmitKeyof<\n    UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n    'queryKey' | 'queryFn' | 'initialData'\n  > & { initialData?: () => undefined },\n): UseQueryResult<TData, TError>\n/** @deprecated This function overload will be removed in the next major version. */\nexport function useQuery<\n  TQueryFnData = unknown,\n  TError = unknown,\n  TData = TQueryFnData,\n  TQueryKey extends QueryKey = QueryKey,\n>(\n  queryKey: TQueryKey,\n  queryFn: QueryFunction<TQueryFnData, TQueryKey>,\n  options?: OmitKeyof<\n    UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n    'queryKey' | 'queryFn' | 'initialData'\n  > & { initialData: TQueryFnData | (() => TQueryFnData) },\n): DefinedUseQueryResult<TData, TError>\n/** @deprecated This function overload will be removed in the next major version. */\nexport function useQuery<\n  TQueryFnData = unknown,\n  TError = unknown,\n  TData = TQueryFnData,\n  TQueryKey extends QueryKey = QueryKey,\n>(\n  queryKey: TQueryKey,\n  queryFn: QueryFunction<TQueryFnData, TQueryKey>,\n  options?: OmitKeyof<\n    UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n    'queryKey' | 'queryFn'\n  >,\n): UseQueryResult<TData, TError>\nexport function useQuery<\n  TQueryFnData,\n  TError,\n  TData = TQueryFnData,\n  TQueryKey extends QueryKey = QueryKey,\n>(\n  arg1: TQueryKey | UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n  arg2?:\n    | QueryFunction<TQueryFnData, TQueryKey>\n    | UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n  arg3?: UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n): UseQueryResult<TData, TError> {\n  const parsedOptions = parseQueryArgs(arg1, arg2, arg3)\n  return useBaseQuery(parsedOptions, QueryObserver)\n}\n", "'use client'\nimport * as React from 'react'\nimport {\n  MutationObserver,\n  notifyManager,\n  parseMutationArgs,\n} from '@tanstack/query-core'\nimport { useSyncExternalStore } from './useSyncExternalStore'\n\nimport { useQueryClient } from './QueryClientProvider'\nimport { shouldThrowError } from './utils'\nimport type { MutationFunction, MutationKey } from '@tanstack/query-core'\nimport type {\n  UseMutateFunction,\n  UseMutationOptions,\n  UseMutationResult,\n} from './types'\n\n// HOOK\n\nexport function useMutation<\n  TData = unknown,\n  TError = unknown,\n  TVariables = void,\n  TContext = unknown,\n>(\n  options: UseMutationOptions<TData, TError, TVariables, TContext>,\n): UseMutationResult<TData, TError, TVariables, TContext>\nexport function useMutation<\n  TData = unknown,\n  TError = unknown,\n  TVariables = void,\n  TContext = unknown,\n>(\n  mutationFn: MutationFunction<TData, TVariables>,\n  options?: Omit<\n    UseMutationOptions<TData, TError, TVariables, TContext>,\n    'mutationFn'\n  >,\n): UseMutationResult<TData, TError, TVariables, TContext>\nexport function useMutation<\n  TData = unknown,\n  TError = unknown,\n  TVariables = void,\n  TContext = unknown,\n>(\n  mutationKey: MutationKey,\n  options?: Omit<\n    UseMutationOptions<TData, TError, TVariables, TContext>,\n    'mutationKey'\n  >,\n): UseMutationResult<TData, TError, TVariables, TContext>\nexport function useMutation<\n  TData = unknown,\n  TError = unknown,\n  TVariables = void,\n  TContext = unknown,\n>(\n  mutationKey: MutationKey,\n  mutationFn?: MutationFunction<TData, TVariables>,\n  options?: Omit<\n    UseMutationOptions<TData, TError, TVariables, TContext>,\n    'mutationKey' | 'mutationFn'\n  >,\n): UseMutationResult<TData, TError, TVariables, TContext>\nexport function useMutation<\n  TData = unknown,\n  TError = unknown,\n  TVariables = void,\n  TContext = unknown,\n>(\n  arg1:\n    | MutationKey\n    | MutationFunction<TData, TVariables>\n    | UseMutationOptions<TData, TError, TVariables, TContext>,\n  arg2?:\n    | MutationFunction<TData, TVariables>\n    | UseMutationOptions<TData, TError, TVariables, TContext>,\n  arg3?: UseMutationOptions<TData, TError, TVariables, TContext>,\n): UseMutationResult<TData, TError, TVariables, TContext> {\n  const options = parseMutationArgs(arg1, arg2, arg3)\n  const queryClient = useQueryClient({ context: options.context })\n\n  const [observer] = React.useState(\n    () =>\n      new MutationObserver<TData, TError, TVariables, TContext>(\n        queryClient,\n        options,\n      ),\n  )\n\n  React.useEffect(() => {\n    observer.setOptions(options)\n  }, [observer, options])\n\n  const result = useSyncExternalStore(\n    React.useCallback(\n      (onStoreChange) =>\n        observer.subscribe(notifyManager.batchCalls(onStoreChange)),\n      [observer],\n    ),\n    () => observer.getCurrentResult(),\n    () => observer.getCurrentResult(),\n  )\n\n  const mutate = React.useCallback<\n    UseMutateFunction<TData, TError, TVariables, TContext>\n  >(\n    (variables, mutateOptions) => {\n      observer.mutate(variables, mutateOptions).catch(noop)\n    },\n    [observer],\n  )\n\n  if (\n    result.error &&\n    shouldThrowError(observer.options.useErrorBoundary, [result.error])\n  ) {\n    throw result.error\n  }\n\n  return { ...result, mutate, mutateAsync: result.mutate }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction noop() {}\n", "import { ASSISTANT_ACTION_VERSION, toLineItem } from \"./actions\";\nimport type {\n  AssistantActionConfig,\n  BrandFontFace,\n  SamuelConfig,\n  SamuelCopyOverrides,\n  SamuelRadii,\n} from \"../types\";\nimport {\n  type NavSurface,\n  createAtcSink,\n  createBridgeSink,\n  createExternalHandoffSink,\n  createFacadeOpenSink,\n  createHeightSink,\n  createNavSink,\n  createOpenLinkSink,\n  createResizeSink,\n  createViewCartSink,\n} from \"./bridge\";\nimport {\n  getHostPageContext,\n  setHostPageContext,\n  subscribeHostPageContext,\n} from \"./pageContext\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport {\n  type RefObject,\n  createElement,\n  createRef,\n  useSyncExternalStore,\n} from \"react\";\nimport { type Root, createRoot } from \"react-dom/client\";\nimport { Samuel, type SamuelHandle } from \"../components/Samuel\";\nimport { bakedApiBases, isProdEnv } from \"./environments\";\nimport {\n  removeFromSessionStorage,\n  writeToSessionStorage,\n} from \"../util/session-storage\";\nimport {\n  resolveStarterQuestions,\n  usePrePopulatedQuestions,\n} from \"../hooks/queries\";\nimport { I18nextProvider } from \"react-i18next\";\nimport { SamuelConfigContext } from \"../context\";\nimport { SamuelFacade } from \"../components/SamuelFacade\";\nimport { createSamuelI18n } from \"../i18n\";\nimport { initShoppingAssistantLogging } from \"../util/datadog-logger\";\nimport { buildThemeVarsMap } from \"../util/theme-vars\";\n\n// Font and image params arrive from the parent via the iframe URL, which is attacker-controllable\n// (the app is publicly loadable), so the font faces and the persona avatar are validated before\n// they reach a <style> or an <img src>. The iframe synthesizes the CSS itself and never trusts raw\n// CSS from the query string. `brandLogoUrl` is the one deliberate exception, see its own comment.\n// `ik.imagekit.io` is here because the dashboard media library hands brands ImageKit URLs\n// (web-dashboard `mediaHelper.ts` fileLocationToUrl); without it, a pasted library URL saves\n// fine and the avatar silently never renders.\nconst ASSET_HOST_ALLOWLIST = [\n  \"storage.googleapis.com\",\n  \"static.fermatcommerce.com\",\n  \"ik.imagekit.io\",\n];\n// ImageKit serves every customer off the one host, so the account path is the real boundary.\nconst IMAGEKIT_ACCOUNT_PREFIX = \"/fermat/\";\nconst FONT_FORMATS = new Set([\"woff\", \"woff2\", \"truetype\", \"opentype\"]);\nconst SAFE_FONT_FAMILY = /^[A-Za-z0-9 _-]{1,64}$/;\nconst FONT_WEIGHT = /^[1-9]00$/;\n// The iframe has no Next-loaded Fermat fonts or host CSS vars; brand font ends in system fonts.\nconst FONT_FALLBACK_STACK =\n  '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif';\n\n/** Best-effort parse of the fontFaces JSON param into an array of face objects (validated later). */\nfunction parseFontFaces(raw: string | null): BrandFontFace[] | undefined {\n  if (!raw) return undefined;\n  try {\n    const parsed = JSON.parse(raw);\n    if (!Array.isArray(parsed)) return undefined;\n    return parsed\n      .filter((f) => f && typeof f === \"object\")\n      .map((f) => ({\n        url: String(f.url ?? \"\"),\n        weight: String(f.weight ?? \"\"),\n        format: String(f.format ?? \"\"),\n      }));\n  } catch {\n    return undefined;\n  }\n}\n\nfunction isAllowedAssetUrl(value: string): boolean {\n  try {\n    const url = new URL(value);\n    if (url.protocol !== \"https:\") return false;\n    if (!ASSET_HOST_ALLOWLIST.includes(url.hostname)) return false;\n    return (\n      url.hostname !== \"ik.imagekit.io\" ||\n      url.pathname.startsWith(IMAGEKIT_ACCOUNT_PREFIX)\n    );\n  } catch {\n    return false;\n  }\n}\n\n/** Trim a raw asset-URL query param down to one that passed the allowlist, else undefined. */\nfunction allowedAssetUrl(raw: string | null): string | undefined {\n  const value = raw?.trim();\n  return value && isAllowedAssetUrl(value) ? value : undefined;\n}\n\n/**\n * Synthesize the brand @font-face CSS + --font-brand-primary stack from validated primitives.\n * Returns null when the family name or every face fails validation (caller leaves the system\n * fallback in place). Rejects faces with a non-allowlisted host, bad weight, or unknown format.\n */\nexport function buildBrandFontCss(\n  family?: string,\n  faces?: BrandFontFace[],\n): { fontFaceCss: string; fontFamilyStack: string } | null {\n  if (!family || !SAFE_FONT_FAMILY.test(family) || !faces?.length) return null;\n  const quotedFamily = JSON.stringify(family);\n  const fontFaceCss = faces\n    .filter(\n      (f) =>\n        isAllowedAssetUrl(f.url) &&\n        FONT_WEIGHT.test(f.weight) &&\n        FONT_FORMATS.has(f.format),\n    )\n    .map(\n      (f) =>\n        `@font-face{font-family:${quotedFamily};src:url(${JSON.stringify(\n          f.url,\n        )}) format(${JSON.stringify(f.format)});font-weight:${\n          f.weight\n        };font-display:swap}`,\n    )\n    .join(\"\");\n  if (!fontFaceCss) return null;\n  return {\n    fontFaceCss,\n    fontFamilyStack: `${quotedFamily}, ${FONT_FALLBACK_STACK}`,\n  };\n}\n\n/**\n * Resolve the navigation surface from the iframe URL. The widget's launch mode is threaded as a\n * `surface` param: funnel/tile -> \"fermat-funnel\", org-only -> \"brand-site\". Anything else (incl.\n * absent) falls back to \"brand-site\", the org-only default for a Claire-injected iframe. The surface\n * only selects Claire's branch; both branches are independently constrained on the Claire side.\n */\nfunction surfaceFromQuery(p: URLSearchParams): NavSurface {\n  return p.get(\"surface\") === \"fermat-funnel\" ? \"fermat-funnel\" : \"brand-site\";\n}\n\n/**\n * Read the host's presentation (Claire sets `?presentation=` from its mode + viewport). Unknown or\n * missing values fall back to \"bubble\", which keeps the downward-collapse dismiss control.\n */\n/** Host presentation on the wire, including the inline facade launcher (which is not a chat panel). */\ntype HostPresentation = \"bubble\" | \"drawer\" | \"sheet\" | \"facade\";\n\nfunction presentationFromQuery(p: URLSearchParams): HostPresentation {\n  const v = p.get(\"presentation\");\n  return v === \"drawer\" || v === \"sheet\" || v === \"bubble\" || v === \"facade\"\n    ? v\n    : \"bubble\";\n}\n\n// Per-brand default welcome suggestions, keyed by org id. Used when the host does not pass\n// explicit suggestions, so brand-specific prompts stay out of the shared component default\n// (every other org-only brand keeps the generic discovery set).\nconst ORG_SAMPLE_QUESTIONS: Record<string, string[]> = {\n  // Competitive Cyclist\n  \"ba4e84b8-93ae-4c27-978b-56122403f7e0\": [\n    \"Find me a lightweight gravel bike for long, all-day rides.\",\n    \"What are the best tubeless tires for fast gravel?\",\n    \"What are the most popular trail mountain bike helmets right now?\",\n    \"I'm getting into indoor training, what do I need to get started?\",\n  ],\n};\n\n// Theme colors arrive from the attacker-controllable iframe URL and land in `background:`, which\n// accepts url(), so each is gated to a plain CSS color before reaching the CSSOM: hex, rgb/rgba/\n// hsl/hsla with numeric args, or a letters-only keyword that cannot form `url(` or contain `;`/`(`.\n// Anything else is dropped and chat.css's default stands.\nconst SAFE_CSS_COLOR =\n  /^(#[0-9a-fA-F]{3,8}|(?:rgb|rgba|hsl|hsla)\\([\\d.,%/\\s]+\\)|[a-zA-Z]+)$/;\n\n/** Keep only theme fields whose value is a safe CSS color; drop the rest (they fall back to defaults). */\nexport function sanitizeThemeColors(raw: unknown): SamuelConfig[\"theme\"] {\n  if (!raw || typeof raw !== \"object\") return undefined;\n  const out: Record<string, string> = {};\n  for (const [key, value] of Object.entries(raw as Record<string, unknown>)) {\n    if (typeof value === \"string\" && SAFE_CSS_COLOR.test(value.trim())) {\n      out[key] = value.trim();\n    }\n  }\n  return Object.keys(out).length > 0\n    ? (out as SamuelConfig[\"theme\"])\n    : undefined;\n}\n\n// Same reasoning as the colors above, for the one length param: `border-radius` cannot form a\n// url(), but an unchecked value still reaches the CSSOM, so it is gated to a plain non-negative\n// CSS length. Anything else is dropped and each surface keeps its built-in radius.\n// Unitless `0` is the CSS spelling of square corners, and a pill is idiomatically a large px value,\n// so both must pass or a brand's setting is dropped with no feedback anywhere.\nconst SAFE_CSS_LENGTH = /^(?:0|\\d{1,5}(?:\\.\\d{1,3})?(?:px|rem|em|%))$/;\n\n/** Keep a radius only when it is a plain CSS length; otherwise drop it (defaults stand). */\nexport function sanitizeRadius(raw: string | null): string | undefined {\n  const value = raw?.trim();\n  return value && SAFE_CSS_LENGTH.test(value) ? value : undefined;\n}\n\n/**\n * The card image shapes the dashboard offers, as CSS `aspect-ratio` values. A fixed set, so\n * membership is the whole check. The param is shopper-visible, so anything else is dropped and the\n * 1/1 default stands rather than an invalid value collapsing the image box to zero height.\n * Keep in step with the same list in claire-pixel (`pixel-config.ts`) and the dashboard dropdown.\n */\nconst CARD_IMAGE_RATIOS = [\"1 / 1\", \"4 / 5\", \"3 / 4\", \"2 / 3\", \"16 / 9\"];\n\nexport function sanitizeAspectRatio(raw: string | null): string | undefined {\n  const value = raw?.trim();\n  return value && CARD_IMAGE_RATIOS.includes(value) ? value : undefined;\n}\n\n/** Param name per surface. `radius` is the shared base; the rest are per-surface overrides. */\nconst RADIUS_PARAMS: Record<keyof SamuelRadii, string> = {\n  base: \"radius\",\n  panel: \"radiusPanel\",\n  header: \"radiusHeader\",\n  card: \"radiusCard\",\n  pill: \"radiusPill\",\n  chip: \"radiusChip\",\n  input: \"radiusInput\",\n  bubble: \"radiusBubble\",\n  swatch: \"radiusSwatch\",\n  variant: \"radiusVariant\",\n};\n\n/** Collect the radius params that survived validation, or undefined when none did. */\nexport function radiiFromQuery(p: URLSearchParams): SamuelRadii | undefined {\n  const radii: SamuelRadii = {};\n  for (const [surface, param] of Object.entries(RADIUS_PARAMS)) {\n    const value = sanitizeRadius(p.get(param));\n    if (value) radii[surface as keyof SamuelRadii] = value;\n  }\n  return Object.keys(radii).length > 0 ? radii : undefined;\n}\n\n/**\n * Drop tile-routing context (the `?tile=...` suffix) so a handle is the bare product identity that\n * agents-api and the nav route expect. Tile context is routing metadata, not product identity (see\n * @fermat/react Tile/handles); a polluted handle fails the agents-api anchor lookup and Claire's\n * nav sanitizer. Split-based so it never throws on a bare slug.\n */\nexport function stripHandleContext(handle: string): string {\n  return handle.split(/[?#]/)[0];\n}\n\n/** A URL param that must be a positive whole number of turns; anything else drops off. `Number`\n *  rather than `parseInt`, which would read \"3abc\" as 3. */\nfunction positiveIntParam(raw: string | null): number | undefined {\n  if (!raw) return undefined;\n  const value = Number(raw);\n  return Number.isInteger(value) && value > 0 ? value : undefined;\n}\n\n/** Build the widget config from a query string or parsed params. */\nexport function configFromQuery(\n  search: string | URLSearchParams,\n): SamuelConfig {\n  const p = new URLSearchParams(search);\n  const org = p.get(\"org\") ?? \"\";\n  const surface = surfaceFromQuery(p);\n  const navSink = createNavSink();\n  const atcSink = createAtcSink();\n  const viewCartSink = createViewCartSink();\n  const baked = bakedApiBases();\n  const supportLabel = p.get(\"supportLabel\");\n  const supportPhone = p.get(\"supportPhone\");\n  const themeParam = p.get(\"theme\");\n  let theme: SamuelConfig[\"theme\"];\n  try {\n    theme = themeParam\n      ? sanitizeThemeColors(JSON.parse(themeParam))\n      : undefined;\n  } catch {\n    theme = undefined;\n  }\n  const actionsParam = p.get(\"actions\");\n  let actions: AssistantActionConfig | undefined;\n  try {\n    actions = actionsParam ? JSON.parse(actionsParam) : undefined;\n  } catch {\n    actions = undefined;\n  }\n  const hostPresentation = presentationFromQuery(p);\n  const assistantName = p.get(\"assistantName\")?.trim() || undefined;\n  // Same host allowlist as the brand font faces above: an unvalidated persona avatar could\n  // likewise smuggle an off-origin reference into the publicly-loadable iframe.\n  const assistantAvatarUrl = allowedAssetUrl(p.get(\"assistantAvatarUrl\"));\n  const assistantTagline = p.get(\"assistantTagline\")?.trim() || undefined;\n  const assistantDescription =\n    p.get(\"assistantDescription\")?.trim() || undefined;\n  // Newline-separated rather than JSON: it is a short list of plain sentences, and one bullet per\n  // line is what a brand types into the dashboard field. Blank lines are dropped.\n  const assistantInfoBullets = p\n    .get(\"assistantInfoBullets\")\n    ?.split(\"\\n\")\n    .map((line) => line.trim())\n    .filter(Boolean);\n  const assistant: SamuelConfig[\"assistant\"] =\n    assistantName ||\n    assistantAvatarUrl ||\n    assistantTagline ||\n    assistantDescription ||\n    assistantInfoBullets?.length\n      ? {\n          name: assistantName,\n          avatarUrl: assistantAvatarUrl,\n          tagline: assistantTagline,\n          description: assistantDescription,\n          infoBullets: assistantInfoBullets?.length\n            ? assistantInfoBullets\n            : undefined,\n        }\n      : undefined;\n  const greetingParam = p.get(\"greeting\")?.trim() || undefined;\n  // Route the brand-authored greeting through the existing copy-override mechanism rather than a\n  // second override path; both keys so it wins regardless of the brandName-driven i18next context.\n  const disclaimer = p.get(\"disclaimer\")?.trim() || undefined;\n  const copy: SamuelCopyOverrides | undefined =\n    greetingParam || disclaimer\n      ? {\n          ...(greetingParam\n            ? { greeting: greetingParam, greeting_brand: greetingParam }\n            : {}),\n          ...(disclaimer ? { disclaimer } : {}),\n        }\n      : undefined;\n  return {\n    orgId: org,\n    sampleQuestions: ORG_SAMPLE_QUESTIONS[org],\n    heroProductHandle: stripHandleContext(p.get(\"hero\") ?? \"\"),\n    // The host page's CTA controls visibility; the iframe never shows its own bubble.\n    hideLauncher: true,\n    // warm=1: Claire pre-warms this iframe hidden and commands it open on reveal, so start closed\n    // and skip auto-open/tracking here (the open is tracked once, on the real user action).\n    startClosed: p.get(\"warm\") === \"1\",\n    // The chat panel only knows bubble/drawer/sheet; facade is a separate launch surface that never\n    // mounts the chat, so it collapses to the bubble dismiss control here.\n    presentation:\n      hostPresentation === \"facade\"\n        ? \"bubble\"\n        : (hostPresentation as SamuelConfig[\"presentation\"]),\n    rootProductId: p.get(\"rootProductId\") ?? undefined,\n    heroProductUrl: p.get(\"pageUrl\") ?? undefined,\n    surface,\n    brandName: p.get(\"brand\") ?? undefined,\n    // NOT allowlisted, unlike the persona avatar it falls back to. A brand's logo usually lives on\n    // the brand's own domain (the dashboard Logo URL field sets no host limit), so gating this\n    // blanks real logos. constrainAvatar leaves an off-host logo untouched.\n    brandLogoUrl: p.get(\"brandLogoUrl\") ?? undefined,\n    assistant,\n    copy,\n    // Catalog scope for the chat request. Present on a Fermat funnel; absent on a brand site, which\n    // serves the whole catalog and so stays org-wide.\n    productFunnelId: p.get(\"productFunnelId\") ?? undefined,\n    tileId: p.get(\"tileId\") ?? undefined,\n    fontFamily: p.get(\"fontFamily\") ?? undefined,\n    fontFaces: parseFontFaces(p.get(\"fontFaces\")),\n    fontWeight: p.get(\"fontWeight\") ?? undefined,\n    letterSpacing: p.get(\"letterSpacing\") ?? undefined,\n    lineHeight: p.get(\"lineHeight\") ?? undefined,\n    bodyFontFamily: p.get(\"bodyFontFamily\") ?? undefined,\n    bodyFontFaces: parseFontFaces(p.get(\"bodyFontFaces\")),\n    bodyFontWeight: p.get(\"bodyFontWeight\") ?? undefined,\n    bodyLetterSpacing: p.get(\"bodyLetterSpacing\") ?? undefined,\n    bodyLineHeight: p.get(\"bodyLineHeight\") ?? undefined,\n    support:\n      supportLabel || supportPhone\n        ? { label: supportLabel ?? undefined, phone: supportPhone ?? undefined }\n        : undefined,\n    theme,\n    radius: radiiFromQuery(p),\n    cardImageRatio: sanitizeAspectRatio(p.get(\"cardImageRatio\")),\n    recommendationStrategy: p.get(\"recStrategy\") ?? undefined,\n    actions,\n    // Variant selector (STO-714). Defaults OFF while it is proven on one brand: an absent param\n    // renders no track, and Claire writes \"1\" only for a brand that opted in.\n    variantSelector: p.get(\"variantSelector\") === \"1\",\n    maintenance: p.get(\"maintenance\") === \"1\",\n    welcomeLayout: p.get(\"welcomeLayout\") === \"minimal\" ? \"minimal\" : undefined,\n    // Baked at build time via esbuild define; overridable per request.\n    agentsApiBaseUrl: p.get(\"agentsApiBaseUrl\") ?? baked.agentsApiBaseUrl,\n    productApiBaseUrl: p.get(\"productApiBaseUrl\") ?? baked.productApiBaseUrl,\n    onEvent: createBridgeSink(),\n    // Collapse/expand goes to Claire (it owns the iframe element + a launcher button), but only\n    // when this Claire build advertised the resize handler (hostResize=1). Without it, posting\n    // resize would log a junk pixel event and strand the shopper behind a dead minimize button.\n    onResize: p.get(\"hostResize\") === \"1\" ? createResizeSink() : undefined,\n    // Live-agent handoff (FDE-472). Only wired when Claire says the brand has a channel to hand off\n    // to, so a brand without one renders no header control that leads nowhere. Claire owns which\n    // vendor opens; the widget only reports that the shopper confirmed.\n    onExternalHandoff:\n      p.get(\"externalHandoff\") === \"1\"\n        ? createExternalHandoffSink()\n        : undefined,\n    onOpenLink: p.get(\"links\") === \"1\" ? createOpenLinkSink() : undefined,\n    handoffAfterTurns: positiveIntParam(p.get(\"handoffAfterTurns\")),\n    onAddToCart: (product, variantExternalId) =>\n      atcSink({\n        version: ASSISTANT_ACTION_VERSION,\n        type: \"add_to_cart\",\n        source: \"assistant\",\n        items: [toLineItem(product, variantExternalId)],\n      }),\n    // Post-add \"View Cart\": mirrors onAddToCart, posting a view_cart AssistantAction Claire\n    // re-dispatches so the host opens its own cart. The iframe never holds a cart URL.\n    onViewCart: (product, variantExternalId) =>\n      viewCartSink({\n        version: ASSISTANT_ACTION_VERSION,\n        type: \"view_cart\",\n        source: \"assistant\",\n        items: [toLineItem(product, variantExternalId)],\n      }),\n    // The cross-origin iframe can't navigate its parent, so the click posts a navigate control\n    // message to Claire, which owns navigation policy and moves the host page. Surface picks the\n    // branch (Fermat funnel vs brand PDP); no-ops when not framed.\n    onNavigateToProduct: (product, variantExternalId) => {\n      // Deep-link the recommended variant's brand PDP (?skid=) when one was picked; else product-level.\n      const variant = variantExternalId\n        ? product.productVariants?.find(\n            (v) => v.externalId === variantExternalId,\n          )\n        : undefined;\n      navSink({\n        handle: stripHandleContext(product.handle),\n        productUrl: variant?.productUrl ?? product.productUrl ?? undefined,\n        // Let Claire load the SELECTED product on a DPP route by swapping the trailing path segment:\n        // rootProductId for /pt, externalId for /pf. Ignored on the ?product= and brand-site branches.\n        rootProductId: product.rootProductId,\n        externalId: product.externalId,\n        // The picked variant deep-links via variant_external_id on the DPP route.\n        variantExternalId: variant?.externalId ?? variantExternalId,\n        surface,\n      });\n    },\n  };\n}\n\n/**\n * Apply the brand font to the iframe document: synthesize + inject the @font-face rules from\n * validated primitives and set --font-brand-primary (chat.css reads it). The iframe is a\n * separate document that inherits none of the host page's brand CSS vars, so the host threads\n * the font name + faces; no-op when nothing validates (system fallback stays).\n */\nexport function applyBrandFont(doc: Document, config: SamuelConfig): void {\n  // Display -> --font-brand-primary + --sa-display-*; body -> --fermat-body-fontFamily + --sa-body-*.\n  // Absent body font leaves the family var unset, so chat.css falls back to the display font.\n  const root = doc.documentElement.style;\n  applyFontVar(\n    doc,\n    \"--font-brand-primary\",\n    config.fontFamily,\n    config.fontFaces,\n  );\n  applyFontVar(\n    doc,\n    \"--fermat-body-fontFamily\",\n    config.bodyFontFamily,\n    config.bodyFontFaces,\n  );\n  applySectionTypography(\n    root,\n    \"display\",\n    config.fontWeight,\n    config.letterSpacing,\n    config.lineHeight,\n  );\n  applySectionTypography(\n    root,\n    \"body\",\n    config.bodyFontWeight,\n    config.bodyLetterSpacing,\n    config.bodyLineHeight,\n  );\n}\n\n/**\n * Apply the brand's theme palette to the iframe document root, the same technique applyBrandFont\n * uses for fonts. The chat panel path (mountIframeApp -> Samuel -> SamuelInner) already themes\n * itself via an inline `style` prop; the facade path (mountFacadeApp) never renders through\n * SamuelInner, so without this it always falls back to chat.css's hard-coded defaults regardless\n * of the brand's real accent color.\n */\nexport function applyThemeVars(doc: Document, config: SamuelConfig): void {\n  const root = doc.documentElement.style;\n  for (const [name, value] of Object.entries(\n    buildThemeVarsMap(config.theme, config.radius, config.cardImageRatio),\n  )) {\n    root.setProperty(name, value);\n  }\n}\n\n/** Validate + inject one brand font's @font-face rules and point a CSS var at its family stack. */\nfunction applyFontVar(\n  doc: Document,\n  cssVar: string,\n  family?: string,\n  faces?: BrandFontFace[],\n): void {\n  const font = buildBrandFontCss(family, faces);\n  if (!font) return;\n  const style = doc.createElement(\"style\");\n  style.textContent = font.fontFaceCss;\n  doc.head.appendChild(style);\n  doc.documentElement.style.setProperty(cssVar, font.fontFamilyStack);\n}\n\n// Bound the URL-supplied typography values before they reach the CSSOM, so the attacker-controllable\n// iframe URL can't smuggle anything. Length = signed/decimal px/rem/em; line-height also allows a\n// unitless multiplier; weight = 100-900 or normal/bold.\nconst CSS_LENGTH = /^-?\\d+(\\.\\d+)?(px|rem|em)$/;\nconst CSS_LINE_HEIGHT = /^\\d+(\\.\\d+)?(px|rem|em)?$/;\nconst CSS_FONT_WEIGHT = /^([1-9]00|normal|bold)$/;\n\n/**\n * Set one section's typography as CSS vars (`--sa-<section>-weight|-letter-spacing|-line-height`)\n * that chat.css consumes with built-in fallbacks. Per-section (not root), so display and body are\n * independent and nothing leaks globally. Skips any value that fails validation.\n */\nexport function applySectionTypography(\n  root: CSSStyleDeclaration,\n  section: \"display\" | \"body\",\n  weight?: string,\n  letterSpacing?: string,\n  lineHeight?: string,\n): void {\n  if (weight && CSS_FONT_WEIGHT.test(weight)) {\n    root.setProperty(`--sa-${section}-weight`, weight);\n  }\n  if (letterSpacing && CSS_LENGTH.test(letterSpacing)) {\n    root.setProperty(`--sa-${section}-letter-spacing`, letterSpacing);\n  }\n  if (lineHeight && CSS_LINE_HEIGHT.test(lineHeight)) {\n    root.setProperty(`--sa-${section}-line-height`, lineHeight);\n  }\n}\n\n/**\n * Dev/QA only: seed playground sessionStorage from query params so the standalone app reopens as if\n * the shopper navigated here mid-conversation (the playground has no host to fire a real nav):\n *   - `navSeed`  (JSON `{handle,name}`)          \u2192 the post-navigation landing flag Samuel reads.\n *   - `convSeed` (JSON `{messages,conversationId}`) \u2192 a prior conversation restored under the block.\n * No-op when a param is absent or malformed; keyed by `org` to match Samuel's `storageNamespace ?? orgId`.\n */\nexport function seedNavFromQuery(search: string): void {\n  const p = new URLSearchParams(search);\n  const org = p.get(\"org\") ?? \"\";\n  // navSeed \u2192 the post-navigation landing flag Samuel reads on reopen.\n  const nav = p.get(\"navSeed\");\n  if (nav) {\n    try {\n      const seed = JSON.parse(nav) as { handle?: string; name?: string };\n      if (seed?.handle && seed?.name) {\n        writeToSessionStorage(\n          `fermat-sa-navigated-product:${org}`,\n          JSON.stringify({ handle: seed.handle, name: seed.name }),\n        );\n      }\n    } catch {\n      // Malformed navSeed: ignore (playground input error, not a runtime concern).\n    }\n  }\n  // convSeed \u2192 a prior conversation, so reopen shows the shopper's earlier chat under the landing\n  // block (the \"we navigated here from the conversation\" view). Passed through verbatim; Samuel's\n  // own loadPersistedMessages hydrates it (keys byte-identical to useChatMutation's).\n  const conv = p.get(\"convSeed\");\n  if (conv) {\n    try {\n      const parsed = JSON.parse(conv) as {\n        messages?: unknown;\n        conversationId?: string;\n      };\n      if (Array.isArray(parsed?.messages)) {\n        writeToSessionStorage(\n          `fermat-chat-messages:${org}`,\n          JSON.stringify(parsed.messages),\n        );\n      }\n      // Set or CLEAR the id: without a real server conversation, any leftover id (e.g. from a prior\n      // playground run in this tab) makes agents-api 500 on \"Error managing conversation\", so a\n      // convSeed lacking one must remove the stale key rather than leave it.\n      if (typeof parsed?.conversationId === \"string\") {\n        writeToSessionStorage(\n          `fermat-chat-conversation-id:${org}`,\n          parsed.conversationId,\n        );\n      } else {\n        removeFromSessionStorage(`fermat-chat-conversation-id:${org}`);\n      }\n    } catch {\n      // Malformed convSeed: ignore.\n    }\n  }\n}\n\n/**\n * Mount Samuel into the iframe document. Returns the handle ref so the caller can open it, plus the\n * React root: a discarded root can never be unmounted, so a scheduled commit outlives its document\n * and throws \"window is not defined\" once the environment is gone.\n */\nexport function mountIframeApp(\n  container: HTMLElement,\n  search: string,\n): { ref: RefObject<SamuelHandle>; root: Root } {\n  const ref = createRef<SamuelHandle>();\n  const config = configFromQuery(search);\n  // crypto.randomUUID is unavailable in jsdom test environments; the fallback is test-only.\n  const _sessionId =\n    typeof crypto.randomUUID === \"function\"\n      ? crypto.randomUUID()\n      : `${Math.random().toString(36).slice(2)}-${Math.random()\n          .toString(36)\n          .slice(2)}`;\n  applyBrandFont(container.ownerDocument, config);\n  const { onEvent } = config;\n  const root = createRoot(container);\n  root.render(\n    createElement(Samuel, {\n      ref,\n      config: {\n        ...config,\n        onEvent(event) {\n          onEvent?.(event);\n          if (event.name !== \"Assistant conversation turn completed\") return;\n          // Analytics fire on prod only; dev/local builds must not pollute prod PostHog.\n          if (!isProdEnv()) return;\n          fetch(\"https://ph.fermatcommerce.com/capture/\", {\n            method: \"POST\",\n            headers: { \"Content-Type\": \"application/json\" },\n            keepalive: true,\n            body: JSON.stringify({\n              api_key: process.env.POSTHOG_TOKEN,\n              event: event.name,\n              distinct_id: _sessionId,\n              properties: {\n                ...(event.properties as Record<string, unknown>),\n                $current_url: config.heroProductUrl,\n                $device_type: /Mobi|Android/i.test(navigator.userAgent)\n                  ? \"Mobile\"\n                  : \"Desktop\",\n                host_env: \"third_party_shopping_assistant\",\n                $lib: \"fermat-shopping-assistant\",\n              },\n            }),\n            // eslint-disable-next-line @typescript-eslint/no-empty-function\n          }).catch(() => {});\n        },\n      },\n    }),\n  );\n  return { ref, root };\n}\n\n/**\n * Mount the inline facade launcher (presentation=facade) into the iframe document: a reduced teaser\n * (greeting, suggested-question chips, a \"Message ...\" input) reusing the app's branding/typography.\n * On a chip click or input submit it posts facade_open to the host (Claire), which opens the warm\n * drawer seeded with the prompt. It never mounts the chat runtime.\n */\n/** Wrapper so the questions hook has a component to run in. */\nfunction FacadeApp({\n  config,\n  onSubmit,\n}: {\n  config: SamuelConfig;\n  onSubmit: (prompt: string) => void;\n}): React.ReactElement {\n  // The facade re-grounds on navigation exactly like the chat panel does. Its iframe URL is built\n  // once and carries the page the shopper started on, so without this its chips stay pinned to that\n  // page for the whole session. The host's report wins as soon as one arrives; until then the\n  // mount-time values stand. Both fields come from the same report, so a category page clears the\n  // product rather than keeping the previous page's.\n  const hostPage = useSyncExternalStore(\n    subscribeHostPageContext,\n    getHostPageContext,\n    getHostPageContext,\n  );\n  const pageUrl = hostPage ? hostPage.pageUrl : config.heroProductUrl;\n  const productHandle = hostPage\n    ? hostPage.productHandle\n    : config.heroProductHandle;\n  const { questions: serverQuestions, isResolving } = usePrePopulatedQuestions(\n    pageUrl,\n    productHandle,\n  );\n  return createElement(SamuelFacade, {\n    brandName: config.brandName,\n    brandLogoUrl: config.brandLogoUrl,\n    assistantAvatarUrl: config.assistant?.avatarUrl,\n    assistantName: config.assistant?.name,\n    assistantTagline: config.assistant?.tagline,\n    suggestedQuestions: resolveStarterQuestions(\n      serverQuestions,\n      config.sampleQuestions,\n    ),\n    suggestionsResolving: isResolving,\n    hasHero: !!productHandle,\n    onSubmit,\n  });\n}\n\nexport function mountFacadeApp(container: HTMLElement, search: string): Root {\n  const config = configFromQuery(search);\n  applyBrandFont(container.ownerDocument, config);\n  applyThemeVars(container.ownerDocument, config);\n  const facadeOpen = createFacadeOpenSink();\n  // SamuelFacade calls useTranslation(), so it needs the same widget-scoped i18n instance the chat\n  // panel (Samuel) provides. Without this wrapper the facade renders outside any I18nextProvider and\n  // its copy falls back to raw keys for brands that do not override sampleQuestions.\n  const root = createRoot(container);\n  root.render(\n    createElement(\n      QueryClientProvider,\n      { client: new QueryClient() },\n      createElement(\n        SamuelConfigContext.Provider,\n        { value: config },\n        createElement(\n          I18nextProvider,\n          { i18n: createSamuelI18n(config) },\n          createElement(FacadeApp, { config, onSubmit: facadeOpen }),\n        ),\n      ),\n    ),\n  );\n  return root;\n}\n\n/**\n * The facade's height for the host to apply to the inline iframe. `#samuel-root` is `height: 100%`\n * of the iframe viewport (iframe.css) and scrollHeight can never report below it, so both track the\n * height the host already applied. The rendered card is the only box that follows the real content\n * in both directions, so prefer it and fall back only before React commits.\n */\nexport function measureFacadeHeight(el: HTMLElement): number {\n  const content = el.firstElementChild;\n  if (content) return Math.ceil(content.getBoundingClientRect().height);\n  const doc = el.ownerDocument;\n  return Math.ceil(\n    Math.max(\n      el.getBoundingClientRect().height,\n      doc.documentElement.scrollHeight,\n      doc.body?.scrollHeight ?? 0,\n    ),\n  );\n}\n\n/**\n * Post the facade's rendered height to the host (createHeightSink), rAF-debounced, whenever it\n * changes, so Claire auto-sizes the inline iframe. No-op where ResizeObserver is unavailable.\n */\n/* istanbul ignore next -- runtime glue, needs ResizeObserver (absent in jsdom) */\nfunction armFacadeHeightSink(el: HTMLElement): void {\n  if (typeof ResizeObserver === \"undefined\") return;\n  const postHeight = createHeightSink();\n  let rafId: number | null = null;\n  const measure = (): void => {\n    rafId = null;\n    const h = measureFacadeHeight(el);\n    if (h > 0) postHeight(h);\n  };\n  const schedule = (): void => {\n    if (rafId !== null) return;\n    rafId = requestAnimationFrame(measure);\n  };\n  const ro = new ResizeObserver(schedule);\n  ro.observe(el);\n  // The root is viewport-locked, so it never resizes when the card itself grows (server starter\n  // questions landing adds a row of chips). Without observing the card the host keeps the first,\n  // pre-chip height and the iframe clips the chips and the input.\n  let observed: Element | null = null;\n  const observeContent = (): void => {\n    const content = el.firstElementChild;\n    if (content === observed) return;\n    if (observed) ro.unobserve(observed);\n    observed = content;\n    if (content) {\n      ro.observe(content);\n      schedule();\n    }\n  };\n  observeContent();\n  new MutationObserver(observeContent).observe(el, { childList: true });\n}\n\n// Auto-bootstrap when loaded as the iframe document. Facade: mount the reduced launcher + arm the\n// height sink. Standalone chat: auto-open. Warm (Claire-injected) chat: stay closed and act on the\n// host's open/close commands so the open is tracked on the real reveal.\n/* istanbul ignore next -- runtime document glue, not exercised in jsdom */\nif (typeof document !== \"undefined\") {\n  const el = document.getElementById(\"samuel-root\");\n  // Start client-side error logging before mount so failures during bootstrap are captured, but\n  // only when this IS the iframe document. src/preview/mount.tsx imports this module for its\n  // exported translators, and Datadog's global error handlers must not attach to the page that did\n  // that. The command listener below stays unconditional: it is under test, and with no root to\n  // mount it only writes a module store nothing reads.\n  if (el) initShoppingAssistantLogging();\n  const params =\n    typeof window !== \"undefined\"\n      ? new URLSearchParams(window.location.search)\n      : new URLSearchParams(\"\");\n  // Host command channel, registered ABOVE the facade/chat split on purpose. `page_context` has to\n  // reach whichever root mounted: the facade has no chat runtime to hand it to, but it renders\n  // starter questions from the same page and was previously left grounded on its mount-time page for\n  // the whole session. open/close still only mean anything to the chat root, so they are routed\n  // through this ref, which stays null on the facade.\n  // Points at the chat root's ref once that root mounts, and stays null on the facade. The ref\n  // OBJECT is held rather than its value: React fills `.current` asynchronously after commit, so\n  // copying the value at registration time would capture null forever.\n  let chatRef: RefObject<SamuelHandle | null> | null = null;\n  window.addEventListener(\"message\", (event: MessageEvent) => {\n    // Source identity IS the boundary here, on purpose: no origin allowlist. Another site cannot\n    // pose as window.parent, and these commands only open/close the panel or name the host's page.\n    if (event.source !== window.parent) return;\n    const data = event.data as {\n      __samuelCmd?: string;\n      track?: boolean;\n      prompt?: string;\n      productHandle?: string;\n      pageUrl?: string;\n    } | null;\n    if (!data || typeof data !== \"object\") return;\n    if (data.__samuelCmd === \"open\") {\n      // A facade seed prompt (when present) becomes the drawer's first user turn.\n      const prompt =\n        typeof data.prompt === \"string\" && data.prompt.trim().length > 0\n          ? data.prompt\n          : undefined;\n      chatRef?.current?.open(prompt, \"chat_tab\", data.track !== false);\n    } else if (data.__samuelCmd === \"close\") {\n      chatRef?.current?.close();\n    } else if (data.__samuelCmd === \"page_context\") {\n      // A single-page host reporting a route change. Both fields are sent every time, so an absent\n      // product on a category page clears the previous page's product rather than leaving the\n      // assistant grounded on it. Normalized once here, then read by both roots.\n      const next = {\n        productHandle:\n          typeof data.productHandle === \"string\"\n            ? data.productHandle\n            : undefined,\n        pageUrl: typeof data.pageUrl === \"string\" ? data.pageUrl : undefined,\n      };\n      setHostPageContext(next);\n      chatRef?.current?.setPageContext(next);\n    }\n  });\n  if (el && presentationFromQuery(params) === \"facade\") {\n    // Facade: mount the reduced launcher + arm the height sink. No chat runtime and no ready\n    // handshake (there is no warm drawer to reveal here), but it does read page_context, through the\n    // store the listener above writes.\n    // Maintenance leaves the facade unmounted and its height sink unarmed, so the host's inline\n    // iframe stays at 0 height. A teaser that invites a message it cannot deliver is worse than none.\n    if (params.get(\"maintenance\") !== \"1\") {\n      mountFacadeApp(el, window.location.search);\n      if (params.get(\"hostResize\") === \"1\") armFacadeHeightSink(el);\n    }\n  } else if (el) {\n    const warm = params.get(\"warm\") === \"1\";\n    // Dev/QA seed for the post-navigation landing block. SAMUEL_DEV_SEED is defined only for\n    // playground builds, so in prod this guard is statically false and esbuild eliminates the call:\n    // the seed can never run in the prod bundle, so a crafted iframe URL can't inject a fake prior\n    // conversation/landing block. In the playground it writes the same sessionStorage flags a\n    // Samuel-driven nav would, so the standalone app reopens into the landing view.\n    if (process.env.SAMUEL_DEV_SEED === \"1\") {\n      seedNavFromQuery(window.location.search);\n    }\n    const { ref } = mountIframeApp(el, window.location.search);\n    // Hand the hoisted command listener this root's ref. Until now open/close/page_context were\n    // wired to a listener registered inside this branch, which is why the facade received none.\n    chatRef = ref;\n    // React 18 commits asynchronously; poll a bounded number of frames, then signal readiness.\n    const signalReady = (attempts: number): void => {\n      if (ref.current) {\n        // Standalone keeps auto-opening; warm waits for the host's open command.\n        if (!warm) ref.current.open(undefined, \"chat_tab\");\n        // Tell the host the app is mounted so it can reveal + command open without a blank panel.\n        if (window.parent !== window) {\n          window.parent.postMessage({ __claire: \"bridge\", type: \"ready\" }, \"*\");\n        }\n      } else if (attempts > 0) {\n        requestAnimationFrame(() => signalReady(attempts - 1));\n      }\n    };\n    signalReady(60);\n  }\n}\n", "import type { ChatOpenedSource, SamuelConfig } from \"../types\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport React, {\n  forwardRef,\n  useCallback,\n  useEffect,\n  useImperativeHandle,\n  useRef,\n  useState,\n} from \"react\";\nimport {\n  SamuelConfigContext,\n  useSamuelConfig,\n} from \"../context/config-context\";\nimport {\n  readFromSessionStorage,\n  removeFromSessionStorage,\n  writeToSessionStorage,\n} from \"../util/session-storage\";\nimport {\n  DEFAULT_RECOMMENDATION_STRATEGY,\n  resolveStarterQuestions,\n  usePrePopulatedQuestions,\n  useProductByUrl,\n} from \"../hooks/queries\";\nimport { ChatAnalyticsContext } from \"../context/ChatAnalyticsContext\";\nimport { ChatButton } from \"./ChatButton\";\nimport { ChatPanel } from \"./ChatPanel\";\nimport { I18nextProvider } from \"react-i18next\";\nimport { ProductV1 } from \"@fermat/product-api\";\nimport { createSamuelI18n } from \"../i18n\";\nimport { useChatAnalytics } from \"../hooks/useChatAnalytics\";\nimport { useChatMutation } from \"../hooks/useChatMutation\";\nimport { cn } from \"../util/cn\";\nimport { buildThemeVarsMap } from \"../util/theme-vars\";\n\n/** A product the shopper reached by clicking it inside Samuel. Persisted across the\n *  host-driven navigation so the reopened assistant can surface it inline. */\ninterface NavigatedProduct {\n  handle: string;\n  name: string;\n}\n\nconst chatVotesKey = (ns: string) => `fermat-chat-votes:${ns}`;\n\nfunction readStoredVotes(ns: string): Record<string, \"up\" | \"down\"> {\n  const raw = readFromSessionStorage(chatVotesKey(ns));\n  if (!raw) return {};\n  try {\n    const parsed = JSON.parse(raw) as unknown;\n    if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n      return {};\n    }\n    const out: Record<string, \"up\" | \"down\"> = {};\n    for (const [id, vote] of Object.entries(parsed)) {\n      if (vote === \"up\" || vote === \"down\") out[id] = vote;\n    }\n    return out;\n  } catch {\n    return {};\n  }\n}\n\n/** Compare two product handles tolerantly. The persisted handle comes from the carousel's\n *  product-api ProductV1; the resolved handle comes from the host (funnel heroProductHandle) or\n *  by-url resolution, which can arrive scheme-stripped or differently cased. Case-insensitive, and\n *  the platform scheme (e.g. `rithum://`) is dropped ONLY for a bare-vs-schemed comparison: when both\n *  handles carry a scheme it is part of the product identity (a migrated/multi-platform feed can share\n *  a shop/path across schemes), so differing schemes must NOT compare equal. */\nconst HANDLE_SCHEME = /^[a-z][a-z0-9+.-]*:\\/\\//;\nexport function sameProduct(a: string, b: string): boolean {\n  const al = a.toLowerCase();\n  const bl = b.toLowerCase();\n  if (al === bl) return true;\n  // Both schemed and not already equal: schemes differ, so these are different products.\n  if (HANDLE_SCHEME.test(al) && HANDLE_SCHEME.test(bl)) return false;\n  // At most one is schemed: strip it so a bare handle matches its schemed twin.\n  return al.replace(HANDLE_SCHEME, \"\") === bl.replace(HANDLE_SCHEME, \"\");\n}\n\nexport interface SamuelProps {\n  /** The host contract  -  identity, theme, support, callbacks, analytics sink. */\n  config: SamuelConfig;\n}\n\n/** Imperative control surface  -  hosts hold a ref and drive the chat without owning its state. */\nexport interface SamuelHandle {\n  /** track=false opens without firing chat_opened (a host restore after navigation, not a fresh open). */\n  open: (query?: string, source?: ChatOpenedSource, track?: boolean) => void;\n  close: () => void;\n  reset: () => void;\n  /** Report the surface the shopper is now on. Hosts whose pages are a single page app must call\n   *  this on every route change; the mount-time query params only describe the first page.\n   *\n   *  Pass BOTH fields every time, `undefined` included. The update merges, so an omitted key reads\n   *  as \"no opinion\" and leaves the previous page's value in place: omitting productHandle on a\n   *  category page keeps the assistant grounded on the product the shopper just left. */\n  setPageContext: (context: {\n    productHandle?: string;\n    pageUrl?: string;\n  }) => void;\n}\n\nfunction useIsMobile(): boolean {\n  const query = \"(max-width: 767px)\";\n  const [isMobile, setIsMobile] = useState(\n    () => typeof window !== \"undefined\" && window.matchMedia(query).matches,\n  );\n  useEffect(() => {\n    if (typeof window === \"undefined\") return;\n    const mql = window.matchMedia(query);\n    const onChange = () => setIsMobile(mql.matches);\n    mql.addEventListener(\"change\", onChange);\n    return () => mql.removeEventListener(\"change\", onChange);\n  }, []);\n  return isMobile;\n}\n\nconst SamuelInner = forwardRef<SamuelHandle>((_props, ref) => {\n  const config = useSamuelConfig();\n  const isMobile = useIsMobile();\n  const openTimestampRef = useRef<number | null>(null);\n  const mobileContainerRef = useRef<HTMLDivElement>(null);\n\n  // The product the shopper clicked inside Samuel and got navigated to, surfaced inline on the\n  // reopened assistant. Persisted under the same namespace as the conversation (see useChatMutation).\n  const navStorageKey = `fermat-sa-navigated-product:${\n    config.storageNamespace ?? config.orgId\n  }`;\n  const votesStorageNs = config.storageNamespace ?? config.orgId;\n  const [landingProduct, setLandingProduct] = useState<NavigatedProduct | null>(\n    null,\n  );\n  // Where in the transcript the landing block belongs: the message count at the moment the shopper\n  // came back from the product they clicked. It is part of what the assistant showed them, so it\n  // stays put and later turns render BELOW it, instead of being hoisted to the bottom or deleted.\n  const [landingAfterIndex, setLandingAfterIndex] = useState(0);\n  // Vote locks live here (not in ChatMessages) so minimize/reopen and session hydration keep the\n  // one-vote-per-message contract. Same namespace as the persisted conversation.\n  const [votes, setVotes] = useState<Record<string, \"up\" | \"down\">>(() =>\n    readStoredVotes(votesStorageNs),\n  );\n  const navCheckedRef = useRef(false);\n\n  useEffect(() => {\n    writeToSessionStorage(chatVotesKey(votesStorageNs), JSON.stringify(votes));\n  }, [votes, votesStorageNs]);\n\n  // Brand palette \u2192 CSS variables on the widget roots. Only set vars the brand actually provided;\n  // every chat.css rule carries the original value as an inline `var(--sa-*, <default>)` fallback,\n  // so an omitted field keeps the default and an empty theme renders identically to before.\n  const themeVars = buildThemeVarsMap(\n    config.theme,\n    config.radius,\n    config.cardImageRatio,\n  ) as React.CSSProperties;\n\n  // Live page context, seeded from the mount-time query params and replaced whenever the host\n  // reports a route change. A Fermat funnel is a single page app: the iframe is built once at SSR,\n  // so without this the assistant answers about the funnel's hero product forever, whatever the\n  // shopper has navigated to since (STO-711).\n  const [pageContext, setPageContext] = useState<{\n    productHandle?: string;\n    pageUrl?: string;\n  }>({\n    productHandle: config.heroProductHandle,\n    pageUrl: config.heroProductUrl,\n  });\n  const heroProductHandle = pageContext.productHandle;\n  const heroProductUrl = pageContext.pageUrl;\n\n  const analytics = useChatAnalytics({\n    productHandle: heroProductHandle,\n    orgId: config.orgId,\n    productFunnelId: config.productFunnelId,\n  });\n\n  const buildProductUrl = (handle: string): string => {\n    if (config.buildProductUrl) return config.buildProductUrl(handle);\n    if (typeof window === \"undefined\") return handle;\n    const url = new URL(window.location.href);\n    url.searchParams.set(\"product\", handle);\n    url.searchParams.delete(\"variant_external_id\");\n    return url.origin + url.pathname + url.search;\n  };\n\n  const { messages, sendMessage, resetChat, isLoading, error, conversationId } =\n    useChatMutation({\n      orgId: config.orgId,\n      heroProductHandle,\n      heroProductUrl,\n      productFunnelId: config.productFunnelId,\n      tileId: config.tileId,\n      agentsApiBaseUrl: config.agentsApiBaseUrl,\n      storageNamespace: config.storageNamespace,\n      capabilities: {\n        contactLinks: Boolean(config.onOpenLink),\n        externalHandoff: Boolean(config.onExternalHandoff),\n        handoffAfterTurns: config.handoffAfterTurns,\n      },\n      onMessageSent: ({\n        messageType,\n        messageIndex,\n        conversationId: convId,\n        suggestedReplyText,\n        suggestedReplyIndex,\n        suggestedRepliesOfferedCount,\n      }) => {\n        if (messageIndex === 0) {\n          analytics.trackChatInteracted(messageType);\n        }\n        analytics.trackMessageSent({\n          messageType,\n          messageIndex,\n          conversationId: convId,\n          suggestedReplyText,\n          suggestedReplyIndex,\n          suggestedRepliesOfferedCount,\n        });\n      },\n      onConversationTurnCompleted: ({\n        conversationId: convId,\n        userMessage,\n        assistantMessage,\n        recommendedProductHandles,\n        carouselHeading,\n        suggestedReplies,\n        clarifyingQuestion,\n        suggestHandoff,\n        handoffReason,\n      }) => {\n        if (suggestHandoff && config.onExternalHandoff) {\n          analytics.trackExternalHandoffSuggested(\n            messages.length,\n            handoffReason,\n          );\n        }\n        const recommendedProductFunnelUrls = recommendedProductHandles?.map(\n          (handle) => buildProductUrl(handle),\n        );\n        analytics.trackConversationCompleted({\n          conversationId: convId,\n          userMessage,\n          assistantMessage,\n          recommendedProductFunnelUrls,\n          carouselHeading,\n          suggestedReplies,\n          clarifyingQuestion,\n        });\n      },\n      onChatError: ({\n        conversationId: convId,\n        status,\n        errorName,\n        mode,\n        messageType,\n        responseTimeMs,\n      }) => {\n        analytics.trackChatError({\n          conversationId: convId,\n          status,\n          errorName,\n          mode,\n          messageType,\n          responseTimeMs,\n        });\n      },\n    });\n\n  const hasExistingUserMessages = messages.some((m) => m.role === \"user\");\n  // startClosed: the host (Claire) pre-warms this iframe hidden and commands open on reveal, so it\n  // must NOT auto-open or fire chat_opened here even with prior history (that would phantom-count).\n  const startClosed = config.startClosed ?? false;\n  const [isOpen, setIsOpen] = useState(\n    startClosed ? false : hasExistingUserMessages,\n  );\n\n  useEffect(() => {\n    if (!startClosed && hasExistingUserMessages) {\n      openTimestampRef.current = Date.now();\n      analytics.trackChatOpened(messages.length);\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps -- mount-only\n  }, []);\n\n  // On-screen keyboard handling is owned by the host (claire-pixel sizes the iframe from the parent\n  // visualViewport). Do not re-add an iframe-side visualViewport effect here: the cross-origin iframe's\n  // own visualViewport is unreliable for the keyboard, so it would fight the host, not help.\n\n  const handleOpen = (source?: ChatOpenedSource, track = true) => {\n    setIsOpen(true);\n    openTimestampRef.current = Date.now();\n    if (track) analytics.trackChatOpened(messages.length, source);\n    config.onOpenChange?.(true);\n    config.onResize?.(\"expanded\");\n  };\n\n  const handleClose = () => {\n    setIsOpen(false);\n    const duration = openTimestampRef.current\n      ? Date.now() - openTimestampRef.current\n      : 0;\n    analytics.trackChatClosed(messages.length, duration);\n    openTimestampRef.current = null;\n    config.onOpenChange?.(false);\n    // Asks Claire to collapse to its launcher (and tear the iframe down). In the iframe the\n    // panel's minimize chevron is the only close affordance, so this is the collapse trigger.\n    config.onResize?.(\"collapsed\");\n  };\n\n  const handleSend = (\n    message: string,\n    messageType: \"suggestion\" | \"typed\" = \"typed\",\n  ) => {\n    // The landing block is NOT cleared here. It is a turn the shopper was shown, so it stays in\n    // the transcript at landingAfterIndex; ChatMessages stops it suppressing the newest turn's\n    // chips/question on its own, once it is no longer the last thing in the transcript.\n    sendMessage(message, messageType);\n  };\n\n  const handleReset = useCallback(() => {\n    analytics.trackChatReset(messages.length, conversationId);\n    setLandingProduct(null);\n    setLandingAfterIndex(0);\n    setVotes({});\n    removeFromSessionStorage(chatVotesKey(votesStorageNs));\n    resetChat();\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [messages.length, conversationId, votesStorageNs]);\n\n  const configOnExternalHandoff = config.onExternalHandoff;\n  const handleExternalHandoff = useCallback(() => {\n    analytics.trackExternalHandoff(messages.length);\n    configOnExternalHandoff?.();\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [messages.length, configOnExternalHandoff]);\n\n  const handleExternalHandoffStage = useCallback(\n    (stage: \"prompted\" | \"dismissed\") => {\n      if (stage === \"prompted\") {\n        analytics.trackExternalHandoffPrompted(messages.length);\n      } else {\n        analytics.trackExternalHandoffDismissed(messages.length);\n      }\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [messages.length],\n  );\n\n  useImperativeHandle(ref, () => ({\n    open: (query?: string, source?: ChatOpenedSource, track = true) => {\n      handleOpen(source ?? \"search\", track);\n      if (query) handleSend(query);\n    },\n    close: handleClose,\n    reset: handleReset,\n    // Merge rather than replace: a host that knows only the URL (a category page) must not wipe a\n    // product handle it never had, and passing an explicit `undefined` still clears one.\n    setPageContext: (context) =>\n      setPageContext((prev) => ({ ...prev, ...context })),\n  }));\n\n  const handleProductClicked = (\n    handle: string,\n    source: \"welcome_recs\" | \"assistant_response\",\n    variantExternalId?: string,\n  ) => {\n    analytics.trackProductClicked(\n      handle,\n      source,\n      conversationId,\n      variantExternalId,\n    );\n  };\n\n  const handleProductATCClicked = (\n    handle: string,\n    source: \"welcome_recs\" | \"assistant_response\",\n    variantExternalId?: string,\n  ) => {\n    analytics.trackProductATCClicked(\n      handle,\n      source,\n      conversationId,\n      variantExternalId,\n    );\n  };\n\n  const handleFeedback = (\n    vote: \"up\" | \"down\",\n    assistantMessageIndex: number,\n    feedbackText?: string,\n  ) => {\n    analytics.trackFeedbackSubmitted({\n      vote,\n      assistantMessageIndex,\n      conversationId,\n      feedbackText,\n    });\n  };\n\n  const handleRecordVote = (messageId: string, vote: \"up\" | \"down\") => {\n    setVotes((prev) =>\n      prev[messageId] !== undefined ? prev : { ...prev, [messageId]: vote },\n    );\n  };\n\n  // Persist the clicked product before handing the navigation to the host, so the reopened\n  // assistant on the destination page knows the shopper arrived here via a Samuel click (a\n  // deterministic client-side signal, no agent round-trip) and can surface it inline.\n  const handleNavigateToProduct = (\n    product: ProductV1,\n    variantExternalId?: string,\n  ) => {\n    writeToSessionStorage(\n      navStorageKey,\n      JSON.stringify({ handle: product.handle, name: product.name }),\n    );\n    config.onNavigateToProduct?.(product, variantExternalId);\n  };\n\n  // Brand-site (org-only) has no threaded rootProductId; resolve the viewed product from the page\n  // URL via product-api's by-url reverse-map to seed the carousel, as a funnel does with its\n  // rootProductId. Gate on `surface`, not productFunnelId/tileId: the iframe host never populates\n  // those, so a fermat-funnel iframe would otherwise by-url a Fermat URL. Off when a rootProductId\n  // is already threaded (funnels) or no page URL is known.\n  const isOrgOnly =\n    config.surface !== \"fermat-funnel\" &&\n    !config.productFunnelId &&\n    !config.tileId;\n  const { product: brandSiteHero, isResolving: brandSiteHeroResolving } =\n    useProductByUrl(heroProductUrl, isOrgOnly && !config.rootProductId);\n  // `rootProductId` is threaded once at mount and names the page the iframe was BUILT on, so it\n  // stops being true the moment the host reports a different product. Drop it then, rather than\n  // pairing the old product's recommendations with the new product's name in the same carousel.\n  // Recovering a live one needs the host to send it; no route carries a root product id today.\n  // Normalize both sides: `heroProductHandle` is a required string, so a hero-less lander threads\n  // \"\", while the host bridge reports absence as `undefined`. Compared raw, the first mount-time\n  // report reads as \"navigated away\" and drops rootProductId with no navigation.\n  const heroStillOnMountPage =\n    (pageContext.productHandle || undefined) ===\n    (config.heroProductHandle || undefined);\n  const resolvedRootProductId =\n    (heroStillOnMountPage ? config.rootProductId : undefined) ??\n    brandSiteHero?.rootProductId;\n  const resolvedProductHandle = heroProductHandle || brandSiteHero?.handle;\n  // No recStrategy is threaded on brand-site; default to the funnel's hero-anchored strategy so the\n  // resolved product yields \"similar items\" recs rather than org-wide bestsellers.\n  const resolvedRecommendationStrategy =\n    config.recommendationStrategy ??\n    (brandSiteHero ? DEFAULT_RECOMMENDATION_STRATEGY : undefined);\n\n  // useEffect is required here (no declarative alternative): the nav flag lives in sessionStorage,\n  // external state written by the pre-navigation handler on a prior page load, so it can only be read\n  // imperatively on mount, and consuming it (read then clear) is a side effect, not derivable in render.\n  // On reopen after a Samuel-driven navigation, if the shopper landed on the product they clicked, surface\n  // it inline with next-step chips instead of the stale prior question. One-shot: cleared the first time we\n  // read it; gated on the resolved viewed product (brand-site resolves it from page_url asynchronously).\n  useEffect(() => {\n    if (navCheckedRef.current) return;\n    const raw = readFromSessionStorage(navStorageKey);\n    if (!raw) {\n      navCheckedRef.current = true;\n      return;\n    }\n    if (!resolvedProductHandle) {\n      // No viewed product yet. If by-url is still resolving (brand-site), wait and retry when it\n      // settles. But once it has settled with nothing (non-PDP landing, by-url miss, or a funnel\n      // that threads no hero), consume the flag anyway so a stale one can't fire on a later page.\n      if (brandSiteHeroResolving) return;\n      navCheckedRef.current = true;\n      removeFromSessionStorage(navStorageKey);\n      return;\n    }\n    navCheckedRef.current = true;\n    removeFromSessionStorage(navStorageKey);\n    try {\n      const navigated = JSON.parse(raw) as NavigatedProduct;\n      if (\n        navigated.handle &&\n        resolvedProductHandle &&\n        sameProduct(navigated.handle, resolvedProductHandle)\n      ) {\n        setLandingProduct(navigated);\n        // Anchor it after whatever the shopper had already been shown. Read off the current render\n        // rather than added as a dep: this is a one-shot consume, and re-running it on every new\n        // message would move a block that is meant to stay where it is.\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n        setLandingAfterIndex(messages.length);\n      }\n    } catch {\n      // Malformed value: ignore (already cleared above).\n    }\n  }, [navStorageKey, resolvedProductHandle, brandSiteHeroResolving]);\n\n  const { questions: serverQuestions, isResolving: questionsResolving } =\n    usePrePopulatedQuestions(heroProductUrl, heroProductHandle);\n\n  const sharedPanelProps = {\n    messages,\n    isLoading,\n    error,\n    onSend: handleSend,\n    onReset: handleReset,\n    presentation: config.presentation,\n    brandName: config.brandName,\n    brandLogoUrl: config.brandLogoUrl,\n    assistantName: config.assistant?.name,\n    assistantAvatarUrl: config.assistant?.avatarUrl,\n    assistantTagline: config.assistant?.tagline,\n    assistantDescription: config.assistant?.description,\n    assistantInfoBullets: config.assistant?.infoBullets,\n    recommendationStrategy: resolvedRecommendationStrategy,\n    rootProductId: resolvedRootProductId,\n    productHandle: resolvedProductHandle,\n    // Must collapse to undefined when empty: ChatMessages uses `?? defaultQuestions`, so []\n    // would win and render no pills instead of the i18n defaults.\n    suggestedQuestions: resolveStarterQuestions(\n      serverQuestions,\n      config.sampleQuestions,\n    ),\n    suggestionsResolving: questionsResolving,\n    supportPhone: config.support?.phone,\n    onProductClicked: handleProductClicked,\n    onProductATCClicked: handleProductATCClicked,\n    onFeedback: handleFeedback,\n    votes,\n    onRecordVote: handleRecordVote,\n    // Only wire the persist-then-navigate wrapper when the host can actually navigate. The carousel\n    // calls preventDefault whenever onNavigateToProduct is set, so passing it unconditionally would,\n    // in a widget-owned placement with no host callback, kill the card's native <a href> and strand\n    // the shopper on a no-op. Absent a host callback, leave it undefined so the native link proceeds.\n    onNavigateToProduct: config.onNavigateToProduct\n      ? handleNavigateToProduct\n      : undefined,\n    landingProduct,\n    landingAfterIndex,\n    // Only wire the handoff when the host can actually perform one, so the header never shows a\n    // control that leads nowhere (same reasoning as onNavigateToProduct above).\n    onExternalHandoff: configOnExternalHandoff\n      ? handleExternalHandoff\n      : undefined,\n    onExternalHandoffStage: configOnExternalHandoff\n      ? handleExternalHandoffStage\n      : undefined,\n    onOpenLink: config.onOpenLink,\n  };\n\n  const hl = config.hideLauncher;\n  const showMobileLauncher = !(hl === true || hl === \"mobile\");\n  const showDesktopLauncher = !(hl === true || hl === \"desktop\");\n  // Only offer minimize when the shopper can get back: a launcher we own, or a\n  // host that can collapse + relaunch (config.onResize, set only when the parent\n  // advertised the capability). Otherwise minimizing the host-controlled iframe\n  // would hide the panel with no way to reopen it.\n  const canReopen = !!config.onResize;\n  const bubble = (\n    <ChatButton\n      onClick={() => (isOpen ? handleClose() : handleOpen(\"chat_bubble\"))}\n      isOpen={isOpen}\n    />\n  );\n\n  // Mobile: widget-owned full-screen overlay (no host shop-unmount) + its own launcher.\n  // Skip it when the launcher is host-controlled (hideLauncher === true, e.g. the Claire iframe):\n  // the host sizes the surface, so we render the panel directly. The widget's own viewport is the\n  // narrow iframe, which would otherwise misfire the mobile-fullscreen layout (hidden header, black\n  // support bar) even on desktop.\n  if (isMobile && hl !== true) {\n    return (\n      <>\n        {isOpen && (\n          <div\n            ref={mobileContainerRef}\n            className=\"fermat-chat-mobile-fullscreen fermat-chat-mobile-overlay flex flex-1 flex-col overflow-hidden font-[family-name:var(--fermat-body-fontFamily,var(--font-brand-primary,var(--neue-montreal-font-stack)))] min-[768px]:hidden fixed inset-0 z-[var(--z-chat-bubble,9999)] bg-sa-surface\"\n            style={themeVars}\n          >\n            <ChatPanel\n              isOpen={true}\n              onClose={handleClose}\n              showMinimize={showMobileLauncher || canReopen}\n              {...sharedPanelProps}\n              compact\n            />\n          </div>\n        )}\n        {showMobileLauncher && (\n          <div\n            className=\"fermat-chat-launcher fixed bottom-6 right-6 z-[var(--z-chat-bubble,9999)]\"\n            style={themeVars}\n          >\n            {bubble}\n          </div>\n        )}\n      </>\n    );\n  }\n\n  // Desktop: floating bubble + slide-up panel. When the launcher is host-controlled (Claire iframe),\n  // mark the container so mobile CSS presents it as a full bottom sheet instead of hiding it (the\n  // funnel's `.fermat-chat-container { display:none }` mobile rule would otherwise blank the panel).\n  return (\n    <div\n      className={cn(\n        \"fermat-chat-container fixed bottom-6 right-6 max-[480px]:bottom-4 max-[480px]:right-4 z-[var(--z-chat-bubble,9999)] font-[family-name:var(--fermat-body-fontFamily,var(--font-brand-primary,var(--neue-montreal-font-stack)))]\",\n        !hl && \"max-[767px]:hidden\",\n        hl === true &&\n          \"fermat-chat-host-controlled static bottom-auto right-auto\",\n      )}\n      data-presentation={hl === true ? config.presentation : undefined}\n      style={themeVars}\n    >\n      <ChatPanel\n        isOpen={isOpen}\n        onClose={handleClose}\n        showMinimize={showDesktopLauncher || canReopen}\n        {...sharedPanelProps}\n        compact={hl === true && config.presentation === \"sheet\"}\n      />\n      {showDesktopLauncher && bubble}\n    </div>\n  );\n});\n\nSamuelInner.displayName = \"SamuelInner\";\n\n/** Samuel: host-agnostic shopping-assistant chat. Hold a SamuelHandle ref to drive it imperatively. */\nexport const Samuel = forwardRef<SamuelHandle, SamuelProps>(\n  ({ config }, ref) => {\n    const [queryClient] = useState(() => new QueryClient());\n    // One widget-scoped i18n instance per mount (locale + brand copy overrides baked in). Provided\n    // via context so it never touches a host page's global i18next; components read it with useTranslation.\n    const [i18n] = useState(() => createSamuelI18n(config));\n    return (\n      <QueryClientProvider client={queryClient}>\n        <I18nextProvider i18n={i18n}>\n          <SamuelConfigContext.Provider value={config}>\n            <ChatAnalyticsContext.Provider\n              value={{ captureEvent: config.onEvent ?? (() => undefined) }}\n            >\n              <SamuelInner ref={ref} />\n            </ChatAnalyticsContext.Provider>\n          </SamuelConfigContext.Provider>\n        </I18nextProvider>\n      </QueryClientProvider>\n    );\n  },\n);\n\nSamuel.displayName = \"Samuel\";\n\nexport default Samuel;\n", "import { createContext, useContext } from \"react\";\nimport type { SamuelConfig } from \"../types\";\n\n/** Carries the host contract to every nested chat component. */\nexport const SamuelConfigContext = createContext<SamuelConfig | null>(null);\n\nexport function useSamuelConfig(): SamuelConfig {\n  const config = useContext(SamuelConfigContext);\n  if (!config) {\n    throw new Error(\"useSamuelConfig must be used within a <Samuel> root.\");\n  }\n  return config;\n}\n", "// SSR-safe sessionStorage helpers.\n\nfunction isSessionStorageAvailable(): boolean {\n  const test = \"test\";\n  try {\n    sessionStorage.setItem(test, test);\n    sessionStorage.removeItem(test);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nexport function readFromSessionStorage(key: string): string | null {\n  if (typeof window === \"undefined\" || !isSessionStorageAvailable())\n    return null;\n  return sessionStorage.getItem(key);\n}\n\nexport function writeToSessionStorage(key: string, value: string): void {\n  if (typeof window === \"undefined\" || !isSessionStorageAvailable()) return;\n  sessionStorage.setItem(key, value);\n}\n\nexport function removeFromSessionStorage(key: string): void {\n  if (typeof window === \"undefined\" || !isSessionStorageAvailable()) return;\n  sessionStorage.removeItem(key);\n}\n", "import type { ProductV1 } from \"@fermat/product-api\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useSamuelConfig } from \"../context/config-context\";\n\nconst DEFAULT_PRODUCT_API_BASE_URL = \"https://api.fermatcommerce.com/product\";\nconst DEFAULT_AGENTS_API_BASE_URL = \"https://agents-public.fermatcommerce.com\";\n\n// product-api's recs endpoint only accepts: category_bestsellers_v1, copurchased_v1, coatc_v1,\n// embedding_rrf, session_viewed_v1 (go/product-api/internal/rest_product_recs.go). \"best_sellers\"\n// is not one of them and 400s. embedding_rrf matches the strategy already hardcoded for this\n// widget's production embed (FermatPixel.tsx) and its brand-site-hero default (Samuel.tsx).\nexport const DEFAULT_RECOMMENDATION_STRATEGY = \"embedding_rrf\";\n\nexport function buildOrgProductUrl(\n  base: string,\n  orgId: string,\n  handle: string,\n): string {\n  return `${base}/v1/orgs/${orgId}/products?handle=${encodeURIComponent(\n    handle,\n  )}`;\n}\n\nexport function buildOrgRecsUrl(\n  base: string,\n  orgId: string,\n  strategy: string,\n  rootProductId: string,\n): string {\n  return `${base}/v1/orgs/${orgId}/recommendations/${encodeURIComponent(\n    strategy,\n  )}/${encodeURIComponent(rootProductId)}`;\n}\n\nexport function buildProductByUrlUrl(\n  base: string,\n  orgId: string,\n  pageUrl: string,\n): string {\n  return `${base}/v1/orgs/${orgId}/products/by-url?url=${encodeURIComponent(\n    pageUrl,\n  )}`;\n}\n\nexport function parseRecsToHandles(body: {\n  recommendedProducts?: { handle: string }[];\n}): { handle: string }[] {\n  return (body.recommendedProducts ?? []).map((r) => ({ handle: r.handle }));\n}\n\nasync function defaultFetchProductsByHandle(\n  base: string,\n  orgId: string,\n  handles: string[],\n): Promise<ProductV1[]> {\n  // Tolerate partial failures: a single stale/invalid recommended handle should not\n  // blank the whole carousel, drop failures and return what loaded.\n  const settled = await Promise.allSettled(\n    handles.map(async (handle) => {\n      const res = await fetch(buildOrgProductUrl(base, orgId, handle));\n      if (!res.ok) {\n        // A recommended handle that fails to hydrate is dropped below (allSettled), which blanks the\n        // carousel while the answer text still renders. Log the status + handle + org so the cause is\n        // visible: a 404 is a wrong/empty org, a 400 is a scheme-stripped handle (see queries tests).\n        // eslint-disable-next-line no-console\n        console.warn(\"[Samuel] product hydration failed\", {\n          status: res.status,\n          handle,\n          orgId,\n          base,\n        });\n        throw new Error(`Failed to fetch product: ${handle} (${res.status})`);\n      }\n      return res.json() as Promise<ProductV1>;\n    }),\n  );\n  return settled\n    .filter(\n      (s): s is PromiseFulfilledResult<ProductV1> => s.status === \"fulfilled\",\n    )\n    .map((s) => s.value);\n}\n\nasync function defaultFetchRecommendations(\n  base: string,\n  orgId: string,\n  strategy: string | undefined,\n  rootProductId: string,\n): Promise<{ handle: string }[]> {\n  const res = await fetch(\n    buildOrgRecsUrl(\n      base,\n      orgId,\n      strategy ?? DEFAULT_RECOMMENDATION_STRATEGY,\n      rootProductId,\n    ),\n  );\n  if (!res.ok)\n    throw new Error(\n      `Failed to fetch org recs: ${\n        strategy ?? DEFAULT_RECOMMENDATION_STRATEGY\n      } ${rootProductId} (${res.status})`,\n    );\n  return parseRecsToHandles(await res.json());\n}\n\nasync function defaultFetchProductByUrl(\n  base: string,\n  orgId: string,\n  pageUrl: string,\n): Promise<ProductV1 | null> {\n  const res = await fetch(buildProductByUrlUrl(base, orgId, pageUrl));\n  // A non-PDP page (homepage/category) or an unmatched URL 404s: no hero, so no carousel, not an error.\n  if (res.status === 404) return null;\n  if (!res.ok)\n    throw new Error(`Failed to resolve product by url (${res.status})`);\n  return res.json() as Promise<ProductV1>;\n}\n\nexport function buildPrePopulatedQuestionsUrl(base: string): string {\n  return `${base}/api/pre-populated-questions`;\n}\n\nasync function defaultFetchPrePopulatedQuestions(\n  base: string,\n  orgId: string,\n  pageUrl: string,\n  productHandle?: string,\n): Promise<string[]> {\n  const res = await fetch(buildPrePopulatedQuestionsUrl(base), {\n    method: \"POST\",\n    headers: { \"Content-Type\": \"application/json\" },\n    body: JSON.stringify({\n      org_id: orgId,\n      page_url: pageUrl,\n      // A funnel's product URL is its own route, never the brand's PDP, so the backend cannot\n      // resolve it by URL. Naming the handle is the only way those questions resolve.\n      ...(productHandle ? { product_handle: productHandle } : {}),\n    }),\n  });\n  // Non-ok is not an error here: an unmapped page already returns [], so the caller's\n  // fallback is the same answer. Deliberately unlike the by-url fetch below, which throws.\n  if (!res.ok) return [];\n  const body = (await res.json()) as { sample_questions?: string[] };\n  return body.sample_questions ?? [];\n}\n\nexport interface StarterQuestionsResult {\n  /** Only safe to render once `isResolving` is false. On a page change the query key changes and\n   *  this resets to [] while the new page resolves, so a caller that renders it regardless would\n   *  show an empty set where the previous page's chips were. */\n  questions: string[];\n  /** True only while the request is in flight, so callers can withhold their fallback set instead\n   *  of flashing it and swapping a moment later. A disabled query (no page URL, no org id) and a\n   *  settled or errored one are both not resolving, so those fall back immediately. */\n  isResolving: boolean;\n}\n\n/**\n * Questions for the shopper's current page, resolved server-side from the URL: the product's\n * own questions on a PDP, the category's on a category page (and a category fallback for a PDP\n * whose product has none). Empty array means nothing mapped, so the caller falls back to its\n * configured/default set.\n */\nexport function usePrePopulatedQuestions(\n  pageUrl: string | undefined,\n  productHandle?: string,\n): StarterQuestionsResult {\n  const config = useSamuelConfig();\n  const base = config.agentsApiBaseUrl ?? DEFAULT_AGENTS_API_BASE_URL;\n  const query = useQuery({\n    queryKey: [\n      \"samuel-prepopulated-questions\",\n      base,\n      config.orgId,\n      pageUrl ?? \"\",\n      productHandle ?? \"\",\n    ],\n    queryFn: () =>\n      defaultFetchPrePopulatedQuestions(\n        base,\n        config.orgId,\n        pageUrl as string,\n        productHandle,\n      ),\n    // Both inputs are part of the key, so a host that reports a new page refetches.\n    staleTime: Infinity,\n    // A non-ok already fails open to [], so a throw here means the request itself died (offline,\n    // CORS, DNS), which a retry does not convert. Failing fast matters because the caller withholds\n    // its fallback pills while this is in flight, and the v4 default is 3 tries over ~7s.\n    retry: false,\n    // Still gated on the page URL: the endpoint requires one, and every host that knows a product\n    // handle knows the URL it is showing it on.\n    enabled: !!pageUrl && !!config.orgId,\n  });\n  return {\n    questions: query.data ?? [],\n    // Only \"fetching\", not useProductByUrl's !== \"idle\": \"paused\" means offline under the default\n    // networkMode, and withholding pills for a whole offline session is worse than the defaults.\n    isResolving: query.fetchStatus === \"fetching\",\n  };\n}\n\n/**\n * Starter-question precedence, shared by both mounts: server questions, then the per-org set.\n * Returns undefined (never []) when neither has any, because both renderers fall back to their\n * i18n defaults with `?? defaultQuestions`, which an empty array would defeat.\n */\nexport function resolveStarterQuestions(\n  serverQuestions: string[],\n  orgQuestions: string[] | undefined,\n): string[] | undefined {\n  if (serverQuestions.length) return serverQuestions;\n  return orgQuestions?.length ? orgQuestions : undefined;\n}\n\nexport interface ProductByUrlResult {\n  product: ProductV1 | null;\n  /** True only while the by-url request is in flight, so callers can tell \"still resolving\" apart\n   *  from \"settled with no product\" (a disabled query or a non-PDP/404 miss is not resolving). */\n  isResolving: boolean;\n}\n\n/**\n * Resolve the current brand page URL to its product (rootProductId + handle) via product-api's\n * by-url reverse-map, so brand-site (org-only) can seed the welcome-recs carousel the way a funnel\n * does with a threaded rootProductId. Returns null on a non-PDP page or unmatched URL. Disabled on\n * funnels (they already pass rootProductId) and whenever no page URL is known.\n */\nexport function useProductByUrl(\n  pageUrl: string | undefined,\n  enabled: boolean,\n): ProductByUrlResult {\n  const config = useSamuelConfig();\n  const base = config.productApiBaseUrl ?? DEFAULT_PRODUCT_API_BASE_URL;\n  const query = useQuery({\n    queryKey: [\"samuel-product-by-url\", base, config.orgId, pageUrl ?? \"\"],\n    queryFn: () =>\n      config.fetchProductByUrl\n        ? config.fetchProductByUrl(pageUrl as string)\n        : defaultFetchProductByUrl(base, config.orgId, pageUrl as string),\n    enabled: enabled && !!pageUrl,\n  });\n  // fetchStatus is \"idle\" only for a disabled or settled query; \"fetching\" (in flight) and \"paused\"\n  // (wants to fetch but is offline) both mean the result is still coming, so treat not-\"idle\" as\n  // resolving. Using isLoading instead would report a disabled query as loading in react-query v4.\n  return {\n    product: query.data ?? null,\n    isResolving: query.fetchStatus !== \"idle\",\n  };\n}\n\n/** Fetch welcome-recs via the host callback or a direct org-scoped product-api call. */\nexport function useRecsQuery(\n  strategy: string | undefined,\n  rootProductId: string | undefined,\n  enabled: boolean,\n) {\n  const config = useSamuelConfig();\n  const base = config.productApiBaseUrl ?? DEFAULT_PRODUCT_API_BASE_URL;\n  return useQuery({\n    queryKey: [\n      \"samuel-recs\",\n      base,\n      config.orgId,\n      strategy ?? DEFAULT_RECOMMENDATION_STRATEGY,\n      rootProductId ?? \"\",\n    ],\n    queryFn: () =>\n      config.fetchRecommendations\n        ? config.fetchRecommendations(strategy, rootProductId)\n        : defaultFetchRecommendations(\n            base,\n            config.orgId,\n            strategy,\n            rootProductId ?? \"\",\n          ),\n    enabled: enabled && !!rootProductId,\n  });\n}\n\n/**\n * Fetch carousel products via the host callback or a direct org-scoped product-api call.\n * `enabled` gates the fetch (default true) so a carousel can defer it until it scrolls into view,\n * avoiding a burst of product-API calls for every off-screen carousel on load (see STO-608).\n */\nexport function useProductsForHandles(\n  handles: string[],\n  enabled = true,\n): {\n  products: ProductV1[];\n  isLoading: boolean;\n} {\n  const config = useSamuelConfig();\n  const base = config.productApiBaseUrl ?? DEFAULT_PRODUCT_API_BASE_URL;\n  const query = useQuery({\n    queryKey: [\"samuel-products\", base, config.orgId, [...handles].sort()],\n    queryFn: () =>\n      config.fetchProductsByHandle\n        ? config.fetchProductsByHandle(handles)\n        : defaultFetchProductsByHandle(base, config.orgId, handles),\n    enabled: enabled && handles.length > 0,\n  });\n  return { products: query.data ?? [], isLoading: query.isLoading };\n}\n", "import type { ChatEvent } from \"../types\";\nimport { createContext } from \"react\";\n\nexport interface ChatAnalyticsCapture {\n  captureEvent: (event: ChatEvent) => void;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst noop = (_event: ChatEvent) => {};\n\n/** Decouples the chat from any analytics provider. Defaults to a noop; the root Samuel feeds config.onEvent in. */\nexport const ChatAnalyticsContext = createContext<ChatAnalyticsCapture>({\n  captureEvent: noop,\n});\n", "import React from \"react\";\n\nexport const SmsIcon = ({ size = 20 }: { size?: number }) => (\n  <svg\n    width={size}\n    height={size}\n    viewBox=\"0 0 12 12\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <g clipPath=\"url(#sms-clip)\">\n      <path\n        d=\"M4 4.75H6M4 6.5H7.5M6 10.5C8.48528 10.5 10.5 8.48528 10.5 6C10.5 3.51472 8.48528 1.5 6 1.5C3.51472 1.5 1.5 3.51472 1.5 6C1.5 6.59857 1.61687 7.16985 1.82903 7.69226C1.86964 7.79224 1.88994 7.84223 1.899 7.88264C1.90786 7.92217 1.9111 7.95142 1.9111 7.99193C1.91111 8.03335 1.90359 8.07846 1.88855 8.16868L1.59206 9.94762C1.56102 10.1339 1.54549 10.2271 1.57438 10.2944C1.59966 10.3534 1.64664 10.4003 1.70559 10.4256C1.77295 10.4545 1.86609 10.439 2.05238 10.4079L3.83133 10.1114C3.92154 10.0964 3.96665 10.0889 4.00807 10.0889C4.04858 10.0889 4.07783 10.0921 4.11736 10.101C4.15777 10.1101 4.20776 10.1304 4.30775 10.171C4.83015 10.3831 5.40143 10.5 6 10.5Z\"\n        stroke=\"currentColor\"\n        strokeWidth=\"1.25\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n    </g>\n    <defs>\n      <clipPath id=\"sms-clip\">\n        <rect width=\"12\" height=\"12\" fill=\"white\" />\n      </clipPath>\n    </defs>\n  </svg>\n);\n\nexport const ChatIcon = () => <SmsIcon size={20} />;\nexport const PhoneIcon = () => <SmsIcon size={12} />;\n\nexport const CloseIcon = () => (\n  <svg\n    width=\"24\"\n    height=\"24\"\n    viewBox=\"0 0 24 24\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path\n      d=\"M18 6L6 18M6 6L18 18\"\n      stroke=\"currentColor\"\n      strokeWidth=\"2\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n    />\n  </svg>\n);\n\nexport const MinimizeIcon = () => (\n  <svg\n    width=\"20\"\n    height=\"20\"\n    viewBox=\"0 0 20 20\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path\n      d=\"M4 8L10 14L16 8\"\n      stroke=\"currentColor\"\n      strokeWidth=\"2\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n    />\n  </svg>\n);\n\n/** Trailing glyph on a starter question, reading as \"drop this into the chat\". */\nexport const ArrowDownIcon = () => (\n  <svg\n    width=\"16\"\n    height=\"16\"\n    viewBox=\"0 0 16 16\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path\n      d=\"M8 3.5V12.5M8 12.5L4 8.5M8 12.5L12 8.5\"\n      stroke=\"currentColor\"\n      strokeWidth=\"1.6\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n    />\n  </svg>\n);\n\nexport const SendIcon = () => (\n  <svg\n    width=\"16\"\n    height=\"16\"\n    viewBox=\"0 0 16 16\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path\n      d=\"M7.00028 7.99986H3.33362M3.27718 8.19419L1.72057 12.844C1.59828 13.2093 1.53713 13.3919 1.58101 13.5044C1.61912 13.6021 1.70096 13.6761 1.80195 13.7043C1.91824 13.7368 2.09388 13.6577 2.44517 13.4997L13.5862 8.48622C13.929 8.33192 14.1005 8.25477 14.1535 8.1476C14.1995 8.05449 14.1995 7.94524 14.1535 7.85212C14.1005 7.74495 13.929 7.6678 13.5862 7.5135L2.44129 2.49834C2.09106 2.34074 1.91595 2.26194 1.79977 2.29426C1.69888 2.32234 1.61704 2.39619 1.57881 2.49369C1.53478 2.60595 1.59527 2.7882 1.71625 3.15271L3.27761 7.85688C3.29839 7.91948 3.30878 7.95079 3.31288 7.9828C3.31652 8.01121 3.31649 8.03997 3.31277 8.06837C3.30859 8.10037 3.29812 8.13164 3.27718 8.19419Z\"\n      stroke=\"currentColor\"\n      strokeWidth=\"1.5\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n    />\n  </svg>\n);\n\n/** Shopping-bag glyph: the carousel card's add-to-cart affordance before the item is added. */\nexport const BagIcon = ({ size = 16 }: { size?: number }) => (\n  <svg\n    width={size}\n    height={size}\n    viewBox=\"0 0 16 16\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path\n      d=\"M2.66663 4.66666H13.3333L12.6039 12.6903C12.5428 13.3623 11.9793 13.8767 11.3046 13.8767H4.69529C4.02059 13.8767 3.45711 13.3623 3.39601 12.6903L2.66663 4.66666Z\"\n      stroke=\"currentColor\"\n      strokeWidth=\"1.5\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n    />\n    <path\n      d=\"M5.33337 6.66666V4C5.33337 2.52724 6.52728 1.33333 8.00004 1.33333C9.4728 1.33333 10.6667 2.52724 10.6667 4V6.66666\"\n      stroke=\"currentColor\"\n      strokeWidth=\"1.5\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n    />\n  </svg>\n);\n\n/** Shopping-cart glyph: the same control after the item is added, which opens the host's cart. */\nexport const CartIcon = ({ size = 16 }: { size?: number }) => (\n  <svg\n    width={size}\n    height={size}\n    viewBox=\"0 0 16 16\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path\n      d=\"M1.33337 1.33333H2.66671L4.66671 9.33333H12L14.6667 3.33333H3.33337\"\n      stroke=\"currentColor\"\n      strokeWidth=\"1.5\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n    />\n    <circle\n      cx=\"5.66671\"\n      cy=\"12.6667\"\n      r=\"1.33333\"\n      stroke=\"currentColor\"\n      strokeWidth=\"1.5\"\n    />\n    <circle\n      cx=\"11.3334\"\n      cy=\"12.6667\"\n      r=\"1.33333\"\n      stroke=\"currentColor\"\n      strokeWidth=\"1.5\"\n    />\n  </svg>\n);\n\nexport const SparkleIcon = () => (\n  <svg\n    width=\"16\"\n    height=\"16\"\n    viewBox=\"0 0 16 16\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <g clipPath=\"url(#sparkle-clip)\">\n      <path\n        d=\"M4.33337 8.66658L4.85635 9.71253C5.03334 10.0665 5.12184 10.2435 5.24006 10.3969C5.34497 10.533 5.46698 10.655 5.60308 10.7599C5.75645 10.8781 5.93344 10.9666 6.28743 11.1436L7.33337 11.6666L6.28743 12.1896C5.93344 12.3665 5.75645 12.455 5.60308 12.5733C5.46698 12.6782 5.34497 12.8002 5.24006 12.9363C5.12184 13.0897 5.03334 13.2667 4.85635 13.6206L4.33337 14.6666L3.8104 13.6206C3.63341 13.2667 3.54491 13.0897 3.42669 12.9363C3.32178 12.8002 3.19977 12.6782 3.06367 12.5733C2.9103 12.455 2.7333 12.3665 2.37932 12.1896L1.33337 11.6666L2.37932 11.1436C2.7333 10.9666 2.9103 10.8781 3.06367 10.7599C3.19977 10.655 3.32178 10.533 3.42669 10.3969C3.54491 10.2435 3.63341 10.0665 3.8104 9.71253L4.33337 8.66658Z\"\n        stroke=\"currentColor\"\n        strokeWidth=\"1.5\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n      <path\n        d=\"M10 1.33325L10.7858 3.3762C10.9738 3.86502 11.0678 4.10943 11.214 4.31501C11.3435 4.49722 11.5027 4.65642 11.6849 4.78598C11.8905 4.93216 12.1349 5.02616 12.6238 5.21417L14.6667 5.99992L12.6238 6.78567C12.1349 6.97367 11.8905 7.06768 11.6849 7.21386C11.5027 7.34342 11.3435 7.50262 11.214 7.68482C11.0678 7.89041 10.9738 8.13482 10.7858 8.62364L10 10.6666L9.21429 8.62364C9.02628 8.13482 8.93228 7.89041 8.7861 7.68482C8.65654 7.50262 8.49734 7.34342 8.31513 7.21386C8.10955 7.06768 7.86514 6.97367 7.37632 6.78567L5.33337 5.99992L7.37632 5.21417C7.86514 5.02616 8.10955 4.93216 8.31513 4.78598C8.49734 4.65642 8.65654 4.49722 8.7861 4.31501C8.93228 4.10943 9.02628 3.86502 9.21429 3.3762L10 1.33325Z\"\n        stroke=\"currentColor\"\n        strokeWidth=\"1.5\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n    </g>\n    <defs>\n      <clipPath id=\"sparkle-clip\">\n        <rect width=\"16\" height=\"16\" fill=\"white\" />\n      </clipPath>\n    </defs>\n  </svg>\n);\n\n/** Pencil-on-page glyph for \"start a new chat\" (header action button). */\nexport const NewChatIcon = () => (\n  <svg\n    width=\"20\"\n    height=\"20\"\n    viewBox=\"0 0 16 16\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path\n      d=\"M7.33337 2.66666H4.53337C3.41327 2.66666 2.85322 2.66666 2.42539 2.88464C2.04907 3.07639 1.74311 3.38235 1.55136 3.75867C1.33337 4.1865 1.33337 4.74655 1.33337 5.86666V11.4667C1.33337 12.5868 1.33337 13.1468 1.55136 13.5746C1.74311 13.951 2.04907 14.2569 2.42539 14.4487C2.85322 14.6667 3.41327 14.6667 4.53337 14.6667H10.1334C11.2535 14.6667 11.8135 14.6667 12.2414 14.4487C12.6177 14.2569 12.9236 13.951 13.1154 13.5746C13.3334 13.1468 13.3334 12.5868 13.3334 11.4667V8.66666M5.33336 10.6667H6.44972C6.77584 10.6667 6.9389 10.6667 7.09235 10.6298C7.2284 10.5972 7.35846 10.5433 7.47775 10.4702C7.61231 10.3877 7.72761 10.2724 7.95821 10.0418L14.3334 3.66666C14.8857 3.11437 14.8857 2.21894 14.3334 1.66666C13.7811 1.11437 12.8857 1.11437 12.3334 1.66665L5.9582 8.04182C5.72759 8.27242 5.61229 8.38772 5.52984 8.52228C5.45673 8.64157 5.40286 8.77163 5.3702 8.90768C5.33336 9.06113 5.33336 9.22419 5.33336 9.55031V10.6667Z\"\n      stroke=\"currentColor\"\n      strokeWidth=\"1.5\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n    />\n  </svg>\n);\n\n/** Head-and-shoulders glyph for the \"talk to a person\" handoff control. */\nexport const AgentIcon = () => (\n  <svg\n    width=\"20\"\n    height=\"20\"\n    viewBox=\"0 0 16 16\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path\n      d=\"M8 8.66666C9.47276 8.66666 10.6667 7.47275 10.6667 5.99999C10.6667 4.52723 9.47276 3.33333 8 3.33333C6.52724 3.33333 5.33334 4.52723 5.33334 5.99999C5.33334 7.47275 6.52724 8.66666 8 8.66666ZM8 8.66666C5.42267 8.66666 3.33334 10.756 3.33334 13.3333M8 8.66666C10.5773 8.66666 12.6667 10.756 12.6667 13.3333\"\n      stroke=\"currentColor\"\n      strokeWidth=\"1.5\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n    />\n  </svg>\n);\n\nexport const ThumbUpIcon = () => (\n  <svg\n    width=\"20\"\n    height=\"20\"\n    viewBox=\"0 0 16 16\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path\n      transform=\"translate(1.333 1.333)\"\n      d=\"M3.333 13.333V6M10.284 13.333H1.333C0.597 13.333 0 12.736 0 12V7.333C0 6.597 0.597 6 1.333 6H2.9C3.164 6 3.402 5.845 3.509 5.604L5.855 0.325C5.943 0.128 6.14 0 6.356 0C7.264 0 8 0.736 8 1.644V4C8 4.368 8.298 4.667 8.667 4.667H11.002C12.228 4.667 13.165 5.759 12.979 6.971L12.261 11.637C12.111 12.613 11.271 13.333 10.284 13.333Z\"\n      stroke=\"currentColor\"\n      strokeWidth=\"1.5\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n    />\n  </svg>\n);\n\nexport const ThumbDownIcon = () => (\n  <svg\n    width=\"20\"\n    height=\"20\"\n    viewBox=\"0 0 16 16\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path\n      transform=\"translate(1.695 1.333)\"\n      d=\"M3.717 0H10.839C11.585 0 11.959 0 12.244 0.145C12.495 0.273 12.699 0.477 12.827 0.728C12.972 1.013 12.972 1.387 12.972 2.133V5.2C12.972 5.947 12.972 6.32 12.827 6.605C12.699 6.856 12.495 7.06 12.244 7.188C11.959 7.333 11.585 7.333 10.839 7.333H10.332C10.081 7.333 9.956 7.333 9.846 7.373C9.749 7.408 9.662 7.464 9.591 7.539C9.51 7.623 9.459 7.737 9.357 7.967L7.117 13.008C7.029 13.206 6.832 13.333 6.616 13.333C5.708 13.333 4.972 12.597 4.972 11.689V9.733C4.972 9.36 4.972 9.173 4.899 9.031C4.835 8.905 4.733 8.803 4.608 8.739C4.465 8.667 4.279 8.667 3.905 8.667H3.369C2.084 8.667 1.441 8.667 0.981 8.405C0.578 8.176 0.267 7.813 0.101 7.379C-0.087 6.885 0.01 6.25 0.206 4.98L0.555 2.713C0.703 1.75 0.777 1.269 1.013 0.907C1.221 0.588 1.516 0.335 1.862 0.178C2.256 0 2.743 0 3.717 0ZM9.639 0V7.333\"\n      stroke=\"currentColor\"\n      strokeWidth=\"1.5\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n    />\n  </svg>\n);\n\nexport const LoadingSpinner = () => (\n  <div className=\"fermat-chat-loading flex items-end gap-[3px] pb-0.5\">\n    <span className=\"fermat-chat-loading-dot h-1 w-1 rounded-full bg-[var(--sa-muted,#999)]\" />\n    <span className=\"fermat-chat-loading-dot h-1 w-1 rounded-full bg-[var(--sa-muted,#999)]\" />\n    <span className=\"fermat-chat-loading-dot h-1 w-1 rounded-full bg-[var(--sa-muted,#999)]\" />\n  </div>\n);\n", "import { useContext } from 'react';\nimport { nodesToString, Trans as TransWithoutContext } from './TransWithoutContext.js';\nimport { getI18n, I18nContext } from './context.js';\nexport { nodesToString };\nexport function Trans(_ref) {\n  let {\n    children,\n    count,\n    parent,\n    i18nKey,\n    context,\n    tOptions = {},\n    values,\n    defaults,\n    components,\n    ns,\n    i18n: i18nFromProps,\n    t: tFromProps,\n    shouldUnescape,\n    ...additionalProps\n  } = _ref;\n  const {\n    i18n: i18nFromContext,\n    defaultNS: defaultNSFromContext\n  } = useContext(I18nContext) || {};\n  const i18n = i18nFromProps || i18nFromContext || getI18n();\n  const t = tFromProps || i18n && i18n.t.bind(i18n);\n  return TransWithoutContext({\n    children,\n    count,\n    parent,\n    i18nKey,\n    context,\n    tOptions,\n    values,\n    defaults,\n    components,\n    ns: ns || t && t.ns || defaultNSFromContext || i18n && i18n.options && i18n.options.defaultNS,\n    i18n,\n    t: tFromProps,\n    shouldUnescape,\n    ...additionalProps\n  });\n}", "import { Fragment, isValidElement, cloneElement, createElement, Children } from 'react';\nimport HTML from 'html-parse-stringify';\nimport { isObject, isString, warn, warnOnce } from './utils.js';\nimport { getDefaults } from './defaults.js';\nimport { getI18n } from './i18nInstance.js';\nconst hasChildren = (node, checkLength) => {\n  if (!node) return false;\n  const base = node.props ? node.props.children : node.children;\n  if (checkLength) return base.length > 0;\n  return !!base;\n};\nconst getChildren = node => {\n  if (!node) return [];\n  const children = node.props ? node.props.children : node.children;\n  return node.props && node.props.i18nIsDynamicList ? getAsArray(children) : children;\n};\nconst hasValidReactChildren = children => Array.isArray(children) && children.every(isValidElement);\nconst getAsArray = data => Array.isArray(data) ? data : [data];\nconst mergeProps = (source, target) => {\n  const newTarget = {\n    ...target\n  };\n  newTarget.props = Object.assign(source.props, target.props);\n  return newTarget;\n};\nexport const nodesToString = (children, i18nOptions) => {\n  if (!children) return '';\n  let stringNode = '';\n  const childrenArray = getAsArray(children);\n  const keepArray = i18nOptions.transSupportBasicHtmlNodes && i18nOptions.transKeepBasicHtmlNodesFor ? i18nOptions.transKeepBasicHtmlNodesFor : [];\n  childrenArray.forEach((child, childIndex) => {\n    if (isString(child)) {\n      stringNode += `${child}`;\n    } else if (isValidElement(child)) {\n      const {\n        props,\n        type\n      } = child;\n      const childPropsCount = Object.keys(props).length;\n      const shouldKeepChild = keepArray.indexOf(type) > -1;\n      const childChildren = props.children;\n      if (!childChildren && shouldKeepChild && !childPropsCount) {\n        stringNode += `<${type}/>`;\n      } else if (!childChildren && (!shouldKeepChild || childPropsCount) || props.i18nIsDynamicList) {\n        stringNode += `<${childIndex}></${childIndex}>`;\n      } else if (shouldKeepChild && childPropsCount === 1 && isString(childChildren)) {\n        stringNode += `<${type}>${childChildren}</${type}>`;\n      } else {\n        const content = nodesToString(childChildren, i18nOptions);\n        stringNode += `<${childIndex}>${content}</${childIndex}>`;\n      }\n    } else if (child === null) {\n      warn(`Trans: the passed in value is invalid - seems you passed in a null child.`);\n    } else if (isObject(child)) {\n      const {\n        format,\n        ...clone\n      } = child;\n      const keys = Object.keys(clone);\n      if (keys.length === 1) {\n        const value = format ? `${keys[0]}, ${format}` : keys[0];\n        stringNode += `{{${value}}}`;\n      } else {\n        warn(`react-i18next: the passed in object contained more than one variable - the object should look like {{ value, format }} where format is optional.`, child);\n      }\n    } else {\n      warn(`Trans: the passed in value is invalid - seems you passed in a variable like {number} - please pass in variables for interpolation as full objects like {{number}}.`, child);\n    }\n  });\n  return stringNode;\n};\nconst renderNodes = (children, targetString, i18n, i18nOptions, combinedTOpts, shouldUnescape) => {\n  if (targetString === '') return [];\n  const keepArray = i18nOptions.transKeepBasicHtmlNodesFor || [];\n  const emptyChildrenButNeedsHandling = targetString && new RegExp(keepArray.map(keep => `<${keep}`).join('|')).test(targetString);\n  if (!children && !emptyChildrenButNeedsHandling && !shouldUnescape) return [targetString];\n  const data = {};\n  const getData = childs => {\n    const childrenArray = getAsArray(childs);\n    childrenArray.forEach(child => {\n      if (isString(child)) return;\n      if (hasChildren(child)) getData(getChildren(child));else if (isObject(child) && !isValidElement(child)) Object.assign(data, child);\n    });\n  };\n  getData(children);\n  const ast = HTML.parse(`<0>${targetString}</0>`);\n  const opts = {\n    ...data,\n    ...combinedTOpts\n  };\n  const renderInner = (child, node, rootReactNode) => {\n    const childs = getChildren(child);\n    const mappedChildren = mapAST(childs, node.children, rootReactNode);\n    return hasValidReactChildren(childs) && mappedChildren.length === 0 || child.props && child.props.i18nIsDynamicList ? childs : mappedChildren;\n  };\n  const pushTranslatedJSX = (child, inner, mem, i, isVoid) => {\n    if (child.dummy) {\n      child.children = inner;\n      mem.push(cloneElement(child, {\n        key: i\n      }, isVoid ? undefined : inner));\n    } else {\n      mem.push(...Children.map([child], c => {\n        const props = {\n          ...c.props\n        };\n        delete props.i18nIsDynamicList;\n        return createElement(c.type, {\n          ...props,\n          key: i,\n          ref: c.ref\n        }, isVoid ? null : inner);\n      }));\n    }\n  };\n  const mapAST = (reactNode, astNode, rootReactNode) => {\n    const reactNodes = getAsArray(reactNode);\n    const astNodes = getAsArray(astNode);\n    return astNodes.reduce((mem, node, i) => {\n      const translationContent = node.children && node.children[0] && node.children[0].content && i18n.services.interpolator.interpolate(node.children[0].content, opts, i18n.language);\n      if (node.type === 'tag') {\n        let tmp = reactNodes[parseInt(node.name, 10)];\n        if (rootReactNode.length === 1 && !tmp) tmp = rootReactNode[0][node.name];\n        if (!tmp) tmp = {};\n        const child = Object.keys(node.attrs).length !== 0 ? mergeProps({\n          props: node.attrs\n        }, tmp) : tmp;\n        const isElement = isValidElement(child);\n        const isValidTranslationWithChildren = isElement && hasChildren(node, true) && !node.voidElement;\n        const isEmptyTransWithHTML = emptyChildrenButNeedsHandling && isObject(child) && child.dummy && !isElement;\n        const isKnownComponent = isObject(children) && Object.hasOwnProperty.call(children, node.name);\n        if (isString(child)) {\n          const value = i18n.services.interpolator.interpolate(child, opts, i18n.language);\n          mem.push(value);\n        } else if (hasChildren(child) || isValidTranslationWithChildren) {\n          const inner = renderInner(child, node, rootReactNode);\n          pushTranslatedJSX(child, inner, mem, i);\n        } else if (isEmptyTransWithHTML) {\n          const inner = mapAST(reactNodes, node.children, rootReactNode);\n          pushTranslatedJSX(child, inner, mem, i);\n        } else if (Number.isNaN(parseFloat(node.name))) {\n          if (isKnownComponent) {\n            const inner = renderInner(child, node, rootReactNode);\n            pushTranslatedJSX(child, inner, mem, i, node.voidElement);\n          } else if (i18nOptions.transSupportBasicHtmlNodes && keepArray.indexOf(node.name) > -1) {\n            if (node.voidElement) {\n              mem.push(createElement(node.name, {\n                key: `${node.name}-${i}`\n              }));\n            } else {\n              const inner = mapAST(reactNodes, node.children, rootReactNode);\n              mem.push(createElement(node.name, {\n                key: `${node.name}-${i}`\n              }, inner));\n            }\n          } else if (node.voidElement) {\n            mem.push(`<${node.name} />`);\n          } else {\n            const inner = mapAST(reactNodes, node.children, rootReactNode);\n            mem.push(`<${node.name}>${inner}</${node.name}>`);\n          }\n        } else if (isObject(child) && !isElement) {\n          const content = node.children[0] ? translationContent : null;\n          if (content) mem.push(content);\n        } else {\n          pushTranslatedJSX(child, translationContent, mem, i, node.children.length !== 1 || !translationContent);\n        }\n      } else if (node.type === 'text') {\n        const wrapTextNodes = i18nOptions.transWrapTextNodes;\n        const content = shouldUnescape ? i18nOptions.unescape(i18n.services.interpolator.interpolate(node.content, opts, i18n.language)) : i18n.services.interpolator.interpolate(node.content, opts, i18n.language);\n        if (wrapTextNodes) {\n          mem.push(createElement(wrapTextNodes, {\n            key: `${node.name}-${i}`\n          }, content));\n        } else {\n          mem.push(content);\n        }\n      }\n      return mem;\n    }, []);\n  };\n  const result = mapAST([{\n    dummy: true,\n    children: children || []\n  }], ast, getAsArray(children || []));\n  return getChildren(result[0]);\n};\nexport function Trans(_ref) {\n  let {\n    children,\n    count,\n    parent,\n    i18nKey,\n    context,\n    tOptions = {},\n    values,\n    defaults,\n    components,\n    ns,\n    i18n: i18nFromProps,\n    t: tFromProps,\n    shouldUnescape,\n    ...additionalProps\n  } = _ref;\n  const i18n = i18nFromProps || getI18n();\n  if (!i18n) {\n    warnOnce('You will need to pass in an i18next instance by using i18nextReactModule');\n    return children;\n  }\n  const t = tFromProps || i18n.t.bind(i18n) || (k => k);\n  const reactI18nextOptions = {\n    ...getDefaults(),\n    ...(i18n.options && i18n.options.react)\n  };\n  let namespaces = ns || t.ns || i18n.options && i18n.options.defaultNS;\n  namespaces = isString(namespaces) ? [namespaces] : namespaces || ['translation'];\n  const nodeAsString = nodesToString(children, reactI18nextOptions);\n  const defaultValue = defaults || nodeAsString || reactI18nextOptions.transEmptyNodeValue || i18nKey;\n  const {\n    hashTransKey\n  } = reactI18nextOptions;\n  const key = i18nKey || (hashTransKey ? hashTransKey(nodeAsString || defaultValue) : nodeAsString || defaultValue);\n  if (i18n.options && i18n.options.interpolation && i18n.options.interpolation.defaultVariables) {\n    values = values && Object.keys(values).length > 0 ? {\n      ...values,\n      ...i18n.options.interpolation.defaultVariables\n    } : {\n      ...i18n.options.interpolation.defaultVariables\n    };\n  }\n  const interpolationOverride = values || count !== undefined || !children ? tOptions.interpolation : {\n    interpolation: {\n      ...tOptions.interpolation,\n      prefix: '#$?',\n      suffix: '?$#'\n    }\n  };\n  const combinedTOpts = {\n    ...tOptions,\n    context: context || tOptions.context,\n    count,\n    ...values,\n    ...interpolationOverride,\n    defaultValue,\n    ns: namespaces\n  };\n  const translation = key ? t(key, combinedTOpts) : defaultValue;\n  if (components) {\n    Object.keys(components).forEach(c => {\n      const comp = components[c];\n      if (typeof comp.type === 'function' || !comp.props || !comp.props.children || translation.indexOf(`${c}/>`) < 0 && translation.indexOf(`${c} />`) < 0) return;\n      function Componentized() {\n        return createElement(Fragment, null, comp);\n      }\n      components[c] = createElement(Componentized);\n    });\n  }\n  const content = renderNodes(components || children, translation, i18n, reactI18nextOptions, combinedTOpts, shouldUnescape);\n  const useAsParent = parent !== undefined ? parent : reactI18nextOptions.defaultTransParent;\n  return useAsParent ? createElement(useAsParent, additionalProps, content) : content;\n}", "import lookup from 'void-elements'\nconst attrRE = /\\s([^'\"/\\s><]+?)[\\s/>]|([^\\s=]+)=\\s?(\".*?\"|'.*?')/g\n\nexport default function stringify(tag) {\n  const res = {\n    type: 'tag',\n    name: '',\n    voidElement: false,\n    attrs: {},\n    children: [],\n  }\n\n  const tagMatch = tag.match(/<\\/?([^\\s]+?)[/\\s>]/)\n  if (tagMatch) {\n    res.name = tagMatch[1]\n    if (\n      lookup[tagMatch[1]] ||\n      tag.charAt(tag.length - 2) === '/'\n    ) {\n      res.voidElement = true\n    }\n\n    // handle comment tag\n    if (res.name.startsWith('!--')) {\n      const endIndex = tag.indexOf('-->')\n      return {\n        type: 'comment',\n        comment: endIndex !== -1 ? tag.slice(4, endIndex) : '',\n      }\n    }\n  }\n\n  const reg = new RegExp(attrRE)\n  let result = null\n  for (;;) {\n    result = reg.exec(tag)\n\n    if (result === null) {\n      break\n    }\n\n    if (!result[0].trim()) {\n      continue\n    }\n\n    if (result[1]) {\n      const attr = result[1].trim()\n      let arr = [attr, '']\n\n      if (attr.indexOf('=') > -1) {\n        arr = attr.split('=')\n      }\n\n      res.attrs[arr[0]] = arr[1]\n      reg.lastIndex--\n    } else if (result[2]) {\n      res.attrs[result[2]] = result[3].trim().substring(1, result[3].length - 1)\n    }\n  }\n\n  return res\n}\n", "import parseTag from './parse-tag'\n\nconst tagRE = /<[a-zA-Z0-9\\-\\!\\/](?:\"[^\"]*\"|'[^']*'|[^'\">])*>/g\nconst whitespaceRE = /^\\s*$/\n\n// re-used obj for quick lookups of components\nconst empty = Object.create(null)\n\nexport default function parse(html, options) {\n  options || (options = {})\n  options.components || (options.components = empty)\n  const result = []\n  const arr = []\n  let current\n  let level = -1\n  let inComponent = false\n\n  // handle text at top level\n  if (html.indexOf('<') !== 0) {\n    var end = html.indexOf('<')\n    result.push({\n      type: 'text',\n      content: end === -1 ? html : html.substring(0, end),\n    })\n  }\n\n  html.replace(tagRE, function (tag, index) {\n    if (inComponent) {\n      if (tag !== '</' + current.name + '>') {\n        return\n      } else {\n        inComponent = false\n      }\n    }\n    const isOpen = tag.charAt(1) !== '/'\n    const isComment = tag.startsWith('<!--')\n    const start = index + tag.length\n    const nextChar = html.charAt(start)\n    let parent\n\n    if (isComment) {\n      const comment = parseTag(tag)\n\n      // if we're at root, push new base node\n      if (level < 0) {\n        result.push(comment)\n        return result\n      }\n      parent = arr[level]\n      parent.children.push(comment)\n      return result\n    }\n\n    if (isOpen) {\n      level++\n\n      current = parseTag(tag)\n      if (current.type === 'tag' && options.components[current.name]) {\n        current.type = 'component'\n        inComponent = true\n      }\n\n      if (\n        !current.voidElement &&\n        !inComponent &&\n        nextChar &&\n        nextChar !== '<'\n      ) {\n        current.children.push({\n          type: 'text',\n          content: html.slice(start, html.indexOf('<', start)),\n        })\n      }\n\n      // if we're at root, push new base node\n      if (level === 0) {\n        result.push(current)\n      }\n\n      parent = arr[level - 1]\n\n      if (parent) {\n        parent.children.push(current)\n      }\n\n      arr[level] = current\n    }\n\n    if (!isOpen || current.voidElement) {\n      if (\n        level > -1 &&\n        (current.voidElement || current.name === tag.slice(2, -1))\n      ) {\n        level--\n        // move current up a level to match the end tag\n        current = level === -1 ? result : arr[level]\n      }\n      if (!inComponent && nextChar !== '<' && nextChar) {\n        // trailing text node\n        // if we're at the root, push a base text node. otherwise add as\n        // a child to the current node.\n        parent = level === -1 ? result : arr[level].children\n\n        // calculate correct end of the content slice in case there's\n        // no tag after the text node.\n        const end = html.indexOf('<', start)\n        let content = html.slice(start, end === -1 ? undefined : end)\n        // if a node is nothing but whitespace, collapse it as the spec states:\n        // https://www.w3.org/TR/html4/struct/text.html#h-9.1\n        if (whitespaceRE.test(content)) {\n          content = ' '\n        }\n        // don't add whitespace-only text nodes if they would be trailing text nodes\n        // or if they would be leading whitespace-only text nodes:\n        //  * end > -1 indicates this is not a trailing text node\n        //  * leading node is when level is -1 and parent has length 0\n        if ((end > -1 && level + parent.length >= 0) || content !== ' ') {\n          parent.push({\n            type: 'text',\n            content: content,\n          })\n        }\n      }\n    }\n  })\n\n  return result\n}\n", "function attrString(attrs) {\n  const buff = []\n  for (let key in attrs) {\n    buff.push(key + '=\"' + attrs[key] + '\"')\n  }\n  if (!buff.length) {\n    return ''\n  }\n  return ' ' + buff.join(' ')\n}\n\nfunction stringify(buff, doc) {\n  switch (doc.type) {\n    case 'text':\n      return buff + doc.content\n    case 'tag':\n      buff +=\n        '<' +\n        doc.name +\n        (doc.attrs ? attrString(doc.attrs) : '') +\n        (doc.voidElement ? '/>' : '>')\n      if (doc.voidElement) {\n        return buff\n      }\n      return buff + doc.children.reduce(stringify, '') + '</' + doc.name + '>'\n    case 'comment':\n      buff += '<!--' + doc.comment + '-->'\n      return buff\n  }\n}\n\nexport default function (doc) {\n  return doc.reduce(function (token, rootEl) {\n    return token + stringify('', rootEl)\n  }, '')\n}\n", "import parse from './parse'\nimport stringify from './stringify'\n\nexport default {\n  parse,\n  stringify,\n}\n", "export function warn() {\n  if (console && console.warn) {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    if (isString(args[0])) args[0] = `react-i18next:: ${args[0]}`;\n    console.warn(...args);\n  }\n}\nconst alreadyWarned = {};\nexport function warnOnce() {\n  for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n    args[_key2] = arguments[_key2];\n  }\n  if (isString(args[0]) && alreadyWarned[args[0]]) return;\n  if (isString(args[0])) alreadyWarned[args[0]] = new Date();\n  warn(...args);\n}\nconst loadedClb = (i18n, cb) => () => {\n  if (i18n.isInitialized) {\n    cb();\n  } else {\n    const initialized = () => {\n      setTimeout(() => {\n        i18n.off('initialized', initialized);\n      }, 0);\n      cb();\n    };\n    i18n.on('initialized', initialized);\n  }\n};\nexport const loadNamespaces = (i18n, ns, cb) => {\n  i18n.loadNamespaces(ns, loadedClb(i18n, cb));\n};\nexport const loadLanguages = (i18n, lng, ns, cb) => {\n  if (isString(ns)) ns = [ns];\n  ns.forEach(n => {\n    if (i18n.options.ns.indexOf(n) < 0) i18n.options.ns.push(n);\n  });\n  i18n.loadLanguages(lng, loadedClb(i18n, cb));\n};\nconst oldI18nextHasLoadedNamespace = function (ns, i18n) {\n  let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  const lng = i18n.languages[0];\n  const fallbackLng = i18n.options ? i18n.options.fallbackLng : false;\n  const lastLng = i18n.languages[i18n.languages.length - 1];\n  if (lng.toLowerCase() === 'cimode') return true;\n  const loadNotPending = (l, n) => {\n    const loadState = i18n.services.backendConnector.state[`${l}|${n}`];\n    return loadState === -1 || loadState === 2;\n  };\n  if (options.bindI18n && options.bindI18n.indexOf('languageChanging') > -1 && i18n.services.backendConnector.backend && i18n.isLanguageChangingTo && !loadNotPending(i18n.isLanguageChangingTo, ns)) return false;\n  if (i18n.hasResourceBundle(lng, ns)) return true;\n  if (!i18n.services.backendConnector.backend || i18n.options.resources && !i18n.options.partialBundledLanguages) return true;\n  if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;\n  return false;\n};\nexport const hasLoadedNamespace = function (ns, i18n) {\n  let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  if (!i18n.languages || !i18n.languages.length) {\n    warnOnce('i18n.languages were undefined or empty', i18n.languages);\n    return true;\n  }\n  const isNewerI18next = i18n.options.ignoreJSONStructure !== undefined;\n  if (!isNewerI18next) {\n    return oldI18nextHasLoadedNamespace(ns, i18n, options);\n  }\n  return i18n.hasLoadedNamespace(ns, {\n    lng: options.lng,\n    precheck: (i18nInstance, loadNotPending) => {\n      if (options.bindI18n && options.bindI18n.indexOf('languageChanging') > -1 && i18nInstance.services.backendConnector.backend && i18nInstance.isLanguageChangingTo && !loadNotPending(i18nInstance.isLanguageChangingTo, ns)) return false;\n    }\n  });\n};\nexport const getDisplayName = Component => Component.displayName || Component.name || (isString(Component) && Component.length > 0 ? Component : 'Unknown');\nexport const isString = obj => typeof obj === 'string';\nexport const isObject = obj => typeof obj === 'object' && obj !== null;", "const matchHtmlEntity = /&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g;\nconst htmlEntities = {\n  '&amp;': '&',\n  '&#38;': '&',\n  '&lt;': '<',\n  '&#60;': '<',\n  '&gt;': '>',\n  '&#62;': '>',\n  '&apos;': \"'\",\n  '&#39;': \"'\",\n  '&quot;': '\"',\n  '&#34;': '\"',\n  '&nbsp;': ' ',\n  '&#160;': ' ',\n  '&copy;': '\u00A9',\n  '&#169;': '\u00A9',\n  '&reg;': '\u00AE',\n  '&#174;': '\u00AE',\n  '&hellip;': '\u2026',\n  '&#8230;': '\u2026',\n  '&#x2F;': '/',\n  '&#47;': '/'\n};\nconst unescapeHtmlEntity = m => htmlEntities[m];\nexport const unescape = text => text.replace(matchHtmlEntity, unescapeHtmlEntity);", "import { unescape } from './unescape.js';\nlet defaultOptions = {\n  bindI18n: 'languageChanged',\n  bindI18nStore: '',\n  transEmptyNodeValue: '',\n  transSupportBasicHtmlNodes: true,\n  transWrapTextNodes: '',\n  transKeepBasicHtmlNodesFor: ['br', 'strong', 'i', 'p'],\n  useSuspense: true,\n  unescape\n};\nexport const setDefaults = function () {\n  let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  defaultOptions = {\n    ...defaultOptions,\n    ...options\n  };\n};\nexport const getDefaults = () => defaultOptions;", "let i18nInstance;\nexport const setI18n = instance => {\n  i18nInstance = instance;\n};\nexport const getI18n = () => i18nInstance;", "import { createContext } from 'react';\nimport { getDefaults, setDefaults } from './defaults.js';\nimport { getI18n, setI18n } from './i18nInstance.js';\nimport { initReactI18next } from './initReactI18next.js';\nexport { getDefaults, setDefaults, getI18n, setI18n, initReactI18next };\nexport const I18nContext = createContext();\nexport class ReportNamespaces {\n  constructor() {\n    this.usedNamespaces = {};\n  }\n  addUsedNamespaces(namespaces) {\n    namespaces.forEach(ns => {\n      if (!this.usedNamespaces[ns]) this.usedNamespaces[ns] = true;\n    });\n  }\n  getUsedNamespaces = () => Object.keys(this.usedNamespaces);\n}\nexport const composeInitialProps = ForComponent => async ctx => {\n  const componentsInitialProps = ForComponent.getInitialProps ? await ForComponent.getInitialProps(ctx) : {};\n  const i18nInitialProps = getInitialProps();\n  return {\n    ...componentsInitialProps,\n    ...i18nInitialProps\n  };\n};\nexport const getInitialProps = () => {\n  const i18n = getI18n();\n  const namespaces = i18n.reportNamespaces ? i18n.reportNamespaces.getUsedNamespaces() : [];\n  const ret = {};\n  const initialI18nStore = {};\n  i18n.languages.forEach(l => {\n    initialI18nStore[l] = {};\n    namespaces.forEach(ns => {\n      initialI18nStore[l][ns] = i18n.getResourceBundle(l, ns) || {};\n    });\n  });\n  ret.initialI18nStore = initialI18nStore;\n  ret.initialLanguage = i18n.language;\n  return ret;\n};", "import { setDefaults } from './defaults.js';\nimport { setI18n } from './i18nInstance.js';\nexport const initReactI18next = {\n  type: '3rdParty',\n  init(instance) {\n    setDefaults(instance.options.react);\n    setI18n(instance);\n  }\n};", "import { useState, useEffect, useContext, useRef, useCallback } from 'react';\nimport { getI18n, getDefaults, ReportNamespaces, I18nContext } from './context.js';\nimport { warnOnce, loadNamespaces, loadLanguages, hasLoadedNamespace, isString, isObject } from './utils.js';\nconst usePrevious = (value, ignore) => {\n  const ref = useRef();\n  useEffect(() => {\n    ref.current = ignore ? ref.current : value;\n  }, [value, ignore]);\n  return ref.current;\n};\nconst alwaysNewT = (i18n, language, namespace, keyPrefix) => i18n.getFixedT(language, namespace, keyPrefix);\nconst useMemoizedT = (i18n, language, namespace, keyPrefix) => useCallback(alwaysNewT(i18n, language, namespace, keyPrefix), [i18n, language, namespace, keyPrefix]);\nexport const useTranslation = function (ns) {\n  let props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  const {\n    i18n: i18nFromProps\n  } = props;\n  const {\n    i18n: i18nFromContext,\n    defaultNS: defaultNSFromContext\n  } = useContext(I18nContext) || {};\n  const i18n = i18nFromProps || i18nFromContext || getI18n();\n  if (i18n && !i18n.reportNamespaces) i18n.reportNamespaces = new ReportNamespaces();\n  if (!i18n) {\n    warnOnce('You will need to pass in an i18next instance by using initReactI18next');\n    const notReadyT = (k, optsOrDefaultValue) => {\n      if (isString(optsOrDefaultValue)) return optsOrDefaultValue;\n      if (isObject(optsOrDefaultValue) && isString(optsOrDefaultValue.defaultValue)) return optsOrDefaultValue.defaultValue;\n      return Array.isArray(k) ? k[k.length - 1] : k;\n    };\n    const retNotReady = [notReadyT, {}, false];\n    retNotReady.t = notReadyT;\n    retNotReady.i18n = {};\n    retNotReady.ready = false;\n    return retNotReady;\n  }\n  if (i18n.options.react && i18n.options.react.wait !== undefined) warnOnce('It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.');\n  const i18nOptions = {\n    ...getDefaults(),\n    ...i18n.options.react,\n    ...props\n  };\n  const {\n    useSuspense,\n    keyPrefix\n  } = i18nOptions;\n  let namespaces = ns || defaultNSFromContext || i18n.options && i18n.options.defaultNS;\n  namespaces = isString(namespaces) ? [namespaces] : namespaces || ['translation'];\n  if (i18n.reportNamespaces.addUsedNamespaces) i18n.reportNamespaces.addUsedNamespaces(namespaces);\n  const ready = (i18n.isInitialized || i18n.initializedStoreOnce) && namespaces.every(n => hasLoadedNamespace(n, i18n, i18nOptions));\n  const memoGetT = useMemoizedT(i18n, props.lng || null, i18nOptions.nsMode === 'fallback' ? namespaces : namespaces[0], keyPrefix);\n  const getT = () => memoGetT;\n  const getNewT = () => alwaysNewT(i18n, props.lng || null, i18nOptions.nsMode === 'fallback' ? namespaces : namespaces[0], keyPrefix);\n  const [t, setT] = useState(getT);\n  let joinedNS = namespaces.join();\n  if (props.lng) joinedNS = `${props.lng}${joinedNS}`;\n  const previousJoinedNS = usePrevious(joinedNS);\n  const isMounted = useRef(true);\n  useEffect(() => {\n    const {\n      bindI18n,\n      bindI18nStore\n    } = i18nOptions;\n    isMounted.current = true;\n    if (!ready && !useSuspense) {\n      if (props.lng) {\n        loadLanguages(i18n, props.lng, namespaces, () => {\n          if (isMounted.current) setT(getNewT);\n        });\n      } else {\n        loadNamespaces(i18n, namespaces, () => {\n          if (isMounted.current) setT(getNewT);\n        });\n      }\n    }\n    if (ready && previousJoinedNS && previousJoinedNS !== joinedNS && isMounted.current) {\n      setT(getNewT);\n    }\n    const boundReset = () => {\n      if (isMounted.current) setT(getNewT);\n    };\n    if (bindI18n && i18n) i18n.on(bindI18n, boundReset);\n    if (bindI18nStore && i18n) i18n.store.on(bindI18nStore, boundReset);\n    return () => {\n      isMounted.current = false;\n      if (bindI18n && i18n) bindI18n.split(' ').forEach(e => i18n.off(e, boundReset));\n      if (bindI18nStore && i18n) bindI18nStore.split(' ').forEach(e => i18n.store.off(e, boundReset));\n    };\n  }, [i18n, joinedNS]);\n  useEffect(() => {\n    if (isMounted.current && ready) {\n      setT(getT);\n    }\n  }, [i18n, keyPrefix, ready]);\n  const ret = [t, i18n, ready];\n  ret.t = t;\n  ret.i18n = i18n;\n  ret.ready = ready;\n  if (ready) return ret;\n  if (!ready && !useSuspense) return ret;\n  throw new Promise(resolve => {\n    if (props.lng) {\n      loadLanguages(i18n, props.lng, namespaces, () => resolve());\n    } else {\n      loadNamespaces(i18n, namespaces, () => resolve());\n    }\n  });\n};", "import { createElement, forwardRef as forwardRefReact } from 'react';\nimport { useTranslation } from './useTranslation.js';\nimport { getDisplayName } from './utils.js';\nexport const withTranslation = function (ns) {\n  let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  return function Extend(WrappedComponent) {\n    function I18nextWithTranslation(_ref) {\n      let {\n        forwardedRef,\n        ...rest\n      } = _ref;\n      const [t, i18n, ready] = useTranslation(ns, {\n        ...rest,\n        keyPrefix: options.keyPrefix\n      });\n      const passDownProps = {\n        ...rest,\n        t,\n        i18n,\n        tReady: ready\n      };\n      if (options.withRef && forwardedRef) {\n        passDownProps.ref = forwardedRef;\n      } else if (!options.withRef && forwardedRef) {\n        passDownProps.forwardedRef = forwardedRef;\n      }\n      return createElement(WrappedComponent, passDownProps);\n    }\n    I18nextWithTranslation.displayName = `withI18nextTranslation(${getDisplayName(WrappedComponent)})`;\n    I18nextWithTranslation.WrappedComponent = WrappedComponent;\n    const forwardRef = (props, ref) => createElement(I18nextWithTranslation, Object.assign({}, props, {\n      forwardedRef: ref\n    }));\n    return options.withRef ? forwardRefReact(forwardRef) : I18nextWithTranslation;\n  };\n};", "import { createElement, useMemo } from 'react';\nimport { I18nContext } from './context.js';\nexport function I18nextProvider(_ref) {\n  let {\n    i18n,\n    defaultNS,\n    children\n  } = _ref;\n  const value = useMemo(() => ({\n    i18n,\n    defaultNS\n  }), [i18n, defaultNS]);\n  return createElement(I18nContext.Provider, {\n    value\n  }, children);\n}", "import { createElement } from 'react';\nimport { useSSR } from './useSSR.js';\nimport { composeInitialProps } from './context.js';\nimport { getDisplayName } from './utils.js';\nexport const withSSR = () => function Extend(WrappedComponent) {\n  function I18nextWithSSR(_ref) {\n    let {\n      initialI18nStore,\n      initialLanguage,\n      ...rest\n    } = _ref;\n    useSSR(initialI18nStore, initialLanguage);\n    return createElement(WrappedComponent, {\n      ...rest\n    });\n  }\n  I18nextWithSSR.getInitialProps = composeInitialProps(WrappedComponent);\n  I18nextWithSSR.displayName = `withI18nextSSR(${getDisplayName(WrappedComponent)})`;\n  I18nextWithSSR.WrappedComponent = WrappedComponent;\n  return I18nextWithSSR;\n};", "import { useContext } from 'react';\nimport { getI18n, I18nContext } from './context.js';\nexport const useSSR = function (initialI18nStore, initialLanguage) {\n  let props = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  const {\n    i18n: i18nFromProps\n  } = props;\n  const {\n    i18n: i18nFromContext\n  } = useContext(I18nContext) || {};\n  const i18n = i18nFromProps || i18nFromContext || getI18n();\n  if (i18n.options && i18n.options.isClone) return;\n  if (initialI18nStore && !i18n.initializedStoreOnce) {\n    i18n.services.resourceStore.data = initialI18nStore;\n    i18n.options.ns = Object.values(initialI18nStore).reduce((mem, lngResources) => {\n      Object.keys(lngResources).forEach(ns => {\n        if (mem.indexOf(ns) < 0) mem.push(ns);\n      });\n      return mem;\n    }, i18n.options.ns);\n    i18n.initializedStoreOnce = true;\n    i18n.isInitialized = true;\n  }\n  if (initialLanguage && !i18n.initializedLanguageOnce) {\n    i18n.changeLanguage(initialLanguage);\n    i18n.initializedLanguageOnce = true;\n  }\n};", "import { ChatIcon, CloseIcon } from \"./icons\";\nimport React from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\nexport interface ChatButtonProps {\n  onClick: () => void;\n  isOpen: boolean;\n}\n\nexport const ChatButton: React.FC<ChatButtonProps> = ({ onClick, isOpen }) => {\n  const { t } = useTranslation();\n  return (\n    <button\n      onClick={onClick}\n      className=\"fermat-chat-button flex h-14 w-14 max-[480px]:h-13 max-[480px]:w-13 cursor-pointer items-center justify-center rounded-full border-0 bg-sa-accent text-sa-accent-fg shadow-[0_4px_20px_rgba(0,0,0,0.25)] transition duration-200 ease-in-out hover:scale-105 hover:shadow-[0_6px_24px_rgba(0,0,0,0.3)] active:scale-[0.98]\"\n      data-sr-role=\"chat-toggle\"\n      aria-label={isOpen ? t(\"aria_closeChat\") : t(\"aria_openChat\")}\n    >\n      {isOpen ? <CloseIcon /> : <ChatIcon />}\n    </button>\n  );\n};\n", "import React from \"react\";\nimport { SparkleIcon } from \"./icons\";\n\nexport interface AssistantHeaderProps {\n  avatarUrl?: string;\n  title?: string;\n  tagline?: string;\n  /** Mirrors ChatPanel's data-sa-started attribute (mobile/sheet CSS only); the facade never\n   *  passes this, so it renders \"false\", a no-op, since no chat.css rule targets the facade. */\n  hasStarted?: boolean;\n  /** Reset/close buttons. Only the drawer passes these; the facade renders none. */\n  actions?: React.ReactNode;\n  /**\n   * Makes the identity block (avatar + name + tagline) a button that opens the assistant's \"about\"\n   * view. Omitted when the brand configured no about copy, so the block stays inert text rather\n   * than a control that leads nowhere.\n   */\n  onIdentityClick?: () => void;\n  /** Whether the about view is open, for the identity button's aria-expanded. */\n  identityExpanded?: boolean;\n  /**\n   * The panel is rendering no composer, so ChatInput carries no close control and the header's own\n   * close has to stay visible. True for every state that replaces the composer (the about view,\n   * maintenance mode), which is what mobile/sheet CSS keys off.\n   */\n  inputHidden?: boolean;\n}\n\nconst IDENTITY_BLOCK_CLASS =\n  \"fermat-chat-header-left flex min-w-0 flex-1 items-center gap-3\";\n\n/**\n * The dark inset persona bar shared by the drawer (ChatPanel) and the inline facade\n * (SamuelFacade), so the two surfaces cannot drift apart the way they did before this\n * was extracted (drawer: dark accent bar + 40px avatar; facade: light row + 36px avatar).\n */\nexport const AssistantHeader: React.FC<AssistantHeaderProps> = ({\n  avatarUrl,\n  title,\n  tagline,\n  hasStarted,\n  actions,\n  onIdentityClick,\n  identityExpanded,\n  inputHidden,\n}) => {\n  const identity = (\n    <>\n      {avatarUrl && (\n        <img\n          src={avatarUrl}\n          // Decorative when the title text sits right beside it (avoids a screen reader\n          // double-announcement); falls back to \"Brand\" only when there is no title to\n          // carry the accessible name (e.g. facade with an avatar but no persona/brand name).\n          alt={title ? \"\" : \"Brand\"}\n          width={40}\n          height={40}\n          loading=\"lazy\"\n          className=\"fermat-chat-header-avatar h-10 w-10 flex-none rounded-full object-cover bg-sa-surface-alt\"\n        />\n      )}\n      <div className=\"fermat-chat-header-identity flex min-w-0 flex-col items-start\">\n        <div className=\"fermat-chat-header-title-row flex min-w-0 items-center gap-1.5\">\n          {title && (\n            <h3 className=\"m-0 max-w-60 overflow-hidden text-ellipsis whitespace-nowrap font-[family-name:var(--font-brand-primary,inherit)] text-base font-[var(--sa-display-weight,600)] tracking-[var(--sa-display-letter-spacing,-0.01em)] leading-[var(--sa-display-line-height,normal)]\">\n              {title}\n            </h3>\n          )}\n          <span\n            className=\"fermat-chat-header-sparkle inline-flex flex-none items-center\"\n            aria-hidden=\"true\"\n          >\n            <SparkleIcon />\n          </span>\n        </div>\n        {tagline && (\n          <p className=\"fermat-chat-header-tagline m-0 mt-1 max-w-full overflow-hidden text-[13px] font-normal text-ellipsis whitespace-nowrap opacity-90\">\n            {tagline}\n          </p>\n        )}\n      </div>\n    </>\n  );\n\n  return (\n    <div\n      // m-2 outer inset, matching the body/pills/input's own p-2 below it, so the header box and\n      // the body content sit at the same distance from the card edge.\n      className=\"fermat-chat-header flex min-h-16 items-center justify-between gap-3 m-2 rounded-[var(--sa-radius-header,var(--sa-radius,12px))] bg-sa-accent p-[14px] text-sa-accent-fg\"\n      data-sa-started={hasStarted ? \"true\" : \"false\"}\n      // Mobile/sheet hides the header close once a chat has started, because the input carries one.\n      // Any state that hides the input has to bring the header close back, or there is no way out.\n      data-sa-no-input={inputHidden ? \"true\" : \"false\"}\n    >\n      {onIdentityClick ? (\n        <button\n          type=\"button\"\n          className={`${IDENTITY_BLOCK_CLASS} cursor-pointer border-0 bg-transparent p-0 text-left text-[inherit]`}\n          onClick={onIdentityClick}\n          aria-expanded={Boolean(identityExpanded)}\n          data-sr-role=\"chat-about-open\"\n        >\n          {identity}\n        </button>\n      ) : (\n        <div className={IDENTITY_BLOCK_CLASS}>{identity}</div>\n      )}\n      {/* Sizes every action glyph from one place, overriding each icon's own width/height attrs.\n          Keeps the 38px hit targets while the icons themselves sit lighter in the bar. */}\n      {actions && (\n        <div className=\"fermat-chat-header-actions flex flex-none items-center gap-2.5 [&_svg]:h-4 [&_svg]:w-4\">\n          {actions}\n        </div>\n      )}\n    </div>\n  );\n};\n\nexport default AssistantHeader;\n", "import React, { useCallback, useLayoutEffect, useRef, useState } from \"react\";\nimport { CloseIcon, SendIcon } from \"./icons\";\nimport { useTranslation } from \"react-i18next\";\n\nconst MAX_FIELD_HEIGHT = 120;\n\nexport interface ChatInputProps {\n  onSend: (message: string) => void;\n  isLoading: boolean;\n  /** True once a conversation exists; switches the placeholder to the follow-up phrasing. */\n  hasStarted?: boolean;\n  /** Dismisses the panel. Rendered once `hasStarted`, and only on the compact surface (chat.css\n   *  hides it elsewhere): there the single header button becomes new-chat mid-conversation, which\n   *  would otherwise leave no way to close. */\n  onClose?: () => void;\n}\n\nexport const ChatInput: React.FC<ChatInputProps> = ({\n  onSend,\n  isLoading,\n  hasStarted,\n  onClose,\n}) => {\n  const { t } = useTranslation();\n  const [inputValue, setInputValue] = useState(\"\");\n  const [focused, setFocused] = useState(false);\n  const fieldRef = useRef<HTMLTextAreaElement>(null);\n\n  useLayoutEffect(() => {\n    const el = fieldRef.current;\n    if (!el) return;\n    el.style.height = \"auto\";\n    el.style.height = `${Math.min(el.scrollHeight, MAX_FIELD_HEIGHT)}px`;\n  }, [inputValue, focused]);\n\n  const submit = () => {\n    if (inputValue.trim() && !isLoading) {\n      onSend(inputValue.trim());\n      setInputValue(\"\");\n    }\n  };\n\n  const handleSubmit = useCallback(\n    (e: React.FormEvent) => {\n      e.preventDefault();\n      submit();\n    },\n    [inputValue, isLoading, onSend],\n  );\n\n  const handleKeyDown = useCallback(\n    (e: React.KeyboardEvent) => {\n      if (e.key === \"Enter\" && !e.shiftKey) {\n        e.preventDefault();\n        submit();\n      }\n    },\n    [inputValue, isLoading, onSend],\n  );\n\n  const hasDraft = inputValue.trim().length > 0;\n\n  return (\n    <div className=\"fermat-chat-input-wrapper flex-shrink-0 border-t border-sa-border bg-sa-surface-raised\">\n      <form\n        onSubmit={handleSubmit}\n        className=\"fermat-chat-input-form px-4 pb-2 pt-4\"\n      >\n        <div\n          className=\"fermat-chat-input-inner relative flex items-end gap-2\"\n          data-sa-active={focused || hasDraft ? \"true\" : \"false\"}\n          data-sa-typing={hasDraft ? \"true\" : \"false\"}\n        >\n          {onClose && hasStarted && (\n            <button\n              type=\"button\"\n              onClick={onClose}\n              className=\"fermat-chat-input-close\"\n              data-sr-role=\"chat-minimize-input\"\n              aria-label={t(\"aria_closeChat\")}\n            >\n              <CloseIcon />\n            </button>\n          )}\n          <div className=\"fermat-chat-input-field relative min-w-0 flex-1\">\n            <textarea\n              ref={fieldRef}\n              rows={1}\n              value={inputValue}\n              onChange={(e) => setInputValue(e.target.value)}\n              onKeyDown={handleKeyDown}\n              onFocus={() => setFocused(true)}\n              onBlur={() => setFocused(false)}\n              placeholder={\n                hasStarted\n                  ? t(\"inputPlaceholderFollowUp\")\n                  : t(\"inputPlaceholder\")\n              }\n              className=\"fermat-chat-input block box-border w-full flex-1 resize-none overflow-y-auto rounded-[var(--sa-radius-input,var(--sa-radius,16px))] border border-sa-border bg-sa-surface-raised px-4 py-3 pr-11 text-sm/[1.4] font-[inherit] text-sa-ink caret-sa-accent outline-none transition-[border-color,box-shadow,background,padding] duration-150 placeholder:text-sa-muted focus:border-sa-accent focus:shadow-[0_0_0_3px_color-mix(in_srgb,var(--sa-accent,#0a0a0a)_8%,transparent)] disabled:cursor-not-allowed disabled:bg-sa-surface-alt\"\n              style={{ maxHeight: MAX_FIELD_HEIGHT }}\n            />\n            <button\n              type=\"submit\"\n              className=\"fermat-chat-send-button absolute inset-y-0 right-1.5 my-auto flex h-8 w-8 cursor-pointer items-center justify-center rounded-full border-0 bg-sa-ink p-0 text-sa-surface-raised transition-[opacity,transform] duration-150 hover:enabled:opacity-85 disabled:cursor-not-allowed disabled:opacity-30\"\n              data-sr-role=\"chat-send\"\n              disabled={!hasDraft || isLoading}\n              aria-label={t(\"aria_sendMessage\")}\n            >\n              <SendIcon />\n            </button>\n          </div>\n        </div>\n      </form>\n      <p className=\"fermat-chat-disclaimer m-0 px-4 pb-2.5 text-center text-xs/[1.5] text-sa-muted\">\n        {t(\"disclaimer\")}\n      </p>\n    </div>\n  );\n};\n", "import React from \"react\";\nimport { SparkleIcon } from \"./icons\";\nimport { useTranslation } from \"react-i18next\";\n\nexport interface AssistantAboutProps {\n  /** Persona (or brand) name this view is about. */\n  name?: string;\n  avatarUrl?: string;\n  tagline?: string;\n  /** Brand-authored paragraph on what the assistant is for. */\n  description?: string;\n  /** Brand-authored \"what I can do\" lines. */\n  bullets?: string[];\n  /** Returns to the conversation. */\n  onBack: () => void;\n}\n\n/**\n * The in-panel \"about this assistant\" view the header opens: who the assistant is, what it can do,\n * and the AI disclaimer. Replaces the transcript rather than opening a second surface, so the\n * shopper never loses the conversation and there is no route or host navigation involved.\n *\n * Rendered only when the brand configured `description` or `infoBullets`; the header's control is\n * gated on the same copy, so this view is never reachable while empty.\n */\nexport const AssistantAbout: React.FC<AssistantAboutProps> = ({\n  name,\n  avatarUrl,\n  tagline,\n  description,\n  bullets,\n  onBack,\n}) => {\n  const { t } = useTranslation();\n  return (\n    <div\n      className=\"fermat-chat-about flex min-h-0 flex-1 flex-col gap-4 overflow-y-auto px-4 py-4\"\n      data-sr-role=\"chat-about\"\n    >\n      <button\n        type=\"button\"\n        className=\"fermat-chat-about-back flex w-fit cursor-pointer items-center gap-1.5 rounded-[var(--sa-radius-pill,var(--sa-radius,100px))] border border-sa-border bg-transparent px-3 py-1.5 text-[13px] font-medium text-sa-ink\"\n        onClick={onBack}\n        data-sr-role=\"chat-about-back\"\n      >\n        <span aria-hidden=\"true\">\u2190</span>\n        {t(\"aboutBackLabel\")}\n      </button>\n      <div className=\"fermat-chat-about-identity flex items-center gap-3\">\n        {avatarUrl && (\n          <img\n            src={avatarUrl}\n            alt=\"\"\n            width={48}\n            height={48}\n            loading=\"lazy\"\n            className=\"fermat-chat-about-avatar h-12 w-12 flex-none rounded-full object-cover bg-sa-surface-alt\"\n          />\n        )}\n        <div className=\"flex min-w-0 flex-col\">\n          <div className=\"flex items-center gap-1.5 text-base font-semibold text-sa-ink [&_svg]:text-sa-accent\">\n            {name && <span>{name}</span>}\n            <span aria-hidden=\"true\" className=\"inline-flex items-center\">\n              <SparkleIcon />\n            </span>\n          </div>\n          {tagline && (\n            <p className=\"m-0 text-[13px] text-sa-muted\">{tagline}</p>\n          )}\n        </div>\n      </div>\n      {description && (\n        <p className=\"fermat-chat-about-description m-0 text-sm leading-[var(--sa-body-line-height,1.6)] text-sa-ink\">\n          {description}\n        </p>\n      )}\n      {bullets && bullets.length > 0 && (\n        <div className=\"fermat-chat-about-bullets flex flex-col gap-2\">\n          <p className=\"m-0 text-[11px] font-semibold uppercase tracking-[0.06em] text-sa-muted\">\n            {t(\"aboutBulletsHeading\")}\n          </p>\n          <ul className=\"m-0 flex list-disc flex-col gap-1.5 pl-5 text-sm text-sa-ink\">\n            {bullets.map((bullet, i) => (\n              <li key={`${i}-${bullet}`}>{bullet}</li>\n            ))}\n          </ul>\n        </div>\n      )}\n      {/* The about view hides ChatInput, so this is the only disclaimer on screen while it is open. */}\n      <p className=\"fermat-chat-about-disclaimer m-0 mt-auto text-xs text-sa-muted\">\n        {t(\"disclaimer\")}\n      </p>\n    </div>\n  );\n};\n\nexport default AssistantAbout;\n", "import {\n  LoadingSpinner,\n  SparkleIcon,\n  ThumbDownIcon,\n  ThumbUpIcon,\n} from \"./icons\";\nimport React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport ReactMarkdown, { type Components, uriTransformer } from \"react-markdown\";\nimport type { ChatMessage } from \"../hooks/useChatMutation\";\nimport { ChatProductCarousel } from \"./ChatProductCarousel\";\nimport { ProductV1 } from \"@fermat/product-api\";\nimport { SuggestedReplies } from \"./SuggestedReplies\";\nimport { SuggestionPillList } from \"./SuggestionPillList\";\nimport { WelcomeRecsCarousel } from \"./WelcomeRecsCarousel\";\nimport remarkGfm from \"remark-gfm\";\nimport { useTranslation } from \"react-i18next\";\nimport { cn } from \"../util/cn\";\nimport { SamuelConfigContext } from \"../context/config-context\";\nimport { constrainAvatar } from \"../util/constrain-image\";\n\n/**\n * react-markdown 8 permits http, https, mailto and tel; anything else is rewritten to\n * `javascript:void(0)`. `sms:` is a contact channel the host opens like the other two, so it is\n * added here rather than by turning the transformer off, which would admit every scheme.\n */\nexport const REJECTED_LINK_URI = \"javascript:void(0)\";\n\nexport function transformAssistantLinkUri(uri: string): string {\n  const trimmed = (uri || \"\").trim();\n  return trimmed.toLowerCase().startsWith(\"sms:\")\n    ? trimmed\n    : uriTransformer(trimmed);\n}\n\n/** How long each \"thinking\" phrase holds before the next one takes over. */\nexport const LOADING_PHRASE_ROTATION_MS = 3000;\n\nfunction useRotatingPhrase(phrases: string[], active: boolean): string {\n  const [index, setIndex] = useState(0);\n  const count = phrases.length;\n  useEffect(() => {\n    if (!active) {\n      setIndex(0);\n      return;\n    }\n    if (count < 2) return;\n    const id = setInterval(\n      () => setIndex((i) => (i + 1) % count),\n      LOADING_PHRASE_ROTATION_MS,\n    );\n    return () => clearInterval(id);\n  }, [active, count]);\n  return count === 0 ? \"\" : (phrases[index % count] ?? \"\");\n}\n\nexport interface ChatMessagesProps {\n  messages: ChatMessage[];\n  isLoading: boolean;\n  /** Brand name, woven into the greeting via the i18next `_brand` context when present. */\n  brandName?: string;\n  brandLogoUrl?: string;\n  /** Persona name; preferred over brandName in the welcome identity when set. */\n  assistantName?: string;\n  /** Persona portrait; preferred over brandLogoUrl next to assistant messages when set. */\n  assistantAvatarUrl?: string;\n  onSendSuggestion: (question: string) => void;\n  recommendationStrategy?: string;\n  rootProductId?: string;\n  productHandle?: string;\n  suggestedQuestions?: string[];\n  /** Server starter questions are still in flight: render no suggestions at all rather than\n   *  flashing the fallback set and swapping it a moment later. */\n  suggestionsResolving?: boolean;\n  onProductClicked?: (\n    handle: string,\n    source: \"welcome_recs\" | \"assistant_response\",\n    variantExternalId?: string,\n  ) => void;\n  onProductATCClicked?: (\n    handle: string,\n    source: \"welcome_recs\" | \"assistant_response\",\n    variantExternalId?: string,\n  ) => void;\n  onNavigateToProduct?: (\n    product: ProductV1,\n    variantExternalId?: string,\n  ) => void;\n  /** Set when the shopper reached the current product page by clicking it inside Samuel. */\n  landingProduct?: { handle: string; name: string } | null;\n  /** Transcript position the landing block is anchored at (message count when it appeared). */\n  landingAfterIndex?: number;\n  /** Fired once per assistant message the shopper rates. `messageIndex` is its slot in `messages`.\n   *  Optional `feedbackText` is only set for thumbs-down after the shopper submits or skips. */\n  onFeedback?: (\n    vote: \"up\" | \"down\",\n    messageIndex: number,\n    feedbackText?: string,\n  ) => void;\n  /**\n   * Votes keyed by message id, owned by a parent whose lifetime matches the conversation.\n   * When set, this component is controlled: remounts (minimize/reopen) keep the lock.\n   */\n  votes?: Record<string, \"up\" | \"down\">;\n  /** Records a vote in the parent store. Required when `votes` is controlled. */\n  onRecordVote?: (messageId: string, vote: \"up\" | \"down\") => void;\n  /**\n   * Ask the host to open a contact link the shopper tapped (FDE-472). Absent renders the link text\n   * as plain text with no anchor: the iframe cannot open anything itself, so an anchor without a\n   * host to ask is a dead affordance.\n   */\n  onOpenLink?: (url: string, messageCount: number) => void;\n}\n\nexport const ChatMessages: React.FC<ChatMessagesProps> = ({\n  messages,\n  isLoading,\n  brandName,\n  brandLogoUrl,\n  assistantName,\n  assistantAvatarUrl,\n  onSendSuggestion,\n  recommendationStrategy,\n  rootProductId,\n  productHandle,\n  suggestedQuestions,\n  suggestionsResolving,\n  onProductClicked,\n  onProductATCClicked,\n  onNavigateToProduct,\n  landingProduct,\n  landingAfterIndex = 0,\n  onFeedback,\n  votes: controlledVotes,\n  onRecordVote,\n  onOpenLink,\n}) => {\n  const { t } = useTranslation();\n  // Uncontrolled fallback for unit mounts; Samuel passes `votes` so remounts keep the lock.\n  const [localVotes, setLocalVotes] = useState<Record<string, \"up\" | \"down\">>(\n    {},\n  );\n  const votes = controlledVotes ?? localVotes;\n  // Thumbs-down opens an optional comment form; the event fires only on submit/skip.\n  const [pendingDownId, setPendingDownId] = useState<string | null>(null);\n  const [commentDraft, setCommentDraft] = useState(\"\");\n  // Mirrors `votes` for the click guard only, because state reads in a handler see the render's\n  // snapshot and would let a double tap through before `disabled` lands. Seeded from `votes` so a\n  // remount with hydrated locks still rejects a second click before paint settles.\n  const votedRef = useRef<Set<string>>(new Set(Object.keys(votes)));\n\n  for (const id of Object.keys(votes)) {\n    votedRef.current.add(id);\n  }\n  const messageCount = messages.length;\n  const markdownComponents: Components = useMemo(\n    () => ({\n      a: ({ href, children }) =>\n        onOpenLink && href && href !== REJECTED_LINK_URI ? (\n          <a\n            href={href}\n            className=\"fermat-chat-markdown-link underline\"\n            onClick={(event) => {\n              event.preventDefault();\n              onOpenLink(href, messageCount);\n            }}\n          >\n            {children}\n          </a>\n        ) : (\n          <>{children}</>\n        ),\n    }),\n    [onOpenLink, messageCount],\n  );\n\n  const messagesContainerRef = useRef<HTMLDivElement>(null);\n  const messagesEndRef = useRef<HTMLDivElement>(null);\n  const defaultQuestions = t(\n    productHandle ? \"heroSuggestedQuestions\" : \"discoverySuggestedQuestions\",\n    { returnObjects: true },\n  ) as unknown as string[];\n  const loadingPhrases = t(\"loadingPhrases\", {\n    returnObjects: true,\n    context: brandName ? \"brand\" : \"\",\n    brand: brandName,\n  }) as unknown as string[];\n  const loadingPhrase = useRotatingPhrase(loadingPhrases, isLoading);\n  // 56px is the welcome avatar, the largest of the three sizes this component renders.\n  const avatarUrl = constrainAvatar(assistantAvatarUrl || brandLogoUrl, 56);\n  const welcomeName = assistantName || brandName;\n  const minimalWelcome =\n    React.useContext(SamuelConfigContext)?.welcomeLayout === \"minimal\";\n  const isWelcome = messages.length === 0 && !isLoading && !landingProduct;\n\n  // The landing block is the newest thing on screen only until the next turn arrives. While it is,\n  // it owns the follow-up chips (so the shopper never sees two competing sets) and its own chips are\n  // tappable; afterwards it is history, so the newest turn takes its chips back and these go inert.\n  // It is anchored at landingAfterIndex, so it never jumps to the end of a growing transcript.\n  const landingIsNewest = Boolean(\n    landingProduct && landingAfterIndex >= messages.length,\n  );\n\n  const renderLandingBlock = () =>\n    landingProduct ? (\n      <div\n        // Revealed like a turn rather than appearing instantly: the nav flag is consumed after\n        // mount (and after by-url resolution on brand sites), so without this it snaps in a beat\n        // late. Its carousel still defers its own fetch until in view.\n        className=\"fermat-chat-landing-section fermat-chat-reveal flex flex-col gap-3 rounded-[var(--sa-radius-card,var(--sa-radius,14px))] border border-sa-border bg-[var(--sa-surface-alt,#f3f1ec)] p-3\"\n        data-sr-role=\"chat-landing-block\"\n      >\n        <p className=\"fermat-chat-landing-label m-0 text-[11px] font-semibold uppercase tracking-[0.06em] text-sa-muted\">\n          {t(\"landingSectionLabel\")}\n        </p>\n        <ChatProductCarousel\n          productHandles={[landingProduct.handle]}\n          heading={t(\"landingHeading\", { product: landingProduct.name })}\n          source=\"assistant_response\"\n          onProductClicked={(handle, variantExternalId) =>\n            onProductClicked?.(handle, \"assistant_response\", variantExternalId)\n          }\n          onProductATCClicked={(handle, variantExternalId) =>\n            onProductATCClicked?.(\n              handle,\n              \"assistant_response\",\n              variantExternalId,\n            )\n          }\n          onNavigateToProduct={onNavigateToProduct}\n        />\n        <SuggestedReplies\n          replies={\n            t(\"landingChips\", { returnObjects: true }) as unknown as string[]\n          }\n          onSelect={onSendSuggestion}\n          interactive={landingIsNewest && !isLoading}\n        />\n      </div>\n    ) : null;\n\n  const commitVote = (\n    messageId: string,\n    vote: \"up\" | \"down\",\n    messageIndex: number,\n    feedbackText?: string,\n  ) => {\n    if (votedRef.current.has(messageId)) return;\n    votedRef.current.add(messageId);\n    if (onRecordVote) {\n      onRecordVote(messageId, vote);\n    } else {\n      setLocalVotes((prev) => ({ ...prev, [messageId]: vote }));\n    }\n    const trimmed = feedbackText?.trim();\n    onFeedback?.(vote, messageIndex, trimmed ? trimmed : undefined);\n    setPendingDownId(null);\n    setCommentDraft(\"\");\n  };\n\n  useEffect(() => {\n    if (messages.length === 0) return;\n    if (messagesContainerRef.current) {\n      messagesContainerRef.current.scrollTop =\n        messagesContainerRef.current.scrollHeight;\n    }\n  }, [messages, isLoading]);\n\n  return (\n    <div\n      className=\"fermat-chat-messages flex min-h-0 flex-1 flex-col gap-4 overflow-x-hidden overflow-y-auto overscroll-contain px-4 py-4 [-webkit-overflow-scrolling:touch]\"\n      ref={messagesContainerRef}\n    >\n      {isWelcome && minimalWelcome && (\n        <div className=\"fermat-chat-welcome-section flex flex-col items-center gap-6 text-center\">\n          {brandLogoUrl && (\n            <img src={brandLogoUrl} alt={brandName ?? \"\"} className=\"h-8\" />\n          )}\n          <span aria-hidden=\"true\" className=\"h-0.5 w-8 bg-sa-accent\" />\n          <p className=\"m-0 font-[family-name:var(--font-brand-primary,inherit)] text-2xl/[1.35] font-thin text-sa-ink\">\n            {t(\"greeting\", {\n              context: brandName ? \"brand\" : \"\",\n              brand: brandName,\n            })}\n          </p>\n        </div>\n      )}\n      {isWelcome && !minimalWelcome && (\n        <div className=\"fermat-chat-welcome-section flex w-full flex-col gap-4\">\n          {avatarUrl && (\n            <img\n              src={avatarUrl}\n              alt=\"\"\n              loading=\"lazy\"\n              className=\"fermat-chat-welcome-avatar h-14 w-14 self-center rounded-full object-cover bg-sa-surface-alt\"\n            />\n          )}\n          {welcomeName && (\n            <div className=\"fermat-chat-welcome-identity flex items-center justify-center gap-1.5 text-base font-semibold text-sa-ink [&_span]:inline-flex [&_span]:items-center [&_svg]:text-sa-accent\">\n              <span>{welcomeName}</span>\n              <span aria-hidden=\"true\">\n                <SparkleIcon />\n              </span>\n            </div>\n          )}\n          <h2 className=\"fermat-chat-welcome-headline m-0 font-[family-name:var(--font-brand-primary,inherit)] text-[44px] font-[var(--sa-display-weight,700)] leading-[var(--sa-display-line-height,1.25)] tracking-[var(--sa-display-letter-spacing,-0.02em)] text-sa-ink\">\n            {t(\"welcomeHeadline\")}\n          </h2>\n          <div\n            className={cn(\n              \"fermat-chat-message fermat-chat-message-assistant fermat-chat-welcome-greeting\",\n              \"self-center px-1.5 text-center text-sm text-sa-ink\",\n            )}\n          >\n            <p className=\"m-0\">\n              {t(\"greeting\", {\n                context: brandName ? \"brand\" : \"\",\n                brand: brandName,\n              })}\n            </p>\n          </div>\n          <WelcomeRecsCarousel\n            strategy={recommendationStrategy}\n            rootProductId={rootProductId}\n            productHandle={productHandle}\n            onProductClicked={(handle, variantExternalId) =>\n              onProductClicked?.(handle, \"welcome_recs\", variantExternalId)\n            }\n            onProductATCClicked={(handle, variantExternalId) =>\n              onProductATCClicked?.(handle, \"welcome_recs\", variantExternalId)\n            }\n            onNavigateToProduct={onNavigateToProduct}\n          />\n          {/* Always rendered: while the server questions resolve this shows placeholder pills in the\n              row's final position, so the cold open fills in rather than pushing everything down\n              when they land. The fallback set supplies the count. */}\n          <SuggestionPillList\n            questions={suggestedQuestions ?? defaultQuestions}\n            onSelect={onSendSuggestion}\n            dataSrRole=\"chat-suggestion\"\n            loading={suggestionsResolving}\n          />\n        </div>\n      )}\n      {/* Anchored at 0: the shopper landed here before any turn existed, so it leads the transcript. */}\n      {landingAfterIndex === 0 && renderLandingBlock()}\n      {messages.map((message, index) => (\n        <div key={message.id} className=\"flex flex-col\">\n          <div\n            className={cn(\n              \"fermat-chat-message\",\n              `fermat-chat-message-${message.role}`,\n              \"max-w-[85%] break-words text-sm leading-[var(--sa-body-line-height,1.5)]\",\n              message.role === \"user\" &&\n                \"self-end max-w-[80%] rounded-[var(--sa-radius-bubble,var(--sa-radius,8px))] rounded-br-none bg-sa-surface-alt px-3.5 py-2.5 font-medium text-sa-ink\",\n              // Beat 1 of the reveal. The shopper's own message is deliberately not staged: they\n              // typed it, so it belongs on screen the instant they send.\n              message.role === \"assistant\" &&\n                \"fermat-chat-reveal flex max-w-full flex-col gap-1.5 self-start p-0 text-sa-ink\",\n            )}\n          >\n            {message.role === \"assistant\" ? (\n              <>\n                {avatarUrl && (\n                  <img\n                    src={avatarUrl}\n                    alt=\"\"\n                    loading=\"lazy\"\n                    className=\"fermat-chat-message-brand-logo mb-3 h-8 w-8 flex-shrink-0 rounded-full object-cover bg-sa-surface-alt\"\n                  />\n                )}\n                <ReactMarkdown\n                  remarkPlugins={[remarkGfm]}\n                  className=\"fermat-chat-markdown\"\n                  transformLinkUri={transformAssistantLinkUri}\n                  components={markdownComponents}\n                >\n                  {message.content}\n                </ReactMarkdown>\n              </>\n            ) : (\n              <p className=\"m-0\">{message.content}</p>\n            )}\n          </div>\n          {message.role === \"assistant\" &&\n            message.recommendedProductHandles &&\n            message.recommendedProductHandles.length > 0 && (\n              // Beat 2. The wrapper exists only to carry the delay; the carousel keeps its own\n              // in-view fetch and skeletons, so the products still load lazily as before.\n              <div className=\"fermat-chat-reveal fermat-chat-reveal-products\">\n                <ChatProductCarousel\n                  productHandles={message.recommendedProductHandles}\n                  variantExternalIds={message.recommendedVariantExternalIds}\n                  heading={message.carouselHeading || \"\"}\n                  conversationId={message.id}\n                  source=\"assistant_response\"\n                  onProductClicked={(handle, variantExternalId) =>\n                    onProductClicked?.(\n                      handle,\n                      \"assistant_response\",\n                      variantExternalId,\n                    )\n                  }\n                  onProductATCClicked={(handle, variantExternalId) =>\n                    onProductATCClicked?.(\n                      handle,\n                      \"assistant_response\",\n                      variantExternalId,\n                    )\n                  }\n                  onNavigateToProduct={onNavigateToProduct}\n                />\n              </div>\n            )}\n          {/* Closes out the answer (text + products) and sits above the follow-up question, which\n              belongs to the next turn. One vote per message: picking locks both buttons. Thumbs-down\n              opens an optional comment form first; the pixel event fires on submit/skip only. */}\n          {message.role === \"assistant\" && (\n            <div className=\"fermat-chat-feedback\">\n              <div className=\"fermat-chat-feedback-actions flex flex-row gap-2\">\n                {([\"up\", \"down\"] as const).map((vote) => {\n                  const picked = votes[message.id];\n                  const pendingDown = pendingDownId === message.id;\n                  const Icon = vote === \"up\" ? ThumbUpIcon : ThumbDownIcon;\n                  const selected =\n                    picked === vote || (pendingDown && vote === \"down\");\n                  const locked = picked !== undefined;\n                  return (\n                    <button\n                      key={vote}\n                      type=\"button\"\n                      className=\"fermat-chat-feedback-button\"\n                      data-sr-role={`chat-feedback-${vote}`}\n                      data-vote={vote}\n                      data-selected={selected ? \"true\" : \"false\"}\n                      disabled={locked}\n                      aria-label={t(\n                        vote === \"up\" ? \"aria_feedbackUp\" : \"aria_feedbackDown\",\n                      )}\n                      aria-pressed={selected}\n                      onClick={() => {\n                        if (votedRef.current.has(message.id)) return;\n                        if (vote === \"up\") {\n                          commitVote(message.id, \"up\", index);\n                          return;\n                        }\n                        // Down: show the optional comment form; do not fire yet.\n                        setPendingDownId(message.id);\n                        setCommentDraft(\"\");\n                      }}\n                    >\n                      <Icon />\n                    </button>\n                  );\n                })}\n              </div>\n              {pendingDownId === message.id &&\n                votes[message.id] === undefined && (\n                  <form\n                    className=\"fermat-chat-feedback-comment mt-2 flex w-full max-w-sm flex-col gap-2\"\n                    data-sr-role=\"chat-feedback-comment\"\n                    onSubmit={(e) => {\n                      e.preventDefault();\n                      commitVote(message.id, \"down\", index, commentDraft);\n                    }}\n                  >\n                    <textarea\n                      className=\"fermat-chat-feedback-comment-input min-h-[64px] w-full resize-y rounded-[var(--sa-radius-input,var(--sa-radius,8px))] border border-sa-border bg-sa-surface-raised px-3 py-2 text-sm text-sa-ink outline-none placeholder:text-sa-muted focus:border-sa-accent\"\n                      data-sr-role=\"chat-feedback-comment-input\"\n                      value={commentDraft}\n                      onChange={(e) => setCommentDraft(e.target.value)}\n                      placeholder={t(\"feedbackCommentPlaceholder\")}\n                      rows={2}\n                    />\n                    <div className=\"flex flex-row gap-2\">\n                      <button\n                        type=\"submit\"\n                        className=\"fermat-chat-feedback-comment-submit cursor-pointer rounded-full border-0 bg-sa-accent px-3 py-1.5 text-sm font-medium text-sa-accent-fg\"\n                        data-sr-role=\"chat-feedback-comment-submit\"\n                      >\n                        {t(\"feedbackCommentSubmit\")}\n                      </button>\n                      <button\n                        type=\"button\"\n                        className=\"fermat-chat-feedback-comment-skip cursor-pointer rounded-full border border-sa-border bg-transparent px-3 py-1.5 text-sm text-sa-muted\"\n                        data-sr-role=\"chat-feedback-comment-skip\"\n                        onClick={() => commitVote(message.id, \"down\", index)}\n                      >\n                        {t(\"feedbackCommentSkip\")}\n                      </button>\n                    </div>\n                  </form>\n                )}\n            </div>\n          )}\n          {message.role === \"assistant\" &&\n            message.clarifyingQuestion &&\n            message.clarifyingQuestion !== message.content &&\n            !(landingIsNewest && index === messages.length - 1) && (\n              <div\n                className={cn(\n                  \"fermat-chat-message fermat-chat-message-assistant fermat-chat-clarifying\",\n                  \"fermat-chat-reveal fermat-chat-reveal-actions\",\n                  \"mt-3 max-w-full self-start p-0 text-[15px] font-medium text-sa-ink\",\n                )}\n              >\n                <p className=\"m-0\">{message.clarifyingQuestion}</p>\n              </div>\n            )}\n          {message.role === \"assistant\" &&\n            message.suggestedReplies &&\n            message.suggestedReplies.length > 0 &&\n            !(landingIsNewest && index === messages.length - 1) && (\n              // Beat 3, last on purpose: the next-step chips arrive after the shopper has had the\n              // answer in front of them, rather than inviting a tap before they have read it.\n              <div className=\"fermat-chat-reveal fermat-chat-reveal-actions\">\n                <SuggestedReplies\n                  replies={message.suggestedReplies}\n                  onSelect={onSendSuggestion}\n                  interactive={index === messages.length - 1 && !isLoading}\n                  selectedReply={\n                    messages[index + 1]?.role === \"user\"\n                      ? messages[index + 1]?.content\n                      : undefined\n                  }\n                />\n              </div>\n            )}\n          {/* Sits where the shopper met it: right after the turn they were on when they clicked\n              through to the product. */}\n          {index === landingAfterIndex - 1 && renderLandingBlock()}\n        </div>\n      ))}\n      {isLoading && (\n        <div className=\"fermat-chat-message fermat-chat-message-assistant fermat-chat-loading-message flex max-w-full flex-row items-center gap-2 self-start p-0 text-sa-ink\">\n          {avatarUrl && (\n            <img\n              src={avatarUrl}\n              alt=\"\"\n              loading=\"lazy\"\n              className=\"fermat-chat-message-brand-logo h-8 w-8 flex-shrink-0 rounded-full object-cover bg-sa-surface-alt\"\n            />\n          )}\n          <span className=\"fermat-chat-loading-star\" aria-hidden=\"true\">\n            <SparkleIcon />\n          </span>\n          {loadingPhrase && (\n            <span\n              key={loadingPhrase}\n              className=\"fermat-chat-loading-label text-sm font-medium text-sa-muted\"\n              style={{ animationDuration: `${LOADING_PHRASE_ROTATION_MS}ms` }}\n            >\n              {loadingPhrase}\n            </span>\n          )}\n          <LoadingSpinner />\n        </div>\n      )}\n      <div ref={messagesEndRef} />\n    </div>\n  );\n};\n", "const protocols = ['http', 'https', 'mailto', 'tel']\n\n/**\n * @param {string} uri\n * @returns {string}\n */\nexport function uriTransformer(uri) {\n  const url = (uri || '').trim()\n  const first = url.charAt(0)\n\n  if (first === '#' || first === '/') {\n    return url\n  }\n\n  const colon = url.indexOf(':')\n  if (colon === -1) {\n    return url\n  }\n\n  let index = -1\n\n  while (++index < protocols.length) {\n    const protocol = protocols[index]\n\n    if (\n      colon === protocol.length &&\n      url.slice(0, protocol.length).toLowerCase() === protocol\n    ) {\n      return url\n    }\n  }\n\n  index = url.indexOf('?')\n  if (index !== -1 && colon > index) {\n    return url\n  }\n\n  index = url.indexOf('#')\n  if (index !== -1 && colon > index) {\n    return url\n  }\n\n  // eslint-disable-next-line no-script-url\n  return 'javascript:void(0)'\n}\n", "/**\n * @typedef {import('react').ReactNode} ReactNode\n * @typedef {import('react').ReactElement<{}>} ReactElement\n * @typedef {import('unified').PluggableList} PluggableList\n * @typedef {import('hast').Root} Root\n * @typedef {import('./rehype-filter.js').Options} FilterOptions\n * @typedef {import('./ast-to-react.js').Options} TransformOptions\n *\n * @typedef CoreOptions\n * @property {string} children\n *\n * @typedef PluginOptions\n * @property {PluggableList} [remarkPlugins=[]]\n * @property {PluggableList} [rehypePlugins=[]]\n * @property {import('remark-rehype').Options | undefined} [remarkRehypeOptions={}]\n *\n * @typedef LayoutOptions\n * @property {string} [className]\n *\n * @typedef {CoreOptions & PluginOptions & LayoutOptions & FilterOptions & TransformOptions} ReactMarkdownOptions\n *\n * @typedef Deprecation\n * @property {string} id\n * @property {string} [to]\n */\n\nimport React from 'react'\nimport {VFile} from 'vfile'\nimport {unified} from 'unified'\nimport remarkParse from 'remark-parse'\nimport remarkRehype from 'remark-rehype'\nimport PropTypes from 'prop-types'\nimport {html} from 'property-information'\nimport rehypeFilter from './rehype-filter.js'\nimport {uriTransformer} from './uri-transformer.js'\nimport {childrenToReact} from './ast-to-react.js'\n\nconst own = {}.hasOwnProperty\nconst changelog =\n  'https://github.com/remarkjs/react-markdown/blob/main/changelog.md'\n\n/** @type {Record<string, Deprecation>} */\nconst deprecated = {\n  plugins: {to: 'plugins', id: 'change-plugins-to-remarkplugins'},\n  renderers: {to: 'components', id: 'change-renderers-to-components'},\n  astPlugins: {id: 'remove-buggy-html-in-markdown-parser'},\n  allowDangerousHtml: {id: 'remove-buggy-html-in-markdown-parser'},\n  escapeHtml: {id: 'remove-buggy-html-in-markdown-parser'},\n  source: {to: 'children', id: 'change-source-to-children'},\n  allowNode: {\n    to: 'allowElement',\n    id: 'replace-allownode-allowedtypes-and-disallowedtypes'\n  },\n  allowedTypes: {\n    to: 'allowedElements',\n    id: 'replace-allownode-allowedtypes-and-disallowedtypes'\n  },\n  disallowedTypes: {\n    to: 'disallowedElements',\n    id: 'replace-allownode-allowedtypes-and-disallowedtypes'\n  },\n  includeNodeIndex: {\n    to: 'includeElementIndex',\n    id: 'change-includenodeindex-to-includeelementindex'\n  }\n}\n\n/**\n * React component to render markdown.\n *\n * @param {ReactMarkdownOptions} options\n * @returns {ReactElement}\n */\nexport function ReactMarkdown(options) {\n  for (const key in deprecated) {\n    if (own.call(deprecated, key) && own.call(options, key)) {\n      const deprecation = deprecated[key]\n      console.warn(\n        `[react-markdown] Warning: please ${\n          deprecation.to ? `use \\`${deprecation.to}\\` instead of` : 'remove'\n        } \\`${key}\\` (see <${changelog}#${deprecation.id}> for more info)`\n      )\n      delete deprecated[key]\n    }\n  }\n\n  const processor = unified()\n    .use(remarkParse)\n    .use(options.remarkPlugins || [])\n    .use(remarkRehype, {\n      ...options.remarkRehypeOptions,\n      allowDangerousHtml: true\n    })\n    .use(options.rehypePlugins || [])\n    .use(rehypeFilter, options)\n\n  const file = new VFile()\n\n  if (typeof options.children === 'string') {\n    file.value = options.children\n  } else if (options.children !== undefined && options.children !== null) {\n    console.warn(\n      `[react-markdown] Warning: please pass a string as \\`children\\` (not: \\`${options.children}\\`)`\n    )\n  }\n\n  const hastNode = processor.runSync(processor.parse(file), file)\n\n  if (hastNode.type !== 'root') {\n    throw new TypeError('Expected a `root` node')\n  }\n\n  /** @type {ReactElement} */\n  let result = React.createElement(\n    React.Fragment,\n    {},\n    childrenToReact({options, schema: html, listDepth: 0}, hastNode)\n  )\n\n  if (options.className) {\n    result = React.createElement('div', {className: options.className}, result)\n  }\n\n  return result\n}\n\nReactMarkdown.defaultProps = {transformLinkUri: uriTransformer}\n\nReactMarkdown.propTypes = {\n  // Core options:\n  children: PropTypes.string,\n  // Layout options:\n  className: PropTypes.string,\n  // Filter options:\n  allowElement: PropTypes.func,\n  allowedElements: PropTypes.arrayOf(PropTypes.string),\n  disallowedElements: PropTypes.arrayOf(PropTypes.string),\n  unwrapDisallowed: PropTypes.bool,\n  // Plugin options:\n  remarkPlugins: PropTypes.arrayOf(\n    PropTypes.oneOfType([\n      PropTypes.object,\n      PropTypes.func,\n      PropTypes.arrayOf(\n        PropTypes.oneOfType([\n          PropTypes.bool,\n          PropTypes.string,\n          PropTypes.object,\n          PropTypes.func,\n          PropTypes.arrayOf(\n            // prettier-ignore\n            // type-coverage:ignore-next-line\n            PropTypes.any\n          )\n        ])\n      )\n    ])\n  ),\n  rehypePlugins: PropTypes.arrayOf(\n    PropTypes.oneOfType([\n      PropTypes.object,\n      PropTypes.func,\n      PropTypes.arrayOf(\n        PropTypes.oneOfType([\n          PropTypes.bool,\n          PropTypes.string,\n          PropTypes.object,\n          PropTypes.func,\n          PropTypes.arrayOf(\n            // prettier-ignore\n            // type-coverage:ignore-next-line\n            PropTypes.any\n          )\n        ])\n      )\n    ])\n  ),\n  // Transform options:\n  sourcePos: PropTypes.bool,\n  rawSourcePos: PropTypes.bool,\n  skipHtml: PropTypes.bool,\n  includeElementIndex: PropTypes.bool,\n  transformLinkUri: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n  linkTarget: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n  transformImageUri: PropTypes.func,\n  components: PropTypes.object\n}\n", "/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Position} Position\n * @typedef {import('unist').Point} Point\n * @typedef {import('./minurl.shared.js').URL} URL\n * @typedef {import('../index.js').Data} Data\n * @typedef {import('../index.js').Value} Value\n */\n\n/**\n * @typedef {Record<string, unknown> & {type: string, position?: Position | undefined}} NodeLike\n *\n * @typedef {'ascii' | 'utf8' | 'utf-8' | 'utf16le' | 'ucs2' | 'ucs-2' | 'base64' | 'base64url' | 'latin1' | 'binary' | 'hex'} BufferEncoding\n *   Encodings supported by the buffer class.\n *\n *   This is a copy of the types from Node, copied to prevent Node globals from\n *   being needed.\n *   Copied from: <https://github.com/DefinitelyTyped/DefinitelyTyped/blob/90a4ec8/types/node/buffer.d.ts#L170>\n *\n * @typedef {Options | URL | Value | VFile} Compatible\n *   Things that can be passed to the constructor.\n *\n * @typedef VFileCoreOptions\n *   Set multiple values.\n * @property {Value | null | undefined} [value]\n *   Set `value`.\n * @property {string | null | undefined} [cwd]\n *   Set `cwd`.\n * @property {Array<string> | null | undefined} [history]\n *   Set `history`.\n * @property {URL | string | null | undefined} [path]\n *   Set `path`.\n * @property {string | null | undefined} [basename]\n *   Set `basename`.\n * @property {string | null | undefined} [stem]\n *   Set `stem`.\n * @property {string | null | undefined} [extname]\n *   Set `extname`.\n * @property {string | null | undefined} [dirname]\n *   Set `dirname`.\n * @property {Data | null | undefined} [data]\n *   Set `data`.\n *\n * @typedef Map\n *   Raw source map.\n *\n *   See:\n *   <https://github.com/mozilla/source-map/blob/58819f0/source-map.d.ts#L15-L23>.\n * @property {number} version\n *   Which version of the source map spec this map is following.\n * @property {Array<string>} sources\n *   An array of URLs to the original source files.\n * @property {Array<string>} names\n *   An array of identifiers which can be referenced by individual mappings.\n * @property {string | undefined} [sourceRoot]\n *   The URL root from which all sources are relative.\n * @property {Array<string> | undefined} [sourcesContent]\n *   An array of contents of the original source files.\n * @property {string} mappings\n *   A string of base64 VLQs which contain the actual mappings.\n * @property {string} file\n *   The generated file this source map is associated with.\n *\n * @typedef {{[key: string]: unknown} & VFileCoreOptions} Options\n *   Configuration.\n *\n *   A bunch of keys that will be shallow copied over to the new file.\n *\n * @typedef {Record<string, unknown>} ReporterSettings\n *   Configuration for reporters.\n */\n\n/**\n * @template {ReporterSettings} Settings\n *   Options type.\n * @callback Reporter\n *   Type for a reporter.\n * @param {Array<VFile>} files\n *   Files to report.\n * @param {Settings} options\n *   Configuration.\n * @returns {string}\n *   Report.\n */\n\nimport bufferLike from 'is-buffer'\nimport {VFileMessage} from 'vfile-message'\nimport {path} from './minpath.js'\nimport {proc} from './minproc.js'\nimport {urlToPath, isUrl} from './minurl.js'\n\n/**\n * Order of setting (least specific to most), we need this because otherwise\n * `{stem: 'a', path: '~/b.js'}` would throw, as a path is needed before a\n * stem can be set.\n *\n * @type {Array<'basename' | 'dirname' | 'extname' | 'history' | 'path' | 'stem'>}\n */\nconst order = ['history', 'path', 'basename', 'stem', 'extname', 'dirname']\n\nexport class VFile {\n  /**\n   * Create a new virtual file.\n   *\n   * `options` is treated as:\n   *\n   * *   `string` or `Buffer` \u2014 `{value: options}`\n   * *   `URL` \u2014 `{path: options}`\n   * *   `VFile` \u2014 shallow copies its data over to the new file\n   * *   `object` \u2014 all fields are shallow copied over to the new file\n   *\n   * Path related fields are set in the following order (least specific to\n   * most specific): `history`, `path`, `basename`, `stem`, `extname`,\n   * `dirname`.\n   *\n   * You cannot set `dirname` or `extname` without setting either `history`,\n   * `path`, `basename`, or `stem` too.\n   *\n   * @param {Compatible | null | undefined} [value]\n   *   File value.\n   * @returns\n   *   New instance.\n   */\n  constructor(value) {\n    /** @type {Options | VFile} */\n    let options\n\n    if (!value) {\n      options = {}\n    } else if (typeof value === 'string' || buffer(value)) {\n      options = {value}\n    } else if (isUrl(value)) {\n      options = {path: value}\n    } else {\n      options = value\n    }\n\n    /**\n     * Place to store custom information (default: `{}`).\n     *\n     * It\u2019s OK to store custom data directly on the file but moving it to\n     * `data` is recommended.\n     *\n     * @type {Data}\n     */\n    this.data = {}\n\n    /**\n     * List of messages associated with the file.\n     *\n     * @type {Array<VFileMessage>}\n     */\n    this.messages = []\n\n    /**\n     * List of filepaths the file moved between.\n     *\n     * The first is the original path and the last is the current path.\n     *\n     * @type {Array<string>}\n     */\n    this.history = []\n\n    /**\n     * Base of `path` (default: `process.cwd()` or `'/'` in browsers).\n     *\n     * @type {string}\n     */\n    this.cwd = proc.cwd()\n\n    /* eslint-disable no-unused-expressions */\n    /**\n     * Raw value.\n     *\n     * @type {Value}\n     */\n    this.value\n\n    // The below are non-standard, they are \u201Cwell-known\u201D.\n    // As in, used in several tools.\n\n    /**\n     * Whether a file was saved to disk.\n     *\n     * This is used by vfile reporters.\n     *\n     * @type {boolean}\n     */\n    this.stored\n\n    /**\n     * Custom, non-string, compiled, representation.\n     *\n     * This is used by unified to store non-string results.\n     * One example is when turning markdown into React nodes.\n     *\n     * @type {unknown}\n     */\n    this.result\n\n    /**\n     * Source map.\n     *\n     * This type is equivalent to the `RawSourceMap` type from the `source-map`\n     * module.\n     *\n     * @type {Map | null | undefined}\n     */\n    this.map\n    /* eslint-enable no-unused-expressions */\n\n    // Set path related properties in the correct order.\n    let index = -1\n\n    while (++index < order.length) {\n      const prop = order[index]\n\n      // Note: we specifically use `in` instead of `hasOwnProperty` to accept\n      // `vfile`s too.\n      if (\n        prop in options &&\n        options[prop] !== undefined &&\n        options[prop] !== null\n      ) {\n        // @ts-expect-error: TS doesn\u2019t understand basic reality.\n        this[prop] = prop === 'history' ? [...options[prop]] : options[prop]\n      }\n    }\n\n    /** @type {string} */\n    let prop\n\n    // Set non-path related properties.\n    for (prop in options) {\n      // @ts-expect-error: fine to set other things.\n      if (!order.includes(prop)) {\n        // @ts-expect-error: fine to set other things.\n        this[prop] = options[prop]\n      }\n    }\n  }\n\n  /**\n   * Get the full path (example: `'~/index.min.js'`).\n   *\n   * @returns {string}\n   */\n  get path() {\n    return this.history[this.history.length - 1]\n  }\n\n  /**\n   * Set the full path (example: `'~/index.min.js'`).\n   *\n   * Cannot be nullified.\n   * You can set a file URL (a `URL` object with a `file:` protocol) which will\n   * be turned into a path with `url.fileURLToPath`.\n   *\n   * @param {string | URL} path\n   */\n  set path(path) {\n    if (isUrl(path)) {\n      path = urlToPath(path)\n    }\n\n    assertNonEmpty(path, 'path')\n\n    if (this.path !== path) {\n      this.history.push(path)\n    }\n  }\n\n  /**\n   * Get the parent path (example: `'~'`).\n   */\n  get dirname() {\n    return typeof this.path === 'string' ? path.dirname(this.path) : undefined\n  }\n\n  /**\n   * Set the parent path (example: `'~'`).\n   *\n   * Cannot be set if there\u2019s no `path` yet.\n   */\n  set dirname(dirname) {\n    assertPath(this.basename, 'dirname')\n    this.path = path.join(dirname || '', this.basename)\n  }\n\n  /**\n   * Get the basename (including extname) (example: `'index.min.js'`).\n   */\n  get basename() {\n    return typeof this.path === 'string' ? path.basename(this.path) : undefined\n  }\n\n  /**\n   * Set basename (including extname) (`'index.min.js'`).\n   *\n   * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n   * on windows).\n   * Cannot be nullified (use `file.path = file.dirname` instead).\n   */\n  set basename(basename) {\n    assertNonEmpty(basename, 'basename')\n    assertPart(basename, 'basename')\n    this.path = path.join(this.dirname || '', basename)\n  }\n\n  /**\n   * Get the extname (including dot) (example: `'.js'`).\n   */\n  get extname() {\n    return typeof this.path === 'string' ? path.extname(this.path) : undefined\n  }\n\n  /**\n   * Set the extname (including dot) (example: `'.js'`).\n   *\n   * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n   * on windows).\n   * Cannot be set if there\u2019s no `path` yet.\n   */\n  set extname(extname) {\n    assertPart(extname, 'extname')\n    assertPath(this.dirname, 'extname')\n\n    if (extname) {\n      if (extname.charCodeAt(0) !== 46 /* `.` */) {\n        throw new Error('`extname` must start with `.`')\n      }\n\n      if (extname.includes('.', 1)) {\n        throw new Error('`extname` cannot contain multiple dots')\n      }\n    }\n\n    this.path = path.join(this.dirname, this.stem + (extname || ''))\n  }\n\n  /**\n   * Get the stem (basename w/o extname) (example: `'index.min'`).\n   */\n  get stem() {\n    return typeof this.path === 'string'\n      ? path.basename(this.path, this.extname)\n      : undefined\n  }\n\n  /**\n   * Set the stem (basename w/o extname) (example: `'index.min'`).\n   *\n   * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n   * on windows).\n   * Cannot be nullified (use `file.path = file.dirname` instead).\n   */\n  set stem(stem) {\n    assertNonEmpty(stem, 'stem')\n    assertPart(stem, 'stem')\n    this.path = path.join(this.dirname || '', stem + (this.extname || ''))\n  }\n\n  /**\n   * Serialize the file.\n   *\n   * @param {BufferEncoding | null | undefined} [encoding='utf8']\n   *   Character encoding to understand `value` as when it\u2019s a `Buffer`\n   *   (default: `'utf8'`).\n   * @returns {string}\n   *   Serialized file.\n   */\n  toString(encoding) {\n    return (this.value || '').toString(encoding || undefined)\n  }\n\n  /**\n   * Create a warning message associated with the file.\n   *\n   * Its `fatal` is set to `false` and `file` is set to the current file path.\n   * Its added to `file.messages`.\n   *\n   * @param {string | Error | VFileMessage} reason\n   *   Reason for message, uses the stack and message of the error if given.\n   * @param {Node | NodeLike | Position | Point | null | undefined} [place]\n   *   Place in file where the message occurred.\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns {VFileMessage}\n   *   Message.\n   */\n  message(reason, place, origin) {\n    const message = new VFileMessage(reason, place, origin)\n\n    if (this.path) {\n      message.name = this.path + ':' + message.name\n      message.file = this.path\n    }\n\n    message.fatal = false\n\n    this.messages.push(message)\n\n    return message\n  }\n\n  /**\n   * Create an info message associated with the file.\n   *\n   * Its `fatal` is set to `null` and `file` is set to the current file path.\n   * Its added to `file.messages`.\n   *\n   * @param {string | Error | VFileMessage} reason\n   *   Reason for message, uses the stack and message of the error if given.\n   * @param {Node | NodeLike | Position | Point | null | undefined} [place]\n   *   Place in file where the message occurred.\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns {VFileMessage}\n   *   Message.\n   */\n  info(reason, place, origin) {\n    const message = this.message(reason, place, origin)\n\n    message.fatal = null\n\n    return message\n  }\n\n  /**\n   * Create a fatal error associated with the file.\n   *\n   * Its `fatal` is set to `true` and `file` is set to the current file path.\n   * Its added to `file.messages`.\n   *\n   * > \uD83D\uDC49 **Note**: a fatal error means that a file is no longer processable.\n   *\n   * @param {string | Error | VFileMessage} reason\n   *   Reason for message, uses the stack and message of the error if given.\n   * @param {Node | NodeLike | Position | Point | null | undefined} [place]\n   *   Place in file where the message occurred.\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns {never}\n   *   Message.\n   * @throws {VFileMessage}\n   *   Message.\n   */\n  fail(reason, place, origin) {\n    const message = this.message(reason, place, origin)\n\n    message.fatal = true\n\n    throw message\n  }\n}\n\n/**\n * Assert that `part` is not a path (as in, does not contain `path.sep`).\n *\n * @param {string | null | undefined} part\n *   File path part.\n * @param {string} name\n *   Part name.\n * @returns {void}\n *   Nothing.\n */\nfunction assertPart(part, name) {\n  if (part && part.includes(path.sep)) {\n    throw new Error(\n      '`' + name + '` cannot be a path: did not expect `' + path.sep + '`'\n    )\n  }\n}\n\n/**\n * Assert that `part` is not empty.\n *\n * @param {string | undefined} part\n *   Thing.\n * @param {string} name\n *   Part name.\n * @returns {asserts part is string}\n *   Nothing.\n */\nfunction assertNonEmpty(part, name) {\n  if (!part) {\n    throw new Error('`' + name + '` cannot be empty')\n  }\n}\n\n/**\n * Assert `path` exists.\n *\n * @param {string | undefined} path\n *   Path.\n * @param {string} name\n *   Dependency name.\n * @returns {asserts path is string}\n *   Nothing.\n */\nfunction assertPath(path, name) {\n  if (!path) {\n    throw new Error('Setting `' + name + '` requires `path` to be set too')\n  }\n}\n\n/**\n * Assert `value` is a buffer.\n *\n * @param {unknown} value\n *   thing.\n * @returns {value is Buffer}\n *   Whether `value` is a Node.js buffer.\n */\nfunction buffer(value) {\n  return bufferLike(value)\n}\n", "/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n */\n\n/**\n * Serialize the positional info of a point, position (start and end points),\n * or node.\n *\n * @param {Node | NodeLike | Position | PositionLike | Point | PointLike | null | undefined} [value]\n *   Node, position, or point.\n * @returns {string}\n *   Pretty printed positional info of a node (`string`).\n *\n *   In the format of a range `ls:cs-le:ce` (when given `node` or `position`)\n *   or a point `l:c` (when given `point`), where `l` stands for line, `c` for\n *   column, `s` for `start`, and `e` for end.\n *   An empty string (`''`) is returned if the given value is neither `node`,\n *   `position`, nor `point`.\n */\nexport function stringifyPosition(value) {\n  // Nothing.\n  if (!value || typeof value !== 'object') {\n    return ''\n  }\n\n  // Node.\n  if ('position' in value || 'type' in value) {\n    return position(value.position)\n  }\n\n  // Position.\n  if ('start' in value || 'end' in value) {\n    return position(value)\n  }\n\n  // Point.\n  if ('line' in value || 'column' in value) {\n    return point(value)\n  }\n\n  // ?\n  return ''\n}\n\n/**\n * @param {Point | PointLike | null | undefined} point\n * @returns {string}\n */\nfunction point(point) {\n  return index(point && point.line) + ':' + index(point && point.column)\n}\n\n/**\n * @param {Position | PositionLike | null | undefined} pos\n * @returns {string}\n */\nfunction position(pos) {\n  return point(pos && pos.start) + '-' + point(pos && pos.end)\n}\n\n/**\n * @param {number | null | undefined} value\n * @returns {number}\n */\nfunction index(value) {\n  return value && typeof value === 'number' ? value : 1\n}\n", "/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Position} Position\n * @typedef {import('unist').Point} Point\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n */\n\nimport {stringifyPosition} from 'unist-util-stringify-position'\n\n/**\n * Message.\n */\nexport class VFileMessage extends Error {\n  /**\n   * Create a message for `reason` at `place` from `origin`.\n   *\n   * When an error is passed in as `reason`, the `stack` is copied.\n   *\n   * @param {string | Error | VFileMessage} reason\n   *   Reason for message, uses the stack and message of the error if given.\n   *\n   *   > \uD83D\uDC49 **Note**: you should use markdown.\n   * @param {Node | NodeLike | Position | Point | null | undefined} [place]\n   *   Place in file where the message occurred.\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns\n   *   Instance of `VFileMessage`.\n   */\n  // To do: next major: expose `undefined` everywhere instead of `null`.\n  constructor(reason, place, origin) {\n    /** @type {[string | null, string | null]} */\n    const parts = [null, null]\n    /** @type {Position} */\n    let position = {\n      // @ts-expect-error: we always follows the structure of `position`.\n      start: {line: null, column: null},\n      // @ts-expect-error: \"\n      end: {line: null, column: null}\n    }\n\n    super()\n\n    if (typeof place === 'string') {\n      origin = place\n      place = undefined\n    }\n\n    if (typeof origin === 'string') {\n      const index = origin.indexOf(':')\n\n      if (index === -1) {\n        parts[1] = origin\n      } else {\n        parts[0] = origin.slice(0, index)\n        parts[1] = origin.slice(index + 1)\n      }\n    }\n\n    if (place) {\n      // Node.\n      if ('type' in place || 'position' in place) {\n        if (place.position) {\n          // To do: next major: deep clone.\n          // @ts-expect-error: looks like a position.\n          position = place.position\n        }\n      }\n      // Position.\n      else if ('start' in place || 'end' in place) {\n        // @ts-expect-error: looks like a position.\n        // To do: next major: deep clone.\n        position = place\n      }\n      // Point.\n      else if ('line' in place || 'column' in place) {\n        // To do: next major: deep clone.\n        position.start = place\n      }\n    }\n\n    // Fields from `Error`.\n    /**\n     * Serialized positional info of error.\n     *\n     * On normal errors, this would be something like `ParseError`, buit in\n     * `VFile` messages we use this space to show where an error happened.\n     */\n    this.name = stringifyPosition(place) || '1:1'\n\n    /**\n     * Reason for message.\n     *\n     * @type {string}\n     */\n    this.message = typeof reason === 'object' ? reason.message : reason\n\n    /**\n     * Stack of message.\n     *\n     * This is used by normal errors to show where something happened in\n     * programming code, irrelevant for `VFile` messages,\n     *\n     * @type {string}\n     */\n    this.stack = ''\n\n    if (typeof reason === 'object' && reason.stack) {\n      this.stack = reason.stack\n    }\n\n    /**\n     * Reason for message.\n     *\n     * > \uD83D\uDC49 **Note**: you should use markdown.\n     *\n     * @type {string}\n     */\n    this.reason = this.message\n\n    /* eslint-disable no-unused-expressions */\n    /**\n     * State of problem.\n     *\n     * * `true` \u2014 marks associated file as no longer processable (error)\n     * * `false` \u2014 necessitates a (potential) change (warning)\n     * * `null | undefined` \u2014 for things that might not need changing (info)\n     *\n     * @type {boolean | null | undefined}\n     */\n    this.fatal\n\n    /**\n     * Starting line of error.\n     *\n     * @type {number | null}\n     */\n    this.line = position.start.line\n\n    /**\n     * Starting column of error.\n     *\n     * @type {number | null}\n     */\n    this.column = position.start.column\n\n    /**\n     * Full unist position.\n     *\n     * @type {Position | null}\n     */\n    this.position = position\n\n    /**\n     * Namespace of message (example: `'my-package'`).\n     *\n     * @type {string | null}\n     */\n    this.source = parts[0]\n\n    /**\n     * Category of message (example: `'my-rule'`).\n     *\n     * @type {string | null}\n     */\n    this.ruleId = parts[1]\n\n    /**\n     * Path of a file (used throughout the `VFile` ecosystem).\n     *\n     * @type {string | null}\n     */\n    this.file\n\n    // The following fields are \u201Cwell known\u201D.\n    // Not standard.\n    // Feel free to add other non-standard fields to your messages.\n\n    /**\n     * Specify the source value that\u2019s being reported, which is deemed\n     * incorrect.\n     *\n     * @type {string | null}\n     */\n    this.actual\n\n    /**\n     * Suggest acceptable values that can be used instead of `actual`.\n     *\n     * @type {Array<string> | null}\n     */\n    this.expected\n\n    /**\n     * Link to docs for the message.\n     *\n     * > \uD83D\uDC49 **Note**: this must be an absolute URL that can be passed as `x`\n     * > to `new URL(x)`.\n     *\n     * @type {string | null}\n     */\n    this.url\n\n    /**\n     * Long form description of the message (you should use markdown).\n     *\n     * @type {string | null}\n     */\n    this.note\n    /* eslint-enable no-unused-expressions */\n  }\n}\n\nVFileMessage.prototype.file = ''\nVFileMessage.prototype.name = ''\nVFileMessage.prototype.reason = ''\nVFileMessage.prototype.message = ''\nVFileMessage.prototype.stack = ''\nVFileMessage.prototype.fatal = null\nVFileMessage.prototype.column = null\nVFileMessage.prototype.line = null\nVFileMessage.prototype.source = null\nVFileMessage.prototype.ruleId = null\nVFileMessage.prototype.position = null\n", "// A derivative work based on:\n// <https://github.com/browserify/path-browserify>.\n// Which is licensed:\n//\n// MIT License\n//\n// Copyright (c) 2013 James Halliday\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A derivative work based on:\n//\n// Parts of that are extracted from Node\u2019s internal `path` module:\n// <https://github.com/nodejs/node/blob/master/lib/path.js>.\n// Which is licensed:\n//\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nexport const path = {basename, dirname, extname, join, sep: '/'}\n\n/* eslint-disable max-depth, complexity */\n\n/**\n * Get the basename from a path.\n *\n * @param {string} path\n *   File path.\n * @param {string | undefined} [ext]\n *   Extension to strip.\n * @returns {string}\n *   Stem or basename.\n */\nfunction basename(path, ext) {\n  if (ext !== undefined && typeof ext !== 'string') {\n    throw new TypeError('\"ext\" argument must be a string')\n  }\n\n  assertPath(path)\n  let start = 0\n  let end = -1\n  let index = path.length\n  /** @type {boolean | undefined} */\n  let seenNonSlash\n\n  if (ext === undefined || ext.length === 0 || ext.length > path.length) {\n    while (index--) {\n      if (path.charCodeAt(index) === 47 /* `/` */) {\n        // If we reached a path separator that was not part of a set of path\n        // separators at the end of the string, stop now.\n        if (seenNonSlash) {\n          start = index + 1\n          break\n        }\n      } else if (end < 0) {\n        // We saw the first non-path separator, mark this as the end of our\n        // path component.\n        seenNonSlash = true\n        end = index + 1\n      }\n    }\n\n    return end < 0 ? '' : path.slice(start, end)\n  }\n\n  if (ext === path) {\n    return ''\n  }\n\n  let firstNonSlashEnd = -1\n  let extIndex = ext.length - 1\n\n  while (index--) {\n    if (path.charCodeAt(index) === 47 /* `/` */) {\n      // If we reached a path separator that was not part of a set of path\n      // separators at the end of the string, stop now.\n      if (seenNonSlash) {\n        start = index + 1\n        break\n      }\n    } else {\n      if (firstNonSlashEnd < 0) {\n        // We saw the first non-path separator, remember this index in case\n        // we need it if the extension ends up not matching.\n        seenNonSlash = true\n        firstNonSlashEnd = index + 1\n      }\n\n      if (extIndex > -1) {\n        // Try to match the explicit extension.\n        if (path.charCodeAt(index) === ext.charCodeAt(extIndex--)) {\n          if (extIndex < 0) {\n            // We matched the extension, so mark this as the end of our path\n            // component\n            end = index\n          }\n        } else {\n          // Extension does not match, so our result is the entire path\n          // component\n          extIndex = -1\n          end = firstNonSlashEnd\n        }\n      }\n    }\n  }\n\n  if (start === end) {\n    end = firstNonSlashEnd\n  } else if (end < 0) {\n    end = path.length\n  }\n\n  return path.slice(start, end)\n}\n\n/**\n * Get the dirname from a path.\n *\n * @param {string} path\n *   File path.\n * @returns {string}\n *   File path.\n */\nfunction dirname(path) {\n  assertPath(path)\n\n  if (path.length === 0) {\n    return '.'\n  }\n\n  let end = -1\n  let index = path.length\n  /** @type {boolean | undefined} */\n  let unmatchedSlash\n\n  // Prefix `--` is important to not run on `0`.\n  while (--index) {\n    if (path.charCodeAt(index) === 47 /* `/` */) {\n      if (unmatchedSlash) {\n        end = index\n        break\n      }\n    } else if (!unmatchedSlash) {\n      // We saw the first non-path separator\n      unmatchedSlash = true\n    }\n  }\n\n  return end < 0\n    ? path.charCodeAt(0) === 47 /* `/` */\n      ? '/'\n      : '.'\n    : end === 1 && path.charCodeAt(0) === 47 /* `/` */\n    ? '//'\n    : path.slice(0, end)\n}\n\n/**\n * Get an extname from a path.\n *\n * @param {string} path\n *   File path.\n * @returns {string}\n *   Extname.\n */\nfunction extname(path) {\n  assertPath(path)\n\n  let index = path.length\n\n  let end = -1\n  let startPart = 0\n  let startDot = -1\n  // Track the state of characters (if any) we see before our first dot and\n  // after any path separator we find.\n  let preDotState = 0\n  /** @type {boolean | undefined} */\n  let unmatchedSlash\n\n  while (index--) {\n    const code = path.charCodeAt(index)\n\n    if (code === 47 /* `/` */) {\n      // If we reached a path separator that was not part of a set of path\n      // separators at the end of the string, stop now.\n      if (unmatchedSlash) {\n        startPart = index + 1\n        break\n      }\n\n      continue\n    }\n\n    if (end < 0) {\n      // We saw the first non-path separator, mark this as the end of our\n      // extension.\n      unmatchedSlash = true\n      end = index + 1\n    }\n\n    if (code === 46 /* `.` */) {\n      // If this is our first dot, mark it as the start of our extension.\n      if (startDot < 0) {\n        startDot = index\n      } else if (preDotState !== 1) {\n        preDotState = 1\n      }\n    } else if (startDot > -1) {\n      // We saw a non-dot and non-path separator before our dot, so we should\n      // have a good chance at having a non-empty extension.\n      preDotState = -1\n    }\n  }\n\n  if (\n    startDot < 0 ||\n    end < 0 ||\n    // We saw a non-dot character immediately before the dot.\n    preDotState === 0 ||\n    // The (right-most) trimmed path component is exactly `..`.\n    (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1)\n  ) {\n    return ''\n  }\n\n  return path.slice(startDot, end)\n}\n\n/**\n * Join segments from a path.\n *\n * @param {Array<string>} segments\n *   Path segments.\n * @returns {string}\n *   File path.\n */\nfunction join(...segments) {\n  let index = -1\n  /** @type {string | undefined} */\n  let joined\n\n  while (++index < segments.length) {\n    assertPath(segments[index])\n\n    if (segments[index]) {\n      joined =\n        joined === undefined ? segments[index] : joined + '/' + segments[index]\n    }\n  }\n\n  return joined === undefined ? '.' : normalize(joined)\n}\n\n/**\n * Normalize a basic file path.\n *\n * @param {string} path\n *   File path.\n * @returns {string}\n *   File path.\n */\n// Note: `normalize` is not exposed as `path.normalize`, so some code is\n// manually removed from it.\nfunction normalize(path) {\n  assertPath(path)\n\n  const absolute = path.charCodeAt(0) === 47 /* `/` */\n\n  // Normalize the path according to POSIX rules.\n  let value = normalizeString(path, !absolute)\n\n  if (value.length === 0 && !absolute) {\n    value = '.'\n  }\n\n  if (value.length > 0 && path.charCodeAt(path.length - 1) === 47 /* / */) {\n    value += '/'\n  }\n\n  return absolute ? '/' + value : value\n}\n\n/**\n * Resolve `.` and `..` elements in a path with directory names.\n *\n * @param {string} path\n *   File path.\n * @param {boolean} allowAboveRoot\n *   Whether `..` can move above root.\n * @returns {string}\n *   File path.\n */\nfunction normalizeString(path, allowAboveRoot) {\n  let result = ''\n  let lastSegmentLength = 0\n  let lastSlash = -1\n  let dots = 0\n  let index = -1\n  /** @type {number | undefined} */\n  let code\n  /** @type {number} */\n  let lastSlashIndex\n\n  while (++index <= path.length) {\n    if (index < path.length) {\n      code = path.charCodeAt(index)\n    } else if (code === 47 /* `/` */) {\n      break\n    } else {\n      code = 47 /* `/` */\n    }\n\n    if (code === 47 /* `/` */) {\n      if (lastSlash === index - 1 || dots === 1) {\n        // Empty.\n      } else if (lastSlash !== index - 1 && dots === 2) {\n        if (\n          result.length < 2 ||\n          lastSegmentLength !== 2 ||\n          result.charCodeAt(result.length - 1) !== 46 /* `.` */ ||\n          result.charCodeAt(result.length - 2) !== 46 /* `.` */\n        ) {\n          if (result.length > 2) {\n            lastSlashIndex = result.lastIndexOf('/')\n\n            if (lastSlashIndex !== result.length - 1) {\n              if (lastSlashIndex < 0) {\n                result = ''\n                lastSegmentLength = 0\n              } else {\n                result = result.slice(0, lastSlashIndex)\n                lastSegmentLength = result.length - 1 - result.lastIndexOf('/')\n              }\n\n              lastSlash = index\n              dots = 0\n              continue\n            }\n          } else if (result.length > 0) {\n            result = ''\n            lastSegmentLength = 0\n            lastSlash = index\n            dots = 0\n            continue\n          }\n        }\n\n        if (allowAboveRoot) {\n          result = result.length > 0 ? result + '/..' : '..'\n          lastSegmentLength = 2\n        }\n      } else {\n        if (result.length > 0) {\n          result += '/' + path.slice(lastSlash + 1, index)\n        } else {\n          result = path.slice(lastSlash + 1, index)\n        }\n\n        lastSegmentLength = index - lastSlash - 1\n      }\n\n      lastSlash = index\n      dots = 0\n    } else if (code === 46 /* `.` */ && dots > -1) {\n      dots++\n    } else {\n      dots = -1\n    }\n  }\n\n  return result\n}\n\n/**\n * Make sure `path` is a string.\n *\n * @param {string} path\n *   File path.\n * @returns {asserts path is string}\n *   Nothing.\n */\nfunction assertPath(path) {\n  if (typeof path !== 'string') {\n    throw new TypeError(\n      'Path must be a string. Received ' + JSON.stringify(path)\n    )\n  }\n}\n\n/* eslint-enable max-depth, complexity */\n", "// Somewhat based on:\n// <https://github.com/defunctzombie/node-process/blob/master/browser.js>.\n// But I don\u2019t think one tiny line of code can be copyrighted. \uD83D\uDE05\nexport const proc = {cwd}\n\nfunction cwd() {\n  return '/'\n}\n", "/**\n * @typedef URL\n * @property {string} hash\n * @property {string} host\n * @property {string} hostname\n * @property {string} href\n * @property {string} origin\n * @property {string} password\n * @property {string} pathname\n * @property {string} port\n * @property {string} protocol\n * @property {string} search\n * @property {any} searchParams\n * @property {string} username\n * @property {() => string} toString\n * @property {() => string} toJSON\n */\n\n/**\n * Check if `fileUrlOrPath` looks like a URL.\n *\n * @param {unknown} fileUrlOrPath\n *   File path or URL.\n * @returns {fileUrlOrPath is URL}\n *   Whether it\u2019s a URL.\n */\n// From: <https://github.com/nodejs/node/blob/fcf8ba4/lib/internal/url.js#L1501>\nexport function isUrl(fileUrlOrPath) {\n  return (\n    fileUrlOrPath !== null &&\n    typeof fileUrlOrPath === 'object' &&\n    // @ts-expect-error: indexable.\n    fileUrlOrPath.href &&\n    // @ts-expect-error: indexable.\n    fileUrlOrPath.origin\n  )\n}\n", "/// <reference lib=\"dom\" />\n\nimport {isUrl} from './minurl.shared.js'\n\n// See: <https://github.com/nodejs/node/blob/fcf8ba4/lib/internal/url.js>\n\n/**\n * @param {string | URL} path\n *   File URL.\n * @returns {string}\n *   File URL.\n */\nexport function urlToPath(path) {\n  if (typeof path === 'string') {\n    path = new URL(path)\n  } else if (!isUrl(path)) {\n    /** @type {NodeJS.ErrnoException} */\n    const error = new TypeError(\n      'The \"path\" argument must be of type string or an instance of URL. Received `' +\n        path +\n        '`'\n    )\n    error.code = 'ERR_INVALID_ARG_TYPE'\n    throw error\n  }\n\n  if (path.protocol !== 'file:') {\n    /** @type {NodeJS.ErrnoException} */\n    const error = new TypeError('The URL must be of scheme file')\n    error.code = 'ERR_INVALID_URL_SCHEME'\n    throw error\n  }\n\n  return getPathFromURLPosix(path)\n}\n\n/**\n * Get a path from a POSIX URL.\n *\n * @param {URL} url\n *   URL.\n * @returns {string}\n *   File path.\n */\nfunction getPathFromURLPosix(url) {\n  if (url.hostname !== '') {\n    /** @type {NodeJS.ErrnoException} */\n    const error = new TypeError(\n      'File URL host must be \"localhost\" or empty on darwin'\n    )\n    error.code = 'ERR_INVALID_FILE_URL_HOST'\n    throw error\n  }\n\n  const pathname = url.pathname\n  let index = -1\n\n  while (++index < pathname.length) {\n    if (\n      pathname.charCodeAt(index) === 37 /* `%` */ &&\n      pathname.charCodeAt(index + 1) === 50 /* `2` */\n    ) {\n      const third = pathname.charCodeAt(index + 2)\n      if (third === 70 /* `F` */ || third === 102 /* `f` */) {\n        /** @type {NodeJS.ErrnoException} */\n        const error = new TypeError(\n          'File URL path must not include encoded / characters'\n        )\n        error.code = 'ERR_INVALID_FILE_URL_PATH'\n        throw error\n      }\n    }\n  }\n\n  return decodeURIComponent(pathname)\n}\n\nexport {isUrl} from './minurl.shared.js'\n", "/**\n * Throw a given error.\n *\n * @param {Error|null|undefined} [error]\n *   Maybe error.\n * @returns {asserts error is null|undefined}\n */\nexport function bail(error) {\n  if (error) {\n    throw error\n  }\n}\n", "/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('vfile').VFileCompatible} VFileCompatible\n * @typedef {import('vfile').VFileValue} VFileValue\n * @typedef {import('..').Processor} Processor\n * @typedef {import('..').Plugin} Plugin\n * @typedef {import('..').Preset} Preset\n * @typedef {import('..').Pluggable} Pluggable\n * @typedef {import('..').PluggableList} PluggableList\n * @typedef {import('..').Transformer} Transformer\n * @typedef {import('..').Parser} Parser\n * @typedef {import('..').Compiler} Compiler\n * @typedef {import('..').RunCallback} RunCallback\n * @typedef {import('..').ProcessCallback} ProcessCallback\n *\n * @typedef Context\n * @property {Node} tree\n * @property {VFile} file\n */\n\nimport {bail} from 'bail'\nimport isBuffer from 'is-buffer'\nimport extend from 'extend'\nimport isPlainObj from 'is-plain-obj'\nimport {trough} from 'trough'\nimport {VFile} from 'vfile'\n\n// Expose a frozen processor.\nexport const unified = base().freeze()\n\nconst own = {}.hasOwnProperty\n\n// Function to create the first processor.\n/**\n * @returns {Processor}\n */\nfunction base() {\n  const transformers = trough()\n  /** @type {Processor['attachers']} */\n  const attachers = []\n  /** @type {Record<string, unknown>} */\n  let namespace = {}\n  /** @type {boolean|undefined} */\n  let frozen\n  let freezeIndex = -1\n\n  // Data management.\n  // @ts-expect-error: overloads are handled.\n  processor.data = data\n  processor.Parser = undefined\n  processor.Compiler = undefined\n\n  // Lock.\n  processor.freeze = freeze\n\n  // Plugins.\n  processor.attachers = attachers\n  // @ts-expect-error: overloads are handled.\n  processor.use = use\n\n  // API.\n  processor.parse = parse\n  processor.stringify = stringify\n  // @ts-expect-error: overloads are handled.\n  processor.run = run\n  processor.runSync = runSync\n  // @ts-expect-error: overloads are handled.\n  processor.process = process\n  processor.processSync = processSync\n\n  // Expose.\n  return processor\n\n  // Create a new processor based on the processor in the current scope.\n  /** @type {Processor} */\n  function processor() {\n    const destination = base()\n    let index = -1\n\n    while (++index < attachers.length) {\n      destination.use(...attachers[index])\n    }\n\n    destination.data(extend(true, {}, namespace))\n\n    return destination\n  }\n\n  /**\n   * @param {string|Record<string, unknown>} [key]\n   * @param {unknown} [value]\n   * @returns {unknown}\n   */\n  function data(key, value) {\n    if (typeof key === 'string') {\n      // Set `key`.\n      if (arguments.length === 2) {\n        assertUnfrozen('data', frozen)\n        namespace[key] = value\n        return processor\n      }\n\n      // Get `key`.\n      return (own.call(namespace, key) && namespace[key]) || null\n    }\n\n    // Set space.\n    if (key) {\n      assertUnfrozen('data', frozen)\n      namespace = key\n      return processor\n    }\n\n    // Get space.\n    return namespace\n  }\n\n  /** @type {Processor['freeze']} */\n  function freeze() {\n    if (frozen) {\n      return processor\n    }\n\n    while (++freezeIndex < attachers.length) {\n      const [attacher, ...options] = attachers[freezeIndex]\n\n      if (options[0] === false) {\n        continue\n      }\n\n      if (options[0] === true) {\n        options[0] = undefined\n      }\n\n      /** @type {Transformer|void} */\n      const transformer = attacher.call(processor, ...options)\n\n      if (typeof transformer === 'function') {\n        transformers.use(transformer)\n      }\n    }\n\n    frozen = true\n    freezeIndex = Number.POSITIVE_INFINITY\n\n    return processor\n  }\n\n  /**\n   * @param {Pluggable|null|undefined} [value]\n   * @param {...unknown} options\n   * @returns {Processor}\n   */\n  function use(value, ...options) {\n    /** @type {Record<string, unknown>|undefined} */\n    let settings\n\n    assertUnfrozen('use', frozen)\n\n    if (value === null || value === undefined) {\n      // Empty.\n    } else if (typeof value === 'function') {\n      addPlugin(value, ...options)\n    } else if (typeof value === 'object') {\n      if (Array.isArray(value)) {\n        addList(value)\n      } else {\n        addPreset(value)\n      }\n    } else {\n      throw new TypeError('Expected usable value, not `' + value + '`')\n    }\n\n    if (settings) {\n      namespace.settings = Object.assign(namespace.settings || {}, settings)\n    }\n\n    return processor\n\n    /**\n     * @param {import('..').Pluggable<unknown[]>} value\n     * @returns {void}\n     */\n    function add(value) {\n      if (typeof value === 'function') {\n        addPlugin(value)\n      } else if (typeof value === 'object') {\n        if (Array.isArray(value)) {\n          const [plugin, ...options] = value\n          addPlugin(plugin, ...options)\n        } else {\n          addPreset(value)\n        }\n      } else {\n        throw new TypeError('Expected usable value, not `' + value + '`')\n      }\n    }\n\n    /**\n     * @param {Preset} result\n     * @returns {void}\n     */\n    function addPreset(result) {\n      addList(result.plugins)\n\n      if (result.settings) {\n        settings = Object.assign(settings || {}, result.settings)\n      }\n    }\n\n    /**\n     * @param {PluggableList|null|undefined} [plugins]\n     * @returns {void}\n     */\n    function addList(plugins) {\n      let index = -1\n\n      if (plugins === null || plugins === undefined) {\n        // Empty.\n      } else if (Array.isArray(plugins)) {\n        while (++index < plugins.length) {\n          const thing = plugins[index]\n          add(thing)\n        }\n      } else {\n        throw new TypeError('Expected a list of plugins, not `' + plugins + '`')\n      }\n    }\n\n    /**\n     * @param {Plugin} plugin\n     * @param {...unknown} [value]\n     * @returns {void}\n     */\n    function addPlugin(plugin, value) {\n      let index = -1\n      /** @type {Processor['attachers'][number]|undefined} */\n      let entry\n\n      while (++index < attachers.length) {\n        if (attachers[index][0] === plugin) {\n          entry = attachers[index]\n          break\n        }\n      }\n\n      if (entry) {\n        if (isPlainObj(entry[1]) && isPlainObj(value)) {\n          value = extend(true, entry[1], value)\n        }\n\n        entry[1] = value\n      } else {\n        // @ts-expect-error: fine.\n        attachers.push([...arguments])\n      }\n    }\n  }\n\n  /** @type {Processor['parse']} */\n  function parse(doc) {\n    processor.freeze()\n    const file = vfile(doc)\n    const Parser = processor.Parser\n    assertParser('parse', Parser)\n\n    if (newable(Parser, 'parse')) {\n      // @ts-expect-error: `newable` checks this.\n      return new Parser(String(file), file).parse()\n    }\n\n    // @ts-expect-error: `newable` checks this.\n    return Parser(String(file), file) // eslint-disable-line new-cap\n  }\n\n  /** @type {Processor['stringify']} */\n  function stringify(node, doc) {\n    processor.freeze()\n    const file = vfile(doc)\n    const Compiler = processor.Compiler\n    assertCompiler('stringify', Compiler)\n    assertNode(node)\n\n    if (newable(Compiler, 'compile')) {\n      // @ts-expect-error: `newable` checks this.\n      return new Compiler(node, file).compile()\n    }\n\n    // @ts-expect-error: `newable` checks this.\n    return Compiler(node, file) // eslint-disable-line new-cap\n  }\n\n  /**\n   * @param {Node} node\n   * @param {VFileCompatible|RunCallback} [doc]\n   * @param {RunCallback} [callback]\n   * @returns {Promise<Node>|void}\n   */\n  function run(node, doc, callback) {\n    assertNode(node)\n    processor.freeze()\n\n    if (!callback && typeof doc === 'function') {\n      callback = doc\n      doc = undefined\n    }\n\n    if (!callback) {\n      return new Promise(executor)\n    }\n\n    executor(null, callback)\n\n    /**\n     * @param {null|((node: Node) => void)} resolve\n     * @param {(error: Error) => void} reject\n     * @returns {void}\n     */\n    function executor(resolve, reject) {\n      // @ts-expect-error: `doc` can\u2019t be a callback anymore, we checked.\n      transformers.run(node, vfile(doc), done)\n\n      /**\n       * @param {Error|null} error\n       * @param {Node} tree\n       * @param {VFile} file\n       * @returns {void}\n       */\n      function done(error, tree, file) {\n        tree = tree || node\n        if (error) {\n          reject(error)\n        } else if (resolve) {\n          resolve(tree)\n        } else {\n          // @ts-expect-error: `callback` is defined if `resolve` is not.\n          callback(null, tree, file)\n        }\n      }\n    }\n  }\n\n  /** @type {Processor['runSync']} */\n  function runSync(node, file) {\n    /** @type {Node|undefined} */\n    let result\n    /** @type {boolean|undefined} */\n    let complete\n\n    processor.run(node, file, done)\n\n    assertDone('runSync', 'run', complete)\n\n    // @ts-expect-error: we either bailed on an error or have a tree.\n    return result\n\n    /**\n     * @param {Error|null} [error]\n     * @param {Node} [tree]\n     * @returns {void}\n     */\n    function done(error, tree) {\n      bail(error)\n      result = tree\n      complete = true\n    }\n  }\n\n  /**\n   * @param {VFileCompatible} doc\n   * @param {ProcessCallback} [callback]\n   * @returns {Promise<VFile>|undefined}\n   */\n  function process(doc, callback) {\n    processor.freeze()\n    assertParser('process', processor.Parser)\n    assertCompiler('process', processor.Compiler)\n\n    if (!callback) {\n      return new Promise(executor)\n    }\n\n    executor(null, callback)\n\n    /**\n     * @param {null|((file: VFile) => void)} resolve\n     * @param {(error?: Error|null|undefined) => void} reject\n     * @returns {void}\n     */\n    function executor(resolve, reject) {\n      const file = vfile(doc)\n\n      processor.run(processor.parse(file), file, (error, tree, file) => {\n        if (error || !tree || !file) {\n          done(error)\n        } else {\n          /** @type {unknown} */\n          const result = processor.stringify(tree, file)\n\n          if (result === undefined || result === null) {\n            // Empty.\n          } else if (looksLikeAVFileValue(result)) {\n            file.value = result\n          } else {\n            file.result = result\n          }\n\n          done(error, file)\n        }\n      })\n\n      /**\n       * @param {Error|null|undefined} [error]\n       * @param {VFile|undefined} [file]\n       * @returns {void}\n       */\n      function done(error, file) {\n        if (error || !file) {\n          reject(error)\n        } else if (resolve) {\n          resolve(file)\n        } else {\n          // @ts-expect-error: `callback` is defined if `resolve` is not.\n          callback(null, file)\n        }\n      }\n    }\n  }\n\n  /** @type {Processor['processSync']} */\n  function processSync(doc) {\n    /** @type {boolean|undefined} */\n    let complete\n\n    processor.freeze()\n    assertParser('processSync', processor.Parser)\n    assertCompiler('processSync', processor.Compiler)\n\n    const file = vfile(doc)\n\n    processor.process(file, done)\n\n    assertDone('processSync', 'process', complete)\n\n    return file\n\n    /**\n     * @param {Error|null|undefined} [error]\n     * @returns {void}\n     */\n    function done(error) {\n      complete = true\n      bail(error)\n    }\n  }\n}\n\n/**\n * Check if `value` is a constructor.\n *\n * @param {unknown} value\n * @param {string} name\n * @returns {boolean}\n */\nfunction newable(value, name) {\n  return (\n    typeof value === 'function' &&\n    // Prototypes do exist.\n    // type-coverage:ignore-next-line\n    value.prototype &&\n    // A function with keys in its prototype is probably a constructor.\n    // Classes\u2019 prototype methods are not enumerable, so we check if some value\n    // exists in the prototype.\n    // type-coverage:ignore-next-line\n    (keys(value.prototype) || name in value.prototype)\n  )\n}\n\n/**\n * Check if `value` is an object with keys.\n *\n * @param {Record<string, unknown>} value\n * @returns {boolean}\n */\nfunction keys(value) {\n  /** @type {string} */\n  let key\n\n  for (key in value) {\n    if (own.call(value, key)) {\n      return true\n    }\n  }\n\n  return false\n}\n\n/**\n * Assert a parser is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Parser}\n */\nfunction assertParser(name, value) {\n  if (typeof value !== 'function') {\n    throw new TypeError('Cannot `' + name + '` without `Parser`')\n  }\n}\n\n/**\n * Assert a compiler is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Compiler}\n */\nfunction assertCompiler(name, value) {\n  if (typeof value !== 'function') {\n    throw new TypeError('Cannot `' + name + '` without `Compiler`')\n  }\n}\n\n/**\n * Assert the processor is not frozen.\n *\n * @param {string} name\n * @param {unknown} frozen\n * @returns {asserts frozen is false}\n */\nfunction assertUnfrozen(name, frozen) {\n  if (frozen) {\n    throw new Error(\n      'Cannot call `' +\n        name +\n        '` on a frozen processor.\\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.'\n    )\n  }\n}\n\n/**\n * Assert `node` is a unist node.\n *\n * @param {unknown} node\n * @returns {asserts node is Node}\n */\nfunction assertNode(node) {\n  // `isPlainObj` unfortunately uses `any` instead of `unknown`.\n  // type-coverage:ignore-next-line\n  if (!isPlainObj(node) || typeof node.type !== 'string') {\n    throw new TypeError('Expected node, got `' + node + '`')\n    // Fine.\n  }\n}\n\n/**\n * Assert that `complete` is `true`.\n *\n * @param {string} name\n * @param {string} asyncName\n * @param {unknown} complete\n * @returns {asserts complete is true}\n */\nfunction assertDone(name, asyncName, complete) {\n  if (!complete) {\n    throw new Error(\n      '`' + name + '` finished async. Use `' + asyncName + '` instead'\n    )\n  }\n}\n\n/**\n * @param {VFileCompatible} [value]\n * @returns {VFile}\n */\nfunction vfile(value) {\n  return looksLikeAVFile(value) ? value : new VFile(value)\n}\n\n/**\n * @param {VFileCompatible} [value]\n * @returns {value is VFile}\n */\nfunction looksLikeAVFile(value) {\n  return Boolean(\n    value &&\n      typeof value === 'object' &&\n      'message' in value &&\n      'messages' in value\n  )\n}\n\n/**\n * @param {unknown} [value]\n * @returns {value is VFileValue}\n */\nfunction looksLikeAVFileValue(value) {\n  return typeof value === 'string' || isBuffer(value)\n}\n", "export default function isPlainObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);\n}\n", "// To do: remove `void`s\n// To do: remove `null` from output of our APIs, allow it as user APIs.\n\n/**\n * @typedef {(error?: Error | null | undefined, ...output: Array<any>) => void} Callback\n *   Callback.\n *\n * @typedef {(...input: Array<any>) => any} Middleware\n *   Ware.\n *\n * @typedef Pipeline\n *   Pipeline.\n * @property {Run} run\n *   Run the pipeline.\n * @property {Use} use\n *   Add middleware.\n *\n * @typedef {(...input: Array<any>) => void} Run\n *   Call all middleware.\n *\n *   Calls `done` on completion with either an error or the output of the\n *   last middleware.\n *\n *   > \uD83D\uDC49 **Note**: as the length of input defines whether async functions get a\n *   > `next` function,\n *   > it\u2019s recommended to keep `input` at one value normally.\n\n *\n * @typedef {(fn: Middleware) => Pipeline} Use\n *   Add middleware.\n */\n\n/**\n * Create new middleware.\n *\n * @returns {Pipeline}\n *   Pipeline.\n */\nexport function trough() {\n  /** @type {Array<Middleware>} */\n  const fns = []\n  /** @type {Pipeline} */\n  const pipeline = {run, use}\n\n  return pipeline\n\n  /** @type {Run} */\n  function run(...values) {\n    let middlewareIndex = -1\n    /** @type {Callback} */\n    const callback = values.pop()\n\n    if (typeof callback !== 'function') {\n      throw new TypeError('Expected function as last argument, not ' + callback)\n    }\n\n    next(null, ...values)\n\n    /**\n     * Run the next `fn`, or we\u2019re done.\n     *\n     * @param {Error | null | undefined} error\n     * @param {Array<any>} output\n     */\n    function next(error, ...output) {\n      const fn = fns[++middlewareIndex]\n      let index = -1\n\n      if (error) {\n        callback(error)\n        return\n      }\n\n      // Copy non-nullish input into values.\n      while (++index < values.length) {\n        if (output[index] === null || output[index] === undefined) {\n          output[index] = values[index]\n        }\n      }\n\n      // Save the newly created `output` for the next call.\n      values = output\n\n      // Next or done.\n      if (fn) {\n        wrap(fn, next)(...output)\n      } else {\n        callback(null, ...output)\n      }\n    }\n  }\n\n  /** @type {Use} */\n  function use(middelware) {\n    if (typeof middelware !== 'function') {\n      throw new TypeError(\n        'Expected `middelware` to be a function, not ' + middelware\n      )\n    }\n\n    fns.push(middelware)\n    return pipeline\n  }\n}\n\n/**\n * Wrap `middleware` into a uniform interface.\n *\n * You can pass all input to the resulting function.\n * `callback` is then called with the output of `middleware`.\n *\n * If `middleware` accepts more arguments than the later given in input,\n * an extra `done` function is passed to it after that input,\n * which must be called by `middleware`.\n *\n * The first value in `input` is the main input value.\n * All other input values are the rest input values.\n * The values given to `callback` are the input values,\n * merged with every non-nullish output value.\n *\n * * if `middleware` throws an error,\n *   returns a promise that is rejected,\n *   or calls the given `done` function with an error,\n *   `callback` is called with that error\n * * if `middleware` returns a value or returns a promise that is resolved,\n *   that value is the main output value\n * * if `middleware` calls `done`,\n *   all non-nullish values except for the first one (the error) overwrite the\n *   output values\n *\n * @param {Middleware} middleware\n *   Function to wrap.\n * @param {Callback} callback\n *   Callback called with the output of `middleware`.\n * @returns {Run}\n *   Wrapped middleware.\n */\nexport function wrap(middleware, callback) {\n  /** @type {boolean} */\n  let called\n\n  return wrapped\n\n  /**\n   * Call `middleware`.\n   * @this {any}\n   * @param {Array<any>} parameters\n   * @returns {void}\n   */\n  function wrapped(...parameters) {\n    const fnExpectsCallback = middleware.length > parameters.length\n    /** @type {any} */\n    let result\n\n    if (fnExpectsCallback) {\n      parameters.push(done)\n    }\n\n    try {\n      result = middleware.apply(this, parameters)\n    } catch (error) {\n      const exception = /** @type {Error} */ (error)\n\n      // Well, this is quite the pickle.\n      // `middleware` received a callback and called it synchronously, but that\n      // threw an error.\n      // The only thing left to do is to throw the thing instead.\n      if (fnExpectsCallback && called) {\n        throw exception\n      }\n\n      return done(exception)\n    }\n\n    if (!fnExpectsCallback) {\n      if (result && result.then && typeof result.then === 'function') {\n        result.then(then, done)\n      } else if (result instanceof Error) {\n        done(result)\n      } else {\n        then(result)\n      }\n    }\n  }\n\n  /**\n   * Call `callback`, only once.\n   *\n   * @type {Callback}\n   */\n  function done(error, ...output) {\n    if (!called) {\n      called = true\n      callback(error, ...output)\n    }\n  }\n\n  /**\n   * Call `done` with one value.\n   *\n   * @param {any} [value]\n   */\n  function then(value) {\n    done(null, value)\n  }\n}\n", "/**\n * @typedef {import('mdast').Root|import('mdast').Content} Node\n *\n * @typedef Options\n *   Configuration (optional).\n * @property {boolean | null | undefined} [includeImageAlt=true]\n *   Whether to use `alt` for `image`s.\n * @property {boolean | null | undefined} [includeHtml=true]\n *   Whether to use `value` of HTML.\n */\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Get the text content of a node or list of nodes.\n *\n * Prefers the node\u2019s plain-text fields, otherwise serializes its children,\n * and if the given value is an array, serialize the nodes in it.\n *\n * @param {unknown} value\n *   Thing to serialize, typically `Node`.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {string}\n *   Serialized `value`.\n */\nexport function toString(value, options) {\n  const settings = options || emptyOptions\n  const includeImageAlt =\n    typeof settings.includeImageAlt === 'boolean'\n      ? settings.includeImageAlt\n      : true\n  const includeHtml =\n    typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true\n\n  return one(value, includeImageAlt, includeHtml)\n}\n\n/**\n * One node or several nodes.\n *\n * @param {unknown} value\n *   Thing to serialize.\n * @param {boolean} includeImageAlt\n *   Include image `alt`s.\n * @param {boolean} includeHtml\n *   Include HTML.\n * @returns {string}\n *   Serialized node.\n */\nfunction one(value, includeImageAlt, includeHtml) {\n  if (node(value)) {\n    if ('value' in value) {\n      return value.type === 'html' && !includeHtml ? '' : value.value\n    }\n\n    if (includeImageAlt && 'alt' in value && value.alt) {\n      return value.alt\n    }\n\n    if ('children' in value) {\n      return all(value.children, includeImageAlt, includeHtml)\n    }\n  }\n\n  if (Array.isArray(value)) {\n    return all(value, includeImageAlt, includeHtml)\n  }\n\n  return ''\n}\n\n/**\n * Serialize a list of nodes.\n *\n * @param {Array<unknown>} values\n *   Thing to serialize.\n * @param {boolean} includeImageAlt\n *   Include image `alt`s.\n * @param {boolean} includeHtml\n *   Include HTML.\n * @returns {string}\n *   Serialized nodes.\n */\nfunction all(values, includeImageAlt, includeHtml) {\n  /** @type {Array<string>} */\n  const result = []\n  let index = -1\n\n  while (++index < values.length) {\n    result[index] = one(values[index], includeImageAlt, includeHtml)\n  }\n\n  return result.join('')\n}\n\n/**\n * Check if `value` looks like a node.\n *\n * @param {unknown} value\n *   Thing.\n * @returns {value is Node}\n *   Whether `value` is a node.\n */\nfunction node(value) {\n  return Boolean(value && typeof value === 'object')\n}\n", "/**\n * Like `Array#splice`, but smarter for giant arrays.\n *\n * `Array#splice` takes all items to be inserted as individual argument which\n * causes a stack overflow in V8 when trying to insert 100k items for instance.\n *\n * Otherwise, this does not return the removed items, and takes `items` as an\n * array instead of rest parameters.\n *\n * @template {unknown} T\n *   Item type.\n * @param {Array<T>} list\n *   List to operate on.\n * @param {number} start\n *   Index to remove/insert at (can be negative).\n * @param {number} remove\n *   Number of items to remove.\n * @param {Array<T>} items\n *   Items to inject into `list`.\n * @returns {void}\n *   Nothing.\n */\nexport function splice(list, start, remove, items) {\n  const end = list.length\n  let chunkStart = 0\n  /** @type {Array<unknown>} */\n  let parameters\n\n  // Make start between zero and `end` (included).\n  if (start < 0) {\n    start = -start > end ? 0 : end + start\n  } else {\n    start = start > end ? end : start\n  }\n  remove = remove > 0 ? remove : 0\n\n  // No need to chunk the items if there\u2019s only a couple (10k) items.\n  if (items.length < 10000) {\n    parameters = Array.from(items)\n    parameters.unshift(start, remove)\n    // @ts-expect-error Hush, it\u2019s fine.\n    list.splice(...parameters)\n  } else {\n    // Delete `remove` items starting from `start`\n    if (remove) list.splice(start, remove)\n\n    // Insert the items in chunks to not cause stack overflows.\n    while (chunkStart < items.length) {\n      parameters = items.slice(chunkStart, chunkStart + 10000)\n      parameters.unshift(start, 0)\n      // @ts-expect-error Hush, it\u2019s fine.\n      list.splice(...parameters)\n      chunkStart += 10000\n      start += 10000\n    }\n  }\n}\n\n/**\n * Append `items` (an array) at the end of `list` (another array).\n * When `list` was empty, returns `items` instead.\n *\n * This prevents a potentially expensive operation when `list` is empty,\n * and adds items in batches to prevent V8 from hanging.\n *\n * @template {unknown} T\n *   Item type.\n * @param {Array<T>} list\n *   List to operate on.\n * @param {Array<T>} items\n *   Items to add to `list`.\n * @returns {Array<T>}\n *   Either `list` or `items`.\n */\nexport function push(list, items) {\n  if (list.length > 0) {\n    splice(list, list.length, 0, items)\n    return list\n  }\n  return items\n}\n", "/**\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').Handles} Handles\n * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension\n * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension\n */\n\nimport {splice} from 'micromark-util-chunked'\n\nconst hasOwnProperty = {}.hasOwnProperty\n\n/**\n * Combine multiple syntax extensions into one.\n *\n * @param {Array<Extension>} extensions\n *   List of syntax extensions.\n * @returns {NormalizedExtension}\n *   A single combined extension.\n */\nexport function combineExtensions(extensions) {\n  /** @type {NormalizedExtension} */\n  const all = {}\n  let index = -1\n\n  while (++index < extensions.length) {\n    syntaxExtension(all, extensions[index])\n  }\n\n  return all\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {NormalizedExtension} all\n *   Extension to merge into.\n * @param {Extension} extension\n *   Extension to merge.\n * @returns {void}\n */\nfunction syntaxExtension(all, extension) {\n  /** @type {keyof Extension} */\n  let hook\n\n  for (hook in extension) {\n    const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n    /** @type {Record<string, unknown>} */\n    const left = maybe || (all[hook] = {})\n    /** @type {Record<string, unknown> | undefined} */\n    const right = extension[hook]\n    /** @type {string} */\n    let code\n\n    if (right) {\n      for (code in right) {\n        if (!hasOwnProperty.call(left, code)) left[code] = []\n        const value = right[code]\n        constructs(\n          // @ts-expect-error Looks like a list.\n          left[code],\n          Array.isArray(value) ? value : value ? [value] : []\n        )\n      }\n    }\n  }\n}\n\n/**\n * Merge `list` into `existing` (both lists of constructs).\n * Mutates `existing`.\n *\n * @param {Array<unknown>} existing\n * @param {Array<unknown>} list\n * @returns {void}\n */\nfunction constructs(existing, list) {\n  let index = -1\n  /** @type {Array<unknown>} */\n  const before = []\n\n  while (++index < list.length) {\n    // @ts-expect-error Looks like an object.\n    ;(list[index].add === 'after' ? existing : before).push(list[index])\n  }\n\n  splice(existing, 0, 0, before)\n}\n\n/**\n * Combine multiple HTML extensions into one.\n *\n * @param {Array<HtmlExtension>} htmlExtensions\n *   List of HTML extensions.\n * @returns {HtmlExtension}\n *   A single combined HTML extension.\n */\nexport function combineHtmlExtensions(htmlExtensions) {\n  /** @type {HtmlExtension} */\n  const handlers = {}\n  let index = -1\n\n  while (++index < htmlExtensions.length) {\n    htmlExtension(handlers, htmlExtensions[index])\n  }\n\n  return handlers\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {HtmlExtension} all\n *   Extension to merge into.\n * @param {HtmlExtension} extension\n *   Extension to merge.\n * @returns {void}\n */\nfunction htmlExtension(all, extension) {\n  /** @type {keyof HtmlExtension} */\n  let hook\n\n  for (hook in extension) {\n    const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n    const left = maybe || (all[hook] = {})\n    const right = extension[hook]\n    /** @type {keyof Handles} */\n    let type\n\n    if (right) {\n      for (type in right) {\n        // @ts-expect-error assume document vs regular handler are managed correctly.\n        left[type] = right[type]\n      }\n    }\n  }\n}\n", "// This module is generated by `script/`.\n//\n// CommonMark handles attention (emphasis, strong) markers based on what comes\n// before or after them.\n// One such difference is if those characters are Unicode punctuation.\n// This script is generated from the Unicode data.\n\n/**\n * Regular expression that matches a unicode punctuation character.\n */\nexport const unicodePunctuationRegex =\n  /[!-\\/:-@\\[-`\\{-~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061D-\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C77\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1B7D\\u1B7E\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4F\\u2E52-\\u2E5D\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]/\n", "/**\n * @typedef {import('micromark-util-types').Code} Code\n */\n\nimport {unicodePunctuationRegex} from './lib/unicode-punctuation-regex.js'\n\n/**\n * Check whether the character code represents an ASCII alpha (`a` through `z`,\n * case insensitive).\n *\n * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha.\n *\n * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`)\n * to U+005A (`Z`).\n *\n * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`)\n * to U+007A (`z`).\n *\n * @param code\n *   Code.\n * @returns\n *   Whether it matches.\n */\nexport const asciiAlpha = regexCheck(/[A-Za-z]/)\n\n/**\n * Check whether the character code represents an ASCII alphanumeric (`a`\n * through `z`, case insensitive, or `0` through `9`).\n *\n * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha\n * (see `asciiAlpha`).\n *\n * @param code\n *   Code.\n * @returns\n *   Whether it matches.\n */\nexport const asciiAlphanumeric = regexCheck(/[\\dA-Za-z]/)\n\n/**\n * Check whether the character code represents an ASCII atext.\n *\n * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in\n * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`),\n * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F\n * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E\n * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE\n * (`{`) to U+007E TILDE (`~`).\n *\n * See:\n * **\\[RFC5322]**:\n * [Internet Message Format](https://tools.ietf.org/html/rfc5322).\n * P. Resnick.\n * IETF.\n *\n * @param code\n *   Code.\n * @returns\n *   Whether it matches.\n */\nexport const asciiAtext = regexCheck(/[#-'*+\\--9=?A-Z^-~]/)\n\n/**\n * Check whether a character code is an ASCII control character.\n *\n * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL)\n * to U+001F (US), or U+007F (DEL).\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function asciiControl(code) {\n  return (\n    // Special whitespace codes (which have negative values), C0 and Control\n    // character DEL\n    code !== null && (code < 32 || code === 127)\n  )\n}\n\n/**\n * Check whether the character code represents an ASCII digit (`0` through `9`).\n *\n * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to\n * U+0039 (`9`).\n *\n * @param code\n *   Code.\n * @returns\n *   Whether it matches.\n */\nexport const asciiDigit = regexCheck(/\\d/)\n\n/**\n * Check whether the character code represents an ASCII hex digit (`a` through\n * `f`, case insensitive, or `0` through `9`).\n *\n * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex\n * digit, or an ASCII lower hex digit.\n *\n * An **ASCII upper hex digit** is a character in the inclusive range U+0041\n * (`A`) to U+0046 (`F`).\n *\n * An **ASCII lower hex digit** is a character in the inclusive range U+0061\n * (`a`) to U+0066 (`f`).\n *\n * @param code\n *   Code.\n * @returns\n *   Whether it matches.\n */\nexport const asciiHexDigit = regexCheck(/[\\dA-Fa-f]/)\n\n/**\n * Check whether the character code represents ASCII punctuation.\n *\n * An **ASCII punctuation** is a character in the inclusive ranges U+0021\n * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT\n * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT\n * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`).\n *\n * @param code\n *   Code.\n * @returns\n *   Whether it matches.\n */\nexport const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/)\n\n/**\n * Check whether a character code is a markdown line ending.\n *\n * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN\n * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR).\n *\n * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE\n * RETURN (CR) are replaced by these virtual characters depending on whether\n * they occurred together.\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function markdownLineEnding(code) {\n  return code !== null && code < -2\n}\n\n/**\n * Check whether a character code is a markdown line ending (see\n * `markdownLineEnding`) or markdown space (see `markdownSpace`).\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function markdownLineEndingOrSpace(code) {\n  return code !== null && (code < 0 || code === 32)\n}\n\n/**\n * Check whether a character code is a markdown space.\n *\n * A **markdown space** is the concrete character U+0020 SPACE (SP) and the\n * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT).\n *\n * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is\n * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL\n * SPACE (VS) characters, depending on the column at which the tab occurred.\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function markdownSpace(code) {\n  return code === -2 || code === -1 || code === 32\n}\n\n// Size note: removing ASCII from the regex and using `asciiPunctuation` here\n// In fact adds to the bundle size.\n/**\n * Check whether the character code represents Unicode punctuation.\n *\n * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation,\n * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf`\n * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po`\n * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII\n * punctuation (see `asciiPunctuation`).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n *   Code.\n * @returns\n *   Whether it matches.\n */\nexport const unicodePunctuation = regexCheck(unicodePunctuationRegex)\n\n/**\n * Check whether the character code represents Unicode whitespace.\n *\n * Note that this does handle micromark specific markdown whitespace characters.\n * See `markdownLineEndingOrSpace` to check that.\n *\n * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator,\n * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF),\n * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\\[UNICODE]**).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n *   Code.\n * @returns\n *   Whether it matches.\n */\nexport const unicodeWhitespace = regexCheck(/\\s/)\n\n/**\n * Create a code check from a regex.\n *\n * @param {RegExp} regex\n * @returns {(code: Code) => boolean}\n */\nfunction regexCheck(regex) {\n  return check\n\n  /**\n   * Check whether a code matches the bound regex.\n   *\n   * @param {Code} code\n   *   Character code.\n   * @returns {boolean}\n   *   Whether the character code matches the bound regex.\n   */\n  function check(code) {\n    return code !== null && regex.test(String.fromCharCode(code))\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\n\nimport {markdownSpace} from 'micromark-util-character'\n\n// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`.\n\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * *   spaces in markdown are often optional, in which case this factory can be\n *     used and `ok` will be switched to whether spaces were found or not\n * *   one line ending or space can be detected with `markdownSpace(code)` right\n *     before using `factorySpace`\n *\n * ###### Examples\n *\n * Where `\u2409` represents a tab (plus how much it expands) and `\u2420` represents a\n * single space.\n *\n * ```markdown\n * \u2409\n * \u2420\u2420\u2420\u2420\n * \u2409\u2420\n * ```\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {TokenType} type\n *   Type (`' \\t'`).\n * @param {number | undefined} [max=Infinity]\n *   Max (exclusive).\n * @returns\n *   Start state.\n */\nexport function factorySpace(effects, ok, type, max) {\n  const limit = max ? max - 1 : Number.POSITIVE_INFINITY\n  let size = 0\n  return start\n\n  /** @type {State} */\n  function start(code) {\n    if (markdownSpace(code)) {\n      effects.enter(type)\n      return prefix(code)\n    }\n    return ok(code)\n  }\n\n  /** @type {State} */\n  function prefix(code) {\n    if (markdownSpace(code) && size++ < limit) {\n      effects.consume(code)\n      return prefix\n    }\n    effects.exit(type)\n    return ok(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n/** @type {InitialConstruct} */\nexport const content = {\n  tokenize: initializeContent\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Initializer}\n */\nfunction initializeContent(effects) {\n  const contentStart = effects.attempt(\n    this.parser.constructs.contentInitial,\n    afterContentStartConstruct,\n    paragraphInitial\n  )\n  /** @type {Token} */\n  let previous\n  return contentStart\n\n  /** @type {State} */\n  function afterContentStartConstruct(code) {\n    if (code === null) {\n      effects.consume(code)\n      return\n    }\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return factorySpace(effects, contentStart, 'linePrefix')\n  }\n\n  /** @type {State} */\n  function paragraphInitial(code) {\n    effects.enter('paragraph')\n    return lineStart(code)\n  }\n\n  /** @type {State} */\n  function lineStart(code) {\n    const token = effects.enter('chunkText', {\n      contentType: 'text',\n      previous\n    })\n    if (previous) {\n      previous.next = token\n    }\n    previous = token\n    return data(code)\n  }\n\n  /** @type {State} */\n  function data(code) {\n    if (code === null) {\n      effects.exit('chunkText')\n      effects.exit('paragraph')\n      effects.consume(code)\n      return\n    }\n    if (markdownLineEnding(code)) {\n      effects.consume(code)\n      effects.exit('chunkText')\n      return lineStart\n    }\n\n    // Data.\n    effects.consume(code)\n    return data\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').ContainerState} ContainerState\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\n/**\n * @typedef {[Construct, ContainerState]} StackItem\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\nimport {splice} from 'micromark-util-chunked'\n/** @type {InitialConstruct} */\nexport const document = {\n  tokenize: initializeDocument\n}\n\n/** @type {Construct} */\nconst containerConstruct = {\n  tokenize: tokenizeContainer\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Initializer}\n */\nfunction initializeDocument(effects) {\n  const self = this\n  /** @type {Array<StackItem>} */\n  const stack = []\n  let continued = 0\n  /** @type {TokenizeContext | undefined} */\n  let childFlow\n  /** @type {Token | undefined} */\n  let childToken\n  /** @type {number} */\n  let lineStartOffset\n  return start\n\n  /** @type {State} */\n  function start(code) {\n    // First we iterate through the open blocks, starting with the root\n    // document, and descending through last children down to the last open\n    // block.\n    // Each block imposes a condition that the line must satisfy if the block is\n    // to remain open.\n    // For example, a block quote requires a `>` character.\n    // A paragraph requires a non-blank line.\n    // In this phase we may match all or just some of the open blocks.\n    // But we cannot close unmatched blocks yet, because we may have a lazy\n    // continuation line.\n    if (continued < stack.length) {\n      const item = stack[continued]\n      self.containerState = item[1]\n      return effects.attempt(\n        item[0].continuation,\n        documentContinue,\n        checkNewContainers\n      )(code)\n    }\n\n    // Done.\n    return checkNewContainers(code)\n  }\n\n  /** @type {State} */\n  function documentContinue(code) {\n    continued++\n\n    // Note: this field is called `_closeFlow` but it also closes containers.\n    // Perhaps a good idea to rename it but it\u2019s already used in the wild by\n    // extensions.\n    if (self.containerState._closeFlow) {\n      self.containerState._closeFlow = undefined\n      if (childFlow) {\n        closeFlow()\n      }\n\n      // Note: this algorithm for moving events around is similar to the\n      // algorithm when dealing with lazy lines in `writeToChild`.\n      const indexBeforeExits = self.events.length\n      let indexBeforeFlow = indexBeforeExits\n      /** @type {Point | undefined} */\n      let point\n\n      // Find the flow chunk.\n      while (indexBeforeFlow--) {\n        if (\n          self.events[indexBeforeFlow][0] === 'exit' &&\n          self.events[indexBeforeFlow][1].type === 'chunkFlow'\n        ) {\n          point = self.events[indexBeforeFlow][1].end\n          break\n        }\n      }\n      exitContainers(continued)\n\n      // Fix positions.\n      let index = indexBeforeExits\n      while (index < self.events.length) {\n        self.events[index][1].end = Object.assign({}, point)\n        index++\n      }\n\n      // Inject the exits earlier (they\u2019re still also at the end).\n      splice(\n        self.events,\n        indexBeforeFlow + 1,\n        0,\n        self.events.slice(indexBeforeExits)\n      )\n\n      // Discard the duplicate exits.\n      self.events.length = index\n      return checkNewContainers(code)\n    }\n    return start(code)\n  }\n\n  /** @type {State} */\n  function checkNewContainers(code) {\n    // Next, after consuming the continuation markers for existing blocks, we\n    // look for new block starts (e.g. `>` for a block quote).\n    // If we encounter a new block start, we close any blocks unmatched in\n    // step 1 before creating the new block as a child of the last matched\n    // block.\n    if (continued === stack.length) {\n      // No need to `check` whether there\u2019s a container, of `exitContainers`\n      // would be moot.\n      // We can instead immediately `attempt` to parse one.\n      if (!childFlow) {\n        return documentContinued(code)\n      }\n\n      // If we have concrete content, such as block HTML or fenced code,\n      // we can\u2019t have containers \u201Cpierce\u201D into them, so we can immediately\n      // start.\n      if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) {\n        return flowStart(code)\n      }\n\n      // If we do have flow, it could still be a blank line,\n      // but we\u2019d be interrupting it w/ a new container if there\u2019s a current\n      // construct.\n      // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer\n      // needed in micromark-extension-gfm-table@1.0.6).\n      self.interrupt = Boolean(\n        childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack\n      )\n    }\n\n    // Check if there is a new container.\n    self.containerState = {}\n    return effects.check(\n      containerConstruct,\n      thereIsANewContainer,\n      thereIsNoNewContainer\n    )(code)\n  }\n\n  /** @type {State} */\n  function thereIsANewContainer(code) {\n    if (childFlow) closeFlow()\n    exitContainers(continued)\n    return documentContinued(code)\n  }\n\n  /** @type {State} */\n  function thereIsNoNewContainer(code) {\n    self.parser.lazy[self.now().line] = continued !== stack.length\n    lineStartOffset = self.now().offset\n    return flowStart(code)\n  }\n\n  /** @type {State} */\n  function documentContinued(code) {\n    // Try new containers.\n    self.containerState = {}\n    return effects.attempt(\n      containerConstruct,\n      containerContinue,\n      flowStart\n    )(code)\n  }\n\n  /** @type {State} */\n  function containerContinue(code) {\n    continued++\n    stack.push([self.currentConstruct, self.containerState])\n    // Try another.\n    return documentContinued(code)\n  }\n\n  /** @type {State} */\n  function flowStart(code) {\n    if (code === null) {\n      if (childFlow) closeFlow()\n      exitContainers(0)\n      effects.consume(code)\n      return\n    }\n    childFlow = childFlow || self.parser.flow(self.now())\n    effects.enter('chunkFlow', {\n      contentType: 'flow',\n      previous: childToken,\n      _tokenizer: childFlow\n    })\n    return flowContinue(code)\n  }\n\n  /** @type {State} */\n  function flowContinue(code) {\n    if (code === null) {\n      writeToChild(effects.exit('chunkFlow'), true)\n      exitContainers(0)\n      effects.consume(code)\n      return\n    }\n    if (markdownLineEnding(code)) {\n      effects.consume(code)\n      writeToChild(effects.exit('chunkFlow'))\n      // Get ready for the next line.\n      continued = 0\n      self.interrupt = undefined\n      return start\n    }\n    effects.consume(code)\n    return flowContinue\n  }\n\n  /**\n   * @param {Token} token\n   * @param {boolean | undefined} [eof]\n   * @returns {void}\n   */\n  function writeToChild(token, eof) {\n    const stream = self.sliceStream(token)\n    if (eof) stream.push(null)\n    token.previous = childToken\n    if (childToken) childToken.next = token\n    childToken = token\n    childFlow.defineSkip(token.start)\n    childFlow.write(stream)\n\n    // Alright, so we just added a lazy line:\n    //\n    // ```markdown\n    // > a\n    // b.\n    //\n    // Or:\n    //\n    // > ~~~c\n    // d\n    //\n    // Or:\n    //\n    // > | e |\n    // f\n    // ```\n    //\n    // The construct in the second example (fenced code) does not accept lazy\n    // lines, so it marked itself as done at the end of its first line, and\n    // then the content construct parses `d`.\n    // Most constructs in markdown match on the first line: if the first line\n    // forms a construct, a non-lazy line can\u2019t \u201Cunmake\u201D it.\n    //\n    // The construct in the third example is potentially a GFM table, and\n    // those are *weird*.\n    // It *could* be a table, from the first line, if the following line\n    // matches a condition.\n    // In this case, that second line is lazy, which \u201Cunmakes\u201D the first line\n    // and turns the whole into one content block.\n    //\n    // We\u2019ve now parsed the non-lazy and the lazy line, and can figure out\n    // whether the lazy line started a new flow block.\n    // If it did, we exit the current containers between the two flow blocks.\n    if (self.parser.lazy[token.start.line]) {\n      let index = childFlow.events.length\n      while (index--) {\n        if (\n          // The token starts before the line ending\u2026\n          childFlow.events[index][1].start.offset < lineStartOffset &&\n          // \u2026and either is not ended yet\u2026\n          (!childFlow.events[index][1].end ||\n            // \u2026or ends after it.\n            childFlow.events[index][1].end.offset > lineStartOffset)\n        ) {\n          // Exit: there\u2019s still something open, which means it\u2019s a lazy line\n          // part of something.\n          return\n        }\n      }\n\n      // Note: this algorithm for moving events around is similar to the\n      // algorithm when closing flow in `documentContinue`.\n      const indexBeforeExits = self.events.length\n      let indexBeforeFlow = indexBeforeExits\n      /** @type {boolean | undefined} */\n      let seen\n      /** @type {Point | undefined} */\n      let point\n\n      // Find the previous chunk (the one before the lazy line).\n      while (indexBeforeFlow--) {\n        if (\n          self.events[indexBeforeFlow][0] === 'exit' &&\n          self.events[indexBeforeFlow][1].type === 'chunkFlow'\n        ) {\n          if (seen) {\n            point = self.events[indexBeforeFlow][1].end\n            break\n          }\n          seen = true\n        }\n      }\n      exitContainers(continued)\n\n      // Fix positions.\n      index = indexBeforeExits\n      while (index < self.events.length) {\n        self.events[index][1].end = Object.assign({}, point)\n        index++\n      }\n\n      // Inject the exits earlier (they\u2019re still also at the end).\n      splice(\n        self.events,\n        indexBeforeFlow + 1,\n        0,\n        self.events.slice(indexBeforeExits)\n      )\n\n      // Discard the duplicate exits.\n      self.events.length = index\n    }\n  }\n\n  /**\n   * @param {number} size\n   * @returns {void}\n   */\n  function exitContainers(size) {\n    let index = stack.length\n\n    // Exit open containers.\n    while (index-- > size) {\n      const entry = stack[index]\n      self.containerState = entry[1]\n      entry[0].exit.call(self, effects)\n    }\n    stack.length = size\n  }\n  function closeFlow() {\n    childFlow.write([null])\n    childToken = undefined\n    childFlow = undefined\n    self.containerState._closeFlow = undefined\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeContainer(effects, ok, nok) {\n  // Always populated by defaults.\n\n  return factorySpace(\n    effects,\n    effects.attempt(this.parser.constructs.document, ok, nok),\n    'linePrefix',\n    this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4\n  )\n}\n", "/**\n * @typedef {import('micromark-util-types').Code} Code\n */\n\nimport {\n  markdownLineEndingOrSpace,\n  unicodePunctuation,\n  unicodeWhitespace\n} from 'micromark-util-character'\n/**\n * Classify whether a code represents whitespace, punctuation, or something\n * else.\n *\n * Used for attention (emphasis, strong), whose sequences can open or close\n * based on the class of surrounding characters.\n *\n * > \uD83D\uDC49 **Note**: eof (`null`) is seen as whitespace.\n *\n * @param {Code} code\n *   Code.\n * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined}\n *   Group.\n */\nexport function classifyCharacter(code) {\n  if (\n    code === null ||\n    markdownLineEndingOrSpace(code) ||\n    unicodeWhitespace(code)\n  ) {\n    return 1\n  }\n  if (unicodePunctuation(code)) {\n    return 2\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\n/**\n * Call all `resolveAll`s.\n *\n * @param {Array<{resolveAll?: Resolver | undefined}>} constructs\n *   List of constructs, optionally with `resolveAll`s.\n * @param {Array<Event>} events\n *   List of events.\n * @param {TokenizeContext} context\n *   Context used by `tokenize`.\n * @returns {Array<Event>}\n *   Changed events.\n */\nexport function resolveAll(constructs, events, context) {\n  /** @type {Array<Resolver>} */\n  const called = []\n  let index = -1\n\n  while (++index < constructs.length) {\n    const resolve = constructs[index].resolveAll\n\n    if (resolve && !called.includes(resolve)) {\n      events = resolve(events, context)\n      called.push(resolve)\n    }\n  }\n\n  return events\n}\n", "/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {push, splice} from 'micromark-util-chunked'\nimport {classifyCharacter} from 'micromark-util-classify-character'\nimport {resolveAll} from 'micromark-util-resolve-all'\n/** @type {Construct} */\nexport const attention = {\n  name: 'attention',\n  tokenize: tokenizeAttention,\n  resolveAll: resolveAllAttention\n}\n\n/**\n * Take all events and resolve attention to emphasis or strong.\n *\n * @type {Resolver}\n */\nfunction resolveAllAttention(events, context) {\n  let index = -1\n  /** @type {number} */\n  let open\n  /** @type {Token} */\n  let group\n  /** @type {Token} */\n  let text\n  /** @type {Token} */\n  let openingSequence\n  /** @type {Token} */\n  let closingSequence\n  /** @type {number} */\n  let use\n  /** @type {Array<Event>} */\n  let nextEvents\n  /** @type {number} */\n  let offset\n\n  // Walk through all events.\n  //\n  // Note: performance of this is fine on an mb of normal markdown, but it\u2019s\n  // a bottleneck for malicious stuff.\n  while (++index < events.length) {\n    // Find a token that can close.\n    if (\n      events[index][0] === 'enter' &&\n      events[index][1].type === 'attentionSequence' &&\n      events[index][1]._close\n    ) {\n      open = index\n\n      // Now walk back to find an opener.\n      while (open--) {\n        // Find a token that can open the closer.\n        if (\n          events[open][0] === 'exit' &&\n          events[open][1].type === 'attentionSequence' &&\n          events[open][1]._open &&\n          // If the markers are the same:\n          context.sliceSerialize(events[open][1]).charCodeAt(0) ===\n            context.sliceSerialize(events[index][1]).charCodeAt(0)\n        ) {\n          // If the opening can close or the closing can open,\n          // and the close size *is not* a multiple of three,\n          // but the sum of the opening and closing size *is* multiple of three,\n          // then don\u2019t match.\n          if (\n            (events[open][1]._close || events[index][1]._open) &&\n            (events[index][1].end.offset - events[index][1].start.offset) % 3 &&\n            !(\n              (events[open][1].end.offset -\n                events[open][1].start.offset +\n                events[index][1].end.offset -\n                events[index][1].start.offset) %\n              3\n            )\n          ) {\n            continue\n          }\n\n          // Number of markers to use from the sequence.\n          use =\n            events[open][1].end.offset - events[open][1].start.offset > 1 &&\n            events[index][1].end.offset - events[index][1].start.offset > 1\n              ? 2\n              : 1\n          const start = Object.assign({}, events[open][1].end)\n          const end = Object.assign({}, events[index][1].start)\n          movePoint(start, -use)\n          movePoint(end, use)\n          openingSequence = {\n            type: use > 1 ? 'strongSequence' : 'emphasisSequence',\n            start,\n            end: Object.assign({}, events[open][1].end)\n          }\n          closingSequence = {\n            type: use > 1 ? 'strongSequence' : 'emphasisSequence',\n            start: Object.assign({}, events[index][1].start),\n            end\n          }\n          text = {\n            type: use > 1 ? 'strongText' : 'emphasisText',\n            start: Object.assign({}, events[open][1].end),\n            end: Object.assign({}, events[index][1].start)\n          }\n          group = {\n            type: use > 1 ? 'strong' : 'emphasis',\n            start: Object.assign({}, openingSequence.start),\n            end: Object.assign({}, closingSequence.end)\n          }\n          events[open][1].end = Object.assign({}, openingSequence.start)\n          events[index][1].start = Object.assign({}, closingSequence.end)\n          nextEvents = []\n\n          // If there are more markers in the opening, add them before.\n          if (events[open][1].end.offset - events[open][1].start.offset) {\n            nextEvents = push(nextEvents, [\n              ['enter', events[open][1], context],\n              ['exit', events[open][1], context]\n            ])\n          }\n\n          // Opening.\n          nextEvents = push(nextEvents, [\n            ['enter', group, context],\n            ['enter', openingSequence, context],\n            ['exit', openingSequence, context],\n            ['enter', text, context]\n          ])\n\n          // Always populated by defaults.\n\n          // Between.\n          nextEvents = push(\n            nextEvents,\n            resolveAll(\n              context.parser.constructs.insideSpan.null,\n              events.slice(open + 1, index),\n              context\n            )\n          )\n\n          // Closing.\n          nextEvents = push(nextEvents, [\n            ['exit', text, context],\n            ['enter', closingSequence, context],\n            ['exit', closingSequence, context],\n            ['exit', group, context]\n          ])\n\n          // If there are more markers in the closing, add them after.\n          if (events[index][1].end.offset - events[index][1].start.offset) {\n            offset = 2\n            nextEvents = push(nextEvents, [\n              ['enter', events[index][1], context],\n              ['exit', events[index][1], context]\n            ])\n          } else {\n            offset = 0\n          }\n          splice(events, open - 1, index - open + 3, nextEvents)\n          index = open + nextEvents.length - offset - 2\n          break\n        }\n      }\n    }\n  }\n\n  // Remove remaining sequences.\n  index = -1\n  while (++index < events.length) {\n    if (events[index][1].type === 'attentionSequence') {\n      events[index][1].type = 'data'\n    }\n  }\n  return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeAttention(effects, ok) {\n  const attentionMarkers = this.parser.constructs.attentionMarkers.null\n  const previous = this.previous\n  const before = classifyCharacter(previous)\n\n  /** @type {NonNullable<Code>} */\n  let marker\n  return start\n\n  /**\n   * Before a sequence.\n   *\n   * ```markdown\n   * > | **\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    marker = code\n    effects.enter('attentionSequence')\n    return inside(code)\n  }\n\n  /**\n   * In a sequence.\n   *\n   * ```markdown\n   * > | **\n   *     ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === marker) {\n      effects.consume(code)\n      return inside\n    }\n    const token = effects.exit('attentionSequence')\n\n    // To do: next major: move this to resolver, just like `markdown-rs`.\n    const after = classifyCharacter(code)\n\n    // Always populated by defaults.\n\n    const open =\n      !after || (after === 2 && before) || attentionMarkers.includes(code)\n    const close =\n      !before || (before === 2 && after) || attentionMarkers.includes(previous)\n    token._open = Boolean(marker === 42 ? open : open && (before || !close))\n    token._close = Boolean(marker === 42 ? close : close && (after || !open))\n    return ok(code)\n  }\n}\n\n/**\n * Move a point a bit.\n *\n * Note: `move` only works inside lines! It\u2019s not possible to move past other\n * chunks (replacement characters, tabs, or line endings).\n *\n * @param {Point} point\n * @param {number} offset\n * @returns {void}\n */\nfunction movePoint(point, offset) {\n  point.column += offset\n  point.offset += offset\n  point._bufferIndex += offset\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {\n  asciiAlpha,\n  asciiAlphanumeric,\n  asciiAtext,\n  asciiControl\n} from 'micromark-util-character'\n/** @type {Construct} */\nexport const autolink = {\n  name: 'autolink',\n  tokenize: tokenizeAutolink\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeAutolink(effects, ok, nok) {\n  let size = 0\n  return start\n\n  /**\n   * Start of an autolink.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *      ^\n   * > | a<user@example.com>b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('autolink')\n    effects.enter('autolinkMarker')\n    effects.consume(code)\n    effects.exit('autolinkMarker')\n    effects.enter('autolinkProtocol')\n    return open\n  }\n\n  /**\n   * After `<`, at protocol or atext.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *       ^\n   * > | a<user@example.com>b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      return schemeOrEmailAtext\n    }\n    return emailAtext(code)\n  }\n\n  /**\n   * At second byte of protocol or atext.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *        ^\n   * > | a<user@example.com>b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function schemeOrEmailAtext(code) {\n    // ASCII alphanumeric and `+`, `-`, and `.`.\n    if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) {\n      // Count the previous alphabetical from `open` too.\n      size = 1\n      return schemeInsideOrEmailAtext(code)\n    }\n    return emailAtext(code)\n  }\n\n  /**\n   * In ambiguous protocol or atext.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *        ^\n   * > | a<user@example.com>b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function schemeInsideOrEmailAtext(code) {\n    if (code === 58) {\n      effects.consume(code)\n      size = 0\n      return urlInside\n    }\n\n    // ASCII alphanumeric and `+`, `-`, and `.`.\n    if (\n      (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) &&\n      size++ < 32\n    ) {\n      effects.consume(code)\n      return schemeInsideOrEmailAtext\n    }\n    size = 0\n    return emailAtext(code)\n  }\n\n  /**\n   * After protocol, in URL.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function urlInside(code) {\n    if (code === 62) {\n      effects.exit('autolinkProtocol')\n      effects.enter('autolinkMarker')\n      effects.consume(code)\n      effects.exit('autolinkMarker')\n      effects.exit('autolink')\n      return ok\n    }\n\n    // ASCII control, space, or `<`.\n    if (code === null || code === 32 || code === 60 || asciiControl(code)) {\n      return nok(code)\n    }\n    effects.consume(code)\n    return urlInside\n  }\n\n  /**\n   * In email atext.\n   *\n   * ```markdown\n   * > | a<user.name@example.com>b\n   *              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailAtext(code) {\n    if (code === 64) {\n      effects.consume(code)\n      return emailAtSignOrDot\n    }\n    if (asciiAtext(code)) {\n      effects.consume(code)\n      return emailAtext\n    }\n    return nok(code)\n  }\n\n  /**\n   * In label, after at-sign or dot.\n   *\n   * ```markdown\n   * > | a<user.name@example.com>b\n   *                 ^       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailAtSignOrDot(code) {\n    return asciiAlphanumeric(code) ? emailLabel(code) : nok(code)\n  }\n\n  /**\n   * In label, where `.` and `>` are allowed.\n   *\n   * ```markdown\n   * > | a<user.name@example.com>b\n   *                   ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailLabel(code) {\n    if (code === 46) {\n      effects.consume(code)\n      size = 0\n      return emailAtSignOrDot\n    }\n    if (code === 62) {\n      // Exit, then change the token type.\n      effects.exit('autolinkProtocol').type = 'autolinkEmail'\n      effects.enter('autolinkMarker')\n      effects.consume(code)\n      effects.exit('autolinkMarker')\n      effects.exit('autolink')\n      return ok\n    }\n    return emailValue(code)\n  }\n\n  /**\n   * In label, where `.` and `>` are *not* allowed.\n   *\n   * Though, this is also used in `emailLabel` to parse other values.\n   *\n   * ```markdown\n   * > | a<user.name@ex-ample.com>b\n   *                    ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailValue(code) {\n    // ASCII alphanumeric or `-`.\n    if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) {\n      const next = code === 45 ? emailValue : emailLabel\n      effects.consume(code)\n      return next\n    }\n    return nok(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/** @type {Construct} */\nexport const blankLine = {\n  tokenize: tokenizeBlankLine,\n  partial: true\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLine(effects, ok, nok) {\n  return start\n\n  /**\n   * Start of blank line.\n   *\n   * > \uD83D\uDC49 **Note**: `\u2420` represents a space character.\n   *\n   * ```markdown\n   * > | \u2420\u2420\u240A\n   *     ^\n   * > | \u240A\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    return markdownSpace(code)\n      ? factorySpace(effects, after, 'linePrefix')(code)\n      : after(code)\n  }\n\n  /**\n   * At eof/eol, after optional whitespace.\n   *\n   * > \uD83D\uDC49 **Note**: `\u2420` represents a space character.\n   *\n   * ```markdown\n   * > | \u2420\u2420\u240A\n   *       ^\n   * > | \u240A\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    return code === null || markdownLineEnding(code) ? ok(code) : nok(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Exiter} Exiter\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownSpace} from 'micromark-util-character'\n/** @type {Construct} */\nexport const blockQuote = {\n  name: 'blockQuote',\n  tokenize: tokenizeBlockQuoteStart,\n  continuation: {\n    tokenize: tokenizeBlockQuoteContinuation\n  },\n  exit\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlockQuoteStart(effects, ok, nok) {\n  const self = this\n  return start\n\n  /**\n   * Start of block quote.\n   *\n   * ```markdown\n   * > | > a\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === 62) {\n      const state = self.containerState\n      if (!state.open) {\n        effects.enter('blockQuote', {\n          _container: true\n        })\n        state.open = true\n      }\n      effects.enter('blockQuotePrefix')\n      effects.enter('blockQuoteMarker')\n      effects.consume(code)\n      effects.exit('blockQuoteMarker')\n      return after\n    }\n    return nok(code)\n  }\n\n  /**\n   * After `>`, before optional whitespace.\n   *\n   * ```markdown\n   * > | > a\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    if (markdownSpace(code)) {\n      effects.enter('blockQuotePrefixWhitespace')\n      effects.consume(code)\n      effects.exit('blockQuotePrefixWhitespace')\n      effects.exit('blockQuotePrefix')\n      return ok\n    }\n    effects.exit('blockQuotePrefix')\n    return ok(code)\n  }\n}\n\n/**\n * Start of block quote continuation.\n *\n * ```markdown\n *   | > a\n * > | > b\n *     ^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlockQuoteContinuation(effects, ok, nok) {\n  const self = this\n  return contStart\n\n  /**\n   * Start of block quote continuation.\n   *\n   * Also used to parse the first block quote opening.\n   *\n   * ```markdown\n   *   | > a\n   * > | > b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function contStart(code) {\n    if (markdownSpace(code)) {\n      // Always populated by defaults.\n\n      return factorySpace(\n        effects,\n        contBefore,\n        'linePrefix',\n        self.parser.constructs.disable.null.includes('codeIndented')\n          ? undefined\n          : 4\n      )(code)\n    }\n    return contBefore(code)\n  }\n\n  /**\n   * At `>`, after optional whitespace.\n   *\n   * Also used to parse the first block quote opening.\n   *\n   * ```markdown\n   *   | > a\n   * > | > b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function contBefore(code) {\n    return effects.attempt(blockQuote, ok, nok)(code)\n  }\n}\n\n/** @type {Exiter} */\nfunction exit(effects) {\n  effects.exit('blockQuote')\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {asciiPunctuation} from 'micromark-util-character'\n/** @type {Construct} */\nexport const characterEscape = {\n  name: 'characterEscape',\n  tokenize: tokenizeCharacterEscape\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterEscape(effects, ok, nok) {\n  return start\n\n  /**\n   * Start of character escape.\n   *\n   * ```markdown\n   * > | a\\*b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('characterEscape')\n    effects.enter('escapeMarker')\n    effects.consume(code)\n    effects.exit('escapeMarker')\n    return inside\n  }\n\n  /**\n   * After `\\`, at punctuation.\n   *\n   * ```markdown\n   * > | a\\*b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    // ASCII punctuation.\n    if (asciiPunctuation(code)) {\n      effects.enter('characterEscapeValue')\n      effects.consume(code)\n      effects.exit('characterEscapeValue')\n      effects.exit('characterEscape')\n      return ok\n    }\n    return nok(code)\n  }\n}\n", "/// <reference lib=\"dom\" />\n\n/* global document */\n\nconst element = document.createElement('i')\n\n/**\n * @param {string} value\n * @returns {string | false}\n */\nexport function decodeNamedCharacterReference(value) {\n  const characterReference = '&' + value + ';'\n  element.innerHTML = characterReference\n  const character = element.textContent\n\n  // Some named character references do not require the closing semicolon\n  // (`&not`, for instance), which leads to situations where parsing the assumed\n  // named reference of `&notit;` will result in the string `\u00ACit;`.\n  // When we encounter a trailing semicolon after parsing, and the character\n  // reference to decode was not a semicolon (`&semi;`), we can assume that the\n  // matching was not complete.\n  if (\n    character.charCodeAt(character.length - 1) === 59 /* `;` */ &&\n    value !== 'semi'\n  ) {\n    return false\n  }\n\n  // If the decoded string is equal to the input, the character reference was\n  // not valid.\n  return character === characterReference ? false : character\n}\n", "/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {decodeNamedCharacterReference} from 'decode-named-character-reference'\nimport {\n  asciiAlphanumeric,\n  asciiDigit,\n  asciiHexDigit\n} from 'micromark-util-character'\n/** @type {Construct} */\nexport const characterReference = {\n  name: 'characterReference',\n  tokenize: tokenizeCharacterReference\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterReference(effects, ok, nok) {\n  const self = this\n  let size = 0\n  /** @type {number} */\n  let max\n  /** @type {(code: Code) => boolean} */\n  let test\n  return start\n\n  /**\n   * Start of character reference.\n   *\n   * ```markdown\n   * > | a&amp;b\n   *      ^\n   * > | a&#123;b\n   *      ^\n   * > | a&#x9;b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('characterReference')\n    effects.enter('characterReferenceMarker')\n    effects.consume(code)\n    effects.exit('characterReferenceMarker')\n    return open\n  }\n\n  /**\n   * After `&`, at `#` for numeric references or alphanumeric for named\n   * references.\n   *\n   * ```markdown\n   * > | a&amp;b\n   *       ^\n   * > | a&#123;b\n   *       ^\n   * > | a&#x9;b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 35) {\n      effects.enter('characterReferenceMarkerNumeric')\n      effects.consume(code)\n      effects.exit('characterReferenceMarkerNumeric')\n      return numeric\n    }\n    effects.enter('characterReferenceValue')\n    max = 31\n    test = asciiAlphanumeric\n    return value(code)\n  }\n\n  /**\n   * After `#`, at `x` for hexadecimals or digit for decimals.\n   *\n   * ```markdown\n   * > | a&#123;b\n   *        ^\n   * > | a&#x9;b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function numeric(code) {\n    if (code === 88 || code === 120) {\n      effects.enter('characterReferenceMarkerHexadecimal')\n      effects.consume(code)\n      effects.exit('characterReferenceMarkerHexadecimal')\n      effects.enter('characterReferenceValue')\n      max = 6\n      test = asciiHexDigit\n      return value\n    }\n    effects.enter('characterReferenceValue')\n    max = 7\n    test = asciiDigit\n    return value(code)\n  }\n\n  /**\n   * After markers (`&#x`, `&#`, or `&`), in value, before `;`.\n   *\n   * The character reference kind defines what and how many characters are\n   * allowed.\n   *\n   * ```markdown\n   * > | a&amp;b\n   *       ^^^\n   * > | a&#123;b\n   *        ^^^\n   * > | a&#x9;b\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function value(code) {\n    if (code === 59 && size) {\n      const token = effects.exit('characterReferenceValue')\n      if (\n        test === asciiAlphanumeric &&\n        !decodeNamedCharacterReference(self.sliceSerialize(token))\n      ) {\n        return nok(code)\n      }\n\n      // To do: `markdown-rs` uses a different name:\n      // `CharacterReferenceMarkerSemi`.\n      effects.enter('characterReferenceMarker')\n      effects.consume(code)\n      effects.exit('characterReferenceMarker')\n      effects.exit('characterReference')\n      return ok\n    }\n    if (test(code) && size++ < max) {\n      effects.consume(code)\n      return value\n    }\n    return nok(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/** @type {Construct} */\nconst nonLazyContinuation = {\n  tokenize: tokenizeNonLazyContinuation,\n  partial: true\n}\n\n/** @type {Construct} */\nexport const codeFenced = {\n  name: 'codeFenced',\n  tokenize: tokenizeCodeFenced,\n  concrete: true\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCodeFenced(effects, ok, nok) {\n  const self = this\n  /** @type {Construct} */\n  const closeStart = {\n    tokenize: tokenizeCloseStart,\n    partial: true\n  }\n  let initialPrefix = 0\n  let sizeOpen = 0\n  /** @type {NonNullable<Code>} */\n  let marker\n  return start\n\n  /**\n   * Start of code.\n   *\n   * ```markdown\n   * > | ~~~js\n   *     ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: parse whitespace like `markdown-rs`.\n    return beforeSequenceOpen(code)\n  }\n\n  /**\n   * In opening fence, after prefix, at sequence.\n   *\n   * ```markdown\n   * > | ~~~js\n   *     ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeSequenceOpen(code) {\n    const tail = self.events[self.events.length - 1]\n    initialPrefix =\n      tail && tail[1].type === 'linePrefix'\n        ? tail[2].sliceSerialize(tail[1], true).length\n        : 0\n    marker = code\n    effects.enter('codeFenced')\n    effects.enter('codeFencedFence')\n    effects.enter('codeFencedFenceSequence')\n    return sequenceOpen(code)\n  }\n\n  /**\n   * In opening fence sequence.\n   *\n   * ```markdown\n   * > | ~~~js\n   *      ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === marker) {\n      sizeOpen++\n      effects.consume(code)\n      return sequenceOpen\n    }\n    if (sizeOpen < 3) {\n      return nok(code)\n    }\n    effects.exit('codeFencedFenceSequence')\n    return markdownSpace(code)\n      ? factorySpace(effects, infoBefore, 'whitespace')(code)\n      : infoBefore(code)\n  }\n\n  /**\n   * In opening fence, after the sequence (and optional whitespace), before info.\n   *\n   * ```markdown\n   * > | ~~~js\n   *        ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function infoBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('codeFencedFence')\n      return self.interrupt\n        ? ok(code)\n        : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code)\n    }\n    effects.enter('codeFencedFenceInfo')\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return info(code)\n  }\n\n  /**\n   * In info.\n   *\n   * ```markdown\n   * > | ~~~js\n   *        ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function info(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('chunkString')\n      effects.exit('codeFencedFenceInfo')\n      return infoBefore(code)\n    }\n    if (markdownSpace(code)) {\n      effects.exit('chunkString')\n      effects.exit('codeFencedFenceInfo')\n      return factorySpace(effects, metaBefore, 'whitespace')(code)\n    }\n    if (code === 96 && code === marker) {\n      return nok(code)\n    }\n    effects.consume(code)\n    return info\n  }\n\n  /**\n   * In opening fence, after info and whitespace, before meta.\n   *\n   * ```markdown\n   * > | ~~~js eval\n   *           ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function metaBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return infoBefore(code)\n    }\n    effects.enter('codeFencedFenceMeta')\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return meta(code)\n  }\n\n  /**\n   * In meta.\n   *\n   * ```markdown\n   * > | ~~~js eval\n   *           ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function meta(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('chunkString')\n      effects.exit('codeFencedFenceMeta')\n      return infoBefore(code)\n    }\n    if (code === 96 && code === marker) {\n      return nok(code)\n    }\n    effects.consume(code)\n    return meta\n  }\n\n  /**\n   * At eol/eof in code, before a non-lazy closing fence or content.\n   *\n   * ```markdown\n   * > | ~~~js\n   *          ^\n   * > | alert(1)\n   *             ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function atNonLazyBreak(code) {\n    return effects.attempt(closeStart, after, contentBefore)(code)\n  }\n\n  /**\n   * Before code content, not a closing fence, at eol.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *             ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function contentBefore(code) {\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return contentStart\n  }\n\n  /**\n   * Before code content, not a closing fence.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *     ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function contentStart(code) {\n    return initialPrefix > 0 && markdownSpace(code)\n      ? factorySpace(\n          effects,\n          beforeContentChunk,\n          'linePrefix',\n          initialPrefix + 1\n        )(code)\n      : beforeContentChunk(code)\n  }\n\n  /**\n   * Before code content, after optional prefix.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *     ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeContentChunk(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code)\n    }\n    effects.enter('codeFlowValue')\n    return contentChunk(code)\n  }\n\n  /**\n   * In code content.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *     ^^^^^^^^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function contentChunk(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('codeFlowValue')\n      return beforeContentChunk(code)\n    }\n    effects.consume(code)\n    return contentChunk\n  }\n\n  /**\n   * After code.\n   *\n   * ```markdown\n   *   | ~~~js\n   *   | alert(1)\n   * > | ~~~\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    effects.exit('codeFenced')\n    return ok(code)\n  }\n\n  /**\n   * @this {TokenizeContext}\n   * @type {Tokenizer}\n   */\n  function tokenizeCloseStart(effects, ok, nok) {\n    let size = 0\n    return startBefore\n\n    /**\n     *\n     *\n     * @type {State}\n     */\n    function startBefore(code) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return start\n    }\n\n    /**\n     * Before closing fence, at optional whitespace.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function start(code) {\n      // Always populated by defaults.\n\n      // To do: `enter` here or in next state?\n      effects.enter('codeFencedFence')\n      return markdownSpace(code)\n        ? factorySpace(\n            effects,\n            beforeSequenceClose,\n            'linePrefix',\n            self.parser.constructs.disable.null.includes('codeIndented')\n              ? undefined\n              : 4\n          )(code)\n        : beforeSequenceClose(code)\n    }\n\n    /**\n     * In closing fence, after optional whitespace, at sequence.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function beforeSequenceClose(code) {\n      if (code === marker) {\n        effects.enter('codeFencedFenceSequence')\n        return sequenceClose(code)\n      }\n      return nok(code)\n    }\n\n    /**\n     * In closing fence sequence.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function sequenceClose(code) {\n      if (code === marker) {\n        size++\n        effects.consume(code)\n        return sequenceClose\n      }\n      if (size >= sizeOpen) {\n        effects.exit('codeFencedFenceSequence')\n        return markdownSpace(code)\n          ? factorySpace(effects, sequenceCloseAfter, 'whitespace')(code)\n          : sequenceCloseAfter(code)\n      }\n      return nok(code)\n    }\n\n    /**\n     * After closing fence sequence, after optional whitespace.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *        ^\n     * ```\n     *\n     * @type {State}\n     */\n    function sequenceCloseAfter(code) {\n      if (code === null || markdownLineEnding(code)) {\n        effects.exit('codeFencedFence')\n        return ok(code)\n      }\n      return nok(code)\n    }\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuation(effects, ok, nok) {\n  const self = this\n  return start\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === null) {\n      return nok(code)\n    }\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return lineStart\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function lineStart(code) {\n    return self.parser.lazy[self.now().line] ? nok(code) : ok(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/** @type {Construct} */\nexport const codeIndented = {\n  name: 'codeIndented',\n  tokenize: tokenizeCodeIndented\n}\n\n/** @type {Construct} */\nconst furtherStart = {\n  tokenize: tokenizeFurtherStart,\n  partial: true\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCodeIndented(effects, ok, nok) {\n  const self = this\n  return start\n\n  /**\n   * Start of code (indented).\n   *\n   * > **Parsing note**: it is not needed to check if this first line is a\n   * > filled line (that it has a non-whitespace character), because blank lines\n   * > are parsed already, so we never run into that.\n   *\n   * ```markdown\n   * > |     aaa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: manually check if interrupting like `markdown-rs`.\n\n    effects.enter('codeIndented')\n    // To do: use an improved `space_or_tab` function like `markdown-rs`,\n    // so that we can drop the next state.\n    return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code)\n  }\n\n  /**\n   * At start, after 1 or 4 spaces.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1]\n    return tail &&\n      tail[1].type === 'linePrefix' &&\n      tail[2].sliceSerialize(tail[1], true).length >= 4\n      ? atBreak(code)\n      : nok(code)\n  }\n\n  /**\n   * At a break.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^  ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === null) {\n      return after(code)\n    }\n    if (markdownLineEnding(code)) {\n      return effects.attempt(furtherStart, atBreak, after)(code)\n    }\n    effects.enter('codeFlowValue')\n    return inside(code)\n  }\n\n  /**\n   * In code content.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('codeFlowValue')\n      return atBreak(code)\n    }\n    effects.consume(code)\n    return inside\n  }\n\n  /** @type {State} */\n  function after(code) {\n    effects.exit('codeIndented')\n    // To do: allow interrupting like `markdown-rs`.\n    // Feel free to interrupt.\n    // tokenizer.interrupt = false\n    return ok(code)\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeFurtherStart(effects, ok, nok) {\n  const self = this\n  return furtherStart\n\n  /**\n   * At eol, trying to parse another indent.\n   *\n   * ```markdown\n   * > |     aaa\n   *            ^\n   *   |     bbb\n   * ```\n   *\n   * @type {State}\n   */\n  function furtherStart(code) {\n    // To do: improve `lazy` / `pierce` handling.\n    // If this is a lazy line, it can\u2019t be code.\n    if (self.parser.lazy[self.now().line]) {\n      return nok(code)\n    }\n    if (markdownLineEnding(code)) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return furtherStart\n    }\n\n    // To do: the code here in `micromark-js` is a bit different from\n    // `markdown-rs` because there it can attempt spaces.\n    // We can\u2019t yet.\n    //\n    // To do: use an improved `space_or_tab` function like `markdown-rs`,\n    // so that we can drop the next state.\n    return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code)\n  }\n\n  /**\n   * At start, after 1 or 4 spaces.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1]\n    return tail &&\n      tail[1].type === 'linePrefix' &&\n      tail[2].sliceSerialize(tail[1], true).length >= 4\n      ? ok(code)\n      : markdownLineEnding(code)\n      ? furtherStart(code)\n      : nok(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Previous} Previous\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {markdownLineEnding} from 'micromark-util-character'\n/** @type {Construct} */\nexport const codeText = {\n  name: 'codeText',\n  tokenize: tokenizeCodeText,\n  resolve: resolveCodeText,\n  previous\n}\n\n// To do: next major: don\u2019t resolve, like `markdown-rs`.\n/** @type {Resolver} */\nfunction resolveCodeText(events) {\n  let tailExitIndex = events.length - 4\n  let headEnterIndex = 3\n  /** @type {number} */\n  let index\n  /** @type {number | undefined} */\n  let enter\n\n  // If we start and end with an EOL or a space.\n  if (\n    (events[headEnterIndex][1].type === 'lineEnding' ||\n      events[headEnterIndex][1].type === 'space') &&\n    (events[tailExitIndex][1].type === 'lineEnding' ||\n      events[tailExitIndex][1].type === 'space')\n  ) {\n    index = headEnterIndex\n\n    // And we have data.\n    while (++index < tailExitIndex) {\n      if (events[index][1].type === 'codeTextData') {\n        // Then we have padding.\n        events[headEnterIndex][1].type = 'codeTextPadding'\n        events[tailExitIndex][1].type = 'codeTextPadding'\n        headEnterIndex += 2\n        tailExitIndex -= 2\n        break\n      }\n    }\n  }\n\n  // Merge adjacent spaces and data.\n  index = headEnterIndex - 1\n  tailExitIndex++\n  while (++index <= tailExitIndex) {\n    if (enter === undefined) {\n      if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') {\n        enter = index\n      }\n    } else if (\n      index === tailExitIndex ||\n      events[index][1].type === 'lineEnding'\n    ) {\n      events[enter][1].type = 'codeTextData'\n      if (index !== enter + 2) {\n        events[enter][1].end = events[index - 1][1].end\n        events.splice(enter + 2, index - enter - 2)\n        tailExitIndex -= index - enter - 2\n        index = enter + 2\n      }\n      enter = undefined\n    }\n  }\n  return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Previous}\n */\nfunction previous(code) {\n  // If there is a previous code, there will always be a tail.\n  return (\n    code !== 96 ||\n    this.events[this.events.length - 1][1].type === 'characterEscape'\n  )\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCodeText(effects, ok, nok) {\n  const self = this\n  let sizeOpen = 0\n  /** @type {number} */\n  let size\n  /** @type {Token} */\n  let token\n  return start\n\n  /**\n   * Start of code (text).\n   *\n   * ```markdown\n   * > | `a`\n   *     ^\n   * > | \\`a`\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('codeText')\n    effects.enter('codeTextSequence')\n    return sequenceOpen(code)\n  }\n\n  /**\n   * In opening sequence.\n   *\n   * ```markdown\n   * > | `a`\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === 96) {\n      effects.consume(code)\n      sizeOpen++\n      return sequenceOpen\n    }\n    effects.exit('codeTextSequence')\n    return between(code)\n  }\n\n  /**\n   * Between something and something else.\n   *\n   * ```markdown\n   * > | `a`\n   *      ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function between(code) {\n    // EOF.\n    if (code === null) {\n      return nok(code)\n    }\n\n    // To do: next major: don\u2019t do spaces in resolve, but when compiling,\n    // like `markdown-rs`.\n    // Tabs don\u2019t work, and virtual spaces don\u2019t make sense.\n    if (code === 32) {\n      effects.enter('space')\n      effects.consume(code)\n      effects.exit('space')\n      return between\n    }\n\n    // Closing fence? Could also be data.\n    if (code === 96) {\n      token = effects.enter('codeTextSequence')\n      size = 0\n      return sequenceClose(code)\n    }\n    if (markdownLineEnding(code)) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return between\n    }\n\n    // Data.\n    effects.enter('codeTextData')\n    return data(code)\n  }\n\n  /**\n   * In data.\n   *\n   * ```markdown\n   * > | `a`\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function data(code) {\n    if (\n      code === null ||\n      code === 32 ||\n      code === 96 ||\n      markdownLineEnding(code)\n    ) {\n      effects.exit('codeTextData')\n      return between(code)\n    }\n    effects.consume(code)\n    return data\n  }\n\n  /**\n   * In closing sequence.\n   *\n   * ```markdown\n   * > | `a`\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceClose(code) {\n    // More.\n    if (code === 96) {\n      effects.consume(code)\n      size++\n      return sequenceClose\n    }\n\n    // Done!\n    if (size === sizeOpen) {\n      effects.exit('codeTextSequence')\n      effects.exit('codeText')\n      return ok(code)\n    }\n\n    // More or less accents: mark as data.\n    token.type = 'codeTextData'\n    return data(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Token} Token\n */\n\nimport {splice} from 'micromark-util-chunked'\n/**\n * Tokenize subcontent.\n *\n * @param {Array<Event>} events\n *   List of events.\n * @returns {boolean}\n *   Whether subtokens were found.\n */\nexport function subtokenize(events) {\n  /** @type {Record<string, number>} */\n  const jumps = {}\n  let index = -1\n  /** @type {Event} */\n  let event\n  /** @type {number | undefined} */\n  let lineIndex\n  /** @type {number} */\n  let otherIndex\n  /** @type {Event} */\n  let otherEvent\n  /** @type {Array<Event>} */\n  let parameters\n  /** @type {Array<Event>} */\n  let subevents\n  /** @type {boolean | undefined} */\n  let more\n  while (++index < events.length) {\n    while (index in jumps) {\n      index = jumps[index]\n    }\n    event = events[index]\n\n    // Add a hook for the GFM tasklist extension, which needs to know if text\n    // is in the first content of a list item.\n    if (\n      index &&\n      event[1].type === 'chunkFlow' &&\n      events[index - 1][1].type === 'listItemPrefix'\n    ) {\n      subevents = event[1]._tokenizer.events\n      otherIndex = 0\n      if (\n        otherIndex < subevents.length &&\n        subevents[otherIndex][1].type === 'lineEndingBlank'\n      ) {\n        otherIndex += 2\n      }\n      if (\n        otherIndex < subevents.length &&\n        subevents[otherIndex][1].type === 'content'\n      ) {\n        while (++otherIndex < subevents.length) {\n          if (subevents[otherIndex][1].type === 'content') {\n            break\n          }\n          if (subevents[otherIndex][1].type === 'chunkText') {\n            subevents[otherIndex][1]._isInFirstContentOfListItem = true\n            otherIndex++\n          }\n        }\n      }\n    }\n\n    // Enter.\n    if (event[0] === 'enter') {\n      if (event[1].contentType) {\n        Object.assign(jumps, subcontent(events, index))\n        index = jumps[index]\n        more = true\n      }\n    }\n    // Exit.\n    else if (event[1]._container) {\n      otherIndex = index\n      lineIndex = undefined\n      while (otherIndex--) {\n        otherEvent = events[otherIndex]\n        if (\n          otherEvent[1].type === 'lineEnding' ||\n          otherEvent[1].type === 'lineEndingBlank'\n        ) {\n          if (otherEvent[0] === 'enter') {\n            if (lineIndex) {\n              events[lineIndex][1].type = 'lineEndingBlank'\n            }\n            otherEvent[1].type = 'lineEnding'\n            lineIndex = otherIndex\n          }\n        } else {\n          break\n        }\n      }\n      if (lineIndex) {\n        // Fix position.\n        event[1].end = Object.assign({}, events[lineIndex][1].start)\n\n        // Switch container exit w/ line endings.\n        parameters = events.slice(lineIndex, index)\n        parameters.unshift(event)\n        splice(events, lineIndex, index - lineIndex + 1, parameters)\n      }\n    }\n  }\n  return !more\n}\n\n/**\n * Tokenize embedded tokens.\n *\n * @param {Array<Event>} events\n * @param {number} eventIndex\n * @returns {Record<string, number>}\n */\nfunction subcontent(events, eventIndex) {\n  const token = events[eventIndex][1]\n  const context = events[eventIndex][2]\n  let startPosition = eventIndex - 1\n  /** @type {Array<number>} */\n  const startPositions = []\n  const tokenizer =\n    token._tokenizer || context.parser[token.contentType](token.start)\n  const childEvents = tokenizer.events\n  /** @type {Array<[number, number]>} */\n  const jumps = []\n  /** @type {Record<string, number>} */\n  const gaps = {}\n  /** @type {Array<Chunk>} */\n  let stream\n  /** @type {Token | undefined} */\n  let previous\n  let index = -1\n  /** @type {Token | undefined} */\n  let current = token\n  let adjust = 0\n  let start = 0\n  const breaks = [start]\n\n  // Loop forward through the linked tokens to pass them in order to the\n  // subtokenizer.\n  while (current) {\n    // Find the position of the event for this token.\n    while (events[++startPosition][1] !== current) {\n      // Empty.\n    }\n    startPositions.push(startPosition)\n    if (!current._tokenizer) {\n      stream = context.sliceStream(current)\n      if (!current.next) {\n        stream.push(null)\n      }\n      if (previous) {\n        tokenizer.defineSkip(current.start)\n      }\n      if (current._isInFirstContentOfListItem) {\n        tokenizer._gfmTasklistFirstContentOfListItem = true\n      }\n      tokenizer.write(stream)\n      if (current._isInFirstContentOfListItem) {\n        tokenizer._gfmTasklistFirstContentOfListItem = undefined\n      }\n    }\n\n    // Unravel the next token.\n    previous = current\n    current = current.next\n  }\n\n  // Now, loop back through all events (and linked tokens), to figure out which\n  // parts belong where.\n  current = token\n  while (++index < childEvents.length) {\n    if (\n      // Find a void token that includes a break.\n      childEvents[index][0] === 'exit' &&\n      childEvents[index - 1][0] === 'enter' &&\n      childEvents[index][1].type === childEvents[index - 1][1].type &&\n      childEvents[index][1].start.line !== childEvents[index][1].end.line\n    ) {\n      start = index + 1\n      breaks.push(start)\n      // Help GC.\n      current._tokenizer = undefined\n      current.previous = undefined\n      current = current.next\n    }\n  }\n\n  // Help GC.\n  tokenizer.events = []\n\n  // If there\u2019s one more token (which is the cases for lines that end in an\n  // EOF), that\u2019s perfect: the last point we found starts it.\n  // If there isn\u2019t then make sure any remaining content is added to it.\n  if (current) {\n    // Help GC.\n    current._tokenizer = undefined\n    current.previous = undefined\n  } else {\n    breaks.pop()\n  }\n\n  // Now splice the events from the subtokenizer into the current events,\n  // moving back to front so that splice indices aren\u2019t affected.\n  index = breaks.length\n  while (index--) {\n    const slice = childEvents.slice(breaks[index], breaks[index + 1])\n    const start = startPositions.pop()\n    jumps.unshift([start, start + slice.length - 1])\n    splice(events, start, 2, slice)\n  }\n  index = -1\n  while (++index < jumps.length) {\n    gaps[adjust + jumps[index][0]] = adjust + jumps[index][1]\n    adjust += jumps[index][1] - jumps[index][0] - 1\n  }\n  return gaps\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\nimport {subtokenize} from 'micromark-util-subtokenize'\n/**\n * No name because it must not be turned off.\n * @type {Construct}\n */\nexport const content = {\n  tokenize: tokenizeContent,\n  resolve: resolveContent\n}\n\n/** @type {Construct} */\nconst continuationConstruct = {\n  tokenize: tokenizeContinuation,\n  partial: true\n}\n\n/**\n * Content is transparent: it\u2019s parsed right now. That way, definitions are also\n * parsed right now: before text in paragraphs (specifically, media) are parsed.\n *\n * @type {Resolver}\n */\nfunction resolveContent(events) {\n  subtokenize(events)\n  return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeContent(effects, ok) {\n  /** @type {Token | undefined} */\n  let previous\n  return chunkStart\n\n  /**\n   * Before a content chunk.\n   *\n   * ```markdown\n   * > | abc\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function chunkStart(code) {\n    effects.enter('content')\n    previous = effects.enter('chunkContent', {\n      contentType: 'content'\n    })\n    return chunkInside(code)\n  }\n\n  /**\n   * In a content chunk.\n   *\n   * ```markdown\n   * > | abc\n   *     ^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function chunkInside(code) {\n    if (code === null) {\n      return contentEnd(code)\n    }\n\n    // To do: in `markdown-rs`, each line is parsed on its own, and everything\n    // is stitched together resolving.\n    if (markdownLineEnding(code)) {\n      return effects.check(\n        continuationConstruct,\n        contentContinue,\n        contentEnd\n      )(code)\n    }\n\n    // Data.\n    effects.consume(code)\n    return chunkInside\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function contentEnd(code) {\n    effects.exit('chunkContent')\n    effects.exit('content')\n    return ok(code)\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function contentContinue(code) {\n    effects.consume(code)\n    effects.exit('chunkContent')\n    previous.next = effects.enter('chunkContent', {\n      contentType: 'content',\n      previous\n    })\n    previous = previous.next\n    return chunkInside\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeContinuation(effects, ok, nok) {\n  const self = this\n  return startLookahead\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function startLookahead(code) {\n    effects.exit('chunkContent')\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return factorySpace(effects, prefixed, 'linePrefix')\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function prefixed(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return nok(code)\n    }\n\n    // Always populated by defaults.\n\n    const tail = self.events[self.events.length - 1]\n    if (\n      !self.parser.constructs.disable.null.includes('codeIndented') &&\n      tail &&\n      tail[1].type === 'linePrefix' &&\n      tail[2].sliceSerialize(tail[1], true).length >= 4\n    ) {\n      return ok(code)\n    }\n    return effects.interrupt(self.parser.constructs.flow, nok, ok)(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\n\nimport {\n  asciiControl,\n  markdownLineEndingOrSpace,\n  markdownLineEnding\n} from 'micromark-util-character'\n/**\n * Parse destinations.\n *\n * ###### Examples\n *\n * ```markdown\n * <a>\n * <a\\>b>\n * <a b>\n * <a)>\n * a\n * a\\)b\n * a(b)c\n * a(b)\n * ```\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {State} nok\n *   State switched to when unsuccessful.\n * @param {TokenType} type\n *   Type for whole (`<a>` or `b`).\n * @param {TokenType} literalType\n *   Type when enclosed (`<a>`).\n * @param {TokenType} literalMarkerType\n *   Type for enclosing (`<` and `>`).\n * @param {TokenType} rawType\n *   Type when not enclosed (`b`).\n * @param {TokenType} stringType\n *   Type for the value (`a` or `b`).\n * @param {number | undefined} [max=Infinity]\n *   Depth of nested parens (inclusive).\n * @returns {State}\n *   Start state.\n */ // eslint-disable-next-line max-params\nexport function factoryDestination(\n  effects,\n  ok,\n  nok,\n  type,\n  literalType,\n  literalMarkerType,\n  rawType,\n  stringType,\n  max\n) {\n  const limit = max || Number.POSITIVE_INFINITY\n  let balance = 0\n  return start\n\n  /**\n   * Start of destination.\n   *\n   * ```markdown\n   * > | <aa>\n   *     ^\n   * > | aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === 60) {\n      effects.enter(type)\n      effects.enter(literalType)\n      effects.enter(literalMarkerType)\n      effects.consume(code)\n      effects.exit(literalMarkerType)\n      return enclosedBefore\n    }\n\n    // ASCII control, space, closing paren.\n    if (code === null || code === 32 || code === 41 || asciiControl(code)) {\n      return nok(code)\n    }\n    effects.enter(type)\n    effects.enter(rawType)\n    effects.enter(stringType)\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return raw(code)\n  }\n\n  /**\n   * After `<`, at an enclosed destination.\n   *\n   * ```markdown\n   * > | <aa>\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function enclosedBefore(code) {\n    if (code === 62) {\n      effects.enter(literalMarkerType)\n      effects.consume(code)\n      effects.exit(literalMarkerType)\n      effects.exit(literalType)\n      effects.exit(type)\n      return ok\n    }\n    effects.enter(stringType)\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return enclosed(code)\n  }\n\n  /**\n   * In enclosed destination.\n   *\n   * ```markdown\n   * > | <aa>\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function enclosed(code) {\n    if (code === 62) {\n      effects.exit('chunkString')\n      effects.exit(stringType)\n      return enclosedBefore(code)\n    }\n    if (code === null || code === 60 || markdownLineEnding(code)) {\n      return nok(code)\n    }\n    effects.consume(code)\n    return code === 92 ? enclosedEscape : enclosed\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * ```markdown\n   * > | <a\\*a>\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function enclosedEscape(code) {\n    if (code === 60 || code === 62 || code === 92) {\n      effects.consume(code)\n      return enclosed\n    }\n    return enclosed(code)\n  }\n\n  /**\n   * In raw destination.\n   *\n   * ```markdown\n   * > | aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function raw(code) {\n    if (\n      !balance &&\n      (code === null || code === 41 || markdownLineEndingOrSpace(code))\n    ) {\n      effects.exit('chunkString')\n      effects.exit(stringType)\n      effects.exit(rawType)\n      effects.exit(type)\n      return ok(code)\n    }\n    if (balance < limit && code === 40) {\n      effects.consume(code)\n      balance++\n      return raw\n    }\n    if (code === 41) {\n      effects.consume(code)\n      balance--\n      return raw\n    }\n\n    // ASCII control (but *not* `\\0`) and space and `(`.\n    // Note: in `markdown-rs`, `\\0` exists in codes, in `micromark-js` it\n    // doesn\u2019t.\n    if (code === null || code === 32 || code === 40 || asciiControl(code)) {\n      return nok(code)\n    }\n    effects.consume(code)\n    return code === 92 ? rawEscape : raw\n  }\n\n  /**\n   * After `\\`, at special character.\n   *\n   * ```markdown\n   * > | a\\*a\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function rawEscape(code) {\n    if (code === 40 || code === 41 || code === 92) {\n      effects.consume(code)\n      return raw\n    }\n    return raw(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\n\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/**\n * Parse labels.\n *\n * > \uD83D\uDC49 **Note**: labels in markdown are capped at 999 characters in the string.\n *\n * ###### Examples\n *\n * ```markdown\n * [a]\n * [a\n * b]\n * [a\\]b]\n * ```\n *\n * @this {TokenizeContext}\n *   Tokenize context.\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {State} nok\n *   State switched to when unsuccessful.\n * @param {TokenType} type\n *   Type of the whole label (`[a]`).\n * @param {TokenType} markerType\n *   Type for the markers (`[` and `]`).\n * @param {TokenType} stringType\n *   Type for the identifier (`a`).\n * @returns {State}\n *   Start state.\n */ // eslint-disable-next-line max-params\nexport function factoryLabel(effects, ok, nok, type, markerType, stringType) {\n  const self = this\n  let size = 0\n  /** @type {boolean} */\n  let seen\n  return start\n\n  /**\n   * Start of label.\n   *\n   * ```markdown\n   * > | [a]\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(type)\n    effects.enter(markerType)\n    effects.consume(code)\n    effects.exit(markerType)\n    effects.enter(stringType)\n    return atBreak\n  }\n\n  /**\n   * In label, at something, before something else.\n   *\n   * ```markdown\n   * > | [a]\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (\n      size > 999 ||\n      code === null ||\n      code === 91 ||\n      (code === 93 && !seen) ||\n      // To do: remove in the future once we\u2019ve switched from\n      // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`,\n      // which doesn\u2019t need this.\n      // Hidden footnotes hook.\n      /* c8 ignore next 3 */\n      (code === 94 &&\n        !size &&\n        '_hiddenFootnoteSupport' in self.parser.constructs)\n    ) {\n      return nok(code)\n    }\n    if (code === 93) {\n      effects.exit(stringType)\n      effects.enter(markerType)\n      effects.consume(code)\n      effects.exit(markerType)\n      effects.exit(type)\n      return ok\n    }\n\n    // To do: indent? Link chunks and EOLs together?\n    if (markdownLineEnding(code)) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return atBreak\n    }\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return labelInside(code)\n  }\n\n  /**\n   * In label, in text.\n   *\n   * ```markdown\n   * > | [a]\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelInside(code) {\n    if (\n      code === null ||\n      code === 91 ||\n      code === 93 ||\n      markdownLineEnding(code) ||\n      size++ > 999\n    ) {\n      effects.exit('chunkString')\n      return atBreak(code)\n    }\n    effects.consume(code)\n    if (!seen) seen = !markdownSpace(code)\n    return code === 92 ? labelEscape : labelInside\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * ```markdown\n   * > | [a\\*a]\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEscape(code) {\n    if (code === 91 || code === 92 || code === 93) {\n      effects.consume(code)\n      size++\n      return labelInside\n    }\n    return labelInside(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n/**\n * Parse titles.\n *\n * ###### Examples\n *\n * ```markdown\n * \"a\"\n * 'b'\n * (c)\n * \"a\n * b\"\n * 'a\n *     b'\n * (a\\)b)\n * ```\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {State} nok\n *   State switched to when unsuccessful.\n * @param {TokenType} type\n *   Type of the whole title (`\"a\"`, `'b'`, `(c)`).\n * @param {TokenType} markerType\n *   Type for the markers (`\"`, `'`, `(`, and `)`).\n * @param {TokenType} stringType\n *   Type for the value (`a`).\n * @returns {State}\n *   Start state.\n */ // eslint-disable-next-line max-params\nexport function factoryTitle(effects, ok, nok, type, markerType, stringType) {\n  /** @type {NonNullable<Code>} */\n  let marker\n  return start\n\n  /**\n   * Start of title.\n   *\n   * ```markdown\n   * > | \"a\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === 34 || code === 39 || code === 40) {\n      effects.enter(type)\n      effects.enter(markerType)\n      effects.consume(code)\n      effects.exit(markerType)\n      marker = code === 40 ? 41 : code\n      return begin\n    }\n    return nok(code)\n  }\n\n  /**\n   * After opening marker.\n   *\n   * This is also used at the closing marker.\n   *\n   * ```markdown\n   * > | \"a\"\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function begin(code) {\n    if (code === marker) {\n      effects.enter(markerType)\n      effects.consume(code)\n      effects.exit(markerType)\n      effects.exit(type)\n      return ok\n    }\n    effects.enter(stringType)\n    return atBreak(code)\n  }\n\n  /**\n   * At something, before something else.\n   *\n   * ```markdown\n   * > | \"a\"\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === marker) {\n      effects.exit(stringType)\n      return begin(marker)\n    }\n    if (code === null) {\n      return nok(code)\n    }\n\n    // Note: blank lines can\u2019t exist in content.\n    if (markdownLineEnding(code)) {\n      // To do: use `space_or_tab_eol_with_options`, connect.\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return factorySpace(effects, atBreak, 'linePrefix')\n    }\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return inside(code)\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === marker || code === null || markdownLineEnding(code)) {\n      effects.exit('chunkString')\n      return atBreak(code)\n    }\n    effects.consume(code)\n    return code === 92 ? escape : inside\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * ```markdown\n   * > | \"a\\*b\"\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function escape(code) {\n    if (code === marker || code === 92) {\n      effects.consume(code)\n      return inside\n    }\n    return inside(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * *   line endings or spaces in markdown are often optional, in which case this\n *     factory can be used and `ok` will be switched to whether spaces were found\n *     or not\n * *   one line ending or space can be detected with\n *     `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace`\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @returns\n *   Start state.\n */\nexport function factoryWhitespace(effects, ok) {\n  /** @type {boolean} */\n  let seen\n  return start\n\n  /** @type {State} */\n  function start(code) {\n    if (markdownLineEnding(code)) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      seen = true\n      return start\n    }\n    if (markdownSpace(code)) {\n      return factorySpace(\n        effects,\n        start,\n        seen ? 'linePrefix' : 'lineSuffix'\n      )(code)\n    }\n    return ok(code)\n  }\n}\n", "/**\n * Normalize an identifier (as found in references, definitions).\n *\n * Collapses markdown whitespace, trim, and then lower- and uppercase.\n *\n * Some characters are considered \u201Cuppercase\u201D, such as U+03F4 (`\u03F4`), but if their\n * lowercase counterpart (U+03B8 (`\u03B8`)) is uppercased will result in a different\n * uppercase character (U+0398 (`\u0398`)).\n * So, to get a canonical form, we perform both lower- and uppercase.\n *\n * Using uppercase last makes sure keys will never interact with default\n * prototypal values (such as `constructor`): nothing in the prototype of\n * `Object` is uppercase.\n *\n * @param {string} value\n *   Identifier to normalize.\n * @returns {string}\n *   Normalized identifier.\n */\nexport function normalizeIdentifier(value) {\n  return (\n    value\n      // Collapse markdown whitespace.\n      .replace(/[\\t\\n\\r ]+/g, ' ')\n      // Trim.\n      .replace(/^ | $/g, '')\n      // Some characters are considered \u201Cuppercase\u201D, but if their lowercase\n      // counterpart is uppercased will result in a different uppercase\n      // character.\n      // Hence, to get that form, we perform both lower- and uppercase.\n      // Upper case makes sure keys will not interact with default prototypal\n      // methods: no method is uppercase.\n      .toLowerCase()\n      .toUpperCase()\n  )\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factoryDestination} from 'micromark-factory-destination'\nimport {factoryLabel} from 'micromark-factory-label'\nimport {factorySpace} from 'micromark-factory-space'\nimport {factoryTitle} from 'micromark-factory-title'\nimport {factoryWhitespace} from 'micromark-factory-whitespace'\nimport {\n  markdownLineEnding,\n  markdownLineEndingOrSpace,\n  markdownSpace\n} from 'micromark-util-character'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\n/** @type {Construct} */\nexport const definition = {\n  name: 'definition',\n  tokenize: tokenizeDefinition\n}\n\n/** @type {Construct} */\nconst titleBefore = {\n  tokenize: tokenizeTitleBefore,\n  partial: true\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinition(effects, ok, nok) {\n  const self = this\n  /** @type {string} */\n  let identifier\n  return start\n\n  /**\n   * At start of a definition.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // Do not interrupt paragraphs (but do follow definitions).\n    // To do: do `interrupt` the way `markdown-rs` does.\n    // To do: parse whitespace the way `markdown-rs` does.\n    effects.enter('definition')\n    return before(code)\n  }\n\n  /**\n   * After optional whitespace, at `[`.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    // To do: parse whitespace the way `markdown-rs` does.\n\n    return factoryLabel.call(\n      self,\n      effects,\n      labelAfter,\n      // Note: we don\u2019t need to reset the way `markdown-rs` does.\n      nok,\n      'definitionLabel',\n      'definitionLabelMarker',\n      'definitionLabelString'\n    )(code)\n  }\n\n  /**\n   * After label.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelAfter(code) {\n    identifier = normalizeIdentifier(\n      self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1)\n    )\n    if (code === 58) {\n      effects.enter('definitionMarker')\n      effects.consume(code)\n      effects.exit('definitionMarker')\n      return markerAfter\n    }\n    return nok(code)\n  }\n\n  /**\n   * After marker.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function markerAfter(code) {\n    // Note: whitespace is optional.\n    return markdownLineEndingOrSpace(code)\n      ? factoryWhitespace(effects, destinationBefore)(code)\n      : destinationBefore(code)\n  }\n\n  /**\n   * Before destination.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function destinationBefore(code) {\n    return factoryDestination(\n      effects,\n      destinationAfter,\n      // Note: we don\u2019t need to reset the way `markdown-rs` does.\n      nok,\n      'definitionDestination',\n      'definitionDestinationLiteral',\n      'definitionDestinationLiteralMarker',\n      'definitionDestinationRaw',\n      'definitionDestinationString'\n    )(code)\n  }\n\n  /**\n   * After destination.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function destinationAfter(code) {\n    return effects.attempt(titleBefore, after, after)(code)\n  }\n\n  /**\n   * After definition.\n   *\n   * ```markdown\n   * > | [a]: b\n   *           ^\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    return markdownSpace(code)\n      ? factorySpace(effects, afterWhitespace, 'whitespace')(code)\n      : afterWhitespace(code)\n  }\n\n  /**\n   * After definition, after optional whitespace.\n   *\n   * ```markdown\n   * > | [a]: b\n   *           ^\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterWhitespace(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('definition')\n\n      // Note: we don\u2019t care about uniqueness.\n      // It\u2019s likely that that doesn\u2019t happen very frequently.\n      // It is more likely that it wastes precious time.\n      self.parser.defined.push(identifier)\n\n      // To do: `markdown-rs` interrupt.\n      // // You\u2019d be interrupting.\n      // tokenizer.interrupt = true\n      return ok(code)\n    }\n    return nok(code)\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTitleBefore(effects, ok, nok) {\n  return titleBefore\n\n  /**\n   * After destination, at whitespace.\n   *\n   * ```markdown\n   * > | [a]: b\n   *           ^\n   * > | [a]: b \"c\"\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function titleBefore(code) {\n    return markdownLineEndingOrSpace(code)\n      ? factoryWhitespace(effects, beforeMarker)(code)\n      : nok(code)\n  }\n\n  /**\n   * At title.\n   *\n   * ```markdown\n   *   | [a]: b\n   * > | \"c\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeMarker(code) {\n    return factoryTitle(\n      effects,\n      titleAfter,\n      nok,\n      'definitionTitle',\n      'definitionTitleMarker',\n      'definitionTitleString'\n    )(code)\n  }\n\n  /**\n   * After title.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function titleAfter(code) {\n    return markdownSpace(code)\n      ? factorySpace(effects, titleAfterOptionalWhitespace, 'whitespace')(code)\n      : titleAfterOptionalWhitespace(code)\n  }\n\n  /**\n   * After title, after optional whitespace.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function titleAfterOptionalWhitespace(code) {\n    return code === null || markdownLineEnding(code) ? ok(code) : nok(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {markdownLineEnding} from 'micromark-util-character'\n/** @type {Construct} */\nexport const hardBreakEscape = {\n  name: 'hardBreakEscape',\n  tokenize: tokenizeHardBreakEscape\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHardBreakEscape(effects, ok, nok) {\n  return start\n\n  /**\n   * Start of a hard break (escape).\n   *\n   * ```markdown\n   * > | a\\\n   *      ^\n   *   | b\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('hardBreakEscape')\n    effects.consume(code)\n    return after\n  }\n\n  /**\n   * After `\\`, at eol.\n   *\n   * ```markdown\n   * > | a\\\n   *       ^\n   *   | b\n   * ```\n   *\n   *  @type {State}\n   */\n  function after(code) {\n    if (markdownLineEnding(code)) {\n      effects.exit('hardBreakEscape')\n      return ok(code)\n    }\n    return nok(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {\n  markdownLineEnding,\n  markdownLineEndingOrSpace,\n  markdownSpace\n} from 'micromark-util-character'\nimport {splice} from 'micromark-util-chunked'\n/** @type {Construct} */\nexport const headingAtx = {\n  name: 'headingAtx',\n  tokenize: tokenizeHeadingAtx,\n  resolve: resolveHeadingAtx\n}\n\n/** @type {Resolver} */\nfunction resolveHeadingAtx(events, context) {\n  let contentEnd = events.length - 2\n  let contentStart = 3\n  /** @type {Token} */\n  let content\n  /** @type {Token} */\n  let text\n\n  // Prefix whitespace, part of the opening.\n  if (events[contentStart][1].type === 'whitespace') {\n    contentStart += 2\n  }\n\n  // Suffix whitespace, part of the closing.\n  if (\n    contentEnd - 2 > contentStart &&\n    events[contentEnd][1].type === 'whitespace'\n  ) {\n    contentEnd -= 2\n  }\n  if (\n    events[contentEnd][1].type === 'atxHeadingSequence' &&\n    (contentStart === contentEnd - 1 ||\n      (contentEnd - 4 > contentStart &&\n        events[contentEnd - 2][1].type === 'whitespace'))\n  ) {\n    contentEnd -= contentStart + 1 === contentEnd ? 2 : 4\n  }\n  if (contentEnd > contentStart) {\n    content = {\n      type: 'atxHeadingText',\n      start: events[contentStart][1].start,\n      end: events[contentEnd][1].end\n    }\n    text = {\n      type: 'chunkText',\n      start: events[contentStart][1].start,\n      end: events[contentEnd][1].end,\n      contentType: 'text'\n    }\n    splice(events, contentStart, contentEnd - contentStart + 1, [\n      ['enter', content, context],\n      ['enter', text, context],\n      ['exit', text, context],\n      ['exit', content, context]\n    ])\n  }\n  return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHeadingAtx(effects, ok, nok) {\n  let size = 0\n  return start\n\n  /**\n   * Start of a heading (atx).\n   *\n   * ```markdown\n   * > | ## aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: parse indent like `markdown-rs`.\n    effects.enter('atxHeading')\n    return before(code)\n  }\n\n  /**\n   * After optional whitespace, at `#`.\n   *\n   * ```markdown\n   * > | ## aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    effects.enter('atxHeadingSequence')\n    return sequenceOpen(code)\n  }\n\n  /**\n   * In opening sequence.\n   *\n   * ```markdown\n   * > | ## aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === 35 && size++ < 6) {\n      effects.consume(code)\n      return sequenceOpen\n    }\n\n    // Always at least one `#`.\n    if (code === null || markdownLineEndingOrSpace(code)) {\n      effects.exit('atxHeadingSequence')\n      return atBreak(code)\n    }\n    return nok(code)\n  }\n\n  /**\n   * After something, before something else.\n   *\n   * ```markdown\n   * > | ## aa\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === 35) {\n      effects.enter('atxHeadingSequence')\n      return sequenceFurther(code)\n    }\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('atxHeading')\n      // To do: interrupt like `markdown-rs`.\n      // // Feel free to interrupt.\n      // tokenizer.interrupt = false\n      return ok(code)\n    }\n    if (markdownSpace(code)) {\n      return factorySpace(effects, atBreak, 'whitespace')(code)\n    }\n\n    // To do: generate `data` tokens, add the `text` token later.\n    // Needs edit map, see: `markdown.rs`.\n    effects.enter('atxHeadingText')\n    return data(code)\n  }\n\n  /**\n   * In further sequence (after whitespace).\n   *\n   * Could be normal \u201Cvisible\u201D hashes in the heading or a final sequence.\n   *\n   * ```markdown\n   * > | ## aa ##\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceFurther(code) {\n    if (code === 35) {\n      effects.consume(code)\n      return sequenceFurther\n    }\n    effects.exit('atxHeadingSequence')\n    return atBreak(code)\n  }\n\n  /**\n   * In text.\n   *\n   * ```markdown\n   * > | ## aa\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function data(code) {\n    if (code === null || code === 35 || markdownLineEndingOrSpace(code)) {\n      effects.exit('atxHeadingText')\n      return atBreak(code)\n    }\n    effects.consume(code)\n    return data\n  }\n}\n", "/**\n * List of lowercase HTML \u201Cblock\u201D tag names.\n *\n * The list, when parsing HTML (flow), results in more relaxed rules (condition\n * 6).\n * Because they are known blocks, the HTML-like syntax doesn\u2019t have to be\n * strictly parsed.\n * For tag names not in this list, a more strict algorithm (condition 7) is used\n * to detect whether the HTML-like syntax is seen as HTML (flow) or not.\n *\n * This is copied from:\n * <https://spec.commonmark.org/0.30/#html-blocks>.\n *\n * > \uD83D\uDC49 **Note**: `search` was added in `CommonMark@0.31`.\n */\nexport const htmlBlockNames = [\n  'address',\n  'article',\n  'aside',\n  'base',\n  'basefont',\n  'blockquote',\n  'body',\n  'caption',\n  'center',\n  'col',\n  'colgroup',\n  'dd',\n  'details',\n  'dialog',\n  'dir',\n  'div',\n  'dl',\n  'dt',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'footer',\n  'form',\n  'frame',\n  'frameset',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'head',\n  'header',\n  'hr',\n  'html',\n  'iframe',\n  'legend',\n  'li',\n  'link',\n  'main',\n  'menu',\n  'menuitem',\n  'nav',\n  'noframes',\n  'ol',\n  'optgroup',\n  'option',\n  'p',\n  'param',\n  'search',\n  'section',\n  'summary',\n  'table',\n  'tbody',\n  'td',\n  'tfoot',\n  'th',\n  'thead',\n  'title',\n  'tr',\n  'track',\n  'ul'\n]\n\n/**\n * List of lowercase HTML \u201Craw\u201D tag names.\n *\n * The list, when parsing HTML (flow), results in HTML that can include lines\n * without exiting, until a closing tag also in this list is found (condition\n * 1).\n *\n * This module is copied from:\n * <https://spec.commonmark.org/0.30/#html-blocks>.\n *\n * > \uD83D\uDC49 **Note**: `textarea` was added in `CommonMark@0.30`.\n */\nexport const htmlRawNames = ['pre', 'script', 'style', 'textarea']\n", "/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {\n  asciiAlpha,\n  asciiAlphanumeric,\n  markdownLineEnding,\n  markdownLineEndingOrSpace,\n  markdownSpace\n} from 'micromark-util-character'\nimport {htmlBlockNames, htmlRawNames} from 'micromark-util-html-tag-name'\nimport {blankLine} from './blank-line.js'\n\n/** @type {Construct} */\nexport const htmlFlow = {\n  name: 'htmlFlow',\n  tokenize: tokenizeHtmlFlow,\n  resolveTo: resolveToHtmlFlow,\n  concrete: true\n}\n\n/** @type {Construct} */\nconst blankLineBefore = {\n  tokenize: tokenizeBlankLineBefore,\n  partial: true\n}\nconst nonLazyContinuationStart = {\n  tokenize: tokenizeNonLazyContinuationStart,\n  partial: true\n}\n\n/** @type {Resolver} */\nfunction resolveToHtmlFlow(events) {\n  let index = events.length\n  while (index--) {\n    if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') {\n      break\n    }\n  }\n  if (index > 1 && events[index - 2][1].type === 'linePrefix') {\n    // Add the prefix start to the HTML token.\n    events[index][1].start = events[index - 2][1].start\n    // Add the prefix start to the HTML line token.\n    events[index + 1][1].start = events[index - 2][1].start\n    // Remove the line prefix.\n    events.splice(index - 2, 2)\n  }\n  return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlFlow(effects, ok, nok) {\n  const self = this\n  /** @type {number} */\n  let marker\n  /** @type {boolean} */\n  let closingTag\n  /** @type {string} */\n  let buffer\n  /** @type {number} */\n  let index\n  /** @type {Code} */\n  let markerB\n  return start\n\n  /**\n   * Start of HTML (flow).\n   *\n   * ```markdown\n   * > | <x />\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: parse indent like `markdown-rs`.\n    return before(code)\n  }\n\n  /**\n   * At `<`, after optional whitespace.\n   *\n   * ```markdown\n   * > | <x />\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    effects.enter('htmlFlow')\n    effects.enter('htmlFlowData')\n    effects.consume(code)\n    return open\n  }\n\n  /**\n   * After `<`, at tag name or other stuff.\n   *\n   * ```markdown\n   * > | <x />\n   *      ^\n   * > | <!doctype>\n   *      ^\n   * > | <!--xxx-->\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 33) {\n      effects.consume(code)\n      return declarationOpen\n    }\n    if (code === 47) {\n      effects.consume(code)\n      closingTag = true\n      return tagCloseStart\n    }\n    if (code === 63) {\n      effects.consume(code)\n      marker = 3\n      // To do:\n      // tokenizer.concrete = true\n      // To do: use `markdown-rs` style interrupt.\n      // While we\u2019re in an instruction instead of a declaration, we\u2019re on a `?`\n      // right now, so we do need to search for `>`, similar to declarations.\n      return self.interrupt ? ok : continuationDeclarationInside\n    }\n\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      // @ts-expect-error: not null.\n      buffer = String.fromCharCode(code)\n      return tagName\n    }\n    return nok(code)\n  }\n\n  /**\n   * After `<!`, at declaration, comment, or CDATA.\n   *\n   * ```markdown\n   * > | <!doctype>\n   *       ^\n   * > | <!--xxx-->\n   *       ^\n   * > | <![CDATA[>&<]]>\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function declarationOpen(code) {\n    if (code === 45) {\n      effects.consume(code)\n      marker = 2\n      return commentOpenInside\n    }\n    if (code === 91) {\n      effects.consume(code)\n      marker = 5\n      index = 0\n      return cdataOpenInside\n    }\n\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      marker = 4\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return self.interrupt ? ok : continuationDeclarationInside\n    }\n    return nok(code)\n  }\n\n  /**\n   * After `<!-`, inside a comment, at another `-`.\n   *\n   * ```markdown\n   * > | <!--xxx-->\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentOpenInside(code) {\n    if (code === 45) {\n      effects.consume(code)\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return self.interrupt ? ok : continuationDeclarationInside\n    }\n    return nok(code)\n  }\n\n  /**\n   * After `<![`, inside CDATA, expecting `CDATA[`.\n   *\n   * ```markdown\n   * > | <![CDATA[>&<]]>\n   *        ^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataOpenInside(code) {\n    const value = 'CDATA['\n    if (code === value.charCodeAt(index++)) {\n      effects.consume(code)\n      if (index === value.length) {\n        // // Do not form containers.\n        // tokenizer.concrete = true\n        return self.interrupt ? ok : continuation\n      }\n      return cdataOpenInside\n    }\n    return nok(code)\n  }\n\n  /**\n   * After `</`, in closing tag, at tag name.\n   *\n   * ```markdown\n   * > | </x>\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagCloseStart(code) {\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      // @ts-expect-error: not null.\n      buffer = String.fromCharCode(code)\n      return tagName\n    }\n    return nok(code)\n  }\n\n  /**\n   * In tag name.\n   *\n   * ```markdown\n   * > | <ab>\n   *      ^^\n   * > | </ab>\n   *       ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagName(code) {\n    if (\n      code === null ||\n      code === 47 ||\n      code === 62 ||\n      markdownLineEndingOrSpace(code)\n    ) {\n      const slash = code === 47\n      const name = buffer.toLowerCase()\n      if (!slash && !closingTag && htmlRawNames.includes(name)) {\n        marker = 1\n        // // Do not form containers.\n        // tokenizer.concrete = true\n        return self.interrupt ? ok(code) : continuation(code)\n      }\n      if (htmlBlockNames.includes(buffer.toLowerCase())) {\n        marker = 6\n        if (slash) {\n          effects.consume(code)\n          return basicSelfClosing\n        }\n\n        // // Do not form containers.\n        // tokenizer.concrete = true\n        return self.interrupt ? ok(code) : continuation(code)\n      }\n      marker = 7\n      // Do not support complete HTML when interrupting.\n      return self.interrupt && !self.parser.lazy[self.now().line]\n        ? nok(code)\n        : closingTag\n        ? completeClosingTagAfter(code)\n        : completeAttributeNameBefore(code)\n    }\n\n    // ASCII alphanumerical and `-`.\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code)\n      buffer += String.fromCharCode(code)\n      return tagName\n    }\n    return nok(code)\n  }\n\n  /**\n   * After closing slash of a basic tag name.\n   *\n   * ```markdown\n   * > | <div/>\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function basicSelfClosing(code) {\n    if (code === 62) {\n      effects.consume(code)\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return self.interrupt ? ok : continuation\n    }\n    return nok(code)\n  }\n\n  /**\n   * After closing slash of a complete tag name.\n   *\n   * ```markdown\n   * > | <x/>\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeClosingTagAfter(code) {\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return completeClosingTagAfter\n    }\n    return completeEnd(code)\n  }\n\n  /**\n   * At an attribute name.\n   *\n   * At first, this state is used after a complete tag name, after whitespace,\n   * where it expects optional attributes or the end of the tag.\n   * It is also reused after attributes, when expecting more optional\n   * attributes.\n   *\n   * ```markdown\n   * > | <a />\n   *        ^\n   * > | <a :b>\n   *        ^\n   * > | <a _b>\n   *        ^\n   * > | <a b>\n   *        ^\n   * > | <a >\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeNameBefore(code) {\n    if (code === 47) {\n      effects.consume(code)\n      return completeEnd\n    }\n\n    // ASCII alphanumerical and `:` and `_`.\n    if (code === 58 || code === 95 || asciiAlpha(code)) {\n      effects.consume(code)\n      return completeAttributeName\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return completeAttributeNameBefore\n    }\n    return completeEnd(code)\n  }\n\n  /**\n   * In attribute name.\n   *\n   * ```markdown\n   * > | <a :b>\n   *         ^\n   * > | <a _b>\n   *         ^\n   * > | <a b>\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeName(code) {\n    // ASCII alphanumerical and `-`, `.`, `:`, and `_`.\n    if (\n      code === 45 ||\n      code === 46 ||\n      code === 58 ||\n      code === 95 ||\n      asciiAlphanumeric(code)\n    ) {\n      effects.consume(code)\n      return completeAttributeName\n    }\n    return completeAttributeNameAfter(code)\n  }\n\n  /**\n   * After attribute name, at an optional initializer, the end of the tag, or\n   * whitespace.\n   *\n   * ```markdown\n   * > | <a b>\n   *         ^\n   * > | <a b=c>\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeNameAfter(code) {\n    if (code === 61) {\n      effects.consume(code)\n      return completeAttributeValueBefore\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return completeAttributeNameAfter\n    }\n    return completeAttributeNameBefore(code)\n  }\n\n  /**\n   * Before unquoted, double quoted, or single quoted attribute value, allowing\n   * whitespace.\n   *\n   * ```markdown\n   * > | <a b=c>\n   *          ^\n   * > | <a b=\"c\">\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueBefore(code) {\n    if (\n      code === null ||\n      code === 60 ||\n      code === 61 ||\n      code === 62 ||\n      code === 96\n    ) {\n      return nok(code)\n    }\n    if (code === 34 || code === 39) {\n      effects.consume(code)\n      markerB = code\n      return completeAttributeValueQuoted\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return completeAttributeValueBefore\n    }\n    return completeAttributeValueUnquoted(code)\n  }\n\n  /**\n   * In double or single quoted attribute value.\n   *\n   * ```markdown\n   * > | <a b=\"c\">\n   *           ^\n   * > | <a b='c'>\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueQuoted(code) {\n    if (code === markerB) {\n      effects.consume(code)\n      markerB = null\n      return completeAttributeValueQuotedAfter\n    }\n    if (code === null || markdownLineEnding(code)) {\n      return nok(code)\n    }\n    effects.consume(code)\n    return completeAttributeValueQuoted\n  }\n\n  /**\n   * In unquoted attribute value.\n   *\n   * ```markdown\n   * > | <a b=c>\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueUnquoted(code) {\n    if (\n      code === null ||\n      code === 34 ||\n      code === 39 ||\n      code === 47 ||\n      code === 60 ||\n      code === 61 ||\n      code === 62 ||\n      code === 96 ||\n      markdownLineEndingOrSpace(code)\n    ) {\n      return completeAttributeNameAfter(code)\n    }\n    effects.consume(code)\n    return completeAttributeValueUnquoted\n  }\n\n  /**\n   * After double or single quoted attribute value, before whitespace or the\n   * end of the tag.\n   *\n   * ```markdown\n   * > | <a b=\"c\">\n   *            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueQuotedAfter(code) {\n    if (code === 47 || code === 62 || markdownSpace(code)) {\n      return completeAttributeNameBefore(code)\n    }\n    return nok(code)\n  }\n\n  /**\n   * In certain circumstances of a complete tag where only an `>` is allowed.\n   *\n   * ```markdown\n   * > | <a b=\"c\">\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeEnd(code) {\n    if (code === 62) {\n      effects.consume(code)\n      return completeAfter\n    }\n    return nok(code)\n  }\n\n  /**\n   * After `>` in a complete tag.\n   *\n   * ```markdown\n   * > | <x>\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAfter(code) {\n    if (code === null || markdownLineEnding(code)) {\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return continuation(code)\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return completeAfter\n    }\n    return nok(code)\n  }\n\n  /**\n   * In continuation of any HTML kind.\n   *\n   * ```markdown\n   * > | <!--xxx-->\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuation(code) {\n    if (code === 45 && marker === 2) {\n      effects.consume(code)\n      return continuationCommentInside\n    }\n    if (code === 60 && marker === 1) {\n      effects.consume(code)\n      return continuationRawTagOpen\n    }\n    if (code === 62 && marker === 4) {\n      effects.consume(code)\n      return continuationClose\n    }\n    if (code === 63 && marker === 3) {\n      effects.consume(code)\n      return continuationDeclarationInside\n    }\n    if (code === 93 && marker === 5) {\n      effects.consume(code)\n      return continuationCdataInside\n    }\n    if (markdownLineEnding(code) && (marker === 6 || marker === 7)) {\n      effects.exit('htmlFlowData')\n      return effects.check(\n        blankLineBefore,\n        continuationAfter,\n        continuationStart\n      )(code)\n    }\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('htmlFlowData')\n      return continuationStart(code)\n    }\n    effects.consume(code)\n    return continuation\n  }\n\n  /**\n   * In continuation, at eol.\n   *\n   * ```markdown\n   * > | <x>\n   *        ^\n   *   | asd\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationStart(code) {\n    return effects.check(\n      nonLazyContinuationStart,\n      continuationStartNonLazy,\n      continuationAfter\n    )(code)\n  }\n\n  /**\n   * In continuation, at eol, before non-lazy content.\n   *\n   * ```markdown\n   * > | <x>\n   *        ^\n   *   | asd\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationStartNonLazy(code) {\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return continuationBefore\n  }\n\n  /**\n   * In continuation, before non-lazy content.\n   *\n   * ```markdown\n   *   | <x>\n   * > | asd\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return continuationStart(code)\n    }\n    effects.enter('htmlFlowData')\n    return continuation(code)\n  }\n\n  /**\n   * In comment continuation, after one `-`, expecting another.\n   *\n   * ```markdown\n   * > | <!--xxx-->\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationCommentInside(code) {\n    if (code === 45) {\n      effects.consume(code)\n      return continuationDeclarationInside\n    }\n    return continuation(code)\n  }\n\n  /**\n   * In raw continuation, after `<`, at `/`.\n   *\n   * ```markdown\n   * > | <script>console.log(1)</script>\n   *                            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationRawTagOpen(code) {\n    if (code === 47) {\n      effects.consume(code)\n      buffer = ''\n      return continuationRawEndTag\n    }\n    return continuation(code)\n  }\n\n  /**\n   * In raw continuation, after `</`, in a raw tag name.\n   *\n   * ```markdown\n   * > | <script>console.log(1)</script>\n   *                             ^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationRawEndTag(code) {\n    if (code === 62) {\n      const name = buffer.toLowerCase()\n      if (htmlRawNames.includes(name)) {\n        effects.consume(code)\n        return continuationClose\n      }\n      return continuation(code)\n    }\n    if (asciiAlpha(code) && buffer.length < 8) {\n      effects.consume(code)\n      // @ts-expect-error: not null.\n      buffer += String.fromCharCode(code)\n      return continuationRawEndTag\n    }\n    return continuation(code)\n  }\n\n  /**\n   * In cdata continuation, after `]`, expecting `]>`.\n   *\n   * ```markdown\n   * > | <![CDATA[>&<]]>\n   *                  ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationCdataInside(code) {\n    if (code === 93) {\n      effects.consume(code)\n      return continuationDeclarationInside\n    }\n    return continuation(code)\n  }\n\n  /**\n   * In declaration or instruction continuation, at `>`.\n   *\n   * ```markdown\n   * > | <!-->\n   *         ^\n   * > | <?>\n   *       ^\n   * > | <!q>\n   *        ^\n   * > | <!--ab-->\n   *             ^\n   * > | <![CDATA[>&<]]>\n   *                   ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationDeclarationInside(code) {\n    if (code === 62) {\n      effects.consume(code)\n      return continuationClose\n    }\n\n    // More dashes.\n    if (code === 45 && marker === 2) {\n      effects.consume(code)\n      return continuationDeclarationInside\n    }\n    return continuation(code)\n  }\n\n  /**\n   * In closed continuation: everything we get until the eol/eof is part of it.\n   *\n   * ```markdown\n   * > | <!doctype>\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationClose(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('htmlFlowData')\n      return continuationAfter(code)\n    }\n    effects.consume(code)\n    return continuationClose\n  }\n\n  /**\n   * Done.\n   *\n   * ```markdown\n   * > | <!doctype>\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationAfter(code) {\n    effects.exit('htmlFlow')\n    // // Feel free to interrupt.\n    // tokenizer.interrupt = false\n    // // No longer concrete.\n    // tokenizer.concrete = false\n    return ok(code)\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuationStart(effects, ok, nok) {\n  const self = this\n  return start\n\n  /**\n   * At eol, before continuation.\n   *\n   * ```markdown\n   * > | * ```js\n   *            ^\n   *   | b\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (markdownLineEnding(code)) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return after\n    }\n    return nok(code)\n  }\n\n  /**\n   * A continuation.\n   *\n   * ```markdown\n   *   | * ```js\n   * > | b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    return self.parser.lazy[self.now().line] ? nok(code) : ok(code)\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLineBefore(effects, ok, nok) {\n  return start\n\n  /**\n   * Before eol, expecting blank line.\n   *\n   * ```markdown\n   * > | <div>\n   *          ^\n   *   |\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return effects.attempt(blankLine, ok, nok)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {\n  asciiAlpha,\n  asciiAlphanumeric,\n  markdownLineEnding,\n  markdownLineEndingOrSpace,\n  markdownSpace\n} from 'micromark-util-character'\n/** @type {Construct} */\nexport const htmlText = {\n  name: 'htmlText',\n  tokenize: tokenizeHtmlText\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlText(effects, ok, nok) {\n  const self = this\n  /** @type {NonNullable<Code> | undefined} */\n  let marker\n  /** @type {number} */\n  let index\n  /** @type {State} */\n  let returnState\n  return start\n\n  /**\n   * Start of HTML (text).\n   *\n   * ```markdown\n   * > | a <b> c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('htmlText')\n    effects.enter('htmlTextData')\n    effects.consume(code)\n    return open\n  }\n\n  /**\n   * After `<`, at tag name or other stuff.\n   *\n   * ```markdown\n   * > | a <b> c\n   *        ^\n   * > | a <!doctype> c\n   *        ^\n   * > | a <!--b--> c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 33) {\n      effects.consume(code)\n      return declarationOpen\n    }\n    if (code === 47) {\n      effects.consume(code)\n      return tagCloseStart\n    }\n    if (code === 63) {\n      effects.consume(code)\n      return instruction\n    }\n\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      return tagOpen\n    }\n    return nok(code)\n  }\n\n  /**\n   * After `<!`, at declaration, comment, or CDATA.\n   *\n   * ```markdown\n   * > | a <!doctype> c\n   *         ^\n   * > | a <!--b--> c\n   *         ^\n   * > | a <![CDATA[>&<]]> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function declarationOpen(code) {\n    if (code === 45) {\n      effects.consume(code)\n      return commentOpenInside\n    }\n    if (code === 91) {\n      effects.consume(code)\n      index = 0\n      return cdataOpenInside\n    }\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      return declaration\n    }\n    return nok(code)\n  }\n\n  /**\n   * In a comment, after `<!-`, at another `-`.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentOpenInside(code) {\n    if (code === 45) {\n      effects.consume(code)\n      return commentEnd\n    }\n    return nok(code)\n  }\n\n  /**\n   * In comment.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function comment(code) {\n    if (code === null) {\n      return nok(code)\n    }\n    if (code === 45) {\n      effects.consume(code)\n      return commentClose\n    }\n    if (markdownLineEnding(code)) {\n      returnState = comment\n      return lineEndingBefore(code)\n    }\n    effects.consume(code)\n    return comment\n  }\n\n  /**\n   * In comment, after `-`.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentClose(code) {\n    if (code === 45) {\n      effects.consume(code)\n      return commentEnd\n    }\n    return comment(code)\n  }\n\n  /**\n   * In comment, after `--`.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentEnd(code) {\n    return code === 62\n      ? end(code)\n      : code === 45\n      ? commentClose(code)\n      : comment(code)\n  }\n\n  /**\n   * After `<![`, in CDATA, expecting `CDATA[`.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *          ^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataOpenInside(code) {\n    const value = 'CDATA['\n    if (code === value.charCodeAt(index++)) {\n      effects.consume(code)\n      return index === value.length ? cdata : cdataOpenInside\n    }\n    return nok(code)\n  }\n\n  /**\n   * In CDATA.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *                ^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdata(code) {\n    if (code === null) {\n      return nok(code)\n    }\n    if (code === 93) {\n      effects.consume(code)\n      return cdataClose\n    }\n    if (markdownLineEnding(code)) {\n      returnState = cdata\n      return lineEndingBefore(code)\n    }\n    effects.consume(code)\n    return cdata\n  }\n\n  /**\n   * In CDATA, after `]`, at another `]`.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *                    ^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataClose(code) {\n    if (code === 93) {\n      effects.consume(code)\n      return cdataEnd\n    }\n    return cdata(code)\n  }\n\n  /**\n   * In CDATA, after `]]`, at `>`.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *                     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataEnd(code) {\n    if (code === 62) {\n      return end(code)\n    }\n    if (code === 93) {\n      effects.consume(code)\n      return cdataEnd\n    }\n    return cdata(code)\n  }\n\n  /**\n   * In declaration.\n   *\n   * ```markdown\n   * > | a <!b> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function declaration(code) {\n    if (code === null || code === 62) {\n      return end(code)\n    }\n    if (markdownLineEnding(code)) {\n      returnState = declaration\n      return lineEndingBefore(code)\n    }\n    effects.consume(code)\n    return declaration\n  }\n\n  /**\n   * In instruction.\n   *\n   * ```markdown\n   * > | a <?b?> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function instruction(code) {\n    if (code === null) {\n      return nok(code)\n    }\n    if (code === 63) {\n      effects.consume(code)\n      return instructionClose\n    }\n    if (markdownLineEnding(code)) {\n      returnState = instruction\n      return lineEndingBefore(code)\n    }\n    effects.consume(code)\n    return instruction\n  }\n\n  /**\n   * In instruction, after `?`, at `>`.\n   *\n   * ```markdown\n   * > | a <?b?> c\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function instructionClose(code) {\n    return code === 62 ? end(code) : instruction(code)\n  }\n\n  /**\n   * After `</`, in closing tag, at tag name.\n   *\n   * ```markdown\n   * > | a </b> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagCloseStart(code) {\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      return tagClose\n    }\n    return nok(code)\n  }\n\n  /**\n   * After `</x`, in a tag name.\n   *\n   * ```markdown\n   * > | a </b> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagClose(code) {\n    // ASCII alphanumerical and `-`.\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code)\n      return tagClose\n    }\n    return tagCloseBetween(code)\n  }\n\n  /**\n   * In closing tag, after tag name.\n   *\n   * ```markdown\n   * > | a </b> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagCloseBetween(code) {\n    if (markdownLineEnding(code)) {\n      returnState = tagCloseBetween\n      return lineEndingBefore(code)\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return tagCloseBetween\n    }\n    return end(code)\n  }\n\n  /**\n   * After `<x`, in opening tag name.\n   *\n   * ```markdown\n   * > | a <b> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpen(code) {\n    // ASCII alphanumerical and `-`.\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code)\n      return tagOpen\n    }\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code)\n    }\n    return nok(code)\n  }\n\n  /**\n   * In opening tag, after tag name.\n   *\n   * ```markdown\n   * > | a <b> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenBetween(code) {\n    if (code === 47) {\n      effects.consume(code)\n      return end\n    }\n\n    // ASCII alphabetical and `:` and `_`.\n    if (code === 58 || code === 95 || asciiAlpha(code)) {\n      effects.consume(code)\n      return tagOpenAttributeName\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenBetween\n      return lineEndingBefore(code)\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return tagOpenBetween\n    }\n    return end(code)\n  }\n\n  /**\n   * In attribute name.\n   *\n   * ```markdown\n   * > | a <b c> d\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeName(code) {\n    // ASCII alphabetical and `-`, `.`, `:`, and `_`.\n    if (\n      code === 45 ||\n      code === 46 ||\n      code === 58 ||\n      code === 95 ||\n      asciiAlphanumeric(code)\n    ) {\n      effects.consume(code)\n      return tagOpenAttributeName\n    }\n    return tagOpenAttributeNameAfter(code)\n  }\n\n  /**\n   * After attribute name, before initializer, the end of the tag, or\n   * whitespace.\n   *\n   * ```markdown\n   * > | a <b c> d\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeNameAfter(code) {\n    if (code === 61) {\n      effects.consume(code)\n      return tagOpenAttributeValueBefore\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeNameAfter\n      return lineEndingBefore(code)\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return tagOpenAttributeNameAfter\n    }\n    return tagOpenBetween(code)\n  }\n\n  /**\n   * Before unquoted, double quoted, or single quoted attribute value, allowing\n   * whitespace.\n   *\n   * ```markdown\n   * > | a <b c=d> e\n   *            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueBefore(code) {\n    if (\n      code === null ||\n      code === 60 ||\n      code === 61 ||\n      code === 62 ||\n      code === 96\n    ) {\n      return nok(code)\n    }\n    if (code === 34 || code === 39) {\n      effects.consume(code)\n      marker = code\n      return tagOpenAttributeValueQuoted\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeValueBefore\n      return lineEndingBefore(code)\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return tagOpenAttributeValueBefore\n    }\n    effects.consume(code)\n    return tagOpenAttributeValueUnquoted\n  }\n\n  /**\n   * In double or single quoted attribute value.\n   *\n   * ```markdown\n   * > | a <b c=\"d\"> e\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueQuoted(code) {\n    if (code === marker) {\n      effects.consume(code)\n      marker = undefined\n      return tagOpenAttributeValueQuotedAfter\n    }\n    if (code === null) {\n      return nok(code)\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeValueQuoted\n      return lineEndingBefore(code)\n    }\n    effects.consume(code)\n    return tagOpenAttributeValueQuoted\n  }\n\n  /**\n   * In unquoted attribute value.\n   *\n   * ```markdown\n   * > | a <b c=d> e\n   *            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueUnquoted(code) {\n    if (\n      code === null ||\n      code === 34 ||\n      code === 39 ||\n      code === 60 ||\n      code === 61 ||\n      code === 96\n    ) {\n      return nok(code)\n    }\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code)\n    }\n    effects.consume(code)\n    return tagOpenAttributeValueUnquoted\n  }\n\n  /**\n   * After double or single quoted attribute value, before whitespace or the end\n   * of the tag.\n   *\n   * ```markdown\n   * > | a <b c=\"d\"> e\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueQuotedAfter(code) {\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code)\n    }\n    return nok(code)\n  }\n\n  /**\n   * In certain circumstances of a tag where only an `>` is allowed.\n   *\n   * ```markdown\n   * > | a <b c=\"d\"> e\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function end(code) {\n    if (code === 62) {\n      effects.consume(code)\n      effects.exit('htmlTextData')\n      effects.exit('htmlText')\n      return ok\n    }\n    return nok(code)\n  }\n\n  /**\n   * At eol.\n   *\n   * > \uD83D\uDC49 **Note**: we can\u2019t have blank lines in text, so no need to worry about\n   * > empty tokens.\n   *\n   * ```markdown\n   * > | a <!--a\n   *            ^\n   *   | b-->\n   * ```\n   *\n   * @type {State}\n   */\n  function lineEndingBefore(code) {\n    effects.exit('htmlTextData')\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return lineEndingAfter\n  }\n\n  /**\n   * After eol, at optional whitespace.\n   *\n   * > \uD83D\uDC49 **Note**: we can\u2019t have blank lines in text, so no need to worry about\n   * > empty tokens.\n   *\n   * ```markdown\n   *   | a <!--a\n   * > | b-->\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function lineEndingAfter(code) {\n    // Always populated by defaults.\n\n    return markdownSpace(code)\n      ? factorySpace(\n          effects,\n          lineEndingAfterPrefix,\n          'linePrefix',\n          self.parser.constructs.disable.null.includes('codeIndented')\n            ? undefined\n            : 4\n        )(code)\n      : lineEndingAfterPrefix(code)\n  }\n\n  /**\n   * After eol, after optional whitespace.\n   *\n   * > \uD83D\uDC49 **Note**: we can\u2019t have blank lines in text, so no need to worry about\n   * > empty tokens.\n   *\n   * ```markdown\n   *   | a <!--a\n   * > | b-->\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function lineEndingAfterPrefix(code) {\n    effects.enter('htmlTextData')\n    return returnState(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factoryDestination} from 'micromark-factory-destination'\nimport {factoryLabel} from 'micromark-factory-label'\nimport {factoryTitle} from 'micromark-factory-title'\nimport {factoryWhitespace} from 'micromark-factory-whitespace'\nimport {markdownLineEndingOrSpace} from 'micromark-util-character'\nimport {push, splice} from 'micromark-util-chunked'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\nimport {resolveAll} from 'micromark-util-resolve-all'\n/** @type {Construct} */\nexport const labelEnd = {\n  name: 'labelEnd',\n  tokenize: tokenizeLabelEnd,\n  resolveTo: resolveToLabelEnd,\n  resolveAll: resolveAllLabelEnd\n}\n\n/** @type {Construct} */\nconst resourceConstruct = {\n  tokenize: tokenizeResource\n}\n/** @type {Construct} */\nconst referenceFullConstruct = {\n  tokenize: tokenizeReferenceFull\n}\n/** @type {Construct} */\nconst referenceCollapsedConstruct = {\n  tokenize: tokenizeReferenceCollapsed\n}\n\n/** @type {Resolver} */\nfunction resolveAllLabelEnd(events) {\n  let index = -1\n  while (++index < events.length) {\n    const token = events[index][1]\n    if (\n      token.type === 'labelImage' ||\n      token.type === 'labelLink' ||\n      token.type === 'labelEnd'\n    ) {\n      // Remove the marker.\n      events.splice(index + 1, token.type === 'labelImage' ? 4 : 2)\n      token.type = 'data'\n      index++\n    }\n  }\n  return events\n}\n\n/** @type {Resolver} */\nfunction resolveToLabelEnd(events, context) {\n  let index = events.length\n  let offset = 0\n  /** @type {Token} */\n  let token\n  /** @type {number | undefined} */\n  let open\n  /** @type {number | undefined} */\n  let close\n  /** @type {Array<Event>} */\n  let media\n\n  // Find an opening.\n  while (index--) {\n    token = events[index][1]\n    if (open) {\n      // If we see another link, or inactive link label, we\u2019ve been here before.\n      if (\n        token.type === 'link' ||\n        (token.type === 'labelLink' && token._inactive)\n      ) {\n        break\n      }\n\n      // Mark other link openings as inactive, as we can\u2019t have links in\n      // links.\n      if (events[index][0] === 'enter' && token.type === 'labelLink') {\n        token._inactive = true\n      }\n    } else if (close) {\n      if (\n        events[index][0] === 'enter' &&\n        (token.type === 'labelImage' || token.type === 'labelLink') &&\n        !token._balanced\n      ) {\n        open = index\n        if (token.type !== 'labelLink') {\n          offset = 2\n          break\n        }\n      }\n    } else if (token.type === 'labelEnd') {\n      close = index\n    }\n  }\n  const group = {\n    type: events[open][1].type === 'labelLink' ? 'link' : 'image',\n    start: Object.assign({}, events[open][1].start),\n    end: Object.assign({}, events[events.length - 1][1].end)\n  }\n  const label = {\n    type: 'label',\n    start: Object.assign({}, events[open][1].start),\n    end: Object.assign({}, events[close][1].end)\n  }\n  const text = {\n    type: 'labelText',\n    start: Object.assign({}, events[open + offset + 2][1].end),\n    end: Object.assign({}, events[close - 2][1].start)\n  }\n  media = [\n    ['enter', group, context],\n    ['enter', label, context]\n  ]\n\n  // Opening marker.\n  media = push(media, events.slice(open + 1, open + offset + 3))\n\n  // Text open.\n  media = push(media, [['enter', text, context]])\n\n  // Always populated by defaults.\n\n  // Between.\n  media = push(\n    media,\n    resolveAll(\n      context.parser.constructs.insideSpan.null,\n      events.slice(open + offset + 4, close - 3),\n      context\n    )\n  )\n\n  // Text close, marker close, label close.\n  media = push(media, [\n    ['exit', text, context],\n    events[close - 2],\n    events[close - 1],\n    ['exit', label, context]\n  ])\n\n  // Reference, resource, or so.\n  media = push(media, events.slice(close + 1))\n\n  // Media close.\n  media = push(media, [['exit', group, context]])\n  splice(events, open, events.length, media)\n  return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLabelEnd(effects, ok, nok) {\n  const self = this\n  let index = self.events.length\n  /** @type {Token} */\n  let labelStart\n  /** @type {boolean} */\n  let defined\n\n  // Find an opening.\n  while (index--) {\n    if (\n      (self.events[index][1].type === 'labelImage' ||\n        self.events[index][1].type === 'labelLink') &&\n      !self.events[index][1]._balanced\n    ) {\n      labelStart = self.events[index][1]\n      break\n    }\n  }\n  return start\n\n  /**\n   * Start of label end.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *       ^\n   * > | [a][b] c\n   *       ^\n   * > | [a][] b\n   *       ^\n   * > | [a] b\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // If there is not an okay opening.\n    if (!labelStart) {\n      return nok(code)\n    }\n\n    // If the corresponding label (link) start is marked as inactive,\n    // it means we\u2019d be wrapping a link, like this:\n    //\n    // ```markdown\n    // > | a [b [c](d) e](f) g.\n    //                  ^\n    // ```\n    //\n    // We can\u2019t have that, so it\u2019s just balanced brackets.\n    if (labelStart._inactive) {\n      return labelEndNok(code)\n    }\n    defined = self.parser.defined.includes(\n      normalizeIdentifier(\n        self.sliceSerialize({\n          start: labelStart.end,\n          end: self.now()\n        })\n      )\n    )\n    effects.enter('labelEnd')\n    effects.enter('labelMarker')\n    effects.consume(code)\n    effects.exit('labelMarker')\n    effects.exit('labelEnd')\n    return after\n  }\n\n  /**\n   * After `]`.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *       ^\n   * > | [a][b] c\n   *       ^\n   * > | [a][] b\n   *       ^\n   * > | [a] b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    // Note: `markdown-rs` also parses GFM footnotes here, which for us is in\n    // an extension.\n\n    // Resource (`[asd](fgh)`)?\n    if (code === 40) {\n      return effects.attempt(\n        resourceConstruct,\n        labelEndOk,\n        defined ? labelEndOk : labelEndNok\n      )(code)\n    }\n\n    // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference?\n    if (code === 91) {\n      return effects.attempt(\n        referenceFullConstruct,\n        labelEndOk,\n        defined ? referenceNotFull : labelEndNok\n      )(code)\n    }\n\n    // Shortcut (`[asd]`) reference?\n    return defined ? labelEndOk(code) : labelEndNok(code)\n  }\n\n  /**\n   * After `]`, at `[`, but not at a full reference.\n   *\n   * > \uD83D\uDC49 **Note**: we only get here if the label is defined.\n   *\n   * ```markdown\n   * > | [a][] b\n   *        ^\n   * > | [a] b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceNotFull(code) {\n    return effects.attempt(\n      referenceCollapsedConstruct,\n      labelEndOk,\n      labelEndNok\n    )(code)\n  }\n\n  /**\n   * Done, we found something.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *           ^\n   * > | [a][b] c\n   *           ^\n   * > | [a][] b\n   *          ^\n   * > | [a] b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEndOk(code) {\n    // Note: `markdown-rs` does a bunch of stuff here.\n    return ok(code)\n  }\n\n  /**\n   * Done, it\u2019s nothing.\n   *\n   * There was an okay opening, but we didn\u2019t match anything.\n   *\n   * ```markdown\n   * > | [a](b c\n   *        ^\n   * > | [a][b c\n   *        ^\n   * > | [a] b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEndNok(code) {\n    labelStart._balanced = true\n    return nok(code)\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeResource(effects, ok, nok) {\n  return resourceStart\n\n  /**\n   * At a resource.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceStart(code) {\n    effects.enter('resource')\n    effects.enter('resourceMarker')\n    effects.consume(code)\n    effects.exit('resourceMarker')\n    return resourceBefore\n  }\n\n  /**\n   * In resource, after `(`, at optional whitespace.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceBefore(code) {\n    return markdownLineEndingOrSpace(code)\n      ? factoryWhitespace(effects, resourceOpen)(code)\n      : resourceOpen(code)\n  }\n\n  /**\n   * In resource, after optional whitespace, at `)` or a destination.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceOpen(code) {\n    if (code === 41) {\n      return resourceEnd(code)\n    }\n    return factoryDestination(\n      effects,\n      resourceDestinationAfter,\n      resourceDestinationMissing,\n      'resourceDestination',\n      'resourceDestinationLiteral',\n      'resourceDestinationLiteralMarker',\n      'resourceDestinationRaw',\n      'resourceDestinationString',\n      32\n    )(code)\n  }\n\n  /**\n   * In resource, after destination, at optional whitespace.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceDestinationAfter(code) {\n    return markdownLineEndingOrSpace(code)\n      ? factoryWhitespace(effects, resourceBetween)(code)\n      : resourceEnd(code)\n  }\n\n  /**\n   * At invalid destination.\n   *\n   * ```markdown\n   * > | [a](<<) b\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceDestinationMissing(code) {\n    return nok(code)\n  }\n\n  /**\n   * In resource, after destination and whitespace, at `(` or title.\n   *\n   * ```markdown\n   * > | [a](b ) c\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceBetween(code) {\n    if (code === 34 || code === 39 || code === 40) {\n      return factoryTitle(\n        effects,\n        resourceTitleAfter,\n        nok,\n        'resourceTitle',\n        'resourceTitleMarker',\n        'resourceTitleString'\n      )(code)\n    }\n    return resourceEnd(code)\n  }\n\n  /**\n   * In resource, after title, at optional whitespace.\n   *\n   * ```markdown\n   * > | [a](b \"c\") d\n   *              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceTitleAfter(code) {\n    return markdownLineEndingOrSpace(code)\n      ? factoryWhitespace(effects, resourceEnd)(code)\n      : resourceEnd(code)\n  }\n\n  /**\n   * In resource, at `)`.\n   *\n   * ```markdown\n   * > | [a](b) d\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceEnd(code) {\n    if (code === 41) {\n      effects.enter('resourceMarker')\n      effects.consume(code)\n      effects.exit('resourceMarker')\n      effects.exit('resource')\n      return ok\n    }\n    return nok(code)\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceFull(effects, ok, nok) {\n  const self = this\n  return referenceFull\n\n  /**\n   * In a reference (full), at the `[`.\n   *\n   * ```markdown\n   * > | [a][b] d\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceFull(code) {\n    return factoryLabel.call(\n      self,\n      effects,\n      referenceFullAfter,\n      referenceFullMissing,\n      'reference',\n      'referenceMarker',\n      'referenceString'\n    )(code)\n  }\n\n  /**\n   * In a reference (full), after `]`.\n   *\n   * ```markdown\n   * > | [a][b] d\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceFullAfter(code) {\n    return self.parser.defined.includes(\n      normalizeIdentifier(\n        self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1)\n      )\n    )\n      ? ok(code)\n      : nok(code)\n  }\n\n  /**\n   * In reference (full) that was missing.\n   *\n   * ```markdown\n   * > | [a][b d\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceFullMissing(code) {\n    return nok(code)\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceCollapsed(effects, ok, nok) {\n  return referenceCollapsedStart\n\n  /**\n   * In reference (collapsed), at `[`.\n   *\n   * > \uD83D\uDC49 **Note**: we only get here if the label is defined.\n   *\n   * ```markdown\n   * > | [a][] d\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceCollapsedStart(code) {\n    // We only attempt a collapsed label if there\u2019s a `[`.\n\n    effects.enter('reference')\n    effects.enter('referenceMarker')\n    effects.consume(code)\n    effects.exit('referenceMarker')\n    return referenceCollapsedOpen\n  }\n\n  /**\n   * In reference (collapsed), at `]`.\n   *\n   * > \uD83D\uDC49 **Note**: we only get here if the label is defined.\n   *\n   * ```markdown\n   * > | [a][] d\n   *         ^\n   * ```\n   *\n   *  @type {State}\n   */\n  function referenceCollapsedOpen(code) {\n    if (code === 93) {\n      effects.enter('referenceMarker')\n      effects.consume(code)\n      effects.exit('referenceMarker')\n      effects.exit('reference')\n      return ok\n    }\n    return nok(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {labelEnd} from './label-end.js'\n\n/** @type {Construct} */\nexport const labelStartImage = {\n  name: 'labelStartImage',\n  tokenize: tokenizeLabelStartImage,\n  resolveAll: labelEnd.resolveAll\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartImage(effects, ok, nok) {\n  const self = this\n  return start\n\n  /**\n   * Start of label (image) start.\n   *\n   * ```markdown\n   * > | a ![b] c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('labelImage')\n    effects.enter('labelImageMarker')\n    effects.consume(code)\n    effects.exit('labelImageMarker')\n    return open\n  }\n\n  /**\n   * After `!`, at `[`.\n   *\n   * ```markdown\n   * > | a ![b] c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 91) {\n      effects.enter('labelMarker')\n      effects.consume(code)\n      effects.exit('labelMarker')\n      effects.exit('labelImage')\n      return after\n    }\n    return nok(code)\n  }\n\n  /**\n   * After `![`.\n   *\n   * ```markdown\n   * > | a ![b] c\n   *         ^\n   * ```\n   *\n   * This is needed in because, when GFM footnotes are enabled, images never\n   * form when started with a `^`.\n   * Instead, links form:\n   *\n   * ```markdown\n   * ![^a](b)\n   *\n   * ![^a][b]\n   *\n   * [b]: c\n   * ```\n   *\n   * ```html\n   * <p>!<a href=\\\"b\\\">^a</a></p>\n   * <p>!<a href=\\\"c\\\">^a</a></p>\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    // To do: use a new field to do this, this is still needed for\n    // `micromark-extension-gfm-footnote`, but the `label-start-link`\n    // behavior isn\u2019t.\n    // Hidden footnotes hook.\n    /* c8 ignore next 3 */\n    return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs\n      ? nok(code)\n      : ok(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {labelEnd} from './label-end.js'\n\n/** @type {Construct} */\nexport const labelStartLink = {\n  name: 'labelStartLink',\n  tokenize: tokenizeLabelStartLink,\n  resolveAll: labelEnd.resolveAll\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartLink(effects, ok, nok) {\n  const self = this\n  return start\n\n  /**\n   * Start of label (link) start.\n   *\n   * ```markdown\n   * > | a [b] c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('labelLink')\n    effects.enter('labelMarker')\n    effects.consume(code)\n    effects.exit('labelMarker')\n    effects.exit('labelLink')\n    return after\n  }\n\n  /** @type {State} */\n  function after(code) {\n    // To do: this isn\u2019t needed in `micromark-extension-gfm-footnote`,\n    // remove.\n    // Hidden footnotes hook.\n    /* c8 ignore next 3 */\n    return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs\n      ? nok(code)\n      : ok(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n/** @type {Construct} */\nexport const lineEnding = {\n  name: 'lineEnding',\n  tokenize: tokenizeLineEnding\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLineEnding(effects, ok) {\n  return start\n\n  /** @type {State} */\n  function start(code) {\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return factorySpace(effects, ok, 'linePrefix')\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/** @type {Construct} */\nexport const thematicBreak = {\n  name: 'thematicBreak',\n  tokenize: tokenizeThematicBreak\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeThematicBreak(effects, ok, nok) {\n  let size = 0\n  /** @type {NonNullable<Code>} */\n  let marker\n  return start\n\n  /**\n   * Start of thematic break.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('thematicBreak')\n    // To do: parse indent like `markdown-rs`.\n    return before(code)\n  }\n\n  /**\n   * After optional whitespace, at marker.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    marker = code\n    return atBreak(code)\n  }\n\n  /**\n   * After something, before something else.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === marker) {\n      effects.enter('thematicBreakSequence')\n      return sequence(code)\n    }\n    if (size >= 3 && (code === null || markdownLineEnding(code))) {\n      effects.exit('thematicBreak')\n      return ok(code)\n    }\n    return nok(code)\n  }\n\n  /**\n   * In sequence.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequence(code) {\n    if (code === marker) {\n      effects.consume(code)\n      size++\n      return sequence\n    }\n    effects.exit('thematicBreakSequence')\n    return markdownSpace(code)\n      ? factorySpace(effects, atBreak, 'whitespace')(code)\n      : atBreak(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').ContainerState} ContainerState\n * @typedef {import('micromark-util-types').Exiter} Exiter\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {asciiDigit, markdownSpace} from 'micromark-util-character'\nimport {blankLine} from './blank-line.js'\nimport {thematicBreak} from './thematic-break.js'\n\n/** @type {Construct} */\nexport const list = {\n  name: 'list',\n  tokenize: tokenizeListStart,\n  continuation: {\n    tokenize: tokenizeListContinuation\n  },\n  exit: tokenizeListEnd\n}\n\n/** @type {Construct} */\nconst listItemPrefixWhitespaceConstruct = {\n  tokenize: tokenizeListItemPrefixWhitespace,\n  partial: true\n}\n\n/** @type {Construct} */\nconst indentConstruct = {\n  tokenize: tokenizeIndent,\n  partial: true\n}\n\n// To do: `markdown-rs` parses list items on their own and later stitches them\n// together.\n\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\nfunction tokenizeListStart(effects, ok, nok) {\n  const self = this\n  const tail = self.events[self.events.length - 1]\n  let initialSize =\n    tail && tail[1].type === 'linePrefix'\n      ? tail[2].sliceSerialize(tail[1], true).length\n      : 0\n  let size = 0\n  return start\n\n  /** @type {State} */\n  function start(code) {\n    const kind =\n      self.containerState.type ||\n      (code === 42 || code === 43 || code === 45\n        ? 'listUnordered'\n        : 'listOrdered')\n    if (\n      kind === 'listUnordered'\n        ? !self.containerState.marker || code === self.containerState.marker\n        : asciiDigit(code)\n    ) {\n      if (!self.containerState.type) {\n        self.containerState.type = kind\n        effects.enter(kind, {\n          _container: true\n        })\n      }\n      if (kind === 'listUnordered') {\n        effects.enter('listItemPrefix')\n        return code === 42 || code === 45\n          ? effects.check(thematicBreak, nok, atMarker)(code)\n          : atMarker(code)\n      }\n      if (!self.interrupt || code === 49) {\n        effects.enter('listItemPrefix')\n        effects.enter('listItemValue')\n        return inside(code)\n      }\n    }\n    return nok(code)\n  }\n\n  /** @type {State} */\n  function inside(code) {\n    if (asciiDigit(code) && ++size < 10) {\n      effects.consume(code)\n      return inside\n    }\n    if (\n      (!self.interrupt || size < 2) &&\n      (self.containerState.marker\n        ? code === self.containerState.marker\n        : code === 41 || code === 46)\n    ) {\n      effects.exit('listItemValue')\n      return atMarker(code)\n    }\n    return nok(code)\n  }\n\n  /**\n   * @type {State}\n   **/\n  function atMarker(code) {\n    effects.enter('listItemMarker')\n    effects.consume(code)\n    effects.exit('listItemMarker')\n    self.containerState.marker = self.containerState.marker || code\n    return effects.check(\n      blankLine,\n      // Can\u2019t be empty when interrupting.\n      self.interrupt ? nok : onBlank,\n      effects.attempt(\n        listItemPrefixWhitespaceConstruct,\n        endOfPrefix,\n        otherPrefix\n      )\n    )\n  }\n\n  /** @type {State} */\n  function onBlank(code) {\n    self.containerState.initialBlankLine = true\n    initialSize++\n    return endOfPrefix(code)\n  }\n\n  /** @type {State} */\n  function otherPrefix(code) {\n    if (markdownSpace(code)) {\n      effects.enter('listItemPrefixWhitespace')\n      effects.consume(code)\n      effects.exit('listItemPrefixWhitespace')\n      return endOfPrefix\n    }\n    return nok(code)\n  }\n\n  /** @type {State} */\n  function endOfPrefix(code) {\n    self.containerState.size =\n      initialSize +\n      self.sliceSerialize(effects.exit('listItemPrefix'), true).length\n    return ok(code)\n  }\n}\n\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\nfunction tokenizeListContinuation(effects, ok, nok) {\n  const self = this\n  self.containerState._closeFlow = undefined\n  return effects.check(blankLine, onBlank, notBlank)\n\n  /** @type {State} */\n  function onBlank(code) {\n    self.containerState.furtherBlankLines =\n      self.containerState.furtherBlankLines ||\n      self.containerState.initialBlankLine\n\n    // We have a blank line.\n    // Still, try to consume at most the items size.\n    return factorySpace(\n      effects,\n      ok,\n      'listItemIndent',\n      self.containerState.size + 1\n    )(code)\n  }\n\n  /** @type {State} */\n  function notBlank(code) {\n    if (self.containerState.furtherBlankLines || !markdownSpace(code)) {\n      self.containerState.furtherBlankLines = undefined\n      self.containerState.initialBlankLine = undefined\n      return notInCurrentItem(code)\n    }\n    self.containerState.furtherBlankLines = undefined\n    self.containerState.initialBlankLine = undefined\n    return effects.attempt(indentConstruct, ok, notInCurrentItem)(code)\n  }\n\n  /** @type {State} */\n  function notInCurrentItem(code) {\n    // While we do continue, we signal that the flow should be closed.\n    self.containerState._closeFlow = true\n    // As we\u2019re closing flow, we\u2019re no longer interrupting.\n    self.interrupt = undefined\n    // Always populated by defaults.\n\n    return factorySpace(\n      effects,\n      effects.attempt(list, ok, nok),\n      'linePrefix',\n      self.parser.constructs.disable.null.includes('codeIndented')\n        ? undefined\n        : 4\n    )(code)\n  }\n}\n\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\nfunction tokenizeIndent(effects, ok, nok) {\n  const self = this\n  return factorySpace(\n    effects,\n    afterPrefix,\n    'listItemIndent',\n    self.containerState.size + 1\n  )\n\n  /** @type {State} */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1]\n    return tail &&\n      tail[1].type === 'listItemIndent' &&\n      tail[2].sliceSerialize(tail[1], true).length === self.containerState.size\n      ? ok(code)\n      : nok(code)\n  }\n}\n\n/**\n * @type {Exiter}\n * @this {TokenizeContext}\n */\nfunction tokenizeListEnd(effects) {\n  effects.exit(this.containerState.type)\n}\n\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\nfunction tokenizeListItemPrefixWhitespace(effects, ok, nok) {\n  const self = this\n\n  // Always populated by defaults.\n\n  return factorySpace(\n    effects,\n    afterPrefix,\n    'listItemPrefixWhitespace',\n    self.parser.constructs.disable.null.includes('codeIndented')\n      ? undefined\n      : 4 + 1\n  )\n\n  /** @type {State} */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1]\n    return !markdownSpace(code) &&\n      tail &&\n      tail[1].type === 'listItemPrefixWhitespace'\n      ? ok(code)\n      : nok(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/** @type {Construct} */\nexport const setextUnderline = {\n  name: 'setextUnderline',\n  tokenize: tokenizeSetextUnderline,\n  resolveTo: resolveToSetextUnderline\n}\n\n/** @type {Resolver} */\nfunction resolveToSetextUnderline(events, context) {\n  // To do: resolve like `markdown-rs`.\n  let index = events.length\n  /** @type {number | undefined} */\n  let content\n  /** @type {number | undefined} */\n  let text\n  /** @type {number | undefined} */\n  let definition\n\n  // Find the opening of the content.\n  // It\u2019ll always exist: we don\u2019t tokenize if it isn\u2019t there.\n  while (index--) {\n    if (events[index][0] === 'enter') {\n      if (events[index][1].type === 'content') {\n        content = index\n        break\n      }\n      if (events[index][1].type === 'paragraph') {\n        text = index\n      }\n    }\n    // Exit\n    else {\n      if (events[index][1].type === 'content') {\n        // Remove the content end (if needed we\u2019ll add it later)\n        events.splice(index, 1)\n      }\n      if (!definition && events[index][1].type === 'definition') {\n        definition = index\n      }\n    }\n  }\n  const heading = {\n    type: 'setextHeading',\n    start: Object.assign({}, events[text][1].start),\n    end: Object.assign({}, events[events.length - 1][1].end)\n  }\n\n  // Change the paragraph to setext heading text.\n  events[text][1].type = 'setextHeadingText'\n\n  // If we have definitions in the content, we\u2019ll keep on having content,\n  // but we need move it.\n  if (definition) {\n    events.splice(text, 0, ['enter', heading, context])\n    events.splice(definition + 1, 0, ['exit', events[content][1], context])\n    events[content][1].end = Object.assign({}, events[definition][1].end)\n  } else {\n    events[content][1] = heading\n  }\n\n  // Add the heading exit at the end.\n  events.push(['exit', heading, context])\n  return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeSetextUnderline(effects, ok, nok) {\n  const self = this\n  /** @type {NonNullable<Code>} */\n  let marker\n  return start\n\n  /**\n   * At start of heading (setext) underline.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    let index = self.events.length\n    /** @type {boolean | undefined} */\n    let paragraph\n    // Find an opening.\n    while (index--) {\n      // Skip enter/exit of line ending, line prefix, and content.\n      // We can now either have a definition or a paragraph.\n      if (\n        self.events[index][1].type !== 'lineEnding' &&\n        self.events[index][1].type !== 'linePrefix' &&\n        self.events[index][1].type !== 'content'\n      ) {\n        paragraph = self.events[index][1].type === 'paragraph'\n        break\n      }\n    }\n\n    // To do: handle lazy/pierce like `markdown-rs`.\n    // To do: parse indent like `markdown-rs`.\n    if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) {\n      effects.enter('setextHeadingLine')\n      marker = code\n      return before(code)\n    }\n    return nok(code)\n  }\n\n  /**\n   * After optional whitespace, at `-` or `=`.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    effects.enter('setextHeadingLineSequence')\n    return inside(code)\n  }\n\n  /**\n   * In sequence.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === marker) {\n      effects.consume(code)\n      return inside\n    }\n    effects.exit('setextHeadingLineSequence')\n    return markdownSpace(code)\n      ? factorySpace(effects, after, 'lineSuffix')(code)\n      : after(code)\n  }\n\n  /**\n   * After sequence, after optional whitespace.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('setextHeadingLine')\n      return ok(code)\n    }\n    return nok(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\nimport {blankLine, content} from 'micromark-core-commonmark'\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n/** @type {InitialConstruct} */\nexport const flow = {\n  tokenize: initializeFlow\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Initializer}\n */\nfunction initializeFlow(effects) {\n  const self = this\n  const initial = effects.attempt(\n    // Try to parse a blank line.\n    blankLine,\n    atBlankEnding,\n    // Try to parse initial flow (essentially, only code).\n    effects.attempt(\n      this.parser.constructs.flowInitial,\n      afterConstruct,\n      factorySpace(\n        effects,\n        effects.attempt(\n          this.parser.constructs.flow,\n          afterConstruct,\n          effects.attempt(content, afterConstruct)\n        ),\n        'linePrefix'\n      )\n    )\n  )\n  return initial\n\n  /** @type {State} */\n  function atBlankEnding(code) {\n    if (code === null) {\n      effects.consume(code)\n      return\n    }\n    effects.enter('lineEndingBlank')\n    effects.consume(code)\n    effects.exit('lineEndingBlank')\n    self.currentConstruct = undefined\n    return initial\n  }\n\n  /** @type {State} */\n  function afterConstruct(code) {\n    if (code === null) {\n      effects.consume(code)\n      return\n    }\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    self.currentConstruct = undefined\n    return initial\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\nexport const resolver = {\n  resolveAll: createResolver()\n}\nexport const string = initializeFactory('string')\nexport const text = initializeFactory('text')\n\n/**\n * @param {'string' | 'text'} field\n * @returns {InitialConstruct}\n */\nfunction initializeFactory(field) {\n  return {\n    tokenize: initializeText,\n    resolveAll: createResolver(\n      field === 'text' ? resolveAllLineSuffixes : undefined\n    )\n  }\n\n  /**\n   * @this {TokenizeContext}\n   * @type {Initializer}\n   */\n  function initializeText(effects) {\n    const self = this\n    const constructs = this.parser.constructs[field]\n    const text = effects.attempt(constructs, start, notText)\n    return start\n\n    /** @type {State} */\n    function start(code) {\n      return atBreak(code) ? text(code) : notText(code)\n    }\n\n    /** @type {State} */\n    function notText(code) {\n      if (code === null) {\n        effects.consume(code)\n        return\n      }\n      effects.enter('data')\n      effects.consume(code)\n      return data\n    }\n\n    /** @type {State} */\n    function data(code) {\n      if (atBreak(code)) {\n        effects.exit('data')\n        return text(code)\n      }\n\n      // Data.\n      effects.consume(code)\n      return data\n    }\n\n    /**\n     * @param {Code} code\n     * @returns {boolean}\n     */\n    function atBreak(code) {\n      if (code === null) {\n        return true\n      }\n      const list = constructs[code]\n      let index = -1\n      if (list) {\n        // Always populated by defaults.\n\n        while (++index < list.length) {\n          const item = list[index]\n          if (!item.previous || item.previous.call(self, self.previous)) {\n            return true\n          }\n        }\n      }\n      return false\n    }\n  }\n}\n\n/**\n * @param {Resolver | undefined} [extraResolver]\n * @returns {Resolver}\n */\nfunction createResolver(extraResolver) {\n  return resolveAllText\n\n  /** @type {Resolver} */\n  function resolveAllText(events, context) {\n    let index = -1\n    /** @type {number | undefined} */\n    let enter\n\n    // A rather boring computation (to merge adjacent `data` events) which\n    // improves mm performance by 29%.\n    while (++index <= events.length) {\n      if (enter === undefined) {\n        if (events[index] && events[index][1].type === 'data') {\n          enter = index\n          index++\n        }\n      } else if (!events[index] || events[index][1].type !== 'data') {\n        // Don\u2019t do anything if there is one data token.\n        if (index !== enter + 2) {\n          events[enter][1].end = events[index - 1][1].end\n          events.splice(enter + 2, index - enter - 2)\n          index = enter + 2\n        }\n        enter = undefined\n      }\n    }\n    return extraResolver ? extraResolver(events, context) : events\n  }\n}\n\n/**\n * A rather ugly set of instructions which again looks at chunks in the input\n * stream.\n * The reason to do this here is that it is *much* faster to parse in reverse.\n * And that we can\u2019t hook into `null` to split the line suffix before an EOF.\n * To do: figure out if we can make this into a clean utility, or even in core.\n * As it will be useful for GFMs literal autolink extension (and maybe even\n * tables?)\n *\n * @type {Resolver}\n */\nfunction resolveAllLineSuffixes(events, context) {\n  let eventIndex = 0 // Skip first.\n\n  while (++eventIndex <= events.length) {\n    if (\n      (eventIndex === events.length ||\n        events[eventIndex][1].type === 'lineEnding') &&\n      events[eventIndex - 1][1].type === 'data'\n    ) {\n      const data = events[eventIndex - 1][1]\n      const chunks = context.sliceStream(data)\n      let index = chunks.length\n      let bufferIndex = -1\n      let size = 0\n      /** @type {boolean | undefined} */\n      let tabs\n      while (index--) {\n        const chunk = chunks[index]\n        if (typeof chunk === 'string') {\n          bufferIndex = chunk.length\n          while (chunk.charCodeAt(bufferIndex - 1) === 32) {\n            size++\n            bufferIndex--\n          }\n          if (bufferIndex) break\n          bufferIndex = -1\n        }\n        // Number\n        else if (chunk === -2) {\n          tabs = true\n          size++\n        } else if (chunk === -1) {\n          // Empty\n        } else {\n          // Replacement character, exit.\n          index++\n          break\n        }\n      }\n      if (size) {\n        const token = {\n          type:\n            eventIndex === events.length || tabs || size < 2\n              ? 'lineSuffix'\n              : 'hardBreakTrailing',\n          start: {\n            line: data.end.line,\n            column: data.end.column - size,\n            offset: data.end.offset - size,\n            _index: data.start._index + index,\n            _bufferIndex: index\n              ? bufferIndex\n              : data.start._bufferIndex + bufferIndex\n          },\n          end: Object.assign({}, data.end)\n        }\n        data.end = Object.assign({}, token.start)\n        if (data.start.offset === data.end.offset) {\n          Object.assign(data, token)\n        } else {\n          events.splice(\n            eventIndex,\n            0,\n            ['enter', token, context],\n            ['exit', token, context]\n          )\n          eventIndex += 2\n        }\n      }\n      eventIndex++\n    }\n  }\n  return events\n}\n", "/**\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').ParseContext} ParseContext\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenType} TokenType\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\n/**\n * @callback Restore\n * @returns {void}\n *\n * @typedef Info\n * @property {Restore} restore\n * @property {number} from\n *\n * @callback ReturnHandle\n *   Handle a successful run.\n * @param {Construct} construct\n * @param {Info} info\n * @returns {void}\n */\n\nimport {markdownLineEnding} from 'micromark-util-character'\nimport {push, splice} from 'micromark-util-chunked'\nimport {resolveAll} from 'micromark-util-resolve-all'\n/**\n * Create a tokenizer.\n * Tokenizers deal with one type of data (e.g., containers, flow, text).\n * The parser is the object dealing with it all.\n * `initialize` works like other constructs, except that only its `tokenize`\n * function is used, in which case it doesn\u2019t receive an `ok` or `nok`.\n * `from` can be given to set the point before the first character, although\n * when further lines are indented, they must be set with `defineSkip`.\n *\n * @param {ParseContext} parser\n * @param {InitialConstruct} initialize\n * @param {Omit<Point, '_bufferIndex' | '_index'> | undefined} [from]\n * @returns {TokenizeContext}\n */\nexport function createTokenizer(parser, initialize, from) {\n  /** @type {Point} */\n  let point = Object.assign(\n    from\n      ? Object.assign({}, from)\n      : {\n          line: 1,\n          column: 1,\n          offset: 0\n        },\n    {\n      _index: 0,\n      _bufferIndex: -1\n    }\n  )\n  /** @type {Record<string, number>} */\n  const columnStart = {}\n  /** @type {Array<Construct>} */\n  const resolveAllConstructs = []\n  /** @type {Array<Chunk>} */\n  let chunks = []\n  /** @type {Array<Token>} */\n  let stack = []\n  /** @type {boolean | undefined} */\n  let consumed = true\n\n  /**\n   * Tools used for tokenizing.\n   *\n   * @type {Effects}\n   */\n  const effects = {\n    consume,\n    enter,\n    exit,\n    attempt: constructFactory(onsuccessfulconstruct),\n    check: constructFactory(onsuccessfulcheck),\n    interrupt: constructFactory(onsuccessfulcheck, {\n      interrupt: true\n    })\n  }\n\n  /**\n   * State and tools for resolving and serializing.\n   *\n   * @type {TokenizeContext}\n   */\n  const context = {\n    previous: null,\n    code: null,\n    containerState: {},\n    events: [],\n    parser,\n    sliceStream,\n    sliceSerialize,\n    now,\n    defineSkip,\n    write\n  }\n\n  /**\n   * The state function.\n   *\n   * @type {State | void}\n   */\n  let state = initialize.tokenize.call(context, effects)\n\n  /**\n   * Track which character we expect to be consumed, to catch bugs.\n   *\n   * @type {Code}\n   */\n  let expectedCode\n  if (initialize.resolveAll) {\n    resolveAllConstructs.push(initialize)\n  }\n  return context\n\n  /** @type {TokenizeContext['write']} */\n  function write(slice) {\n    chunks = push(chunks, slice)\n    main()\n\n    // Exit if we\u2019re not done, resolve might change stuff.\n    if (chunks[chunks.length - 1] !== null) {\n      return []\n    }\n    addResult(initialize, 0)\n\n    // Otherwise, resolve, and exit.\n    context.events = resolveAll(resolveAllConstructs, context.events, context)\n    return context.events\n  }\n\n  //\n  // Tools.\n  //\n\n  /** @type {TokenizeContext['sliceSerialize']} */\n  function sliceSerialize(token, expandTabs) {\n    return serializeChunks(sliceStream(token), expandTabs)\n  }\n\n  /** @type {TokenizeContext['sliceStream']} */\n  function sliceStream(token) {\n    return sliceChunks(chunks, token)\n  }\n\n  /** @type {TokenizeContext['now']} */\n  function now() {\n    // This is a hot path, so we clone manually instead of `Object.assign({}, point)`\n    const {line, column, offset, _index, _bufferIndex} = point\n    return {\n      line,\n      column,\n      offset,\n      _index,\n      _bufferIndex\n    }\n  }\n\n  /** @type {TokenizeContext['defineSkip']} */\n  function defineSkip(value) {\n    columnStart[value.line] = value.column\n    accountForPotentialSkip()\n  }\n\n  //\n  // State management.\n  //\n\n  /**\n   * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by\n   * `consume`).\n   * Here is where we walk through the chunks, which either include strings of\n   * several characters, or numerical character codes.\n   * The reason to do this in a loop instead of a call is so the stack can\n   * drain.\n   *\n   * @returns {void}\n   */\n  function main() {\n    /** @type {number} */\n    let chunkIndex\n    while (point._index < chunks.length) {\n      const chunk = chunks[point._index]\n\n      // If we\u2019re in a buffer chunk, loop through it.\n      if (typeof chunk === 'string') {\n        chunkIndex = point._index\n        if (point._bufferIndex < 0) {\n          point._bufferIndex = 0\n        }\n        while (\n          point._index === chunkIndex &&\n          point._bufferIndex < chunk.length\n        ) {\n          go(chunk.charCodeAt(point._bufferIndex))\n        }\n      } else {\n        go(chunk)\n      }\n    }\n  }\n\n  /**\n   * Deal with one code.\n   *\n   * @param {Code} code\n   * @returns {void}\n   */\n  function go(code) {\n    consumed = undefined\n    expectedCode = code\n    state = state(code)\n  }\n\n  /** @type {Effects['consume']} */\n  function consume(code) {\n    if (markdownLineEnding(code)) {\n      point.line++\n      point.column = 1\n      point.offset += code === -3 ? 2 : 1\n      accountForPotentialSkip()\n    } else if (code !== -1) {\n      point.column++\n      point.offset++\n    }\n\n    // Not in a string chunk.\n    if (point._bufferIndex < 0) {\n      point._index++\n    } else {\n      point._bufferIndex++\n\n      // At end of string chunk.\n      // @ts-expect-error Points w/ non-negative `_bufferIndex` reference\n      // strings.\n      if (point._bufferIndex === chunks[point._index].length) {\n        point._bufferIndex = -1\n        point._index++\n      }\n    }\n\n    // Expose the previous character.\n    context.previous = code\n\n    // Mark as consumed.\n    consumed = true\n  }\n\n  /** @type {Effects['enter']} */\n  function enter(type, fields) {\n    /** @type {Token} */\n    // @ts-expect-error Patch instead of assign required fields to help GC.\n    const token = fields || {}\n    token.type = type\n    token.start = now()\n    context.events.push(['enter', token, context])\n    stack.push(token)\n    return token\n  }\n\n  /** @type {Effects['exit']} */\n  function exit(type) {\n    const token = stack.pop()\n    token.end = now()\n    context.events.push(['exit', token, context])\n    return token\n  }\n\n  /**\n   * Use results.\n   *\n   * @type {ReturnHandle}\n   */\n  function onsuccessfulconstruct(construct, info) {\n    addResult(construct, info.from)\n  }\n\n  /**\n   * Discard results.\n   *\n   * @type {ReturnHandle}\n   */\n  function onsuccessfulcheck(_, info) {\n    info.restore()\n  }\n\n  /**\n   * Factory to attempt/check/interrupt.\n   *\n   * @param {ReturnHandle} onreturn\n   * @param {{interrupt?: boolean | undefined} | undefined} [fields]\n   */\n  function constructFactory(onreturn, fields) {\n    return hook\n\n    /**\n     * Handle either an object mapping codes to constructs, a list of\n     * constructs, or a single construct.\n     *\n     * @param {Array<Construct> | Construct | ConstructRecord} constructs\n     * @param {State} returnState\n     * @param {State | undefined} [bogusState]\n     * @returns {State}\n     */\n    function hook(constructs, returnState, bogusState) {\n      /** @type {Array<Construct>} */\n      let listOfConstructs\n      /** @type {number} */\n      let constructIndex\n      /** @type {Construct} */\n      let currentConstruct\n      /** @type {Info} */\n      let info\n      return Array.isArray(constructs) /* c8 ignore next 1 */\n        ? handleListOfConstructs(constructs)\n        : 'tokenize' in constructs\n        ? // @ts-expect-error Looks like a construct.\n          handleListOfConstructs([constructs])\n        : handleMapOfConstructs(constructs)\n\n      /**\n       * Handle a list of construct.\n       *\n       * @param {ConstructRecord} map\n       * @returns {State}\n       */\n      function handleMapOfConstructs(map) {\n        return start\n\n        /** @type {State} */\n        function start(code) {\n          const def = code !== null && map[code]\n          const all = code !== null && map.null\n          const list = [\n            // To do: add more extension tests.\n            /* c8 ignore next 2 */\n            ...(Array.isArray(def) ? def : def ? [def] : []),\n            ...(Array.isArray(all) ? all : all ? [all] : [])\n          ]\n          return handleListOfConstructs(list)(code)\n        }\n      }\n\n      /**\n       * Handle a list of construct.\n       *\n       * @param {Array<Construct>} list\n       * @returns {State}\n       */\n      function handleListOfConstructs(list) {\n        listOfConstructs = list\n        constructIndex = 0\n        if (list.length === 0) {\n          return bogusState\n        }\n        return handleConstruct(list[constructIndex])\n      }\n\n      /**\n       * Handle a single construct.\n       *\n       * @param {Construct} construct\n       * @returns {State}\n       */\n      function handleConstruct(construct) {\n        return start\n\n        /** @type {State} */\n        function start(code) {\n          // To do: not needed to store if there is no bogus state, probably?\n          // Currently doesn\u2019t work because `inspect` in document does a check\n          // w/o a bogus, which doesn\u2019t make sense. But it does seem to help perf\n          // by not storing.\n          info = store()\n          currentConstruct = construct\n          if (!construct.partial) {\n            context.currentConstruct = construct\n          }\n\n          // Always populated by defaults.\n\n          if (\n            construct.name &&\n            context.parser.constructs.disable.null.includes(construct.name)\n          ) {\n            return nok(code)\n          }\n          return construct.tokenize.call(\n            // If we do have fields, create an object w/ `context` as its\n            // prototype.\n            // This allows a \u201Clive binding\u201D, which is needed for `interrupt`.\n            fields ? Object.assign(Object.create(context), fields) : context,\n            effects,\n            ok,\n            nok\n          )(code)\n        }\n      }\n\n      /** @type {State} */\n      function ok(code) {\n        consumed = true\n        onreturn(currentConstruct, info)\n        return returnState\n      }\n\n      /** @type {State} */\n      function nok(code) {\n        consumed = true\n        info.restore()\n        if (++constructIndex < listOfConstructs.length) {\n          return handleConstruct(listOfConstructs[constructIndex])\n        }\n        return bogusState\n      }\n    }\n  }\n\n  /**\n   * @param {Construct} construct\n   * @param {number} from\n   * @returns {void}\n   */\n  function addResult(construct, from) {\n    if (construct.resolveAll && !resolveAllConstructs.includes(construct)) {\n      resolveAllConstructs.push(construct)\n    }\n    if (construct.resolve) {\n      splice(\n        context.events,\n        from,\n        context.events.length - from,\n        construct.resolve(context.events.slice(from), context)\n      )\n    }\n    if (construct.resolveTo) {\n      context.events = construct.resolveTo(context.events, context)\n    }\n  }\n\n  /**\n   * Store state.\n   *\n   * @returns {Info}\n   */\n  function store() {\n    const startPoint = now()\n    const startPrevious = context.previous\n    const startCurrentConstruct = context.currentConstruct\n    const startEventsIndex = context.events.length\n    const startStack = Array.from(stack)\n    return {\n      restore,\n      from: startEventsIndex\n    }\n\n    /**\n     * Restore state.\n     *\n     * @returns {void}\n     */\n    function restore() {\n      point = startPoint\n      context.previous = startPrevious\n      context.currentConstruct = startCurrentConstruct\n      context.events.length = startEventsIndex\n      stack = startStack\n      accountForPotentialSkip()\n    }\n  }\n\n  /**\n   * Move the current point a bit forward in the line when it\u2019s on a column\n   * skip.\n   *\n   * @returns {void}\n   */\n  function accountForPotentialSkip() {\n    if (point.line in columnStart && point.column < 2) {\n      point.column = columnStart[point.line]\n      point.offset += columnStart[point.line] - 1\n    }\n  }\n}\n\n/**\n * Get the chunks from a slice of chunks in the range of a token.\n *\n * @param {Array<Chunk>} chunks\n * @param {Pick<Token, 'end' | 'start'>} token\n * @returns {Array<Chunk>}\n */\nfunction sliceChunks(chunks, token) {\n  const startIndex = token.start._index\n  const startBufferIndex = token.start._bufferIndex\n  const endIndex = token.end._index\n  const endBufferIndex = token.end._bufferIndex\n  /** @type {Array<Chunk>} */\n  let view\n  if (startIndex === endIndex) {\n    // @ts-expect-error `_bufferIndex` is used on string chunks.\n    view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)]\n  } else {\n    view = chunks.slice(startIndex, endIndex)\n    if (startBufferIndex > -1) {\n      const head = view[0]\n      if (typeof head === 'string') {\n        view[0] = head.slice(startBufferIndex)\n      } else {\n        view.shift()\n      }\n    }\n    if (endBufferIndex > 0) {\n      // @ts-expect-error `_bufferIndex` is used on string chunks.\n      view.push(chunks[endIndex].slice(0, endBufferIndex))\n    }\n  }\n  return view\n}\n\n/**\n * Get the string value of a slice of chunks.\n *\n * @param {Array<Chunk>} chunks\n * @param {boolean | undefined} [expandTabs=false]\n * @returns {string}\n */\nfunction serializeChunks(chunks, expandTabs) {\n  let index = -1\n  /** @type {Array<string>} */\n  const result = []\n  /** @type {boolean | undefined} */\n  let atTab\n  while (++index < chunks.length) {\n    const chunk = chunks[index]\n    /** @type {string} */\n    let value\n    if (typeof chunk === 'string') {\n      value = chunk\n    } else\n      switch (chunk) {\n        case -5: {\n          value = '\\r'\n          break\n        }\n        case -4: {\n          value = '\\n'\n          break\n        }\n        case -3: {\n          value = '\\r' + '\\n'\n          break\n        }\n        case -2: {\n          value = expandTabs ? ' ' : '\\t'\n          break\n        }\n        case -1: {\n          if (!expandTabs && atTab) continue\n          value = ' '\n          break\n        }\n        default: {\n          // Currently only replacement character.\n          value = String.fromCharCode(chunk)\n        }\n      }\n    atTab = chunk === -2\n    result.push(value)\n  }\n  return result.join('')\n}\n", "/**\n * @typedef {import('micromark-util-types').Extension} Extension\n */\n\nimport {\n  attention,\n  autolink,\n  blockQuote,\n  characterEscape,\n  characterReference,\n  codeFenced,\n  codeIndented,\n  codeText,\n  definition,\n  hardBreakEscape,\n  headingAtx,\n  htmlFlow,\n  htmlText,\n  labelEnd,\n  labelStartImage,\n  labelStartLink,\n  lineEnding,\n  list,\n  setextUnderline,\n  thematicBreak\n} from 'micromark-core-commonmark'\nimport {resolver as resolveText} from './initialize/text.js'\n\n/** @satisfies {Extension['document']} */\nexport const document = {\n  [42]: list,\n  [43]: list,\n  [45]: list,\n  [48]: list,\n  [49]: list,\n  [50]: list,\n  [51]: list,\n  [52]: list,\n  [53]: list,\n  [54]: list,\n  [55]: list,\n  [56]: list,\n  [57]: list,\n  [62]: blockQuote\n}\n\n/** @satisfies {Extension['contentInitial']} */\nexport const contentInitial = {\n  [91]: definition\n}\n\n/** @satisfies {Extension['flowInitial']} */\nexport const flowInitial = {\n  [-2]: codeIndented,\n  [-1]: codeIndented,\n  [32]: codeIndented\n}\n\n/** @satisfies {Extension['flow']} */\nexport const flow = {\n  [35]: headingAtx,\n  [42]: thematicBreak,\n  [45]: [setextUnderline, thematicBreak],\n  [60]: htmlFlow,\n  [61]: setextUnderline,\n  [95]: thematicBreak,\n  [96]: codeFenced,\n  [126]: codeFenced\n}\n\n/** @satisfies {Extension['string']} */\nexport const string = {\n  [38]: characterReference,\n  [92]: characterEscape\n}\n\n/** @satisfies {Extension['text']} */\nexport const text = {\n  [-5]: lineEnding,\n  [-4]: lineEnding,\n  [-3]: lineEnding,\n  [33]: labelStartImage,\n  [38]: characterReference,\n  [42]: attention,\n  [60]: [autolink, htmlText],\n  [91]: labelStartLink,\n  [92]: [hardBreakEscape, characterEscape],\n  [93]: labelEnd,\n  [95]: attention,\n  [96]: codeText\n}\n\n/** @satisfies {Extension['insideSpan']} */\nexport const insideSpan = {\n  null: [attention, resolveText]\n}\n\n/** @satisfies {Extension['attentionMarkers']} */\nexport const attentionMarkers = {\n  null: [42, 95]\n}\n\n/** @satisfies {Extension['disable']} */\nexport const disable = {\n  null: []\n}\n", "/**\n * @typedef {import('micromark-util-types').Create} Create\n * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').ParseContext} ParseContext\n * @typedef {import('micromark-util-types').ParseOptions} ParseOptions\n */\n\nimport {combineExtensions} from 'micromark-util-combine-extensions'\nimport {content} from './initialize/content.js'\nimport {document} from './initialize/document.js'\nimport {flow} from './initialize/flow.js'\nimport {text, string} from './initialize/text.js'\nimport {createTokenizer} from './create-tokenizer.js'\nimport * as defaultConstructs from './constructs.js'\n\n/**\n * @param {ParseOptions | null | undefined} [options]\n * @returns {ParseContext}\n */\nexport function parse(options) {\n  const settings = options || {}\n  const constructs =\n    /** @type {FullNormalizedExtension} */\n    combineExtensions([defaultConstructs, ...(settings.extensions || [])])\n\n  /** @type {ParseContext} */\n  const parser = {\n    defined: [],\n    lazy: {},\n    constructs,\n    content: create(content),\n    document: create(document),\n    flow: create(flow),\n    string: create(string),\n    text: create(text)\n  }\n  return parser\n\n  /**\n   * @param {InitialConstruct} initial\n   */\n  function create(initial) {\n    return creator\n    /** @type {Create} */\n    function creator(from) {\n      return createTokenizer(parser, initial, from)\n    }\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Encoding} Encoding\n * @typedef {import('micromark-util-types').Value} Value\n */\n\n/**\n * @callback Preprocessor\n * @param {Value} value\n * @param {Encoding | null | undefined} [encoding]\n * @param {boolean | null | undefined} [end=false]\n * @returns {Array<Chunk>}\n */\n\nconst search = /[\\0\\t\\n\\r]/g\n\n/**\n * @returns {Preprocessor}\n */\nexport function preprocess() {\n  let column = 1\n  let buffer = ''\n  /** @type {boolean | undefined} */\n  let start = true\n  /** @type {boolean | undefined} */\n  let atCarriageReturn\n  return preprocessor\n\n  /** @type {Preprocessor} */\n  function preprocessor(value, encoding, end) {\n    /** @type {Array<Chunk>} */\n    const chunks = []\n    /** @type {RegExpMatchArray | null} */\n    let match\n    /** @type {number} */\n    let next\n    /** @type {number} */\n    let startPosition\n    /** @type {number} */\n    let endPosition\n    /** @type {Code} */\n    let code\n\n    // @ts-expect-error `Buffer` does allow an encoding.\n    value = buffer + value.toString(encoding)\n    startPosition = 0\n    buffer = ''\n    if (start) {\n      // To do: `markdown-rs` actually parses BOMs (byte order mark).\n      if (value.charCodeAt(0) === 65279) {\n        startPosition++\n      }\n      start = undefined\n    }\n    while (startPosition < value.length) {\n      search.lastIndex = startPosition\n      match = search.exec(value)\n      endPosition =\n        match && match.index !== undefined ? match.index : value.length\n      code = value.charCodeAt(endPosition)\n      if (!match) {\n        buffer = value.slice(startPosition)\n        break\n      }\n      if (code === 10 && startPosition === endPosition && atCarriageReturn) {\n        chunks.push(-3)\n        atCarriageReturn = undefined\n      } else {\n        if (atCarriageReturn) {\n          chunks.push(-5)\n          atCarriageReturn = undefined\n        }\n        if (startPosition < endPosition) {\n          chunks.push(value.slice(startPosition, endPosition))\n          column += endPosition - startPosition\n        }\n        switch (code) {\n          case 0: {\n            chunks.push(65533)\n            column++\n            break\n          }\n          case 9: {\n            next = Math.ceil(column / 4) * 4\n            chunks.push(-2)\n            while (column++ < next) chunks.push(-1)\n            break\n          }\n          case 10: {\n            chunks.push(-4)\n            column = 1\n            break\n          }\n          default: {\n            atCarriageReturn = true\n            column = 1\n          }\n        }\n      }\n      startPosition = endPosition + 1\n    }\n    if (end) {\n      if (atCarriageReturn) chunks.push(-5)\n      if (buffer) chunks.push(buffer)\n      chunks.push(null)\n    }\n    return chunks\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Event} Event\n */\n\nimport {subtokenize} from 'micromark-util-subtokenize'\n\n/**\n * @param {Array<Event>} events\n * @returns {Array<Event>}\n */\nexport function postprocess(events) {\n  while (!subtokenize(events)) {\n    // Empty\n  }\n  return events\n}\n", "/**\n * Turn the number (in string form as either hexa- or plain decimal) coming from\n * a numeric character reference into a character.\n *\n * Sort of like `String.fromCharCode(Number.parseInt(value, base))`, but makes\n * non-characters and control characters safe.\n *\n * @param {string} value\n *   Value to decode.\n * @param {number} base\n *   Numeric base.\n * @returns {string}\n *   Character.\n */\nexport function decodeNumericCharacterReference(value, base) {\n  const code = Number.parseInt(value, base)\n  if (\n    // C0 except for HT, LF, FF, CR, space.\n    code < 9 ||\n    code === 11 ||\n    (code > 13 && code < 32) ||\n    // Control character (DEL) of C0, and C1 controls.\n    (code > 126 && code < 160) ||\n    // Lone high surrogates and low surrogates.\n    (code > 55295 && code < 57344) ||\n    // Noncharacters.\n    (code > 64975 && code < 65008) /* eslint-disable no-bitwise */ ||\n    (code & 65535) === 65535 ||\n    (code & 65535) === 65534 /* eslint-enable no-bitwise */ ||\n    // Out of range\n    code > 1114111\n  ) {\n    return '\\uFFFD'\n  }\n  return String.fromCharCode(code)\n}\n", "import {decodeNamedCharacterReference} from 'decode-named-character-reference'\nimport {decodeNumericCharacterReference} from 'micromark-util-decode-numeric-character-reference'\nconst characterEscapeOrReference =\n  /\\\\([!-/:-@[-`{-~])|&(#(?:\\d{1,7}|x[\\da-f]{1,6})|[\\da-z]{1,31});/gi\n\n/**\n * Decode markdown strings (which occur in places such as fenced code info\n * strings, destinations, labels, and titles).\n *\n * The \u201Cstring\u201D content type allows character escapes and -references.\n * This decodes those.\n *\n * @param {string} value\n *   Value to decode.\n * @returns {string}\n *   Decoded value.\n */\nexport function decodeString(value) {\n  return value.replace(characterEscapeOrReference, decode)\n}\n\n/**\n * @param {string} $0\n * @param {string} $1\n * @param {string} $2\n * @returns {string}\n */\nfunction decode($0, $1, $2) {\n  if ($1) {\n    // Escape.\n    return $1\n  }\n\n  // Reference.\n  const head = $2.charCodeAt(0)\n  if (head === 35) {\n    const head = $2.charCodeAt(1)\n    const hex = head === 120 || head === 88\n    return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10)\n  }\n  return decodeNamedCharacterReference($2) || $0\n}\n", "/**\n * @typedef {import('micromark-util-types').Encoding} Encoding\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').ParseOptions} ParseOptions\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Value} Value\n *\n * @typedef {import('unist').Parent} UnistParent\n * @typedef {import('unist').Point} Point\n *\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n * @typedef {import('mdast').StaticPhrasingContent} StaticPhrasingContent\n * @typedef {import('mdast').Content} Content\n * @typedef {import('mdast').Break} Break\n * @typedef {import('mdast').Blockquote} Blockquote\n * @typedef {import('mdast').Code} Code\n * @typedef {import('mdast').Definition} Definition\n * @typedef {import('mdast').Emphasis} Emphasis\n * @typedef {import('mdast').Heading} Heading\n * @typedef {import('mdast').HTML} HTML\n * @typedef {import('mdast').Image} Image\n * @typedef {import('mdast').ImageReference} ImageReference\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('mdast').Link} Link\n * @typedef {import('mdast').LinkReference} LinkReference\n * @typedef {import('mdast').List} List\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast').Strong} Strong\n * @typedef {import('mdast').Text} Text\n * @typedef {import('mdast').ThematicBreak} ThematicBreak\n * @typedef {import('mdast').ReferenceType} ReferenceType\n * @typedef {import('../index.js').CompileData} CompileData\n */\n\n/**\n * @typedef {Root | Content} Node\n * @typedef {Extract<Node, UnistParent>} Parent\n *\n * @typedef {Omit<UnistParent, 'type' | 'children'> & {type: 'fragment', children: Array<PhrasingContent>}} Fragment\n */\n\n/**\n * @callback Transform\n *   Extra transform, to change the AST afterwards.\n * @param {Root} tree\n *   Tree to transform.\n * @returns {Root | undefined | null | void}\n *   New tree or nothing (in which case the current tree is used).\n *\n * @callback Handle\n *   Handle a token.\n * @param {CompileContext} this\n *   Context.\n * @param {Token} token\n *   Current token.\n * @returns {void}\n *   Nothing.\n *\n * @typedef {Record<string, Handle>} Handles\n *   Token types mapping to handles\n *\n * @callback OnEnterError\n *   Handle the case where the `right` token is open, but it is closed (by the\n *   `left` token) or because we reached the end of the document.\n * @param {Omit<CompileContext, 'sliceSerialize'>} this\n *   Context.\n * @param {Token | undefined} left\n *   Left token.\n * @param {Token} right\n *   Right token.\n * @returns {void}\n *   Nothing.\n *\n * @callback OnExitError\n *   Handle the case where the `right` token is open but it is closed by\n *   exiting the `left` token.\n * @param {Omit<CompileContext, 'sliceSerialize'>} this\n *   Context.\n * @param {Token} left\n *   Left token.\n * @param {Token} right\n *   Right token.\n * @returns {void}\n *   Nothing.\n *\n * @typedef {[Token, OnEnterError | undefined]} TokenTuple\n *   Open token on the stack, with an optional error handler for when\n *   that token isn\u2019t closed properly.\n */\n\n/**\n * @typedef Config\n *   Configuration.\n *\n *   We have our defaults, but extensions will add more.\n * @property {Array<string>} canContainEols\n *   Token types where line endings are used.\n * @property {Handles} enter\n *   Opening handles.\n * @property {Handles} exit\n *   Closing handles.\n * @property {Array<Transform>} transforms\n *   Tree transforms.\n *\n * @typedef {Partial<Config>} Extension\n *   Change how markdown tokens from micromark are turned into mdast.\n *\n * @typedef CompileContext\n *   mdast compiler context.\n * @property {Array<Node | Fragment>} stack\n *   Stack of nodes.\n * @property {Array<TokenTuple>} tokenStack\n *   Stack of tokens.\n * @property {<Key extends keyof CompileData>(key: Key) => CompileData[Key]} getData\n *   Get data from the key/value store.\n * @property {<Key extends keyof CompileData>(key: Key, value?: CompileData[Key]) => void} setData\n *   Set data into the key/value store.\n * @property {(this: CompileContext) => void} buffer\n *   Capture some of the output data.\n * @property {(this: CompileContext) => string} resume\n *   Stop capturing and access the output data.\n * @property {<Kind extends Node>(this: CompileContext, node: Kind, token: Token, onError?: OnEnterError) => Kind} enter\n *   Enter a token.\n * @property {(this: CompileContext, token: Token, onError?: OnExitError) => Node} exit\n *   Exit a token.\n * @property {TokenizeContext['sliceSerialize']} sliceSerialize\n *   Get the string value of a token.\n * @property {Config} config\n *   Configuration.\n *\n * @typedef FromMarkdownOptions\n *   Configuration for how to build mdast.\n * @property {Array<Extension | Array<Extension>> | null | undefined} [mdastExtensions]\n *   Extensions for this utility to change how tokens are turned into a tree.\n *\n * @typedef {ParseOptions & FromMarkdownOptions} Options\n *   Configuration.\n */\n\n// To do: micromark: create a registry of tokens?\n// To do: next major: don\u2019t return given `Node` from `enter`.\n// To do: next major: remove setter/getter.\n\nimport {toString} from 'mdast-util-to-string'\nimport {parse} from 'micromark/lib/parse.js'\nimport {preprocess} from 'micromark/lib/preprocess.js'\nimport {postprocess} from 'micromark/lib/postprocess.js'\nimport {decodeNumericCharacterReference} from 'micromark-util-decode-numeric-character-reference'\nimport {decodeString} from 'micromark-util-decode-string'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\nimport {decodeNamedCharacterReference} from 'decode-named-character-reference'\nimport {stringifyPosition} from 'unist-util-stringify-position'\nconst own = {}.hasOwnProperty\n\n/**\n * @param value\n *   Markdown to parse.\n * @param encoding\n *   Character encoding for when `value` is `Buffer`.\n * @param options\n *   Configuration.\n * @returns\n *   mdast tree.\n */\nexport const fromMarkdown =\n  /**\n   * @type {(\n   *   ((value: Value, encoding: Encoding, options?: Options | null | undefined) => Root) &\n   *   ((value: Value, options?: Options | null | undefined) => Root)\n   * )}\n   */\n\n  /**\n   * @param {Value} value\n   * @param {Encoding | Options | null | undefined} [encoding]\n   * @param {Options | null | undefined} [options]\n   * @returns {Root}\n   */\n  function (value, encoding, options) {\n    if (typeof encoding !== 'string') {\n      options = encoding\n      encoding = undefined\n    }\n    return compiler(options)(\n      postprocess(\n        parse(options).document().write(preprocess()(value, encoding, true))\n      )\n    )\n  }\n\n/**\n * Note this compiler only understand complete buffering, not streaming.\n *\n * @param {Options | null | undefined} [options]\n */\nfunction compiler(options) {\n  /** @type {Config} */\n  const config = {\n    transforms: [],\n    canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'],\n    enter: {\n      autolink: opener(link),\n      autolinkProtocol: onenterdata,\n      autolinkEmail: onenterdata,\n      atxHeading: opener(heading),\n      blockQuote: opener(blockQuote),\n      characterEscape: onenterdata,\n      characterReference: onenterdata,\n      codeFenced: opener(codeFlow),\n      codeFencedFenceInfo: buffer,\n      codeFencedFenceMeta: buffer,\n      codeIndented: opener(codeFlow, buffer),\n      codeText: opener(codeText, buffer),\n      codeTextData: onenterdata,\n      data: onenterdata,\n      codeFlowValue: onenterdata,\n      definition: opener(definition),\n      definitionDestinationString: buffer,\n      definitionLabelString: buffer,\n      definitionTitleString: buffer,\n      emphasis: opener(emphasis),\n      hardBreakEscape: opener(hardBreak),\n      hardBreakTrailing: opener(hardBreak),\n      htmlFlow: opener(html, buffer),\n      htmlFlowData: onenterdata,\n      htmlText: opener(html, buffer),\n      htmlTextData: onenterdata,\n      image: opener(image),\n      label: buffer,\n      link: opener(link),\n      listItem: opener(listItem),\n      listItemValue: onenterlistitemvalue,\n      listOrdered: opener(list, onenterlistordered),\n      listUnordered: opener(list),\n      paragraph: opener(paragraph),\n      reference: onenterreference,\n      referenceString: buffer,\n      resourceDestinationString: buffer,\n      resourceTitleString: buffer,\n      setextHeading: opener(heading),\n      strong: opener(strong),\n      thematicBreak: opener(thematicBreak)\n    },\n    exit: {\n      atxHeading: closer(),\n      atxHeadingSequence: onexitatxheadingsequence,\n      autolink: closer(),\n      autolinkEmail: onexitautolinkemail,\n      autolinkProtocol: onexitautolinkprotocol,\n      blockQuote: closer(),\n      characterEscapeValue: onexitdata,\n      characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker,\n      characterReferenceMarkerNumeric: onexitcharacterreferencemarker,\n      characterReferenceValue: onexitcharacterreferencevalue,\n      codeFenced: closer(onexitcodefenced),\n      codeFencedFence: onexitcodefencedfence,\n      codeFencedFenceInfo: onexitcodefencedfenceinfo,\n      codeFencedFenceMeta: onexitcodefencedfencemeta,\n      codeFlowValue: onexitdata,\n      codeIndented: closer(onexitcodeindented),\n      codeText: closer(onexitcodetext),\n      codeTextData: onexitdata,\n      data: onexitdata,\n      definition: closer(),\n      definitionDestinationString: onexitdefinitiondestinationstring,\n      definitionLabelString: onexitdefinitionlabelstring,\n      definitionTitleString: onexitdefinitiontitlestring,\n      emphasis: closer(),\n      hardBreakEscape: closer(onexithardbreak),\n      hardBreakTrailing: closer(onexithardbreak),\n      htmlFlow: closer(onexithtmlflow),\n      htmlFlowData: onexitdata,\n      htmlText: closer(onexithtmltext),\n      htmlTextData: onexitdata,\n      image: closer(onexitimage),\n      label: onexitlabel,\n      labelText: onexitlabeltext,\n      lineEnding: onexitlineending,\n      link: closer(onexitlink),\n      listItem: closer(),\n      listOrdered: closer(),\n      listUnordered: closer(),\n      paragraph: closer(),\n      referenceString: onexitreferencestring,\n      resourceDestinationString: onexitresourcedestinationstring,\n      resourceTitleString: onexitresourcetitlestring,\n      resource: onexitresource,\n      setextHeading: closer(onexitsetextheading),\n      setextHeadingLineSequence: onexitsetextheadinglinesequence,\n      setextHeadingText: onexitsetextheadingtext,\n      strong: closer(),\n      thematicBreak: closer()\n    }\n  }\n  configure(config, (options || {}).mdastExtensions || [])\n\n  /** @type {CompileData} */\n  const data = {}\n  return compile\n\n  /**\n   * Turn micromark events into an mdast tree.\n   *\n   * @param {Array<Event>} events\n   *   Events.\n   * @returns {Root}\n   *   mdast tree.\n   */\n  function compile(events) {\n    /** @type {Root} */\n    let tree = {\n      type: 'root',\n      children: []\n    }\n    /** @type {Omit<CompileContext, 'sliceSerialize'>} */\n    const context = {\n      stack: [tree],\n      tokenStack: [],\n      config,\n      enter,\n      exit,\n      buffer,\n      resume,\n      setData,\n      getData\n    }\n    /** @type {Array<number>} */\n    const listStack = []\n    let index = -1\n    while (++index < events.length) {\n      // We preprocess lists to add `listItem` tokens, and to infer whether\n      // items the list itself are spread out.\n      if (\n        events[index][1].type === 'listOrdered' ||\n        events[index][1].type === 'listUnordered'\n      ) {\n        if (events[index][0] === 'enter') {\n          listStack.push(index)\n        } else {\n          const tail = listStack.pop()\n          index = prepareList(events, tail, index)\n        }\n      }\n    }\n    index = -1\n    while (++index < events.length) {\n      const handler = config[events[index][0]]\n      if (own.call(handler, events[index][1].type)) {\n        handler[events[index][1].type].call(\n          Object.assign(\n            {\n              sliceSerialize: events[index][2].sliceSerialize\n            },\n            context\n          ),\n          events[index][1]\n        )\n      }\n    }\n\n    // Handle tokens still being open.\n    if (context.tokenStack.length > 0) {\n      const tail = context.tokenStack[context.tokenStack.length - 1]\n      const handler = tail[1] || defaultOnError\n      handler.call(context, undefined, tail[0])\n    }\n\n    // Figure out `root` position.\n    tree.position = {\n      start: point(\n        events.length > 0\n          ? events[0][1].start\n          : {\n              line: 1,\n              column: 1,\n              offset: 0\n            }\n      ),\n      end: point(\n        events.length > 0\n          ? events[events.length - 2][1].end\n          : {\n              line: 1,\n              column: 1,\n              offset: 0\n            }\n      )\n    }\n\n    // Call transforms.\n    index = -1\n    while (++index < config.transforms.length) {\n      tree = config.transforms[index](tree) || tree\n    }\n    return tree\n  }\n\n  /**\n   * @param {Array<Event>} events\n   * @param {number} start\n   * @param {number} length\n   * @returns {number}\n   */\n  function prepareList(events, start, length) {\n    let index = start - 1\n    let containerBalance = -1\n    let listSpread = false\n    /** @type {Token | undefined} */\n    let listItem\n    /** @type {number | undefined} */\n    let lineIndex\n    /** @type {number | undefined} */\n    let firstBlankLineIndex\n    /** @type {boolean | undefined} */\n    let atMarker\n    while (++index <= length) {\n      const event = events[index]\n      if (\n        event[1].type === 'listUnordered' ||\n        event[1].type === 'listOrdered' ||\n        event[1].type === 'blockQuote'\n      ) {\n        if (event[0] === 'enter') {\n          containerBalance++\n        } else {\n          containerBalance--\n        }\n        atMarker = undefined\n      } else if (event[1].type === 'lineEndingBlank') {\n        if (event[0] === 'enter') {\n          if (\n            listItem &&\n            !atMarker &&\n            !containerBalance &&\n            !firstBlankLineIndex\n          ) {\n            firstBlankLineIndex = index\n          }\n          atMarker = undefined\n        }\n      } else if (\n        event[1].type === 'linePrefix' ||\n        event[1].type === 'listItemValue' ||\n        event[1].type === 'listItemMarker' ||\n        event[1].type === 'listItemPrefix' ||\n        event[1].type === 'listItemPrefixWhitespace'\n      ) {\n        // Empty.\n      } else {\n        atMarker = undefined\n      }\n      if (\n        (!containerBalance &&\n          event[0] === 'enter' &&\n          event[1].type === 'listItemPrefix') ||\n        (containerBalance === -1 &&\n          event[0] === 'exit' &&\n          (event[1].type === 'listUnordered' ||\n            event[1].type === 'listOrdered'))\n      ) {\n        if (listItem) {\n          let tailIndex = index\n          lineIndex = undefined\n          while (tailIndex--) {\n            const tailEvent = events[tailIndex]\n            if (\n              tailEvent[1].type === 'lineEnding' ||\n              tailEvent[1].type === 'lineEndingBlank'\n            ) {\n              if (tailEvent[0] === 'exit') continue\n              if (lineIndex) {\n                events[lineIndex][1].type = 'lineEndingBlank'\n                listSpread = true\n              }\n              tailEvent[1].type = 'lineEnding'\n              lineIndex = tailIndex\n            } else if (\n              tailEvent[1].type === 'linePrefix' ||\n              tailEvent[1].type === 'blockQuotePrefix' ||\n              tailEvent[1].type === 'blockQuotePrefixWhitespace' ||\n              tailEvent[1].type === 'blockQuoteMarker' ||\n              tailEvent[1].type === 'listItemIndent'\n            ) {\n              // Empty\n            } else {\n              break\n            }\n          }\n          if (\n            firstBlankLineIndex &&\n            (!lineIndex || firstBlankLineIndex < lineIndex)\n          ) {\n            listItem._spread = true\n          }\n\n          // Fix position.\n          listItem.end = Object.assign(\n            {},\n            lineIndex ? events[lineIndex][1].start : event[1].end\n          )\n          events.splice(lineIndex || index, 0, ['exit', listItem, event[2]])\n          index++\n          length++\n        }\n\n        // Create a new list item.\n        if (event[1].type === 'listItemPrefix') {\n          listItem = {\n            type: 'listItem',\n            _spread: false,\n            start: Object.assign({}, event[1].start),\n            // @ts-expect-error: we\u2019ll add `end` in a second.\n            end: undefined\n          }\n          // @ts-expect-error: `listItem` is most definitely defined, TS...\n          events.splice(index, 0, ['enter', listItem, event[2]])\n          index++\n          length++\n          firstBlankLineIndex = undefined\n          atMarker = true\n        }\n      }\n    }\n    events[start][1]._spread = listSpread\n    return length\n  }\n\n  /**\n   * Set data.\n   *\n   * @template {keyof CompileData} Key\n   *   Field type.\n   * @param {Key} key\n   *   Key of field.\n   * @param {CompileData[Key]} [value]\n   *   New value.\n   * @returns {void}\n   *   Nothing.\n   */\n  function setData(key, value) {\n    data[key] = value\n  }\n\n  /**\n   * Get data.\n   *\n   * @template {keyof CompileData} Key\n   *   Field type.\n   * @param {Key} key\n   *   Key of field.\n   * @returns {CompileData[Key]}\n   *   Value.\n   */\n  function getData(key) {\n    return data[key]\n  }\n\n  /**\n   * Create an opener handle.\n   *\n   * @param {(token: Token) => Node} create\n   *   Create a node.\n   * @param {Handle} [and]\n   *   Optional function to also run.\n   * @returns {Handle}\n   *   Handle.\n   */\n  function opener(create, and) {\n    return open\n\n    /**\n     * @this {CompileContext}\n     * @param {Token} token\n     * @returns {void}\n     */\n    function open(token) {\n      enter.call(this, create(token), token)\n      if (and) and.call(this, token)\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @returns {void}\n   */\n  function buffer() {\n    this.stack.push({\n      type: 'fragment',\n      children: []\n    })\n  }\n\n  /**\n   * @template {Node} Kind\n   *   Node type.\n   * @this {CompileContext}\n   *   Context.\n   * @param {Kind} node\n   *   Node to enter.\n   * @param {Token} token\n   *   Corresponding token.\n   * @param {OnEnterError | undefined} [errorHandler]\n   *   Handle the case where this token is open, but it is closed by something else.\n   * @returns {Kind}\n   *   The given node.\n   */\n  function enter(node, token, errorHandler) {\n    const parent = this.stack[this.stack.length - 1]\n    // @ts-expect-error: Assume `Node` can exist as a child of `parent`.\n    parent.children.push(node)\n    this.stack.push(node)\n    this.tokenStack.push([token, errorHandler])\n    // @ts-expect-error: `end` will be patched later.\n    node.position = {\n      start: point(token.start)\n    }\n    return node\n  }\n\n  /**\n   * Create a closer handle.\n   *\n   * @param {Handle} [and]\n   *   Optional function to also run.\n   * @returns {Handle}\n   *   Handle.\n   */\n  function closer(and) {\n    return close\n\n    /**\n     * @this {CompileContext}\n     * @param {Token} token\n     * @returns {void}\n     */\n    function close(token) {\n      if (and) and.call(this, token)\n      exit.call(this, token)\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   *   Context.\n   * @param {Token} token\n   *   Corresponding token.\n   * @param {OnExitError | undefined} [onExitError]\n   *   Handle the case where another token is open.\n   * @returns {Node}\n   *   The closed node.\n   */\n  function exit(token, onExitError) {\n    const node = this.stack.pop()\n    const open = this.tokenStack.pop()\n    if (!open) {\n      throw new Error(\n        'Cannot close `' +\n          token.type +\n          '` (' +\n          stringifyPosition({\n            start: token.start,\n            end: token.end\n          }) +\n          '): it\u2019s not open'\n      )\n    } else if (open[0].type !== token.type) {\n      if (onExitError) {\n        onExitError.call(this, token, open[0])\n      } else {\n        const handler = open[1] || defaultOnError\n        handler.call(this, token, open[0])\n      }\n    }\n    node.position.end = point(token.end)\n    return node\n  }\n\n  /**\n   * @this {CompileContext}\n   * @returns {string}\n   */\n  function resume() {\n    return toString(this.stack.pop())\n  }\n\n  //\n  // Handlers.\n  //\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onenterlistordered() {\n    setData('expectingFirstListItemValue', true)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onenterlistitemvalue(token) {\n    if (getData('expectingFirstListItemValue')) {\n      const ancestor = this.stack[this.stack.length - 2]\n      ancestor.start = Number.parseInt(this.sliceSerialize(token), 10)\n      setData('expectingFirstListItemValue')\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfenceinfo() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.lang = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfencemeta() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.meta = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfence() {\n    // Exit if this is the closing fence.\n    if (getData('flowCodeInside')) return\n    this.buffer()\n    setData('flowCodeInside', true)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefenced() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.value = data.replace(/^(\\r?\\n|\\r)|(\\r?\\n|\\r)$/g, '')\n    setData('flowCodeInside')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodeindented() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.value = data.replace(/(\\r?\\n|\\r)$/g, '')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitionlabelstring(token) {\n    const label = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.label = label\n    node.identifier = normalizeIdentifier(\n      this.sliceSerialize(token)\n    ).toLowerCase()\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitiontitlestring() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.title = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitiondestinationstring() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.url = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitatxheadingsequence(token) {\n    const node = this.stack[this.stack.length - 1]\n    if (!node.depth) {\n      const depth = this.sliceSerialize(token).length\n      node.depth = depth\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheadingtext() {\n    setData('setextHeadingSlurpLineEnding', true)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheadinglinesequence(token) {\n    const node = this.stack[this.stack.length - 1]\n    node.depth = this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheading() {\n    setData('setextHeadingSlurpLineEnding')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onenterdata(token) {\n    const node = this.stack[this.stack.length - 1]\n    let tail = node.children[node.children.length - 1]\n    if (!tail || tail.type !== 'text') {\n      // Add a new text node.\n      tail = text()\n      // @ts-expect-error: we\u2019ll add `end` later.\n      tail.position = {\n        start: point(token.start)\n      }\n      // @ts-expect-error: Assume `parent` accepts `text`.\n      node.children.push(tail)\n    }\n    this.stack.push(tail)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitdata(token) {\n    const tail = this.stack.pop()\n    tail.value += this.sliceSerialize(token)\n    tail.position.end = point(token.end)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlineending(token) {\n    const context = this.stack[this.stack.length - 1]\n    // If we\u2019re at a hard break, include the line ending in there.\n    if (getData('atHardBreak')) {\n      const tail = context.children[context.children.length - 1]\n      tail.position.end = point(token.end)\n      setData('atHardBreak')\n      return\n    }\n    if (\n      !getData('setextHeadingSlurpLineEnding') &&\n      config.canContainEols.includes(context.type)\n    ) {\n      onenterdata.call(this, token)\n      onexitdata.call(this, token)\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithardbreak() {\n    setData('atHardBreak', true)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithtmlflow() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.value = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithtmltext() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.value = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitcodetext() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.value = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlink() {\n    const node = this.stack[this.stack.length - 1]\n    // Note: there are also `identifier` and `label` fields on this link node!\n    // These are used / cleaned here.\n    // To do: clean.\n    if (getData('inReference')) {\n      /** @type {ReferenceType} */\n      const referenceType = getData('referenceType') || 'shortcut'\n      node.type += 'Reference'\n      // @ts-expect-error: mutate.\n      node.referenceType = referenceType\n      // @ts-expect-error: mutate.\n      delete node.url\n      delete node.title\n    } else {\n      // @ts-expect-error: mutate.\n      delete node.identifier\n      // @ts-expect-error: mutate.\n      delete node.label\n    }\n    setData('referenceType')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitimage() {\n    const node = this.stack[this.stack.length - 1]\n    // Note: there are also `identifier` and `label` fields on this link node!\n    // These are used / cleaned here.\n    // To do: clean.\n    if (getData('inReference')) {\n      /** @type {ReferenceType} */\n      const referenceType = getData('referenceType') || 'shortcut'\n      node.type += 'Reference'\n      // @ts-expect-error: mutate.\n      node.referenceType = referenceType\n      // @ts-expect-error: mutate.\n      delete node.url\n      delete node.title\n    } else {\n      // @ts-expect-error: mutate.\n      delete node.identifier\n      // @ts-expect-error: mutate.\n      delete node.label\n    }\n    setData('referenceType')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlabeltext(token) {\n    const string = this.sliceSerialize(token)\n    const ancestor = this.stack[this.stack.length - 2]\n    // @ts-expect-error: stash this on the node, as it might become a reference\n    // later.\n    ancestor.label = decodeString(string)\n    // @ts-expect-error: same as above.\n    ancestor.identifier = normalizeIdentifier(string).toLowerCase()\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlabel() {\n    const fragment = this.stack[this.stack.length - 1]\n    const value = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    // Assume a reference.\n    setData('inReference', true)\n    if (node.type === 'link') {\n      /** @type {Array<StaticPhrasingContent>} */\n      // @ts-expect-error: Assume static phrasing content.\n      const children = fragment.children\n      node.children = children\n    } else {\n      node.alt = value\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresourcedestinationstring() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.url = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresourcetitlestring() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.title = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresource() {\n    setData('inReference')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onenterreference() {\n    setData('referenceType', 'collapsed')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitreferencestring(token) {\n    const label = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    // @ts-expect-error: stash this on the node, as it might become a reference\n    // later.\n    node.label = label\n    // @ts-expect-error: same as above.\n    node.identifier = normalizeIdentifier(\n      this.sliceSerialize(token)\n    ).toLowerCase()\n    setData('referenceType', 'full')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitcharacterreferencemarker(token) {\n    setData('characterReferenceType', token.type)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcharacterreferencevalue(token) {\n    const data = this.sliceSerialize(token)\n    const type = getData('characterReferenceType')\n    /** @type {string} */\n    let value\n    if (type) {\n      value = decodeNumericCharacterReference(\n        data,\n        type === 'characterReferenceMarkerNumeric' ? 10 : 16\n      )\n      setData('characterReferenceType')\n    } else {\n      const result = decodeNamedCharacterReference(data)\n      value = result\n    }\n    const tail = this.stack.pop()\n    tail.value += value\n    tail.position.end = point(token.end)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitautolinkprotocol(token) {\n    onexitdata.call(this, token)\n    const node = this.stack[this.stack.length - 1]\n    node.url = this.sliceSerialize(token)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitautolinkemail(token) {\n    onexitdata.call(this, token)\n    const node = this.stack[this.stack.length - 1]\n    node.url = 'mailto:' + this.sliceSerialize(token)\n  }\n\n  //\n  // Creaters.\n  //\n\n  /** @returns {Blockquote} */\n  function blockQuote() {\n    return {\n      type: 'blockquote',\n      children: []\n    }\n  }\n\n  /** @returns {Code} */\n  function codeFlow() {\n    return {\n      type: 'code',\n      lang: null,\n      meta: null,\n      value: ''\n    }\n  }\n\n  /** @returns {InlineCode} */\n  function codeText() {\n    return {\n      type: 'inlineCode',\n      value: ''\n    }\n  }\n\n  /** @returns {Definition} */\n  function definition() {\n    return {\n      type: 'definition',\n      identifier: '',\n      label: null,\n      title: null,\n      url: ''\n    }\n  }\n\n  /** @returns {Emphasis} */\n  function emphasis() {\n    return {\n      type: 'emphasis',\n      children: []\n    }\n  }\n\n  /** @returns {Heading} */\n  function heading() {\n    // @ts-expect-error `depth` will be set later.\n    return {\n      type: 'heading',\n      depth: undefined,\n      children: []\n    }\n  }\n\n  /** @returns {Break} */\n  function hardBreak() {\n    return {\n      type: 'break'\n    }\n  }\n\n  /** @returns {HTML} */\n  function html() {\n    return {\n      type: 'html',\n      value: ''\n    }\n  }\n\n  /** @returns {Image} */\n  function image() {\n    return {\n      type: 'image',\n      title: null,\n      url: '',\n      alt: null\n    }\n  }\n\n  /** @returns {Link} */\n  function link() {\n    return {\n      type: 'link',\n      title: null,\n      url: '',\n      children: []\n    }\n  }\n\n  /**\n   * @param {Token} token\n   * @returns {List}\n   */\n  function list(token) {\n    return {\n      type: 'list',\n      ordered: token.type === 'listOrdered',\n      start: null,\n      spread: token._spread,\n      children: []\n    }\n  }\n\n  /**\n   * @param {Token} token\n   * @returns {ListItem}\n   */\n  function listItem(token) {\n    return {\n      type: 'listItem',\n      spread: token._spread,\n      checked: null,\n      children: []\n    }\n  }\n\n  /** @returns {Paragraph} */\n  function paragraph() {\n    return {\n      type: 'paragraph',\n      children: []\n    }\n  }\n\n  /** @returns {Strong} */\n  function strong() {\n    return {\n      type: 'strong',\n      children: []\n    }\n  }\n\n  /** @returns {Text} */\n  function text() {\n    return {\n      type: 'text',\n      value: ''\n    }\n  }\n\n  /** @returns {ThematicBreak} */\n  function thematicBreak() {\n    return {\n      type: 'thematicBreak'\n    }\n  }\n}\n\n/**\n * Copy a point-like value.\n *\n * @param {Point} d\n *   Point-like value.\n * @returns {Point}\n *   unist point.\n */\nfunction point(d) {\n  return {\n    line: d.line,\n    column: d.column,\n    offset: d.offset\n  }\n}\n\n/**\n * @param {Config} combined\n * @param {Array<Extension | Array<Extension>>} extensions\n * @returns {void}\n */\nfunction configure(combined, extensions) {\n  let index = -1\n  while (++index < extensions.length) {\n    const value = extensions[index]\n    if (Array.isArray(value)) {\n      configure(combined, value)\n    } else {\n      extension(combined, value)\n    }\n  }\n}\n\n/**\n * @param {Config} combined\n * @param {Extension} extension\n * @returns {void}\n */\nfunction extension(combined, extension) {\n  /** @type {keyof Extension} */\n  let key\n  for (key in extension) {\n    if (own.call(extension, key)) {\n      if (key === 'canContainEols') {\n        const right = extension[key]\n        if (right) {\n          combined[key].push(...right)\n        }\n      } else if (key === 'transforms') {\n        const right = extension[key]\n        if (right) {\n          combined[key].push(...right)\n        }\n      } else if (key === 'enter' || key === 'exit') {\n        const right = extension[key]\n        if (right) {\n          Object.assign(combined[key], right)\n        }\n      }\n    }\n  }\n}\n\n/** @type {OnEnterError} */\nfunction defaultOnError(left, right) {\n  if (left) {\n    throw new Error(\n      'Cannot close `' +\n        left.type +\n        '` (' +\n        stringifyPosition({\n          start: left.start,\n          end: left.end\n        }) +\n        '): a different token (`' +\n        right.type +\n        '`, ' +\n        stringifyPosition({\n          start: right.start,\n          end: right.end\n        }) +\n        ') is open'\n    )\n  } else {\n    throw new Error(\n      'Cannot close document, a token (`' +\n        right.type +\n        '`, ' +\n        stringifyPosition({\n          start: right.start,\n          end: right.end\n        }) +\n        ') is still open'\n    )\n  }\n}\n", "/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast-util-from-markdown').Options} Options\n */\n\nimport {fromMarkdown} from 'mdast-util-from-markdown'\n\n/**\n * @this {import('unified').Processor}\n * @type {import('unified').Plugin<[Options?] | void[], string, Root>}\n */\nexport default function remarkParse(options) {\n  /** @type {import('unified').ParserFunction<Root>} */\n  const parser = (doc) => {\n    // Assume options.\n    const settings = /** @type {Options} */ (this.data('settings'))\n\n    return fromMarkdown(\n      doc,\n      Object.assign({}, settings, options, {\n        // Note: these options are not in the readme.\n        // The goal is for them to be set by plugins on `data` instead of being\n        // passed by users.\n        extensions: this.data('micromarkExtensions') || [],\n        mdastExtensions: this.data('fromMarkdownExtensions') || []\n      })\n    )\n  }\n\n  Object.assign(this, {Parser: parser})\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Blockquote} Blockquote\n * @typedef {import('../state.js').State} State\n */\n\n/**\n * Turn an mdast `blockquote` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Blockquote} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function blockquote(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'blockquote',\n    properties: {},\n    children: state.wrap(state.all(node), true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Text} Text\n * @typedef {import('mdast').Break} Break\n * @typedef {import('../state.js').State} State\n */\n\n/**\n * Turn an mdast `break` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Break} node\n *   mdast node.\n * @returns {Array<Element | Text>}\n *   hast element content.\n */\nexport function hardBreak(state, node) {\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'br', properties: {}, children: []}\n  state.patch(node, result)\n  return [state.applyData(node, result), {type: 'text', value: '\\n'}]\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Code} Code\n * @typedef {import('../state.js').State} State\n\n */\n\n/**\n * Turn an mdast `code` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Code} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function code(state, node) {\n  const value = node.value ? node.value + '\\n' : ''\n  // To do: next major, use `node.lang` w/o regex, the splitting\u2019s been going\n  // on for years in remark now.\n  const lang = node.lang ? node.lang.match(/^[^ \\t]+(?=[ \\t]|$)/) : null\n  /** @type {Properties} */\n  const properties = {}\n\n  if (lang) {\n    properties.className = ['language-' + lang]\n  }\n\n  // Create `<code>`.\n  /** @type {Element} */\n  let result = {\n    type: 'element',\n    tagName: 'code',\n    properties,\n    children: [{type: 'text', value}]\n  }\n\n  if (node.meta) {\n    result.data = {meta: node.meta}\n  }\n\n  state.patch(node, result)\n  result = state.applyData(node, result)\n\n  // Create `<pre>`.\n  result = {type: 'element', tagName: 'pre', properties: {}, children: [result]}\n  state.patch(node, result)\n  return result\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Delete} Delete\n * @typedef {import('../state.js').State} State\n\n */\n\n/**\n * Turn an mdast `delete` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Delete} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function strikethrough(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'del',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Emphasis} Emphasis\n * @typedef {import('../state.js').State} State\n */\n\n/**\n * Turn an mdast `emphasis` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Emphasis} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function emphasis(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'em',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n", "import {asciiAlphanumeric} from 'micromark-util-character'\nimport {encode} from 'micromark-util-encode'\n/**\n * Make a value safe for injection as a URL.\n *\n * This encodes unsafe characters with percent-encoding and skips already\n * encoded sequences (see `normalizeUri`).\n * Further unsafe characters are encoded as character references (see\n * `micromark-util-encode`).\n *\n * A regex of allowed protocols can be given, in which case the URL is\n * sanitized.\n * For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or\n * `/^https?$/i` for `img[src]` (this is what `github.com` allows).\n * If the URL includes an unknown protocol (one not matched by `protocol`, such\n * as a dangerous example, `javascript:`), the value is ignored.\n *\n * @param {string | undefined} url\n *   URI to sanitize.\n * @param {RegExp | null | undefined} [protocol]\n *   Allowed protocols.\n * @returns {string}\n *   Sanitized URI.\n */\nexport function sanitizeUri(url, protocol) {\n  const value = encode(normalizeUri(url || ''))\n  if (!protocol) {\n    return value\n  }\n  const colon = value.indexOf(':')\n  const questionMark = value.indexOf('?')\n  const numberSign = value.indexOf('#')\n  const slash = value.indexOf('/')\n  if (\n    // If there is no protocol, it\u2019s relative.\n    colon < 0 ||\n    // If the first colon is after a `?`, `#`, or `/`, it\u2019s not a protocol.\n    (slash > -1 && colon > slash) ||\n    (questionMark > -1 && colon > questionMark) ||\n    (numberSign > -1 && colon > numberSign) ||\n    // It is a protocol, it should be allowed.\n    protocol.test(value.slice(0, colon))\n  ) {\n    return value\n  }\n  return ''\n}\n\n/**\n * Normalize a URL.\n *\n * Encode unsafe characters with percent-encoding, skipping already encoded\n * sequences.\n *\n * @param {string} value\n *   URI to normalize.\n * @returns {string}\n *   Normalized URI.\n */\nexport function normalizeUri(value) {\n  /** @type {Array<string>} */\n  const result = []\n  let index = -1\n  let start = 0\n  let skip = 0\n  while (++index < value.length) {\n    const code = value.charCodeAt(index)\n    /** @type {string} */\n    let replace = ''\n\n    // A correct percent encoded value.\n    if (\n      code === 37 &&\n      asciiAlphanumeric(value.charCodeAt(index + 1)) &&\n      asciiAlphanumeric(value.charCodeAt(index + 2))\n    ) {\n      skip = 2\n    }\n    // ASCII.\n    else if (code < 128) {\n      if (!/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(code))) {\n        replace = String.fromCharCode(code)\n      }\n    }\n    // Astral.\n    else if (code > 55295 && code < 57344) {\n      const next = value.charCodeAt(index + 1)\n\n      // A correct surrogate pair.\n      if (code < 56320 && next > 56319 && next < 57344) {\n        replace = String.fromCharCode(code, next)\n        skip = 1\n      }\n      // Lone surrogate.\n      else {\n        replace = '\\uFFFD'\n      }\n    }\n    // Unicode.\n    else {\n      replace = String.fromCharCode(code)\n    }\n    if (replace) {\n      result.push(value.slice(start, index), encodeURIComponent(replace))\n      start = index + skip + 1\n      replace = ''\n    }\n    if (skip) {\n      index += skip\n      skip = 0\n    }\n  }\n  return result.join('') + value.slice(start)\n}\n", "/**\n * @typedef {import('mdast').FootnoteReference} FootnoteReference\n * @typedef {import('hast').Element} Element\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `footnoteReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {FootnoteReference} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function footnoteReference(state, node) {\n  const id = String(node.identifier).toUpperCase()\n  const safeId = normalizeUri(id.toLowerCase())\n  const index = state.footnoteOrder.indexOf(id)\n  /** @type {number} */\n  let counter\n\n  if (index === -1) {\n    state.footnoteOrder.push(id)\n    state.footnoteCounts[id] = 1\n    counter = state.footnoteOrder.length\n  } else {\n    state.footnoteCounts[id]++\n    counter = index + 1\n  }\n\n  const reuseCounter = state.footnoteCounts[id]\n\n  /** @type {Element} */\n  const link = {\n    type: 'element',\n    tagName: 'a',\n    properties: {\n      href: '#' + state.clobberPrefix + 'fn-' + safeId,\n      id:\n        state.clobberPrefix +\n        'fnref-' +\n        safeId +\n        (reuseCounter > 1 ? '-' + reuseCounter : ''),\n      dataFootnoteRef: true,\n      ariaDescribedBy: ['footnote-label']\n    },\n    children: [{type: 'text', value: String(counter)}]\n  }\n  state.patch(node, link)\n\n  /** @type {Element} */\n  const sup = {\n    type: 'element',\n    tagName: 'sup',\n    properties: {},\n    children: [link]\n  }\n  state.patch(node, sup)\n  return state.applyData(node, sup)\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Footnote} Footnote\n * @typedef {import('../state.js').State} State\n */\n\nimport {footnoteReference} from './footnote-reference.js'\n\n// To do: when both:\n// * <https://github.com/micromark/micromark-extension-footnote>\n// * <https://github.com/syntax-tree/mdast-util-footnote>\n// \u2026are archived, remove this (also from mdast).\n// These inline notes are not used in GFM.\n\n/**\n * Turn an mdast `footnote` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Footnote} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function footnote(state, node) {\n  const footnoteById = state.footnoteById\n  let no = 1\n\n  while (no in footnoteById) no++\n\n  const identifier = String(no)\n\n  footnoteById[identifier] = {\n    type: 'footnoteDefinition',\n    identifier,\n    children: [{type: 'paragraph', children: node.children}],\n    position: node.position\n  }\n\n  return footnoteReference(state, {\n    type: 'footnoteReference',\n    identifier,\n    position: node.position\n  })\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Heading} Heading\n * @typedef {import('../state.js').State} State\n */\n\n/**\n * Turn an mdast `heading` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Heading} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function heading(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'h' + node.depth,\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').HTML} Html\n * @typedef {import('../state.js').State} State\n * @typedef {import('../../index.js').Raw} Raw\n */\n\n/**\n * Turn an mdast `html` node into hast (`raw` node in dangerous mode, otherwise\n * nothing).\n *\n * @param {State} state\n *   Info passed around.\n * @param {Html} node\n *   mdast node.\n * @returns {Raw | Element | null}\n *   hast node.\n */\nexport function html(state, node) {\n  if (state.dangerous) {\n    /** @type {Raw} */\n    const result = {type: 'raw', value: node.value}\n    state.patch(node, result)\n    return state.applyData(node, result)\n  }\n\n  // To do: next major: return `undefined`.\n  return null\n}\n", "/**\n * @typedef {import('hast').ElementContent} ElementContent\n *\n * @typedef {import('mdast').Content} Content\n * @typedef {import('mdast').Reference} Reference\n * @typedef {import('mdast').Root} Root\n *\n * @typedef {import('./state.js').State} State\n */\n\n/**\n * @typedef {Root | Content} Nodes\n * @typedef {Extract<Nodes, Reference>} References\n */\n\n// To do: next major: always return array.\n\n/**\n * Return the content of a reference without definition as plain text.\n *\n * @param {State} state\n *   Info passed around.\n * @param {References} node\n *   Reference node (image, link).\n * @returns {ElementContent | Array<ElementContent>}\n *   hast content.\n */\nexport function revert(state, node) {\n  const subtype = node.referenceType\n  let suffix = ']'\n\n  if (subtype === 'collapsed') {\n    suffix += '[]'\n  } else if (subtype === 'full') {\n    suffix += '[' + (node.label || node.identifier) + ']'\n  }\n\n  if (node.type === 'imageReference') {\n    return {type: 'text', value: '![' + node.alt + suffix}\n  }\n\n  const contents = state.all(node)\n  const head = contents[0]\n\n  if (head && head.type === 'text') {\n    head.value = '[' + head.value\n  } else {\n    contents.unshift({type: 'text', value: '['})\n  }\n\n  const tail = contents[contents.length - 1]\n\n  if (tail && tail.type === 'text') {\n    tail.value += suffix\n  } else {\n    contents.push({type: 'text', value: suffix})\n  }\n\n  return contents\n}\n", "/**\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').ImageReference} ImageReference\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\nimport {revert} from '../revert.js'\n\n/**\n * Turn an mdast `imageReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ImageReference} node\n *   mdast node.\n * @returns {ElementContent | Array<ElementContent>}\n *   hast node.\n */\nexport function imageReference(state, node) {\n  const def = state.definition(node.identifier)\n\n  if (!def) {\n    return revert(state, node)\n  }\n\n  /** @type {Properties} */\n  const properties = {src: normalizeUri(def.url || ''), alt: node.alt}\n\n  if (def.title !== null && def.title !== undefined) {\n    properties.title = def.title\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'img', properties, children: []}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Image} Image\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `image` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Image} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function image(state, node) {\n  /** @type {Properties} */\n  const properties = {src: normalizeUri(node.url)}\n\n  if (node.alt !== null && node.alt !== undefined) {\n    properties.alt = node.alt\n  }\n\n  if (node.title !== null && node.title !== undefined) {\n    properties.title = node.title\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'img', properties, children: []}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Text} Text\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('../state.js').State} State\n */\n\n/**\n * Turn an mdast `inlineCode` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {InlineCode} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function inlineCode(state, node) {\n  /** @type {Text} */\n  const text = {type: 'text', value: node.value.replace(/\\r?\\n|\\r/g, ' ')}\n  state.patch(node, text)\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'code',\n    properties: {},\n    children: [text]\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').LinkReference} LinkReference\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\nimport {revert} from '../revert.js'\n\n/**\n * Turn an mdast `linkReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {LinkReference} node\n *   mdast node.\n * @returns {ElementContent | Array<ElementContent>}\n *   hast node.\n */\nexport function linkReference(state, node) {\n  const def = state.definition(node.identifier)\n\n  if (!def) {\n    return revert(state, node)\n  }\n\n  /** @type {Properties} */\n  const properties = {href: normalizeUri(def.url || '')}\n\n  if (def.title !== null && def.title !== undefined) {\n    properties.title = def.title\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'a',\n    properties,\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Link} Link\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `link` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Link} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function link(state, node) {\n  /** @type {Properties} */\n  const properties = {href: normalizeUri(node.url)}\n\n  if (node.title !== null && node.title !== undefined) {\n    properties.title = node.title\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'a',\n    properties,\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Content} Content\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Parent} Parent\n * @typedef {import('mdast').Root} Root\n * @typedef {import('../state.js').State} State\n */\n\n/**\n * @typedef {Root | Content} Nodes\n * @typedef {Extract<Nodes, Parent>} Parents\n */\n\n/**\n * Turn an mdast `listItem` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ListItem} node\n *   mdast node.\n * @param {Parents | null | undefined} parent\n *   Parent of `node`.\n * @returns {Element}\n *   hast node.\n */\nexport function listItem(state, node, parent) {\n  const results = state.all(node)\n  const loose = parent ? listLoose(parent) : listItemLoose(node)\n  /** @type {Properties} */\n  const properties = {}\n  /** @type {Array<ElementContent>} */\n  const children = []\n\n  if (typeof node.checked === 'boolean') {\n    const head = results[0]\n    /** @type {Element} */\n    let paragraph\n\n    if (head && head.type === 'element' && head.tagName === 'p') {\n      paragraph = head\n    } else {\n      paragraph = {type: 'element', tagName: 'p', properties: {}, children: []}\n      results.unshift(paragraph)\n    }\n\n    if (paragraph.children.length > 0) {\n      paragraph.children.unshift({type: 'text', value: ' '})\n    }\n\n    paragraph.children.unshift({\n      type: 'element',\n      tagName: 'input',\n      properties: {type: 'checkbox', checked: node.checked, disabled: true},\n      children: []\n    })\n\n    // According to github-markdown-css, this class hides bullet.\n    // See: <https://github.com/sindresorhus/github-markdown-css>.\n    properties.className = ['task-list-item']\n  }\n\n  let index = -1\n\n  while (++index < results.length) {\n    const child = results[index]\n\n    // Add eols before nodes, except if this is a loose, first paragraph.\n    if (\n      loose ||\n      index !== 0 ||\n      child.type !== 'element' ||\n      child.tagName !== 'p'\n    ) {\n      children.push({type: 'text', value: '\\n'})\n    }\n\n    if (child.type === 'element' && child.tagName === 'p' && !loose) {\n      children.push(...child.children)\n    } else {\n      children.push(child)\n    }\n  }\n\n  const tail = results[results.length - 1]\n\n  // Add a final eol.\n  if (tail && (loose || tail.type !== 'element' || tail.tagName !== 'p')) {\n    children.push({type: 'text', value: '\\n'})\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'li', properties, children}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n\n/**\n * @param {Parents} node\n * @return {Boolean}\n */\nfunction listLoose(node) {\n  let loose = false\n  if (node.type === 'list') {\n    loose = node.spread || false\n    const children = node.children\n    let index = -1\n\n    while (!loose && ++index < children.length) {\n      loose = listItemLoose(children[index])\n    }\n  }\n\n  return loose\n}\n\n/**\n * @param {ListItem} node\n * @return {Boolean}\n */\nfunction listItemLoose(node) {\n  const spread = node.spread\n\n  return spread === undefined || spread === null\n    ? node.children.length > 1\n    : spread\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').List} List\n * @typedef {import('../state.js').State} State\n */\n\n/**\n * Turn an mdast `list` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {List} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function list(state, node) {\n  /** @type {Properties} */\n  const properties = {}\n  const results = state.all(node)\n  let index = -1\n\n  if (typeof node.start === 'number' && node.start !== 1) {\n    properties.start = node.start\n  }\n\n  // Like GitHub, add a class for custom styling.\n  while (++index < results.length) {\n    const child = results[index]\n\n    if (\n      child.type === 'element' &&\n      child.tagName === 'li' &&\n      child.properties &&\n      Array.isArray(child.properties.className) &&\n      child.properties.className.includes('task-list-item')\n    ) {\n      properties.className = ['contains-task-list']\n      break\n    }\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: node.ordered ? 'ol' : 'ul',\n    properties,\n    children: state.wrap(results, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('../state.js').State} State\n */\n\n/**\n * Turn an mdast `paragraph` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Paragraph} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function paragraph(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'p',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n", "/**\n * @typedef {import('hast').Root} HastRoot\n * @typedef {import('hast').Element} HastElement\n * @typedef {import('mdast').Root} MdastRoot\n * @typedef {import('../state.js').State} State\n */\n\n/**\n * Turn an mdast `root` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastRoot} node\n *   mdast node.\n * @returns {HastRoot | HastElement}\n *   hast node.\n */\nexport function root(state, node) {\n  /** @type {HastRoot} */\n  const result = {type: 'root', children: state.wrap(state.all(node))}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Strong} Strong\n * @typedef {import('../state.js').State} State\n */\n\n/**\n * Turn an mdast `strong` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Strong} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function strong(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'strong',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n", "/**\n * @typedef {import('unist').Position} Position\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n */\n\n/**\n * Get the starting point of `node`.\n *\n * @param node\n *   Node.\n * @returns\n *   Point.\n */\nexport const pointStart = point('start')\n\n/**\n * Get the ending point of `node`.\n *\n * @param node\n *   Node.\n * @returns\n *   Point.\n */\nexport const pointEnd = point('end')\n\n/**\n * Get the positional info of `node`.\n *\n * @param {NodeLike | Node | null | undefined} [node]\n *   Node.\n * @returns {Position}\n *   Position.\n */\nexport function position(node) {\n  return {start: pointStart(node), end: pointEnd(node)}\n}\n\n/**\n * Get the positional info of `node`.\n *\n * @param {'start' | 'end'} type\n *   Side.\n * @returns\n *   Getter.\n */\nfunction point(type) {\n  return point\n\n  /**\n   * Get the point info of `node` at a bound side.\n   *\n   * @param {NodeLike | Node | null | undefined} [node]\n   * @returns {Point}\n   */\n  function point(node) {\n    const point = (node && node.position && node.position[type]) || {}\n\n    // To do: next major: don\u2019t return points when invalid.\n    return {\n      // @ts-expect-error: in practice, null is allowed.\n      line: point.line || null,\n      // @ts-expect-error: in practice, null is allowed.\n      column: point.column || null,\n      // @ts-expect-error: in practice, null is allowed.\n      offset: point.offset > -1 ? point.offset : null\n    }\n  }\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Table} Table\n * @typedef {import('../state.js').State} State\n */\n\nimport {pointStart, pointEnd} from 'unist-util-position'\n\n/**\n * Turn an mdast `table` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Table} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function table(state, node) {\n  const rows = state.all(node)\n  const firstRow = rows.shift()\n  /** @type {Array<Element>} */\n  const tableContent = []\n\n  if (firstRow) {\n    /** @type {Element} */\n    const head = {\n      type: 'element',\n      tagName: 'thead',\n      properties: {},\n      children: state.wrap([firstRow], true)\n    }\n    state.patch(node.children[0], head)\n    tableContent.push(head)\n  }\n\n  if (rows.length > 0) {\n    /** @type {Element} */\n    const body = {\n      type: 'element',\n      tagName: 'tbody',\n      properties: {},\n      children: state.wrap(rows, true)\n    }\n\n    const start = pointStart(node.children[1])\n    const end = pointEnd(node.children[node.children.length - 1])\n    if (start.line && end.line) body.position = {start, end}\n    tableContent.push(body)\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'table',\n    properties: {},\n    children: state.wrap(tableContent, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n", "/**\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('mdast').Content} Content\n * @typedef {import('mdast').Parent} Parent\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast').TableRow} TableRow\n * @typedef {import('../state.js').State} State\n */\n\n/**\n * @typedef {Root | Content} Nodes\n * @typedef {Extract<Nodes, Parent>} Parents\n */\n\n/**\n * Turn an mdast `tableRow` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {TableRow} node\n *   mdast node.\n * @param {Parents | null | undefined} parent\n *   Parent of `node`.\n * @returns {Element}\n *   hast node.\n */\nexport function tableRow(state, node, parent) {\n  const siblings = parent ? parent.children : undefined\n  // Generate a body row when without parent.\n  const rowIndex = siblings ? siblings.indexOf(node) : 1\n  const tagName = rowIndex === 0 ? 'th' : 'td'\n  const align = parent && parent.type === 'table' ? parent.align : undefined\n  const length = align ? align.length : node.children.length\n  let cellIndex = -1\n  /** @type {Array<ElementContent>} */\n  const cells = []\n\n  while (++cellIndex < length) {\n    // Note: can also be undefined.\n    const cell = node.children[cellIndex]\n    /** @type {Properties} */\n    const properties = {}\n    const alignValue = align ? align[cellIndex] : undefined\n\n    if (alignValue) {\n      properties.align = alignValue\n    }\n\n    /** @type {Element} */\n    let result = {type: 'element', tagName, properties, children: []}\n\n    if (cell) {\n      result.children = state.all(cell)\n      state.patch(cell, result)\n      result = state.applyData(node, result)\n    }\n\n    cells.push(result)\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'tr',\n    properties: {},\n    children: state.wrap(cells, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').TableCell} TableCell\n * @typedef {import('../state.js').State} State\n */\n\n/**\n * Turn an mdast `tableCell` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {TableCell} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function tableCell(state, node) {\n  // Note: this function is normally not called: see `table-row` for how rows\n  // and their cells are compiled.\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'td', // Assume body cell.\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n", "const tab = 9 /* `\\t` */\nconst space = 32 /* ` ` */\n\n/**\n * Remove initial and final spaces and tabs at the line breaks in `value`.\n * Does not trim initial and final spaces and tabs of the value itself.\n *\n * @param {string} value\n *   Value to trim.\n * @returns {string}\n *   Trimmed value.\n */\nexport function trimLines(value) {\n  const source = String(value)\n  const search = /\\r?\\n|\\r/g\n  let match = search.exec(source)\n  let last = 0\n  /** @type {Array<string>} */\n  const lines = []\n\n  while (match) {\n    lines.push(\n      trimLine(source.slice(last, match.index), last > 0, true),\n      match[0]\n    )\n\n    last = match.index + match[0].length\n    match = search.exec(source)\n  }\n\n  lines.push(trimLine(source.slice(last), last > 0, false))\n\n  return lines.join('')\n}\n\n/**\n * @param {string} value\n *   Line to trim.\n * @param {boolean} start\n *   Whether to trim the start of the line.\n * @param {boolean} end\n *   Whether to trim the end of the line.\n * @returns {string}\n *   Trimmed line.\n */\nfunction trimLine(value, start, end) {\n  let startIndex = 0\n  let endIndex = value.length\n\n  if (start) {\n    let code = value.codePointAt(startIndex)\n\n    while (code === tab || code === space) {\n      startIndex++\n      code = value.codePointAt(startIndex)\n    }\n  }\n\n  if (end) {\n    let code = value.codePointAt(endIndex - 1)\n\n    while (code === tab || code === space) {\n      endIndex--\n      code = value.codePointAt(endIndex - 1)\n    }\n  }\n\n  return endIndex > startIndex ? value.slice(startIndex, endIndex) : ''\n}\n", "/**\n * @typedef {import('hast').Element} HastElement\n * @typedef {import('hast').Text} HastText\n * @typedef {import('mdast').Text} MdastText\n * @typedef {import('../state.js').State} State\n */\n\nimport {trimLines} from 'trim-lines'\n\n/**\n * Turn an mdast `text` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastText} node\n *   mdast node.\n * @returns {HastText | HastElement}\n *   hast node.\n */\nexport function text(state, node) {\n  /** @type {HastText} */\n  const result = {type: 'text', value: trimLines(String(node.value))}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').ThematicBreak} ThematicBreak\n * @typedef {import('../state.js').State} State\n */\n\n/**\n * Turn an mdast `thematicBreak` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ThematicBreak} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function thematicBreak(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'hr',\n    properties: {},\n    children: []\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n", "import {blockquote} from './blockquote.js'\nimport {hardBreak} from './break.js'\nimport {code} from './code.js'\nimport {strikethrough} from './delete.js'\nimport {emphasis} from './emphasis.js'\nimport {footnoteReference} from './footnote-reference.js'\nimport {footnote} from './footnote.js'\nimport {heading} from './heading.js'\nimport {html} from './html.js'\nimport {imageReference} from './image-reference.js'\nimport {image} from './image.js'\nimport {inlineCode} from './inline-code.js'\nimport {linkReference} from './link-reference.js'\nimport {link} from './link.js'\nimport {listItem} from './list-item.js'\nimport {list} from './list.js'\nimport {paragraph} from './paragraph.js'\nimport {root} from './root.js'\nimport {strong} from './strong.js'\nimport {table} from './table.js'\nimport {tableRow} from './table-row.js'\nimport {tableCell} from './table-cell.js'\nimport {text} from './text.js'\nimport {thematicBreak} from './thematic-break.js'\n\n/**\n * Default handlers for nodes.\n */\nexport const handlers = {\n  blockquote,\n  break: hardBreak,\n  code,\n  delete: strikethrough,\n  emphasis,\n  footnoteReference,\n  footnote,\n  heading,\n  html,\n  imageReference,\n  image,\n  inlineCode,\n  linkReference,\n  link,\n  listItem,\n  list,\n  paragraph,\n  root,\n  strong,\n  table,\n  tableCell,\n  tableRow,\n  text,\n  thematicBreak,\n  toml: ignore,\n  yaml: ignore,\n  definition: ignore,\n  footnoteDefinition: ignore\n}\n\n// Return nothing for nodes that are ignored.\nfunction ignore() {\n  // To do: next major: return `undefined`.\n  return null\n}\n", "/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Parent} Parent\n */\n\n/**\n * @typedef {Record<string, unknown>} Props\n * @typedef {null | undefined | string | Props | TestFunctionAnything | Array<string | Props | TestFunctionAnything>} Test\n *   Check for an arbitrary node, unaware of TypeScript inferral.\n *\n * @callback TestFunctionAnything\n *   Check if a node passes a test, unaware of TypeScript inferral.\n * @param {unknown} this\n *   The given context.\n * @param {Node} node\n *   A node.\n * @param {number | null | undefined} [index]\n *   The node\u2019s position in its parent.\n * @param {Parent | null | undefined} [parent]\n *   The node\u2019s parent.\n * @returns {boolean | void}\n *   Whether this node passes the test.\n */\n\n/**\n * @template {Node} Kind\n *   Node type.\n * @typedef {Kind['type'] | Partial<Kind> | TestFunctionPredicate<Kind> | Array<Kind['type'] | Partial<Kind> | TestFunctionPredicate<Kind>>} PredicateTest\n *   Check for a node that can be inferred by TypeScript.\n */\n\n/**\n * Check if a node passes a certain test.\n *\n * @template {Node} Kind\n *   Node type.\n * @callback TestFunctionPredicate\n *   Complex test function for a node that can be inferred by TypeScript.\n * @param {Node} node\n *   A node.\n * @param {number | null | undefined} [index]\n *   The node\u2019s position in its parent.\n * @param {Parent | null | undefined} [parent]\n *   The node\u2019s parent.\n * @returns {node is Kind}\n *   Whether this node passes the test.\n */\n\n/**\n * @callback AssertAnything\n *   Check that an arbitrary value is a node, unaware of TypeScript inferral.\n * @param {unknown} [node]\n *   Anything (typically a node).\n * @param {number | null | undefined} [index]\n *   The node\u2019s position in its parent.\n * @param {Parent | null | undefined} [parent]\n *   The node\u2019s parent.\n * @returns {boolean}\n *   Whether this is a node and passes a test.\n */\n\n/**\n * Check if a node is a node and passes a certain node test.\n *\n * @template {Node} Kind\n *   Node type.\n * @callback AssertPredicate\n *   Check that an arbitrary value is a specific node, aware of TypeScript.\n * @param {unknown} [node]\n *   Anything (typically a node).\n * @param {number | null | undefined} [index]\n *   The node\u2019s position in its parent.\n * @param {Parent | null | undefined} [parent]\n *   The node\u2019s parent.\n * @returns {node is Kind}\n *   Whether this is a node and passes a test.\n */\n\n/**\n * Check if `node` is a `Node` and whether it passes the given test.\n *\n * @param node\n *   Thing to check, typically `Node`.\n * @param test\n *   A check for a specific node.\n * @param index\n *   The node\u2019s position in its parent.\n * @param parent\n *   The node\u2019s parent.\n * @returns\n *   Whether `node` is a node and passes a test.\n */\nexport const is =\n  /**\n   * @type {(\n   *   (() => false) &\n   *   (<Kind extends Node = Node>(node: unknown, test: PredicateTest<Kind>, index: number, parent: Parent, context?: unknown) => node is Kind) &\n   *   (<Kind extends Node = Node>(node: unknown, test: PredicateTest<Kind>, index?: null | undefined, parent?: null | undefined, context?: unknown) => node is Kind) &\n   *   ((node: unknown, test: Test, index: number, parent: Parent, context?: unknown) => boolean) &\n   *   ((node: unknown, test?: Test, index?: null | undefined, parent?: null | undefined, context?: unknown) => boolean)\n   * )}\n   */\n  (\n    /**\n     * @param {unknown} [node]\n     * @param {Test} [test]\n     * @param {number | null | undefined} [index]\n     * @param {Parent | null | undefined} [parent]\n     * @param {unknown} [context]\n     * @returns {boolean}\n     */\n    // eslint-disable-next-line max-params\n    function is(node, test, index, parent, context) {\n      const check = convert(test)\n\n      if (\n        index !== undefined &&\n        index !== null &&\n        (typeof index !== 'number' ||\n          index < 0 ||\n          index === Number.POSITIVE_INFINITY)\n      ) {\n        throw new Error('Expected positive finite index')\n      }\n\n      if (\n        parent !== undefined &&\n        parent !== null &&\n        (!is(parent) || !parent.children)\n      ) {\n        throw new Error('Expected parent node')\n      }\n\n      if (\n        (parent === undefined || parent === null) !==\n        (index === undefined || index === null)\n      ) {\n        throw new Error('Expected both parent and index')\n      }\n\n      // @ts-expect-error Looks like a node.\n      return node && node.type && typeof node.type === 'string'\n        ? Boolean(check.call(context, node, index, parent))\n        : false\n    }\n  )\n\n/**\n * Generate an assertion from a test.\n *\n * Useful if you\u2019re going to test many nodes, for example when creating a\n * utility where something else passes a compatible test.\n *\n * The created function is a bit faster because it expects valid input only:\n * a `node`, `index`, and `parent`.\n *\n * @param test\n *   *   when nullish, checks if `node` is a `Node`.\n *   *   when `string`, works like passing `(node) => node.type === test`.\n *   *   when `function` checks if function passed the node is true.\n *   *   when `object`, checks that all keys in test are in node, and that they have (strictly) equal values.\n *   *   when `array`, checks if any one of the subtests pass.\n * @returns\n *   An assertion.\n */\nexport const convert =\n  /**\n   * @type {(\n   *   (<Kind extends Node>(test: PredicateTest<Kind>) => AssertPredicate<Kind>) &\n   *   ((test?: Test) => AssertAnything)\n   * )}\n   */\n  (\n    /**\n     * @param {Test} [test]\n     * @returns {AssertAnything}\n     */\n    function (test) {\n      if (test === undefined || test === null) {\n        return ok\n      }\n\n      if (typeof test === 'string') {\n        return typeFactory(test)\n      }\n\n      if (typeof test === 'object') {\n        return Array.isArray(test) ? anyFactory(test) : propsFactory(test)\n      }\n\n      if (typeof test === 'function') {\n        return castFactory(test)\n      }\n\n      throw new Error('Expected function, string, or object as test')\n    }\n  )\n\n/**\n * @param {Array<string | Props | TestFunctionAnything>} tests\n * @returns {AssertAnything}\n */\nfunction anyFactory(tests) {\n  /** @type {Array<AssertAnything>} */\n  const checks = []\n  let index = -1\n\n  while (++index < tests.length) {\n    checks[index] = convert(tests[index])\n  }\n\n  return castFactory(any)\n\n  /**\n   * @this {unknown}\n   * @param {Array<unknown>} parameters\n   * @returns {boolean}\n   */\n  function any(...parameters) {\n    let index = -1\n\n    while (++index < checks.length) {\n      if (checks[index].call(this, ...parameters)) return true\n    }\n\n    return false\n  }\n}\n\n/**\n * Turn an object into a test for a node with a certain fields.\n *\n * @param {Props} check\n * @returns {AssertAnything}\n */\nfunction propsFactory(check) {\n  return castFactory(all)\n\n  /**\n   * @param {Node} node\n   * @returns {boolean}\n   */\n  function all(node) {\n    /** @type {string} */\n    let key\n\n    for (key in check) {\n      // @ts-expect-error: hush, it sure works as an index.\n      if (node[key] !== check[key]) return false\n    }\n\n    return true\n  }\n}\n\n/**\n * Turn a string into a test for a node with a certain type.\n *\n * @param {string} check\n * @returns {AssertAnything}\n */\nfunction typeFactory(check) {\n  return castFactory(type)\n\n  /**\n   * @param {Node} node\n   */\n  function type(node) {\n    return node && node.type === check\n  }\n}\n\n/**\n * Turn a custom test into a test for a node that passes that test.\n *\n * @param {TestFunctionAnything} check\n * @returns {AssertAnything}\n */\nfunction castFactory(check) {\n  return assertion\n\n  /**\n   * @this {unknown}\n   * @param {unknown} node\n   * @param {Array<unknown>} parameters\n   * @returns {boolean}\n   */\n  function assertion(node, ...parameters) {\n    return Boolean(\n      node &&\n        typeof node === 'object' &&\n        'type' in node &&\n        // @ts-expect-error: fine.\n        Boolean(check.call(this, node, ...parameters))\n    )\n  }\n}\n\nfunction ok() {\n  return true\n}\n", "/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Parent} Parent\n * @typedef {import('unist-util-is').Test} Test\n */\n\n/**\n * @typedef {boolean | 'skip'} Action\n *   Union of the action types.\n *\n * @typedef {number} Index\n *   Move to the sibling at `index` next (after node itself is completely\n *   traversed).\n *\n *   Useful if mutating the tree, such as removing the node the visitor is\n *   currently on, or any of its previous siblings.\n *   Results less than 0 or greater than or equal to `children.length` stop\n *   traversing the parent.\n *\n * @typedef {[(Action | null | undefined | void)?, (Index | null | undefined)?]} ActionTuple\n *   List with one or two values, the first an action, the second an index.\n *\n * @typedef {Action | ActionTuple | Index | null | undefined | void} VisitorResult\n *   Any value that can be returned from a visitor.\n */\n\n/**\n * @template {Node} [Visited=Node]\n *   Visited node type.\n * @template {Parent} [Ancestor=Parent]\n *   Ancestor type.\n * @callback Visitor\n *   Handle a node (matching `test`, if given).\n *\n *   Visitors are free to transform `node`.\n *   They can also transform the parent of node (the last of `ancestors`).\n *\n *   Replacing `node` itself, if `SKIP` is not returned, still causes its\n *   descendants to be walked (which is a bug).\n *\n *   When adding or removing previous siblings of `node` (or next siblings, in\n *   case of reverse), the `Visitor` should return a new `Index` to specify the\n *   sibling to traverse after `node` is traversed.\n *   Adding or removing next siblings of `node` (or previous siblings, in case\n *   of reverse) is handled as expected without needing to return a new `Index`.\n *\n *   Removing the children property of an ancestor still results in them being\n *   traversed.\n * @param {Visited} node\n *   Found node.\n * @param {Array<Ancestor>} ancestors\n *   Ancestors of `node`.\n * @returns {VisitorResult}\n *   What to do next.\n *\n *   An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n *   An `Action` is treated as a tuple of `[Action]`.\n *\n *   Passing a tuple back only makes sense if the `Action` is `SKIP`.\n *   When the `Action` is `EXIT`, that action can be returned.\n *   When the `Action` is `CONTINUE`, `Index` can be returned.\n */\n\n/**\n * @template {Node} [Tree=Node]\n *   Tree type.\n * @template {Test} [Check=string]\n *   Test type.\n * @typedef {Visitor<import('./complex-types.js').Matches<import('./complex-types.js').InclusiveDescendant<Tree>, Check>, Extract<import('./complex-types.js').InclusiveDescendant<Tree>, Parent>>} BuildVisitor\n *   Build a typed `Visitor` function from a tree and a test.\n *\n *   It will infer which values are passed as `node` and which as `parents`.\n */\n\nimport {convert} from 'unist-util-is'\nimport {color} from './color.js'\n\n/**\n * Continue traversing as normal.\n */\nexport const CONTINUE = true\n\n/**\n * Stop traversing immediately.\n */\nexport const EXIT = false\n\n/**\n * Do not traverse this node\u2019s children.\n */\nexport const SKIP = 'skip'\n\n/**\n * Visit nodes, with ancestral information.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @param tree\n *   Tree to traverse.\n * @param test\n *   `unist-util-is`-compatible test\n * @param visitor\n *   Handle each node.\n * @param reverse\n *   Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns\n *   Nothing.\n */\nexport const visitParents =\n  /**\n   * @type {(\n   *   (<Tree extends Node, Check extends Test>(tree: Tree, test: Check, visitor: BuildVisitor<Tree, Check>, reverse?: boolean | null | undefined) => void) &\n   *   (<Tree extends Node>(tree: Tree, visitor: BuildVisitor<Tree>, reverse?: boolean | null | undefined) => void)\n   * )}\n   */\n  (\n    /**\n     * @param {Node} tree\n     * @param {Test} test\n     * @param {Visitor<Node>} visitor\n     * @param {boolean | null | undefined} [reverse]\n     * @returns {void}\n     */\n    function (tree, test, visitor, reverse) {\n      if (typeof test === 'function' && typeof visitor !== 'function') {\n        reverse = visitor\n        // @ts-expect-error no visitor given, so `visitor` is test.\n        visitor = test\n        test = null\n      }\n\n      const is = convert(test)\n      const step = reverse ? -1 : 1\n\n      factory(tree, undefined, [])()\n\n      /**\n       * @param {Node} node\n       * @param {number | undefined} index\n       * @param {Array<Parent>} parents\n       */\n      function factory(node, index, parents) {\n        /** @type {Record<string, unknown>} */\n        // @ts-expect-error: hush\n        const value = node && typeof node === 'object' ? node : {}\n\n        if (typeof value.type === 'string') {\n          const name =\n            // `hast`\n            typeof value.tagName === 'string'\n              ? value.tagName\n              : // `xast`\n              typeof value.name === 'string'\n              ? value.name\n              : undefined\n\n          Object.defineProperty(visit, 'name', {\n            value:\n              'node (' + color(node.type + (name ? '<' + name + '>' : '')) + ')'\n          })\n        }\n\n        return visit\n\n        function visit() {\n          /** @type {ActionTuple} */\n          let result = []\n          /** @type {ActionTuple} */\n          let subresult\n          /** @type {number} */\n          let offset\n          /** @type {Array<Parent>} */\n          let grandparents\n\n          if (!test || is(node, index, parents[parents.length - 1] || null)) {\n            result = toResult(visitor(node, parents))\n\n            if (result[0] === EXIT) {\n              return result\n            }\n          }\n\n          // @ts-expect-error looks like a parent.\n          if (node.children && result[0] !== SKIP) {\n            // @ts-expect-error looks like a parent.\n            offset = (reverse ? node.children.length : -1) + step\n            // @ts-expect-error looks like a parent.\n            grandparents = parents.concat(node)\n\n            // @ts-expect-error looks like a parent.\n            while (offset > -1 && offset < node.children.length) {\n              // @ts-expect-error looks like a parent.\n              subresult = factory(node.children[offset], offset, grandparents)()\n\n              if (subresult[0] === EXIT) {\n                return subresult\n              }\n\n              offset =\n                typeof subresult[1] === 'number' ? subresult[1] : offset + step\n            }\n          }\n\n          return result\n        }\n      }\n    }\n  )\n\n/**\n * Turn a return value into a clean result.\n *\n * @param {VisitorResult} value\n *   Valid return values from visitors.\n * @returns {ActionTuple}\n *   Clean result.\n */\nfunction toResult(value) {\n  if (Array.isArray(value)) {\n    return value\n  }\n\n  if (typeof value === 'number') {\n    return [CONTINUE, value]\n  }\n\n  return [value]\n}\n", "/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Parent} Parent\n * @typedef {import('unist-util-is').Test} Test\n * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult\n */\n\n/**\n * Check if `Child` can be a child of `Ancestor`.\n *\n * Returns the ancestor when `Child` can be a child of `Ancestor`, or returns\n * `never`.\n *\n * @template {Node} Ancestor\n *   Node type.\n * @template {Node} Child\n *   Node type.\n * @typedef {(\n *   Ancestor extends Parent\n *     ? Child extends Ancestor['children'][number]\n *       ? Ancestor\n *       : never\n *     : never\n * )} ParentsOf\n */\n\n/**\n * @template {Node} [Visited=Node]\n *   Visited node type.\n * @template {Parent} [Ancestor=Parent]\n *   Ancestor type.\n * @callback Visitor\n *   Handle a node (matching `test`, if given).\n *\n *   Visitors are free to transform `node`.\n *   They can also transform `parent`.\n *\n *   Replacing `node` itself, if `SKIP` is not returned, still causes its\n *   descendants to be walked (which is a bug).\n *\n *   When adding or removing previous siblings of `node` (or next siblings, in\n *   case of reverse), the `Visitor` should return a new `Index` to specify the\n *   sibling to traverse after `node` is traversed.\n *   Adding or removing next siblings of `node` (or previous siblings, in case\n *   of reverse) is handled as expected without needing to return a new `Index`.\n *\n *   Removing the children property of `parent` still results in them being\n *   traversed.\n * @param {Visited} node\n *   Found node.\n * @param {Visited extends Node ? number | null : never} index\n *   Index of `node` in `parent`.\n * @param {Ancestor extends Node ? Ancestor | null : never} parent\n *   Parent of `node`.\n * @returns {VisitorResult}\n *   What to do next.\n *\n *   An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n *   An `Action` is treated as a tuple of `[Action]`.\n *\n *   Passing a tuple back only makes sense if the `Action` is `SKIP`.\n *   When the `Action` is `EXIT`, that action can be returned.\n *   When the `Action` is `CONTINUE`, `Index` can be returned.\n */\n\n/**\n * Build a typed `Visitor` function from a node and all possible parents.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n *\n * @template {Node} Visited\n *   Node type.\n * @template {Parent} Ancestor\n *   Parent type.\n * @typedef {Visitor<Visited, ParentsOf<Ancestor, Visited>>} BuildVisitorFromMatch\n */\n\n/**\n * Build a typed `Visitor` function from a list of descendants and a test.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n *\n * @template {Node} Descendant\n *   Node type.\n * @template {Test} Check\n *   Test type.\n * @typedef {(\n *   BuildVisitorFromMatch<\n *     import('unist-util-visit-parents/complex-types.js').Matches<Descendant, Check>,\n *     Extract<Descendant, Parent>\n *   >\n * )} BuildVisitorFromDescendants\n */\n\n/**\n * Build a typed `Visitor` function from a tree and a test.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n *\n * @template {Node} [Tree=Node]\n *   Node type.\n * @template {Test} [Check=string]\n *   Test type.\n * @typedef {(\n *   BuildVisitorFromDescendants<\n *     import('unist-util-visit-parents/complex-types.js').InclusiveDescendant<Tree>,\n *     Check\n *   >\n * )} BuildVisitor\n */\n\nimport {visitParents} from 'unist-util-visit-parents'\n\n/**\n * Visit nodes.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @param tree\n *   Tree to traverse.\n * @param test\n *   `unist-util-is`-compatible test\n * @param visitor\n *   Handle each node.\n * @param reverse\n *   Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns\n *   Nothing.\n */\nexport const visit =\n  /**\n   * @type {(\n   *   (<Tree extends Node, Check extends Test>(tree: Tree, test: Check, visitor: BuildVisitor<Tree, Check>, reverse?: boolean | null | undefined) => void) &\n   *   (<Tree extends Node>(tree: Tree, visitor: BuildVisitor<Tree>, reverse?: boolean | null | undefined) => void)\n   * )}\n   */\n  (\n    /**\n     * @param {Node} tree\n     * @param {Test} test\n     * @param {Visitor} visitor\n     * @param {boolean | null | undefined} [reverse]\n     * @returns {void}\n     */\n    function (tree, test, visitor, reverse) {\n      if (typeof test === 'function' && typeof visitor !== 'function') {\n        reverse = visitor\n        visitor = test\n        test = null\n      }\n\n      visitParents(tree, test, overload, reverse)\n\n      /**\n       * @param {Node} node\n       * @param {Array<Parent>} parents\n       */\n      function overload(node, parents) {\n        const parent = parents[parents.length - 1]\n        return visitor(\n          node,\n          parent ? parent.children.indexOf(node) : null,\n          parent\n        )\n      }\n    }\n  )\n\nexport {CONTINUE, EXIT, SKIP} from 'unist-util-visit-parents'\n", "/**\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n *\n * @typedef NodeLike\n * @property {PositionLike | null | undefined} [position]\n */\n\n/**\n * Check if `node` is generated.\n *\n * @param {NodeLike | null | undefined} [node]\n *   Node to check.\n * @returns {boolean}\n *   Whether `node` is generated (does not have positional info).\n */\nexport function generated(node) {\n  return (\n    !node ||\n    !node.position ||\n    !node.position.start ||\n    !node.position.start.line ||\n    !node.position.start.column ||\n    !node.position.end ||\n    !node.position.end.line ||\n    !node.position.end.column\n  )\n}\n", "/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast').Content} Content\n * @typedef {import('mdast').Definition} Definition\n */\n\n/**\n * @typedef {Root | Content} Node\n *\n * @callback GetDefinition\n *   Get a definition by identifier.\n * @param {string | null | undefined} [identifier]\n *   Identifier of definition.\n * @returns {Definition | null}\n *   Definition corresponding to `identifier` or `null`.\n */\n\nimport {visit} from 'unist-util-visit'\n\nconst own = {}.hasOwnProperty\n\n/**\n * Find definitions in `tree`.\n *\n * Uses CommonMark precedence, which means that earlier definitions are\n * preferred over duplicate later definitions.\n *\n * @param {Node} tree\n *   Tree to check.\n * @returns {GetDefinition}\n *   Getter.\n */\nexport function definitions(tree) {\n  /** @type {Record<string, Definition>} */\n  const cache = Object.create(null)\n\n  if (!tree || !tree.type) {\n    throw new Error('mdast-util-definitions expected node')\n  }\n\n  visit(tree, 'definition', (definition) => {\n    const id = clean(definition.identifier)\n    if (id && !own.call(cache, id)) {\n      cache[id] = definition\n    }\n  })\n\n  return definition\n\n  /** @type {GetDefinition} */\n  function definition(identifier) {\n    const id = clean(identifier)\n    // To do: next major: return `undefined` when not found.\n    return id && own.call(cache, id) ? cache[id] : null\n  }\n}\n\n/**\n * @param {string | null | undefined} [value]\n * @returns {string}\n */\nfunction clean(value) {\n  return String(value || '').toUpperCase()\n}\n", "/**\n * @typedef {import('hast').Content} HastContent\n * @typedef {import('hast').Element} HastElement\n * @typedef {import('hast').ElementContent} HastElementContent\n * @typedef {import('hast').Properties} HastProperties\n * @typedef {import('hast').Root} HastRoot\n * @typedef {import('hast').Text} HastText\n *\n * @typedef {import('mdast').Content} MdastContent\n * @typedef {import('mdast').Definition} MdastDefinition\n * @typedef {import('mdast').FootnoteDefinition} MdastFootnoteDefinition\n * @typedef {import('mdast').Parent} MdastParent\n * @typedef {import('mdast').Root} MdastRoot\n */\n\n/**\n * @typedef {HastRoot | HastContent} HastNodes\n * @typedef {MdastRoot | MdastContent} MdastNodes\n * @typedef {Extract<MdastNodes, MdastParent>} MdastParents\n *\n * @typedef EmbeddedHastFields\n *   hast fields.\n * @property {string | null | undefined} [hName]\n *   Generate a specific element with this tag name instead.\n * @property {HastProperties | null | undefined} [hProperties]\n *   Generate an element with these properties instead.\n * @property {Array<HastElementContent> | null | undefined} [hChildren]\n *   Generate an element with this content instead.\n *\n * @typedef {Record<string, unknown> & EmbeddedHastFields} MdastData\n *   mdast data with embedded hast fields.\n *\n * @typedef {MdastNodes & {data?: MdastData | null | undefined}} MdastNodeWithData\n *   mdast node with embedded hast data.\n *\n * @typedef PointLike\n *   Point-like value.\n * @property {number | null | undefined} [line]\n *   Line.\n * @property {number | null | undefined} [column]\n *   Column.\n * @property {number | null | undefined} [offset]\n *   Offset.\n *\n * @typedef PositionLike\n *   Position-like value.\n * @property {PointLike | null | undefined} [start]\n *   Point-like value.\n * @property {PointLike | null | undefined} [end]\n *   Point-like value.\n *\n * @callback Handler\n *   Handle a node.\n * @param {State} state\n *   Info passed around.\n * @param {any} node\n *   mdast node to handle.\n * @param {MdastParents | null | undefined} parent\n *   Parent of `node`.\n * @returns {HastElementContent | Array<HastElementContent> | null | undefined}\n *   hast node.\n *\n * @callback HFunctionProps\n *   Signature of `state` for when props are passed.\n * @param {MdastNodes | PositionLike | null | undefined} node\n *   mdast node or unist position.\n * @param {string} tagName\n *   HTML tag name.\n * @param {HastProperties} props\n *   Properties.\n * @param {Array<HastElementContent> | null | undefined} [children]\n *   hast content.\n * @returns {HastElement}\n *   Compiled element.\n *\n * @callback HFunctionNoProps\n *   Signature of `state` for when no props are passed.\n * @param {MdastNodes | PositionLike | null | undefined} node\n *   mdast node or unist position.\n * @param {string} tagName\n *   HTML tag name.\n * @param {Array<HastElementContent> | null | undefined} [children]\n *   hast content.\n * @returns {HastElement}\n *   Compiled element.\n *\n * @typedef HFields\n *   Info on `state`.\n * @property {boolean} dangerous\n *   Whether HTML is allowed.\n * @property {string} clobberPrefix\n *   Prefix to use to prevent DOM clobbering.\n * @property {string} footnoteLabel\n *   Label to use to introduce the footnote section.\n * @property {string} footnoteLabelTagName\n *   HTML used for the footnote label.\n * @property {HastProperties} footnoteLabelProperties\n *   Properties on the HTML tag used for the footnote label.\n * @property {string} footnoteBackLabel\n *   Label to use from backreferences back to their footnote call.\n * @property {(identifier: string) => MdastDefinition | null} definition\n *   Definition cache.\n * @property {Record<string, MdastFootnoteDefinition>} footnoteById\n *   Footnote definitions by their identifier.\n * @property {Array<string>} footnoteOrder\n *   Identifiers of order when footnote calls first appear in tree order.\n * @property {Record<string, number>} footnoteCounts\n *   Counts for how often the same footnote was called.\n * @property {Handlers} handlers\n *   Applied handlers.\n * @property {Handler} unknownHandler\n *   Handler for any none not in `passThrough` or otherwise handled.\n * @property {(from: MdastNodes, node: HastNodes) => void} patch\n *   Copy a node\u2019s positional info.\n * @property {<Type extends HastNodes>(from: MdastNodes, to: Type) => Type | HastElement} applyData\n *   Honor the `data` of `from`, and generate an element instead of `node`.\n * @property {(node: MdastNodes, parent: MdastParents | null | undefined) => HastElementContent | Array<HastElementContent> | null | undefined} one\n *   Transform an mdast node to hast.\n * @property {(node: MdastNodes) => Array<HastElementContent>} all\n *   Transform the children of an mdast parent to hast.\n * @property {<Type extends HastContent>(nodes: Array<Type>, loose?: boolean | null | undefined) => Array<Type | HastText>} wrap\n *   Wrap `nodes` with line endings between each node, adds initial/final line endings when `loose`.\n * @property {(left: MdastNodeWithData | PositionLike | null | undefined, right: HastElementContent) => HastElementContent} augment\n *   Like `state` but lower-level and usable on non-elements.\n *   Deprecated: use `patch` and `applyData`.\n * @property {Array<string>} passThrough\n *   List of node types to pass through untouched (except for their children).\n *\n * @typedef Options\n *   Configuration (optional).\n * @property {boolean | null | undefined} [allowDangerousHtml=false]\n *   Whether to persist raw HTML in markdown in the hast tree.\n * @property {string | null | undefined} [clobberPrefix='user-content-']\n *   Prefix to use before the `id` attribute on footnotes to prevent it from\n *   *clobbering*.\n * @property {string | null | undefined} [footnoteBackLabel='Back to content']\n *   Label to use from backreferences back to their footnote call (affects\n *   screen readers).\n * @property {string | null | undefined} [footnoteLabel='Footnotes']\n *   Label to use for the footnotes section (affects screen readers).\n * @property {HastProperties | null | undefined} [footnoteLabelProperties={className: ['sr-only']}]\n *   Properties to use on the footnote label (note that `id: 'footnote-label'`\n *   is always added as footnote calls use it with `aria-describedby` to\n *   provide an accessible label).\n * @property {string | null | undefined} [footnoteLabelTagName='h2']\n *   Tag name to use for the footnote label.\n * @property {Handlers | null | undefined} [handlers]\n *   Extra handlers for nodes.\n * @property {Array<string> | null | undefined} [passThrough]\n *   List of custom mdast node types to pass through (keep) in hast (note that\n *   the node itself is passed, but eventual children are transformed).\n * @property {Handler | null | undefined} [unknownHandler]\n *   Handler for all unknown nodes.\n *\n * @typedef {Record<string, Handler>} Handlers\n *   Handle nodes.\n *\n * @typedef {HFunctionProps & HFunctionNoProps & HFields} State\n *   Info passed around.\n */\n\nimport {visit} from 'unist-util-visit'\nimport {position, pointStart, pointEnd} from 'unist-util-position'\nimport {generated} from 'unist-util-generated'\nimport {definitions} from 'mdast-util-definitions'\nimport {handlers} from './handlers/index.js'\n\nconst own = {}.hasOwnProperty\n\n/**\n * Create `state` from an mdast tree.\n *\n * @param {MdastNodes} tree\n *   mdast node to transform.\n * @param {Options | null | undefined} [options]\n *   Configuration.\n * @returns {State}\n *   `state` function.\n */\nexport function createState(tree, options) {\n  const settings = options || {}\n  const dangerous = settings.allowDangerousHtml || false\n  /** @type {Record<string, MdastFootnoteDefinition>} */\n  const footnoteById = {}\n\n  // To do: next major: add `options` to state, remove:\n  // `dangerous`, `clobberPrefix`, `footnoteLabel`, `footnoteLabelTagName`,\n  // `footnoteLabelProperties`, `footnoteBackLabel`, `passThrough`,\n  // `unknownHandler`.\n\n  // To do: next major: move to `state.options.allowDangerousHtml`.\n  state.dangerous = dangerous\n  // To do: next major: move to `state.options`.\n  state.clobberPrefix =\n    settings.clobberPrefix === undefined || settings.clobberPrefix === null\n      ? 'user-content-'\n      : settings.clobberPrefix\n  // To do: next major: move to `state.options`.\n  state.footnoteLabel = settings.footnoteLabel || 'Footnotes'\n  // To do: next major: move to `state.options`.\n  state.footnoteLabelTagName = settings.footnoteLabelTagName || 'h2'\n  // To do: next major: move to `state.options`.\n  state.footnoteLabelProperties = settings.footnoteLabelProperties || {\n    className: ['sr-only']\n  }\n  // To do: next major: move to `state.options`.\n  state.footnoteBackLabel = settings.footnoteBackLabel || 'Back to content'\n  // To do: next major: move to `state.options`.\n  state.unknownHandler = settings.unknownHandler\n  // To do: next major: move to `state.options`.\n  state.passThrough = settings.passThrough\n\n  state.handlers = {...handlers, ...settings.handlers}\n\n  // To do: next major: replace utility with `definitionById` object, so we\n  // only walk once (as we need footnotes too).\n  state.definition = definitions(tree)\n  state.footnoteById = footnoteById\n  /** @type {Array<string>} */\n  state.footnoteOrder = []\n  /** @type {Record<string, number>} */\n  state.footnoteCounts = {}\n\n  state.patch = patch\n  state.applyData = applyData\n  state.one = oneBound\n  state.all = allBound\n  state.wrap = wrap\n  // To do: next major: remove `augment`.\n  state.augment = augment\n\n  visit(tree, 'footnoteDefinition', (definition) => {\n    const id = String(definition.identifier).toUpperCase()\n\n    // Mimick CM behavior of link definitions.\n    // See: <https://github.com/syntax-tree/mdast-util-definitions/blob/8290999/index.js#L26>.\n    if (!own.call(footnoteById, id)) {\n      footnoteById[id] = definition\n    }\n  })\n\n  // @ts-expect-error Hush, it\u2019s fine!\n  return state\n\n  /**\n   * Finalise the created `right`, a hast node, from `left`, an mdast node.\n   *\n   * @param {MdastNodeWithData | PositionLike | null | undefined} left\n   * @param {HastElementContent} right\n   * @returns {HastElementContent}\n   */\n  /* c8 ignore start */\n  // To do: next major: remove.\n  function augment(left, right) {\n    // Handle `data.hName`, `data.hProperties, `data.hChildren`.\n    if (left && 'data' in left && left.data) {\n      /** @type {MdastData} */\n      const data = left.data\n\n      if (data.hName) {\n        if (right.type !== 'element') {\n          right = {\n            type: 'element',\n            tagName: '',\n            properties: {},\n            children: []\n          }\n        }\n\n        right.tagName = data.hName\n      }\n\n      if (right.type === 'element' && data.hProperties) {\n        right.properties = {...right.properties, ...data.hProperties}\n      }\n\n      if ('children' in right && right.children && data.hChildren) {\n        right.children = data.hChildren\n      }\n    }\n\n    if (left) {\n      const ctx = 'type' in left ? left : {position: left}\n\n      if (!generated(ctx)) {\n        // @ts-expect-error: fine.\n        right.position = {start: pointStart(ctx), end: pointEnd(ctx)}\n      }\n    }\n\n    return right\n  }\n  /* c8 ignore stop */\n\n  /**\n   * Create an element for `node`.\n   *\n   * @type {HFunctionProps}\n   */\n  /* c8 ignore start */\n  // To do: next major: remove.\n  function state(node, tagName, props, children) {\n    if (Array.isArray(props)) {\n      children = props\n      props = {}\n    }\n\n    // @ts-expect-error augmenting an element yields an element.\n    return augment(node, {\n      type: 'element',\n      tagName,\n      properties: props || {},\n      children: children || []\n    })\n  }\n  /* c8 ignore stop */\n\n  /**\n   * Transform an mdast node into a hast node.\n   *\n   * @param {MdastNodes} node\n   *   mdast node.\n   * @param {MdastParents | null | undefined} [parent]\n   *   Parent of `node`.\n   * @returns {HastElementContent | Array<HastElementContent> | null | undefined}\n   *   Resulting hast node.\n   */\n  function oneBound(node, parent) {\n    // @ts-expect-error: that\u2019s a state :)\n    return one(state, node, parent)\n  }\n\n  /**\n   * Transform the children of an mdast node into hast nodes.\n   *\n   * @param {MdastNodes} parent\n   *   mdast node to compile\n   * @returns {Array<HastElementContent>}\n   *   Resulting hast nodes.\n   */\n  function allBound(parent) {\n    // @ts-expect-error: that\u2019s a state :)\n    return all(state, parent)\n  }\n}\n\n/**\n * Copy a node\u2019s positional info.\n *\n * @param {MdastNodes} from\n *   mdast node to copy from.\n * @param {HastNodes} to\n *   hast node to copy into.\n * @returns {void}\n *   Nothing.\n */\nfunction patch(from, to) {\n  if (from.position) to.position = position(from)\n}\n\n/**\n * Honor the `data` of `from` and maybe generate an element instead of `to`.\n *\n * @template {HastNodes} Type\n *   Node type.\n * @param {MdastNodes} from\n *   mdast node to use data from.\n * @param {Type} to\n *   hast node to change.\n * @returns {Type | HastElement}\n *   Nothing.\n */\nfunction applyData(from, to) {\n  /** @type {Type | HastElement} */\n  let result = to\n\n  // Handle `data.hName`, `data.hProperties, `data.hChildren`.\n  if (from && from.data) {\n    const hName = from.data.hName\n    const hChildren = from.data.hChildren\n    const hProperties = from.data.hProperties\n\n    if (typeof hName === 'string') {\n      // Transforming the node resulted in an element with a different name\n      // than wanted:\n      if (result.type === 'element') {\n        result.tagName = hName\n      }\n      // Transforming the node resulted in a non-element, which happens for\n      // raw, text, and root nodes (unless custom handlers are passed).\n      // The intent is likely to keep the content around (otherwise: pass\n      // `hChildren`).\n      else {\n        result = {\n          type: 'element',\n          tagName: hName,\n          properties: {},\n          children: []\n        }\n\n        // To do: next major: take the children from the `root`, or inject the\n        // raw/text/comment or so into the element?\n        // if ('children' in node) {\n        //   // @ts-expect-error: assume `children` are allowed in elements.\n        //   result.children = node.children\n        // } else {\n        //   // @ts-expect-error: assume `node` is allowed in elements.\n        //   result.children.push(node)\n        // }\n      }\n    }\n\n    if (result.type === 'element' && hProperties) {\n      result.properties = {...result.properties, ...hProperties}\n    }\n\n    if (\n      'children' in result &&\n      result.children &&\n      hChildren !== null &&\n      hChildren !== undefined\n    ) {\n      // @ts-expect-error: assume valid children are defined.\n      result.children = hChildren\n    }\n  }\n\n  return result\n}\n\n/**\n * Transform an mdast node into a hast node.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastNodes} node\n *   mdast node.\n * @param {MdastParents | null | undefined} [parent]\n *   Parent of `node`.\n * @returns {HastElementContent | Array<HastElementContent> | null | undefined}\n *   Resulting hast node.\n */\n// To do: next major: do not expose, keep bound.\nexport function one(state, node, parent) {\n  const type = node && node.type\n\n  // Fail on non-nodes.\n  if (!type) {\n    throw new Error('Expected node, got `' + node + '`')\n  }\n\n  if (own.call(state.handlers, type)) {\n    return state.handlers[type](state, node, parent)\n  }\n\n  if (state.passThrough && state.passThrough.includes(type)) {\n    // To do: next major: deep clone.\n    // @ts-expect-error: types of passed through nodes are expected to be added manually.\n    return 'children' in node ? {...node, children: all(state, node)} : node\n  }\n\n  if (state.unknownHandler) {\n    return state.unknownHandler(state, node, parent)\n  }\n\n  return defaultUnknownHandler(state, node)\n}\n\n/**\n * Transform the children of an mdast node into hast nodes.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastNodes} parent\n *   mdast node to compile\n * @returns {Array<HastElementContent>}\n *   Resulting hast nodes.\n */\n// To do: next major: do not expose, keep bound.\nexport function all(state, parent) {\n  /** @type {Array<HastElementContent>} */\n  const values = []\n\n  if ('children' in parent) {\n    const nodes = parent.children\n    let index = -1\n    while (++index < nodes.length) {\n      const result = one(state, nodes[index], parent)\n\n      // To do: see if we van clean this? Can we merge texts?\n      if (result) {\n        if (index && nodes[index - 1].type === 'break') {\n          if (!Array.isArray(result) && result.type === 'text') {\n            result.value = result.value.replace(/^\\s+/, '')\n          }\n\n          if (!Array.isArray(result) && result.type === 'element') {\n            const head = result.children[0]\n\n            if (head && head.type === 'text') {\n              head.value = head.value.replace(/^\\s+/, '')\n            }\n          }\n        }\n\n        if (Array.isArray(result)) {\n          values.push(...result)\n        } else {\n          values.push(result)\n        }\n      }\n    }\n  }\n\n  return values\n}\n\n/**\n * Transform an unknown node.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastNodes} node\n *   Unknown mdast node.\n * @returns {HastText | HastElement}\n *   Resulting hast node.\n */\nfunction defaultUnknownHandler(state, node) {\n  const data = node.data || {}\n  /** @type {HastText | HastElement} */\n  const result =\n    'value' in node &&\n    !(own.call(data, 'hProperties') || own.call(data, 'hChildren'))\n      ? {type: 'text', value: node.value}\n      : {\n          type: 'element',\n          tagName: 'div',\n          properties: {},\n          children: all(state, node)\n        }\n\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n\n/**\n * Wrap `nodes` with line endings between each node.\n *\n * @template {HastContent} Type\n *   Node type.\n * @param {Array<Type>} nodes\n *   List of nodes to wrap.\n * @param {boolean | null | undefined} [loose=false]\n *   Whether to add line endings at start and end.\n * @returns {Array<Type | HastText>}\n *   Wrapped nodes.\n */\nexport function wrap(nodes, loose) {\n  /** @type {Array<Type | HastText>} */\n  const result = []\n  let index = -1\n\n  if (loose) {\n    result.push({type: 'text', value: '\\n'})\n  }\n\n  while (++index < nodes.length) {\n    if (index) result.push({type: 'text', value: '\\n'})\n    result.push(nodes[index])\n  }\n\n  if (loose && nodes.length > 0) {\n    result.push({type: 'text', value: '\\n'})\n  }\n\n  return result\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n *\n * @typedef {import('./state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Generate a hast footer for called footnote definitions.\n *\n * @param {State} state\n *   Info passed around.\n * @returns {Element | undefined}\n *   `section` element or `undefined`.\n */\nexport function footer(state) {\n  /** @type {Array<ElementContent>} */\n  const listItems = []\n  let index = -1\n\n  while (++index < state.footnoteOrder.length) {\n    const def = state.footnoteById[state.footnoteOrder[index]]\n\n    if (!def) {\n      continue\n    }\n\n    const content = state.all(def)\n    const id = String(def.identifier).toUpperCase()\n    const safeId = normalizeUri(id.toLowerCase())\n    let referenceIndex = 0\n    /** @type {Array<ElementContent>} */\n    const backReferences = []\n\n    while (++referenceIndex <= state.footnoteCounts[id]) {\n      /** @type {Element} */\n      const backReference = {\n        type: 'element',\n        tagName: 'a',\n        properties: {\n          href:\n            '#' +\n            state.clobberPrefix +\n            'fnref-' +\n            safeId +\n            (referenceIndex > 1 ? '-' + referenceIndex : ''),\n          dataFootnoteBackref: true,\n          className: ['data-footnote-backref'],\n          ariaLabel: state.footnoteBackLabel\n        },\n        children: [{type: 'text', value: '\u21A9'}]\n      }\n\n      if (referenceIndex > 1) {\n        backReference.children.push({\n          type: 'element',\n          tagName: 'sup',\n          children: [{type: 'text', value: String(referenceIndex)}]\n        })\n      }\n\n      if (backReferences.length > 0) {\n        backReferences.push({type: 'text', value: ' '})\n      }\n\n      backReferences.push(backReference)\n    }\n\n    const tail = content[content.length - 1]\n\n    if (tail && tail.type === 'element' && tail.tagName === 'p') {\n      const tailTail = tail.children[tail.children.length - 1]\n      if (tailTail && tailTail.type === 'text') {\n        tailTail.value += ' '\n      } else {\n        tail.children.push({type: 'text', value: ' '})\n      }\n\n      tail.children.push(...backReferences)\n    } else {\n      content.push(...backReferences)\n    }\n\n    /** @type {Element} */\n    const listItem = {\n      type: 'element',\n      tagName: 'li',\n      properties: {id: state.clobberPrefix + 'fn-' + safeId},\n      children: state.wrap(content, true)\n    }\n\n    state.patch(def, listItem)\n\n    listItems.push(listItem)\n  }\n\n  if (listItems.length === 0) {\n    return\n  }\n\n  return {\n    type: 'element',\n    tagName: 'section',\n    properties: {dataFootnotes: true, className: ['footnotes']},\n    children: [\n      {\n        type: 'element',\n        tagName: state.footnoteLabelTagName,\n        properties: {\n          // To do: use structured clone.\n          ...JSON.parse(JSON.stringify(state.footnoteLabelProperties)),\n          id: 'footnote-label'\n        },\n        children: [{type: 'text', value: state.footnoteLabel}]\n      },\n      {type: 'text', value: '\\n'},\n      {\n        type: 'element',\n        tagName: 'ol',\n        properties: {},\n        children: state.wrap(listItems, true)\n      },\n      {type: 'text', value: '\\n'}\n    ]\n  }\n}\n", "/**\n * @typedef {import('hast').Content} HastContent\n * @typedef {import('hast').Root} HastRoot\n *\n * @typedef {import('mdast').Content} MdastContent\n * @typedef {import('mdast').Root} MdastRoot\n *\n * @typedef {import('./state.js').Options} Options\n */\n\n/**\n * @typedef {HastRoot | HastContent} HastNodes\n * @typedef {MdastRoot | MdastContent} MdastNodes\n */\n\nimport {footer} from './footer.js'\nimport {createState} from './state.js'\n\n/**\n * Transform mdast to hast.\n *\n * ##### Notes\n *\n * ###### HTML\n *\n * Raw HTML is available in mdast as `html` nodes and can be embedded in hast\n * as semistandard `raw` nodes.\n * Most utilities ignore `raw` nodes but two notable ones don\u2019t:\n *\n * *   `hast-util-to-html` also has an option `allowDangerousHtml` which will\n *     output the raw HTML.\n *     This is typically discouraged as noted by the option name but is useful\n *     if you completely trust authors\n * *   `hast-util-raw` can handle the raw embedded HTML strings by parsing them\n *     into standard hast nodes (`element`, `text`, etc).\n *     This is a heavy task as it needs a full HTML parser, but it is the only\n *     way to support untrusted content\n *\n * ###### Footnotes\n *\n * Many options supported here relate to footnotes.\n * Footnotes are not specified by CommonMark, which we follow by default.\n * They are supported by GitHub, so footnotes can be enabled in markdown with\n * `mdast-util-gfm`.\n *\n * The options `footnoteBackLabel` and `footnoteLabel` define natural language\n * that explains footnotes, which is hidden for sighted users but shown to\n * assistive technology.\n * When your page is not in English, you must define translated values.\n *\n * Back references use ARIA attributes, but the section label itself uses a\n * heading that is hidden with an `sr-only` class.\n * To show it to sighted users, define different attributes in\n * `footnoteLabelProperties`.\n *\n * ###### Clobbering\n *\n * Footnotes introduces a problem, as it links footnote calls to footnote\n * definitions on the page through `id` attributes generated from user content,\n * which results in DOM clobbering.\n *\n * DOM clobbering is this:\n *\n * ```html\n * <p id=x></p>\n * <script>alert(x) // `x` now refers to the DOM `p#x` element</script>\n * ```\n *\n * Elements by their ID are made available by browsers on the `window` object,\n * which is a security risk.\n * Using a prefix solves this problem.\n *\n * More information on how to handle clobbering and the prefix is explained in\n * Example: headings (DOM clobbering) in `rehype-sanitize`.\n *\n * ###### Unknown nodes\n *\n * Unknown nodes are nodes with a type that isn\u2019t in `handlers` or `passThrough`.\n * The default behavior for unknown nodes is:\n *\n * *   when the node has a `value` (and doesn\u2019t have `data.hName`,\n *     `data.hProperties`, or `data.hChildren`, see later), create a hast `text`\n *     node\n * *   otherwise, create a `<div>` element (which could be changed with\n *     `data.hName`), with its children mapped from mdast to hast as well\n *\n * This behavior can be changed by passing an `unknownHandler`.\n *\n * @param {MdastNodes} tree\n *   mdast tree.\n * @param {Options | null | undefined} [options]\n *   Configuration.\n * @returns {HastNodes | null | undefined}\n *   hast tree.\n */\n// To do: next major: always return a single `root`.\nexport function toHast(tree, options) {\n  const state = createState(tree, options)\n  const node = state.one(tree, null)\n  const foot = footer(state)\n\n  if (foot) {\n    // @ts-expect-error If there\u2019s a footer, there were definitions, meaning block\n    // content.\n    // So assume `node` is a parent node.\n    node.children.push({type: 'text', value: '\\n'}, foot)\n  }\n\n  // To do: next major: always return root?\n  return Array.isArray(node) ? {type: 'root', children: node} : node\n}\n", "/**\n * @typedef {import('hast').Root} HastRoot\n * @typedef {import('mdast').Root} MdastRoot\n * @typedef {import('mdast-util-to-hast').Options} Options\n * @typedef {import('unified').Processor<any, any, any, any>} Processor\n *\n * @typedef {import('mdast-util-to-hast')} DoNotTouchAsThisImportIncludesRawInTree\n */\n\nimport {toHast} from 'mdast-util-to-hast'\n\n// Note: the `<MdastRoot, HastRoot>` overload doesn\u2019t seem to work :'(\n\n/**\n * Plugin that turns markdown into HTML to support rehype.\n *\n * *   If a destination processor is given, that processor runs with a new HTML\n *     (hast) tree (bridge-mode).\n *     As the given processor runs with a hast tree, and rehype plugins support\n *     hast, that means rehype plugins can be used with the given processor.\n *     The hast tree is discarded in the end.\n *     It\u2019s highly unlikely that you want to do this.\n * *   The common case is to not pass a destination processor, in which case the\n *     current processor continues running with a new HTML (hast) tree\n *     (mutate-mode).\n *     As the current processor continues with a hast tree, and rehype plugins\n *     support hast, that means rehype plugins can be used after\n *     `remark-rehype`.\n *     It\u2019s likely that this is what you want to do.\n *\n * @param destination\n *   Optional unified processor.\n * @param options\n *   Options passed to `mdast-util-to-hast`.\n */\nconst remarkRehype =\n  /** @type {(import('unified').Plugin<[Processor, Options?]|[null|undefined, Options?]|[Options]|[], MdastRoot>)} */\n  (\n    function (destination, options) {\n      return destination && 'run' in destination\n        ? bridge(destination, options)\n        : mutate(destination || options)\n    }\n  )\n\nexport default remarkRehype\n\n/**\n * Bridge-mode.\n * Runs the destination with the new hast tree.\n *\n * @type {import('unified').Plugin<[Processor, Options?], MdastRoot>}\n */\nfunction bridge(destination, options) {\n  return (node, file, next) => {\n    destination.run(toHast(node, options), file, (error) => {\n      next(error)\n    })\n  }\n}\n\n/**\n * Mutate-mode.\n * Further plugins run on the hast tree.\n *\n * @type {import('unified').Plugin<[Options?]|void[], MdastRoot, HastRoot>}\n */\nfunction mutate(options) {\n  // @ts-expect-error: assume a corresponding node is returned by `toHast`.\n  return (node) => toHast(node, options)\n}\n", "/**\n * @typedef {import('./info.js').Info} Info\n * @typedef {Record<string, Info>} Properties\n * @typedef {Record<string, string>} Normal\n */\n\nexport class Schema {\n  /**\n   * @constructor\n   * @param {Properties} property\n   * @param {Normal} normal\n   * @param {string} [space]\n   */\n  constructor(property, normal, space) {\n    this.property = property\n    this.normal = normal\n    if (space) {\n      this.space = space\n    }\n  }\n}\n\n/** @type {Properties} */\nSchema.prototype.property = {}\n/** @type {Normal} */\nSchema.prototype.normal = {}\n/** @type {string|null} */\nSchema.prototype.space = null\n", "/**\n * @typedef {import('./schema.js').Properties} Properties\n * @typedef {import('./schema.js').Normal} Normal\n */\n\nimport {Schema} from './schema.js'\n\n/**\n * @param {Schema[]} definitions\n * @param {string} [space]\n * @returns {Schema}\n */\nexport function merge(definitions, space) {\n  /** @type {Properties} */\n  const property = {}\n  /** @type {Normal} */\n  const normal = {}\n  let index = -1\n\n  while (++index < definitions.length) {\n    Object.assign(property, definitions[index].property)\n    Object.assign(normal, definitions[index].normal)\n  }\n\n  return new Schema(property, normal, space)\n}\n", "/**\n * @param {string} value\n * @returns {string}\n */\nexport function normalize(value) {\n  return value.toLowerCase()\n}\n", "export class Info {\n  /**\n   * @constructor\n   * @param {string} property\n   * @param {string} attribute\n   */\n  constructor(property, attribute) {\n    /** @type {string} */\n    this.property = property\n    /** @type {string} */\n    this.attribute = attribute\n  }\n}\n\n/** @type {string|null} */\nInfo.prototype.space = null\nInfo.prototype.boolean = false\nInfo.prototype.booleanish = false\nInfo.prototype.overloadedBoolean = false\nInfo.prototype.number = false\nInfo.prototype.commaSeparated = false\nInfo.prototype.spaceSeparated = false\nInfo.prototype.commaOrSpaceSeparated = false\nInfo.prototype.mustUseProperty = false\nInfo.prototype.defined = false\n", "let powers = 0\n\nexport const boolean = increment()\nexport const booleanish = increment()\nexport const overloadedBoolean = increment()\nexport const number = increment()\nexport const spaceSeparated = increment()\nexport const commaSeparated = increment()\nexport const commaOrSpaceSeparated = increment()\n\nfunction increment() {\n  return 2 ** ++powers\n}\n", "import {Info} from './info.js'\nimport * as types from './types.js'\n\n/** @type {Array<keyof types>} */\n// @ts-expect-error: hush.\nconst checks = Object.keys(types)\n\nexport class DefinedInfo extends Info {\n  /**\n   * @constructor\n   * @param {string} property\n   * @param {string} attribute\n   * @param {number|null} [mask]\n   * @param {string} [space]\n   */\n  constructor(property, attribute, mask, space) {\n    let index = -1\n\n    super(property, attribute)\n\n    mark(this, 'space', space)\n\n    if (typeof mask === 'number') {\n      while (++index < checks.length) {\n        const check = checks[index]\n        mark(this, checks[index], (mask & types[check]) === types[check])\n      }\n    }\n  }\n}\n\nDefinedInfo.prototype.defined = true\n\n/**\n * @param {DefinedInfo} values\n * @param {string} key\n * @param {unknown} value\n */\nfunction mark(values, key, value) {\n  if (value) {\n    // @ts-expect-error: assume `value` matches the expected value of `key`.\n    values[key] = value\n  }\n}\n", "/**\n * @typedef {import('./schema.js').Properties} Properties\n * @typedef {import('./schema.js').Normal} Normal\n *\n * @typedef {Record<string, string>} Attributes\n *\n * @typedef {Object} Definition\n * @property {Record<string, number|null>} properties\n * @property {(attributes: Attributes, property: string) => string} transform\n * @property {string} [space]\n * @property {Attributes} [attributes]\n * @property {Array<string>} [mustUseProperty]\n */\n\nimport {normalize} from '../normalize.js'\nimport {Schema} from './schema.js'\nimport {DefinedInfo} from './defined-info.js'\n\nconst own = {}.hasOwnProperty\n\n/**\n * @param {Definition} definition\n * @returns {Schema}\n */\nexport function create(definition) {\n  /** @type {Properties} */\n  const property = {}\n  /** @type {Normal} */\n  const normal = {}\n  /** @type {string} */\n  let prop\n\n  for (prop in definition.properties) {\n    if (own.call(definition.properties, prop)) {\n      const value = definition.properties[prop]\n      const info = new DefinedInfo(\n        prop,\n        definition.transform(definition.attributes || {}, prop),\n        value,\n        definition.space\n      )\n\n      if (\n        definition.mustUseProperty &&\n        definition.mustUseProperty.includes(prop)\n      ) {\n        info.mustUseProperty = true\n      }\n\n      property[prop] = info\n\n      normal[normalize(prop)] = prop\n      normal[normalize(info.attribute)] = prop\n    }\n  }\n\n  return new Schema(property, normal, definition.space)\n}\n", "import {create} from './util/create.js'\n\nexport const xlink = create({\n  space: 'xlink',\n  transform(_, prop) {\n    return 'xlink:' + prop.slice(5).toLowerCase()\n  },\n  properties: {\n    xLinkActuate: null,\n    xLinkArcRole: null,\n    xLinkHref: null,\n    xLinkRole: null,\n    xLinkShow: null,\n    xLinkTitle: null,\n    xLinkType: null\n  }\n})\n", "import {create} from './util/create.js'\n\nexport const xml = create({\n  space: 'xml',\n  transform(_, prop) {\n    return 'xml:' + prop.slice(3).toLowerCase()\n  },\n  properties: {xmlLang: null, xmlBase: null, xmlSpace: null}\n})\n", "/**\n * @param {Record<string, string>} attributes\n * @param {string} attribute\n * @returns {string}\n */\nexport function caseSensitiveTransform(attributes, attribute) {\n  return attribute in attributes ? attributes[attribute] : attribute\n}\n", "import {caseSensitiveTransform} from './case-sensitive-transform.js'\n\n/**\n * @param {Record<string, string>} attributes\n * @param {string} property\n * @returns {string}\n */\nexport function caseInsensitiveTransform(attributes, property) {\n  return caseSensitiveTransform(attributes, property.toLowerCase())\n}\n", "import {create} from './util/create.js'\nimport {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\n\nexport const xmlns = create({\n  space: 'xmlns',\n  attributes: {xmlnsxlink: 'xmlns:xlink'},\n  transform: caseInsensitiveTransform,\n  properties: {xmlns: null, xmlnsXLink: null}\n})\n", "import {booleanish, number, spaceSeparated} from './util/types.js'\nimport {create} from './util/create.js'\n\nexport const aria = create({\n  transform(_, prop) {\n    return prop === 'role' ? prop : 'aria-' + prop.slice(4).toLowerCase()\n  },\n  properties: {\n    ariaActiveDescendant: null,\n    ariaAtomic: booleanish,\n    ariaAutoComplete: null,\n    ariaBusy: booleanish,\n    ariaChecked: booleanish,\n    ariaColCount: number,\n    ariaColIndex: number,\n    ariaColSpan: number,\n    ariaControls: spaceSeparated,\n    ariaCurrent: null,\n    ariaDescribedBy: spaceSeparated,\n    ariaDetails: null,\n    ariaDisabled: booleanish,\n    ariaDropEffect: spaceSeparated,\n    ariaErrorMessage: null,\n    ariaExpanded: booleanish,\n    ariaFlowTo: spaceSeparated,\n    ariaGrabbed: booleanish,\n    ariaHasPopup: null,\n    ariaHidden: booleanish,\n    ariaInvalid: null,\n    ariaKeyShortcuts: null,\n    ariaLabel: null,\n    ariaLabelledBy: spaceSeparated,\n    ariaLevel: number,\n    ariaLive: null,\n    ariaModal: booleanish,\n    ariaMultiLine: booleanish,\n    ariaMultiSelectable: booleanish,\n    ariaOrientation: null,\n    ariaOwns: spaceSeparated,\n    ariaPlaceholder: null,\n    ariaPosInSet: number,\n    ariaPressed: booleanish,\n    ariaReadOnly: booleanish,\n    ariaRelevant: null,\n    ariaRequired: booleanish,\n    ariaRoleDescription: spaceSeparated,\n    ariaRowCount: number,\n    ariaRowIndex: number,\n    ariaRowSpan: number,\n    ariaSelected: booleanish,\n    ariaSetSize: number,\n    ariaSort: null,\n    ariaValueMax: number,\n    ariaValueMin: number,\n    ariaValueNow: number,\n    ariaValueText: null,\n    role: null\n  }\n})\n", "import {\n  boolean,\n  overloadedBoolean,\n  booleanish,\n  number,\n  spaceSeparated,\n  commaSeparated\n} from './util/types.js'\nimport {create} from './util/create.js'\nimport {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\n\nexport const html = create({\n  space: 'html',\n  attributes: {\n    acceptcharset: 'accept-charset',\n    classname: 'class',\n    htmlfor: 'for',\n    httpequiv: 'http-equiv'\n  },\n  transform: caseInsensitiveTransform,\n  mustUseProperty: ['checked', 'multiple', 'muted', 'selected'],\n  properties: {\n    // Standard Properties.\n    abbr: null,\n    accept: commaSeparated,\n    acceptCharset: spaceSeparated,\n    accessKey: spaceSeparated,\n    action: null,\n    allow: null,\n    allowFullScreen: boolean,\n    allowPaymentRequest: boolean,\n    allowUserMedia: boolean,\n    alt: null,\n    as: null,\n    async: boolean,\n    autoCapitalize: null,\n    autoComplete: spaceSeparated,\n    autoFocus: boolean,\n    autoPlay: boolean,\n    blocking: spaceSeparated,\n    capture: null,\n    charSet: null,\n    checked: boolean,\n    cite: null,\n    className: spaceSeparated,\n    cols: number,\n    colSpan: null,\n    content: null,\n    contentEditable: booleanish,\n    controls: boolean,\n    controlsList: spaceSeparated,\n    coords: number | commaSeparated,\n    crossOrigin: null,\n    data: null,\n    dateTime: null,\n    decoding: null,\n    default: boolean,\n    defer: boolean,\n    dir: null,\n    dirName: null,\n    disabled: boolean,\n    download: overloadedBoolean,\n    draggable: booleanish,\n    encType: null,\n    enterKeyHint: null,\n    fetchPriority: null,\n    form: null,\n    formAction: null,\n    formEncType: null,\n    formMethod: null,\n    formNoValidate: boolean,\n    formTarget: null,\n    headers: spaceSeparated,\n    height: number,\n    hidden: boolean,\n    high: number,\n    href: null,\n    hrefLang: null,\n    htmlFor: spaceSeparated,\n    httpEquiv: spaceSeparated,\n    id: null,\n    imageSizes: null,\n    imageSrcSet: null,\n    inert: boolean,\n    inputMode: null,\n    integrity: null,\n    is: null,\n    isMap: boolean,\n    itemId: null,\n    itemProp: spaceSeparated,\n    itemRef: spaceSeparated,\n    itemScope: boolean,\n    itemType: spaceSeparated,\n    kind: null,\n    label: null,\n    lang: null,\n    language: null,\n    list: null,\n    loading: null,\n    loop: boolean,\n    low: number,\n    manifest: null,\n    max: null,\n    maxLength: number,\n    media: null,\n    method: null,\n    min: null,\n    minLength: number,\n    multiple: boolean,\n    muted: boolean,\n    name: null,\n    nonce: null,\n    noModule: boolean,\n    noValidate: boolean,\n    onAbort: null,\n    onAfterPrint: null,\n    onAuxClick: null,\n    onBeforeMatch: null,\n    onBeforePrint: null,\n    onBeforeToggle: null,\n    onBeforeUnload: null,\n    onBlur: null,\n    onCancel: null,\n    onCanPlay: null,\n    onCanPlayThrough: null,\n    onChange: null,\n    onClick: null,\n    onClose: null,\n    onContextLost: null,\n    onContextMenu: null,\n    onContextRestored: null,\n    onCopy: null,\n    onCueChange: null,\n    onCut: null,\n    onDblClick: null,\n    onDrag: null,\n    onDragEnd: null,\n    onDragEnter: null,\n    onDragExit: null,\n    onDragLeave: null,\n    onDragOver: null,\n    onDragStart: null,\n    onDrop: null,\n    onDurationChange: null,\n    onEmptied: null,\n    onEnded: null,\n    onError: null,\n    onFocus: null,\n    onFormData: null,\n    onHashChange: null,\n    onInput: null,\n    onInvalid: null,\n    onKeyDown: null,\n    onKeyPress: null,\n    onKeyUp: null,\n    onLanguageChange: null,\n    onLoad: null,\n    onLoadedData: null,\n    onLoadedMetadata: null,\n    onLoadEnd: null,\n    onLoadStart: null,\n    onMessage: null,\n    onMessageError: null,\n    onMouseDown: null,\n    onMouseEnter: null,\n    onMouseLeave: null,\n    onMouseMove: null,\n    onMouseOut: null,\n    onMouseOver: null,\n    onMouseUp: null,\n    onOffline: null,\n    onOnline: null,\n    onPageHide: null,\n    onPageShow: null,\n    onPaste: null,\n    onPause: null,\n    onPlay: null,\n    onPlaying: null,\n    onPopState: null,\n    onProgress: null,\n    onRateChange: null,\n    onRejectionHandled: null,\n    onReset: null,\n    onResize: null,\n    onScroll: null,\n    onScrollEnd: null,\n    onSecurityPolicyViolation: null,\n    onSeeked: null,\n    onSeeking: null,\n    onSelect: null,\n    onSlotChange: null,\n    onStalled: null,\n    onStorage: null,\n    onSubmit: null,\n    onSuspend: null,\n    onTimeUpdate: null,\n    onToggle: null,\n    onUnhandledRejection: null,\n    onUnload: null,\n    onVolumeChange: null,\n    onWaiting: null,\n    onWheel: null,\n    open: boolean,\n    optimum: number,\n    pattern: null,\n    ping: spaceSeparated,\n    placeholder: null,\n    playsInline: boolean,\n    popover: null,\n    popoverTarget: null,\n    popoverTargetAction: null,\n    poster: null,\n    preload: null,\n    readOnly: boolean,\n    referrerPolicy: null,\n    rel: spaceSeparated,\n    required: boolean,\n    reversed: boolean,\n    rows: number,\n    rowSpan: number,\n    sandbox: spaceSeparated,\n    scope: null,\n    scoped: boolean,\n    seamless: boolean,\n    selected: boolean,\n    shadowRootClonable: boolean,\n    shadowRootDelegatesFocus: boolean,\n    shadowRootMode: null,\n    shape: null,\n    size: number,\n    sizes: null,\n    slot: null,\n    span: number,\n    spellCheck: booleanish,\n    src: null,\n    srcDoc: null,\n    srcLang: null,\n    srcSet: null,\n    start: number,\n    step: null,\n    style: null,\n    tabIndex: number,\n    target: null,\n    title: null,\n    translate: null,\n    type: null,\n    typeMustMatch: boolean,\n    useMap: null,\n    value: booleanish,\n    width: number,\n    wrap: null,\n    writingSuggestions: null,\n\n    // Legacy.\n    // See: https://html.spec.whatwg.org/#other-elements,-attributes-and-apis\n    align: null, // Several. Use CSS `text-align` instead,\n    aLink: null, // `<body>`. Use CSS `a:active {color}` instead\n    archive: spaceSeparated, // `<object>`. List of URIs to archives\n    axis: null, // `<td>` and `<th>`. Use `scope` on `<th>`\n    background: null, // `<body>`. Use CSS `background-image` instead\n    bgColor: null, // `<body>` and table elements. Use CSS `background-color` instead\n    border: number, // `<table>`. Use CSS `border-width` instead,\n    borderColor: null, // `<table>`. Use CSS `border-color` instead,\n    bottomMargin: number, // `<body>`\n    cellPadding: null, // `<table>`\n    cellSpacing: null, // `<table>`\n    char: null, // Several table elements. When `align=char`, sets the character to align on\n    charOff: null, // Several table elements. When `char`, offsets the alignment\n    classId: null, // `<object>`\n    clear: null, // `<br>`. Use CSS `clear` instead\n    code: null, // `<object>`\n    codeBase: null, // `<object>`\n    codeType: null, // `<object>`\n    color: null, // `<font>` and `<hr>`. Use CSS instead\n    compact: boolean, // Lists. Use CSS to reduce space between items instead\n    declare: boolean, // `<object>`\n    event: null, // `<script>`\n    face: null, // `<font>`. Use CSS instead\n    frame: null, // `<table>`\n    frameBorder: null, // `<iframe>`. Use CSS `border` instead\n    hSpace: number, // `<img>` and `<object>`\n    leftMargin: number, // `<body>`\n    link: null, // `<body>`. Use CSS `a:link {color: *}` instead\n    longDesc: null, // `<frame>`, `<iframe>`, and `<img>`. Use an `<a>`\n    lowSrc: null, // `<img>`. Use a `<picture>`\n    marginHeight: number, // `<body>`\n    marginWidth: number, // `<body>`\n    noResize: boolean, // `<frame>`\n    noHref: boolean, // `<area>`. Use no href instead of an explicit `nohref`\n    noShade: boolean, // `<hr>`. Use background-color and height instead of borders\n    noWrap: boolean, // `<td>` and `<th>`\n    object: null, // `<applet>`\n    profile: null, // `<head>`\n    prompt: null, // `<isindex>`\n    rev: null, // `<link>`\n    rightMargin: number, // `<body>`\n    rules: null, // `<table>`\n    scheme: null, // `<meta>`\n    scrolling: booleanish, // `<frame>`. Use overflow in the child context\n    standby: null, // `<object>`\n    summary: null, // `<table>`\n    text: null, // `<body>`. Use CSS `color` instead\n    topMargin: number, // `<body>`\n    valueType: null, // `<param>`\n    version: null, // `<html>`. Use a doctype.\n    vAlign: null, // Several. Use CSS `vertical-align` instead\n    vLink: null, // `<body>`. Use CSS `a:visited {color}` instead\n    vSpace: number, // `<img>` and `<object>`\n\n    // Non-standard Properties.\n    allowTransparency: null,\n    autoCorrect: null,\n    autoSave: null,\n    disablePictureInPicture: boolean,\n    disableRemotePlayback: boolean,\n    prefix: null,\n    property: null,\n    results: number,\n    security: null,\n    unselectable: null\n  }\n})\n", "import {\n  boolean,\n  number,\n  spaceSeparated,\n  commaSeparated,\n  commaOrSpaceSeparated\n} from './util/types.js'\nimport {create} from './util/create.js'\nimport {caseSensitiveTransform} from './util/case-sensitive-transform.js'\n\nexport const svg = create({\n  space: 'svg',\n  attributes: {\n    accentHeight: 'accent-height',\n    alignmentBaseline: 'alignment-baseline',\n    arabicForm: 'arabic-form',\n    baselineShift: 'baseline-shift',\n    capHeight: 'cap-height',\n    className: 'class',\n    clipPath: 'clip-path',\n    clipRule: 'clip-rule',\n    colorInterpolation: 'color-interpolation',\n    colorInterpolationFilters: 'color-interpolation-filters',\n    colorProfile: 'color-profile',\n    colorRendering: 'color-rendering',\n    crossOrigin: 'crossorigin',\n    dataType: 'datatype',\n    dominantBaseline: 'dominant-baseline',\n    enableBackground: 'enable-background',\n    fillOpacity: 'fill-opacity',\n    fillRule: 'fill-rule',\n    floodColor: 'flood-color',\n    floodOpacity: 'flood-opacity',\n    fontFamily: 'font-family',\n    fontSize: 'font-size',\n    fontSizeAdjust: 'font-size-adjust',\n    fontStretch: 'font-stretch',\n    fontStyle: 'font-style',\n    fontVariant: 'font-variant',\n    fontWeight: 'font-weight',\n    glyphName: 'glyph-name',\n    glyphOrientationHorizontal: 'glyph-orientation-horizontal',\n    glyphOrientationVertical: 'glyph-orientation-vertical',\n    hrefLang: 'hreflang',\n    horizAdvX: 'horiz-adv-x',\n    horizOriginX: 'horiz-origin-x',\n    horizOriginY: 'horiz-origin-y',\n    imageRendering: 'image-rendering',\n    letterSpacing: 'letter-spacing',\n    lightingColor: 'lighting-color',\n    markerEnd: 'marker-end',\n    markerMid: 'marker-mid',\n    markerStart: 'marker-start',\n    navDown: 'nav-down',\n    navDownLeft: 'nav-down-left',\n    navDownRight: 'nav-down-right',\n    navLeft: 'nav-left',\n    navNext: 'nav-next',\n    navPrev: 'nav-prev',\n    navRight: 'nav-right',\n    navUp: 'nav-up',\n    navUpLeft: 'nav-up-left',\n    navUpRight: 'nav-up-right',\n    onAbort: 'onabort',\n    onActivate: 'onactivate',\n    onAfterPrint: 'onafterprint',\n    onBeforePrint: 'onbeforeprint',\n    onBegin: 'onbegin',\n    onCancel: 'oncancel',\n    onCanPlay: 'oncanplay',\n    onCanPlayThrough: 'oncanplaythrough',\n    onChange: 'onchange',\n    onClick: 'onclick',\n    onClose: 'onclose',\n    onCopy: 'oncopy',\n    onCueChange: 'oncuechange',\n    onCut: 'oncut',\n    onDblClick: 'ondblclick',\n    onDrag: 'ondrag',\n    onDragEnd: 'ondragend',\n    onDragEnter: 'ondragenter',\n    onDragExit: 'ondragexit',\n    onDragLeave: 'ondragleave',\n    onDragOver: 'ondragover',\n    onDragStart: 'ondragstart',\n    onDrop: 'ondrop',\n    onDurationChange: 'ondurationchange',\n    onEmptied: 'onemptied',\n    onEnd: 'onend',\n    onEnded: 'onended',\n    onError: 'onerror',\n    onFocus: 'onfocus',\n    onFocusIn: 'onfocusin',\n    onFocusOut: 'onfocusout',\n    onHashChange: 'onhashchange',\n    onInput: 'oninput',\n    onInvalid: 'oninvalid',\n    onKeyDown: 'onkeydown',\n    onKeyPress: 'onkeypress',\n    onKeyUp: 'onkeyup',\n    onLoad: 'onload',\n    onLoadedData: 'onloadeddata',\n    onLoadedMetadata: 'onloadedmetadata',\n    onLoadStart: 'onloadstart',\n    onMessage: 'onmessage',\n    onMouseDown: 'onmousedown',\n    onMouseEnter: 'onmouseenter',\n    onMouseLeave: 'onmouseleave',\n    onMouseMove: 'onmousemove',\n    onMouseOut: 'onmouseout',\n    onMouseOver: 'onmouseover',\n    onMouseUp: 'onmouseup',\n    onMouseWheel: 'onmousewheel',\n    onOffline: 'onoffline',\n    onOnline: 'ononline',\n    onPageHide: 'onpagehide',\n    onPageShow: 'onpageshow',\n    onPaste: 'onpaste',\n    onPause: 'onpause',\n    onPlay: 'onplay',\n    onPlaying: 'onplaying',\n    onPopState: 'onpopstate',\n    onProgress: 'onprogress',\n    onRateChange: 'onratechange',\n    onRepeat: 'onrepeat',\n    onReset: 'onreset',\n    onResize: 'onresize',\n    onScroll: 'onscroll',\n    onSeeked: 'onseeked',\n    onSeeking: 'onseeking',\n    onSelect: 'onselect',\n    onShow: 'onshow',\n    onStalled: 'onstalled',\n    onStorage: 'onstorage',\n    onSubmit: 'onsubmit',\n    onSuspend: 'onsuspend',\n    onTimeUpdate: 'ontimeupdate',\n    onToggle: 'ontoggle',\n    onUnload: 'onunload',\n    onVolumeChange: 'onvolumechange',\n    onWaiting: 'onwaiting',\n    onZoom: 'onzoom',\n    overlinePosition: 'overline-position',\n    overlineThickness: 'overline-thickness',\n    paintOrder: 'paint-order',\n    panose1: 'panose-1',\n    pointerEvents: 'pointer-events',\n    referrerPolicy: 'referrerpolicy',\n    renderingIntent: 'rendering-intent',\n    shapeRendering: 'shape-rendering',\n    stopColor: 'stop-color',\n    stopOpacity: 'stop-opacity',\n    strikethroughPosition: 'strikethrough-position',\n    strikethroughThickness: 'strikethrough-thickness',\n    strokeDashArray: 'stroke-dasharray',\n    strokeDashOffset: 'stroke-dashoffset',\n    strokeLineCap: 'stroke-linecap',\n    strokeLineJoin: 'stroke-linejoin',\n    strokeMiterLimit: 'stroke-miterlimit',\n    strokeOpacity: 'stroke-opacity',\n    strokeWidth: 'stroke-width',\n    tabIndex: 'tabindex',\n    textAnchor: 'text-anchor',\n    textDecoration: 'text-decoration',\n    textRendering: 'text-rendering',\n    transformOrigin: 'transform-origin',\n    typeOf: 'typeof',\n    underlinePosition: 'underline-position',\n    underlineThickness: 'underline-thickness',\n    unicodeBidi: 'unicode-bidi',\n    unicodeRange: 'unicode-range',\n    unitsPerEm: 'units-per-em',\n    vAlphabetic: 'v-alphabetic',\n    vHanging: 'v-hanging',\n    vIdeographic: 'v-ideographic',\n    vMathematical: 'v-mathematical',\n    vectorEffect: 'vector-effect',\n    vertAdvY: 'vert-adv-y',\n    vertOriginX: 'vert-origin-x',\n    vertOriginY: 'vert-origin-y',\n    wordSpacing: 'word-spacing',\n    writingMode: 'writing-mode',\n    xHeight: 'x-height',\n    // These were camelcased in Tiny. Now lowercased in SVG 2\n    playbackOrder: 'playbackorder',\n    timelineBegin: 'timelinebegin'\n  },\n  transform: caseSensitiveTransform,\n  properties: {\n    about: commaOrSpaceSeparated,\n    accentHeight: number,\n    accumulate: null,\n    additive: null,\n    alignmentBaseline: null,\n    alphabetic: number,\n    amplitude: number,\n    arabicForm: null,\n    ascent: number,\n    attributeName: null,\n    attributeType: null,\n    azimuth: number,\n    bandwidth: null,\n    baselineShift: null,\n    baseFrequency: null,\n    baseProfile: null,\n    bbox: null,\n    begin: null,\n    bias: number,\n    by: null,\n    calcMode: null,\n    capHeight: number,\n    className: spaceSeparated,\n    clip: null,\n    clipPath: null,\n    clipPathUnits: null,\n    clipRule: null,\n    color: null,\n    colorInterpolation: null,\n    colorInterpolationFilters: null,\n    colorProfile: null,\n    colorRendering: null,\n    content: null,\n    contentScriptType: null,\n    contentStyleType: null,\n    crossOrigin: null,\n    cursor: null,\n    cx: null,\n    cy: null,\n    d: null,\n    dataType: null,\n    defaultAction: null,\n    descent: number,\n    diffuseConstant: number,\n    direction: null,\n    display: null,\n    dur: null,\n    divisor: number,\n    dominantBaseline: null,\n    download: boolean,\n    dx: null,\n    dy: null,\n    edgeMode: null,\n    editable: null,\n    elevation: number,\n    enableBackground: null,\n    end: null,\n    event: null,\n    exponent: number,\n    externalResourcesRequired: null,\n    fill: null,\n    fillOpacity: number,\n    fillRule: null,\n    filter: null,\n    filterRes: null,\n    filterUnits: null,\n    floodColor: null,\n    floodOpacity: null,\n    focusable: null,\n    focusHighlight: null,\n    fontFamily: null,\n    fontSize: null,\n    fontSizeAdjust: null,\n    fontStretch: null,\n    fontStyle: null,\n    fontVariant: null,\n    fontWeight: null,\n    format: null,\n    fr: null,\n    from: null,\n    fx: null,\n    fy: null,\n    g1: commaSeparated,\n    g2: commaSeparated,\n    glyphName: commaSeparated,\n    glyphOrientationHorizontal: null,\n    glyphOrientationVertical: null,\n    glyphRef: null,\n    gradientTransform: null,\n    gradientUnits: null,\n    handler: null,\n    hanging: number,\n    hatchContentUnits: null,\n    hatchUnits: null,\n    height: null,\n    href: null,\n    hrefLang: null,\n    horizAdvX: number,\n    horizOriginX: number,\n    horizOriginY: number,\n    id: null,\n    ideographic: number,\n    imageRendering: null,\n    initialVisibility: null,\n    in: null,\n    in2: null,\n    intercept: number,\n    k: number,\n    k1: number,\n    k2: number,\n    k3: number,\n    k4: number,\n    kernelMatrix: commaOrSpaceSeparated,\n    kernelUnitLength: null,\n    keyPoints: null, // SEMI_COLON_SEPARATED\n    keySplines: null, // SEMI_COLON_SEPARATED\n    keyTimes: null, // SEMI_COLON_SEPARATED\n    kerning: null,\n    lang: null,\n    lengthAdjust: null,\n    letterSpacing: null,\n    lightingColor: null,\n    limitingConeAngle: number,\n    local: null,\n    markerEnd: null,\n    markerMid: null,\n    markerStart: null,\n    markerHeight: null,\n    markerUnits: null,\n    markerWidth: null,\n    mask: null,\n    maskContentUnits: null,\n    maskUnits: null,\n    mathematical: null,\n    max: null,\n    media: null,\n    mediaCharacterEncoding: null,\n    mediaContentEncodings: null,\n    mediaSize: number,\n    mediaTime: null,\n    method: null,\n    min: null,\n    mode: null,\n    name: null,\n    navDown: null,\n    navDownLeft: null,\n    navDownRight: null,\n    navLeft: null,\n    navNext: null,\n    navPrev: null,\n    navRight: null,\n    navUp: null,\n    navUpLeft: null,\n    navUpRight: null,\n    numOctaves: null,\n    observer: null,\n    offset: null,\n    onAbort: null,\n    onActivate: null,\n    onAfterPrint: null,\n    onBeforePrint: null,\n    onBegin: null,\n    onCancel: null,\n    onCanPlay: null,\n    onCanPlayThrough: null,\n    onChange: null,\n    onClick: null,\n    onClose: null,\n    onCopy: null,\n    onCueChange: null,\n    onCut: null,\n    onDblClick: null,\n    onDrag: null,\n    onDragEnd: null,\n    onDragEnter: null,\n    onDragExit: null,\n    onDragLeave: null,\n    onDragOver: null,\n    onDragStart: null,\n    onDrop: null,\n    onDurationChange: null,\n    onEmptied: null,\n    onEnd: null,\n    onEnded: null,\n    onError: null,\n    onFocus: null,\n    onFocusIn: null,\n    onFocusOut: null,\n    onHashChange: null,\n    onInput: null,\n    onInvalid: null,\n    onKeyDown: null,\n    onKeyPress: null,\n    onKeyUp: null,\n    onLoad: null,\n    onLoadedData: null,\n    onLoadedMetadata: null,\n    onLoadStart: null,\n    onMessage: null,\n    onMouseDown: null,\n    onMouseEnter: null,\n    onMouseLeave: null,\n    onMouseMove: null,\n    onMouseOut: null,\n    onMouseOver: null,\n    onMouseUp: null,\n    onMouseWheel: null,\n    onOffline: null,\n    onOnline: null,\n    onPageHide: null,\n    onPageShow: null,\n    onPaste: null,\n    onPause: null,\n    onPlay: null,\n    onPlaying: null,\n    onPopState: null,\n    onProgress: null,\n    onRateChange: null,\n    onRepeat: null,\n    onReset: null,\n    onResize: null,\n    onScroll: null,\n    onSeeked: null,\n    onSeeking: null,\n    onSelect: null,\n    onShow: null,\n    onStalled: null,\n    onStorage: null,\n    onSubmit: null,\n    onSuspend: null,\n    onTimeUpdate: null,\n    onToggle: null,\n    onUnload: null,\n    onVolumeChange: null,\n    onWaiting: null,\n    onZoom: null,\n    opacity: null,\n    operator: null,\n    order: null,\n    orient: null,\n    orientation: null,\n    origin: null,\n    overflow: null,\n    overlay: null,\n    overlinePosition: number,\n    overlineThickness: number,\n    paintOrder: null,\n    panose1: null,\n    path: null,\n    pathLength: number,\n    patternContentUnits: null,\n    patternTransform: null,\n    patternUnits: null,\n    phase: null,\n    ping: spaceSeparated,\n    pitch: null,\n    playbackOrder: null,\n    pointerEvents: null,\n    points: null,\n    pointsAtX: number,\n    pointsAtY: number,\n    pointsAtZ: number,\n    preserveAlpha: null,\n    preserveAspectRatio: null,\n    primitiveUnits: null,\n    propagate: null,\n    property: commaOrSpaceSeparated,\n    r: null,\n    radius: null,\n    referrerPolicy: null,\n    refX: null,\n    refY: null,\n    rel: commaOrSpaceSeparated,\n    rev: commaOrSpaceSeparated,\n    renderingIntent: null,\n    repeatCount: null,\n    repeatDur: null,\n    requiredExtensions: commaOrSpaceSeparated,\n    requiredFeatures: commaOrSpaceSeparated,\n    requiredFonts: commaOrSpaceSeparated,\n    requiredFormats: commaOrSpaceSeparated,\n    resource: null,\n    restart: null,\n    result: null,\n    rotate: null,\n    rx: null,\n    ry: null,\n    scale: null,\n    seed: null,\n    shapeRendering: null,\n    side: null,\n    slope: null,\n    snapshotTime: null,\n    specularConstant: number,\n    specularExponent: number,\n    spreadMethod: null,\n    spacing: null,\n    startOffset: null,\n    stdDeviation: null,\n    stemh: null,\n    stemv: null,\n    stitchTiles: null,\n    stopColor: null,\n    stopOpacity: null,\n    strikethroughPosition: number,\n    strikethroughThickness: number,\n    string: null,\n    stroke: null,\n    strokeDashArray: commaOrSpaceSeparated,\n    strokeDashOffset: null,\n    strokeLineCap: null,\n    strokeLineJoin: null,\n    strokeMiterLimit: number,\n    strokeOpacity: number,\n    strokeWidth: null,\n    style: null,\n    surfaceScale: number,\n    syncBehavior: null,\n    syncBehaviorDefault: null,\n    syncMaster: null,\n    syncTolerance: null,\n    syncToleranceDefault: null,\n    systemLanguage: commaOrSpaceSeparated,\n    tabIndex: number,\n    tableValues: null,\n    target: null,\n    targetX: number,\n    targetY: number,\n    textAnchor: null,\n    textDecoration: null,\n    textRendering: null,\n    textLength: null,\n    timelineBegin: null,\n    title: null,\n    transformBehavior: null,\n    type: null,\n    typeOf: commaOrSpaceSeparated,\n    to: null,\n    transform: null,\n    transformOrigin: null,\n    u1: null,\n    u2: null,\n    underlinePosition: number,\n    underlineThickness: number,\n    unicode: null,\n    unicodeBidi: null,\n    unicodeRange: null,\n    unitsPerEm: number,\n    values: null,\n    vAlphabetic: number,\n    vMathematical: number,\n    vectorEffect: null,\n    vHanging: number,\n    vIdeographic: number,\n    version: null,\n    vertAdvY: number,\n    vertOriginX: number,\n    vertOriginY: number,\n    viewBox: null,\n    viewTarget: null,\n    visibility: null,\n    width: null,\n    widths: null,\n    wordSpacing: null,\n    writingMode: null,\n    x: null,\n    x1: null,\n    x2: null,\n    xChannelSelector: null,\n    xHeight: number,\n    y: null,\n    y1: null,\n    y2: null,\n    yChannelSelector: null,\n    z: null,\n    zoomAndPan: null\n  }\n})\n", "/**\n * @typedef {import('./util/schema.js').Schema} Schema\n */\n\nimport {normalize} from './normalize.js'\nimport {DefinedInfo} from './util/defined-info.js'\nimport {Info} from './util/info.js'\n\nconst valid = /^data[-\\w.:]+$/i\nconst dash = /-[a-z]/g\nconst cap = /[A-Z]/g\n\n/**\n * @param {Schema} schema\n * @param {string} value\n * @returns {Info}\n */\nexport function find(schema, value) {\n  const normal = normalize(value)\n  let prop = value\n  let Type = Info\n\n  if (normal in schema.normal) {\n    return schema.property[schema.normal[normal]]\n  }\n\n  if (normal.length > 4 && normal.slice(0, 4) === 'data' && valid.test(value)) {\n    // Attribute or property.\n    if (value.charAt(4) === '-') {\n      // Turn it into a property.\n      const rest = value.slice(5).replace(dash, camelcase)\n      prop = 'data' + rest.charAt(0).toUpperCase() + rest.slice(1)\n    } else {\n      // Turn it into an attribute.\n      const rest = value.slice(4)\n\n      if (!dash.test(rest)) {\n        let dashes = rest.replace(cap, kebab)\n\n        if (dashes.charAt(0) !== '-') {\n          dashes = '-' + dashes\n        }\n\n        value = 'data' + dashes\n      }\n    }\n\n    Type = DefinedInfo\n  }\n\n  return new Type(prop, value)\n}\n\n/**\n * @param {string} $0\n * @returns {string}\n */\nfunction kebab($0) {\n  return '-' + $0.toLowerCase()\n}\n\n/**\n * @param {string} $0\n * @returns {string}\n */\nfunction camelcase($0) {\n  return $0.charAt(1).toUpperCase()\n}\n", "/**\n * `hast` is close to `React`, but differs in a couple of cases.\n *\n * To get a React property from a hast property, check if it is in\n * `hastToReact`, if it is, then use the corresponding value,\n * otherwise, use the hast property.\n *\n * @type {Record<string, string>}\n */\nexport const hastToReact = {\n  classId: 'classID',\n  dataType: 'datatype',\n  itemId: 'itemID',\n  strokeDashArray: 'strokeDasharray',\n  strokeDashOffset: 'strokeDashoffset',\n  strokeLineCap: 'strokeLinecap',\n  strokeLineJoin: 'strokeLinejoin',\n  strokeMiterLimit: 'strokeMiterlimit',\n  typeOf: 'typeof',\n  xLinkActuate: 'xlinkActuate',\n  xLinkArcRole: 'xlinkArcrole',\n  xLinkHref: 'xlinkHref',\n  xLinkRole: 'xlinkRole',\n  xLinkShow: 'xlinkShow',\n  xLinkTitle: 'xlinkTitle',\n  xLinkType: 'xlinkType',\n  xmlnsXLink: 'xmlnsXlink'\n}\n", "/**\n * @typedef {import('./lib/util/info.js').Info} Info\n * @typedef {import('./lib/util/schema.js').Schema} Schema\n */\n\nimport {merge} from './lib/util/merge.js'\nimport {xlink} from './lib/xlink.js'\nimport {xml} from './lib/xml.js'\nimport {xmlns} from './lib/xmlns.js'\nimport {aria} from './lib/aria.js'\nimport {html as htmlBase} from './lib/html.js'\nimport {svg as svgBase} from './lib/svg.js'\n\nexport {find} from './lib/find.js'\nexport {hastToReact} from './lib/hast-to-react.js'\nexport {normalize} from './lib/normalize.js'\nexport const html = merge([xml, xlink, xmlns, aria, htmlBase], 'html')\nexport const svg = merge([xml, xlink, xmlns, aria, svgBase], 'svg')\n", "import {visit} from 'unist-util-visit'\n\n/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('hast').Root} Root\n * @typedef {import('hast').Element} Element\n *\n * @callback AllowElement\n * @param {Element} element\n * @param {number} index\n * @param {Element|Root} parent\n * @returns {boolean|undefined}\n *\n * @typedef Options\n * @property {Array<string>} [allowedElements]\n * @property {Array<string>} [disallowedElements=[]]\n * @property {AllowElement} [allowElement]\n * @property {boolean} [unwrapDisallowed=false]\n */\n\n/**\n * @type {import('unified').Plugin<[Options], Root>}\n */\nexport default function rehypeFilter(options) {\n  if (options.allowedElements && options.disallowedElements) {\n    throw new TypeError(\n      'Only one of `allowedElements` and `disallowedElements` should be defined'\n    )\n  }\n\n  if (\n    options.allowedElements ||\n    options.disallowedElements ||\n    options.allowElement\n  ) {\n    return (tree) => {\n      visit(tree, 'element', (node, index, parent_) => {\n        const parent = /** @type {Element|Root} */ (parent_)\n        /** @type {boolean|undefined} */\n        let remove\n\n        if (options.allowedElements) {\n          remove = !options.allowedElements.includes(node.tagName)\n        } else if (options.disallowedElements) {\n          remove = options.disallowedElements.includes(node.tagName)\n        }\n\n        if (!remove && options.allowElement && typeof index === 'number') {\n          remove = !options.allowElement(node, index, parent)\n        }\n\n        if (remove && typeof index === 'number') {\n          if (options.unwrapDisallowed && node.children) {\n            parent.children.splice(index, 1, ...node.children)\n          } else {\n            parent.children.splice(index, 1)\n          }\n\n          return index\n        }\n\n        return undefined\n      })\n    }\n  }\n}\n", "/**\n * @template T\n * @typedef {import('react').ComponentType<T>} ComponentType<T>\n */\n\n/**\n * @template T\n * @typedef {import('react').ComponentPropsWithoutRef<T>} ComponentPropsWithoutRef<T>\n */\n\n/**\n * @typedef {import('react').ReactNode} ReactNode\n * @typedef {import('unist').Position} Position\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Root} Root\n * @typedef {import('hast').Text} Text\n * @typedef {import('hast').Comment} Comment\n * @typedef {import('hast').DocType} Doctype\n * @typedef {import('property-information').Info} Info\n * @typedef {import('property-information').Schema} Schema\n * @typedef {import('./complex-types').ReactMarkdownProps} ReactMarkdownProps\n *\n * @typedef Raw\n * @property {'raw'} type\n * @property {string} value\n *\n * @typedef Context\n * @property {Options} options\n * @property {Schema} schema\n * @property {number} listDepth\n *\n * @callback TransformLink\n * @param {string} href\n * @param {Array<ElementContent>} children\n * @param {string?} title\n * @returns {string}\n *\n * @callback TransformImage\n * @param {string} src\n * @param {string} alt\n * @param {string?} title\n * @returns {string}\n *\n * @typedef {import('react').HTMLAttributeAnchorTarget} TransformLinkTargetType\n *\n * @callback TransformLinkTarget\n * @param {string} href\n * @param {Array<ElementContent>} children\n * @param {string?} title\n * @returns {TransformLinkTargetType|undefined}\n *\n * @typedef {keyof JSX.IntrinsicElements} ReactMarkdownNames\n *\n * To do: is `data-sourcepos` typeable?\n *\n * @typedef {ComponentPropsWithoutRef<'code'> & ReactMarkdownProps & {inline?: boolean}} CodeProps\n * @typedef {ComponentPropsWithoutRef<'h1'> & ReactMarkdownProps & {level: number}} HeadingProps\n * @typedef {ComponentPropsWithoutRef<'li'> & ReactMarkdownProps & {checked: boolean|null, index: number, ordered: boolean}} LiProps\n * @typedef {ComponentPropsWithoutRef<'ol'> & ReactMarkdownProps & {depth: number, ordered: true}} OrderedListProps\n * @typedef {ComponentPropsWithoutRef<'td'> & ReactMarkdownProps & {style?: Record<string, unknown>, isHeader: false}} TableDataCellProps\n * @typedef {ComponentPropsWithoutRef<'th'> & ReactMarkdownProps & {style?: Record<string, unknown>, isHeader: true}} TableHeaderCellProps\n * @typedef {ComponentPropsWithoutRef<'tr'> & ReactMarkdownProps & {isHeader: boolean}} TableRowProps\n * @typedef {ComponentPropsWithoutRef<'ul'> & ReactMarkdownProps & {depth: number, ordered: false}} UnorderedListProps\n *\n * @typedef {ComponentType<CodeProps>} CodeComponent\n * @typedef {ComponentType<HeadingProps>} HeadingComponent\n * @typedef {ComponentType<LiProps>} LiComponent\n * @typedef {ComponentType<OrderedListProps>} OrderedListComponent\n * @typedef {ComponentType<TableDataCellProps>} TableDataCellComponent\n * @typedef {ComponentType<TableHeaderCellProps>} TableHeaderCellComponent\n * @typedef {ComponentType<TableRowProps>} TableRowComponent\n * @typedef {ComponentType<UnorderedListProps>} UnorderedListComponent\n *\n * @typedef SpecialComponents\n * @property {CodeComponent|ReactMarkdownNames} code\n * @property {HeadingComponent|ReactMarkdownNames} h1\n * @property {HeadingComponent|ReactMarkdownNames} h2\n * @property {HeadingComponent|ReactMarkdownNames} h3\n * @property {HeadingComponent|ReactMarkdownNames} h4\n * @property {HeadingComponent|ReactMarkdownNames} h5\n * @property {HeadingComponent|ReactMarkdownNames} h6\n * @property {LiComponent|ReactMarkdownNames} li\n * @property {OrderedListComponent|ReactMarkdownNames} ol\n * @property {TableDataCellComponent|ReactMarkdownNames} td\n * @property {TableHeaderCellComponent|ReactMarkdownNames} th\n * @property {TableRowComponent|ReactMarkdownNames} tr\n * @property {UnorderedListComponent|ReactMarkdownNames} ul\n *\n * @typedef {Partial<Omit<import('./complex-types').NormalComponents, keyof SpecialComponents> & SpecialComponents>} Components\n *\n * @typedef Options\n * @property {boolean} [sourcePos=false]\n * @property {boolean} [rawSourcePos=false]\n * @property {boolean} [skipHtml=false]\n * @property {boolean} [includeElementIndex=false]\n * @property {null|false|TransformLink} [transformLinkUri]\n * @property {TransformImage} [transformImageUri]\n * @property {TransformLinkTargetType|TransformLinkTarget} [linkTarget]\n * @property {Components} [components]\n */\n\nimport React from 'react'\nimport ReactIs from 'react-is'\nimport {whitespace} from 'hast-util-whitespace'\nimport {svg, find, hastToReact} from 'property-information'\nimport {stringify as spaces} from 'space-separated-tokens'\nimport {stringify as commas} from 'comma-separated-tokens'\nimport style from 'style-to-object'\n\nconst own = {}.hasOwnProperty\n\n// The table-related elements that must not contain whitespace text according\n// to React.\nconst tableElements = new Set(['table', 'thead', 'tbody', 'tfoot', 'tr'])\n\n/**\n * @param {Context} context\n * @param {Element|Root} node\n */\nexport function childrenToReact(context, node) {\n  /** @type {Array<ReactNode>} */\n  const children = []\n  let childIndex = -1\n  /** @type {Comment|Doctype|Element|Raw|Text} */\n  let child\n\n  while (++childIndex < node.children.length) {\n    child = node.children[childIndex]\n\n    if (child.type === 'element') {\n      children.push(toReact(context, child, childIndex, node))\n    } else if (child.type === 'text') {\n      // Currently, a warning is triggered by react for *any* white space in\n      // tables.\n      // So we drop it.\n      // See: <https://github.com/facebook/react/pull/7081>.\n      // See: <https://github.com/facebook/react/pull/7515>.\n      // See: <https://github.com/remarkjs/remark-react/issues/64>.\n      // See: <https://github.com/remarkjs/react-markdown/issues/576>.\n      if (\n        node.type !== 'element' ||\n        !tableElements.has(node.tagName) ||\n        !whitespace(child)\n      ) {\n        children.push(child.value)\n      }\n    } else if (child.type === 'raw' && !context.options.skipHtml) {\n      // Default behavior is to show (encoded) HTML.\n      children.push(child.value)\n    }\n  }\n\n  return children\n}\n\n/**\n * @param {Context} context\n * @param {Element} node\n * @param {number} index\n * @param {Element|Root} parent\n */\nfunction toReact(context, node, index, parent) {\n  const options = context.options\n  const parentSchema = context.schema\n  /** @type {ReactMarkdownNames} */\n  // @ts-expect-error assume a known HTML/SVG element.\n  const name = node.tagName\n  /** @type {Record<string, unknown>} */\n  const properties = {}\n  let schema = parentSchema\n  /** @type {string} */\n  let property\n\n  if (parentSchema.space === 'html' && name === 'svg') {\n    schema = svg\n    context.schema = schema\n  }\n\n  if (node.properties) {\n    for (property in node.properties) {\n      if (own.call(node.properties, property)) {\n        addProperty(properties, property, node.properties[property], context)\n      }\n    }\n  }\n\n  if (name === 'ol' || name === 'ul') {\n    context.listDepth++\n  }\n\n  const children = childrenToReact(context, node)\n\n  if (name === 'ol' || name === 'ul') {\n    context.listDepth--\n  }\n\n  // Restore parent schema.\n  context.schema = parentSchema\n\n  // Nodes created by plugins do not have positional info, in which case we use\n  // an object that matches the position interface.\n  const position = node.position || {\n    start: {line: null, column: null, offset: null},\n    end: {line: null, column: null, offset: null}\n  }\n  const component =\n    options.components && own.call(options.components, name)\n      ? options.components[name]\n      : name\n  const basic = typeof component === 'string' || component === React.Fragment\n\n  if (!ReactIs.isValidElementType(component)) {\n    throw new TypeError(\n      `Component for name \\`${name}\\` not defined or is not renderable`\n    )\n  }\n\n  properties.key = [\n    name,\n    position.start.line,\n    position.start.column,\n    index\n  ].join('-')\n\n  if (name === 'a' && options.linkTarget) {\n    properties.target =\n      typeof options.linkTarget === 'function'\n        ? options.linkTarget(\n            String(properties.href || ''),\n            node.children,\n            typeof properties.title === 'string' ? properties.title : null\n          )\n        : options.linkTarget\n  }\n\n  if (name === 'a' && options.transformLinkUri) {\n    properties.href = options.transformLinkUri(\n      String(properties.href || ''),\n      node.children,\n      typeof properties.title === 'string' ? properties.title : null\n    )\n  }\n\n  if (\n    !basic &&\n    name === 'code' &&\n    parent.type === 'element' &&\n    parent.tagName !== 'pre'\n  ) {\n    properties.inline = true\n  }\n\n  if (\n    !basic &&\n    (name === 'h1' ||\n      name === 'h2' ||\n      name === 'h3' ||\n      name === 'h4' ||\n      name === 'h5' ||\n      name === 'h6')\n  ) {\n    properties.level = Number.parseInt(name.charAt(1), 10)\n  }\n\n  if (name === 'img' && options.transformImageUri) {\n    properties.src = options.transformImageUri(\n      String(properties.src || ''),\n      String(properties.alt || ''),\n      typeof properties.title === 'string' ? properties.title : null\n    )\n  }\n\n  if (!basic && name === 'li' && parent.type === 'element') {\n    const input = getInputElement(node)\n    properties.checked =\n      input && input.properties ? Boolean(input.properties.checked) : null\n    properties.index = getElementsBeforeCount(parent, node)\n    properties.ordered = parent.tagName === 'ol'\n  }\n\n  if (!basic && (name === 'ol' || name === 'ul')) {\n    properties.ordered = name === 'ol'\n    properties.depth = context.listDepth\n  }\n\n  if (name === 'td' || name === 'th') {\n    if (properties.align) {\n      if (!properties.style) properties.style = {}\n      // @ts-expect-error assume `style` is an object\n      properties.style.textAlign = properties.align\n      delete properties.align\n    }\n\n    if (!basic) {\n      properties.isHeader = name === 'th'\n    }\n  }\n\n  if (!basic && name === 'tr' && parent.type === 'element') {\n    properties.isHeader = Boolean(parent.tagName === 'thead')\n  }\n\n  // If `sourcePos` is given, pass source information (line/column info from markdown source).\n  if (options.sourcePos) {\n    properties['data-sourcepos'] = flattenPosition(position)\n  }\n\n  if (!basic && options.rawSourcePos) {\n    properties.sourcePosition = node.position\n  }\n\n  // If `includeElementIndex` is given, pass node index info to components.\n  if (!basic && options.includeElementIndex) {\n    properties.index = getElementsBeforeCount(parent, node)\n    properties.siblingCount = getElementsBeforeCount(parent)\n  }\n\n  if (!basic) {\n    properties.node = node\n  }\n\n  // Ensure no React warnings are emitted for void elements w/ children.\n  return children.length > 0\n    ? React.createElement(component, properties, children)\n    : React.createElement(component, properties)\n}\n\n/**\n * @param {Element|Root} node\n * @returns {Element?}\n */\nfunction getInputElement(node) {\n  let index = -1\n\n  while (++index < node.children.length) {\n    const child = node.children[index]\n\n    if (child.type === 'element' && child.tagName === 'input') {\n      return child\n    }\n  }\n\n  return null\n}\n\n/**\n * @param {Element|Root} parent\n * @param {Element} [node]\n * @returns {number}\n */\nfunction getElementsBeforeCount(parent, node) {\n  let index = -1\n  let count = 0\n\n  while (++index < parent.children.length) {\n    if (parent.children[index] === node) break\n    if (parent.children[index].type === 'element') count++\n  }\n\n  return count\n}\n\n/**\n * @param {Record<string, unknown>} props\n * @param {string} prop\n * @param {unknown} value\n * @param {Context} ctx\n */\nfunction addProperty(props, prop, value, ctx) {\n  const info = find(ctx.schema, prop)\n  let result = value\n\n  // Ignore nullish and `NaN` values.\n  // eslint-disable-next-line no-self-compare\n  if (result === null || result === undefined || result !== result) {\n    return\n  }\n\n  // Accept `array`.\n  // Most props are space-separated.\n  if (Array.isArray(result)) {\n    result = info.commaSeparated ? commas(result) : spaces(result)\n  }\n\n  if (info.property === 'style' && typeof result === 'string') {\n    result = parseStyle(result)\n  }\n\n  if (info.space && info.property) {\n    props[\n      own.call(hastToReact, info.property)\n        ? hastToReact[info.property]\n        : info.property\n    ] = result\n  } else if (info.attribute) {\n    props[info.attribute] = result\n  }\n}\n\n/**\n * @param {string} value\n * @returns {Record<string, string>}\n */\nfunction parseStyle(value) {\n  /** @type {Record<string, string>} */\n  const result = {}\n\n  try {\n    style(value, iterator)\n  } catch {\n    // Silent.\n  }\n\n  return result\n\n  /**\n   * @param {string} name\n   * @param {string} v\n   */\n  function iterator(name, v) {\n    const k = name.slice(0, 4) === '-ms-' ? `ms-${name.slice(4)}` : name\n    result[k.replace(/-([a-z])/g, styleReplacer)] = v\n  }\n}\n\n/**\n * @param {unknown} _\n * @param {string} $1\n */\nfunction styleReplacer(_, $1) {\n  return $1.toUpperCase()\n}\n\n/**\n * @param {Position|{start: {line: null, column: null, offset: null}, end: {line: null, column: null, offset: null}}} pos\n * @returns {string}\n */\nfunction flattenPosition(pos) {\n  return [\n    pos.start.line,\n    ':',\n    pos.start.column,\n    '-',\n    pos.end.line,\n    ':',\n    pos.end.column\n  ]\n    .map(String)\n    .join('')\n}\n", "/**\n * Check if the given value is *inter-element whitespace*.\n *\n * @param {unknown} thing\n *   Thing to check (typically `Node` or `string`).\n * @returns {boolean}\n *   Whether the `value` is inter-element whitespace (`boolean`): consisting of\n *   zero or more of space, tab (`\\t`), line feed (`\\n`), carriage return\n *   (`\\r`), or form feed (`\\f`).\n *   If a node is passed it must be a `Text` node, whose `value` field is\n *   checked.\n */\nexport function whitespace(thing) {\n  /** @type {string} */\n  const value =\n    // @ts-expect-error looks like a node.\n    thing && typeof thing === 'object' && thing.type === 'text'\n      ? // @ts-expect-error looks like a text.\n        thing.value || ''\n      : thing\n\n  // HTML whitespace expression.\n  // See <https://infra.spec.whatwg.org/#ascii-whitespace>.\n  return typeof value === 'string' && value.replace(/[ \\t\\n\\f\\r]/g, '') === ''\n}\n", "/**\n * Parse space-separated tokens to an array of strings.\n *\n * @param {string} value\n *   Space-separated tokens.\n * @returns {Array<string>}\n *   List of tokens.\n */\nexport function parse(value) {\n  const input = String(value || '').trim()\n  return input ? input.split(/[ \\t\\n\\r\\f]+/g) : []\n}\n\n/**\n * Serialize an array of strings as space separated-tokens.\n *\n * @param {Array<string|number>} values\n *   List of tokens.\n * @returns {string}\n *   Space-separated tokens.\n */\nexport function stringify(values) {\n  return values.join(' ').trim()\n}\n", "/**\n * @typedef Options\n *   Configuration for `stringify`.\n * @property {boolean} [padLeft=true]\n *   Whether to pad a space before a token.\n * @property {boolean} [padRight=false]\n *   Whether to pad a space after a token.\n */\n\n/**\n * @typedef {Options} StringifyOptions\n *   Please use `StringifyOptions` instead.\n */\n\n/**\n * Parse comma-separated tokens to an array.\n *\n * @param {string} value\n *   Comma-separated tokens.\n * @returns {Array<string>}\n *   List of tokens.\n */\nexport function parse(value) {\n  /** @type {Array<string>} */\n  const tokens = []\n  const input = String(value || '')\n  let index = input.indexOf(',')\n  let start = 0\n  /** @type {boolean} */\n  let end = false\n\n  while (!end) {\n    if (index === -1) {\n      index = input.length\n      end = true\n    }\n\n    const token = input.slice(start, index).trim()\n\n    if (token || !end) {\n      tokens.push(token)\n    }\n\n    start = index + 1\n    index = input.indexOf(',', start)\n  }\n\n  return tokens\n}\n\n/**\n * Serialize an array of strings or numbers to comma-separated tokens.\n *\n * @param {Array<string|number>} values\n *   List of tokens.\n * @param {Options} [options]\n *   Configuration for `stringify` (optional).\n * @returns {string}\n *   Comma-separated tokens.\n */\nexport function stringify(values, options) {\n  const settings = options || {}\n\n  // Ensure the last empty entry is seen.\n  const input = values[values.length - 1] === '' ? [...values, ''] : values\n\n  return input\n    .join(\n      (settings.padRight ? ' ' : '') +\n        ',' +\n        (settings.padLeft === false ? '' : ' ')\n    )\n    .trim()\n}\n", "import type { ProductV1, ProductVariant } from \"@fermat/product-api\";\n\n/**\n * The `colorSwatches` product config, as tile-experience defines it\n * (`packages/react/src/Product/config/ProductConfigs.tsx`, `ColorSwatches`). Only the two fields\n * this card needs are modelled; `sections`, `selectionLabel` and `tastingNotes` are PDP-only.\n */\nexport interface ColorSwatches {\n  optionName: string;\n  colors: Record<string, string>;\n}\n\nconst COLOR_SWATCHES_KEY = \"colorSwatches\";\n/** Every brand sampled names the axis \"Color\"; the config is what makes it authoritative. */\nexport const DEFAULT_COLOR_OPTION_NAME = \"Color\";\n\n/**\n * The merged `colorSwatches` config for a product, or undefined when it has none.\n *\n * `ConfigTag.value` is typed as a STRING and carries JSON, so it has to be parsed; a rule is not\n * required to be valid JSON, hence the catch. Entries sharing an `optionName` are merged rather\n * than first-wins, because a clustered product contributes one entry per constituent and the card\n * needs the pooled colour map (same reason ProductConfigs concatenates them).\n */\nexport function colorSwatches(product: ProductV1): ColorSwatches | undefined {\n  let merged: ColorSwatches | undefined;\n  for (const config of product.configs ?? []) {\n    if (config.key !== COLOR_SWATCHES_KEY) continue;\n    let parsed: ColorSwatches;\n    try {\n      parsed = JSON.parse(config.value) as ColorSwatches;\n    } catch {\n      continue;\n    }\n    if (!parsed?.optionName || !parsed.colors) continue;\n    if (!merged) {\n      merged = { optionName: parsed.optionName, colors: { ...parsed.colors } };\n      // Case-insensitive, matching `optionValue` below: a clustered product whose constituents send\n      // \"color\" and \"Color\" would otherwise silently lose the second entry's colours.\n    } else if (\n      merged.optionName.toLowerCase() === parsed.optionName.toLowerCase()\n    ) {\n      merged.colors = { ...merged.colors, ...parsed.colors };\n    }\n  }\n  return merged;\n}\n\n/**\n * A variant's value on one option axis, matched on the option NAME.\n *\n * Case-insensitive: the config says \"Color\" and some catalogs emit \"color\", and an axis that fails\n * to match silently collapses every variant into one group.\n */\nexport function optionValue(\n  variant: ProductVariant,\n  optionName: string,\n): string | undefined {\n  const wanted = optionName.toLowerCase();\n  for (const property of variant.properties ?? []) {\n    if (property.name?.toLowerCase() !== wanted) continue;\n    const value = property.value?.trim();\n    if (value) return value;\n  }\n  return undefined;\n}\n\nexport interface ColorGroup {\n  /** The colour option value, or \"\" for a product with no usable colour axis. */\n  value: string;\n  variants: ProductVariant[];\n}\n\n/**\n * One group per colour value, in first-seen order, so the card shows one control per colour\n * instead of one per variant (a Backcountry jacket has 378 variants and 63 colours).\n *\n * ponytail: a product where ANY variant is missing the axis value collapses to a single unnamed\n * group, which the caller renders as the per-variant track instead. Grouping a partial axis would\n * put those variants behind an unlabelled control, and an unreachable variant is worse than a\n * longer track.\n */\nexport function groupVariantsByColor(\n  variants: ProductVariant[],\n  optionName: string,\n): ColorGroup[] {\n  // Keyed case-insensitively, like both the axis-name match above and the swatch lookup below: a\n  // catalog emitting \"Black\" on one variant and \"black\" on the next would otherwise show two\n  // swatches for one colour, and picking either strands the other casing's sizes unreachable.\n  // The first casing seen is the one displayed.\n  const groups = new Map<string, ColorGroup>();\n  for (const variant of variants) {\n    const value = optionValue(variant, optionName);\n    if (!value) return [{ value: \"\", variants }];\n    const group = groups.get(value.toLowerCase());\n    if (group) group.variants.push(variant);\n    else groups.set(value.toLowerCase(), { value, variants: [variant] });\n  }\n  if (groups.size === 0) return [{ value: \"\", variants }];\n  return [...groups.values()];\n}\n\nexport type Swatch =\n  | { kind: \"image\"; src: string }\n  | { kind: \"css\"; color: string }\n  | { kind: \"text\" };\n\n/** Absolute URL, matching tile-experience's `isValidUrl` so both surfaces branch identically. */\nfunction isAbsoluteUrl(value: string): boolean {\n  try {\n    new URL(value);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\n/**\n * The thumbnail for one colour, in the order the approved spec fixes:\n *\n * 1. the brand's own `colorSwatches` entry, an image URL or a CSS colour/gradient\n * 2. else the first product image on any variant of that colour\n * 3. else nothing, and the caller renders the value as text\n */\nexport function resolveSwatch(\n  group: ColorGroup,\n  colors?: Record<string, string>,\n): Swatch {\n  // Case-insensitive on the VALUE too, not just the option name: a config keyed \"Black\" against a\n  // catalog emitting \"black\" would otherwise lose its configured swatch with no error.\n  // Exact key first, so a config carrying both \"Black\" and \"black\" is not resolved by whichever\n  // happens to be inserted first.\n  const wanted = group.value.toLowerCase();\n  const configured = (\n    colors?.[group.value] ??\n    Object.entries(colors ?? {}).find(\n      ([value]) => value.toLowerCase() === wanted,\n    )?.[1]\n  )?.trim();\n  if (configured) {\n    return isAbsoluteUrl(configured)\n      ? { kind: \"image\", src: configured }\n      : { kind: \"css\", color: configured };\n  }\n  for (const variant of group.variants) {\n    const src = variant.images?.[0]?.src;\n    if (src) return { kind: \"image\", src };\n  }\n  // Backcountry configures 154 of its 232 colour values, so a track legitimately mixes swatches and\n  // text chips. Do not copy hosted-tiles' all-or-nothing `shouldShowColorSwatches` here.\n  return { kind: \"text\" };\n}\n", "import {\n  DEFAULT_COLOR_OPTION_NAME,\n  type Swatch,\n  colorSwatches,\n  groupVariantsByColor,\n  optionValue,\n  resolveSwatch,\n} from \"../util/variant-colors\";\nimport React, {\n  useEffect,\n  useLayoutEffect,\n  useMemo,\n  useRef,\n  useState,\n} from \"react\";\nimport { ProductV1 } from \"@fermat/product-api\";\nimport type { ProductVariant } from \"@fermat/product-api\";\nimport type { SamuelConfig } from \"../types\";\nimport { constrainImage } from \"../util/constrain-image\";\nimport { flushSync } from \"react-dom\";\nimport { formatPrice } from \"../util/format-price\";\nimport { resolveActions } from \"../host/actions\";\nimport { resolveNavigationUrl } from \"../util/shopping-assistant-nav\";\nimport { useInView } from \"../hooks/useInView\";\nimport { useProductsForHandles } from \"../hooks/queries\";\nimport { useSamuelConfig } from \"../context/config-context\";\nimport { useTranslation } from \"react-i18next\";\nimport { cn } from \"../util/cn\";\n\nconst NO_VARIANTS: ProductVariant[] = [];\n\n/** One image on a product or a variant. Derived, so the import list stays as it was. */\ntype CardImage = ProductV1[\"images\"][number];\n\nconst IMAGE_WIDTH = 256;\n\n/** Extensions the product API serves as video. `Media` carries no type field, so the src decides. */\nconst VIDEO_EXTENSIONS = new Set([\"mp4\", \"mov\", \"m4v\", \"webm\", \"ogg\"]);\n\n/**\n * The card renders every media item in an `<img>`, so a video has to be dropped rather than shown\n * broken. Parsed with `URL` and matched on the PATH, per the repo's no-regex-for-structured-text\n * rule: a CDN src carries query params, and \".mp4\" inside one does not make the media a video.\n */\nexport function isVideoSrc(src: string): boolean {\n  try {\n    // Base for a relative src; the host is never read, only the path. `pop()` on a path with no dot\n    // returns the whole segment, which is not an extension and so is never in the set.\n    const path = new URL(src, \"https://fermat.invalid\").pathname;\n    return VIDEO_EXTENSIONS.has(path.split(\".\").pop()?.toLowerCase() ?? \"\");\n  } catch {\n    return false;\n  }\n}\n\n/** Photos only, in order, first occurrence of each src kept. */\nfunction photos(media: CardImage[] | undefined): CardImage[] {\n  const seen = new Set<string>();\n  const out: CardImage[] = [];\n  for (const item of media ?? []) {\n    if (!item?.src || isVideoSrc(item.src) || seen.has(item.src)) continue;\n    seen.add(item.src);\n    out.push(item);\n  }\n  return out;\n}\n\n/**\n * The set of images one card can page through, same precedence the single image had: the SELECTED\n * variant's own photos, else the product's, else the fallback variant's (a catalog with no\n * product-level imagery). Each candidate is filtered before it is accepted, so a product whose\n * media is all video falls through instead of yielding an empty card.\n *\n * Deduped on purpose. Catalogs repeat one photo across a colourway, and two identical frames inside\n * a 140px card read as a control that did nothing.\n */\nexport function cardImages(\n  product: ProductV1,\n  variant: ProductVariant | undefined,\n  hasSelection: boolean,\n): CardImage[] {\n  const candidates = [\n    hasSelection ? variant?.images : undefined,\n    product.images,\n    variant?.images,\n  ];\n  for (const candidate of candidates) {\n    const usable = photos(candidate);\n    if (usable.length > 0) return usable;\n  }\n  return [];\n}\n\n/**\n * Pixel height to request for the card image, taken from the card's own aspect ratio. Asking the CDN\n * for a square and then filling a portrait box leaves `object-cover` cropping the sides off a photo\n * that was never square; asking for the box's shape leaves it nothing to crop.\n */\nexport function requestedImageHeight(cardImageRatio?: string): number {\n  const [width, height] = (cardImageRatio ?? \"\")\n    .split(\"/\")\n    .map((p) => Number(p.trim()));\n  // `> 0` alone would let Infinity through and round the requested height to 0.\n  if (!Number.isFinite(width) || !Number.isFinite(height)) return IMAGE_WIDTH;\n  if (!(width > 0) || !(height > 0)) return IMAGE_WIDTH;\n  return Math.round((IMAGE_WIDTH * height) / width);\n}\n\n// One constant for both render sites (skeleton and loaded) so they cannot drift apart.\nconst CAROUSEL_HEADING_CLASS =\n  \"fermat-chat-carousel-heading m-0 mb-4 font-[family-name:var(--font-brand-primary,inherit)] text-sm/[1.5] font-medium text-[var(--sa-ink,#1a1a1a)]\";\n\n/**\n * \"?product=\" URL on `baseHref`. On hosted-tiles this round-trips: TileEntrypoint's legacy-param\n * handler turns it back into the in-app /product/:handle route, variant included. It also survives a\n * real navigation, because the server only resolves `baseHref`'s own hero, never the picked product.\n *\n * `baseHref` MUST be the HOST page, not `window.location`: the widget renders inside an iframe on its\n * own origin, so a self-relative href would point at the assistant bundle instead of the storefront.\n */\nfunction productQueryUrl(\n  baseHref: string,\n  handle: string,\n  variantExternalId?: string,\n): string | null {\n  // heroProductUrl is threaded from a query param that a host page can override\n  // (__FERMAT_ASSISTANT_PAGE_URL__), so it is NOT guaranteed parseable. Throwing here would happen\n  // during render and take the whole carousel down, so parse defensively like resolveBrandSiteUrl.\n  let url: URL;\n  try {\n    url = new URL(baseHref);\n  } catch {\n    return null;\n  }\n  url.searchParams.set(\"product\", handle);\n  // Carry the picked variant, or clear a stale one: the param belongs to the OLD product.\n  if (variantExternalId) {\n    url.searchParams.set(\"variant_external_id\", variantExternalId);\n  } else {\n    url.searchParams.delete(\"variant_external_id\");\n  }\n  return url.toString();\n}\n\n/**\n * Resolve the card link href. buildProductUrl wins; else brand-site gets its real brand PDP.\n * fermat-funnel deliberately does NOT get the funnel's DPP path, which 404s for a product the funnel\n * does not list. It gets the \"?product=\" form instead, which reaches the same product and variant\n * without the server ever resolving them.\n */\nfunction resolveCardHref(\n  product: ProductV1,\n  config: SamuelConfig,\n  variantProductUrl?: string,\n  variantExternalId?: string,\n): string {\n  if (config.buildProductUrl) return config.buildProductUrl(product.handle);\n  if (config.surface === \"brand-site\" && config.heroProductUrl) {\n    const dest = resolveNavigationUrl(\n      {\n        surface: config.surface,\n        handle: product.handle,\n        productUrl: variantProductUrl ?? product.productUrl,\n        rootProductId: product.rootProductId,\n        externalId: product.externalId,\n        variantExternalId,\n      },\n      config.heroProductUrl,\n    );\n    if (dest) return dest;\n  }\n  // heroProductUrl is the host page the iframe is embedded in. window.location is the fallback for a\n  // non-iframe/native embed, and also for an unparseable override: a bad host URL must degrade to an\n  // inert link, never to a render crash.\n  for (const base of [\n    config.heroProductUrl,\n    typeof window !== \"undefined\" ? window.location.href : undefined,\n  ]) {\n    if (!base) continue;\n    const href = productQueryUrl(base, product.handle, variantExternalId);\n    if (href) return href;\n  }\n  return \"#\";\n}\n\n/**\n * A variant's option properties as name -> value, first occurrence of a name winning.\n *\n * The schema puts no uniqueness constraint on `name`, so a feed can emit the same option twice on\n * one variant. Counted twice it looks like cross-variant variation to distinguishingProperties, which\n * would then drag a property every variant shares into every chip label.\n */\nfunction variantProperties(variant: ProductVariant): Map<string, string> {\n  const byName = new Map<string, string>();\n  for (const p of variant.properties ?? []) {\n    if (!p.name || byName.has(p.name)) continue;\n    byName.set(p.name, p.value?.trim() ?? \"\");\n  }\n  return byName;\n}\n\n/**\n * The property names worth putting on a chip: the ones whose value actually differs between this\n * product's variants. A KSO dress carries Color AND Size on every variant but stocks one colour,\n * so without this every chip reads \"Toasted Hazelnut / <size>\" and, once clipped to the card\n * width, seven chips are indistinguishable. Returns names, not values, so each label stays\n * per-variant.\n */\nfunction distinguishingProperties(variants: ProductVariant[]): Set<string> {\n  const seen = new Map<string, Set<string>>();\n  for (const v of variants) {\n    for (const [name, value] of variantProperties(v)) {\n      const values = seen.get(name) ?? new Set<string>();\n      values.add(value);\n      seen.set(name, values);\n    }\n  }\n  const varying = new Set(\n    [...seen].filter(([, values]) => values.size > 1).map(([name]) => name),\n  );\n  // Every property constant across the whole product: nothing distinguishes the variants by\n  // property at all, so keep them all rather than rendering a track of blank chips.\n  return varying.size > 0 ? varying : new Set(seen.keys());\n}\n\n/**\n * \"Toasted Hazelnut / L\" from the variant's own option properties, which product-api describes as\n * \"the properties that together uniquely identify this variant\". Falls back to the variant name and\n * then its id, so a label is never blank and every variant stays reachable.\n *\n * Sorted by property NAME, because the API does not promise a stable order within a product: KSO's\n * KI163 returns Size|Color on one variant and Color|Size on the other six. Joining in arrival order\n * makes one track read \"MEDIUM / Toasted Hazelnut\" next to \"Toasted Hazelnut / SMALL\".\n */\nfunction variantLabel(variant: ProductVariant, include?: Set<string>): string {\n  return (\n    variantPropertyLabel(variant, include) || variant.name || variant.externalId\n  );\n}\n\n/**\n * The property half of {@link variantLabel}, with no name or id fallback, so it is blank when the\n * variant carries nothing that distinguishes it. The card title needs that blank: a variant's own\n * `name` is often the product name verbatim, and appending it would say the product twice.\n */\nfunction variantPropertyLabel(\n  variant: ProductVariant,\n  include?: Set<string>,\n): string {\n  return [...variantProperties(variant)]\n    .filter(([name]) => !include || include.has(name))\n    .sort(([a], [b]) => a.localeCompare(b))\n    .map(([, value]) => value)\n    .filter(Boolean)\n    .join(\" / \");\n}\n\n/**\n * A letter size's position on the S-M-L axis: \"m\" is 0, \"l\" 1, \"xl\" 2, \"s\" -1, \"xs\" -2. Counting the\n * x's rather than matching a fixed list is what lets 4XL and 6XL rank correctly, and it treats \"2xl\"\n * and \"xxl\" as the one size brands spell both ways. Undefined when the label is not a letter size.\n */\nfunction letterSizeRank(key: string): number | undefined {\n  if (key === \"m\") return 0;\n  const axis = key.slice(-1);\n  if (axis !== \"s\" && axis !== \"l\") return undefined;\n  const prefix = key.slice(0, -1);\n  let xCount: number;\n  if (prefix === \"\") {\n    xCount = 0;\n  } else if ([...prefix].every((c) => c === \"x\")) {\n    xCount = prefix.length;\n  } else if (prefix.endsWith(\"x\")) {\n    // The \"2xl\" spelling. Never expanded into a string of x's: the count comes from a catalog and\n    // a dirty one (\"999999999999999999999999xl\") would ask for a string no engine can allocate.\n    const spelled = Number(prefix.slice(0, -1));\n    if (!Number.isInteger(spelled) || spelled < 2) return undefined;\n    xCount = spelled;\n  } else {\n    return undefined;\n  }\n  return axis === \"l\" ? xCount + 1 : -(xCount + 1);\n}\n\n/**\n * Group then rank. The group is what keeps the three kinds apart: every letter size sorts ahead of\n * every numeric one, and an unrecognised label goes last. Ranking them on one shared number instead\n * let a negative numeric label (\"-5\") collide with a letter size.\n */\nfunction sizeSortKey(label: string): [group: number, rank: number] {\n  const key = label.trim().toLowerCase();\n  const letter = letterSizeRank(key);\n  if (letter !== undefined) return [0, letter];\n  // \"28-30\" ranks as 28, \"32W\" as 32.\n  const numeric = Number.parseFloat(key);\n  return Number.isFinite(numeric) ? [1, numeric] : [2, 0];\n}\n\n/**\n * The size step's order. product-api promises no order within a product, so the chips arrived in\n * whatever order the variants did and a card could print \"L, M, S\". A label nothing recognises keeps\n * the plain alphabetical order it had before, `numeric: true` so \"10\" follows \"9\".\n */\nexport function compareSizeLabels(a: string, b: string): number {\n  const [groupA, rankA] = sizeSortKey(a);\n  const [groupB, rankB] = sizeSortKey(b);\n  if (groupA !== groupB) return groupA - groupB;\n  if (rankA !== rankB) return rankA - rankB;\n  return a.localeCompare(b, undefined, { numeric: true });\n}\n\ninterface TrackOption {\n  /** Stable identity for selection: a variant externalId, or a colour option value. */\n  id: string;\n  label: string;\n  soldOut: boolean;\n  /** Absent for a plain text chip. */\n  swatch?: Swatch;\n}\n\ninterface OptionTrackProps {\n  options: TrackOption[];\n  selectedId?: string;\n  onSelect: (id: string) => void;\n  label: string;\n}\n\n/**\n * One control per option, no cap, scrolling horizontally when they overflow the card. Shared by the\n * colour track and the size step so the roving-tabindex and arrow-key rules exist once.\n *\n * Rendered inside `card-actions`, a SIBLING of the card anchor, so a tap or a scroll here can never\n * trigger card navigation. That removes the bug class by construction: no preventDefault, no\n * drag-versus-click heuristic.\n */\nconst OptionTrack: React.FC<OptionTrackProps> = ({\n  options,\n  selectedId,\n  onSelect,\n  label,\n}) => {\n  const trackRef = useRef<HTMLDivElement>(null);\n  const selectedRef = useRef<HTMLButtonElement>(null);\n  // Same source-keyed fallback the card image uses, for the same reason: a flag on the element is\n  // spent for whichever swatch photo failed first and denies the next one its raw URL.\n  const [failedSwatches, setFailedSwatches] = useState<ReadonlySet<string>>(\n    () => new Set(),\n  );\n\n  // Centre the pre-selected option on mount. Deliberately NOT scrollIntoView: this track is nested\n  // inside the horizontally scrolling chat carousel, and scrollIntoView would scroll that ancestor\n  // too, yanking the whole row. Mount only, because a later selection was made from a visible\n  // control and is therefore already in view.\n  // useLayoutEffect, not useEffect: after paint the track would show a frame at scrollLeft 0 and\n  // then jump, which is most visible when a whole row of cards mounts at once.\n  useLayoutEffect(() => {\n    const track = trackRef.current;\n    const selected = selectedRef.current;\n    if (!track || !selected) return;\n    track.scrollLeft =\n      selected.offsetLeft - (track.clientWidth - selected.offsetWidth) / 2;\n  }, []);\n\n  // Roving tabindex: exactly one button is in the tab order, arrows move between the rest. Every\n  // option is focusable, sold out or not, which is what lets this sit on the checked one: a\n  // natively `disabled` button leaves the tab order whatever its tabIndex says, so marking sold-out\n  // options `aria-disabled` instead keeps the checked chip and the focusable chip the same chip.\n  const tabbableId = options.some((o) => o.id === selectedId)\n    ? selectedId\n    : options[0]?.id;\n\n  const handleKeyDown = (e: React.KeyboardEvent) => {\n    const step = e.key === \"ArrowRight\" ? 1 : e.key === \"ArrowLeft\" ? -1 : 0;\n    if (!step || options.length === 0) return;\n    e.preventDefault();\n    const at = options.findIndex((o) => o.id === selectedId);\n    const next =\n      at < 0\n        ? options[step > 0 ? 0 : options.length - 1]\n        : options[(at + step + options.length) % options.length];\n    onSelect(next.id);\n    // Focus has to follow the selection or the next arrow press lands on the old button. Found by\n    // position rather than by an id selector: an id is brand catalog data and can carry characters\n    // a selector would misread, and CSS.escape is not everywhere.\n    trackRef.current\n      ?.querySelectorAll<HTMLButtonElement>(\"button\")\n      [options.indexOf(next)]?.focus();\n  };\n\n  return (\n    <div\n      ref={trackRef}\n      role=\"radiogroup\"\n      aria-label={label}\n      onKeyDown={handleKeyDown}\n      className=\"fermat-chat-carousel-variants mb-1.5 flex items-center gap-1 overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\"\n    >\n      {options.map((option) => {\n        const isSelected = option.id === selectedId;\n        const isSwatch = option.swatch && option.swatch.kind !== \"text\";\n        return (\n          <button\n            key={option.id}\n            ref={isSelected ? selectedRef : undefined}\n            type=\"button\"\n            role=\"radio\"\n            aria-checked={isSelected}\n            // Selectable but not buyable: picking a sold-out option shows the shopper its photo and\n            // price and takes the buy button away, which reads better than a control that refuses\n            // to respond. `aria-disabled`, never `disabled`, so it keeps focus and the tab order.\n            aria-disabled={option.soldOut || undefined}\n            tabIndex={option.id === tabbableId ? 0 : -1}\n            onClick={() => onSelect(option.id)}\n            // A swatch has no text node, so the accessible name has to be supplied. A text chip\n            // clips its label, so a mouse user needs the full value somewhere; its own accessible\n            // name is unaffected, because the text node is complete either way.\n            aria-label={isSwatch ? option.label : undefined}\n            title={option.label}\n            className={cn(\n              // whitespace-nowrap plus a single row keeps the track one line tall, so adding it\n              // never changes card height and controls stay aligned across a row of cards.\n              \"fermat-chat-carousel-variant shrink-0 cursor-pointer overflow-hidden border-2 transition-colors\",\n              // The swatch reads the SAME ratio var as the card image, never a copy, or a brand's\n              // ratio desyncs the thumbnail from the photo above it. The default must stay a var()\n              // fallback here on the box: the brand value is an inline style on the widget root, so\n              // a declaration on any ancestor shadows it and wins. The chip keeps the pill token.\n              // 32px matches hosted tiles' widest `sm` swatch; height follows from the ratio.\n              isSwatch\n                ? \"fermat-chat-carousel-swatch w-8 [aspect-ratio:var(--sa-card-image-ratio,1/1)] rounded-[var(--sa-radius-swatch,var(--sa-radius-card,var(--sa-radius,14px)))]\"\n                : // max-w + ellipsis: a brand option value can be a sentence (\"Fits 27-32in\n                  // waist\"), and one of those would otherwise take the whole track and push every\n                  // other option off screen on first paint.\n                  \"max-w-[7.5rem] text-ellipsis whitespace-nowrap rounded-[var(--sa-radius-variant,var(--sa-radius-pill,var(--sa-radius,100px)))] px-2 py-0.5 font-[family-name:var(--font-brand-primary,inherit)] text-[10px] font-medium leading-[1.4]\",\n              isSelected\n                ? \"fermat-chat-carousel-variant--selected border-[var(--sa-accent-border,var(--sa-accent,#0a0a0a))]\"\n                : \"border-sa-border\",\n              // A swatch carries its own colour or photograph, so the accent fill would hide it;\n              // it shows selection with the border alone.\n              !isSwatch &&\n                (isSelected\n                  ? \"bg-sa-accent text-sa-accent-fg\"\n                  : \"bg-sa-surface-raised text-sa-ink\"),\n              option.soldOut && \"fermat-chat-carousel-variant--oos opacity-50\",\n              option.soldOut && !isSwatch && \"line-through\",\n            )}\n            style={\n              option.swatch?.kind === \"css\"\n                ? { background: option.swatch.color }\n                : undefined\n            }\n          >\n            {option.swatch?.kind === \"image\" ? (\n              <img\n                src={\n                  failedSwatches.has(option.swatch.src)\n                    ? option.swatch.src\n                    : constrainImage(option.swatch.src, {\n                        width: 64,\n                        height: 64,\n                      })\n                }\n                alt=\"\"\n                width={32}\n                height={32}\n                loading=\"lazy\"\n                className=\"fermat-chat-carousel-swatch-img block h-full w-full object-cover\"\n                // Falls back to the raw src, so a swatch never renders as an empty circle nobody can\n                // identify. Re-adding a spent source returns the same Set, so nothing loops.\n                onError={() => {\n                  const raw =\n                    option.swatch?.kind === \"image\" ? option.swatch.src : \"\";\n                  if (raw)\n                    setFailedSwatches((spent) =>\n                      spent.has(raw) ? spent : new Set(spent).add(raw),\n                    );\n                }}\n              />\n            ) : option.swatch?.kind === \"css\" ? null : (\n              option.label\n            )}\n          </button>\n        );\n      })}\n    </div>\n  );\n};\n\ninterface ChatCarouselCardProps {\n  product: ProductV1;\n  /** externalId of the variant the assistant recommended for this product, if any. */\n  variantExternalId?: string;\n  onProductClicked?: (handle: string, variantExternalId?: string) => void;\n  onProductATCClicked?: (handle: string, variantExternalId?: string) => void;\n  onNavigateToProduct?: (\n    product: ProductV1,\n    variantExternalId?: string,\n  ) => void;\n}\n\nconst ChatCarouselCard: React.FC<ChatCarouselCardProps> = ({\n  product,\n  variantExternalId,\n  onProductClicked,\n  onProductATCClicked,\n  onNavigateToProduct,\n}) => {\n  const config = useSamuelConfig();\n  const { t } = useTranslation();\n  const locale =\n    config.locale ??\n    (typeof navigator !== \"undefined\" ? navigator.language : \"en-US\");\n  const actions = resolveActions(config.actions);\n  const imageHeight = requestedImageHeight(config.cardImageRatio);\n  const showAtc = actions.add_to_cart;\n\n  // Optimistic add-to-cart flip: clicking Add to Cart flips the button to \"View Cart\" on the same\n  // tick, without waiting on the host.\n  const [added, setAdded] = useState(false);\n\n  // Shared constant, not a fresh `[]`: a new array every render defeats the memos below, which is\n  // what keeps a 63-colour config from being reparsed and regrouped on every keystroke in the chat.\n  const variants = product.productVariants ?? NO_VARIANTS;\n  // The variant the assistant explicitly recommended, if any.\n  const recommendedVariant = variantExternalId\n    ? variants.find((v) => v.externalId === variantExternalId)\n    : undefined;\n\n  // The colour axis is named by the brand's own config and falls back to the one name every\n  // sampled catalog uses. JSON.parse memoised because a Backcountry config carries 63 colours and\n  // this runs for every card in the row.\n  const swatchConfig = useMemo(() => colorSwatches(product), [product]);\n  const colorOptionName = swatchConfig?.optionName ?? DEFAULT_COLOR_OPTION_NAME;\n  const colorGroups = useMemo(\n    () => groupVariantsByColor(variants, colorOptionName),\n    [variants, colorOptionName],\n  );\n\n  // `variantSelector` defaults OFF and NO brand opts in yet, so only an explicit opt-in sees\n  // `true`. ONE condition gates the tracks, the size step, the pick line\n  // and the ATC gate together: split it and a brand can end up with a gate it cannot satisfy, or a\n  // card that is not byte-identical to today's.\n  const selectorOn = config.variantSelector === true && variants.length > 1;\n  // A single colour is not a choice, so it gets no track; its sizes are resolved at Add to Cart.\n  const showColorTrack = selectorOn && colorGroups.length > 1;\n\n  // What the card opens on. The assistant's recommendation wins even when it has sold out: that IS\n  // the answer it gave, and overriding it would misreport the recommendation. With NO recommendation\n  // the card opens on the first buyable variant, so a shopper never meets a disabled buy button they\n  // did nothing to cause. Nothing in stock at all leaves this undefined and the card opens sold out,\n  // which is then simply the truth.\n  // The first-buyable fallback belongs to the selector: an opted-out brand keeps naming only what\n  // the assistant recommended, so its card stays exactly what it renders today.\n  const seedVariant = selectorOn\n    ? (recommendedVariant ?? variants.find((v) => !(v.maxSellable <= 0)))\n    : recommendedVariant;\n\n  // ONE piece of state per axis is the card's whole opinion about what it is showing; every element\n  // below re-derives from them. Seeded once, which relies on the recommendation being one-shot per\n  // mounted card. Add streaming or regenerate-in-place and this needs a re-sync.\n  // BOTH axes are seeded, so a card opens on something buyable and needs no \"choose first\" state.\n  // The alternative, seeding only the colour, left every multi-size card owing an answer before it\n  // could be added, which is a size row and a dead button on a card the shopper never touched.\n  // Seeded from the GROUP that holds the variant, never from its own raw property value. The groups\n  // fold casings and display the first one seen, so a seed read straight off the variant can carry a\n  // casing no group answers to, and every lookup below compares it with `===`. The unnamed group a\n  // partial axis collapses to has no value, so that case keeps reading the variant.\n  const [selectedColor, setSelectedColor] = useState<string | undefined>(() =>\n    seedVariant\n      ? colorGroups.find((g) => g.variants.includes(seedVariant))?.value ||\n        optionValue(seedVariant, colorOptionName)\n      : undefined,\n  );\n  const [selectedExternalId, setSelectedExternalId] = useState<\n    string | undefined\n  >(seedVariant?.externalId);\n  // Only latches the step OPEN past the point where the size is settled. Opening is derived, not\n  // stored: a host that replaces the action area has no button to press, and gating the reveal on a\n  // press left those cards permanently unresolvable.\n  const [sizeStepOpen, setSizeStepOpen] = useState(false);\n  // Which of the card's images is showing, keyed by the SET it belongs to. Picking another variant\n  // swaps the set, and an index carried over would point at a different photo or past the end. The\n  // key is compared at render, so the reset costs no effect and never paints a stale frame. The\n  // placeholder key matches nothing, so an untouched card shows image one.\n  const [imageNav, setImageNav] = useState<{ key: string; index: number }>({\n    key: \"\",\n    index: 0,\n  });\n  const imageNavRef = useRef<HTMLDivElement>(null);\n  // Sources whose CDN-rewritten URL failed, so the card serves their raw URL instead. Keyed by\n  // source, never by DOM node: the SAME <img> element is reused across paging and variant switches,\n  // so a flag stored on the element is spent for image one and denies image two its fallback. Held\n  // in state so paging back to a failed source skips the request that is already known to fail.\n  const [failedSources, setFailedSources] = useState<ReadonlySet<string>>(\n    () => new Set(),\n  );\n  const markSourceFailed = (src: string) =>\n    setFailedSources((spent) =>\n      spent.has(src) ? spent : new Set(spent).add(src),\n    );\n\n  // The variants the current colour narrows to. With the track on screen and no colour picked yet\n  // nothing is in scope, which is what makes the ATC gate below satisfiable by one click.\n  const colorScope = showColorTrack\n    ? selectedColor\n      ? (colorGroups.find((g) => g.value === selectedColor)?.variants ?? [])\n      : []\n    : variants;\n  const selectedVariant = selectedExternalId\n    ? colorScope.find((v) => v.externalId === selectedExternalId)\n    : undefined;\n  // The one variant the card can add without asking anything more. A colour with several sizes\n  // resolves to nothing until the shopper picks one, whether or not the others are in stock:\n  // silently adding the last sellable size would hand the shopper a size they did not choose.\n  // The opted-out arm keeps `selectedVariant` in the chain. Dropping it made an opted-out brand\n  // show, deep-link and ADD variants[0] while the assistant had recommended something else.\n  const resolvedVariant = selectorOn\n    ? (selectedVariant ?? (colorScope.length === 1 ? colorScope[0] : undefined))\n    : (selectedVariant ?? variants[0]);\n  // Something was genuinely chosen: the assistant's recommendation (which seeds both pieces of\n  // state) or the shopper's own pick. NOT the same as having a `variant` to quote, which every\n  // card always does.\n  const hasSelection = !!selectedColor || !!selectedVariant;\n  // Deep-links and click analytics report a variant ONLY when one was chosen. With the selector\n  // off, `resolvedVariant` is the same first-variant fallback the price line uses, and deep-linking\n  // that would send an unchosen card to an arbitrary variant's PDP.\n  const deepLinkVariant =\n    selectedVariant ?? (hasSelection ? resolvedVariant : undefined);\n\n  // Price and stock still need SOMETHING to quote before a selection exists, and the first variant\n  // is what the card quoted before selection existed at all. The ATC gate below, not this fallback,\n  // is what stops an unchosen variant reaching the cart.\n  const variant = resolvedVariant ?? colorScope[0] ?? variants[0];\n  if (!variant) return null;\n\n  // The two questions the card can still owe an answer to.\n  const colorOwed = showColorTrack && !selectedColor;\n  const sizeOwed = selectorOn && !colorOwed && !resolvedVariant;\n  // Only ever true while the control that answers it is on screen: a disabled button whose question\n  // has no visible control is a permanently dead card. A size owed with the step still closed is\n  // NOT blocked here, because pressing the button is what opens the step.\n  const atcNeedsSelection = colorOwed || (sizeOwed && sizeStepOpen);\n  // Revealed by the Add-to-Cart press, so a card costs one row until the shopper needs the second.\n  // Rarely reached now that both axes are seeded: it takes a colour whose sizes are all sold out.\n  // Stays open once opened, or a shopper who picked a sold-out size loses the control to change it.\n  const sizeOptions = sizeStepOpen ? colorScope : [];\n  // Label the size step by what varies WITHIN the chosen colour, never by the colour itself: every\n  // option in the step shares it, so repeating it only eats the chip's width.\n  // Guarded on size > 1: when the colour is the ONLY property these variants carry, dropping it\n  // leaves nothing to label them with, and identical labels beat blank ones (same call as\n  // distinguishingProperties makes for a product with no varying property at all).\n  const sizeLabelProperties = distinguishingProperties(sizeOptions);\n  if (sizeLabelProperties.size > 1) {\n    for (const name of sizeLabelProperties) {\n      if (name.toLowerCase() === colorOptionName.toLowerCase()) {\n        sizeLabelProperties.delete(name);\n      }\n    }\n  }\n\n  // Quoting one unresolved variant's price named a size the shopper never picked. Hiding the price\n  // instead is worse: nothing resolves until the size step opens, so most cards would paint blank.\n  // So price the SCOPE. Sizes almost always share a price, and then there is nothing arbitrary to\n  // report; when they really differ the card says where the range starts rather than choosing.\n  const priceScope = resolvedVariant\n    ? [resolvedVariant]\n    : colorScope.length > 0\n      ? colorScope\n      : variants;\n  const priced = priceScope.filter((v) => v.unitPrice != null);\n  const priceVaries = new Set(priced.map((v) => Number(v.unitPrice))).size > 1;\n  const priceSource =\n    priced.reduce<ProductVariant | undefined>(\n      (lowest, v) =>\n        !lowest || Number(v.unitPrice) < Number(lowest.unitPrice) ? v : lowest,\n      undefined,\n    ) ?? variant;\n  const unitPrice = priceSource.unitPrice;\n  // Suppressed while the price varies: the discount belongs to the cheapest size, and showing it\n  // struck through next to a \"From\" price claims a saving the shopper's size may not carry.\n  const listPrice = priceVaries ? undefined : priceSource.listPrice;\n  const currency = priceSource.currency || \"USD\";\n  // Image, title and the deep-link below all key off what the shopper SELECTED, never the price\n  // fallback. With nothing selected the card is speaking about the product, so it shows the\n  // product's own imagery and title; picking a colour makes every element describe that colour at\n  // once, which is the whole point of the swatch. The last fallback keeps a card with no product\n  // imagery from rendering blank.\n  const images = cardImages(product, variant, hasSelection);\n  const imageKey = images.map((i) => i.src).join(\",\");\n  const imageIndex = imageNav.key === imageKey ? imageNav.index : 0;\n  const showImage = (index: number) =>\n    setImageNav({\n      key: imageKey,\n      index: Math.min(Math.max(index, 0), images.length - 1),\n    });\n  // The arrow that reaches an end unmounts itself, and a browser drops the focus of an element it\n  // removes, which would put a keyboard shopper back at the top of the page mid-carousel. Rendered\n  // synchronously so the surviving arrow exists to take the focus in the same press.\n  const stepImage = (arrow: HTMLElement, index: number) => {\n    flushSync(() => showImage(index));\n    const nav = imageNavRef.current;\n    if (nav && !nav.contains(arrow)) nav.querySelector(\"button\")?.focus();\n  };\n  // Opted out: the title is what it is on main, the recommended variant's name or the product's,\n  // and no second line. `product.name` is typed non-optional but served as \"\" by some catalogs.\n  const productName = selectorOn\n    ? product.name || variant.name\n    : recommendedVariant?.name || product.name;\n  // What the shopper has actually settled and nothing more: a colour whose size step is still open\n  // says the colour, never the arbitrary first size the price line quotes. Gated on `hasSelection`\n  // for the same reason the image is, so an unchosen card is not credited with a colourway the\n  // assistant never picked.\n  const picked =\n    !selectorOn || !hasSelection\n      ? \"\"\n      : resolvedVariant\n        ? variantPropertyLabel(resolvedVariant) || resolvedVariant.name\n        : (selectedColor ?? \"\");\n  // Equality, not containment: KSO names every variant after the product, so showing both prints the\n  // dress twice. Containment would instead eat a real colour whose word sits in the product name\n  // (\"Blue\" under \"Blue Jacket\").\n  const pickedLabel = picked === productName ? \"\" : picked;\n  // The alt text is the one place the two stay joined: it has a single string to describe a card the\n  // info block below gets two elements for.\n  const name = pickedLabel ? `${productName} - ${pickedLabel}` : productName;\n\n  // The brand's own site keeps temporarily-out-of-stock products listed, so the carousel does too\n  // (matching what the shopper sees on the PDP), but it has to SAY so, or the card reads as\n  // buyable. Same signal the storefront uses for its own sold-out states (Offer/GiftWithPurchase).\n  // Stock is read off whatever the card is actually speaking about. Once one variant is resolved\n  // that is the answer. Before then a colour is sold out only when EVERY size under it is, because\n  // reading the first size alone hides an in-stock size behind a gone one and removes the very\n  // button that reveals the size step. With nothing selected at all the scope is empty and this\n  // falls back to the same first-variant reading the card has always used.\n  const stockScope = resolvedVariant\n    ? [resolvedVariant]\n    : colorScope.length > 0\n      ? colorScope\n      : [variant];\n  const outOfStock = stockScope.every((v) => v.maxSellable <= 0);\n  // The press that only reveals the size step, named once so the label and the handler below cannot\n  // disagree. A size auto-picked for pricing is not a size the shopper confirmed, so this press\n  // adds nothing, and a button reading \"Add to Cart\" would promise what the click does not do.\n  const sizeStepPending = selectorOn && colorScope.length > 1 && !sizeStepOpen;\n  // Why the button cannot be pressed, in the order the shopper can act on: nothing to buy at all,\n  // then a choice still owed. Silence when it is live.\n  const atcLabel = outOfStock\n    ? t(\"outOfStockLabel\")\n    : colorOwed || sizeOwed || sizeStepPending\n      ? t(\"variantSelectPrompt\")\n      : t(\"addToCartLabel\");\n\n  // Card enrichment, each rendered only when the data is present. A promo badge (product- or\n  // variant-scoped) or a status label; the brand name; a star rating. See the ProductV1 fields.\n  const brand = product.brand?.trim() || undefined;\n  // Promo before status, variant before product, in that order of precedence. A status badge is an\n  // operational label (\"FINAL SALE\") and must never bury a marketing promo the brand is running,\n  // whichever scope the promo is on.\n  const badge =\n    variant.promotionBadges?.[0]?.badgeText ??\n    product.promotionBadges?.[0]?.badgeText ??\n    variant.statusBadges?.[0]?.badgeText;\n  const rating = product.reviews?.averageRating;\n  const reviewCount = product.reviews?.count;\n  const onSale =\n    unitPrice != null &&\n    listPrice != null &&\n    Number(listPrice) > Number(unitPrice);\n  const discountPercent = onSale\n    ? Math.round(\n        ((Number(listPrice) - Number(unitPrice)) / Number(listPrice)) * 100,\n      )\n    : 0;\n\n  // Deep-link a variant ONLY when one is selected; an unchosen card links to the product PDP (no\n  // skid), not an arbitrary first variant.\n  const href = resolveCardHref(\n    product,\n    config,\n    deepLinkVariant?.productUrl ?? undefined,\n    deepLinkVariant?.externalId ?? undefined,\n  );\n\n  const handleAddToCartClick = (e: React.MouseEvent) => {\n    e.preventDefault();\n    e.stopPropagation();\n    // A blocked add emits nothing: the button is disabled, and a programmatic dispatch ignores\n    // `disabled`, so the guard has to live here too.\n    if (atcNeedsSelection) return;\n    // A size was auto-picked so the card could quote a real price and open on something buyable,\n    // but the shopper never confirmed it. The first press asks; the second adds. This is the ONLY\n    // route to the size options, which is what keeps an untouched card one row tall.\n    // `selectorOn`, or an opted-out brand gets a step it renders no track for: a dead card.\n    if (sizeStepPending) {\n      setSizeStepOpen(true);\n      return;\n    }\n    if (!resolvedVariant) return;\n    // `resolvedVariant`, not `selectedVariant`: report the variant that is actually added. On a\n    // single-variant card nothing is ever \"selected\", and analytics must not read that as unknown.\n    onProductATCClicked?.(product.handle, resolvedVariant.externalId);\n    // No host to receive the add: the bridge is one-way, so flipping would be an unfalsifiable\n    // success claim. A missing variant externalId is NOT a blocker, because the host resolves the\n    // default variant when none is named (ShoppingAssistantCartBridge), so requiring one here would\n    // disable a path that works.\n    if (!config.onAddToCart) return;\n    void config.onAddToCart(product, resolvedVariant.externalId ?? undefined);\n    // Deliberately does NOT collapse here. The bridge is one-way, so a collapse on the same tick\n    // would hide the panel on a host-side failure the shopper never saw. Revisit only with an ack.\n    // Optimistic flip \u2192 View Cart on the same tick; this unmounts the ATC button so it can't be\n    // clicked again. Still optimistic about the host's own failures (unresolved variant, fetch or\n    // cart-mutation error), which need an ack message the bridge does not carry yet.\n    setAdded(true);\n  };\n\n  const handleViewCartClick = (e: React.MouseEvent) => {\n    e.preventDefault();\n    e.stopPropagation();\n    void config.onViewCart?.(product, variant.externalId ?? undefined);\n  };\n\n  const handleProductLinkClick = (e: React.MouseEvent) => {\n    onProductClicked?.(product.handle, deepLinkVariant?.externalId);\n    // navigate_to_product off: inert card, suppress both assistant nav and the native link.\n    if (!actions.navigate_to_product) {\n      e.preventDefault();\n      return;\n    }\n    if (onNavigateToProduct) {\n      e.preventDefault();\n      // Pass the selected variant so the host deep-links it (matches the variant-aware href).\n      onNavigateToProduct(product, deepLinkVariant?.externalId ?? undefined);\n    }\n  };\n\n  return (\n    <div className=\"fermat-chat-carousel-card relative flex snap-start w-[140px] flex-[0_0_140px] max-[480px]:w-[120px] max-[480px]:flex-[0_0_120px] cursor-pointer flex-col overflow-hidden rounded-[var(--sa-radius-card,var(--sa-radius,14px))] border border-sa-border bg-sa-surface-raised shadow-[0_2px_10px_rgba(0,0,0,0.08)]\">\n      <a\n        href={actions.navigate_to_product ? href : undefined}\n        className=\"fermat-chat-carousel-card-link flex min-h-0 flex-1 flex-col text-[inherit] no-underline\"\n        onClick={handleProductLinkClick}\n      >\n        {images.length > 0 && (\n          <div className=\"fermat-chat-carousel-card-image relative w-full overflow-hidden\">\n            <div\n              className=\"fermat-chat-carousel-img-track flex h-full w-full transition-transform duration-300 ease-out motion-reduce:transition-none\"\n              style={{ transform: `translateX(-${imageIndex * 100}%)` }}\n            >\n              {images.map((image, index) => (\n                <img\n                  key={image.src}\n                  src={\n                    failedSources.has(image.src)\n                      ? image.src\n                      : constrainImage(image.src, {\n                          width: IMAGE_WIDTH,\n                          height: imageHeight,\n                        })\n                  }\n                  alt={image.altText || name}\n                  aria-hidden={index !== imageIndex || undefined}\n                  width={IMAGE_WIDTH}\n                  height={imageHeight}\n                  loading=\"lazy\"\n                  className=\"fermat-chat-carousel-img block h-full w-full flex-[0_0_100%] object-cover\"\n                  // Re-render serves the raw src. A raw src that also fails re-enters with the source\n                  // already spent, which returns the same Set, so React bails out and nothing loops.\n                  onError={() => markSourceFailed(image.src)}\n                />\n              ))}\n            </div>\n          </div>\n        )}\n        <div className=\"fermat-chat-carousel-card-info p-3\">\n          {brand && (\n            <p className=\"fermat-chat-carousel-card-brand m-0 mb-1 text-[11px] font-bold text-sa-ink\">\n              {brand}\n            </p>\n          )}\n          <p className=\"fermat-chat-carousel-card-name m-0 overflow-hidden text-sm font-medium leading-[1.4] text-sa-ink [-webkit-box-orient:vertical] [-webkit-line-clamp:2] [display:-webkit-box]\">\n            {productName}\n          </p>\n          {/* Its own line, not a suffix on the name: a CC product name already fills the two-line\n              clamp, so an appended pick is clipped away on every card that has one. */}\n          {pickedLabel && (\n            <p className=\"fermat-chat-carousel-card-variant m-0 mt-0.5 overflow-hidden text-ellipsis whitespace-nowrap text-[11px] leading-[1.4] text-sa-muted\">\n              {pickedLabel}\n            </p>\n          )}\n          <div className=\"fermat-chat-carousel-card-price mt-2 flex flex-wrap items-center gap-1.5\">\n            {unitPrice != null && (\n              <span\n                className={cn(\n                  \"fermat-chat-carousel-unit-price text-sm font-semibold leading-none text-sa-ink\",\n                  onSale &&\n                    \"fermat-chat-carousel-unit-price--sale text-sa-sale-price\",\n                )}\n              >\n                {priceVaries\n                  ? t(\"priceFromLabel\", {\n                      price: formatPrice(unitPrice, currency, \"symbol\", locale),\n                    })\n                  : formatPrice(unitPrice, currency, \"symbol\", locale)}\n              </span>\n            )}\n            {onSale && listPrice != null && (\n              <span className=\"fermat-chat-carousel-list-price text-xs leading-none text-[var(--sa-muted,#999)] line-through\">\n                {formatPrice(listPrice, currency, \"symbol\", locale)}\n              </span>\n            )}\n            {discountPercent > 0 && (\n              <span className=\"fermat-chat-carousel-discount whitespace-nowrap rounded-[var(--sa-radius,100px)] bg-[var(--sa-surface-alt,#f5f5f5)] px-1.5 py-0.5 text-[11px] font-bold leading-none text-sa-sale-price\">\n                {t(\"discountLabel\", { percent: discountPercent })}\n              </span>\n            )}\n          </div>\n          {rating != null && rating > 0 && (\n            <div className=\"fermat-chat-carousel-rating mt-1 flex items-center gap-1 text-xs text-[var(--sa-muted,#666)]\">\n              <span\n                className=\"fermat-chat-carousel-star leading-none text-sa-star\"\n                aria-hidden=\"true\"\n              >\n                \u2605\n              </span>\n              <span>\n                {rating.toFixed(1)}\n                {reviewCount ? ` (${reviewCount})` : \"\"}\n              </span>\n            </div>\n          )}\n        </div>\n      </a>\n      {/* Card-level, not inside the image block: a product whose media is all video has no photo to\n          show, and nesting the badge under one hid \"Out of stock\" exactly where stock matters most.\n          z-10 keeps it above the image-nav overlay, which spans the whole image box and would\n          otherwise cover it on a short, wide brand ratio.\n          ONE slot: a sold-out card must not also advertise a deal it cannot honour, so the status\n          displaces the promo rather than stacking with it. */}\n      {(outOfStock || badge) && (\n        <span\n          className={cn(\n            // pointer-events-none because it left the anchor: a label must not eat the tap that used\n            // to reach the product link, and a tap in the nav buttons' band belongs to the button.\n            \"pointer-events-none absolute left-1.5 top-1.5 z-10 rounded-[var(--sa-radius-pill,var(--sa-radius,100px))] px-2 py-0.5 text-[10px] font-semibold tracking-[0.02em]\",\n            // Each state defaults to the shared token it used to read literally, so an unset brand\n            // is pixel-identical and the two states are independently tintable. The border rides the\n            // shadow as a 1px ring: box-shadow never affects layout, so unset costs no size.\n            outOfStock\n              ? \"fermat-chat-carousel-oos-badge bg-[var(--sa-oos-bg,var(--sa-surface-raised,#ffffff))] text-[var(--sa-oos-fg,var(--sa-ink,#0a0a0a))] shadow-[0_0_0_1px_var(--sa-oos-border,transparent),0_1px_4px_rgba(0,0,0,0.16)]\"\n              : \"fermat-chat-carousel-badge bg-[var(--sa-promo-bg,var(--sa-surface-raised,#ffffff))] text-[var(--sa-promo-fg,var(--sa-ink,#0a0a0a))] shadow-[0_0_0_1px_var(--sa-promo-border,transparent),0_1px_4px_rgba(0,0,0,0.16)]\",\n          )}\n        >\n          {outOfStock ? t(\"outOfStockLabel\") : badge}\n        </span>\n      )}\n      {/* Siblings of the anchor, never children: a <button> inside an <a> is invalid markup and\n          every press would also navigate. Shaped from the same ratio var the image reads, and\n          pointer-events-none, so the rest of the photo stays the product link. A slide stack, not a\n          scroller: no overflow-x, no snap, no onScroll, so the carousel track keeps sole ownership\n          of horizontal gestures. */}\n      {images.length > 1 && (\n        <div\n          ref={imageNavRef}\n          className=\"fermat-chat-carousel-img-nav pointer-events-none absolute inset-x-0 top-0 [aspect-ratio:var(--sa-card-image-ratio,1/1)]\"\n        >\n          {[\n            {\n              delta: -1,\n              label: t(\"imagePrevLabel\"),\n              path: \"M15 5l-7 7 7 7\",\n              side: \"left-2\",\n              show: imageIndex > 0,\n            },\n            {\n              delta: 1,\n              label: t(\"imageNextLabel\"),\n              path: \"M9 5l7 7-7 7\",\n              side: \"right-2\",\n              show: imageIndex < images.length - 1,\n            },\n          ]\n            .filter(({ show }) => show)\n            .map(({ delta, label, path, side }) => (\n              <button\n                key={delta}\n                type=\"button\"\n                aria-label={label}\n                onClick={(e) => stepImage(e.currentTarget, imageIndex + delta)}\n                className={cn(\n                  \"fermat-chat-carousel-img-nav-btn pointer-events-auto absolute top-1/2 flex h-7 w-7 -translate-y-1/2 cursor-pointer items-center justify-center rounded-full border-0 bg-white/70 p-0 text-sa-ink shadow-sm\",\n                  side,\n                )}\n              >\n                <svg\n                  className=\"block h-[19px] w-[19px]\"\n                  viewBox=\"0 0 24 24\"\n                  fill=\"none\"\n                  aria-hidden=\"true\"\n                >\n                  <path\n                    d={path}\n                    stroke=\"currentColor\"\n                    strokeWidth=\"2\"\n                    strokeLinecap=\"round\"\n                    strokeLinejoin=\"round\"\n                  />\n                </svg>\n              </button>\n            ))}\n          <div className=\"fermat-chat-carousel-img-dots absolute bottom-1.5 left-1/2 h-1.5 w-8 -translate-x-1/2 rounded-full bg-sa-ink/30\">\n            <div\n              className=\"fermat-chat-carousel-img-dot absolute inset-y-0 rounded-full bg-sa-ink transition-[left] duration-200 motion-reduce:transition-none\"\n              style={{\n                width: `${100 / images.length}%`,\n                left: `${imageIndex * (100 / images.length)}%`,\n              }}\n            />\n          </div>\n        </div>\n      )}\n      {/* Renders when there is anything to put in it. The open size step counts: a shopper who\n          picked a sold-out size loses the buy button, and dropping the block with it would take\n          away the control they need to pick another. */}\n      {(config.renderProductActions ||\n        showColorTrack ||\n        sizeOptions.length > 0 ||\n        showAtc) && (\n        <div className=\"fermat-chat-carousel-card-actions mt-auto px-2 pb-2\">\n          {showColorTrack && (\n            <OptionTrack\n              options={colorGroups.map((group) => ({\n                id: group.value,\n                label: group.value,\n                // A colour is gone only when every size under it is gone.\n                soldOut: group.variants.every((v) => v.maxSellable <= 0),\n                swatch: resolveSwatch(group, swatchConfig?.colors),\n              }))}\n              selectedId={selectedColor}\n              onSelect={(value) => {\n                setSelectedColor(value);\n                // Land on this colour's first buyable size, the same rule the card opened on. The\n                // old size belongs to the old colour, and carrying it over would add a size the\n                // shopper never confirmed here; dropping it entirely would owe an answer again.\n                const group = colorGroups.find((g) => g.value === value);\n                setSelectedExternalId(\n                  group?.variants.find((v) => !(v.maxSellable <= 0))\n                    ?.externalId,\n                );\n                setSizeStepOpen(false);\n                // The optimistic flip belongs to the variant that was added, not to the card. A\n                // shopper who adds red and then picks blue must get \"Add to Cart\" back, or blue is\n                // unbuyable and \"View Cart\" claims an add that never happened.\n                setAdded(false);\n              }}\n              label={t(\"colorTrackLabel\")}\n            />\n          )}\n          {sizeOptions.length > 0 && (\n            <OptionTrack\n              options={sizeOptions\n                .map((v) => ({\n                  id: v.externalId,\n                  label: variantLabel(v, sizeLabelProperties),\n                  soldOut: v.maxSellable <= 0,\n                }))\n                .sort((a, b) => compareSizeLabels(a.label, b.label))}\n              selectedId={selectedExternalId}\n              onSelect={(externalId) => {\n                setSelectedExternalId(externalId);\n                // Latch it: answering the question is what would otherwise remove the control.\n                setSizeStepOpen(true);\n                setAdded(false);\n              }}\n              label={t(\"sizeTrackLabel\")}\n            />\n          )}\n          {config.renderProductActions\n            ? config.renderProductActions(product, resolvedVariant)\n            : showAtc && (\n                // The button is swapped out entirely on add, so announce the change: a sighted\n                // shopper sees the label change from Add to Cart to View Cart, a screen-reader\n                // user otherwise gets nothing. Scoped to the buttons: a variant change is the\n                // shopper's own action and is not a status worth interrupting them for.\n                <div role=\"status\" aria-live=\"polite\">\n                  {!added ? (\n                    <button\n                      className=\"fermat-chat-carousel-atc-btn w-full cursor-pointer rounded-[var(--sa-radius,6px)] border border-[var(--sa-accent-border,var(--sa-accent,#0a0a0a))] bg-sa-accent px-1 py-1.5 text-xs font-semibold leading-[1.2] text-sa-accent-fg transition-[opacity,background,transform] duration-150 hover:enabled:opacity-85 active:enabled:scale-[0.97] disabled:cursor-not-allowed disabled:opacity-40\"\n                      data-sr-role=\"assistant-atc\"\n                      aria-label={atcLabel}\n                      title={atcLabel}\n                      // Disabled, never removed: a button that vanishes shifts everything below it\n                      // and reads as a broken card. The handler keeps its own guard, since a\n                      // programmatic dispatch ignores `disabled`.\n                      disabled={\n                        !config.onAddToCart || atcNeedsSelection || outOfStock\n                      }\n                      onClick={handleAddToCartClick}\n                    >\n                      {/* The same string the accessible name uses. A greyed button reading \"Add to\n                          Cart\" makes a sighted shopper hover to find out why it will not respond. */}\n                      {atcLabel}\n                    </button>\n                  ) : (\n                    <button\n                      className=\"fermat-chat-carousel-view-cart-btn block w-full cursor-pointer rounded-[var(--sa-radius,6px)] border border-[var(--fermat-color-secondary-text,var(--sa-accent,#0a0a0a))] bg-[var(--fermat-color-secondary-bg,transparent)] px-1 py-1.5 text-center text-xs font-semibold leading-[1.2] text-[var(--fermat-color-secondary-text,var(--sa-accent,#0a0a0a))] no-underline transition-[opacity,background,transform] duration-150 hover:opacity-85 active:scale-[0.97]\"\n                      data-sr-role=\"assistant-view-cart\"\n                      aria-label={t(\"viewCartLabel\")}\n                      title={t(\"viewCartLabel\")}\n                      onClick={handleViewCartClick}\n                    >\n                      {t(\"viewCartLabel\")}\n                    </button>\n                  )}\n                </div>\n              )}\n        </div>\n      )}\n    </div>\n  );\n};\n\ninterface ChatProductCarouselProps {\n  productHandles: string[];\n  /** Parallel to productHandles: the recommended variant externalId per handle (\"\" = product-level). */\n  variantExternalIds?: string[];\n  heading: string;\n  conversationId?: string;\n  source?: \"welcome_recs\" | \"assistant_response\";\n  onProductClicked?: (handle: string, variantExternalId?: string) => void;\n  onProductATCClicked?: (handle: string, variantExternalId?: string) => void;\n  onNavigateToProduct?: (\n    product: ProductV1,\n    variantExternalId?: string,\n  ) => void;\n}\n\nexport const ChatProductCarousel: React.FC<ChatProductCarouselProps> = ({\n  productHandles,\n  variantExternalIds,\n  heading,\n  source,\n  onProductClicked,\n  onProductATCClicked,\n  onNavigateToProduct,\n}) => {\n  const wrapperRef = useRef<HTMLDivElement>(null);\n  const inView = useInView(wrapperRef);\n  const { products, isLoading } = useProductsForHandles(productHandles, inView);\n  const skeletonConfig = useSamuelConfig();\n\n  // Desktop-only prev/next affordance (CSS gates to hover/fine-pointer). Each arrow appears only\n  // when there is somewhere to go in that direction: no prev at the start, no next at the end.\n  // Measured rather than styled, because the CSS for it (`scroll-state()` container queries) is\n  // Chromium-only and this widget loads on any brand's site.\n  const scrollRef = useRef<HTMLDivElement>(null);\n  const [edges, setEdges] = useState({ atStart: true, atEnd: true });\n  useEffect(() => {\n    const el = scrollRef.current;\n    if (!el) return;\n    const update = () => {\n      const overflowing = el.scrollWidth > el.clientWidth + 1;\n      // 1px tolerance at both ends: fractional layout widths leave scrollLeft a hair off zero, and\n      // scrollLeft + clientWidth a hair short of scrollWidth, which would strand an arrow on\n      // forever. Not overflowing reads as both edges at once, which hides the pair.\n      setEdges({\n        atStart: !overflowing || el.scrollLeft <= 1,\n        atEnd:\n          !overflowing || el.scrollLeft + el.clientWidth >= el.scrollWidth - 1,\n      });\n    };\n    update();\n    el.addEventListener(\"scroll\", update, { passive: true });\n    // ResizeObserver over a window listener: the inline placement renders inside a host-sized box\n    // that can change width with no window resize at all. Same degradation as useInView where the\n    // observer is missing (SSR / jsdom), falling back to the window event.\n    if (typeof ResizeObserver === \"undefined\") {\n      window.addEventListener(\"resize\", update);\n      return () => {\n        el.removeEventListener(\"scroll\", update);\n        window.removeEventListener(\"resize\", update);\n      };\n    }\n    const observer = new ResizeObserver(update);\n    observer.observe(el);\n    return () => {\n      el.removeEventListener(\"scroll\", update);\n      observer.disconnect();\n    };\n  }, [products.length]);\n  const scrollByStep = (dir: 1 | -1) => {\n    const el = scrollRef.current;\n    if (el)\n      el.scrollBy({ left: dir * el.clientWidth * 0.8, behavior: \"smooth\" });\n  };\n\n  // Defer the product fetch until the carousel scrolls into view (STO-608): until then, and while\n  // the fetch is in flight, render skeleton cards that both reserve the space and act as the\n  // observer target. Only a confirmed empty result (fetched in view, nothing back) renders nothing.\n  if (products.length === 0) {\n    if (inView && !isLoading) return null;\n    const skeletonCount = Math.min(productHandles.length || 3, 6);\n    return (\n      <div\n        ref={wrapperRef}\n        className={cn(\n          \"fermat-chat-carousel-wrapper max-w-[85%] p-0\",\n          source && \"max-w-full\",\n        )}\n      >\n        {heading && <p className={CAROUSEL_HEADING_CLASS}>{heading}</p>}\n        <div\n          className={cn(\n            \"fermat-chat-carousel flex items-stretch gap-[5px] snap-x snap-proximity overflow-x-auto pb-1 [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\",\n            source === \"assistant_response\" && \"fermat-chat-carousel-fill\",\n          )}\n          aria-busy=\"true\"\n        >\n          {Array.from({ length: skeletonCount }).map((_, i) => (\n            <div\n              key={i}\n              className=\"fermat-chat-carousel-card fermat-chat-carousel-card-skeleton flex snap-start w-[140px] flex-[0_0_140px] max-[480px]:w-[120px] max-[480px]:flex-[0_0_120px] cursor-default pointer-events-none flex-col overflow-hidden rounded-[var(--sa-radius-card,var(--sa-radius,14px))] border border-sa-border bg-sa-surface-raised shadow-[0_2px_10px_rgba(0,0,0,0.08)]\"\n              aria-hidden=\"true\"\n            >\n              <div className=\"fermat-chat-carousel-card-image fermat-chat-skeleton w-full overflow-hidden bg-[var(--sa-surface-alt,#f5f5f5)]\" />\n              {/* Each bar is `1.4em` at the type size of the line it stands in for, so the block is\n                  the same height as the loaded card's and the carousel does not resize under the\n                  shopper when data lands. Two title lines, because the title clamps to two. */}\n              <div className=\"fermat-chat-carousel-card-info p-3\">\n                <div className=\"fermat-chat-skeleton fermat-chat-skeleton-line h-[1.4em] rounded text-sm\" />\n                <div className=\"fermat-chat-skeleton fermat-chat-skeleton-line fermat-chat-skeleton-line-short h-[1.4em] w-[70%] rounded text-sm\" />\n                <div className=\"fermat-chat-skeleton fermat-chat-skeleton-line mt-0.5 h-[1.4em] w-[45%] rounded text-[11px]\" />\n                <div className=\"fermat-chat-skeleton fermat-chat-skeleton-line mt-2 h-[1.4em] w-[55%] rounded text-sm\" />\n              </div>\n              {/* The actions area is reserved only when the host actually wired Add to Cart, which\n                  is the one part of the loaded card knowable before the products arrive. */}\n              {resolveActions(skeletonConfig.actions).add_to_cart && (\n                <div className=\"fermat-chat-carousel-card-actions mt-auto px-2 pb-2\">\n                  <div className=\"fermat-chat-skeleton h-[26px] w-full rounded-[var(--sa-radius,6px)]\" />\n                </div>\n              )}\n            </div>\n          ))}\n        </div>\n      </div>\n    );\n  }\n\n  // Pair variant ids back by handle (useProductsForHandles may reorder/dedup). Strip tile/context\n  // suffixes: the assistant returns handles like `...?tile=` but product-api echoes the bare handle,\n  // so key + look up on the bare form or every lookup misses and variants get dropped.\n  const bareHandle = (h: string) => h.split(/[?#]/)[0];\n  const variantByHandle = new Map(\n    productHandles.map((h, i) => [\n      bareHandle(h),\n      variantExternalIds?.[i] || \"\",\n    ]),\n  );\n\n  return (\n    <div\n      ref={wrapperRef}\n      className={cn(\n        \"fermat-chat-carousel-wrapper max-w-[85%] p-0\",\n        source && \"max-w-full\",\n        source === \"assistant_response\" && \"fermat-chat-carousel-wrapper-fill\",\n      )}\n    >\n      {heading && <p className={CAROUSEL_HEADING_CLASS}>{heading}</p>}\n      <div className=\"fermat-chat-carousel-viewport relative\">\n        <div\n          ref={scrollRef}\n          className={cn(\n            \"fermat-chat-carousel flex items-stretch gap-[5px] snap-x snap-proximity overflow-x-auto pb-1 [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\",\n            source === \"assistant_response\" && \"fermat-chat-carousel-fill\",\n          )}\n        >\n          {products.map((product) => (\n            <ChatCarouselCard\n              key={product.handle}\n              product={product}\n              variantExternalId={\n                variantByHandle.get(bareHandle(product.handle)) || undefined\n              }\n              onProductClicked={onProductClicked}\n              onProductATCClicked={onProductATCClicked}\n              onNavigateToProduct={onNavigateToProduct}\n            />\n          ))}\n        </div>\n        {/* Full-bleed overlay rather than a justify-between row: each arrow is positioned on its own\n            edge, so hiding one never shifts the other into the wrong place. */}\n        {!(edges.atStart && edges.atEnd) && (\n          <div className=\"fermat-chat-carousel-arrows pointer-events-none absolute inset-0 z-[2]\">\n            {!edges.atStart && (\n              <button\n                type=\"button\"\n                className=\"fermat-chat-carousel-arrow pointer-events-auto absolute left-0 top-1/2 -ml-2 flex h-11 w-11 -translate-y-1/2 cursor-pointer items-center justify-center rounded-full border border-[var(--sa-border,#d4d4d4)] bg-sa-surface-raised text-[var(--sa-ink,#1a1a1a)] shadow-[0_4px_14px_rgba(0,0,0,0.16)] transition-[background,border-color,transform] duration-150 hover:border-[var(--sa-border,#ccc)] hover:bg-[var(--sa-surface-alt,#f5f5f5)] hover:scale-105\"\n                aria-label=\"Scroll to previous products\"\n                onClick={() => scrollByStep(-1)}\n              >\n                <svg\n                  className=\"fermat-chat-carousel-arrow-icon block h-5 w-5\"\n                  viewBox=\"0 0 24 24\"\n                  fill=\"none\"\n                  aria-hidden=\"true\"\n                >\n                  <path\n                    d=\"M15 5l-7 7 7 7\"\n                    stroke=\"currentColor\"\n                    strokeWidth=\"2.25\"\n                    strokeLinecap=\"round\"\n                    strokeLinejoin=\"round\"\n                  />\n                </svg>\n              </button>\n            )}\n            {!edges.atEnd && (\n              <button\n                type=\"button\"\n                className=\"fermat-chat-carousel-arrow pointer-events-auto absolute right-0 top-1/2 -mr-2 flex h-11 w-11 -translate-y-1/2 cursor-pointer items-center justify-center rounded-full border border-[var(--sa-border,#d4d4d4)] bg-sa-surface-raised text-[var(--sa-ink,#1a1a1a)] shadow-[0_4px_14px_rgba(0,0,0,0.16)] transition-[background,border-color,transform] duration-150 hover:border-[var(--sa-border,#ccc)] hover:bg-[var(--sa-surface-alt,#f5f5f5)] hover:scale-105\"\n                aria-label=\"Scroll to next products\"\n                onClick={() => scrollByStep(1)}\n              >\n                <svg\n                  className=\"fermat-chat-carousel-arrow-icon block h-5 w-5\"\n                  viewBox=\"0 0 24 24\"\n                  fill=\"none\"\n                  aria-hidden=\"true\"\n                >\n                  <path\n                    d=\"M9 5l7 7-7 7\"\n                    stroke=\"currentColor\"\n                    strokeWidth=\"2.25\"\n                    strokeLinecap=\"round\"\n                    strokeLinejoin=\"round\"\n                  />\n                </svg>\n              </button>\n            )}\n          </div>\n        )}\n      </div>\n    </div>\n  );\n};\n", "export interface ConstrainImageOptions {\n  width: number;\n  height?: number;\n  /** Device pixel ratio. Defaults to the browser's, capped at 3, or 1 outside a browser. */\n  dpr?: number;\n  /** ImageKit `q-` value (1-100). Ignored by every other host. */\n  quality?: number;\n}\n\n/**\n * Point a Fermat static asset at ImageKit so it can be transformed. The `fermat-static` bucket is\n * reachable on three hosts at the same object path (tile-experience `Media/model.ts`\n * fileLocationToUrl), but only ImageKit resizes. Anything else is returned untouched.\n */\nfunction toImageKitSrc(src: string): string {\n  let url: URL;\n  try {\n    url = new URL(src);\n  } catch {\n    return src;\n  }\n\n  const prefix =\n    url.hostname === \"storage.googleapis.com\"\n      ? \"/fermat-static/\"\n      : url.hostname === \"static.fermatcommerce.com\"\n        ? \"/\"\n        : null;\n  if (prefix === null || !url.pathname.startsWith(prefix)) return src;\n\n  // Mutate a clone rather than rebuild the string: this cannot throw, and it carries the query\n  // and fragment over for free.\n  const rewritten = new URL(url);\n  rewritten.hostname = \"ik.imagekit.io\";\n  rewritten.pathname = `/fermat/${url.pathname.slice(prefix.length)}`;\n  return rewritten.toString();\n}\n\n/** Resize and optimize a product image URL per CDN host. Unknown hosts fall through untouched. */\nexport function constrainImage(\n  src: string | undefined,\n  opts: ConstrainImageOptions,\n): string | undefined {\n  if (!src) return src;\n\n  let url: URL;\n  try {\n    url = new URL(\n      src,\n      typeof window !== \"undefined\"\n        ? window.location.href\n        : \"https://placeholder.invalid\",\n    );\n  } catch {\n    return src;\n  }\n\n  const dpr =\n    opts.dpr ??\n    (typeof window !== \"undefined\"\n      ? Math.min(window.devicePixelRatio || 1, 3)\n      : 1);\n  const host = url.hostname;\n\n  // ImageKit: a single `tr` query param carries the transform chain.\n  if (host === \"ik.imagekit.io\") {\n    const tr = [\n      `w-${opts.width}`,\n      opts.height ? `h-${opts.height}` : null,\n      `dpr-${dpr}`,\n      opts.quality ? `q-${opts.quality}` : null,\n      \"c-at_max\",\n    ]\n      .filter(Boolean)\n      .join(\",\");\n    url.searchParams.set(\"tr\", tr);\n    return url.toString();\n  }\n\n  // Shopify CDN: DPR-scaled width/height query params.\n  if (host.endsWith(\"cdn.shopify.com\")) {\n    url.searchParams.set(\"width\", String(Math.round(opts.width * dpr)));\n    if (opts.height)\n      url.searchParams.set(\"height\", String(Math.round(opts.height * dpr)));\n    return url.toString();\n  }\n\n  // Backcountry: rewrite slow www origin to the content CDN host (host-only; path rewrite pending STO-524).\n  if (host === \"www.backcountry.com\") {\n    url.hostname = \"content.backcountry.com\";\n    return url.toString();\n  }\n\n  return src;\n}\n\n/** Above ImageKit's default 80: an avatar is small and round, so banding on a face is obvious. */\nconst AVATAR_QUALITY = 90;\n\n/**\n * Fit a persona avatar or brand logo to its rendered box. Pass the largest size the component\n * renders: `c-at_max` never upscales, and one URL per component keeps it to one request.\n * The ImageKit reroute lives here, not in `constrainImage`, so product imagery keeps the exact\n * URLs it resolves today.\n */\nexport function constrainAvatar(\n  src: string | undefined,\n  size: number,\n): string | undefined {\n  if (!src) return src;\n  return constrainImage(toImageKitSrc(src), {\n    width: size,\n    height: size,\n    quality: AVATAR_QUALITY,\n  });\n}\n", "// Self-contained price formatter; the widget carries no host dependency.\n\nconst CURRENCIES_WITH_FULL_SYMBOL = [\"CLP\"];\n\nexport type CurrencyDisplay = \"symbol\" | \"narrowSymbol\" | \"code\";\n\nfunction safeIntlNumberFormat(\n  numericAmount: number,\n  locale?: string,\n  options?: Intl.NumberFormatOptions,\n): string {\n  try {\n    return new Intl.NumberFormat(locale, options).format(numericAmount);\n  } catch (err) {\n    if (\n      err instanceof Error &&\n      err.message === \"Intl.NumberFormat is not a constructor\"\n    ) {\n      return numericAmount.toString();\n    }\n    return new Intl.NumberFormat(\"en-US\", options).format(numericAmount);\n  }\n}\n\nexport function formatPrice(\n  amount: number | string,\n  currencyCode = \"USD\",\n  display: CurrencyDisplay = \"symbol\",\n  locale?: string,\n): string {\n  if (CURRENCIES_WITH_FULL_SYMBOL.includes(currencyCode)) {\n    display = \"symbol\";\n  }\n\n  let options: Intl.NumberFormatOptions = {\n    style: \"currency\",\n    currencyDisplay: display,\n    currency: currencyCode,\n  };\n\n  const numericAmount = Number(amount);\n  if (numericAmount % 1 === 0) {\n    options = {\n      ...options,\n      minimumFractionDigits: 0,\n      maximumFractionDigits: 0,\n    };\n  }\n  return safeIntlNumberFormat(numericAmount, locale, options);\n}\n", "/**\n * Pure navigation-policy helpers for building a product destination URL. Never touch `location`; the\n * caller navigates only with a value returned here. Import-free so it bundles into both the iframe\n * widget and the Claire pixel without dragging in a module graph.\n *\n * DUPLICATE of javascript/claire-pixel/src/shopping-assistant-nav.ts. The two build roots have no\n * shared-package channel, so this is copied, not imported. Edit both together (Claire owns the\n * runtime navigate(); the widget uses it to render correct hrefs at render time).\n */\n\n/** The two destination rules. Must match the widget's NavSurface (host/bridge.ts). */\nexport type NavSurface = \"fermat-funnel\" | \"brand-site\";\n\n/** Inputs the navigate handler hands to resolveNavigationUrl (already trust-gated as a bridge message). */\nexport interface NavigateRequest {\n  handle?: unknown;\n  productUrl?: unknown;\n  rootProductId?: unknown;\n  externalId?: unknown;\n  /** externalId of the variant the assistant picked, when it picked one. Deep-links that variant. */\n  variantExternalId?: unknown;\n  surface?: unknown;\n}\n\n// A Fermat product handle is a platform-scheme URL (rithum://shop/sku, shopify://shop/slug,\n// salesforce://..., etc., per go/common/handles) or a bare slug. Allow the optional scheme plus\n// URL-path characters; reject whitespace, control chars, and query/fragment/quote chars. The\n// fermat-funnel branch puts it through searchParams.set (percent-encoded), so this is a sanity\n// gate, not the security boundary (that is same-origin construction + the brand-site allowlist).\nconst SAFE_HANDLE = /^([a-z][a-z0-9+.-]*:\\/\\/)?[A-Za-z0-9._~/%-]{1,512}$/;\n\n/** Returns the handle when it matches the product-handle charset, else null. */\nexport function sanitizeHandle(handle: unknown): string | null {\n  return typeof handle === \"string\" && SAFE_HANDLE.test(handle) ? handle : null;\n}\n\n// A DPP product path segment (rootProductId for /pt, external product id for /pf). Both are URL path\n// segments, so keep them to a safe charset that cannot smuggle extra path or query into the URL.\nconst SAFE_DPP_PATH_ID = /^[A-Za-z0-9._~-]{1,128}$/;\n\n/** Returns the id when it matches the safe path-segment charset, else null. */\nexport function sanitizeDppPathId(id: unknown): string | null {\n  return typeof id === \"string\" && SAFE_DPP_PATH_ID.test(id) ? id : null;\n}\n\n/**\n * Hosted-tiles DPP routes carry the product as the trailing path segment, but the identifier differs\n * by route, so swap with the matching one (reusing org/template/slug from the page URL):\n *   /pt/<org>/<template>/<rootProductId>   uses rootProductId  (route fetches by rootProductId)\n *   /pf/<funnelSlug>/<externalProductId>   uses externalId     (productRef is the external product id)\n * Either may carry a leading dev org-host segment. Returns the rewritten path, or null when the page\n * is not a recognized DPP route or its required id is missing (caller falls back to ?product=).\n */\nexport function swapDppProductSegment(\n  pathname: string,\n  rootProductId: string | null,\n  externalId: string | null,\n): string | null {\n  const segs = pathname.replace(/\\/$/, \"\").split(\"/\");\n  const ptIdx = segs.indexOf(\"pt\");\n  if (ptIdx !== -1 && segs.length === ptIdx + 4 && rootProductId) {\n    segs[ptIdx + 3] = encodeURIComponent(rootProductId);\n    return segs.join(\"/\");\n  }\n  const pfIdx = segs.indexOf(\"pf\");\n  if (pfIdx !== -1 && segs.length === pfIdx + 3 && externalId) {\n    segs[pfIdx + 2] = encodeURIComponent(externalId);\n    return segs.join(\"/\");\n  }\n  return null;\n}\n\n/**\n * Fermat-funnel branch. On a DPP route swap the trailing product segment so the SELECTED product\n * loads (not the template's hero); otherwise (tile /grid, /product) build the same-origin\n * \"?product=<handle>\" route. Sets variant_external_id when the assistant picked a variant and\n * clears it otherwise (a stale one from the current URL would deep-link the WRONG variant of the new\n * product). Preserves other params, stays on-origin.\n */\n/** Carry the picked variant, or clear a stale one: the param belongs to the OLD product. */\nfunction setVariantParam(url: URL, variantExternalId: string | null): void {\n  if (variantExternalId) {\n    url.searchParams.set(\"variant_external_id\", variantExternalId);\n  } else {\n    url.searchParams.delete(\"variant_external_id\");\n  }\n}\n\nfunction resolveFermatFunnelUrl(\n  handle: string,\n  rootProductId: string | null,\n  externalId: string | null,\n  current: URL,\n  variantExternalId: string | null = null,\n): string {\n  const url = new URL(current.href);\n  const dppPath = swapDppProductSegment(\n    url.pathname,\n    rootProductId,\n    externalId,\n  );\n  if (dppPath) {\n    url.pathname = dppPath;\n    setVariantParam(url, variantExternalId);\n    return url.toString();\n  }\n  url.searchParams.set(\"product\", handle);\n  setVariantParam(url, variantExternalId);\n  return url.toString();\n}\n\n/**\n * Brand-site branch: navigate to the product's canonical PDP URL, with the current page's query\n * params merged on top so attribution/session params survive. productUrl wins on key conflict.\n * Rejects (null) a productUrl that doesn't parse, isn't https, or whose origin isn't allowed.\n */\nfunction resolveBrandSiteUrl(\n  productUrl: unknown,\n  current: URL,\n  allowedNavOrigins?: string[],\n): string | null {\n  if (typeof productUrl !== \"string\" || !productUrl) return null;\n  let dest: URL;\n  try {\n    dest = new URL(productUrl);\n  } catch {\n    return null;\n  }\n  if (dest.protocol !== \"https:\") return null;\n\n  const allowed =\n    allowedNavOrigins && allowedNavOrigins.length > 0\n      ? allowedNavOrigins\n      : [current.origin];\n  if (!allowed.includes(dest.origin)) return null;\n\n  // Merge only the query string so a current-page param can't change the destination origin/path.\n  // productUrl's own params win on conflict; current-page params are additive.\n  const merged = new URLSearchParams(current.search);\n  dest.searchParams.forEach((value, key) => merged.set(key, value));\n  dest.search = merged.toString();\n  return dest.toString();\n}\n\n/**\n * Resolve the destination URL for a navigate request, or null when nothing should happen (rejected\n * destination, malformed handle, unknown surface). The caller navigates only on a non-null result.\n */\nexport function resolveNavigationUrl(\n  request: NavigateRequest,\n  currentHref: string,\n  allowedNavOrigins?: string[],\n): string | null {\n  const handle = sanitizeHandle(request.handle);\n  if (!handle) return null;\n  // Parse currentHref HERE, once, because both branches build on it and the widget calls this during\n  // render with a host-supplied page URL that is not guaranteed to parse. An unparseable one must\n  // degrade to an inert link, never throw and unmount the panel: there is no ErrorBoundary.\n  let current: URL;\n  try {\n    current = new URL(currentHref);\n  } catch {\n    return null;\n  }\n  if (request.surface === \"fermat-funnel\") {\n    return resolveFermatFunnelUrl(\n      handle,\n      sanitizeDppPathId(request.rootProductId),\n      sanitizeDppPathId(request.externalId),\n      current,\n      sanitizeDppPathId(request.variantExternalId),\n    );\n  }\n  if (request.surface === \"brand-site\") {\n    return resolveBrandSiteUrl(request.productUrl, current, allowedNavOrigins);\n  }\n  return null;\n}\n", "import { RefObject, useEffect, useState } from \"react\";\n\n/**\n * Returns true once `ref`'s element has scrolled within `rootMargin` of the viewport, then stays\n * true and disconnects the observer (the data it gates is fetched once and cached). Falls back to\n * true where IntersectionObserver is unavailable (SSR / jsdom), so behaviour degrades to eager.\n */\nexport function useInView(\n  ref: RefObject<Element | null>,\n  rootMargin = \"200px\",\n): boolean {\n  const [inView, setInView] = useState(false);\n\n  useEffect(() => {\n    if (inView) return;\n    const node = ref.current;\n    if (!node || typeof IntersectionObserver === \"undefined\") {\n      setInView(true);\n      return;\n    }\n    const observer = new IntersectionObserver(\n      (entries) => {\n        if (entries.some((e) => e.isIntersecting)) {\n          setInView(true);\n          observer.disconnect();\n        }\n      },\n      { rootMargin },\n    );\n    observer.observe(node);\n    return () => observer.disconnect();\n  }, [ref, inView, rootMargin]);\n\n  return inView;\n}\n", "function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;", "/**\n * Concatenates two arrays faster than the array spread operator.\n */\nexport const concatArrays = <T, U>(\n    array1: readonly T[],\n    array2: readonly U[],\n): readonly (T | U)[] => {\n    // Pre-allocate for better V8 optimization\n    const combinedArray: (T | U)[] = new Array(array1.length + array2.length)\n    for (let i = 0; i < array1.length; i++) {\n        combinedArray[i] = array1[i]!\n    }\n    for (let i = 0; i < array2.length; i++) {\n        combinedArray[array1.length + i] = array2[i]!\n    }\n    return combinedArray\n}\n", "import {\n    AnyClassGroupIds,\n    AnyConfig,\n    AnyThemeGroupIds,\n    ClassGroup,\n    ClassValidator,\n    Config,\n    ThemeGetter,\n    ThemeObject,\n} from './types'\nimport { concatArrays } from './utils'\n\nexport interface ClassPartObject {\n    nextPart: Map<string, ClassPartObject>\n    validators: ClassValidatorObject[] | null\n    classGroupId: AnyClassGroupIds | undefined // Always define optional props for consistent shape\n}\n\ninterface ClassValidatorObject {\n    classGroupId: AnyClassGroupIds\n    validator: ClassValidator\n}\n\n// Factory function ensures consistent object shapes\nconst createClassValidatorObject = (\n    classGroupId: AnyClassGroupIds,\n    validator: ClassValidator,\n): ClassValidatorObject => ({\n    classGroupId,\n    validator,\n})\n\n// Factory ensures consistent ClassPartObject shape\nconst createClassPartObject = (\n    nextPart: Map<string, ClassPartObject> = new Map(),\n    validators: ClassValidatorObject[] | null = null,\n    classGroupId?: AnyClassGroupIds,\n): ClassPartObject => ({\n    nextPart,\n    validators,\n    classGroupId,\n})\n\nconst CLASS_PART_SEPARATOR = '-'\n\nconst EMPTY_CONFLICTS: readonly AnyClassGroupIds[] = []\n// I use two dots here because one dot is used as prefix for class groups in plugins\nconst ARBITRARY_PROPERTY_PREFIX = 'arbitrary..'\n\nexport const createClassGroupUtils = (config: AnyConfig) => {\n    const classMap = createClassMap(config)\n    const { conflictingClassGroups, conflictingClassGroupModifiers } = config\n\n    const getClassGroupId = (className: string) => {\n        if (className.startsWith('[') && className.endsWith(']')) {\n            return getGroupIdForArbitraryProperty(className)\n        }\n\n        const classParts = className.split(CLASS_PART_SEPARATOR)\n        // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and skip it.\n        const startIndex = classParts[0] === '' && classParts.length > 1 ? 1 : 0\n        return getGroupRecursive(classParts, startIndex, classMap)\n    }\n\n    const getConflictingClassGroupIds = (\n        classGroupId: AnyClassGroupIds,\n        hasPostfixModifier: boolean,\n    ): readonly AnyClassGroupIds[] => {\n        if (hasPostfixModifier) {\n            const modifierConflicts = conflictingClassGroupModifiers[classGroupId]\n            const baseConflicts = conflictingClassGroups[classGroupId]\n\n            if (modifierConflicts) {\n                if (baseConflicts) {\n                    // Merge base conflicts with modifier conflicts\n                    return concatArrays(baseConflicts, modifierConflicts)\n                }\n                // Only modifier conflicts\n                return modifierConflicts\n            }\n            // Fall back to without postfix if no modifier conflicts\n            return baseConflicts || EMPTY_CONFLICTS\n        }\n\n        return conflictingClassGroups[classGroupId] || EMPTY_CONFLICTS\n    }\n\n    return {\n        getClassGroupId,\n        getConflictingClassGroupIds,\n    }\n}\n\nconst getGroupRecursive = (\n    classParts: string[],\n    startIndex: number,\n    classPartObject: ClassPartObject,\n): AnyClassGroupIds | undefined => {\n    const classPathsLength = classParts.length - startIndex\n    if (classPathsLength === 0) {\n        return classPartObject.classGroupId\n    }\n\n    const currentClassPart = classParts[startIndex]!\n    const nextClassPartObject = classPartObject.nextPart.get(currentClassPart)\n\n    if (nextClassPartObject) {\n        const result = getGroupRecursive(classParts, startIndex + 1, nextClassPartObject)\n        if (result) return result\n    }\n\n    const validators = classPartObject.validators\n    if (validators === null) {\n        return undefined\n    }\n\n    // Build classRest string efficiently by joining from startIndex onwards\n    const classRest =\n        startIndex === 0\n            ? classParts.join(CLASS_PART_SEPARATOR)\n            : classParts.slice(startIndex).join(CLASS_PART_SEPARATOR)\n    const validatorsLength = validators.length\n\n    for (let i = 0; i < validatorsLength; i++) {\n        const validatorObj = validators[i]!\n        if (validatorObj.validator(classRest)) {\n            return validatorObj.classGroupId\n        }\n    }\n\n    return undefined\n}\n\n/**\n * Get the class group ID for an arbitrary property.\n *\n * @param className - The class name to get the group ID for. Is expected to be string starting with `[` and ending with `]`.\n */\nconst getGroupIdForArbitraryProperty = (className: string): AnyClassGroupIds | undefined =>\n    className.slice(1, -1).indexOf(':') === -1\n        ? undefined\n        : (() => {\n              const content = className.slice(1, -1)\n              const colonIndex = content.indexOf(':')\n              const property = content.slice(0, colonIndex)\n              return property ? ARBITRARY_PROPERTY_PREFIX + property : undefined\n          })()\n\n/**\n * Exported for testing only\n */\nexport const createClassMap = (config: Config<AnyClassGroupIds, AnyThemeGroupIds>) => {\n    const { theme, classGroups } = config\n    return processClassGroups(classGroups, theme)\n}\n\n// Split into separate functions to maintain monomorphic call sites\nconst processClassGroups = (\n    classGroups: Record<AnyClassGroupIds, ClassGroup<AnyThemeGroupIds>>,\n    theme: ThemeObject<AnyThemeGroupIds>,\n): ClassPartObject => {\n    const classMap = createClassPartObject()\n\n    for (const classGroupId in classGroups) {\n        const group = classGroups[classGroupId]!\n        processClassesRecursively(group, classMap, classGroupId, theme)\n    }\n\n    return classMap\n}\n\nconst processClassesRecursively = (\n    classGroup: ClassGroup<AnyThemeGroupIds>,\n    classPartObject: ClassPartObject,\n    classGroupId: AnyClassGroupIds,\n    theme: ThemeObject<AnyThemeGroupIds>,\n) => {\n    const len = classGroup.length\n    for (let i = 0; i < len; i++) {\n        const classDefinition = classGroup[i]!\n        processClassDefinition(classDefinition, classPartObject, classGroupId, theme)\n    }\n}\n\n// Split into separate functions for each type to maintain monomorphic call sites\nconst processClassDefinition = (\n    classDefinition: ClassGroup<AnyThemeGroupIds>[number],\n    classPartObject: ClassPartObject,\n    classGroupId: AnyClassGroupIds,\n    theme: ThemeObject<AnyThemeGroupIds>,\n) => {\n    if (typeof classDefinition === 'string') {\n        processStringDefinition(classDefinition, classPartObject, classGroupId)\n        return\n    }\n\n    if (typeof classDefinition === 'function') {\n        processFunctionDefinition(classDefinition, classPartObject, classGroupId, theme)\n        return\n    }\n\n    processObjectDefinition(\n        classDefinition as Record<string, ClassGroup<AnyThemeGroupIds>>,\n        classPartObject,\n        classGroupId,\n        theme,\n    )\n}\n\nconst processStringDefinition = (\n    classDefinition: string,\n    classPartObject: ClassPartObject,\n    classGroupId: AnyClassGroupIds,\n) => {\n    const classPartObjectToEdit =\n        classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition)\n    classPartObjectToEdit.classGroupId = classGroupId\n}\n\nconst processFunctionDefinition = (\n    classDefinition: Function,\n    classPartObject: ClassPartObject,\n    classGroupId: AnyClassGroupIds,\n    theme: ThemeObject<AnyThemeGroupIds>,\n) => {\n    if (isThemeGetter(classDefinition)) {\n        processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme)\n        return\n    }\n\n    if (classPartObject.validators === null) {\n        classPartObject.validators = []\n    }\n    classPartObject.validators.push(\n        createClassValidatorObject(classGroupId, classDefinition as ClassValidator),\n    )\n}\n\nconst processObjectDefinition = (\n    classDefinition: Record<string, ClassGroup<AnyThemeGroupIds>>,\n    classPartObject: ClassPartObject,\n    classGroupId: AnyClassGroupIds,\n    theme: ThemeObject<AnyThemeGroupIds>,\n) => {\n    const entries = Object.entries(classDefinition)\n    const len = entries.length\n    for (let i = 0; i < len; i++) {\n        const [key, value] = entries[i]!\n        processClassesRecursively(value, getPart(classPartObject, key), classGroupId, theme)\n    }\n}\n\nconst getPart = (classPartObject: ClassPartObject, path: string): ClassPartObject => {\n    let current = classPartObject\n    const parts = path.split(CLASS_PART_SEPARATOR)\n    const len = parts.length\n\n    for (let i = 0; i < len; i++) {\n        const part = parts[i]!\n\n        let next = current.nextPart.get(part)\n        if (!next) {\n            next = createClassPartObject()\n            current.nextPart.set(part, next)\n        }\n        current = next\n    }\n\n    return current\n}\n\n// Type guard maintains monomorphic check\nconst isThemeGetter = (func: Function): func is ThemeGetter =>\n    'isThemeGetter' in func && (func as ThemeGetter).isThemeGetter === true\n", "// Export is needed because TypeScript complains about an error otherwise:\n// Error: \u2026/tailwind-merge/src/config-utils.ts(8,17): semantic error TS4058: Return type of exported function has or is using name 'LruCache' from external module \"\u2026/tailwind-merge/src/lru-cache\" but cannot be named.\nexport interface LruCache<Key extends string, Value> {\n    get(key: Key): Value | undefined\n    set(key: Key, value: Value): void\n}\n\n// LRU cache implementation using plain objects for simplicity\nexport const createLruCache = <Key extends string, Value>(\n    maxCacheSize: number,\n): LruCache<Key, Value> => {\n    if (maxCacheSize < 1) {\n        return {\n            get: () => undefined,\n            set: () => {},\n        }\n    }\n\n    let cacheSize = 0\n    let cache: Record<Key, Value> = Object.create(null)\n    let previousCache: Record<Key, Value> = Object.create(null)\n\n    const update = (key: Key, value: Value) => {\n        cache[key] = value\n        cacheSize++\n\n        if (cacheSize > maxCacheSize) {\n            cacheSize = 0\n            previousCache = cache\n            cache = Object.create(null)\n        }\n    }\n\n    return {\n        get(key) {\n            let value = cache[key]\n\n            if (value !== undefined) {\n                return value\n            }\n            if ((value = previousCache[key]) !== undefined) {\n                update(key, value)\n                return value\n            }\n        },\n        set(key, value) {\n            if (key in cache) {\n                cache[key] = value\n            } else {\n                update(key, value)\n            }\n        },\n    }\n}\n", "import { AnyConfig, ParsedClassName } from './types'\n\nexport const IMPORTANT_MODIFIER = '!'\n\nconst MODIFIER_SEPARATOR = ':'\nconst EMPTY_MODIFIERS: string[] = []\n\n// Pre-allocated result object shape for consistency\nconst createResultObject = (\n    modifiers: string[],\n    hasImportantModifier: boolean,\n    baseClassName: string,\n    maybePostfixModifierPosition?: number,\n    isExternal?: boolean,\n): ParsedClassName => ({\n    modifiers,\n    hasImportantModifier,\n    baseClassName,\n    maybePostfixModifierPosition,\n    isExternal,\n})\n\nexport const createParseClassName = (config: AnyConfig) => {\n    const { prefix, experimentalParseClassName } = config\n\n    /**\n     * Parse class name into parts.\n     *\n     * Inspired by `splitAtTopLevelOnly` used in Tailwind CSS\n     * @see https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n     */\n    let parseClassName = (className: string): ParsedClassName => {\n        // Use simple array with push for better performance\n        const modifiers: string[] = []\n\n        let bracketDepth = 0\n        let parenDepth = 0\n        let modifierStart = 0\n        let postfixModifierPosition: number | undefined\n\n        const len = className.length\n        for (let index = 0; index < len; index++) {\n            const currentCharacter = className[index]!\n\n            if (bracketDepth === 0 && parenDepth === 0) {\n                if (currentCharacter === MODIFIER_SEPARATOR) {\n                    modifiers.push(className.slice(modifierStart, index))\n                    modifierStart = index + 1\n                    continue\n                }\n\n                if (currentCharacter === '/') {\n                    postfixModifierPosition = index\n                    continue\n                }\n            }\n\n            if (currentCharacter === '[') bracketDepth++\n            else if (currentCharacter === ']') bracketDepth--\n            else if (currentCharacter === '(') parenDepth++\n            else if (currentCharacter === ')') parenDepth--\n        }\n\n        const baseClassNameWithImportantModifier =\n            modifiers.length === 0 ? className : className.slice(modifierStart)\n\n        // Inline important modifier check\n        let baseClassName = baseClassNameWithImportantModifier\n        let hasImportantModifier = false\n\n        if (baseClassNameWithImportantModifier.endsWith(IMPORTANT_MODIFIER)) {\n            baseClassName = baseClassNameWithImportantModifier.slice(0, -1)\n            hasImportantModifier = true\n        } else if (\n            /**\n             * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.\n             * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864\n             */\n            baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER)\n        ) {\n            baseClassName = baseClassNameWithImportantModifier.slice(1)\n            hasImportantModifier = true\n        }\n\n        const maybePostfixModifierPosition =\n            postfixModifierPosition && postfixModifierPosition > modifierStart\n                ? postfixModifierPosition - modifierStart\n                : undefined\n\n        return createResultObject(\n            modifiers,\n            hasImportantModifier,\n            baseClassName,\n            maybePostfixModifierPosition,\n        )\n    }\n\n    if (prefix) {\n        const fullPrefix = prefix + MODIFIER_SEPARATOR\n        const parseClassNameOriginal = parseClassName\n        parseClassName = (className: string) =>\n            className.startsWith(fullPrefix)\n                ? parseClassNameOriginal(className.slice(fullPrefix.length))\n                : createResultObject(EMPTY_MODIFIERS, false, className, undefined, true)\n    }\n\n    if (experimentalParseClassName) {\n        const parseClassNameOriginal = parseClassName\n        parseClassName = (className: string) =>\n            experimentalParseClassName({ className, parseClassName: parseClassNameOriginal })\n    }\n\n    return parseClassName\n}\n", "import { AnyConfig } from './types'\n\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nexport const createSortModifiers = (config: AnyConfig) => {\n    // Pre-compute weights for all known modifiers for O(1) comparison\n    const modifierWeights = new Map<string, number>()\n\n    // Assign weights to sensitive modifiers (highest priority, but preserve order)\n    config.orderSensitiveModifiers.forEach((mod, index) => {\n        modifierWeights.set(mod, 1000000 + index) // High weights for sensitive mods\n    })\n\n    return (modifiers: readonly string[]): string[] => {\n        const result: string[] = []\n        let currentSegment: string[] = []\n\n        // Process modifiers in one pass\n        for (let i = 0; i < modifiers.length; i++) {\n            const modifier = modifiers[i]!\n\n            // Check if modifier is sensitive (starts with '[' or in orderSensitiveModifiers)\n            const isArbitrary = modifier[0] === '['\n            const isOrderSensitive = modifierWeights.has(modifier)\n\n            if (isArbitrary || isOrderSensitive) {\n                // Sort and flush current segment alphabetically\n                if (currentSegment.length > 0) {\n                    currentSegment.sort()\n                    result.push(...currentSegment)\n                    currentSegment = []\n                }\n                result.push(modifier)\n            } else {\n                // Regular modifier - add to current segment for batch sorting\n                currentSegment.push(modifier)\n            }\n        }\n\n        // Sort and add any remaining segment items\n        if (currentSegment.length > 0) {\n            currentSegment.sort()\n            result.push(...currentSegment)\n        }\n\n        return result\n    }\n}\n", "import { createClassGroupUtils } from './class-group-utils'\nimport { createLruCache } from './lru-cache'\nimport { createParseClassName } from './parse-class-name'\nimport { createSortModifiers } from './sort-modifiers'\nimport { AnyClassGroupIds, AnyConfig } from './types'\n\nexport type ConfigUtils = ReturnType<typeof createConfigUtils>\n\nexport const createConfigUtils = (config: AnyConfig) => ({\n    cache: createLruCache<string, string>(config.cacheSize),\n    parseClassName: createParseClassName(config),\n    sortModifiers: createSortModifiers(config),\n    postfixLookupClassGroupIds: createPostfixLookupClassGroupIds(config),\n    ...createClassGroupUtils(config),\n})\n\nconst createPostfixLookupClassGroupIds = (config: AnyConfig) => {\n    const lookup: Partial<Record<AnyClassGroupIds, true>> = Object.create(null)\n    const classGroupIds = config.postfixLookupClassGroups\n\n    if (classGroupIds) {\n        for (let i = 0; i < classGroupIds.length; i++) {\n            lookup[classGroupIds[i]!] = true\n        }\n    }\n\n    return lookup\n}\n", "import { ConfigUtils } from './config-utils'\nimport { IMPORTANT_MODIFIER } from './parse-class-name'\n\nconst SPLIT_CLASSES_REGEX = /\\s+/\n\nexport const mergeClassList = (classList: string, configUtils: ConfigUtils) => {\n    const {\n        parseClassName,\n        getClassGroupId,\n        getConflictingClassGroupIds,\n        sortModifiers,\n        postfixLookupClassGroupIds,\n    } = configUtils\n\n    /**\n     * Set of classGroupIds in following format:\n     * `{importantModifier}{variantModifiers}{classGroupId}`\n     * @example 'float'\n     * @example 'hover:focus:bg-color'\n     * @example 'md:!pr'\n     */\n    const classGroupsInConflict: string[] = []\n    const classNames = classList.trim().split(SPLIT_CLASSES_REGEX)\n\n    let result = ''\n\n    for (let index = classNames.length - 1; index >= 0; index -= 1) {\n        const originalClassName = classNames[index]!\n\n        const {\n            isExternal,\n            modifiers,\n            hasImportantModifier,\n            baseClassName,\n            maybePostfixModifierPosition,\n        } = parseClassName(originalClassName)\n\n        if (isExternal) {\n            result = originalClassName + (result.length > 0 ? ' ' + result : result)\n            continue\n        }\n\n        let hasPostfixModifier = !!maybePostfixModifierPosition\n        let classGroupId: ReturnType<typeof getClassGroupId>\n\n        if (hasPostfixModifier) {\n            const baseClassNameWithoutPostfix = baseClassName.substring(\n                0,\n                maybePostfixModifierPosition,\n            )\n            classGroupId = getClassGroupId(baseClassNameWithoutPostfix)\n\n            const classGroupIdWithPostfix =\n                classGroupId && postfixLookupClassGroupIds[classGroupId]\n                    ? getClassGroupId(baseClassName)\n                    : undefined\n            if (classGroupIdWithPostfix && classGroupIdWithPostfix !== classGroupId) {\n                classGroupId = classGroupIdWithPostfix\n                hasPostfixModifier = false\n            }\n        } else {\n            classGroupId = getClassGroupId(baseClassName)\n        }\n\n        if (!classGroupId) {\n            if (!hasPostfixModifier) {\n                // Not a Tailwind class\n                result = originalClassName + (result.length > 0 ? ' ' + result : result)\n                continue\n            }\n\n            classGroupId = getClassGroupId(baseClassName)\n\n            if (!classGroupId) {\n                // Not a Tailwind class\n                result = originalClassName + (result.length > 0 ? ' ' + result : result)\n                continue\n            }\n\n            hasPostfixModifier = false\n        }\n\n        // Fast path: skip sorting for empty or single modifier\n        const variantModifier =\n            modifiers.length === 0\n                ? ''\n                : modifiers.length === 1\n                  ? modifiers[0]!\n                  : sortModifiers(modifiers).join(':')\n\n        const modifierId = hasImportantModifier\n            ? variantModifier + IMPORTANT_MODIFIER\n            : variantModifier\n\n        const classId = modifierId + classGroupId\n\n        if (classGroupsInConflict.indexOf(classId) > -1) {\n            // Tailwind class omitted due to conflict\n            continue\n        }\n\n        classGroupsInConflict.push(classId)\n\n        const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier)\n        for (let i = 0; i < conflictGroups.length; ++i) {\n            const group = conflictGroups[i]!\n            classGroupsInConflict.push(modifierId + group)\n        }\n\n        // Tailwind class not in conflict\n        result = originalClassName + (result.length > 0 ? ' ' + result : result)\n    }\n\n    return result\n}\n", "/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\n\nexport type ClassNameValue = ClassNameArray | string | null | undefined | 0 | 0n | false\ntype ClassNameArray = readonly ClassNameValue[]\n\nexport const twJoin = (...classLists: ClassNameValue[]): string => {\n    let index = 0\n    let argument: ClassNameValue\n    let resolvedValue: string\n    let string = ''\n\n    while (index < classLists.length) {\n        if ((argument = classLists[index++])) {\n            if ((resolvedValue = toValue(argument))) {\n                string && (string += ' ')\n                string += resolvedValue\n            }\n        }\n    }\n    return string\n}\n\nconst toValue = (mix: ClassNameArray | string): string => {\n    // Fast path for strings\n    if (typeof mix === 'string') {\n        return mix\n    }\n\n    let resolvedValue: string\n    let string = ''\n\n    for (let k = 0; k < mix.length; k++) {\n        if (mix[k]) {\n            if ((resolvedValue = toValue(mix[k] as ClassNameArray | string))) {\n                string && (string += ' ')\n                string += resolvedValue\n            }\n        }\n    }\n\n    return string\n}\n", "import { createConfigUtils } from './config-utils'\nimport { mergeClassList } from './merge-classlist'\nimport { ClassNameValue, twJoin } from './tw-join'\nimport { AnyConfig } from './types'\n\ntype CreateConfigFirst = () => AnyConfig\ntype CreateConfigSubsequent = (config: AnyConfig) => AnyConfig\ntype TailwindMerge = (...classLists: ClassNameValue[]) => string\ntype ConfigUtils = ReturnType<typeof createConfigUtils>\n\nexport const createTailwindMerge = (\n    createConfigFirst: CreateConfigFirst,\n    ...createConfigRest: CreateConfigSubsequent[]\n): TailwindMerge => {\n    let configUtils: ConfigUtils\n    let cacheGet: ConfigUtils['cache']['get']\n    let cacheSet: ConfigUtils['cache']['set']\n    let functionToCall: (classList: string) => string\n\n    const initTailwindMerge = (classList: string) => {\n        const config = createConfigRest.reduce(\n            (previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig),\n            createConfigFirst() as AnyConfig,\n        )\n\n        configUtils = createConfigUtils(config)\n        cacheGet = configUtils.cache.get\n        cacheSet = configUtils.cache.set\n        functionToCall = tailwindMerge\n\n        return tailwindMerge(classList)\n    }\n\n    const tailwindMerge = (classList: string) => {\n        const cachedResult = cacheGet(classList)\n\n        if (cachedResult) {\n            return cachedResult\n        }\n\n        const result = mergeClassList(classList, configUtils)\n        cacheSet(classList, result)\n\n        return result\n    }\n\n    functionToCall = initTailwindMerge\n\n    return (...args: ClassNameValue[]) => functionToCall(twJoin(...args))\n}\n", "import { DefaultThemeGroupIds, NoInfer, ThemeGetter, ThemeObject } from './types'\n\nconst fallbackThemeArr: ThemeObject<DefaultThemeGroupIds>[DefaultThemeGroupIds] = []\n\nexport const fromTheme = <\n    AdditionalThemeGroupIds extends string = never,\n    DefaultThemeGroupIdsInner extends string = DefaultThemeGroupIds,\n>(\n    key: NoInfer<DefaultThemeGroupIdsInner | AdditionalThemeGroupIds>,\n): ThemeGetter => {\n    const themeGetter = (theme: ThemeObject<DefaultThemeGroupIdsInner | AdditionalThemeGroupIds>) =>\n        theme[key] || fallbackThemeArr\n\n    themeGetter.isThemeGetter = true as const\n\n    return themeGetter\n}\n", "const arbitraryValueRegex = /^\\[(?:(\\w[\\w-]*):)?(.+)\\]$/i\nconst arbitraryVariableRegex = /^\\((?:(\\w[\\w-]*):)?(.+)\\)$/i\nconst fractionRegex = /^\\d+(?:\\.\\d+)?\\/\\d+(?:\\.\\d+)?$/\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/\nconst lengthUnitRegex =\n    /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\\(.+\\)$/\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/\nconst imageRegex =\n    /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/\n\nexport const isFraction = (value: string) => fractionRegex.test(value)\n\nexport const isNumber = (value: string) => !!value && !Number.isNaN(Number(value))\n\nexport const isInteger = (value: string) => !!value && Number.isInteger(Number(value))\n\nexport const isPercent = (value: string) => value.endsWith('%') && isNumber(value.slice(0, -1))\n\nexport const isTshirtSize = (value: string) => tshirtUnitRegex.test(value)\n\nexport const isAny = () => true\n\nconst isLengthOnly = (value: string) =>\n    // `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n    // For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n    // I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\n    lengthUnitRegex.test(value) && !colorFunctionRegex.test(value)\n\nconst isNever = () => false\n\nconst isShadow = (value: string) => shadowRegex.test(value)\n\nconst isImage = (value: string) => imageRegex.test(value)\n\nexport const isAnyNonArbitrary = (value: string) =>\n    !isArbitraryValue(value) && !isArbitraryVariable(value)\n\nexport const isNamedContainerQuery = (value: string) =>\n    value.startsWith('@container') &&\n    ((value[10] === '/' && value[11] !== undefined) ||\n        (value[11] === 's' && value[16] !== undefined && value.startsWith('-size/', 10)) ||\n        (value[11] === 'n' && value[18] !== undefined && value.startsWith('-normal/', 10)))\n\nexport const isArbitrarySize = (value: string) => getIsArbitraryValue(value, isLabelSize, isNever)\n\nexport const isArbitraryValue = (value: string) => arbitraryValueRegex.test(value)\n\nexport const isArbitraryLength = (value: string) =>\n    getIsArbitraryValue(value, isLabelLength, isLengthOnly)\n\nexport const isArbitraryNumber = (value: string) =>\n    getIsArbitraryValue(value, isLabelNumber, isNumber)\n\nexport const isArbitraryWeight = (value: string) => getIsArbitraryValue(value, isLabelWeight, isAny)\n\nexport const isArbitraryFamilyName = (value: string) =>\n    getIsArbitraryValue(value, isLabelFamilyName, isNever)\n\nexport const isArbitraryPosition = (value: string) =>\n    getIsArbitraryValue(value, isLabelPosition, isNever)\n\nexport const isArbitraryImage = (value: string) => getIsArbitraryValue(value, isLabelImage, isImage)\n\nexport const isArbitraryShadow = (value: string) =>\n    getIsArbitraryValue(value, isLabelShadow, isShadow)\n\nexport const isArbitraryVariable = (value: string) => arbitraryVariableRegex.test(value)\n\nexport const isArbitraryVariableLength = (value: string) =>\n    getIsArbitraryVariable(value, isLabelLength)\n\nexport const isArbitraryVariableFamilyName = (value: string) =>\n    getIsArbitraryVariable(value, isLabelFamilyName)\n\nexport const isArbitraryVariablePosition = (value: string) =>\n    getIsArbitraryVariable(value, isLabelPosition)\n\nexport const isArbitraryVariableSize = (value: string) => getIsArbitraryVariable(value, isLabelSize)\n\nexport const isArbitraryVariableImage = (value: string) =>\n    getIsArbitraryVariable(value, isLabelImage)\n\nexport const isArbitraryVariableShadow = (value: string) =>\n    getIsArbitraryVariable(value, isLabelShadow, true)\n\nexport const isArbitraryVariableWeight = (value: string) =>\n    getIsArbitraryVariable(value, isLabelWeight, true)\n\n// Helpers\n\nconst getIsArbitraryValue = (\n    value: string,\n    testLabel: (label: string) => boolean,\n    testValue: (value: string) => boolean,\n) => {\n    const result = arbitraryValueRegex.exec(value)\n\n    if (result) {\n        if (result[1]) {\n            return testLabel(result[1])\n        }\n\n        return testValue(result[2]!)\n    }\n\n    return false\n}\n\nconst getIsArbitraryVariable = (\n    value: string,\n    testLabel: (label: string) => boolean,\n    shouldMatchNoLabel = false,\n) => {\n    const result = arbitraryVariableRegex.exec(value)\n\n    if (result) {\n        if (result[1]) {\n            return testLabel(result[1])\n        }\n        return shouldMatchNoLabel\n    }\n\n    return false\n}\n\n// Labels\n\nconst isLabelPosition = (label: string) => label === 'position' || label === 'percentage'\n\nconst isLabelImage = (label: string) => label === 'image' || label === 'url'\n\nconst isLabelSize = (label: string) => label === 'length' || label === 'size' || label === 'bg-size'\n\nconst isLabelLength = (label: string) => label === 'length'\n\nconst isLabelNumber = (label: string) => label === 'number'\n\nconst isLabelFamilyName = (label: string) => label === 'family-name'\n\nconst isLabelWeight = (label: string) => label === 'number' || label === 'weight'\n\nconst isLabelShadow = (label: string) => label === 'shadow'\n", "import { fromTheme } from './from-theme'\nimport { Config, DefaultClassGroupIds, DefaultThemeGroupIds } from './types'\nimport {\n    isAny,\n    isAnyNonArbitrary,\n    isArbitraryFamilyName,\n    isArbitraryImage,\n    isArbitraryLength,\n    isArbitraryNumber,\n    isArbitraryPosition,\n    isArbitraryShadow,\n    isArbitrarySize,\n    isArbitraryValue,\n    isArbitraryVariable,\n    isArbitraryVariableFamilyName,\n    isArbitraryVariableImage,\n    isArbitraryVariableLength,\n    isArbitraryVariablePosition,\n    isArbitraryVariableShadow,\n    isArbitraryVariableSize,\n    isArbitraryVariableWeight,\n    isArbitraryWeight,\n    isFraction,\n    isInteger,\n    isNamedContainerQuery,\n    isNumber,\n    isPercent,\n    isTshirtSize,\n} from './validators'\n\nexport const getDefaultConfig = () => {\n    /**\n     * Theme getters for theme variable namespaces\n     * @see https://tailwindcss.com/docs/theme#theme-variable-namespaces\n     */\n    /***/\n\n    const themeColor = fromTheme('color')\n    const themeFont = fromTheme('font')\n    const themeText = fromTheme('text')\n    const themeFontWeight = fromTheme('font-weight')\n    const themeTracking = fromTheme('tracking')\n    const themeLeading = fromTheme('leading')\n    const themeBreakpoint = fromTheme('breakpoint')\n    const themeContainer = fromTheme('container')\n    const themeSpacing = fromTheme('spacing')\n    const themeRadius = fromTheme('radius')\n    const themeShadow = fromTheme('shadow')\n    const themeInsetShadow = fromTheme('inset-shadow')\n    const themeTextShadow = fromTheme('text-shadow')\n    const themeDropShadow = fromTheme('drop-shadow')\n    const themeBlur = fromTheme('blur')\n    const themePerspective = fromTheme('perspective')\n    const themeAspect = fromTheme('aspect')\n    const themeEase = fromTheme('ease')\n    const themeAnimate = fromTheme('animate')\n\n    /**\n     * Helpers to avoid repeating the same scales\n     *\n     * We use functions that create a new array every time they're called instead of static arrays.\n     * This ensures that users who modify any scale by mutating the array (e.g. with `array.push(element)`) don't accidentally mutate arrays in other parts of the config.\n     */\n    /***/\n\n    const scaleBreak = () =>\n        ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'] as const\n    const scalePosition = () =>\n        [\n            'center',\n            'top',\n            'bottom',\n            'left',\n            'right',\n            'top-left',\n            // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n            'left-top',\n            'top-right',\n            // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n            'right-top',\n            'bottom-right',\n            // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n            'right-bottom',\n            'bottom-left',\n            // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n            'left-bottom',\n        ] as const\n    const scalePositionWithArbitrary = () =>\n        [...scalePosition(), isArbitraryVariable, isArbitraryValue] as const\n    const scaleOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'] as const\n    const scaleOverscroll = () => ['auto', 'contain', 'none'] as const\n    const scaleUnambiguousSpacing = () =>\n        [isArbitraryVariable, isArbitraryValue, themeSpacing] as const\n    const scaleInset = () => [isFraction, 'full', 'auto', ...scaleUnambiguousSpacing()] as const\n    const scaleGridTemplateColsRows = () =>\n        [isInteger, 'none', 'subgrid', isArbitraryVariable, isArbitraryValue] as const\n    const scaleGridColRowStartAndEnd = () =>\n        [\n            'auto',\n            { span: ['full', isInteger, isArbitraryVariable, isArbitraryValue] },\n            isInteger,\n            isArbitraryVariable,\n            isArbitraryValue,\n        ] as const\n    const scaleGridColRowStartOrEnd = () =>\n        [isInteger, 'auto', isArbitraryVariable, isArbitraryValue] as const\n    const scaleGridAutoColsRows = () =>\n        ['auto', 'min', 'max', 'fr', isArbitraryVariable, isArbitraryValue] as const\n    const scaleAlignPrimaryAxis = () =>\n        [\n            'start',\n            'end',\n            'center',\n            'between',\n            'around',\n            'evenly',\n            'stretch',\n            'baseline',\n            'center-safe',\n            'end-safe',\n        ] as const\n    const scaleAlignSecondaryAxis = () =>\n        ['start', 'end', 'center', 'stretch', 'center-safe', 'end-safe'] as const\n    const scaleMargin = () => ['auto', ...scaleUnambiguousSpacing()] as const\n    const scaleSizing = () =>\n        [\n            isFraction,\n            'auto',\n            'full',\n            'dvw',\n            'dvh',\n            'lvw',\n            'lvh',\n            'svw',\n            'svh',\n            'min',\n            'max',\n            'fit',\n            ...scaleUnambiguousSpacing(),\n        ] as const\n    const scaleSizingInline = () =>\n        [\n            isFraction,\n            'screen',\n            'full',\n            'dvw',\n            'lvw',\n            'svw',\n            'min',\n            'max',\n            'fit',\n            ...scaleUnambiguousSpacing(),\n        ] as const\n    const scaleSizingBlock = () =>\n        [\n            isFraction,\n            'screen',\n            'full',\n            'lh',\n            'dvh',\n            'lvh',\n            'svh',\n            'min',\n            'max',\n            'fit',\n            ...scaleUnambiguousSpacing(),\n        ] as const\n    const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue] as const\n    const scaleBgPosition = () =>\n        [\n            ...scalePosition(),\n            isArbitraryVariablePosition,\n            isArbitraryPosition,\n            { position: [isArbitraryVariable, isArbitraryValue] },\n        ] as const\n    const scaleBgRepeat = () => ['no-repeat', { repeat: ['', 'x', 'y', 'space', 'round'] }] as const\n    const scaleBgSize = () =>\n        [\n            'auto',\n            'cover',\n            'contain',\n            isArbitraryVariableSize,\n            isArbitrarySize,\n            { size: [isArbitraryVariable, isArbitraryValue] },\n        ] as const\n    const scaleGradientStopPosition = () =>\n        [isPercent, isArbitraryVariableLength, isArbitraryLength] as const\n    const scaleRadius = () =>\n        [\n            // Deprecated since Tailwind CSS v4.0.0\n            '',\n            'none',\n            'full',\n            themeRadius,\n            isArbitraryVariable,\n            isArbitraryValue,\n        ] as const\n    const scaleBorderWidth = () =>\n        ['', isNumber, isArbitraryVariableLength, isArbitraryLength] as const\n    const scaleLineStyle = () => ['solid', 'dashed', 'dotted', 'double'] as const\n    const scaleBlendMode = () =>\n        [\n            'normal',\n            'multiply',\n            'screen',\n            'overlay',\n            'darken',\n            'lighten',\n            'color-dodge',\n            'color-burn',\n            'hard-light',\n            'soft-light',\n            'difference',\n            'exclusion',\n            'hue',\n            'saturation',\n            'color',\n            'luminosity',\n        ] as const\n    const scaleMaskImagePosition = () =>\n        [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition] as const\n    const scaleBlur = () =>\n        [\n            // Deprecated since Tailwind CSS v4.0.0\n            '',\n            'none',\n            themeBlur,\n            isArbitraryVariable,\n            isArbitraryValue,\n        ] as const\n    const scaleRotate = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue] as const\n    const scaleScale = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue] as const\n    const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue] as const\n    const scaleTranslate = () => [isFraction, 'full', ...scaleUnambiguousSpacing()] as const\n\n    return {\n        cacheSize: 500,\n        theme: {\n            animate: ['spin', 'ping', 'pulse', 'bounce'],\n            aspect: ['video'],\n            blur: [isTshirtSize],\n            breakpoint: [isTshirtSize],\n            color: [isAny],\n            container: [isTshirtSize],\n            'drop-shadow': [isTshirtSize],\n            ease: ['in', 'out', 'in-out'],\n            font: [isAnyNonArbitrary],\n            'font-weight': [\n                'thin',\n                'extralight',\n                'light',\n                'normal',\n                'medium',\n                'semibold',\n                'bold',\n                'extrabold',\n                'black',\n            ],\n            'inset-shadow': [isTshirtSize],\n            leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose'],\n            perspective: ['dramatic', 'near', 'normal', 'midrange', 'distant', 'none'],\n            radius: [isTshirtSize],\n            shadow: [isTshirtSize],\n            spacing: ['px', isNumber],\n            text: [isTshirtSize],\n            'text-shadow': [isTshirtSize],\n            tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest'],\n        },\n        classGroups: {\n            // --------------\n            // --- Layout ---\n            // --------------\n\n            /**\n             * Aspect Ratio\n             * @see https://tailwindcss.com/docs/aspect-ratio\n             */\n            aspect: [\n                {\n                    aspect: [\n                        'auto',\n                        'square',\n                        isFraction,\n                        isArbitraryValue,\n                        isArbitraryVariable,\n                        themeAspect,\n                    ],\n                },\n            ],\n            /**\n             * Container\n             * @see https://tailwindcss.com/docs/container\n             * @deprecated since Tailwind CSS v4.0.0\n             */\n            container: ['container'],\n            /**\n             * Container Type\n             * @see https://tailwindcss.com/docs/responsive-design#container-queries\n             */\n            'container-type': [\n                { '@container': ['', 'normal', 'size', isArbitraryVariable, isArbitraryValue] },\n            ],\n            /**\n             * Container Name\n             * @see https://tailwindcss.com/docs/responsive-design#named-containers\n             */\n            'container-named': [isNamedContainerQuery],\n            /**\n             * Columns\n             * @see https://tailwindcss.com/docs/columns\n             */\n            columns: [\n                { columns: [isNumber, isArbitraryValue, isArbitraryVariable, themeContainer] },\n            ],\n            /**\n             * Break After\n             * @see https://tailwindcss.com/docs/break-after\n             */\n            'break-after': [{ 'break-after': scaleBreak() }],\n            /**\n             * Break Before\n             * @see https://tailwindcss.com/docs/break-before\n             */\n            'break-before': [{ 'break-before': scaleBreak() }],\n            /**\n             * Break Inside\n             * @see https://tailwindcss.com/docs/break-inside\n             */\n            'break-inside': [{ 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column'] }],\n            /**\n             * Box Decoration Break\n             * @see https://tailwindcss.com/docs/box-decoration-break\n             */\n            'box-decoration': [{ 'box-decoration': ['slice', 'clone'] }],\n            /**\n             * Box Sizing\n             * @see https://tailwindcss.com/docs/box-sizing\n             */\n            box: [{ box: ['border', 'content'] }],\n            /**\n             * Display\n             * @see https://tailwindcss.com/docs/display\n             */\n            display: [\n                'block',\n                'inline-block',\n                'inline',\n                'flex',\n                'inline-flex',\n                'table',\n                'inline-table',\n                'table-caption',\n                'table-cell',\n                'table-column',\n                'table-column-group',\n                'table-footer-group',\n                'table-header-group',\n                'table-row-group',\n                'table-row',\n                'flow-root',\n                'grid',\n                'inline-grid',\n                'contents',\n                'list-item',\n                'hidden',\n            ],\n            /**\n             * Screen Reader Only\n             * @see https://tailwindcss.com/docs/display#screen-reader-only\n             */\n            sr: ['sr-only', 'not-sr-only'],\n            /**\n             * Floats\n             * @see https://tailwindcss.com/docs/float\n             */\n            float: [{ float: ['right', 'left', 'none', 'start', 'end'] }],\n            /**\n             * Clear\n             * @see https://tailwindcss.com/docs/clear\n             */\n            clear: [{ clear: ['left', 'right', 'both', 'none', 'start', 'end'] }],\n            /**\n             * Isolation\n             * @see https://tailwindcss.com/docs/isolation\n             */\n            isolation: ['isolate', 'isolation-auto'],\n            /**\n             * Object Fit\n             * @see https://tailwindcss.com/docs/object-fit\n             */\n            'object-fit': [{ object: ['contain', 'cover', 'fill', 'none', 'scale-down'] }],\n            /**\n             * Object Position\n             * @see https://tailwindcss.com/docs/object-position\n             */\n            'object-position': [{ object: scalePositionWithArbitrary() }],\n            /**\n             * Overflow\n             * @see https://tailwindcss.com/docs/overflow\n             */\n            overflow: [{ overflow: scaleOverflow() }],\n            /**\n             * Overflow X\n             * @see https://tailwindcss.com/docs/overflow\n             */\n            'overflow-x': [{ 'overflow-x': scaleOverflow() }],\n            /**\n             * Overflow Y\n             * @see https://tailwindcss.com/docs/overflow\n             */\n            'overflow-y': [{ 'overflow-y': scaleOverflow() }],\n            /**\n             * Overscroll Behavior\n             * @see https://tailwindcss.com/docs/overscroll-behavior\n             */\n            overscroll: [{ overscroll: scaleOverscroll() }],\n            /**\n             * Overscroll Behavior X\n             * @see https://tailwindcss.com/docs/overscroll-behavior\n             */\n            'overscroll-x': [{ 'overscroll-x': scaleOverscroll() }],\n            /**\n             * Overscroll Behavior Y\n             * @see https://tailwindcss.com/docs/overscroll-behavior\n             */\n            'overscroll-y': [{ 'overscroll-y': scaleOverscroll() }],\n            /**\n             * Position\n             * @see https://tailwindcss.com/docs/position\n             */\n            position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n            /**\n             * Inset\n             * @see https://tailwindcss.com/docs/top-right-bottom-left\n             */\n            inset: [{ inset: scaleInset() }],\n            /**\n             * Inset Inline\n             * @see https://tailwindcss.com/docs/top-right-bottom-left\n             */\n            'inset-x': [{ 'inset-x': scaleInset() }],\n            /**\n             * Inset Block\n             * @see https://tailwindcss.com/docs/top-right-bottom-left\n             */\n            'inset-y': [{ 'inset-y': scaleInset() }],\n            /**\n             * Inset Inline Start\n             * @see https://tailwindcss.com/docs/top-right-bottom-left\n             * @todo class group will be renamed to `inset-s` in next major release\n             */\n            start: [\n                {\n                    'inset-s': scaleInset(),\n                    /**\n                     * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-s-*` utilities.\n                     * @see https://github.com/tailwindlabs/tailwindcss/pull/19613\n                     */\n                    start: scaleInset(),\n                },\n            ],\n            /**\n             * Inset Inline End\n             * @see https://tailwindcss.com/docs/top-right-bottom-left\n             * @todo class group will be renamed to `inset-e` in next major release\n             */\n            end: [\n                {\n                    'inset-e': scaleInset(),\n                    /**\n                     * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-e-*` utilities.\n                     * @see https://github.com/tailwindlabs/tailwindcss/pull/19613\n                     */\n                    end: scaleInset(),\n                },\n            ],\n            /**\n             * Inset Block Start\n             * @see https://tailwindcss.com/docs/top-right-bottom-left\n             */\n            'inset-bs': [{ 'inset-bs': scaleInset() }],\n            /**\n             * Inset Block End\n             * @see https://tailwindcss.com/docs/top-right-bottom-left\n             */\n            'inset-be': [{ 'inset-be': scaleInset() }],\n            /**\n             * Top\n             * @see https://tailwindcss.com/docs/top-right-bottom-left\n             */\n            top: [{ top: scaleInset() }],\n            /**\n             * Right\n             * @see https://tailwindcss.com/docs/top-right-bottom-left\n             */\n            right: [{ right: scaleInset() }],\n            /**\n             * Bottom\n             * @see https://tailwindcss.com/docs/top-right-bottom-left\n             */\n            bottom: [{ bottom: scaleInset() }],\n            /**\n             * Left\n             * @see https://tailwindcss.com/docs/top-right-bottom-left\n             */\n            left: [{ left: scaleInset() }],\n            /**\n             * Visibility\n             * @see https://tailwindcss.com/docs/visibility\n             */\n            visibility: ['visible', 'invisible', 'collapse'],\n            /**\n             * Z-Index\n             * @see https://tailwindcss.com/docs/z-index\n             */\n            z: [{ z: [isInteger, 'auto', isArbitraryVariable, isArbitraryValue] }],\n\n            // ------------------------\n            // --- Flexbox and Grid ---\n            // ------------------------\n\n            /**\n             * Flex Basis\n             * @see https://tailwindcss.com/docs/flex-basis\n             */\n            basis: [\n                {\n                    basis: [\n                        isFraction,\n                        'full',\n                        'auto',\n                        themeContainer,\n                        ...scaleUnambiguousSpacing(),\n                    ],\n                },\n            ],\n            /**\n             * Flex Direction\n             * @see https://tailwindcss.com/docs/flex-direction\n             */\n            'flex-direction': [{ flex: ['row', 'row-reverse', 'col', 'col-reverse'] }],\n            /**\n             * Flex Wrap\n             * @see https://tailwindcss.com/docs/flex-wrap\n             */\n            'flex-wrap': [{ flex: ['nowrap', 'wrap', 'wrap-reverse'] }],\n            /**\n             * Flex\n             * @see https://tailwindcss.com/docs/flex\n             */\n            flex: [{ flex: [isNumber, isFraction, 'auto', 'initial', 'none', isArbitraryValue] }],\n            /**\n             * Flex Grow\n             * @see https://tailwindcss.com/docs/flex-grow\n             */\n            grow: [{ grow: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * Flex Shrink\n             * @see https://tailwindcss.com/docs/flex-shrink\n             */\n            shrink: [{ shrink: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * Order\n             * @see https://tailwindcss.com/docs/order\n             */\n            order: [\n                {\n                    order: [\n                        isInteger,\n                        'first',\n                        'last',\n                        'none',\n                        isArbitraryVariable,\n                        isArbitraryValue,\n                    ],\n                },\n            ],\n            /**\n             * Grid Template Columns\n             * @see https://tailwindcss.com/docs/grid-template-columns\n             */\n            'grid-cols': [{ 'grid-cols': scaleGridTemplateColsRows() }],\n            /**\n             * Grid Column Start / End\n             * @see https://tailwindcss.com/docs/grid-column\n             */\n            'col-start-end': [{ col: scaleGridColRowStartAndEnd() }],\n            /**\n             * Grid Column Start\n             * @see https://tailwindcss.com/docs/grid-column\n             */\n            'col-start': [{ 'col-start': scaleGridColRowStartOrEnd() }],\n            /**\n             * Grid Column End\n             * @see https://tailwindcss.com/docs/grid-column\n             */\n            'col-end': [{ 'col-end': scaleGridColRowStartOrEnd() }],\n            /**\n             * Grid Template Rows\n             * @see https://tailwindcss.com/docs/grid-template-rows\n             */\n            'grid-rows': [{ 'grid-rows': scaleGridTemplateColsRows() }],\n            /**\n             * Grid Row Start / End\n             * @see https://tailwindcss.com/docs/grid-row\n             */\n            'row-start-end': [{ row: scaleGridColRowStartAndEnd() }],\n            /**\n             * Grid Row Start\n             * @see https://tailwindcss.com/docs/grid-row\n             */\n            'row-start': [{ 'row-start': scaleGridColRowStartOrEnd() }],\n            /**\n             * Grid Row End\n             * @see https://tailwindcss.com/docs/grid-row\n             */\n            'row-end': [{ 'row-end': scaleGridColRowStartOrEnd() }],\n            /**\n             * Grid Auto Flow\n             * @see https://tailwindcss.com/docs/grid-auto-flow\n             */\n            'grid-flow': [{ 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense'] }],\n            /**\n             * Grid Auto Columns\n             * @see https://tailwindcss.com/docs/grid-auto-columns\n             */\n            'auto-cols': [{ 'auto-cols': scaleGridAutoColsRows() }],\n            /**\n             * Grid Auto Rows\n             * @see https://tailwindcss.com/docs/grid-auto-rows\n             */\n            'auto-rows': [{ 'auto-rows': scaleGridAutoColsRows() }],\n            /**\n             * Gap\n             * @see https://tailwindcss.com/docs/gap\n             */\n            gap: [{ gap: scaleUnambiguousSpacing() }],\n            /**\n             * Gap X\n             * @see https://tailwindcss.com/docs/gap\n             */\n            'gap-x': [{ 'gap-x': scaleUnambiguousSpacing() }],\n            /**\n             * Gap Y\n             * @see https://tailwindcss.com/docs/gap\n             */\n            'gap-y': [{ 'gap-y': scaleUnambiguousSpacing() }],\n            /**\n             * Justify Content\n             * @see https://tailwindcss.com/docs/justify-content\n             */\n            'justify-content': [{ justify: [...scaleAlignPrimaryAxis(), 'normal'] }],\n            /**\n             * Justify Items\n             * @see https://tailwindcss.com/docs/justify-items\n             */\n            'justify-items': [{ 'justify-items': [...scaleAlignSecondaryAxis(), 'normal'] }],\n            /**\n             * Justify Self\n             * @see https://tailwindcss.com/docs/justify-self\n             */\n            'justify-self': [{ 'justify-self': ['auto', ...scaleAlignSecondaryAxis()] }],\n            /**\n             * Align Content\n             * @see https://tailwindcss.com/docs/align-content\n             */\n            'align-content': [{ content: ['normal', ...scaleAlignPrimaryAxis()] }],\n            /**\n             * Align Items\n             * @see https://tailwindcss.com/docs/align-items\n             */\n            'align-items': [{ items: [...scaleAlignSecondaryAxis(), { baseline: ['', 'last'] }] }],\n            /**\n             * Align Self\n             * @see https://tailwindcss.com/docs/align-self\n             */\n            'align-self': [\n                { self: ['auto', ...scaleAlignSecondaryAxis(), { baseline: ['', 'last'] }] },\n            ],\n            /**\n             * Place Content\n             * @see https://tailwindcss.com/docs/place-content\n             */\n            'place-content': [{ 'place-content': scaleAlignPrimaryAxis() }],\n            /**\n             * Place Items\n             * @see https://tailwindcss.com/docs/place-items\n             */\n            'place-items': [{ 'place-items': [...scaleAlignSecondaryAxis(), 'baseline'] }],\n            /**\n             * Place Self\n             * @see https://tailwindcss.com/docs/place-self\n             */\n            'place-self': [{ 'place-self': ['auto', ...scaleAlignSecondaryAxis()] }],\n            // Spacing\n            /**\n             * Padding\n             * @see https://tailwindcss.com/docs/padding\n             */\n            p: [{ p: scaleUnambiguousSpacing() }],\n            /**\n             * Padding Inline\n             * @see https://tailwindcss.com/docs/padding\n             */\n            px: [{ px: scaleUnambiguousSpacing() }],\n            /**\n             * Padding Block\n             * @see https://tailwindcss.com/docs/padding\n             */\n            py: [{ py: scaleUnambiguousSpacing() }],\n            /**\n             * Padding Inline Start\n             * @see https://tailwindcss.com/docs/padding\n             */\n            ps: [{ ps: scaleUnambiguousSpacing() }],\n            /**\n             * Padding Inline End\n             * @see https://tailwindcss.com/docs/padding\n             */\n            pe: [{ pe: scaleUnambiguousSpacing() }],\n            /**\n             * Padding Block Start\n             * @see https://tailwindcss.com/docs/padding\n             */\n            pbs: [{ pbs: scaleUnambiguousSpacing() }],\n            /**\n             * Padding Block End\n             * @see https://tailwindcss.com/docs/padding\n             */\n            pbe: [{ pbe: scaleUnambiguousSpacing() }],\n            /**\n             * Padding Top\n             * @see https://tailwindcss.com/docs/padding\n             */\n            pt: [{ pt: scaleUnambiguousSpacing() }],\n            /**\n             * Padding Right\n             * @see https://tailwindcss.com/docs/padding\n             */\n            pr: [{ pr: scaleUnambiguousSpacing() }],\n            /**\n             * Padding Bottom\n             * @see https://tailwindcss.com/docs/padding\n             */\n            pb: [{ pb: scaleUnambiguousSpacing() }],\n            /**\n             * Padding Left\n             * @see https://tailwindcss.com/docs/padding\n             */\n            pl: [{ pl: scaleUnambiguousSpacing() }],\n            /**\n             * Margin\n             * @see https://tailwindcss.com/docs/margin\n             */\n            m: [{ m: scaleMargin() }],\n            /**\n             * Margin Inline\n             * @see https://tailwindcss.com/docs/margin\n             */\n            mx: [{ mx: scaleMargin() }],\n            /**\n             * Margin Block\n             * @see https://tailwindcss.com/docs/margin\n             */\n            my: [{ my: scaleMargin() }],\n            /**\n             * Margin Inline Start\n             * @see https://tailwindcss.com/docs/margin\n             */\n            ms: [{ ms: scaleMargin() }],\n            /**\n             * Margin Inline End\n             * @see https://tailwindcss.com/docs/margin\n             */\n            me: [{ me: scaleMargin() }],\n            /**\n             * Margin Block Start\n             * @see https://tailwindcss.com/docs/margin\n             */\n            mbs: [{ mbs: scaleMargin() }],\n            /**\n             * Margin Block End\n             * @see https://tailwindcss.com/docs/margin\n             */\n            mbe: [{ mbe: scaleMargin() }],\n            /**\n             * Margin Top\n             * @see https://tailwindcss.com/docs/margin\n             */\n            mt: [{ mt: scaleMargin() }],\n            /**\n             * Margin Right\n             * @see https://tailwindcss.com/docs/margin\n             */\n            mr: [{ mr: scaleMargin() }],\n            /**\n             * Margin Bottom\n             * @see https://tailwindcss.com/docs/margin\n             */\n            mb: [{ mb: scaleMargin() }],\n            /**\n             * Margin Left\n             * @see https://tailwindcss.com/docs/margin\n             */\n            ml: [{ ml: scaleMargin() }],\n            /**\n             * Space Between X\n             * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n             */\n            'space-x': [{ 'space-x': scaleUnambiguousSpacing() }],\n            /**\n             * Space Between X Reverse\n             * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n             */\n            'space-x-reverse': ['space-x-reverse'],\n            /**\n             * Space Between Y\n             * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n             */\n            'space-y': [{ 'space-y': scaleUnambiguousSpacing() }],\n            /**\n             * Space Between Y Reverse\n             * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n             */\n            'space-y-reverse': ['space-y-reverse'],\n\n            // --------------\n            // --- Sizing ---\n            // --------------\n\n            /**\n             * Size\n             * @see https://tailwindcss.com/docs/width#setting-both-width-and-height\n             */\n            size: [{ size: scaleSizing() }],\n            /**\n             * Inline Size\n             * @see https://tailwindcss.com/docs/width\n             */\n            'inline-size': [{ inline: ['auto', ...scaleSizingInline()] }],\n            /**\n             * Min-Inline Size\n             * @see https://tailwindcss.com/docs/min-width\n             */\n            'min-inline-size': [{ 'min-inline': ['auto', ...scaleSizingInline()] }],\n            /**\n             * Max-Inline Size\n             * @see https://tailwindcss.com/docs/max-width\n             */\n            'max-inline-size': [{ 'max-inline': ['none', ...scaleSizingInline()] }],\n            /**\n             * Block Size\n             * @see https://tailwindcss.com/docs/height\n             */\n            'block-size': [{ block: ['auto', ...scaleSizingBlock()] }],\n            /**\n             * Min-Block Size\n             * @see https://tailwindcss.com/docs/min-height\n             */\n            'min-block-size': [{ 'min-block': ['auto', ...scaleSizingBlock()] }],\n            /**\n             * Max-Block Size\n             * @see https://tailwindcss.com/docs/max-height\n             */\n            'max-block-size': [{ 'max-block': ['none', ...scaleSizingBlock()] }],\n            /**\n             * Width\n             * @see https://tailwindcss.com/docs/width\n             */\n            w: [{ w: [themeContainer, 'screen', ...scaleSizing()] }],\n            /**\n             * Min-Width\n             * @see https://tailwindcss.com/docs/min-width\n             */\n            'min-w': [\n                {\n                    'min-w': [\n                        themeContainer,\n                        'screen',\n                        /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n                        'none',\n                        ...scaleSizing(),\n                    ],\n                },\n            ],\n            /**\n             * Max-Width\n             * @see https://tailwindcss.com/docs/max-width\n             */\n            'max-w': [\n                {\n                    'max-w': [\n                        themeContainer,\n                        'screen',\n                        'none',\n                        /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n                        'prose',\n                        /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n                        { screen: [themeBreakpoint] },\n                        ...scaleSizing(),\n                    ],\n                },\n            ],\n            /**\n             * Height\n             * @see https://tailwindcss.com/docs/height\n             */\n            h: [{ h: ['screen', 'lh', ...scaleSizing()] }],\n            /**\n             * Min-Height\n             * @see https://tailwindcss.com/docs/min-height\n             */\n            'min-h': [{ 'min-h': ['screen', 'lh', 'none', ...scaleSizing()] }],\n            /**\n             * Max-Height\n             * @see https://tailwindcss.com/docs/max-height\n             */\n            'max-h': [{ 'max-h': ['screen', 'lh', ...scaleSizing()] }],\n\n            // ------------------\n            // --- Typography ---\n            // ------------------\n\n            /**\n             * Font Size\n             * @see https://tailwindcss.com/docs/font-size\n             */\n            'font-size': [\n                { text: ['base', themeText, isArbitraryVariableLength, isArbitraryLength] },\n            ],\n            /**\n             * Font Smoothing\n             * @see https://tailwindcss.com/docs/font-smoothing\n             */\n            'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n            /**\n             * Font Style\n             * @see https://tailwindcss.com/docs/font-style\n             */\n            'font-style': ['italic', 'not-italic'],\n            /**\n             * Font Weight\n             * @see https://tailwindcss.com/docs/font-weight\n             */\n            'font-weight': [\n                {\n                    font: [themeFontWeight, isArbitraryVariableWeight, isArbitraryWeight],\n                },\n            ],\n            /**\n             * Font Stretch\n             * @see https://tailwindcss.com/docs/font-stretch\n             */\n            'font-stretch': [\n                {\n                    'font-stretch': [\n                        'ultra-condensed',\n                        'extra-condensed',\n                        'condensed',\n                        'semi-condensed',\n                        'normal',\n                        'semi-expanded',\n                        'expanded',\n                        'extra-expanded',\n                        'ultra-expanded',\n                        isPercent,\n                        isArbitraryValue,\n                    ],\n                },\n            ],\n            /**\n             * Font Family\n             * @see https://tailwindcss.com/docs/font-family\n             */\n            'font-family': [\n                { font: [isArbitraryVariableFamilyName, isArbitraryFamilyName, themeFont] },\n            ],\n            /**\n             * Font Feature Settings\n             * @see https://tailwindcss.com/docs/font-feature-settings\n             */\n            'font-features': [{ 'font-features': [isArbitraryValue] }],\n            /**\n             * Font Variant Numeric\n             * @see https://tailwindcss.com/docs/font-variant-numeric\n             */\n            'fvn-normal': ['normal-nums'],\n            /**\n             * Font Variant Numeric\n             * @see https://tailwindcss.com/docs/font-variant-numeric\n             */\n            'fvn-ordinal': ['ordinal'],\n            /**\n             * Font Variant Numeric\n             * @see https://tailwindcss.com/docs/font-variant-numeric\n             */\n            'fvn-slashed-zero': ['slashed-zero'],\n            /**\n             * Font Variant Numeric\n             * @see https://tailwindcss.com/docs/font-variant-numeric\n             */\n            'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n            /**\n             * Font Variant Numeric\n             * @see https://tailwindcss.com/docs/font-variant-numeric\n             */\n            'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n            /**\n             * Font Variant Numeric\n             * @see https://tailwindcss.com/docs/font-variant-numeric\n             */\n            'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n            /**\n             * Letter Spacing\n             * @see https://tailwindcss.com/docs/letter-spacing\n             */\n            tracking: [{ tracking: [themeTracking, isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * Line Clamp\n             * @see https://tailwindcss.com/docs/line-clamp\n             */\n            'line-clamp': [\n                { 'line-clamp': [isNumber, 'none', isArbitraryVariable, isArbitraryNumber] },\n            ],\n            /**\n             * Line Height\n             * @see https://tailwindcss.com/docs/line-height\n             */\n            leading: [\n                {\n                    leading: [\n                        /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n                        themeLeading,\n                        ...scaleUnambiguousSpacing(),\n                    ],\n                },\n            ],\n            /**\n             * List Style Image\n             * @see https://tailwindcss.com/docs/list-style-image\n             */\n            'list-image': [{ 'list-image': ['none', isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * List Style Position\n             * @see https://tailwindcss.com/docs/list-style-position\n             */\n            'list-style-position': [{ list: ['inside', 'outside'] }],\n            /**\n             * List Style Type\n             * @see https://tailwindcss.com/docs/list-style-type\n             */\n            'list-style-type': [\n                { list: ['disc', 'decimal', 'none', isArbitraryVariable, isArbitraryValue] },\n            ],\n            /**\n             * Text Alignment\n             * @see https://tailwindcss.com/docs/text-align\n             */\n            'text-alignment': [{ text: ['left', 'center', 'right', 'justify', 'start', 'end'] }],\n            /**\n             * Placeholder Color\n             * @deprecated since Tailwind CSS v3.0.0\n             * @see https://v3.tailwindcss.com/docs/placeholder-color\n             */\n            'placeholder-color': [{ placeholder: scaleColor() }],\n            /**\n             * Text Color\n             * @see https://tailwindcss.com/docs/text-color\n             */\n            'text-color': [{ text: scaleColor() }],\n            /**\n             * Text Decoration\n             * @see https://tailwindcss.com/docs/text-decoration\n             */\n            'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n            /**\n             * Text Decoration Style\n             * @see https://tailwindcss.com/docs/text-decoration-style\n             */\n            'text-decoration-style': [{ decoration: [...scaleLineStyle(), 'wavy'] }],\n            /**\n             * Text Decoration Thickness\n             * @see https://tailwindcss.com/docs/text-decoration-thickness\n             */\n            'text-decoration-thickness': [\n                {\n                    decoration: [\n                        isNumber,\n                        'from-font',\n                        'auto',\n                        isArbitraryVariable,\n                        isArbitraryLength,\n                    ],\n                },\n            ],\n            /**\n             * Text Decoration Color\n             * @see https://tailwindcss.com/docs/text-decoration-color\n             */\n            'text-decoration-color': [{ decoration: scaleColor() }],\n            /**\n             * Text Underline Offset\n             * @see https://tailwindcss.com/docs/text-underline-offset\n             */\n            'underline-offset': [\n                { 'underline-offset': [isNumber, 'auto', isArbitraryVariable, isArbitraryValue] },\n            ],\n            /**\n             * Text Transform\n             * @see https://tailwindcss.com/docs/text-transform\n             */\n            'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n            /**\n             * Text Overflow\n             * @see https://tailwindcss.com/docs/text-overflow\n             */\n            'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n            /**\n             * Text Wrap\n             * @see https://tailwindcss.com/docs/text-wrap\n             */\n            'text-wrap': [{ text: ['wrap', 'nowrap', 'balance', 'pretty'] }],\n            /**\n             * Text Indent\n             * @see https://tailwindcss.com/docs/text-indent\n             */\n            indent: [{ indent: scaleUnambiguousSpacing() }],\n            /**\n             * Tab Size\n             * @see https://tailwindcss.com/docs/tab-size\n             */\n            'tab-size': [{ tab: [isInteger, isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * Vertical Alignment\n             * @see https://tailwindcss.com/docs/vertical-align\n             */\n            'vertical-align': [\n                {\n                    align: [\n                        'baseline',\n                        'top',\n                        'middle',\n                        'bottom',\n                        'text-top',\n                        'text-bottom',\n                        'sub',\n                        'super',\n                        isArbitraryVariable,\n                        isArbitraryValue,\n                    ],\n                },\n            ],\n            /**\n             * Whitespace\n             * @see https://tailwindcss.com/docs/whitespace\n             */\n            whitespace: [\n                { whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces'] },\n            ],\n            /**\n             * Word Break\n             * @see https://tailwindcss.com/docs/word-break\n             */\n            break: [{ break: ['normal', 'words', 'all', 'keep'] }],\n            /**\n             * Overflow Wrap\n             * @see https://tailwindcss.com/docs/overflow-wrap\n             */\n            wrap: [{ wrap: ['break-word', 'anywhere', 'normal'] }],\n            /**\n             * Hyphens\n             * @see https://tailwindcss.com/docs/hyphens\n             */\n            hyphens: [{ hyphens: ['none', 'manual', 'auto'] }],\n            /**\n             * Content\n             * @see https://tailwindcss.com/docs/content\n             */\n            content: [{ content: ['none', isArbitraryVariable, isArbitraryValue] }],\n\n            // -------------------\n            // --- Backgrounds ---\n            // -------------------\n\n            /**\n             * Background Attachment\n             * @see https://tailwindcss.com/docs/background-attachment\n             */\n            'bg-attachment': [{ bg: ['fixed', 'local', 'scroll'] }],\n            /**\n             * Background Clip\n             * @see https://tailwindcss.com/docs/background-clip\n             */\n            'bg-clip': [{ 'bg-clip': ['border', 'padding', 'content', 'text'] }],\n            /**\n             * Background Origin\n             * @see https://tailwindcss.com/docs/background-origin\n             */\n            'bg-origin': [{ 'bg-origin': ['border', 'padding', 'content'] }],\n            /**\n             * Background Position\n             * @see https://tailwindcss.com/docs/background-position\n             */\n            'bg-position': [{ bg: scaleBgPosition() }],\n            /**\n             * Background Repeat\n             * @see https://tailwindcss.com/docs/background-repeat\n             */\n            'bg-repeat': [{ bg: scaleBgRepeat() }],\n            /**\n             * Background Size\n             * @see https://tailwindcss.com/docs/background-size\n             */\n            'bg-size': [{ bg: scaleBgSize() }],\n            /**\n             * Background Image\n             * @see https://tailwindcss.com/docs/background-image\n             */\n            'bg-image': [\n                {\n                    bg: [\n                        'none',\n                        {\n                            linear: [\n                                { to: ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl'] },\n                                isInteger,\n                                isArbitraryVariable,\n                                isArbitraryValue,\n                            ],\n                            radial: ['', isArbitraryVariable, isArbitraryValue],\n                            conic: [isInteger, isArbitraryVariable, isArbitraryValue],\n                        },\n                        isArbitraryVariableImage,\n                        isArbitraryImage,\n                    ],\n                },\n            ],\n            /**\n             * Background Color\n             * @see https://tailwindcss.com/docs/background-color\n             */\n            'bg-color': [{ bg: scaleColor() }],\n            /**\n             * Gradient Color Stops From Position\n             * @see https://tailwindcss.com/docs/gradient-color-stops\n             */\n            'gradient-from-pos': [{ from: scaleGradientStopPosition() }],\n            /**\n             * Gradient Color Stops Via Position\n             * @see https://tailwindcss.com/docs/gradient-color-stops\n             */\n            'gradient-via-pos': [{ via: scaleGradientStopPosition() }],\n            /**\n             * Gradient Color Stops To Position\n             * @see https://tailwindcss.com/docs/gradient-color-stops\n             */\n            'gradient-to-pos': [{ to: scaleGradientStopPosition() }],\n            /**\n             * Gradient Color Stops From\n             * @see https://tailwindcss.com/docs/gradient-color-stops\n             */\n            'gradient-from': [{ from: scaleColor() }],\n            /**\n             * Gradient Color Stops Via\n             * @see https://tailwindcss.com/docs/gradient-color-stops\n             */\n            'gradient-via': [{ via: scaleColor() }],\n            /**\n             * Gradient Color Stops To\n             * @see https://tailwindcss.com/docs/gradient-color-stops\n             */\n            'gradient-to': [{ to: scaleColor() }],\n\n            // ---------------\n            // --- Borders ---\n            // ---------------\n\n            /**\n             * Border Radius\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            rounded: [{ rounded: scaleRadius() }],\n            /**\n             * Border Radius Start\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-s': [{ 'rounded-s': scaleRadius() }],\n            /**\n             * Border Radius End\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-e': [{ 'rounded-e': scaleRadius() }],\n            /**\n             * Border Radius Top\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-t': [{ 'rounded-t': scaleRadius() }],\n            /**\n             * Border Radius Right\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-r': [{ 'rounded-r': scaleRadius() }],\n            /**\n             * Border Radius Bottom\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-b': [{ 'rounded-b': scaleRadius() }],\n            /**\n             * Border Radius Left\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-l': [{ 'rounded-l': scaleRadius() }],\n            /**\n             * Border Radius Start Start\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-ss': [{ 'rounded-ss': scaleRadius() }],\n            /**\n             * Border Radius Start End\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-se': [{ 'rounded-se': scaleRadius() }],\n            /**\n             * Border Radius End End\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-ee': [{ 'rounded-ee': scaleRadius() }],\n            /**\n             * Border Radius End Start\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-es': [{ 'rounded-es': scaleRadius() }],\n            /**\n             * Border Radius Top Left\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-tl': [{ 'rounded-tl': scaleRadius() }],\n            /**\n             * Border Radius Top Right\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-tr': [{ 'rounded-tr': scaleRadius() }],\n            /**\n             * Border Radius Bottom Right\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-br': [{ 'rounded-br': scaleRadius() }],\n            /**\n             * Border Radius Bottom Left\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-bl': [{ 'rounded-bl': scaleRadius() }],\n            /**\n             * Border Width\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w': [{ border: scaleBorderWidth() }],\n            /**\n             * Border Width Inline\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w-x': [{ 'border-x': scaleBorderWidth() }],\n            /**\n             * Border Width Block\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w-y': [{ 'border-y': scaleBorderWidth() }],\n            /**\n             * Border Width Inline Start\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w-s': [{ 'border-s': scaleBorderWidth() }],\n            /**\n             * Border Width Inline End\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w-e': [{ 'border-e': scaleBorderWidth() }],\n            /**\n             * Border Width Block Start\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w-bs': [{ 'border-bs': scaleBorderWidth() }],\n            /**\n             * Border Width Block End\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w-be': [{ 'border-be': scaleBorderWidth() }],\n            /**\n             * Border Width Top\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w-t': [{ 'border-t': scaleBorderWidth() }],\n            /**\n             * Border Width Right\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w-r': [{ 'border-r': scaleBorderWidth() }],\n            /**\n             * Border Width Bottom\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w-b': [{ 'border-b': scaleBorderWidth() }],\n            /**\n             * Border Width Left\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w-l': [{ 'border-l': scaleBorderWidth() }],\n            /**\n             * Divide Width X\n             * @see https://tailwindcss.com/docs/border-width#between-children\n             */\n            'divide-x': [{ 'divide-x': scaleBorderWidth() }],\n            /**\n             * Divide Width X Reverse\n             * @see https://tailwindcss.com/docs/border-width#between-children\n             */\n            'divide-x-reverse': ['divide-x-reverse'],\n            /**\n             * Divide Width Y\n             * @see https://tailwindcss.com/docs/border-width#between-children\n             */\n            'divide-y': [{ 'divide-y': scaleBorderWidth() }],\n            /**\n             * Divide Width Y Reverse\n             * @see https://tailwindcss.com/docs/border-width#between-children\n             */\n            'divide-y-reverse': ['divide-y-reverse'],\n            /**\n             * Border Style\n             * @see https://tailwindcss.com/docs/border-style\n             */\n            'border-style': [{ border: [...scaleLineStyle(), 'hidden', 'none'] }],\n            /**\n             * Divide Style\n             * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style\n             */\n            'divide-style': [{ divide: [...scaleLineStyle(), 'hidden', 'none'] }],\n            /**\n             * Border Color\n             * @see https://tailwindcss.com/docs/border-color\n             */\n            'border-color': [{ border: scaleColor() }],\n            /**\n             * Border Color Inline\n             * @see https://tailwindcss.com/docs/border-color\n             */\n            'border-color-x': [{ 'border-x': scaleColor() }],\n            /**\n             * Border Color Block\n             * @see https://tailwindcss.com/docs/border-color\n             */\n            'border-color-y': [{ 'border-y': scaleColor() }],\n            /**\n             * Border Color Inline Start\n             * @see https://tailwindcss.com/docs/border-color\n             */\n            'border-color-s': [{ 'border-s': scaleColor() }],\n            /**\n             * Border Color Inline End\n             * @see https://tailwindcss.com/docs/border-color\n             */\n            'border-color-e': [{ 'border-e': scaleColor() }],\n            /**\n             * Border Color Block Start\n             * @see https://tailwindcss.com/docs/border-color\n             */\n            'border-color-bs': [{ 'border-bs': scaleColor() }],\n            /**\n             * Border Color Block End\n             * @see https://tailwindcss.com/docs/border-color\n             */\n            'border-color-be': [{ 'border-be': scaleColor() }],\n            /**\n             * Border Color Top\n             * @see https://tailwindcss.com/docs/border-color\n             */\n            'border-color-t': [{ 'border-t': scaleColor() }],\n            /**\n             * Border Color Right\n             * @see https://tailwindcss.com/docs/border-color\n             */\n            'border-color-r': [{ 'border-r': scaleColor() }],\n            /**\n             * Border Color Bottom\n             * @see https://tailwindcss.com/docs/border-color\n             */\n            'border-color-b': [{ 'border-b': scaleColor() }],\n            /**\n             * Border Color Left\n             * @see https://tailwindcss.com/docs/border-color\n             */\n            'border-color-l': [{ 'border-l': scaleColor() }],\n            /**\n             * Divide Color\n             * @see https://tailwindcss.com/docs/divide-color\n             */\n            'divide-color': [{ divide: scaleColor() }],\n            /**\n             * Outline Style\n             * @see https://tailwindcss.com/docs/outline-style\n             */\n            'outline-style': [{ outline: [...scaleLineStyle(), 'none', 'hidden'] }],\n            /**\n             * Outline Offset\n             * @see https://tailwindcss.com/docs/outline-offset\n             */\n            'outline-offset': [\n                { 'outline-offset': [isNumber, isArbitraryVariable, isArbitraryValue] },\n            ],\n            /**\n             * Outline Width\n             * @see https://tailwindcss.com/docs/outline-width\n             */\n            'outline-w': [\n                { outline: ['', isNumber, isArbitraryVariableLength, isArbitraryLength] },\n            ],\n            /**\n             * Outline Color\n             * @see https://tailwindcss.com/docs/outline-color\n             */\n            'outline-color': [{ outline: scaleColor() }],\n\n            // ---------------\n            // --- Effects ---\n            // ---------------\n\n            /**\n             * Box Shadow\n             * @see https://tailwindcss.com/docs/box-shadow\n             */\n            shadow: [\n                {\n                    shadow: [\n                        // Deprecated since Tailwind CSS v4.0.0\n                        '',\n                        'none',\n                        themeShadow,\n                        isArbitraryVariableShadow,\n                        isArbitraryShadow,\n                    ],\n                },\n            ],\n            /**\n             * Box Shadow Color\n             * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color\n             */\n            'shadow-color': [{ shadow: scaleColor() }],\n            /**\n             * Inset Box Shadow\n             * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow\n             */\n            'inset-shadow': [\n                {\n                    'inset-shadow': [\n                        'none',\n                        themeInsetShadow,\n                        isArbitraryVariableShadow,\n                        isArbitraryShadow,\n                    ],\n                },\n            ],\n            /**\n             * Inset Box Shadow Color\n             * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color\n             */\n            'inset-shadow-color': [{ 'inset-shadow': scaleColor() }],\n            /**\n             * Ring Width\n             * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring\n             */\n            'ring-w': [{ ring: scaleBorderWidth() }],\n            /**\n             * Ring Width Inset\n             * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings\n             * @deprecated since Tailwind CSS v4.0.0\n             * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n             */\n            'ring-w-inset': ['ring-inset'],\n            /**\n             * Ring Color\n             * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color\n             */\n            'ring-color': [{ ring: scaleColor() }],\n            /**\n             * Ring Offset Width\n             * @see https://v3.tailwindcss.com/docs/ring-offset-width\n             * @deprecated since Tailwind CSS v4.0.0\n             * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n             */\n            'ring-offset-w': [{ 'ring-offset': [isNumber, isArbitraryLength] }],\n            /**\n             * Ring Offset Color\n             * @see https://v3.tailwindcss.com/docs/ring-offset-color\n             * @deprecated since Tailwind CSS v4.0.0\n             * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n             */\n            'ring-offset-color': [{ 'ring-offset': scaleColor() }],\n            /**\n             * Inset Ring Width\n             * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring\n             */\n            'inset-ring-w': [{ 'inset-ring': scaleBorderWidth() }],\n            /**\n             * Inset Ring Color\n             * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color\n             */\n            'inset-ring-color': [{ 'inset-ring': scaleColor() }],\n            /**\n             * Text Shadow\n             * @see https://tailwindcss.com/docs/text-shadow\n             */\n            'text-shadow': [\n                {\n                    'text-shadow': [\n                        'none',\n                        themeTextShadow,\n                        isArbitraryVariableShadow,\n                        isArbitraryShadow,\n                    ],\n                },\n            ],\n            /**\n             * Text Shadow Color\n             * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color\n             */\n            'text-shadow-color': [{ 'text-shadow': scaleColor() }],\n            /**\n             * Opacity\n             * @see https://tailwindcss.com/docs/opacity\n             */\n            opacity: [{ opacity: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * Mix Blend Mode\n             * @see https://tailwindcss.com/docs/mix-blend-mode\n             */\n            'mix-blend': [{ 'mix-blend': [...scaleBlendMode(), 'plus-darker', 'plus-lighter'] }],\n            /**\n             * Background Blend Mode\n             * @see https://tailwindcss.com/docs/background-blend-mode\n             */\n            'bg-blend': [{ 'bg-blend': scaleBlendMode() }],\n            /**\n             * Mask Clip\n             * @see https://tailwindcss.com/docs/mask-clip\n             */\n            'mask-clip': [\n                { 'mask-clip': ['border', 'padding', 'content', 'fill', 'stroke', 'view'] },\n                'mask-no-clip',\n            ],\n            /**\n             * Mask Composite\n             * @see https://tailwindcss.com/docs/mask-composite\n             */\n            'mask-composite': [{ mask: ['add', 'subtract', 'intersect', 'exclude'] }],\n            /**\n             * Mask Image\n             * @see https://tailwindcss.com/docs/mask-image\n             */\n            'mask-image-linear-pos': [{ 'mask-linear': [isNumber] }],\n            'mask-image-linear-from-pos': [{ 'mask-linear-from': scaleMaskImagePosition() }],\n            'mask-image-linear-to-pos': [{ 'mask-linear-to': scaleMaskImagePosition() }],\n            'mask-image-linear-from-color': [{ 'mask-linear-from': scaleColor() }],\n            'mask-image-linear-to-color': [{ 'mask-linear-to': scaleColor() }],\n            'mask-image-t-from-pos': [{ 'mask-t-from': scaleMaskImagePosition() }],\n            'mask-image-t-to-pos': [{ 'mask-t-to': scaleMaskImagePosition() }],\n            'mask-image-t-from-color': [{ 'mask-t-from': scaleColor() }],\n            'mask-image-t-to-color': [{ 'mask-t-to': scaleColor() }],\n            'mask-image-r-from-pos': [{ 'mask-r-from': scaleMaskImagePosition() }],\n            'mask-image-r-to-pos': [{ 'mask-r-to': scaleMaskImagePosition() }],\n            'mask-image-r-from-color': [{ 'mask-r-from': scaleColor() }],\n            'mask-image-r-to-color': [{ 'mask-r-to': scaleColor() }],\n            'mask-image-b-from-pos': [{ 'mask-b-from': scaleMaskImagePosition() }],\n            'mask-image-b-to-pos': [{ 'mask-b-to': scaleMaskImagePosition() }],\n            'mask-image-b-from-color': [{ 'mask-b-from': scaleColor() }],\n            'mask-image-b-to-color': [{ 'mask-b-to': scaleColor() }],\n            'mask-image-l-from-pos': [{ 'mask-l-from': scaleMaskImagePosition() }],\n            'mask-image-l-to-pos': [{ 'mask-l-to': scaleMaskImagePosition() }],\n            'mask-image-l-from-color': [{ 'mask-l-from': scaleColor() }],\n            'mask-image-l-to-color': [{ 'mask-l-to': scaleColor() }],\n            'mask-image-x-from-pos': [{ 'mask-x-from': scaleMaskImagePosition() }],\n            'mask-image-x-to-pos': [{ 'mask-x-to': scaleMaskImagePosition() }],\n            'mask-image-x-from-color': [{ 'mask-x-from': scaleColor() }],\n            'mask-image-x-to-color': [{ 'mask-x-to': scaleColor() }],\n            'mask-image-y-from-pos': [{ 'mask-y-from': scaleMaskImagePosition() }],\n            'mask-image-y-to-pos': [{ 'mask-y-to': scaleMaskImagePosition() }],\n            'mask-image-y-from-color': [{ 'mask-y-from': scaleColor() }],\n            'mask-image-y-to-color': [{ 'mask-y-to': scaleColor() }],\n            'mask-image-radial': [{ 'mask-radial': [isArbitraryVariable, isArbitraryValue] }],\n            'mask-image-radial-from-pos': [{ 'mask-radial-from': scaleMaskImagePosition() }],\n            'mask-image-radial-to-pos': [{ 'mask-radial-to': scaleMaskImagePosition() }],\n            'mask-image-radial-from-color': [{ 'mask-radial-from': scaleColor() }],\n            'mask-image-radial-to-color': [{ 'mask-radial-to': scaleColor() }],\n            'mask-image-radial-shape': [{ 'mask-radial': ['circle', 'ellipse'] }],\n            'mask-image-radial-size': [\n                { 'mask-radial': [{ closest: ['side', 'corner'], farthest: ['side', 'corner'] }] },\n            ],\n            'mask-image-radial-pos': [{ 'mask-radial-at': scalePosition() }],\n            'mask-image-conic-pos': [{ 'mask-conic': [isNumber] }],\n            'mask-image-conic-from-pos': [{ 'mask-conic-from': scaleMaskImagePosition() }],\n            'mask-image-conic-to-pos': [{ 'mask-conic-to': scaleMaskImagePosition() }],\n            'mask-image-conic-from-color': [{ 'mask-conic-from': scaleColor() }],\n            'mask-image-conic-to-color': [{ 'mask-conic-to': scaleColor() }],\n            /**\n             * Mask Mode\n             * @see https://tailwindcss.com/docs/mask-mode\n             */\n            'mask-mode': [{ mask: ['alpha', 'luminance', 'match'] }],\n            /**\n             * Mask Origin\n             * @see https://tailwindcss.com/docs/mask-origin\n             */\n            'mask-origin': [\n                { 'mask-origin': ['border', 'padding', 'content', 'fill', 'stroke', 'view'] },\n            ],\n            /**\n             * Mask Position\n             * @see https://tailwindcss.com/docs/mask-position\n             */\n            'mask-position': [{ mask: scaleBgPosition() }],\n            /**\n             * Mask Repeat\n             * @see https://tailwindcss.com/docs/mask-repeat\n             */\n            'mask-repeat': [{ mask: scaleBgRepeat() }],\n            /**\n             * Mask Size\n             * @see https://tailwindcss.com/docs/mask-size\n             */\n            'mask-size': [{ mask: scaleBgSize() }],\n            /**\n             * Mask Type\n             * @see https://tailwindcss.com/docs/mask-type\n             */\n            'mask-type': [{ 'mask-type': ['alpha', 'luminance'] }],\n            /**\n             * Mask Image\n             * @see https://tailwindcss.com/docs/mask-image\n             */\n            'mask-image': [{ mask: ['none', isArbitraryVariable, isArbitraryValue] }],\n\n            // ---------------\n            // --- Filters ---\n            // ---------------\n\n            /**\n             * Filter\n             * @see https://tailwindcss.com/docs/filter\n             */\n            filter: [\n                {\n                    filter: [\n                        // Deprecated since Tailwind CSS v3.0.0\n                        '',\n                        'none',\n                        isArbitraryVariable,\n                        isArbitraryValue,\n                    ],\n                },\n            ],\n            /**\n             * Blur\n             * @see https://tailwindcss.com/docs/blur\n             */\n            blur: [{ blur: scaleBlur() }],\n            /**\n             * Brightness\n             * @see https://tailwindcss.com/docs/brightness\n             */\n            brightness: [{ brightness: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * Contrast\n             * @see https://tailwindcss.com/docs/contrast\n             */\n            contrast: [{ contrast: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * Drop Shadow\n             * @see https://tailwindcss.com/docs/drop-shadow\n             */\n            'drop-shadow': [\n                {\n                    'drop-shadow': [\n                        // Deprecated since Tailwind CSS v4.0.0\n                        '',\n                        'none',\n                        themeDropShadow,\n                        isArbitraryVariableShadow,\n                        isArbitraryShadow,\n                    ],\n                },\n            ],\n            /**\n             * Drop Shadow Color\n             * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color\n             */\n            'drop-shadow-color': [{ 'drop-shadow': scaleColor() }],\n            /**\n             * Grayscale\n             * @see https://tailwindcss.com/docs/grayscale\n             */\n            grayscale: [{ grayscale: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * Hue Rotate\n             * @see https://tailwindcss.com/docs/hue-rotate\n             */\n            'hue-rotate': [{ 'hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * Invert\n             * @see https://tailwindcss.com/docs/invert\n             */\n            invert: [{ invert: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * Saturate\n             * @see https://tailwindcss.com/docs/saturate\n             */\n            saturate: [{ saturate: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * Sepia\n             * @see https://tailwindcss.com/docs/sepia\n             */\n            sepia: [{ sepia: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * Backdrop Filter\n             * @see https://tailwindcss.com/docs/backdrop-filter\n             */\n            'backdrop-filter': [\n                {\n                    'backdrop-filter': [\n                        // Deprecated since Tailwind CSS v3.0.0\n                        '',\n                        'none',\n                        isArbitraryVariable,\n                        isArbitraryValue,\n                    ],\n                },\n            ],\n            /**\n             * Backdrop Blur\n             * @see https://tailwindcss.com/docs/backdrop-blur\n             */\n            'backdrop-blur': [{ 'backdrop-blur': scaleBlur() }],\n            /**\n             * Backdrop Brightness\n             * @see https://tailwindcss.com/docs/backdrop-brightness\n             */\n            'backdrop-brightness': [\n                { 'backdrop-brightness': [isNumber, isArbitraryVariable, isArbitraryValue] },\n            ],\n            /**\n             * Backdrop Contrast\n             * @see https://tailwindcss.com/docs/backdrop-contrast\n             */\n            'backdrop-contrast': [\n                { 'backdrop-contrast': [isNumber, isArbitraryVariable, isArbitraryValue] },\n            ],\n            /**\n             * Backdrop Grayscale\n             * @see https://tailwindcss.com/docs/backdrop-grayscale\n             */\n            'backdrop-grayscale': [\n                { 'backdrop-grayscale': ['', isNumber, isArbitraryVariable, isArbitraryValue] },\n            ],\n            /**\n             * Backdrop Hue Rotate\n             * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n             */\n            'backdrop-hue-rotate': [\n                { 'backdrop-hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue] },\n            ],\n            /**\n             * Backdrop Invert\n             * @see https://tailwindcss.com/docs/backdrop-invert\n             */\n            'backdrop-invert': [\n                { 'backdrop-invert': ['', isNumber, isArbitraryVariable, isArbitraryValue] },\n            ],\n            /**\n             * Backdrop Opacity\n             * @see https://tailwindcss.com/docs/backdrop-opacity\n             */\n            'backdrop-opacity': [\n                { 'backdrop-opacity': [isNumber, isArbitraryVariable, isArbitraryValue] },\n            ],\n            /**\n             * Backdrop Saturate\n             * @see https://tailwindcss.com/docs/backdrop-saturate\n             */\n            'backdrop-saturate': [\n                { 'backdrop-saturate': [isNumber, isArbitraryVariable, isArbitraryValue] },\n            ],\n            /**\n             * Backdrop Sepia\n             * @see https://tailwindcss.com/docs/backdrop-sepia\n             */\n            'backdrop-sepia': [\n                { 'backdrop-sepia': ['', isNumber, isArbitraryVariable, isArbitraryValue] },\n            ],\n\n            // --------------\n            // --- Tables ---\n            // --------------\n\n            /**\n             * Border Collapse\n             * @see https://tailwindcss.com/docs/border-collapse\n             */\n            'border-collapse': [{ border: ['collapse', 'separate'] }],\n            /**\n             * Border Spacing\n             * @see https://tailwindcss.com/docs/border-spacing\n             */\n            'border-spacing': [{ 'border-spacing': scaleUnambiguousSpacing() }],\n            /**\n             * Border Spacing X\n             * @see https://tailwindcss.com/docs/border-spacing\n             */\n            'border-spacing-x': [{ 'border-spacing-x': scaleUnambiguousSpacing() }],\n            /**\n             * Border Spacing Y\n             * @see https://tailwindcss.com/docs/border-spacing\n             */\n            'border-spacing-y': [{ 'border-spacing-y': scaleUnambiguousSpacing() }],\n            /**\n             * Table Layout\n             * @see https://tailwindcss.com/docs/table-layout\n             */\n            'table-layout': [{ table: ['auto', 'fixed'] }],\n            /**\n             * Caption Side\n             * @see https://tailwindcss.com/docs/caption-side\n             */\n            caption: [{ caption: ['top', 'bottom'] }],\n\n            // ---------------------------------\n            // --- Transitions and Animation ---\n            // ---------------------------------\n\n            /**\n             * Transition Property\n             * @see https://tailwindcss.com/docs/transition-property\n             */\n            transition: [\n                {\n                    transition: [\n                        '',\n                        'all',\n                        'colors',\n                        'opacity',\n                        'shadow',\n                        'transform',\n                        'none',\n                        isArbitraryVariable,\n                        isArbitraryValue,\n                    ],\n                },\n            ],\n            /**\n             * Transition Behavior\n             * @see https://tailwindcss.com/docs/transition-behavior\n             */\n            'transition-behavior': [{ transition: ['normal', 'discrete'] }],\n            /**\n             * Transition Duration\n             * @see https://tailwindcss.com/docs/transition-duration\n             */\n            duration: [{ duration: [isNumber, 'initial', isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * Transition Timing Function\n             * @see https://tailwindcss.com/docs/transition-timing-function\n             */\n            ease: [\n                { ease: ['linear', 'initial', themeEase, isArbitraryVariable, isArbitraryValue] },\n            ],\n            /**\n             * Transition Delay\n             * @see https://tailwindcss.com/docs/transition-delay\n             */\n            delay: [{ delay: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * Animation\n             * @see https://tailwindcss.com/docs/animation\n             */\n            animate: [{ animate: ['none', themeAnimate, isArbitraryVariable, isArbitraryValue] }],\n\n            // ------------------\n            // --- Transforms ---\n            // ------------------\n\n            /**\n             * Backface Visibility\n             * @see https://tailwindcss.com/docs/backface-visibility\n             */\n            backface: [{ backface: ['hidden', 'visible'] }],\n            /**\n             * Perspective\n             * @see https://tailwindcss.com/docs/perspective\n             */\n            perspective: [\n                { perspective: [themePerspective, isArbitraryVariable, isArbitraryValue] },\n            ],\n            /**\n             * Perspective Origin\n             * @see https://tailwindcss.com/docs/perspective-origin\n             */\n            'perspective-origin': [{ 'perspective-origin': scalePositionWithArbitrary() }],\n            /**\n             * Rotate\n             * @see https://tailwindcss.com/docs/rotate\n             */\n            rotate: [{ rotate: scaleRotate() }],\n            /**\n             * Rotate X\n             * @see https://tailwindcss.com/docs/rotate\n             */\n            'rotate-x': [{ 'rotate-x': scaleRotate() }],\n            /**\n             * Rotate Y\n             * @see https://tailwindcss.com/docs/rotate\n             */\n            'rotate-y': [{ 'rotate-y': scaleRotate() }],\n            /**\n             * Rotate Z\n             * @see https://tailwindcss.com/docs/rotate\n             */\n            'rotate-z': [{ 'rotate-z': scaleRotate() }],\n            /**\n             * Scale\n             * @see https://tailwindcss.com/docs/scale\n             */\n            scale: [{ scale: scaleScale() }],\n            /**\n             * Scale X\n             * @see https://tailwindcss.com/docs/scale\n             */\n            'scale-x': [{ 'scale-x': scaleScale() }],\n            /**\n             * Scale Y\n             * @see https://tailwindcss.com/docs/scale\n             */\n            'scale-y': [{ 'scale-y': scaleScale() }],\n            /**\n             * Scale Z\n             * @see https://tailwindcss.com/docs/scale\n             */\n            'scale-z': [{ 'scale-z': scaleScale() }],\n            /**\n             * Scale 3D\n             * @see https://tailwindcss.com/docs/scale\n             */\n            'scale-3d': ['scale-3d'],\n            /**\n             * Skew\n             * @see https://tailwindcss.com/docs/skew\n             */\n            skew: [{ skew: scaleSkew() }],\n            /**\n             * Skew X\n             * @see https://tailwindcss.com/docs/skew\n             */\n            'skew-x': [{ 'skew-x': scaleSkew() }],\n            /**\n             * Skew Y\n             * @see https://tailwindcss.com/docs/skew\n             */\n            'skew-y': [{ 'skew-y': scaleSkew() }],\n            /**\n             * Transform\n             * @see https://tailwindcss.com/docs/transform\n             */\n            transform: [\n                { transform: [isArbitraryVariable, isArbitraryValue, '', 'none', 'gpu', 'cpu'] },\n            ],\n            /**\n             * Transform Origin\n             * @see https://tailwindcss.com/docs/transform-origin\n             */\n            'transform-origin': [{ origin: scalePositionWithArbitrary() }],\n            /**\n             * Transform Style\n             * @see https://tailwindcss.com/docs/transform-style\n             */\n            'transform-style': [{ transform: ['3d', 'flat'] }],\n            /**\n             * Translate\n             * @see https://tailwindcss.com/docs/translate\n             */\n            translate: [{ translate: scaleTranslate() }],\n            /**\n             * Translate X\n             * @see https://tailwindcss.com/docs/translate\n             */\n            'translate-x': [{ 'translate-x': scaleTranslate() }],\n            /**\n             * Translate Y\n             * @see https://tailwindcss.com/docs/translate\n             */\n            'translate-y': [{ 'translate-y': scaleTranslate() }],\n            /**\n             * Translate Z\n             * @see https://tailwindcss.com/docs/translate\n             */\n            'translate-z': [{ 'translate-z': scaleTranslate() }],\n            /**\n             * Translate None\n             * @see https://tailwindcss.com/docs/translate\n             */\n            'translate-none': ['translate-none'],\n            /**\n             * Zoom\n             * @see https://tailwindcss.com/docs/zoom\n             */\n            zoom: [{ zoom: [isInteger, isArbitraryVariable, isArbitraryValue] }],\n\n            // ---------------------\n            // --- Interactivity ---\n            // ---------------------\n\n            /**\n             * Accent Color\n             * @see https://tailwindcss.com/docs/accent-color\n             */\n            accent: [{ accent: scaleColor() }],\n            /**\n             * Appearance\n             * @see https://tailwindcss.com/docs/appearance\n             */\n            appearance: [{ appearance: ['none', 'auto'] }],\n            /**\n             * Caret Color\n             * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n             */\n            'caret-color': [{ caret: scaleColor() }],\n            /**\n             * Color Scheme\n             * @see https://tailwindcss.com/docs/color-scheme\n             */\n            'color-scheme': [\n                { scheme: ['normal', 'dark', 'light', 'light-dark', 'only-dark', 'only-light'] },\n            ],\n            /**\n             * Cursor\n             * @see https://tailwindcss.com/docs/cursor\n             */\n            cursor: [\n                {\n                    cursor: [\n                        'auto',\n                        'default',\n                        'pointer',\n                        'wait',\n                        'text',\n                        'move',\n                        'help',\n                        'not-allowed',\n                        'none',\n                        'context-menu',\n                        'progress',\n                        'cell',\n                        'crosshair',\n                        'vertical-text',\n                        'alias',\n                        'copy',\n                        'no-drop',\n                        'grab',\n                        'grabbing',\n                        'all-scroll',\n                        'col-resize',\n                        'row-resize',\n                        'n-resize',\n                        'e-resize',\n                        's-resize',\n                        'w-resize',\n                        'ne-resize',\n                        'nw-resize',\n                        'se-resize',\n                        'sw-resize',\n                        'ew-resize',\n                        'ns-resize',\n                        'nesw-resize',\n                        'nwse-resize',\n                        'zoom-in',\n                        'zoom-out',\n                        isArbitraryVariable,\n                        isArbitraryValue,\n                    ],\n                },\n            ],\n            /**\n             * Field Sizing\n             * @see https://tailwindcss.com/docs/field-sizing\n             */\n            'field-sizing': [{ 'field-sizing': ['fixed', 'content'] }],\n            /**\n             * Pointer Events\n             * @see https://tailwindcss.com/docs/pointer-events\n             */\n            'pointer-events': [{ 'pointer-events': ['auto', 'none'] }],\n            /**\n             * Resize\n             * @see https://tailwindcss.com/docs/resize\n             */\n            resize: [{ resize: ['none', '', 'y', 'x'] }],\n            /**\n             * Scroll Behavior\n             * @see https://tailwindcss.com/docs/scroll-behavior\n             */\n            'scroll-behavior': [{ scroll: ['auto', 'smooth'] }],\n            /**\n             * Scrollbar Thumb Color\n             * @see https://tailwindcss.com/docs/scrollbar-color\n             */\n            'scrollbar-thumb-color': [{ 'scrollbar-thumb': scaleColor() }],\n            /**\n             * Scrollbar Track Color\n             * @see https://tailwindcss.com/docs/scrollbar-color\n             */\n            'scrollbar-track-color': [{ 'scrollbar-track': scaleColor() }],\n            /**\n             * Scrollbar Gutter\n             * @see https://tailwindcss.com/docs/scrollbar-gutter\n             */\n            'scrollbar-gutter': [{ 'scrollbar-gutter': ['auto', 'stable', 'both'] }],\n            /**\n             * Scrollbar Width\n             * @see https://tailwindcss.com/docs/scrollbar-width\n             */\n            'scrollbar-w': [{ scrollbar: ['auto', 'thin', 'none'] }],\n            /**\n             * Scroll Margin\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-m': [{ 'scroll-m': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Margin Inline\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-mx': [{ 'scroll-mx': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Margin Block\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-my': [{ 'scroll-my': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Margin Inline Start\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-ms': [{ 'scroll-ms': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Margin Inline End\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-me': [{ 'scroll-me': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Margin Block Start\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-mbs': [{ 'scroll-mbs': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Margin Block End\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-mbe': [{ 'scroll-mbe': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Margin Top\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-mt': [{ 'scroll-mt': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Margin Right\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-mr': [{ 'scroll-mr': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Margin Bottom\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-mb': [{ 'scroll-mb': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Margin Left\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-ml': [{ 'scroll-ml': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Padding\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-p': [{ 'scroll-p': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Padding Inline\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-px': [{ 'scroll-px': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Padding Block\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-py': [{ 'scroll-py': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Padding Inline Start\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-ps': [{ 'scroll-ps': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Padding Inline End\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-pe': [{ 'scroll-pe': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Padding Block Start\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-pbs': [{ 'scroll-pbs': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Padding Block End\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-pbe': [{ 'scroll-pbe': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Padding Top\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-pt': [{ 'scroll-pt': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Padding Right\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-pr': [{ 'scroll-pr': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Padding Bottom\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-pb': [{ 'scroll-pb': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Padding Left\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-pl': [{ 'scroll-pl': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Snap Align\n             * @see https://tailwindcss.com/docs/scroll-snap-align\n             */\n            'snap-align': [{ snap: ['start', 'end', 'center', 'align-none'] }],\n            /**\n             * Scroll Snap Stop\n             * @see https://tailwindcss.com/docs/scroll-snap-stop\n             */\n            'snap-stop': [{ snap: ['normal', 'always'] }],\n            /**\n             * Scroll Snap Type\n             * @see https://tailwindcss.com/docs/scroll-snap-type\n             */\n            'snap-type': [{ snap: ['none', 'x', 'y', 'both'] }],\n            /**\n             * Scroll Snap Type Strictness\n             * @see https://tailwindcss.com/docs/scroll-snap-type\n             */\n            'snap-strictness': [{ snap: ['mandatory', 'proximity'] }],\n            /**\n             * Touch Action\n             * @see https://tailwindcss.com/docs/touch-action\n             */\n            touch: [{ touch: ['auto', 'none', 'manipulation'] }],\n            /**\n             * Touch Action X\n             * @see https://tailwindcss.com/docs/touch-action\n             */\n            'touch-x': [{ 'touch-pan': ['x', 'left', 'right'] }],\n            /**\n             * Touch Action Y\n             * @see https://tailwindcss.com/docs/touch-action\n             */\n            'touch-y': [{ 'touch-pan': ['y', 'up', 'down'] }],\n            /**\n             * Touch Action Pinch Zoom\n             * @see https://tailwindcss.com/docs/touch-action\n             */\n            'touch-pz': ['touch-pinch-zoom'],\n            /**\n             * User Select\n             * @see https://tailwindcss.com/docs/user-select\n             */\n            select: [{ select: ['none', 'text', 'all', 'auto'] }],\n            /**\n             * Will Change\n             * @see https://tailwindcss.com/docs/will-change\n             */\n            'will-change': [\n                {\n                    'will-change': [\n                        'auto',\n                        'scroll',\n                        'contents',\n                        'transform',\n                        isArbitraryVariable,\n                        isArbitraryValue,\n                    ],\n                },\n            ],\n\n            // -----------\n            // --- SVG ---\n            // -----------\n\n            /**\n             * Fill\n             * @see https://tailwindcss.com/docs/fill\n             */\n            fill: [{ fill: ['none', ...scaleColor()] }],\n            /**\n             * Stroke Width\n             * @see https://tailwindcss.com/docs/stroke-width\n             */\n            'stroke-w': [\n                {\n                    stroke: [\n                        isNumber,\n                        isArbitraryVariableLength,\n                        isArbitraryLength,\n                        isArbitraryNumber,\n                    ],\n                },\n            ],\n            /**\n             * Stroke\n             * @see https://tailwindcss.com/docs/stroke\n             */\n            stroke: [{ stroke: ['none', ...scaleColor()] }],\n\n            // ---------------------\n            // --- Accessibility ---\n            // ---------------------\n\n            /**\n             * Forced Color Adjust\n             * @see https://tailwindcss.com/docs/forced-color-adjust\n             */\n            'forced-color-adjust': [{ 'forced-color-adjust': ['auto', 'none'] }],\n        },\n        conflictingClassGroups: {\n            'container-named': ['container-type'],\n            overflow: ['overflow-x', 'overflow-y'],\n            overscroll: ['overscroll-x', 'overscroll-y'],\n            inset: [\n                'inset-x',\n                'inset-y',\n                'inset-bs',\n                'inset-be',\n                'start',\n                'end',\n                'top',\n                'right',\n                'bottom',\n                'left',\n            ],\n            'inset-x': ['right', 'left'],\n            'inset-y': ['top', 'bottom'],\n            flex: ['basis', 'grow', 'shrink'],\n            gap: ['gap-x', 'gap-y'],\n            p: ['px', 'py', 'ps', 'pe', 'pbs', 'pbe', 'pt', 'pr', 'pb', 'pl'],\n            px: ['pr', 'pl'],\n            py: ['pt', 'pb'],\n            m: ['mx', 'my', 'ms', 'me', 'mbs', 'mbe', 'mt', 'mr', 'mb', 'ml'],\n            mx: ['mr', 'ml'],\n            my: ['mt', 'mb'],\n            size: ['w', 'h'],\n            'font-size': ['leading'],\n            'fvn-normal': [\n                'fvn-ordinal',\n                'fvn-slashed-zero',\n                'fvn-figure',\n                'fvn-spacing',\n                'fvn-fraction',\n            ],\n            'fvn-ordinal': ['fvn-normal'],\n            'fvn-slashed-zero': ['fvn-normal'],\n            'fvn-figure': ['fvn-normal'],\n            'fvn-spacing': ['fvn-normal'],\n            'fvn-fraction': ['fvn-normal'],\n            'line-clamp': ['display', 'overflow'],\n            rounded: [\n                'rounded-s',\n                'rounded-e',\n                'rounded-t',\n                'rounded-r',\n                'rounded-b',\n                'rounded-l',\n                'rounded-ss',\n                'rounded-se',\n                'rounded-ee',\n                'rounded-es',\n                'rounded-tl',\n                'rounded-tr',\n                'rounded-br',\n                'rounded-bl',\n            ],\n            'rounded-s': ['rounded-ss', 'rounded-es'],\n            'rounded-e': ['rounded-se', 'rounded-ee'],\n            'rounded-t': ['rounded-tl', 'rounded-tr'],\n            'rounded-r': ['rounded-tr', 'rounded-br'],\n            'rounded-b': ['rounded-br', 'rounded-bl'],\n            'rounded-l': ['rounded-tl', 'rounded-bl'],\n            'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n            'border-w': [\n                'border-w-x',\n                'border-w-y',\n                'border-w-s',\n                'border-w-e',\n                'border-w-bs',\n                'border-w-be',\n                'border-w-t',\n                'border-w-r',\n                'border-w-b',\n                'border-w-l',\n            ],\n            'border-w-x': ['border-w-r', 'border-w-l'],\n            'border-w-y': ['border-w-t', 'border-w-b'],\n            'border-color': [\n                'border-color-x',\n                'border-color-y',\n                'border-color-s',\n                'border-color-e',\n                'border-color-bs',\n                'border-color-be',\n                'border-color-t',\n                'border-color-r',\n                'border-color-b',\n                'border-color-l',\n            ],\n            'border-color-x': ['border-color-r', 'border-color-l'],\n            'border-color-y': ['border-color-t', 'border-color-b'],\n            translate: ['translate-x', 'translate-y', 'translate-none'],\n            'translate-none': ['translate', 'translate-x', 'translate-y', 'translate-z'],\n            'scroll-m': [\n                'scroll-mx',\n                'scroll-my',\n                'scroll-ms',\n                'scroll-me',\n                'scroll-mbs',\n                'scroll-mbe',\n                'scroll-mt',\n                'scroll-mr',\n                'scroll-mb',\n                'scroll-ml',\n            ],\n            'scroll-mx': ['scroll-mr', 'scroll-ml'],\n            'scroll-my': ['scroll-mt', 'scroll-mb'],\n            'scroll-p': [\n                'scroll-px',\n                'scroll-py',\n                'scroll-ps',\n                'scroll-pe',\n                'scroll-pbs',\n                'scroll-pbe',\n                'scroll-pt',\n                'scroll-pr',\n                'scroll-pb',\n                'scroll-pl',\n            ],\n            'scroll-px': ['scroll-pr', 'scroll-pl'],\n            'scroll-py': ['scroll-pt', 'scroll-pb'],\n            touch: ['touch-x', 'touch-y', 'touch-pz'],\n            'touch-x': ['touch'],\n            'touch-y': ['touch'],\n            'touch-pz': ['touch'],\n        },\n        conflictingClassGroupModifiers: {\n            'font-size': ['leading'],\n        },\n        postfixLookupClassGroups: ['container-type'],\n        orderSensitiveModifiers: [\n            '*',\n            '**',\n            'after',\n            'backdrop',\n            'before',\n            'details-content',\n            'file',\n            'first-letter',\n            'first-line',\n            'marker',\n            'placeholder',\n            'selection',\n        ],\n    } as const satisfies Config<DefaultClassGroupIds, DefaultThemeGroupIds>\n}\n", "import { AnyConfig, ConfigExtension, NoInfer } from './types'\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nexport const mergeConfigs = <ClassGroupIds extends string, ThemeGroupIds extends string = never>(\n    baseConfig: AnyConfig,\n    {\n        cacheSize,\n        prefix,\n        experimentalParseClassName,\n        extend = {},\n        override = {},\n    }: ConfigExtension<ClassGroupIds, ThemeGroupIds>,\n) => {\n    overrideProperty(baseConfig, 'cacheSize', cacheSize)\n    overrideProperty(baseConfig, 'prefix', prefix)\n    overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName)\n\n    overrideConfigProperties(baseConfig.theme, override.theme)\n    overrideConfigProperties(baseConfig.classGroups, override.classGroups)\n    overrideConfigProperties(baseConfig.conflictingClassGroups, override.conflictingClassGroups)\n    overrideConfigProperties(\n        baseConfig.conflictingClassGroupModifiers,\n        override.conflictingClassGroupModifiers,\n    )\n    overrideProperty(baseConfig, 'postfixLookupClassGroups', override.postfixLookupClassGroups)\n    overrideProperty(baseConfig, 'orderSensitiveModifiers', override.orderSensitiveModifiers)\n\n    mergeConfigProperties(baseConfig.theme, extend.theme)\n    mergeConfigProperties(baseConfig.classGroups, extend.classGroups)\n    mergeConfigProperties(baseConfig.conflictingClassGroups, extend.conflictingClassGroups)\n    mergeConfigProperties(\n        baseConfig.conflictingClassGroupModifiers,\n        extend.conflictingClassGroupModifiers,\n    )\n    mergeArrayProperties(baseConfig, extend, 'postfixLookupClassGroups')\n    mergeArrayProperties(baseConfig, extend, 'orderSensitiveModifiers')\n\n    return baseConfig\n}\n\nconst overrideProperty = <T extends object, K extends keyof T>(\n    baseObject: T,\n    overrideKey: K,\n    overrideValue: T[K] | undefined,\n) => {\n    if (overrideValue !== undefined) {\n        baseObject[overrideKey] = overrideValue\n    }\n}\n\nconst overrideConfigProperties = (\n    baseObject: Partial<Record<string, readonly unknown[]>>,\n    overrideObject: Partial<Record<string, readonly unknown[]>> | undefined,\n) => {\n    if (overrideObject) {\n        for (const key in overrideObject) {\n            overrideProperty(baseObject, key, overrideObject[key])\n        }\n    }\n}\n\nconst mergeConfigProperties = (\n    baseObject: Partial<Record<string, readonly unknown[]>>,\n    mergeObject: Partial<Record<string, readonly unknown[]>> | undefined,\n) => {\n    if (mergeObject) {\n        for (const key in mergeObject) {\n            mergeArrayProperties(baseObject, mergeObject, key)\n        }\n    }\n}\n\nconst mergeArrayProperties = <Key extends string>(\n    baseObject: Partial<Record<NoInfer<Key>, readonly unknown[]>>,\n    mergeObject: Partial<Record<NoInfer<Key>, readonly unknown[]>>,\n    key: Key,\n) => {\n    const mergeValue = mergeObject[key]\n\n    if (mergeValue !== undefined) {\n        baseObject[key] = baseObject[key] ? baseObject[key].concat(mergeValue) : mergeValue\n    }\n}\n", "import { createTailwindMerge } from './create-tailwind-merge'\nimport { getDefaultConfig } from './default-config'\nimport { mergeConfigs } from './merge-configs'\nimport { AnyConfig, ConfigExtension, DefaultClassGroupIds, DefaultThemeGroupIds } from './types'\n\ntype CreateConfigSubsequent = (config: AnyConfig) => AnyConfig\n\nexport const extendTailwindMerge = <\n    AdditionalClassGroupIds extends string = never,\n    AdditionalThemeGroupIds extends string = never,\n>(\n    configExtension:\n        | ConfigExtension<\n              DefaultClassGroupIds | AdditionalClassGroupIds,\n              DefaultThemeGroupIds | AdditionalThemeGroupIds\n          >\n        | CreateConfigSubsequent,\n    ...createConfig: CreateConfigSubsequent[]\n) =>\n    typeof configExtension === 'function'\n        ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig)\n        : createTailwindMerge(\n              () => mergeConfigs(getDefaultConfig(), configExtension),\n              ...createConfig,\n          )\n", "import { createTailwindMerge } from './create-tailwind-merge'\nimport { getDefaultConfig } from './default-config'\n\nexport const twMerge = createTailwindMerge(getDefaultConfig)\n", "import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/** Merge class names; twMerge drops conflicting Tailwind utilities. */\nexport function cn(...inputs: ClassValue[]) {\n  return twMerge(clsx(inputs));\n}\n", "import React from \"react\";\n\nexport interface SuggestedRepliesProps {\n  replies: string[];\n  onSelect: (reply: string) => void;\n  /** Only the current (latest) turn's chips are tappable. Past chips stay visible but inert, so a\n   *  stale option can't fire a fresh turn or override the current one. Defaults to true. */\n  interactive?: boolean;\n  /** The reply the shopper already picked: shown filled, and it locks the whole group. */\n  selectedReply?: string;\n}\n\nexport const SuggestedReplies: React.FC<SuggestedRepliesProps> = ({\n  replies,\n  onSelect,\n  interactive = true,\n  selectedReply,\n}) => {\n  if (!replies || replies.length === 0) return null;\n  const canTap = interactive && !selectedReply;\n  return (\n    <div className=\"fermat-chat-reply-list\" data-sr-role=\"suggested-replies\">\n      {replies.map((reply, index) => {\n        const isSelected = !!selectedReply && reply === selectedReply;\n        return (\n          <button\n            key={index}\n            className={\n              isSelected\n                ? \"fermat-chat-reply-pill fermat-chat-reply-pill--selected\"\n                : \"fermat-chat-reply-pill\"\n            }\n            data-sr-role=\"suggested-reply\"\n            onClick={canTap ? () => onSelect(reply) : undefined}\n            disabled={!canTap}\n          >\n            {reply}\n          </button>\n        );\n      })}\n    </div>\n  );\n};\n", "import { ArrowDownIcon } from \"./icons\";\nimport React from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\nexport interface SuggestionPillListProps {\n  questions: string[];\n  onSelect: (question: string) => void;\n  /** \"chat-suggestion\" (drawer) vs \"facade-suggestion\" (facade): kept distinct so nothing keyed\n   *  off the role (analytics, e2e selectors) breaks when this became a shared component. */\n  dataSrRole: string;\n  /**\n   * Server starter questions are still in flight. Renders placeholder pills instead of nothing, so\n   * the row holds its space and the cold open resolves in place rather than shifting everything\n   * below it when the real questions land. `questions` is read for the count only while loading.\n   */\n  loading?: boolean;\n}\n\n/**\n * The suggested-question pill row shared by the drawer (ChatMessages) and the inline facade\n * (SamuelFacade), so the two surfaces render one canonical pill style instead of two that drift.\n */\nexport const SuggestionPillList: React.FC<SuggestionPillListProps> = ({\n  questions,\n  onSelect,\n  dataSrRole,\n  loading,\n}) => {\n  const { t } = useTranslation();\n  return (\n    <div className=\"fermat-chat-suggestions mt-0 px-1\">\n      <p className=\"fermat-chat-suggestions-header m-0 mb-3 font-[family-name:var(--font-brand-primary,inherit)] text-sm font-medium text-sa-muted\">\n        {t(\"suggestionsHeader\")}\n      </p>\n      <div\n        className=\"fermat-chat-suggestions-list flex flex-row flex-wrap gap-1\"\n        aria-busy={loading ? true : undefined}\n      >\n        {loading &&\n          questions.map((_, index) => (\n            <div\n              key={index}\n              // Sized rather than an empty pill: a pill with no text collapses to its padding, and\n              // the point of this is to occupy exactly the space the real row will.\n              className=\"fermat-chat-suggestion-pill-skeleton fermat-chat-skeleton h-[37px] w-full rounded-[var(--sa-radius-pill,var(--sa-radius,100px))]\"\n              aria-hidden=\"true\"\n            />\n          ))}\n        {!loading &&\n          questions.map((question, index) => (\n            <button\n              key={index}\n              className=\"fermat-chat-suggestion-pill\"\n              data-sr-role={dataSrRole}\n              onClick={() => onSelect(question)}\n            >\n              <span>{question}</span>\n              <span className=\"fermat-chat-suggestion-arrow\" aria-hidden=\"true\">\n                <ArrowDownIcon />\n              </span>\n            </button>\n          ))}\n      </div>\n    </div>\n  );\n};\n\nexport default SuggestionPillList;\n", "import { Trans, useTranslation } from \"react-i18next\";\nimport {\n  DEFAULT_RECOMMENDATION_STRATEGY,\n  useProductsForHandles,\n  useRecsQuery,\n} from \"../hooks/queries\";\nimport { ChatProductCarousel } from \"./ChatProductCarousel\";\nimport { ProductV1 } from \"@fermat/product-api\";\nimport React from \"react\";\n\nexport interface WelcomeRecsCarouselProps {\n  strategy?: string;\n  rootProductId?: string;\n  productHandle?: string;\n  onProductClicked?: (handle: string, variantExternalId?: string) => void;\n  onProductATCClicked?: (handle: string, variantExternalId?: string) => void;\n  onNavigateToProduct?: (\n    product: ProductV1,\n    variantExternalId?: string,\n  ) => void;\n}\n\nexport const WelcomeRecsCarousel: React.FC<WelcomeRecsCarouselProps> = ({\n  strategy,\n  rootProductId,\n  productHandle,\n  onProductClicked,\n  onProductATCClicked,\n  onNavigateToProduct,\n}) => {\n  const { t } = useTranslation();\n  const recsQuery = useRecsQuery(\n    strategy || DEFAULT_RECOMMENDATION_STRATEGY,\n    rootProductId || \"\",\n    !!rootProductId,\n  );\n\n  // Fetch the hero product to name it in the heading. Only its display name is usable here; the\n  // raw handle (e.g. rithum://.../SKU) is not shopper-facing, so we drop the name when unresolved.\n  const { products: heroProducts } = useProductsForHandles(\n    productHandle ? [productHandle] : [],\n  );\n  const heroName = heroProducts[0]?.name;\n\n  const recs = recsQuery.data;\n  if (!recs || recs.length === 0) return null;\n\n  const handles = recs.slice(0, 3).map((rec) => rec.handle);\n\n  return (\n    <div className=\"fermat-chat-recs-card -mx-4 flex w-[calc(100%+2rem)] flex-col gap-4 rounded-none py-3 [&_.fermat-chat-carousel-card-image]:aspect-[4/3]\">\n      <p className=\"fermat-chat-recs-heading m-0 w-full px-4 text-[13px] leading-[1.4] text-sa-ink\">\n        {heroName ? (\n          // <Trans> substitutes {{product}} and renders the <bold> tag as <strong>, keeping the\n          // product name emphasized. A brand override that omits <bold>/{{product}} renders verbatim.\n          <Trans\n            t={t}\n            i18nKey=\"recsHeadingWithProduct\"\n            values={{ product: heroName }}\n            components={{ bold: <strong /> }}\n          />\n        ) : (\n          t(\"recsHeading\")\n        )}\n      </p>\n      <div className=\"fermat-chat-recs-track px-4\">\n        <ChatProductCarousel\n          productHandles={handles}\n          heading=\"\"\n          source=\"welcome_recs\"\n          onProductClicked={(handle, variantExternalId) =>\n            onProductClicked?.(handle, variantExternalId)\n          }\n          onProductATCClicked={(handle, variantExternalId) =>\n            onProductATCClicked?.(handle, variantExternalId)\n          }\n          onNavigateToProduct={onNavigateToProduct}\n        />\n      </div>\n    </div>\n  );\n};\n", "/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').Previous} Previous\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {\n  asciiAlpha,\n  asciiAlphanumeric,\n  asciiControl,\n  markdownLineEndingOrSpace,\n  unicodePunctuation,\n  unicodeWhitespace\n} from 'micromark-util-character'\nconst wwwPrefix = {\n  tokenize: tokenizeWwwPrefix,\n  partial: true\n}\nconst domain = {\n  tokenize: tokenizeDomain,\n  partial: true\n}\nconst path = {\n  tokenize: tokenizePath,\n  partial: true\n}\nconst trail = {\n  tokenize: tokenizeTrail,\n  partial: true\n}\nconst emailDomainDotTrail = {\n  tokenize: tokenizeEmailDomainDotTrail,\n  partial: true\n}\nconst wwwAutolink = {\n  tokenize: tokenizeWwwAutolink,\n  previous: previousWww\n}\nconst protocolAutolink = {\n  tokenize: tokenizeProtocolAutolink,\n  previous: previousProtocol\n}\nconst emailAutolink = {\n  tokenize: tokenizeEmailAutolink,\n  previous: previousEmail\n}\n\n/** @type {ConstructRecord} */\nconst text = {}\n\n// To do: next major: expose functions that yields extension.\n\n/**\n * Extension for `micromark` that can be passed in `extensions` to enable GFM\n * autolink literal syntax.\n *\n * @type {Extension}\n */\nexport const gfmAutolinkLiteral = {\n  text\n}\n\n/** @type {Code} */\nlet code = 48\n\n// Add alphanumerics.\nwhile (code < 123) {\n  text[code] = emailAutolink\n  code++\n  if (code === 58) code = 65\n  else if (code === 91) code = 97\n}\ntext[43] = emailAutolink\ntext[45] = emailAutolink\ntext[46] = emailAutolink\ntext[95] = emailAutolink\ntext[72] = [emailAutolink, protocolAutolink]\ntext[104] = [emailAutolink, protocolAutolink]\ntext[87] = [emailAutolink, wwwAutolink]\ntext[119] = [emailAutolink, wwwAutolink]\n\n// To do: perform email autolink literals on events, afterwards.\n// That\u2019s where `markdown-rs` and `cmark-gfm` perform it.\n// It should look for `@`, then for atext backwards, and then for a label\n// forwards.\n// To do: `mailto:`, `xmpp:` protocol as prefix.\n\n/**\n * Email autolink literal.\n *\n * ```markdown\n * > | a contact@example.org b\n *       ^^^^^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeEmailAutolink(effects, ok, nok) {\n  const self = this\n  /** @type {boolean | undefined} */\n  let dot\n  /** @type {boolean} */\n  let data\n  return start\n\n  /**\n   * Start of email autolink literal.\n   *\n   * ```markdown\n   * > | a contact@example.org b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (\n      !gfmAtext(code) ||\n      !previousEmail.call(self, self.previous) ||\n      previousUnbalanced(self.events)\n    ) {\n      return nok(code)\n    }\n    effects.enter('literalAutolink')\n    effects.enter('literalAutolinkEmail')\n    return atext(code)\n  }\n\n  /**\n   * In email atext.\n   *\n   * ```markdown\n   * > | a contact@example.org b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atext(code) {\n    if (gfmAtext(code)) {\n      effects.consume(code)\n      return atext\n    }\n    if (code === 64) {\n      effects.consume(code)\n      return emailDomain\n    }\n    return nok(code)\n  }\n\n  /**\n   * In email domain.\n   *\n   * The reference code is a bit overly complex as it handles the `@`, of which\n   * there may be just one.\n   * Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L318>\n   *\n   * ```markdown\n   * > | a contact@example.org b\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailDomain(code) {\n    // Dot followed by alphanumerical (not `-` or `_`).\n    if (code === 46) {\n      return effects.check(\n        emailDomainDotTrail,\n        emailDomainAfter,\n        emailDomainDot\n      )(code)\n    }\n\n    // Alphanumerical, `-`, and `_`.\n    if (code === 45 || code === 95 || asciiAlphanumeric(code)) {\n      data = true\n      effects.consume(code)\n      return emailDomain\n    }\n\n    // To do: `/` if xmpp.\n\n    // Note: normally we\u2019d truncate trailing punctuation from the link.\n    // However, email autolink literals cannot contain any of those markers,\n    // except for `.`, but that can only occur if it isn\u2019t trailing.\n    // So we can ignore truncating!\n    return emailDomainAfter(code)\n  }\n\n  /**\n   * In email domain, on dot that is not a trail.\n   *\n   * ```markdown\n   * > | a contact@example.org b\n   *                      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailDomainDot(code) {\n    effects.consume(code)\n    dot = true\n    return emailDomain\n  }\n\n  /**\n   * After email domain.\n   *\n   * ```markdown\n   * > | a contact@example.org b\n   *                          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailDomainAfter(code) {\n    // Domain must not be empty, must include a dot, and must end in alphabetical.\n    // Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L332>.\n    if (data && dot && asciiAlpha(self.previous)) {\n      effects.exit('literalAutolinkEmail')\n      effects.exit('literalAutolink')\n      return ok(code)\n    }\n    return nok(code)\n  }\n}\n\n/**\n * `www` autolink literal.\n *\n * ```markdown\n * > | a www.example.org b\n *       ^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeWwwAutolink(effects, ok, nok) {\n  const self = this\n  return wwwStart\n\n  /**\n   * Start of www autolink literal.\n   *\n   * ```markdown\n   * > | www.example.com/a?b#c\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function wwwStart(code) {\n    if (\n      (code !== 87 && code !== 119) ||\n      !previousWww.call(self, self.previous) ||\n      previousUnbalanced(self.events)\n    ) {\n      return nok(code)\n    }\n    effects.enter('literalAutolink')\n    effects.enter('literalAutolinkWww')\n    // Note: we *check*, so we can discard the `www.` we parsed.\n    // If it worked, we consider it as a part of the domain.\n    return effects.check(\n      wwwPrefix,\n      effects.attempt(domain, effects.attempt(path, wwwAfter), nok),\n      nok\n    )(code)\n  }\n\n  /**\n   * After a www autolink literal.\n   *\n   * ```markdown\n   * > | www.example.com/a?b#c\n   *                          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function wwwAfter(code) {\n    effects.exit('literalAutolinkWww')\n    effects.exit('literalAutolink')\n    return ok(code)\n  }\n}\n\n/**\n * Protocol autolink literal.\n *\n * ```markdown\n * > | a https://example.org b\n *       ^^^^^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeProtocolAutolink(effects, ok, nok) {\n  const self = this\n  let buffer = ''\n  let seen = false\n  return protocolStart\n\n  /**\n   * Start of protocol autolink literal.\n   *\n   * ```markdown\n   * > | https://example.com/a?b#c\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function protocolStart(code) {\n    if (\n      (code === 72 || code === 104) &&\n      previousProtocol.call(self, self.previous) &&\n      !previousUnbalanced(self.events)\n    ) {\n      effects.enter('literalAutolink')\n      effects.enter('literalAutolinkHttp')\n      buffer += String.fromCodePoint(code)\n      effects.consume(code)\n      return protocolPrefixInside\n    }\n    return nok(code)\n  }\n\n  /**\n   * In protocol.\n   *\n   * ```markdown\n   * > | https://example.com/a?b#c\n   *     ^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function protocolPrefixInside(code) {\n    // `5` is size of `https`\n    if (asciiAlpha(code) && buffer.length < 5) {\n      // @ts-expect-error: definitely number.\n      buffer += String.fromCodePoint(code)\n      effects.consume(code)\n      return protocolPrefixInside\n    }\n    if (code === 58) {\n      const protocol = buffer.toLowerCase()\n      if (protocol === 'http' || protocol === 'https') {\n        effects.consume(code)\n        return protocolSlashesInside\n      }\n    }\n    return nok(code)\n  }\n\n  /**\n   * In slashes.\n   *\n   * ```markdown\n   * > | https://example.com/a?b#c\n   *           ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function protocolSlashesInside(code) {\n    if (code === 47) {\n      effects.consume(code)\n      if (seen) {\n        return afterProtocol\n      }\n      seen = true\n      return protocolSlashesInside\n    }\n    return nok(code)\n  }\n\n  /**\n   * After protocol, before domain.\n   *\n   * ```markdown\n   * > | https://example.com/a?b#c\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterProtocol(code) {\n    // To do: this is different from `markdown-rs`:\n    // https://github.com/wooorm/markdown-rs/blob/b3a921c761309ae00a51fe348d8a43adbc54b518/src/construct/gfm_autolink_literal.rs#L172-L182\n    return code === null ||\n      asciiControl(code) ||\n      markdownLineEndingOrSpace(code) ||\n      unicodeWhitespace(code) ||\n      unicodePunctuation(code)\n      ? nok(code)\n      : effects.attempt(domain, effects.attempt(path, protocolAfter), nok)(code)\n  }\n\n  /**\n   * After a protocol autolink literal.\n   *\n   * ```markdown\n   * > | https://example.com/a?b#c\n   *                              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function protocolAfter(code) {\n    effects.exit('literalAutolinkHttp')\n    effects.exit('literalAutolink')\n    return ok(code)\n  }\n}\n\n/**\n * `www` prefix.\n *\n * ```markdown\n * > | a www.example.org b\n *       ^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeWwwPrefix(effects, ok, nok) {\n  let size = 0\n  return wwwPrefixInside\n\n  /**\n   * In www prefix.\n   *\n   * ```markdown\n   * > | www.example.com\n   *     ^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function wwwPrefixInside(code) {\n    if ((code === 87 || code === 119) && size < 3) {\n      size++\n      effects.consume(code)\n      return wwwPrefixInside\n    }\n    if (code === 46 && size === 3) {\n      effects.consume(code)\n      return wwwPrefixAfter\n    }\n    return nok(code)\n  }\n\n  /**\n   * After www prefix.\n   *\n   * ```markdown\n   * > | www.example.com\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function wwwPrefixAfter(code) {\n    // If there is *anything*, we can link.\n    return code === null ? nok(code) : ok(code)\n  }\n}\n\n/**\n * Domain.\n *\n * ```markdown\n * > | a https://example.org b\n *               ^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDomain(effects, ok, nok) {\n  /** @type {boolean | undefined} */\n  let underscoreInLastSegment\n  /** @type {boolean | undefined} */\n  let underscoreInLastLastSegment\n  /** @type {boolean | undefined} */\n  let seen\n  return domainInside\n\n  /**\n   * In domain.\n   *\n   * ```markdown\n   * > | https://example.com/a\n   *             ^^^^^^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function domainInside(code) {\n    // Check whether this marker, which is a trailing punctuation\n    // marker, optionally followed by more trailing markers, and then\n    // followed by an end.\n    if (code === 46 || code === 95) {\n      return effects.check(trail, domainAfter, domainAtPunctuation)(code)\n    }\n\n    // GH documents that only alphanumerics (other than `-`, `.`, and `_`) can\n    // occur, which sounds like ASCII only, but they also support `www.\u9EDE\u770B.com`,\n    // so that\u2019s Unicode.\n    // Instead of some new production for Unicode alphanumerics, markdown\n    // already has that for Unicode punctuation and whitespace, so use those.\n    // Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L12>.\n    if (\n      code === null ||\n      markdownLineEndingOrSpace(code) ||\n      unicodeWhitespace(code) ||\n      (code !== 45 && unicodePunctuation(code))\n    ) {\n      return domainAfter(code)\n    }\n    seen = true\n    effects.consume(code)\n    return domainInside\n  }\n\n  /**\n   * In domain, at potential trailing punctuation, that was not trailing.\n   *\n   * ```markdown\n   * > | https://example.com\n   *                    ^\n   * ```\n   *\n   * @type {State}\n   */\n  function domainAtPunctuation(code) {\n    // There is an underscore in the last segment of the domain\n    if (code === 95) {\n      underscoreInLastSegment = true\n    }\n    // Otherwise, it\u2019s a `.`: save the last segment underscore in the\n    // penultimate segment slot.\n    else {\n      underscoreInLastLastSegment = underscoreInLastSegment\n      underscoreInLastSegment = undefined\n    }\n    effects.consume(code)\n    return domainInside\n  }\n\n  /**\n   * After domain.\n   *\n   * ```markdown\n   * > | https://example.com/a\n   *                        ^\n   * ```\n   *\n   * @type {State} */\n  function domainAfter(code) {\n    // Note: that\u2019s GH says a dot is needed, but it\u2019s not true:\n    // <https://github.com/github/cmark-gfm/issues/279>\n    if (underscoreInLastLastSegment || underscoreInLastSegment || !seen) {\n      return nok(code)\n    }\n    return ok(code)\n  }\n}\n\n/**\n * Path.\n *\n * ```markdown\n * > | a https://example.org/stuff b\n *                          ^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizePath(effects, ok) {\n  let sizeOpen = 0\n  let sizeClose = 0\n  return pathInside\n\n  /**\n   * In path.\n   *\n   * ```markdown\n   * > | https://example.com/a\n   *                        ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function pathInside(code) {\n    if (code === 40) {\n      sizeOpen++\n      effects.consume(code)\n      return pathInside\n    }\n\n    // To do: `markdown-rs` also needs this.\n    // If this is a paren, and there are less closings than openings,\n    // we don\u2019t check for a trail.\n    if (code === 41 && sizeClose < sizeOpen) {\n      return pathAtPunctuation(code)\n    }\n\n    // Check whether this trailing punctuation marker is optionally\n    // followed by more trailing markers, and then followed\n    // by an end.\n    if (\n      code === 33 ||\n      code === 34 ||\n      code === 38 ||\n      code === 39 ||\n      code === 41 ||\n      code === 42 ||\n      code === 44 ||\n      code === 46 ||\n      code === 58 ||\n      code === 59 ||\n      code === 60 ||\n      code === 63 ||\n      code === 93 ||\n      code === 95 ||\n      code === 126\n    ) {\n      return effects.check(trail, ok, pathAtPunctuation)(code)\n    }\n    if (\n      code === null ||\n      markdownLineEndingOrSpace(code) ||\n      unicodeWhitespace(code)\n    ) {\n      return ok(code)\n    }\n    effects.consume(code)\n    return pathInside\n  }\n\n  /**\n   * In path, at potential trailing punctuation, that was not trailing.\n   *\n   * ```markdown\n   * > | https://example.com/a\"b\n   *                          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function pathAtPunctuation(code) {\n    // Count closing parens.\n    if (code === 41) {\n      sizeClose++\n    }\n    effects.consume(code)\n    return pathInside\n  }\n}\n\n/**\n * Trail.\n *\n * This calls `ok` if this *is* the trail, followed by an end, which means\n * the entire trail is not part of the link.\n * It calls `nok` if this *is* part of the link.\n *\n * ```markdown\n * > | https://example.com\").\n *                        ^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTrail(effects, ok, nok) {\n  return trail\n\n  /**\n   * In trail of domain or path.\n   *\n   * ```markdown\n   * > | https://example.com\").\n   *                        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function trail(code) {\n    // Regular trailing punctuation.\n    if (\n      code === 33 ||\n      code === 34 ||\n      code === 39 ||\n      code === 41 ||\n      code === 42 ||\n      code === 44 ||\n      code === 46 ||\n      code === 58 ||\n      code === 59 ||\n      code === 63 ||\n      code === 95 ||\n      code === 126\n    ) {\n      effects.consume(code)\n      return trail\n    }\n\n    // `&` followed by one or more alphabeticals and then a `;`, is\n    // as a whole considered as trailing punctuation.\n    // In all other cases, it is considered as continuation of the URL.\n    if (code === 38) {\n      effects.consume(code)\n      return trailCharRefStart\n    }\n\n    // Needed because we allow literals after `[`, as we fix:\n    // <https://github.com/github/cmark-gfm/issues/278>.\n    // Check that it is not followed by `(` or `[`.\n    if (code === 93) {\n      effects.consume(code)\n      return trailBracketAfter\n    }\n    if (\n      // `<` is an end.\n      code === 60 ||\n      // So is whitespace.\n      code === null ||\n      markdownLineEndingOrSpace(code) ||\n      unicodeWhitespace(code)\n    ) {\n      return ok(code)\n    }\n    return nok(code)\n  }\n\n  /**\n   * In trail, after `]`.\n   *\n   * > \uD83D\uDC49 **Note**: this deviates from `cmark-gfm` to fix a bug.\n   * > See end of <https://github.com/github/cmark-gfm/issues/278> for more.\n   *\n   * ```markdown\n   * > | https://example.com](\n   *                         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function trailBracketAfter(code) {\n    // Whitespace or something that could start a resource or reference is the end.\n    // Switch back to trail otherwise.\n    if (\n      code === null ||\n      code === 40 ||\n      code === 91 ||\n      markdownLineEndingOrSpace(code) ||\n      unicodeWhitespace(code)\n    ) {\n      return ok(code)\n    }\n    return trail(code)\n  }\n\n  /**\n   * In character-reference like trail, after `&`.\n   *\n   * ```markdown\n   * > | https://example.com&amp;).\n   *                         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function trailCharRefStart(code) {\n    // When non-alpha, it\u2019s not a trail.\n    return asciiAlpha(code) ? trailCharRefInside(code) : nok(code)\n  }\n\n  /**\n   * In character-reference like trail.\n   *\n   * ```markdown\n   * > | https://example.com&amp;).\n   *                         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function trailCharRefInside(code) {\n    // Switch back to trail if this is well-formed.\n    if (code === 59) {\n      effects.consume(code)\n      return trail\n    }\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      return trailCharRefInside\n    }\n\n    // It\u2019s not a trail.\n    return nok(code)\n  }\n}\n\n/**\n * Dot in email domain trail.\n *\n * This calls `ok` if this *is* the trail, followed by an end, which means\n * the trail is not part of the link.\n * It calls `nok` if this *is* part of the link.\n *\n * ```markdown\n * > | contact@example.org.\n *                        ^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeEmailDomainDotTrail(effects, ok, nok) {\n  return start\n\n  /**\n   * Dot.\n   *\n   * ```markdown\n   * > | contact@example.org.\n   *                    ^   ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // Must be dot.\n    effects.consume(code)\n    return after\n  }\n\n  /**\n   * After dot.\n   *\n   * ```markdown\n   * > | contact@example.org.\n   *                     ^   ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    // Not a trail if alphanumeric.\n    return asciiAlphanumeric(code) ? nok(code) : ok(code)\n  }\n}\n\n/**\n * See:\n * <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L156>.\n *\n * @type {Previous}\n */\nfunction previousWww(code) {\n  return (\n    code === null ||\n    code === 40 ||\n    code === 42 ||\n    code === 95 ||\n    code === 91 ||\n    code === 93 ||\n    code === 126 ||\n    markdownLineEndingOrSpace(code)\n  )\n}\n\n/**\n * See:\n * <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L214>.\n *\n * @type {Previous}\n */\nfunction previousProtocol(code) {\n  return !asciiAlpha(code)\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Previous}\n */\nfunction previousEmail(code) {\n  // Do not allow a slash \u201Cinside\u201D atext.\n  // The reference code is a bit weird, but that\u2019s what it results in.\n  // Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L307>.\n  // Other than slash, every preceding character is allowed.\n  return !(code === 47 || gfmAtext(code))\n}\n\n/**\n * @param {Code} code\n * @returns {boolean}\n */\nfunction gfmAtext(code) {\n  return (\n    code === 43 ||\n    code === 45 ||\n    code === 46 ||\n    code === 95 ||\n    asciiAlphanumeric(code)\n  )\n}\n\n/**\n * @param {Array<Event>} events\n * @returns {boolean}\n */\nfunction previousUnbalanced(events) {\n  let index = events.length\n  let result = false\n  while (index--) {\n    const token = events[index][1]\n    if (\n      (token.type === 'labelLink' || token.type === 'labelImage') &&\n      !token._balanced\n    ) {\n      result = true\n      break\n    }\n\n    // If we\u2019ve seen this token, and it was marked as not having any unbalanced\n    // bracket before it, we can exit.\n    if (token._gfmAutolinkLiteralWalkedInto) {\n      result = false\n      break\n    }\n  }\n  if (events.length > 0 && !result) {\n    // Mark the last token as \u201Cwalked into\u201D w/o finding\n    // anything.\n    events[events.length - 1][1]._gfmAutolinkLiteralWalkedInto = true\n  }\n  return result\n}\n", "/**\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Exiter} Exiter\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {blankLine} from 'micromark-core-commonmark'\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEndingOrSpace} from 'micromark-util-character'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\nconst indent = {\n  tokenize: tokenizeIndent,\n  partial: true\n}\n\n// To do: micromark should support a `_hiddenGfmFootnoteSupport`, which only\n// affects label start (image).\n// That will let us drop `tokenizePotentialGfmFootnote*`.\n// It currently has a `_hiddenFootnoteSupport`, which affects that and more.\n// That can be removed when `micromark-extension-footnote` is archived.\n\n/**\n * Create an extension for `micromark` to enable GFM footnote syntax.\n *\n * @returns {Extension}\n *   Extension for `micromark` that can be passed in `extensions` to\n *   enable GFM footnote syntax.\n */\nexport function gfmFootnote() {\n  /** @type {Extension} */\n  return {\n    document: {\n      [91]: {\n        tokenize: tokenizeDefinitionStart,\n        continuation: {\n          tokenize: tokenizeDefinitionContinuation\n        },\n        exit: gfmFootnoteDefinitionEnd\n      }\n    },\n    text: {\n      [91]: {\n        tokenize: tokenizeGfmFootnoteCall\n      },\n      [93]: {\n        add: 'after',\n        tokenize: tokenizePotentialGfmFootnoteCall,\n        resolveTo: resolveToPotentialGfmFootnoteCall\n      }\n    }\n  }\n}\n\n// To do: remove after micromark update.\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizePotentialGfmFootnoteCall(effects, ok, nok) {\n  const self = this\n  let index = self.events.length\n  /** @type {Array<string>} */\n  // @ts-expect-error It\u2019s fine!\n  const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = [])\n  /** @type {Token} */\n  let labelStart\n\n  // Find an opening.\n  while (index--) {\n    const token = self.events[index][1]\n    if (token.type === 'labelImage') {\n      labelStart = token\n      break\n    }\n\n    // Exit if we\u2019ve walked far enough.\n    if (\n      token.type === 'gfmFootnoteCall' ||\n      token.type === 'labelLink' ||\n      token.type === 'label' ||\n      token.type === 'image' ||\n      token.type === 'link'\n    ) {\n      break\n    }\n  }\n  return start\n\n  /**\n   * @type {State}\n   */\n  function start(code) {\n    if (!labelStart || !labelStart._balanced) {\n      return nok(code)\n    }\n    const id = normalizeIdentifier(\n      self.sliceSerialize({\n        start: labelStart.end,\n        end: self.now()\n      })\n    )\n    if (id.codePointAt(0) !== 94 || !defined.includes(id.slice(1))) {\n      return nok(code)\n    }\n    effects.enter('gfmFootnoteCallLabelMarker')\n    effects.consume(code)\n    effects.exit('gfmFootnoteCallLabelMarker')\n    return ok(code)\n  }\n}\n\n// To do: remove after micromark update.\n/** @type {Resolver} */\nfunction resolveToPotentialGfmFootnoteCall(events, context) {\n  let index = events.length\n  /** @type {Token | undefined} */\n  let labelStart\n\n  // Find an opening.\n  while (index--) {\n    if (\n      events[index][1].type === 'labelImage' &&\n      events[index][0] === 'enter'\n    ) {\n      labelStart = events[index][1]\n      break\n    }\n  }\n  // Change the `labelImageMarker` to a `data`.\n  events[index + 1][1].type = 'data'\n  events[index + 3][1].type = 'gfmFootnoteCallLabelMarker'\n\n  // The whole (without `!`):\n  /** @type {Token} */\n  const call = {\n    type: 'gfmFootnoteCall',\n    start: Object.assign({}, events[index + 3][1].start),\n    end: Object.assign({}, events[events.length - 1][1].end)\n  }\n  // The `^` marker\n  /** @type {Token} */\n  const marker = {\n    type: 'gfmFootnoteCallMarker',\n    start: Object.assign({}, events[index + 3][1].end),\n    end: Object.assign({}, events[index + 3][1].end)\n  }\n  // Increment the end 1 character.\n  marker.end.column++\n  marker.end.offset++\n  marker.end._bufferIndex++\n  /** @type {Token} */\n  const string = {\n    type: 'gfmFootnoteCallString',\n    start: Object.assign({}, marker.end),\n    end: Object.assign({}, events[events.length - 1][1].start)\n  }\n  /** @type {Token} */\n  const chunk = {\n    type: 'chunkString',\n    contentType: 'string',\n    start: Object.assign({}, string.start),\n    end: Object.assign({}, string.end)\n  }\n\n  /** @type {Array<Event>} */\n  const replacement = [\n    // Take the `labelImageMarker` (now `data`, the `!`)\n    events[index + 1],\n    events[index + 2],\n    ['enter', call, context],\n    // The `[`\n    events[index + 3],\n    events[index + 4],\n    // The `^`.\n    ['enter', marker, context],\n    ['exit', marker, context],\n    // Everything in between.\n    ['enter', string, context],\n    ['enter', chunk, context],\n    ['exit', chunk, context],\n    ['exit', string, context],\n    // The ending (`]`, properly parsed and labelled).\n    events[events.length - 2],\n    events[events.length - 1],\n    ['exit', call, context]\n  ]\n  events.splice(index, events.length - index + 1, ...replacement)\n  return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeGfmFootnoteCall(effects, ok, nok) {\n  const self = this\n  /** @type {Array<string>} */\n  // @ts-expect-error It\u2019s fine!\n  const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = [])\n  let size = 0\n  /** @type {boolean} */\n  let data\n\n  // Note: the implementation of `markdown-rs` is different, because it houses\n  // core *and* extensions in one project.\n  // Therefore, it can include footnote logic inside `label-end`.\n  // We can\u2019t do that, but luckily, we can parse footnotes in a simpler way than\n  // needed for labels.\n  return start\n\n  /**\n   * Start of footnote label.\n   *\n   * ```markdown\n   * > | a [^b] c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('gfmFootnoteCall')\n    effects.enter('gfmFootnoteCallLabelMarker')\n    effects.consume(code)\n    effects.exit('gfmFootnoteCallLabelMarker')\n    return callStart\n  }\n\n  /**\n   * After `[`, at `^`.\n   *\n   * ```markdown\n   * > | a [^b] c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function callStart(code) {\n    if (code !== 94) return nok(code)\n    effects.enter('gfmFootnoteCallMarker')\n    effects.consume(code)\n    effects.exit('gfmFootnoteCallMarker')\n    effects.enter('gfmFootnoteCallString')\n    effects.enter('chunkString').contentType = 'string'\n    return callData\n  }\n\n  /**\n   * In label.\n   *\n   * ```markdown\n   * > | a [^b] c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function callData(code) {\n    if (\n      // Too long.\n      size > 999 ||\n      // Closing brace with nothing.\n      (code === 93 && !data) ||\n      // Space or tab is not supported by GFM for some reason.\n      // `\\n` and `[` not being supported makes sense.\n      code === null ||\n      code === 91 ||\n      markdownLineEndingOrSpace(code)\n    ) {\n      return nok(code)\n    }\n    if (code === 93) {\n      effects.exit('chunkString')\n      const token = effects.exit('gfmFootnoteCallString')\n      if (!defined.includes(normalizeIdentifier(self.sliceSerialize(token)))) {\n        return nok(code)\n      }\n      effects.enter('gfmFootnoteCallLabelMarker')\n      effects.consume(code)\n      effects.exit('gfmFootnoteCallLabelMarker')\n      effects.exit('gfmFootnoteCall')\n      return ok\n    }\n    if (!markdownLineEndingOrSpace(code)) {\n      data = true\n    }\n    size++\n    effects.consume(code)\n    return code === 92 ? callEscape : callData\n  }\n\n  /**\n   * On character after escape.\n   *\n   * ```markdown\n   * > | a [^b\\c] d\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function callEscape(code) {\n    if (code === 91 || code === 92 || code === 93) {\n      effects.consume(code)\n      size++\n      return callData\n    }\n    return callData(code)\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinitionStart(effects, ok, nok) {\n  const self = this\n  /** @type {Array<string>} */\n  // @ts-expect-error It\u2019s fine!\n  const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = [])\n  /** @type {string} */\n  let identifier\n  let size = 0\n  /** @type {boolean | undefined} */\n  let data\n  return start\n\n  /**\n   * Start of GFM footnote definition.\n   *\n   * ```markdown\n   * > | [^a]: b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('gfmFootnoteDefinition')._container = true\n    effects.enter('gfmFootnoteDefinitionLabel')\n    effects.enter('gfmFootnoteDefinitionLabelMarker')\n    effects.consume(code)\n    effects.exit('gfmFootnoteDefinitionLabelMarker')\n    return labelAtMarker\n  }\n\n  /**\n   * In label, at caret.\n   *\n   * ```markdown\n   * > | [^a]: b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelAtMarker(code) {\n    if (code === 94) {\n      effects.enter('gfmFootnoteDefinitionMarker')\n      effects.consume(code)\n      effects.exit('gfmFootnoteDefinitionMarker')\n      effects.enter('gfmFootnoteDefinitionLabelString')\n      effects.enter('chunkString').contentType = 'string'\n      return labelInside\n    }\n    return nok(code)\n  }\n\n  /**\n   * In label.\n   *\n   * > \uD83D\uDC49 **Note**: `cmark-gfm` prevents whitespace from occurring in footnote\n   * > definition labels.\n   *\n   * ```markdown\n   * > | [^a]: b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelInside(code) {\n    if (\n      // Too long.\n      size > 999 ||\n      // Closing brace with nothing.\n      (code === 93 && !data) ||\n      // Space or tab is not supported by GFM for some reason.\n      // `\\n` and `[` not being supported makes sense.\n      code === null ||\n      code === 91 ||\n      markdownLineEndingOrSpace(code)\n    ) {\n      return nok(code)\n    }\n    if (code === 93) {\n      effects.exit('chunkString')\n      const token = effects.exit('gfmFootnoteDefinitionLabelString')\n      identifier = normalizeIdentifier(self.sliceSerialize(token))\n      effects.enter('gfmFootnoteDefinitionLabelMarker')\n      effects.consume(code)\n      effects.exit('gfmFootnoteDefinitionLabelMarker')\n      effects.exit('gfmFootnoteDefinitionLabel')\n      return labelAfter\n    }\n    if (!markdownLineEndingOrSpace(code)) {\n      data = true\n    }\n    size++\n    effects.consume(code)\n    return code === 92 ? labelEscape : labelInside\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * > \uD83D\uDC49 **Note**: `cmark-gfm` currently does not support escaped brackets:\n   * > <https://github.com/github/cmark-gfm/issues/240>\n   *\n   * ```markdown\n   * > | [^a\\*b]: c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEscape(code) {\n    if (code === 91 || code === 92 || code === 93) {\n      effects.consume(code)\n      size++\n      return labelInside\n    }\n    return labelInside(code)\n  }\n\n  /**\n   * After definition label.\n   *\n   * ```markdown\n   * > | [^a]: b\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelAfter(code) {\n    if (code === 58) {\n      effects.enter('definitionMarker')\n      effects.consume(code)\n      effects.exit('definitionMarker')\n      if (!defined.includes(identifier)) {\n        defined.push(identifier)\n      }\n\n      // Any whitespace after the marker is eaten, forming indented code\n      // is not possible.\n      // No space is also fine, just like a block quote marker.\n      return factorySpace(\n        effects,\n        whitespaceAfter,\n        'gfmFootnoteDefinitionWhitespace'\n      )\n    }\n    return nok(code)\n  }\n\n  /**\n   * After definition prefix.\n   *\n   * ```markdown\n   * > | [^a]: b\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function whitespaceAfter(code) {\n    // `markdown-rs` has a wrapping token for the prefix that is closed here.\n    return ok(code)\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinitionContinuation(effects, ok, nok) {\n  /// Start of footnote definition continuation.\n  ///\n  /// ```markdown\n  ///   | [^a]: b\n  /// > |     c\n  ///     ^\n  /// ```\n  //\n  // Either a blank line, which is okay, or an indented thing.\n  return effects.check(blankLine, ok, effects.attempt(indent, ok, nok))\n}\n\n/** @type {Exiter} */\nfunction gfmFootnoteDefinitionEnd(effects) {\n  effects.exit('gfmFootnoteDefinition')\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeIndent(effects, ok, nok) {\n  const self = this\n  return factorySpace(\n    effects,\n    afterPrefix,\n    'gfmFootnoteDefinitionIndent',\n    4 + 1\n  )\n\n  /**\n   * @type {State}\n   */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1]\n    return tail &&\n      tail[1].type === 'gfmFootnoteDefinitionIndent' &&\n      tail[2].sliceSerialize(tail[1], true).length === 4\n      ? ok(code)\n      : nok(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n *\n * @typedef Options\n *   Configuration (optional).\n * @property {boolean} [singleTilde=true]\n *   Whether to support strikethrough with a single tilde.\n *\n *   Single tildes work on github.com, but are technically prohibited by the\n *   GFM spec.\n */\n\nimport {splice} from 'micromark-util-chunked'\nimport {classifyCharacter} from 'micromark-util-classify-character'\nimport {resolveAll} from 'micromark-util-resolve-all'\n/**\n * Create an extension for `micromark` to enable GFM strikethrough syntax.\n *\n * @param {Options | null | undefined} [options]\n *   Configuration.\n * @returns {Extension}\n *   Extension for `micromark` that can be passed in `extensions`, to\n *   enable GFM strikethrough syntax.\n */\nexport function gfmStrikethrough(options) {\n  const options_ = options || {}\n  let single = options_.singleTilde\n  const tokenizer = {\n    tokenize: tokenizeStrikethrough,\n    resolveAll: resolveAllStrikethrough\n  }\n  if (single === null || single === undefined) {\n    single = true\n  }\n  return {\n    text: {\n      [126]: tokenizer\n    },\n    insideSpan: {\n      null: [tokenizer]\n    },\n    attentionMarkers: {\n      null: [126]\n    }\n  }\n\n  /**\n   * Take events and resolve strikethrough.\n   *\n   * @type {Resolver}\n   */\n  function resolveAllStrikethrough(events, context) {\n    let index = -1\n\n    // Walk through all events.\n    while (++index < events.length) {\n      // Find a token that can close.\n      if (\n        events[index][0] === 'enter' &&\n        events[index][1].type === 'strikethroughSequenceTemporary' &&\n        events[index][1]._close\n      ) {\n        let open = index\n\n        // Now walk back to find an opener.\n        while (open--) {\n          // Find a token that can open the closer.\n          if (\n            events[open][0] === 'exit' &&\n            events[open][1].type === 'strikethroughSequenceTemporary' &&\n            events[open][1]._open &&\n            // If the sizes are the same:\n            events[index][1].end.offset - events[index][1].start.offset ===\n              events[open][1].end.offset - events[open][1].start.offset\n          ) {\n            events[index][1].type = 'strikethroughSequence'\n            events[open][1].type = 'strikethroughSequence'\n\n            /** @type {Token} */\n            const strikethrough = {\n              type: 'strikethrough',\n              start: Object.assign({}, events[open][1].start),\n              end: Object.assign({}, events[index][1].end)\n            }\n\n            /** @type {Token} */\n            const text = {\n              type: 'strikethroughText',\n              start: Object.assign({}, events[open][1].end),\n              end: Object.assign({}, events[index][1].start)\n            }\n\n            // Opening.\n            /** @type {Array<Event>} */\n            const nextEvents = [\n              ['enter', strikethrough, context],\n              ['enter', events[open][1], context],\n              ['exit', events[open][1], context],\n              ['enter', text, context]\n            ]\n            const insideSpan = context.parser.constructs.insideSpan.null\n            if (insideSpan) {\n              // Between.\n              splice(\n                nextEvents,\n                nextEvents.length,\n                0,\n                resolveAll(insideSpan, events.slice(open + 1, index), context)\n              )\n            }\n\n            // Closing.\n            splice(nextEvents, nextEvents.length, 0, [\n              ['exit', text, context],\n              ['enter', events[index][1], context],\n              ['exit', events[index][1], context],\n              ['exit', strikethrough, context]\n            ])\n            splice(events, open - 1, index - open + 3, nextEvents)\n            index = open + nextEvents.length - 2\n            break\n          }\n        }\n      }\n    }\n    index = -1\n    while (++index < events.length) {\n      if (events[index][1].type === 'strikethroughSequenceTemporary') {\n        events[index][1].type = 'data'\n      }\n    }\n    return events\n  }\n\n  /**\n   * @this {TokenizeContext}\n   * @type {Tokenizer}\n   */\n  function tokenizeStrikethrough(effects, ok, nok) {\n    const previous = this.previous\n    const events = this.events\n    let size = 0\n    return start\n\n    /** @type {State} */\n    function start(code) {\n      if (\n        previous === 126 &&\n        events[events.length - 1][1].type !== 'characterEscape'\n      ) {\n        return nok(code)\n      }\n      effects.enter('strikethroughSequenceTemporary')\n      return more(code)\n    }\n\n    /** @type {State} */\n    function more(code) {\n      const before = classifyCharacter(previous)\n      if (code === 126) {\n        // If this is the third marker, exit.\n        if (size > 1) return nok(code)\n        effects.consume(code)\n        size++\n        return more\n      }\n      if (size < 2 && !single) return nok(code)\n      const token = effects.exit('strikethroughSequenceTemporary')\n      const after = classifyCharacter(code)\n      token._open = !after || (after === 2 && Boolean(before))\n      token._close = !before || (before === 2 && Boolean(after))\n      return ok(code)\n    }\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Event} Event\n */\n\n// Port of `edit_map.rs` from `markdown-rs`.\n// This should move to `markdown-js` later.\n\n// Deal with several changes in events, batching them together.\n//\n// Preferably, changes should be kept to a minimum.\n// Sometimes, it\u2019s needed to change the list of events, because parsing can be\n// messy, and it helps to expose a cleaner interface of events to the compiler\n// and other users.\n// It can also help to merge many adjacent similar events.\n// And, in other cases, it\u2019s needed to parse subcontent: pass some events\n// through another tokenizer and inject the result.\n\n/**\n * @typedef {[number, number, Array<Event>]} Change\n * @typedef {[number, number, number]} Jump\n */\n\n/**\n * Tracks a bunch of edits.\n */\nexport class EditMap {\n  /**\n   * Create a new edit map.\n   */\n  constructor() {\n    /**\n     * Record of changes.\n     *\n     * @type {Array<Change>}\n     */\n    this.map = []\n  }\n\n  /**\n   * Create an edit: a remove and/or add at a certain place.\n   *\n   * @param {number} index\n   * @param {number} remove\n   * @param {Array<Event>} add\n   * @returns {void}\n   */\n  add(index, remove, add) {\n    addImpl(this, index, remove, add)\n  }\n\n  // To do: not used here.\n  // /**\n  //  * Create an edit: but insert `add` before existing additions.\n  //  *\n  //  * @param {number} index\n  //  * @param {number} remove\n  //  * @param {Array<Event>} add\n  //  * @returns {void}\n  //  */\n  // addBefore(index, remove, add) {\n  //   addImpl(this, index, remove, add, true)\n  // }\n\n  /**\n   * Done, change the events.\n   *\n   * @param {Array<Event>} events\n   * @returns {void}\n   */\n  consume(events) {\n    this.map.sort((a, b) => a[0] - b[0])\n\n    /* c8 ignore next 3 -- `resolve` is never called without tables, so without edits. */\n    if (this.map.length === 0) {\n      return\n    }\n\n    // To do: if links are added in events, like they are in `markdown-rs`,\n    // this is needed.\n    // // Calculate jumps: where items in the current list move to.\n    // /** @type {Array<Jump>} */\n    // const jumps = []\n    // let index = 0\n    // let addAcc = 0\n    // let removeAcc = 0\n    // while (index < this.map.length) {\n    //   const [at, remove, add] = this.map[index]\n    //   removeAcc += remove\n    //   addAcc += add.length\n    //   jumps.push([at, removeAcc, addAcc])\n    //   index += 1\n    // }\n    //\n    // . shiftLinks(events, jumps)\n\n    let index = this.map.length\n    /** @type {Array<Array<Event>>} */\n    const vecs = []\n    while (index > 0) {\n      index -= 1\n      vecs.push(events.slice(this.map[index][0] + this.map[index][1]))\n      // eslint-disable-next-line unicorn/no-array-push-push\n      vecs.push(this.map[index][2])\n\n      // Truncate rest.\n      events.length = this.map[index][0]\n    }\n    vecs.push([...events])\n    events.length = 0\n    let slice = vecs.pop()\n    while (slice) {\n      events.push(...slice)\n      slice = vecs.pop()\n    }\n\n    // Truncate everything.\n    this.map.length = 0\n  }\n}\n\n/**\n * Create an edit.\n *\n * @param {EditMap} editMap\n * @param {number} at\n * @param {number} remove\n * @param {Array<Event>} add\n * @returns {void}\n */\nfunction addImpl(editMap, at, remove, add) {\n  let index = 0\n\n  /* c8 ignore next 3 -- `resolve` is never called without tables, so without edits. */\n  if (remove === 0 && add.length === 0) {\n    return\n  }\n  while (index < editMap.map.length) {\n    if (editMap.map[index][0] === at) {\n      editMap.map[index][1] += remove\n\n      // To do: before not used.\n      // if (before) {\n      //   add.push(...editMap.map[index][2])\n      //   editMap.map[index][2] = add\n      // } else {\n      editMap.map[index][2].push(...add)\n      // }\n\n      return\n    }\n    index += 1\n  }\n  editMap.map.push([at, remove, add])\n}\n\n// /**\n//  * Shift `previous` and `next` links according to `jumps`.\n//  *\n//  * This fixes links in case there are events removed or added between them.\n//  *\n//  * @param {Array<Event>} events\n//  * @param {Array<Jump>} jumps\n//  */\n// function shiftLinks(events, jumps) {\n//   let jumpIndex = 0\n//   let index = 0\n//   let add = 0\n//   let rm = 0\n\n//   while (index < events.length) {\n//     const rmCurr = rm\n\n//     while (jumpIndex < jumps.length && jumps[jumpIndex][0] <= index) {\n//       add = jumps[jumpIndex][2]\n//       rm = jumps[jumpIndex][1]\n//       jumpIndex += 1\n//     }\n\n//     // Ignore items that will be removed.\n//     if (rm > rmCurr) {\n//       index += rm - rmCurr\n//     } else {\n//       console.log('to do: links?', add, rmCurr)\n//       // ?\n//       // if let Some(link) = &events[index].link {\n//       //     if let Some(next) = link.next {\n//       //         events[next].link.as_mut().unwrap().previous = Some(index + add - rm);\n//       //         while jumpIndex < jumps.len() && jumps[jumpIndex].0 <= next {\n//       //             add = jumps[jumpIndex].2;\n//       //             rm = jumps[jumpIndex].1;\n//       //             jumpIndex += 1;\n//       //         }\n//       //         events[index].link.as_mut().unwrap().next = Some(next + add - rm);\n//       //         index = next;\n//       //         continue;\n//       //     }\n//       // }\n//       index += 1\n//     }\n//   }\n// }\n", "/**\n * @typedef {import('micromark-util-types').Event} Event\n */\n\n/**\n * @typedef {'left' | 'center' | 'right' | 'none'} Align\n */\n\n/**\n * Figure out the alignment of a GFM table.\n *\n * @param {Array<Event>} events\n * @param {number} index\n * @returns {Array<Align>}\n */\nexport function gfmTableAlign(events, index) {\n  let inDelimiterRow = false\n  /** @type {Array<Align>} */\n  const align = []\n  while (index < events.length) {\n    const event = events[index]\n    if (inDelimiterRow) {\n      if (event[0] === 'enter') {\n        // Start of alignment value: set a new column.\n        // To do: `markdown-rs` uses `tableDelimiterCellValue`.\n        if (event[1].type === 'tableContent') {\n          align.push(\n            events[index + 1][1].type === 'tableDelimiterMarker'\n              ? 'left'\n              : 'none'\n          )\n        }\n      }\n      // Exits:\n      // End of alignment value: change the column.\n      // To do: `markdown-rs` uses `tableDelimiterCellValue`.\n      else if (event[1].type === 'tableContent') {\n        if (events[index - 1][1].type === 'tableDelimiterMarker') {\n          const alignIndex = align.length - 1\n          align[alignIndex] = align[alignIndex] === 'left' ? 'center' : 'right'\n        }\n      }\n      // Done!\n      else if (event[1].type === 'tableDelimiterRow') {\n        break\n      }\n    } else if (event[0] === 'enter' && event[1].type === 'tableDelimiterRow') {\n      inDelimiterRow = true\n    }\n    index += 1\n  }\n  return align\n}\n", "/**\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\n/**\n * @typedef {[number, number, number, number]} Range\n *   Cell info.\n *\n * @typedef {0 | 1 | 2 | 3} RowKind\n *   Where we are: `1` for head row, `2` for delimiter row, `3` for body row.\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {\n  markdownLineEnding,\n  markdownLineEndingOrSpace,\n  markdownSpace\n} from 'micromark-util-character'\nimport {EditMap} from './edit-map.js'\nimport {gfmTableAlign} from './infer.js'\n\n// To do: next major: expose functions.\n\n/**\n * Extension for `micromark` that can be passed in `extensions` to enable GFM\n * table syntax.\n *\n * @type {Extension}\n */\nexport const gfmTable = {\n  flow: {\n    null: {\n      tokenize: tokenizeTable,\n      resolveAll: resolveTable\n    }\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTable(effects, ok, nok) {\n  const self = this\n  let size = 0\n  let sizeB = 0\n  /** @type {boolean | undefined} */\n  let seen\n  return start\n\n  /**\n   * Start of a GFM table.\n   *\n   * If there is a valid table row or table head before, then we try to parse\n   * another row.\n   * Otherwise, we try to parse a head.\n   *\n   * ```markdown\n   * > | | a |\n   *     ^\n   *   | | - |\n   * > | | b |\n   *     ^\n   * ```\n   * @type {State}\n   */\n  function start(code) {\n    let index = self.events.length - 1\n    while (index > -1) {\n      const type = self.events[index][1].type\n      if (\n        type === 'lineEnding' ||\n        // Note: markdown-rs uses `whitespace` instead of `linePrefix`\n        type === 'linePrefix'\n      )\n        index--\n      else break\n    }\n    const tail = index > -1 ? self.events[index][1].type : null\n    const next =\n      tail === 'tableHead' || tail === 'tableRow' ? bodyRowStart : headRowBefore\n\n    // Don\u2019t allow lazy body rows.\n    if (next === bodyRowStart && self.parser.lazy[self.now().line]) {\n      return nok(code)\n    }\n    return next(code)\n  }\n\n  /**\n   * Before table head row.\n   *\n   * ```markdown\n   * > | | a |\n   *     ^\n   *   | | - |\n   *   | | b |\n   * ```\n   *\n   * @type {State}\n   */\n  function headRowBefore(code) {\n    effects.enter('tableHead')\n    effects.enter('tableRow')\n    return headRowStart(code)\n  }\n\n  /**\n   * Before table head row, after whitespace.\n   *\n   * ```markdown\n   * > | | a |\n   *     ^\n   *   | | - |\n   *   | | b |\n   * ```\n   *\n   * @type {State}\n   */\n  function headRowStart(code) {\n    if (code === 124) {\n      return headRowBreak(code)\n    }\n\n    // To do: micromark-js should let us parse our own whitespace in extensions,\n    // like `markdown-rs`:\n    //\n    // ```js\n    // // 4+ spaces.\n    // if (markdownSpace(code)) {\n    //   return nok(code)\n    // }\n    // ```\n\n    seen = true\n    // Count the first character, that isn\u2019t a pipe, double.\n    sizeB += 1\n    return headRowBreak(code)\n  }\n\n  /**\n   * At break in table head row.\n   *\n   * ```markdown\n   * > | | a |\n   *     ^\n   *       ^\n   *         ^\n   *   | | - |\n   *   | | b |\n   * ```\n   *\n   * @type {State}\n   */\n  function headRowBreak(code) {\n    if (code === null) {\n      // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don\u2018t.\n      return nok(code)\n    }\n    if (markdownLineEnding(code)) {\n      // If anything other than one pipe (ignoring whitespace) was used, it\u2019s fine.\n      if (sizeB > 1) {\n        sizeB = 0\n        // To do: check if this works.\n        // Feel free to interrupt:\n        self.interrupt = true\n        effects.exit('tableRow')\n        effects.enter('lineEnding')\n        effects.consume(code)\n        effects.exit('lineEnding')\n        return headDelimiterStart\n      }\n\n      // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don\u2018t.\n      return nok(code)\n    }\n    if (markdownSpace(code)) {\n      // To do: check if this is fine.\n      // effects.attempt(State::Next(StateName::GfmTableHeadRowBreak), State::Nok)\n      // State::Retry(space_or_tab(tokenizer))\n      return factorySpace(effects, headRowBreak, 'whitespace')(code)\n    }\n    sizeB += 1\n    if (seen) {\n      seen = false\n      // Header cell count.\n      size += 1\n    }\n    if (code === 124) {\n      effects.enter('tableCellDivider')\n      effects.consume(code)\n      effects.exit('tableCellDivider')\n      // Whether a delimiter was seen.\n      seen = true\n      return headRowBreak\n    }\n\n    // Anything else is cell data.\n    effects.enter('data')\n    return headRowData(code)\n  }\n\n  /**\n   * In table head row data.\n   *\n   * ```markdown\n   * > | | a |\n   *       ^\n   *   | | - |\n   *   | | b |\n   * ```\n   *\n   * @type {State}\n   */\n  function headRowData(code) {\n    if (code === null || code === 124 || markdownLineEndingOrSpace(code)) {\n      effects.exit('data')\n      return headRowBreak(code)\n    }\n    effects.consume(code)\n    return code === 92 ? headRowEscape : headRowData\n  }\n\n  /**\n   * In table head row escape.\n   *\n   * ```markdown\n   * > | | a\\-b |\n   *         ^\n   *   | | ---- |\n   *   | | c    |\n   * ```\n   *\n   * @type {State}\n   */\n  function headRowEscape(code) {\n    if (code === 92 || code === 124) {\n      effects.consume(code)\n      return headRowData\n    }\n    return headRowData(code)\n  }\n\n  /**\n   * Before delimiter row.\n   *\n   * ```markdown\n   *   | | a |\n   * > | | - |\n   *     ^\n   *   | | b |\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterStart(code) {\n    // Reset `interrupt`.\n    self.interrupt = false\n\n    // Note: in `markdown-rs`, we need to handle piercing here too.\n    if (self.parser.lazy[self.now().line]) {\n      return nok(code)\n    }\n    effects.enter('tableDelimiterRow')\n    // Track if we\u2019ve seen a `:` or `|`.\n    seen = false\n    if (markdownSpace(code)) {\n      return factorySpace(\n        effects,\n        headDelimiterBefore,\n        'linePrefix',\n        self.parser.constructs.disable.null.includes('codeIndented')\n          ? undefined\n          : 4\n      )(code)\n    }\n    return headDelimiterBefore(code)\n  }\n\n  /**\n   * Before delimiter row, after optional whitespace.\n   *\n   * Reused when a `|` is found later, to parse another cell.\n   *\n   * ```markdown\n   *   | | a |\n   * > | | - |\n   *     ^\n   *   | | b |\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterBefore(code) {\n    if (code === 45 || code === 58) {\n      return headDelimiterValueBefore(code)\n    }\n    if (code === 124) {\n      seen = true\n      // If we start with a pipe, we open a cell marker.\n      effects.enter('tableCellDivider')\n      effects.consume(code)\n      effects.exit('tableCellDivider')\n      return headDelimiterCellBefore\n    }\n\n    // More whitespace / empty row not allowed at start.\n    return headDelimiterNok(code)\n  }\n\n  /**\n   * After `|`, before delimiter cell.\n   *\n   * ```markdown\n   *   | | a |\n   * > | | - |\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterCellBefore(code) {\n    if (markdownSpace(code)) {\n      return factorySpace(effects, headDelimiterValueBefore, 'whitespace')(code)\n    }\n    return headDelimiterValueBefore(code)\n  }\n\n  /**\n   * Before delimiter cell value.\n   *\n   * ```markdown\n   *   | | a |\n   * > | | - |\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterValueBefore(code) {\n    // Align: left.\n    if (code === 58) {\n      sizeB += 1\n      seen = true\n      effects.enter('tableDelimiterMarker')\n      effects.consume(code)\n      effects.exit('tableDelimiterMarker')\n      return headDelimiterLeftAlignmentAfter\n    }\n\n    // Align: none.\n    if (code === 45) {\n      sizeB += 1\n      // To do: seems weird that this *isn\u2019t* left aligned, but that state is used?\n      return headDelimiterLeftAlignmentAfter(code)\n    }\n    if (code === null || markdownLineEnding(code)) {\n      return headDelimiterCellAfter(code)\n    }\n    return headDelimiterNok(code)\n  }\n\n  /**\n   * After delimiter cell left alignment marker.\n   *\n   * ```markdown\n   *   | | a  |\n   * > | | :- |\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterLeftAlignmentAfter(code) {\n    if (code === 45) {\n      effects.enter('tableDelimiterFiller')\n      return headDelimiterFiller(code)\n    }\n\n    // Anything else is not ok after the left-align colon.\n    return headDelimiterNok(code)\n  }\n\n  /**\n   * In delimiter cell filler.\n   *\n   * ```markdown\n   *   | | a |\n   * > | | - |\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterFiller(code) {\n    if (code === 45) {\n      effects.consume(code)\n      return headDelimiterFiller\n    }\n\n    // Align is `center` if it was `left`, `right` otherwise.\n    if (code === 58) {\n      seen = true\n      effects.exit('tableDelimiterFiller')\n      effects.enter('tableDelimiterMarker')\n      effects.consume(code)\n      effects.exit('tableDelimiterMarker')\n      return headDelimiterRightAlignmentAfter\n    }\n    effects.exit('tableDelimiterFiller')\n    return headDelimiterRightAlignmentAfter(code)\n  }\n\n  /**\n   * After delimiter cell right alignment marker.\n   *\n   * ```markdown\n   *   | |  a |\n   * > | | -: |\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterRightAlignmentAfter(code) {\n    if (markdownSpace(code)) {\n      return factorySpace(effects, headDelimiterCellAfter, 'whitespace')(code)\n    }\n    return headDelimiterCellAfter(code)\n  }\n\n  /**\n   * After delimiter cell.\n   *\n   * ```markdown\n   *   | |  a |\n   * > | | -: |\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterCellAfter(code) {\n    if (code === 124) {\n      return headDelimiterBefore(code)\n    }\n    if (code === null || markdownLineEnding(code)) {\n      // Exit when:\n      // * there was no `:` or `|` at all (it\u2019s a thematic break or setext\n      //   underline instead)\n      // * the header cell count is not the delimiter cell count\n      if (!seen || size !== sizeB) {\n        return headDelimiterNok(code)\n      }\n\n      // Note: in markdown-rs`, a reset is needed here.\n      effects.exit('tableDelimiterRow')\n      effects.exit('tableHead')\n      // To do: in `markdown-rs`, resolvers need to be registered manually.\n      // effects.register_resolver(ResolveName::GfmTable)\n      return ok(code)\n    }\n    return headDelimiterNok(code)\n  }\n\n  /**\n   * In delimiter row, at a disallowed byte.\n   *\n   * ```markdown\n   *   | | a |\n   * > | | x |\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterNok(code) {\n    // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don\u2018t.\n    return nok(code)\n  }\n\n  /**\n   * Before table body row.\n   *\n   * ```markdown\n   *   | | a |\n   *   | | - |\n   * > | | b |\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function bodyRowStart(code) {\n    // Note: in `markdown-rs` we need to manually take care of a prefix,\n    // but in `micromark-js` that is done for us, so if we\u2019re here, we\u2019re\n    // never at whitespace.\n    effects.enter('tableRow')\n    return bodyRowBreak(code)\n  }\n\n  /**\n   * At break in table body row.\n   *\n   * ```markdown\n   *   | | a |\n   *   | | - |\n   * > | | b |\n   *     ^\n   *       ^\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function bodyRowBreak(code) {\n    if (code === 124) {\n      effects.enter('tableCellDivider')\n      effects.consume(code)\n      effects.exit('tableCellDivider')\n      return bodyRowBreak\n    }\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('tableRow')\n      return ok(code)\n    }\n    if (markdownSpace(code)) {\n      return factorySpace(effects, bodyRowBreak, 'whitespace')(code)\n    }\n\n    // Anything else is cell content.\n    effects.enter('data')\n    return bodyRowData(code)\n  }\n\n  /**\n   * In table body row data.\n   *\n   * ```markdown\n   *   | | a |\n   *   | | - |\n   * > | | b |\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function bodyRowData(code) {\n    if (code === null || code === 124 || markdownLineEndingOrSpace(code)) {\n      effects.exit('data')\n      return bodyRowBreak(code)\n    }\n    effects.consume(code)\n    return code === 92 ? bodyRowEscape : bodyRowData\n  }\n\n  /**\n   * In table body row escape.\n   *\n   * ```markdown\n   *   | | a    |\n   *   | | ---- |\n   * > | | b\\-c |\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function bodyRowEscape(code) {\n    if (code === 92 || code === 124) {\n      effects.consume(code)\n      return bodyRowData\n    }\n    return bodyRowData(code)\n  }\n}\n\n/** @type {Resolver} */\n// eslint-disable-next-line complexity\nfunction resolveTable(events, context) {\n  let index = -1\n  let inFirstCellAwaitingPipe = true\n  /** @type {RowKind} */\n  let rowKind = 0\n  /** @type {Range} */\n  let lastCell = [0, 0, 0, 0]\n  /** @type {Range} */\n  let cell = [0, 0, 0, 0]\n  let afterHeadAwaitingFirstBodyRow = false\n  let lastTableEnd = 0\n  /** @type {Token | undefined} */\n  let currentTable\n  /** @type {Token | undefined} */\n  let currentBody\n  /** @type {Token | undefined} */\n  let currentCell\n  const map = new EditMap()\n  while (++index < events.length) {\n    const event = events[index]\n    const token = event[1]\n    if (event[0] === 'enter') {\n      // Start of head.\n      if (token.type === 'tableHead') {\n        afterHeadAwaitingFirstBodyRow = false\n\n        // Inject previous (body end and) table end.\n        if (lastTableEnd !== 0) {\n          flushTableEnd(map, context, lastTableEnd, currentTable, currentBody)\n          currentBody = undefined\n          lastTableEnd = 0\n        }\n\n        // Inject table start.\n        currentTable = {\n          type: 'table',\n          start: Object.assign({}, token.start),\n          // Note: correct end is set later.\n          end: Object.assign({}, token.end)\n        }\n        map.add(index, 0, [['enter', currentTable, context]])\n      } else if (\n        token.type === 'tableRow' ||\n        token.type === 'tableDelimiterRow'\n      ) {\n        inFirstCellAwaitingPipe = true\n        currentCell = undefined\n        lastCell = [0, 0, 0, 0]\n        cell = [0, index + 1, 0, 0]\n\n        // Inject table body start.\n        if (afterHeadAwaitingFirstBodyRow) {\n          afterHeadAwaitingFirstBodyRow = false\n          currentBody = {\n            type: 'tableBody',\n            start: Object.assign({}, token.start),\n            // Note: correct end is set later.\n            end: Object.assign({}, token.end)\n          }\n          map.add(index, 0, [['enter', currentBody, context]])\n        }\n        rowKind = token.type === 'tableDelimiterRow' ? 2 : currentBody ? 3 : 1\n      }\n      // Cell data.\n      else if (\n        rowKind &&\n        (token.type === 'data' ||\n          token.type === 'tableDelimiterMarker' ||\n          token.type === 'tableDelimiterFiller')\n      ) {\n        inFirstCellAwaitingPipe = false\n\n        // First value in cell.\n        if (cell[2] === 0) {\n          if (lastCell[1] !== 0) {\n            cell[0] = cell[1]\n            currentCell = flushCell(\n              map,\n              context,\n              lastCell,\n              rowKind,\n              undefined,\n              currentCell\n            )\n            lastCell = [0, 0, 0, 0]\n          }\n          cell[2] = index\n        }\n      } else if (token.type === 'tableCellDivider') {\n        if (inFirstCellAwaitingPipe) {\n          inFirstCellAwaitingPipe = false\n        } else {\n          if (lastCell[1] !== 0) {\n            cell[0] = cell[1]\n            currentCell = flushCell(\n              map,\n              context,\n              lastCell,\n              rowKind,\n              undefined,\n              currentCell\n            )\n          }\n          lastCell = cell\n          cell = [lastCell[1], index, 0, 0]\n        }\n      }\n    }\n    // Exit events.\n    else if (token.type === 'tableHead') {\n      afterHeadAwaitingFirstBodyRow = true\n      lastTableEnd = index\n    } else if (\n      token.type === 'tableRow' ||\n      token.type === 'tableDelimiterRow'\n    ) {\n      lastTableEnd = index\n      if (lastCell[1] !== 0) {\n        cell[0] = cell[1]\n        currentCell = flushCell(\n          map,\n          context,\n          lastCell,\n          rowKind,\n          index,\n          currentCell\n        )\n      } else if (cell[1] !== 0) {\n        currentCell = flushCell(map, context, cell, rowKind, index, currentCell)\n      }\n      rowKind = 0\n    } else if (\n      rowKind &&\n      (token.type === 'data' ||\n        token.type === 'tableDelimiterMarker' ||\n        token.type === 'tableDelimiterFiller')\n    ) {\n      cell[3] = index\n    }\n  }\n  if (lastTableEnd !== 0) {\n    flushTableEnd(map, context, lastTableEnd, currentTable, currentBody)\n  }\n  map.consume(context.events)\n\n  // To do: move this into `html`, when events are exposed there.\n  // That\u2019s what `markdown-rs` does.\n  // That needs updates to `mdast-util-gfm-table`.\n  index = -1\n  while (++index < context.events.length) {\n    const event = context.events[index]\n    if (event[0] === 'enter' && event[1].type === 'table') {\n      event[1]._align = gfmTableAlign(context.events, index)\n    }\n  }\n  return events\n}\n\n/// Generate a cell.\n/**\n *\n * @param {EditMap} map\n * @param {TokenizeContext} context\n * @param {Range} range\n * @param {RowKind} rowKind\n * @param {number | undefined} rowEnd\n * @param {Token | undefined} previousCell\n * @returns {Token | undefined}\n */\n// eslint-disable-next-line max-params\nfunction flushCell(map, context, range, rowKind, rowEnd, previousCell) {\n  // `markdown-rs` uses:\n  // rowKind === 2 ? 'tableDelimiterCell' : 'tableCell'\n  const groupName =\n    rowKind === 1\n      ? 'tableHeader'\n      : rowKind === 2\n      ? 'tableDelimiter'\n      : 'tableData'\n  // `markdown-rs` uses:\n  // rowKind === 2 ? 'tableDelimiterCellValue' : 'tableCellText'\n  const valueName = 'tableContent'\n\n  // Insert an exit for the previous cell, if there is one.\n  //\n  // ```markdown\n  // > | | aa | bb | cc |\n  //          ^-- exit\n  //           ^^^^-- this cell\n  // ```\n  if (range[0] !== 0) {\n    previousCell.end = Object.assign({}, getPoint(context.events, range[0]))\n    map.add(range[0], 0, [['exit', previousCell, context]])\n  }\n\n  // Insert enter of this cell.\n  //\n  // ```markdown\n  // > | | aa | bb | cc |\n  //           ^-- enter\n  //           ^^^^-- this cell\n  // ```\n  const now = getPoint(context.events, range[1])\n  previousCell = {\n    type: groupName,\n    start: Object.assign({}, now),\n    // Note: correct end is set later.\n    end: Object.assign({}, now)\n  }\n  map.add(range[1], 0, [['enter', previousCell, context]])\n\n  // Insert text start at first data start and end at last data end, and\n  // remove events between.\n  //\n  // ```markdown\n  // > | | aa | bb | cc |\n  //            ^-- enter\n  //             ^-- exit\n  //           ^^^^-- this cell\n  // ```\n  if (range[2] !== 0) {\n    const relatedStart = getPoint(context.events, range[2])\n    const relatedEnd = getPoint(context.events, range[3])\n    /** @type {Token} */\n    const valueToken = {\n      type: valueName,\n      start: Object.assign({}, relatedStart),\n      end: Object.assign({}, relatedEnd)\n    }\n    map.add(range[2], 0, [['enter', valueToken, context]])\n    if (rowKind !== 2) {\n      // Fix positional info on remaining events\n      const start = context.events[range[2]]\n      const end = context.events[range[3]]\n      start[1].end = Object.assign({}, end[1].end)\n      start[1].type = 'chunkText'\n      start[1].contentType = 'text'\n\n      // Remove if needed.\n      if (range[3] > range[2] + 1) {\n        const a = range[2] + 1\n        const b = range[3] - range[2] - 1\n        map.add(a, b, [])\n      }\n    }\n    map.add(range[3] + 1, 0, [['exit', valueToken, context]])\n  }\n\n  // Insert an exit for the last cell, if at the row end.\n  //\n  // ```markdown\n  // > | | aa | bb | cc |\n  //                    ^-- exit\n  //               ^^^^^^-- this cell (the last one contains two \u201Cbetween\u201D parts)\n  // ```\n  if (rowEnd !== undefined) {\n    previousCell.end = Object.assign({}, getPoint(context.events, rowEnd))\n    map.add(rowEnd, 0, [['exit', previousCell, context]])\n    previousCell = undefined\n  }\n  return previousCell\n}\n\n/**\n * Generate table end (and table body end).\n *\n * @param {EditMap} map\n * @param {TokenizeContext} context\n * @param {number} index\n * @param {Token} table\n * @param {Token | undefined} tableBody\n */\n// eslint-disable-next-line max-params\nfunction flushTableEnd(map, context, index, table, tableBody) {\n  /** @type {Array<Event>} */\n  const exits = []\n  const related = getPoint(context.events, index)\n  if (tableBody) {\n    tableBody.end = Object.assign({}, related)\n    exits.push(['exit', tableBody, context])\n  }\n  table.end = Object.assign({}, related)\n  exits.push(['exit', table, context])\n  map.add(index + 1, 0, exits)\n}\n\n/**\n * @param {Array<Event>} events\n * @param {number} index\n * @returns {readonly Point}\n */\nfunction getPoint(events, index) {\n  const event = events[index]\n  const side = event[0] === 'enter' ? 'start' : 'end'\n  return event[1][side]\n}\n", "/**\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {\n  markdownLineEndingOrSpace,\n  markdownLineEnding,\n  markdownSpace\n} from 'micromark-util-character'\nconst tasklistCheck = {\n  tokenize: tokenizeTasklistCheck\n}\n\n// To do: next major: expose function to make extension.\n\n/**\n * Extension for `micromark` that can be passed in `extensions`, to\n * enable GFM task list items syntax.\n *\n * @type {Extension}\n */\nexport const gfmTaskListItem = {\n  text: {\n    [91]: tasklistCheck\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTasklistCheck(effects, ok, nok) {\n  const self = this\n  return open\n\n  /**\n   * At start of task list item check.\n   *\n   * ```markdown\n   * > | * [x] y.\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (\n      // Exit if there\u2019s stuff before.\n      self.previous !== null ||\n      // Exit if not in the first content that is the first child of a list\n      // item.\n      !self._gfmTasklistFirstContentOfListItem\n    ) {\n      return nok(code)\n    }\n    effects.enter('taskListCheck')\n    effects.enter('taskListCheckMarker')\n    effects.consume(code)\n    effects.exit('taskListCheckMarker')\n    return inside\n  }\n\n  /**\n   * In task list item check.\n   *\n   * ```markdown\n   * > | * [x] y.\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    // Currently we match how GH works in files.\n    // To match how GH works in comments, use `markdownSpace` (`[\\t ]`) instead\n    // of `markdownLineEndingOrSpace` (`[\\t\\n\\r ]`).\n    if (markdownLineEndingOrSpace(code)) {\n      effects.enter('taskListCheckValueUnchecked')\n      effects.consume(code)\n      effects.exit('taskListCheckValueUnchecked')\n      return close\n    }\n    if (code === 88 || code === 120) {\n      effects.enter('taskListCheckValueChecked')\n      effects.consume(code)\n      effects.exit('taskListCheckValueChecked')\n      return close\n    }\n    return nok(code)\n  }\n\n  /**\n   * At close of task list item check.\n   *\n   * ```markdown\n   * > | * [x] y.\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function close(code) {\n    if (code === 93) {\n      effects.enter('taskListCheckMarker')\n      effects.consume(code)\n      effects.exit('taskListCheckMarker')\n      effects.exit('taskListCheck')\n      return after\n    }\n    return nok(code)\n  }\n\n  /**\n   * @type {State}\n   */\n  function after(code) {\n    // EOL in paragraph means there must be something else after it.\n    if (markdownLineEnding(code)) {\n      return ok(code)\n    }\n\n    // Space or tab?\n    // Check what comes after.\n    if (markdownSpace(code)) {\n      return effects.check(\n        {\n          tokenize: spaceThenNonSpace\n        },\n        ok,\n        nok\n      )(code)\n    }\n\n    // EOF, or non-whitespace, both wrong.\n    return nok(code)\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction spaceThenNonSpace(effects, ok, nok) {\n  return factorySpace(effects, after, 'whitespace')\n\n  /**\n   * After whitespace, after task list item check.\n   *\n   * ```markdown\n   * > | * [x] y.\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    // EOF means there was nothing, so bad.\n    // EOL means there\u2019s content after it, so good.\n    // Impossible to have more spaces.\n    // Anything else is good.\n    return code === null ? nok(code) : ok(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-extension-gfm-footnote').HtmlOptions} HtmlOptions\n * @typedef {import('micromark-extension-gfm-strikethrough').Options} Options\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension\n */\n\nimport {\n  combineExtensions,\n  combineHtmlExtensions\n} from 'micromark-util-combine-extensions'\nimport {\n  gfmAutolinkLiteral,\n  gfmAutolinkLiteralHtml\n} from 'micromark-extension-gfm-autolink-literal'\nimport {gfmFootnote, gfmFootnoteHtml} from 'micromark-extension-gfm-footnote'\nimport {\n  gfmStrikethrough,\n  gfmStrikethroughHtml\n} from 'micromark-extension-gfm-strikethrough'\nimport {gfmTable, gfmTableHtml} from 'micromark-extension-gfm-table'\nimport {gfmTagfilterHtml} from 'micromark-extension-gfm-tagfilter'\nimport {\n  gfmTaskListItem,\n  gfmTaskListItemHtml\n} from 'micromark-extension-gfm-task-list-item'\n\n/**\n * Create an extension for `micromark` to enable GFM syntax.\n *\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n *\n *   Passed to `micromark-extens-gfm-strikethrough`.\n * @returns {Extension}\n *   Extension for `micromark` that can be passed in `extensions` to enable GFM\n *   syntax.\n */\nexport function gfm(options) {\n  return combineExtensions([\n    gfmAutolinkLiteral,\n    gfmFootnote(),\n    gfmStrikethrough(options),\n    gfmTable,\n    gfmTaskListItem\n  ])\n}\n\n/**\n * Create an extension for `micromark` to support GFM when serializing to HTML.\n *\n * @param {HtmlOptions | null | undefined} [options]\n *   Configuration.\n *\n *   Passed to `micromark-extens-gfm-footnote`.\n * @returns {HtmlExtension}\n *   Extension for `micromark` that can be passed in `htmlExtensions` to\n *   support GFM when serializing to HTML.\n */\nexport function gfmHtml(options) {\n  return combineHtmlExtensions([\n    gfmAutolinkLiteralHtml,\n    gfmFootnoteHtml(options),\n    gfmStrikethroughHtml,\n    gfmTableHtml,\n    gfmTagfilterHtml,\n    gfmTaskListItemHtml\n  ])\n}\n", "/**\n * Count how often a character (or substring) is used in a string.\n *\n * @param {string} value\n *   Value to search in.\n * @param {string} character\n *   Character (or substring) to look for.\n * @return {number}\n *   Number of times `character` occurred in `value`.\n */\nexport function ccount(value, character) {\n  const source = String(value)\n\n  if (typeof character !== 'string') {\n    throw new TypeError('Expected character')\n  }\n\n  let count = 0\n  let index = source.indexOf(character)\n\n  while (index !== -1) {\n    count++\n    index = source.indexOf(character, index + character.length)\n  }\n\n  return count\n}\n", "export default function escapeStringRegexp(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\t// Escape characters with special meaning either inside or outside character sets.\n\t// Use a simple backslash escape when it\u2019s always valid, and a `\\xnn` escape when the simpler form would be disallowed by Unicode patterns\u2019 stricter grammar.\n\treturn string\n\t\t.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n\t\t.replace(/-/g, '\\\\x2d');\n}\n", "/**\n * @typedef {import('mdast').Parent} MdastParent\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast').Content} Content\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n * @typedef {import('mdast').Text} Text\n * @typedef {import('unist-util-visit-parents').Test} Test\n * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult\n */\n\n/**\n * @typedef {Content | Root} Node\n * @typedef {Extract<Node, MdastParent>} Parent\n * @typedef {Exclude<Parent, Root>} ContentParent\n *\n * @typedef RegExpMatchObject\n *   Info on the match.\n * @property {number} index\n *   The index of the search at which the result was found.\n * @property {string} input\n *   A copy of the search string in the text node.\n * @property {[Root, ...Array<ContentParent>, Text]} stack\n *   All ancestors of the text node, where the last node is the text itself.\n *\n * @callback ReplaceFunction\n *   Callback called when a search matches.\n * @param {...any} parameters\n *   The parameters are the result of corresponding search expression:\n *\n *   * `value` (`string`) \u2014 whole match\n *   * `...capture` (`Array<string>`) \u2014 matches from regex capture groups\n *   * `match` (`RegExpMatchObject`) \u2014 info on the match\n * @returns {Array<PhrasingContent> | PhrasingContent | string | false | undefined | null}\n *   Thing to replace with.\n *\n *   * when `null`, `undefined`, `''`, remove the match\n *   * \u2026or when `false`, do not replace at all\n *   * \u2026or when `string`, replace with a text node of that value\n *   * \u2026or when `Node` or `Array<Node>`, replace with those nodes\n *\n * @typedef {string | RegExp} Find\n *   Pattern to find.\n *\n *   Strings are escaped and then turned into global expressions.\n *\n * @typedef {Array<FindAndReplaceTuple>} FindAndReplaceList\n *   Several find and replaces, in array form.\n * @typedef {Record<string, Replace>} FindAndReplaceSchema\n *   Several find and replaces, in object form.\n * @typedef {[Find, Replace]} FindAndReplaceTuple\n *   Find and replace in tuple form.\n * @typedef {string | ReplaceFunction} Replace\n *   Thing to replace with.\n * @typedef {[RegExp, ReplaceFunction]} Pair\n *   Normalized find and replace.\n * @typedef {Array<Pair>} Pairs\n *   All find and replaced.\n *\n * @typedef Options\n *   Configuration.\n * @property {Test | null | undefined} [ignore]\n *   Test for which nodes to ignore.\n */\n\nimport escape from 'escape-string-regexp'\nimport {visitParents} from 'unist-util-visit-parents'\nimport {convert} from 'unist-util-is'\n\nconst own = {}.hasOwnProperty\n\n/**\n * Find patterns in a tree and replace them.\n *\n * The algorithm searches the tree in *preorder* for complete values in `Text`\n * nodes.\n * Partial matches are not supported.\n *\n * @param tree\n *   Tree to change.\n * @param find\n *   Patterns to find.\n * @param replace\n *   Things to replace with (when `find` is `Find`) or configuration.\n * @param options\n *   Configuration (when `find` is not `Find`).\n * @returns\n *   Given, modified, tree.\n */\n// To do: next major: remove `find` & `replace` combo, remove schema.\nexport const findAndReplace =\n  /**\n   * @type {(\n   *   (<Tree extends Node>(tree: Tree, find: Find, replace?: Replace | null | undefined, options?: Options | null | undefined) => Tree) &\n   *   (<Tree extends Node>(tree: Tree, schema: FindAndReplaceSchema | FindAndReplaceList, options?: Options | null | undefined) => Tree)\n   * )}\n   **/\n  (\n    /**\n     * @template {Node} Tree\n     * @param {Tree} tree\n     * @param {Find | FindAndReplaceSchema | FindAndReplaceList} find\n     * @param {Replace | Options | null | undefined} [replace]\n     * @param {Options | null | undefined} [options]\n     * @returns {Tree}\n     */\n    function (tree, find, replace, options) {\n      /** @type {Options | null | undefined} */\n      let settings\n      /** @type {FindAndReplaceSchema|FindAndReplaceList} */\n      let schema\n\n      if (typeof find === 'string' || find instanceof RegExp) {\n        // @ts-expect-error don\u2019t expect options twice.\n        schema = [[find, replace]]\n        settings = options\n      } else {\n        schema = find\n        // @ts-expect-error don\u2019t expect replace twice.\n        settings = replace\n      }\n\n      if (!settings) {\n        settings = {}\n      }\n\n      const ignored = convert(settings.ignore || [])\n      const pairs = toPairs(schema)\n      let pairIndex = -1\n\n      while (++pairIndex < pairs.length) {\n        visitParents(tree, 'text', visitor)\n      }\n\n      // To do next major: don\u2019t return the given tree.\n      return tree\n\n      /** @type {import('unist-util-visit-parents/complex-types.js').BuildVisitor<Root, 'text'>} */\n      function visitor(node, parents) {\n        let index = -1\n        /** @type {Parent | undefined} */\n        let grandparent\n\n        while (++index < parents.length) {\n          const parent = parents[index]\n\n          if (\n            ignored(\n              parent,\n              // @ts-expect-error: TS doesn\u2019t understand but it\u2019s perfect.\n              grandparent ? grandparent.children.indexOf(parent) : undefined,\n              grandparent\n            )\n          ) {\n            return\n          }\n\n          grandparent = parent\n        }\n\n        if (grandparent) {\n          return handler(node, parents)\n        }\n      }\n\n      /**\n       * Handle a text node which is not in an ignored parent.\n       *\n       * @param {Text} node\n       *   Text node.\n       * @param {Array<Parent>} parents\n       *   Parents.\n       * @returns {VisitorResult}\n       *   Result.\n       */\n      function handler(node, parents) {\n        const parent = parents[parents.length - 1]\n        const find = pairs[pairIndex][0]\n        const replace = pairs[pairIndex][1]\n        let start = 0\n        // @ts-expect-error: TS is wrong, some of these children can be text.\n        const index = parent.children.indexOf(node)\n        let change = false\n        /** @type {Array<PhrasingContent>} */\n        let nodes = []\n\n        find.lastIndex = 0\n\n        let match = find.exec(node.value)\n\n        while (match) {\n          const position = match.index\n          /** @type {RegExpMatchObject} */\n          const matchObject = {\n            index: match.index,\n            input: match.input,\n            // @ts-expect-error: stack is fine.\n            stack: [...parents, node]\n          }\n          let value = replace(...match, matchObject)\n\n          if (typeof value === 'string') {\n            value = value.length > 0 ? {type: 'text', value} : undefined\n          }\n\n          // It wasn\u2019t a match after all.\n          if (value !== false) {\n            if (start !== position) {\n              nodes.push({\n                type: 'text',\n                value: node.value.slice(start, position)\n              })\n            }\n\n            if (Array.isArray(value)) {\n              nodes.push(...value)\n            } else if (value) {\n              nodes.push(value)\n            }\n\n            start = position + match[0].length\n            change = true\n          }\n\n          if (!find.global) {\n            break\n          }\n\n          match = find.exec(node.value)\n        }\n\n        if (change) {\n          if (start < node.value.length) {\n            nodes.push({type: 'text', value: node.value.slice(start)})\n          }\n\n          parent.children.splice(index, 1, ...nodes)\n        } else {\n          nodes = [node]\n        }\n\n        return index + nodes.length\n      }\n    }\n  )\n\n/**\n * Turn a schema into pairs.\n *\n * @param {FindAndReplaceSchema | FindAndReplaceList} schema\n *   Schema.\n * @returns {Pairs}\n *   Clean pairs.\n */\nfunction toPairs(schema) {\n  /** @type {Pairs} */\n  const result = []\n\n  if (typeof schema !== 'object') {\n    throw new TypeError('Expected array or object as schema')\n  }\n\n  if (Array.isArray(schema)) {\n    let index = -1\n\n    while (++index < schema.length) {\n      result.push([\n        toExpression(schema[index][0]),\n        toFunction(schema[index][1])\n      ])\n    }\n  } else {\n    /** @type {string} */\n    let key\n\n    for (key in schema) {\n      if (own.call(schema, key)) {\n        result.push([toExpression(key), toFunction(schema[key])])\n      }\n    }\n  }\n\n  return result\n}\n\n/**\n * Turn a find into an expression.\n *\n * @param {Find} find\n *   Find.\n * @returns {RegExp}\n *   Expression.\n */\nfunction toExpression(find) {\n  return typeof find === 'string' ? new RegExp(escape(find), 'g') : find\n}\n\n/**\n * Turn a replace into a function.\n *\n * @param {Replace} replace\n *   Replace.\n * @returns {ReplaceFunction}\n *   Function.\n */\nfunction toFunction(replace) {\n  return typeof replace === 'function' ? replace : () => replace\n}\n", "/**\n * @typedef {import('mdast').Link} Link\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n *\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n * @typedef {import('mdast-util-from-markdown').Transform} FromMarkdownTransform\n *\n * @typedef {import('mdast-util-to-markdown').ConstructName} ConstructName\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n *\n * @typedef {import('mdast-util-find-and-replace').ReplaceFunction} ReplaceFunction\n * @typedef {import('mdast-util-find-and-replace').RegExpMatchObject} RegExpMatchObject\n */\n\nimport {ccount} from 'ccount'\nimport {findAndReplace} from 'mdast-util-find-and-replace'\nimport {unicodePunctuation, unicodeWhitespace} from 'micromark-util-character'\n\n/** @type {ConstructName} */\nconst inConstruct = 'phrasing'\n/** @type {Array<ConstructName>} */\nconst notInConstruct = ['autolink', 'link', 'image', 'label']\n\n// To do: next major: expose functions instead of extensions.\n\n/**\n * Extension for `mdast-util-from-markdown` to enable GFM autolink literals.\n *\n * @type {FromMarkdownExtension}\n */\nexport const gfmAutolinkLiteralFromMarkdown = {\n  transforms: [transformGfmAutolinkLiterals],\n  enter: {\n    literalAutolink: enterLiteralAutolink,\n    literalAutolinkEmail: enterLiteralAutolinkValue,\n    literalAutolinkHttp: enterLiteralAutolinkValue,\n    literalAutolinkWww: enterLiteralAutolinkValue\n  },\n  exit: {\n    literalAutolink: exitLiteralAutolink,\n    literalAutolinkEmail: exitLiteralAutolinkEmail,\n    literalAutolinkHttp: exitLiteralAutolinkHttp,\n    literalAutolinkWww: exitLiteralAutolinkWww\n  }\n}\n\n/**\n * Extension for `mdast-util-to-markdown` to enable GFM autolink literals.\n *\n * @type {ToMarkdownExtension}\n */\nexport const gfmAutolinkLiteralToMarkdown = {\n  unsafe: [\n    {\n      character: '@',\n      before: '[+\\\\-.\\\\w]',\n      after: '[\\\\-.\\\\w]',\n      inConstruct,\n      notInConstruct\n    },\n    {\n      character: '.',\n      before: '[Ww]',\n      after: '[\\\\-.\\\\w]',\n      inConstruct,\n      notInConstruct\n    },\n    {character: ':', before: '[ps]', after: '\\\\/', inConstruct, notInConstruct}\n  ]\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterLiteralAutolink(token) {\n  this.enter({type: 'link', title: null, url: '', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterLiteralAutolinkValue(token) {\n  this.config.enter.autolinkProtocol.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkHttp(token) {\n  this.config.exit.autolinkProtocol.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkWww(token) {\n  this.config.exit.data.call(this, token)\n  const node = /** @type {Link} */ (this.stack[this.stack.length - 1])\n  node.url = 'http://' + this.sliceSerialize(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkEmail(token) {\n  this.config.exit.autolinkEmail.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolink(token) {\n  this.exit(token)\n}\n\n/** @type {FromMarkdownTransform} */\nfunction transformGfmAutolinkLiterals(tree) {\n  findAndReplace(\n    tree,\n    [\n      [/(https?:\\/\\/|www(?=\\.))([-.\\w]+)([^ \\t\\r\\n]*)/gi, findUrl],\n      [/([-.\\w+]+)@([-\\w]+(?:\\.[-\\w]+)+)/g, findEmail]\n    ],\n    {ignore: ['link', 'linkReference']}\n  )\n}\n\n/**\n * @type {ReplaceFunction}\n * @param {string} _\n * @param {string} protocol\n * @param {string} domain\n * @param {string} path\n * @param {RegExpMatchObject} match\n * @returns {Link | Array<PhrasingContent> | false}\n */\n// eslint-disable-next-line max-params\nfunction findUrl(_, protocol, domain, path, match) {\n  let prefix = ''\n\n  // Not an expected previous character.\n  if (!previous(match)) {\n    return false\n  }\n\n  // Treat `www` as part of the domain.\n  if (/^w/i.test(protocol)) {\n    domain = protocol + domain\n    protocol = ''\n    prefix = 'http://'\n  }\n\n  if (!isCorrectDomain(domain)) {\n    return false\n  }\n\n  const parts = splitUrl(domain + path)\n\n  if (!parts[0]) return false\n\n  /** @type {Link} */\n  const result = {\n    type: 'link',\n    title: null,\n    url: prefix + protocol + parts[0],\n    children: [{type: 'text', value: protocol + parts[0]}]\n  }\n\n  if (parts[1]) {\n    return [result, {type: 'text', value: parts[1]}]\n  }\n\n  return result\n}\n\n/**\n * @type {ReplaceFunction}\n * @param {string} _\n * @param {string} atext\n * @param {string} label\n * @param {RegExpMatchObject} match\n * @returns {Link | false}\n */\nfunction findEmail(_, atext, label, match) {\n  if (\n    // Not an expected previous character.\n    !previous(match, true) ||\n    // Label ends in not allowed character.\n    /[-\\d_]$/.test(label)\n  ) {\n    return false\n  }\n\n  return {\n    type: 'link',\n    title: null,\n    url: 'mailto:' + atext + '@' + label,\n    children: [{type: 'text', value: atext + '@' + label}]\n  }\n}\n\n/**\n * @param {string} domain\n * @returns {boolean}\n */\nfunction isCorrectDomain(domain) {\n  const parts = domain.split('.')\n\n  if (\n    parts.length < 2 ||\n    (parts[parts.length - 1] &&\n      (/_/.test(parts[parts.length - 1]) ||\n        !/[a-zA-Z\\d]/.test(parts[parts.length - 1]))) ||\n    (parts[parts.length - 2] &&\n      (/_/.test(parts[parts.length - 2]) ||\n        !/[a-zA-Z\\d]/.test(parts[parts.length - 2])))\n  ) {\n    return false\n  }\n\n  return true\n}\n\n/**\n * @param {string} url\n * @returns {[string, string | undefined]}\n */\nfunction splitUrl(url) {\n  const trailExec = /[!\"&'),.:;<>?\\]}]+$/.exec(url)\n\n  if (!trailExec) {\n    return [url, undefined]\n  }\n\n  url = url.slice(0, trailExec.index)\n\n  let trail = trailExec[0]\n  let closingParenIndex = trail.indexOf(')')\n  const openingParens = ccount(url, '(')\n  let closingParens = ccount(url, ')')\n\n  while (closingParenIndex !== -1 && openingParens > closingParens) {\n    url += trail.slice(0, closingParenIndex + 1)\n    trail = trail.slice(closingParenIndex + 1)\n    closingParenIndex = trail.indexOf(')')\n    closingParens++\n  }\n\n  return [url, trail]\n}\n\n/**\n * @param {RegExpMatchObject} match\n * @param {boolean | null | undefined} [email=false]\n * @returns {boolean}\n */\nfunction previous(match, email) {\n  const code = match.input.charCodeAt(match.index - 1)\n\n  return (\n    (match.index === 0 ||\n      unicodeWhitespace(code) ||\n      unicodePunctuation(code)) &&\n    (!email || code !== 47)\n  )\n}\n", "/**\n * @typedef {import('../types.js').AssociationId} AssociationId\n */\n\nimport {decodeString} from 'micromark-util-decode-string'\n\n/**\n * Get an identifier from an association to match it to others.\n *\n * Associations are nodes that match to something else through an ID:\n * <https://github.com/syntax-tree/mdast#association>.\n *\n * The `label` of an association is the string value: character escapes and\n * references work, and casing is intact.\n * The `identifier` is used to match one association to another:\n * controversially, character escapes and references don\u2019t work in this\n * matching: `&copy;` does not match `\u00A9`, and `\\+` does not match `+`.\n *\n * But casing is ignored (and whitespace) is trimmed and collapsed: ` A\\nb`\n * matches `a b`.\n * So, we do prefer the label when figuring out how we\u2019re going to serialize:\n * it has whitespace, casing, and we can ignore most useless character\n * escapes and all character references.\n *\n * @type {AssociationId}\n */\nexport function association(node) {\n  if (node.label || !node.identifier) {\n    return node.label || ''\n  }\n\n  return decodeString(node.identifier)\n}\n", "/**\n * @typedef {import('../types.js').FlowContent} FlowContent\n * @typedef {import('../types.js').Node} Node\n * @typedef {import('../types.js').Parent} Parent\n * @typedef {import('../types.js').State} State\n * @typedef {import('../types.js').TrackFields} TrackFields\n */\n\n/**\n * @param {Parent & {children: Array<FlowContent>}} parent\n *   Parent of flow nodes.\n * @param {State} state\n *   Info passed around about the current state.\n * @param {TrackFields} info\n *   Info on where we are in the document we are generating.\n * @returns {string}\n *   Serialized children, joined by (blank) lines.\n */\nexport function containerFlow(parent, state, info) {\n  const indexStack = state.indexStack\n  const children = parent.children || []\n  const tracker = state.createTracker(info)\n  /** @type {Array<string>} */\n  const results = []\n  let index = -1\n\n  indexStack.push(-1)\n\n  while (++index < children.length) {\n    const child = children[index]\n\n    indexStack[indexStack.length - 1] = index\n\n    results.push(\n      tracker.move(\n        state.handle(child, parent, state, {\n          before: '\\n',\n          after: '\\n',\n          ...tracker.current()\n        })\n      )\n    )\n\n    if (child.type !== 'list') {\n      state.bulletLastUsed = undefined\n    }\n\n    if (index < children.length - 1) {\n      results.push(\n        tracker.move(between(child, children[index + 1], parent, state))\n      )\n    }\n  }\n\n  indexStack.pop()\n\n  return results.join('')\n}\n\n/**\n * @param {Node} left\n * @param {Node} right\n * @param {Parent} parent\n * @param {State} state\n * @returns {string}\n */\nfunction between(left, right, parent, state) {\n  let index = state.join.length\n\n  while (index--) {\n    const result = state.join[index](left, right, parent, state)\n\n    if (result === true || result === 1) {\n      break\n    }\n\n    if (typeof result === 'number') {\n      return '\\n'.repeat(1 + result)\n    }\n\n    if (result === false) {\n      return '\\n\\n<!---->\\n\\n'\n    }\n  }\n\n  return '\\n\\n'\n}\n", "/**\n * @typedef {import('../types.js').IndentLines} IndentLines\n */\n\nconst eol = /\\r?\\n|\\r/g\n\n/**\n * @type {IndentLines}\n */\nexport function indentLines(value, map) {\n  /** @type {Array<string>} */\n  const result = []\n  let start = 0\n  let line = 0\n  /** @type {RegExpExecArray | null} */\n  let match\n\n  while ((match = eol.exec(value))) {\n    one(value.slice(start, match.index))\n    result.push(match[0])\n    start = match.index + match[0].length\n    line++\n  }\n\n  one(value.slice(start))\n\n  return result.join('')\n\n  /**\n   * @param {string} value\n   */\n  function one(value) {\n    result.push(map(value, line, !value))\n  }\n}\n", "/**\n * @typedef {import('../types.js').Unsafe} Unsafe\n */\n\n/**\n * @param {Unsafe} pattern\n * @returns {RegExp}\n */\nexport function patternCompile(pattern) {\n  if (!pattern._compiled) {\n    const before =\n      (pattern.atBreak ? '[\\\\r\\\\n][\\\\t ]*' : '') +\n      (pattern.before ? '(?:' + pattern.before + ')' : '')\n\n    pattern._compiled = new RegExp(\n      (before ? '(' + before + ')' : '') +\n        (/[|\\\\{}()[\\]^$+*?.-]/.test(pattern.character) ? '\\\\' : '') +\n        pattern.character +\n        (pattern.after ? '(?:' + pattern.after + ')' : ''),\n      'g'\n    )\n  }\n\n  return pattern._compiled\n}\n", "/**\n * @typedef {import('../types.js').Unsafe} Unsafe\n * @typedef {import('../types.js').ConstructName} ConstructName\n */\n\n/**\n * @param {Array<ConstructName>} stack\n * @param {Unsafe} pattern\n * @returns {boolean}\n */\nexport function patternInScope(stack, pattern) {\n  return (\n    listInScope(stack, pattern.inConstruct, true) &&\n    !listInScope(stack, pattern.notInConstruct, false)\n  )\n}\n\n/**\n * @param {Array<ConstructName>} stack\n * @param {Unsafe['inConstruct']} list\n * @param {boolean} none\n * @returns {boolean}\n */\nfunction listInScope(stack, list, none) {\n  if (typeof list === 'string') {\n    list = [list]\n  }\n\n  if (!list || list.length === 0) {\n    return none\n  }\n\n  let index = -1\n\n  while (++index < list.length) {\n    if (stack.includes(list[index])) {\n      return true\n    }\n  }\n\n  return false\n}\n", "/**\n * @typedef {import('../types.js').State} State\n * @typedef {import('../types.js').SafeConfig} SafeConfig\n */\n\nimport {patternCompile} from './pattern-compile.js'\nimport {patternInScope} from './pattern-in-scope.js'\n\n/**\n * Make a string safe for embedding in markdown constructs.\n *\n * In markdown, almost all punctuation characters can, in certain cases,\n * result in something.\n * Whether they do is highly subjective to where they happen and in what\n * they happen.\n *\n * To solve this, `mdast-util-to-markdown` tracks:\n *\n * * Characters before and after something;\n * * What \u201Cconstructs\u201D we are in.\n *\n * This information is then used by this function to escape or encode\n * special characters.\n *\n * @param {State} state\n *   Info passed around about the current state.\n * @param {string | null | undefined} input\n *   Raw value to make safe.\n * @param {SafeConfig} config\n *   Configuration.\n * @returns {string}\n *   Serialized markdown safe for embedding.\n */\nexport function safe(state, input, config) {\n  const value = (config.before || '') + (input || '') + (config.after || '')\n  /** @type {Array<number>} */\n  const positions = []\n  /** @type {Array<string>} */\n  const result = []\n  /** @type {Record<number, {before: boolean, after: boolean}>} */\n  const infos = {}\n  let index = -1\n\n  while (++index < state.unsafe.length) {\n    const pattern = state.unsafe[index]\n\n    if (!patternInScope(state.stack, pattern)) {\n      continue\n    }\n\n    const expression = patternCompile(pattern)\n    /** @type {RegExpExecArray | null} */\n    let match\n\n    while ((match = expression.exec(value))) {\n      const before = 'before' in pattern || Boolean(pattern.atBreak)\n      const after = 'after' in pattern\n      const position = match.index + (before ? match[1].length : 0)\n\n      if (positions.includes(position)) {\n        if (infos[position].before && !before) {\n          infos[position].before = false\n        }\n\n        if (infos[position].after && !after) {\n          infos[position].after = false\n        }\n      } else {\n        positions.push(position)\n        infos[position] = {before, after}\n      }\n    }\n  }\n\n  positions.sort(numerical)\n\n  let start = config.before ? config.before.length : 0\n  const end = value.length - (config.after ? config.after.length : 0)\n  index = -1\n\n  while (++index < positions.length) {\n    const position = positions[index]\n\n    // Character before or after matched:\n    if (position < start || position >= end) {\n      continue\n    }\n\n    // If this character is supposed to be escaped because it has a condition on\n    // the next character, and the next character is definitly being escaped,\n    // then skip this escape.\n    if (\n      (position + 1 < end &&\n        positions[index + 1] === position + 1 &&\n        infos[position].after &&\n        !infos[position + 1].before &&\n        !infos[position + 1].after) ||\n      (positions[index - 1] === position - 1 &&\n        infos[position].before &&\n        !infos[position - 1].before &&\n        !infos[position - 1].after)\n    ) {\n      continue\n    }\n\n    if (start !== position) {\n      // If we have to use a character reference, an ampersand would be more\n      // correct, but as backslashes only care about punctuation, either will\n      // do the trick\n      result.push(escapeBackslashes(value.slice(start, position), '\\\\'))\n    }\n\n    start = position\n\n    if (\n      /[!-/:-@[-`{-~]/.test(value.charAt(position)) &&\n      (!config.encode || !config.encode.includes(value.charAt(position)))\n    ) {\n      // Character escape.\n      result.push('\\\\')\n    } else {\n      // Character reference.\n      result.push(\n        '&#x' + value.charCodeAt(position).toString(16).toUpperCase() + ';'\n      )\n      start++\n    }\n  }\n\n  result.push(escapeBackslashes(value.slice(start, end), config.after))\n\n  return result.join('')\n}\n\n/**\n * @param {number} a\n * @param {number} b\n * @returns {number}\n */\nfunction numerical(a, b) {\n  return a - b\n}\n\n/**\n * @param {string} value\n * @param {string} after\n * @returns {string}\n */\nfunction escapeBackslashes(value, after) {\n  const expression = /\\\\(?=[!-/:-@[-`{-~])/g\n  /** @type {Array<number>} */\n  const positions = []\n  /** @type {Array<string>} */\n  const results = []\n  const whole = value + after\n  let index = -1\n  let start = 0\n  /** @type {RegExpExecArray | null} */\n  let match\n\n  while ((match = expression.exec(whole))) {\n    positions.push(match.index)\n  }\n\n  while (++index < positions.length) {\n    if (start !== positions[index]) {\n      results.push(value.slice(start, positions[index]))\n    }\n\n    results.push('\\\\')\n    start = positions[index]\n  }\n\n  results.push(value.slice(start))\n\n  return results.join('')\n}\n", "/**\n * @typedef {import('../types.js').CreateTracker} CreateTracker\n * @typedef {import('../types.js').TrackCurrent} TrackCurrent\n * @typedef {import('../types.js').TrackMove} TrackMove\n * @typedef {import('../types.js').TrackShift} TrackShift\n */\n\n/**\n * Track positional info in the output.\n *\n * @type {CreateTracker}\n */\nexport function track(config) {\n  // Defaults are used to prevent crashes when older utilities somehow activate\n  // this code.\n  /* c8 ignore next 5 */\n  const options = config || {}\n  const now = options.now || {}\n  let lineShift = options.lineShift || 0\n  let line = now.line || 1\n  let column = now.column || 1\n\n  return {move, current, shift}\n\n  /**\n   * Get the current tracked info.\n   *\n   * @type {TrackCurrent}\n   */\n  function current() {\n    return {now: {line, column}, lineShift}\n  }\n\n  /**\n   * Define an increased line shift (the typical indent for lines).\n   *\n   * @type {TrackShift}\n   */\n  function shift(value) {\n    lineShift += value\n  }\n\n  /**\n   * Move past some generated markdown.\n   *\n   * @type {TrackMove}\n   */\n  function move(input) {\n    // eslint-disable-next-line unicorn/prefer-default-parameters\n    const value = input || ''\n    const chunks = value.split(/\\r?\\n|\\r/g)\n    const tail = chunks[chunks.length - 1]\n    line += chunks.length - 1\n    column =\n      chunks.length === 1 ? column + tail.length : 1 + tail.length + lineShift\n    return value\n  }\n}\n", "/**\n * @typedef {import('mdast').FootnoteReference} FootnoteReference\n * @typedef {import('mdast').FootnoteDefinition} FootnoteDefinition\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Map} Map\n */\n\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\nimport {association} from 'mdast-util-to-markdown/lib/util/association.js'\nimport {containerFlow} from 'mdast-util-to-markdown/lib/util/container-flow.js'\nimport {indentLines} from 'mdast-util-to-markdown/lib/util/indent-lines.js'\nimport {safe} from 'mdast-util-to-markdown/lib/util/safe.js'\nimport {track} from 'mdast-util-to-markdown/lib/util/track.js'\n\nfootnoteReference.peek = footnoteReferencePeek\n\n// To do: next major: rename `context` -> `state`, `safeOptions` to `info`, use\n// utilities on `state`.\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM footnotes\n * in markdown.\n *\n * @returns {FromMarkdownExtension}\n *   Extension for `mdast-util-from-markdown`.\n */\nexport function gfmFootnoteFromMarkdown() {\n  return {\n    enter: {\n      gfmFootnoteDefinition: enterFootnoteDefinition,\n      gfmFootnoteDefinitionLabelString: enterFootnoteDefinitionLabelString,\n      gfmFootnoteCall: enterFootnoteCall,\n      gfmFootnoteCallString: enterFootnoteCallString\n    },\n    exit: {\n      gfmFootnoteDefinition: exitFootnoteDefinition,\n      gfmFootnoteDefinitionLabelString: exitFootnoteDefinitionLabelString,\n      gfmFootnoteCall: exitFootnoteCall,\n      gfmFootnoteCallString: exitFootnoteCallString\n    }\n  }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM footnotes\n * in markdown.\n *\n * @returns {ToMarkdownExtension}\n *   Extension for `mdast-util-to-markdown`.\n */\nexport function gfmFootnoteToMarkdown() {\n  return {\n    // This is on by default already.\n    unsafe: [{character: '[', inConstruct: ['phrasing', 'label', 'reference']}],\n    handlers: {footnoteDefinition, footnoteReference}\n  }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteDefinition(token) {\n  this.enter(\n    {type: 'footnoteDefinition', identifier: '', label: '', children: []},\n    token\n  )\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteDefinitionLabelString() {\n  this.buffer()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteDefinitionLabelString(token) {\n  const label = this.resume()\n  const node = /** @type {FootnoteDefinition} */ (\n    this.stack[this.stack.length - 1]\n  )\n  node.label = label\n  node.identifier = normalizeIdentifier(\n    this.sliceSerialize(token)\n  ).toLowerCase()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteDefinition(token) {\n  this.exit(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteCall(token) {\n  this.enter({type: 'footnoteReference', identifier: '', label: ''}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteCallString() {\n  this.buffer()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteCallString(token) {\n  const label = this.resume()\n  const node = /** @type {FootnoteDefinition} */ (\n    this.stack[this.stack.length - 1]\n  )\n  node.label = label\n  node.identifier = normalizeIdentifier(\n    this.sliceSerialize(token)\n  ).toLowerCase()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteCall(token) {\n  this.exit(token)\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {FootnoteReference} node\n */\nfunction footnoteReference(node, _, context, safeOptions) {\n  const tracker = track(safeOptions)\n  let value = tracker.move('[^')\n  const exit = context.enter('footnoteReference')\n  const subexit = context.enter('reference')\n  value += tracker.move(\n    safe(context, association(node), {\n      ...tracker.current(),\n      before: value,\n      after: ']'\n    })\n  )\n  subexit()\n  exit()\n  value += tracker.move(']')\n  return value\n}\n\n/** @type {ToMarkdownHandle} */\nfunction footnoteReferencePeek() {\n  return '['\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {FootnoteDefinition} node\n */\nfunction footnoteDefinition(node, _, context, safeOptions) {\n  const tracker = track(safeOptions)\n  let value = tracker.move('[^')\n  const exit = context.enter('footnoteDefinition')\n  const subexit = context.enter('label')\n  value += tracker.move(\n    safe(context, association(node), {\n      ...tracker.current(),\n      before: value,\n      after: ']'\n    })\n  )\n  subexit()\n  value += tracker.move(\n    ']:' + (node.children && node.children.length > 0 ? ' ' : '')\n  )\n  tracker.shift(4)\n  value += tracker.move(\n    indentLines(containerFlow(node, context, tracker.current()), map)\n  )\n  exit()\n\n  return value\n}\n\n/** @type {Map} */\nfunction map(line, index, blank) {\n  if (index === 0) {\n    return line\n  }\n\n  return (blank ? '' : '    ') + line\n}\n", "/**\n * @typedef {import('../types.js').Handle} Handle\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').Parent} Parent\n * @typedef {import('../types.js').PhrasingContent} PhrasingContent\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * Serialize the children of a parent that contains phrasing children.\n *\n * These children will be joined flush together.\n *\n * @param {Parent & {children: Array<PhrasingContent>}} parent\n *   Parent of flow nodes.\n * @param {State} state\n *   Info passed around about the current state.\n * @param {Info} info\n *   Info on where we are in the document we are generating.\n * @returns {string}\n *   Serialized children, joined together.\n */\nexport function containerPhrasing(parent, state, info) {\n  const indexStack = state.indexStack\n  const children = parent.children || []\n  /** @type {Array<string>} */\n  const results = []\n  let index = -1\n  let before = info.before\n\n  indexStack.push(-1)\n  let tracker = state.createTracker(info)\n\n  while (++index < children.length) {\n    const child = children[index]\n    /** @type {string} */\n    let after\n\n    indexStack[indexStack.length - 1] = index\n\n    if (index + 1 < children.length) {\n      /** @type {Handle} */\n      // @ts-expect-error: hush, it\u2019s actually a `zwitch`.\n      let handle = state.handle.handlers[children[index + 1].type]\n      /** @type {Handle} */\n      // @ts-expect-error: hush, it\u2019s actually a `zwitch`.\n      if (handle && handle.peek) handle = handle.peek\n      after = handle\n        ? handle(children[index + 1], parent, state, {\n            before: '',\n            after: '',\n            ...tracker.current()\n          }).charAt(0)\n        : ''\n    } else {\n      after = info.after\n    }\n\n    // In some cases, html (text) can be found in phrasing right after an eol.\n    // When we\u2019d serialize that, in most cases that would be seen as html\n    // (flow).\n    // As we can\u2019t escape or so to prevent it from happening, we take a somewhat\n    // reasonable approach: replace that eol with a space.\n    // See: <https://github.com/syntax-tree/mdast-util-to-markdown/issues/15>\n    if (\n      results.length > 0 &&\n      (before === '\\r' || before === '\\n') &&\n      child.type === 'html'\n    ) {\n      results[results.length - 1] = results[results.length - 1].replace(\n        /(\\r?\\n|\\r)$/,\n        ' '\n      )\n      before = ' '\n\n      // To do: does this work to reset tracker?\n      tracker = state.createTracker(info)\n      tracker.move(results.join(''))\n    }\n\n    results.push(\n      tracker.move(\n        state.handle(child, parent, state, {\n          ...tracker.current(),\n          before,\n          after\n        })\n      )\n    )\n\n    before = results[results.length - 1].slice(-1)\n  }\n\n  indexStack.pop()\n\n  return results.join('')\n}\n", "/**\n * @typedef {import('mdast').Delete} Delete\n *\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n *\n * @typedef {import('mdast-util-to-markdown').ConstructName} ConstructName\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n */\n\nimport {containerPhrasing} from 'mdast-util-to-markdown/lib/util/container-phrasing.js'\nimport {track} from 'mdast-util-to-markdown/lib/util/track.js'\n\n// To do: next major: expose functions.\n// To do: next major: use `state`, state utilities.\n\n/**\n * List of constructs that occur in phrasing (paragraphs, headings), but cannot\n * contain strikethrough.\n * So they sort of cancel each other out.\n * Note: could use a better name.\n *\n * Note: keep in sync with: <https://github.com/syntax-tree/mdast-util-to-markdown/blob/8ce8dbf/lib/unsafe.js#L14>\n *\n * @type {Array<ConstructName>}\n */\nconst constructsWithoutStrikethrough = [\n  'autolink',\n  'destinationLiteral',\n  'destinationRaw',\n  'reference',\n  'titleQuote',\n  'titleApostrophe'\n]\n\nhandleDelete.peek = peekDelete\n\n/**\n * Extension for `mdast-util-from-markdown` to enable GFM strikethrough.\n *\n * @type {FromMarkdownExtension}\n */\nexport const gfmStrikethroughFromMarkdown = {\n  canContainEols: ['delete'],\n  enter: {strikethrough: enterStrikethrough},\n  exit: {strikethrough: exitStrikethrough}\n}\n\n/**\n * Extension for `mdast-util-to-markdown` to enable GFM strikethrough.\n *\n * @type {ToMarkdownExtension}\n */\nexport const gfmStrikethroughToMarkdown = {\n  unsafe: [\n    {\n      character: '~',\n      inConstruct: 'phrasing',\n      notInConstruct: constructsWithoutStrikethrough\n    }\n  ],\n  handlers: {delete: handleDelete}\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterStrikethrough(token) {\n  this.enter({type: 'delete', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitStrikethrough(token) {\n  this.exit(token)\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {Delete} node\n */\nfunction handleDelete(node, _, context, safeOptions) {\n  const tracker = track(safeOptions)\n  const exit = context.enter('strikethrough')\n  let value = tracker.move('~~')\n  value += containerPhrasing(node, context, {\n    ...tracker.current(),\n    before: value,\n    after: '~'\n  })\n  value += tracker.move('~~')\n  exit()\n  return value\n}\n\n/** @type {ToMarkdownHandle} */\nfunction peekDelete() {\n  return '~'\n}\n", "/**\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('../types.js').Parent} Parent\n * @typedef {import('../types.js').State} State\n */\n\nimport {patternCompile} from '../util/pattern-compile.js'\n\ninlineCode.peek = inlineCodePeek\n\n/**\n * @param {InlineCode} node\n * @param {Parent | undefined} _\n * @param {State} state\n * @returns {string}\n */\nexport function inlineCode(node, _, state) {\n  let value = node.value || ''\n  let sequence = '`'\n  let index = -1\n\n  // If there is a single grave accent on its own in the code, use a fence of\n  // two.\n  // If there are two in a row, use one.\n  while (new RegExp('(^|[^`])' + sequence + '([^`]|$)').test(value)) {\n    sequence += '`'\n  }\n\n  // If this is not just spaces or eols (tabs don\u2019t count), and either the\n  // first or last character are a space, eol, or tick, then pad with spaces.\n  if (\n    /[^ \\r\\n]/.test(value) &&\n    ((/^[ \\r\\n]/.test(value) && /[ \\r\\n]$/.test(value)) || /^`|`$/.test(value))\n  ) {\n    value = ' ' + value + ' '\n  }\n\n  // We have a potential problem: certain characters after eols could result in\n  // blocks being seen.\n  // For example, if someone injected the string `'\\n# b'`, then that would\n  // result in an ATX heading.\n  // We can\u2019t escape characters in `inlineCode`, but because eols are\n  // transformed to spaces when going from markdown to HTML anyway, we can swap\n  // them out.\n  while (++index < state.unsafe.length) {\n    const pattern = state.unsafe[index]\n    const expression = patternCompile(pattern)\n    /** @type {RegExpExecArray | null} */\n    let match\n\n    // Only look for `atBreak`s.\n    // Btw: note that `atBreak` patterns will always start the regex at LF or\n    // CR.\n    if (!pattern.atBreak) continue\n\n    while ((match = expression.exec(value))) {\n      let position = match.index\n\n      // Support CRLF (patterns only look for one of the characters).\n      if (\n        value.charCodeAt(position) === 10 /* `\\n` */ &&\n        value.charCodeAt(position - 1) === 13 /* `\\r` */\n      ) {\n        position--\n      }\n\n      value = value.slice(0, position) + ' ' + value.slice(match.index + 1)\n    }\n  }\n\n  return sequence + value + sequence\n}\n\n/**\n * @returns {string}\n */\nfunction inlineCodePeek() {\n  return '`'\n}\n", "// To do: next major: remove.\n/**\n * @typedef {Options} MarkdownTableOptions\n *   Configuration.\n */\n\n/**\n * @typedef Options\n *   Configuration.\n * @property {boolean | null | undefined} [alignDelimiters=true]\n *   Whether to align the delimiters (default: `true`);\n *   they are aligned by default:\n *\n *   ```markdown\n *   | Alpha | B     |\n *   | ----- | ----- |\n *   | C     | Delta |\n *   ```\n *\n *   Pass `false` to make them staggered:\n *\n *   ```markdown\n *   | Alpha | B |\n *   | - | - |\n *   | C | Delta |\n *   ```\n * @property {ReadonlyArray<string | null | undefined> | string | null | undefined} [align]\n *   How to align columns (default: `''`);\n *   one style for all columns or styles for their respective columns;\n *   each style is either `'l'` (left), `'r'` (right), or `'c'` (center);\n *   other values are treated as `''`, which doesn\u2019t place the colon in the\n *   alignment row but does align left;\n *   *only the lowercased first character is used, so `Right` is fine.*\n * @property {boolean | null | undefined} [delimiterEnd=true]\n *   Whether to end each row with the delimiter (default: `true`).\n *\n *   > \uD83D\uDC49 **Note**: please don\u2019t use this: it could create fragile structures\n *   > that aren\u2019t understandable to some markdown parsers.\n *\n *   When `true`, there are ending delimiters:\n *\n *   ```markdown\n *   | Alpha | B     |\n *   | ----- | ----- |\n *   | C     | Delta |\n *   ```\n *\n *   When `false`, there are no ending delimiters:\n *\n *   ```markdown\n *   | Alpha | B\n *   | ----- | -----\n *   | C     | Delta\n *   ```\n * @property {boolean | null | undefined} [delimiterStart=true]\n *   Whether to begin each row with the delimiter (default: `true`).\n *\n *   > \uD83D\uDC49 **Note**: please don\u2019t use this: it could create fragile structures\n *   > that aren\u2019t understandable to some markdown parsers.\n *\n *   When `true`, there are starting delimiters:\n *\n *   ```markdown\n *   | Alpha | B     |\n *   | ----- | ----- |\n *   | C     | Delta |\n *   ```\n *\n *   When `false`, there are no starting delimiters:\n *\n *   ```markdown\n *   Alpha | B     |\n *   ----- | ----- |\n *   C     | Delta |\n *   ```\n * @property {boolean | null | undefined} [padding=true]\n *   Whether to add a space of padding between delimiters and cells\n *   (default: `true`).\n *\n *   When `true`, there is padding:\n *\n *   ```markdown\n *   | Alpha | B     |\n *   | ----- | ----- |\n *   | C     | Delta |\n *   ```\n *\n *   When `false`, there is no padding:\n *\n *   ```markdown\n *   |Alpha|B    |\n *   |-----|-----|\n *   |C    |Delta|\n *   ```\n * @property {((value: string) => number) | null | undefined} [stringLength]\n *   Function to detect the length of table cell content (optional);\n *   this is used when aligning the delimiters (`|`) between table cells;\n *   full-width characters and emoji mess up delimiter alignment when viewing\n *   the markdown source;\n *   to fix this, you can pass this function,\n *   which receives the cell content and returns its \u201Cvisible\u201D size;\n *   note that what is and isn\u2019t visible depends on where the text is displayed.\n *\n *   Without such a function, the following:\n *\n *   ```js\n *   markdownTable([\n *     ['Alpha', 'Bravo'],\n *     ['\u4E2D\u6587', 'Charlie'],\n *     ['\uD83D\uDC69\u200D\u2764\uFE0F\u200D\uD83D\uDC69', 'Delta']\n *   ])\n *   ```\n *\n *   Yields:\n *\n *   ```markdown\n *   | Alpha | Bravo |\n *   | - | - |\n *   | \u4E2D\u6587 | Charlie |\n *   | \uD83D\uDC69\u200D\u2764\uFE0F\u200D\uD83D\uDC69 | Delta |\n *   ```\n *\n *   With [`string-width`](https://github.com/sindresorhus/string-width):\n *\n *   ```js\n *   import stringWidth from 'string-width'\n *\n *   markdownTable(\n *     [\n *       ['Alpha', 'Bravo'],\n *       ['\u4E2D\u6587', 'Charlie'],\n *       ['\uD83D\uDC69\u200D\u2764\uFE0F\u200D\uD83D\uDC69', 'Delta']\n *     ],\n *     {stringLength: stringWidth}\n *   )\n *   ```\n *\n *   Yields:\n *\n *   ```markdown\n *   | Alpha | Bravo   |\n *   | ----- | ------- |\n *   | \u4E2D\u6587  | Charlie |\n *   | \uD83D\uDC69\u200D\u2764\uFE0F\u200D\uD83D\uDC69    | Delta   |\n *   ```\n */\n\n/**\n * @param {string} value\n *   Cell value.\n * @returns {number}\n *   Cell size.\n */\nfunction defaultStringLength(value) {\n  return value.length\n}\n\n/**\n * Generate a markdown\n * ([GFM](https://docs.github.com/en/github/writing-on-github/working-with-advanced-formatting/organizing-information-with-tables))\n * table.\n *\n * @param {ReadonlyArray<ReadonlyArray<string | null | undefined>>} table\n *   Table data (matrix of strings).\n * @param {Readonly<Options> | null | undefined} [options]\n *   Configuration (optional).\n * @returns {string}\n *   Result.\n */\nexport function markdownTable(table, options) {\n  const settings = options || {}\n  // To do: next major: change to spread.\n  const align = (settings.align || []).concat()\n  const stringLength = settings.stringLength || defaultStringLength\n  /** @type {Array<number>} Character codes as symbols for alignment per column. */\n  const alignments = []\n  /** @type {Array<Array<string>>} Cells per row. */\n  const cellMatrix = []\n  /** @type {Array<Array<number>>} Sizes of each cell per row. */\n  const sizeMatrix = []\n  /** @type {Array<number>} */\n  const longestCellByColumn = []\n  let mostCellsPerRow = 0\n  let rowIndex = -1\n\n  // This is a superfluous loop if we don\u2019t align delimiters, but otherwise we\u2019d\n  // do superfluous work when aligning, so optimize for aligning.\n  while (++rowIndex < table.length) {\n    /** @type {Array<string>} */\n    const row = []\n    /** @type {Array<number>} */\n    const sizes = []\n    let columnIndex = -1\n\n    if (table[rowIndex].length > mostCellsPerRow) {\n      mostCellsPerRow = table[rowIndex].length\n    }\n\n    while (++columnIndex < table[rowIndex].length) {\n      const cell = serialize(table[rowIndex][columnIndex])\n\n      if (settings.alignDelimiters !== false) {\n        const size = stringLength(cell)\n        sizes[columnIndex] = size\n\n        if (\n          longestCellByColumn[columnIndex] === undefined ||\n          size > longestCellByColumn[columnIndex]\n        ) {\n          longestCellByColumn[columnIndex] = size\n        }\n      }\n\n      row.push(cell)\n    }\n\n    cellMatrix[rowIndex] = row\n    sizeMatrix[rowIndex] = sizes\n  }\n\n  // Figure out which alignments to use.\n  let columnIndex = -1\n\n  if (typeof align === 'object' && 'length' in align) {\n    while (++columnIndex < mostCellsPerRow) {\n      alignments[columnIndex] = toAlignment(align[columnIndex])\n    }\n  } else {\n    const code = toAlignment(align)\n\n    while (++columnIndex < mostCellsPerRow) {\n      alignments[columnIndex] = code\n    }\n  }\n\n  // Inject the alignment row.\n  columnIndex = -1\n  /** @type {Array<string>} */\n  const row = []\n  /** @type {Array<number>} */\n  const sizes = []\n\n  while (++columnIndex < mostCellsPerRow) {\n    const code = alignments[columnIndex]\n    let before = ''\n    let after = ''\n\n    if (code === 99 /* `c` */) {\n      before = ':'\n      after = ':'\n    } else if (code === 108 /* `l` */) {\n      before = ':'\n    } else if (code === 114 /* `r` */) {\n      after = ':'\n    }\n\n    // There *must* be at least one hyphen-minus in each alignment cell.\n    let size =\n      settings.alignDelimiters === false\n        ? 1\n        : Math.max(\n            1,\n            longestCellByColumn[columnIndex] - before.length - after.length\n          )\n\n    const cell = before + '-'.repeat(size) + after\n\n    if (settings.alignDelimiters !== false) {\n      size = before.length + size + after.length\n\n      if (size > longestCellByColumn[columnIndex]) {\n        longestCellByColumn[columnIndex] = size\n      }\n\n      sizes[columnIndex] = size\n    }\n\n    row[columnIndex] = cell\n  }\n\n  // Inject the alignment row.\n  cellMatrix.splice(1, 0, row)\n  sizeMatrix.splice(1, 0, sizes)\n\n  rowIndex = -1\n  /** @type {Array<string>} */\n  const lines = []\n\n  while (++rowIndex < cellMatrix.length) {\n    const row = cellMatrix[rowIndex]\n    const sizes = sizeMatrix[rowIndex]\n    columnIndex = -1\n    /** @type {Array<string>} */\n    const line = []\n\n    while (++columnIndex < mostCellsPerRow) {\n      const cell = row[columnIndex] || ''\n      let before = ''\n      let after = ''\n\n      if (settings.alignDelimiters !== false) {\n        const size =\n          longestCellByColumn[columnIndex] - (sizes[columnIndex] || 0)\n        const code = alignments[columnIndex]\n\n        if (code === 114 /* `r` */) {\n          before = ' '.repeat(size)\n        } else if (code === 99 /* `c` */) {\n          if (size % 2) {\n            before = ' '.repeat(size / 2 + 0.5)\n            after = ' '.repeat(size / 2 - 0.5)\n          } else {\n            before = ' '.repeat(size / 2)\n            after = before\n          }\n        } else {\n          after = ' '.repeat(size)\n        }\n      }\n\n      if (settings.delimiterStart !== false && !columnIndex) {\n        line.push('|')\n      }\n\n      if (\n        settings.padding !== false &&\n        // Don\u2019t add the opening space if we\u2019re not aligning and the cell is\n        // empty: there will be a closing space.\n        !(settings.alignDelimiters === false && cell === '') &&\n        (settings.delimiterStart !== false || columnIndex)\n      ) {\n        line.push(' ')\n      }\n\n      if (settings.alignDelimiters !== false) {\n        line.push(before)\n      }\n\n      line.push(cell)\n\n      if (settings.alignDelimiters !== false) {\n        line.push(after)\n      }\n\n      if (settings.padding !== false) {\n        line.push(' ')\n      }\n\n      if (\n        settings.delimiterEnd !== false ||\n        columnIndex !== mostCellsPerRow - 1\n      ) {\n        line.push('|')\n      }\n    }\n\n    lines.push(\n      settings.delimiterEnd === false\n        ? line.join('').replace(/ +$/, '')\n        : line.join('')\n    )\n  }\n\n  return lines.join('\\n')\n}\n\n/**\n * @param {string | null | undefined} [value]\n *   Value to serialize.\n * @returns {string}\n *   Result.\n */\nfunction serialize(value) {\n  return value === null || value === undefined ? '' : String(value)\n}\n\n/**\n * @param {string | null | undefined} value\n *   Value.\n * @returns {number}\n *   Alignment.\n */\nfunction toAlignment(value) {\n  const code = typeof value === 'string' ? value.codePointAt(0) : 0\n\n  return code === 67 /* `C` */ || code === 99 /* `c` */\n    ? 99 /* `c` */\n    : code === 76 /* `L` */ || code === 108 /* `l` */\n      ? 108 /* `l` */\n      : code === 82 /* `R` */ || code === 114 /* `r` */\n        ? 114 /* `r` */\n        : 0\n}\n", "/**\n * @typedef {import('mdast').Table} Table\n * @typedef {import('mdast').TableRow} TableRow\n * @typedef {import('mdast').TableCell} TableCell\n * @typedef {import('mdast').InlineCode} InlineCode\n *\n * @typedef {import('markdown-table').MarkdownTableOptions} MarkdownTableOptions\n *\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n *\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Context} ToMarkdownContext\n * @typedef {import('mdast-util-to-markdown').SafeOptions} SafeOptions\n */\n\n/**\n * @typedef Options\n *   Configuration.\n * @property {boolean | null | undefined} [tableCellPadding=true]\n *   Whether to add a space of padding between delimiters and cells.\n * @property {boolean | null | undefined} [tablePipeAlign=true]\n *   Whether to align the delimiters.\n * @property {MarkdownTableOptions['stringLength'] | null | undefined} [stringLength]\n *   Function to detect the length of table cell content, used when aligning\n *   the delimiters between cells\n */\n\nimport {containerPhrasing} from 'mdast-util-to-markdown/lib/util/container-phrasing.js'\nimport {inlineCode} from 'mdast-util-to-markdown/lib/handle/inline-code.js'\nimport {markdownTable} from 'markdown-table'\n\n// To do: next major: use `state` and `state` utilities from `mdast-util-to-markdown`.\n// To do: next major: use `defaultHandlers.inlineCode`.\n// To do: next major: expose functions.\n\n/**\n * Extension for `mdast-util-from-markdown` to enable GFM tables.\n *\n * @type {FromMarkdownExtension}\n */\nexport const gfmTableFromMarkdown = {\n  enter: {\n    table: enterTable,\n    tableData: enterCell,\n    tableHeader: enterCell,\n    tableRow: enterRow\n  },\n  exit: {\n    codeText: exitCodeText,\n    table: exitTable,\n    tableData: exit,\n    tableHeader: exit,\n    tableRow: exit\n  }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterTable(token) {\n  /** @type {Array<'left' | 'right' | 'center' | 'none'>} */\n  // @ts-expect-error: `align` is custom.\n  const align = token._align\n  this.enter(\n    {\n      type: 'table',\n      align: align.map((d) => (d === 'none' ? null : d)),\n      children: []\n    },\n    token\n  )\n  this.setData('inTable', true)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitTable(token) {\n  this.exit(token)\n  this.setData('inTable')\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterRow(token) {\n  this.enter({type: 'tableRow', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exit(token) {\n  this.exit(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterCell(token) {\n  this.enter({type: 'tableCell', children: []}, token)\n}\n\n// Overwrite the default code text data handler to unescape escaped pipes when\n// they are in tables.\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitCodeText(token) {\n  let value = this.resume()\n\n  if (this.getData('inTable')) {\n    value = value.replace(/\\\\([\\\\|])/g, replace)\n  }\n\n  const node = /** @type {InlineCode} */ (this.stack[this.stack.length - 1])\n  node.value = value\n  this.exit(token)\n}\n\n/**\n * @param {string} $0\n * @param {string} $1\n * @returns {string}\n */\nfunction replace($0, $1) {\n  // Pipes work, backslashes don\u2019t (but can\u2019t escape pipes).\n  return $1 === '|' ? $1 : $0\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM tables in\n * markdown.\n *\n * @param {Options | null | undefined} [options]\n *   Configuration.\n * @returns {ToMarkdownExtension}\n *   Extension for `mdast-util-to-markdown` to enable GFM tables.\n */\nexport function gfmTableToMarkdown(options) {\n  const settings = options || {}\n  const padding = settings.tableCellPadding\n  const alignDelimiters = settings.tablePipeAlign\n  const stringLength = settings.stringLength\n  const around = padding ? ' ' : '|'\n\n  return {\n    unsafe: [\n      {character: '\\r', inConstruct: 'tableCell'},\n      {character: '\\n', inConstruct: 'tableCell'},\n      // A pipe, when followed by a tab or space (padding), or a dash or colon\n      // (unpadded delimiter row), could result in a table.\n      {atBreak: true, character: '|', after: '[\\t :-]'},\n      // A pipe in a cell must be encoded.\n      {character: '|', inConstruct: 'tableCell'},\n      // A colon must be followed by a dash, in which case it could start a\n      // delimiter row.\n      {atBreak: true, character: ':', after: '-'},\n      // A delimiter row can also start with a dash, when followed by more\n      // dashes, a colon, or a pipe.\n      // This is a stricter version than the built in check for lists, thematic\n      // breaks, and setex heading underlines though:\n      // <https://github.com/syntax-tree/mdast-util-to-markdown/blob/51a2038/lib/unsafe.js#L57>\n      {atBreak: true, character: '-', after: '[:|-]'}\n    ],\n    handlers: {\n      table: handleTable,\n      tableRow: handleTableRow,\n      tableCell: handleTableCell,\n      inlineCode: inlineCodeWithTable\n    }\n  }\n\n  /**\n   * @type {ToMarkdownHandle}\n   * @param {Table} node\n   */\n  function handleTable(node, _, context, safeOptions) {\n    return serializeData(\n      handleTableAsData(node, context, safeOptions),\n      node.align\n    )\n  }\n\n  /**\n   * This function isn\u2019t really used normally, because we handle rows at the\n   * table level.\n   * But, if someone passes in a table row, this ensures we make somewhat sense.\n   *\n   * @type {ToMarkdownHandle}\n   * @param {TableRow} node\n   */\n  function handleTableRow(node, _, context, safeOptions) {\n    const row = handleTableRowAsData(node, context, safeOptions)\n    const value = serializeData([row])\n    // `markdown-table` will always add an align row\n    return value.slice(0, value.indexOf('\\n'))\n  }\n\n  /**\n   * @type {ToMarkdownHandle}\n   * @param {TableCell} node\n   */\n  function handleTableCell(node, _, context, safeOptions) {\n    const exit = context.enter('tableCell')\n    const subexit = context.enter('phrasing')\n    const value = containerPhrasing(node, context, {\n      ...safeOptions,\n      before: around,\n      after: around\n    })\n    subexit()\n    exit()\n    return value\n  }\n\n  /**\n   * @param {Array<Array<string>>} matrix\n   * @param {Array<string | null | undefined> | null | undefined} [align]\n   */\n  function serializeData(matrix, align) {\n    return markdownTable(matrix, {\n      align,\n      // @ts-expect-error: `markdown-table` types should support `null`.\n      alignDelimiters,\n      // @ts-expect-error: `markdown-table` types should support `null`.\n      padding,\n      // @ts-expect-error: `markdown-table` types should support `null`.\n      stringLength\n    })\n  }\n\n  /**\n   * @param {Table} node\n   * @param {ToMarkdownContext} context\n   * @param {SafeOptions} safeOptions\n   */\n  function handleTableAsData(node, context, safeOptions) {\n    const children = node.children\n    let index = -1\n    /** @type {Array<Array<string>>} */\n    const result = []\n    const subexit = context.enter('table')\n\n    while (++index < children.length) {\n      result[index] = handleTableRowAsData(\n        children[index],\n        context,\n        safeOptions\n      )\n    }\n\n    subexit()\n\n    return result\n  }\n\n  /**\n   * @param {TableRow} node\n   * @param {ToMarkdownContext} context\n   * @param {SafeOptions} safeOptions\n   */\n  function handleTableRowAsData(node, context, safeOptions) {\n    const children = node.children\n    let index = -1\n    /** @type {Array<string>} */\n    const result = []\n    const subexit = context.enter('tableRow')\n\n    while (++index < children.length) {\n      // Note: the positional info as used here is incorrect.\n      // Making it correct would be impossible due to aligning cells?\n      // And it would need copy/pasting `markdown-table` into this project.\n      result[index] = handleTableCell(\n        children[index],\n        node,\n        context,\n        safeOptions\n      )\n    }\n\n    subexit()\n\n    return result\n  }\n\n  /**\n   * @type {ToMarkdownHandle}\n   * @param {InlineCode} node\n   */\n  function inlineCodeWithTable(node, parent, context) {\n    let value = inlineCode(node, parent, context)\n\n    if (context.stack.includes('tableCell')) {\n      value = value.replace(/\\|/g, '\\\\$&')\n    }\n\n    return value\n  }\n}\n", "/**\n * @typedef {import('../types.js').State} State\n * @typedef {import('../types.js').Options} Options\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['bullet'], null | undefined>}\n */\nexport function checkBullet(state) {\n  const marker = state.options.bullet || '*'\n\n  if (marker !== '*' && marker !== '+' && marker !== '-') {\n    throw new Error(\n      'Cannot serialize items with `' +\n        marker +\n        '` for `options.bullet`, expected `*`, `+`, or `-`'\n    )\n  }\n\n  return marker\n}\n", "/**\n * @typedef {import('../types.js').State} State\n * @typedef {import('../types.js').Options} Options\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['listItemIndent'], null | undefined>}\n */\nexport function checkListItemIndent(state) {\n  const style = state.options.listItemIndent || 'tab'\n\n  // To do: remove in a major.\n  // @ts-expect-error: deprecated.\n  if (style === 1 || style === '1') {\n    return 'one'\n  }\n\n  if (style !== 'tab' && style !== 'one' && style !== 'mixed') {\n    throw new Error(\n      'Cannot serialize items with `' +\n        style +\n        '` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`'\n    )\n  }\n\n  return style\n}\n", "/**\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('../types.js').Map} Map\n * @typedef {import('../types.js').Parent} Parent\n * @typedef {import('../types.js').State} State\n * @typedef {import('../types.js').Info} Info\n */\n\nimport {checkBullet} from '../util/check-bullet.js'\nimport {checkListItemIndent} from '../util/check-list-item-indent.js'\n\n/**\n * @param {ListItem} node\n * @param {Parent | undefined} parent\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function listItem(node, parent, state, info) {\n  const listItemIndent = checkListItemIndent(state)\n  let bullet = state.bulletCurrent || checkBullet(state)\n\n  // Add the marker value for ordered lists.\n  if (parent && parent.type === 'list' && parent.ordered) {\n    bullet =\n      (typeof parent.start === 'number' && parent.start > -1\n        ? parent.start\n        : 1) +\n      (state.options.incrementListMarker === false\n        ? 0\n        : parent.children.indexOf(node)) +\n      bullet\n  }\n\n  let size = bullet.length + 1\n\n  if (\n    listItemIndent === 'tab' ||\n    (listItemIndent === 'mixed' &&\n      ((parent && parent.type === 'list' && parent.spread) || node.spread))\n  ) {\n    size = Math.ceil(size / 4) * 4\n  }\n\n  const tracker = state.createTracker(info)\n  tracker.move(bullet + ' '.repeat(size - bullet.length))\n  tracker.shift(size)\n  const exit = state.enter('listItem')\n  const value = state.indentLines(\n    state.containerFlow(node, tracker.current()),\n    map\n  )\n  exit()\n\n  return value\n\n  /** @type {Map} */\n  function map(line, index, blank) {\n    if (index) {\n      return (blank ? '' : ' '.repeat(size)) + line\n    }\n\n    return (blank ? bullet : bullet + ' '.repeat(size - bullet.length)) + line\n  }\n}\n", "/**\n * @typedef {import('mdast').Content} Content\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('mdast').Parent} Parent\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n */\n\n/**\n * @typedef {Extract<Root | Content, Parent>} Parents\n */\n\nimport {listItem} from 'mdast-util-to-markdown/lib/handle/list-item.js'\nimport {track} from 'mdast-util-to-markdown/lib/util/track.js'\n\n// To do: next major: rename `context` -> `state`, `safeOptions` -> `info`, use\n// `track` from `state`.\n// To do: next major: replace exports with functions.\n// To do: next major: use `defaulthandlers.listItem`.\n\n/**\n * Extension for `mdast-util-from-markdown` to enable GFM task list items.\n *\n * @type {FromMarkdownExtension}\n */\nexport const gfmTaskListItemFromMarkdown = {\n  exit: {\n    taskListCheckValueChecked: exitCheck,\n    taskListCheckValueUnchecked: exitCheck,\n    paragraph: exitParagraphWithTaskListItem\n  }\n}\n\n/**\n * Extension for `mdast-util-to-markdown` to enable GFM task list items.\n *\n * @type {ToMarkdownExtension}\n */\nexport const gfmTaskListItemToMarkdown = {\n  unsafe: [{atBreak: true, character: '-', after: '[:|-]'}],\n  handlers: {listItem: listItemWithTaskListItem}\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitCheck(token) {\n  const node = /** @type {ListItem} */ (this.stack[this.stack.length - 2])\n  // We\u2019re always in a paragraph, in a list item.\n  node.checked = token.type === 'taskListCheckValueChecked'\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitParagraphWithTaskListItem(token) {\n  const parent = /** @type {Parents} */ (this.stack[this.stack.length - 2])\n\n  if (\n    parent &&\n    parent.type === 'listItem' &&\n    typeof parent.checked === 'boolean'\n  ) {\n    const node = /** @type {Paragraph} */ (this.stack[this.stack.length - 1])\n    const head = node.children[0]\n\n    if (head && head.type === 'text') {\n      const siblings = parent.children\n      let index = -1\n      /** @type {Paragraph | undefined} */\n      let firstParaghraph\n\n      while (++index < siblings.length) {\n        const sibling = siblings[index]\n        if (sibling.type === 'paragraph') {\n          firstParaghraph = sibling\n          break\n        }\n      }\n\n      if (firstParaghraph === node) {\n        // Must start with a space or a tab.\n        head.value = head.value.slice(1)\n\n        if (head.value.length === 0) {\n          node.children.shift()\n        } else if (\n          node.position &&\n          head.position &&\n          typeof head.position.start.offset === 'number'\n        ) {\n          head.position.start.column++\n          head.position.start.offset++\n          node.position.start = Object.assign({}, head.position.start)\n        }\n      }\n    }\n  }\n\n  this.exit(token)\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {ListItem} node\n */\nfunction listItemWithTaskListItem(node, parent, context, safeOptions) {\n  const head = node.children[0]\n  const checkable =\n    typeof node.checked === 'boolean' && head && head.type === 'paragraph'\n  const checkbox = '[' + (node.checked ? 'x' : ' ') + '] '\n  const tracker = track(safeOptions)\n\n  if (checkable) {\n    tracker.move(checkbox)\n  }\n\n  let value = listItem(node, parent, context, {\n    ...safeOptions,\n    ...tracker.current()\n  })\n\n  if (checkable) {\n    value = value.replace(/^(?:[*+-]|\\d+\\.)([\\r\\n]| {1,3})/, check)\n  }\n\n  return value\n\n  /**\n   * @param {string} $0\n   * @returns {string}\n   */\n  function check($0) {\n    return $0 + checkbox\n  }\n}\n", "/**\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n */\n\n/**\n * @typedef {import('mdast-util-gfm-table').Options} Options\n *   Configuration.\n */\n\nimport {\n  gfmAutolinkLiteralFromMarkdown,\n  gfmAutolinkLiteralToMarkdown\n} from 'mdast-util-gfm-autolink-literal'\nimport {\n  gfmFootnoteFromMarkdown,\n  gfmFootnoteToMarkdown\n} from 'mdast-util-gfm-footnote'\nimport {\n  gfmStrikethroughFromMarkdown,\n  gfmStrikethroughToMarkdown\n} from 'mdast-util-gfm-strikethrough'\nimport {gfmTableFromMarkdown, gfmTableToMarkdown} from 'mdast-util-gfm-table'\nimport {\n  gfmTaskListItemFromMarkdown,\n  gfmTaskListItemToMarkdown\n} from 'mdast-util-gfm-task-list-item'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM (autolink\n * literals, footnotes, strikethrough, tables, tasklists).\n *\n * @returns {Array<FromMarkdownExtension>}\n *   Extension for `mdast-util-from-markdown` to enable GFM (autolink literals,\n *   footnotes, strikethrough, tables, tasklists).\n */\nexport function gfmFromMarkdown() {\n  return [\n    gfmAutolinkLiteralFromMarkdown,\n    gfmFootnoteFromMarkdown(),\n    gfmStrikethroughFromMarkdown,\n    gfmTableFromMarkdown,\n    gfmTaskListItemFromMarkdown\n  ]\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM (autolink\n * literals, footnotes, strikethrough, tables, tasklists).\n *\n * @param {Options | null | undefined} [options]\n *   Configuration.\n * @returns {ToMarkdownExtension}\n *   Extension for `mdast-util-to-markdown` to enable GFM (autolink literals,\n *   footnotes, strikethrough, tables, tasklists).\n */\nexport function gfmToMarkdown(options) {\n  return {\n    extensions: [\n      gfmAutolinkLiteralToMarkdown,\n      gfmFootnoteToMarkdown(),\n      gfmStrikethroughToMarkdown,\n      gfmTableToMarkdown(options),\n      gfmTaskListItemToMarkdown\n    ]\n  }\n}\n", "/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('micromark-extension-gfm').Options & import('mdast-util-gfm').Options} Options\n */\n\nimport {gfm} from 'micromark-extension-gfm'\nimport {gfmFromMarkdown, gfmToMarkdown} from 'mdast-util-gfm'\n\n/**\n * Plugin to support GFM (autolink literals, footnotes, strikethrough, tables, tasklists).\n *\n * @type {import('unified').Plugin<[Options?]|void[], Root>}\n */\nexport default function remarkGfm(options = {}) {\n  const data = this.data()\n\n  add('micromarkExtensions', gfm(options))\n  add('fromMarkdownExtensions', gfmFromMarkdown())\n  add('toMarkdownExtensions', gfmToMarkdown(options))\n\n  /**\n   * @param {string} field\n   * @param {unknown} value\n   */\n  function add(field, value) {\n    const list = /** @type {unknown[]} */ (\n      // Other extensions\n      /* c8 ignore next 2 */\n      data[field] ? data[field] : (data[field] = [])\n    )\n\n    list.push(value)\n  }\n}\n", "import {\n  AgentIcon,\n  CloseIcon,\n  MinimizeIcon,\n  NewChatIcon,\n  PhoneIcon,\n} from \"./icons\";\nimport { AssistantHeader } from \"./AssistantHeader\";\nimport { ChatInput } from \"./ChatInput\";\nimport type { ChatMessage } from \"../hooks/useChatMutation\";\nimport { AssistantAbout } from \"./AssistantAbout\";\nimport { ChatMessages } from \"./ChatMessages\";\nimport { ProductV1 } from \"@fermat/product-api\";\nimport React from \"react\";\nimport { SamuelConfigContext } from \"../context/config-context\";\nimport { useTranslation } from \"react-i18next\";\nimport { cn } from \"../util/cn\";\nimport { constrainAvatar } from \"../util/constrain-image\";\n\nexport interface ChatPanelProps {\n  isOpen: boolean;\n  messages: ChatMessage[];\n  isLoading: boolean;\n  error: Error | null;\n  onSend: (message: string, messageType?: \"suggestion\" | \"typed\") => void;\n  onClose: () => void;\n  /** Show the minimize button. False when there's no way to reopen (defaults to true). */\n  showMinimize?: boolean;\n  /** How the host presents the panel. \"drawer\" (right-edge side panel) puts a left-aligned close X;\n   * \"sheet\"/\"bubble\" keep the down-caret that matches their downward collapse. Defaults to \"bubble\". */\n  presentation?: \"bubble\" | \"drawer\" | \"sheet\";\n  onReset: () => void;\n  brandName?: string;\n  brandLogoUrl?: string;\n  /** Persona name; preferred over brandName in the header title when set. */\n  assistantName?: string;\n  /** Brand-authored \"about this assistant\" copy. Present = the header opens the about view. */\n  assistantDescription?: string;\n  assistantInfoBullets?: string[];\n  /** Persona portrait; preferred over brandLogoUrl next to assistant messages when set. */\n  assistantAvatarUrl?: string;\n  /** Persona tagline, rendered beneath the header title only when set. */\n  assistantTagline?: string;\n  recommendationStrategy?: string;\n  rootProductId?: string;\n  productHandle?: string;\n  suggestedQuestions?: string[];\n  /** Passed straight to ChatMessages: server starter questions are still in flight. */\n  suggestionsResolving?: boolean;\n  supportPhone?: string;\n  onProductClicked?: (\n    handle: string,\n    source: \"welcome_recs\" | \"assistant_response\",\n    variantExternalId?: string,\n  ) => void;\n  onProductATCClicked?: (\n    handle: string,\n    source: \"welcome_recs\" | \"assistant_response\",\n    variantExternalId?: string,\n  ) => void;\n  onNavigateToProduct?: (\n    product: ProductV1,\n    variantExternalId?: string,\n  ) => void;\n  /** Set when the shopper reached the current product page by clicking it inside Samuel;\n   *  renders an inline product block + next-step chips on reopen. */\n  landingProduct?: { handle: string; name: string } | null;\n  /** Transcript position the landing block is anchored at (message count when it appeared). */\n  landingAfterIndex?: number;\n  /** The host is rendering the full-screen mobile overlay. Only the caller knows: the compact\n   *  surface is selected by `.fermat-chat-mobile-fullscreen`, not by a viewport query here. */\n  compact?: boolean;\n  /** Fired once per assistant message the shopper rates. Optional text is thumbs-down only. */\n  onFeedback?: (\n    vote: \"up\" | \"down\",\n    messageIndex: number,\n    feedbackText?: string,\n  ) => void;\n  /** Votes keyed by message id; owned by Samuel so remounts keep the one-vote lock. */\n  votes?: Record<string, \"up\" | \"down\">;\n  onRecordVote?: (messageId: string, vote: \"up\" | \"down\") => void;\n  /** Hand off to the brand's live-agent channel. Absent renders no handoff control at all. */\n  onExternalHandoff?: () => void;\n  /** Handoff funnel steps before the confirm resolves, for analytics only. */\n  onExternalHandoffStage?: (stage: \"prompted\" | \"dismissed\") => void;\n  /** Passed straight to ChatMessages: opens a tapped contact link via the host (FDE-472). */\n  onOpenLink?: (url: string, messageCount: number) => void;\n}\n\nexport const ChatPanel: React.FC<ChatPanelProps> = ({\n  isOpen,\n  messages,\n  isLoading,\n  error,\n  onSend,\n  onClose,\n  showMinimize = true,\n  presentation = \"bubble\",\n  onReset,\n  brandName,\n  brandLogoUrl,\n  assistantName,\n  assistantAvatarUrl,\n  assistantTagline,\n  assistantDescription,\n  assistantInfoBullets,\n  recommendationStrategy,\n  rootProductId,\n  productHandle,\n  suggestedQuestions,\n  suggestionsResolving,\n  supportPhone,\n  onProductClicked,\n  onProductATCClicked,\n  onNavigateToProduct,\n  landingProduct,\n  landingAfterIndex = 0,\n  compact,\n  onFeedback,\n  votes,\n  onRecordVote,\n  onExternalHandoff,\n  onExternalHandoffStage,\n  onOpenLink,\n}) => {\n  const { t } = useTranslation();\n  const maintenance =\n    React.useContext(SamuelConfigContext)?.maintenance === true;\n  const welcomeLayout = React.useContext(SamuelConfigContext)?.welcomeLayout;\n  const [handoffPending, setHandoffPending] = React.useState(false);\n  // The host never acknowledges the transfer, so this states only what the widget actually knows:\n  // the request went out. It deliberately does not claim a person is connected.\n  const [handoffSent, setHandoffSent] = React.useState(false);\n  const [resolvedOfferId, setResolvedOfferId] = React.useState<string | null>(\n    null,\n  );\n  // The about view replaces the transcript in place; the conversation is untouched behind it.\n  const [showAbout, setShowAbout] = React.useState(false);\n\n  const lastAssistantMessage = [...messages]\n    .reverse()\n    .find((message) => message.role === \"assistant\");\n  const offer =\n    lastAssistantMessage?.suggestHandoff &&\n    lastAssistantMessage.id !== resolvedOfferId\n      ? lastAssistantMessage\n      : undefined;\n  const offerIsRequested = offer?.handoffReason === \"requested\";\n  const promptedOfferId = React.useRef<string | null>(null);\n  const requestedOfferId =\n    isOpen && offerIsRequested && offer && onExternalHandoff && !maintenance\n      ? offer.id\n      : undefined;\n  React.useEffect(() => {\n    if (!requestedOfferId || promptedOfferId.current === requestedOfferId) {\n      return;\n    }\n    promptedOfferId.current = requestedOfferId;\n    onExternalHandoffStage?.(\"prompted\");\n  }, [requestedOfferId, onExternalHandoffStage]);\n  // Drop the confirm card whenever the panel is not open. The desktop panel stays MOUNTED across\n  // close/reopen (only this early return hides it), so without this the card reappears over a chat\n  // the shopper never asked to hand off, and desktop behaves differently from mobile (which\n  // unmounts). Closing the panel is an implicit cancel on both.\n  if (!isOpen) {\n    if (handoffPending) setHandoffPending(false);\n    if (handoffSent) setHandoffSent(false);\n    if (offer) setResolvedOfferId(offer.id);\n    return null;\n  }\n\n  const headerTitle = assistantName || brandName;\n  const headerAvatarUrl = constrainAvatar(\n    assistantAvatarUrl || brandLogoUrl,\n    40,\n  );\n\n  const supportLabel = t(\"supportLabel\", {\n    context: brandName ? \"brand\" : \"\",\n    brand: brandName,\n  });\n\n  const isDrawer = presentation === \"drawer\";\n  const isCompact = compact === true;\n  const dismissIsClose = isDrawer || isCompact;\n  const taglineText = assistantTagline || (isCompact ? headerTitle : undefined);\n  const hasStarted = messages.length > 0 || isLoading;\n  // Centers the welcome and pulls the input up under it.\n  const minimalWelcome =\n    welcomeLayout === \"minimal\" && !hasStarted && !landingProduct;\n  // No copy, no control: the header only becomes clickable when there is something to show.\n  const hasAboutCopy = Boolean(\n    assistantDescription?.trim() || assistantInfoBullets?.length,\n  );\n\n  const closeButton = showMinimize && (\n    <button\n      onClick={onClose}\n      className=\"fermat-chat-close-button flex h-[38px] w-[38px] flex-none cursor-pointer items-center justify-center rounded-full border-0 bg-[color-mix(in_srgb,var(--sa-accent-fg,#ffffff)_22%,transparent)] p-0 text-sa-accent-fg transition-[background] duration-150 hover:bg-[color-mix(in_srgb,var(--sa-accent-fg,#ffffff)_34%,transparent)]\"\n      data-sr-role=\"chat-minimize\"\n      aria-label={dismissIsClose ? t(\"aria_closeChat\") : t(\"aria_minimizeChat\")}\n    >\n      <span className=\"fermat-chat-close-icon inline-flex items-center\">\n        {isDrawer ? <CloseIcon /> : <MinimizeIcon />}\n      </span>\n      <span className=\"fermat-chat-close-icon-compact inline-flex items-center\">\n        <CloseIcon />\n      </span>\n    </button>\n  );\n\n  return (\n    <div\n      className={cn(\n        \"fermat-chat-panel absolute bottom-[72px] right-0 flex h-[740px] w-[480px] max-h-[calc(100vh-120px)] max-w-[calc(100vw-48px)] flex-col overflow-hidden rounded-[var(--sa-radius-panel,var(--sa-radius,16px))] bg-sa-surface font-[family-name:var(--fermat-body-fontFamily,inherit)] font-[var(--sa-body-weight,normal)] tracking-[var(--sa-body-letter-spacing,normal)] shadow-[0_8px_40px_rgba(0,0,0,0.18)] max-[480px]:bottom-[68px] max-[480px]:right-[-8px] max-[480px]:h-[calc(100vh-100px)] max-[480px]:w-[calc(100vw-32px)]\",\n        minimalWelcome &&\n          \"[&_.fermat-chat-input-wrapper]:mb-auto [&_.fermat-chat-input-wrapper]:border-t-0 [&_.fermat-chat-input-wrapper]:bg-transparent [&_.fermat-chat-messages]:mt-auto [&_.fermat-chat-messages]:flex-none\",\n      )}\n    >\n      <AssistantHeader\n        avatarUrl={headerAvatarUrl}\n        title={headerTitle}\n        tagline={taglineText}\n        hasStarted={hasStarted}\n        onIdentityClick={\n          hasAboutCopy && !maintenance\n            ? () => setShowAbout((open) => !open)\n            : undefined\n        }\n        identityExpanded={showAbout}\n        inputHidden={showAbout || maintenance}\n        actions={\n          <>\n            {onExternalHandoff && !maintenance && (\n              <button\n                onClick={() => {\n                  // Guarded: a second click while the card is already open renders nothing new, so\n                  // firing `prompted` again would inflate the funnel's own denominator.\n                  if (handoffPending) return;\n                  // Retry path: clear a previous \"opening\" notice rather than stacking the card above\n                  // it. The host never reports failure, so a shopper whose transfer went nowhere has\n                  // this control as their only way to try again.\n                  setHandoffSent(false);\n                  setHandoffPending(true);\n                  onExternalHandoffStage?.(\"prompted\");\n                }}\n                className=\"fermat-chat-handoff-button flex h-[38px] w-[38px] flex-none cursor-pointer items-center justify-center rounded-full border-0 bg-[color-mix(in_srgb,var(--sa-accent-fg,#ffffff)_22%,transparent)] p-0 text-sa-accent-fg transition-[background] duration-150 hover:bg-[color-mix(in_srgb,var(--sa-accent-fg,#ffffff)_34%,transparent)]\"\n                data-sr-role=\"chat-handoff\"\n                aria-label={t(\"aria_handoff\")}\n                title={t(\"handoffLabel\")}\n              >\n                <AgentIcon />\n              </button>\n            )}\n            {hasStarted && !maintenance && (\n              <button\n                onClick={() => {\n                  // \"Start over\" clears the conversation, so it must also clear both handoff notices.\n                  // Otherwise they linger over a freshly emptied chat and imply a transfer is still\n                  // in flight for a conversation that never asked for one.\n                  setHandoffPending(false);\n                  setHandoffSent(false);\n                  onReset();\n                }}\n                className=\"fermat-chat-reset-button flex h-[38px] w-[38px] flex-none cursor-pointer items-center justify-center rounded-full border-0 bg-[color-mix(in_srgb,var(--sa-accent-fg,#ffffff)_22%,transparent)] p-0 text-sa-accent-fg transition-[background] duration-150 hover:bg-[color-mix(in_srgb,var(--sa-accent-fg,#ffffff)_34%,transparent)]\"\n                data-sr-role=\"chat-reset\"\n                aria-label={t(\"aria_resetChat\")}\n                title={t(\"resetLabel\")}\n              >\n                <NewChatIcon />\n              </button>\n            )}\n            {closeButton}\n          </>\n        }\n      />\n      <div\n        className={cn(\n          \"fermat-chat-support-phone-bar flex items-center justify-center gap-1.5 border-b border-sa-border bg-sa-surface-alt px-4 py-2 text-sm text-sa-muted no-underline transition-[background] duration-150 hover:bg-[color-mix(in_srgb,var(--sa-surface-alt,#f6f5f3)_94%,#000000)] [&_span]:max-[480px]:text-[11px]\",\n          (!supportPhone || maintenance) &&\n            \"fermat-chat-support-phone-bar--no-phone hidden\",\n        )}\n      >\n        {supportPhone && (\n          <a\n            href={`tel:${supportPhone.replace(/[^+\\d]/g, \"\")}`}\n            className=\"fermat-chat-support-phone-link flex items-center gap-1.5 text-[inherit] no-underline\"\n          >\n            <PhoneIcon />\n            <span>{supportLabel}</span>\n          </a>\n        )}\n      </div>\n      {maintenance ? (\n        <div\n          className=\"fermat-chat-maintenance flex flex-1 flex-col items-center justify-center gap-2 px-6 text-center\"\n          role=\"status\"\n          aria-live=\"polite\"\n        >\n          <p className=\"m-0 text-[15px] font-medium text-sa-ink\">\n            {t(\"maintenanceHeading\")}\n          </p>\n          <p className=\"m-0 text-[13px] text-sa-muted\">\n            {t(\"maintenanceBody\")}\n          </p>\n        </div>\n      ) : showAbout ? (\n        <AssistantAbout\n          name={headerTitle}\n          avatarUrl={headerAvatarUrl}\n          tagline={assistantTagline}\n          description={assistantDescription}\n          bullets={assistantInfoBullets}\n          onBack={() => setShowAbout(false)}\n        />\n      ) : (\n        <ChatMessages\n          messages={messages}\n          isLoading={isLoading}\n          brandName={brandName}\n          brandLogoUrl={brandLogoUrl}\n          assistantName={assistantName}\n          assistantAvatarUrl={assistantAvatarUrl}\n          onSendSuggestion={(q) => onSend(q, \"suggestion\")}\n          recommendationStrategy={recommendationStrategy}\n          rootProductId={rootProductId}\n          productHandle={productHandle}\n          suggestedQuestions={suggestedQuestions}\n          suggestionsResolving={suggestionsResolving}\n          onProductClicked={onProductClicked}\n          onProductATCClicked={onProductATCClicked}\n          onNavigateToProduct={onNavigateToProduct}\n          landingProduct={landingProduct}\n          landingAfterIndex={landingAfterIndex}\n          onFeedback={onFeedback}\n          votes={votes}\n          onRecordVote={onRecordVote}\n          onOpenLink={onOpenLink}\n        />\n      )}\n      {/* Gated on the transcript being visible: the about view has no turn to have failed. */}\n      {error && !showAbout && !maintenance && (\n        <div className=\"fermat-chat-error border-t border-sa-error-border bg-sa-error-bg px-4 py-3 text-[13px] text-sa-error\">\n          <p className=\"m-0\">{t(\"errorMessage\")}</p>\n        </div>\n      )}\n      {handoffSent && !maintenance && (\n        <div\n          className=\"fermat-chat-handoff-status mx-2 mb-2 rounded-[var(--sa-radius-card,var(--sa-radius,12px))] bg-sa-surface-alt px-4 py-2 text-[13px] text-sa-muted\"\n          role=\"status\"\n          aria-live=\"polite\"\n        >\n          {t(\"handoffSent\")}\n        </div>\n      )}\n      {offer &&\n        !offerIsRequested &&\n        !handoffPending &&\n        onExternalHandoff &&\n        !maintenance && (\n          <div\n            className=\"fermat-chat-handoff-offer m-2 flex flex-col gap-2 rounded-[var(--sa-radius-card,var(--sa-radius,12px))] border border-sa-border bg-sa-surface-alt p-4\"\n            role=\"group\"\n            aria-label={t(\"handoffOffer\")}\n          >\n            <p className=\"fermat-chat-handoff-offer-body m-0 text-[13px] text-sa-muted\">\n              {t(\"handoffOffer\")}\n            </p>\n            <div className=\"fermat-chat-handoff-offer-actions flex justify-end gap-2\">\n              <button\n                onClick={() => setResolvedOfferId(offer.id)}\n                className=\"fermat-chat-handoff-offer-dismiss cursor-pointer rounded-full border border-sa-border bg-sa-surface px-4 py-2 text-[13px] text-sa-ink\"\n                data-sr-role=\"chat-handoff-offer-dismiss\"\n              >\n                {t(\"handoffCancel\")}\n              </button>\n              <button\n                onClick={() => {\n                  setHandoffSent(false);\n                  setHandoffPending(true);\n                  setResolvedOfferId(offer.id);\n                  onExternalHandoffStage?.(\"prompted\");\n                }}\n                className=\"fermat-chat-handoff-offer-accept cursor-pointer rounded-full border-0 bg-sa-accent px-4 py-2 text-[13px] text-sa-accent-fg\"\n                data-sr-role=\"chat-handoff-offer-accept\"\n              >\n                {t(\"handoffLabel\")}\n              </button>\n            </div>\n          </div>\n        )}\n      {(handoffPending || offerIsRequested) &&\n        onExternalHandoff &&\n        !maintenance && (\n          // Rendered inline above the input rather than as a modal overlay: the shopper can always\n          // still read the conversation they are about to hand over, and there is no focus trap to\n          // strand them in if the host never completes the transfer.\n          <div\n            className=\"fermat-chat-handoff-confirm m-2 flex flex-col gap-2 rounded-[var(--sa-radius-card,var(--sa-radius,12px))] border border-sa-border bg-sa-surface-alt p-4\"\n            role=\"group\"\n            aria-label={t(\"handoffTitle\")}\n          >\n            <p className=\"fermat-chat-handoff-confirm-title m-0 text-sm font-semibold text-sa-ink\">\n              {t(\"handoffTitle\")}\n            </p>\n            <p className=\"fermat-chat-handoff-confirm-body m-0 text-[13px] text-sa-muted\">\n              {t(\"handoffBody\", {\n                context: brandName ? \"brand\" : \"\",\n                brand: brandName,\n              })}\n            </p>\n            <div className=\"fermat-chat-handoff-confirm-actions flex justify-end gap-2\">\n              <button\n                // Focused on mount: this card asks for a decision, so a screen-reader or keyboard user\n                // must land in it rather than have to hunt forward. Cancel is the safe default target.\n                autoFocus\n                onClick={() => {\n                  setHandoffPending(false);\n                  if (offerIsRequested && offer) setResolvedOfferId(offer.id);\n                  onExternalHandoffStage?.(\"dismissed\");\n                }}\n                className=\"fermat-chat-handoff-cancel cursor-pointer rounded-full border border-sa-border bg-sa-surface px-4 py-2 text-[13px] text-sa-ink\"\n                data-sr-role=\"chat-handoff-cancel\"\n              >\n                {t(\"handoffCancel\")}\n              </button>\n              <button\n                onClick={() => {\n                  setHandoffPending(false);\n                  setHandoffSent(true);\n                  if (offerIsRequested && offer) setResolvedOfferId(offer.id);\n                  onExternalHandoff();\n                }}\n                className=\"fermat-chat-handoff-accept cursor-pointer rounded-full border-0 bg-sa-accent px-4 py-2 text-[13px] text-sa-accent-fg\"\n                data-sr-role=\"chat-handoff-accept\"\n              >\n                {t(\"handoffConfirm\")}\n              </button>\n            </div>\n          </div>\n        )}\n      {/* The about view replaces the whole chat surface, input included: a message sent from\n          behind it would stream into a transcript the shopper cannot see. */}\n      {!showAbout && !maintenance && (\n        <ChatInput\n          onSend={onSend}\n          isLoading={isLoading}\n          hasStarted={hasStarted}\n          onClose={showMinimize ? onClose : undefined}\n        />\n      )}\n    </div>\n  );\n};\n", "/** Default English i18next bundle for the shopping-assistant widget. */\nexport const EN = {\n  supportLabel: \"Chat with an expert\",\n  supportLabel_brand: \"Chat with a {{brand}} expert\",\n  greeting:\n    \"Hi! \uD83D\uDC4B I'm your product expert. Tell me what you're shopping for and I'll help you find the right pick.\",\n  greeting_brand:\n    \"Hi! \uD83D\uDC4B I'm your {{brand}} product expert. Tell me what you're shopping for and I'll help you find the right pick.\",\n  inputPlaceholder: \"Ask about fit, features, or what to buy\u2026\",\n  inputPlaceholderFollowUp: \"Ask a follow up\",\n  welcomeHeadline: \"What are you shopping for?\",\n  suggestionsHeader: \"Popular questions\",\n  heroSuggestedQuestions: [\n    \"Is this a good fit for what I need?\",\n    \"How does this compare to similar products?\",\n    \"What do reviewers say about it?\",\n  ],\n  discoverySuggestedQuestions: [\n    \"Help me narrow down my options\",\n    \"What are your bestsellers?\",\n    \"What's on sale right now?\",\n  ],\n  recsHeadingWithProduct: \"Top picks similar to the <bold>{{product}}</bold>\",\n  recsHeading: \"Top picks for you\",\n  landingSectionLabel: \"You opened\",\n  landingHeading: \"Looking at the {{product}}\",\n  landingChips: [\n    \"Is this my size?\",\n    \"Compare similar items\",\n    \"Show me similar options\",\n  ],\n  disclaimer:\n    \"AI-powered and trained on our catalog. Double-check details before you buy.\",\n  errorMessage: \"That didn't go through. Please try again in a moment.\",\n  maintenanceHeading: \"The assistant is offline for maintenance\",\n  maintenanceBody:\n    \"We're working on it. Please check back shortly, or keep browsing in the meantime.\",\n  resetLabel: \"Start over\",\n  addToCartLabel: \"Add to Cart\",\n  viewCartLabel: \"View Cart\",\n  outOfStockLabel: \"Out of stock\",\n  imagePrevLabel: \"Previous image\",\n  imageNextLabel: \"Next image\",\n  priceFromLabel: \"From {{price}}\",\n  discountLabel: \"{{percent}}% off\",\n  colorTrackLabel: \"Choose a color\",\n  sizeTrackLabel: \"Choose a size\",\n  // Kept short deliberately: this is the visible button text on a 140px card, and \"Select an option\n  // first\" wrapped to two lines, which made the card taller than its own loading placeholder.\n  variantSelectPrompt: \"Select an option\",\n  aboutBackLabel: \"Back to chat\",\n  aboutBulletsHeading: \"What I can help with\",\n  loadingLabel: \"Finding the best options for you\u2026\",\n  loadingPhrases: [\n    \"Searching the catalog\",\n    \"Comparing the options\",\n    \"Reading through reviews\",\n    \"Cross-referencing fit and sizing\",\n    \"Matching to what you need\",\n    \"Putting together recommendations\",\n  ],\n  loadingPhrases_brand: [\n    \"Searching the {{brand}} catalog\",\n    \"Comparing the options\",\n    \"Reading through reviews\",\n    \"Cross-referencing fit and sizing\",\n    \"Matching to what you need\",\n    \"Putting together recommendations\",\n  ],\n  handoffLabel: \"Talk to a person\",\n  handoffTitle: \"Talk to a person?\",\n  // The handoff sends no transcript: Claire starts the vendor chat from the configured seed message\n  // only. Do not reintroduce a sharing claim in this copy.\n  handoffBody: \"We'll connect you with a live expert.\",\n  handoffBody_brand: \"We'll connect you with a live {{brand}} expert.\",\n  handoffConfirm: \"Connect me\",\n  handoffCancel: \"Not now\",\n  handoffSent: \"Opening a chat with a person\u2026\",\n  handoffOffer: \"Would it help to talk to a person?\",\n  aria_openChat: \"Open chat\",\n  aria_closeChat: \"Close chat\",\n  aria_minimizeChat: \"Minimize chat\",\n  aria_sendMessage: \"Send message\",\n  aria_resetChat: \"Start over\",\n  aria_handoff: \"Talk to a person\",\n  aria_feedbackUp: \"Helpful\",\n  aria_feedbackDown: \"Not helpful\",\n  feedbackCommentPlaceholder: \"What went wrong? (optional)\",\n  feedbackCommentSubmit: \"Submit\",\n  feedbackCommentSkip: \"Skip\",\n} as const;\n\nexport const NS = \"translation\";\n\nexport type SamuelCopyOverrides = Partial<\n  Record<keyof typeof EN, string | string[]>\n>;\n", "const isString = obj => typeof obj === 'string';\nconst defer = () => {\n  let res;\n  let rej;\n  const promise = new Promise((resolve, reject) => {\n    res = resolve;\n    rej = reject;\n  });\n  promise.resolve = res;\n  promise.reject = rej;\n  return promise;\n};\nconst makeString = object => {\n  if (object == null) return '';\n  return '' + object;\n};\nconst copy = (a, s, t) => {\n  a.forEach(m => {\n    if (s[m]) t[m] = s[m];\n  });\n};\nconst lastOfPathSeparatorRegExp = /###/g;\nconst cleanKey = key => key && key.indexOf('###') > -1 ? key.replace(lastOfPathSeparatorRegExp, '.') : key;\nconst canNotTraverseDeeper = object => !object || isString(object);\nconst getLastOfPath = (object, path, Empty) => {\n  const stack = !isString(path) ? path : path.split('.');\n  let stackIndex = 0;\n  while (stackIndex < stack.length - 1) {\n    if (canNotTraverseDeeper(object)) return {};\n    const key = cleanKey(stack[stackIndex]);\n    if (!object[key] && Empty) object[key] = new Empty();\n    if (Object.prototype.hasOwnProperty.call(object, key)) {\n      object = object[key];\n    } else {\n      object = {};\n    }\n    ++stackIndex;\n  }\n  if (canNotTraverseDeeper(object)) return {};\n  return {\n    obj: object,\n    k: cleanKey(stack[stackIndex])\n  };\n};\nconst setPath = (object, path, newValue) => {\n  const {\n    obj,\n    k\n  } = getLastOfPath(object, path, Object);\n  if (obj !== undefined || path.length === 1) {\n    obj[k] = newValue;\n    return;\n  }\n  let e = path[path.length - 1];\n  let p = path.slice(0, path.length - 1);\n  let last = getLastOfPath(object, p, Object);\n  while (last.obj === undefined && p.length) {\n    e = `${p[p.length - 1]}.${e}`;\n    p = p.slice(0, p.length - 1);\n    last = getLastOfPath(object, p, Object);\n    if (last && last.obj && typeof last.obj[`${last.k}.${e}`] !== 'undefined') {\n      last.obj = undefined;\n    }\n  }\n  last.obj[`${last.k}.${e}`] = newValue;\n};\nconst pushPath = (object, path, newValue, concat) => {\n  const {\n    obj,\n    k\n  } = getLastOfPath(object, path, Object);\n  obj[k] = obj[k] || [];\n  obj[k].push(newValue);\n};\nconst getPath = (object, path) => {\n  const {\n    obj,\n    k\n  } = getLastOfPath(object, path);\n  if (!obj) return undefined;\n  return obj[k];\n};\nconst getPathWithDefaults = (data, defaultData, key) => {\n  const value = getPath(data, key);\n  if (value !== undefined) {\n    return value;\n  }\n  return getPath(defaultData, key);\n};\nconst deepExtend = (target, source, overwrite) => {\n  for (const prop in source) {\n    if (prop !== '__proto__' && prop !== 'constructor') {\n      if (prop in target) {\n        if (isString(target[prop]) || target[prop] instanceof String || isString(source[prop]) || source[prop] instanceof String) {\n          if (overwrite) target[prop] = source[prop];\n        } else {\n          deepExtend(target[prop], source[prop], overwrite);\n        }\n      } else {\n        target[prop] = source[prop];\n      }\n    }\n  }\n  return target;\n};\nconst regexEscape = str => str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\nvar _entityMap = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;',\n  \"'\": '&#39;',\n  '/': '&#x2F;'\n};\nconst escape = data => {\n  if (isString(data)) {\n    return data.replace(/[&<>\"'\\/]/g, s => _entityMap[s]);\n  }\n  return data;\n};\nclass RegExpCache {\n  constructor(capacity) {\n    this.capacity = capacity;\n    this.regExpMap = new Map();\n    this.regExpQueue = [];\n  }\n  getRegExp(pattern) {\n    const regExpFromCache = this.regExpMap.get(pattern);\n    if (regExpFromCache !== undefined) {\n      return regExpFromCache;\n    }\n    const regExpNew = new RegExp(pattern);\n    if (this.regExpQueue.length === this.capacity) {\n      this.regExpMap.delete(this.regExpQueue.shift());\n    }\n    this.regExpMap.set(pattern, regExpNew);\n    this.regExpQueue.push(pattern);\n    return regExpNew;\n  }\n}\nconst chars = [' ', ',', '?', '!', ';'];\nconst looksLikeObjectPathRegExpCache = new RegExpCache(20);\nconst looksLikeObjectPath = (key, nsSeparator, keySeparator) => {\n  nsSeparator = nsSeparator || '';\n  keySeparator = keySeparator || '';\n  const possibleChars = chars.filter(c => nsSeparator.indexOf(c) < 0 && keySeparator.indexOf(c) < 0);\n  if (possibleChars.length === 0) return true;\n  const r = looksLikeObjectPathRegExpCache.getRegExp(`(${possibleChars.map(c => c === '?' ? '\\\\?' : c).join('|')})`);\n  let matched = !r.test(key);\n  if (!matched) {\n    const ki = key.indexOf(keySeparator);\n    if (ki > 0 && !r.test(key.substring(0, ki))) {\n      matched = true;\n    }\n  }\n  return matched;\n};\nconst deepFind = function (obj, path) {\n  let keySeparator = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '.';\n  if (!obj) return undefined;\n  if (obj[path]) return obj[path];\n  const tokens = path.split(keySeparator);\n  let current = obj;\n  for (let i = 0; i < tokens.length;) {\n    if (!current || typeof current !== 'object') {\n      return undefined;\n    }\n    let next;\n    let nextPath = '';\n    for (let j = i; j < tokens.length; ++j) {\n      if (j !== i) {\n        nextPath += keySeparator;\n      }\n      nextPath += tokens[j];\n      next = current[nextPath];\n      if (next !== undefined) {\n        if (['string', 'number', 'boolean'].indexOf(typeof next) > -1 && j < tokens.length - 1) {\n          continue;\n        }\n        i += j - i + 1;\n        break;\n      }\n    }\n    current = next;\n  }\n  return current;\n};\nconst getCleanedCode = code => code && code.replace('_', '-');\n\nconst consoleLogger = {\n  type: 'logger',\n  log(args) {\n    this.output('log', args);\n  },\n  warn(args) {\n    this.output('warn', args);\n  },\n  error(args) {\n    this.output('error', args);\n  },\n  output(type, args) {\n    if (console && console[type]) console[type].apply(console, args);\n  }\n};\nclass Logger {\n  constructor(concreteLogger) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    this.init(concreteLogger, options);\n  }\n  init(concreteLogger) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    this.prefix = options.prefix || 'i18next:';\n    this.logger = concreteLogger || consoleLogger;\n    this.options = options;\n    this.debug = options.debug;\n  }\n  log() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    return this.forward(args, 'log', '', true);\n  }\n  warn() {\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n    return this.forward(args, 'warn', '', true);\n  }\n  error() {\n    for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n      args[_key3] = arguments[_key3];\n    }\n    return this.forward(args, 'error', '');\n  }\n  deprecate() {\n    for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n      args[_key4] = arguments[_key4];\n    }\n    return this.forward(args, 'warn', 'WARNING DEPRECATED: ', true);\n  }\n  forward(args, lvl, prefix, debugOnly) {\n    if (debugOnly && !this.debug) return null;\n    if (isString(args[0])) args[0] = `${prefix}${this.prefix} ${args[0]}`;\n    return this.logger[lvl](args);\n  }\n  create(moduleName) {\n    return new Logger(this.logger, {\n      ...{\n        prefix: `${this.prefix}:${moduleName}:`\n      },\n      ...this.options\n    });\n  }\n  clone(options) {\n    options = options || this.options;\n    options.prefix = options.prefix || this.prefix;\n    return new Logger(this.logger, options);\n  }\n}\nvar baseLogger = new Logger();\n\nclass EventEmitter {\n  constructor() {\n    this.observers = {};\n  }\n  on(events, listener) {\n    events.split(' ').forEach(event => {\n      if (!this.observers[event]) this.observers[event] = new Map();\n      const numListeners = this.observers[event].get(listener) || 0;\n      this.observers[event].set(listener, numListeners + 1);\n    });\n    return this;\n  }\n  off(event, listener) {\n    if (!this.observers[event]) return;\n    if (!listener) {\n      delete this.observers[event];\n      return;\n    }\n    this.observers[event].delete(listener);\n  }\n  emit(event) {\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n    if (this.observers[event]) {\n      const cloned = Array.from(this.observers[event].entries());\n      cloned.forEach(_ref => {\n        let [observer, numTimesAdded] = _ref;\n        for (let i = 0; i < numTimesAdded; i++) {\n          observer(...args);\n        }\n      });\n    }\n    if (this.observers['*']) {\n      const cloned = Array.from(this.observers['*'].entries());\n      cloned.forEach(_ref2 => {\n        let [observer, numTimesAdded] = _ref2;\n        for (let i = 0; i < numTimesAdded; i++) {\n          observer.apply(observer, [event, ...args]);\n        }\n      });\n    }\n  }\n}\n\nclass ResourceStore extends EventEmitter {\n  constructor(data) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n      ns: ['translation'],\n      defaultNS: 'translation'\n    };\n    super();\n    this.data = data || {};\n    this.options = options;\n    if (this.options.keySeparator === undefined) {\n      this.options.keySeparator = '.';\n    }\n    if (this.options.ignoreJSONStructure === undefined) {\n      this.options.ignoreJSONStructure = true;\n    }\n  }\n  addNamespaces(ns) {\n    if (this.options.ns.indexOf(ns) < 0) {\n      this.options.ns.push(ns);\n    }\n  }\n  removeNamespaces(ns) {\n    const index = this.options.ns.indexOf(ns);\n    if (index > -1) {\n      this.options.ns.splice(index, 1);\n    }\n  }\n  getResource(lng, ns, key) {\n    let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n    const ignoreJSONStructure = options.ignoreJSONStructure !== undefined ? options.ignoreJSONStructure : this.options.ignoreJSONStructure;\n    let path;\n    if (lng.indexOf('.') > -1) {\n      path = lng.split('.');\n    } else {\n      path = [lng, ns];\n      if (key) {\n        if (Array.isArray(key)) {\n          path.push(...key);\n        } else if (isString(key) && keySeparator) {\n          path.push(...key.split(keySeparator));\n        } else {\n          path.push(key);\n        }\n      }\n    }\n    const result = getPath(this.data, path);\n    if (!result && !ns && !key && lng.indexOf('.') > -1) {\n      lng = path[0];\n      ns = path[1];\n      key = path.slice(2).join('.');\n    }\n    if (result || !ignoreJSONStructure || !isString(key)) return result;\n    return deepFind(this.data && this.data[lng] && this.data[lng][ns], key, keySeparator);\n  }\n  addResource(lng, ns, key, value) {\n    let options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {\n      silent: false\n    };\n    const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n    let path = [lng, ns];\n    if (key) path = path.concat(keySeparator ? key.split(keySeparator) : key);\n    if (lng.indexOf('.') > -1) {\n      path = lng.split('.');\n      value = ns;\n      ns = path[1];\n    }\n    this.addNamespaces(ns);\n    setPath(this.data, path, value);\n    if (!options.silent) this.emit('added', lng, ns, key, value);\n  }\n  addResources(lng, ns, resources) {\n    let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {\n      silent: false\n    };\n    for (const m in resources) {\n      if (isString(resources[m]) || Array.isArray(resources[m])) this.addResource(lng, ns, m, resources[m], {\n        silent: true\n      });\n    }\n    if (!options.silent) this.emit('added', lng, ns, resources);\n  }\n  addResourceBundle(lng, ns, resources, deep, overwrite) {\n    let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {\n      silent: false,\n      skipCopy: false\n    };\n    let path = [lng, ns];\n    if (lng.indexOf('.') > -1) {\n      path = lng.split('.');\n      deep = resources;\n      resources = ns;\n      ns = path[1];\n    }\n    this.addNamespaces(ns);\n    let pack = getPath(this.data, path) || {};\n    if (!options.skipCopy) resources = JSON.parse(JSON.stringify(resources));\n    if (deep) {\n      deepExtend(pack, resources, overwrite);\n    } else {\n      pack = {\n        ...pack,\n        ...resources\n      };\n    }\n    setPath(this.data, path, pack);\n    if (!options.silent) this.emit('added', lng, ns, resources);\n  }\n  removeResourceBundle(lng, ns) {\n    if (this.hasResourceBundle(lng, ns)) {\n      delete this.data[lng][ns];\n    }\n    this.removeNamespaces(ns);\n    this.emit('removed', lng, ns);\n  }\n  hasResourceBundle(lng, ns) {\n    return this.getResource(lng, ns) !== undefined;\n  }\n  getResourceBundle(lng, ns) {\n    if (!ns) ns = this.options.defaultNS;\n    if (this.options.compatibilityAPI === 'v1') return {\n      ...{},\n      ...this.getResource(lng, ns)\n    };\n    return this.getResource(lng, ns);\n  }\n  getDataByLanguage(lng) {\n    return this.data[lng];\n  }\n  hasLanguageSomeTranslations(lng) {\n    const data = this.getDataByLanguage(lng);\n    const n = data && Object.keys(data) || [];\n    return !!n.find(v => data[v] && Object.keys(data[v]).length > 0);\n  }\n  toJSON() {\n    return this.data;\n  }\n}\n\nvar postProcessor = {\n  processors: {},\n  addPostProcessor(module) {\n    this.processors[module.name] = module;\n  },\n  handle(processors, value, key, options, translator) {\n    processors.forEach(processor => {\n      if (this.processors[processor]) value = this.processors[processor].process(value, key, options, translator);\n    });\n    return value;\n  }\n};\n\nconst checkedLoadedFor = {};\nclass Translator extends EventEmitter {\n  constructor(services) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    super();\n    copy(['resourceStore', 'languageUtils', 'pluralResolver', 'interpolator', 'backendConnector', 'i18nFormat', 'utils'], services, this);\n    this.options = options;\n    if (this.options.keySeparator === undefined) {\n      this.options.keySeparator = '.';\n    }\n    this.logger = baseLogger.create('translator');\n  }\n  changeLanguage(lng) {\n    if (lng) this.language = lng;\n  }\n  exists(key) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n      interpolation: {}\n    };\n    if (key === undefined || key === null) {\n      return false;\n    }\n    const resolved = this.resolve(key, options);\n    return resolved && resolved.res !== undefined;\n  }\n  extractFromKey(key, options) {\n    let nsSeparator = options.nsSeparator !== undefined ? options.nsSeparator : this.options.nsSeparator;\n    if (nsSeparator === undefined) nsSeparator = ':';\n    const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n    let namespaces = options.ns || this.options.defaultNS || [];\n    const wouldCheckForNsInKey = nsSeparator && key.indexOf(nsSeparator) > -1;\n    const seemsNaturalLanguage = !this.options.userDefinedKeySeparator && !options.keySeparator && !this.options.userDefinedNsSeparator && !options.nsSeparator && !looksLikeObjectPath(key, nsSeparator, keySeparator);\n    if (wouldCheckForNsInKey && !seemsNaturalLanguage) {\n      const m = key.match(this.interpolator.nestingRegexp);\n      if (m && m.length > 0) {\n        return {\n          key,\n          namespaces: isString(namespaces) ? [namespaces] : namespaces\n        };\n      }\n      const parts = key.split(nsSeparator);\n      if (nsSeparator !== keySeparator || nsSeparator === keySeparator && this.options.ns.indexOf(parts[0]) > -1) namespaces = parts.shift();\n      key = parts.join(keySeparator);\n    }\n    return {\n      key,\n      namespaces: isString(namespaces) ? [namespaces] : namespaces\n    };\n  }\n  translate(keys, options, lastKey) {\n    if (typeof options !== 'object' && this.options.overloadTranslationOptionHandler) {\n      options = this.options.overloadTranslationOptionHandler(arguments);\n    }\n    if (typeof options === 'object') options = {\n      ...options\n    };\n    if (!options) options = {};\n    if (keys === undefined || keys === null) return '';\n    if (!Array.isArray(keys)) keys = [String(keys)];\n    const returnDetails = options.returnDetails !== undefined ? options.returnDetails : this.options.returnDetails;\n    const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n    const {\n      key,\n      namespaces\n    } = this.extractFromKey(keys[keys.length - 1], options);\n    const namespace = namespaces[namespaces.length - 1];\n    const lng = options.lng || this.language;\n    const appendNamespaceToCIMode = options.appendNamespaceToCIMode || this.options.appendNamespaceToCIMode;\n    if (lng && lng.toLowerCase() === 'cimode') {\n      if (appendNamespaceToCIMode) {\n        const nsSeparator = options.nsSeparator || this.options.nsSeparator;\n        if (returnDetails) {\n          return {\n            res: `${namespace}${nsSeparator}${key}`,\n            usedKey: key,\n            exactUsedKey: key,\n            usedLng: lng,\n            usedNS: namespace,\n            usedParams: this.getUsedParamsDetails(options)\n          };\n        }\n        return `${namespace}${nsSeparator}${key}`;\n      }\n      if (returnDetails) {\n        return {\n          res: key,\n          usedKey: key,\n          exactUsedKey: key,\n          usedLng: lng,\n          usedNS: namespace,\n          usedParams: this.getUsedParamsDetails(options)\n        };\n      }\n      return key;\n    }\n    const resolved = this.resolve(keys, options);\n    let res = resolved && resolved.res;\n    const resUsedKey = resolved && resolved.usedKey || key;\n    const resExactUsedKey = resolved && resolved.exactUsedKey || key;\n    const resType = Object.prototype.toString.apply(res);\n    const noObject = ['[object Number]', '[object Function]', '[object RegExp]'];\n    const joinArrays = options.joinArrays !== undefined ? options.joinArrays : this.options.joinArrays;\n    const handleAsObjectInI18nFormat = !this.i18nFormat || this.i18nFormat.handleAsObject;\n    const handleAsObject = !isString(res) && typeof res !== 'boolean' && typeof res !== 'number';\n    if (handleAsObjectInI18nFormat && res && handleAsObject && noObject.indexOf(resType) < 0 && !(isString(joinArrays) && Array.isArray(res))) {\n      if (!options.returnObjects && !this.options.returnObjects) {\n        if (!this.options.returnedObjectHandler) {\n          this.logger.warn('accessing an object - but returnObjects options is not enabled!');\n        }\n        const r = this.options.returnedObjectHandler ? this.options.returnedObjectHandler(resUsedKey, res, {\n          ...options,\n          ns: namespaces\n        }) : `key '${key} (${this.language})' returned an object instead of string.`;\n        if (returnDetails) {\n          resolved.res = r;\n          resolved.usedParams = this.getUsedParamsDetails(options);\n          return resolved;\n        }\n        return r;\n      }\n      if (keySeparator) {\n        const resTypeIsArray = Array.isArray(res);\n        const copy = resTypeIsArray ? [] : {};\n        const newKeyToUse = resTypeIsArray ? resExactUsedKey : resUsedKey;\n        for (const m in res) {\n          if (Object.prototype.hasOwnProperty.call(res, m)) {\n            const deepKey = `${newKeyToUse}${keySeparator}${m}`;\n            copy[m] = this.translate(deepKey, {\n              ...options,\n              ...{\n                joinArrays: false,\n                ns: namespaces\n              }\n            });\n            if (copy[m] === deepKey) copy[m] = res[m];\n          }\n        }\n        res = copy;\n      }\n    } else if (handleAsObjectInI18nFormat && isString(joinArrays) && Array.isArray(res)) {\n      res = res.join(joinArrays);\n      if (res) res = this.extendTranslation(res, keys, options, lastKey);\n    } else {\n      let usedDefault = false;\n      let usedKey = false;\n      const needsPluralHandling = options.count !== undefined && !isString(options.count);\n      const hasDefaultValue = Translator.hasDefaultValue(options);\n      const defaultValueSuffix = needsPluralHandling ? this.pluralResolver.getSuffix(lng, options.count, options) : '';\n      const defaultValueSuffixOrdinalFallback = options.ordinal && needsPluralHandling ? this.pluralResolver.getSuffix(lng, options.count, {\n        ordinal: false\n      }) : '';\n      const needsZeroSuffixLookup = needsPluralHandling && !options.ordinal && options.count === 0 && this.pluralResolver.shouldUseIntlApi();\n      const defaultValue = needsZeroSuffixLookup && options[`defaultValue${this.options.pluralSeparator}zero`] || options[`defaultValue${defaultValueSuffix}`] || options[`defaultValue${defaultValueSuffixOrdinalFallback}`] || options.defaultValue;\n      if (!this.isValidLookup(res) && hasDefaultValue) {\n        usedDefault = true;\n        res = defaultValue;\n      }\n      if (!this.isValidLookup(res)) {\n        usedKey = true;\n        res = key;\n      }\n      const missingKeyNoValueFallbackToKey = options.missingKeyNoValueFallbackToKey || this.options.missingKeyNoValueFallbackToKey;\n      const resForMissing = missingKeyNoValueFallbackToKey && usedKey ? undefined : res;\n      const updateMissing = hasDefaultValue && defaultValue !== res && this.options.updateMissing;\n      if (usedKey || usedDefault || updateMissing) {\n        this.logger.log(updateMissing ? 'updateKey' : 'missingKey', lng, namespace, key, updateMissing ? defaultValue : res);\n        if (keySeparator) {\n          const fk = this.resolve(key, {\n            ...options,\n            keySeparator: false\n          });\n          if (fk && fk.res) this.logger.warn('Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.');\n        }\n        let lngs = [];\n        const fallbackLngs = this.languageUtils.getFallbackCodes(this.options.fallbackLng, options.lng || this.language);\n        if (this.options.saveMissingTo === 'fallback' && fallbackLngs && fallbackLngs[0]) {\n          for (let i = 0; i < fallbackLngs.length; i++) {\n            lngs.push(fallbackLngs[i]);\n          }\n        } else if (this.options.saveMissingTo === 'all') {\n          lngs = this.languageUtils.toResolveHierarchy(options.lng || this.language);\n        } else {\n          lngs.push(options.lng || this.language);\n        }\n        const send = (l, k, specificDefaultValue) => {\n          const defaultForMissing = hasDefaultValue && specificDefaultValue !== res ? specificDefaultValue : resForMissing;\n          if (this.options.missingKeyHandler) {\n            this.options.missingKeyHandler(l, namespace, k, defaultForMissing, updateMissing, options);\n          } else if (this.backendConnector && this.backendConnector.saveMissing) {\n            this.backendConnector.saveMissing(l, namespace, k, defaultForMissing, updateMissing, options);\n          }\n          this.emit('missingKey', l, namespace, k, res);\n        };\n        if (this.options.saveMissing) {\n          if (this.options.saveMissingPlurals && needsPluralHandling) {\n            lngs.forEach(language => {\n              const suffixes = this.pluralResolver.getSuffixes(language, options);\n              if (needsZeroSuffixLookup && options[`defaultValue${this.options.pluralSeparator}zero`] && suffixes.indexOf(`${this.options.pluralSeparator}zero`) < 0) {\n                suffixes.push(`${this.options.pluralSeparator}zero`);\n              }\n              suffixes.forEach(suffix => {\n                send([language], key + suffix, options[`defaultValue${suffix}`] || defaultValue);\n              });\n            });\n          } else {\n            send(lngs, key, defaultValue);\n          }\n        }\n      }\n      res = this.extendTranslation(res, keys, options, resolved, lastKey);\n      if (usedKey && res === key && this.options.appendNamespaceToMissingKey) res = `${namespace}:${key}`;\n      if ((usedKey || usedDefault) && this.options.parseMissingKeyHandler) {\n        if (this.options.compatibilityAPI !== 'v1') {\n          res = this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey ? `${namespace}:${key}` : key, usedDefault ? res : undefined);\n        } else {\n          res = this.options.parseMissingKeyHandler(res);\n        }\n      }\n    }\n    if (returnDetails) {\n      resolved.res = res;\n      resolved.usedParams = this.getUsedParamsDetails(options);\n      return resolved;\n    }\n    return res;\n  }\n  extendTranslation(res, key, options, resolved, lastKey) {\n    var _this = this;\n    if (this.i18nFormat && this.i18nFormat.parse) {\n      res = this.i18nFormat.parse(res, {\n        ...this.options.interpolation.defaultVariables,\n        ...options\n      }, options.lng || this.language || resolved.usedLng, resolved.usedNS, resolved.usedKey, {\n        resolved\n      });\n    } else if (!options.skipInterpolation) {\n      if (options.interpolation) this.interpolator.init({\n        ...options,\n        ...{\n          interpolation: {\n            ...this.options.interpolation,\n            ...options.interpolation\n          }\n        }\n      });\n      const skipOnVariables = isString(res) && (options && options.interpolation && options.interpolation.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables);\n      let nestBef;\n      if (skipOnVariables) {\n        const nb = res.match(this.interpolator.nestingRegexp);\n        nestBef = nb && nb.length;\n      }\n      let data = options.replace && !isString(options.replace) ? options.replace : options;\n      if (this.options.interpolation.defaultVariables) data = {\n        ...this.options.interpolation.defaultVariables,\n        ...data\n      };\n      res = this.interpolator.interpolate(res, data, options.lng || this.language || resolved.usedLng, options);\n      if (skipOnVariables) {\n        const na = res.match(this.interpolator.nestingRegexp);\n        const nestAft = na && na.length;\n        if (nestBef < nestAft) options.nest = false;\n      }\n      if (!options.lng && this.options.compatibilityAPI !== 'v1' && resolved && resolved.res) options.lng = this.language || resolved.usedLng;\n      if (options.nest !== false) res = this.interpolator.nest(res, function () {\n        for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n          args[_key] = arguments[_key];\n        }\n        if (lastKey && lastKey[0] === args[0] && !options.context) {\n          _this.logger.warn(`It seems you are nesting recursively key: ${args[0]} in key: ${key[0]}`);\n          return null;\n        }\n        return _this.translate(...args, key);\n      }, options);\n      if (options.interpolation) this.interpolator.reset();\n    }\n    const postProcess = options.postProcess || this.options.postProcess;\n    const postProcessorNames = isString(postProcess) ? [postProcess] : postProcess;\n    if (res !== undefined && res !== null && postProcessorNames && postProcessorNames.length && options.applyPostProcessor !== false) {\n      res = postProcessor.handle(postProcessorNames, res, key, this.options && this.options.postProcessPassResolved ? {\n        i18nResolved: {\n          ...resolved,\n          usedParams: this.getUsedParamsDetails(options)\n        },\n        ...options\n      } : options, this);\n    }\n    return res;\n  }\n  resolve(keys) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    let found;\n    let usedKey;\n    let exactUsedKey;\n    let usedLng;\n    let usedNS;\n    if (isString(keys)) keys = [keys];\n    keys.forEach(k => {\n      if (this.isValidLookup(found)) return;\n      const extracted = this.extractFromKey(k, options);\n      const key = extracted.key;\n      usedKey = key;\n      let namespaces = extracted.namespaces;\n      if (this.options.fallbackNS) namespaces = namespaces.concat(this.options.fallbackNS);\n      const needsPluralHandling = options.count !== undefined && !isString(options.count);\n      const needsZeroSuffixLookup = needsPluralHandling && !options.ordinal && options.count === 0 && this.pluralResolver.shouldUseIntlApi();\n      const needsContextHandling = options.context !== undefined && (isString(options.context) || typeof options.context === 'number') && options.context !== '';\n      const codes = options.lngs ? options.lngs : this.languageUtils.toResolveHierarchy(options.lng || this.language, options.fallbackLng);\n      namespaces.forEach(ns => {\n        if (this.isValidLookup(found)) return;\n        usedNS = ns;\n        if (!checkedLoadedFor[`${codes[0]}-${ns}`] && this.utils && this.utils.hasLoadedNamespace && !this.utils.hasLoadedNamespace(usedNS)) {\n          checkedLoadedFor[`${codes[0]}-${ns}`] = true;\n          this.logger.warn(`key \"${usedKey}\" for languages \"${codes.join(', ')}\" won't get resolved as namespace \"${usedNS}\" was not yet loaded`, 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n        }\n        codes.forEach(code => {\n          if (this.isValidLookup(found)) return;\n          usedLng = code;\n          const finalKeys = [key];\n          if (this.i18nFormat && this.i18nFormat.addLookupKeys) {\n            this.i18nFormat.addLookupKeys(finalKeys, key, code, ns, options);\n          } else {\n            let pluralSuffix;\n            if (needsPluralHandling) pluralSuffix = this.pluralResolver.getSuffix(code, options.count, options);\n            const zeroSuffix = `${this.options.pluralSeparator}zero`;\n            const ordinalPrefix = `${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;\n            if (needsPluralHandling) {\n              finalKeys.push(key + pluralSuffix);\n              if (options.ordinal && pluralSuffix.indexOf(ordinalPrefix) === 0) {\n                finalKeys.push(key + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator));\n              }\n              if (needsZeroSuffixLookup) {\n                finalKeys.push(key + zeroSuffix);\n              }\n            }\n            if (needsContextHandling) {\n              const contextKey = `${key}${this.options.contextSeparator}${options.context}`;\n              finalKeys.push(contextKey);\n              if (needsPluralHandling) {\n                finalKeys.push(contextKey + pluralSuffix);\n                if (options.ordinal && pluralSuffix.indexOf(ordinalPrefix) === 0) {\n                  finalKeys.push(contextKey + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator));\n                }\n                if (needsZeroSuffixLookup) {\n                  finalKeys.push(contextKey + zeroSuffix);\n                }\n              }\n            }\n          }\n          let possibleKey;\n          while (possibleKey = finalKeys.pop()) {\n            if (!this.isValidLookup(found)) {\n              exactUsedKey = possibleKey;\n              found = this.getResource(code, ns, possibleKey, options);\n            }\n          }\n        });\n      });\n    });\n    return {\n      res: found,\n      usedKey,\n      exactUsedKey,\n      usedLng,\n      usedNS\n    };\n  }\n  isValidLookup(res) {\n    return res !== undefined && !(!this.options.returnNull && res === null) && !(!this.options.returnEmptyString && res === '');\n  }\n  getResource(code, ns, key) {\n    let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    if (this.i18nFormat && this.i18nFormat.getResource) return this.i18nFormat.getResource(code, ns, key, options);\n    return this.resourceStore.getResource(code, ns, key, options);\n  }\n  getUsedParamsDetails() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    const optionsKeys = ['defaultValue', 'ordinal', 'context', 'replace', 'lng', 'lngs', 'fallbackLng', 'ns', 'keySeparator', 'nsSeparator', 'returnObjects', 'returnDetails', 'joinArrays', 'postProcess', 'interpolation'];\n    const useOptionsReplaceForData = options.replace && !isString(options.replace);\n    let data = useOptionsReplaceForData ? options.replace : options;\n    if (useOptionsReplaceForData && typeof options.count !== 'undefined') {\n      data.count = options.count;\n    }\n    if (this.options.interpolation.defaultVariables) {\n      data = {\n        ...this.options.interpolation.defaultVariables,\n        ...data\n      };\n    }\n    if (!useOptionsReplaceForData) {\n      data = {\n        ...data\n      };\n      for (const key of optionsKeys) {\n        delete data[key];\n      }\n    }\n    return data;\n  }\n  static hasDefaultValue(options) {\n    const prefix = 'defaultValue';\n    for (const option in options) {\n      if (Object.prototype.hasOwnProperty.call(options, option) && prefix === option.substring(0, prefix.length) && undefined !== options[option]) {\n        return true;\n      }\n    }\n    return false;\n  }\n}\n\nconst capitalize = string => string.charAt(0).toUpperCase() + string.slice(1);\nclass LanguageUtil {\n  constructor(options) {\n    this.options = options;\n    this.supportedLngs = this.options.supportedLngs || false;\n    this.logger = baseLogger.create('languageUtils');\n  }\n  getScriptPartFromCode(code) {\n    code = getCleanedCode(code);\n    if (!code || code.indexOf('-') < 0) return null;\n    const p = code.split('-');\n    if (p.length === 2) return null;\n    p.pop();\n    if (p[p.length - 1].toLowerCase() === 'x') return null;\n    return this.formatLanguageCode(p.join('-'));\n  }\n  getLanguagePartFromCode(code) {\n    code = getCleanedCode(code);\n    if (!code || code.indexOf('-') < 0) return code;\n    const p = code.split('-');\n    return this.formatLanguageCode(p[0]);\n  }\n  formatLanguageCode(code) {\n    if (isString(code) && code.indexOf('-') > -1) {\n      if (typeof Intl !== 'undefined' && typeof Intl.getCanonicalLocales !== 'undefined') {\n        try {\n          let formattedCode = Intl.getCanonicalLocales(code)[0];\n          if (formattedCode && this.options.lowerCaseLng) {\n            formattedCode = formattedCode.toLowerCase();\n          }\n          if (formattedCode) return formattedCode;\n        } catch (e) {}\n      }\n      const specialCases = ['hans', 'hant', 'latn', 'cyrl', 'cans', 'mong', 'arab'];\n      let p = code.split('-');\n      if (this.options.lowerCaseLng) {\n        p = p.map(part => part.toLowerCase());\n      } else if (p.length === 2) {\n        p[0] = p[0].toLowerCase();\n        p[1] = p[1].toUpperCase();\n        if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n      } else if (p.length === 3) {\n        p[0] = p[0].toLowerCase();\n        if (p[1].length === 2) p[1] = p[1].toUpperCase();\n        if (p[0] !== 'sgn' && p[2].length === 2) p[2] = p[2].toUpperCase();\n        if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n        if (specialCases.indexOf(p[2].toLowerCase()) > -1) p[2] = capitalize(p[2].toLowerCase());\n      }\n      return p.join('-');\n    }\n    return this.options.cleanCode || this.options.lowerCaseLng ? code.toLowerCase() : code;\n  }\n  isSupportedCode(code) {\n    if (this.options.load === 'languageOnly' || this.options.nonExplicitSupportedLngs) {\n      code = this.getLanguagePartFromCode(code);\n    }\n    return !this.supportedLngs || !this.supportedLngs.length || this.supportedLngs.indexOf(code) > -1;\n  }\n  getBestMatchFromCodes(codes) {\n    if (!codes) return null;\n    let found;\n    codes.forEach(code => {\n      if (found) return;\n      const cleanedLng = this.formatLanguageCode(code);\n      if (!this.options.supportedLngs || this.isSupportedCode(cleanedLng)) found = cleanedLng;\n    });\n    if (!found && this.options.supportedLngs) {\n      codes.forEach(code => {\n        if (found) return;\n        const lngOnly = this.getLanguagePartFromCode(code);\n        if (this.isSupportedCode(lngOnly)) return found = lngOnly;\n        found = this.options.supportedLngs.find(supportedLng => {\n          if (supportedLng === lngOnly) return supportedLng;\n          if (supportedLng.indexOf('-') < 0 && lngOnly.indexOf('-') < 0) return;\n          if (supportedLng.indexOf('-') > 0 && lngOnly.indexOf('-') < 0 && supportedLng.substring(0, supportedLng.indexOf('-')) === lngOnly) return supportedLng;\n          if (supportedLng.indexOf(lngOnly) === 0 && lngOnly.length > 1) return supportedLng;\n        });\n      });\n    }\n    if (!found) found = this.getFallbackCodes(this.options.fallbackLng)[0];\n    return found;\n  }\n  getFallbackCodes(fallbacks, code) {\n    if (!fallbacks) return [];\n    if (typeof fallbacks === 'function') fallbacks = fallbacks(code);\n    if (isString(fallbacks)) fallbacks = [fallbacks];\n    if (Array.isArray(fallbacks)) return fallbacks;\n    if (!code) return fallbacks.default || [];\n    let found = fallbacks[code];\n    if (!found) found = fallbacks[this.getScriptPartFromCode(code)];\n    if (!found) found = fallbacks[this.formatLanguageCode(code)];\n    if (!found) found = fallbacks[this.getLanguagePartFromCode(code)];\n    if (!found) found = fallbacks.default;\n    return found || [];\n  }\n  toResolveHierarchy(code, fallbackCode) {\n    const fallbackCodes = this.getFallbackCodes(fallbackCode || this.options.fallbackLng || [], code);\n    const codes = [];\n    const addCode = c => {\n      if (!c) return;\n      if (this.isSupportedCode(c)) {\n        codes.push(c);\n      } else {\n        this.logger.warn(`rejecting language code not found in supportedLngs: ${c}`);\n      }\n    };\n    if (isString(code) && (code.indexOf('-') > -1 || code.indexOf('_') > -1)) {\n      if (this.options.load !== 'languageOnly') addCode(this.formatLanguageCode(code));\n      if (this.options.load !== 'languageOnly' && this.options.load !== 'currentOnly') addCode(this.getScriptPartFromCode(code));\n      if (this.options.load !== 'currentOnly') addCode(this.getLanguagePartFromCode(code));\n    } else if (isString(code)) {\n      addCode(this.formatLanguageCode(code));\n    }\n    fallbackCodes.forEach(fc => {\n      if (codes.indexOf(fc) < 0) addCode(this.formatLanguageCode(fc));\n    });\n    return codes;\n  }\n}\n\nlet sets = [{\n  lngs: ['ach', 'ak', 'am', 'arn', 'br', 'fil', 'gun', 'ln', 'mfe', 'mg', 'mi', 'oc', 'pt', 'pt-BR', 'tg', 'tl', 'ti', 'tr', 'uz', 'wa'],\n  nr: [1, 2],\n  fc: 1\n}, {\n  lngs: ['af', 'an', 'ast', 'az', 'bg', 'bn', 'ca', 'da', 'de', 'dev', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fi', 'fo', 'fur', 'fy', 'gl', 'gu', 'ha', 'hi', 'hu', 'hy', 'ia', 'it', 'kk', 'kn', 'ku', 'lb', 'mai', 'ml', 'mn', 'mr', 'nah', 'nap', 'nb', 'ne', 'nl', 'nn', 'no', 'nso', 'pa', 'pap', 'pms', 'ps', 'pt-PT', 'rm', 'sco', 'se', 'si', 'so', 'son', 'sq', 'sv', 'sw', 'ta', 'te', 'tk', 'ur', 'yo'],\n  nr: [1, 2],\n  fc: 2\n}, {\n  lngs: ['ay', 'bo', 'cgg', 'fa', 'ht', 'id', 'ja', 'jbo', 'ka', 'km', 'ko', 'ky', 'lo', 'ms', 'sah', 'su', 'th', 'tt', 'ug', 'vi', 'wo', 'zh'],\n  nr: [1],\n  fc: 3\n}, {\n  lngs: ['be', 'bs', 'cnr', 'dz', 'hr', 'ru', 'sr', 'uk'],\n  nr: [1, 2, 5],\n  fc: 4\n}, {\n  lngs: ['ar'],\n  nr: [0, 1, 2, 3, 11, 100],\n  fc: 5\n}, {\n  lngs: ['cs', 'sk'],\n  nr: [1, 2, 5],\n  fc: 6\n}, {\n  lngs: ['csb', 'pl'],\n  nr: [1, 2, 5],\n  fc: 7\n}, {\n  lngs: ['cy'],\n  nr: [1, 2, 3, 8],\n  fc: 8\n}, {\n  lngs: ['fr'],\n  nr: [1, 2],\n  fc: 9\n}, {\n  lngs: ['ga'],\n  nr: [1, 2, 3, 7, 11],\n  fc: 10\n}, {\n  lngs: ['gd'],\n  nr: [1, 2, 3, 20],\n  fc: 11\n}, {\n  lngs: ['is'],\n  nr: [1, 2],\n  fc: 12\n}, {\n  lngs: ['jv'],\n  nr: [0, 1],\n  fc: 13\n}, {\n  lngs: ['kw'],\n  nr: [1, 2, 3, 4],\n  fc: 14\n}, {\n  lngs: ['lt'],\n  nr: [1, 2, 10],\n  fc: 15\n}, {\n  lngs: ['lv'],\n  nr: [1, 2, 0],\n  fc: 16\n}, {\n  lngs: ['mk'],\n  nr: [1, 2],\n  fc: 17\n}, {\n  lngs: ['mnk'],\n  nr: [0, 1, 2],\n  fc: 18\n}, {\n  lngs: ['mt'],\n  nr: [1, 2, 11, 20],\n  fc: 19\n}, {\n  lngs: ['or'],\n  nr: [2, 1],\n  fc: 2\n}, {\n  lngs: ['ro'],\n  nr: [1, 2, 20],\n  fc: 20\n}, {\n  lngs: ['sl'],\n  nr: [5, 1, 2, 3],\n  fc: 21\n}, {\n  lngs: ['he', 'iw'],\n  nr: [1, 2, 20, 21],\n  fc: 22\n}];\nlet _rulesPluralsTypes = {\n  1: n => Number(n > 1),\n  2: n => Number(n != 1),\n  3: n => 0,\n  4: n => Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2),\n  5: n => Number(n == 0 ? 0 : n == 1 ? 1 : n == 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5),\n  6: n => Number(n == 1 ? 0 : n >= 2 && n <= 4 ? 1 : 2),\n  7: n => Number(n == 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2),\n  8: n => Number(n == 1 ? 0 : n == 2 ? 1 : n != 8 && n != 11 ? 2 : 3),\n  9: n => Number(n >= 2),\n  10: n => Number(n == 1 ? 0 : n == 2 ? 1 : n < 7 ? 2 : n < 11 ? 3 : 4),\n  11: n => Number(n == 1 || n == 11 ? 0 : n == 2 || n == 12 ? 1 : n > 2 && n < 20 ? 2 : 3),\n  12: n => Number(n % 10 != 1 || n % 100 == 11),\n  13: n => Number(n !== 0),\n  14: n => Number(n == 1 ? 0 : n == 2 ? 1 : n == 3 ? 2 : 3),\n  15: n => Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2),\n  16: n => Number(n % 10 == 1 && n % 100 != 11 ? 0 : n !== 0 ? 1 : 2),\n  17: n => Number(n == 1 || n % 10 == 1 && n % 100 != 11 ? 0 : 1),\n  18: n => Number(n == 0 ? 0 : n == 1 ? 1 : 2),\n  19: n => Number(n == 1 ? 0 : n == 0 || n % 100 > 1 && n % 100 < 11 ? 1 : n % 100 > 10 && n % 100 < 20 ? 2 : 3),\n  20: n => Number(n == 1 ? 0 : n == 0 || n % 100 > 0 && n % 100 < 20 ? 1 : 2),\n  21: n => Number(n % 100 == 1 ? 1 : n % 100 == 2 ? 2 : n % 100 == 3 || n % 100 == 4 ? 3 : 0),\n  22: n => Number(n == 1 ? 0 : n == 2 ? 1 : (n < 0 || n > 10) && n % 10 == 0 ? 2 : 3)\n};\nconst nonIntlVersions = ['v1', 'v2', 'v3'];\nconst intlVersions = ['v4'];\nconst suffixesOrder = {\n  zero: 0,\n  one: 1,\n  two: 2,\n  few: 3,\n  many: 4,\n  other: 5\n};\nconst createRules = () => {\n  const rules = {};\n  sets.forEach(set => {\n    set.lngs.forEach(l => {\n      rules[l] = {\n        numbers: set.nr,\n        plurals: _rulesPluralsTypes[set.fc]\n      };\n    });\n  });\n  return rules;\n};\nclass PluralResolver {\n  constructor(languageUtils) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    this.languageUtils = languageUtils;\n    this.options = options;\n    this.logger = baseLogger.create('pluralResolver');\n    if ((!this.options.compatibilityJSON || intlVersions.includes(this.options.compatibilityJSON)) && (typeof Intl === 'undefined' || !Intl.PluralRules)) {\n      this.options.compatibilityJSON = 'v3';\n      this.logger.error('Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.');\n    }\n    this.rules = createRules();\n    this.pluralRulesCache = {};\n  }\n  addRule(lng, obj) {\n    this.rules[lng] = obj;\n  }\n  clearCache() {\n    this.pluralRulesCache = {};\n  }\n  getRule(code) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    if (this.shouldUseIntlApi()) {\n      const cleanedCode = getCleanedCode(code === 'dev' ? 'en' : code);\n      const type = options.ordinal ? 'ordinal' : 'cardinal';\n      const cacheKey = JSON.stringify({\n        cleanedCode,\n        type\n      });\n      if (cacheKey in this.pluralRulesCache) {\n        return this.pluralRulesCache[cacheKey];\n      }\n      let rule;\n      try {\n        rule = new Intl.PluralRules(cleanedCode, {\n          type\n        });\n      } catch (err) {\n        if (!code.match(/-|_/)) return;\n        const lngPart = this.languageUtils.getLanguagePartFromCode(code);\n        rule = this.getRule(lngPart, options);\n      }\n      this.pluralRulesCache[cacheKey] = rule;\n      return rule;\n    }\n    return this.rules[code] || this.rules[this.languageUtils.getLanguagePartFromCode(code)];\n  }\n  needsPlural(code) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    const rule = this.getRule(code, options);\n    if (this.shouldUseIntlApi()) {\n      return rule && rule.resolvedOptions().pluralCategories.length > 1;\n    }\n    return rule && rule.numbers.length > 1;\n  }\n  getPluralFormsOfKey(code, key) {\n    let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    return this.getSuffixes(code, options).map(suffix => `${key}${suffix}`);\n  }\n  getSuffixes(code) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    const rule = this.getRule(code, options);\n    if (!rule) {\n      return [];\n    }\n    if (this.shouldUseIntlApi()) {\n      return rule.resolvedOptions().pluralCategories.sort((pluralCategory1, pluralCategory2) => suffixesOrder[pluralCategory1] - suffixesOrder[pluralCategory2]).map(pluralCategory => `${this.options.prepend}${options.ordinal ? `ordinal${this.options.prepend}` : ''}${pluralCategory}`);\n    }\n    return rule.numbers.map(number => this.getSuffix(code, number, options));\n  }\n  getSuffix(code, count) {\n    let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    const rule = this.getRule(code, options);\n    if (rule) {\n      if (this.shouldUseIntlApi()) {\n        return `${this.options.prepend}${options.ordinal ? `ordinal${this.options.prepend}` : ''}${rule.select(count)}`;\n      }\n      return this.getSuffixRetroCompatible(rule, count);\n    }\n    this.logger.warn(`no plural rule found for: ${code}`);\n    return '';\n  }\n  getSuffixRetroCompatible(rule, count) {\n    const idx = rule.noAbs ? rule.plurals(count) : rule.plurals(Math.abs(count));\n    let suffix = rule.numbers[idx];\n    if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n      if (suffix === 2) {\n        suffix = 'plural';\n      } else if (suffix === 1) {\n        suffix = '';\n      }\n    }\n    const returnSuffix = () => this.options.prepend && suffix.toString() ? this.options.prepend + suffix.toString() : suffix.toString();\n    if (this.options.compatibilityJSON === 'v1') {\n      if (suffix === 1) return '';\n      if (typeof suffix === 'number') return `_plural_${suffix.toString()}`;\n      return returnSuffix();\n    } else if (this.options.compatibilityJSON === 'v2') {\n      return returnSuffix();\n    } else if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n      return returnSuffix();\n    }\n    return this.options.prepend && idx.toString() ? this.options.prepend + idx.toString() : idx.toString();\n  }\n  shouldUseIntlApi() {\n    return !nonIntlVersions.includes(this.options.compatibilityJSON);\n  }\n}\n\nconst deepFindWithDefaults = function (data, defaultData, key) {\n  let keySeparator = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '.';\n  let ignoreJSONStructure = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n  let path = getPathWithDefaults(data, defaultData, key);\n  if (!path && ignoreJSONStructure && isString(key)) {\n    path = deepFind(data, key, keySeparator);\n    if (path === undefined) path = deepFind(defaultData, key, keySeparator);\n  }\n  return path;\n};\nconst regexSafe = val => val.replace(/\\$/g, '$$$$');\nclass Interpolator {\n  constructor() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    this.logger = baseLogger.create('interpolator');\n    this.options = options;\n    this.format = options.interpolation && options.interpolation.format || (value => value);\n    this.init(options);\n  }\n  init() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    if (!options.interpolation) options.interpolation = {\n      escapeValue: true\n    };\n    const {\n      escape: escape$1,\n      escapeValue,\n      useRawValueToEscape,\n      prefix,\n      prefixEscaped,\n      suffix,\n      suffixEscaped,\n      formatSeparator,\n      unescapeSuffix,\n      unescapePrefix,\n      nestingPrefix,\n      nestingPrefixEscaped,\n      nestingSuffix,\n      nestingSuffixEscaped,\n      nestingOptionsSeparator,\n      maxReplaces,\n      alwaysFormat\n    } = options.interpolation;\n    this.escape = escape$1 !== undefined ? escape$1 : escape;\n    this.escapeValue = escapeValue !== undefined ? escapeValue : true;\n    this.useRawValueToEscape = useRawValueToEscape !== undefined ? useRawValueToEscape : false;\n    this.prefix = prefix ? regexEscape(prefix) : prefixEscaped || '{{';\n    this.suffix = suffix ? regexEscape(suffix) : suffixEscaped || '}}';\n    this.formatSeparator = formatSeparator || ',';\n    this.unescapePrefix = unescapeSuffix ? '' : unescapePrefix || '-';\n    this.unescapeSuffix = this.unescapePrefix ? '' : unescapeSuffix || '';\n    this.nestingPrefix = nestingPrefix ? regexEscape(nestingPrefix) : nestingPrefixEscaped || regexEscape('$t(');\n    this.nestingSuffix = nestingSuffix ? regexEscape(nestingSuffix) : nestingSuffixEscaped || regexEscape(')');\n    this.nestingOptionsSeparator = nestingOptionsSeparator || ',';\n    this.maxReplaces = maxReplaces || 1000;\n    this.alwaysFormat = alwaysFormat !== undefined ? alwaysFormat : false;\n    this.resetRegExp();\n  }\n  reset() {\n    if (this.options) this.init(this.options);\n  }\n  resetRegExp() {\n    const getOrResetRegExp = (existingRegExp, pattern) => {\n      if (existingRegExp && existingRegExp.source === pattern) {\n        existingRegExp.lastIndex = 0;\n        return existingRegExp;\n      }\n      return new RegExp(pattern, 'g');\n    };\n    this.regexp = getOrResetRegExp(this.regexp, `${this.prefix}(.+?)${this.suffix}`);\n    this.regexpUnescape = getOrResetRegExp(this.regexpUnescape, `${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`);\n    this.nestingRegexp = getOrResetRegExp(this.nestingRegexp, `${this.nestingPrefix}(.+?)${this.nestingSuffix}`);\n  }\n  interpolate(str, data, lng, options) {\n    let match;\n    let value;\n    let replaces;\n    const defaultData = this.options && this.options.interpolation && this.options.interpolation.defaultVariables || {};\n    const handleFormat = key => {\n      if (key.indexOf(this.formatSeparator) < 0) {\n        const path = deepFindWithDefaults(data, defaultData, key, this.options.keySeparator, this.options.ignoreJSONStructure);\n        return this.alwaysFormat ? this.format(path, undefined, lng, {\n          ...options,\n          ...data,\n          interpolationkey: key\n        }) : path;\n      }\n      const p = key.split(this.formatSeparator);\n      const k = p.shift().trim();\n      const f = p.join(this.formatSeparator).trim();\n      return this.format(deepFindWithDefaults(data, defaultData, k, this.options.keySeparator, this.options.ignoreJSONStructure), f, lng, {\n        ...options,\n        ...data,\n        interpolationkey: k\n      });\n    };\n    this.resetRegExp();\n    const missingInterpolationHandler = options && options.missingInterpolationHandler || this.options.missingInterpolationHandler;\n    const skipOnVariables = options && options.interpolation && options.interpolation.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables;\n    const todos = [{\n      regex: this.regexpUnescape,\n      safeValue: val => regexSafe(val)\n    }, {\n      regex: this.regexp,\n      safeValue: val => this.escapeValue ? regexSafe(this.escape(val)) : regexSafe(val)\n    }];\n    todos.forEach(todo => {\n      replaces = 0;\n      while (match = todo.regex.exec(str)) {\n        const matchedVar = match[1].trim();\n        value = handleFormat(matchedVar);\n        if (value === undefined) {\n          if (typeof missingInterpolationHandler === 'function') {\n            const temp = missingInterpolationHandler(str, match, options);\n            value = isString(temp) ? temp : '';\n          } else if (options && Object.prototype.hasOwnProperty.call(options, matchedVar)) {\n            value = '';\n          } else if (skipOnVariables) {\n            value = match[0];\n            continue;\n          } else {\n            this.logger.warn(`missed to pass in variable ${matchedVar} for interpolating ${str}`);\n            value = '';\n          }\n        } else if (!isString(value) && !this.useRawValueToEscape) {\n          value = makeString(value);\n        }\n        const safeValue = todo.safeValue(value);\n        str = str.replace(match[0], safeValue);\n        if (skipOnVariables) {\n          todo.regex.lastIndex += value.length;\n          todo.regex.lastIndex -= match[0].length;\n        } else {\n          todo.regex.lastIndex = 0;\n        }\n        replaces++;\n        if (replaces >= this.maxReplaces) {\n          break;\n        }\n      }\n    });\n    return str;\n  }\n  nest(str, fc) {\n    let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    let match;\n    let value;\n    let clonedOptions;\n    const handleHasOptions = (key, inheritedOptions) => {\n      const sep = this.nestingOptionsSeparator;\n      if (key.indexOf(sep) < 0) return key;\n      const c = key.split(new RegExp(`${sep}[ ]*{`));\n      let optionsString = `{${c[1]}`;\n      key = c[0];\n      optionsString = this.interpolate(optionsString, clonedOptions);\n      const matchedSingleQuotes = optionsString.match(/'/g);\n      const matchedDoubleQuotes = optionsString.match(/\"/g);\n      if (matchedSingleQuotes && matchedSingleQuotes.length % 2 === 0 && !matchedDoubleQuotes || matchedDoubleQuotes.length % 2 !== 0) {\n        optionsString = optionsString.replace(/'/g, '\"');\n      }\n      try {\n        clonedOptions = JSON.parse(optionsString);\n        if (inheritedOptions) clonedOptions = {\n          ...inheritedOptions,\n          ...clonedOptions\n        };\n      } catch (e) {\n        this.logger.warn(`failed parsing options string in nesting for key ${key}`, e);\n        return `${key}${sep}${optionsString}`;\n      }\n      if (clonedOptions.defaultValue && clonedOptions.defaultValue.indexOf(this.prefix) > -1) delete clonedOptions.defaultValue;\n      return key;\n    };\n    while (match = this.nestingRegexp.exec(str)) {\n      let formatters = [];\n      clonedOptions = {\n        ...options\n      };\n      clonedOptions = clonedOptions.replace && !isString(clonedOptions.replace) ? clonedOptions.replace : clonedOptions;\n      clonedOptions.applyPostProcessor = false;\n      delete clonedOptions.defaultValue;\n      let doReduce = false;\n      if (match[0].indexOf(this.formatSeparator) !== -1 && !/{.*}/.test(match[1])) {\n        const r = match[1].split(this.formatSeparator).map(elem => elem.trim());\n        match[1] = r.shift();\n        formatters = r;\n        doReduce = true;\n      }\n      value = fc(handleHasOptions.call(this, match[1].trim(), clonedOptions), clonedOptions);\n      if (value && match[0] === str && !isString(value)) return value;\n      if (!isString(value)) value = makeString(value);\n      if (!value) {\n        this.logger.warn(`missed to resolve ${match[1]} for nesting ${str}`);\n        value = '';\n      }\n      if (doReduce) {\n        value = formatters.reduce((v, f) => this.format(v, f, options.lng, {\n          ...options,\n          interpolationkey: match[1].trim()\n        }), value.trim());\n      }\n      str = str.replace(match[0], value);\n      this.regexp.lastIndex = 0;\n    }\n    return str;\n  }\n}\n\nconst parseFormatStr = formatStr => {\n  let formatName = formatStr.toLowerCase().trim();\n  const formatOptions = {};\n  if (formatStr.indexOf('(') > -1) {\n    const p = formatStr.split('(');\n    formatName = p[0].toLowerCase().trim();\n    const optStr = p[1].substring(0, p[1].length - 1);\n    if (formatName === 'currency' && optStr.indexOf(':') < 0) {\n      if (!formatOptions.currency) formatOptions.currency = optStr.trim();\n    } else if (formatName === 'relativetime' && optStr.indexOf(':') < 0) {\n      if (!formatOptions.range) formatOptions.range = optStr.trim();\n    } else {\n      const opts = optStr.split(';');\n      opts.forEach(opt => {\n        if (opt) {\n          const [key, ...rest] = opt.split(':');\n          const val = rest.join(':').trim().replace(/^'+|'+$/g, '');\n          const trimmedKey = key.trim();\n          if (!formatOptions[trimmedKey]) formatOptions[trimmedKey] = val;\n          if (val === 'false') formatOptions[trimmedKey] = false;\n          if (val === 'true') formatOptions[trimmedKey] = true;\n          if (!isNaN(val)) formatOptions[trimmedKey] = parseInt(val, 10);\n        }\n      });\n    }\n  }\n  return {\n    formatName,\n    formatOptions\n  };\n};\nconst createCachedFormatter = fn => {\n  const cache = {};\n  return (val, lng, options) => {\n    let optForCache = options;\n    if (options && options.interpolationkey && options.formatParams && options.formatParams[options.interpolationkey] && options[options.interpolationkey]) {\n      optForCache = {\n        ...optForCache,\n        [options.interpolationkey]: undefined\n      };\n    }\n    const key = lng + JSON.stringify(optForCache);\n    let formatter = cache[key];\n    if (!formatter) {\n      formatter = fn(getCleanedCode(lng), options);\n      cache[key] = formatter;\n    }\n    return formatter(val);\n  };\n};\nclass Formatter {\n  constructor() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    this.logger = baseLogger.create('formatter');\n    this.options = options;\n    this.formats = {\n      number: createCachedFormatter((lng, opt) => {\n        const formatter = new Intl.NumberFormat(lng, {\n          ...opt\n        });\n        return val => formatter.format(val);\n      }),\n      currency: createCachedFormatter((lng, opt) => {\n        const formatter = new Intl.NumberFormat(lng, {\n          ...opt,\n          style: 'currency'\n        });\n        return val => formatter.format(val);\n      }),\n      datetime: createCachedFormatter((lng, opt) => {\n        const formatter = new Intl.DateTimeFormat(lng, {\n          ...opt\n        });\n        return val => formatter.format(val);\n      }),\n      relativetime: createCachedFormatter((lng, opt) => {\n        const formatter = new Intl.RelativeTimeFormat(lng, {\n          ...opt\n        });\n        return val => formatter.format(val, opt.range || 'day');\n      }),\n      list: createCachedFormatter((lng, opt) => {\n        const formatter = new Intl.ListFormat(lng, {\n          ...opt\n        });\n        return val => formatter.format(val);\n      })\n    };\n    this.init(options);\n  }\n  init(services) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n      interpolation: {}\n    };\n    this.formatSeparator = options.interpolation.formatSeparator || ',';\n  }\n  add(name, fc) {\n    this.formats[name.toLowerCase().trim()] = fc;\n  }\n  addCached(name, fc) {\n    this.formats[name.toLowerCase().trim()] = createCachedFormatter(fc);\n  }\n  format(value, format, lng) {\n    let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    const formats = format.split(this.formatSeparator);\n    if (formats.length > 1 && formats[0].indexOf('(') > 1 && formats[0].indexOf(')') < 0 && formats.find(f => f.indexOf(')') > -1)) {\n      const lastIndex = formats.findIndex(f => f.indexOf(')') > -1);\n      formats[0] = [formats[0], ...formats.splice(1, lastIndex)].join(this.formatSeparator);\n    }\n    const result = formats.reduce((mem, f) => {\n      const {\n        formatName,\n        formatOptions\n      } = parseFormatStr(f);\n      if (this.formats[formatName]) {\n        let formatted = mem;\n        try {\n          const valOptions = options && options.formatParams && options.formatParams[options.interpolationkey] || {};\n          const l = valOptions.locale || valOptions.lng || options.locale || options.lng || lng;\n          formatted = this.formats[formatName](mem, l, {\n            ...formatOptions,\n            ...options,\n            ...valOptions\n          });\n        } catch (error) {\n          this.logger.warn(error);\n        }\n        return formatted;\n      } else {\n        this.logger.warn(`there was no format function for ${formatName}`);\n      }\n      return mem;\n    }, value);\n    return result;\n  }\n}\n\nconst removePending = (q, name) => {\n  if (q.pending[name] !== undefined) {\n    delete q.pending[name];\n    q.pendingCount--;\n  }\n};\nclass Connector extends EventEmitter {\n  constructor(backend, store, services) {\n    let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    super();\n    this.backend = backend;\n    this.store = store;\n    this.services = services;\n    this.languageUtils = services.languageUtils;\n    this.options = options;\n    this.logger = baseLogger.create('backendConnector');\n    this.waitingReads = [];\n    this.maxParallelReads = options.maxParallelReads || 10;\n    this.readingCalls = 0;\n    this.maxRetries = options.maxRetries >= 0 ? options.maxRetries : 5;\n    this.retryTimeout = options.retryTimeout >= 1 ? options.retryTimeout : 350;\n    this.state = {};\n    this.queue = [];\n    if (this.backend && this.backend.init) {\n      this.backend.init(services, options.backend, options);\n    }\n  }\n  queueLoad(languages, namespaces, options, callback) {\n    const toLoad = {};\n    const pending = {};\n    const toLoadLanguages = {};\n    const toLoadNamespaces = {};\n    languages.forEach(lng => {\n      let hasAllNamespaces = true;\n      namespaces.forEach(ns => {\n        const name = `${lng}|${ns}`;\n        if (!options.reload && this.store.hasResourceBundle(lng, ns)) {\n          this.state[name] = 2;\n        } else if (this.state[name] < 0) ; else if (this.state[name] === 1) {\n          if (pending[name] === undefined) pending[name] = true;\n        } else {\n          this.state[name] = 1;\n          hasAllNamespaces = false;\n          if (pending[name] === undefined) pending[name] = true;\n          if (toLoad[name] === undefined) toLoad[name] = true;\n          if (toLoadNamespaces[ns] === undefined) toLoadNamespaces[ns] = true;\n        }\n      });\n      if (!hasAllNamespaces) toLoadLanguages[lng] = true;\n    });\n    if (Object.keys(toLoad).length || Object.keys(pending).length) {\n      this.queue.push({\n        pending,\n        pendingCount: Object.keys(pending).length,\n        loaded: {},\n        errors: [],\n        callback\n      });\n    }\n    return {\n      toLoad: Object.keys(toLoad),\n      pending: Object.keys(pending),\n      toLoadLanguages: Object.keys(toLoadLanguages),\n      toLoadNamespaces: Object.keys(toLoadNamespaces)\n    };\n  }\n  loaded(name, err, data) {\n    const s = name.split('|');\n    const lng = s[0];\n    const ns = s[1];\n    if (err) this.emit('failedLoading', lng, ns, err);\n    if (!err && data) {\n      this.store.addResourceBundle(lng, ns, data, undefined, undefined, {\n        skipCopy: true\n      });\n    }\n    this.state[name] = err ? -1 : 2;\n    if (err && data) this.state[name] = 0;\n    const loaded = {};\n    this.queue.forEach(q => {\n      pushPath(q.loaded, [lng], ns);\n      removePending(q, name);\n      if (err) q.errors.push(err);\n      if (q.pendingCount === 0 && !q.done) {\n        Object.keys(q.loaded).forEach(l => {\n          if (!loaded[l]) loaded[l] = {};\n          const loadedKeys = q.loaded[l];\n          if (loadedKeys.length) {\n            loadedKeys.forEach(n => {\n              if (loaded[l][n] === undefined) loaded[l][n] = true;\n            });\n          }\n        });\n        q.done = true;\n        if (q.errors.length) {\n          q.callback(q.errors);\n        } else {\n          q.callback();\n        }\n      }\n    });\n    this.emit('loaded', loaded);\n    this.queue = this.queue.filter(q => !q.done);\n  }\n  read(lng, ns, fcName) {\n    let tried = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n    let wait = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : this.retryTimeout;\n    let callback = arguments.length > 5 ? arguments[5] : undefined;\n    if (!lng.length) return callback(null, {});\n    if (this.readingCalls >= this.maxParallelReads) {\n      this.waitingReads.push({\n        lng,\n        ns,\n        fcName,\n        tried,\n        wait,\n        callback\n      });\n      return;\n    }\n    this.readingCalls++;\n    const resolver = (err, data) => {\n      this.readingCalls--;\n      if (this.waitingReads.length > 0) {\n        const next = this.waitingReads.shift();\n        this.read(next.lng, next.ns, next.fcName, next.tried, next.wait, next.callback);\n      }\n      if (err && data && tried < this.maxRetries) {\n        setTimeout(() => {\n          this.read.call(this, lng, ns, fcName, tried + 1, wait * 2, callback);\n        }, wait);\n        return;\n      }\n      callback(err, data);\n    };\n    const fc = this.backend[fcName].bind(this.backend);\n    if (fc.length === 2) {\n      try {\n        const r = fc(lng, ns);\n        if (r && typeof r.then === 'function') {\n          r.then(data => resolver(null, data)).catch(resolver);\n        } else {\n          resolver(null, r);\n        }\n      } catch (err) {\n        resolver(err);\n      }\n      return;\n    }\n    return fc(lng, ns, resolver);\n  }\n  prepareLoading(languages, namespaces) {\n    let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    let callback = arguments.length > 3 ? arguments[3] : undefined;\n    if (!this.backend) {\n      this.logger.warn('No backend was added via i18next.use. Will not load resources.');\n      return callback && callback();\n    }\n    if (isString(languages)) languages = this.languageUtils.toResolveHierarchy(languages);\n    if (isString(namespaces)) namespaces = [namespaces];\n    const toLoad = this.queueLoad(languages, namespaces, options, callback);\n    if (!toLoad.toLoad.length) {\n      if (!toLoad.pending.length) callback();\n      return null;\n    }\n    toLoad.toLoad.forEach(name => {\n      this.loadOne(name);\n    });\n  }\n  load(languages, namespaces, callback) {\n    this.prepareLoading(languages, namespaces, {}, callback);\n  }\n  reload(languages, namespaces, callback) {\n    this.prepareLoading(languages, namespaces, {\n      reload: true\n    }, callback);\n  }\n  loadOne(name) {\n    let prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n    const s = name.split('|');\n    const lng = s[0];\n    const ns = s[1];\n    this.read(lng, ns, 'read', undefined, undefined, (err, data) => {\n      if (err) this.logger.warn(`${prefix}loading namespace ${ns} for language ${lng} failed`, err);\n      if (!err && data) this.logger.log(`${prefix}loaded namespace ${ns} for language ${lng}`, data);\n      this.loaded(name, err, data);\n    });\n  }\n  saveMissing(languages, namespace, key, fallbackValue, isUpdate) {\n    let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n    let clb = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : () => {};\n    if (this.services.utils && this.services.utils.hasLoadedNamespace && !this.services.utils.hasLoadedNamespace(namespace)) {\n      this.logger.warn(`did not save key \"${key}\" as the namespace \"${namespace}\" was not yet loaded`, 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n      return;\n    }\n    if (key === undefined || key === null || key === '') return;\n    if (this.backend && this.backend.create) {\n      const opts = {\n        ...options,\n        isUpdate\n      };\n      const fc = this.backend.create.bind(this.backend);\n      if (fc.length < 6) {\n        try {\n          let r;\n          if (fc.length === 5) {\n            r = fc(languages, namespace, key, fallbackValue, opts);\n          } else {\n            r = fc(languages, namespace, key, fallbackValue);\n          }\n          if (r && typeof r.then === 'function') {\n            r.then(data => clb(null, data)).catch(clb);\n          } else {\n            clb(null, r);\n          }\n        } catch (err) {\n          clb(err);\n        }\n      } else {\n        fc(languages, namespace, key, fallbackValue, clb, opts);\n      }\n    }\n    if (!languages || !languages[0]) return;\n    this.store.addResource(languages[0], namespace, key, fallbackValue);\n  }\n}\n\nconst get = () => ({\n  debug: false,\n  initImmediate: true,\n  ns: ['translation'],\n  defaultNS: ['translation'],\n  fallbackLng: ['dev'],\n  fallbackNS: false,\n  supportedLngs: false,\n  nonExplicitSupportedLngs: false,\n  load: 'all',\n  preload: false,\n  simplifyPluralSuffix: true,\n  keySeparator: '.',\n  nsSeparator: ':',\n  pluralSeparator: '_',\n  contextSeparator: '_',\n  partialBundledLanguages: false,\n  saveMissing: false,\n  updateMissing: false,\n  saveMissingTo: 'fallback',\n  saveMissingPlurals: true,\n  missingKeyHandler: false,\n  missingInterpolationHandler: false,\n  postProcess: false,\n  postProcessPassResolved: false,\n  returnNull: false,\n  returnEmptyString: true,\n  returnObjects: false,\n  joinArrays: false,\n  returnedObjectHandler: false,\n  parseMissingKeyHandler: false,\n  appendNamespaceToMissingKey: false,\n  appendNamespaceToCIMode: false,\n  overloadTranslationOptionHandler: args => {\n    let ret = {};\n    if (typeof args[1] === 'object') ret = args[1];\n    if (isString(args[1])) ret.defaultValue = args[1];\n    if (isString(args[2])) ret.tDescription = args[2];\n    if (typeof args[2] === 'object' || typeof args[3] === 'object') {\n      const options = args[3] || args[2];\n      Object.keys(options).forEach(key => {\n        ret[key] = options[key];\n      });\n    }\n    return ret;\n  },\n  interpolation: {\n    escapeValue: true,\n    format: value => value,\n    prefix: '{{',\n    suffix: '}}',\n    formatSeparator: ',',\n    unescapePrefix: '-',\n    nestingPrefix: '$t(',\n    nestingSuffix: ')',\n    nestingOptionsSeparator: ',',\n    maxReplaces: 1000,\n    skipOnVariables: true\n  }\n});\nconst transformOptions = options => {\n  if (isString(options.ns)) options.ns = [options.ns];\n  if (isString(options.fallbackLng)) options.fallbackLng = [options.fallbackLng];\n  if (isString(options.fallbackNS)) options.fallbackNS = [options.fallbackNS];\n  if (options.supportedLngs && options.supportedLngs.indexOf('cimode') < 0) {\n    options.supportedLngs = options.supportedLngs.concat(['cimode']);\n  }\n  return options;\n};\n\nconst noop = () => {};\nconst bindMemberFunctions = inst => {\n  const mems = Object.getOwnPropertyNames(Object.getPrototypeOf(inst));\n  mems.forEach(mem => {\n    if (typeof inst[mem] === 'function') {\n      inst[mem] = inst[mem].bind(inst);\n    }\n  });\n};\nclass I18n extends EventEmitter {\n  constructor() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    let callback = arguments.length > 1 ? arguments[1] : undefined;\n    super();\n    this.options = transformOptions(options);\n    this.services = {};\n    this.logger = baseLogger;\n    this.modules = {\n      external: []\n    };\n    bindMemberFunctions(this);\n    if (callback && !this.isInitialized && !options.isClone) {\n      if (!this.options.initImmediate) {\n        this.init(options, callback);\n        return this;\n      }\n      setTimeout(() => {\n        this.init(options, callback);\n      }, 0);\n    }\n  }\n  init() {\n    var _this = this;\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    let callback = arguments.length > 1 ? arguments[1] : undefined;\n    this.isInitializing = true;\n    if (typeof options === 'function') {\n      callback = options;\n      options = {};\n    }\n    if (!options.defaultNS && options.defaultNS !== false && options.ns) {\n      if (isString(options.ns)) {\n        options.defaultNS = options.ns;\n      } else if (options.ns.indexOf('translation') < 0) {\n        options.defaultNS = options.ns[0];\n      }\n    }\n    const defOpts = get();\n    this.options = {\n      ...defOpts,\n      ...this.options,\n      ...transformOptions(options)\n    };\n    if (this.options.compatibilityAPI !== 'v1') {\n      this.options.interpolation = {\n        ...defOpts.interpolation,\n        ...this.options.interpolation\n      };\n    }\n    if (options.keySeparator !== undefined) {\n      this.options.userDefinedKeySeparator = options.keySeparator;\n    }\n    if (options.nsSeparator !== undefined) {\n      this.options.userDefinedNsSeparator = options.nsSeparator;\n    }\n    const createClassOnDemand = ClassOrObject => {\n      if (!ClassOrObject) return null;\n      if (typeof ClassOrObject === 'function') return new ClassOrObject();\n      return ClassOrObject;\n    };\n    if (!this.options.isClone) {\n      if (this.modules.logger) {\n        baseLogger.init(createClassOnDemand(this.modules.logger), this.options);\n      } else {\n        baseLogger.init(null, this.options);\n      }\n      let formatter;\n      if (this.modules.formatter) {\n        formatter = this.modules.formatter;\n      } else if (typeof Intl !== 'undefined') {\n        formatter = Formatter;\n      }\n      const lu = new LanguageUtil(this.options);\n      this.store = new ResourceStore(this.options.resources, this.options);\n      const s = this.services;\n      s.logger = baseLogger;\n      s.resourceStore = this.store;\n      s.languageUtils = lu;\n      s.pluralResolver = new PluralResolver(lu, {\n        prepend: this.options.pluralSeparator,\n        compatibilityJSON: this.options.compatibilityJSON,\n        simplifyPluralSuffix: this.options.simplifyPluralSuffix\n      });\n      if (formatter && (!this.options.interpolation.format || this.options.interpolation.format === defOpts.interpolation.format)) {\n        s.formatter = createClassOnDemand(formatter);\n        s.formatter.init(s, this.options);\n        this.options.interpolation.format = s.formatter.format.bind(s.formatter);\n      }\n      s.interpolator = new Interpolator(this.options);\n      s.utils = {\n        hasLoadedNamespace: this.hasLoadedNamespace.bind(this)\n      };\n      s.backendConnector = new Connector(createClassOnDemand(this.modules.backend), s.resourceStore, s, this.options);\n      s.backendConnector.on('*', function (event) {\n        for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n          args[_key - 1] = arguments[_key];\n        }\n        _this.emit(event, ...args);\n      });\n      if (this.modules.languageDetector) {\n        s.languageDetector = createClassOnDemand(this.modules.languageDetector);\n        if (s.languageDetector.init) s.languageDetector.init(s, this.options.detection, this.options);\n      }\n      if (this.modules.i18nFormat) {\n        s.i18nFormat = createClassOnDemand(this.modules.i18nFormat);\n        if (s.i18nFormat.init) s.i18nFormat.init(this);\n      }\n      this.translator = new Translator(this.services, this.options);\n      this.translator.on('*', function (event) {\n        for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n          args[_key2 - 1] = arguments[_key2];\n        }\n        _this.emit(event, ...args);\n      });\n      this.modules.external.forEach(m => {\n        if (m.init) m.init(this);\n      });\n    }\n    this.format = this.options.interpolation.format;\n    if (!callback) callback = noop;\n    if (this.options.fallbackLng && !this.services.languageDetector && !this.options.lng) {\n      const codes = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n      if (codes.length > 0 && codes[0] !== 'dev') this.options.lng = codes[0];\n    }\n    if (!this.services.languageDetector && !this.options.lng) {\n      this.logger.warn('init: no languageDetector is used and no lng is defined');\n    }\n    const storeApi = ['getResource', 'hasResourceBundle', 'getResourceBundle', 'getDataByLanguage'];\n    storeApi.forEach(fcName => {\n      this[fcName] = function () {\n        return _this.store[fcName](...arguments);\n      };\n    });\n    const storeApiChained = ['addResource', 'addResources', 'addResourceBundle', 'removeResourceBundle'];\n    storeApiChained.forEach(fcName => {\n      this[fcName] = function () {\n        _this.store[fcName](...arguments);\n        return _this;\n      };\n    });\n    const deferred = defer();\n    const load = () => {\n      const finish = (err, t) => {\n        this.isInitializing = false;\n        if (this.isInitialized && !this.initializedStoreOnce) this.logger.warn('init: i18next is already initialized. You should call init just once!');\n        this.isInitialized = true;\n        if (!this.options.isClone) this.logger.log('initialized', this.options);\n        this.emit('initialized', this.options);\n        deferred.resolve(t);\n        callback(err, t);\n      };\n      if (this.languages && this.options.compatibilityAPI !== 'v1' && !this.isInitialized) return finish(null, this.t.bind(this));\n      this.changeLanguage(this.options.lng, finish);\n    };\n    if (this.options.resources || !this.options.initImmediate) {\n      load();\n    } else {\n      setTimeout(load, 0);\n    }\n    return deferred;\n  }\n  loadResources(language) {\n    let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n    let usedCallback = callback;\n    const usedLng = isString(language) ? language : this.language;\n    if (typeof language === 'function') usedCallback = language;\n    if (!this.options.resources || this.options.partialBundledLanguages) {\n      if (usedLng && usedLng.toLowerCase() === 'cimode' && (!this.options.preload || this.options.preload.length === 0)) return usedCallback();\n      const toLoad = [];\n      const append = lng => {\n        if (!lng) return;\n        if (lng === 'cimode') return;\n        const lngs = this.services.languageUtils.toResolveHierarchy(lng);\n        lngs.forEach(l => {\n          if (l === 'cimode') return;\n          if (toLoad.indexOf(l) < 0) toLoad.push(l);\n        });\n      };\n      if (!usedLng) {\n        const fallbacks = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n        fallbacks.forEach(l => append(l));\n      } else {\n        append(usedLng);\n      }\n      if (this.options.preload) {\n        this.options.preload.forEach(l => append(l));\n      }\n      this.services.backendConnector.load(toLoad, this.options.ns, e => {\n        if (!e && !this.resolvedLanguage && this.language) this.setResolvedLanguage(this.language);\n        usedCallback(e);\n      });\n    } else {\n      usedCallback(null);\n    }\n  }\n  reloadResources(lngs, ns, callback) {\n    const deferred = defer();\n    if (typeof lngs === 'function') {\n      callback = lngs;\n      lngs = undefined;\n    }\n    if (typeof ns === 'function') {\n      callback = ns;\n      ns = undefined;\n    }\n    if (!lngs) lngs = this.languages;\n    if (!ns) ns = this.options.ns;\n    if (!callback) callback = noop;\n    this.services.backendConnector.reload(lngs, ns, err => {\n      deferred.resolve();\n      callback(err);\n    });\n    return deferred;\n  }\n  use(module) {\n    if (!module) throw new Error('You are passing an undefined module! Please check the object you are passing to i18next.use()');\n    if (!module.type) throw new Error('You are passing a wrong module! Please check the object you are passing to i18next.use()');\n    if (module.type === 'backend') {\n      this.modules.backend = module;\n    }\n    if (module.type === 'logger' || module.log && module.warn && module.error) {\n      this.modules.logger = module;\n    }\n    if (module.type === 'languageDetector') {\n      this.modules.languageDetector = module;\n    }\n    if (module.type === 'i18nFormat') {\n      this.modules.i18nFormat = module;\n    }\n    if (module.type === 'postProcessor') {\n      postProcessor.addPostProcessor(module);\n    }\n    if (module.type === 'formatter') {\n      this.modules.formatter = module;\n    }\n    if (module.type === '3rdParty') {\n      this.modules.external.push(module);\n    }\n    return this;\n  }\n  setResolvedLanguage(l) {\n    if (!l || !this.languages) return;\n    if (['cimode', 'dev'].indexOf(l) > -1) return;\n    for (let li = 0; li < this.languages.length; li++) {\n      const lngInLngs = this.languages[li];\n      if (['cimode', 'dev'].indexOf(lngInLngs) > -1) continue;\n      if (this.store.hasLanguageSomeTranslations(lngInLngs)) {\n        this.resolvedLanguage = lngInLngs;\n        break;\n      }\n    }\n  }\n  changeLanguage(lng, callback) {\n    var _this2 = this;\n    this.isLanguageChangingTo = lng;\n    const deferred = defer();\n    this.emit('languageChanging', lng);\n    const setLngProps = l => {\n      this.language = l;\n      this.languages = this.services.languageUtils.toResolveHierarchy(l);\n      this.resolvedLanguage = undefined;\n      this.setResolvedLanguage(l);\n    };\n    const done = (err, l) => {\n      if (l) {\n        setLngProps(l);\n        this.translator.changeLanguage(l);\n        this.isLanguageChangingTo = undefined;\n        this.emit('languageChanged', l);\n        this.logger.log('languageChanged', l);\n      } else {\n        this.isLanguageChangingTo = undefined;\n      }\n      deferred.resolve(function () {\n        return _this2.t(...arguments);\n      });\n      if (callback) callback(err, function () {\n        return _this2.t(...arguments);\n      });\n    };\n    const setLng = lngs => {\n      if (!lng && !lngs && this.services.languageDetector) lngs = [];\n      const l = isString(lngs) ? lngs : this.services.languageUtils.getBestMatchFromCodes(lngs);\n      if (l) {\n        if (!this.language) {\n          setLngProps(l);\n        }\n        if (!this.translator.language) this.translator.changeLanguage(l);\n        if (this.services.languageDetector && this.services.languageDetector.cacheUserLanguage) this.services.languageDetector.cacheUserLanguage(l);\n      }\n      this.loadResources(l, err => {\n        done(err, l);\n      });\n    };\n    if (!lng && this.services.languageDetector && !this.services.languageDetector.async) {\n      setLng(this.services.languageDetector.detect());\n    } else if (!lng && this.services.languageDetector && this.services.languageDetector.async) {\n      if (this.services.languageDetector.detect.length === 0) {\n        this.services.languageDetector.detect().then(setLng);\n      } else {\n        this.services.languageDetector.detect(setLng);\n      }\n    } else {\n      setLng(lng);\n    }\n    return deferred;\n  }\n  getFixedT(lng, ns, keyPrefix) {\n    var _this3 = this;\n    const fixedT = function (key, opts) {\n      let options;\n      if (typeof opts !== 'object') {\n        for (var _len3 = arguments.length, rest = new Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {\n          rest[_key3 - 2] = arguments[_key3];\n        }\n        options = _this3.options.overloadTranslationOptionHandler([key, opts].concat(rest));\n      } else {\n        options = {\n          ...opts\n        };\n      }\n      options.lng = options.lng || fixedT.lng;\n      options.lngs = options.lngs || fixedT.lngs;\n      options.ns = options.ns || fixedT.ns;\n      if (options.keyPrefix !== '') options.keyPrefix = options.keyPrefix || keyPrefix || fixedT.keyPrefix;\n      const keySeparator = _this3.options.keySeparator || '.';\n      let resultKey;\n      if (options.keyPrefix && Array.isArray(key)) {\n        resultKey = key.map(k => `${options.keyPrefix}${keySeparator}${k}`);\n      } else {\n        resultKey = options.keyPrefix ? `${options.keyPrefix}${keySeparator}${key}` : key;\n      }\n      return _this3.t(resultKey, options);\n    };\n    if (isString(lng)) {\n      fixedT.lng = lng;\n    } else {\n      fixedT.lngs = lng;\n    }\n    fixedT.ns = ns;\n    fixedT.keyPrefix = keyPrefix;\n    return fixedT;\n  }\n  t() {\n    return this.translator && this.translator.translate(...arguments);\n  }\n  exists() {\n    return this.translator && this.translator.exists(...arguments);\n  }\n  setDefaultNamespace(ns) {\n    this.options.defaultNS = ns;\n  }\n  hasLoadedNamespace(ns) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    if (!this.isInitialized) {\n      this.logger.warn('hasLoadedNamespace: i18next was not initialized', this.languages);\n      return false;\n    }\n    if (!this.languages || !this.languages.length) {\n      this.logger.warn('hasLoadedNamespace: i18n.languages were undefined or empty', this.languages);\n      return false;\n    }\n    const lng = options.lng || this.resolvedLanguage || this.languages[0];\n    const fallbackLng = this.options ? this.options.fallbackLng : false;\n    const lastLng = this.languages[this.languages.length - 1];\n    if (lng.toLowerCase() === 'cimode') return true;\n    const loadNotPending = (l, n) => {\n      const loadState = this.services.backendConnector.state[`${l}|${n}`];\n      return loadState === -1 || loadState === 0 || loadState === 2;\n    };\n    if (options.precheck) {\n      const preResult = options.precheck(this, loadNotPending);\n      if (preResult !== undefined) return preResult;\n    }\n    if (this.hasResourceBundle(lng, ns)) return true;\n    if (!this.services.backendConnector.backend || this.options.resources && !this.options.partialBundledLanguages) return true;\n    if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;\n    return false;\n  }\n  loadNamespaces(ns, callback) {\n    const deferred = defer();\n    if (!this.options.ns) {\n      if (callback) callback();\n      return Promise.resolve();\n    }\n    if (isString(ns)) ns = [ns];\n    ns.forEach(n => {\n      if (this.options.ns.indexOf(n) < 0) this.options.ns.push(n);\n    });\n    this.loadResources(err => {\n      deferred.resolve();\n      if (callback) callback(err);\n    });\n    return deferred;\n  }\n  loadLanguages(lngs, callback) {\n    const deferred = defer();\n    if (isString(lngs)) lngs = [lngs];\n    const preloaded = this.options.preload || [];\n    const newLngs = lngs.filter(lng => preloaded.indexOf(lng) < 0 && this.services.languageUtils.isSupportedCode(lng));\n    if (!newLngs.length) {\n      if (callback) callback();\n      return Promise.resolve();\n    }\n    this.options.preload = preloaded.concat(newLngs);\n    this.loadResources(err => {\n      deferred.resolve();\n      if (callback) callback(err);\n    });\n    return deferred;\n  }\n  dir(lng) {\n    if (!lng) lng = this.resolvedLanguage || (this.languages && this.languages.length > 0 ? this.languages[0] : this.language);\n    if (!lng) return 'rtl';\n    const rtlLngs = ['ar', 'shu', 'sqr', 'ssh', 'xaa', 'yhd', 'yud', 'aao', 'abh', 'abv', 'acm', 'acq', 'acw', 'acx', 'acy', 'adf', 'ads', 'aeb', 'aec', 'afb', 'ajp', 'apc', 'apd', 'arb', 'arq', 'ars', 'ary', 'arz', 'auz', 'avl', 'ayh', 'ayl', 'ayn', 'ayp', 'bbz', 'pga', 'he', 'iw', 'ps', 'pbt', 'pbu', 'pst', 'prp', 'prd', 'ug', 'ur', 'ydd', 'yds', 'yih', 'ji', 'yi', 'hbo', 'men', 'xmn', 'fa', 'jpr', 'peo', 'pes', 'prs', 'dv', 'sam', 'ckb'];\n    const languageUtils = this.services && this.services.languageUtils || new LanguageUtil(get());\n    return rtlLngs.indexOf(languageUtils.getLanguagePartFromCode(lng)) > -1 || lng.toLowerCase().indexOf('-arab') > 1 ? 'rtl' : 'ltr';\n  }\n  static createInstance() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    let callback = arguments.length > 1 ? arguments[1] : undefined;\n    return new I18n(options, callback);\n  }\n  cloneInstance() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n    const forkResourceStore = options.forkResourceStore;\n    if (forkResourceStore) delete options.forkResourceStore;\n    const mergedOptions = {\n      ...this.options,\n      ...options,\n      ...{\n        isClone: true\n      }\n    };\n    const clone = new I18n(mergedOptions);\n    if (options.debug !== undefined || options.prefix !== undefined) {\n      clone.logger = clone.logger.clone(options);\n    }\n    const membersToCopy = ['store', 'services', 'language'];\n    membersToCopy.forEach(m => {\n      clone[m] = this[m];\n    });\n    clone.services = {\n      ...this.services\n    };\n    clone.services.utils = {\n      hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n    };\n    if (forkResourceStore) {\n      clone.store = new ResourceStore(this.store.data, mergedOptions);\n      clone.services.resourceStore = clone.store;\n    }\n    clone.translator = new Translator(clone.services, mergedOptions);\n    clone.translator.on('*', function (event) {\n      for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n        args[_key4 - 1] = arguments[_key4];\n      }\n      clone.emit(event, ...args);\n    });\n    clone.init(mergedOptions, callback);\n    clone.translator.options = mergedOptions;\n    clone.translator.backendConnector.services.utils = {\n      hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n    };\n    return clone;\n  }\n  toJSON() {\n    return {\n      options: this.options,\n      store: this.store,\n      language: this.language,\n      languages: this.languages,\n      resolvedLanguage: this.resolvedLanguage\n    };\n  }\n}\nconst instance = I18n.createInstance();\ninstance.createInstance = I18n.createInstance;\n\nconst createInstance = instance.createInstance;\nconst dir = instance.dir;\nconst init = instance.init;\nconst loadResources = instance.loadResources;\nconst reloadResources = instance.reloadResources;\nconst use = instance.use;\nconst changeLanguage = instance.changeLanguage;\nconst getFixedT = instance.getFixedT;\nconst t = instance.t;\nconst exists = instance.exists;\nconst setDefaultNamespace = instance.setDefaultNamespace;\nconst hasLoadedNamespace = instance.hasLoadedNamespace;\nconst loadNamespaces = instance.loadNamespaces;\nconst loadLanguages = instance.loadLanguages;\n\nexport { changeLanguage, createInstance, instance as default, dir, exists, getFixedT, hasLoadedNamespace, init, loadLanguages, loadNamespaces, loadResources, reloadResources, setDefaultNamespace, t, use };\n", "import { EN, NS, type SamuelCopyOverrides } from \"./resources\";\nimport i18next, { type i18n as I18n } from \"i18next\";\nimport type { SamuelConfig } from \"../types\";\nimport { initReactI18next } from \"react-i18next\";\n\n/**\n * Build a widget-scoped i18next instance. We use `createInstance()` (never the global `i18next`\n * singleton) so an embedding host page that also uses i18next is never clobbered \u2014 Samuel provides\n * this instance through `<I18nextProvider>`, and every component reads it from React context.\n *\n * - `locale` drives the active language; anything without its own bundle falls back to English.\n * - `copy` is a per-brand override map merged over the English defaults for the active locale, so a\n *   brand speaks in its own voice (e.g. \"Chat with a Ride Specialist\") without code changes.\n * - `support.label` (set via Claire's branding bridge) still drives the header label when no explicit\n *   `copy.supportLabel` override is given \u2014 preserved for back-compat with brands that set it.\n * - `escapeValue: false` because React already escapes, and `<Trans>` needs raw markup.\n */\nexport function createSamuelI18n(\n  config: Pick<SamuelConfig, \"locale\" | \"copy\" | \"support\">,\n): I18n {\n  const lng = config.locale?.trim() || \"en\";\n  const instance = i18next.createInstance();\n  instance.use(initReactI18next).init({\n    lng,\n    fallbackLng: \"en\",\n    // Shallow copy so a per-instance override replaces keys on this object, never mutating the\n    // shared default bundle by reference (keys are flat, so a shallow copy is enough).\n    resources: { en: { [NS]: { ...EN } } },\n    defaultNS: NS,\n    returnNull: false,\n    interpolation: { escapeValue: false },\n  });\n\n  const overrides: SamuelCopyOverrides = { ...config.copy };\n  // Back-compat: a brand's support.label feeds the header label (both brand/no-brand contexts) unless\n  // an explicit copy.supportLabel override wins. Mirrors the old resolveCopy precedence.\n  const supportLabel = config.support?.label;\n  if (supportLabel && overrides.supportLabel == null) {\n    overrides.supportLabel = supportLabel;\n    overrides.supportLabel_brand ??= supportLabel;\n  }\n\n  if (Object.keys(overrides).length > 0) {\n    // Shallow overwrite (deep=false): each overridden key \u2014 string or array \u2014 is replaced wholesale\n    // (the resource keys are flat), so an array override fully replaces rather than index-merging.\n    // Untouched keys still fall back to the English defaults.\n    instance.addResourceBundle(lng, NS, overrides, false, true);\n  }\n\n  return instance;\n}\n", "import { ChatAnalyticsContext } from \"../context/ChatAnalyticsContext\";\nimport type { ChatOpenedSource } from \"../types\";\nimport type { SamuelResponse } from \"@fermat/agents-api\";\nimport { useContext } from \"react\";\n\ntype ChatProductSource = \"welcome_recs\" | \"assistant_response\";\n\ninterface ChatAnalyticsInputContext {\n  productHandle?: string;\n  orgId?: string;\n  productFunnelId?: string;\n}\n\n/** Emits the canonical `Assistant *` event set. Names and shapes are byte-identical to the hosted-tiles version. */\nexport function useChatAnalytics(ctx: ChatAnalyticsInputContext) {\n  const { captureEvent } = useContext(ChatAnalyticsContext);\n\n  const fire = (event: {\n    name: string;\n    properties: Record<string, unknown>;\n  }) => {\n    if (process.env.NODE_ENV !== \"production\") {\n      // eslint-disable-next-line no-console\n      console.log(\"[ChatAnalytics]\", event.name, event.properties);\n    }\n    captureEvent(event);\n  };\n\n  const base: Record<string, unknown> = {\n    product_handle: ctx.productHandle,\n    org_id: ctx.orgId,\n    product_funnel_id: ctx.productFunnelId,\n  };\n\n  const trackChatOpened = (messageCount: number, source?: ChatOpenedSource) => {\n    fire({\n      name: \"Assistant opened\",\n      properties: { ...base, message_count: messageCount, source },\n    });\n  };\n\n  const trackChatClosed = (messageCount: number, sessionDurationMs: number) => {\n    fire({\n      name: \"Assistant closed\",\n      properties: {\n        ...base,\n        message_count: messageCount,\n        session_duration_ms: sessionDurationMs,\n      },\n    });\n  };\n\n  const trackChatInteracted = (messageType: \"suggestion\" | \"typed\") => {\n    fire({\n      name: \"Assistant interacted\",\n      properties: { ...base, message_type: messageType },\n    });\n  };\n\n  const trackMessageSent = (params: {\n    messageType: \"suggestion\" | \"typed\";\n    messageIndex: number;\n    conversationId?: string;\n    suggestedReplyText?: string;\n    suggestedReplyIndex?: number;\n    suggestedRepliesOfferedCount?: number;\n  }) => {\n    fire({\n      name: \"Assistant message sent\",\n      properties: {\n        ...base,\n        message_type: params.messageType,\n        message_index: params.messageIndex,\n        conversation_id: params.conversationId,\n        suggested_reply_text: params.suggestedReplyText,\n        suggested_reply_index: params.suggestedReplyIndex,\n        suggested_replies_offered_count: params.suggestedRepliesOfferedCount,\n      },\n    });\n  };\n\n  const trackChatReset = (\n    messageCount: number,\n    conversationId?: string | null,\n  ) => {\n    fire({\n      name: \"Assistant reset\",\n      properties: {\n        ...base,\n        message_count: messageCount,\n        conversation_id: conversationId,\n      },\n    });\n  };\n\n  const trackProductClicked = (\n    productHandle: string,\n    source: ChatProductSource,\n    conversationId?: string | null,\n    /** The variant the shopper had selected on the card, absent on a product-level card. */\n    variantExternalId?: string,\n  ) => {\n    fire({\n      name: \"Assistant product clicked\",\n      properties: {\n        ...base,\n        clicked_product_handle: productHandle,\n        clicked_variant_external_id: variantExternalId,\n        source,\n        conversation_id: conversationId,\n      },\n    });\n  };\n\n  const trackProductATCClicked = (\n    productHandle: string,\n    source: ChatProductSource,\n    conversationId?: string | null,\n    variantExternalId?: string,\n  ) => {\n    fire({\n      name: \"Assistant product atc clicked\",\n      properties: {\n        ...base,\n        clicked_product_handle: productHandle,\n        clicked_variant_external_id: variantExternalId,\n        source,\n        conversation_id: conversationId,\n      },\n    });\n  };\n\n  const trackConversationCompleted = (params: {\n    conversationId?: string;\n    userMessage: string;\n    assistantMessage: string;\n    recommendedProductFunnelUrls?: string[];\n    carouselHeading?: string;\n    suggestedReplies?: string[];\n    clarifyingQuestion?: string;\n  }) => {\n    // Populate unconditionally so every turn is a complete record of what the assistant offered:\n    // replies default to an empty list, the clarifying question to null when the turn had none.\n    const suggestedReplies = params.suggestedReplies ?? [];\n    fire({\n      name: \"Assistant conversation turn completed\",\n      properties: {\n        ...base,\n        conversation_id: params.conversationId,\n        user_message: params.userMessage,\n        assistant_message: params.assistantMessage,\n        recommended_product_funnel_urls: params.recommendedProductFunnelUrls,\n        carousel_heading: params.carouselHeading,\n        suggested_replies: suggestedReplies,\n        suggested_replies_count: suggestedReplies.length,\n        clarifying_question: params.clarifyingQuestion ?? null,\n        has_clarifying_question: Boolean(params.clarifyingQuestion),\n      },\n    });\n  };\n\n  /** `assistantMessageIndex` is the rated message's slot in the messages array, NOT the user-turn\n   *  counter `trackMessageSent` reports as `message_index`. The property names differ deliberately:\n   *  the dbt staging model lifts `message_index` into one column for every `assistant_*` event, so\n   *  reusing the name would put two incompatible numberings in the same column. */\n  const trackFeedbackSubmitted = (params: {\n    vote: \"up\" | \"down\";\n    assistantMessageIndex: number;\n    conversationId?: string | null;\n    /** Optional free-text from a thumbs-down; pixel-only, never sent to the agent. */\n    feedbackText?: string | null;\n  }) => {\n    fire({\n      name: \"Assistant feedback submitted\",\n      properties: {\n        ...base,\n        vote: params.vote,\n        assistant_message_index: params.assistantMessageIndex,\n        conversation_id: params.conversationId,\n        feedback_text: params.feedbackText ?? null,\n      },\n    });\n  };\n\n  const trackChatError = (params: {\n    conversationId?: string | null;\n    status?: number;\n    errorName?: string;\n    mode?: string;\n    messageType?: \"suggestion\" | \"typed\";\n    responseTimeMs?: number;\n  }) => {\n    fire({\n      name: \"Assistant error\",\n      properties: {\n        ...base,\n        conversation_id: params.conversationId,\n        status: params.status,\n        error_name: params.errorName,\n        mode: params.mode,\n        message_type: params.messageType,\n        response_time_ms: params.responseTimeMs,\n      },\n    });\n  };\n\n  /**\n   * Live-agent handoff funnel (FDE-472). Four widget-side steps, so \"nobody wants a human\" is\n   * distinguishable from \"the confirm copy scares them off\":\n   * suggested (Samuel offered) -> prompted (card opened) -> requested (confirmed) | dismissed.\n   * `suggested` fires only for an offer Samuel raised; a shopper who clicks the header control\n   * enters at `prompted`, so the two are not nested.\n   * The confirm is the last step the widget can observe; whether the vendor chat actually opened is\n   * host-side, and Claire tracks that as `external_handoff` / `external_handoff_failed`.\n   *\n   * Every name here MUST also appear in host/bridge.ts ASSISTANT_EVENT_MAP or it is silently dropped.\n   */\n  const trackExternalHandoffSuggested = (\n    messageCount: number,\n    reason: SamuelResponse[\"handoffReason\"],\n  ) => {\n    fire({\n      name: \"Assistant handoff suggested\",\n      properties: {\n        ...base,\n        message_count: messageCount,\n        reason: reason ?? \"\",\n      },\n    });\n  };\n\n  const trackExternalHandoffPrompted = (messageCount: number) => {\n    fire({\n      name: \"Assistant handoff prompted\",\n      properties: { ...base, message_count: messageCount },\n    });\n  };\n\n  const trackExternalHandoff = (messageCount: number) => {\n    fire({\n      name: \"Assistant handoff requested\",\n      properties: { ...base, message_count: messageCount },\n    });\n  };\n\n  const trackExternalHandoffDismissed = (messageCount: number) => {\n    fire({\n      name: \"Assistant handoff dismissed\",\n      properties: { ...base, message_count: messageCount },\n    });\n  };\n\n  return {\n    trackExternalHandoffSuggested,\n    trackExternalHandoffPrompted,\n    trackExternalHandoff,\n    trackExternalHandoffDismissed,\n    trackChatOpened,\n    trackChatClosed,\n    trackChatInteracted,\n    trackMessageSent,\n    trackChatReset,\n    trackProductClicked,\n    trackProductATCClicked,\n    trackConversationCompleted,\n    trackFeedbackSubmitted,\n    trackChatError,\n  };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nexport const BASE_PATH = \"http://localhost\".replace(/\\/+$/, \"\");\nexport class Configuration {\n    constructor(configuration = {}) {\n        this.configuration = configuration;\n    }\n    set config(configuration) {\n        this.configuration = configuration;\n    }\n    get basePath() {\n        return this.configuration.basePath != null ? this.configuration.basePath : BASE_PATH;\n    }\n    get fetchApi() {\n        return this.configuration.fetchApi;\n    }\n    get middleware() {\n        return this.configuration.middleware || [];\n    }\n    get queryParamsStringify() {\n        return this.configuration.queryParamsStringify || querystring;\n    }\n    get username() {\n        return this.configuration.username;\n    }\n    get password() {\n        return this.configuration.password;\n    }\n    get apiKey() {\n        const apiKey = this.configuration.apiKey;\n        if (apiKey) {\n            return typeof apiKey === 'function' ? apiKey : () => apiKey;\n        }\n        return undefined;\n    }\n    get accessToken() {\n        const accessToken = this.configuration.accessToken;\n        if (accessToken) {\n            return typeof accessToken === 'function' ? accessToken : () => __awaiter(this, void 0, void 0, function* () { return accessToken; });\n        }\n        return undefined;\n    }\n    get headers() {\n        return this.configuration.headers;\n    }\n    get credentials() {\n        return this.configuration.credentials;\n    }\n}\nexport const DefaultConfig = new Configuration();\n/**\n * This is the base class for all generated API classes.\n */\nexport class BaseAPI {\n    constructor(configuration = DefaultConfig) {\n        this.configuration = configuration;\n        this.fetchApi = (url, init) => __awaiter(this, void 0, void 0, function* () {\n            let fetchParams = { url, init };\n            for (const middleware of this.middleware) {\n                if (middleware.pre) {\n                    fetchParams = (yield middleware.pre(Object.assign({ fetch: this.fetchApi }, fetchParams))) || fetchParams;\n                }\n            }\n            let response = undefined;\n            try {\n                response = yield (this.configuration.fetchApi || fetch)(fetchParams.url, fetchParams.init);\n            }\n            catch (e) {\n                for (const middleware of this.middleware) {\n                    if (middleware.onError) {\n                        response = (yield middleware.onError({\n                            fetch: this.fetchApi,\n                            url: fetchParams.url,\n                            init: fetchParams.init,\n                            error: e,\n                            response: response ? response.clone() : undefined,\n                        })) || response;\n                    }\n                }\n                if (response === undefined) {\n                    if (e instanceof Error) {\n                        throw new FetchError(e, 'The request failed and the interceptors did not return an alternative response');\n                    }\n                    else {\n                        throw e;\n                    }\n                }\n            }\n            for (const middleware of this.middleware) {\n                if (middleware.post) {\n                    response = (yield middleware.post({\n                        fetch: this.fetchApi,\n                        url: fetchParams.url,\n                        init: fetchParams.init,\n                        response: response.clone(),\n                    })) || response;\n                }\n            }\n            return response;\n        });\n        this.middleware = configuration.middleware;\n    }\n    withMiddleware(...middlewares) {\n        const next = this.clone();\n        next.middleware = next.middleware.concat(...middlewares);\n        return next;\n    }\n    withPreMiddleware(...preMiddlewares) {\n        const middlewares = preMiddlewares.map((pre) => ({ pre }));\n        return this.withMiddleware(...middlewares);\n    }\n    withPostMiddleware(...postMiddlewares) {\n        const middlewares = postMiddlewares.map((post) => ({ post }));\n        return this.withMiddleware(...middlewares);\n    }\n    /**\n     * Check if the given MIME is a JSON MIME.\n     * JSON MIME examples:\n     *   application/json\n     *   application/json; charset=UTF8\n     *   APPLICATION/JSON\n     *   application/vnd.company+json\n     * @param mime - MIME (Multipurpose Internet Mail Extensions)\n     * @return True if the given MIME is JSON, false otherwise.\n     */\n    isJsonMime(mime) {\n        if (!mime) {\n            return false;\n        }\n        return BaseAPI.jsonRegex.test(mime);\n    }\n    request(context, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { url, init } = yield this.createFetchParams(context, initOverrides);\n            const response = yield this.fetchApi(url, init);\n            if (response && (response.status >= 200 && response.status < 300)) {\n                return response;\n            }\n            throw new ResponseError(response, 'Response returned an error code');\n        });\n    }\n    createFetchParams(context, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            let url = this.configuration.basePath + context.path;\n            if (context.query !== undefined && Object.keys(context.query).length !== 0) {\n                // only add the querystring to the URL if there are query parameters.\n                // this is done to avoid urls ending with a \"?\" character which buggy webservers\n                // do not handle correctly sometimes.\n                url += '?' + this.configuration.queryParamsStringify(context.query);\n            }\n            const headers = Object.assign({}, this.configuration.headers, context.headers);\n            Object.keys(headers).forEach(key => headers[key] === undefined ? delete headers[key] : {});\n            const initOverrideFn = typeof initOverrides === \"function\"\n                ? initOverrides\n                : () => __awaiter(this, void 0, void 0, function* () { return initOverrides; });\n            const initParams = {\n                method: context.method,\n                headers,\n                body: context.body,\n                credentials: this.configuration.credentials,\n            };\n            const overriddenInit = Object.assign(Object.assign({}, initParams), (yield initOverrideFn({\n                init: initParams,\n                context,\n            })));\n            let body;\n            if (isFormData(overriddenInit.body)\n                || (overriddenInit.body instanceof URLSearchParams)\n                || isBlob(overriddenInit.body)) {\n                body = overriddenInit.body;\n            }\n            else if (this.isJsonMime(headers['Content-Type'])) {\n                body = JSON.stringify(overriddenInit.body);\n            }\n            else {\n                body = overriddenInit.body;\n            }\n            const init = Object.assign(Object.assign({}, overriddenInit), { body });\n            return { url, init };\n        });\n    }\n    /**\n     * Create a shallow clone of `this` by constructing a new instance\n     * and then shallow cloning data members.\n     */\n    clone() {\n        const constructor = this.constructor;\n        const next = new constructor(this.configuration);\n        next.middleware = this.middleware.slice();\n        return next;\n    }\n}\nBaseAPI.jsonRegex = /^(:?application\\/json|[^;/ \\t]+\\/[^;/ \\t]+[+]json)[ \\t]*(:?;.*)?$/i;\n;\nfunction isBlob(value) {\n    return typeof Blob !== 'undefined' && value instanceof Blob;\n}\nfunction isFormData(value) {\n    return typeof FormData !== \"undefined\" && value instanceof FormData;\n}\nexport class ResponseError extends Error {\n    constructor(response, msg) {\n        super(msg);\n        this.response = response;\n        this.name = \"ResponseError\";\n        // restore prototype chain\n        const actualProto = new.target.prototype;\n        if (Object.setPrototypeOf) {\n            Object.setPrototypeOf(this, actualProto);\n        }\n    }\n}\nexport class FetchError extends Error {\n    constructor(cause, msg) {\n        super(msg);\n        this.cause = cause;\n        this.name = \"FetchError\";\n        // restore prototype chain\n        const actualProto = new.target.prototype;\n        if (Object.setPrototypeOf) {\n            Object.setPrototypeOf(this, actualProto);\n        }\n    }\n}\nexport class RequiredError extends Error {\n    constructor(field, msg) {\n        super(msg);\n        this.field = field;\n        this.name = \"RequiredError\";\n        // restore prototype chain\n        const actualProto = new.target.prototype;\n        if (Object.setPrototypeOf) {\n            Object.setPrototypeOf(this, actualProto);\n        }\n    }\n}\nexport const COLLECTION_FORMATS = {\n    csv: \",\",\n    ssv: \" \",\n    tsv: \"\\t\",\n    pipes: \"|\",\n};\nexport function querystring(params, prefix = '') {\n    return Object.keys(params)\n        .map(key => querystringSingleKey(key, params[key], prefix))\n        .filter(part => part.length > 0)\n        .join('&');\n}\nfunction querystringSingleKey(key, value, keyPrefix = '') {\n    const fullKey = keyPrefix + (keyPrefix.length ? `[${key}]` : key);\n    if (value instanceof Array) {\n        const multiValue = value.map(singleValue => encodeURIComponent(String(singleValue)))\n            .join(`&${encodeURIComponent(fullKey)}=`);\n        return `${encodeURIComponent(fullKey)}=${multiValue}`;\n    }\n    if (value instanceof Set) {\n        const valueAsArray = Array.from(value);\n        return querystringSingleKey(key, valueAsArray, keyPrefix);\n    }\n    if (value instanceof Date) {\n        return `${encodeURIComponent(fullKey)}=${encodeURIComponent(value.toISOString())}`;\n    }\n    if (value instanceof Object) {\n        return querystring(value, fullKey);\n    }\n    return `${encodeURIComponent(fullKey)}=${encodeURIComponent(String(value))}`;\n}\nexport function exists(json, key) {\n    const value = json[key];\n    return value !== null && value !== undefined;\n}\nexport function mapValues(data, fn) {\n    const result = {};\n    for (const key of Object.keys(data)) {\n        result[key] = fn(data[key]);\n    }\n    return result;\n}\nexport function canConsumeForm(consumes) {\n    for (const consume of consumes) {\n        if ('multipart/form-data' === consume.contentType) {\n            return true;\n        }\n    }\n    return false;\n}\nexport class JSONApiResponse {\n    constructor(raw, transformer = (jsonValue) => jsonValue) {\n        this.raw = raw;\n        this.transformer = transformer;\n    }\n    value() {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.transformer(yield this.raw.json());\n        });\n    }\n}\nexport class VoidApiResponse {\n    constructor(raw) {\n        this.raw = raw;\n    }\n    value() {\n        return __awaiter(this, void 0, void 0, function* () {\n            return undefined;\n        });\n    }\n}\nexport class BlobApiResponse {\n    constructor(raw) {\n        this.raw = raw;\n    }\n    value() {\n        return __awaiter(this, void 0, void 0, function* () {\n            return yield this.raw.blob();\n        });\n    }\n    ;\n}\nexport class TextApiResponse {\n    constructor(raw) {\n        this.raw = raw;\n    }\n    value() {\n        return __awaiter(this, void 0, void 0, function* () {\n            return yield this.raw.text();\n        });\n    }\n    ;\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * @export\n */\nexport const EntityTypeEnum = {\n    Product: 'product',\n    Bundle: 'bundle'\n};\n/**\n * Check if a given object implements the Entity interface.\n */\nexport function instanceOfEntity(value) {\n    if (!('type' in value) || value['type'] === undefined)\n        return false;\n    if (!('id' in value) || value['id'] === undefined)\n        return false;\n    return true;\n}\nexport function EntityFromJSON(json) {\n    return EntityFromJSONTyped(json, false);\n}\nexport function EntityFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'type': json['type'],\n        'id': json['id'],\n    };\n}\nexport function EntityToJSON(json) {\n    return EntityToJSONTyped(json, false);\n}\nexport function EntityToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'type': value['type'],\n        'id': value['id'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the ReplayToolCall interface.\n */\nexport function instanceOfReplayToolCall(value) {\n    if (!('toolCallId' in value) || value['toolCallId'] === undefined)\n        return false;\n    if (!('tool' in value) || value['tool'] === undefined)\n        return false;\n    return true;\n}\nexport function ReplayToolCallFromJSON(json) {\n    return ReplayToolCallFromJSONTyped(json, false);\n}\nexport function ReplayToolCallFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'toolCallId': json['tool_call_id'],\n        'tool': json['tool'],\n        'args': json['args'] == null ? undefined : json['args'],\n        'title': json['title'] == null ? undefined : json['title'],\n        'status': json['status'] == null ? undefined : json['status'],\n        'errors': json['errors'] == null ? undefined : json['errors'],\n        'resultJson': json['result_json'] == null ? undefined : json['result_json'],\n    };\n}\nexport function ReplayToolCallToJSON(json) {\n    return ReplayToolCallToJSONTyped(json, false);\n}\nexport function ReplayToolCallToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'tool_call_id': value['toolCallId'],\n        'tool': value['tool'],\n        'args': value['args'],\n        'title': value['title'],\n        'status': value['status'],\n        'errors': value['errors'],\n        'result_json': value['resultJson'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { ReplayToolCallFromJSON, ReplayToolCallToJSON, } from './ReplayToolCall';\n/**\n * Check if a given object implements the AppApiEndpointsAisOnboardingAgentSchemaReplayMessage interface.\n */\nexport function instanceOfAppApiEndpointsAisOnboardingAgentSchemaReplayMessage(value) {\n    if (!('role' in value) || value['role'] === undefined)\n        return false;\n    if (!('content' in value) || value['content'] === undefined)\n        return false;\n    return true;\n}\nexport function AppApiEndpointsAisOnboardingAgentSchemaReplayMessageFromJSON(json) {\n    return AppApiEndpointsAisOnboardingAgentSchemaReplayMessageFromJSONTyped(json, false);\n}\nexport function AppApiEndpointsAisOnboardingAgentSchemaReplayMessageFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'role': json['role'],\n        'content': json['content'],\n        'toolCalls': json['tool_calls'] == null ? undefined : (json['tool_calls'].map(ReplayToolCallFromJSON)),\n    };\n}\nexport function AppApiEndpointsAisOnboardingAgentSchemaReplayMessageToJSON(json) {\n    return AppApiEndpointsAisOnboardingAgentSchemaReplayMessageToJSONTyped(json, false);\n}\nexport function AppApiEndpointsAisOnboardingAgentSchemaReplayMessageToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'role': value['role'],\n        'content': value['content'],\n        'tool_calls': value['toolCalls'] == null ? undefined : (value['toolCalls'].map(ReplayToolCallToJSON)),\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the BrandStylingColorPair interface.\n */\nexport function instanceOfBrandStylingColorPair(value) {\n    return true;\n}\nexport function BrandStylingColorPairFromJSON(json) {\n    return BrandStylingColorPairFromJSONTyped(json, false);\n}\nexport function BrandStylingColorPairFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'backgroundHex': json['background_hex'] == null ? undefined : json['background_hex'],\n        'textHex': json['text_hex'] == null ? undefined : json['text_hex'],\n        'borderColor': json['border_color'] == null ? undefined : json['border_color'],\n    };\n}\nexport function BrandStylingColorPairToJSON(json) {\n    return BrandStylingColorPairToJSONTyped(json, false);\n}\nexport function BrandStylingColorPairToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'background_hex': value['backgroundHex'],\n        'text_hex': value['textHex'],\n        'border_color': value['borderColor'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { BrandStylingColorPairFromJSON, BrandStylingColorPairToJSON, } from './BrandStylingColorPair';\n/**\n * Check if a given object implements the BrandStylingColors interface.\n */\nexport function instanceOfBrandStylingColors(value) {\n    return true;\n}\nexport function BrandStylingColorsFromJSON(json) {\n    return BrandStylingColorsFromJSONTyped(json, false);\n}\nexport function BrandStylingColorsFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'primary': json['primary'] == null ? undefined : BrandStylingColorPairFromJSON(json['primary']),\n        'secondary': json['secondary'] == null ? undefined : BrandStylingColorPairFromJSON(json['secondary']),\n        'accent': json['accent'] == null ? undefined : BrandStylingColorPairFromJSON(json['accent']),\n        'primaryButton': json['primary_button'] == null ? undefined : BrandStylingColorPairFromJSON(json['primary_button']),\n        'secondaryButton': json['secondary_button'] == null ? undefined : BrandStylingColorPairFromJSON(json['secondary_button']),\n    };\n}\nexport function BrandStylingColorsToJSON(json) {\n    return BrandStylingColorsToJSONTyped(json, false);\n}\nexport function BrandStylingColorsToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'primary': BrandStylingColorPairToJSON(value['primary']),\n        'secondary': BrandStylingColorPairToJSON(value['secondary']),\n        'accent': BrandStylingColorPairToJSON(value['accent']),\n        'primary_button': BrandStylingColorPairToJSON(value['primaryButton']),\n        'secondary_button': BrandStylingColorPairToJSON(value['secondaryButton']),\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * @export\n */\nexport const BrandTextStyleTextTransformEnum = {\n    None: 'none',\n    Uppercase: 'uppercase',\n    Lowercase: 'lowercase'\n};\n/**\n * Check if a given object implements the BrandTextStyle interface.\n */\nexport function instanceOfBrandTextStyle(value) {\n    return true;\n}\nexport function BrandTextStyleFromJSON(json) {\n    return BrandTextStyleFromJSONTyped(json, false);\n}\nexport function BrandTextStyleFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'fontFamily': json['font_family'] == null ? undefined : json['font_family'],\n        'fontSize': json['font_size'] == null ? undefined : json['font_size'],\n        'desktopFontSize': json['desktop_font_size'] == null ? undefined : json['desktop_font_size'],\n        'fontWeight': json['font_weight'] == null ? undefined : json['font_weight'],\n        'lineHeight': json['line_height'] == null ? undefined : json['line_height'],\n        'desktopLineHeight': json['desktop_line_height'] == null ? undefined : json['desktop_line_height'],\n        'letterSpacing': json['letter_spacing'] == null ? undefined : json['letter_spacing'],\n        'textTransform': json['text_transform'] == null ? undefined : json['text_transform'],\n    };\n}\nexport function BrandTextStyleToJSON(json) {\n    return BrandTextStyleToJSONTyped(json, false);\n}\nexport function BrandTextStyleToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'font_family': value['fontFamily'],\n        'font_size': value['fontSize'],\n        'desktop_font_size': value['desktopFontSize'],\n        'font_weight': value['fontWeight'],\n        'line_height': value['lineHeight'],\n        'desktop_line_height': value['desktopLineHeight'],\n        'letter_spacing': value['letterSpacing'],\n        'text_transform': value['textTransform'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * @export\n */\nexport const BrandStylingButtonFontFontFamilyEnum = {\n    Primary: 'primary',\n    Secondary: 'secondary',\n    Custom1: 'custom-1',\n    Custom2: 'custom-2',\n    Custom3: 'custom-3'\n};\n/**\n * @export\n */\nexport const BrandStylingButtonFontTextAlignEnum = {\n    Left: 'left',\n    Center: 'center',\n    Right: 'right'\n};\n/**\n * @export\n */\nexport const BrandStylingButtonFontTextTransformEnum = {\n    None: 'none',\n    Uppercase: 'uppercase',\n    Lowercase: 'lowercase'\n};\n/**\n * Check if a given object implements the BrandStylingButtonFont interface.\n */\nexport function instanceOfBrandStylingButtonFont(value) {\n    return true;\n}\nexport function BrandStylingButtonFontFromJSON(json) {\n    return BrandStylingButtonFontFromJSONTyped(json, false);\n}\nexport function BrandStylingButtonFontFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'fontFamily': json['font_family'] == null ? undefined : json['font_family'],\n        'fontWeight': json['font_weight'] == null ? undefined : json['font_weight'],\n        'letterSpacing': json['letter_spacing'] == null ? undefined : json['letter_spacing'],\n        'textAlign': json['text_align'] == null ? undefined : json['text_align'],\n        'textTransform': json['text_transform'] == null ? undefined : json['text_transform'],\n    };\n}\nexport function BrandStylingButtonFontToJSON(json) {\n    return BrandStylingButtonFontToJSONTyped(json, false);\n}\nexport function BrandStylingButtonFontToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'font_family': value['fontFamily'],\n        'font_weight': value['fontWeight'],\n        'letter_spacing': value['letterSpacing'],\n        'text_align': value['textAlign'],\n        'text_transform': value['textTransform'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { BrandStylingButtonFontFromJSON, BrandStylingButtonFontToJSON, } from './BrandStylingButtonFont';\n/**\n * @export\n */\nexport const BrandStylingButtonShapeEnum = {\n    Square: 'square',\n    Rounded: 'rounded',\n    Pill: 'pill'\n};\n/**\n * @export\n */\nexport const BrandStylingButtonPaddingEnum = {\n    S: 's',\n    M: 'm',\n    L: 'l'\n};\n/**\n * Check if a given object implements the BrandStylingButton interface.\n */\nexport function instanceOfBrandStylingButton(value) {\n    return true;\n}\nexport function BrandStylingButtonFromJSON(json) {\n    return BrandStylingButtonFromJSONTyped(json, false);\n}\nexport function BrandStylingButtonFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'shape': json['shape'] == null ? undefined : json['shape'],\n        'padding': json['padding'] == null ? undefined : json['padding'],\n        'font': json['font'] == null ? undefined : BrandStylingButtonFontFromJSON(json['font']),\n    };\n}\nexport function BrandStylingButtonToJSON(json) {\n    return BrandStylingButtonToJSONTyped(json, false);\n}\nexport function BrandStylingButtonToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'shape': value['shape'],\n        'padding': value['padding'],\n        'font': BrandStylingButtonFontToJSON(value['font']),\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the BrandStylingButtonText interface.\n */\nexport function instanceOfBrandStylingButtonText(value) {\n    return true;\n}\nexport function BrandStylingButtonTextFromJSON(json) {\n    return BrandStylingButtonTextFromJSONTyped(json, false);\n}\nexport function BrandStylingButtonTextFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'addToBag': json['add_to_bag'] == null ? undefined : json['add_to_bag'],\n        'addedToBag': json['added_to_bag'] == null ? undefined : json['added_to_bag'],\n        'viewBag': json['view_bag'] == null ? undefined : json['view_bag'],\n    };\n}\nexport function BrandStylingButtonTextToJSON(json) {\n    return BrandStylingButtonTextToJSONTyped(json, false);\n}\nexport function BrandStylingButtonTextToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'add_to_bag': value['addToBag'],\n        'added_to_bag': value['addedToBag'],\n        'view_bag': value['viewBag'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { BrandStylingButtonFromJSON, BrandStylingButtonToJSON, } from './BrandStylingButton';\nimport { BrandStylingButtonTextFromJSON, BrandStylingButtonTextToJSON, } from './BrandStylingButtonText';\n/**\n * Check if a given object implements the BrandStylingButtons interface.\n */\nexport function instanceOfBrandStylingButtons(value) {\n    return true;\n}\nexport function BrandStylingButtonsFromJSON(json) {\n    return BrandStylingButtonsFromJSONTyped(json, false);\n}\nexport function BrandStylingButtonsFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'primary': json['primary'] == null ? undefined : BrandStylingButtonFromJSON(json['primary']),\n        'secondary': json['secondary'] == null ? undefined : BrandStylingButtonFromJSON(json['secondary']),\n        'buttonText': json['button_text'] == null ? undefined : BrandStylingButtonTextFromJSON(json['button_text']),\n    };\n}\nexport function BrandStylingButtonsToJSON(json) {\n    return BrandStylingButtonsToJSONTyped(json, false);\n}\nexport function BrandStylingButtonsToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'primary': BrandStylingButtonToJSON(value['primary']),\n        'secondary': BrandStylingButtonToJSON(value['secondary']),\n        'button_text': BrandStylingButtonTextToJSON(value['buttonText']),\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the PaletteColor interface.\n */\nexport function instanceOfPaletteColor(value) {\n    if (!('role' in value) || value['role'] === undefined)\n        return false;\n    if (!('hex' in value) || value['hex'] === undefined)\n        return false;\n    return true;\n}\nexport function PaletteColorFromJSON(json) {\n    return PaletteColorFromJSONTyped(json, false);\n}\nexport function PaletteColorFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'role': json['role'],\n        'hex': json['hex'],\n    };\n}\nexport function PaletteColorToJSON(json) {\n    return PaletteColorToJSONTyped(json, false);\n}\nexport function PaletteColorToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'role': value['role'],\n        'hex': value['hex'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the BrandStylingFontVariant interface.\n */\nexport function instanceOfBrandStylingFontVariant(value) {\n    return true;\n}\nexport function BrandStylingFontVariantFromJSON(json) {\n    return BrandStylingFontVariantFromJSONTyped(json, false);\n}\nexport function BrandStylingFontVariantFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'name': json['name'] == null ? undefined : json['name'],\n        'weight': json['weight'] == null ? undefined : json['weight'],\n        'bucketName': json['bucket_name'] == null ? undefined : json['bucket_name'],\n        'fileLocation': json['file_location'] == null ? undefined : json['file_location'],\n    };\n}\nexport function BrandStylingFontVariantToJSON(json) {\n    return BrandStylingFontVariantToJSONTyped(json, false);\n}\nexport function BrandStylingFontVariantToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'name': value['name'],\n        'weight': value['weight'],\n        'bucket_name': value['bucketName'],\n        'file_location': value['fileLocation'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { BrandStylingFontVariantFromJSON, BrandStylingFontVariantToJSON, } from './BrandStylingFontVariant';\n/**\n * Check if a given object implements the BrandStylingFontSlot interface.\n */\nexport function instanceOfBrandStylingFontSlot(value) {\n    return true;\n}\nexport function BrandStylingFontSlotFromJSON(json) {\n    return BrandStylingFontSlotFromJSONTyped(json, false);\n}\nexport function BrandStylingFontSlotFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'name': json['name'] == null ? undefined : json['name'],\n        'variants': json['variants'] == null ? undefined : (json['variants'].map(BrandStylingFontVariantFromJSON)),\n    };\n}\nexport function BrandStylingFontSlotToJSON(json) {\n    return BrandStylingFontSlotToJSONTyped(json, false);\n}\nexport function BrandStylingFontSlotToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'name': value['name'],\n        'variants': value['variants'] == null ? undefined : (value['variants'].map(BrandStylingFontVariantToJSON)),\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { mapValues } from '../runtime';\nimport { BrandTextStyleFromJSON, BrandTextStyleToJSON, } from './BrandTextStyle';\nimport { BrandStylingFontSlotFromJSON, BrandStylingFontSlotToJSON, } from './BrandStylingFontSlot';\n/**\n * Check if a given object implements the BrandStylingFonts interface.\n */\nexport function instanceOfBrandStylingFonts(value) {\n    return true;\n}\nexport function BrandStylingFontsFromJSON(json) {\n    return BrandStylingFontsFromJSONTyped(json, false);\n}\nexport function BrandStylingFontsFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'primary': json['primary'] == null ? undefined : BrandStylingFontSlotFromJSON(json['primary']),\n        'secondary': json['secondary'] == null ? undefined : BrandStylingFontSlotFromJSON(json['secondary']),\n        'customFont1': json['custom_font_1'] == null ? undefined : BrandStylingFontSlotFromJSON(json['custom_font_1']),\n        'customFont2': json['custom_font_2'] == null ? undefined : BrandStylingFontSlotFromJSON(json['custom_font_2']),\n        'customFont3': json['custom_font_3'] == null ? undefined : BrandStylingFontSlotFromJSON(json['custom_font_3']),\n        'textStyles': json['text_styles'] == null ? undefined : (mapValues(json['text_styles'], BrandTextStyleFromJSON)),\n    };\n}\nexport function BrandStylingFontsToJSON(json) {\n    return BrandStylingFontsToJSONTyped(json, false);\n}\nexport function BrandStylingFontsToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'primary': BrandStylingFontSlotToJSON(value['primary']),\n        'secondary': BrandStylingFontSlotToJSON(value['secondary']),\n        'custom_font_1': BrandStylingFontSlotToJSON(value['customFont1']),\n        'custom_font_2': BrandStylingFontSlotToJSON(value['customFont2']),\n        'custom_font_3': BrandStylingFontSlotToJSON(value['customFont3']),\n        'text_styles': value['textStyles'] == null ? undefined : (mapValues(value['textStyles'], BrandTextStyleToJSON)),\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the FontSpec interface.\n */\nexport function instanceOfFontSpec(value) {\n    if (!('family' in value) || value['family'] === undefined)\n        return false;\n    return true;\n}\nexport function FontSpecFromJSON(json) {\n    return FontSpecFromJSONTyped(json, false);\n}\nexport function FontSpecFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'family': json['family'],\n        'weight': json['weight'] == null ? undefined : json['weight'],\n    };\n}\nexport function FontSpecToJSON(json) {\n    return FontSpecToJSONTyped(json, false);\n}\nexport function FontSpecToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'family': value['family'],\n        'weight': value['weight'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { FontSpecFromJSON, FontSpecToJSON, } from './FontSpec';\n/**\n * Check if a given object implements the Typography interface.\n */\nexport function instanceOfTypography(value) {\n    return true;\n}\nexport function TypographyFromJSON(json) {\n    return TypographyFromJSONTyped(json, false);\n}\nexport function TypographyFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'headings': json['headings'] == null ? undefined : FontSpecFromJSON(json['headings']),\n        'body': json['body'] == null ? undefined : FontSpecFromJSON(json['body']),\n    };\n}\nexport function TypographyToJSON(json) {\n    return TypographyToJSONTyped(json, false);\n}\nexport function TypographyToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'headings': FontSpecToJSON(value['headings']),\n        'body': FontSpecToJSON(value['body']),\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { mapValues } from '../runtime';\nimport { BrandStylingColorsFromJSON, BrandStylingColorsToJSON, } from './BrandStylingColors';\nimport { BrandTextStyleFromJSON, BrandTextStyleToJSON, } from './BrandTextStyle';\nimport { BrandStylingButtonsFromJSON, BrandStylingButtonsToJSON, } from './BrandStylingButtons';\nimport { PaletteColorFromJSON, PaletteColorToJSON, } from './PaletteColor';\nimport { BrandStylingFontsFromJSON, BrandStylingFontsToJSON, } from './BrandStylingFonts';\nimport { TypographyFromJSON, TypographyToJSON, } from './Typography';\n/**\n * @export\n */\nexport const BrandStylingArtifactStatusEnum = {\n    Unknown: 'unknown',\n    Missing: 'missing',\n    Draft: 'draft',\n    Committed: 'committed',\n    Failed: 'failed'\n};\n/**\n * Check if a given object implements the BrandStylingArtifact interface.\n */\nexport function instanceOfBrandStylingArtifact(value) {\n    return true;\n}\nexport function BrandStylingArtifactFromJSON(json) {\n    return BrandStylingArtifactFromJSONTyped(json, false);\n}\nexport function BrandStylingArtifactFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'status': json['status'] == null ? undefined : json['status'],\n        'palette': json['palette'] == null ? undefined : (json['palette'].map(PaletteColorFromJSON)),\n        'typography': json['typography'] == null ? undefined : TypographyFromJSON(json['typography']),\n        'colors': json['colors'] == null ? undefined : BrandStylingColorsFromJSON(json['colors']),\n        'fonts': json['fonts'] == null ? undefined : BrandStylingFontsFromJSON(json['fonts']),\n        'textStyles': json['text_styles'] == null ? undefined : (mapValues(json['text_styles'], BrandTextStyleFromJSON)),\n        'buttons': json['buttons'] == null ? undefined : BrandStylingButtonsFromJSON(json['buttons']),\n        'logo': json['logo'] == null ? undefined : json['logo'],\n        'raw': json['raw'] == null ? undefined : json['raw'],\n        'missingFields': json['missing_fields'] == null ? undefined : json['missing_fields'],\n        'warnings': json['warnings'] == null ? undefined : json['warnings'],\n        'canConfirm': json['can_confirm'] == null ? undefined : json['can_confirm'],\n        'statusReason': json['status_reason'] == null ? undefined : json['status_reason'],\n    };\n}\nexport function BrandStylingArtifactToJSON(json) {\n    return BrandStylingArtifactToJSONTyped(json, false);\n}\nexport function BrandStylingArtifactToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'status': value['status'],\n        'palette': value['palette'] == null ? undefined : (value['palette'].map(PaletteColorToJSON)),\n        'typography': TypographyToJSON(value['typography']),\n        'colors': BrandStylingColorsToJSON(value['colors']),\n        'fonts': BrandStylingFontsToJSON(value['fonts']),\n        'text_styles': value['textStyles'] == null ? undefined : (mapValues(value['textStyles'], BrandTextStyleToJSON)),\n        'buttons': BrandStylingButtonsToJSON(value['buttons']),\n        'logo': value['logo'],\n        'raw': value['raw'],\n        'missing_fields': value['missingFields'],\n        'warnings': value['warnings'],\n        'can_confirm': value['canConfirm'],\n        'status_reason': value['statusReason'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the AisProvisioningCompetitor interface.\n */\nexport function instanceOfAisProvisioningCompetitor(value) {\n    if (!('name' in value) || value['name'] === undefined)\n        return false;\n    return true;\n}\nexport function AisProvisioningCompetitorFromJSON(json) {\n    return AisProvisioningCompetitorFromJSONTyped(json, false);\n}\nexport function AisProvisioningCompetitorFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'draftId': json['draft_id'] == null ? undefined : json['draft_id'],\n        'competitorId': json['competitor_id'] == null ? undefined : json['competitor_id'],\n        'name': json['name'],\n        'domain': json['domain'] == null ? undefined : json['domain'],\n        'domains': json['domains'] == null ? undefined : json['domains'],\n        'aliases': json['aliases'] == null ? undefined : json['aliases'],\n    };\n}\nexport function AisProvisioningCompetitorToJSON(json) {\n    return AisProvisioningCompetitorToJSONTyped(json, false);\n}\nexport function AisProvisioningCompetitorToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'draft_id': value['draftId'],\n        'competitor_id': value['competitorId'],\n        'name': value['name'],\n        'domain': value['domain'],\n        'domains': value['domains'],\n        'aliases': value['aliases'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the AisProvisioningTotals interface.\n */\nexport function instanceOfAisProvisioningTotals(value) {\n    return true;\n}\nexport function AisProvisioningTotalsFromJSON(json) {\n    return AisProvisioningTotalsFromJSONTyped(json, false);\n}\nexport function AisProvisioningTotalsFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'prompts': json['prompts'] == null ? undefined : json['prompts'],\n        'enabledPrompts': json['enabled_prompts'] == null ? undefined : json['enabled_prompts'],\n        'competitors': json['competitors'] == null ? undefined : json['competitors'],\n    };\n}\nexport function AisProvisioningTotalsToJSON(json) {\n    return AisProvisioningTotalsToJSONTyped(json, false);\n}\nexport function AisProvisioningTotalsToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'prompts': value['prompts'],\n        'enabled_prompts': value['enabledPrompts'],\n        'competitors': value['competitors'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the AisProvisioningPrompt interface.\n */\nexport function instanceOfAisProvisioningPrompt(value) {\n    if (!('text' in value) || value['text'] === undefined)\n        return false;\n    return true;\n}\nexport function AisProvisioningPromptFromJSON(json) {\n    return AisProvisioningPromptFromJSONTyped(json, false);\n}\nexport function AisProvisioningPromptFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'draftId': json['draft_id'] == null ? undefined : json['draft_id'],\n        'promptId': json['prompt_id'] == null ? undefined : json['prompt_id'],\n        'text': json['text'],\n        'enabled': json['enabled'] == null ? undefined : json['enabled'],\n    };\n}\nexport function AisProvisioningPromptToJSON(json) {\n    return AisProvisioningPromptToJSONTyped(json, false);\n}\nexport function AisProvisioningPromptToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'draft_id': value['draftId'],\n        'prompt_id': value['promptId'],\n        'text': value['text'],\n        'enabled': value['enabled'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the AisProvisioningPromptCategory interface.\n */\nexport function instanceOfAisProvisioningPromptCategory(value) {\n    if (!('label' in value) || value['label'] === undefined)\n        return false;\n    if (!('count' in value) || value['count'] === undefined)\n        return false;\n    return true;\n}\nexport function AisProvisioningPromptCategoryFromJSON(json) {\n    return AisProvisioningPromptCategoryFromJSONTyped(json, false);\n}\nexport function AisProvisioningPromptCategoryFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'label': json['label'],\n        'count': json['count'],\n    };\n}\nexport function AisProvisioningPromptCategoryToJSON(json) {\n    return AisProvisioningPromptCategoryToJSONTyped(json, false);\n}\nexport function AisProvisioningPromptCategoryToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'label': value['label'],\n        'count': value['count'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { AisProvisioningCompetitorFromJSON, AisProvisioningCompetitorToJSON, } from './AisProvisioningCompetitor';\nimport { AisProvisioningTotalsFromJSON, AisProvisioningTotalsToJSON, } from './AisProvisioningTotals';\nimport { AisProvisioningPromptFromJSON, AisProvisioningPromptToJSON, } from './AisProvisioningPrompt';\nimport { AisProvisioningPromptCategoryFromJSON, AisProvisioningPromptCategoryToJSON, } from './AisProvisioningPromptCategory';\n/**\n * @export\n */\nexport const AisProvisioningArtifactStatusEnum = {\n    Unknown: 'unknown',\n    Missing: 'missing',\n    Draft: 'draft',\n    Committed: 'committed',\n    Failed: 'failed'\n};\n/**\n * Check if a given object implements the AisProvisioningArtifact interface.\n */\nexport function instanceOfAisProvisioningArtifact(value) {\n    return true;\n}\nexport function AisProvisioningArtifactFromJSON(json) {\n    return AisProvisioningArtifactFromJSONTyped(json, false);\n}\nexport function AisProvisioningArtifactFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'status': json['status'] == null ? undefined : json['status'],\n        'elmoBrandId': json['elmo_brand_id'] == null ? undefined : json['elmo_brand_id'],\n        'elmoBrandName': json['elmo_brand_name'] == null ? undefined : json['elmo_brand_name'],\n        'domains': json['domains'] == null ? undefined : json['domains'],\n        'aliases': json['aliases'] == null ? undefined : json['aliases'],\n        'enabled': json['enabled'] == null ? undefined : json['enabled'],\n        'onboarded': json['onboarded'] == null ? undefined : json['onboarded'],\n        'prompts': json['prompts'] == null ? undefined : (json['prompts'].map(AisProvisioningPromptFromJSON)),\n        'competitors': json['competitors'] == null ? undefined : (json['competitors'].map(AisProvisioningCompetitorFromJSON)),\n        'promptCategories': json['prompt_categories'] == null ? undefined : (json['prompt_categories'].map(AisProvisioningPromptCategoryFromJSON)),\n        'totals': json['totals'] == null ? undefined : AisProvisioningTotalsFromJSON(json['totals']),\n        'statusReason': json['status_reason'] == null ? undefined : json['status_reason'],\n    };\n}\nexport function AisProvisioningArtifactToJSON(json) {\n    return AisProvisioningArtifactToJSONTyped(json, false);\n}\nexport function AisProvisioningArtifactToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'status': value['status'],\n        'elmo_brand_id': value['elmoBrandId'],\n        'elmo_brand_name': value['elmoBrandName'],\n        'domains': value['domains'],\n        'aliases': value['aliases'],\n        'enabled': value['enabled'],\n        'onboarded': value['onboarded'],\n        'prompts': value['prompts'] == null ? undefined : (value['prompts'].map(AisProvisioningPromptToJSON)),\n        'competitors': value['competitors'] == null ? undefined : (value['competitors'].map(AisProvisioningCompetitorToJSON)),\n        'prompt_categories': value['promptCategories'] == null ? undefined : (value['promptCategories'].map(AisProvisioningPromptCategoryToJSON)),\n        'totals': AisProvisioningTotalsToJSON(value['totals']),\n        'status_reason': value['statusReason'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the WebsiteSnapshotCard interface.\n */\nexport function instanceOfWebsiteSnapshotCard(value) {\n    return true;\n}\nexport function WebsiteSnapshotCardFromJSON(json) {\n    return WebsiteSnapshotCardFromJSONTyped(json, false);\n}\nexport function WebsiteSnapshotCardFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'detectedCategory': json['detected_category'] == null ? undefined : json['detected_category'],\n        'descriptors': json['descriptors'] == null ? undefined : json['descriptors'],\n        'summary': json['summary'] == null ? undefined : json['summary'],\n    };\n}\nexport function WebsiteSnapshotCardToJSON(json) {\n    return WebsiteSnapshotCardToJSONTyped(json, false);\n}\nexport function WebsiteSnapshotCardToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'detected_category': value['detectedCategory'],\n        'descriptors': value['descriptors'],\n        'summary': value['summary'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { WebsiteSnapshotCardFromJSON, WebsiteSnapshotCardToJSON, } from './WebsiteSnapshotCard';\n/**\n * @export\n */\nexport const IdentityArtifactStatusEnum = {\n    Unknown: 'unknown',\n    Missing: 'missing',\n    Draft: 'draft',\n    Confirmed: 'confirmed'\n};\n/**\n * Check if a given object implements the IdentityArtifact interface.\n */\nexport function instanceOfIdentityArtifact(value) {\n    return true;\n}\nexport function IdentityArtifactFromJSON(json) {\n    return IdentityArtifactFromJSONTyped(json, false);\n}\nexport function IdentityArtifactFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'status': json['status'] == null ? undefined : json['status'],\n        'brandName': json['brand_name'] == null ? undefined : json['brand_name'],\n        'website': json['website'] == null ? undefined : json['website'],\n        'description': json['description'] == null ? undefined : json['description'],\n        'pierreBrandVoice': json['pierre_brand_voice'] == null ? undefined : json['pierre_brand_voice'],\n        'pierreExtraContext': json['pierre_extra_context'] == null ? undefined : json['pierre_extra_context'],\n        'websiteSnapshotCard': json['website_snapshot_card'] == null ? undefined : WebsiteSnapshotCardFromJSON(json['website_snapshot_card']),\n        'sourceUrls': json['source_urls'] == null ? undefined : json['source_urls'],\n        'confirmed': json['confirmed'] == null ? undefined : json['confirmed'],\n        'statusReason': json['status_reason'] == null ? undefined : json['status_reason'],\n    };\n}\nexport function IdentityArtifactToJSON(json) {\n    return IdentityArtifactToJSONTyped(json, false);\n}\nexport function IdentityArtifactToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'status': value['status'],\n        'brand_name': value['brandName'],\n        'website': value['website'],\n        'description': value['description'],\n        'pierre_brand_voice': value['pierreBrandVoice'],\n        'pierre_extra_context': value['pierreExtraContext'],\n        'website_snapshot_card': WebsiteSnapshotCardToJSON(value['websiteSnapshotCard']),\n        'source_urls': value['sourceUrls'],\n        'confirmed': value['confirmed'],\n        'status_reason': value['statusReason'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * @export\n */\nexport const KnowledgeBaseDocumentStatusEnum = {\n    Uploaded: 'uploaded',\n    Processing: 'processing',\n    Ready: 'ready',\n    Failed: 'failed',\n    Unknown: 'unknown'\n};\n/**\n * Check if a given object implements the KnowledgeBaseDocument interface.\n */\nexport function instanceOfKnowledgeBaseDocument(value) {\n    if (!('documentId' in value) || value['documentId'] === undefined)\n        return false;\n    if (!('name' in value) || value['name'] === undefined)\n        return false;\n    return true;\n}\nexport function KnowledgeBaseDocumentFromJSON(json) {\n    return KnowledgeBaseDocumentFromJSONTyped(json, false);\n}\nexport function KnowledgeBaseDocumentFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'documentId': json['document_id'],\n        'name': json['name'],\n        'status': json['status'] == null ? undefined : json['status'],\n        'sizeBytes': json['size_bytes'] == null ? undefined : json['size_bytes'],\n    };\n}\nexport function KnowledgeBaseDocumentToJSON(json) {\n    return KnowledgeBaseDocumentToJSONTyped(json, false);\n}\nexport function KnowledgeBaseDocumentToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'document_id': value['documentId'],\n        'name': value['name'],\n        'status': value['status'],\n        'size_bytes': value['sizeBytes'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { KnowledgeBaseDocumentFromJSON, KnowledgeBaseDocumentToJSON, } from './KnowledgeBaseDocument';\n/**\n * @export\n */\nexport const KnowledgeBaseArtifactStatusEnum = {\n    Unknown: 'unknown',\n    Missing: 'missing',\n    Processing: 'processing',\n    Ready: 'ready',\n    Skipped: 'skipped',\n    Failed: 'failed'\n};\n/**\n * Check if a given object implements the KnowledgeBaseArtifact interface.\n */\nexport function instanceOfKnowledgeBaseArtifact(value) {\n    return true;\n}\nexport function KnowledgeBaseArtifactFromJSON(json) {\n    return KnowledgeBaseArtifactFromJSONTyped(json, false);\n}\nexport function KnowledgeBaseArtifactFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'status': json['status'] == null ? undefined : json['status'],\n        'documents': json['documents'] == null ? undefined : (json['documents'].map(KnowledgeBaseDocumentFromJSON)),\n        'skipped': json['skipped'] == null ? undefined : json['skipped'],\n        'statusReason': json['status_reason'] == null ? undefined : json['status_reason'],\n    };\n}\nexport function KnowledgeBaseArtifactToJSON(json) {\n    return KnowledgeBaseArtifactToJSONTyped(json, false);\n}\nexport function KnowledgeBaseArtifactToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'status': value['status'],\n        'documents': value['documents'] == null ? undefined : (value['documents'].map(KnowledgeBaseDocumentToJSON)),\n        'skipped': value['skipped'],\n        'status_reason': value['statusReason'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the VoiceAudience interface.\n */\nexport function instanceOfVoiceAudience(value) {\n    if (!('label' in value) || value['label'] === undefined)\n        return false;\n    return true;\n}\nexport function VoiceAudienceFromJSON(json) {\n    return VoiceAudienceFromJSONTyped(json, false);\n}\nexport function VoiceAudienceFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'label': json['label'],\n        'weightPercent': json['weight_percent'] == null ? undefined : json['weight_percent'],\n    };\n}\nexport function VoiceAudienceToJSON(json) {\n    return VoiceAudienceToJSONTyped(json, false);\n}\nexport function VoiceAudienceToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'label': value['label'],\n        'weight_percent': value['weightPercent'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { VoiceAudienceFromJSON, VoiceAudienceToJSON, } from './VoiceAudience';\n/**\n * Check if a given object implements the VoiceCard interface.\n */\nexport function instanceOfVoiceCard(value) {\n    return true;\n}\nexport function VoiceCardFromJSON(json) {\n    return VoiceCardFromJSONTyped(json, false);\n}\nexport function VoiceCardFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'rules': json['rules'] == null ? undefined : json['rules'],\n        'toneTags': json['tone_tags'] == null ? undefined : json['tone_tags'],\n        'audiences': json['audiences'] == null ? undefined : (json['audiences'].map(VoiceAudienceFromJSON)),\n    };\n}\nexport function VoiceCardToJSON(json) {\n    return VoiceCardToJSONTyped(json, false);\n}\nexport function VoiceCardToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'rules': value['rules'],\n        'tone_tags': value['toneTags'],\n        'audiences': value['audiences'] == null ? undefined : (value['audiences'].map(VoiceAudienceToJSON)),\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { VoiceCardFromJSON, VoiceCardToJSON, } from './VoiceCard';\n/**\n * @export\n */\nexport const BrandVoiceArtifactStatusEnum = {\n    Unknown: 'unknown',\n    Missing: 'missing',\n    Draft: 'draft',\n    Committed: 'committed',\n    Failed: 'failed'\n};\n/**\n * Check if a given object implements the BrandVoiceArtifact interface.\n */\nexport function instanceOfBrandVoiceArtifact(value) {\n    return true;\n}\nexport function BrandVoiceArtifactFromJSON(json) {\n    return BrandVoiceArtifactFromJSONTyped(json, false);\n}\nexport function BrandVoiceArtifactFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'status': json['status'] == null ? undefined : json['status'],\n        'sampleVoice': json['sample_voice'] == null ? undefined : json['sample_voice'],\n        'extraContext': json['extra_context'] == null ? undefined : json['extra_context'],\n        'voiceCard': json['voice_card'] == null ? undefined : VoiceCardFromJSON(json['voice_card']),\n        'statusReason': json['status_reason'] == null ? undefined : json['status_reason'],\n    };\n}\nexport function BrandVoiceArtifactToJSON(json) {\n    return BrandVoiceArtifactToJSONTyped(json, false);\n}\nexport function BrandVoiceArtifactToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'status': value['status'],\n        'sample_voice': value['sampleVoice'],\n        'extra_context': value['extraContext'],\n        'voice_card': VoiceCardToJSON(value['voiceCard']),\n        'status_reason': value['statusReason'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * @export\n */\nexport const ProductCatalogArtifactStatusEnum = {\n    Unknown: 'unknown',\n    Missing: 'missing',\n    Syncing: 'syncing',\n    Ready: 'ready',\n    Failed: 'failed'\n};\n/**\n * Check if a given object implements the ProductCatalogArtifact interface.\n */\nexport function instanceOfProductCatalogArtifact(value) {\n    return true;\n}\nexport function ProductCatalogArtifactFromJSON(json) {\n    return ProductCatalogArtifactFromJSONTyped(json, false);\n}\nexport function ProductCatalogArtifactFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'status': json['status'] == null ? undefined : json['status'],\n        'productsCount': json['products_count'] == null ? undefined : json['products_count'],\n        'variantsCount': json['variants_count'] == null ? undefined : json['variants_count'],\n        'syncStatus': json['sync_status'] == null ? undefined : json['sync_status'],\n        'statusReason': json['status_reason'] == null ? undefined : json['status_reason'],\n    };\n}\nexport function ProductCatalogArtifactToJSON(json) {\n    return ProductCatalogArtifactToJSONTyped(json, false);\n}\nexport function ProductCatalogArtifactToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'status': value['status'],\n        'products_count': value['productsCount'],\n        'variants_count': value['variantsCount'],\n        'sync_status': value['syncStatus'],\n        'status_reason': value['statusReason'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * @export\n */\nexport const ProductSyncArtifactStatusEnum = {\n    Unknown: 'unknown',\n    NotStarted: 'not_started',\n    Syncing: 'syncing',\n    Ready: 'ready',\n    Failed: 'failed'\n};\n/**\n * @export\n */\nexport const ProductSyncArtifactPreferenceEnum = {\n    Wait: 'wait',\n    SkipForNow: 'skip_for_now'\n};\n/**\n * Check if a given object implements the ProductSyncArtifact interface.\n */\nexport function instanceOfProductSyncArtifact(value) {\n    return true;\n}\nexport function ProductSyncArtifactFromJSON(json) {\n    return ProductSyncArtifactFromJSONTyped(json, false);\n}\nexport function ProductSyncArtifactFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'status': json['status'] == null ? undefined : json['status'],\n        'preference': json['preference'] == null ? undefined : json['preference'],\n        'workflowId': json['workflow_id'] == null ? undefined : json['workflow_id'],\n        'statusReason': json['status_reason'] == null ? undefined : json['status_reason'],\n    };\n}\nexport function ProductSyncArtifactToJSON(json) {\n    return ProductSyncArtifactToJSONTyped(json, false);\n}\nexport function ProductSyncArtifactToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'status': value['status'],\n        'preference': value['preference'],\n        'workflow_id': value['workflowId'],\n        'status_reason': value['statusReason'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * @export\n */\nexport const AiscSourceContextArtifactStatusEnum = {\n    Unknown: 'unknown',\n    Missing: 'missing',\n    Available: 'available'\n};\n/**\n * @export\n */\nexport const AiscSourceContextArtifactSourcesEnum = {\n    Kb: 'kb',\n    WebsiteJitWeb: 'website_jit_web'\n};\n/**\n * Check if a given object implements the AiscSourceContextArtifact interface.\n */\nexport function instanceOfAiscSourceContextArtifact(value) {\n    return true;\n}\nexport function AiscSourceContextArtifactFromJSON(json) {\n    return AiscSourceContextArtifactFromJSONTyped(json, false);\n}\nexport function AiscSourceContextArtifactFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'status': json['status'] == null ? undefined : json['status'],\n        'sources': json['sources'] == null ? undefined : json['sources'],\n        'note': json['note'] == null ? undefined : json['note'],\n        'statusReason': json['status_reason'] == null ? undefined : json['status_reason'],\n    };\n}\nexport function AiscSourceContextArtifactToJSON(json) {\n    return AiscSourceContextArtifactToJSONTyped(json, false);\n}\nexport function AiscSourceContextArtifactToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'status': value['status'],\n        'sources': value['sources'],\n        'note': value['note'],\n        'status_reason': value['statusReason'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * @export\n */\nexport const AisFunnelGenerationArtifactStatusEnum = {\n    Unknown: 'unknown',\n    NotStarted: 'not_started',\n    Queued: 'queued',\n    Running: 'running',\n    Partial: 'partial',\n    Completed: 'completed',\n    Failed: 'failed'\n};\n/**\n * @export\n */\nexport const AisFunnelGenerationArtifactModeEnum = {\n    StandardAis: 'standard_ais',\n    AiscJit: 'aisc_jit'\n};\n/**\n * Check if a given object implements the AisFunnelGenerationArtifact interface.\n */\nexport function instanceOfAisFunnelGenerationArtifact(value) {\n    return true;\n}\nexport function AisFunnelGenerationArtifactFromJSON(json) {\n    return AisFunnelGenerationArtifactFromJSONTyped(json, false);\n}\nexport function AisFunnelGenerationArtifactFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'status': json['status'] == null ? undefined : json['status'],\n        'mode': json['mode'] == null ? undefined : json['mode'],\n        'workflowId': json['workflow_id'] == null ? undefined : json['workflow_id'],\n        'requestedCount': json['requested_count'] == null ? undefined : json['requested_count'],\n        'createdCount': json['created_count'] == null ? undefined : json['created_count'],\n        'failedCount': json['failed_count'] == null ? undefined : json['failed_count'],\n        'reviewUrl': json['review_url'] == null ? undefined : json['review_url'],\n        'statusReason': json['status_reason'] == null ? undefined : json['status_reason'],\n    };\n}\nexport function AisFunnelGenerationArtifactToJSON(json) {\n    return AisFunnelGenerationArtifactToJSONTyped(json, false);\n}\nexport function AisFunnelGenerationArtifactToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'status': value['status'],\n        'mode': value['mode'],\n        'workflow_id': value['workflowId'],\n        'requested_count': value['requestedCount'],\n        'created_count': value['createdCount'],\n        'failed_count': value['failedCount'],\n        'review_url': value['reviewUrl'],\n        'status_reason': value['statusReason'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * @export\n */\nexport const EcommerceArtifactStatusEnum = {\n    Unknown: 'unknown',\n    Missing: 'missing',\n    NativeConnected: 'native_connected',\n    CustomIntent: 'custom_intent',\n    Skipped: 'skipped',\n    Failed: 'failed'\n};\n/**\n * @export\n */\nexport const EcommerceArtifactIntentEnum = {\n    Native: 'native',\n    Custom: 'custom',\n    Skip: 'skip'\n};\n/**\n * Check if a given object implements the EcommerceArtifact interface.\n */\nexport function instanceOfEcommerceArtifact(value) {\n    return true;\n}\nexport function EcommerceArtifactFromJSON(json) {\n    return EcommerceArtifactFromJSONTyped(json, false);\n}\nexport function EcommerceArtifactFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'status': json['status'] == null ? undefined : json['status'],\n        'platform': json['platform'] == null ? undefined : json['platform'],\n        'accountId': json['account_id'] == null ? undefined : json['account_id'],\n        'intent': json['intent'] == null ? undefined : json['intent'],\n        'statusReason': json['status_reason'] == null ? undefined : json['status_reason'],\n    };\n}\nexport function EcommerceArtifactToJSON(json) {\n    return EcommerceArtifactToJSONTyped(json, false);\n}\nexport function EcommerceArtifactToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'status': value['status'],\n        'platform': value['platform'],\n        'account_id': value['accountId'],\n        'intent': value['intent'],\n        'status_reason': value['statusReason'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { BrandStylingArtifactFromJSON, BrandStylingArtifactToJSON, } from './BrandStylingArtifact';\nimport { AisProvisioningArtifactFromJSON, AisProvisioningArtifactToJSON, } from './AisProvisioningArtifact';\nimport { IdentityArtifactFromJSON, IdentityArtifactToJSON, } from './IdentityArtifact';\nimport { KnowledgeBaseArtifactFromJSON, KnowledgeBaseArtifactToJSON, } from './KnowledgeBaseArtifact';\nimport { BrandVoiceArtifactFromJSON, BrandVoiceArtifactToJSON, } from './BrandVoiceArtifact';\nimport { ProductCatalogArtifactFromJSON, ProductCatalogArtifactToJSON, } from './ProductCatalogArtifact';\nimport { ProductSyncArtifactFromJSON, ProductSyncArtifactToJSON, } from './ProductSyncArtifact';\nimport { AiscSourceContextArtifactFromJSON, AiscSourceContextArtifactToJSON, } from './AiscSourceContextArtifact';\nimport { AisFunnelGenerationArtifactFromJSON, AisFunnelGenerationArtifactToJSON, } from './AisFunnelGenerationArtifact';\nimport { EcommerceArtifactFromJSON, EcommerceArtifactToJSON, } from './EcommerceArtifact';\n/**\n * Check if a given object implements the OnboardingArtifacts interface.\n */\nexport function instanceOfOnboardingArtifacts(value) {\n    return true;\n}\nexport function OnboardingArtifactsFromJSON(json) {\n    return OnboardingArtifactsFromJSONTyped(json, false);\n}\nexport function OnboardingArtifactsFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'identity': json['identity'] == null ? undefined : IdentityArtifactFromJSON(json['identity']),\n        'brandVoice': json['brand_voice'] == null ? undefined : BrandVoiceArtifactFromJSON(json['brand_voice']),\n        'brandStyling': json['brand_styling'] == null ? undefined : BrandStylingArtifactFromJSON(json['brand_styling']),\n        'aisProvisioning': json['ais_provisioning'] == null ? undefined : AisProvisioningArtifactFromJSON(json['ais_provisioning']),\n        'knowledgeBase': json['knowledge_base'] == null ? undefined : KnowledgeBaseArtifactFromJSON(json['knowledge_base']),\n        'ecommerce': json['ecommerce'] == null ? undefined : EcommerceArtifactFromJSON(json['ecommerce']),\n        'productCatalog': json['product_catalog'] == null ? undefined : ProductCatalogArtifactFromJSON(json['product_catalog']),\n        'aiscSourceContext': json['aisc_source_context'] == null ? undefined : AiscSourceContextArtifactFromJSON(json['aisc_source_context']),\n        'productSync': json['product_sync'] == null ? undefined : ProductSyncArtifactFromJSON(json['product_sync']),\n        'aisFunnelGeneration': json['ais_funnel_generation'] == null ? undefined : AisFunnelGenerationArtifactFromJSON(json['ais_funnel_generation']),\n    };\n}\nexport function OnboardingArtifactsToJSON(json) {\n    return OnboardingArtifactsToJSONTyped(json, false);\n}\nexport function OnboardingArtifactsToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'identity': IdentityArtifactToJSON(value['identity']),\n        'brand_voice': BrandVoiceArtifactToJSON(value['brandVoice']),\n        'brand_styling': BrandStylingArtifactToJSON(value['brandStyling']),\n        'ais_provisioning': AisProvisioningArtifactToJSON(value['aisProvisioning']),\n        'knowledge_base': KnowledgeBaseArtifactToJSON(value['knowledgeBase']),\n        'ecommerce': EcommerceArtifactToJSON(value['ecommerce']),\n        'product_catalog': ProductCatalogArtifactToJSON(value['productCatalog']),\n        'aisc_source_context': AiscSourceContextArtifactToJSON(value['aiscSourceContext']),\n        'product_sync': ProductSyncArtifactToJSON(value['productSync']),\n        'ais_funnel_generation': AisFunnelGenerationArtifactToJSON(value['aisFunnelGeneration']),\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the SuggestedAction interface.\n */\nexport function instanceOfSuggestedAction(value) {\n    if (!('label' in value) || value['label'] === undefined)\n        return false;\n    return true;\n}\nexport function SuggestedActionFromJSON(json) {\n    return SuggestedActionFromJSONTyped(json, false);\n}\nexport function SuggestedActionFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'label': json['label'],\n        'tool': json['tool'] == null ? undefined : json['tool'],\n        'query': json['query'] == null ? undefined : json['query'],\n        'url': json['url'] == null ? undefined : json['url'],\n        'reason': json['reason'] == null ? undefined : json['reason'],\n    };\n}\nexport function SuggestedActionToJSON(json) {\n    return SuggestedActionToJSONTyped(json, false);\n}\nexport function SuggestedActionToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'label': value['label'],\n        'tool': value['tool'],\n        'query': value['query'],\n        'url': value['url'],\n        'reason': value['reason'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * @export\n */\nexport const MissingRequirementArtifactEnum = {\n    Identity: 'identity',\n    BrandVoice: 'brand_voice',\n    BrandStyling: 'brand_styling',\n    AisProvisioning: 'ais_provisioning',\n    KnowledgeBase: 'knowledge_base',\n    Ecommerce: 'ecommerce',\n    ProductCatalog: 'product_catalog',\n    AiscSourceContext: 'aisc_source_context',\n    ProductSync: 'product_sync',\n    AisFunnelGeneration: 'ais_funnel_generation'\n};\n/**\n * Check if a given object implements the MissingRequirement interface.\n */\nexport function instanceOfMissingRequirement(value) {\n    if (!('requirement' in value) || value['requirement'] === undefined)\n        return false;\n    if (!('artifact' in value) || value['artifact'] === undefined)\n        return false;\n    if (!('currentStatus' in value) || value['currentStatus'] === undefined)\n        return false;\n    if (!('reason' in value) || value['reason'] === undefined)\n        return false;\n    return true;\n}\nexport function MissingRequirementFromJSON(json) {\n    return MissingRequirementFromJSONTyped(json, false);\n}\nexport function MissingRequirementFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'requirement': json['requirement'],\n        'artifact': json['artifact'],\n        'currentStatus': json['current_status'],\n        'reason': json['reason'],\n        'resolutionTools': json['resolution_tools'] == null ? undefined : json['resolution_tools'],\n        'preferredTool': json['preferred_tool'] == null ? undefined : json['preferred_tool'],\n        'userQuestion': json['user_question'] == null ? undefined : json['user_question'],\n    };\n}\nexport function MissingRequirementToJSON(json) {\n    return MissingRequirementToJSONTyped(json, false);\n}\nexport function MissingRequirementToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'requirement': value['requirement'],\n        'artifact': value['artifact'],\n        'current_status': value['currentStatus'],\n        'reason': value['reason'],\n        'resolution_tools': value['resolutionTools'],\n        'preferred_tool': value['preferredTool'],\n        'user_question': value['userQuestion'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the SuggestedPlanStep interface.\n */\nexport function instanceOfSuggestedPlanStep(value) {\n    if (!('tool' in value) || value['tool'] === undefined)\n        return false;\n    if (!('reason' in value) || value['reason'] === undefined)\n        return false;\n    return true;\n}\nexport function SuggestedPlanStepFromJSON(json) {\n    return SuggestedPlanStepFromJSONTyped(json, false);\n}\nexport function SuggestedPlanStepFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'tool': json['tool'],\n        'reason': json['reason'],\n    };\n}\nexport function SuggestedPlanStepToJSON(json) {\n    return SuggestedPlanStepToJSONTyped(json, false);\n}\nexport function SuggestedPlanStepToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'tool': value['tool'],\n        'reason': value['reason'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { MissingRequirementFromJSON, MissingRequirementToJSON, } from './MissingRequirement';\nimport { SuggestedPlanStepFromJSON, SuggestedPlanStepToJSON, } from './SuggestedPlanStep';\n/**\n * @export\n */\nexport const ToolAvailabilityStatusEnum = {\n    Available: 'available',\n    Blocked: 'blocked',\n    Satisfied: 'satisfied'\n};\n/**\n * Check if a given object implements the ToolAvailability interface.\n */\nexport function instanceOfToolAvailability(value) {\n    if (!('status' in value) || value['status'] === undefined)\n        return false;\n    return true;\n}\nexport function ToolAvailabilityFromJSON(json) {\n    return ToolAvailabilityFromJSONTyped(json, false);\n}\nexport function ToolAvailabilityFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'status': json['status'],\n        'available': json['available'] == null ? undefined : json['available'],\n        'reason': json['reason'] == null ? undefined : json['reason'],\n        'missing': json['missing'] == null ? undefined : (json['missing'].map(MissingRequirementFromJSON)),\n        'suggestedPlan': json['suggested_plan'] == null ? undefined : (json['suggested_plan'].map(SuggestedPlanStepFromJSON)),\n    };\n}\nexport function ToolAvailabilityToJSON(json) {\n    return ToolAvailabilityToJSONTyped(json, false);\n}\nexport function ToolAvailabilityToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'status': value['status'],\n        'available': value['available'],\n        'reason': value['reason'],\n        'missing': value['missing'] == null ? undefined : (value['missing'].map(MissingRequirementToJSON)),\n        'suggested_plan': value['suggestedPlan'] == null ? undefined : (value['suggestedPlan'].map(SuggestedPlanStepToJSON)),\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { mapValues } from '../runtime';\nimport { OnboardingArtifactsFromJSON, OnboardingArtifactsToJSON, } from './OnboardingArtifacts';\nimport { SuggestedActionFromJSON, SuggestedActionToJSON, } from './SuggestedAction';\nimport { ToolAvailabilityFromJSON, ToolAvailabilityToJSON, } from './ToolAvailability';\n/**\n * Check if a given object implements the OnboardingReadModel interface.\n */\nexport function instanceOfOnboardingReadModel(value) {\n    if (!('orgId' in value) || value['orgId'] === undefined)\n        return false;\n    return true;\n}\nexport function OnboardingReadModelFromJSON(json) {\n    return OnboardingReadModelFromJSONTyped(json, false);\n}\nexport function OnboardingReadModelFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'orgId': json['org_id'],\n        'conversationId': json['conversation_id'] == null ? undefined : json['conversation_id'],\n        'artifacts': json['artifacts'] == null ? undefined : OnboardingArtifactsFromJSON(json['artifacts']),\n        'nextActions': json['next_actions'] == null ? undefined : (json['next_actions'].map(SuggestedActionFromJSON)),\n        'toolAvailability': json['tool_availability'] == null ? undefined : (mapValues(json['tool_availability'], ToolAvailabilityFromJSON)),\n    };\n}\nexport function OnboardingReadModelToJSON(json) {\n    return OnboardingReadModelToJSONTyped(json, false);\n}\nexport function OnboardingReadModelToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'org_id': value['orgId'],\n        'conversation_id': value['conversationId'],\n        'artifacts': OnboardingArtifactsToJSON(value['artifacts']),\n        'next_actions': value['nextActions'] == null ? undefined : (value['nextActions'].map(SuggestedActionToJSON)),\n        'tool_availability': value['toolAvailability'] == null ? undefined : (mapValues(value['toolAvailability'], ToolAvailabilityToJSON)),\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { AppApiEndpointsAisOnboardingAgentSchemaReplayMessageFromJSON, AppApiEndpointsAisOnboardingAgentSchemaReplayMessageToJSON, } from './AppApiEndpointsAisOnboardingAgentSchemaReplayMessage';\nimport { OnboardingReadModelFromJSON, OnboardingReadModelToJSON, } from './OnboardingReadModel';\n/**\n * Check if a given object implements the AISOnboardingConversationResponse interface.\n */\nexport function instanceOfAISOnboardingConversationResponse(value) {\n    if (!('readModel' in value) || value['readModel'] === undefined)\n        return false;\n    return true;\n}\nexport function AISOnboardingConversationResponseFromJSON(json) {\n    return AISOnboardingConversationResponseFromJSONTyped(json, false);\n}\nexport function AISOnboardingConversationResponseFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'conversationId': json['conversation_id'] == null ? undefined : json['conversation_id'],\n        'messages': json['messages'] == null ? undefined : (json['messages'].map(AppApiEndpointsAisOnboardingAgentSchemaReplayMessageFromJSON)),\n        'readModel': OnboardingReadModelFromJSON(json['read_model']),\n    };\n}\nexport function AISOnboardingConversationResponseToJSON(json) {\n    return AISOnboardingConversationResponseToJSONTyped(json, false);\n}\nexport function AISOnboardingConversationResponseToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'conversation_id': value['conversationId'],\n        'messages': value['messages'] == null ? undefined : (value['messages'].map(AppApiEndpointsAisOnboardingAgentSchemaReplayMessageToJSON)),\n        'read_model': OnboardingReadModelToJSON(value['readModel']),\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the AISOnboardingRequest interface.\n */\nexport function instanceOfAISOnboardingRequest(value) {\n    if (!('query' in value) || value['query'] === undefined)\n        return false;\n    if (!('orgId' in value) || value['orgId'] === undefined)\n        return false;\n    return true;\n}\nexport function AISOnboardingRequestFromJSON(json) {\n    return AISOnboardingRequestFromJSONTyped(json, false);\n}\nexport function AISOnboardingRequestFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'query': json['query'],\n        'orgId': json['org_id'],\n        'streaming': json['streaming'] == null ? undefined : json['streaming'],\n        'persistUserMessage': json['persist_user_message'] == null ? undefined : json['persist_user_message'],\n    };\n}\nexport function AISOnboardingRequestToJSON(json) {\n    return AISOnboardingRequestToJSONTyped(json, false);\n}\nexport function AISOnboardingRequestToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'query': value['query'],\n        'org_id': value['orgId'],\n        'streaming': value['streaming'],\n        'persist_user_message': value['persistUserMessage'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the UserSelectedSelector interface.\n */\nexport function instanceOfUserSelectedSelector(value) {\n    if (!('selector' in value) || value['selector'] === undefined)\n        return false;\n    return true;\n}\nexport function UserSelectedSelectorFromJSON(json) {\n    return UserSelectedSelectorFromJSONTyped(json, false);\n}\nexport function UserSelectedSelectorFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'selector': json['selector'],\n        'elementName': json['element_name'] == null ? undefined : json['element_name'],\n        'moduleId': json['module_id'] == null ? undefined : json['module_id'],\n        'semanticContext': json['semantic_context'] == null ? undefined : json['semantic_context'],\n    };\n}\nexport function UserSelectedSelectorToJSON(json) {\n    return UserSelectedSelectorToJSONTyped(json, false);\n}\nexport function UserSelectedSelectorToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'selector': value['selector'],\n        'element_name': value['elementName'],\n        'module_id': value['moduleId'],\n        'semantic_context': value['semanticContext'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the UserFeedback interface.\n */\nexport function instanceOfUserFeedback(value) {\n    return true;\n}\nexport function UserFeedbackFromJSON(json) {\n    return UserFeedbackFromJSONTyped(json, false);\n}\nexport function UserFeedbackFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'disabledChanges': json['disabled_changes'] == null ? undefined : json['disabled_changes'],\n        'invisibleChanges': json['invisible_changes'] == null ? undefined : json['invisible_changes'],\n    };\n}\nexport function UserFeedbackToJSON(json) {\n    return UserFeedbackToJSONTyped(json, false);\n}\nexport function UserFeedbackToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'disabled_changes': value['disabledChanges'],\n        'invisible_changes': value['invisibleChanges'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { UserSelectedSelectorFromJSON, UserSelectedSelectorToJSON, } from './UserSelectedSelector';\nimport { UserFeedbackFromJSON, UserFeedbackToJSON, } from './UserFeedback';\n/**\n * Check if a given object implements the BatchCustomizationRequest interface.\n */\nexport function instanceOfBatchCustomizationRequest(value) {\n    if (!('orgId' in value) || value['orgId'] === undefined)\n        return false;\n    if (!('query' in value) || value['query'] === undefined)\n        return false;\n    if (!('batchModuleConfigurations' in value) || value['batchModuleConfigurations'] === undefined)\n        return false;\n    return true;\n}\nexport function BatchCustomizationRequestFromJSON(json) {\n    return BatchCustomizationRequestFromJSONTyped(json, false);\n}\nexport function BatchCustomizationRequestFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'orgId': json['org_id'],\n        'query': json['query'],\n        'batchModuleConfigurations': json['batch_module_configurations'],\n        'conversationId': json['conversation_id'] == null ? undefined : json['conversation_id'],\n        'streaming': json['streaming'] == null ? undefined : json['streaming'],\n        'userSelectedSelectors': json['user_selected_selectors'] == null ? undefined : (json['user_selected_selectors'].map(UserSelectedSelectorFromJSON)),\n        'userFeedback': json['user_feedback'] == null ? undefined : UserFeedbackFromJSON(json['user_feedback']),\n        'contextType': json['context_type'] == null ? undefined : json['context_type'],\n        'contextId': json['context_id'] == null ? undefined : json['context_id'],\n    };\n}\nexport function BatchCustomizationRequestToJSON(json) {\n    return BatchCustomizationRequestToJSONTyped(json, false);\n}\nexport function BatchCustomizationRequestToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'org_id': value['orgId'],\n        'query': value['query'],\n        'batch_module_configurations': value['batchModuleConfigurations'],\n        'conversation_id': value['conversationId'],\n        'streaming': value['streaming'],\n        'user_selected_selectors': value['userSelectedSelectors'] == null ? undefined : (value['userSelectedSelectors'].map(UserSelectedSelectorToJSON)),\n        'user_feedback': UserFeedbackToJSON(value['userFeedback']),\n        'context_type': value['contextType'],\n        'context_id': value['contextId'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * @export\n */\nexport const AnomalyContextAnomalyTypeCategoryEnum = {\n    Behavioral: 'behavioral',\n    Traffic: 'traffic',\n    Conversion: 'conversion',\n    Search: 'search'\n};\n/**\n * Check if a given object implements the AnomalyContext interface.\n */\nexport function instanceOfAnomalyContext(value) {\n    if (!('anomalyId' in value) || value['anomalyId'] === undefined)\n        return false;\n    if (!('anomalyTypeCategory' in value) || value['anomalyTypeCategory'] === undefined)\n        return false;\n    return true;\n}\nexport function AnomalyContextFromJSON(json) {\n    return AnomalyContextFromJSONTyped(json, false);\n}\nexport function AnomalyContextFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'anomalyId': json['anomaly_id'],\n        'anomalyTypeCategory': json['anomaly_type_category'],\n    };\n}\nexport function AnomalyContextToJSON(json) {\n    return AnomalyContextToJSONTyped(json, false);\n}\nexport function AnomalyContextToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'anomaly_id': value['anomalyId'],\n        'anomaly_type_category': value['anomalyTypeCategory'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { AnomalyContextFromJSON, AnomalyContextToJSON, } from './AnomalyContext';\n/**\n * Check if a given object implements the BehavioralAnomalyRequest interface.\n */\nexport function instanceOfBehavioralAnomalyRequest(value) {\n    if (!('orgId' in value) || value['orgId'] === undefined)\n        return false;\n    if (!('query' in value) || value['query'] === undefined)\n        return false;\n    return true;\n}\nexport function BehavioralAnomalyRequestFromJSON(json) {\n    return BehavioralAnomalyRequestFromJSONTyped(json, false);\n}\nexport function BehavioralAnomalyRequestFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'orgId': json['org_id'],\n        'query': json['query'],\n        'conversationId': json['conversation_id'] == null ? undefined : json['conversation_id'],\n        'streaming': json['streaming'] == null ? undefined : json['streaming'],\n        'anomalyContext': json['anomaly_context'] == null ? undefined : AnomalyContextFromJSON(json['anomaly_context']),\n    };\n}\nexport function BehavioralAnomalyRequestToJSON(json) {\n    return BehavioralAnomalyRequestToJSONTyped(json, false);\n}\nexport function BehavioralAnomalyRequestToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'org_id': value['orgId'],\n        'query': value['query'],\n        'conversation_id': value['conversationId'],\n        'streaming': value['streaming'],\n        'anomaly_context': AnomalyContextToJSON(value['anomalyContext']),\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * @export\n */\nexport const ClickRequestActionEnum = {\n    Click: 'click',\n    FindSimilar: 'find_similar',\n    OpenReplay: 'open_replay'\n};\n/**\n * Check if a given object implements the ClickRequest interface.\n */\nexport function instanceOfClickRequest(value) {\n    if (!('queryId' in value) || value['queryId'] === undefined)\n        return false;\n    if (!('sessionId' in value) || value['sessionId'] === undefined)\n        return false;\n    if (!('orgId' in value) || value['orgId'] === undefined)\n        return false;\n    if (!('position' in value) || value['position'] === undefined)\n        return false;\n    return true;\n}\nexport function ClickRequestFromJSON(json) {\n    return ClickRequestFromJSONTyped(json, false);\n}\nexport function ClickRequestFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'queryId': json['query_id'],\n        'sessionId': json['session_id'],\n        'orgId': json['org_id'],\n        'position': json['position'],\n        'action': json['action'] == null ? undefined : json['action'],\n    };\n}\nexport function ClickRequestToJSON(json) {\n    return ClickRequestToJSONTyped(json, false);\n}\nexport function ClickRequestToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'query_id': value['queryId'],\n        'session_id': value['sessionId'],\n        'org_id': value['orgId'],\n        'position': value['position'],\n        'action': value['action'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the ConsultativeAssistantRequest interface.\n */\nexport function instanceOfConsultativeAssistantRequest(value) {\n    if (!('message' in value) || value['message'] === undefined)\n        return false;\n    if (!('orgId' in value) || value['orgId'] === undefined)\n        return false;\n    return true;\n}\nexport function ConsultativeAssistantRequestFromJSON(json) {\n    return ConsultativeAssistantRequestFromJSONTyped(json, false);\n}\nexport function ConsultativeAssistantRequestFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'message': json['message'],\n        'orgId': json['org_id'],\n        'productHandle': json['product_handle'] == null ? undefined : json['product_handle'],\n        'productSku': json['product_sku'] == null ? undefined : json['product_sku'],\n        'productUrl': json['product_url'] == null ? undefined : json['product_url'],\n        'recentlyViewedHandles': json['recently_viewed_handles'] == null ? undefined : json['recently_viewed_handles'],\n        'conversationId': json['conversation_id'] == null ? undefined : json['conversation_id'],\n    };\n}\nexport function ConsultativeAssistantRequestToJSON(json) {\n    return ConsultativeAssistantRequestToJSONTyped(json, false);\n}\nexport function ConsultativeAssistantRequestToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'message': value['message'],\n        'org_id': value['orgId'],\n        'product_handle': value['productHandle'],\n        'product_sku': value['productSku'],\n        'product_url': value['productUrl'],\n        'recently_viewed_handles': value['recentlyViewedHandles'],\n        'conversation_id': value['conversationId'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the ConsultativeAssistantResponse interface.\n */\nexport function instanceOfConsultativeAssistantResponse(value) {\n    if (!('response' in value) || value['response'] === undefined)\n        return false;\n    if (!('conversationId' in value) || value['conversationId'] === undefined)\n        return false;\n    return true;\n}\nexport function ConsultativeAssistantResponseFromJSON(json) {\n    return ConsultativeAssistantResponseFromJSONTyped(json, false);\n}\nexport function ConsultativeAssistantResponseFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'response': json['response'],\n        'clarifyingQuestion': json['clarifying_question'] == null ? undefined : json['clarifying_question'],\n        'conversationId': json['conversation_id'],\n        'recommendedProductHandles': json['recommended_product_handles'] == null ? undefined : json['recommended_product_handles'],\n        'carouselHeading': json['carousel_heading'] == null ? undefined : json['carousel_heading'],\n    };\n}\nexport function ConsultativeAssistantResponseToJSON(json) {\n    return ConsultativeAssistantResponseToJSONTyped(json, false);\n}\nexport function ConsultativeAssistantResponseToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'response': value['response'],\n        'clarifying_question': value['clarifyingQuestion'],\n        'conversation_id': value['conversationId'],\n        'recommended_product_handles': value['recommendedProductHandles'],\n        'carousel_heading': value['carouselHeading'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the DPPExperimentCreationRequest interface.\n */\nexport function instanceOfDPPExperimentCreationRequest(value) {\n    if (!('orgId' in value) || value['orgId'] === undefined)\n        return false;\n    if (!('query' in value) || value['query'] === undefined)\n        return false;\n    return true;\n}\nexport function DPPExperimentCreationRequestFromJSON(json) {\n    return DPPExperimentCreationRequestFromJSONTyped(json, false);\n}\nexport function DPPExperimentCreationRequestFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'orgId': json['org_id'],\n        'query': json['query'],\n        'conversationId': json['conversation_id'] == null ? undefined : json['conversation_id'],\n        'apply': json['apply'] == null ? undefined : json['apply'],\n        'pendingExperiment': json['pending_experiment'] == null ? undefined : json['pending_experiment'],\n        'streaming': json['streaming'] == null ? undefined : json['streaming'],\n    };\n}\nexport function DPPExperimentCreationRequestToJSON(json) {\n    return DPPExperimentCreationRequestToJSONTyped(json, false);\n}\nexport function DPPExperimentCreationRequestToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'org_id': value['orgId'],\n        'query': value['query'],\n        'conversation_id': value['conversationId'],\n        'apply': value['apply'],\n        'pending_experiment': value['pendingExperiment'],\n        'streaming': value['streaming'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the ExperimentVariant interface.\n */\nexport function instanceOfExperimentVariant(value) {\n    if (!('layoutId' in value) || value['layoutId'] === undefined)\n        return false;\n    if (!('layoutName' in value) || value['layoutName'] === undefined)\n        return false;\n    if (!('weight' in value) || value['weight'] === undefined)\n        return false;\n    return true;\n}\nexport function ExperimentVariantFromJSON(json) {\n    return ExperimentVariantFromJSONTyped(json, false);\n}\nexport function ExperimentVariantFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'layoutId': json['layout_id'],\n        'layoutName': json['layout_name'],\n        'weight': json['weight'],\n    };\n}\nexport function ExperimentVariantToJSON(json) {\n    return ExperimentVariantToJSONTyped(json, false);\n}\nexport function ExperimentVariantToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'layout_id': value['layoutId'],\n        'layout_name': value['layoutName'],\n        'weight': value['weight'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { ExperimentVariantFromJSON, ExperimentVariantToJSON, } from './ExperimentVariant';\n/**\n * Check if a given object implements the ExperimentConfig interface.\n */\nexport function instanceOfExperimentConfig(value) {\n    if (!('name' in value) || value['name'] === undefined)\n        return false;\n    if (!('description' in value) || value['description'] === undefined)\n        return false;\n    if (!('productGroupId' in value) || value['productGroupId'] === undefined)\n        return false;\n    if (!('productGroupName' in value) || value['productGroupName'] === undefined)\n        return false;\n    if (!('variants' in value) || value['variants'] === undefined)\n        return false;\n    if (!('reasoning' in value) || value['reasoning'] === undefined)\n        return false;\n    return true;\n}\nexport function ExperimentConfigFromJSON(json) {\n    return ExperimentConfigFromJSONTyped(json, false);\n}\nexport function ExperimentConfigFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'name': json['name'],\n        'description': json['description'],\n        'productGroupId': json['product_group_id'],\n        'productGroupName': json['product_group_name'],\n        'variants': (json['variants'].map(ExperimentVariantFromJSON)),\n        'reasoning': json['reasoning'],\n        'error': json['error'] == null ? undefined : json['error'],\n        'externalWeight': json['external_weight'] == null ? undefined : json['external_weight'],\n        'internalLayoutWeight': json['internal_layout_weight'] == null ? undefined : json['internal_layout_weight'],\n    };\n}\nexport function ExperimentConfigToJSON(json) {\n    return ExperimentConfigToJSONTyped(json, false);\n}\nexport function ExperimentConfigToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'name': value['name'],\n        'description': value['description'],\n        'product_group_id': value['productGroupId'],\n        'product_group_name': value['productGroupName'],\n        'variants': (value['variants'].map(ExperimentVariantToJSON)),\n        'reasoning': value['reasoning'],\n        'error': value['error'],\n        'external_weight': value['externalWeight'],\n        'internal_layout_weight': value['internalLayoutWeight'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { ExperimentConfigFromJSON, ExperimentConfigToJSON, } from './ExperimentConfig';\n/**\n * Check if a given object implements the DPPExperimentCreationResponse1 interface.\n */\nexport function instanceOfDPPExperimentCreationResponse1(value) {\n    if (!('explanation' in value) || value['explanation'] === undefined)\n        return false;\n    return true;\n}\nexport function DPPExperimentCreationResponse1FromJSON(json) {\n    return DPPExperimentCreationResponse1FromJSONTyped(json, false);\n}\nexport function DPPExperimentCreationResponse1FromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'experimentConfig': json['experiment_config'] == null ? undefined : ExperimentConfigFromJSON(json['experiment_config']),\n        'explanation': json['explanation'],\n        'experimentId': json['experiment_id'] == null ? undefined : json['experiment_id'],\n    };\n}\nexport function DPPExperimentCreationResponse1ToJSON(json) {\n    return DPPExperimentCreationResponse1ToJSONTyped(json, false);\n}\nexport function DPPExperimentCreationResponse1ToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'experiment_config': ExperimentConfigToJSON(value['experimentConfig']),\n        'explanation': value['explanation'],\n        'experiment_id': value['experimentId'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the DetectorRunRequest interface.\n */\nexport function instanceOfDetectorRunRequest(value) {\n    if (!('orgId' in value) || value['orgId'] === undefined)\n        return false;\n    return true;\n}\nexport function DetectorRunRequestFromJSON(json) {\n    return DetectorRunRequestFromJSONTyped(json, false);\n}\nexport function DetectorRunRequestFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'orgId': json['org_id'],\n    };\n}\nexport function DetectorRunRequestToJSON(json) {\n    return DetectorRunRequestToJSONTyped(json, false);\n}\nexport function DetectorRunRequestToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'org_id': value['orgId'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the DetectorRunResponse interface.\n */\nexport function instanceOfDetectorRunResponse(value) {\n    if (!('id' in value) || value['id'] === undefined)\n        return false;\n    if (!('rationale' in value) || value['rationale'] === undefined)\n        return false;\n    if (!('verdict' in value) || value['verdict'] === undefined)\n        return false;\n    return true;\n}\nexport function DetectorRunResponseFromJSON(json) {\n    return DetectorRunResponseFromJSONTyped(json, false);\n}\nexport function DetectorRunResponseFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'id': json['id'],\n        'rationale': json['rationale'],\n        'verdict': json['verdict'],\n    };\n}\nexport function DetectorRunResponseToJSON(json) {\n    return DetectorRunResponseToJSONTyped(json, false);\n}\nexport function DetectorRunResponseToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'id': value['id'],\n        'rationale': value['rationale'],\n        'verdict': value['verdict'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the GenerateBrandVoiceRequest interface.\n */\nexport function instanceOfGenerateBrandVoiceRequest(value) {\n    if (!('orgId' in value) || value['orgId'] === undefined)\n        return false;\n    if (!('websiteUrl' in value) || value['websiteUrl'] === undefined)\n        return false;\n    return true;\n}\nexport function GenerateBrandVoiceRequestFromJSON(json) {\n    return GenerateBrandVoiceRequestFromJSONTyped(json, false);\n}\nexport function GenerateBrandVoiceRequestFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'orgId': json['org_id'],\n        'websiteUrl': json['website_url'],\n    };\n}\nexport function GenerateBrandVoiceRequestToJSON(json) {\n    return GenerateBrandVoiceRequestToJSONTyped(json, false);\n}\nexport function GenerateBrandVoiceRequestToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'org_id': value['orgId'],\n        'website_url': value['websiteUrl'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the GenerateBrandVoiceResponse interface.\n */\nexport function instanceOfGenerateBrandVoiceResponse(value) {\n    if (!('brandVoice' in value) || value['brandVoice'] === undefined)\n        return false;\n    if (!('extraContext' in value) || value['extraContext'] === undefined)\n        return false;\n    return true;\n}\nexport function GenerateBrandVoiceResponseFromJSON(json) {\n    return GenerateBrandVoiceResponseFromJSONTyped(json, false);\n}\nexport function GenerateBrandVoiceResponseFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'brandVoice': json['brand_voice'],\n        'extraContext': json['extra_context'],\n    };\n}\nexport function GenerateBrandVoiceResponseToJSON(json) {\n    return GenerateBrandVoiceResponseToJSONTyped(json, false);\n}\nexport function GenerateBrandVoiceResponseToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'brand_voice': value['brandVoice'],\n        'extra_context': value['extraContext'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the GenerateImageRequest interface.\n */\nexport function instanceOfGenerateImageRequest(value) {\n    if (!('prompt' in value) || value['prompt'] === undefined)\n        return false;\n    return true;\n}\nexport function GenerateImageRequestFromJSON(json) {\n    return GenerateImageRequestFromJSONTyped(json, false);\n}\nexport function GenerateImageRequestFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'prompt': json['prompt'],\n        'referenceImageUrl': json['reference_image_url'] == null ? undefined : json['reference_image_url'],\n        'productId': json['product_id'] == null ? undefined : json['product_id'],\n    };\n}\nexport function GenerateImageRequestToJSON(json) {\n    return GenerateImageRequestToJSONTyped(json, false);\n}\nexport function GenerateImageRequestToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'prompt': value['prompt'],\n        'reference_image_url': value['referenceImageUrl'],\n        'product_id': value['productId'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the GenerateImageResponse interface.\n */\nexport function instanceOfGenerateImageResponse(value) {\n    if (!('imageUrl' in value) || value['imageUrl'] === undefined)\n        return false;\n    if (!('persistedFileId' in value) || value['persistedFileId'] === undefined)\n        return false;\n    if (!('referenceImageUrl' in value) || value['referenceImageUrl'] === undefined)\n        return false;\n    return true;\n}\nexport function GenerateImageResponseFromJSON(json) {\n    return GenerateImageResponseFromJSONTyped(json, false);\n}\nexport function GenerateImageResponseFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'imageUrl': json['image_url'],\n        'persistedFileId': json['persisted_file_id'],\n        'referenceImageUrl': json['reference_image_url'],\n    };\n}\nexport function GenerateImageResponseToJSON(json) {\n    return GenerateImageResponseToJSONTyped(json, false);\n}\nexport function GenerateImageResponseToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'image_url': value['imageUrl'],\n        'persisted_file_id': value['persistedFileId'],\n        'reference_image_url': value['referenceImageUrl'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the GenerateTitleRequest interface.\n */\nexport function instanceOfGenerateTitleRequest(value) {\n    if (!('orgId' in value) || value['orgId'] === undefined)\n        return false;\n    if (!('conversationId' in value) || value['conversationId'] === undefined)\n        return false;\n    if (!('message' in value) || value['message'] === undefined)\n        return false;\n    return true;\n}\nexport function GenerateTitleRequestFromJSON(json) {\n    return GenerateTitleRequestFromJSONTyped(json, false);\n}\nexport function GenerateTitleRequestFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'orgId': json['org_id'],\n        'conversationId': json['conversation_id'],\n        'message': json['message'],\n    };\n}\nexport function GenerateTitleRequestToJSON(json) {\n    return GenerateTitleRequestToJSONTyped(json, false);\n}\nexport function GenerateTitleRequestToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'org_id': value['orgId'],\n        'conversation_id': value['conversationId'],\n        'message': value['message'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the GenerateTitleResponse interface.\n */\nexport function instanceOfGenerateTitleResponse(value) {\n    if (!('title' in value) || value['title'] === undefined)\n        return false;\n    return true;\n}\nexport function GenerateTitleResponseFromJSON(json) {\n    return GenerateTitleResponseFromJSONTyped(json, false);\n}\nexport function GenerateTitleResponseFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'title': json['title'],\n    };\n}\nexport function GenerateTitleResponseToJSON(json) {\n    return GenerateTitleResponseToJSONTyped(json, false);\n}\nexport function GenerateTitleResponseToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'title': value['title'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the HealthCheckResponse interface.\n */\nexport function instanceOfHealthCheckResponse(value) {\n    if (!('status' in value) || value['status'] === undefined)\n        return false;\n    return true;\n}\nexport function HealthCheckResponseFromJSON(json) {\n    return HealthCheckResponseFromJSONTyped(json, false);\n}\nexport function HealthCheckResponseFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'status': json['status'],\n    };\n}\nexport function HealthCheckResponseToJSON(json) {\n    return HealthCheckResponseToJSONTyped(json, false);\n}\nexport function HealthCheckResponseToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'status': value['status'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the MainSiteSnippetResponse interface.\n */\nexport function instanceOfMainSiteSnippetResponse(value) {\n    if (!('snippet' in value) || value['snippet'] === undefined)\n        return false;\n    if (!('model' in value) || value['model'] === undefined)\n        return false;\n    return true;\n}\nexport function MainSiteSnippetResponseFromJSON(json) {\n    return MainSiteSnippetResponseFromJSONTyped(json, false);\n}\nexport function MainSiteSnippetResponseFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'snippet': json['snippet'],\n        'model': json['model'],\n    };\n}\nexport function MainSiteSnippetResponseToJSON(json) {\n    return MainSiteSnippetResponseToJSONTyped(json, false);\n}\nexport function MainSiteSnippetResponseToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'snippet': value['snippet'],\n        'model': value['model'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the ModuleCustomizationPropChange interface.\n */\nexport function instanceOfModuleCustomizationPropChange(value) {\n    if (!('path' in value) || value['path'] === undefined)\n        return false;\n    if (!('value' in value) || value['value'] === undefined)\n        return false;\n    return true;\n}\nexport function ModuleCustomizationPropChangeFromJSON(json) {\n    return ModuleCustomizationPropChangeFromJSONTyped(json, false);\n}\nexport function ModuleCustomizationPropChangeFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'path': json['path'],\n        'value': json['value'],\n    };\n}\nexport function ModuleCustomizationPropChangeToJSON(json) {\n    return ModuleCustomizationPropChangeToJSONTyped(json, false);\n}\nexport function ModuleCustomizationPropChangeToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'path': value['path'],\n        'value': value['value'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * @export\n */\nexport const ModuleCustomizationCSSDeclarationChangeBreakpointEnum = {\n    Mobile: 'mobile',\n    Tablet: 'tablet',\n    Desktop: 'desktop',\n    All: 'all'\n};\n/**\n * Check if a given object implements the ModuleCustomizationCSSDeclarationChange interface.\n */\nexport function instanceOfModuleCustomizationCSSDeclarationChange(value) {\n    if (!('selector' in value) || value['selector'] === undefined)\n        return false;\n    if (!('property' in value) || value['property'] === undefined)\n        return false;\n    if (!('value' in value) || value['value'] === undefined)\n        return false;\n    return true;\n}\nexport function ModuleCustomizationCSSDeclarationChangeFromJSON(json) {\n    return ModuleCustomizationCSSDeclarationChangeFromJSONTyped(json, false);\n}\nexport function ModuleCustomizationCSSDeclarationChangeFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'selector': json['selector'],\n        'breakpoint': json['breakpoint'] == null ? undefined : json['breakpoint'],\n        'property': json['property'],\n        'value': json['value'],\n        'overlappingPanelFields': json['overlapping_panel_fields'] == null ? undefined : json['overlapping_panel_fields'],\n    };\n}\nexport function ModuleCustomizationCSSDeclarationChangeToJSON(json) {\n    return ModuleCustomizationCSSDeclarationChangeToJSONTyped(json, false);\n}\nexport function ModuleCustomizationCSSDeclarationChangeToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'selector': value['selector'],\n        'breakpoint': value['breakpoint'],\n        'property': value['property'],\n        'value': value['value'],\n        'overlapping_panel_fields': value['overlappingPanelFields'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { ModuleCustomizationPropChangeFromJSON, ModuleCustomizationPropChangeToJSON, } from './ModuleCustomizationPropChange';\nimport { ModuleCustomizationCSSDeclarationChangeFromJSON, ModuleCustomizationCSSDeclarationChangeToJSON, } from './ModuleCustomizationCSSDeclarationChange';\n/**\n * @export\n */\nexport const ModuleCustomizationSessionChangeChangeTypeEnum = {\n    Prop: 'prop',\n    CssDeclaration: 'css_declaration'\n};\n/**\n * Check if a given object implements the ModuleCustomizationSessionChange interface.\n */\nexport function instanceOfModuleCustomizationSessionChange(value) {\n    if (!('changeId' in value) || value['changeId'] === undefined)\n        return false;\n    if (!('changeType' in value) || value['changeType'] === undefined)\n        return false;\n    return true;\n}\nexport function ModuleCustomizationSessionChangeFromJSON(json) {\n    return ModuleCustomizationSessionChangeFromJSONTyped(json, false);\n}\nexport function ModuleCustomizationSessionChangeFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'changeId': json['change_id'],\n        'changeType': json['change_type'],\n        'description': json['description'] == null ? undefined : json['description'],\n        'isEnabled': json['is_enabled'] == null ? undefined : json['is_enabled'],\n        'changeNotVisible': json['change_not_visible'] == null ? undefined : json['change_not_visible'],\n        'sourceTurnId': json['source_turn_id'] == null ? undefined : json['source_turn_id'],\n        'sourceTurnIndex': json['source_turn_index'] == null ? undefined : json['source_turn_index'],\n        'groupId': json['group_id'] == null ? undefined : json['group_id'],\n        'createdAt': json['created_at'] == null ? undefined : json['created_at'],\n        'propChange': json['prop_change'] == null ? undefined : ModuleCustomizationPropChangeFromJSON(json['prop_change']),\n        'cssDeclarationChange': json['css_declaration_change'] == null ? undefined : ModuleCustomizationCSSDeclarationChangeFromJSON(json['css_declaration_change']),\n    };\n}\nexport function ModuleCustomizationSessionChangeToJSON(json) {\n    return ModuleCustomizationSessionChangeToJSONTyped(json, false);\n}\nexport function ModuleCustomizationSessionChangeToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'change_id': value['changeId'],\n        'change_type': value['changeType'],\n        'description': value['description'],\n        'is_enabled': value['isEnabled'],\n        'change_not_visible': value['changeNotVisible'],\n        'source_turn_id': value['sourceTurnId'],\n        'source_turn_index': value['sourceTurnIndex'],\n        'group_id': value['groupId'],\n        'created_at': value['createdAt'],\n        'prop_change': ModuleCustomizationPropChangeToJSON(value['propChange']),\n        'css_declaration_change': ModuleCustomizationCSSDeclarationChangeToJSON(value['cssDeclarationChange']),\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * @export\n */\nexport const LiftedSchemaEntryTypeEnum = {\n    Color: 'color',\n    Number: 'number',\n    Text: 'text',\n    Select: 'select'\n};\n/**\n * @export\n */\nexport const LiftedSchemaEntryCategoryEnum = {\n    Content: 'content',\n    Styles: 'styles'\n};\n/**\n * Check if a given object implements the LiftedSchemaEntry interface.\n */\nexport function instanceOfLiftedSchemaEntry(value) {\n    if (!('key' in value) || value['key'] === undefined)\n        return false;\n    if (!('label' in value) || value['label'] === undefined)\n        return false;\n    if (!('type' in value) || value['type'] === undefined)\n        return false;\n    if (!('defaultValue' in value) || value['defaultValue'] === undefined)\n        return false;\n    if (!('bundlePatch' in value) || value['bundlePatch'] === undefined)\n        return false;\n    return true;\n}\nexport function LiftedSchemaEntryFromJSON(json) {\n    return LiftedSchemaEntryFromJSONTyped(json, false);\n}\nexport function LiftedSchemaEntryFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'key': json['key'],\n        'label': json['label'],\n        'type': json['type'],\n        'category': json['category'] == null ? undefined : json['category'],\n        'defaultValue': json['default_value'],\n        'bundlePatch': json['bundle_patch'],\n    };\n}\nexport function LiftedSchemaEntryToJSON(json) {\n    return LiftedSchemaEntryToJSONTyped(json, false);\n}\nexport function LiftedSchemaEntryToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'key': value['key'],\n        'label': value['label'],\n        'type': value['type'],\n        'category': value['category'],\n        'default_value': value['defaultValue'],\n        'bundle_patch': value['bundlePatch'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { LiftedSchemaEntryFromJSON, LiftedSchemaEntryToJSON, } from './LiftedSchemaEntry';\n/**\n * @export\n */\nexport const CSSRuleBreakpointEnum = {\n    Mobile: 'mobile',\n    Tablet: 'tablet',\n    Desktop: 'desktop',\n    All: 'all'\n};\n/**\n * Check if a given object implements the CSSRule interface.\n */\nexport function instanceOfCSSRule(value) {\n    if (!('selector' in value) || value['selector'] === undefined)\n        return false;\n    if (!('styles' in value) || value['styles'] === undefined)\n        return false;\n    return true;\n}\nexport function CSSRuleFromJSON(json) {\n    return CSSRuleFromJSONTyped(json, false);\n}\nexport function CSSRuleFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'selector': json['selector'],\n        'styles': json['styles'],\n        'breakpoint': json['breakpoint'] == null ? undefined : json['breakpoint'],\n        'description': json['description'] == null ? undefined : json['description'],\n        'overlappingPanelFields': json['overlapping_panel_fields'] == null ? undefined : json['overlapping_panel_fields'],\n        'fontUrl': json['font_url'] == null ? undefined : json['font_url'],\n        'globalCss': json['global_css'] == null ? undefined : json['global_css'],\n        'liftToSchema': json['lift_to_schema'] == null ? undefined : LiftedSchemaEntryFromJSON(json['lift_to_schema']),\n    };\n}\nexport function CSSRuleToJSON(json) {\n    return CSSRuleToJSONTyped(json, false);\n}\nexport function CSSRuleToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'selector': value['selector'],\n        'styles': value['styles'],\n        'breakpoint': value['breakpoint'],\n        'description': value['description'],\n        'overlapping_panel_fields': value['overlappingPanelFields'],\n        'font_url': value['fontUrl'],\n        'global_css': value['globalCss'],\n        'lift_to_schema': LiftedSchemaEntryToJSON(value['liftToSchema']),\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { ModuleCustomizationSessionChangeFromJSON, ModuleCustomizationSessionChangeToJSON, } from './ModuleCustomizationSessionChange';\nimport { CSSRuleFromJSON, CSSRuleToJSON, } from './CSSRule';\n/**\n * Check if a given object implements the ModuleCustomizationResponse interface.\n */\nexport function instanceOfModuleCustomizationResponse(value) {\n    return true;\n}\nexport function ModuleCustomizationResponseFromJSON(json) {\n    return ModuleCustomizationResponseFromJSONTyped(json, false);\n}\nexport function ModuleCustomizationResponseFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'rules': json['rules'] == null ? undefined : (json['rules'].map(CSSRuleFromJSON)),\n        'explanation': json['explanation'] == null ? undefined : json['explanation'],\n        'aiCustomizedProps': json['ai_customized_props'] == null ? undefined : json['ai_customized_props'],\n        'targetModuleId': json['target_module_id'] == null ? undefined : json['target_module_id'],\n        'changes': json['changes'] == null ? undefined : (json['changes'].map(ModuleCustomizationSessionChangeFromJSON)),\n    };\n}\nexport function ModuleCustomizationResponseToJSON(json) {\n    return ModuleCustomizationResponseToJSONTyped(json, false);\n}\nexport function ModuleCustomizationResponseToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'rules': value['rules'] == null ? undefined : (value['rules'].map(CSSRuleToJSON)),\n        'explanation': value['explanation'],\n        'ai_customized_props': value['aiCustomizedProps'],\n        'target_module_id': value['targetModuleId'],\n        'changes': value['changes'] == null ? undefined : (value['changes'].map(ModuleCustomizationSessionChangeToJSON)),\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the StyleTransferResult1 interface.\n */\nexport function instanceOfStyleTransferResult1(value) {\n    if (!('sourceModuleId' in value) || value['sourceModuleId'] === undefined)\n        return false;\n    if (!('sourceModuleName' in value) || value['sourceModuleName'] === undefined)\n        return false;\n    if (!('targetModuleId' in value) || value['targetModuleId'] === undefined)\n        return false;\n    if (!('targetModuleName' in value) || value['targetModuleName'] === undefined)\n        return false;\n    if (!('transferredFields' in value) || value['transferredFields'] === undefined)\n        return false;\n    if (!('targetUpdates' in value) || value['targetUpdates'] === undefined)\n        return false;\n    return true;\n}\nexport function StyleTransferResult1FromJSON(json) {\n    return StyleTransferResult1FromJSONTyped(json, false);\n}\nexport function StyleTransferResult1FromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'sourceModuleId': json['source_module_id'],\n        'sourceModuleName': json['source_module_name'],\n        'targetModuleId': json['target_module_id'],\n        'targetModuleName': json['target_module_name'],\n        'transferredFields': json['transferred_fields'],\n        'targetUpdates': json['target_updates'],\n    };\n}\nexport function StyleTransferResult1ToJSON(json) {\n    return StyleTransferResult1ToJSONTyped(json, false);\n}\nexport function StyleTransferResult1ToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'source_module_id': value['sourceModuleId'],\n        'source_module_name': value['sourceModuleName'],\n        'target_module_id': value['targetModuleId'],\n        'target_module_name': value['targetModuleName'],\n        'transferred_fields': value['transferredFields'],\n        'target_updates': value['targetUpdates'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Which sub-agent handled the request.\n * @export\n */\nexport const ModuleAgentType = {\n    ModuleCustomization: 'module_customization',\n    BatchCustomization: 'batch_customization',\n    ModuleGenerator: 'module_generator',\n    ConfigEditor: 'config_editor',\n    SaveModule: 'save_module',\n    General: 'general',\n    StyleTransfer: 'style_transfer'\n};\nexport function instanceOfModuleAgentType(value) {\n    for (const key in ModuleAgentType) {\n        if (Object.prototype.hasOwnProperty.call(ModuleAgentType, key)) {\n            if (ModuleAgentType[key] === value) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\nexport function ModuleAgentTypeFromJSON(json) {\n    return ModuleAgentTypeFromJSONTyped(json, false);\n}\nexport function ModuleAgentTypeFromJSONTyped(json, ignoreDiscriminator) {\n    return json;\n}\nexport function ModuleAgentTypeToJSON(value) {\n    return value;\n}\nexport function ModuleAgentTypeToJSONTyped(value, ignoreDiscriminator) {\n    return value;\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * @export\n */\nexport const CustomModuleConfigFieldTypeEnum = {\n    Text: 'text',\n    Color: 'color',\n    Number: 'number',\n    Select: 'select',\n    Image: 'image',\n    Product: 'product',\n    Images: 'images',\n    Products: 'products'\n};\n/**\n * @export\n */\nexport const CustomModuleConfigFieldCategoryEnum = {\n    Content: 'content',\n    Styles: 'styles'\n};\n/**\n * Check if a given object implements the CustomModuleConfigField interface.\n */\nexport function instanceOfCustomModuleConfigField(value) {\n    if (!('key' in value) || value['key'] === undefined)\n        return false;\n    if (!('label' in value) || value['label'] === undefined)\n        return false;\n    if (!('type' in value) || value['type'] === undefined)\n        return false;\n    if (!('defaultValue' in value) || value['defaultValue'] === undefined)\n        return false;\n    return true;\n}\nexport function CustomModuleConfigFieldFromJSON(json) {\n    return CustomModuleConfigFieldFromJSONTyped(json, false);\n}\nexport function CustomModuleConfigFieldFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'key': json['key'],\n        'label': json['label'],\n        'type': json['type'],\n        'defaultValue': json['defaultValue'],\n        'options': json['options'] == null ? undefined : json['options'],\n        'category': json['category'] == null ? undefined : json['category'],\n        'description': json['description'] == null ? undefined : json['description'],\n    };\n}\nexport function CustomModuleConfigFieldToJSON(json) {\n    return CustomModuleConfigFieldToJSONTyped(json, false);\n}\nexport function CustomModuleConfigFieldToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'key': value['key'],\n        'label': value['label'],\n        'type': value['type'],\n        'defaultValue': value['defaultValue'],\n        'options': value['options'],\n        'category': value['category'],\n        'description': value['description'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { CustomModuleConfigFieldFromJSON, CustomModuleConfigFieldToJSON, } from './CustomModuleConfigField';\n/**\n * Check if a given object implements the CustomModuleBundleResponse interface.\n */\nexport function instanceOfCustomModuleBundleResponse(value) {\n    if (!('bundle' in value) || value['bundle'] === undefined)\n        return false;\n    return true;\n}\nexport function CustomModuleBundleResponseFromJSON(json) {\n    return CustomModuleBundleResponseFromJSONTyped(json, false);\n}\nexport function CustomModuleBundleResponseFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'bundle': json['bundle'],\n        'explanation': json['explanation'] == null ? undefined : json['explanation'],\n        'configSchema': json['config_schema'] == null ? undefined : (json['config_schema'].map(CustomModuleConfigFieldFromJSON)),\n        'defaultConfig': json['default_config'] == null ? undefined : json['default_config'],\n        'id': json['id'] == null ? undefined : json['id'],\n        'moduleName': json['module_name'] == null ? undefined : json['module_name'],\n        'displayName': json['display_name'] == null ? undefined : json['display_name'],\n        'editUrl': json['edit_url'] == null ? undefined : json['edit_url'],\n        'targetModuleId': json['target_module_id'] == null ? undefined : json['target_module_id'],\n    };\n}\nexport function CustomModuleBundleResponseToJSON(json) {\n    return CustomModuleBundleResponseToJSONTyped(json, false);\n}\nexport function CustomModuleBundleResponseToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'bundle': value['bundle'],\n        'explanation': value['explanation'],\n        'config_schema': value['configSchema'] == null ? undefined : (value['configSchema'].map(CustomModuleConfigFieldToJSON)),\n        'default_config': value['defaultConfig'],\n        'id': value['id'],\n        'module_name': value['moduleName'],\n        'display_name': value['displayName'],\n        'edit_url': value['editUrl'],\n        'target_module_id': value['targetModuleId'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the ClarifyingQuestionOption interface.\n */\nexport function instanceOfClarifyingQuestionOption(value) {\n    if (!('id' in value) || value['id'] === undefined)\n        return false;\n    if (!('label' in value) || value['label'] === undefined)\n        return false;\n    return true;\n}\nexport function ClarifyingQuestionOptionFromJSON(json) {\n    return ClarifyingQuestionOptionFromJSONTyped(json, false);\n}\nexport function ClarifyingQuestionOptionFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'id': json['id'],\n        'label': json['label'],\n        'description': json['description'] == null ? undefined : json['description'],\n        'value': json['value'] == null ? undefined : json['value'],\n    };\n}\nexport function ClarifyingQuestionOptionToJSON(json) {\n    return ClarifyingQuestionOptionToJSONTyped(json, false);\n}\nexport function ClarifyingQuestionOptionToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'id': value['id'],\n        'label': value['label'],\n        'description': value['description'],\n        'value': value['value'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { ClarifyingQuestionOptionFromJSON, ClarifyingQuestionOptionToJSON, } from './ClarifyingQuestionOption';\n/**\n * Check if a given object implements the ClarifyingQuestion interface.\n */\nexport function instanceOfClarifyingQuestion(value) {\n    if (!('id' in value) || value['id'] === undefined)\n        return false;\n    if (!('prompt' in value) || value['prompt'] === undefined)\n        return false;\n    if (!('options' in value) || value['options'] === undefined)\n        return false;\n    return true;\n}\nexport function ClarifyingQuestionFromJSON(json) {\n    return ClarifyingQuestionFromJSONTyped(json, false);\n}\nexport function ClarifyingQuestionFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'id': json['id'],\n        'prompt': json['prompt'],\n        'options': (json['options'].map(ClarifyingQuestionOptionFromJSON)),\n        'helpText': json['help_text'] == null ? undefined : json['help_text'],\n        'allowSkip': json['allow_skip'] == null ? undefined : json['allow_skip'],\n        'allowFreeText': json['allow_free_text'] == null ? undefined : json['allow_free_text'],\n    };\n}\nexport function ClarifyingQuestionToJSON(json) {\n    return ClarifyingQuestionToJSONTyped(json, false);\n}\nexport function ClarifyingQuestionToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'id': value['id'],\n        'prompt': value['prompt'],\n        'options': (value['options'].map(ClarifyingQuestionOptionToJSON)),\n        'help_text': value['helpText'],\n        'allow_skip': value['allowSkip'],\n        'allow_free_text': value['allowFreeText'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * @export\n */\nexport const CalloutBlockTypeEnum = {\n    Callout: 'callout'\n};\n/**\n * @export\n */\nexport const CalloutBlockVariantEnum = {\n    Info: 'info',\n    Success: 'success',\n    Warning: 'warning',\n    Error: 'error'\n};\n/**\n * Check if a given object implements the CalloutBlock interface.\n */\nexport function instanceOfCalloutBlock(value) {\n    if (!('variant' in value) || value['variant'] === undefined)\n        return false;\n    if (!('body' in value) || value['body'] === undefined)\n        return false;\n    return true;\n}\nexport function CalloutBlockFromJSON(json) {\n    return CalloutBlockFromJSONTyped(json, false);\n}\nexport function CalloutBlockFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'type': json['type'] == null ? undefined : json['type'],\n        'variant': json['variant'],\n        'title': json['title'] == null ? undefined : json['title'],\n        'body': json['body'],\n    };\n}\nexport function CalloutBlockToJSON(json) {\n    return CalloutBlockToJSONTyped(json, false);\n}\nexport function CalloutBlockToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'type': value['type'],\n        'variant': value['variant'],\n        'title': value['title'],\n        'body': value['body'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the ChartSeries interface.\n */\nexport function instanceOfChartSeries(value) {\n    if (!('key' in value) || value['key'] === undefined)\n        return false;\n    if (!('label' in value) || value['label'] === undefined)\n        return false;\n    return true;\n}\nexport function ChartSeriesFromJSON(json) {\n    return ChartSeriesFromJSONTyped(json, false);\n}\nexport function ChartSeriesFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'key': json['key'],\n        'label': json['label'],\n        'color': json['color'] == null ? undefined : json['color'],\n    };\n}\nexport function ChartSeriesToJSON(json) {\n    return ChartSeriesToJSONTyped(json, false);\n}\nexport function ChartSeriesToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'key': value['key'],\n        'label': value['label'],\n        'color': value['color'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the PieSlice interface.\n */\nexport function instanceOfPieSlice(value) {\n    if (!('label' in value) || value['label'] === undefined)\n        return false;\n    if (!('value' in value) || value['value'] === undefined)\n        return false;\n    return true;\n}\nexport function PieSliceFromJSON(json) {\n    return PieSliceFromJSONTyped(json, false);\n}\nexport function PieSliceFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'label': json['label'],\n        'value': json['value'],\n        'color': json['color'] == null ? undefined : json['color'],\n    };\n}\nexport function PieSliceToJSON(json) {\n    return PieSliceToJSONTyped(json, false);\n}\nexport function PieSliceToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'label': value['label'],\n        'value': value['value'],\n        'color': value['color'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the ChartDatum interface.\n */\nexport function instanceOfChartDatum(value) {\n    if (!('label' in value) || value['label'] === undefined)\n        return false;\n    if (!('values' in value) || value['values'] === undefined)\n        return false;\n    return true;\n}\nexport function ChartDatumFromJSON(json) {\n    return ChartDatumFromJSONTyped(json, false);\n}\nexport function ChartDatumFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'label': json['label'],\n        'values': json['values'],\n    };\n}\nexport function ChartDatumToJSON(json) {\n    return ChartDatumToJSONTyped(json, false);\n}\nexport function ChartDatumToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'label': value['label'],\n        'values': value['values'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { ChartSeriesFromJSON, ChartSeriesToJSON, } from './ChartSeries';\nimport { PieSliceFromJSON, PieSliceToJSON, } from './PieSlice';\nimport { ChartDatumFromJSON, ChartDatumToJSON, } from './ChartDatum';\n/**\n * @export\n */\nexport const ChartBlockTypeEnum = {\n    Chart: 'chart'\n};\n/**\n * @export\n */\nexport const ChartBlockChartTypeEnum = {\n    Bar: 'bar',\n    Line: 'line',\n    Pie: 'pie'\n};\n/**\n * Check if a given object implements the ChartBlock interface.\n */\nexport function instanceOfChartBlock(value) {\n    if (!('chartType' in value) || value['chartType'] === undefined)\n        return false;\n    if (!('title' in value) || value['title'] === undefined)\n        return false;\n    return true;\n}\nexport function ChartBlockFromJSON(json) {\n    return ChartBlockFromJSONTyped(json, false);\n}\nexport function ChartBlockFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'type': json['type'] == null ? undefined : json['type'],\n        'chartType': json['chart_type'],\n        'title': json['title'],\n        'xAxisLabel': json['x_axis_label'] == null ? undefined : json['x_axis_label'],\n        'yAxisLabel': json['y_axis_label'] == null ? undefined : json['y_axis_label'],\n        'series': json['series'] == null ? undefined : (json['series'].map(ChartSeriesFromJSON)),\n        'data': json['data'] == null ? undefined : (json['data'].map(ChartDatumFromJSON)),\n        'slices': json['slices'] == null ? undefined : (json['slices'].map(PieSliceFromJSON)),\n    };\n}\nexport function ChartBlockToJSON(json) {\n    return ChartBlockToJSONTyped(json, false);\n}\nexport function ChartBlockToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'type': value['type'],\n        'chart_type': value['chartType'],\n        'title': value['title'],\n        'x_axis_label': value['xAxisLabel'],\n        'y_axis_label': value['yAxisLabel'],\n        'series': value['series'] == null ? undefined : (value['series'].map(ChartSeriesToJSON)),\n        'data': value['data'] == null ? undefined : (value['data'].map(ChartDatumToJSON)),\n        'slices': value['slices'] == null ? undefined : (value['slices'].map(PieSliceToJSON)),\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * @export\n */\nexport const DividerBlockTypeEnum = {\n    Divider: 'divider'\n};\n/**\n * Check if a given object implements the DividerBlock interface.\n */\nexport function instanceOfDividerBlock(value) {\n    return true;\n}\nexport function DividerBlockFromJSON(json) {\n    return DividerBlockFromJSONTyped(json, false);\n}\nexport function DividerBlockFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'type': json['type'] == null ? undefined : json['type'],\n    };\n}\nexport function DividerBlockToJSON(json) {\n    return DividerBlockToJSONTyped(json, false);\n}\nexport function DividerBlockToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'type': value['type'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * @export\n */\nexport const HeadingBlockTypeEnum = {\n    Heading: 'heading'\n};\n/**\n * @export\n */\nexport const HeadingBlockLevelEnum = {\n    NUMBER_1: 1,\n    NUMBER_2: 2,\n    NUMBER_3: 3\n};\n/**\n * Check if a given object implements the HeadingBlock interface.\n */\nexport function instanceOfHeadingBlock(value) {\n    if (!('level' in value) || value['level'] === undefined)\n        return false;\n    if (!('text' in value) || value['text'] === undefined)\n        return false;\n    return true;\n}\nexport function HeadingBlockFromJSON(json) {\n    return HeadingBlockFromJSONTyped(json, false);\n}\nexport function HeadingBlockFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'type': json['type'] == null ? undefined : json['type'],\n        'level': json['level'],\n        'text': json['text'],\n    };\n}\nexport function HeadingBlockToJSON(json) {\n    return HeadingBlockToJSONTyped(json, false);\n}\nexport function HeadingBlockToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'type': value['type'],\n        'level': value['level'],\n        'text': value['text'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * @export\n */\nexport const KpiItemTrendEnum = {\n    Up: 'up',\n    Down: 'down',\n    Flat: 'flat'\n};\n/**\n * Check if a given object implements the KpiItem interface.\n */\nexport function instanceOfKpiItem(value) {\n    if (!('label' in value) || value['label'] === undefined)\n        return false;\n    if (!('value' in value) || value['value'] === undefined)\n        return false;\n    return true;\n}\nexport function KpiItemFromJSON(json) {\n    return KpiItemFromJSONTyped(json, false);\n}\nexport function KpiItemFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'label': json['label'],\n        'value': json['value'],\n        'delta': json['delta'] == null ? undefined : json['delta'],\n        'trend': json['trend'] == null ? undefined : json['trend'],\n    };\n}\nexport function KpiItemToJSON(json) {\n    return KpiItemToJSONTyped(json, false);\n}\nexport function KpiItemToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'label': value['label'],\n        'value': value['value'],\n        'delta': value['delta'],\n        'trend': value['trend'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { KpiItemFromJSON, KpiItemToJSON, } from './KpiItem';\n/**\n * @export\n */\nexport const KpiGridBlockTypeEnum = {\n    KpiGrid: 'kpi_grid'\n};\n/**\n * Check if a given object implements the KpiGridBlock interface.\n */\nexport function instanceOfKpiGridBlock(value) {\n    if (!('items' in value) || value['items'] === undefined)\n        return false;\n    return true;\n}\nexport function KpiGridBlockFromJSON(json) {\n    return KpiGridBlockFromJSONTyped(json, false);\n}\nexport function KpiGridBlockFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'type': json['type'] == null ? undefined : json['type'],\n        'items': (json['items'].map(KpiItemFromJSON)),\n    };\n}\nexport function KpiGridBlockToJSON(json) {\n    return KpiGridBlockToJSONTyped(json, false);\n}\nexport function KpiGridBlockToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'type': value['type'],\n        'items': (value['items'].map(KpiItemToJSON)),\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * @export\n */\nexport const ListBlockTypeEnum = {\n    List: 'list'\n};\n/**\n * @export\n */\nexport const ListBlockStyleEnum = {\n    Bullet: 'bullet',\n    Numbered: 'numbered'\n};\n/**\n * Check if a given object implements the ListBlock interface.\n */\nexport function instanceOfListBlock(value) {\n    if (!('style' in value) || value['style'] === undefined)\n        return false;\n    if (!('items' in value) || value['items'] === undefined)\n        return false;\n    return true;\n}\nexport function ListBlockFromJSON(json) {\n    return ListBlockFromJSONTyped(json, false);\n}\nexport function ListBlockFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'type': json['type'] == null ? undefined : json['type'],\n        'style': json['style'],\n        'items': json['items'],\n    };\n}\nexport function ListBlockToJSON(json) {\n    return ListBlockToJSONTyped(json, false);\n}\nexport function ListBlockToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'type': value['type'],\n        'style': value['style'],\n        'items': value['items'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * @export\n */\nexport const ParagraphBlockTypeEnum = {\n    Paragraph: 'paragraph'\n};\n/**\n * Check if a given object implements the ParagraphBlock interface.\n */\nexport function instanceOfParagraphBlock(value) {\n    if (!('text' in value) || value['text'] === undefined)\n        return false;\n    return true;\n}\nexport function ParagraphBlockFromJSON(json) {\n    return ParagraphBlockFromJSONTyped(json, false);\n}\nexport function ParagraphBlockFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'type': json['type'] == null ? undefined : json['type'],\n        'text': json['text'],\n    };\n}\nexport function ParagraphBlockToJSON(json) {\n    return ParagraphBlockToJSONTyped(json, false);\n}\nexport function ParagraphBlockToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'type': value['type'],\n        'text': value['text'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * @export\n */\nexport const SessionListBlockTypeEnum = {\n    SessionList: 'session_list'\n};\n/**\n * Check if a given object implements the SessionListBlock interface.\n */\nexport function instanceOfSessionListBlock(value) {\n    if (!('sessionIds' in value) || value['sessionIds'] === undefined)\n        return false;\n    return true;\n}\nexport function SessionListBlockFromJSON(json) {\n    return SessionListBlockFromJSONTyped(json, false);\n}\nexport function SessionListBlockFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'type': json['type'] == null ? undefined : json['type'],\n        'label': json['label'] == null ? undefined : json['label'],\n        'sessionIds': json['session_ids'],\n    };\n}\nexport function SessionListBlockToJSON(json) {\n    return SessionListBlockToJSONTyped(json, false);\n}\nexport function SessionListBlockToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'type': value['type'],\n        'label': value['label'],\n        'session_ids': value['sessionIds'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * @export\n */\nexport const TableColumnAlignEnum = {\n    Left: 'left',\n    Right: 'right',\n    Center: 'center'\n};\n/**\n * @export\n */\nexport const TableColumnFormatEnum = {\n    Text: 'text',\n    Number: 'number',\n    Currency: 'currency',\n    Percent: 'percent',\n    Date: 'date'\n};\n/**\n * Check if a given object implements the TableColumn interface.\n */\nexport function instanceOfTableColumn(value) {\n    if (!('key' in value) || value['key'] === undefined)\n        return false;\n    if (!('label' in value) || value['label'] === undefined)\n        return false;\n    return true;\n}\nexport function TableColumnFromJSON(json) {\n    return TableColumnFromJSONTyped(json, false);\n}\nexport function TableColumnFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'key': json['key'],\n        'label': json['label'],\n        'align': json['align'] == null ? undefined : json['align'],\n        'format': json['format'] == null ? undefined : json['format'],\n    };\n}\nexport function TableColumnToJSON(json) {\n    return TableColumnToJSONTyped(json, false);\n}\nexport function TableColumnToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'key': value['key'],\n        'label': value['label'],\n        'align': value['align'],\n        'format': value['format'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { TableColumnFromJSON, TableColumnToJSON, } from './TableColumn';\n/**\n * @export\n */\nexport const TableBlockTypeEnum = {\n    Table: 'table'\n};\n/**\n * Check if a given object implements the TableBlock interface.\n */\nexport function instanceOfTableBlock(value) {\n    if (!('columns' in value) || value['columns'] === undefined)\n        return false;\n    if (!('rows' in value) || value['rows'] === undefined)\n        return false;\n    return true;\n}\nexport function TableBlockFromJSON(json) {\n    return TableBlockFromJSONTyped(json, false);\n}\nexport function TableBlockFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'type': json['type'] == null ? undefined : json['type'],\n        'caption': json['caption'] == null ? undefined : json['caption'],\n        'columns': (json['columns'].map(TableColumnFromJSON)),\n        'rows': json['rows'],\n    };\n}\nexport function TableBlockToJSON(json) {\n    return TableBlockToJSONTyped(json, false);\n}\nexport function TableBlockToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'type': value['type'],\n        'caption': value['caption'],\n        'columns': (value['columns'].map(TableColumnToJSON)),\n        'rows': value['rows'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { CalloutBlockFromJSONTyped, CalloutBlockToJSON, } from './CalloutBlock';\nimport { ChartBlockFromJSONTyped, ChartBlockToJSON, } from './ChartBlock';\nimport { DividerBlockFromJSONTyped, DividerBlockToJSON, } from './DividerBlock';\nimport { HeadingBlockFromJSONTyped, HeadingBlockToJSON, } from './HeadingBlock';\nimport { KpiGridBlockFromJSONTyped, KpiGridBlockToJSON, } from './KpiGridBlock';\nimport { ListBlockFromJSONTyped, ListBlockToJSON, } from './ListBlock';\nimport { ParagraphBlockFromJSONTyped, ParagraphBlockToJSON, } from './ParagraphBlock';\nimport { SessionListBlockFromJSONTyped, SessionListBlockToJSON, } from './SessionListBlock';\nimport { TableBlockFromJSONTyped, TableBlockToJSON, } from './TableBlock';\nexport function DocumentBlocksInnerFromJSON(json) {\n    return DocumentBlocksInnerFromJSONTyped(json, false);\n}\nexport function DocumentBlocksInnerFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    switch (json['type']) {\n        case 'callout':\n            return Object.assign({}, CalloutBlockFromJSONTyped(json, true), { type: 'callout' });\n        case 'chart':\n            return Object.assign({}, ChartBlockFromJSONTyped(json, true), { type: 'chart' });\n        case 'divider':\n            return Object.assign({}, DividerBlockFromJSONTyped(json, true), { type: 'divider' });\n        case 'heading':\n            return Object.assign({}, HeadingBlockFromJSONTyped(json, true), { type: 'heading' });\n        case 'kpi_grid':\n            return Object.assign({}, KpiGridBlockFromJSONTyped(json, true), { type: 'kpi_grid' });\n        case 'list':\n            return Object.assign({}, ListBlockFromJSONTyped(json, true), { type: 'list' });\n        case 'paragraph':\n            return Object.assign({}, ParagraphBlockFromJSONTyped(json, true), { type: 'paragraph' });\n        case 'session_list':\n            return Object.assign({}, SessionListBlockFromJSONTyped(json, true), { type: 'session_list' });\n        case 'table':\n            return Object.assign({}, TableBlockFromJSONTyped(json, true), { type: 'table' });\n        default:\n            return json;\n    }\n}\nexport function DocumentBlocksInnerToJSON(json) {\n    return DocumentBlocksInnerToJSONTyped(json, false);\n}\nexport function DocumentBlocksInnerToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    switch (value['type']) {\n        case 'callout':\n            return Object.assign({}, CalloutBlockToJSON(value), { type: 'callout' });\n        case 'chart':\n            return Object.assign({}, ChartBlockToJSON(value), { type: 'chart' });\n        case 'divider':\n            return Object.assign({}, DividerBlockToJSON(value), { type: 'divider' });\n        case 'heading':\n            return Object.assign({}, HeadingBlockToJSON(value), { type: 'heading' });\n        case 'kpi_grid':\n            return Object.assign({}, KpiGridBlockToJSON(value), { type: 'kpi_grid' });\n        case 'list':\n            return Object.assign({}, ListBlockToJSON(value), { type: 'list' });\n        case 'paragraph':\n            return Object.assign({}, ParagraphBlockToJSON(value), { type: 'paragraph' });\n        case 'session_list':\n            return Object.assign({}, SessionListBlockToJSON(value), { type: 'session_list' });\n        case 'table':\n            return Object.assign({}, TableBlockToJSON(value), { type: 'table' });\n        default:\n            return value;\n    }\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { DocumentBlocksInnerFromJSON, DocumentBlocksInnerToJSON, } from './DocumentBlocksInner';\n/**\n * Check if a given object implements the Document interface.\n */\nexport function instanceOfDocument(value) {\n    if (!('title' in value) || value['title'] === undefined)\n        return false;\n    return true;\n}\nexport function DocumentFromJSON(json) {\n    return DocumentFromJSONTyped(json, false);\n}\nexport function DocumentFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'title': json['title'],\n        'content': json['content'] == null ? undefined : json['content'],\n        'blocks': json['blocks'] == null ? undefined : (json['blocks'].map(DocumentBlocksInnerFromJSON)),\n        'html': json['html'] == null ? undefined : json['html'],\n    };\n}\nexport function DocumentToJSON(json) {\n    return DocumentToJSONTyped(json, false);\n}\nexport function DocumentToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'title': value['title'],\n        'content': value['content'],\n        'blocks': value['blocks'] == null ? undefined : (value['blocks'].map(DocumentBlocksInnerToJSON)),\n        'html': value['html'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { ClarifyingQuestionFromJSON, ClarifyingQuestionToJSON, } from './ClarifyingQuestion';\nimport { DocumentFromJSON, DocumentToJSON, } from './Document';\n/**\n * Check if a given object implements the AgentResponse interface.\n */\nexport function instanceOfAgentResponse(value) {\n    if (!('response' in value) || value['response'] === undefined)\n        return false;\n    return true;\n}\nexport function AgentResponseFromJSON(json) {\n    return AgentResponseFromJSONTyped(json, false);\n}\nexport function AgentResponseFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'response': json['response'],\n        'document': json['document'] == null ? undefined : DocumentFromJSON(json['document']),\n        'clarifyingQuestions': json['clarifying_questions'] == null ? undefined : (json['clarifying_questions'].map(ClarifyingQuestionFromJSON)),\n    };\n}\nexport function AgentResponseToJSON(json) {\n    return AgentResponseToJSONTyped(json, false);\n}\nexport function AgentResponseToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'response': value['response'],\n        'document': DocumentToJSON(value['document']),\n        'clarifying_questions': value['clarifyingQuestions'] == null ? undefined : (value['clarifyingQuestions'].map(ClarifyingQuestionToJSON)),\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { ModuleCustomizationResponseFromJSON, ModuleCustomizationResponseToJSON, } from './ModuleCustomizationResponse';\n/**\n * Check if a given object implements the ModuleCustomizationResult interface.\n */\nexport function instanceOfModuleCustomizationResult(value) {\n    if (!('moduleId' in value) || value['moduleId'] === undefined)\n        return false;\n    if (!('moduleName' in value) || value['moduleName'] === undefined)\n        return false;\n    if (!('success' in value) || value['success'] === undefined)\n        return false;\n    return true;\n}\nexport function ModuleCustomizationResultFromJSON(json) {\n    return ModuleCustomizationResultFromJSONTyped(json, false);\n}\nexport function ModuleCustomizationResultFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'moduleId': json['module_id'],\n        'moduleName': json['module_name'],\n        'success': json['success'],\n        'response': json['response'] == null ? undefined : ModuleCustomizationResponseFromJSON(json['response']),\n        'error': json['error'] == null ? undefined : json['error'],\n        'groupId': json['group_id'] == null ? undefined : json['group_id'],\n    };\n}\nexport function ModuleCustomizationResultToJSON(json) {\n    return ModuleCustomizationResultToJSONTyped(json, false);\n}\nexport function ModuleCustomizationResultToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'module_id': value['moduleId'],\n        'module_name': value['moduleName'],\n        'success': value['success'],\n        'response': ModuleCustomizationResponseToJSON(value['response']),\n        'error': value['error'],\n        'group_id': value['groupId'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { ModuleCustomizationResultFromJSON, ModuleCustomizationResultToJSON, } from './ModuleCustomizationResult';\n/**\n * Check if a given object implements the BatchCustomizationResponse interface.\n */\nexport function instanceOfBatchCustomizationResponse(value) {\n    return true;\n}\nexport function BatchCustomizationResponseFromJSON(json) {\n    return BatchCustomizationResponseFromJSONTyped(json, false);\n}\nexport function BatchCustomizationResponseFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'moduleResults': json['module_results'] == null ? undefined : (json['module_results'].map(ModuleCustomizationResultFromJSON)),\n    };\n}\nexport function BatchCustomizationResponseToJSON(json) {\n    return BatchCustomizationResponseToJSONTyped(json, false);\n}\nexport function BatchCustomizationResponseToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'module_results': value['moduleResults'] == null ? undefined : (value['moduleResults'].map(ModuleCustomizationResultToJSON)),\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { ModuleCustomizationResponseFromJSON, ModuleCustomizationResponseToJSON, } from './ModuleCustomizationResponse';\nimport { StyleTransferResult1FromJSON, StyleTransferResult1ToJSON, } from './StyleTransferResult1';\nimport { ModuleAgentTypeFromJSON, ModuleAgentTypeToJSON, } from './ModuleAgentType';\nimport { CustomModuleBundleResponseFromJSON, CustomModuleBundleResponseToJSON, } from './CustomModuleBundleResponse';\nimport { AgentResponseFromJSON, AgentResponseToJSON, } from './AgentResponse';\nimport { BatchCustomizationResponseFromJSON, BatchCustomizationResponseToJSON, } from './BatchCustomizationResponse';\n/**\n * Check if a given object implements the ModuleAgentOutput interface.\n */\nexport function instanceOfModuleAgentOutput(value) {\n    if (!('agent' in value) || value['agent'] === undefined)\n        return false;\n    if (!('message' in value) || value['message'] === undefined)\n        return false;\n    return true;\n}\nexport function ModuleAgentOutputFromJSON(json) {\n    return ModuleAgentOutputFromJSONTyped(json, false);\n}\nexport function ModuleAgentOutputFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'agent': ModuleAgentTypeFromJSON(json['agent']),\n        'message': json['message'],\n        'conversationId': json['conversation_id'] == null ? undefined : json['conversation_id'],\n        'langsmithTraceId': json['langsmith_trace_id'] == null ? undefined : json['langsmith_trace_id'],\n        'langsmithRunId': json['langsmith_run_id'] == null ? undefined : json['langsmith_run_id'],\n        'langsmithRunUrl': json['langsmith_run_url'] == null ? undefined : json['langsmith_run_url'],\n        'moduleCustomizationResult': json['module_customization_result'] == null ? undefined : ModuleCustomizationResponseFromJSON(json['module_customization_result']),\n        'batchCustomizationResult': json['batch_customization_result'] == null ? undefined : BatchCustomizationResponseFromJSON(json['batch_customization_result']),\n        'moduleGeneratorResult': json['module_generator_result'] == null ? undefined : CustomModuleBundleResponseFromJSON(json['module_generator_result']),\n        'generalResult': json['general_result'] == null ? undefined : AgentResponseFromJSON(json['general_result']),\n        'styleTransferResult': json['style_transfer_result'] == null ? undefined : StyleTransferResult1FromJSON(json['style_transfer_result']),\n    };\n}\nexport function ModuleAgentOutputToJSON(json) {\n    return ModuleAgentOutputToJSONTyped(json, false);\n}\nexport function ModuleAgentOutputToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'agent': ModuleAgentTypeToJSON(value['agent']),\n        'message': value['message'],\n        'conversation_id': value['conversationId'],\n        'langsmith_trace_id': value['langsmithTraceId'],\n        'langsmith_run_id': value['langsmithRunId'],\n        'langsmith_run_url': value['langsmithRunUrl'],\n        'module_customization_result': ModuleCustomizationResponseToJSON(value['moduleCustomizationResult']),\n        'batch_customization_result': BatchCustomizationResponseToJSON(value['batchCustomizationResult']),\n        'module_generator_result': CustomModuleBundleResponseToJSON(value['moduleGeneratorResult']),\n        'general_result': AgentResponseToJSON(value['generalResult']),\n        'style_transfer_result': StyleTransferResult1ToJSON(value['styleTransferResult']),\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Structured data requirements requested by the caller.\n * @export\n */\nexport const ModuleAgentContextRequirement = {\n    Products: 'products',\n    Tct: 'tct',\n    Bundles: 'bundles'\n};\nexport function instanceOfModuleAgentContextRequirement(value) {\n    for (const key in ModuleAgentContextRequirement) {\n        if (Object.prototype.hasOwnProperty.call(ModuleAgentContextRequirement, key)) {\n            if (ModuleAgentContextRequirement[key] === value) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\nexport function ModuleAgentContextRequirementFromJSON(json) {\n    return ModuleAgentContextRequirementFromJSONTyped(json, false);\n}\nexport function ModuleAgentContextRequirementFromJSONTyped(json, ignoreDiscriminator) {\n    return json;\n}\nexport function ModuleAgentContextRequirementToJSON(value) {\n    return value;\n}\nexport function ModuleAgentContextRequirementToJSONTyped(value, ignoreDiscriminator) {\n    return value;\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { EntityFromJSON, EntityToJSON, } from './Entity';\n/**\n * Check if a given object implements the ShopMetadata interface.\n */\nexport function instanceOfShopMetadata(value) {\n    return true;\n}\nexport function ShopMetadataFromJSON(json) {\n    return ShopMetadataFromJSONTyped(json, false);\n}\nexport function ShopMetadataFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'modules': json['modules'] == null ? undefined : json['modules'],\n        'entities': json['entities'] == null ? undefined : (json['entities'].map(EntityFromJSON)),\n    };\n}\nexport function ShopMetadataToJSON(json) {\n    return ShopMetadataToJSONTyped(json, false);\n}\nexport function ShopMetadataToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'modules': value['modules'],\n        'entities': value['entities'] == null ? undefined : (value['entities'].map(EntityToJSON)),\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Which sub-agent tools the module agent router is allowed to call.\n * @export\n */\nexport const ModuleAgentTool = {\n    ModuleCustomization: 'module_customization',\n    BatchCustomization: 'batch_customization',\n    ModuleGenerator: 'module_generator',\n    SaveModule: 'save_module',\n    ConfigEditor: 'config_editor'\n};\nexport function instanceOfModuleAgentTool(value) {\n    for (const key in ModuleAgentTool) {\n        if (Object.prototype.hasOwnProperty.call(ModuleAgentTool, key)) {\n            if (ModuleAgentTool[key] === value) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\nexport function ModuleAgentToolFromJSON(json) {\n    return ModuleAgentToolFromJSONTyped(json, false);\n}\nexport function ModuleAgentToolFromJSONTyped(json, ignoreDiscriminator) {\n    return json;\n}\nexport function ModuleAgentToolToJSON(value) {\n    return value;\n}\nexport function ModuleAgentToolToJSONTyped(value, ignoreDiscriminator) {\n    return value;\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { ModuleAgentContextRequirementFromJSON, ModuleAgentContextRequirementToJSON, } from './ModuleAgentContextRequirement';\nimport { ShopMetadataFromJSON, ShopMetadataToJSON, } from './ShopMetadata';\nimport { UserSelectedSelectorFromJSON, UserSelectedSelectorToJSON, } from './UserSelectedSelector';\nimport { ModuleAgentIterationModeFromJSON, ModuleAgentIterationModeToJSON, } from './ModuleAgentIterationMode';\nimport { ModuleAgentToolFromJSON, ModuleAgentToolToJSON, } from './ModuleAgentTool';\nimport { UserFeedbackFromJSON, UserFeedbackToJSON, } from './UserFeedback';\n/**\n * Check if a given object implements the ModuleAgentRequest interface.\n */\nexport function instanceOfModuleAgentRequest(value) {\n    if (!('orgId' in value) || value['orgId'] === undefined)\n        return false;\n    if (!('query' in value) || value['query'] === undefined)\n        return false;\n    return true;\n}\nexport function ModuleAgentRequestFromJSON(json) {\n    return ModuleAgentRequestFromJSONTyped(json, false);\n}\nexport function ModuleAgentRequestFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'orgId': json['org_id'],\n        'query': json['query'],\n        'streaming': json['streaming'] == null ? undefined : json['streaming'],\n        'conversationId': json['conversation_id'] == null ? undefined : json['conversation_id'],\n        'shopMetadata': json['shop_metadata'] == null ? undefined : ShopMetadataFromJSON(json['shop_metadata']),\n        'allowedTools': json['allowed_tools'] == null ? undefined : (json['allowed_tools'].map(ModuleAgentToolFromJSON)),\n        'layoutContext': json['layout_context'] == null ? undefined : json['layout_context'],\n        'moduleConfiguration': json['module_configuration'] == null ? undefined : json['module_configuration'],\n        'moduleType': json['module_type'] == null ? undefined : json['module_type'],\n        'userSelectedSelectors': json['user_selected_selectors'] == null ? undefined : (json['user_selected_selectors'].map(UserSelectedSelectorFromJSON)),\n        'userFeedback': json['user_feedback'] == null ? undefined : UserFeedbackFromJSON(json['user_feedback']),\n        'batchModuleConfigurations': json['batch_module_configurations'] == null ? undefined : json['batch_module_configurations'],\n        'configSchema': json['config_schema'] == null ? undefined : json['config_schema'],\n        'configValues': json['config_values'] == null ? undefined : json['config_values'],\n        'moduleBundle': json['module_bundle'] == null ? undefined : json['module_bundle'],\n        'productFilter': json['product_filter'] == null ? undefined : json['product_filter'],\n        'iterationMode': json['iteration_mode'] == null ? undefined : ModuleAgentIterationModeFromJSON(json['iteration_mode']),\n        'contextRequirements': json['context_requirements'] == null ? undefined : (json['context_requirements'].map(ModuleAgentContextRequirementFromJSON)),\n        'entityContext': json['entity_context'] == null ? undefined : json['entity_context'],\n        'imageDataUrl': json['image_data_url'] == null ? undefined : json['image_data_url'],\n        'orgName': json['org_name'] == null ? undefined : json['org_name'],\n        'shopId': json['shop_id'] == null ? undefined : json['shop_id'],\n        'shopName': json['shop_name'] == null ? undefined : json['shop_name'],\n        'tileId': json['tile_id'] == null ? undefined : json['tile_id'],\n        'tileName': json['tile_name'] == null ? undefined : json['tile_name'],\n        'customModuleId': json['custom_module_id'] == null ? undefined : json['custom_module_id'],\n        'customModuleName': json['custom_module_name'] == null ? undefined : json['custom_module_name'],\n        'sourceSurface': json['source_surface'] == null ? undefined : json['source_surface'],\n        'sourceEntrypoint': json['source_entrypoint'] == null ? undefined : json['source_entrypoint'],\n        'mcpToolName': json['mcp_tool_name'] == null ? undefined : json['mcp_tool_name'],\n        'clientRequestId': json['client_request_id'] == null ? undefined : json['client_request_id'],\n        'requestStartedAt': json['request_started_at'] == null ? undefined : json['request_started_at'],\n        'dashboardUrl': json['dashboard_url'] == null ? undefined : json['dashboard_url'],\n        'dashboardPathname': json['dashboard_pathname'] == null ? undefined : json['dashboard_pathname'],\n        'requestContext': json['request_context'] == null ? undefined : json['request_context'],\n        'activeModuleId': json['active_module_id'] == null ? undefined : json['active_module_id'],\n        'activeModuleName': json['active_module_name'] == null ? undefined : json['active_module_name'],\n        'activeModuleType': json['active_module_type'] == null ? undefined : json['active_module_type'],\n    };\n}\nexport function ModuleAgentRequestToJSON(json) {\n    return ModuleAgentRequestToJSONTyped(json, false);\n}\nexport function ModuleAgentRequestToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'org_id': value['orgId'],\n        'query': value['query'],\n        'streaming': value['streaming'],\n        'conversation_id': value['conversationId'],\n        'shop_metadata': ShopMetadataToJSON(value['shopMetadata']),\n        'allowed_tools': value['allowedTools'] == null ? undefined : (value['allowedTools'].map(ModuleAgentToolToJSON)),\n        'layout_context': value['layoutContext'],\n        'module_configuration': value['moduleConfiguration'],\n        'module_type': value['moduleType'],\n        'user_selected_selectors': value['userSelectedSelectors'] == null ? undefined : (value['userSelectedSelectors'].map(UserSelectedSelectorToJSON)),\n        'user_feedback': UserFeedbackToJSON(value['userFeedback']),\n        'batch_module_configurations': value['batchModuleConfigurations'],\n        'config_schema': value['configSchema'],\n        'config_values': value['configValues'],\n        'module_bundle': value['moduleBundle'],\n        'product_filter': value['productFilter'],\n        'iteration_mode': ModuleAgentIterationModeToJSON(value['iterationMode']),\n        'context_requirements': value['contextRequirements'] == null ? undefined : (value['contextRequirements'].map(ModuleAgentContextRequirementToJSON)),\n        'entity_context': value['entityContext'],\n        'image_data_url': value['imageDataUrl'],\n        'org_name': value['orgName'],\n        'shop_id': value['shopId'],\n        'shop_name': value['shopName'],\n        'tile_id': value['tileId'],\n        'tile_name': value['tileName'],\n        'custom_module_id': value['customModuleId'],\n        'custom_module_name': value['customModuleName'],\n        'source_surface': value['sourceSurface'],\n        'source_entrypoint': value['sourceEntrypoint'],\n        'mcp_tool_name': value['mcpToolName'],\n        'client_request_id': value['clientRequestId'],\n        'request_started_at': value['requestStartedAt'],\n        'dashboard_url': value['dashboardUrl'],\n        'dashboard_pathname': value['dashboardPathname'],\n        'request_context': value['requestContext'],\n        'active_module_id': value['activeModuleId'],\n        'active_module_name': value['activeModuleName'],\n        'active_module_type': value['activeModuleType'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { UserSelectedSelectorFromJSON, UserSelectedSelectorToJSON, } from './UserSelectedSelector';\nimport { UserFeedbackFromJSON, UserFeedbackToJSON, } from './UserFeedback';\n/**\n * Check if a given object implements the ModuleCustomizationSingleRequest interface.\n */\nexport function instanceOfModuleCustomizationSingleRequest(value) {\n    if (!('orgId' in value) || value['orgId'] === undefined)\n        return false;\n    if (!('query' in value) || value['query'] === undefined)\n        return false;\n    return true;\n}\nexport function ModuleCustomizationSingleRequestFromJSON(json) {\n    return ModuleCustomizationSingleRequestFromJSONTyped(json, false);\n}\nexport function ModuleCustomizationSingleRequestFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'orgId': json['org_id'],\n        'query': json['query'],\n        'conversationId': json['conversation_id'] == null ? undefined : json['conversation_id'],\n        'moduleConfiguration': json['module_configuration'] == null ? undefined : json['module_configuration'],\n        'moduleType': json['module_type'] == null ? undefined : json['module_type'],\n        'streaming': json['streaming'] == null ? undefined : json['streaming'],\n        'userSelectedSelectors': json['user_selected_selectors'] == null ? undefined : (json['user_selected_selectors'].map(UserSelectedSelectorFromJSON)),\n        'userFeedback': json['user_feedback'] == null ? undefined : UserFeedbackFromJSON(json['user_feedback']),\n        'contextType': json['context_type'] == null ? undefined : json['context_type'],\n        'contextId': json['context_id'] == null ? undefined : json['context_id'],\n        'moduleId': json['module_id'] == null ? undefined : json['module_id'],\n    };\n}\nexport function ModuleCustomizationSingleRequestToJSON(json) {\n    return ModuleCustomizationSingleRequestToJSONTyped(json, false);\n}\nexport function ModuleCustomizationSingleRequestToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'org_id': value['orgId'],\n        'query': value['query'],\n        'conversation_id': value['conversationId'],\n        'module_configuration': value['moduleConfiguration'],\n        'module_type': value['moduleType'],\n        'streaming': value['streaming'],\n        'user_selected_selectors': value['userSelectedSelectors'] == null ? undefined : (value['userSelectedSelectors'].map(UserSelectedSelectorToJSON)),\n        'user_feedback': UserFeedbackToJSON(value['userFeedback']),\n        'context_type': value['contextType'],\n        'context_id': value['contextId'],\n        'module_id': value['moduleId'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the ModuleGeneratorRequest interface.\n */\nexport function instanceOfModuleGeneratorRequest(value) {\n    if (!('orgId' in value) || value['orgId'] === undefined)\n        return false;\n    if (!('query' in value) || value['query'] === undefined)\n        return false;\n    return true;\n}\nexport function ModuleGeneratorRequestFromJSON(json) {\n    return ModuleGeneratorRequestFromJSONTyped(json, false);\n}\nexport function ModuleGeneratorRequestFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'orgId': json['org_id'],\n        'query': json['query'],\n        'conversationId': json['conversation_id'] == null ? undefined : json['conversation_id'],\n        'streaming': json['streaming'] == null ? undefined : json['streaming'],\n    };\n}\nexport function ModuleGeneratorRequestToJSON(json) {\n    return ModuleGeneratorRequestToJSONTyped(json, false);\n}\nexport function ModuleGeneratorRequestToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'org_id': value['orgId'],\n        'query': value['query'],\n        'conversation_id': value['conversationId'],\n        'streaming': value['streaming'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n *\n * @export\n */\nexport const GeneratedModuleStatus = {\n    Generating: 'generating',\n    Ready: 'ready',\n    Failed: 'failed'\n};\nexport function instanceOfGeneratedModuleStatus(value) {\n    for (const key in GeneratedModuleStatus) {\n        if (Object.prototype.hasOwnProperty.call(GeneratedModuleStatus, key)) {\n            if (GeneratedModuleStatus[key] === value) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\nexport function GeneratedModuleStatusFromJSON(json) {\n    return GeneratedModuleStatusFromJSONTyped(json, false);\n}\nexport function GeneratedModuleStatusFromJSONTyped(json, ignoreDiscriminator) {\n    return json;\n}\nexport function GeneratedModuleStatusToJSON(value) {\n    return value;\n}\nexport function GeneratedModuleStatusToJSONTyped(value, ignoreDiscriminator) {\n    return value;\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { GeneratedModuleStatusFromJSON, GeneratedModuleStatusToJSON, } from './GeneratedModuleStatus';\n/**\n * Check if a given object implements the ModuleJobResponse interface.\n */\nexport function instanceOfModuleJobResponse(value) {\n    if (!('id' in value) || value['id'] === undefined)\n        return false;\n    if (!('orgId' in value) || value['orgId'] === undefined)\n        return false;\n    if (!('moduleName' in value) || value['moduleName'] === undefined)\n        return false;\n    if (!('displayName' in value) || value['displayName'] === undefined)\n        return false;\n    if (!('status' in value) || value['status'] === undefined)\n        return false;\n    if (!('createdAt' in value) || value['createdAt'] === undefined)\n        return false;\n    if (!('updatedAt' in value) || value['updatedAt'] === undefined)\n        return false;\n    return true;\n}\nexport function ModuleJobResponseFromJSON(json) {\n    return ModuleJobResponseFromJSONTyped(json, false);\n}\nexport function ModuleJobResponseFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'id': json['id'],\n        'orgId': json['org_id'],\n        'moduleName': json['module_name'],\n        'displayName': json['display_name'],\n        'status': GeneratedModuleStatusFromJSON(json['status']),\n        'generatedComponent': json['generated_component'] == null ? undefined : json['generated_component'],\n        'configSchema': json['config_schema'] == null ? undefined : json['config_schema'],\n        'defaultConfig': json['default_config'] == null ? undefined : json['default_config'],\n        'description': json['description'] == null ? undefined : json['description'],\n        'error': json['error'] == null ? undefined : json['error'],\n        'createdAt': (new Date(json['created_at'])),\n        'updatedAt': (new Date(json['updated_at'])),\n    };\n}\nexport function ModuleJobResponseToJSON(json) {\n    return ModuleJobResponseToJSONTyped(json, false);\n}\nexport function ModuleJobResponseToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'id': value['id'],\n        'org_id': value['orgId'],\n        'module_name': value['moduleName'],\n        'display_name': value['displayName'],\n        'status': GeneratedModuleStatusToJSON(value['status']),\n        'generated_component': value['generatedComponent'],\n        'config_schema': value['configSchema'],\n        'default_config': value['defaultConfig'],\n        'description': value['description'],\n        'error': value['error'],\n        'created_at': value['createdAt'].toISOString(),\n        'updated_at': value['updatedAt'].toISOString(),\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the ClarifyingQuestionAnswer interface.\n */\nexport function instanceOfClarifyingQuestionAnswer(value) {\n    if (!('questionId' in value) || value['questionId'] === undefined)\n        return false;\n    if (!('question' in value) || value['question'] === undefined)\n        return false;\n    return true;\n}\nexport function ClarifyingQuestionAnswerFromJSON(json) {\n    return ClarifyingQuestionAnswerFromJSONTyped(json, false);\n}\nexport function ClarifyingQuestionAnswerFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'questionId': json['question_id'],\n        'question': json['question'],\n        'selectedOptionId': json['selected_option_id'] == null ? undefined : json['selected_option_id'],\n        'selectedOptionLabel': json['selected_option_label'] == null ? undefined : json['selected_option_label'],\n        'selectedOptionValue': json['selected_option_value'] == null ? undefined : json['selected_option_value'],\n        'customResponse': json['custom_response'] == null ? undefined : json['custom_response'],\n        'skipped': json['skipped'] == null ? undefined : json['skipped'],\n    };\n}\nexport function ClarifyingQuestionAnswerToJSON(json) {\n    return ClarifyingQuestionAnswerToJSONTyped(json, false);\n}\nexport function ClarifyingQuestionAnswerToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'question_id': value['questionId'],\n        'question': value['question'],\n        'selected_option_id': value['selectedOptionId'],\n        'selected_option_label': value['selectedOptionLabel'],\n        'selected_option_value': value['selectedOptionValue'],\n        'custom_response': value['customResponse'],\n        'skipped': value['skipped'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { UserSelectedSelectorFromJSON, UserSelectedSelectorToJSON, } from './UserSelectedSelector';\nimport { UserFeedbackFromJSON, UserFeedbackToJSON, } from './UserFeedback';\n/**\n * Check if a given object implements the EditorContext interface.\n */\nexport function instanceOfEditorContext(value) {\n    return true;\n}\nexport function EditorContextFromJSON(json) {\n    return EditorContextFromJSONTyped(json, false);\n}\nexport function EditorContextFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'shopId': json['shop_id'] == null ? undefined : json['shop_id'],\n        'shopName': json['shop_name'] == null ? undefined : json['shop_name'],\n        'tileId': json['tile_id'] == null ? undefined : json['tile_id'],\n        'tileName': json['tile_name'] == null ? undefined : json['tile_name'],\n        'activeModuleId': json['active_module_id'] == null ? undefined : json['active_module_id'],\n        'activeModuleName': json['active_module_name'] == null ? undefined : json['active_module_name'],\n        'activeModuleType': json['active_module_type'] == null ? undefined : json['active_module_type'],\n        'layoutContext': json['layout_context'] == null ? undefined : json['layout_context'],\n        'userSelectedSelectors': json['user_selected_selectors'] == null ? undefined : (json['user_selected_selectors'].map(UserSelectedSelectorFromJSON)),\n        'imageDataUrl': json['image_data_url'] == null ? undefined : json['image_data_url'],\n        'moduleConfiguration': json['module_configuration'] == null ? undefined : json['module_configuration'],\n        'moduleType': json['module_type'] == null ? undefined : json['module_type'],\n        'configSchema': json['config_schema'] == null ? undefined : json['config_schema'],\n        'configValues': json['config_values'] == null ? undefined : json['config_values'],\n        'moduleBundle': json['module_bundle'] == null ? undefined : json['module_bundle'],\n        'batchModuleConfigurations': json['batch_module_configurations'] == null ? undefined : json['batch_module_configurations'],\n        'userFeedback': json['user_feedback'] == null ? undefined : UserFeedbackFromJSON(json['user_feedback']),\n        'entityContext': json['entity_context'] == null ? undefined : json['entity_context'],\n        'customModuleId': json['custom_module_id'] == null ? undefined : json['custom_module_id'],\n        'customModuleName': json['custom_module_name'] == null ? undefined : json['custom_module_name'],\n    };\n}\nexport function EditorContextToJSON(json) {\n    return EditorContextToJSONTyped(json, false);\n}\nexport function EditorContextToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'shop_id': value['shopId'],\n        'shop_name': value['shopName'],\n        'tile_id': value['tileId'],\n        'tile_name': value['tileName'],\n        'active_module_id': value['activeModuleId'],\n        'active_module_name': value['activeModuleName'],\n        'active_module_type': value['activeModuleType'],\n        'layout_context': value['layoutContext'],\n        'user_selected_selectors': value['userSelectedSelectors'] == null ? undefined : (value['userSelectedSelectors'].map(UserSelectedSelectorToJSON)),\n        'image_data_url': value['imageDataUrl'],\n        'module_configuration': value['moduleConfiguration'],\n        'module_type': value['moduleType'],\n        'config_schema': value['configSchema'],\n        'config_values': value['configValues'],\n        'module_bundle': value['moduleBundle'],\n        'batch_module_configurations': value['batchModuleConfigurations'],\n        'user_feedback': UserFeedbackToJSON(value['userFeedback']),\n        'entity_context': value['entityContext'],\n        'custom_module_id': value['customModuleId'],\n        'custom_module_name': value['customModuleName'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { EntityFromJSON, EntityToJSON, } from './Entity';\nimport { ClarifyingQuestionAnswerFromJSON, ClarifyingQuestionAnswerToJSON, } from './ClarifyingQuestionAnswer';\nimport { ShopMetadataFromJSON, ShopMetadataToJSON, } from './ShopMetadata';\nimport { AnomalyContextFromJSON, AnomalyContextToJSON, } from './AnomalyContext';\nimport { EditorContextFromJSON, EditorContextToJSON, } from './EditorContext';\n/**\n * Check if a given object implements the OmniAgentRequest interface.\n */\nexport function instanceOfOmniAgentRequest(value) {\n    if (!('orgId' in value) || value['orgId'] === undefined)\n        return false;\n    if (!('query' in value) || value['query'] === undefined)\n        return false;\n    return true;\n}\nexport function OmniAgentRequestFromJSON(json) {\n    return OmniAgentRequestFromJSONTyped(json, false);\n}\nexport function OmniAgentRequestFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'orgId': json['org_id'],\n        'query': json['query'],\n        'conversationId': json['conversation_id'] == null ? undefined : json['conversation_id'],\n        'turnId': json['turn_id'] == null ? undefined : json['turn_id'],\n        'selectedEntities': json['selected_entities'] == null ? undefined : (json['selected_entities'].map(EntityFromJSON)),\n        'allowPersisting': json['allow_persisting'] == null ? undefined : json['allow_persisting'],\n        'shopMetadata': json['shop_metadata'] == null ? undefined : ShopMetadataFromJSON(json['shop_metadata']),\n        'streaming': json['streaming'] == null ? undefined : json['streaming'],\n        'persistedFileIds': json['persisted_file_ids'] == null ? undefined : json['persisted_file_ids'],\n        'allowedModuleTypes': json['allowed_module_types'] == null ? undefined : json['allowed_module_types'],\n        'anomalyContext': json['anomaly_context'] == null ? undefined : AnomalyContextFromJSON(json['anomaly_context']),\n        'editorContext': json['editor_context'] == null ? undefined : EditorContextFromJSON(json['editor_context']),\n        'clarifyingAnswers': json['clarifying_answers'] == null ? undefined : (json['clarifying_answers'].map(ClarifyingQuestionAnswerFromJSON)),\n        'forceBiOnly': json['force_bi_only'] == null ? undefined : json['force_bi_only'],\n    };\n}\nexport function OmniAgentRequestToJSON(json) {\n    return OmniAgentRequestToJSONTyped(json, false);\n}\nexport function OmniAgentRequestToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'org_id': value['orgId'],\n        'query': value['query'],\n        'conversation_id': value['conversationId'],\n        'turn_id': value['turnId'],\n        'selected_entities': value['selectedEntities'] == null ? undefined : (value['selectedEntities'].map(EntityToJSON)),\n        'allow_persisting': value['allowPersisting'],\n        'shop_metadata': ShopMetadataToJSON(value['shopMetadata']),\n        'streaming': value['streaming'],\n        'persisted_file_ids': value['persistedFileIds'],\n        'allowed_module_types': value['allowedModuleTypes'],\n        'anomaly_context': AnomalyContextToJSON(value['anomalyContext']),\n        'editor_context': EditorContextToJSON(value['editorContext']),\n        'clarifying_answers': value['clarifyingAnswers'] == null ? undefined : (value['clarifyingAnswers'].map(ClarifyingQuestionAnswerToJSON)),\n        'force_bi_only': value['forceBiOnly'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the RateLimitStatus interface.\n */\nexport function instanceOfRateLimitStatus(value) {\n    if (!('orgId' in value) || value['orgId'] === undefined)\n        return false;\n    if (!('tokensAvailable' in value) || value['tokensAvailable'] === undefined)\n        return false;\n    if (!('tokensMax' in value) || value['tokensMax'] === undefined)\n        return false;\n    if (!('concurrentRequests' in value) || value['concurrentRequests'] === undefined)\n        return false;\n    if (!('concurrentMax' in value) || value['concurrentMax'] === undefined)\n        return false;\n    return true;\n}\nexport function RateLimitStatusFromJSON(json) {\n    return RateLimitStatusFromJSONTyped(json, false);\n}\nexport function RateLimitStatusFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'orgId': json['org_id'],\n        'tokensAvailable': json['tokens_available'],\n        'tokensMax': json['tokens_max'],\n        'concurrentRequests': json['concurrent_requests'],\n        'concurrentMax': json['concurrent_max'],\n    };\n}\nexport function RateLimitStatusToJSON(json) {\n    return RateLimitStatusToJSONTyped(json, false);\n}\nexport function RateLimitStatusToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'org_id': value['orgId'],\n        'tokens_available': value['tokensAvailable'],\n        'tokens_max': value['tokensMax'],\n        'concurrent_requests': value['concurrentRequests'],\n        'concurrent_max': value['concurrentMax'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the SamuelCapabilities interface.\n */\nexport function instanceOfSamuelCapabilities(value) {\n    return true;\n}\nexport function SamuelCapabilitiesFromJSON(json) {\n    return SamuelCapabilitiesFromJSONTyped(json, false);\n}\nexport function SamuelCapabilitiesFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'contactLinks': json['contact_links'] == null ? undefined : json['contact_links'],\n        'externalHandoff': json['external_handoff'] == null ? undefined : json['external_handoff'],\n        'canOfferHandoffUnprompted': json['can_offer_handoff_unprompted'] == null ? undefined : json['can_offer_handoff_unprompted'],\n    };\n}\nexport function SamuelCapabilitiesToJSON(json) {\n    return SamuelCapabilitiesToJSONTyped(json, false);\n}\nexport function SamuelCapabilitiesToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'contact_links': value['contactLinks'],\n        'external_handoff': value['externalHandoff'],\n        'can_offer_handoff_unprompted': value['canOfferHandoffUnprompted'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { SamuelCapabilitiesFromJSON, SamuelCapabilitiesToJSON, } from './SamuelCapabilities';\n/**\n * Check if a given object implements the SamuelRequest interface.\n */\nexport function instanceOfSamuelRequest(value) {\n    if (!('message' in value) || value['message'] === undefined)\n        return false;\n    if (!('orgId' in value) || value['orgId'] === undefined)\n        return false;\n    return true;\n}\nexport function SamuelRequestFromJSON(json) {\n    return SamuelRequestFromJSONTyped(json, false);\n}\nexport function SamuelRequestFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'message': json['message'],\n        'orgId': json['org_id'],\n        'productHandle': json['product_handle'] == null ? undefined : json['product_handle'],\n        'productSku': json['product_sku'] == null ? undefined : json['product_sku'],\n        'productUrl': json['product_url'] == null ? undefined : json['product_url'],\n        'pageUrl': json['page_url'] == null ? undefined : json['page_url'],\n        'recentlyViewedHandles': json['recently_viewed_handles'] == null ? undefined : json['recently_viewed_handles'],\n        'askedQuestion': json['asked_question'] == null ? undefined : json['asked_question'],\n        'conversationId': json['conversation_id'] == null ? undefined : json['conversation_id'],\n        'productFunnelId': json['product_funnel_id'] == null ? undefined : json['product_funnel_id'],\n        'tileId': json['tile_id'] == null ? undefined : json['tile_id'],\n        'capabilities': json['capabilities'] == null ? undefined : SamuelCapabilitiesFromJSON(json['capabilities']),\n    };\n}\nexport function SamuelRequestToJSON(json) {\n    return SamuelRequestToJSONTyped(json, false);\n}\nexport function SamuelRequestToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'message': value['message'],\n        'org_id': value['orgId'],\n        'product_handle': value['productHandle'],\n        'product_sku': value['productSku'],\n        'product_url': value['productUrl'],\n        'page_url': value['pageUrl'],\n        'recently_viewed_handles': value['recentlyViewedHandles'],\n        'asked_question': value['askedQuestion'],\n        'conversation_id': value['conversationId'],\n        'product_funnel_id': value['productFunnelId'],\n        'tile_id': value['tileId'],\n        'capabilities': SamuelCapabilitiesToJSON(value['capabilities']),\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * @export\n */\nexport const SamuelResponseHandoffReasonEnum = {\n    Requested: 'requested',\n    Stalled: 'stalled'\n};\n/**\n * Check if a given object implements the SamuelResponse interface.\n */\nexport function instanceOfSamuelResponse(value) {\n    if (!('response' in value) || value['response'] === undefined)\n        return false;\n    if (!('conversationId' in value) || value['conversationId'] === undefined)\n        return false;\n    return true;\n}\nexport function SamuelResponseFromJSON(json) {\n    return SamuelResponseFromJSONTyped(json, false);\n}\nexport function SamuelResponseFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'response': json['response'],\n        'clarifyingQuestion': json['clarifying_question'] == null ? undefined : json['clarifying_question'],\n        'conversationId': json['conversation_id'],\n        'recommendedProductHandles': json['recommended_product_handles'] == null ? undefined : json['recommended_product_handles'],\n        'recommendedVariantExternalIds': json['recommended_variant_external_ids'] == null ? undefined : json['recommended_variant_external_ids'],\n        'carouselHeading': json['carousel_heading'] == null ? undefined : json['carousel_heading'],\n        'suggestedReplies': json['suggested_replies'] == null ? undefined : json['suggested_replies'],\n        'suggestHandoff': json['suggest_handoff'] == null ? undefined : json['suggest_handoff'],\n        'handoffReason': json['handoff_reason'] == null ? undefined : json['handoff_reason'],\n    };\n}\nexport function SamuelResponseToJSON(json) {\n    return SamuelResponseToJSONTyped(json, false);\n}\nexport function SamuelResponseToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'response': value['response'],\n        'clarifying_question': value['clarifyingQuestion'],\n        'conversation_id': value['conversationId'],\n        'recommended_product_handles': value['recommendedProductHandles'],\n        'recommended_variant_external_ids': value['recommendedVariantExternalIds'],\n        'carousel_heading': value['carouselHeading'],\n        'suggested_replies': value['suggestedReplies'],\n        'suggest_handoff': value['suggestHandoff'],\n        'handoff_reason': value['handoffReason'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the SearchRequest interface.\n */\nexport function instanceOfSearchRequest(value) {\n    if (!('query' in value) || value['query'] === undefined)\n        return false;\n    if (!('orgId' in value) || value['orgId'] === undefined)\n        return false;\n    return true;\n}\nexport function SearchRequestFromJSON(json) {\n    return SearchRequestFromJSONTyped(json, false);\n}\nexport function SearchRequestFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'query': json['query'],\n        'orgId': json['org_id'],\n        'topK': json['top_k'] == null ? undefined : json['top_k'],\n        'candidateCap': json['candidate_cap'] == null ? undefined : json['candidate_cap'],\n        'judgeTopK': json['judge_top_k'] == null ? undefined : json['judge_top_k'],\n        'dateWindowDays': json['date_window_days'] == null ? undefined : json['date_window_days'],\n        'enableJudge': json['enable_judge'] == null ? undefined : json['enable_judge'],\n    };\n}\nexport function SearchRequestToJSON(json) {\n    return SearchRequestToJSONTyped(json, false);\n}\nexport function SearchRequestToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'query': value['query'],\n        'org_id': value['orgId'],\n        'top_k': value['topK'],\n        'candidate_cap': value['candidateCap'],\n        'judge_top_k': value['judgeTopK'],\n        'date_window_days': value['dateWindowDays'],\n        'enable_judge': value['enableJudge'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the ShoppingAssistantRequest interface.\n */\nexport function instanceOfShoppingAssistantRequest(value) {\n    if (!('message' in value) || value['message'] === undefined)\n        return false;\n    if (!('heroProductHandle' in value) || value['heroProductHandle'] === undefined)\n        return false;\n    return true;\n}\nexport function ShoppingAssistantRequestFromJSON(json) {\n    return ShoppingAssistantRequestFromJSONTyped(json, false);\n}\nexport function ShoppingAssistantRequestFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'message': json['message'],\n        'productFunnelId': json['product_funnel_id'] == null ? undefined : json['product_funnel_id'],\n        'tileId': json['tile_id'] == null ? undefined : json['tile_id'],\n        'orgId': json['org_id'] == null ? undefined : json['org_id'],\n        'heroProductHandle': json['hero_product_handle'],\n        'recommendationStrategy': json['recommendation_strategy'] == null ? undefined : json['recommendation_strategy'],\n        'llmConversationId': json['llm_conversation_id'] == null ? undefined : json['llm_conversation_id'],\n    };\n}\nexport function ShoppingAssistantRequestToJSON(json) {\n    return ShoppingAssistantRequestToJSONTyped(json, false);\n}\nexport function ShoppingAssistantRequestToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'message': value['message'],\n        'product_funnel_id': value['productFunnelId'],\n        'tile_id': value['tileId'],\n        'org_id': value['orgId'],\n        'hero_product_handle': value['heroProductHandle'],\n        'recommendation_strategy': value['recommendationStrategy'],\n        'llm_conversation_id': value['llmConversationId'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the ShoppingAssistantResponse interface.\n */\nexport function instanceOfShoppingAssistantResponse(value) {\n    if (!('response' in value) || value['response'] === undefined)\n        return false;\n    if (!('llmConversationId' in value) || value['llmConversationId'] === undefined)\n        return false;\n    return true;\n}\nexport function ShoppingAssistantResponseFromJSON(json) {\n    return ShoppingAssistantResponseFromJSONTyped(json, false);\n}\nexport function ShoppingAssistantResponseFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'response': json['response'],\n        'llmConversationId': json['llm_conversation_id'],\n        'recommendedProductHandles': json['recommended_product_handles'] == null ? undefined : json['recommended_product_handles'],\n        'carouselHeading': json['carousel_heading'] == null ? undefined : json['carousel_heading'],\n        'recommendedVariantExternalIds': json['recommended_variant_external_ids'] == null ? undefined : json['recommended_variant_external_ids'],\n    };\n}\nexport function ShoppingAssistantResponseToJSON(json) {\n    return ShoppingAssistantResponseToJSONTyped(json, false);\n}\nexport function ShoppingAssistantResponseToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'response': value['response'],\n        'llm_conversation_id': value['llmConversationId'],\n        'recommended_product_handles': value['recommendedProductHandles'],\n        'carousel_heading': value['carouselHeading'],\n        'recommended_variant_external_ids': value['recommendedVariantExternalIds'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the ShoppingAssistantV2Request interface.\n */\nexport function instanceOfShoppingAssistantV2Request(value) {\n    if (!('message' in value) || value['message'] === undefined)\n        return false;\n    return true;\n}\nexport function ShoppingAssistantV2RequestFromJSON(json) {\n    return ShoppingAssistantV2RequestFromJSONTyped(json, false);\n}\nexport function ShoppingAssistantV2RequestFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'message': json['message'],\n        'productFunnelId': json['product_funnel_id'] == null ? undefined : json['product_funnel_id'],\n        'tileId': json['tile_id'] == null ? undefined : json['tile_id'],\n        'orgId': json['org_id'] == null ? undefined : json['org_id'],\n        'heroProductHandle': json['hero_product_handle'] == null ? undefined : json['hero_product_handle'],\n        'heroProductUrl': json['hero_product_url'] == null ? undefined : json['hero_product_url'],\n        'recommendationStrategy': json['recommendation_strategy'] == null ? undefined : json['recommendation_strategy'],\n        'conversationId': json['conversation_id'] == null ? undefined : json['conversation_id'],\n    };\n}\nexport function ShoppingAssistantV2RequestToJSON(json) {\n    return ShoppingAssistantV2RequestToJSONTyped(json, false);\n}\nexport function ShoppingAssistantV2RequestToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'message': value['message'],\n        'product_funnel_id': value['productFunnelId'],\n        'tile_id': value['tileId'],\n        'org_id': value['orgId'],\n        'hero_product_handle': value['heroProductHandle'],\n        'hero_product_url': value['heroProductUrl'],\n        'recommendation_strategy': value['recommendationStrategy'],\n        'conversation_id': value['conversationId'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the SimilarRequest interface.\n */\nexport function instanceOfSimilarRequest(value) {\n    if (!('sessionId' in value) || value['sessionId'] === undefined)\n        return false;\n    if (!('orgId' in value) || value['orgId'] === undefined)\n        return false;\n    return true;\n}\nexport function SimilarRequestFromJSON(json) {\n    return SimilarRequestFromJSONTyped(json, false);\n}\nexport function SimilarRequestFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'sessionId': json['session_id'],\n        'orgId': json['org_id'],\n        'topK': json['top_k'] == null ? undefined : json['top_k'],\n    };\n}\nexport function SimilarRequestToJSON(json) {\n    return SimilarRequestToJSONTyped(json, false);\n}\nexport function SimilarRequestToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'session_id': value['sessionId'],\n        'org_id': value['orgId'],\n        'top_k': value['topK'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the SimilarResult interface.\n */\nexport function instanceOfSimilarResult(value) {\n    if (!('sessionId' in value) || value['sessionId'] === undefined)\n        return false;\n    if (!('similarity' in value) || value['similarity'] === undefined)\n        return false;\n    return true;\n}\nexport function SimilarResultFromJSON(json) {\n    return SimilarResultFromJSONTyped(json, false);\n}\nexport function SimilarResultFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'sessionId': json['session_id'],\n        'similarity': json['similarity'],\n        'deviceType': json['device_type'] == null ? undefined : json['device_type'],\n        'durationSeconds': json['duration_seconds'] == null ? undefined : json['duration_seconds'],\n        'intentionScore': json['intention_score'] == null ? undefined : json['intention_score'],\n        'behavioralTags': json['behavioral_tags'] == null ? undefined : json['behavioral_tags'],\n    };\n}\nexport function SimilarResultToJSON(json) {\n    return SimilarResultToJSONTyped(json, false);\n}\nexport function SimilarResultToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'session_id': value['sessionId'],\n        'similarity': value['similarity'],\n        'device_type': value['deviceType'],\n        'duration_seconds': value['durationSeconds'],\n        'intention_score': value['intentionScore'],\n        'behavioral_tags': value['behavioralTags'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { SimilarResultFromJSON, SimilarResultToJSON, } from './SimilarResult';\n/**\n * Check if a given object implements the SimilarResponse interface.\n */\nexport function instanceOfSimilarResponse(value) {\n    if (!('sourceSessionId' in value) || value['sourceSessionId'] === undefined)\n        return false;\n    if (!('results' in value) || value['results'] === undefined)\n        return false;\n    if (!('sqlMs' in value) || value['sqlMs'] === undefined)\n        return false;\n    return true;\n}\nexport function SimilarResponseFromJSON(json) {\n    return SimilarResponseFromJSONTyped(json, false);\n}\nexport function SimilarResponseFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'sourceSessionId': json['source_session_id'],\n        'results': (json['results'].map(SimilarResultFromJSON)),\n        'sqlMs': json['sql_ms'],\n    };\n}\nexport function SimilarResponseToJSON(json) {\n    return SimilarResponseToJSONTyped(json, false);\n}\nexport function SimilarResponseToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'source_session_id': value['sourceSessionId'],\n        'results': (value['results'].map(SimilarResultToJSON)),\n        'sql_ms': value['sqlMs'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the StartModuleJobRequest interface.\n */\nexport function instanceOfStartModuleJobRequest(value) {\n    if (!('orgId' in value) || value['orgId'] === undefined)\n        return false;\n    if (!('query' in value) || value['query'] === undefined)\n        return false;\n    if (!('displayName' in value) || value['displayName'] === undefined)\n        return false;\n    return true;\n}\nexport function StartModuleJobRequestFromJSON(json) {\n    return StartModuleJobRequestFromJSONTyped(json, false);\n}\nexport function StartModuleJobRequestFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'orgId': json['org_id'],\n        'query': json['query'],\n        'displayName': json['display_name'],\n        'conversationId': json['conversation_id'] == null ? undefined : json['conversation_id'],\n        'productFilter': json['product_filter'] == null ? undefined : json['product_filter'],\n        'sourceSurface': json['source_surface'] == null ? undefined : json['source_surface'],\n        'sourceEntrypoint': json['source_entrypoint'] == null ? undefined : json['source_entrypoint'],\n        'mcpToolName': json['mcp_tool_name'] == null ? undefined : json['mcp_tool_name'],\n        'clientRequestId': json['client_request_id'] == null ? undefined : json['client_request_id'],\n        'requestStartedAt': json['request_started_at'] == null ? undefined : json['request_started_at'],\n    };\n}\nexport function StartModuleJobRequestToJSON(json) {\n    return StartModuleJobRequestToJSONTyped(json, false);\n}\nexport function StartModuleJobRequestToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'org_id': value['orgId'],\n        'query': value['query'],\n        'display_name': value['displayName'],\n        'conversation_id': value['conversationId'],\n        'product_filter': value['productFilter'],\n        'source_surface': value['sourceSurface'],\n        'source_entrypoint': value['sourceEntrypoint'],\n        'mcp_tool_name': value['mcpToolName'],\n        'client_request_id': value['clientRequestId'],\n        'request_started_at': value['requestStartedAt'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the PersistedShop interface.\n */\nexport function instanceOfPersistedShop(value) {\n    if (!('shopId' in value) || value['shopId'] === undefined)\n        return false;\n    if (!('tileId' in value) || value['tileId'] === undefined)\n        return false;\n    if (!('name' in value) || value['name'] === undefined)\n        return false;\n    return true;\n}\nexport function PersistedShopFromJSON(json) {\n    return PersistedShopFromJSONTyped(json, false);\n}\nexport function PersistedShopFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'shopId': json['shop_id'],\n        'tileId': json['tile_id'],\n        'name': json['name'],\n    };\n}\nexport function PersistedShopToJSON(json) {\n    return PersistedShopToJSONTyped(json, false);\n}\nexport function PersistedShopToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'shop_id': value['shopId'],\n        'tile_id': value['tileId'],\n        'name': value['name'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the SessionRef interface.\n */\nexport function instanceOfSessionRef(value) {\n    if (!('sessionId' in value) || value['sessionId'] === undefined)\n        return false;\n    if (!('signals' in value) || value['signals'] === undefined)\n        return false;\n    return true;\n}\nexport function SessionRefFromJSON(json) {\n    return SessionRefFromJSONTyped(json, false);\n}\nexport function SessionRefFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'sessionId': json['session_id'],\n        'signals': json['signals'],\n        'pageUrl': json['page_url'] == null ? undefined : json['page_url'],\n    };\n}\nexport function SessionRefToJSON(json) {\n    return SessionRefToJSONTyped(json, false);\n}\nexport function SessionRefToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'session_id': value['sessionId'],\n        'signals': value['signals'],\n        'page_url': value['pageUrl'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the BundleInfo interface.\n */\nexport function instanceOfBundleInfo(value) {\n    if (!('bundleId' in value) || value['bundleId'] === undefined)\n        return false;\n    if (!('bundleName' in value) || value['bundleName'] === undefined)\n        return false;\n    return true;\n}\nexport function BundleInfoFromJSON(json) {\n    return BundleInfoFromJSONTyped(json, false);\n}\nexport function BundleInfoFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'bundleId': json['bundle_id'],\n        'bundleName': json['bundle_name'],\n    };\n}\nexport function BundleInfoToJSON(json) {\n    return BundleInfoToJSONTyped(json, false);\n}\nexport function BundleInfoToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'bundle_id': value['bundleId'],\n        'bundle_name': value['bundleName'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n *\n * @export\n */\nexport const ButtonWidth = {\n    Fill: 'fill',\n    Hug: 'hug'\n};\nexport function instanceOfButtonWidth(value) {\n    for (const key in ButtonWidth) {\n        if (Object.prototype.hasOwnProperty.call(ButtonWidth, key)) {\n            if (ButtonWidth[key] === value) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\nexport function ButtonWidthFromJSON(json) {\n    return ButtonWidthFromJSONTyped(json, false);\n}\nexport function ButtonWidthFromJSONTyped(json, ignoreDiscriminator) {\n    return json;\n}\nexport function ButtonWidthToJSON(value) {\n    return value;\n}\nexport function ButtonWidthToJSONTyped(value, ignoreDiscriminator) {\n    return value;\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { EntityFromJSON, EntityToJSON, } from './Entity';\n/**\n * Check if a given object implements the Category interface.\n */\nexport function instanceOfCategory(value) {\n    if (!('id' in value) || value['id'] === undefined)\n        return false;\n    if (!('name' in value) || value['name'] === undefined)\n        return false;\n    if (!('entities' in value) || value['entities'] === undefined)\n        return false;\n    return true;\n}\nexport function CategoryFromJSON(json) {\n    return CategoryFromJSONTyped(json, false);\n}\nexport function CategoryFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return Object.assign(Object.assign({}, json), { 'id': json['id'], 'name': json['name'], 'entities': (json['entities'].map(EntityFromJSON)) });\n}\nexport function CategoryToJSON(json) {\n    return CategoryToJSONTyped(json, false);\n}\nexport function CategoryToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return Object.assign(Object.assign({}, value), { 'id': value['id'], 'name': value['name'], 'entities': (value['entities'].map(EntityToJSON)) });\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n *\n * @export\n */\nexport const AspectRatio1 = {\n    Dynamic: 'DYNAMIC',\n    Square11: 'SQUARE_1_1',\n    Landscape169: 'LANDSCAPE_16_9',\n    Landscape43: 'LANDSCAPE_4_3',\n    Landscape32: 'LANDSCAPE_3_2',\n    Portrait23: 'PORTRAIT_2_3',\n    Portrait34: 'PORTRAIT_3_4',\n    Portrait45: 'PORTRAIT_4_5',\n    Portrait12: 'PORTRAIT_1_2'\n};\nexport function instanceOfAspectRatio1(value) {\n    for (const key in AspectRatio1) {\n        if (Object.prototype.hasOwnProperty.call(AspectRatio1, key)) {\n            if (AspectRatio1[key] === value) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\nexport function AspectRatio1FromJSON(json) {\n    return AspectRatio1FromJSONTyped(json, false);\n}\nexport function AspectRatio1FromJSONTyped(json, ignoreDiscriminator) {\n    return json;\n}\nexport function AspectRatio1ToJSON(value) {\n    return value;\n}\nexport function AspectRatio1ToJSONTyped(value, ignoreDiscriminator) {\n    return value;\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n *\n * @export\n */\nexport const ButtonStyle = {\n    Primary: 'primary',\n    Secondary: 'secondary'\n};\nexport function instanceOfButtonStyle(value) {\n    for (const key in ButtonStyle) {\n        if (Object.prototype.hasOwnProperty.call(ButtonStyle, key)) {\n            if (ButtonStyle[key] === value) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\nexport function ButtonStyleFromJSON(json) {\n    return ButtonStyleFromJSONTyped(json, false);\n}\nexport function ButtonStyleFromJSONTyped(json, ignoreDiscriminator) {\n    return json;\n}\nexport function ButtonStyleToJSON(value) {\n    return value;\n}\nexport function ButtonStyleToJSONTyped(value, ignoreDiscriminator) {\n    return value;\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { ButtonWidthFromJSON, ButtonWidthToJSON, } from './ButtonWidth';\nimport { ButtonStyleFromJSON, ButtonStyleToJSON, } from './ButtonStyle';\n/**\n * Check if a given object implements the ButtonAttributes interface.\n */\nexport function instanceOfButtonAttributes(value) {\n    return true;\n}\nexport function ButtonAttributesFromJSON(json) {\n    return ButtonAttributesFromJSONTyped(json, false);\n}\nexport function ButtonAttributesFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return Object.assign(Object.assign({}, json), { 'style': json['style'] == null ? undefined : ButtonStyleFromJSON(json['style']), 'width': json['width'] == null ? undefined : ButtonWidthFromJSON(json['width']), 'color': json['color'] == null ? undefined : json['color'], 'borderRadius': json['borderRadius'] == null ? undefined : json['borderRadius'], 'backgroundColor': json['backgroundColor'] == null ? undefined : json['backgroundColor'] });\n}\nexport function ButtonAttributesToJSON(json) {\n    return ButtonAttributesToJSONTyped(json, false);\n}\nexport function ButtonAttributesToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return Object.assign(Object.assign({}, value), { 'style': ButtonStyleToJSON(value['style']), 'width': ButtonWidthToJSON(value['width']), 'color': value['color'], 'borderRadius': value['borderRadius'], 'backgroundColor': value['backgroundColor'] });\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { ButtonAttributesFromJSON, ButtonAttributesToJSON, } from './ButtonAttributes';\n/**\n * Check if a given object implements the CtaButton1 interface.\n */\nexport function instanceOfCtaButton1(value) {\n    if (!('isEnabled' in value) || value['isEnabled'] === undefined)\n        return false;\n    if (!('navigationPreferences' in value) || value['navigationPreferences'] === undefined)\n        return false;\n    if (!('attrs' in value) || value['attrs'] === undefined)\n        return false;\n    return true;\n}\nexport function CtaButton1FromJSON(json) {\n    return CtaButton1FromJSONTyped(json, false);\n}\nexport function CtaButton1FromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return Object.assign(Object.assign({}, json), { 'isEnabled': json['isEnabled'], 'navigationPreferences': json['navigationPreferences'], 'attrs': ButtonAttributesFromJSON(json['attrs']) });\n}\nexport function CtaButton1ToJSON(json) {\n    return CtaButton1ToJSONTyped(json, false);\n}\nexport function CtaButton1ToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return Object.assign(Object.assign({}, value), { 'isEnabled': value['isEnabled'], 'navigationPreferences': value['navigationPreferences'], 'attrs': ButtonAttributesToJSON(value['attrs']) });\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n *\n * @export\n */\nexport const CtaBorderRad = {\n    Rounded: 'rounded',\n    Pointy: 'pointy'\n};\nexport function instanceOfCtaBorderRad(value) {\n    for (const key in CtaBorderRad) {\n        if (Object.prototype.hasOwnProperty.call(CtaBorderRad, key)) {\n            if (CtaBorderRad[key] === value) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\nexport function CtaBorderRadFromJSON(json) {\n    return CtaBorderRadFromJSONTyped(json, false);\n}\nexport function CtaBorderRadFromJSONTyped(json, ignoreDiscriminator) {\n    return json;\n}\nexport function CtaBorderRadToJSON(value) {\n    return value;\n}\nexport function CtaBorderRadToJSONTyped(value, ignoreDiscriminator) {\n    return value;\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n *\n * @export\n */\nexport const Alignment = {\n    Left: 'left',\n    Center: 'center',\n    Right: 'right'\n};\nexport function instanceOfAlignment(value) {\n    for (const key in Alignment) {\n        if (Object.prototype.hasOwnProperty.call(Alignment, key)) {\n            if (Alignment[key] === value) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\nexport function AlignmentFromJSON(json) {\n    return AlignmentFromJSONTyped(json, false);\n}\nexport function AlignmentFromJSONTyped(json, ignoreDiscriminator) {\n    return json;\n}\nexport function AlignmentToJSON(value) {\n    return value;\n}\nexport function AlignmentToJSONTyped(value, ignoreDiscriminator) {\n    return value;\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n *\n * @export\n */\nexport const Format = {\n    Markdown: 'markdown',\n    Plaintext: 'plaintext',\n    Html: 'html'\n};\nexport function instanceOfFormat(value) {\n    for (const key in Format) {\n        if (Object.prototype.hasOwnProperty.call(Format, key)) {\n            if (Format[key] === value) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\nexport function FormatFromJSON(json) {\n    return FormatFromJSONTyped(json, false);\n}\nexport function FormatFromJSONTyped(json, ignoreDiscriminator) {\n    return json;\n}\nexport function FormatToJSON(value) {\n    return value;\n}\nexport function FormatToJSONTyped(value, ignoreDiscriminator) {\n    return value;\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n *\n * @export\n */\nexport const Display1 = {\n    Chevron: 'chevron',\n    Arrow: 'arrow'\n};\nexport function instanceOfDisplay1(value) {\n    for (const key in Display1) {\n        if (Object.prototype.hasOwnProperty.call(Display1, key)) {\n            if (Display1[key] === value) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\nexport function Display1FromJSON(json) {\n    return Display1FromJSONTyped(json, false);\n}\nexport function Display1FromJSONTyped(json, ignoreDiscriminator) {\n    return json;\n}\nexport function Display1ToJSON(value) {\n    return value;\n}\nexport function Display1ToJSONTyped(value, ignoreDiscriminator) {\n    return value;\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n *\n * @export\n */\nexport const Placement1 = {\n    InLine: 'in-line',\n    Bottom: 'bottom'\n};\nexport function instanceOfPlacement1(value) {\n    for (const key in Placement1) {\n        if (Object.prototype.hasOwnProperty.call(Placement1, key)) {\n            if (Placement1[key] === value) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\nexport function Placement1FromJSON(json) {\n    return Placement1FromJSONTyped(json, false);\n}\nexport function Placement1FromJSONTyped(json, ignoreDiscriminator) {\n    return json;\n}\nexport function Placement1ToJSON(value) {\n    return value;\n}\nexport function Placement1ToJSONTyped(value, ignoreDiscriminator) {\n    return value;\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { Display1FromJSON, Display1ToJSON, } from './Display1';\nimport { Placement1FromJSON, Placement1ToJSON, } from './Placement1';\n/**\n * Check if a given object implements the Navigation interface.\n */\nexport function instanceOfNavigation(value) {\n    if (!('display' in value) || value['display'] === undefined)\n        return false;\n    if (!('placement' in value) || value['placement'] === undefined)\n        return false;\n    return true;\n}\nexport function NavigationFromJSON(json) {\n    return NavigationFromJSONTyped(json, false);\n}\nexport function NavigationFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return Object.assign(Object.assign({}, json), { 'display': Display1FromJSON(json['display']), 'placement': Placement1FromJSON(json['placement']) });\n}\nexport function NavigationToJSON(json) {\n    return NavigationToJSONTyped(json, false);\n}\nexport function NavigationToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return Object.assign(Object.assign({}, value), { 'display': Display1ToJSON(value['display']), 'placement': Placement1ToJSON(value['placement']) });\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the Mobile6 interface.\n */\nexport function instanceOfMobile6(value) {\n    return true;\n}\nexport function Mobile6FromJSON(json) {\n    return Mobile6FromJSONTyped(json, false);\n}\nexport function Mobile6FromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return Object.assign(Object.assign({}, json), { 'vertical': json['vertical'] == null ? undefined : json['vertical'], 'horizontal': json['horizontal'] == null ? undefined : json['horizontal'] });\n}\nexport function Mobile6ToJSON(json) {\n    return Mobile6ToJSONTyped(json, false);\n}\nexport function Mobile6ToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return Object.assign(Object.assign({}, value), { 'vertical': value['vertical'], 'horizontal': value['horizontal'] });\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the Desktop7 interface.\n */\nexport function instanceOfDesktop7(value) {\n    return true;\n}\nexport function Desktop7FromJSON(json) {\n    return Desktop7FromJSONTyped(json, false);\n}\nexport function Desktop7FromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return Object.assign(Object.assign({}, json), { 'vertical': json['vertical'] == null ? undefined : json['vertical'], 'horizontal': json['horizontal'] == null ? undefined : json['horizontal'] });\n}\nexport function Desktop7ToJSON(json) {\n    return Desktop7ToJSONTyped(json, false);\n}\nexport function Desktop7ToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return Object.assign(Object.assign({}, value), { 'vertical': value['vertical'], 'horizontal': value['horizontal'] });\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { Mobile6FromJSON, Mobile6ToJSON, } from './Mobile6';\nimport { Desktop7FromJSON, Desktop7ToJSON, } from './Desktop7';\n/**\n * Check if a given object implements the Padding1 interface.\n */\nexport function instanceOfPadding1(value) {\n    return true;\n}\nexport function Padding1FromJSON(json) {\n    return Padding1FromJSONTyped(json, false);\n}\nexport function Padding1FromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return Object.assign(Object.assign({}, json), { 'desktop': json['desktop'] == null ? undefined : Desktop7FromJSON(json['desktop']), 'mobile': json['mobile'] == null ? undefined : Mobile6FromJSON(json['mobile']) });\n}\nexport function Padding1ToJSON(json) {\n    return Padding1ToJSONTyped(json, false);\n}\nexport function Padding1ToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return Object.assign(Object.assign({}, value), { 'desktop': Desktop7ToJSON(value['desktop']), 'mobile': Mobile6ToJSON(value['mobile']) });\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the Mobile5 interface.\n */\nexport function instanceOfMobile5(value) {\n    return true;\n}\nexport function Mobile5FromJSON(json) {\n    return Mobile5FromJSONTyped(json, false);\n}\nexport function Mobile5FromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return Object.assign(Object.assign({}, json), { 'height': json['height'] == null ? undefined : json['height'] });\n}\nexport function Mobile5ToJSON(json) {\n    return Mobile5ToJSONTyped(json, false);\n}\nexport function Mobile5ToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return Object.assign(Object.assign({}, value), { 'height': value['height'] });\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the Desktop6 interface.\n */\nexport function instanceOfDesktop6(value) {\n    return true;\n}\nexport function Desktop6FromJSON(json) {\n    return Desktop6FromJSONTyped(json, false);\n}\nexport function Desktop6FromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return Object.assign(Object.assign({}, json), { 'height': json['height'] == null ? undefined : json['height'] });\n}\nexport function Desktop6ToJSON(json) {\n    return Desktop6ToJSONTyped(json, false);\n}\nexport function Desktop6ToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return Object.assign(Object.assign({}, value), { 'height': value['height'] });\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { Mobile5FromJSON, Mobile5ToJSON, } from './Mobile5';\nimport { Desktop6FromJSON, Desktop6ToJSON, } from './Desktop6';\n/**\n * Check if a given object implements the Size1 interface.\n */\nexport function instanceOfSize1(value) {\n    return true;\n}\nexport function Size1FromJSON(json) {\n    return Size1FromJSONTyped(json, false);\n}\nexport function Size1FromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return Object.assign(Object.assign({}, json), { 'desktop': json['desktop'] == null ? undefined : Desktop6FromJSON(json['desktop']), 'mobile': json['mobile'] == null ? undefined : Mobile5FromJSON(json['mobile']) });\n}\nexport function Size1ToJSON(json) {\n    return Size1ToJSONTyped(json, false);\n}\nexport function Size1ToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return Object.assign(Object.assign({}, value), { 'desktop': Desktop6ToJSON(value['desktop']), 'mobile': Mobile5ToJSON(value['mobile']) });\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the Spacing1 interface.\n */\nexport function instanceOfSpacing1(value) {\n    return true;\n}\nexport function Spacing1FromJSON(json) {\n    return Spacing1FromJSONTyped(json, false);\n}\nexport function Spacing1FromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return Object.assign(Object.assign({}, json), { 'desktop': json['desktop'] == null ? undefined : json['desktop'], 'mobile': json['mobile'] == null ? undefined : json['mobile'] });\n}\nexport function Spacing1ToJSON(json) {\n    return Spacing1ToJSONTyped(json, false);\n}\nexport function Spacing1ToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return Object.assign(Object.assign({}, value), { 'desktop': value['desktop'], 'mobile': value['mobile'] });\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n *\n * @export\n */\nexport const AspectRatio3 = {\n    Dynamic: 'DYNAMIC',\n    Square11: 'SQUARE_1_1',\n    Landscape169: 'LANDSCAPE_16_9',\n    Landscape43: 'LANDSCAPE_4_3',\n    Landscape32: 'LANDSCAPE_3_2',\n    Portrait23: 'PORTRAIT_2_3',\n    Portrait34: 'PORTRAIT_3_4',\n    Portrait45: 'PORTRAIT_4_5',\n    Portrait12: 'PORTRAIT_1_2'\n};\nexport function instanceOfAspectRatio3(value) {\n    for (const key in AspectRatio3) {\n        if (Object.prototype.hasOwnProperty.call(AspectRatio3, key)) {\n            if (AspectRatio3[key] === value) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\nexport function AspectRatio3FromJSON(json) {\n    return AspectRatio3FromJSONTyped(json, false);\n}\nexport function AspectRatio3FromJSONTyped(json, ignoreDiscriminator) {\n    return json;\n}\nexport function AspectRatio3ToJSON(value) {\n    return value;\n}\nexport function AspectRatio3ToJSONTyped(value, ignoreDiscriminator) {\n    return value;\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n *\n * @export\n */\nexport const Display = {\n    FullWidth: 'Full Width',\n    PeekThrough: 'Peek Through'\n};\nexport function instanceOfDisplay(value) {\n    for (const key in Display) {\n        if (Object.prototype.hasOwnProperty.call(Display, key)) {\n            if (Display[key] === value) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\nexport function DisplayFromJSON(json) {\n    return DisplayFromJSONTyped(json, false);\n}\nexport function DisplayFromJSONTyped(json, ignoreDiscriminator) {\n    return json;\n}\nexport function DisplayToJSON(value) {\n    return value;\n}\nexport function DisplayToJSONTyped(value, ignoreDiscriminator) {\n    return value;\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { Padding1FromJSON, Padding1ToJSON, } from './Padding1';\nimport { Size1FromJSON, Size1ToJSON, } from './Size1';\nimport { Spacing1FromJSON, Spacing1ToJSON, } from './Spacing1';\nimport { AspectRatio3FromJSON, AspectRatio3ToJSON, } from './AspectRatio3';\nimport { DisplayFromJSON, DisplayToJSON, } from './Display';\n/**\n * Check if a given object implements the Attrs5 interface.\n */\nexport function instanceOfAttrs5(value) {\n    if (!('autoplay' in value) || value['autoplay'] === undefined)\n        return false;\n    if (!('display' in value) || value['display'] === undefined)\n        return false;\n    if (!('aspectRatio' in value) || value['aspectRatio'] === undefined)\n        return false;\n    return true;\n}\nexport function Attrs5FromJSON(json) {\n    return Attrs5FromJSONTyped(json, false);\n}\nexport function Attrs5FromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return Object.assign(Object.assign({}, json), { 'autoplay': json['autoplay'], 'display': DisplayFromJSON(json['display']), 'size': json['size'] == null ? undefined : Size1FromJSON(json['size']), 'aspectRatio': AspectRatio3FromJSON(json['aspectRatio']), 'spacing': json['spacing'] == null ? undefined : Spacing1FromJSON(json['spacing']), 'padding': json['padding'] == null ? undefined : Padding1FromJSON(json['padding']) });\n}\nexport function Attrs5ToJSON(json) {\n    return Attrs5ToJSONTyped(json, false);\n}\nexport function Attrs5ToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return Object.assign(Object.assign({}, value), { 'autoplay': value['autoplay'], 'display': DisplayToJSON(value['display']), 'size': Size1ToJSON(value['size']), 'aspectRatio': AspectRatio3ToJSON(value['aspectRatio']), 'spacing': Spacing1ToJSON(value['spacing']), 'padding': Padding1ToJSON(value['padding']) });\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { Attrs5FromJSON, Attrs5ToJSON, } from './Attrs5';\n/**\n * Check if a given object implements the Carousel interface.\n */\nexport function instanceOfCarousel(value) {\n    if (!('attrs' in value) || value['attrs'] === undefined)\n        return false;\n    return true;\n}\nexport function CarouselFromJSON(json) {\n    return CarouselFromJSONTyped(json, false);\n}\nexport function CarouselFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return Object.assign(Object.assign({}, json), { 'attrs': Attrs5FromJSON(json['attrs']) });\n}\nexport function CarouselToJSON(json) {\n    return CarouselToJSONTyped(json, false);\n}\nexport function CarouselToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return Object.assign(Object.assign({}, value), { 'attrs': Attrs5ToJSON(value['attrs']) });\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the Media interface.\n */\nexport function instanceOfMedia(value) {\n    if (!('src' in value) || value['src'] === undefined)\n        return false;\n    if (!('altText' in value) || value['altText'] === undefined)\n        return false;\n    return true;\n}\nexport function MediaFromJSON(json) {\n    return MediaFromJSONTyped(json, false);\n}\nexport function MediaFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return Object.assign(Object.assign({}, json), { 'src': json['src'], 'altText': json['altText'] });\n}\nexport function MediaToJSON(json) {\n    return MediaToJSONTyped(json, false);\n}\nexport function MediaToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return Object.assign(Object.assign({}, value), { 'src': value['src'], 'altText': value['altText'] });\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the Y1 interface.\n */\nexport function instanceOfY1(value) {\n    return true;\n}\nexport function Y1FromJSON(json) {\n    return Y1FromJSONTyped(json, false);\n}\nexport function Y1FromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return Object.assign(Object.assign({}, json), { 'desktop': json['desktop'] == null ? undefined : json['desktop'], 'mobile': json['mobile'] == null ? undefined : json['mobile'] });\n}\nexport function Y1ToJSON(json) {\n    return Y1ToJSONTyped(json, false);\n}\nexport function Y1ToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return Object.assign(Object.assign({}, value), { 'desktop': value['desktop'], 'mobile': value['mobile'] });\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the X1 interface.\n */\nexport function instanceOfX1(value) {\n    return true;\n}\nexport function X1FromJSON(json) {\n    return X1FromJSONTyped(json, false);\n}\nexport function X1FromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return Object.assign(Object.assign({}, json), { 'desktop': json['desktop'] == null ? undefined : json['desktop'], 'mobile': json['mobile'] == null ? undefined : json['mobile'] });\n}\nexport function X1ToJSON(json) {\n    return X1ToJSONTyped(json, false);\n}\nexport function X1ToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return Object.assign(Object.assign({}, value), { 'desktop': value['desktop'], 'mobile': value['mobile'] });\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the Height interface.\n */\nexport function instanceOfHeight(value) {\n    return true;\n}\nexport function HeightFromJSON(json) {\n    return HeightFromJSONTyped(json, false);\n}\nexport function HeightFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return Object.assign(Object.assign({}, json), { 'desktop': json['desktop'] == null ? undefined : json['desktop'], 'mobile': json['mobile'] == null ? undefined : json['mobile'] });\n}\nexport function HeightToJSON(json) {\n    return HeightToJSONTyped(json, false);\n}\nexport function HeightToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return Object.assign(Object.assign({}, value), { 'desktop': value['desktop'], 'mobile': value['mobile'] });\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the Width interface.\n */\nexport function instanceOfWidth(value) {\n    return true;\n}\nexport function WidthFromJSON(json) {\n    return WidthFromJSONTyped(json, false);\n}\nexport function WidthFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return Object.assign(Object.assign({}, json), { 'desktop': json['desktop'] == null ? undefined : json['desktop'], 'mobile': json['mobile'] == null ? undefined : json['mobile'] });\n}\nexport function WidthToJSON(json) {\n    return WidthToJSONTyped(json, false);\n}\nexport function WidthToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return Object.assign(Object.assign({}, value), { 'desktop': value['desktop'], 'mobile': value['mobile'] });\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { Y1FromJSON, Y1ToJSON, } from './Y1';\nimport { X1FromJSON, X1ToJSON, } from './X1';\nimport { HeightFromJSON, HeightToJSON, } from './Height';\nimport { WidthFromJSON, WidthToJSON, } from './Width';\n/**\n * Check if a given object implements the Crop interface.\n */\nexport function instanceOfCrop(value) {\n    return true;\n}\nexport function CropFromJSON(json) {\n    return CropFromJSONTyped(json, false);\n}\nexport function CropFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return Object.assign(Object.assign({}, json), { 'x': json['x'] == null ? undefined : X1FromJSON(json['x']), 'y': json['y'] == null ? undefined : Y1FromJSON(json['y']), 'width': json['width'] == null ? undefined : WidthFromJSON(json['width']), 'height': json['height'] == null ? undefined : HeightFromJSON(json['height']) });\n}\nexport function CropToJSON(json) {\n    return CropToJSONTyped(json, false);\n}\nexport function CropToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return Object.assign(Object.assign({}, value), { 'x': X1ToJSON(value['x']), 'y': Y1ToJSON(value['y']), 'width': WidthToJSON(value['width']), 'height': HeightToJSON(value['height']) });\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the AspectRatio interface.\n */\nexport function instanceOfAspectRatio(value) {\n    return true;\n}\nexport function AspectRatioFromJSON(json) {\n    return AspectRatioFromJSONTyped(json, false);\n}\nexport function AspectRatioFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return Object.assign(Object.assign({}, json), { 'desktop': json['desktop'] == null ? undefined : json['desktop'], 'mobile': json['mobile'] == null ? undefined : json['mobile'] });\n}\nexport function AspectRatioToJSON(json) {\n    return AspectRatioToJSONTyped(json, false);\n}\nexport function AspectRatioToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return Object.assign(Object.assign({}, value), { 'desktop': value['desktop'], 'mobile': value['mobile'] });\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the Zoom interface.\n */\nexport function instanceOfZoom(value) {\n    return true;\n}\nexport function ZoomFromJSON(json) {\n    return ZoomFromJSONTyped(json, false);\n}\nexport function ZoomFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return Object.assign(Object.assign({}, json), { 'desktop': json['desktop'] == null ? undefined : json['desktop'], 'mobile': json['mobile'] == null ? undefined : json['mobile'] });\n}\nexport function ZoomToJSON(json) {\n    return ZoomToJSONTyped(json, false);\n}\nexport function ZoomToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return Object.assign(Object.assign({}, value), { 'desktop': value['desktop'], 'mobile': value['mobile'] });\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n *\n * @export\n */\nexport const Desktop = {\n    Contain: 'contain',\n    Cover: 'cover',\n    Fill: 'fill'\n};\nexport function instanceOfDesktop(value) {\n    for (const key in Desktop) {\n        if (Object.prototype.hasOwnProperty.call(Desktop, key)) {\n            if (Desktop[key] === value) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\nexport function DesktopFromJSON(json) {\n    return DesktopFromJSONTyped(json, false);\n}\nexport function DesktopFromJSONTyped(json, ignoreDiscriminator) {\n    return json;\n}\nexport function DesktopToJSON(value) {\n    return value;\n}\nexport function DesktopToJSONTyped(value, ignoreDiscriminator) {\n    return value;\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n *\n * @export\n */\nexport const Mobile = {\n    Contain: 'contain',\n    Cover: 'cover',\n    Fill: 'fill'\n};\nexport function instanceOfMobile(value) {\n    for (const key in Mobile) {\n        if (Object.prototype.hasOwnProperty.call(Mobile, key)) {\n            if (Mobile[key] === value) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\nexport function MobileFromJSON(json) {\n    return MobileFromJSONTyped(json, false);\n}\nexport function MobileFromJSONTyped(json, ignoreDiscriminator) {\n    return json;\n}\nexport function MobileToJSON(value) {\n    return value;\n}\nexport function MobileToJSONTyped(value, ignoreDiscriminator) {\n    return value;\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { DesktopFromJSON, DesktopToJSON, } from './Desktop';\nimport { MobileFromJSON, MobileToJSON, } from './Mobile';\n/**\n * Check if a given object implements the Layout1 interface.\n */\nexport function instanceOfLayout1(value) {\n    return true;\n}\nexport function Layout1FromJSON(json) {\n    return Layout1FromJSONTyped(json, false);\n}\nexport function Layout1FromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return Object.assign(Object.assign({}, json), { 'desktop': json['desktop'] == null ? undefined : DesktopFromJSON(json['desktop']), 'mobile': json['mobile'] == null ? undefined : MobileFromJSON(json['mobile']) });\n}\nexport function Layout1ToJSON(json) {\n    return Layout1ToJSONTyped(json, false);\n}\nexport function Layout1ToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return Object.assign(Object.assign({}, value), { 'desktop': DesktopToJSON(value['desktop']), 'mobile': MobileToJSON(value['mobile']) });\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { CropFromJSON, CropToJSON, } from './Crop';\nimport { AspectRatioFromJSON, AspectRatioToJSON, } from './AspectRatio';\nimport { ZoomFromJSON, ZoomToJSON, } from './Zoom';\nimport { Layout1FromJSON, Layout1ToJSON, } from './Layout1';\n/**\n * Check if a given object implements the ImageAttributes interface.\n */\nexport function instanceOfImageAttributes(value) {\n    return true;\n}\nexport function ImageAttributesFromJSON(json) {\n    return ImageAttributesFromJSONTyped(json, false);\n}\nexport function ImageAttributesFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return Object.assign(Object.assign({}, json), { 'aspectRatio': json['aspectRatio'] == null ? undefined : AspectRatioFromJSON(json['aspectRatio']), 'zoom': json['zoom'] == null ? undefined : ZoomFromJSON(json['zoom']), 'layout': json['layout'] == null ? undefined : Layout1FromJSON(json['layout']), 'crop': json['crop'] == null ? undefined : CropFromJSON(json['crop']) });\n}\nexport function ImageAttributesToJSON(json) {\n    return ImageAttributesToJSONTyped(json, false);\n}\nexport function ImageAttributesToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return Object.assign(Object.assign({}, value), { 'aspectRatio': AspectRatioToJSON(value['aspectRatio']), 'zoom': ZoomToJSON(value['zoom']), 'layout': Layout1ToJSON(value['layout']), 'crop': CropToJSON(value['crop']) });\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { MediaFromJSON, MediaToJSON, } from './Media';\nimport { ImageAttributesFromJSON, ImageAttributesToJSON, } from './ImageAttributes';\n/**\n * Check if a given object implements the DesktopItem interface.\n */\nexport function instanceOfDesktopItem(value) {\n    if (!('content' in value) || value['content'] === undefined)\n        return false;\n    return true;\n}\nexport function DesktopItemFromJSON(json) {\n    return DesktopItemFromJSONTyped(json, false);\n}\nexport function DesktopItemFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return Object.assign(Object.assign({}, json), { 'content': MediaFromJSON(json['content']), 'attrs': json['attrs'] == null ? undefined : ImageAttributesFromJSON(json['attrs']) });\n}\nexport function DesktopItemToJSON(json) {\n    return DesktopItemToJSONTyped(json, false);\n}\nexport function DesktopItemToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return Object.assign(Object.assign({}, value), { 'content': MediaToJSON(value['content']), 'attrs': ImageAttributesToJSON(value['attrs']) });\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { MediaFromJSON, MediaToJSON, } from './Media';\nimport { ImageAttributesFromJSON, ImageAttributesToJSON, } from './ImageAttributes';\n/**\n * Check if a given object implements the MobileItem interface.\n */\nexport function instanceOfMobileItem(value) {\n    if (!('content' in value) || value['content'] === undefined)\n        return false;\n    return true;\n}\nexport function MobileItemFromJSON(json) {\n    return MobileItemFromJSONTyped(json, false);\n}\nexport function MobileItemFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return Object.assign(Object.assign({}, json), { 'content': MediaFromJSON(json['content']), 'attrs': json['attrs'] == null ? undefined : ImageAttributesFromJSON(json['attrs']) });\n}\nexport function MobileItemToJSON(json) {\n    return MobileItemToJSONTyped(json, false);\n}\nexport function MobileItemToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return Object.assign(Object.assign({}, value), { 'content': MediaToJSON(value['content']), 'attrs': ImageAttributesToJSON(value['attrs']) });\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { DesktopItemFromJSON, DesktopItemToJSON, } from './DesktopItem';\nimport { MobileItemFromJSON, MobileItemToJSON, } from './MobileItem';\n/**\n * Check if a given object implements the Media3 interface.\n */\nexport function instanceOfMedia3(value) {\n    return true;\n}\nexport function Media3FromJSON(json) {\n    return Media3FromJSONTyped(json, false);\n}\nexport function Media3FromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return Object.assign(Object.assign({}, json), { 'mobile': json['mobile'] == null ? undefined : (json['mobile'].map(MobileItemFromJSON)), 'desktop': json['desktop'] == null ? undefined : (json['desktop'].map(DesktopItemFromJSON)) });\n}\nexport function Media3ToJSON(json) {\n    return Media3ToJSONTyped(json, false);\n}\nexport function Media3ToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return Object.assign(Object.assign({}, value), { 'mobile': value['mobile'] == null ? undefined : (value['mobile'].map(MobileItemToJSON)), 'desktop': value['desktop'] == null ? undefined : (value['desktop'].map(DesktopItemToJSON)) });\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { NavigationFromJSON, NavigationToJSON, } from './Navigation';\nimport { CarouselFromJSON, CarouselToJSON, } from './Carousel';\nimport { Media3FromJSON, Media3ToJSON, } from './Media3';\n/**\n * Check if a given object implements the Components3 interface.\n */\nexport function instanceOfComponents3(value) {\n    if (!('carousel' in value) || value['carousel'] === undefined)\n        return false;\n    return true;\n}\nexport function Components3FromJSON(json) {\n    return Components3FromJSONTyped(json, false);\n}\nexport function Components3FromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return Object.assign(Object.assign({}, json), { 'media': json['media'] == null ? undefined : Media3FromJSON(json['media']), 'carousel': CarouselFromJSON(json['carousel']), 'navigation': json['navigation'] == null ? undefined : NavigationFromJSON(json['navigation']), 'background': json['background'] == null ? undefined : json['background'] });\n}\nexport function Components3ToJSON(json) {\n    return Components3ToJSONTyped(json, false);\n}\nexport function Components3ToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return Object.assign(Object.assign({}, value), { 'media': Media3ToJSON(value['media']), 'carousel': CarouselToJSON(value['carousel']), 'navigation': NavigationToJSON(value['navigation']), 'background': value['background'] });\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n *\n * @export\n */\nexport const DeviceType = {\n    Mobile: 'mobile',\n    Desktop: 'desktop',\n    Tablet: 'tablet'\n};\nexport function instanceOfDeviceType(value) {\n    for (const key in DeviceType) {\n        if (Object.prototype.hasOwnProperty.call(DeviceType, key)) {\n            if (DeviceType[key] === value) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\nexport function DeviceTypeFromJSON(json) {\n    return DeviceTypeFromJSONTyped(json, false);\n}\nexport function DeviceTypeFromJSONTyped(json, ignoreDiscriminator) {\n    return json;\n}\nexport function DeviceTypeToJSON(value) {\n    return value;\n}\nexport function DeviceTypeToJSONTyped(value, ignoreDiscriminator) {\n    return value;\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the Layout interface.\n */\nexport function instanceOfLayout(value) {\n    if (!('name' in value) || value['name'] === undefined)\n        return false;\n    return true;\n}\nexport function LayoutFromJSON(json) {\n    return LayoutFromJSONTyped(json, false);\n}\nexport function LayoutFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return Object.assign(Object.assign({}, json), { 'name': json['name'] });\n}\nexport function LayoutToJSON(json) {\n    return LayoutToJSONTyped(json, false);\n}\nexport function LayoutToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return Object.assign(Object.assign({}, value), { 'name': value['name'] });\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n *\n * @export\n */\nexport const DeliveryCadenceOrder = {\n    Asc: 'asc',\n    Desc: 'desc'\n};\nexport function instanceOfDeliveryCadenceOrder(value) {\n    for (const key in DeliveryCadenceOrder) {\n        if (Object.prototype.hasOwnProperty.call(DeliveryCadenceOrder, key)) {\n            if (DeliveryCadenceOrder[key] === value) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\nexport function DeliveryCadenceOrderFromJSON(json) {\n    return DeliveryCadenceOrderFromJSONTyped(json, false);\n}\nexport function DeliveryCadenceOrderFromJSONTyped(json, ignoreDiscriminator) {\n    return json;\n}\nexport function DeliveryCadenceOrderToJSON(value) {\n    return value;\n}\nexport function DeliveryCadenceOrderToJSONTyped(value, ignoreDiscriminator) {\n    return value;\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n *\n * @export\n */\nexport const ViewType = {\n    Compact: 'compact',\n    Expanded: 'expanded'\n};\nexport function instanceOfViewType(value) {\n    for (const key in ViewType) {\n        if (Object.prototype.hasOwnProperty.call(ViewType, key)) {\n            if (ViewType[key] === value) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\nexport function ViewTypeFromJSON(json) {\n    return ViewTypeFromJSONTyped(json, false);\n}\nexport function ViewTypeFromJSONTyped(json, ignoreDiscriminator) {\n    return json;\n}\nexport function ViewTypeToJSON(value) {\n    return value;\n}\nexport function ViewTypeToJSONTyped(value, ignoreDiscriminator) {\n    return value;\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { DeliveryCadenceOrderFromJSON, DeliveryCadenceOrderToJSON, } from './DeliveryCadenceOrder';\nimport { ViewTypeFromJSON, ViewTypeToJSON, } from './ViewType';\n/**\n * Check if a given object implements the SubscriptionOptions interface.\n */\nexport function instanceOfSubscriptionOptions(value) {\n    if (!('deliveryCadenceOrder' in value) || value['deliveryCadenceOrder'] === undefined)\n        return false;\n    if (!('viewType' in value) || value['viewType'] === undefined)\n        return false;\n    return true;\n}\nexport function SubscriptionOptionsFromJSON(json) {\n    return SubscriptionOptionsFromJSONTyped(json, false);\n}\nexport function SubscriptionOptionsFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return Object.assign(Object.assign({}, json), { 'deliveryCadenceOrder': DeliveryCadenceOrderFromJSON(json['deliveryCadenceOrder']), 'viewType': ViewTypeFromJSON(json['viewType']) });\n}\nexport function SubscriptionOptionsToJSON(json) {\n    return SubscriptionOptionsToJSONTyped(json, false);\n}\nexport function SubscriptionOptionsToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return Object.assign(Object.assign({}, value), { 'deliveryCadenceOrder': DeliveryCadenceOrderToJSON(value['deliveryCadenceOrder']), 'viewType': ViewTypeToJSON(value['viewType']) });\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { DeviceTypeFromJSON, DeviceTypeToJSON, } from './DeviceType';\nimport { LayoutFromJSON, LayoutToJSON, } from './Layout';\nimport { SubscriptionOptionsFromJSON, SubscriptionOptionsToJSON, } from './SubscriptionOptions';\n/**\n * @export\n */\nexport const VariantSelectorModuleModuleNameEnum = {\n    ModuleVariantSelector: 'module/variantSelector'\n};\n/**\n * @export\n */\nexport const VariantSelectorModuleVersionEnum = {\n    _20250124: '2025_01_24'\n};\n/**\n * Check if a given object implements the VariantSelectorModule interface.\n */\nexport function instanceOfVariantSelectorModule(value) {\n    if (!('id' in value) || value['id'] === undefined)\n        return false;\n    if (!('moduleName' in value) || value['moduleName'] === undefined)\n        return false;\n    if (!('version' in value) || value['version'] === undefined)\n        return false;\n    if (!('showVariantSelectorsAboveSubSelectors' in value) || value['showVariantSelectorsAboveSubSelectors'] === undefined)\n        return false;\n    if (!('subscriptionOptions' in value) || value['subscriptionOptions'] === undefined)\n        return false;\n    return true;\n}\nexport function VariantSelectorModuleFromJSON(json) {\n    return VariantSelectorModuleFromJSONTyped(json, false);\n}\nexport function VariantSelectorModuleFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return Object.assign(Object.assign({}, json), { 'id': json['id'], 'displayName': json['displayName'] == null ? undefined : json['displayName'], 'favoriteModuleId': json['favoriteModuleId'] == null ? undefined : json['favoriteModuleId'], 'layout': json['layout'] == null ? undefined : LayoutFromJSON(json['layout']), 'deviceType': json['deviceType'] == null ? undefined : DeviceTypeFromJSON(json['deviceType']), 'moduleName': json['__moduleName'], 'version': json['version'], 'showVariantSelectorsAboveSubSelectors': json['showVariantSelectorsAboveSubSelectors'], 'subscriptionOptions': SubscriptionOptionsFromJSON(json['subscriptionOptions']), 'hidePurchaseOptions': json['hidePurchaseOptions'] == null ? undefined : json['hidePurchaseOptions'], 'hideVariants': json['hideVariants'] == null ? undefined : json['hideVariants'] });\n}\nexport function VariantSelectorModuleToJSON(json) {\n    return VariantSelectorModuleToJSONTyped(json, false);\n}\nexport function VariantSelectorModuleToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return Object.assign(Object.assign({}, value), { 'id': value['id'], 'displayName': value['displayName'], 'favoriteModuleId': value['favoriteModuleId'], 'layout': LayoutToJSON(value['layout']), 'deviceType': DeviceTypeToJSON(value['deviceType']), '__moduleName': value['moduleName'], 'version': value['version'], 'showVariantSelectorsAboveSubSelectors': value['showVariantSelectorsAboveSubSelectors'], 'subscriptionOptions': SubscriptionOptionsToJSON(value['subscriptionOptions']), 'hidePurchaseOptions': value['hidePurchaseOptions'], 'hideVariants': value['hideVariants'] });\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { EntityFromJSON, EntityToJSON, } from './Entity';\n/**\n * Check if a given object implements the HeroProduct interface.\n */\nexport function instanceOfHeroProduct(value) {\n    if (!('imageUrl' in value) || value['imageUrl'] === undefined)\n        return false;\n    return true;\n}\nexport function HeroProductFromJSON(json) {\n    return HeroProductFromJSONTyped(json, false);\n}\nexport function HeroProductFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return Object.assign(Object.assign({}, json), { 'imageUrl': json['imageUrl'], 'productHandle': json['productHandle'] == null ? undefined : json['productHandle'], 'entity': json['entity'] == null ? undefined : EntityFromJSON(json['entity']) });\n}\nexport function HeroProductToJSON(json) {\n    return HeroProductToJSONTyped(json, false);\n}\nexport function HeroProductToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return Object.assign(Object.assign({}, value), { 'imageUrl': value['imageUrl'], 'productHandle': value['productHandle'], 'entity': EntityToJSON(value['entity']) });\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the TestimonialReview interface.\n */\nexport function instanceOfTestimonialReview(value) {\n    if (!('rating' in value) || value['rating'] === undefined)\n        return false;\n    return true;\n}\nexport function TestimonialReviewFromJSON(json) {\n    return TestimonialReviewFromJSONTyped(json, false);\n}\nexport function TestimonialReviewFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return Object.assign(Object.assign({}, json), { 'title': json['title'] == null ? undefined : json['title'], 'content': json['content'] == null ? undefined : json['content'], 'quote': json['quote'] == null ? undefined : json['quote'], 'reviewerName': json['reviewerName'] == null ? undefined : json['reviewerName'], 'author': json['author'] == null ? undefined : json['author'], 'rating': json['rating'], 'date': json['date'] == null ? undefined : json['date'], 'imageUrl': json['imageUrl'] == null ? undefined : json['imageUrl'] });\n}\nexport function TestimonialReviewToJSON(json) {\n    return TestimonialReviewToJSONTyped(json, false);\n}\nexport function TestimonialReviewToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return Object.assign(Object.assign({}, value), { 'title': value['title'], 'content': value['content'], 'quote': value['quote'], 'reviewerName': value['reviewerName'], 'author': value['author'], 'rating': value['rating'], 'date': value['date'], 'imageUrl': value['imageUrl'] });\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n *\n * @export\n */\nexport const TabStyle = {\n    Underline: 'underline',\n    Chips: 'chips'\n};\nexport function instanceOfTabStyle(value) {\n    for (const key in TabStyle) {\n        if (Object.prototype.hasOwnProperty.call(TabStyle, key)) {\n            if (TabStyle[key] === value) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\nexport function TabStyleFromJSON(json) {\n    return TabStyleFromJSONTyped(json, false);\n}\nexport function TabStyleFromJSONTyped(json, ignoreDiscriminator) {\n    return json;\n}\nexport function TabStyleToJSON(value) {\n    return value;\n}\nexport function TabStyleToJSONTyped(value, ignoreDiscriminator) {\n    return value;\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n *\n * @export\n */\nexport const StickyPosition = {\n    Top: 'top',\n    Bottom: 'bottom'\n};\nexport function instanceOfStickyPosition(value) {\n    for (const key in StickyPosition) {\n        if (Object.prototype.hasOwnProperty.call(StickyPosition, key)) {\n            if (StickyPosition[key] === value) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\nexport function StickyPositionFromJSON(json) {\n    return StickyPositionFromJSONTyped(json, false);\n}\nexport function StickyPositionFromJSONTyped(json, ignoreDiscriminator) {\n    return json;\n}\nexport function StickyPositionToJSON(value) {\n    return value;\n}\nexport function StickyPositionToJSONTyped(value, ignoreDiscriminator) {\n    return value;\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n *\n * @export\n */\nexport const Color = {\n    Black: 'black',\n    Lemon: 'lemon',\n    KourtneyLime: 'kourtneyLime',\n    KourtneyPurple: 'kourtneyPurple'\n};\nexport function instanceOfColor(value) {\n    for (const key in Color) {\n        if (Object.prototype.hasOwnProperty.call(Color, key)) {\n            if (Color[key] === value) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\nexport function ColorFromJSON(json) {\n    return ColorFromJSONTyped(json, false);\n}\nexport function ColorFromJSONTyped(json, ignoreDiscriminator) {\n    return json;\n}\nexport function ColorToJSON(value) {\n    return value;\n}\nexport function ColorToJSONTyped(value, ignoreDiscriminator) {\n    return value;\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n *\n * @export\n */\nexport const CtaBtnStyle = {\n    Rounded: 'rounded',\n    Pointy: 'pointy'\n};\nexport function instanceOfCtaBtnStyle(value) {\n    for (const key in CtaBtnStyle) {\n        if (Object.prototype.hasOwnProperty.call(CtaBtnStyle, key)) {\n            if (CtaBtnStyle[key] === value) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\nexport function CtaBtnStyleFromJSON(json) {\n    return CtaBtnStyleFromJSONTyped(json, false);\n}\nexport function CtaBtnStyleFromJSONTyped(json, ignoreDiscriminator) {\n    return json;\n}\nexport function CtaBtnStyleToJSON(value) {\n    return value;\n}\nexport function CtaBtnStyleToJSONTyped(value, ignoreDiscriminator) {\n    return value;\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the Section interface.\n */\nexport function instanceOfSection(value) {\n    if (!('title' in value) || value['title'] === undefined)\n        return false;\n    if (!('content' in value) || value['content'] === undefined)\n        return false;\n    return true;\n}\nexport function SectionFromJSON(json) {\n    return SectionFromJSONTyped(json, false);\n}\nexport function SectionFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return Object.assign(Object.assign({}, json), { 'title': json['title'], 'content': json['content'] });\n}\nexport function SectionToJSON(json) {\n    return SectionToJSONTyped(json, false);\n}\nexport function SectionToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return Object.assign(Object.assign({}, value), { 'title': value['title'], 'content': value['content'] });\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the Avatar interface.\n */\nexport function instanceOfAvatar(value) {\n    if (!('src' in value) || value['src'] === undefined)\n        return false;\n    if (!('altText' in value) || value['altText'] === undefined)\n        return false;\n    return true;\n}\nexport function AvatarFromJSON(json) {\n    return AvatarFromJSONTyped(json, false);\n}\nexport function AvatarFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return Object.assign(Object.assign({}, json), { 'src': json['src'], 'altText': json['altText'] });\n}\nexport function AvatarToJSON(json) {\n    return AvatarToJSONTyped(json, false);\n}\nexport function AvatarToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return Object.assign(Object.assign({}, value), { 'src': value['src'], 'altText': value['altText'] });\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n *\n * @export\n */\nexport const Theme = {\n    Lime: 'lime',\n    White: 'white',\n    Creme: 'creme',\n    LightGray: 'lightGray',\n    Black: 'black',\n    ArmraLime: 'armraLime',\n    Lilac: 'lilac',\n    Mint: 'mint',\n    Lemon: 'lemon'\n};\nexport function instanceOfTheme(value) {\n    for (const key in Theme) {\n        if (Object.prototype.hasOwnProperty.call(Theme, key)) {\n            if (Theme[key] === value) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\nexport function ThemeFromJSON(json) {\n    return ThemeFromJSONTyped(json, false);\n}\nexport function ThemeFromJSONTyped(json, ignoreDiscriminator) {\n    return json;\n}\nexport function ThemeToJSON(value) {\n    return value;\n}\nexport function ThemeToJSONTyped(value, ignoreDiscriminator) {\n    return value;\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n *\n * @export\n */\nexport const Style = {\n    Primary: 'primary',\n    Secondary: 'secondary',\n    Default: 'default'\n};\nexport function instanceOfStyle(value) {\n    for (const key in Style) {\n        if (Object.prototype.hasOwnProperty.call(Style, key)) {\n            if (Style[key] === value) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\nexport function StyleFromJSON(json) {\n    return StyleFromJSONTyped(json, false);\n}\nexport function StyleFromJSONTyped(json, ignoreDiscriminator) {\n    return json;\n}\nexport function StyleToJSON(value) {\n    return value;\n}\nexport function StyleToJSONTyped(value, ignoreDiscriminator) {\n    return value;\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { ButtonWidthFromJSON, ButtonWidthToJSON, } from './ButtonWidth';\nimport { StyleFromJSON, StyleToJSON, } from './Style';\n/**\n * Check if a given object implements the ButtonStyle1 interface.\n */\nexport function instanceOfButtonStyle1(value) {\n    return true;\n}\nexport function ButtonStyle1FromJSON(json) {\n    return ButtonStyle1FromJSONTyped(json, false);\n}\nexport function ButtonStyle1FromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return Object.assign(Object.assign({}, json), { 'style': json['style'] == null ? undefined : StyleFromJSON(json['style']), 'width': json['width'] == null ? undefined : ButtonWidthFromJSON(json['width']) });\n}\nexport function ButtonStyle1ToJSON(json) {\n    return ButtonStyle1ToJSONTyped(json, false);\n}\nexport function ButtonStyle1ToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return Object.assign(Object.assign({}, value), { 'style': StyleToJSON(value['style']), 'width': ButtonWidthToJSON(value['width']) });\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n *\n * @export\n */\nexport const Name = {\n    _100Guarantee: '100-guarantee',\n    _100: '100',\n    _5StarReview: '5-star-review',\n    Affordable: 'affordable',\n    Approved: 'approved',\n    BCorp: 'b-corp',\n    BoxPackage: 'box-package',\n    BoxProductShipping: 'box-product-shipping',\n    Calories: 'calories',\n    Certified: 'certified',\n    Clean: 'clean',\n    ClinicallyTested: 'clinically-tested',\n    ContainsShellfish: 'contains-shellfish',\n    CrueltyFree: 'cruelty-free',\n    CustomerService: 'customer-service',\n    DairyFree: 'dairy-free',\n    Dermatology: 'dermatology',\n    DishwasherSafe: 'dishwasher-safe',\n    DoubleCheck: 'double-check',\n    Fast: 'fast',\n    Fiber: 'fiber',\n    Flame: 'flame',\n    FreeShipping: 'free-shipping',\n    Free: 'free',\n    GiftBox: 'gift-box',\n    GiftBoxAlt: 'gift-box-alt',\n    GlutenFree: 'gluten-free',\n    Halal: 'halal',\n    Happy: 'happy',\n    Heart: 'heart',\n    HormoneFree: 'hormone-free',\n    Kosher: 'kosher',\n    NewIcon: 'new-icon',\n    NonGmo: 'non-gmo',\n    Non: 'non',\n    NutFree: 'nut-free',\n    OekoTex: 'oeko-tex',\n    PackingBox: 'packing-box',\n    PlantBased: 'plant-based',\n    PotteryMan: 'pottery-man',\n    PregnancySafe: 'pregnancy-safe',\n    Protein: 'protein',\n    Recyclable: 'recyclable',\n    Repurpose: 'repurpose',\n    Return: 'return',\n    Scientifically: 'scientifically',\n    ShieldCheck: 'shield-check',\n    ShirtWithHanger: 'shirt-with-hanger',\n    Star: 'star',\n    Strength: 'strength',\n    Sugarfree: 'sugarfree',\n    Three: 'three',\n    TsaApproved: 'tsa-approved',\n    TShirt: 't-shirt',\n    UsFlag: 'us-flag',\n    Vegan: 'vegan',\n    WaterDroplet: 'water-droplet',\n    Zero: 'zero'\n};\nexport function instanceOfName(value) {\n    for (const key in Name) {\n        if (Object.prototype.hasOwnProperty.call(Name, key)) {\n            if (Name[key] === value) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\nexport function NameFromJSON(json) {\n    return NameFromJSONTyped(json, false);\n}\nexport function NameFromJSONTyped(json, ignoreDiscriminator) {\n    return json;\n}\nexport function NameToJSON(value) {\n    return value;\n}\nexport function NameToJSONTyped(value, ignoreDiscriminator) {\n    return value;\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { NameFromJSON, NameToJSON, } from './Name';\n/**\n * Check if a given object implements the Icon interface.\n */\nexport function instanceOfIcon(value) {\n    return true;\n}\nexport function IconFromJSON(json) {\n    return IconFromJSONTyped(json, false);\n}\nexport function IconFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return Object.assign(Object.assign({}, json), { 'name': json['name'] == null ? undefined : NameFromJSON(json['name']), 'label': json['label'] == null ? undefined : json['label'], 'link': json['link'] == null ? undefined : json['link'] });\n}\nexport function IconToJSON(json) {\n    return IconToJSONTyped(json, false);\n}\nexport function IconToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return Object.assign(Object.assign({}, value), { 'name': NameToJSON(value['name']), 'label': value['label'], 'link': value['link'] });\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n *\n * @export\n */\nexport const Position2 = {\n    Inline: 'inline',\n    Sticky: 'sticky',\n    ScrollPast: 'scroll-past'\n};\nexport function instanceOfPosition2(value) {\n    for (const key in Position2) {\n        if (Object.prototype.hasOwnProperty.call(Position2, key)) {\n            if (Position2[key] === value) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\nexport function Position2FromJSON(json) {\n    return Position2FromJSONTyped(json, false);\n}\nexport function Position2FromJSONTyped(json, ignoreDiscriminator) {\n    return json;\n}\nexport function Position2ToJSON(value) {\n    return value;\n}\nexport function Position2ToJSONTyped(value, ignoreDiscriminator) {\n    return value;\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { ButtonWidthFromJSON, ButtonWidthToJSON, } from './ButtonWidth';\nimport { EntityFromJSON, EntityToJSON, } from './Entity';\nimport { CategoryFromJSON, CategoryToJSON, } from './Category';\nimport { AspectRatio1FromJSON, AspectRatio1ToJSON, } from './AspectRatio1';\nimport { CtaButton1FromJSON, CtaButton1ToJSON, } from './CtaButton1';\nimport { CtaBorderRadFromJSON, CtaBorderRadToJSON, } from './CtaBorderRad';\nimport { AlignmentFromJSON, AlignmentToJSON, } from './Alignment';\nimport { FormatFromJSON, FormatToJSON, } from './Format';\nimport { Components3FromJSON, Components3ToJSON, } from './Components3';\nimport { VariantSelectorModuleFromJSON, VariantSelectorModuleToJSON, } from './VariantSelectorModule';\nimport { HeroProductFromJSON, HeroProductToJSON, } from './HeroProduct';\nimport { TestimonialReviewFromJSON, TestimonialReviewToJSON, } from './TestimonialReview';\nimport { ButtonStyleFromJSON, ButtonStyleToJSON, } from './ButtonStyle';\nimport { TabStyleFromJSON, TabStyleToJSON, } from './TabStyle';\nimport { StickyPositionFromJSON, StickyPositionToJSON, } from './StickyPosition';\nimport { ColorFromJSON, ColorToJSON, } from './Color';\nimport { CtaBtnStyleFromJSON, CtaBtnStyleToJSON, } from './CtaBtnStyle';\nimport { SectionFromJSON, SectionToJSON, } from './Section';\nimport { AvatarFromJSON, AvatarToJSON, } from './Avatar';\nimport { DeviceTypeFromJSON, DeviceTypeToJSON, } from './DeviceType';\nimport { LayoutFromJSON, LayoutToJSON, } from './Layout';\nimport { ThemeFromJSON, ThemeToJSON, } from './Theme';\nimport { ButtonStyle1FromJSON, ButtonStyle1ToJSON, } from './ButtonStyle1';\nimport { IconFromJSON, IconToJSON, } from './Icon';\nimport { Position2FromJSON, Position2ToJSON, } from './Position2';\n/**\n * @export\n */\nexport const ModuleVersionEnum = {\n    _20250728: '2025_07_28'\n};\n/**\n * Check if a given object implements the Module interface.\n */\nexport function instanceOfModule(value) {\n    if (!('id' in value) || value['id'] === undefined)\n        return false;\n    if (!('moduleName' in value) || value['moduleName'] === undefined)\n        return false;\n    if (!('content' in value) || value['content'] === undefined)\n        return false;\n    if (!('sections' in value) || value['sections'] === undefined)\n        return false;\n    if (!('position' in value) || value['position'] === undefined)\n        return false;\n    if (!('version' in value) || value['version'] === undefined)\n        return false;\n    if (!('heroProduct' in value) || value['heroProduct'] === undefined)\n        return false;\n    if (!('profilePicture' in value) || value['profilePicture'] === undefined)\n        return false;\n    if (!('components' in value) || value['components'] === undefined)\n        return false;\n    if (!('showReviews' in value) || value['showReviews'] === undefined)\n        return false;\n    if (!('showAuthor' in value) || value['showAuthor'] === undefined)\n        return false;\n    if (!('showDate' in value) || value['showDate'] === undefined)\n        return false;\n    if (!('icons' in value) || value['icons'] === undefined)\n        return false;\n    if (!('text' in value) || value['text'] === undefined)\n        return false;\n    if (!('ctaBorderRad' in value) || value['ctaBorderRad'] === undefined)\n        return false;\n    if (!('entity' in value) || value['entity'] === undefined)\n        return false;\n    if (!('showDefaultVariant' in value) || value['showDefaultVariant'] === undefined)\n        return false;\n    if (!('ctaButton' in value) || value['ctaButton'] === undefined)\n        return false;\n    if (!('websiteLink' in value) || value['websiteLink'] === undefined)\n        return false;\n    if (!('format' in value) || value['format'] === undefined)\n        return false;\n    if (!('columns' in value) || value['columns'] === undefined)\n        return false;\n    if (!('columnSpacing' in value) || value['columnSpacing'] === undefined)\n        return false;\n    if (!('variantSelectorModuleProps' in value) || value['variantSelectorModuleProps'] === undefined)\n        return false;\n    if (!('showProductDetails' in value) || value['showProductDetails'] === undefined)\n        return false;\n    if (!('showSubtitle' in value) || value['showSubtitle'] === undefined)\n        return false;\n    return true;\n}\nexport function ModuleFromJSON(json) {\n    return ModuleFromJSONTyped(json, false);\n}\nexport function ModuleFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'id': json['id'],\n        'displayName': json['displayName'] == null ? undefined : json['displayName'],\n        'favoriteModuleId': json['favoriteModuleId'] == null ? undefined : json['favoriteModuleId'],\n        'layout': json['layout'] == null ? undefined : LayoutFromJSON(json['layout']),\n        'deviceType': json['deviceType'] == null ? undefined : DeviceTypeFromJSON(json['deviceType']),\n        'moduleName': json['__moduleName'],\n        'inheritOfferMessaging': json['inheritOfferMessaging'] == null ? undefined : json['inheritOfferMessaging'],\n        'content': json['content'],\n        'theme': json['theme'] == null ? undefined : ThemeFromJSON(json['theme']),\n        'textColor': json['textColor'] == null ? undefined : json['textColor'],\n        'hexColor': json['hexColor'] == null ? undefined : json['hexColor'],\n        'title': json['title'] == null ? undefined : json['title'],\n        'subtitle': json['subtitle'] == null ? undefined : json['subtitle'],\n        'sections': (json['sections'].map(SectionFromJSON)),\n        'isAccordionInitialOpen': json['isAccordionInitialOpen'] == null ? undefined : json['isAccordionInitialOpen'],\n        'position': Position2FromJSON(json['position']),\n        'avatar': json['avatar'] == null ? undefined : AvatarFromJSON(json['avatar']),\n        'primaryText': json['primaryText'] == null ? undefined : json['primaryText'],\n        'secondaryText': json['secondaryText'] == null ? undefined : json['secondaryText'],\n        'version': json['version'],\n        'orgName': json['orgName'] == null ? undefined : json['orgName'],\n        'heroProduct': HeroProductFromJSON(json['heroProduct']),\n        'profilePicture': json['profilePicture'],\n        'components': Components3FromJSON(json['components']),\n        'showReviews': json['showReviews'],\n        'showAuthor': json['showAuthor'],\n        'showDate': json['showDate'],\n        'icons': (json['icons'].map(IconFromJSON)),\n        'text': json['text'],\n        'helperText': json['helperText'] == null ? undefined : json['helperText'],\n        'ctaBorderRad': CtaBorderRadFromJSON(json['ctaBorderRad']),\n        'hexBgColor': json['hexBgColor'] == null ? undefined : json['hexBgColor'],\n        'hexTextColor': json['hexTextColor'] == null ? undefined : json['hexTextColor'],\n        'buttonType': json['buttonType'] == null ? undefined : ButtonStyleFromJSON(json['buttonType']),\n        'buttonWidth': json['buttonWidth'] == null ? undefined : ButtonWidthFromJSON(json['buttonWidth']),\n        'stickyPosition': json['stickyPosition'] == null ? undefined : StickyPositionFromJSON(json['stickyPosition']),\n        'productHandle': json['productHandle'] == null ? undefined : json['productHandle'],\n        'ctaBtnStyle': json['ctaBtnStyle'] == null ? undefined : CtaBtnStyleFromJSON(json['ctaBtnStyle']),\n        'entity': EntityFromJSON(json['entity']),\n        'color': json['color'] == null ? undefined : ColorFromJSON(json['color']),\n        'gridType': json['gridType'] == null ? undefined : json['gridType'],\n        'productHandles': json['productHandles'] == null ? undefined : json['productHandles'],\n        'entities': json['entities'] == null ? undefined : (json['entities'].map(EntityFromJSON)),\n        'categories': json['categories'] == null ? undefined : (json['categories'].map(CategoryFromJSON)),\n        'showColorSwatches': json['showColorSwatches'] == null ? undefined : json['showColorSwatches'],\n        'recommendedForProductId': json['recommendedForProductId'] == null ? undefined : json['recommendedForProductId'],\n        'recommendedForBundleId': json['recommendedForBundleId'] == null ? undefined : json['recommendedForBundleId'],\n        'showDefaultVariant': json['showDefaultVariant'],\n        'ctaButton': CtaButton1FromJSON(json['ctaButton']),\n        'aspectRatio': json['aspectRatio'] == null ? undefined : AspectRatio1FromJSON(json['aspectRatio']),\n        'tabStyle': json['tabStyle'] == null ? undefined : TabStyleFromJSON(json['tabStyle']),\n        'productsPerRowDesktop': json['productsPerRowDesktop'] == null ? undefined : json['productsPerRowDesktop'],\n        'websiteLink': json['websiteLink'],\n        'buttonStyle': json['buttonStyle'] == null ? undefined : ButtonStyle1FromJSON(json['buttonStyle']),\n        'includeUTMParams': json['includeUTMParams'] == null ? undefined : json['includeUTMParams'],\n        'bundleId': json['bundleId'] == null ? undefined : json['bundleId'],\n        'collapsible': json['collapsible'] == null ? undefined : json['collapsible'],\n        'format': FormatFromJSON(json['format']),\n        'textAlignment': json['textAlignment'] == null ? undefined : AlignmentFromJSON(json['textAlignment']),\n        'threadId': json['threadId'] == null ? undefined : json['threadId'],\n        'columns': json['columns'],\n        'columnSpacing': json['columnSpacing'],\n        'variantSelectorModuleProps': VariantSelectorModuleFromJSON(json['variantSelectorModuleProps']),\n        'showProductDetails': json['showProductDetails'],\n        'showSubtitle': json['showSubtitle'],\n        'reviews': json['reviews'] == null ? undefined : (json['reviews'].map(TestimonialReviewFromJSON)),\n    };\n}\nexport function ModuleToJSON(json) {\n    return ModuleToJSONTyped(json, false);\n}\nexport function ModuleToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'id': value['id'],\n        'displayName': value['displayName'],\n        'favoriteModuleId': value['favoriteModuleId'],\n        'layout': LayoutToJSON(value['layout']),\n        'deviceType': DeviceTypeToJSON(value['deviceType']),\n        '__moduleName': value['moduleName'],\n        'inheritOfferMessaging': value['inheritOfferMessaging'],\n        'content': value['content'],\n        'theme': ThemeToJSON(value['theme']),\n        'textColor': value['textColor'],\n        'hexColor': value['hexColor'],\n        'title': value['title'],\n        'subtitle': value['subtitle'],\n        'sections': (value['sections'].map(SectionToJSON)),\n        'isAccordionInitialOpen': value['isAccordionInitialOpen'],\n        'position': Position2ToJSON(value['position']),\n        'avatar': AvatarToJSON(value['avatar']),\n        'primaryText': value['primaryText'],\n        'secondaryText': value['secondaryText'],\n        'version': value['version'],\n        'orgName': value['orgName'],\n        'heroProduct': HeroProductToJSON(value['heroProduct']),\n        'profilePicture': value['profilePicture'],\n        'components': Components3ToJSON(value['components']),\n        'showReviews': value['showReviews'],\n        'showAuthor': value['showAuthor'],\n        'showDate': value['showDate'],\n        'icons': (value['icons'].map(IconToJSON)),\n        'text': value['text'],\n        'helperText': value['helperText'],\n        'ctaBorderRad': CtaBorderRadToJSON(value['ctaBorderRad']),\n        'hexBgColor': value['hexBgColor'],\n        'hexTextColor': value['hexTextColor'],\n        'buttonType': ButtonStyleToJSON(value['buttonType']),\n        'buttonWidth': ButtonWidthToJSON(value['buttonWidth']),\n        'stickyPosition': StickyPositionToJSON(value['stickyPosition']),\n        'productHandle': value['productHandle'],\n        'ctaBtnStyle': CtaBtnStyleToJSON(value['ctaBtnStyle']),\n        'entity': EntityToJSON(value['entity']),\n        'color': ColorToJSON(value['color']),\n        'gridType': value['gridType'],\n        'productHandles': value['productHandles'],\n        'entities': value['entities'] == null ? undefined : (value['entities'].map(EntityToJSON)),\n        'categories': value['categories'] == null ? undefined : (value['categories'].map(CategoryToJSON)),\n        'showColorSwatches': value['showColorSwatches'],\n        'recommendedForProductId': value['recommendedForProductId'],\n        'recommendedForBundleId': value['recommendedForBundleId'],\n        'showDefaultVariant': value['showDefaultVariant'],\n        'ctaButton': CtaButton1ToJSON(value['ctaButton']),\n        'aspectRatio': AspectRatio1ToJSON(value['aspectRatio']),\n        'tabStyle': TabStyleToJSON(value['tabStyle']),\n        'productsPerRowDesktop': value['productsPerRowDesktop'],\n        'websiteLink': value['websiteLink'],\n        'buttonStyle': ButtonStyle1ToJSON(value['buttonStyle']),\n        'includeUTMParams': value['includeUTMParams'],\n        'bundleId': value['bundleId'],\n        'collapsible': value['collapsible'],\n        'format': FormatToJSON(value['format']),\n        'textAlignment': AlignmentToJSON(value['textAlignment']),\n        'threadId': value['threadId'],\n        'columns': value['columns'],\n        'columnSpacing': value['columnSpacing'],\n        'variantSelectorModuleProps': VariantSelectorModuleToJSON(value['variantSelectorModuleProps']),\n        'showProductDetails': value['showProductDetails'],\n        'showSubtitle': value['showSubtitle'],\n        'reviews': value['reviews'] == null ? undefined : (value['reviews'].map(TestimonialReviewToJSON)),\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { PersistedShopFromJSON, PersistedShopToJSON, } from './PersistedShop';\nimport { SessionRefFromJSON, SessionRefToJSON, } from './SessionRef';\nimport { CSSRuleFromJSON, CSSRuleToJSON, } from './CSSRule';\nimport { CustomModuleConfigFieldFromJSON, CustomModuleConfigFieldToJSON, } from './CustomModuleConfigField';\nimport { DocumentFromJSON, DocumentToJSON, } from './Document';\nimport { ClarifyingQuestionFromJSON, ClarifyingQuestionToJSON, } from './ClarifyingQuestion';\nimport { ModuleCustomizationSessionChangeFromJSON, ModuleCustomizationSessionChangeToJSON, } from './ModuleCustomizationSessionChange';\nimport { BundleInfoFromJSON, BundleInfoToJSON, } from './BundleInfo';\nimport { ModuleFromJSON, ModuleToJSON, } from './Module';\nimport { ModuleCustomizationResultFromJSON, ModuleCustomizationResultToJSON, } from './ModuleCustomizationResult';\n/**\n * Check if a given object implements the Response1 interface.\n */\nexport function instanceOfResponse1(value) {\n    if (!('response' in value) || value['response'] === undefined)\n        return false;\n    if (!('bundle' in value) || value['bundle'] === undefined)\n        return false;\n    return true;\n}\nexport function Response1FromJSON(json) {\n    return Response1FromJSONTyped(json, false);\n}\nexport function Response1FromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'response': json['response'],\n        'document': json['document'] == null ? undefined : DocumentFromJSON(json['document']),\n        'clarifyingQuestions': json['clarifying_questions'] == null ? undefined : (json['clarifying_questions'].map(ClarifyingQuestionFromJSON)),\n        'modules': json['modules'] == null ? undefined : (json['modules'].map(ModuleFromJSON)),\n        'shop': json['shop'] == null ? undefined : PersistedShopFromJSON(json['shop']),\n        'bundleInfo': json['bundle_info'] == null ? undefined : BundleInfoFromJSON(json['bundle_info']),\n        'rules': json['rules'] == null ? undefined : (json['rules'].map(CSSRuleFromJSON)),\n        'explanation': json['explanation'] == null ? undefined : json['explanation'],\n        'aiCustomizedProps': json['ai_customized_props'] == null ? undefined : json['ai_customized_props'],\n        'targetModuleId': json['target_module_id'] == null ? undefined : json['target_module_id'],\n        'changes': json['changes'] == null ? undefined : (json['changes'].map(ModuleCustomizationSessionChangeFromJSON)),\n        'moduleResults': json['module_results'] == null ? undefined : (json['module_results'].map(ModuleCustomizationResultFromJSON)),\n        'signalEvidence': json['signal_evidence'] == null ? undefined : (json['signal_evidence'].map(SessionRefFromJSON)),\n        'bundle': json['bundle'],\n        'configSchema': json['config_schema'] == null ? undefined : (json['config_schema'].map(CustomModuleConfigFieldFromJSON)),\n        'defaultConfig': json['default_config'] == null ? undefined : json['default_config'],\n        'id': json['id'] == null ? undefined : json['id'],\n        'moduleName': json['module_name'] == null ? undefined : json['module_name'],\n        'displayName': json['display_name'] == null ? undefined : json['display_name'],\n        'editUrl': json['edit_url'] == null ? undefined : json['edit_url'],\n    };\n}\nexport function Response1ToJSON(json) {\n    return Response1ToJSONTyped(json, false);\n}\nexport function Response1ToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'response': value['response'],\n        'document': DocumentToJSON(value['document']),\n        'clarifying_questions': value['clarifyingQuestions'] == null ? undefined : (value['clarifyingQuestions'].map(ClarifyingQuestionToJSON)),\n        'modules': value['modules'] == null ? undefined : (value['modules'].map(ModuleToJSON)),\n        'shop': PersistedShopToJSON(value['shop']),\n        'bundle_info': BundleInfoToJSON(value['bundleInfo']),\n        'rules': value['rules'] == null ? undefined : (value['rules'].map(CSSRuleToJSON)),\n        'explanation': value['explanation'],\n        'ai_customized_props': value['aiCustomizedProps'],\n        'target_module_id': value['targetModuleId'],\n        'changes': value['changes'] == null ? undefined : (value['changes'].map(ModuleCustomizationSessionChangeToJSON)),\n        'module_results': value['moduleResults'] == null ? undefined : (value['moduleResults'].map(ModuleCustomizationResultToJSON)),\n        'signal_evidence': value['signalEvidence'] == null ? undefined : (value['signalEvidence'].map(SessionRefToJSON)),\n        'bundle': value['bundle'],\n        'config_schema': value['configSchema'] == null ? undefined : (value['configSchema'].map(CustomModuleConfigFieldToJSON)),\n        'default_config': value['defaultConfig'],\n        'id': value['id'],\n        'module_name': value['moduleName'],\n        'display_name': value['displayName'],\n        'edit_url': value['editUrl'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { Response1FromJSON, Response1ToJSON, } from './Response1';\n/**\n * Check if a given object implements the StrategizeOutput interface.\n */\nexport function instanceOfStrategizeOutput(value) {\n    if (!('response' in value) || value['response'] === undefined)\n        return false;\n    return true;\n}\nexport function StrategizeOutputFromJSON(json) {\n    return StrategizeOutputFromJSONTyped(json, false);\n}\nexport function StrategizeOutputFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'response': Response1FromJSON(json['response']),\n        'lastResponseId': json['last_response_id'] == null ? undefined : json['last_response_id'],\n        'conversationId': json['conversation_id'] == null ? undefined : json['conversation_id'],\n    };\n}\nexport function StrategizeOutputToJSON(json) {\n    return StrategizeOutputToJSONTyped(json, false);\n}\nexport function StrategizeOutputToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'response': Response1ToJSON(value['response']),\n        'last_response_id': value['lastResponseId'],\n        'conversation_id': value['conversationId'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { Response1FromJSON, Response1ToJSON, } from './Response1';\n/**\n * Check if a given object implements the StrategizeOutput1 interface.\n */\nexport function instanceOfStrategizeOutput1(value) {\n    if (!('response' in value) || value['response'] === undefined)\n        return false;\n    return true;\n}\nexport function StrategizeOutput1FromJSON(json) {\n    return StrategizeOutput1FromJSONTyped(json, false);\n}\nexport function StrategizeOutput1FromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'response': Response1FromJSON(json['response']),\n        'lastResponseId': json['last_response_id'] == null ? undefined : json['last_response_id'],\n        'conversationId': json['conversation_id'] == null ? undefined : json['conversation_id'],\n    };\n}\nexport function StrategizeOutput1ToJSON(json) {\n    return StrategizeOutput1ToJSONTyped(json, false);\n}\nexport function StrategizeOutput1ToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'response': Response1ToJSON(value['response']),\n        'last_response_id': value['lastResponseId'],\n        'conversation_id': value['conversationId'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n/**\n * Check if a given object implements the VariantComparisonRequest interface.\n */\nexport function instanceOfVariantComparisonRequest(value) {\n    if (!('orgId' in value) || value['orgId'] === undefined)\n        return false;\n    if (!('routingConfigId' in value) || value['routingConfigId'] === undefined)\n        return false;\n    return true;\n}\nexport function VariantComparisonRequestFromJSON(json) {\n    return VariantComparisonRequestFromJSONTyped(json, false);\n}\nexport function VariantComparisonRequestFromJSONTyped(json, ignoreDiscriminator) {\n    if (json == null) {\n        return json;\n    }\n    return {\n        'orgId': json['org_id'],\n        'routingConfigId': json['routing_config_id'],\n        'productContext': json['product_context'] == null ? undefined : json['product_context'],\n    };\n}\nexport function VariantComparisonRequestToJSON(json) {\n    return VariantComparisonRequestToJSONTyped(json, false);\n}\nexport function VariantComparisonRequestToJSONTyped(value, ignoreDiscriminator = false) {\n    if (value == null) {\n        return value;\n    }\n    return {\n        'org_id': value['orgId'],\n        'routing_config_id': value['routingConfigId'],\n        'product_context': value['productContext'],\n    };\n}\n", "/* tslint:disable */\n/* eslint-disable */\n/**\n * Agents API\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: 0.2.15\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport * as runtime from '../runtime';\nimport { AISOnboardingConversationResponseFromJSON, } from '../models/AISOnboardingConversationResponse';\nimport { AISOnboardingRequestToJSON, } from '../models/AISOnboardingRequest';\nimport { BatchCustomizationRequestToJSON, } from '../models/BatchCustomizationRequest';\nimport { BehavioralAnomalyRequestToJSON, } from '../models/BehavioralAnomalyRequest';\nimport { ClickRequestToJSON, } from '../models/ClickRequest';\nimport { ConsultativeAssistantRequestToJSON, } from '../models/ConsultativeAssistantRequest';\nimport { ConsultativeAssistantResponseFromJSON, } from '../models/ConsultativeAssistantResponse';\nimport { DPPExperimentCreationRequestToJSON, } from '../models/DPPExperimentCreationRequest';\nimport { DPPExperimentCreationResponse1FromJSON, } from '../models/DPPExperimentCreationResponse1';\nimport { DetectorRunRequestToJSON, } from '../models/DetectorRunRequest';\nimport { DetectorRunResponseFromJSON, } from '../models/DetectorRunResponse';\nimport { GenerateBrandVoiceRequestToJSON, } from '../models/GenerateBrandVoiceRequest';\nimport { GenerateBrandVoiceResponseFromJSON, } from '../models/GenerateBrandVoiceResponse';\nimport { GenerateImageRequestToJSON, } from '../models/GenerateImageRequest';\nimport { GenerateImageResponseFromJSON, } from '../models/GenerateImageResponse';\nimport { GenerateTitleRequestToJSON, } from '../models/GenerateTitleRequest';\nimport { GenerateTitleResponseFromJSON, } from '../models/GenerateTitleResponse';\nimport { HealthCheckResponseFromJSON, } from '../models/HealthCheckResponse';\nimport { MainSiteSnippetResponseFromJSON, } from '../models/MainSiteSnippetResponse';\nimport { ModuleAgentOutputFromJSON, } from '../models/ModuleAgentOutput';\nimport { ModuleAgentRequestToJSON, } from '../models/ModuleAgentRequest';\nimport { ModuleCustomizationSingleRequestToJSON, } from '../models/ModuleCustomizationSingleRequest';\nimport { ModuleGeneratorRequestToJSON, } from '../models/ModuleGeneratorRequest';\nimport { ModuleJobResponseFromJSON, } from '../models/ModuleJobResponse';\nimport { OmniAgentRequestToJSON, } from '../models/OmniAgentRequest';\nimport { RateLimitStatusFromJSON, } from '../models/RateLimitStatus';\nimport { SamuelRequestToJSON, } from '../models/SamuelRequest';\nimport { SamuelResponseFromJSON, } from '../models/SamuelResponse';\nimport { SearchRequestToJSON, } from '../models/SearchRequest';\nimport { ShoppingAssistantRequestToJSON, } from '../models/ShoppingAssistantRequest';\nimport { ShoppingAssistantResponseFromJSON, } from '../models/ShoppingAssistantResponse';\nimport { ShoppingAssistantV2RequestToJSON, } from '../models/ShoppingAssistantV2Request';\nimport { SimilarRequestToJSON, } from '../models/SimilarRequest';\nimport { SimilarResponseFromJSON, } from '../models/SimilarResponse';\nimport { StartModuleJobRequestToJSON, } from '../models/StartModuleJobRequest';\nimport { StrategizeOutputFromJSON, } from '../models/StrategizeOutput';\nimport { StrategizeOutput1FromJSON, } from '../models/StrategizeOutput1';\nimport { VariantComparisonRequestToJSON, } from '../models/VariantComparisonRequest';\n/**\n *\n */\nexport class DefaultApi extends runtime.BaseAPI {\n    /**\n     * Creates request options for aisOnboardingAgent without sending the request\n     */\n    aisOnboardingAgentRequestOpts(requestParameters) {\n        return __awaiter(this, void 0, void 0, function* () {\n            if (requestParameters['aISOnboardingRequest'] == null) {\n                throw new runtime.RequiredError('aISOnboardingRequest', 'Required parameter \"aISOnboardingRequest\" was null or undefined when calling aisOnboardingAgent().');\n            }\n            const queryParameters = {};\n            if (requestParameters['name'] != null) {\n                queryParameters['name'] = requestParameters['name'];\n            }\n            const headerParameters = {};\n            headerParameters['Content-Type'] = 'application/json';\n            let urlPath = `/api/ais-onboarding-agent`;\n            return {\n                path: urlPath,\n                method: 'POST',\n                headers: headerParameters,\n                query: queryParameters,\n                body: AISOnboardingRequestToJSON(requestParameters['aISOnboardingRequest']),\n            };\n        });\n    }\n    /**\n     * Ais Onboarding Agent Endpoint\n     */\n    aisOnboardingAgentRaw(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const requestOptions = yield this.aisOnboardingAgentRequestOpts(requestParameters);\n            const response = yield this.request(requestOptions, initOverrides);\n            if (this.isJsonMime(response.headers.get('content-type'))) {\n                return new runtime.JSONApiResponse(response);\n            }\n            else {\n                return new runtime.TextApiResponse(response);\n            }\n        });\n    }\n    /**\n     * Ais Onboarding Agent Endpoint\n     */\n    aisOnboardingAgent(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const response = yield this.aisOnboardingAgentRaw(requestParameters, initOverrides);\n            return yield response.value();\n        });\n    }\n    /**\n     * Creates request options for aisOnboardingConversation without sending the request\n     */\n    aisOnboardingConversationRequestOpts(requestParameters) {\n        return __awaiter(this, void 0, void 0, function* () {\n            if (requestParameters['orgId'] == null) {\n                throw new runtime.RequiredError('orgId', 'Required parameter \"orgId\" was null or undefined when calling aisOnboardingConversation().');\n            }\n            const queryParameters = {};\n            if (requestParameters['orgId'] != null) {\n                queryParameters['org_id'] = requestParameters['orgId'];\n            }\n            if (requestParameters['name'] != null) {\n                queryParameters['name'] = requestParameters['name'];\n            }\n            const headerParameters = {};\n            let urlPath = `/api/ais-onboarding-agent/conversation`;\n            return {\n                path: urlPath,\n                method: 'GET',\n                headers: headerParameters,\n                query: queryParameters,\n            };\n        });\n    }\n    /**\n     * Ais Onboarding Conversation Endpoint\n     */\n    aisOnboardingConversationRaw(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const requestOptions = yield this.aisOnboardingConversationRequestOpts(requestParameters);\n            const response = yield this.request(requestOptions, initOverrides);\n            return new runtime.JSONApiResponse(response, (jsonValue) => AISOnboardingConversationResponseFromJSON(jsonValue));\n        });\n    }\n    /**\n     * Ais Onboarding Conversation Endpoint\n     */\n    aisOnboardingConversation(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const response = yield this.aisOnboardingConversationRaw(requestParameters, initOverrides);\n            return yield response.value();\n        });\n    }\n    /**\n     * Creates request options for batchCustomization without sending the request\n     */\n    batchCustomizationRequestOpts(requestParameters) {\n        return __awaiter(this, void 0, void 0, function* () {\n            if (requestParameters['batchCustomizationRequest'] == null) {\n                throw new runtime.RequiredError('batchCustomizationRequest', 'Required parameter \"batchCustomizationRequest\" was null or undefined when calling batchCustomization().');\n            }\n            const queryParameters = {};\n            if (requestParameters['name'] != null) {\n                queryParameters['name'] = requestParameters['name'];\n            }\n            const headerParameters = {};\n            headerParameters['Content-Type'] = 'application/json';\n            let urlPath = `/api/batch-customization`;\n            return {\n                path: urlPath,\n                method: 'POST',\n                headers: headerParameters,\n                query: queryParameters,\n                body: BatchCustomizationRequestToJSON(requestParameters['batchCustomizationRequest']),\n            };\n        });\n    }\n    /**\n     * Batch module customization endpoint. Groups modules by type then customizes each in parallel. Returns SSE stream by default; set streaming=false for a direct JSON response.\n     * Batch Customization Endpoint\n     */\n    batchCustomizationRaw(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const requestOptions = yield this.batchCustomizationRequestOpts(requestParameters);\n            const response = yield this.request(requestOptions, initOverrides);\n            return new runtime.JSONApiResponse(response, (jsonValue) => StrategizeOutput1FromJSON(jsonValue));\n        });\n    }\n    /**\n     * Batch module customization endpoint. Groups modules by type then customizes each in parallel. Returns SSE stream by default; set streaming=false for a direct JSON response.\n     * Batch Customization Endpoint\n     */\n    batchCustomization(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const response = yield this.batchCustomizationRaw(requestParameters, initOverrides);\n            return yield response.value();\n        });\n    }\n    /**\n     * Creates request options for behavioralAnomaly without sending the request\n     */\n    behavioralAnomalyRequestOpts(requestParameters) {\n        return __awaiter(this, void 0, void 0, function* () {\n            if (requestParameters['behavioralAnomalyRequest'] == null) {\n                throw new runtime.RequiredError('behavioralAnomalyRequest', 'Required parameter \"behavioralAnomalyRequest\" was null or undefined when calling behavioralAnomaly().');\n            }\n            const queryParameters = {};\n            if (requestParameters['name'] != null) {\n                queryParameters['name'] = requestParameters['name'];\n            }\n            const headerParameters = {};\n            headerParameters['Content-Type'] = 'application/json';\n            let urlPath = `/api/behavioral-anomaly`;\n            return {\n                path: urlPath,\n                method: 'POST',\n                headers: headerParameters,\n                query: queryParameters,\n                body: BehavioralAnomalyRequestToJSON(requestParameters['behavioralAnomalyRequest']),\n            };\n        });\n    }\n    /**\n     * Standalone Behavioral Anomaly Agent endpoint using LangGraph. Returns SSE stream by default; set streaming=false for a direct JSON response.\n     * Behavioral Anomaly Endpoint\n     */\n    behavioralAnomalyRaw(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const requestOptions = yield this.behavioralAnomalyRequestOpts(requestParameters);\n            const response = yield this.request(requestOptions, initOverrides);\n            return new runtime.JSONApiResponse(response, (jsonValue) => StrategizeOutputFromJSON(jsonValue));\n        });\n    }\n    /**\n     * Standalone Behavioral Anomaly Agent endpoint using LangGraph. Returns SSE stream by default; set streaming=false for a direct JSON response.\n     * Behavioral Anomaly Endpoint\n     */\n    behavioralAnomaly(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const response = yield this.behavioralAnomalyRaw(requestParameters, initOverrides);\n            return yield response.value();\n        });\n    }\n    /**\n     * Creates request options for checkHealth without sending the request\n     */\n    checkHealthRequestOpts() {\n        return __awaiter(this, void 0, void 0, function* () {\n            const queryParameters = {};\n            const headerParameters = {};\n            let urlPath = `/public/_health`;\n            return {\n                path: urlPath,\n                method: 'GET',\n                headers: headerParameters,\n                query: queryParameters,\n            };\n        });\n    }\n    /**\n     * Health check endpoint that doesn\\'t require authentication\n     * Health Check\n     */\n    checkHealthRaw(initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const requestOptions = yield this.checkHealthRequestOpts();\n            const response = yield this.request(requestOptions, initOverrides);\n            return new runtime.JSONApiResponse(response, (jsonValue) => HealthCheckResponseFromJSON(jsonValue));\n        });\n    }\n    /**\n     * Health check endpoint that doesn\\'t require authentication\n     * Health Check\n     */\n    checkHealth(initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const response = yield this.checkHealthRaw(initOverrides);\n            return yield response.value();\n        });\n    }\n    /**\n     * Creates request options for compareVariants without sending the request\n     */\n    compareVariantsRequestOpts(requestParameters) {\n        return __awaiter(this, void 0, void 0, function* () {\n            if (requestParameters['variantComparisonRequest'] == null) {\n                throw new runtime.RequiredError('variantComparisonRequest', 'Required parameter \"variantComparisonRequest\" was null or undefined when calling compareVariants().');\n            }\n            const queryParameters = {};\n            if (requestParameters['name'] != null) {\n                queryParameters['name'] = requestParameters['name'];\n            }\n            const headerParameters = {};\n            headerParameters['Content-Type'] = 'application/json';\n            let urlPath = `/api/agentic-experiment/compare-variants`;\n            return {\n                path: urlPath,\n                method: 'POST',\n                headers: headerParameters,\n                query: queryParameters,\n                body: VariantComparisonRequestToJSON(requestParameters['variantComparisonRequest']),\n            };\n        });\n    }\n    /**\n     * Compare multiple variants by evaluating their conversion potential.      This endpoint helps you determine which variant has the highest probability     of converting visitors by:     1. Navigating each variant\\'s page     2. Capturing screenshots     3. Evaluating against conversion criteria using the configured vision model (gpt-5.4-mini by default)     4. Determining a winner with per-variant scores and persona insights      Supports N variants. Results include lift vs control for each variant.      **Rate limits:**     - 10 requests per minute per organization     - 2 concurrent requests per organization      **Security:**     - URLs are validated to prevent SSRF attacks     - Only http/https URLs to public hosts are allowed\n     * Compare Variants\n     */\n    compareVariantsRaw(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const requestOptions = yield this.compareVariantsRequestOpts(requestParameters);\n            const response = yield this.request(requestOptions, initOverrides);\n            if (this.isJsonMime(response.headers.get('content-type'))) {\n                return new runtime.JSONApiResponse(response);\n            }\n            else {\n                return new runtime.TextApiResponse(response);\n            }\n        });\n    }\n    /**\n     * Compare multiple variants by evaluating their conversion potential.      This endpoint helps you determine which variant has the highest probability     of converting visitors by:     1. Navigating each variant\\'s page     2. Capturing screenshots     3. Evaluating against conversion criteria using the configured vision model (gpt-5.4-mini by default)     4. Determining a winner with per-variant scores and persona insights      Supports N variants. Results include lift vs control for each variant.      **Rate limits:**     - 10 requests per minute per organization     - 2 concurrent requests per organization      **Security:**     - URLs are validated to prevent SSRF attacks     - Only http/https URLs to public hosts are allowed\n     * Compare Variants\n     */\n    compareVariants(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const response = yield this.compareVariantsRaw(requestParameters, initOverrides);\n            return yield response.value();\n        });\n    }\n    /**\n     * Creates request options for consultativeAssistantV1 without sending the request\n     */\n    consultativeAssistantV1RequestOpts(requestParameters) {\n        return __awaiter(this, void 0, void 0, function* () {\n            if (requestParameters['consultativeAssistantRequest'] == null) {\n                throw new runtime.RequiredError('consultativeAssistantRequest', 'Required parameter \"consultativeAssistantRequest\" was null or undefined when calling consultativeAssistantV1().');\n            }\n            const queryParameters = {};\n            if (requestParameters['name'] != null) {\n                queryParameters['name'] = requestParameters['name'];\n            }\n            const headerParameters = {};\n            headerParameters['Content-Type'] = 'application/json';\n            let urlPath = `/api/consultative-assistant/v1`;\n            return {\n                path: urlPath,\n                method: 'POST',\n                headers: headerParameters,\n                query: queryParameters,\n                body: ConsultativeAssistantRequestToJSON(requestParameters['consultativeAssistantRequest']),\n            };\n        });\n    }\n    /**\n     * Consultative, category-aware shopping assistant for brand-embedded widgets.\n     * Consultative Assistant V1\n     */\n    consultativeAssistantV1Raw(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const requestOptions = yield this.consultativeAssistantV1RequestOpts(requestParameters);\n            const response = yield this.request(requestOptions, initOverrides);\n            return new runtime.JSONApiResponse(response, (jsonValue) => ConsultativeAssistantResponseFromJSON(jsonValue));\n        });\n    }\n    /**\n     * Consultative, category-aware shopping assistant for brand-embedded widgets.\n     * Consultative Assistant V1\n     */\n    consultativeAssistantV1(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const response = yield this.consultativeAssistantV1Raw(requestParameters, initOverrides);\n            return yield response.value();\n        });\n    }\n    /**\n     * Creates request options for dppExperimentCreationSingle without sending the request\n     */\n    dppExperimentCreationSingleRequestOpts(requestParameters) {\n        return __awaiter(this, void 0, void 0, function* () {\n            if (requestParameters['dPPExperimentCreationRequest'] == null) {\n                throw new runtime.RequiredError('dPPExperimentCreationRequest', 'Required parameter \"dPPExperimentCreationRequest\" was null or undefined when calling dppExperimentCreationSingle().');\n            }\n            const queryParameters = {};\n            if (requestParameters['name'] != null) {\n                queryParameters['name'] = requestParameters['name'];\n            }\n            const headerParameters = {};\n            headerParameters['Content-Type'] = 'application/json';\n            let urlPath = `/api/dpp-experiment-creation/single`;\n            return {\n                path: urlPath,\n                method: 'POST',\n                headers: headerParameters,\n                query: queryParameters,\n                body: DPPExperimentCreationRequestToJSON(requestParameters['dPPExperimentCreationRequest']),\n            };\n        });\n    }\n    /**\n     * DPP experiment creation endpoint using LangChain/LangGraph orchestration. Returns SSE stream by default for generate path; direct JSON for apply path.\n     * Dpp Experiment Creation Single Endpoint\n     */\n    dppExperimentCreationSingleRaw(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const requestOptions = yield this.dppExperimentCreationSingleRequestOpts(requestParameters);\n            const response = yield this.request(requestOptions, initOverrides);\n            return new runtime.JSONApiResponse(response, (jsonValue) => DPPExperimentCreationResponse1FromJSON(jsonValue));\n        });\n    }\n    /**\n     * DPP experiment creation endpoint using LangChain/LangGraph orchestration. Returns SSE stream by default for generate path; direct JSON for apply path.\n     * Dpp Experiment Creation Single Endpoint\n     */\n    dppExperimentCreationSingle(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const response = yield this.dppExperimentCreationSingleRaw(requestParameters, initOverrides);\n            return yield response.value();\n        });\n    }\n    /**\n     * Creates request options for generateBrandVoice without sending the request\n     */\n    generateBrandVoiceRequestOpts(requestParameters) {\n        return __awaiter(this, void 0, void 0, function* () {\n            if (requestParameters['generateBrandVoiceRequest'] == null) {\n                throw new runtime.RequiredError('generateBrandVoiceRequest', 'Required parameter \"generateBrandVoiceRequest\" was null or undefined when calling generateBrandVoice().');\n            }\n            const queryParameters = {};\n            if (requestParameters['name'] != null) {\n                queryParameters['name'] = requestParameters['name'];\n            }\n            const headerParameters = {};\n            headerParameters['Content-Type'] = 'application/json';\n            let urlPath = `/api/generate-brand-voice`;\n            return {\n                path: urlPath,\n                method: 'POST',\n                headers: headerParameters,\n                query: queryParameters,\n                body: GenerateBrandVoiceRequestToJSON(requestParameters['generateBrandVoiceRequest']),\n            };\n        });\n    }\n    /**\n     * Scrape a brand\\'s website and generate a comprehensive brand voice description.\n     * Generate Brand Voice\n     */\n    generateBrandVoiceRaw(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const requestOptions = yield this.generateBrandVoiceRequestOpts(requestParameters);\n            const response = yield this.request(requestOptions, initOverrides);\n            return new runtime.JSONApiResponse(response, (jsonValue) => GenerateBrandVoiceResponseFromJSON(jsonValue));\n        });\n    }\n    /**\n     * Scrape a brand\\'s website and generate a comprehensive brand voice description.\n     * Generate Brand Voice\n     */\n    generateBrandVoice(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const response = yield this.generateBrandVoiceRaw(requestParameters, initOverrides);\n            return yield response.value();\n        });\n    }\n    /**\n     * Creates request options for generateConversationTitle without sending the request\n     */\n    generateConversationTitleRequestOpts(requestParameters) {\n        return __awaiter(this, void 0, void 0, function* () {\n            if (requestParameters['generateTitleRequest'] == null) {\n                throw new runtime.RequiredError('generateTitleRequest', 'Required parameter \"generateTitleRequest\" was null or undefined when calling generateConversationTitle().');\n            }\n            const queryParameters = {};\n            if (requestParameters['name'] != null) {\n                queryParameters['name'] = requestParameters['name'];\n            }\n            const headerParameters = {};\n            headerParameters['Content-Type'] = 'application/json';\n            let urlPath = `/api/generate-title`;\n            return {\n                path: urlPath,\n                method: 'POST',\n                headers: headerParameters,\n                query: queryParameters,\n                body: GenerateTitleRequestToJSON(requestParameters['generateTitleRequest']),\n            };\n        });\n    }\n    /**\n     * Generate a concise title for a conversation based on the first user message.\n     * Generate Title\n     */\n    generateConversationTitleRaw(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const requestOptions = yield this.generateConversationTitleRequestOpts(requestParameters);\n            const response = yield this.request(requestOptions, initOverrides);\n            return new runtime.JSONApiResponse(response, (jsonValue) => GenerateTitleResponseFromJSON(jsonValue));\n        });\n    }\n    /**\n     * Generate a concise title for a conversation based on the first user message.\n     * Generate Title\n     */\n    generateConversationTitle(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const response = yield this.generateConversationTitleRaw(requestParameters, initOverrides);\n            return yield response.value();\n        });\n    }\n    /**\n     * Creates request options for generateImageApiOrganizationsOrgIdGenerateImagePost without sending the request\n     */\n    generateImageApiOrganizationsOrgIdGenerateImagePostRequestOpts(requestParameters) {\n        return __awaiter(this, void 0, void 0, function* () {\n            if (requestParameters['orgId'] == null) {\n                throw new runtime.RequiredError('orgId', 'Required parameter \"orgId\" was null or undefined when calling generateImageApiOrganizationsOrgIdGenerateImagePost().');\n            }\n            if (requestParameters['generateImageRequest'] == null) {\n                throw new runtime.RequiredError('generateImageRequest', 'Required parameter \"generateImageRequest\" was null or undefined when calling generateImageApiOrganizationsOrgIdGenerateImagePost().');\n            }\n            const queryParameters = {};\n            if (requestParameters['name'] != null) {\n                queryParameters['name'] = requestParameters['name'];\n            }\n            const headerParameters = {};\n            headerParameters['Content-Type'] = 'application/json';\n            let urlPath = `/api/organizations/{org_id}/generate-image`;\n            urlPath = urlPath.replace('{org_id}', encodeURIComponent(String(requestParameters['orgId'])));\n            return {\n                path: urlPath,\n                method: 'POST',\n                headers: headerParameters,\n                query: queryParameters,\n                body: GenerateImageRequestToJSON(requestParameters['generateImageRequest']),\n            };\n        });\n    }\n    /**\n     * Generate Image\n     */\n    generateImageApiOrganizationsOrgIdGenerateImagePostRaw(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const requestOptions = yield this.generateImageApiOrganizationsOrgIdGenerateImagePostRequestOpts(requestParameters);\n            const response = yield this.request(requestOptions, initOverrides);\n            return new runtime.JSONApiResponse(response, (jsonValue) => GenerateImageResponseFromJSON(jsonValue));\n        });\n    }\n    /**\n     * Generate Image\n     */\n    generateImageApiOrganizationsOrgIdGenerateImagePost(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const response = yield this.generateImageApiOrganizationsOrgIdGenerateImagePostRaw(requestParameters, initOverrides);\n            return yield response.value();\n        });\n    }\n    /**\n     * Creates request options for generateMainSiteSnippetApiModuleModuleIdSnippetPost without sending the request\n     */\n    generateMainSiteSnippetApiModuleModuleIdSnippetPostRequestOpts(requestParameters) {\n        return __awaiter(this, void 0, void 0, function* () {\n            if (requestParameters['moduleId'] == null) {\n                throw new runtime.RequiredError('moduleId', 'Required parameter \"moduleId\" was null or undefined when calling generateMainSiteSnippetApiModuleModuleIdSnippetPost().');\n            }\n            const queryParameters = {};\n            if (requestParameters['name'] != null) {\n                queryParameters['name'] = requestParameters['name'];\n            }\n            const headerParameters = {};\n            let urlPath = `/api/module/{module_id}/snippet`;\n            urlPath = urlPath.replace('{module_id}', encodeURIComponent(String(requestParameters['moduleId'])));\n            return {\n                path: urlPath,\n                method: 'POST',\n                headers: headerParameters,\n                query: queryParameters,\n            };\n        });\n    }\n    /**\n     * Generate (or regenerate) the copy-paste main-site snippet for a module.  Idempotent: re-invoking overwrites `main_site_snippet`. Any failure leaves the module row\\'s `status` and `generated_component` untouched \u2014 only `main_site_snippet` is ever written, and only on success.\n     * Generate Main Site Snippet\n     */\n    generateMainSiteSnippetApiModuleModuleIdSnippetPostRaw(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const requestOptions = yield this.generateMainSiteSnippetApiModuleModuleIdSnippetPostRequestOpts(requestParameters);\n            const response = yield this.request(requestOptions, initOverrides);\n            return new runtime.JSONApiResponse(response, (jsonValue) => MainSiteSnippetResponseFromJSON(jsonValue));\n        });\n    }\n    /**\n     * Generate (or regenerate) the copy-paste main-site snippet for a module.  Idempotent: re-invoking overwrites `main_site_snippet`. Any failure leaves the module row\\'s `status` and `generated_component` untouched \u2014 only `main_site_snippet` is ever written, and only on success.\n     * Generate Main Site Snippet\n     */\n    generateMainSiteSnippetApiModuleModuleIdSnippetPost(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const response = yield this.generateMainSiteSnippetApiModuleModuleIdSnippetPostRaw(requestParameters, initOverrides);\n            return yield response.value();\n        });\n    }\n    /**\n     * Creates request options for getModuleGenerationJob without sending the request\n     */\n    getModuleGenerationJobRequestOpts(requestParameters) {\n        return __awaiter(this, void 0, void 0, function* () {\n            if (requestParameters['moduleId'] == null) {\n                throw new runtime.RequiredError('moduleId', 'Required parameter \"moduleId\" was null or undefined when calling getModuleGenerationJob().');\n            }\n            const queryParameters = {};\n            if (requestParameters['name'] != null) {\n                queryParameters['name'] = requestParameters['name'];\n            }\n            const headerParameters = {};\n            let urlPath = `/api/module/jobs/{module_id}`;\n            urlPath = urlPath.replace('{module_id}', encodeURIComponent(String(requestParameters['moduleId'])));\n            return {\n                path: urlPath,\n                method: 'GET',\n                headers: headerParameters,\n                query: queryParameters,\n            };\n        });\n    }\n    /**\n     * Poll the status of an async module generation job. When status is \\'ready\\', `generated_component`, `config_schema`, and `default_config` are populated and the module is addressable via its `module_name` in the org\\'s custom module library.\n     * Get Module Generation Job\n     */\n    getModuleGenerationJobRaw(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const requestOptions = yield this.getModuleGenerationJobRequestOpts(requestParameters);\n            const response = yield this.request(requestOptions, initOverrides);\n            return new runtime.JSONApiResponse(response, (jsonValue) => ModuleJobResponseFromJSON(jsonValue));\n        });\n    }\n    /**\n     * Poll the status of an async module generation job. When status is \\'ready\\', `generated_component`, `config_schema`, and `default_config` are populated and the module is addressable via its `module_name` in the org\\'s custom module library.\n     * Get Module Generation Job\n     */\n    getModuleGenerationJob(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const response = yield this.getModuleGenerationJobRaw(requestParameters, initOverrides);\n            return yield response.value();\n        });\n    }\n    /**\n     * Creates request options for getRateLimitStatusApiAgenticExperimentRateLimitStatusGet without sending the request\n     */\n    getRateLimitStatusApiAgenticExperimentRateLimitStatusGetRequestOpts(requestParameters) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const queryParameters = {};\n            if (requestParameters['name'] != null) {\n                queryParameters['name'] = requestParameters['name'];\n            }\n            const headerParameters = {};\n            let urlPath = `/api/agentic-experiment/rate-limit-status`;\n            return {\n                path: urlPath,\n                method: 'GET',\n                headers: headerParameters,\n                query: queryParameters,\n            };\n        });\n    }\n    /**\n     * Get rate limit status for the current organization.\n     * Get Rate Limit Status\n     */\n    getRateLimitStatusApiAgenticExperimentRateLimitStatusGetRaw(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const requestOptions = yield this.getRateLimitStatusApiAgenticExperimentRateLimitStatusGetRequestOpts(requestParameters);\n            const response = yield this.request(requestOptions, initOverrides);\n            return new runtime.JSONApiResponse(response, (jsonValue) => RateLimitStatusFromJSON(jsonValue));\n        });\n    }\n    /**\n     * Get rate limit status for the current organization.\n     * Get Rate Limit Status\n     */\n    getRateLimitStatusApiAgenticExperimentRateLimitStatusGet() {\n        return __awaiter(this, arguments, void 0, function* (requestParameters = {}, initOverrides) {\n            const response = yield this.getRateLimitStatusApiAgenticExperimentRateLimitStatusGetRaw(requestParameters, initOverrides);\n            return yield response.value();\n        });\n    }\n    /**\n     * Creates request options for moduleAgent without sending the request\n     */\n    moduleAgentRequestOpts(requestParameters) {\n        return __awaiter(this, void 0, void 0, function* () {\n            if (requestParameters['moduleAgentRequest'] == null) {\n                throw new runtime.RequiredError('moduleAgentRequest', 'Required parameter \"moduleAgentRequest\" was null or undefined when calling moduleAgent().');\n            }\n            const queryParameters = {};\n            if (requestParameters['name'] != null) {\n                queryParameters['name'] = requestParameters['name'];\n            }\n            const headerParameters = {};\n            headerParameters['Content-Type'] = 'application/json';\n            let urlPath = `/api/module`;\n            return {\n                path: urlPath,\n                method: 'POST',\n                headers: headerParameters,\n                query: queryParameters,\n                body: ModuleAgentRequestToJSON(requestParameters['moduleAgentRequest']),\n            };\n        });\n    }\n    /**\n     * Module Agent endpoint \u2014 routes to module_customization, batch_customization, module_generator, config_editor, or save_module sub-agents. Returns SSE stream by default; set streaming=false for a direct JSON response.\n     * Module Agent Endpoint\n     */\n    moduleAgentRaw(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const requestOptions = yield this.moduleAgentRequestOpts(requestParameters);\n            const response = yield this.request(requestOptions, initOverrides);\n            return new runtime.JSONApiResponse(response, (jsonValue) => ModuleAgentOutputFromJSON(jsonValue));\n        });\n    }\n    /**\n     * Module Agent endpoint \u2014 routes to module_customization, batch_customization, module_generator, config_editor, or save_module sub-agents. Returns SSE stream by default; set streaming=false for a direct JSON response.\n     * Module Agent Endpoint\n     */\n    moduleAgent(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const response = yield this.moduleAgentRaw(requestParameters, initOverrides);\n            return yield response.value();\n        });\n    }\n    /**\n     * Creates request options for moduleCustomizationSingle without sending the request\n     */\n    moduleCustomizationSingleRequestOpts(requestParameters) {\n        return __awaiter(this, void 0, void 0, function* () {\n            if (requestParameters['moduleCustomizationSingleRequest'] == null) {\n                throw new runtime.RequiredError('moduleCustomizationSingleRequest', 'Required parameter \"moduleCustomizationSingleRequest\" was null or undefined when calling moduleCustomizationSingle().');\n            }\n            const queryParameters = {};\n            if (requestParameters['name'] != null) {\n                queryParameters['name'] = requestParameters['name'];\n            }\n            const headerParameters = {};\n            headerParameters['Content-Type'] = 'application/json';\n            let urlPath = `/api/module-customization/single`;\n            return {\n                path: urlPath,\n                method: 'POST',\n                headers: headerParameters,\n                query: queryParameters,\n                body: ModuleCustomizationSingleRequestToJSON(requestParameters['moduleCustomizationSingleRequest']),\n            };\n        });\n    }\n    /**\n     * Module customization endpoint using LangChain/LangGraph orchestration. Returns SSE stream by default; set streaming=false for a direct JSON response.\n     * Module Customization Single Endpoint\n     */\n    moduleCustomizationSingleRaw(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const requestOptions = yield this.moduleCustomizationSingleRequestOpts(requestParameters);\n            const response = yield this.request(requestOptions, initOverrides);\n            return new runtime.JSONApiResponse(response, (jsonValue) => StrategizeOutput1FromJSON(jsonValue));\n        });\n    }\n    /**\n     * Module customization endpoint using LangChain/LangGraph orchestration. Returns SSE stream by default; set streaming=false for a direct JSON response.\n     * Module Customization Single Endpoint\n     */\n    moduleCustomizationSingle(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const response = yield this.moduleCustomizationSingleRaw(requestParameters, initOverrides);\n            return yield response.value();\n        });\n    }\n    /**\n     * Creates request options for moduleGenerator without sending the request\n     */\n    moduleGeneratorRequestOpts(requestParameters) {\n        return __awaiter(this, void 0, void 0, function* () {\n            if (requestParameters['moduleGeneratorRequest'] == null) {\n                throw new runtime.RequiredError('moduleGeneratorRequest', 'Required parameter \"moduleGeneratorRequest\" was null or undefined when calling moduleGenerator().');\n            }\n            const queryParameters = {};\n            if (requestParameters['name'] != null) {\n                queryParameters['name'] = requestParameters['name'];\n            }\n            const headerParameters = {};\n            headerParameters['Content-Type'] = 'application/json';\n            let urlPath = `/api/module-generator`;\n            return {\n                path: urlPath,\n                method: 'POST',\n                headers: headerParameters,\n                query: queryParameters,\n                body: ModuleGeneratorRequestToJSON(requestParameters['moduleGeneratorRequest']),\n            };\n        });\n    }\n    /**\n     * Module Generator endpoint using the direct combined renderer/editor path. Returns SSE stream by default; set streaming=false for a direct JSON response.\n     * Module Generator Endpoint\n     */\n    moduleGeneratorRaw(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const requestOptions = yield this.moduleGeneratorRequestOpts(requestParameters);\n            const response = yield this.request(requestOptions, initOverrides);\n            return new runtime.JSONApiResponse(response, (jsonValue) => StrategizeOutputFromJSON(jsonValue));\n        });\n    }\n    /**\n     * Module Generator endpoint using the direct combined renderer/editor path. Returns SSE stream by default; set streaming=false for a direct JSON response.\n     * Module Generator Endpoint\n     */\n    moduleGenerator(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const response = yield this.moduleGeneratorRaw(requestParameters, initOverrides);\n            return yield response.value();\n        });\n    }\n    /**\n     * Creates request options for omniAgent without sending the request\n     */\n    omniAgentRequestOpts(requestParameters) {\n        return __awaiter(this, void 0, void 0, function* () {\n            if (requestParameters['omniAgentRequest'] == null) {\n                throw new runtime.RequiredError('omniAgentRequest', 'Required parameter \"omniAgentRequest\" was null or undefined when calling omniAgent().');\n            }\n            const queryParameters = {};\n            if (requestParameters['name'] != null) {\n                queryParameters['name'] = requestParameters['name'];\n            }\n            const headerParameters = {};\n            headerParameters['Content-Type'] = 'application/json';\n            let urlPath = `/api/agent`;\n            return {\n                path: urlPath,\n                method: 'POST',\n                headers: headerParameters,\n                query: queryParameters,\n                body: OmniAgentRequestToJSON(requestParameters['omniAgentRequest']),\n            };\n        });\n    }\n    /**\n     * Omni Agent endpoint using LangChain/LangGraph orchestration. Returns SSE stream by default; set streaming=false for a direct JSON response.\n     * Omni Agent Endpoint\n     */\n    omniAgentRaw(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const requestOptions = yield this.omniAgentRequestOpts(requestParameters);\n            const response = yield this.request(requestOptions, initOverrides);\n            return new runtime.JSONApiResponse(response, (jsonValue) => StrategizeOutputFromJSON(jsonValue));\n        });\n    }\n    /**\n     * Omni Agent endpoint using LangChain/LangGraph orchestration. Returns SSE stream by default; set streaming=false for a direct JSON response.\n     * Omni Agent Endpoint\n     */\n    omniAgent(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const response = yield this.omniAgentRaw(requestParameters, initOverrides);\n            return yield response.value();\n        });\n    }\n    /**\n     * Creates request options for runDetectorEndpointApiModuleOpportunityPost without sending the request\n     */\n    runDetectorEndpointApiModuleOpportunityPostRequestOpts(requestParameters) {\n        return __awaiter(this, void 0, void 0, function* () {\n            if (requestParameters['detectorRunRequest'] == null) {\n                throw new runtime.RequiredError('detectorRunRequest', 'Required parameter \"detectorRunRequest\" was null or undefined when calling runDetectorEndpointApiModuleOpportunityPost().');\n            }\n            const queryParameters = {};\n            if (requestParameters['name'] != null) {\n                queryParameters['name'] = requestParameters['name'];\n            }\n            const headerParameters = {};\n            headerParameters['Content-Type'] = 'application/json';\n            let urlPath = `/api/module/opportunity`;\n            return {\n                path: urlPath,\n                method: 'POST',\n                headers: headerParameters,\n                query: queryParameters,\n                body: DetectorRunRequestToJSON(requestParameters['detectorRunRequest']),\n            };\n        });\n    }\n    /**\n     * Run the opportunity detector for one org and return the proposed row.  Authorize against the target org first (M2M tokens pass cross-org), so a caller cannot trigger detection \u2014 or read another brand\\'s data into a row \u2014 for an org they don\\'t belong to.  On success, also dispatch an async module-generation job for the suggestion and link it back onto the opportunity, so the dashboard can preview the actual module. Generation is best-effort: a failure to dispatch never fails the detect (the opportunity still stands).\n     * Run Detector Endpoint\n     */\n    runDetectorEndpointApiModuleOpportunityPostRaw(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const requestOptions = yield this.runDetectorEndpointApiModuleOpportunityPostRequestOpts(requestParameters);\n            const response = yield this.request(requestOptions, initOverrides);\n            return new runtime.JSONApiResponse(response, (jsonValue) => DetectorRunResponseFromJSON(jsonValue));\n        });\n    }\n    /**\n     * Run the opportunity detector for one org and return the proposed row.  Authorize against the target org first (M2M tokens pass cross-org), so a caller cannot trigger detection \u2014 or read another brand\\'s data into a row \u2014 for an org they don\\'t belong to.  On success, also dispatch an async module-generation job for the suggestion and link it back onto the opportunity, so the dashboard can preview the actual module. Generation is best-effort: a failure to dispatch never fails the detect (the opportunity still stands).\n     * Run Detector Endpoint\n     */\n    runDetectorEndpointApiModuleOpportunityPost(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const response = yield this.runDetectorEndpointApiModuleOpportunityPostRaw(requestParameters, initOverrides);\n            return yield response.value();\n        });\n    }\n    /**\n     * Creates request options for samuelV1 without sending the request\n     */\n    samuelV1RequestOpts(requestParameters) {\n        return __awaiter(this, void 0, void 0, function* () {\n            if (requestParameters['samuelRequest'] == null) {\n                throw new runtime.RequiredError('samuelRequest', 'Required parameter \"samuelRequest\" was null or undefined when calling samuelV1().');\n            }\n            const queryParameters = {};\n            if (requestParameters['name'] != null) {\n                queryParameters['name'] = requestParameters['name'];\n            }\n            const headerParameters = {};\n            headerParameters['Content-Type'] = 'application/json';\n            let urlPath = `/api/samuel/v1`;\n            return {\n                path: urlPath,\n                method: 'POST',\n                headers: headerParameters,\n                query: queryParameters,\n                body: SamuelRequestToJSON(requestParameters['samuelRequest']),\n            };\n        });\n    }\n    /**\n     * Samuel \u2014 consolidated brand shopping assistant (reactive + consultative).\n     * Samuel V1\n     */\n    samuelV1Raw(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const requestOptions = yield this.samuelV1RequestOpts(requestParameters);\n            const response = yield this.request(requestOptions, initOverrides);\n            return new runtime.JSONApiResponse(response, (jsonValue) => SamuelResponseFromJSON(jsonValue));\n        });\n    }\n    /**\n     * Samuel \u2014 consolidated brand shopping assistant (reactive + consultative).\n     * Samuel V1\n     */\n    samuelV1(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const response = yield this.samuelV1Raw(requestParameters, initOverrides);\n            return yield response.value();\n        });\n    }\n    /**\n     * Creates request options for semanticSearch without sending the request\n     */\n    semanticSearchRequestOpts(requestParameters) {\n        return __awaiter(this, void 0, void 0, function* () {\n            if (requestParameters['searchRequest'] == null) {\n                throw new runtime.RequiredError('searchRequest', 'Required parameter \"searchRequest\" was null or undefined when calling semanticSearch().');\n            }\n            const queryParameters = {};\n            if (requestParameters['name'] != null) {\n                queryParameters['name'] = requestParameters['name'];\n            }\n            const headerParameters = {};\n            headerParameters['Content-Type'] = 'application/json';\n            let urlPath = `/api/semantic-search`;\n            return {\n                path: urlPath,\n                method: 'POST',\n                headers: headerParameters,\n                query: queryParameters,\n                body: SearchRequestToJSON(requestParameters['searchRequest']),\n            };\n        });\n    }\n    /**\n     * Stream search results over Server-Sent Events.  Three paths under the hood (parser decides):   - structured / sequence: SQL over events + summaries   - similarity: redirect users to /similar (handled separately)   - fuzzy: SQL pre-filter + affect-floor + Claude Haiku judge\n     * Semantic Search\n     */\n    semanticSearchRaw(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const requestOptions = yield this.semanticSearchRequestOpts(requestParameters);\n            const response = yield this.request(requestOptions, initOverrides);\n            if (this.isJsonMime(response.headers.get('content-type'))) {\n                return new runtime.JSONApiResponse(response);\n            }\n            else {\n                return new runtime.TextApiResponse(response);\n            }\n        });\n    }\n    /**\n     * Stream search results over Server-Sent Events.  Three paths under the hood (parser decides):   - structured / sequence: SQL over events + summaries   - similarity: redirect users to /similar (handled separately)   - fuzzy: SQL pre-filter + affect-floor + Claude Haiku judge\n     * Semantic Search\n     */\n    semanticSearch(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const response = yield this.semanticSearchRaw(requestParameters, initOverrides);\n            return yield response.value();\n        });\n    }\n    /**\n     * Creates request options for semanticSearchClick without sending the request\n     */\n    semanticSearchClickRequestOpts(requestParameters) {\n        return __awaiter(this, void 0, void 0, function* () {\n            if (requestParameters['clickRequest'] == null) {\n                throw new runtime.RequiredError('clickRequest', 'Required parameter \"clickRequest\" was null or undefined when calling semanticSearchClick().');\n            }\n            const queryParameters = {};\n            if (requestParameters['name'] != null) {\n                queryParameters['name'] = requestParameters['name'];\n            }\n            const headerParameters = {};\n            headerParameters['Content-Type'] = 'application/json';\n            let urlPath = `/api/semantic-search/click`;\n            return {\n                path: urlPath,\n                method: 'POST',\n                headers: headerParameters,\n                query: queryParameters,\n                body: ClickRequestToJSON(requestParameters['clickRequest']),\n            };\n        });\n    }\n    /**\n     * Record a click / find-similar / open-replay action on a result card.  Fire-and-forget: emits one structured log line (`semantic_search.click`) and a bounded-tag counter. The log carries `query_id`, `session_id`, `position`, and `action` so Datadog log facets can compute CTR-by-position and per-action engagement without any DB writes.\n     * Semantic Search Click\n     */\n    semanticSearchClickRaw(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const requestOptions = yield this.semanticSearchClickRequestOpts(requestParameters);\n            const response = yield this.request(requestOptions, initOverrides);\n            return new runtime.JSONApiResponse(response);\n        });\n    }\n    /**\n     * Record a click / find-similar / open-replay action on a result card.  Fire-and-forget: emits one structured log line (`semantic_search.click`) and a bounded-tag counter. The log carries `query_id`, `session_id`, `position`, and `action` so Datadog log facets can compute CTR-by-position and per-action engagement without any DB writes.\n     * Semantic Search Click\n     */\n    semanticSearchClick(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const response = yield this.semanticSearchClickRaw(requestParameters, initOverrides);\n            return yield response.value();\n        });\n    }\n    /**\n     * Creates request options for semanticSearchSimilar without sending the request\n     */\n    semanticSearchSimilarRequestOpts(requestParameters) {\n        return __awaiter(this, void 0, void 0, function* () {\n            if (requestParameters['similarRequest'] == null) {\n                throw new runtime.RequiredError('similarRequest', 'Required parameter \"similarRequest\" was null or undefined when calling semanticSearchSimilar().');\n            }\n            const queryParameters = {};\n            if (requestParameters['name'] != null) {\n                queryParameters['name'] = requestParameters['name'];\n            }\n            const headerParameters = {};\n            headerParameters['Content-Type'] = 'application/json';\n            let urlPath = `/api/semantic-search/similar`;\n            return {\n                path: urlPath,\n                method: 'POST',\n                headers: headerParameters,\n                query: queryParameters,\n                body: SimilarRequestToJSON(requestParameters['similarRequest']),\n            };\n        });\n    }\n    /**\n     * Synchronous cosine \\'find similar\\' lookup.  No LLM. One BQ query against `fct_session_behavioral_vectors`. Returns empty list if the source session isn\\'t in the vector table (e.g. older than 90 days or under the 5s duration floor).\n     * Semantic Search Similar\n     */\n    semanticSearchSimilarRaw(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const requestOptions = yield this.semanticSearchSimilarRequestOpts(requestParameters);\n            const response = yield this.request(requestOptions, initOverrides);\n            return new runtime.JSONApiResponse(response, (jsonValue) => SimilarResponseFromJSON(jsonValue));\n        });\n    }\n    /**\n     * Synchronous cosine \\'find similar\\' lookup.  No LLM. One BQ query against `fct_session_behavioral_vectors`. Returns empty list if the source session isn\\'t in the vector table (e.g. older than 90 days or under the 5s duration floor).\n     * Semantic Search Similar\n     */\n    semanticSearchSimilar(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const response = yield this.semanticSearchSimilarRaw(requestParameters, initOverrides);\n            return yield response.value();\n        });\n    }\n    /**\n     * Creates request options for shoppingAssistant without sending the request\n     */\n    shoppingAssistantRequestOpts(requestParameters) {\n        return __awaiter(this, void 0, void 0, function* () {\n            if (requestParameters['shoppingAssistantRequest'] == null) {\n                throw new runtime.RequiredError('shoppingAssistantRequest', 'Required parameter \"shoppingAssistantRequest\" was null or undefined when calling shoppingAssistant().');\n            }\n            const queryParameters = {};\n            if (requestParameters['name'] != null) {\n                queryParameters['name'] = requestParameters['name'];\n            }\n            const headerParameters = {};\n            headerParameters['Content-Type'] = 'application/json';\n            let urlPath = `/api/shopping-assistant`;\n            return {\n                path: urlPath,\n                method: 'POST',\n                headers: headerParameters,\n                query: queryParameters,\n                body: ShoppingAssistantRequestToJSON(requestParameters['shoppingAssistantRequest']),\n            };\n        });\n    }\n    /**\n     * Chat with an AI shopping assistant about products. Supports semantic search for finding relevant products.\n     * Shopping Assistant\n     */\n    shoppingAssistantRaw(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const requestOptions = yield this.shoppingAssistantRequestOpts(requestParameters);\n            const response = yield this.request(requestOptions, initOverrides);\n            return new runtime.JSONApiResponse(response, (jsonValue) => ShoppingAssistantResponseFromJSON(jsonValue));\n        });\n    }\n    /**\n     * Chat with an AI shopping assistant about products. Supports semantic search for finding relevant products.\n     * Shopping Assistant\n     */\n    shoppingAssistant(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const response = yield this.shoppingAssistantRaw(requestParameters, initOverrides);\n            return yield response.value();\n        });\n    }\n    /**\n     * Creates request options for shoppingAssistantV2 without sending the request\n     */\n    shoppingAssistantV2RequestOpts(requestParameters) {\n        return __awaiter(this, void 0, void 0, function* () {\n            if (requestParameters['shoppingAssistantV2Request'] == null) {\n                throw new runtime.RequiredError('shoppingAssistantV2Request', 'Required parameter \"shoppingAssistantV2Request\" was null or undefined when calling shoppingAssistantV2().');\n            }\n            const queryParameters = {};\n            if (requestParameters['name'] != null) {\n                queryParameters['name'] = requestParameters['name'];\n            }\n            const headerParameters = {};\n            headerParameters['Content-Type'] = 'application/json';\n            let urlPath = `/api/shopping-assistant/v2`;\n            return {\n                path: urlPath,\n                method: 'POST',\n                headers: headerParameters,\n                query: queryParameters,\n                body: ShoppingAssistantV2RequestToJSON(requestParameters['shoppingAssistantV2Request']),\n            };\n        });\n    }\n    /**\n     * Chat with an AI shopping assistant (Langchain v2). Supports multi-turn via DB-backed conversation history.\n     * Shopping Assistant V2\n     */\n    shoppingAssistantV2Raw(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const requestOptions = yield this.shoppingAssistantV2RequestOpts(requestParameters);\n            const response = yield this.request(requestOptions, initOverrides);\n            return new runtime.JSONApiResponse(response, (jsonValue) => ShoppingAssistantResponseFromJSON(jsonValue));\n        });\n    }\n    /**\n     * Chat with an AI shopping assistant (Langchain v2). Supports multi-turn via DB-backed conversation history.\n     * Shopping Assistant V2\n     */\n    shoppingAssistantV2(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const response = yield this.shoppingAssistantV2Raw(requestParameters, initOverrides);\n            return yield response.value();\n        });\n    }\n    /**\n     * Creates request options for startModuleGenerationJob without sending the request\n     */\n    startModuleGenerationJobRequestOpts(requestParameters) {\n        return __awaiter(this, void 0, void 0, function* () {\n            if (requestParameters['startModuleJobRequest'] == null) {\n                throw new runtime.RequiredError('startModuleJobRequest', 'Required parameter \"startModuleJobRequest\" was null or undefined when calling startModuleGenerationJob().');\n            }\n            const queryParameters = {};\n            if (requestParameters['name'] != null) {\n                queryParameters['name'] = requestParameters['name'];\n            }\n            const headerParameters = {};\n            headerParameters['Content-Type'] = 'application/json';\n            let urlPath = `/api/module/jobs`;\n            return {\n                path: urlPath,\n                method: 'POST',\n                headers: headerParameters,\n                query: queryParameters,\n                body: StartModuleJobRequestToJSON(requestParameters['startModuleJobRequest']),\n            };\n        });\n    }\n    /**\n     * Start an async module generation job. Returns immediately with a row in status=\\'generating\\'. Poll GET /module/jobs/{module_id} until status is \\'ready\\' (use the returned bundle/config) or \\'failed\\' (inspect `error`).\n     * Start Module Generation Job\n     */\n    startModuleGenerationJobRaw(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const requestOptions = yield this.startModuleGenerationJobRequestOpts(requestParameters);\n            const response = yield this.request(requestOptions, initOverrides);\n            return new runtime.JSONApiResponse(response, (jsonValue) => ModuleJobResponseFromJSON(jsonValue));\n        });\n    }\n    /**\n     * Start an async module generation job. Returns immediately with a row in status=\\'generating\\'. Poll GET /module/jobs/{module_id} until status is \\'ready\\' (use the returned bundle/config) or \\'failed\\' (inspect `error`).\n     * Start Module Generation Job\n     */\n    startModuleGenerationJob(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const response = yield this.startModuleGenerationJobRaw(requestParameters, initOverrides);\n            return yield response.value();\n        });\n    }\n    /**\n     * Creates request options for warmModuleCacheApiWarmModuleCachePost without sending the request\n     */\n    warmModuleCacheApiWarmModuleCachePostRequestOpts(requestParameters) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const queryParameters = {};\n            if (requestParameters['name'] != null) {\n                queryParameters['name'] = requestParameters['name'];\n            }\n            const headerParameters = {};\n            let urlPath = `/api/warm-module-cache`;\n            return {\n                path: urlPath,\n                method: 'POST',\n                headers: headerParameters,\n                query: queryParameters,\n            };\n        });\n    }\n    /**\n     * Warm the selector + Haiku structural analysis cache AND file cache.  Call this after deploy or whenever you want to pre-seed the cache. Runs in parallel: 1. Selector + Haiku analysis for common modules (concurrent) 2. GraphQL batch-read of all module/react source files into file cache  Requires authentication (same as other /api/ endpoints).  Usage: curl -X POST http://localhost:8000/api/warm-module-cache -H \\\"Authorization: Bearer <token>\\\"\n     * Warm Module Cache\n     */\n    warmModuleCacheApiWarmModuleCachePostRaw(requestParameters, initOverrides) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const requestOptions = yield this.warmModuleCacheApiWarmModuleCachePostRequestOpts(requestParameters);\n            const response = yield this.request(requestOptions, initOverrides);\n            return new runtime.JSONApiResponse(response);\n        });\n    }\n    /**\n     * Warm the selector + Haiku structural analysis cache AND file cache.  Call this after deploy or whenever you want to pre-seed the cache. Runs in parallel: 1. Selector + Haiku analysis for common modules (concurrent) 2. GraphQL batch-read of all module/react source files into file cache  Requires authentication (same as other /api/ endpoints).  Usage: curl -X POST http://localhost:8000/api/warm-module-cache -H \\\"Authorization: Bearer <token>\\\"\n     * Warm Module Cache\n     */\n    warmModuleCacheApiWarmModuleCachePost() {\n        return __awaiter(this, arguments, void 0, function* (requestParameters = {}, initOverrides) {\n            const response = yield this.warmModuleCacheApiWarmModuleCachePostRaw(requestParameters, initOverrides);\n            return yield response.value();\n        });\n    }\n}\n", "import {\n  Configuration,\n  DefaultApi,\n  SamuelRequest,\n  SamuelResponse,\n} from \"@fermat/agents-api\";\nimport {\n  readFromSessionStorage,\n  removeFromSessionStorage,\n  writeToSessionStorage,\n} from \"../util/session-storage\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { logShoppingAssistantChatFailure } from \"../util/datadog-logger\";\nimport { useMutation } from \"@tanstack/react-query\";\n\nconst DEFAULT_AGENTS_API_BASE_URL = \"https://agents-public.fermatcommerce.com\";\n\nexport interface ChatMessage {\n  id: string;\n  role: \"user\" | \"assistant\";\n  content: string;\n  timestamp: Date;\n  recommendedProductHandles?: string[];\n  /** Parallel to recommendedProductHandles: variant externalId per handle (\"\" = product-level). */\n  recommendedVariantExternalIds?: string[];\n  carouselHeading?: string;\n  /** samuel/v1 tap-able quick replies, rendered as chips; a click sends the reply as the next message. */\n  suggestedReplies?: string[];\n  /** samuel/v1 follow-up question. Rendered as its own bubble only when it differs from `content`\n   *  (on ask-only turns the backend puts the same question in `content`, so it would duplicate). */\n  clarifyingQuestion?: string;\n  /** samuel/v1 only (FDE-472): offer the live-agent transfer on this turn. */\n  suggestHandoff?: boolean;\n  /** Why the offer appeared. Only \"requested\" skips straight to the confirm card; every other\n   *  value, including an unknown one, gets the two-tap offer card first. */\n  handoffReason?: SamuelResponse[\"handoffReason\"];\n}\n\n// The samuel/v1 response in the shape onSuccess and the message list use.\ninterface NormalizedChatResult {\n  conversationId: string;\n  responseText: string;\n  recommendedProductHandles?: string[];\n  // Parallel to recommendedProductHandles, '' where no variant was resolved, so the carousel\n  // deep-links the variant when one is known and the product otherwise.\n  recommendedVariantExternalIds?: string[];\n  carouselHeading?: string;\n  // Tap-able quick replies.\n  suggestedReplies?: string[];\n  // The crisp follow-up question (distinct from responseText on recommendation turns).\n  clarifyingQuestion?: string;\n  suggestHandoff?: boolean;\n  handoffReason?: SamuelResponse[\"handoffReason\"];\n}\n\ninterface SendMessageParams {\n  message: string;\n  messageType?: \"suggestion\" | \"typed\";\n  shopperTurnCount: number;\n}\n\nexport interface UseChatMutationOptions {\n  /** Scopes API requests, sessionStorage namespace, analytics. */\n  orgId: string;\n  /** The product currently being viewed. */\n  heroProductHandle?: string;\n  /** Brand page URL; sent so agents-api can resolve the hero in org-only mode. */\n  heroProductUrl?: string;\n  /** Funnel id when running on a Fermat funnel. */\n  productFunnelId?: string;\n  /** Tile id (funnel/preview); used as the fallback context when no funnel id. */\n  tileId?: string;\n  /** Agents API base URL; defaults to the production CloudFront edge (agents-public). */\n  agentsApiBaseUrl?: string;\n  /** sessionStorage namespace; defaults to orgId. */\n  storageNamespace?: string;\n  /**\n   * What this widget can do, sent to samuel/v1 on every turn so the model only ever proposes what\n   * the surface can actually render (FDE-472).\n   */\n  capabilities?: {\n    /** The widget renders a phone/email/URL as a tap-able link. */\n    contactLinks: boolean;\n    /** A live-agent channel is wired. Sent on EVERY turn, with no threshold: an explicit request\n     *  for a person must never be gated. */\n    externalHandoff: boolean;\n    /** Shopper turns after which the UNPROMPTED offer unlocks. Absent means never unprompted. */\n    handoffAfterTurns?: number;\n  };\n  onMessageSent?: (params: {\n    messageType: \"suggestion\" | \"typed\";\n    messageIndex: number;\n    conversationId?: string;\n    /** For a suggestion click: the reply text, its index in the offered set, and how many were\n     *  offered on the turn it came from. Absent for typed messages. */\n    suggestedReplyText?: string;\n    suggestedReplyIndex?: number;\n    suggestedRepliesOfferedCount?: number;\n  }) => void;\n  onResponseReceived?: (params: {\n    conversationId: string;\n    recommendationsCount: number;\n    responseTimeMs: number;\n  }) => void;\n  onConversationTurnCompleted?: (params: {\n    conversationId: string;\n    userMessage: string;\n    assistantMessage: string;\n    recommendedProductHandles?: string[];\n    carouselHeading?: string;\n    /** samuel/v1 quick replies offered on this turn, and the follow-up question, for analytics. */\n    suggestedReplies?: string[];\n    clarifyingQuestion?: string;\n    /** samuel/v1 handoff offer on this turn (FDE-472), so the caller can track it once per turn. */\n    suggestHandoff?: boolean;\n    handoffReason?: SamuelResponse[\"handoffReason\"];\n  }) => void;\n  onChatError?: (params: {\n    conversationId?: string;\n    status?: number;\n    errorName?: string;\n    mode: string;\n    messageType?: \"suggestion\" | \"typed\";\n    responseTimeMs: number;\n  }) => void;\n}\n\n// Keys kept byte-identical to the hosted-tiles version (fermat-chat-messages:<ns>) so a\n// returning shopper's persisted conversation survives the funnel \u2192 Claire flip.\nconst chatMessagesKey = (ns: string) => `fermat-chat-messages:${ns}`;\nconst chatConversationIdKey = (ns: string) =>\n  `fermat-chat-conversation-id:${ns}`;\n\nfunction loadPersistedMessages(ns: string): ChatMessage[] {\n  const stored = readFromSessionStorage(chatMessagesKey(ns));\n  if (!stored) return [];\n  try {\n    const parsed = JSON.parse(stored) as ChatMessage[];\n    return parsed.map((msg) => ({\n      ...msg,\n      timestamp: new Date(msg.timestamp),\n    }));\n  } catch {\n    return [];\n  }\n}\n\nfunction loadPersistedConversationId(ns: string): string | null {\n  return readFromSessionStorage(chatConversationIdKey(ns));\n}\n\nfunction getAgentsApiClient(basePath: string): DefaultApi {\n  return new DefaultApi(new Configuration({ basePath }));\n}\n\nfunction agentsApiOrigin(basePath: string): string {\n  try {\n    return new URL(basePath).origin;\n  } catch {\n    return \"invalid\";\n  }\n}\n\nexport function useChatMutation(options: UseChatMutationOptions) {\n  const {\n    orgId,\n    heroProductHandle,\n    heroProductUrl,\n    productFunnelId,\n    tileId,\n    agentsApiBaseUrl,\n    storageNamespace,\n    capabilities,\n    onMessageSent,\n    onResponseReceived,\n    onConversationTurnCompleted,\n    onChatError,\n  } = options;\n\n  const ns = storageNamespace ?? orgId;\n  const basePath = agentsApiBaseUrl ?? DEFAULT_AGENTS_API_BASE_URL;\n\n  const [messages, setMessages] = useState<ChatMessage[]>(() =>\n    loadPersistedMessages(ns),\n  );\n  const [conversationId, setConversationId] = useState<string | null>(() =>\n    loadPersistedConversationId(ns),\n  );\n\n  useEffect(() => {\n    writeToSessionStorage(chatMessagesKey(ns), JSON.stringify(messages));\n  }, [ns, messages]);\n\n  useEffect(() => {\n    if (conversationId) {\n      writeToSessionStorage(chatConversationIdKey(ns), conversationId);\n    }\n  }, [ns, conversationId]);\n\n  // \"fake-product-funnel-id\" is a sentinel used by the /pt/ preview path with no real\n  // funnel. Treat it as absent so we fall back to tileId + orgId.\n  const realProductFunnelId =\n    productFunnelId && productFunnelId !== \"fake-product-funnel-id\"\n      ? productFunnelId\n      : null;\n\n  const mutation = useMutation({\n    mutationFn: async (params: SendMessageParams) => {\n      if (!orgId) {\n        throw new Error(\"Missing org id\");\n      }\n      const resolutionMode = realProductFunnelId\n        ? \"funnel\"\n        : tileId\n          ? \"tile+org\"\n          : \"org-only\";\n      const client = getAgentsApiClient(basePath);\n      const requestStartTime = Date.now();\n      try {\n        // productUrl reverse-maps the hero on a PDP; pageUrl (same brand-page href) lets Samuel\n        // classify the page (home / category / product) and seed behaviour. Both drop off when absent.\n        const request: SamuelRequest = {\n          message: params.message,\n          orgId,\n          ...(heroProductHandle ? { productHandle: heroProductHandle } : {}),\n          ...(heroProductUrl\n            ? { productUrl: heroProductUrl, pageUrl: heroProductUrl }\n            : {}),\n          // Reserved on samuel/v1: accepted but not read, so recommendations stay org-wide. It is\n          // sent anyway because the per-brand config work will scope on it. A non-member\n          // destination renders on the funnel's default group rather than 404ing, so nothing here\n          // depends on scoping.\n          ...(realProductFunnelId\n            ? { productFunnelId: realProductFunnelId }\n            : {}),\n          ...(tileId ? { tileId } : {}),\n          ...(conversationId ? { conversationId } : {}),\n          ...(capabilities\n            ? {\n                capabilities: {\n                  contactLinks: capabilities.contactLinks,\n                  externalHandoff: capabilities.externalHandoff,\n                  // The threshold stays widget-side: agents-api learns only whether the\n                  // unprompted offer is unlocked, never how many turns it takes.\n                  canOfferHandoffUnprompted:\n                    capabilities.externalHandoff &&\n                    capabilities.handoffAfterTurns !== undefined &&\n                    capabilities.handoffAfterTurns > 0 &&\n                    params.shopperTurnCount >= capabilities.handoffAfterTurns,\n                },\n              }\n            : {}),\n        };\n        const data = await client.samuelV1({ samuelRequest: request });\n        const result: NormalizedChatResult = {\n          conversationId: data.conversationId,\n          responseText: data.response,\n          recommendedProductHandles: data.recommendedProductHandles,\n          recommendedVariantExternalIds: data.recommendedVariantExternalIds,\n          carouselHeading: data.carouselHeading,\n          suggestedReplies: data.suggestedReplies,\n          clarifyingQuestion: data.clarifyingQuestion ?? undefined,\n          suggestHandoff: data.suggestHandoff,\n          handoffReason: data.handoffReason,\n        };\n        return {\n          result,\n          responseTimeMs: Date.now() - requestStartTime,\n          userMessage: params.message,\n        };\n      } catch (err) {\n        // Log sanitized failure metadata only. Never shopper text or raw response bodies.\n        const e = err as {\n          name?: string;\n          response?: { status?: number; statusText?: string };\n        };\n        logShoppingAssistantChatFailure({\n          mode: resolutionMode,\n          agents_api_origin: agentsApiOrigin(basePath),\n          org_id: orgId || undefined,\n          product_funnel_id: realProductFunnelId ?? undefined,\n          tile_id: tileId,\n          has_hero_product_handle: Boolean(heroProductHandle),\n          has_hero_product_url: Boolean(heroProductUrl),\n          has_conversation_id: Boolean(conversationId),\n          message_type: params.messageType,\n          http_status: e?.response?.status,\n          status_text: e?.response?.statusText,\n          error_name: e?.name,\n          response_time_ms: Date.now() - requestStartTime,\n        });\n        onChatError?.({\n          conversationId: conversationId ?? undefined,\n          status: e?.response?.status,\n          errorName: e?.name,\n          mode: resolutionMode,\n          messageType: params.messageType,\n          responseTimeMs: Date.now() - requestStartTime,\n        });\n        throw err;\n      }\n    },\n    onSuccess: ({\n      result,\n      responseTimeMs,\n      userMessage,\n    }: {\n      result: NormalizedChatResult;\n      responseTimeMs: number;\n      userMessage: string;\n    }) => {\n      setConversationId(result.conversationId);\n\n      onResponseReceived?.({\n        conversationId: result.conversationId,\n        recommendationsCount: result.recommendedProductHandles?.length ?? 0,\n        responseTimeMs,\n      });\n\n      onConversationTurnCompleted?.({\n        conversationId: result.conversationId,\n        userMessage,\n        assistantMessage: result.responseText,\n        recommendedProductHandles: result.recommendedProductHandles,\n        carouselHeading: result.carouselHeading,\n        suggestedReplies: result.suggestedReplies,\n        clarifyingQuestion: result.clarifyingQuestion,\n        suggestHandoff: result.suggestHandoff,\n        handoffReason: result.handoffReason,\n      });\n\n      const assistantMessage: ChatMessage = {\n        id: result.conversationId + \"-\" + Date.now(),\n        role: \"assistant\",\n        content: result.responseText,\n        timestamp: new Date(),\n        recommendedProductHandles: result.recommendedProductHandles,\n        recommendedVariantExternalIds: result.recommendedVariantExternalIds,\n        carouselHeading: result.carouselHeading,\n        suggestedReplies: result.suggestedReplies,\n        clarifyingQuestion: result.clarifyingQuestion,\n        suggestHandoff: result.suggestHandoff,\n        handoffReason: result.handoffReason,\n      };\n      setMessages((prev) => [...prev, assistantMessage]);\n    },\n  });\n\n  const sendMessage = useCallback(\n    (message: string, messageType: \"suggestion\" | \"typed\" = \"typed\") => {\n      const userMessage: ChatMessage = {\n        id: \"user-\" + Date.now(),\n        role: \"user\",\n        content: message,\n        timestamp: new Date(),\n      };\n\n      // For a suggestion click, record which reply and how many were offered on the turn it came\n      // from (the last assistant message), so analytics can measure chips-shown to chips-clicked.\n      const offeredReplies =\n        messageType === \"suggestion\"\n          ? ([...messages].reverse().find((m) => m.role === \"assistant\")\n              ?.suggestedReplies ?? [])\n          : [];\n      onMessageSent?.({\n        messageType,\n        messageIndex: messages.filter((m) => m.role === \"user\").length,\n        conversationId: conversationId ?? undefined,\n        ...(messageType === \"suggestion\"\n          ? {\n              suggestedReplyText: message,\n              // Only emit index/count for a genuine assistant chip (offered on a prior turn). The\n              // empty-state starter pills also route through \"suggestion\" but have no offered set,\n              // so leaving these absent keeps count>0/index>=0 as the clean \"real chip\" signal.\n              ...(offeredReplies.length > 0\n                ? {\n                    suggestedReplyIndex: offeredReplies.indexOf(message),\n                    suggestedRepliesOfferedCount: offeredReplies.length,\n                  }\n                : {}),\n            }\n          : {}),\n      });\n      setMessages((prev) => [...prev, userMessage]);\n\n      mutation.mutate({\n        message,\n        messageType,\n        shopperTurnCount: messages.filter((m) => m.role === \"user\").length + 1,\n      });\n    },\n    [mutation, onMessageSent, conversationId, messages],\n  );\n\n  const resetChat = useCallback(() => {\n    setMessages([]);\n    setConversationId(null);\n    removeFromSessionStorage(chatMessagesKey(ns));\n    removeFromSessionStorage(chatConversationIdKey(ns));\n    mutation.reset();\n  }, [mutation, ns]);\n\n  return {\n    messages,\n    sendMessage,\n    resetChat,\n    isLoading: mutation.isLoading,\n    error: mutation.error as Error | null,\n    conversationId,\n  };\n}\n", "/* eslint-disable local-rules/disallow-side-effects */\n/**\n * Keep references on console methods to avoid triggering patched behaviors\n *\n * NB: in some setup, console could already be patched by another SDK.\n * In this case, some display messages can be sent by the other SDK\n * but we should be safe from infinite loop nonetheless.\n */\n\nexport const ConsoleApiName = {\n  log: 'log',\n  debug: 'debug',\n  info: 'info',\n  warn: 'warn',\n  error: 'error',\n} as const\n\nexport type ConsoleApiName = (typeof ConsoleApiName)[keyof typeof ConsoleApiName]\n\ninterface Display {\n  debug: typeof console.debug\n  log: typeof console.log\n  info: typeof console.info\n  warn: typeof console.warn\n  error: typeof console.error\n}\n\n/**\n * When building JS bundles, some users might use a plugin[1] or configuration[2] to remove\n * \"console.*\" references. This causes some issue as we expect `console.*` to be defined.\n * As a workaround, let's use a variable alias, so those expressions won't be taken into account by\n * simple static analysis.\n *\n * [1]: https://babeljs.io/docs/babel-plugin-transform-remove-console/\n * [2]: https://github.com/terser/terser#compress-options (look for drop_console)\n */\nexport const globalConsole = console\n\nexport const originalConsoleMethods = {} as Display\nObject.keys(ConsoleApiName).forEach((name) => {\n  originalConsoleMethods[name as ConsoleApiName] = globalConsole[name as ConsoleApiName]\n})\n\nconst PREFIX = 'Datadog Browser SDK:'\n\nexport const display: Display = {\n  debug: originalConsoleMethods.debug.bind(globalConsole, PREFIX),\n  log: originalConsoleMethods.log.bind(globalConsole, PREFIX),\n  info: originalConsoleMethods.info.bind(globalConsole, PREFIX),\n  warn: originalConsoleMethods.warn.bind(globalConsole, PREFIX),\n  error: originalConsoleMethods.error.bind(globalConsole, PREFIX),\n}\n\nexport const DOCS_ORIGIN = 'https://docs.datadoghq.com'\nexport const DOCS_TROUBLESHOOTING = `${DOCS_ORIGIN}/real_user_monitoring/browser/troubleshooting`\nexport const MORE_DETAILS = 'More details:'\n", "import { display } from './display'\n\nexport function catchUserErrors<Args extends any[], R>(fn: (...args: Args) => R, errorMsg: string) {\n  return (...args: Args) => {\n    try {\n      return fn(...args)\n    } catch (err) {\n      display.error(errorMsg, err)\n    }\n  }\n}\n", "/**\n * Return true if the draw is successful\n * @param threshold between 0 and 100\n */\nexport function performDraw(threshold: number): boolean {\n  return threshold !== 0 && Math.random() * 100 <= threshold\n}\n\nexport function round(num: number, decimals: 0 | 1 | 2 | 3 | 4) {\n  return +num.toFixed(decimals)\n}\n\nexport function isPercentage(value: unknown) {\n  return isNumber(value) && value >= 0 && value <= 100\n}\n\nexport function isNumber(value: unknown): value is number {\n  return typeof value === 'number'\n}\n", "import { isNumber, round } from './numberUtils'\n\nexport const ONE_SECOND = 1000\nexport const ONE_MINUTE = 60 * ONE_SECOND\nexport const ONE_HOUR = 60 * ONE_MINUTE\nexport const ONE_DAY = 24 * ONE_HOUR\nexport const ONE_YEAR = 365 * ONE_DAY\n\nexport type Duration = number & { d: 'Duration in ms' }\nexport type ServerDuration = number & { s: 'Duration in ns' }\nexport type TimeStamp = number & { t: 'Epoch time' }\nexport type RelativeTime = number & { r: 'Time relative to navigation start' } & { d: 'Duration in ms' }\nexport type ClocksState = { relative: RelativeTime; timeStamp: TimeStamp }\n\nexport function relativeToClocks(relative: RelativeTime) {\n  return { relative, timeStamp: getCorrectedTimeStamp(relative) }\n}\n\nexport function timeStampToClocks(timeStamp: TimeStamp) {\n  return { relative: getRelativeTime(timeStamp), timeStamp }\n}\n\nfunction getCorrectedTimeStamp(relativeTime: RelativeTime) {\n  const correctedOrigin = (dateNow() - performance.now()) as TimeStamp\n  // apply correction only for positive drift\n  if (correctedOrigin > getNavigationStart()) {\n    return Math.round(addDuration(correctedOrigin, relativeTime)) as TimeStamp\n  }\n  return getTimeStamp(relativeTime)\n}\n\nexport function currentDrift() {\n  return Math.round(dateNow() - addDuration(getNavigationStart(), performance.now() as Duration))\n}\n\nexport function toServerDuration(duration: Duration): ServerDuration\nexport function toServerDuration(duration: Duration | undefined): ServerDuration | undefined\nexport function toServerDuration(duration: Duration | undefined) {\n  if (!isNumber(duration)) {\n    return duration\n  }\n  return round(duration * 1e6, 0) as ServerDuration\n}\n\nexport function dateNow() {\n  // Do not use `Date.now` because sometimes websites are wrongly \"polyfilling\" it. For example, we\n  // had some users using a very old version of `datejs`, which patched `Date.now` to return a Date\n  // instance instead of a timestamp[1]. Those users are unlikely to fix this, so let's handle this\n  // case ourselves.\n  // [1]: https://github.com/datejs/Datejs/blob/97f5c7c58c5bc5accdab8aa7602b6ac56462d778/src/core-debug.js#L14-L16\n  return new Date().getTime()\n}\n\nexport function timeStampNow() {\n  return dateNow() as TimeStamp\n}\n\nexport function relativeNow() {\n  return performance.now() as RelativeTime\n}\n\nexport function clocksNow() {\n  return { relative: relativeNow(), timeStamp: timeStampNow() }\n}\n\nexport function clocksOrigin() {\n  return { relative: 0 as RelativeTime, timeStamp: getNavigationStart() }\n}\n\nexport function elapsed(start: TimeStamp, end: TimeStamp): Duration\nexport function elapsed(start: RelativeTime, end: RelativeTime): Duration\nexport function elapsed(start: number, end: number) {\n  return (end - start) as Duration\n}\n\nexport function addDuration(a: TimeStamp, b: Duration): TimeStamp\nexport function addDuration(a: RelativeTime, b: Duration): RelativeTime\nexport function addDuration(a: Duration, b: Duration): Duration\nexport function addDuration(a: number, b: number) {\n  return a + b\n}\n\n/**\n * Get the time since the navigation was started.\n *\n * Note: this does not use `performance.timeOrigin` because it doesn't seem to reflect the actual\n * time on which the navigation has started: it may be much farther in the past, at least in Firefox 71.\n * Related issue in Firefox: https://bugzilla.mozilla.org/show_bug.cgi?id=1429926\n */\nexport function getRelativeTime(timestamp: TimeStamp) {\n  return (timestamp - getNavigationStart()) as RelativeTime\n}\n\nexport function getTimeStamp(relativeTime: RelativeTime) {\n  return Math.round(addDuration(getNavigationStart(), relativeTime)) as TimeStamp\n}\n\nexport function looksLikeRelativeTime(time: RelativeTime | TimeStamp): time is RelativeTime {\n  return time < ONE_YEAR\n}\n\n/**\n * Navigation start slightly change on some rare cases\n */\nlet navigationStart: TimeStamp | undefined\n\nfunction getNavigationStart() {\n  if (navigationStart === undefined) {\n    navigationStart = performance.timing.navigationStart as TimeStamp\n  }\n  return navigationStart\n}\n", "export const ONE_KIBI_BYTE = 1024\nexport const ONE_MEBI_BYTE = 1024 * ONE_KIBI_BYTE\n\n// eslint-disable-next-line no-control-regex\nconst HAS_MULTI_BYTES_CHARACTERS = /[^\\u0000-\\u007F]/\n\nexport function computeBytesCount(candidate: string): number {\n  // Accurate bytes count computations can degrade performances when there is a lot of events to process\n  if (!HAS_MULTI_BYTES_CHARACTERS.test(candidate)) {\n    return candidate.length\n  }\n\n  if (window.TextEncoder !== undefined) {\n    return new TextEncoder().encode(candidate).length\n  }\n\n  return new Blob([candidate]).size\n}\n\nexport function concatBuffers(buffers: Uint8Array[]): Uint8Array {\n  const length = buffers.reduce((total, buffer) => total + buffer.length, 0)\n  const result: Uint8Array = new Uint8Array(length)\n  let offset = 0\n  for (const buffer of buffers) {\n    result.set(buffer, offset)\n    offset += buffer.length\n  }\n  return result\n}\n", "export function includes(candidate: string, search: string): boolean\nexport function includes<T>(candidate: T[], search: T): boolean\nexport function includes(candidate: string | unknown[], search: any) {\n  return candidate.indexOf(search) !== -1\n}\n\nexport function arrayFrom<T>(arrayLike: ArrayLike<T> | Set<T>): T[] {\n  if (Array.from) {\n    return Array.from(arrayLike)\n  }\n\n  const array = []\n\n  if (arrayLike instanceof Set) {\n    arrayLike.forEach((item) => array.push(item))\n  } else {\n    for (let i = 0; i < arrayLike.length; i++) {\n      array.push(arrayLike[i])\n    }\n  }\n\n  return array\n}\n\nexport function find<T, S extends T>(\n  array: ArrayLike<T>,\n  predicate: (item: T, index: number) => item is S\n): S | undefined\nexport function find<T>(array: ArrayLike<T>, predicate: (item: T, index: number) => boolean): T | undefined\nexport function find(array: ArrayLike<unknown>, predicate: (item: unknown, index: number) => boolean): unknown {\n  for (let i = 0; i < array.length; i += 1) {\n    const item = array[i]\n    if (predicate(item, i)) {\n      return item\n    }\n  }\n  return undefined\n}\n\nexport function findLast<T, S extends T>(\n  array: T[],\n  predicate: (item: T, index: number, array: T[]) => item is S\n): S | undefined {\n  for (let i = array.length - 1; i >= 0; i -= 1) {\n    const item = array[i]\n    if (predicate(item, i, array)) {\n      return item\n    }\n  }\n  return undefined\n}\n\nexport function forEach<List extends { [index: number]: any }>(\n  list: List,\n  callback: (value: List[number], index: number, parent: List) => void\n) {\n  Array.prototype.forEach.call(list, callback as any)\n}\n\nexport function objectValues<T = unknown>(object: { [key: string]: T }) {\n  return Object.keys(object).map((key) => object[key])\n}\n\nexport function objectEntries<T = unknown>(object: { [key: string]: T }): Array<[string, T]> {\n  return Object.keys(object).map((key) => [key, object[key]])\n}\n\nexport function startsWith(candidate: string, search: string) {\n  return candidate.slice(0, search.length) === search\n}\n\nexport function endsWith(candidate: string, search: string) {\n  return candidate.slice(-search.length) === search\n}\n\ninterface Assignable {\n  [key: string]: any\n}\n\nexport function assign<T, U>(target: T, source: U): T & U\nexport function assign<T, U, V>(target: T, source1: U, source2: V): T & U & V\nexport function assign<T, U, V, W>(target: T, source1: U, source2: V, source3: W): T & U & V & W\nexport function assign<T, U, V, W, X>(target: T, source1: U, source2: V, source3: W, source4: X): T & U & V & W & X\nexport function assign(target: Assignable, ...toAssign: Assignable[]) {\n  toAssign.forEach((source: Assignable) => {\n    for (const key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key]\n      }\n    }\n  })\n  return target\n}\n", "import { assign } from './polyfills'\n\nexport function shallowClone<T>(object: T): T & Record<string, never> {\n  return assign({}, object)\n}\n\nexport function objectHasValue<T extends { [key: string]: unknown }>(object: T, value: unknown): value is T[keyof T] {\n  return Object.keys(object).some((key) => object[key] === value)\n}\n\nexport function isEmptyObject(object: object) {\n  return Object.keys(object).length === 0\n}\n\nexport function mapValues<A, B>(object: { [key: string]: A }, fn: (arg: A) => B) {\n  const newObject: { [key: string]: B } = {}\n  for (const key of Object.keys(object)) {\n    newObject[key] = fn(object[key])\n  }\n  return newObject\n}\n", "/**\n * inspired by https://mathiasbynens.be/notes/globalthis\n */\n\nexport function getGlobalObject<T = typeof globalThis>(): T {\n  if (typeof globalThis === 'object') {\n    return globalThis as unknown as T\n  }\n  Object.defineProperty(Object.prototype, '_dd_temp_', {\n    get() {\n      return this as object\n    },\n    configurable: true,\n  })\n  // @ts-ignore _dd_temp is defined using defineProperty\n  let globalObject: unknown = _dd_temp_\n  // @ts-ignore _dd_temp is defined using defineProperty\n  delete Object.prototype._dd_temp_\n  if (typeof globalObject !== 'object') {\n    // on safari _dd_temp_ is available on window but not globally\n    // fallback on other browser globals check\n    if (typeof self === 'object') {\n      globalObject = self\n    } else if (typeof window === 'object') {\n      globalObject = window\n    } else {\n      globalObject = {}\n    }\n  }\n  return globalObject as T\n}\n", "import { getGlobalObject } from './getGlobalObject'\n\nexport interface BrowserWindowWithZoneJs extends Window {\n  Zone?: {\n    // All Zone.js versions expose the __symbol__ method, but we observed that some website have a\n    // 'Zone' global variable unrelated to Zone.js, so let's consider this method optional\n    // nonetheless.\n    __symbol__?: (name: string) => string\n  }\n}\n\n/**\n * Gets the original value for a DOM API that was potentially patched by Zone.js.\n *\n * Zone.js[1] is a library that patches a bunch of JS and DOM APIs. It usually stores the original\n * value of the patched functions/constructors/methods in a hidden property prefixed by\n * __zone_symbol__.\n *\n * In multiple occasions, we observed that Zone.js is the culprit of important issues leading to\n * browser resource exhaustion (memory leak, high CPU usage). This method is used as a workaround to\n * use the original DOM API instead of the one patched by Zone.js.\n *\n * [1]: https://github.com/angular/angular/tree/main/packages/zone.js\n */\nexport function getZoneJsOriginalValue<Target, Name extends keyof Target & string>(\n  target: Target,\n  name: Name\n): Target[Name] {\n  const browserWindow = getGlobalObject<BrowserWindowWithZoneJs>()\n  let original: Target[Name] | undefined\n  if (browserWindow.Zone && typeof browserWindow.Zone.__symbol__ === 'function') {\n    original = (target as any)[browserWindow.Zone.__symbol__(name)]\n  }\n  if (!original) {\n    original = target[name]\n  }\n  return original\n}\n", "import { display } from './display'\n\nlet onMonitorErrorCollected: undefined | ((error: unknown) => void)\nlet debugMode = false\n\nexport function startMonitorErrorCollection(newOnMonitorErrorCollected: (error: unknown) => void) {\n  onMonitorErrorCollected = newOnMonitorErrorCollected\n}\n\nexport function setDebugMode(newDebugMode: boolean) {\n  debugMode = newDebugMode\n}\n\nexport function resetMonitor() {\n  onMonitorErrorCollected = undefined\n  debugMode = false\n}\n\nexport function monitored<T extends (...params: any[]) => unknown>(\n  _: any,\n  __: string,\n  descriptor: TypedPropertyDescriptor<T>\n) {\n  const originalMethod = descriptor.value!\n  descriptor.value = function (this: any, ...args: Parameters<T>) {\n    const decorated = onMonitorErrorCollected ? monitor(originalMethod) : originalMethod\n    return decorated.apply(this, args) as ReturnType<T>\n  } as T\n}\n\nexport function monitor<T extends (...args: any[]) => any>(fn: T): T {\n  return function (this: any) {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n    return callMonitored(fn, this, arguments as unknown as Parameters<T>)\n  } as unknown as T // consider output type has input type\n}\n\nexport function callMonitored<T extends (...args: any[]) => any>(\n  fn: T,\n  context: ThisParameterType<T>,\n  args: Parameters<T>\n): ReturnType<T> | undefined\nexport function callMonitored<T extends (this: void) => any>(fn: T): ReturnType<T> | undefined\nexport function callMonitored<T extends (...args: any[]) => any>(\n  fn: T,\n  context?: any,\n  args?: any\n): ReturnType<T> | undefined {\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n    return fn.apply(context, args)\n  } catch (e) {\n    displayIfDebugEnabled(e)\n    if (onMonitorErrorCollected) {\n      try {\n        onMonitorErrorCollected(e)\n      } catch (e) {\n        displayIfDebugEnabled(e)\n      }\n    }\n  }\n}\n\nexport function displayIfDebugEnabled(...args: any[]) {\n  if (debugMode) {\n    display.error('[MONITOR]', ...args)\n  }\n}\n", "import { getZoneJsOriginalValue } from './getZoneJsOriginalValue'\nimport { monitor } from './monitor'\nimport { getGlobalObject } from './getGlobalObject'\n\nexport type TimeoutId = ReturnType<typeof globalThis.setTimeout>\n\nexport function setTimeout(callback: () => void, delay?: number): TimeoutId {\n  return getZoneJsOriginalValue(getGlobalObject(), 'setTimeout')(monitor(callback), delay)\n}\n\nexport function clearTimeout(timeoutId: TimeoutId | undefined) {\n  getZoneJsOriginalValue(getGlobalObject(), 'clearTimeout')(timeoutId)\n}\n\nexport function setInterval(callback: () => void, delay?: number): TimeoutId {\n  return getZoneJsOriginalValue(getGlobalObject(), 'setInterval')(monitor(callback), delay)\n}\n\nexport function clearInterval(timeoutId: TimeoutId | undefined) {\n  getZoneJsOriginalValue(getGlobalObject(), 'clearInterval')(timeoutId)\n}\n", "export interface Subscription {\n  unsubscribe: () => void\n}\n\n// eslint-disable-next-line no-restricted-syntax\nexport class Observable<T> {\n  private observers: Array<(data: T) => void> = []\n  private onLastUnsubscribe?: () => void\n\n  constructor(private onFirstSubscribe?: (observable: Observable<T>) => (() => void) | void) {}\n\n  subscribe(f: (data: T) => void): Subscription {\n    this.observers.push(f)\n    if (this.observers.length === 1 && this.onFirstSubscribe) {\n      this.onLastUnsubscribe = this.onFirstSubscribe(this) || undefined\n    }\n    return {\n      unsubscribe: () => {\n        this.observers = this.observers.filter((other) => f !== other)\n        if (!this.observers.length && this.onLastUnsubscribe) {\n          this.onLastUnsubscribe()\n        }\n      },\n    }\n  }\n\n  notify(data: T) {\n    this.observers.forEach((observer) => observer(data))\n  }\n}\n\nexport function mergeObservables<T>(...observables: Array<Observable<T>>) {\n  return new Observable<T>((globalObservable) => {\n    const subscriptions: Subscription[] = observables.map((observable) =>\n      observable.subscribe((data) => globalObservable.notify(data))\n    )\n    return () => subscriptions.forEach((subscription) => subscription.unsubscribe())\n  })\n}\n", "import type { TimeoutId } from '../timer'\nimport { setTimeout, clearTimeout } from '../timer'\n\n// use lodash API\nexport function throttle<T extends (...args: any[]) => void>(\n  fn: T,\n  wait: number,\n  options?: { leading?: boolean; trailing?: boolean }\n) {\n  const needLeadingExecution = options && options.leading !== undefined ? options.leading : true\n  const needTrailingExecution = options && options.trailing !== undefined ? options.trailing : true\n  let inWaitPeriod = false\n  let pendingExecutionWithParameters: Parameters<T> | undefined\n  let pendingTimeoutId: TimeoutId\n\n  return {\n    throttled: (...parameters: Parameters<T>) => {\n      if (inWaitPeriod) {\n        pendingExecutionWithParameters = parameters\n        return\n      }\n      if (needLeadingExecution) {\n        fn(...parameters)\n      } else {\n        pendingExecutionWithParameters = parameters\n      }\n      inWaitPeriod = true\n      pendingTimeoutId = setTimeout(() => {\n        if (needTrailingExecution && pendingExecutionWithParameters) {\n          fn(...pendingExecutionWithParameters)\n        }\n        inWaitPeriod = false\n        pendingExecutionWithParameters = undefined\n      }, wait)\n    },\n    cancel: () => {\n      clearTimeout(pendingTimeoutId)\n      inWaitPeriod = false\n      pendingExecutionWithParameters = undefined\n    },\n  }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nexport function noop() {}\n", "/**\n * UUID v4\n * from https://gist.github.com/jed/982883\n */\nexport function generateUUID(placeholder?: string): string {\n  return placeholder\n    ? // eslint-disable-next-line  no-bitwise\n      (parseInt(placeholder, 10) ^ ((Math.random() * 16) >> (parseInt(placeholder, 10) / 4))).toString(16)\n    : `${1e7}-${1e3}-${4e3}-${8e3}-${1e11}`.replace(/[018]/g, generateUUID)\n}\n\nconst COMMA_SEPARATED_KEY_VALUE = /([\\w-]+)\\s*=\\s*([^;]+)/g\n\nexport function findCommaSeparatedValue(rawString: string, name: string): string | undefined {\n  COMMA_SEPARATED_KEY_VALUE.lastIndex = 0\n  // eslint-disable-next-line no-constant-condition\n  while (true) {\n    const match = COMMA_SEPARATED_KEY_VALUE.exec(rawString)\n    if (match) {\n      if (match[1] === name) {\n        return match[2]\n      }\n    } else {\n      break\n    }\n  }\n}\n\nexport function findCommaSeparatedValues(rawString: string): Map<string, string> {\n  const result = new Map<string, string>()\n  COMMA_SEPARATED_KEY_VALUE.lastIndex = 0\n  // eslint-disable-next-line no-constant-condition\n  while (true) {\n    const match = COMMA_SEPARATED_KEY_VALUE.exec(rawString)\n    if (match) {\n      result.set(match[1], match[2])\n    } else {\n      break\n    }\n  }\n  return result\n}\n\nexport function safeTruncate(candidate: string, length: number, suffix = '') {\n  const lastChar = candidate.charCodeAt(length - 1)\n  const isLastCharSurrogatePair = lastChar >= 0xd800 && lastChar <= 0xdbff\n  const correctedLength = isLastCharSurrogatePair ? length + 1 : length\n\n  if (candidate.length <= correctedLength) {\n    return candidate\n  }\n\n  return `${candidate.slice(0, correctedLength)}${suffix}`\n}\n", "// Exported only for tests\nexport const enum Browser {\n  IE,\n  CHROMIUM,\n  SAFARI,\n  OTHER,\n}\n\nexport function isIE() {\n  return detectBrowserCached() === Browser.IE\n}\n\nexport function isChromium() {\n  return detectBrowserCached() === Browser.CHROMIUM\n}\n\nexport function isSafari() {\n  return detectBrowserCached() === Browser.SAFARI\n}\n\nlet browserCache: Browser | undefined\nfunction detectBrowserCached() {\n  return browserCache ?? (browserCache = detectBrowser())\n}\n\n// Exported only for tests\nexport function detectBrowser(browserWindow: Window = window) {\n  const userAgent = browserWindow.navigator.userAgent\n  if ((browserWindow as any).chrome || /HeadlessChrome/.test(userAgent)) {\n    return Browser.CHROMIUM\n  }\n\n  if (\n    // navigator.vendor is deprecated, but it is the most resilient way we found to detect\n    // \"Apple maintained browsers\" (AKA Safari). If one day it gets removed, we still have the\n    // useragent test as a semi-working fallback.\n    browserWindow.navigator.vendor?.indexOf('Apple') === 0 ||\n    (/safari/i.test(userAgent) && !/chrome|android/i.test(userAgent))\n  ) {\n    return Browser.SAFARI\n  }\n\n  if ((browserWindow.document as any).documentMode) {\n    return Browser.IE\n  }\n\n  return Browser.OTHER\n}\n", "/**\n * LIMITATION:\n * For NPM setup, this feature flag singleton is shared between RUM and Logs product.\n * This means that an experimental flag set on the RUM product will be set on the Logs product.\n * So keep in mind that in certain configurations, your experimental feature flag may affect other products.\n *\n * FORMAT:\n * All feature flags should be snake_cased\n */\n// We want to use a real enum (i.e. not a const enum) here, to be able to check whether an arbitrary\n// string is an expected feature flag\n\nimport { objectHasValue } from './utils/objectUtils'\n\n// eslint-disable-next-line no-restricted-syntax\nexport enum ExperimentalFeature {\n  WRITABLE_RESOURCE_GRAPHQL = 'writable_resource_graphql',\n  REMOTE_CONFIGURATION = 'remote_configuration',\n  LONG_ANIMATION_FRAME = 'long_animation_frame',\n  ANONYMOUS_USER_TRACKING = 'anonymous_user_tracking',\n  ACTION_NAME_MASKING = 'action_name_masking',\n  CONSISTENT_TRACE_SAMPLING = 'consistent_trace_sampling',\n  DELAY_VIEWPORT_COLLECTION = 'delay_viewport_collection',\n}\n\nconst enabledExperimentalFeatures: Set<ExperimentalFeature> = new Set()\n\nexport function initFeatureFlags(enableExperimentalFeatures: string[] | undefined) {\n  if (Array.isArray(enableExperimentalFeatures)) {\n    addExperimentalFeatures(\n      enableExperimentalFeatures.filter((flag): flag is ExperimentalFeature =>\n        objectHasValue(ExperimentalFeature, flag)\n      )\n    )\n  }\n}\n\nexport function addExperimentalFeatures(enabledFeatures: ExperimentalFeature[]): void {\n  enabledFeatures.forEach((flag) => {\n    enabledExperimentalFeatures.add(flag)\n  })\n}\n\nexport function isExperimentalFeatureEnabled(featureName: ExperimentalFeature): boolean {\n  return enabledExperimentalFeatures.has(featureName)\n}\n\nexport function resetExperimentalFeatures(): void {\n  enabledExperimentalFeatures.clear()\n}\n\nexport function getExperimentalFeatures(): Set<ExperimentalFeature> {\n  return enabledExperimentalFeatures\n}\n", "import { display } from '../tools/display'\nimport { ONE_MINUTE, ONE_SECOND } from '../tools/utils/timeUtils'\nimport { findCommaSeparatedValue, findCommaSeparatedValues, generateUUID } from '../tools/utils/stringUtils'\n\nexport interface CookieOptions {\n  secure?: boolean\n  crossSite?: boolean\n  partitioned?: boolean\n  domain?: string\n}\n\nexport function setCookie(name: string, value: string, expireDelay: number = 0, options?: CookieOptions) {\n  const date = new Date()\n  date.setTime(date.getTime() + expireDelay)\n  const expires = `expires=${date.toUTCString()}`\n  const sameSite = options && options.crossSite ? 'none' : 'strict'\n  const domain = options && options.domain ? `;domain=${options.domain}` : ''\n  const secure = options && options.secure ? ';secure' : ''\n  const partitioned = options && options.partitioned ? ';partitioned' : ''\n  document.cookie = `${name}=${value};${expires};path=/;samesite=${sameSite}${domain}${secure}${partitioned}`\n}\n\nexport function getCookie(name: string) {\n  return findCommaSeparatedValue(document.cookie, name)\n}\n\nlet initCookieParsed: Map<string, string> | undefined\n\n/**\n * Returns a cached value of the cookie. Use this during SDK initialization (and whenever possible)\n * to avoid accessing document.cookie multiple times.\n */\nexport function getInitCookie(name: string) {\n  if (!initCookieParsed) {\n    initCookieParsed = findCommaSeparatedValues(document.cookie)\n  }\n  return initCookieParsed.get(name)\n}\n\nexport function resetInitCookies() {\n  initCookieParsed = undefined\n}\n\nexport function deleteCookie(name: string, options?: CookieOptions) {\n  setCookie(name, '', 0, options)\n}\n\nexport function areCookiesAuthorized(options: CookieOptions): boolean {\n  if (document.cookie === undefined || document.cookie === null) {\n    return false\n  }\n  try {\n    // Use a unique cookie name to avoid issues when the SDK is initialized multiple times during\n    // the test cookie lifetime\n    const testCookieName = `dd_cookie_test_${generateUUID()}`\n    const testCookieValue = 'test'\n    setCookie(testCookieName, testCookieValue, ONE_MINUTE, options)\n    const isCookieCorrectlySet = getCookie(testCookieName) === testCookieValue\n    deleteCookie(testCookieName, options)\n    return isCookieCorrectlySet\n  } catch (error) {\n    display.error(error)\n    return false\n  }\n}\n\n/**\n * No API to retrieve it, number of levels for subdomain and suffix are unknown\n * strategy: find the minimal domain on which cookies are allowed to be set\n * https://web.dev/same-site-same-origin/#site\n */\nlet getCurrentSiteCache: string | undefined\nexport function getCurrentSite() {\n  if (getCurrentSiteCache === undefined) {\n    // Use a unique cookie name to avoid issues when the SDK is initialized multiple times during\n    // the test cookie lifetime\n    const testCookieName = `dd_site_test_${generateUUID()}`\n    const testCookieValue = 'test'\n\n    const domainLevels = window.location.hostname.split('.')\n    let candidateDomain = domainLevels.pop()!\n    while (domainLevels.length && !getCookie(testCookieName)) {\n      candidateDomain = `${domainLevels.pop()!}.${candidateDomain}`\n      setCookie(testCookieName, testCookieValue, ONE_SECOND, { domain: candidateDomain })\n    }\n    deleteCookie(testCookieName, { domain: candidateDomain })\n    getCurrentSiteCache = candidateDomain\n  }\n  return getCurrentSiteCache\n}\n", "import type { CookieOptions } from '../../../browser/cookie'\nimport type { SessionPersistence } from '../sessionConstants'\nimport type { SessionState } from '../sessionState'\n\nexport const SESSION_STORE_KEY = '_dd_s'\n\nexport type SessionStoreStrategyType =\n  | { type: typeof SessionPersistence.COOKIE; cookieOptions: CookieOptions }\n  | { type: typeof SessionPersistence.LOCAL_STORAGE }\n\nexport interface SessionStoreStrategy {\n  isLockEnabled: boolean\n  persistSession: (session: SessionState) => void\n  retrieveSession: () => SessionState\n  expireSession: (previousSessionState: SessionState) => void\n}\n", "/**\n * Similar to `typeof`, but distinguish plain objects from `null` and arrays\n */\nexport function getType(value: unknown) {\n  if (value === null) {\n    return 'null'\n  }\n  if (Array.isArray(value)) {\n    return 'array'\n  }\n  return typeof value\n}\n", "import type { Context } from '../../tools/serialisation/context'\nimport { display } from '../../tools/display'\nimport { getType } from '../../tools/utils/typeUtils'\nimport { assign } from '../../tools/utils/polyfills'\nimport type { User } from './user.types'\n\n/**\n * Clone input data and ensure known user properties (id, name, email)\n * are strings, as defined here:\n * https://docs.datadoghq.com/logs/log_configuration/attributes_naming_convention/#user-related-attributes\n */\nexport function sanitizeUser(newUser: Context): Context {\n  // We shallow clone only to prevent mutation of user data.\n  const user = assign({}, newUser)\n  const keys = ['id', 'name', 'email']\n  keys.forEach((key) => {\n    if (key in user) {\n      /* eslint-disable @typescript-eslint/no-base-to-string */\n      user[key] = String(user[key])\n    }\n  })\n  return user\n}\n\n/**\n * Simple check to ensure user is valid\n */\nexport function checkUser(newUser: User): boolean {\n  const isValid = getType(newUser) === 'object'\n  if (!isValid) {\n    display.error('Unsupported user:', newUser)\n  }\n  return isValid\n}\n\nexport function generateAnonymousId() {\n  return Math.floor(Math.random() * Math.pow(2, 53)).toString(36)\n}\n", "import { ONE_HOUR, ONE_MINUTE, ONE_YEAR } from '../../tools/utils/timeUtils'\n\nexport const SESSION_TIME_OUT_DELAY = 4 * ONE_HOUR\nexport const SESSION_EXPIRATION_DELAY = 15 * ONE_MINUTE\nexport const SESSION_COOKIE_EXPIRATION_DELAY = ONE_YEAR\n\nexport const SessionPersistence = {\n  COOKIE: 'cookie',\n  LOCAL_STORAGE: 'local-storage',\n} as const\nexport type SessionPersistence = (typeof SessionPersistence)[keyof typeof SessionPersistence]\n", "export const SESSION_ENTRY_REGEXP = /^([a-zA-Z]+)=([a-z0-9-]+)$/\nexport const SESSION_ENTRY_SEPARATOR = '&'\n\nexport function isValidSessionString(sessionString: string | undefined | null): sessionString is string {\n  return (\n    !!sessionString &&\n    (sessionString.indexOf(SESSION_ENTRY_SEPARATOR) !== -1 || SESSION_ENTRY_REGEXP.test(sessionString))\n  )\n}\n", "import { ExperimentalFeature, isExperimentalFeatureEnabled } from '../../tools/experimentalFeatures'\nimport { isEmptyObject } from '../../tools/utils/objectUtils'\nimport { objectEntries } from '../../tools/utils/polyfills'\nimport { dateNow } from '../../tools/utils/timeUtils'\nimport { generateAnonymousId } from '../user'\nimport { SESSION_EXPIRATION_DELAY, SESSION_TIME_OUT_DELAY } from './sessionConstants'\nimport { isValidSessionString, SESSION_ENTRY_REGEXP, SESSION_ENTRY_SEPARATOR } from './sessionStateValidation'\nexport const EXPIRED = '1'\n\nexport interface SessionState {\n  id?: string\n  created?: string\n  expire?: string\n  isExpired?: typeof EXPIRED\n\n  [key: string]: string | undefined\n}\n\nexport function getExpiredSessionState(previousSessionState: SessionState | undefined): SessionState {\n  const expiredSessionState: SessionState = {\n    isExpired: EXPIRED,\n  }\n  if (isExperimentalFeatureEnabled(ExperimentalFeature.ANONYMOUS_USER_TRACKING)) {\n    if (previousSessionState?.anonymousId) {\n      expiredSessionState.anonymousId = previousSessionState?.anonymousId\n    } else {\n      expiredSessionState.anonymousId = generateAnonymousId()\n    }\n  }\n  return expiredSessionState\n}\n\nexport function isSessionInNotStartedState(session: SessionState) {\n  return isEmptyObject(session)\n}\n\nexport function isSessionStarted(session: SessionState) {\n  return !isSessionInNotStartedState(session)\n}\n\nexport function isSessionInExpiredState(session: SessionState) {\n  return session.isExpired !== undefined || !isActiveSession(session)\n}\n\n// An active session is a session in either `Tracked` or `NotTracked` state\nfunction isActiveSession(sessionState: SessionState) {\n  // created and expire can be undefined for versions which was not storing them\n  // these checks could be removed when older versions will not be available/live anymore\n  return (\n    (sessionState.created === undefined || dateNow() - Number(sessionState.created) < SESSION_TIME_OUT_DELAY) &&\n    (sessionState.expire === undefined || dateNow() < Number(sessionState.expire))\n  )\n}\n\nexport function expandSessionState(session: SessionState) {\n  session.expire = String(dateNow() + SESSION_EXPIRATION_DELAY)\n}\n\nexport function toSessionString(session: SessionState) {\n  return (\n    objectEntries(session)\n      // we use `aid` as a key for anonymousId\n      .map(([key, value]) => (key === 'anonymousId' ? `aid=${value}` : `${key}=${value}`))\n      .join(SESSION_ENTRY_SEPARATOR)\n  )\n}\n\nexport function toSessionState(sessionString: string | undefined | null) {\n  const session: SessionState = {}\n  if (isValidSessionString(sessionString)) {\n    sessionString.split(SESSION_ENTRY_SEPARATOR).forEach((entry) => {\n      const matches = SESSION_ENTRY_REGEXP.exec(entry)\n      if (matches !== null) {\n        const [, key, value] = matches\n        if (key === 'aid') {\n          // we use `aid` as a key for anonymousId\n          session.anonymousId = value\n        } else {\n          session[key] = value\n        }\n      }\n    })\n  }\n  return session\n}\n", "import { getInitCookie } from '../../browser/cookie'\nimport type { SessionStoreStrategy } from './storeStrategies/sessionStoreStrategy'\nimport { SESSION_STORE_KEY } from './storeStrategies/sessionStoreStrategy'\nimport type { SessionState } from './sessionState'\nimport { expandSessionState, isSessionStarted } from './sessionState'\n\nexport const OLD_SESSION_COOKIE_NAME = '_dd'\nexport const OLD_RUM_COOKIE_NAME = '_dd_r'\nexport const OLD_LOGS_COOKIE_NAME = '_dd_l'\n\n// duplicate values to avoid dependency issues\nexport const RUM_SESSION_KEY = 'rum'\nexport const LOGS_SESSION_KEY = 'logs'\n\n/**\n * This migration should remain in the codebase as long as older versions are available/live\n * to allow older sdk versions to be upgraded to newer versions without compatibility issues.\n */\nexport function tryOldCookiesMigration(cookieStoreStrategy: SessionStoreStrategy) {\n  const sessionString = getInitCookie(SESSION_STORE_KEY)\n  if (!sessionString) {\n    const oldSessionId = getInitCookie(OLD_SESSION_COOKIE_NAME)\n    const oldRumType = getInitCookie(OLD_RUM_COOKIE_NAME)\n    const oldLogsType = getInitCookie(OLD_LOGS_COOKIE_NAME)\n    const session: SessionState = {}\n\n    if (oldSessionId) {\n      session.id = oldSessionId\n    }\n    if (oldLogsType && /^[01]$/.test(oldLogsType)) {\n      session[LOGS_SESSION_KEY] = oldLogsType\n    }\n    if (oldRumType && /^[012]$/.test(oldRumType)) {\n      session[RUM_SESSION_KEY] = oldRumType\n    }\n\n    if (isSessionStarted(session)) {\n      expandSessionState(session)\n      cookieStoreStrategy.persistSession(session)\n    }\n  }\n}\n", "import { isChromium } from '../../../tools/utils/browserDetection'\nimport { ExperimentalFeature, isExperimentalFeatureEnabled } from '../../../tools/experimentalFeatures'\nimport type { CookieOptions } from '../../../browser/cookie'\nimport { getCurrentSite, areCookiesAuthorized, getCookie, setCookie } from '../../../browser/cookie'\nimport type { InitConfiguration } from '../../configuration'\nimport { tryOldCookiesMigration } from '../oldCookiesMigration'\nimport {\n  SESSION_COOKIE_EXPIRATION_DELAY,\n  SESSION_EXPIRATION_DELAY,\n  SESSION_TIME_OUT_DELAY,\n  SessionPersistence,\n} from '../sessionConstants'\nimport type { SessionState } from '../sessionState'\nimport { toSessionString, toSessionState, getExpiredSessionState } from '../sessionState'\nimport type { SessionStoreStrategy, SessionStoreStrategyType } from './sessionStoreStrategy'\nimport { SESSION_STORE_KEY } from './sessionStoreStrategy'\n\nexport function selectCookieStrategy(initConfiguration: InitConfiguration): SessionStoreStrategyType | undefined {\n  const cookieOptions = buildCookieOptions(initConfiguration)\n  return areCookiesAuthorized(cookieOptions) ? { type: SessionPersistence.COOKIE, cookieOptions } : undefined\n}\n\nexport function initCookieStrategy(cookieOptions: CookieOptions): SessionStoreStrategy {\n  const cookieStore = {\n    /**\n     * Lock strategy allows mitigating issues due to concurrent access to cookie.\n     * This issue concerns only chromium browsers and enabling this on firefox increases cookie write failures.\n     */\n    isLockEnabled: isChromium(),\n    persistSession: persistSessionCookie(cookieOptions),\n    retrieveSession: retrieveSessionCookie,\n    expireSession: (sessionState: SessionState) => expireSessionCookie(cookieOptions, sessionState),\n  }\n\n  tryOldCookiesMigration(cookieStore)\n\n  return cookieStore\n}\n\nfunction persistSessionCookie(options: CookieOptions) {\n  return (session: SessionState) => {\n    setCookie(SESSION_STORE_KEY, toSessionString(session), SESSION_EXPIRATION_DELAY, options)\n  }\n}\n\nfunction expireSessionCookie(options: CookieOptions, sessionState: SessionState) {\n  const expiredSessionState = getExpiredSessionState(sessionState)\n  setCookie(\n    SESSION_STORE_KEY,\n    toSessionString(expiredSessionState),\n    isExperimentalFeatureEnabled(ExperimentalFeature.ANONYMOUS_USER_TRACKING)\n      ? SESSION_COOKIE_EXPIRATION_DELAY\n      : SESSION_TIME_OUT_DELAY,\n    options\n  )\n}\n\nfunction retrieveSessionCookie(): SessionState {\n  const sessionString = getCookie(SESSION_STORE_KEY)\n  const sessionState = toSessionState(sessionString)\n  return sessionState\n}\n\nexport function buildCookieOptions(initConfiguration: InitConfiguration) {\n  const cookieOptions: CookieOptions = {}\n\n  cookieOptions.secure =\n    !!initConfiguration.useSecureSessionCookie ||\n    !!initConfiguration.usePartitionedCrossSiteSessionCookie ||\n    !!initConfiguration.useCrossSiteSessionCookie\n  cookieOptions.crossSite =\n    !!initConfiguration.usePartitionedCrossSiteSessionCookie || !!initConfiguration.useCrossSiteSessionCookie\n  cookieOptions.partitioned = !!initConfiguration.usePartitionedCrossSiteSessionCookie\n\n  if (initConfiguration.trackSessionAcrossSubdomains) {\n    cookieOptions.domain = getCurrentSite()\n  }\n\n  return cookieOptions\n}\n", "import { generateUUID } from '../../../tools/utils/stringUtils'\nimport { SessionPersistence } from '../sessionConstants'\nimport type { SessionState } from '../sessionState'\nimport { toSessionString, toSessionState, getExpiredSessionState } from '../sessionState'\nimport type { SessionStoreStrategy, SessionStoreStrategyType } from './sessionStoreStrategy'\nimport { SESSION_STORE_KEY } from './sessionStoreStrategy'\n\nconst LOCAL_STORAGE_TEST_KEY = '_dd_test_'\n\nexport function selectLocalStorageStrategy(): SessionStoreStrategyType | undefined {\n  try {\n    const id = generateUUID()\n    const testKey = `${LOCAL_STORAGE_TEST_KEY}${id}`\n    localStorage.setItem(testKey, id)\n    const retrievedId = localStorage.getItem(testKey)\n    localStorage.removeItem(testKey)\n    return id === retrievedId ? { type: SessionPersistence.LOCAL_STORAGE } : undefined\n  } catch {\n    return undefined\n  }\n}\n\nexport function initLocalStorageStrategy(): SessionStoreStrategy {\n  return {\n    isLockEnabled: false,\n    persistSession: persistInLocalStorage,\n    retrieveSession: retrieveSessionFromLocalStorage,\n    expireSession: expireSessionFromLocalStorage,\n  }\n}\n\nfunction persistInLocalStorage(sessionState: SessionState) {\n  localStorage.setItem(SESSION_STORE_KEY, toSessionString(sessionState))\n}\n\nfunction retrieveSessionFromLocalStorage(): SessionState {\n  const sessionString = localStorage.getItem(SESSION_STORE_KEY)\n  return toSessionState(sessionString)\n}\n\nfunction expireSessionFromLocalStorage(previousSessionState: SessionState) {\n  persistInLocalStorage(getExpiredSessionState(previousSessionState))\n}\n", "import { setTimeout } from '../../tools/timer'\nimport { generateUUID } from '../../tools/utils/stringUtils'\nimport { assign } from '../../tools/utils/polyfills'\nimport type { SessionStoreStrategy } from './storeStrategies/sessionStoreStrategy'\nimport type { SessionState } from './sessionState'\nimport { expandSessionState, isSessionInExpiredState } from './sessionState'\n\ntype Operations = {\n  process: (sessionState: SessionState) => SessionState | undefined\n  after?: (sessionState: SessionState) => void\n}\n\nexport const LOCK_RETRY_DELAY = 10\nexport const LOCK_MAX_TRIES = 100\nconst bufferedOperations: Operations[] = []\nlet ongoingOperations: Operations | undefined\n\nexport function processSessionStoreOperations(\n  operations: Operations,\n  sessionStoreStrategy: SessionStoreStrategy,\n  numberOfRetries = 0\n) {\n  const { isLockEnabled, persistSession, expireSession } = sessionStoreStrategy\n  const persistWithLock = (session: SessionState) => persistSession(assign({}, session, { lock: currentLock }))\n  const retrieveStore = () => {\n    const session = sessionStoreStrategy.retrieveSession()\n    const lock = session.lock\n\n    if (session.lock) {\n      delete session.lock\n    }\n\n    return {\n      session,\n      lock,\n    }\n  }\n\n  if (!ongoingOperations) {\n    ongoingOperations = operations\n  }\n  if (operations !== ongoingOperations) {\n    bufferedOperations.push(operations)\n    return\n  }\n  if (isLockEnabled && numberOfRetries >= LOCK_MAX_TRIES) {\n    next(sessionStoreStrategy)\n    return\n  }\n  let currentLock: string\n  let currentStore = retrieveStore()\n  if (isLockEnabled) {\n    // if someone has lock, retry later\n    if (currentStore.lock) {\n      retryLater(operations, sessionStoreStrategy, numberOfRetries)\n      return\n    }\n    // acquire lock\n    currentLock = generateUUID()\n    persistWithLock(currentStore.session)\n    // if lock is not acquired, retry later\n    currentStore = retrieveStore()\n    if (currentStore.lock !== currentLock) {\n      retryLater(operations, sessionStoreStrategy, numberOfRetries)\n      return\n    }\n  }\n  let processedSession = operations.process(currentStore.session)\n  if (isLockEnabled) {\n    // if lock corrupted after process, retry later\n    currentStore = retrieveStore()\n    if (currentStore.lock !== currentLock!) {\n      retryLater(operations, sessionStoreStrategy, numberOfRetries)\n      return\n    }\n  }\n  if (processedSession) {\n    if (isSessionInExpiredState(processedSession)) {\n      expireSession(processedSession)\n    } else {\n      expandSessionState(processedSession)\n      if (isLockEnabled) {\n        persistWithLock(processedSession)\n      } else {\n        persistSession(processedSession)\n      }\n    }\n  }\n  if (isLockEnabled) {\n    // correctly handle lock around expiration would require to handle this case properly at several levels\n    // since we don't have evidence of lock issues around expiration, let's just not do the corruption check for it\n    if (!(processedSession && isSessionInExpiredState(processedSession))) {\n      // if lock corrupted after persist, retry later\n      currentStore = retrieveStore()\n      if (currentStore.lock !== currentLock!) {\n        retryLater(operations, sessionStoreStrategy, numberOfRetries)\n        return\n      }\n      persistSession(currentStore.session)\n      processedSession = currentStore.session\n    }\n  }\n  // call after even if session is not persisted in order to perform operations on\n  // up-to-date session state value => the value could have been modified by another tab\n  operations.after?.(processedSession || currentStore.session)\n  next(sessionStoreStrategy)\n}\n\nfunction retryLater(operations: Operations, sessionStore: SessionStoreStrategy, currentNumberOfRetries: number) {\n  setTimeout(() => {\n    processSessionStoreOperations(operations, sessionStore, currentNumberOfRetries + 1)\n  }, LOCK_RETRY_DELAY)\n}\n\nfunction next(sessionStore: SessionStoreStrategy) {\n  ongoingOperations = undefined\n  const nextOperations = bufferedOperations.shift()\n  if (nextOperations) {\n    processSessionStoreOperations(nextOperations, sessionStore)\n  }\n}\n", "import { clearInterval, setInterval } from '../../tools/timer'\nimport { Observable } from '../../tools/observable'\nimport { ONE_SECOND, dateNow } from '../../tools/utils/timeUtils'\nimport { throttle } from '../../tools/utils/functionUtils'\nimport { generateUUID } from '../../tools/utils/stringUtils'\nimport type { InitConfiguration } from '../configuration'\nimport { assign } from '../../tools/utils/polyfills'\nimport { display } from '../../tools/display'\nimport { selectCookieStrategy, initCookieStrategy } from './storeStrategies/sessionInCookie'\nimport type { SessionStoreStrategyType } from './storeStrategies/sessionStoreStrategy'\nimport {\n  getExpiredSessionState,\n  isSessionInExpiredState,\n  isSessionInNotStartedState,\n  isSessionStarted,\n} from './sessionState'\nimport type { SessionState } from './sessionState'\nimport { initLocalStorageStrategy, selectLocalStorageStrategy } from './storeStrategies/sessionInLocalStorage'\nimport { processSessionStoreOperations } from './sessionStoreOperations'\nimport { SessionPersistence } from './sessionConstants'\n\nexport interface SessionStore {\n  expandOrRenewSession: () => void\n  expandSession: () => void\n  getSession: () => SessionState\n  restartSession: () => void\n  renewObservable: Observable<void>\n  expireObservable: Observable<void>\n  sessionStateUpdateObservable: Observable<{ previousState: SessionState; newState: SessionState }>\n  expire: () => void\n  stop: () => void\n  updateSessionState: (state: Partial<SessionState>) => void\n}\n\n/**\n * Every second, the storage will be polled to check for any change that can occur\n * to the session state in another browser tab, or another window.\n * This value has been determined from our previous cookie-only implementation.\n */\nexport const STORAGE_POLL_DELAY = ONE_SECOND\n\n/**\n * Selects the correct session store strategy type based on the configuration and storage\n * availability.\n */\nexport function selectSessionStoreStrategyType(\n  initConfiguration: InitConfiguration\n): SessionStoreStrategyType | undefined {\n  switch (initConfiguration.sessionPersistence) {\n    case SessionPersistence.COOKIE:\n      return selectCookieStrategy(initConfiguration)\n\n    case SessionPersistence.LOCAL_STORAGE:\n      return selectLocalStorageStrategy()\n\n    case undefined: {\n      let sessionStoreStrategyType = selectCookieStrategy(initConfiguration)\n      if (!sessionStoreStrategyType && initConfiguration.allowFallbackToLocalStorage) {\n        sessionStoreStrategyType = selectLocalStorageStrategy()\n      }\n      return sessionStoreStrategyType\n    }\n\n    default:\n      display.error(`Invalid session persistence '${String(initConfiguration.sessionPersistence)}'`)\n  }\n}\n\n/**\n * Different session concepts:\n * - tracked, the session has an id and is updated along the user navigation\n * - not tracked, the session does not have an id but it is updated along the user navigation\n * - inactive, no session in store or session expired, waiting for a renew session\n */\nexport function startSessionStore<TrackingType extends string>(\n  sessionStoreStrategyType: SessionStoreStrategyType,\n  productKey: string,\n  computeSessionState: (rawTrackingType?: string) => { trackingType: TrackingType; isTracked: boolean }\n): SessionStore {\n  const renewObservable = new Observable<void>()\n  const expireObservable = new Observable<void>()\n  const sessionStateUpdateObservable = new Observable<{ previousState: SessionState; newState: SessionState }>()\n\n  const sessionStoreStrategy =\n    sessionStoreStrategyType.type === SessionPersistence.COOKIE\n      ? initCookieStrategy(sessionStoreStrategyType.cookieOptions)\n      : initLocalStorageStrategy()\n  const { expireSession } = sessionStoreStrategy\n\n  const watchSessionTimeoutId = setInterval(watchSession, STORAGE_POLL_DELAY)\n  let sessionCache: SessionState\n\n  startSession()\n\n  const { throttled: throttledExpandOrRenewSession, cancel: cancelExpandOrRenewSession } = throttle(() => {\n    processSessionStoreOperations(\n      {\n        process: (sessionState) => {\n          if (isSessionInNotStartedState(sessionState)) {\n            return\n          }\n\n          const synchronizedSession = synchronizeSession(sessionState)\n          expandOrRenewSessionState(synchronizedSession)\n          return synchronizedSession\n        },\n        after: (sessionState) => {\n          if (isSessionStarted(sessionState) && !hasSessionInCache()) {\n            renewSessionInCache(sessionState)\n          }\n          sessionCache = sessionState\n        },\n      },\n      sessionStoreStrategy\n    )\n  }, STORAGE_POLL_DELAY)\n\n  function expandSession() {\n    processSessionStoreOperations(\n      {\n        process: (sessionState) => (hasSessionInCache() ? synchronizeSession(sessionState) : undefined),\n      },\n      sessionStoreStrategy\n    )\n  }\n\n  /**\n   * allows two behaviors:\n   * - if the session is active, synchronize the session cache without updating the session store\n   * - if the session is not active, clear the session store and expire the session cache\n   */\n  function watchSession() {\n    processSessionStoreOperations(\n      {\n        process: (sessionState) =>\n          isSessionInExpiredState(sessionState) ? getExpiredSessionState(sessionState) : undefined,\n        after: synchronizeSession,\n      },\n      sessionStoreStrategy\n    )\n  }\n\n  function synchronizeSession(sessionState: SessionState) {\n    if (isSessionInExpiredState(sessionState)) {\n      sessionState = getExpiredSessionState(sessionState)\n    }\n    if (hasSessionInCache()) {\n      if (isSessionInCacheOutdated(sessionState)) {\n        expireSessionInCache()\n      } else {\n        sessionStateUpdateObservable.notify({ previousState: sessionCache, newState: sessionState })\n        sessionCache = sessionState\n      }\n    }\n    return sessionState\n  }\n\n  function startSession() {\n    processSessionStoreOperations(\n      {\n        process: (sessionState) => {\n          if (isSessionInNotStartedState(sessionState)) {\n            return getExpiredSessionState(sessionState)\n          }\n        },\n        after: (sessionState) => {\n          sessionCache = sessionState\n        },\n      },\n      sessionStoreStrategy\n    )\n  }\n\n  function expandOrRenewSessionState(sessionState: SessionState) {\n    if (isSessionInNotStartedState(sessionState)) {\n      return false\n    }\n\n    const { trackingType, isTracked } = computeSessionState(sessionState[productKey])\n    sessionState[productKey] = trackingType\n    delete sessionState.isExpired\n    if (isTracked && !sessionState.id) {\n      sessionState.id = generateUUID()\n      sessionState.created = String(dateNow())\n    }\n  }\n\n  function hasSessionInCache() {\n    return sessionCache[productKey] !== undefined\n  }\n\n  function isSessionInCacheOutdated(sessionState: SessionState) {\n    return sessionCache.id !== sessionState.id || sessionCache[productKey] !== sessionState[productKey]\n  }\n\n  function expireSessionInCache() {\n    sessionCache = getExpiredSessionState(sessionCache)\n    expireObservable.notify()\n  }\n\n  function renewSessionInCache(sessionState: SessionState) {\n    sessionCache = sessionState\n    renewObservable.notify()\n  }\n\n  function updateSessionState(partialSessionState: Partial<SessionState>) {\n    processSessionStoreOperations(\n      {\n        process: (sessionState) => assign({}, sessionState, partialSessionState),\n        after: synchronizeSession,\n      },\n      sessionStoreStrategy\n    )\n  }\n\n  return {\n    expandOrRenewSession: throttledExpandOrRenewSession,\n    expandSession,\n    getSession: () => sessionCache,\n    renewObservable,\n    expireObservable,\n    sessionStateUpdateObservable,\n    restartSession: startSession,\n    expire: () => {\n      cancelExpandOrRenewSession()\n      expireSession(sessionCache)\n      synchronizeSession(getExpiredSessionState(sessionCache))\n    },\n    stop: () => {\n      clearInterval(watchSessionTimeoutId)\n    },\n    updateSessionState,\n  }\n}\n", "import { Observable } from '../tools/observable'\n\nexport const TrackingConsent = {\n  GRANTED: 'granted',\n  NOT_GRANTED: 'not-granted',\n} as const\nexport type TrackingConsent = (typeof TrackingConsent)[keyof typeof TrackingConsent]\n\nexport interface TrackingConsentState {\n  tryToInit: (trackingConsent: TrackingConsent) => void\n  update: (trackingConsent: TrackingConsent) => void\n  isGranted: () => boolean\n  observable: Observable<void>\n}\n\nexport function createTrackingConsentState(currentConsent?: TrackingConsent): TrackingConsentState {\n  const observable = new Observable<void>()\n\n  return {\n    tryToInit(trackingConsent: TrackingConsent) {\n      if (!currentConsent) {\n        currentConsent = trackingConsent\n      }\n    },\n    update(trackingConsent: TrackingConsent) {\n      currentConsent = trackingConsent\n      observable.notify()\n    },\n    isGranted() {\n      return currentConsent === TrackingConsent.GRANTED\n    },\n    observable,\n  }\n}\n", "import { noop } from '../utils/functionUtils'\n\n/**\n * Custom implementation of JSON.stringify that ignores some toJSON methods. We need to do that\n * because some sites badly override toJSON on certain objects. Removing all toJSON methods from\n * nested values would be too costly, so we just detach them from the root value, and native classes\n * used to build JSON values (Array and Object).\n *\n * Note: this still assumes that JSON.stringify is correct.\n */\nexport function jsonStringify(\n  value: unknown,\n  replacer?: Array<string | number>,\n  space?: string | number\n): string | undefined {\n  if (typeof value !== 'object' || value === null) {\n    return JSON.stringify(value)\n  }\n\n  // Note: The order matter here. We need to detach toJSON methods on parent classes before their\n  // subclasses.\n  const restoreObjectPrototypeToJson = detachToJsonMethod(Object.prototype)\n  const restoreArrayPrototypeToJson = detachToJsonMethod(Array.prototype)\n  const restoreValuePrototypeToJson = detachToJsonMethod(Object.getPrototypeOf(value))\n  const restoreValueToJson = detachToJsonMethod(value)\n\n  try {\n    return JSON.stringify(value, replacer, space)\n  } catch {\n    return '<error: unable to serialize object>'\n  } finally {\n    restoreObjectPrototypeToJson()\n    restoreArrayPrototypeToJson()\n    restoreValuePrototypeToJson()\n    restoreValueToJson()\n  }\n}\n\nexport interface ObjectWithToJsonMethod {\n  toJSON?: () => unknown\n}\n\nexport function detachToJsonMethod(value: object) {\n  const object = value as ObjectWithToJsonMethod\n  const objectToJson = object.toJSON\n  if (objectToJson) {\n    delete object.toJSON\n    return () => {\n      object.toJSON = objectToJson\n    }\n  }\n  return noop\n}\n", "import { jsonStringify } from '../serialisation/jsonStringify'\n\nexport function normalizeUrl(url: string) {\n  return buildUrl(url, location.href).href\n}\n\nexport function isValidUrl(url: string) {\n  try {\n    return !!buildUrl(url)\n  } catch {\n    return false\n  }\n}\n\nexport function getPathName(url: string) {\n  const pathname = buildUrl(url).pathname\n  return pathname[0] === '/' ? pathname : `/${pathname}`\n}\n\nexport function buildUrl(url: string, base?: string) {\n  const supportedURL = getSupportedUrl()\n  if (supportedURL) {\n    try {\n      return base !== undefined ? new supportedURL(url, base) : new supportedURL(url)\n    } catch (error) {\n      throw new Error(`Failed to construct URL: ${String(error)} ${jsonStringify({ url, base })!}`)\n    }\n  }\n  if (base === undefined && !/:/.test(url)) {\n    throw new Error(`Invalid URL: '${url}'`)\n  }\n  let doc = document\n  const anchorElement = doc.createElement('a')\n  if (base !== undefined) {\n    doc = document.implementation.createHTMLDocument('')\n    const baseElement = doc.createElement('base')\n    baseElement.href = base\n    doc.head.appendChild(baseElement)\n    doc.body.appendChild(anchorElement)\n  }\n  anchorElement.href = url\n  return anchorElement\n}\n\nconst originalURL = URL\nlet isURLSupported: boolean | undefined\nfunction getSupportedUrl(): typeof URL | undefined {\n  if (isURLSupported === undefined) {\n    try {\n      const url = new originalURL('http://test/path')\n      isURLSupported = url.href === 'http://test/path'\n    } catch {\n      isURLSupported = false\n    }\n  }\n  return isURLSupported ? originalURL : undefined\n}\n", "export const INTAKE_SITE_STAGING = 'datad0g.com'\nexport const INTAKE_SITE_FED_STAGING = 'dd0g-gov.com'\nexport const INTAKE_SITE_US1 = 'datadoghq.com'\nexport const INTAKE_SITE_EU1 = 'datadoghq.eu'\nexport const INTAKE_SITE_US1_FED = 'ddog-gov.com'\n\nexport const PCI_INTAKE_HOST_US1 = 'pci.browser-intake-datadoghq.com'\nexport const INTAKE_URL_PARAMETERS = ['ddsource', 'ddtags']\n", "import type { Payload } from '../../transport'\nimport { timeStampNow } from '../../tools/utils/timeUtils'\nimport { normalizeUrl } from '../../tools/utils/urlPolyfill'\nimport { generateUUID } from '../../tools/utils/stringUtils'\nimport type { InitConfiguration } from './configuration'\nimport { INTAKE_SITE_US1, INTAKE_SITE_FED_STAGING, PCI_INTAKE_HOST_US1 } from './intakeSites'\n\n// replaced at build time\ndeclare const __BUILD_ENV__SDK_VERSION__: string\n\nexport type TrackType = 'logs' | 'rum' | 'replay'\nexport type ApiType =\n  | 'xhr'\n  | 'fetch'\n  | 'beacon'\n  // 'manual' reflects that the request have been sent manually, outside of the SDK (ex: via curl or\n  // a Node.js script).\n  | 'manual'\n\nexport type EndpointBuilder = ReturnType<typeof createEndpointBuilder>\n\nexport function createEndpointBuilder(\n  initConfiguration: InitConfiguration,\n  trackType: TrackType,\n  configurationTags: string[]\n) {\n  const buildUrlWithParameters = createEndpointUrlWithParametersBuilder(initConfiguration, trackType)\n\n  return {\n    build(api: ApiType, payload: Payload) {\n      const parameters = buildEndpointParameters(initConfiguration, trackType, configurationTags, api, payload)\n      return buildUrlWithParameters(parameters)\n    },\n    urlPrefix: buildUrlWithParameters(''),\n    trackType,\n  }\n}\n\n/**\n * Create a function used to build a full endpoint url from provided parameters. The goal of this\n * function is to pre-compute some parts of the URL to avoid re-computing everything on every\n * request, as only parameters are changing.\n */\nfunction createEndpointUrlWithParametersBuilder(\n  initConfiguration: InitConfiguration,\n  trackType: TrackType\n): (parameters: string) => string {\n  const path = `/api/v2/${trackType}`\n  const proxy = initConfiguration.proxy\n  if (typeof proxy === 'string') {\n    const normalizedProxyUrl = normalizeUrl(proxy)\n    return (parameters) => `${normalizedProxyUrl}?ddforward=${encodeURIComponent(`${path}?${parameters}`)}`\n  }\n  if (typeof proxy === 'function') {\n    return (parameters) => proxy({ path, parameters })\n  }\n  const host = buildEndpointHost(trackType, initConfiguration)\n  return (parameters) => `https://${host}${path}?${parameters}`\n}\n\nfunction buildEndpointHost(trackType: TrackType, initConfiguration: InitConfiguration & { usePciIntake?: boolean }) {\n  const { site = INTAKE_SITE_US1, internalAnalyticsSubdomain } = initConfiguration\n\n  if (trackType === 'logs' && initConfiguration.usePciIntake && site === INTAKE_SITE_US1) {\n    return PCI_INTAKE_HOST_US1\n  }\n\n  if (internalAnalyticsSubdomain && site === INTAKE_SITE_US1) {\n    return `${internalAnalyticsSubdomain}.${INTAKE_SITE_US1}`\n  }\n\n  if (site === INTAKE_SITE_FED_STAGING) {\n    return `http-intake.logs.${site}`\n  }\n\n  const domainParts = site.split('.')\n  const extension = domainParts.pop()\n  return `browser-intake-${domainParts.join('-')}.${extension!}`\n}\n\n/**\n * Build parameters to be used for an intake request. Parameters should be re-built for each\n * request, as they change randomly.\n */\nfunction buildEndpointParameters(\n  { clientToken, internalAnalyticsSubdomain }: InitConfiguration,\n  trackType: TrackType,\n  configurationTags: string[],\n  api: ApiType,\n  { retry, encoding }: Payload\n) {\n  const tags = [`sdk_version:${__BUILD_ENV__SDK_VERSION__}`, `api:${api}`].concat(configurationTags)\n  if (retry) {\n    tags.push(`retry_count:${retry.count}`, `retry_after:${retry.lastFailureStatus}`)\n  }\n\n  const parameters = [\n    'ddsource=browser',\n    `ddtags=${encodeURIComponent(tags.join(','))}`,\n    `dd-api-key=${clientToken}`,\n    `dd-evp-origin-version=${encodeURIComponent(__BUILD_ENV__SDK_VERSION__)}`,\n    'dd-evp-origin=browser',\n    `dd-request-id=${generateUUID()}`,\n  ]\n\n  if (encoding) {\n    parameters.push(`dd-evp-encoding=${encoding}`)\n  }\n\n  if (trackType === 'rum') {\n    parameters.push(`batch_time=${timeStampNow()}`)\n  }\n\n  if (internalAnalyticsSubdomain) {\n    parameters.reverse()\n  }\n\n  return parameters.join('&')\n}\n", "import { DOCS_ORIGIN, MORE_DETAILS, display } from '../../tools/display'\nimport type { InitConfiguration } from './configuration'\n\nexport const TAG_SIZE_LIMIT = 200\n\nexport function buildTags(configuration: InitConfiguration): string[] {\n  const { env, service, version, datacenter } = configuration\n  const tags = []\n\n  if (env) {\n    tags.push(buildTag('env', env))\n  }\n  if (service) {\n    tags.push(buildTag('service', service))\n  }\n  if (version) {\n    tags.push(buildTag('version', version))\n  }\n  if (datacenter) {\n    tags.push(buildTag('datacenter', datacenter))\n  }\n\n  return tags\n}\n\nexport function buildTag(key: string, rawValue: string) {\n  // See https://docs.datadoghq.com/getting_started/tagging/#defining-tags for tags syntax. Note\n  // that the backend may not follow the exact same rules, so we only want to display an informal\n  // warning.\n  const valueSizeLimit = TAG_SIZE_LIMIT - key.length - 1\n\n  if (rawValue.length > valueSizeLimit || hasForbiddenCharacters(rawValue)) {\n    display.warn(\n      `${key} value doesn't meet tag requirements and will be sanitized. ${MORE_DETAILS} ${DOCS_ORIGIN}/getting_started/tagging/#defining-tags`\n    )\n  }\n\n  // Let the backend do most of the sanitization, but still make sure multiple tags can't be crafted\n  // by forging a value containing commas.\n  const sanitizedValue = rawValue.replace(/,/g, '_')\n\n  return `${key}:${sanitizedValue}`\n}\n\nfunction hasForbiddenCharacters(rawValue: string) {\n  // Unicode property escapes is not supported in all browsers, so we use a try/catch.\n  // Todo: Remove the try/catch when dropping IE11.\n  if (!supportUnicodePropertyEscapes()) {\n    return false\n  }\n\n  // We use the Unicode property escapes to match any character that is a letter including other languages like Chinese, Japanese, etc.\n  // p{Ll} matches a lowercase letter.\n  // p{Lo} matches a letter that is neither uppercase nor lowercase (ex: Japanese characters).\n  // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Unicode_character_class_escape#unicode_property_escapes_vs._character_classes\n  return new RegExp('[^\\\\p{Ll}\\\\p{Lo}0-9_:./-]', 'u').test(rawValue)\n}\n\nexport function supportUnicodePropertyEscapes() {\n  try {\n    new RegExp('[\\\\p{Ll}]', 'u')\n    return true\n  } catch {\n    return false\n  }\n}\n", "import { assign, includes } from '../../tools/utils/polyfills'\nimport type { InitConfiguration } from './configuration'\nimport type { EndpointBuilder } from './endpointBuilder'\nimport { createEndpointBuilder } from './endpointBuilder'\nimport { buildTags } from './tags'\nimport { INTAKE_SITE_US1, INTAKE_URL_PARAMETERS } from './intakeSites'\n\nexport interface TransportConfiguration {\n  logsEndpointBuilder: EndpointBuilder\n  rumEndpointBuilder: EndpointBuilder\n  sessionReplayEndpointBuilder: EndpointBuilder\n  replica?: ReplicaConfiguration\n  site: string\n}\n\nexport interface ReplicaConfiguration {\n  applicationId?: string\n  logsEndpointBuilder: EndpointBuilder\n  rumEndpointBuilder: EndpointBuilder\n}\n\nexport function computeTransportConfiguration(initConfiguration: InitConfiguration): TransportConfiguration {\n  const site = initConfiguration.site || INTAKE_SITE_US1\n\n  const tags = buildTags(initConfiguration)\n\n  const endpointBuilders = computeEndpointBuilders(initConfiguration, tags)\n  const replicaConfiguration = computeReplicaConfiguration(initConfiguration, tags)\n\n  return assign(\n    {\n      replica: replicaConfiguration,\n      site,\n    },\n    endpointBuilders\n  )\n}\n\nfunction computeEndpointBuilders(initConfiguration: InitConfiguration, tags: string[]) {\n  return {\n    logsEndpointBuilder: createEndpointBuilder(initConfiguration, 'logs', tags),\n    rumEndpointBuilder: createEndpointBuilder(initConfiguration, 'rum', tags),\n    sessionReplayEndpointBuilder: createEndpointBuilder(initConfiguration, 'replay', tags),\n  }\n}\n\nfunction computeReplicaConfiguration(\n  initConfiguration: InitConfiguration,\n  tags: string[]\n): ReplicaConfiguration | undefined {\n  if (!initConfiguration.replica) {\n    return\n  }\n\n  const replicaConfiguration: InitConfiguration = assign({}, initConfiguration, {\n    site: INTAKE_SITE_US1,\n    clientToken: initConfiguration.replica.clientToken,\n  })\n\n  const replicaEndpointBuilders = {\n    logsEndpointBuilder: createEndpointBuilder(replicaConfiguration, 'logs', tags),\n    rumEndpointBuilder: createEndpointBuilder(replicaConfiguration, 'rum', tags),\n  }\n\n  return assign({ applicationId: initConfiguration.replica.applicationId }, replicaEndpointBuilders)\n}\n\nexport function isIntakeUrl(url: string): boolean {\n  // check if tags is present in the query string\n  return INTAKE_URL_PARAMETERS.every((param) => includes(url, param))\n}\n", "import { catchUserErrors } from '../../tools/catchUserErrors'\nimport { DOCS_ORIGIN, MORE_DETAILS, display } from '../../tools/display'\nimport type { RawTelemetryConfiguration } from '../telemetry'\nimport type { Duration } from '../../tools/utils/timeUtils'\nimport { ONE_SECOND } from '../../tools/utils/timeUtils'\nimport { isPercentage } from '../../tools/utils/numberUtils'\nimport { ONE_KIBI_BYTE } from '../../tools/utils/byteUtils'\nimport { objectHasValue } from '../../tools/utils/objectUtils'\nimport { assign } from '../../tools/utils/polyfills'\nimport { selectSessionStoreStrategyType } from '../session/sessionStore'\nimport type { SessionStoreStrategyType } from '../session/storeStrategies/sessionStoreStrategy'\nimport { TrackingConsent } from '../trackingConsent'\nimport type { SessionPersistence } from '../session/sessionConstants'\nimport type { TransportConfiguration } from './transportConfiguration'\nimport { computeTransportConfiguration } from './transportConfiguration'\n\nexport const DefaultPrivacyLevel = {\n  ALLOW: 'allow',\n  MASK: 'mask',\n  MASK_USER_INPUT: 'mask-user-input',\n} as const\nexport type DefaultPrivacyLevel = (typeof DefaultPrivacyLevel)[keyof typeof DefaultPrivacyLevel]\n\nexport const TraceContextInjection = {\n  ALL: 'all',\n  SAMPLED: 'sampled',\n} as const\n\nexport type TraceContextInjection = (typeof TraceContextInjection)[keyof typeof TraceContextInjection]\n\nexport interface InitConfiguration {\n  /**\n   * The client token for Datadog. Required for authenticating your application with Datadog.\n   */\n  clientToken: string\n  beforeSend?: GenericBeforeSendCallback | undefined\n  /**\n   * The percentage of sessions tracked. A value between 0 and 100.\n   * @default 100\n   */\n  sessionSampleRate?: number | undefined\n  /**\n   * The percentage of telemetry events sent. A value between 0 and 100.\n   * @default 20\n   */\n  telemetrySampleRate?: number | undefined\n  /**\n   * Initialization fails silently if the RUM Browser SDK is already initialized on the page.\n   * @default false\n   */\n  silentMultipleInit?: boolean | undefined\n\n  /**\n   * Which storage strategy to use for persisting sessions. Can be either 'cookie' or 'local-storage'.\n   * @default \"cookie\"\n   */\n  sessionPersistence?: SessionPersistence | undefined\n\n  /**\n   * Allows the use of localStorage when cookies cannot be set. This enables the RUM Browser SDK to run in environments that do not provide cookie support.\n   * See [Monitor Electron Applications Using the Browser SDK](https://docs.datadoghq.com/real_user_monitoring/guide/monitor-electron-applications-using-browser-sdk) for further information.\n   * @deprecated use `sessionPersistence: local-storage` where you want to use localStorage instead\n   */\n  allowFallbackToLocalStorage?: boolean | undefined\n\n  /**\n   * Allow listening to DOM events dispatched programmatically ([untrusted events](https://developer.mozilla.org/en-US/docs/Web/API/Event/isTrusted)). Enabling this option can be useful if you heavily rely on programmatic events, such as in an automated UI test environment.\n   * @default false\n   */\n  allowUntrustedEvents?: boolean | undefined\n  /**\n   * Store global context and user context in localStorage to preserve them along the user navigation.\n   * See [Contexts life cycle](https://docs.datadoghq.com/real_user_monitoring/browser/advanced_configuration/?tab=npm#contexts-life-cycle) for further information.\n   * @default false\n   */\n  storeContextsAcrossPages?: boolean | undefined\n  /**\n   * Set the initial user tracking consent state.\n   * See [User tracking consent](https://docs.datadoghq.com/real_user_monitoring/browser/advanced_configuration/?tab=npm#user-tracking-consent) for further information.\n   * @default granted\n   */\n  trackingConsent?: TrackingConsent | undefined\n\n  // transport options\n  /**\n   * Optional proxy URL, for example: https://www.proxy.com/path.\n   * See [Proxy Your Browser RUM Data](https://docs.datadoghq.com/real_user_monitoring/guide/proxy-rum-data) for further information.\n   */\n  proxy?: string | ProxyFn | undefined\n  /**\n   * The Datadog [site](https://docs.datadoghq.com/getting_started/site) parameter of your organization.\n   * @default datadoghq.com\n   */\n  site?: string | undefined\n\n  // tag and context options\n  /**\n   * The service name for your application. Follows the [tag syntax requirements](https://docs.datadoghq.com/getting_started/tagging/#define-tags).\n   */\n  service?: string | undefined | null\n  /**\n   * The application\u2019s environment, for example: prod, pre-prod, and staging. Follows the [tag syntax requirements](https://docs.datadoghq.com/getting_started/tagging/#define-tags).\n   */\n  env?: string | undefined | null\n  /**\n   * The application\u2019s version, for example: 1.2.3, 6c44da20, and 2020.02.13. Follows the [tag syntax requirements](https://docs.datadoghq.com/getting_started/tagging/#define-tags).\n   */\n  version?: string | undefined | null\n\n  // cookie options\n  /**\n   * Whether a secure cross-site session cookie is used\n   * @default false\n   * @deprecated use usePartitionedCrossSiteSessionCookie instead\n   */\n  useCrossSiteSessionCookie?: boolean | undefined\n  /**\n   * Use a partitioned secure cross-site session cookie. This allows the RUM Browser SDK to run when the site is loaded from another one (iframe). Implies `useSecureSessionCookie`.\n   * @default false\n   */\n  usePartitionedCrossSiteSessionCookie?: boolean | undefined\n  /**\n   * Use a secure session cookie. This disables RUM events sent on insecure (non-HTTPS) connections.\n   * @default false\n   */\n  useSecureSessionCookie?: boolean | undefined\n  /**\n   * Preserve the session across subdomains for the same site.\n   * @default false\n   */\n  trackSessionAcrossSubdomains?: boolean | undefined\n\n  // internal options\n  /**\n   * [Internal option] Enable experimental features\n   */\n  enableExperimentalFeatures?: string[] | undefined\n  /**\n   * [Internal option] Configure the dual chipping to another datacenter\n   */\n  replica?: ReplicaUserConfiguration | undefined\n  /**\n   * [Internal option] Set the datacenter from where the data is dual chipped\n   */\n  datacenter?: string\n  /**\n   * [Internal option] Datadog internal analytics subdomain\n   */\n  // TODO next major: remove this option and replace usages by proxyFn\n  internalAnalyticsSubdomain?: string\n  /**\n   * [Internal option] The percentage of telemetry configuration sent. A value between 0 and 100.\n   * @default 5\n   */\n  telemetryConfigurationSampleRate?: number\n  /**\n   * [Internal option] The percentage of telemetry usage sent. A value between 0 and 100.\n   * @default 5\n   */\n  telemetryUsageSampleRate?: number\n}\n\n// This type is only used to build the core configuration. Logs and RUM SDKs are using a proper type\n// for this option.\ntype GenericBeforeSendCallback = (event: any, context?: any) => unknown\n\n/**\n * path: /api/vX/product\n * parameters: xxx=yyy&zzz=aaa\n */\ntype ProxyFn = (options: { path: string; parameters: string }) => string\n\ninterface ReplicaUserConfiguration {\n  applicationId?: string\n  clientToken: string\n}\n\nexport interface Configuration extends TransportConfiguration {\n  // Built from init configuration\n  beforeSend: GenericBeforeSendCallback | undefined\n  sessionStoreStrategyType: SessionStoreStrategyType | undefined\n  sessionSampleRate: number\n  telemetrySampleRate: number\n  telemetryConfigurationSampleRate: number\n  telemetryUsageSampleRate: number\n  service: string | undefined\n  silentMultipleInit: boolean\n  allowUntrustedEvents: boolean\n  trackingConsent: TrackingConsent\n  storeContextsAcrossPages: boolean\n\n  // Event limits\n  eventRateLimiterThreshold: number // Limit the maximum number of actions, errors and logs per minutes\n  maxTelemetryEventsPerPage: number\n\n  // Batch configuration\n  batchBytesLimit: number\n  flushTimeout: Duration\n  batchMessagesLimit: number\n  messageBytesLimit: number\n}\n\nfunction isString(tag: unknown, tagName: string): tag is string | undefined | null {\n  if (tag !== undefined && tag !== null && typeof tag !== 'string') {\n    display.error(`${tagName} must be defined as a string`)\n    return false\n  }\n  return true\n}\n\nfunction isDatadogSite(site: unknown) {\n  if (site && typeof site === 'string' && !/(datadog|ddog|datad0g|dd0g)/.test(site)) {\n    display.error(`Site should be a valid Datadog site. ${MORE_DETAILS} ${DOCS_ORIGIN}/getting_started/site/.`)\n    return false\n  }\n  return true\n}\n\nexport function isSampleRate(sampleRate: unknown, name: string) {\n  if (sampleRate !== undefined && !isPercentage(sampleRate)) {\n    display.error(`${name} Sample Rate should be a number between 0 and 100`)\n    return false\n  }\n  return true\n}\n\nexport function validateAndBuildConfiguration(initConfiguration: InitConfiguration): Configuration | undefined {\n  if (!initConfiguration || !initConfiguration.clientToken) {\n    display.error('Client Token is not configured, we will not send any data.')\n    return\n  }\n\n  if (\n    !isDatadogSite(initConfiguration.site) ||\n    !isSampleRate(initConfiguration.sessionSampleRate, 'Session') ||\n    !isSampleRate(initConfiguration.telemetrySampleRate, 'Telemetry') ||\n    !isSampleRate(initConfiguration.telemetryConfigurationSampleRate, 'Telemetry Configuration') ||\n    !isSampleRate(initConfiguration.telemetryUsageSampleRate, 'Telemetry Usage') ||\n    !isString(initConfiguration.version, 'Version') ||\n    !isString(initConfiguration.env, 'Env') ||\n    !isString(initConfiguration.service, 'Service')\n  ) {\n    return\n  }\n\n  if (\n    initConfiguration.trackingConsent !== undefined &&\n    !objectHasValue(TrackingConsent, initConfiguration.trackingConsent)\n  ) {\n    display.error('Tracking Consent should be either \"granted\" or \"not-granted\"')\n    return\n  }\n\n  return assign(\n    {\n      beforeSend:\n        initConfiguration.beforeSend && catchUserErrors(initConfiguration.beforeSend, 'beforeSend threw an error:'),\n      sessionStoreStrategyType: selectSessionStoreStrategyType(initConfiguration),\n      sessionSampleRate: initConfiguration.sessionSampleRate ?? 100,\n      telemetrySampleRate: initConfiguration.telemetrySampleRate ?? 20,\n      telemetryConfigurationSampleRate: initConfiguration.telemetryConfigurationSampleRate ?? 5,\n      telemetryUsageSampleRate: initConfiguration.telemetryUsageSampleRate ?? 5,\n      service: initConfiguration.service || undefined,\n      silentMultipleInit: !!initConfiguration.silentMultipleInit,\n      allowUntrustedEvents: !!initConfiguration.allowUntrustedEvents,\n      trackingConsent: initConfiguration.trackingConsent ?? TrackingConsent.GRANTED,\n      storeContextsAcrossPages: !!initConfiguration.storeContextsAcrossPages,\n      /**\n       * beacon payload max queue size implementation is 64kb\n       * ensure that we leave room for logs, rum and potential other users\n       */\n      batchBytesLimit: 16 * ONE_KIBI_BYTE,\n\n      eventRateLimiterThreshold: 3000,\n      maxTelemetryEventsPerPage: 15,\n\n      /**\n       * flush automatically, aim to be lower than ALB connection timeout\n       * to maximize connection reuse.\n       */\n      flushTimeout: (30 * ONE_SECOND) as Duration,\n\n      /**\n       * Logs intake limit\n       */\n      batchMessagesLimit: 50,\n      messageBytesLimit: 256 * ONE_KIBI_BYTE,\n    },\n    computeTransportConfiguration(initConfiguration)\n  )\n}\n\nexport function serializeConfiguration(initConfiguration: InitConfiguration) {\n  return {\n    session_sample_rate: initConfiguration.sessionSampleRate,\n    telemetry_sample_rate: initConfiguration.telemetrySampleRate,\n    telemetry_configuration_sample_rate: initConfiguration.telemetryConfigurationSampleRate,\n    telemetry_usage_sample_rate: initConfiguration.telemetryUsageSampleRate,\n    use_before_send: !!initConfiguration.beforeSend,\n    use_cross_site_session_cookie: initConfiguration.useCrossSiteSessionCookie,\n    use_partitioned_cross_site_session_cookie: initConfiguration.usePartitionedCrossSiteSessionCookie,\n    use_secure_session_cookie: initConfiguration.useSecureSessionCookie,\n    use_proxy: !!initConfiguration.proxy,\n    silent_multiple_init: initConfiguration.silentMultipleInit,\n    track_session_across_subdomains: initConfiguration.trackSessionAcrossSubdomains,\n    session_persistence: initConfiguration.sessionPersistence,\n    allow_fallback_to_local_storage: !!initConfiguration.allowFallbackToLocalStorage,\n    store_contexts_across_pages: !!initConfiguration.storeContextsAcrossPages,\n    allow_untrusted_events: !!initConfiguration.allowUntrustedEvents,\n    tracking_consent: initConfiguration.trackingConsent,\n  } satisfies RawTelemetryConfiguration\n}\n", "/**\n * Cross-browser stack trace computation.\n *\n * Reference implementation: https://github.com/csnover/TraceKit/blob/04530298073c3823de72deb0b97e7b38ca7bcb59/tracekit.js\n */\n\nimport { startsWith } from '../utils/polyfills'\n\nexport interface StackFrame {\n  url?: string\n  func?: string\n  /** The arguments passed to the function, if known. */\n  args?: string[]\n  line?: number\n  column?: number\n  /** An array of source code lines; the middle element corresponds to the correct line. */\n  context?: string[]\n}\n\nexport interface StackTrace {\n  name?: string\n  message?: string\n  url?: string\n  stack: StackFrame[]\n  incomplete?: boolean\n  partial?: boolean\n}\n\nconst UNKNOWN_FUNCTION = '?'\n\nexport function computeStackTrace(ex: unknown): StackTrace {\n  const stack: StackFrame[] = []\n\n  let stackProperty = tryToGetString(ex, 'stack')\n  const exString = String(ex)\n  if (stackProperty && startsWith(stackProperty, exString)) {\n    stackProperty = stackProperty.slice(exString.length)\n  }\n  if (stackProperty) {\n    stackProperty.split('\\n').forEach((line) => {\n      const stackFrame =\n        parseChromeLine(line) || parseChromeAnonymousLine(line) || parseWinLine(line) || parseGeckoLine(line)\n      if (stackFrame) {\n        if (!stackFrame.func && stackFrame.line) {\n          stackFrame.func = UNKNOWN_FUNCTION\n        }\n\n        stack.push(stackFrame)\n      }\n    })\n  }\n\n  return {\n    message: tryToGetString(ex, 'message'),\n    name: tryToGetString(ex, 'name'),\n    stack,\n  }\n}\nconst fileUrl =\n  '((?:file|https?|blob|chrome-extension|electron|native|eval|webpack|snippet|<anonymous>|\\\\w+\\\\.|\\\\/).*?)'\nconst filePosition = '(?::(\\\\d+))'\nconst CHROME_LINE_RE = new RegExp(`^\\\\s*at (.*?) ?\\\\(${fileUrl}${filePosition}?${filePosition}?\\\\)?\\\\s*$`, 'i')\n\nconst CHROME_EVAL_RE = new RegExp(`\\\\((\\\\S*)${filePosition}${filePosition}\\\\)`)\n\nfunction parseChromeLine(line: string): StackFrame | undefined {\n  const parts = CHROME_LINE_RE.exec(line)\n\n  if (!parts) {\n    return\n  }\n\n  const isNative = parts[2] && parts[2].indexOf('native') === 0 // start of line\n  const isEval = parts[2] && parts[2].indexOf('eval') === 0 // start of line\n  const submatch = CHROME_EVAL_RE.exec(parts[2])\n\n  if (isEval && submatch) {\n    // throw out eval line/column and use top-most line/column number\n    parts[2] = submatch[1] // url\n    parts[3] = submatch[2] // line\n    parts[4] = submatch[3] // column\n  }\n\n  return {\n    args: isNative ? [parts[2]] : [],\n    column: parts[4] ? +parts[4] : undefined,\n    func: parts[1] || UNKNOWN_FUNCTION,\n    line: parts[3] ? +parts[3] : undefined,\n    url: !isNative ? parts[2] : undefined,\n  }\n}\n\nconst CHROME_ANONYMOUS_FUNCTION_RE = new RegExp(`^\\\\s*at ?${fileUrl}${filePosition}?${filePosition}??\\\\s*$`, 'i')\n\nfunction parseChromeAnonymousLine(line: string): StackFrame | undefined {\n  const parts = CHROME_ANONYMOUS_FUNCTION_RE.exec(line)\n\n  if (!parts) {\n    return\n  }\n\n  return {\n    args: [],\n    column: parts[3] ? +parts[3] : undefined,\n    func: UNKNOWN_FUNCTION,\n    line: parts[2] ? +parts[2] : undefined,\n    url: parts[1],\n  }\n}\n\nconst WINJS_LINE_RE =\n  /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i\n\nfunction parseWinLine(line: string): StackFrame | undefined {\n  const parts = WINJS_LINE_RE.exec(line)\n  if (!parts) {\n    return\n  }\n\n  return {\n    args: [],\n    column: parts[4] ? +parts[4] : undefined,\n    func: parts[1] || UNKNOWN_FUNCTION,\n    line: +parts[3],\n    url: parts[2],\n  }\n}\n\nconst GECKO_LINE_RE =\n  /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|capacitor|\\[native).*?|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i\nconst GECKO_EVAL_RE = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i\n\nfunction parseGeckoLine(line: string): StackFrame | undefined {\n  const parts = GECKO_LINE_RE.exec(line)\n  if (!parts) {\n    return\n  }\n\n  const isEval = parts[3] && parts[3].indexOf(' > eval') > -1\n  const submatch = GECKO_EVAL_RE.exec(parts[3])\n\n  if (isEval && submatch) {\n    // throw out eval line/column and use top-most line number\n    parts[3] = submatch[1]\n    parts[4] = submatch[2]\n    parts[5] = undefined! // no column when eval\n  }\n\n  return {\n    args: parts[2] ? parts[2].split(',') : [],\n    column: parts[5] ? +parts[5] : undefined,\n    func: parts[1] || UNKNOWN_FUNCTION,\n    line: parts[4] ? +parts[4] : undefined,\n    url: parts[3],\n  }\n}\n\nfunction tryToGetString(candidate: unknown, property: string) {\n  if (typeof candidate !== 'object' || !candidate || !(property in candidate)) {\n    return undefined\n  }\n  const value = (candidate as { [k: string]: unknown })[property]\n  return typeof value === 'string' ? value : undefined\n}\n\nexport function computeStackTraceFromOnErrorMessage(messageObj: unknown, url?: string, line?: number, column?: number) {\n  const stack = [{ url, column, line }]\n  const { name, message } = tryToParseMessage(messageObj)\n  return {\n    name,\n    message,\n    stack,\n  }\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types\nconst ERROR_TYPES_RE =\n  /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?([\\s\\S]*)$/\n\nfunction tryToParseMessage(messageObj: unknown) {\n  let name\n  let message\n  if ({}.toString.call(messageObj) === '[object String]') {\n    ;[, name, message] = ERROR_TYPES_RE.exec(messageObj as string)!\n  }\n  return { name, message }\n}\n", "import { callMonitored } from '../monitor'\nimport { noop } from '../utils/functionUtils'\nimport type { StackTrace } from './computeStackTrace'\nimport { computeStackTrace } from './computeStackTrace'\n\n/**\n * Creates a stacktrace without SDK internal frames.\n * Constraints:\n * - Has to be called at the utmost position of the call stack.\n * - No monitored function should encapsulate it, that is why we need to use callMonitored inside it.\n */\nexport function createHandlingStack(): string {\n  /**\n   * Skip the two internal frames:\n   * - SDK API (console.error, ...)\n   * - this function\n   * in order to keep only the user calls\n   */\n  const internalFramesToSkip = 2\n  const error = new Error()\n  let formattedStack: string\n\n  // IE needs to throw the error to fill in the stack trace\n  if (!error.stack) {\n    try {\n      throw error\n    } catch {\n      noop()\n    }\n  }\n\n  callMonitored(() => {\n    const stackTrace = computeStackTrace(error)\n    stackTrace.stack = stackTrace.stack.slice(internalFramesToSkip)\n    formattedStack = toStackTraceString(stackTrace)\n  })\n\n  return formattedStack!\n}\n\nexport function toStackTraceString(stack: StackTrace) {\n  let result = formatErrorMessage(stack)\n  stack.stack.forEach((frame) => {\n    const func = frame.func === '?' ? '<anonymous>' : frame.func\n    const args = frame.args && frame.args.length > 0 ? `(${frame.args.join(', ')})` : ''\n    const line = frame.line ? `:${frame.line}` : ''\n    const column = frame.line && frame.column ? `:${frame.column}` : ''\n    result += `\\n  at ${func!}${args} @ ${frame.url!}${line}${column}`\n  })\n  return result\n}\n\nexport function formatErrorMessage(stack: StackTrace) {\n  return `${stack.name || 'Error'}: ${stack.message!}`\n}\n", "import { setTimeout } from './timer'\nimport { callMonitored } from './monitor'\nimport { noop } from './utils/functionUtils'\nimport { arrayFrom, startsWith } from './utils/polyfills'\nimport { createHandlingStack } from './stackTrace/handlingStack'\n\n/**\n * Object passed to the callback of an instrumented method call. See `instrumentMethod` for more\n * info.\n */\nexport type InstrumentedMethodCall<TARGET extends { [key: string]: any }, METHOD extends keyof TARGET> = {\n  /**\n   * The target object on which the method was called.\n   */\n  target: TARGET\n\n  /**\n   * The parameters with which the method was called.\n   *\n   * Note: if needed, parameters can be mutated by the instrumentation\n   */\n  parameters: Parameters<TARGET[METHOD]>\n\n  /**\n   * Registers a callback that will be called after the original method is called, with the method\n   * result passed as argument.\n   */\n  onPostCall: (callback: PostCallCallback<TARGET, METHOD>) => void\n\n  /**\n   * The stack trace of the method call.\n   */\n  handlingStack?: string\n}\n\ntype PostCallCallback<TARGET extends { [key: string]: any }, METHOD extends keyof TARGET> = (\n  result: ReturnType<TARGET[METHOD]>\n) => void\n\n/**\n * Instruments a method on a object, calling the given callback before the original method is\n * invoked. The callback receives an object with information about the method call.\n *\n * This function makes sure that we are \"good citizens\" regarding third party instrumentations: when\n * removing the instrumentation, the original method is usually restored, but if a third party\n * instrumentation was set after ours, we keep it in place and just replace our instrumentation with\n * a noop.\n *\n * Note: it is generally better to instrument methods that are \"owned\" by the object instead of ones\n * that are inherited from the prototype chain. Example:\n * * do:    `instrumentMethod(Array.prototype, 'push', ...)`\n * * don't: `instrumentMethod([], 'push', ...)`\n *\n * This method is also used to set event handler properties (ex: window.onerror = ...), as it has\n * the same requirements as instrumenting a method:\n * * if the event handler is already set by a third party, we need to call it and not just blindly\n * override it.\n * * if the event handler is set by a third party after us, we need to keep it in place when\n * removing ours.\n *\n * @example\n *\n *  instrumentMethod(window, 'fetch', ({ target, parameters, onPostCall }) => {\n *    console.log('Before calling fetch on', target, 'with parameters', parameters)\n *\n *    onPostCall((result) => {\n *      console.log('After fetch calling on', target, 'with parameters', parameters, 'and result', result)\n *    })\n *  })\n */\nexport function instrumentMethod<TARGET extends { [key: string]: any }, METHOD extends keyof TARGET & string>(\n  targetPrototype: TARGET,\n  method: METHOD,\n  onPreCall: (this: null, callInfos: InstrumentedMethodCall<TARGET, METHOD>) => void,\n  { computeHandlingStack }: { computeHandlingStack?: boolean } = {}\n) {\n  let original = targetPrototype[method]\n\n  if (typeof original !== 'function') {\n    if (method in targetPrototype && startsWith(method, 'on')) {\n      original = noop as TARGET[METHOD]\n    } else {\n      return { stop: noop }\n    }\n  }\n\n  let stopped = false\n\n  const instrumentation = function (this: TARGET): ReturnType<TARGET[METHOD]> | undefined {\n    if (stopped) {\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call\n      return original.apply(this, arguments as unknown as Parameters<TARGET[METHOD]>)\n    }\n\n    const parameters = arrayFrom(arguments) as Parameters<TARGET[METHOD]>\n\n    let postCallCallback: PostCallCallback<TARGET, METHOD> | undefined\n\n    callMonitored(onPreCall, null, [\n      {\n        target: this,\n        parameters,\n        onPostCall: (callback) => {\n          postCallCallback = callback\n        },\n        handlingStack: computeHandlingStack ? createHandlingStack() : undefined,\n      },\n    ])\n\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n    const result = original.apply(this, parameters)\n\n    if (postCallCallback) {\n      callMonitored(postCallCallback, null, [result])\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n    return result\n  }\n\n  targetPrototype[method] = instrumentation as TARGET[METHOD]\n\n  return {\n    stop: () => {\n      stopped = true\n      // If the instrumentation has been removed by a third party, keep the last one\n      if (targetPrototype[method] === instrumentation) {\n        targetPrototype[method] = original\n      }\n    },\n  }\n}\n\nexport function instrumentSetter<TARGET extends { [key: string]: any }, PROPERTY extends keyof TARGET>(\n  targetPrototype: TARGET,\n  property: PROPERTY,\n  after: (target: TARGET, value: TARGET[PROPERTY]) => void\n) {\n  const originalDescriptor = Object.getOwnPropertyDescriptor(targetPrototype, property)\n  if (!originalDescriptor || !originalDescriptor.set || !originalDescriptor.configurable) {\n    return { stop: noop }\n  }\n\n  const stoppedInstrumentation = noop\n  let instrumentation = (target: TARGET, value: TARGET[PROPERTY]) => {\n    // put hooked setter into event loop to avoid of set latency\n    setTimeout(() => {\n      if (instrumentation !== stoppedInstrumentation) {\n        after(target, value)\n      }\n    }, 0)\n  }\n\n  const instrumentationWrapper = function (this: TARGET, value: TARGET[PROPERTY]) {\n    originalDescriptor.set!.call(this, value)\n    instrumentation(this, value)\n  }\n\n  Object.defineProperty(targetPrototype, property, {\n    set: instrumentationWrapper,\n  })\n\n  return {\n    stop: () => {\n      if (Object.getOwnPropertyDescriptor(targetPrototype, property)?.set === instrumentationWrapper) {\n        Object.defineProperty(targetPrototype, property, originalDescriptor)\n      }\n      instrumentation = stoppedInstrumentation\n    },\n  }\n}\n", "import { display } from '../display'\nimport { ONE_KIBI_BYTE } from '../utils/byteUtils'\nimport type { Context, ContextArray, ContextValue } from './context'\nimport type { ObjectWithToJsonMethod } from './jsonStringify'\nimport { detachToJsonMethod } from './jsonStringify'\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\ntype PrimitivesAndFunctions = string | number | boolean | undefined | null | symbol | bigint | Function\ntype ExtendedContextValue = PrimitivesAndFunctions | object | ExtendedContext | ExtendedContextArray\ntype ExtendedContext = { [key: string]: ExtendedContextValue }\ntype ExtendedContextArray = ExtendedContextValue[]\n\ntype ContainerElementToProcess = {\n  source: ExtendedContextArray | ExtendedContext\n  target: ContextArray | Context\n  path: string\n}\n\n// The maximum size of a single event is 256KiB. By default, we ensure that user-provided data\n// going through sanitize fits inside our events, while leaving room for other contexts, metadata, ...\nconst SANITIZE_DEFAULT_MAX_CHARACTER_COUNT = 220 * ONE_KIBI_BYTE\n\n// Symbol for the root element of the JSONPath used for visited objects\nconst JSON_PATH_ROOT_ELEMENT = '$'\n\n// When serializing (using JSON.stringify) a key of an object, { key: 42 } gets wrapped in quotes as \"key\".\n// With the separator (:), we need to add 3 characters to the count.\nconst KEY_DECORATION_LENGTH = 3\n\n/**\n * Ensures user-provided data is 'safe' for the SDK\n * - Deep clones data\n * - Removes cyclic references\n * - Transforms unserializable types to a string representation\n *\n * LIMITATIONS:\n * - Size is in characters, not byte count (may differ according to character encoding)\n * - Size does not take into account indentation that can be applied to JSON.stringify\n * - Non-numerical properties of Arrays are ignored. Same behavior as JSON.stringify\n *\n * @param source              User-provided data meant to be serialized using JSON.stringify\n * @param maxCharacterCount   Maximum number of characters allowed in serialized form\n */\nexport function sanitize(source: string, maxCharacterCount?: number): string | undefined\nexport function sanitize(source: Context, maxCharacterCount?: number): Context\nexport function sanitize(source: unknown, maxCharacterCount?: number): ContextValue\nexport function sanitize(source: unknown, maxCharacterCount = SANITIZE_DEFAULT_MAX_CHARACTER_COUNT) {\n  // Unbind any toJSON function we may have on [] or {} prototypes\n  const restoreObjectPrototypeToJson = detachToJsonMethod(Object.prototype)\n  const restoreArrayPrototypeToJson = detachToJsonMethod(Array.prototype)\n\n  // Initial call to sanitizeProcessor - will populate containerQueue if source is an Array or a plain Object\n  const containerQueue: ContainerElementToProcess[] = []\n  const visitedObjectsWithPath = new WeakMap<object, string>()\n  const sanitizedData = sanitizeProcessor(\n    source as ExtendedContextValue,\n    JSON_PATH_ROOT_ELEMENT,\n    undefined,\n    containerQueue,\n    visitedObjectsWithPath\n  )\n  const serializedSanitizedData = JSON.stringify(sanitizedData)\n  let accumulatedCharacterCount = serializedSanitizedData ? serializedSanitizedData.length : 0\n\n  if (accumulatedCharacterCount > maxCharacterCount) {\n    warnOverCharacterLimit(maxCharacterCount, 'discarded', source)\n    return undefined\n  }\n\n  while (containerQueue.length > 0 && accumulatedCharacterCount < maxCharacterCount) {\n    const containerToProcess = containerQueue.shift()!\n    let separatorLength = 0 // 0 for the first element, 1 for subsequent elements\n\n    // Arrays and Objects have to be handled distinctly to ensure\n    // we do not pick up non-numerical properties from Arrays\n    if (Array.isArray(containerToProcess.source)) {\n      for (let key = 0; key < containerToProcess.source.length; key++) {\n        const targetData = sanitizeProcessor(\n          containerToProcess.source[key],\n          containerToProcess.path,\n          key,\n          containerQueue,\n          visitedObjectsWithPath\n        )\n\n        if (targetData !== undefined) {\n          accumulatedCharacterCount += JSON.stringify(targetData).length\n        } else {\n          // When an element of an Array (targetData) is undefined, it is serialized as null:\n          // JSON.stringify([undefined]) => '[null]' - This accounts for 4 characters\n          accumulatedCharacterCount += 4\n        }\n        accumulatedCharacterCount += separatorLength\n        separatorLength = 1\n        if (accumulatedCharacterCount > maxCharacterCount) {\n          warnOverCharacterLimit(maxCharacterCount, 'truncated', source)\n          break\n        }\n        ;(containerToProcess.target as ContextArray)[key] = targetData\n      }\n    } else {\n      for (const key in containerToProcess.source) {\n        if (Object.prototype.hasOwnProperty.call(containerToProcess.source, key)) {\n          const targetData = sanitizeProcessor(\n            containerToProcess.source[key],\n            containerToProcess.path,\n            key,\n            containerQueue,\n            visitedObjectsWithPath\n          )\n          // When a property of an object has an undefined value, it will be dropped during serialization:\n          // JSON.stringify({a:undefined}) => '{}'\n          if (targetData !== undefined) {\n            accumulatedCharacterCount +=\n              JSON.stringify(targetData).length + separatorLength + key.length + KEY_DECORATION_LENGTH\n            separatorLength = 1\n          }\n          if (accumulatedCharacterCount > maxCharacterCount) {\n            warnOverCharacterLimit(maxCharacterCount, 'truncated', source)\n            break\n          }\n          ;(containerToProcess.target as Context)[key] = targetData\n        }\n      }\n    }\n  }\n\n  // Rebind detached toJSON functions\n  restoreObjectPrototypeToJson()\n  restoreArrayPrototypeToJson()\n\n  return sanitizedData\n}\n\n/**\n * Internal function to factorize the process common to the\n * initial call to sanitize, and iterations for Arrays and Objects\n *\n */\nfunction sanitizeProcessor(\n  source: ExtendedContextValue,\n  parentPath: string,\n  key: string | number | undefined,\n  queue: ContainerElementToProcess[],\n  visitedObjectsWithPath: WeakMap<object, string>\n) {\n  // Start by handling toJSON, as we want to sanitize its output\n  const sourceToSanitize = tryToApplyToJSON(source)\n\n  if (!sourceToSanitize || typeof sourceToSanitize !== 'object') {\n    return sanitizePrimitivesAndFunctions(sourceToSanitize)\n  }\n\n  const sanitizedSource = sanitizeObjects(sourceToSanitize)\n  if (sanitizedSource !== '[Object]' && sanitizedSource !== '[Array]' && sanitizedSource !== '[Error]') {\n    return sanitizedSource\n  }\n\n  // Handle potential cyclic references\n  // We need to use source as sourceToSanitize could be a reference to a new object\n  // At this stage, we know the source is an object type\n  const sourceAsObject = source as object\n  if (visitedObjectsWithPath.has(sourceAsObject)) {\n    return `[Reference seen at ${visitedObjectsWithPath.get(sourceAsObject)!}]`\n  }\n\n  // Add processed source to queue\n  const currentPath = key !== undefined ? `${parentPath}.${key}` : parentPath\n  const target = Array.isArray(sourceToSanitize) ? ([] as ContextArray) : ({} as Context)\n  visitedObjectsWithPath.set(sourceAsObject, currentPath)\n  queue.push({ source: sourceToSanitize as ExtendedContext | ExtendedContextArray, target, path: currentPath })\n\n  return target\n}\n\n/**\n * Handles sanitization of simple, non-object types\n *\n */\nfunction sanitizePrimitivesAndFunctions(value: PrimitivesAndFunctions) {\n  // BigInt cannot be serialized by JSON.stringify(), convert it to a string representation\n  if (typeof value === 'bigint') {\n    return `[BigInt] ${value.toString()}`\n  }\n  // Functions cannot be serialized by JSON.stringify(). Moreover, if a faulty toJSON is present, it needs to be converted\n  // so it won't prevent stringify from serializing later\n  if (typeof value === 'function') {\n    return `[Function] ${value.name || 'unknown'}`\n  }\n  // JSON.stringify() does not serialize symbols.\n  if (typeof value === 'symbol') {\n    // symbol.description is part of ES2019+\n    type symbolWithDescription = symbol & { description: string }\n    return `[Symbol] ${(value as symbolWithDescription).description || value.toString()}`\n  }\n\n  return value\n}\n\n/**\n * Handles sanitization of object types\n *\n * LIMITATIONS\n * - If a class defines a toStringTag Symbol, it will fall in the catch-all method and prevent enumeration of properties.\n * To avoid this, a toJSON method can be defined.\n * - IE11 does not return a distinct type for objects such as Map, WeakMap, ... These objects will pass through and their\n * properties enumerated if any.\n *\n */\nfunction sanitizeObjects(value: object) {\n  try {\n    // Handle events - Keep a simple implementation to avoid breaking changes\n    if (value instanceof Event) {\n      return {\n        isTrusted: value.isTrusted,\n      }\n    }\n\n    // Handle all remaining object types in a generic way\n    const result = Object.prototype.toString.call(value)\n    const match = result.match(/\\[object (.*)\\]/)\n    if (match && match[1]) {\n      return `[${match[1]}]`\n    }\n  } catch {\n    // If the previous serialization attempts failed, and we cannot convert using\n    // Object.prototype.toString, declare the value unserializable\n  }\n  return '[Unserializable]'\n}\n\n/**\n * Checks if a toJSON function exists and tries to execute it\n *\n */\nfunction tryToApplyToJSON(value: ExtendedContextValue) {\n  const object = value as ObjectWithToJsonMethod\n  if (object && typeof object.toJSON === 'function') {\n    try {\n      return object.toJSON() as ExtendedContextValue\n    } catch {\n      // If toJSON fails, we continue by trying to serialize the value manually\n    }\n  }\n\n  return value\n}\n\n/**\n * Helper function to display the warning when the accumulated character count is over the limit\n */\nfunction warnOverCharacterLimit(maxCharacterCount: number, changeType: 'discarded' | 'truncated', source: unknown) {\n  display.warn(\n    `The data provided has been ${changeType} as it is over the limit of ${maxCharacterCount} characters:`,\n    source\n  )\n}\n", "import { sanitize } from '../../tools/serialisation/sanitize'\nimport type { ClocksState } from '../../tools/utils/timeUtils'\nimport { jsonStringify } from '../../tools/serialisation/jsonStringify'\nimport type { StackTrace } from '../../tools/stackTrace/computeStackTrace'\nimport { computeStackTrace } from '../../tools/stackTrace/computeStackTrace'\nimport { toStackTraceString } from '../../tools/stackTrace/handlingStack'\nimport type { ErrorSource, ErrorHandling, RawError, RawErrorCause, ErrorWithCause, NonErrorPrefix } from './error.types'\n\nexport const NO_ERROR_STACK_PRESENT_MESSAGE = 'No stack, consider using an instance of Error'\n\ntype RawErrorParams = {\n  stackTrace?: StackTrace\n  originalError: unknown\n\n  handlingStack?: string\n  startClocks: ClocksState\n  nonErrorPrefix: NonErrorPrefix\n  source: ErrorSource\n  handling: ErrorHandling\n}\n\nexport function computeRawError({\n  stackTrace,\n  originalError,\n  handlingStack,\n  startClocks,\n  nonErrorPrefix,\n  source,\n  handling,\n}: RawErrorParams): RawError {\n  const isErrorInstance = isError(originalError)\n\n  const message = computeMessage(stackTrace, isErrorInstance, nonErrorPrefix, originalError)\n  const stack = hasUsableStack(isErrorInstance, stackTrace)\n    ? toStackTraceString(stackTrace)\n    : NO_ERROR_STACK_PRESENT_MESSAGE\n  const causes = isErrorInstance ? flattenErrorCauses(originalError as ErrorWithCause, source) : undefined\n  const type = stackTrace ? stackTrace.name : undefined\n  const fingerprint = tryToGetFingerprint(originalError)\n\n  return {\n    startClocks,\n    source,\n    handling,\n    handlingStack,\n    originalError,\n    type,\n    message,\n    stack,\n    causes,\n    fingerprint,\n  }\n}\n\nfunction computeMessage(\n  stackTrace: StackTrace | undefined,\n  isErrorInstance: boolean,\n  nonErrorPrefix: NonErrorPrefix,\n  originalError: unknown\n) {\n  // Favor stackTrace message only if tracekit has really been able to extract something meaningful (message + name)\n  // TODO rework tracekit integration to avoid scattering error building logic\n  return stackTrace?.message && stackTrace?.name\n    ? stackTrace.message\n    : !isErrorInstance\n      ? `${nonErrorPrefix} ${jsonStringify(sanitize(originalError))!}`\n      : 'Empty message'\n}\n\nfunction hasUsableStack(isErrorInstance: boolean, stackTrace?: StackTrace): stackTrace is StackTrace {\n  if (stackTrace === undefined) {\n    return false\n  }\n  if (isErrorInstance) {\n    return true\n  }\n  // handle cases where tracekit return stack = [] or stack = [{url: undefined, line: undefined, column: undefined}]\n  // TODO rework tracekit integration to avoid generating those unusable stack\n  return stackTrace.stack.length > 0 && (stackTrace.stack.length > 1 || stackTrace.stack[0].url !== undefined)\n}\n\nexport function tryToGetFingerprint(originalError: unknown) {\n  return isError(originalError) && 'dd_fingerprint' in originalError ? String(originalError.dd_fingerprint) : undefined\n}\n\nexport function getFileFromStackTraceString(stack: string) {\n  return /@ (.+)/.exec(stack)?.[1]\n}\n\nexport function isError(error: unknown): error is Error {\n  return error instanceof Error || Object.prototype.toString.call(error) === '[object Error]'\n}\n\nexport function flattenErrorCauses(error: ErrorWithCause, parentSource: ErrorSource): RawErrorCause[] | undefined {\n  let currentError = error\n  const causes: RawErrorCause[] = []\n  while (isError(currentError?.cause) && causes.length < 10) {\n    const stackTrace = computeStackTrace(currentError.cause)\n    causes.push({\n      message: currentError.cause.message,\n      source: parentSource,\n      type: stackTrace?.name,\n      stack: stackTrace && toStackTraceString(stackTrace),\n    })\n    currentError = currentError.cause\n  }\n  return causes.length ? causes : undefined\n}\n", "import type { ClocksState } from '../../tools/utils/timeUtils'\n\n// TS v4.6 introduced Error.cause[1] typed as `Error`. TS v4.8 changed Error.cause to be\n// `unknown`[2].\n//\n// Because we still support TS 3.8, we need to declare our own type. We can remove it once we drop\n// support for TS v4.7 and before. The 'cause' property defined by TS needs to be omitted because\n// we define it with a type `unknown` which is incompatible with TS 4.6 and 4.7.\n//\n// [1]: https://devblogs.microsoft.com/typescript/announcing-typescript-4-6/#target-es2022\n// [2]: https://devblogs.microsoft.com/typescript/announcing-typescript-4-8/#lib-d-ts-updates\nexport interface ErrorWithCause extends Omit<Error, 'cause'> {\n  cause?: unknown\n}\n\nexport type RawErrorCause = {\n  message: string\n  source: string\n  type?: string\n  stack?: string\n}\n\nexport type Csp = {\n  disposition: 'enforce' | 'report'\n}\n\nexport interface RawError {\n  startClocks: ClocksState\n  message: string\n  type?: string\n  stack?: string\n  source: ErrorSource\n  originalError?: unknown\n  handling?: ErrorHandling\n  handlingStack?: string\n  causes?: RawErrorCause[]\n  fingerprint?: string\n  csp?: Csp\n}\n\nexport const ErrorSource = {\n  AGENT: 'agent',\n  CONSOLE: 'console',\n  CUSTOM: 'custom',\n  LOGGER: 'logger',\n  NETWORK: 'network',\n  SOURCE: 'source',\n  REPORT: 'report',\n} as const\n\nexport const enum NonErrorPrefix {\n  UNCAUGHT = 'Uncaught',\n  PROVIDED = 'Provided',\n}\n\nexport const enum ErrorHandling {\n  HANDLED = 'handled',\n  UNHANDLED = 'unhandled',\n}\n\nexport type ErrorSource = (typeof ErrorSource)[keyof typeof ErrorSource]\n", "import { instrumentMethod } from '../../tools/instrumentMethod'\nimport type { Observable } from '../../tools/observable'\nimport { clocksNow } from '../../tools/utils/timeUtils'\nimport type { StackTrace } from '../../tools/stackTrace/computeStackTrace'\nimport { computeStackTrace, computeStackTraceFromOnErrorMessage } from '../../tools/stackTrace/computeStackTrace'\nimport { computeRawError, isError } from './error'\nimport type { RawError } from './error.types'\nimport { ErrorHandling, ErrorSource, NonErrorPrefix } from './error.types'\n\nexport type UnhandledErrorCallback = (stackTrace: StackTrace, originalError?: any) => any\n\nexport function trackRuntimeError(errorObservable: Observable<RawError>) {\n  const handleRuntimeError = (stackTrace: StackTrace, originalError?: any) => {\n    const rawError = computeRawError({\n      stackTrace,\n      originalError,\n      startClocks: clocksNow(),\n      nonErrorPrefix: NonErrorPrefix.UNCAUGHT,\n      source: ErrorSource.SOURCE,\n      handling: ErrorHandling.UNHANDLED,\n    })\n    errorObservable.notify(rawError)\n  }\n  const { stop: stopInstrumentingOnError } = instrumentOnError(handleRuntimeError)\n  const { stop: stopInstrumentingOnUnhandledRejection } = instrumentUnhandledRejection(handleRuntimeError)\n\n  return {\n    stop: () => {\n      stopInstrumentingOnError()\n      stopInstrumentingOnUnhandledRejection()\n    },\n  }\n}\n\nexport function instrumentOnError(callback: UnhandledErrorCallback) {\n  return instrumentMethod(window, 'onerror', ({ parameters: [messageObj, url, line, column, errorObj] }) => {\n    let stackTrace\n    if (isError(errorObj)) {\n      stackTrace = computeStackTrace(errorObj)\n    } else {\n      stackTrace = computeStackTraceFromOnErrorMessage(messageObj, url, line, column)\n    }\n    callback(stackTrace, errorObj ?? messageObj)\n  })\n}\n\nexport function instrumentUnhandledRejection(callback: UnhandledErrorCallback) {\n  return instrumentMethod(window, 'onunhandledrejection', ({ parameters: [e] }) => {\n    const reason = e.reason || 'Empty reason'\n    const stack = computeStackTrace(reason)\n    callback(stack, reason)\n  })\n}\n", "import { catchUserErrors } from '../tools/catchUserErrors'\nimport { setDebugMode } from '../tools/monitor'\nimport { assign } from '../tools/utils/polyfills'\nimport { display } from '../tools/display'\n\n// replaced at build time\ndeclare const __BUILD_ENV__SDK_VERSION__: string\n\nexport interface PublicApi {\n  /**\n   * Version of the Logs browser SDK\n   */\n  version: string\n\n  /**\n   * [For CDN async setup] Early RUM API calls must be wrapped in the `window.DD_RUM.onReady()` callback. This ensures the code only gets executed once the SDK is properly loaded.\n   *\n   * See [CDN async setup](https://docs.datadoghq.com/real_user_monitoring/browser/#cdn-async) for further information.\n   */\n  onReady: (callback: () => void) => void\n}\n\nexport function makePublicApi<T extends PublicApi>(stub: Omit<T, keyof PublicApi>): T {\n  const publicApi = assign(\n    {\n      version: __BUILD_ENV__SDK_VERSION__,\n\n      // This API method is intentionally not monitored, since the only thing executed is the\n      // user-provided 'callback'.  All SDK usages executed in the callback should be monitored, and\n      // we don't want to interfere with the user uncaught exceptions.\n      onReady(callback: () => void) {\n        callback()\n      },\n    },\n    stub\n  )\n\n  // Add a \"hidden\" property to set debug mode. We define it that way to hide it\n  // as much as possible but of course it's not a real protection.\n  Object.defineProperty(publicApi, '_setDebug', {\n    get() {\n      return setDebugMode\n    },\n    enumerable: false,\n  })\n\n  return publicApi as T\n}\n\nexport function defineGlobal<Global, Name extends keyof Global>(global: Global, name: Name, api: Global[Name]) {\n  const existingGlobalVariable = global[name] as { q?: Array<() => void>; version?: string } | undefined\n  if (existingGlobalVariable && !existingGlobalVariable.q && existingGlobalVariable.version) {\n    display.warn('SDK is loaded more than once. This is unsupported and might have unexpected behavior.')\n  }\n  global[name] = api\n  if (existingGlobalVariable && existingGlobalVariable.q) {\n    existingGlobalVariable.q.forEach((fn) => catchUserErrors(fn, 'onReady callback threw an error:')())\n  }\n}\n", "import type { InitConfiguration } from '../domain/configuration'\nimport { display } from '../tools/display'\n\nexport function displayAlreadyInitializedError(sdkName: 'DD_RUM' | 'DD_LOGS', initConfiguration: InitConfiguration) {\n  if (!initConfiguration.silentMultipleInit) {\n    display.error(`${sdkName} is already initialized.`)\n  }\n}\n", "import { monitor } from '../tools/monitor'\nimport { getZoneJsOriginalValue } from '../tools/getZoneJsOriginalValue'\nimport type { CookieStore, CookieStoreEventMap, VisualViewport, VisualViewportEventMap } from './browser.types'\n\nexport type TrustableEvent<E extends Event = Event> = E & { __ddIsTrusted?: boolean }\n\nexport const enum DOM_EVENT {\n  BEFORE_UNLOAD = 'beforeunload',\n  CLICK = 'click',\n  DBL_CLICK = 'dblclick',\n  KEY_DOWN = 'keydown',\n  LOAD = 'load',\n  POP_STATE = 'popstate',\n  SCROLL = 'scroll',\n  TOUCH_START = 'touchstart',\n  TOUCH_END = 'touchend',\n  TOUCH_MOVE = 'touchmove',\n  VISIBILITY_CHANGE = 'visibilitychange',\n  PAGE_SHOW = 'pageshow',\n  FREEZE = 'freeze',\n  RESUME = 'resume',\n  DOM_CONTENT_LOADED = 'DOMContentLoaded',\n  POINTER_DOWN = 'pointerdown',\n  POINTER_UP = 'pointerup',\n  POINTER_CANCEL = 'pointercancel',\n  HASH_CHANGE = 'hashchange',\n  PAGE_HIDE = 'pagehide',\n  MOUSE_DOWN = 'mousedown',\n  MOUSE_UP = 'mouseup',\n  MOUSE_MOVE = 'mousemove',\n  FOCUS = 'focus',\n  BLUR = 'blur',\n  CONTEXT_MENU = 'contextmenu',\n  RESIZE = 'resize',\n  CHANGE = 'change',\n  INPUT = 'input',\n  PLAY = 'play',\n  PAUSE = 'pause',\n  SECURITY_POLICY_VIOLATION = 'securitypolicyviolation',\n  SELECTION_CHANGE = 'selectionchange',\n  STORAGE = 'storage',\n}\n\ninterface AddEventListenerOptions {\n  once?: boolean\n  capture?: boolean\n  passive?: boolean\n}\n\ntype EventMapFor<T> = T extends Window\n  ? WindowEventMap & {\n      // TS 4.9.5 does not support `freeze` and `resume` events yet\n      freeze: Event\n      resume: Event\n      // TS 4.9.5 does not define `visibilitychange` on Window (only Document)\n      visibilitychange: Event\n    }\n  : T extends Document\n    ? DocumentEventMap\n    : T extends HTMLElement\n      ? HTMLElementEventMap\n      : T extends VisualViewport\n        ? VisualViewportEventMap\n        : T extends ShadowRoot\n          ? // ShadowRootEventMap is not yet defined in our supported TS version. Instead, use\n            // GlobalEventHandlersEventMap which is more than enough as we only need to listen for events bubbling\n            // through the ShadowRoot like \"change\" or \"input\"\n            GlobalEventHandlersEventMap\n          : T extends XMLHttpRequest\n            ? XMLHttpRequestEventMap\n            : T extends Performance\n              ? PerformanceEventMap\n              : T extends Worker\n                ? WorkerEventMap\n                : T extends CookieStore\n                  ? CookieStoreEventMap\n                  : Record<never, never>\n\n/**\n * Add an event listener to an event target object (Window, Element, mock object...).  This provides\n * a few conveniences compared to using `element.addEventListener` directly:\n *\n * * supports IE11 by: using an option object only if needed and emulating the `once` option\n *\n * * wraps the listener with a `monitor` function\n *\n * * returns a `stop` function to remove the listener\n */\nexport function addEventListener<Target extends EventTarget, EventName extends keyof EventMapFor<Target> & string>(\n  configuration: { allowUntrustedEvents?: boolean | undefined },\n  eventTarget: Target,\n  eventName: EventName,\n  listener: (event: EventMapFor<Target>[EventName] & { type: EventName }) => void,\n  options?: AddEventListenerOptions\n) {\n  return addEventListeners(configuration, eventTarget, [eventName], listener, options)\n}\n\n/**\n * Add event listeners to an event target object (Window, Element, mock object...).  This provides\n * a few conveniences compared to using `element.addEventListener` directly:\n *\n * * supports IE11 by: using an option object only if needed and emulating the `once` option\n *\n * * wraps the listener with a `monitor` function\n *\n * * returns a `stop` function to remove the listener\n *\n * * with `once: true`, the listener will be called at most once, even if different events are listened\n */\nexport function addEventListeners<Target extends EventTarget, EventName extends keyof EventMapFor<Target> & string>(\n  configuration: { allowUntrustedEvents?: boolean | undefined },\n  eventTarget: Target,\n  eventNames: EventName[],\n  listener: (event: EventMapFor<Target>[EventName] & { type: EventName }) => void,\n  { once, capture, passive }: AddEventListenerOptions = {}\n) {\n  const listenerWithMonitor = monitor((event: TrustableEvent) => {\n    if (!event.isTrusted && !event.__ddIsTrusted && !configuration.allowUntrustedEvents) {\n      return\n    }\n    if (once) {\n      stop()\n    }\n    listener(event as unknown as EventMapFor<Target>[EventName] & { type: EventName })\n  })\n\n  const options = passive ? { capture, passive } : capture\n\n  // Use the window.EventTarget.prototype when possible to avoid wrong overrides (e.g: https://github.com/salesforce/lwc/issues/1824)\n  const listenerTarget =\n    window.EventTarget && eventTarget instanceof EventTarget ? window.EventTarget.prototype : eventTarget\n\n  const add = getZoneJsOriginalValue(listenerTarget, 'addEventListener')\n  eventNames.forEach((eventName) => add.call(eventTarget, eventName, listenerWithMonitor, options))\n\n  function stop() {\n    const remove = getZoneJsOriginalValue(listenerTarget, 'removeEventListener')\n    eventNames.forEach((eventName) => remove.call(eventTarget, eventName, listenerWithMonitor, options))\n  }\n\n  return {\n    stop,\n  }\n}\n", "import { toStackTraceString } from '../../tools/stackTrace/handlingStack'\nimport { monitor } from '../../tools/monitor'\nimport { mergeObservables, Observable } from '../../tools/observable'\nimport { addEventListener, DOM_EVENT } from '../../browser/addEventListener'\nimport { assign, includes } from '../../tools/utils/polyfills'\nimport { safeTruncate } from '../../tools/utils/stringUtils'\nimport type { Configuration } from '../configuration'\nimport type { RawError } from '../error/error.types'\nimport { ErrorHandling, ErrorSource } from '../error/error.types'\nimport { clocksNow } from '../../tools/utils/timeUtils'\nimport type { ReportType, InterventionReport, DeprecationReport } from './browser.types'\n\nexport const RawReportType = {\n  intervention: 'intervention',\n  deprecation: 'deprecation',\n  cspViolation: 'csp_violation',\n} as const\n\nexport type RawReportType = (typeof RawReportType)[keyof typeof RawReportType]\n\nexport type RawReportError = RawError & {\n  originalError: SecurityPolicyViolationEvent | DeprecationReport | InterventionReport\n}\n\nexport function initReportObservable(configuration: Configuration, apis: RawReportType[]) {\n  const observables: Array<Observable<RawReportError>> = []\n\n  if (includes(apis, RawReportType.cspViolation)) {\n    observables.push(createCspViolationReportObservable(configuration))\n  }\n\n  const reportTypes = apis.filter((api: RawReportType): api is ReportType => api !== RawReportType.cspViolation)\n  if (reportTypes.length) {\n    observables.push(createReportObservable(reportTypes))\n  }\n\n  return mergeObservables(...observables)\n}\n\nfunction createReportObservable(reportTypes: ReportType[]) {\n  return new Observable<RawReportError>((observable) => {\n    if (!window.ReportingObserver) {\n      return\n    }\n\n    const handleReports = monitor((reports: Array<DeprecationReport | InterventionReport>, _: ReportingObserver) =>\n      reports.forEach((report) => observable.notify(buildRawReportErrorFromReport(report)))\n    ) as ReportingObserverCallback\n\n    const observer = new window.ReportingObserver(handleReports, {\n      types: reportTypes,\n      buffered: true,\n    })\n\n    observer.observe()\n    return () => {\n      observer.disconnect()\n    }\n  })\n}\n\nfunction createCspViolationReportObservable(configuration: Configuration) {\n  return new Observable<RawReportError>((observable) => {\n    const { stop } = addEventListener(configuration, document, DOM_EVENT.SECURITY_POLICY_VIOLATION, (event) => {\n      observable.notify(buildRawReportErrorFromCspViolation(event))\n    })\n\n    return stop\n  })\n}\n\nfunction buildRawReportErrorFromReport(report: DeprecationReport | InterventionReport): RawReportError {\n  const { type, body } = report\n\n  return buildRawReportError({\n    type: body.id,\n    message: `${type}: ${body.message}`,\n    originalError: report,\n    stack: buildStack(body.id, body.message, body.sourceFile, body.lineNumber, body.columnNumber),\n  })\n}\n\nfunction buildRawReportErrorFromCspViolation(event: SecurityPolicyViolationEvent): RawReportError {\n  const message = `'${event.blockedURI}' blocked by '${event.effectiveDirective}' directive`\n  return buildRawReportError({\n    type: event.effectiveDirective,\n    message: `${RawReportType.cspViolation}: ${message}`,\n    originalError: event,\n    csp: {\n      disposition: event.disposition,\n    },\n    stack: buildStack(\n      event.effectiveDirective,\n      event.originalPolicy\n        ? `${message} of the policy \"${safeTruncate(event.originalPolicy, 100, '...')}\"`\n        : 'no policy',\n      event.sourceFile,\n      event.lineNumber,\n      event.columnNumber\n    ),\n  })\n}\n\nfunction buildRawReportError(partial: Omit<RawReportError, 'startClocks' | 'source' | 'handling'>): RawReportError {\n  return assign(\n    {\n      startClocks: clocksNow(),\n      source: ErrorSource.REPORT,\n      handling: ErrorHandling.UNHANDLED,\n    },\n    partial\n  )\n}\n\nfunction buildStack(\n  name: string,\n  message: string,\n  sourceFile: string | null,\n  lineNumber: number | null,\n  columnNumber: number | null\n): string | undefined {\n  return sourceFile\n    ? toStackTraceString({\n        name,\n        message,\n        stack: [\n          {\n            func: '?',\n            url: sourceFile,\n            line: lineNumber ?? undefined,\n            column: columnNumber ?? undefined,\n          },\n        ],\n      })\n    : undefined\n}\n", "interface BrowserWindow {\n  __ddBrowserSdkExtensionCallback?: (message: unknown) => void\n}\n\ntype ExtensionMessageType = 'logs' | 'record' | 'rum' | 'telemetry'\n\nexport function sendToExtension(type: ExtensionMessageType, payload: unknown) {\n  const callback = (window as BrowserWindow).__ddBrowserSdkExtensionCallback\n  if (callback) {\n    callback({ type, payload })\n  }\n}\n", "import { getType } from './utils/typeUtils'\n\ntype Merged<TDestination, TSource> =\n  // case 1 - source is undefined - return destination\n  TSource extends undefined\n    ? TDestination\n    : // case 2 - destination is undefined - return source\n      TDestination extends undefined\n      ? TSource\n      : // case 3 - source is an array - see if it merges or overwrites\n        TSource extends any[]\n        ? TDestination extends any[]\n          ? TDestination & TSource\n          : TSource\n        : // case 4 - source is an object - see if it merges or overwrites\n          TSource extends object\n          ? TDestination extends object\n            ? TDestination extends any[]\n              ? TSource\n              : TDestination & TSource\n            : TSource\n          : // case 5 - cannot merge - return source\n            TSource\n\n/**\n * Iterate over source and affect its sub values into destination, recursively.\n * If the source and destination can't be merged, return source.\n */\nexport function mergeInto<D, S>(\n  destination: D,\n  source: S,\n  circularReferenceChecker = createCircularReferenceChecker()\n): Merged<D, S> {\n  // ignore the source if it is undefined\n  if (source === undefined) {\n    return destination as Merged<D, S>\n  }\n\n  if (typeof source !== 'object' || source === null) {\n    // primitive values - just return source\n    return source as Merged<D, S>\n  } else if (source instanceof Date) {\n    return new Date(source.getTime()) as unknown as Merged<D, S>\n  } else if (source instanceof RegExp) {\n    const flags =\n      source.flags ||\n      // old browsers compatibility\n      [\n        source.global ? 'g' : '',\n        source.ignoreCase ? 'i' : '',\n        source.multiline ? 'm' : '',\n        source.sticky ? 'y' : '',\n        source.unicode ? 'u' : '',\n      ].join('')\n    return new RegExp(source.source, flags) as unknown as Merged<D, S>\n  }\n\n  if (circularReferenceChecker.hasAlreadyBeenSeen(source)) {\n    // remove circular references\n    return undefined as unknown as Merged<D, S>\n  } else if (Array.isArray(source)) {\n    const merged: any[] = Array.isArray(destination) ? destination : []\n    for (let i = 0; i < source.length; ++i) {\n      merged[i] = mergeInto(merged[i], source[i], circularReferenceChecker)\n    }\n    return merged as unknown as Merged<D, S>\n  }\n\n  const merged = getType(destination) === 'object' ? (destination as Record<any, any>) : {}\n  for (const key in source) {\n    if (Object.prototype.hasOwnProperty.call(source, key)) {\n      merged[key] = mergeInto(merged[key], source[key], circularReferenceChecker)\n    }\n  }\n  return merged as unknown as Merged<D, S>\n}\n\n/**\n * A simplistic implementation of a deep clone algorithm.\n * Caveats:\n * - It doesn't maintain prototype chains - don't use with instances of custom classes.\n * - It doesn't handle Map and Set\n */\nexport function deepClone<T>(value: T): T {\n  return mergeInto(undefined, value) as T\n}\n\ntype Combined<A, B> = A extends null ? B : B extends null ? A : Merged<A, B>\n\n/*\n * Performs a deep merge of objects and arrays.\n * - Arguments won't be mutated\n * - Object and arrays in the output value are de-referenced (\"deep cloned\")\n * - Arrays values are merged index by index\n * - Objects are merged by keys\n * - Values get replaced, unless undefined\n */\nexport function combine<A, B>(a: A, b: B): Combined<A, B>\nexport function combine<A, B, C>(a: A, b: B, c: C): Combined<Combined<A, B>, C>\nexport function combine<A, B, C, D>(a: A, b: B, c: C, d: D): Combined<Combined<Combined<A, B>, C>, D>\nexport function combine<A, B, C, D, E>(\n  a: A,\n  b: B,\n  c: C,\n  d: D,\n  e: E\n): Combined<Combined<Combined<Combined<A, B>, C>, D>, E>\nexport function combine<A, B, C, D, E, F>(\n  a: A,\n  b: B,\n  c: C,\n  d: D,\n  e: E,\n  f: F\n): Combined<Combined<Combined<Combined<Combined<A, B>, C>, D>, E>, F>\nexport function combine<A, B, C, D, E, F, G>(\n  a: A,\n  b: B,\n  c: C,\n  d: D,\n  e: E,\n  f: F,\n  g: G\n): Combined<Combined<Combined<Combined<Combined<Combined<A, B>, C>, D>, E>, F>, G>\nexport function combine<A, B, C, D, E, F, G, H>(\n  a: A,\n  b: B,\n  c: C,\n  d: D,\n  e: E,\n  f: F,\n  g: G,\n  h: H\n): Combined<Combined<Combined<Combined<Combined<Combined<Combined<A, B>, C>, D>, E>, F>, G>, H>\nexport function combine(...sources: any[]): unknown {\n  let destination: any\n\n  for (const source of sources) {\n    // Ignore any undefined or null sources.\n    if (source === undefined || source === null) {\n      continue\n    }\n\n    destination = mergeInto(destination, source)\n  }\n\n  return destination as unknown\n}\n\ninterface CircularReferenceChecker {\n  hasAlreadyBeenSeen(value: any): boolean\n}\n\nfunction createCircularReferenceChecker(): CircularReferenceChecker {\n  if (typeof WeakSet !== 'undefined') {\n    const set: WeakSet<any> = new WeakSet()\n    return {\n      hasAlreadyBeenSeen(value) {\n        const has = set.has(value)\n        if (!has) {\n          set.add(value)\n        }\n        return has\n      },\n    }\n  }\n  const array: any[] = []\n  return {\n    hasAlreadyBeenSeen(value) {\n      const has = array.indexOf(value) >= 0\n      if (!has) {\n        array.push(value)\n      }\n      return has\n    },\n  }\n}\n", "export type NetworkInterface = 'bluetooth' | 'cellular' | 'ethernet' | 'none' | 'wifi' | 'wimax' | 'other' | 'unknown'\nexport type EffectiveType = 'slow-2g' | '2g' | '3g' | '4g'\n\ninterface BrowserNavigator extends Navigator {\n  connection?: NetworkInformation\n}\n\nexport interface NetworkInformation {\n  type?: NetworkInterface\n  effectiveType?: EffectiveType\n}\n\nexport interface Connectivity {\n  status: 'connected' | 'not_connected'\n  interfaces?: NetworkInterface[]\n  effective_type?: EffectiveType\n  [key: string]: unknown\n}\n\nexport function getConnectivity(): Connectivity {\n  const navigator = window.navigator as BrowserNavigator\n  return {\n    status: navigator.onLine ? 'connected' : 'not_connected',\n    interfaces: navigator.connection && navigator.connection.type ? [navigator.connection.type] : undefined,\n    effective_type: navigator.connection?.effectiveType,\n  }\n}\n", "import { arrayFrom } from './polyfills'\n\nexport function removeDuplicates<T>(array: T[]) {\n  const set = new Set<T>()\n  array.forEach((item) => set.add(item))\n  return arrayFrom(set)\n}\n\nexport function removeItem<T>(array: T[], item: T) {\n  const index = array.indexOf(item)\n  if (index >= 0) {\n    array.splice(index, 1)\n  }\n}\n", "import { removeItem } from './utils/arrayUtils'\n\nconst BUFFER_LIMIT = 500\n\nexport interface BoundedBuffer<T = void> {\n  add: (callback: (arg: T) => void) => void\n  remove: (callback: (arg: T) => void) => void\n  drain: (arg: T) => void\n}\n\nexport function createBoundedBuffer<T = void>(): BoundedBuffer<T> {\n  const buffer: Array<(arg: T) => void> = []\n\n  const add: BoundedBuffer<T>['add'] = (callback: (arg: T) => void) => {\n    const length = buffer.push(callback)\n    if (length > BUFFER_LIMIT) {\n      buffer.splice(0, 1)\n    }\n  }\n\n  const remove: BoundedBuffer<T>['remove'] = (callback: (arg: T) => void) => {\n    removeItem(buffer, callback)\n  }\n\n  const drain = (arg: T) => {\n    buffer.forEach((callback) => callback(arg))\n    buffer.length = 0\n  }\n\n  return {\n    add,\n    remove,\n    drain,\n  }\n}\n", "import type { TelemetryEvent, TelemetryConfigurationEvent, TelemetryUsageEvent } from './telemetryEvent.types'\n\nexport const TelemetryType = {\n  log: 'log',\n  configuration: 'configuration',\n  usage: 'usage',\n} as const\n\nexport const enum StatusType {\n  debug = 'debug',\n  error = 'error',\n}\n\nexport interface RuntimeEnvInfo {\n  is_local_file: boolean\n  is_worker: boolean\n}\n\nexport type RawTelemetryEvent = TelemetryEvent['telemetry']\nexport type RawTelemetryConfiguration = TelemetryConfigurationEvent['telemetry']['configuration']\nexport type RawTelemetryUsage = TelemetryUsageEvent['telemetry']['usage']\n", "import type { Context } from '../../tools/serialisation/context'\nimport { ConsoleApiName } from '../../tools/display'\nimport { NO_ERROR_STACK_PRESENT_MESSAGE, isError } from '../error/error'\nimport { toStackTraceString } from '../../tools/stackTrace/handlingStack'\nimport { getExperimentalFeatures } from '../../tools/experimentalFeatures'\nimport type { Configuration } from '../configuration'\nimport { INTAKE_SITE_STAGING, INTAKE_SITE_US1_FED } from '../configuration'\nimport { Observable } from '../../tools/observable'\nimport { timeStampNow } from '../../tools/utils/timeUtils'\nimport { displayIfDebugEnabled, startMonitorErrorCollection } from '../../tools/monitor'\nimport { sendToExtension } from '../../tools/sendToExtension'\nimport { startsWith, arrayFrom, includes, assign } from '../../tools/utils/polyfills'\nimport { performDraw } from '../../tools/utils/numberUtils'\nimport { jsonStringify } from '../../tools/serialisation/jsonStringify'\nimport { combine } from '../../tools/mergeInto'\nimport { NonErrorPrefix } from '../error/error.types'\nimport type { StackTrace } from '../../tools/stackTrace/computeStackTrace'\nimport { computeStackTrace } from '../../tools/stackTrace/computeStackTrace'\nimport { getConnectivity } from '../connectivity'\nimport { createBoundedBuffer } from '../../tools/boundedBuffer'\nimport type { TelemetryEvent } from './telemetryEvent.types'\nimport type {\n  RawTelemetryConfiguration,\n  RawTelemetryEvent,\n  RuntimeEnvInfo,\n  RawTelemetryUsage,\n} from './rawTelemetryEvent.types'\nimport { StatusType, TelemetryType } from './rawTelemetryEvent.types'\n\n// replaced at build time\ndeclare const __BUILD_ENV__SDK_VERSION__: string\ndeclare const __BUILD_ENV__SDK_SETUP__: string\n\nconst ALLOWED_FRAME_URLS = [\n  'https://www.datadoghq-browser-agent.com',\n  'https://www.datad0g-browser-agent.com',\n  'https://d3uc069fcn7uxw.cloudfront.net',\n  'https://d20xtzwzcl0ceb.cloudfront.net',\n  'http://localhost',\n  '<anonymous>',\n]\n\nexport const enum TelemetryService {\n  LOGS = 'browser-logs-sdk',\n  RUM = 'browser-rum-sdk',\n}\n\nexport interface Telemetry {\n  setContextProvider: (provider: () => Context) => void\n  observable: Observable<TelemetryEvent & Context>\n  enabled: boolean\n}\n\nconst TELEMETRY_EXCLUDED_SITES: string[] = [INTAKE_SITE_US1_FED]\n\n// eslint-disable-next-line local-rules/disallow-side-effects\nlet preStartTelemetryBuffer = createBoundedBuffer()\nlet onRawTelemetryEventCollected = (event: RawTelemetryEvent) => {\n  preStartTelemetryBuffer.add(() => onRawTelemetryEventCollected(event))\n}\n\nexport function startTelemetry(telemetryService: TelemetryService, configuration: Configuration): Telemetry {\n  let contextProvider: () => Context\n  const observable = new Observable<TelemetryEvent & Context>()\n  const alreadySentEvents = new Set<string>()\n\n  const telemetryEnabled =\n    !includes(TELEMETRY_EXCLUDED_SITES, configuration.site) && performDraw(configuration.telemetrySampleRate)\n\n  const telemetryEnabledPerType = {\n    [TelemetryType.log]: telemetryEnabled,\n    [TelemetryType.configuration]: telemetryEnabled && performDraw(configuration.telemetryConfigurationSampleRate),\n    [TelemetryType.usage]: telemetryEnabled && performDraw(configuration.telemetryUsageSampleRate),\n  }\n\n  const runtimeEnvInfo = getRuntimeEnvInfo()\n  onRawTelemetryEventCollected = (rawEvent: RawTelemetryEvent) => {\n    const stringifiedEvent = jsonStringify(rawEvent)!\n    if (\n      telemetryEnabledPerType[rawEvent.type!] &&\n      alreadySentEvents.size < configuration.maxTelemetryEventsPerPage &&\n      !alreadySentEvents.has(stringifiedEvent)\n    ) {\n      const event = toTelemetryEvent(telemetryService, rawEvent, runtimeEnvInfo)\n      observable.notify(event)\n      sendToExtension('telemetry', event)\n      alreadySentEvents.add(stringifiedEvent)\n    }\n  }\n  startMonitorErrorCollection(addTelemetryError)\n\n  function toTelemetryEvent(\n    telemetryService: TelemetryService,\n    event: RawTelemetryEvent,\n    runtimeEnvInfo: RuntimeEnvInfo\n  ): TelemetryEvent & Context {\n    return combine(\n      {\n        type: 'telemetry' as const,\n        date: timeStampNow(),\n        service: telemetryService,\n        version: __BUILD_ENV__SDK_VERSION__,\n        source: 'browser' as const,\n        _dd: {\n          format_version: 2 as const,\n        },\n        telemetry: combine(event, {\n          runtime_env: runtimeEnvInfo,\n          connectivity: getConnectivity(),\n          sdk_setup: __BUILD_ENV__SDK_SETUP__,\n        }),\n        experimental_features: arrayFrom(getExperimentalFeatures()),\n      },\n      contextProvider !== undefined ? contextProvider() : {}\n    ) as TelemetryEvent & Context\n  }\n\n  return {\n    setContextProvider: (provider: () => Context) => {\n      contextProvider = provider\n    },\n    observable,\n    enabled: telemetryEnabled,\n  }\n}\nfunction getRuntimeEnvInfo(): RuntimeEnvInfo {\n  return {\n    is_local_file: window.location.protocol === 'file:',\n    is_worker: 'WorkerGlobalScope' in self,\n  }\n}\n\nexport function startFakeTelemetry() {\n  const events: RawTelemetryEvent[] = []\n\n  onRawTelemetryEventCollected = (event: RawTelemetryEvent) => {\n    events.push(event)\n  }\n\n  return events\n}\n\n// need to be called after telemetry context is provided and observers are registered\nexport function drainPreStartTelemetry() {\n  preStartTelemetryBuffer.drain()\n}\n\nexport function resetTelemetry() {\n  preStartTelemetryBuffer = createBoundedBuffer()\n  onRawTelemetryEventCollected = (event: RawTelemetryEvent) => {\n    preStartTelemetryBuffer.add(() => onRawTelemetryEventCollected(event))\n  }\n}\n\n/**\n * Avoid mixing telemetry events from different data centers\n * but keep replicating staging events for reliability\n */\nexport function isTelemetryReplicationAllowed(configuration: Configuration) {\n  return configuration.site === INTAKE_SITE_STAGING\n}\n\nexport function addTelemetryDebug(message: string, context?: Context) {\n  displayIfDebugEnabled(ConsoleApiName.debug, message, context)\n  onRawTelemetryEventCollected(\n    assign(\n      {\n        type: TelemetryType.log,\n        message,\n        status: StatusType.debug,\n      },\n      context\n    )\n  )\n}\n\nexport function addTelemetryError(e: unknown, context?: Context) {\n  onRawTelemetryEventCollected(\n    assign(\n      {\n        type: TelemetryType.log,\n        status: StatusType.error,\n      },\n      formatError(e),\n      context\n    )\n  )\n}\n\nexport function addTelemetryConfiguration(configuration: RawTelemetryConfiguration) {\n  onRawTelemetryEventCollected({\n    type: TelemetryType.configuration,\n    configuration,\n  })\n}\n\nexport function addTelemetryUsage(usage: RawTelemetryUsage) {\n  onRawTelemetryEventCollected({\n    type: TelemetryType.usage,\n    usage,\n  })\n}\n\nexport function formatError(e: unknown) {\n  if (isError(e)) {\n    const stackTrace = computeStackTrace(e)\n    return {\n      error: {\n        kind: stackTrace.name,\n        stack: toStackTraceString(scrubCustomerFrames(stackTrace)),\n      },\n      message: stackTrace.message!,\n    }\n  }\n  return {\n    error: {\n      stack: NO_ERROR_STACK_PRESENT_MESSAGE,\n    },\n    message: `${NonErrorPrefix.UNCAUGHT} ${jsonStringify(e)!}`,\n  }\n}\n\nexport function scrubCustomerFrames(stackTrace: StackTrace) {\n  stackTrace.stack = stackTrace.stack.filter(\n    (frame) => !frame.url || ALLOWED_FRAME_URLS.some((allowedFrameUrl) => startsWith(frame.url!, allowedFrameUrl))\n  )\n  return stackTrace\n}\n", "import { setInterval, clearInterval } from './timer'\nimport type { TimeoutId } from './timer'\nimport { removeItem } from './utils/arrayUtils'\nimport type { Duration, RelativeTime } from './utils/timeUtils'\nimport { addDuration, relativeNow, ONE_MINUTE } from './utils/timeUtils'\n\nconst END_OF_TIMES = Infinity as RelativeTime\n\nexport interface ValueHistoryEntry<T> {\n  startTime: RelativeTime\n  endTime: RelativeTime\n  value: T\n  remove(): void\n  close(endTime: RelativeTime): void\n}\n\nexport const CLEAR_OLD_VALUES_INTERVAL = ONE_MINUTE\n\n/**\n * Store and keep track of values spans. This whole cache assumes that values are added in\n * chronological order (i.e. all entries have an increasing start time).\n */\nexport interface ValueHistory<Value> {\n  add: (value: Value, startTime: RelativeTime) => ValueHistoryEntry<Value>\n  find: (startTime?: RelativeTime, options?: { returnInactive: boolean }) => Value | undefined\n\n  closeActive: (endTime: RelativeTime) => void\n  findAll: (startTime?: RelativeTime, duration?: Duration) => Value[]\n  reset: () => void\n  stop: () => void\n}\n\nexport function createValueHistory<Value>({\n  expireDelay,\n  maxEntries,\n}: {\n  expireDelay: number\n  maxEntries?: number\n}): ValueHistory<Value> {\n  let entries: Array<ValueHistoryEntry<Value>> = []\n  const clearOldValuesInterval: TimeoutId = setInterval(() => clearOldValues(), CLEAR_OLD_VALUES_INTERVAL)\n\n  function clearOldValues() {\n    const oldTimeThreshold = relativeNow() - expireDelay\n    while (entries.length > 0 && entries[entries.length - 1].endTime < oldTimeThreshold) {\n      entries.pop()\n    }\n  }\n\n  /**\n   * Add a value to the history associated with a start time. Returns a reference to this newly\n   * added entry that can be removed or closed.\n   */\n  function add(value: Value, startTime: RelativeTime): ValueHistoryEntry<Value> {\n    const entry: ValueHistoryEntry<Value> = {\n      value,\n      startTime,\n      endTime: END_OF_TIMES,\n      remove: () => {\n        removeItem(entries, entry)\n      },\n      close: (endTime: RelativeTime) => {\n        entry.endTime = endTime\n      },\n    }\n\n    if (maxEntries && entries.length >= maxEntries) {\n      entries.pop()\n    }\n\n    entries.unshift(entry)\n\n    return entry\n  }\n\n  /**\n   * Return the latest value that was active during `startTime`, or the currently active value\n   * if no `startTime` is provided. This method assumes that entries are not overlapping.\n   *\n   * If `option.returnInactive` is true, returns the value at `startTime` (active or not).\n   */\n  function find(\n    startTime: RelativeTime = END_OF_TIMES,\n    options: { returnInactive: boolean } = { returnInactive: false }\n  ): Value | undefined {\n    for (const entry of entries) {\n      if (entry.startTime <= startTime) {\n        if (options.returnInactive || startTime <= entry.endTime) {\n          return entry.value\n        }\n        break\n      }\n    }\n  }\n\n  /**\n   * Helper function to close the currently active value, if any. This method assumes that entries\n   * are not overlapping.\n   */\n  function closeActive(endTime: RelativeTime) {\n    const latestEntry = entries[0]\n    if (latestEntry && latestEntry.endTime === END_OF_TIMES) {\n      latestEntry.close(endTime)\n    }\n  }\n\n  /**\n   * Return all values with an active period overlapping with the duration,\n   * or all values that were active during `startTime` if no duration is provided,\n   * or all currently active values if no `startTime` is provided.\n   */\n  function findAll(startTime: RelativeTime = END_OF_TIMES, duration = 0 as Duration): Value[] {\n    const endTime = addDuration(startTime, duration)\n    return entries\n      .filter((entry) => entry.startTime <= endTime && startTime <= entry.endTime)\n      .map((entry) => entry.value)\n  }\n\n  /**\n   * Remove all entries from this collection.\n   */\n  function reset() {\n    entries = []\n  }\n\n  /**\n   * Stop internal garbage collection of past entries.\n   */\n  function stop() {\n    clearInterval(clearOldValuesInterval)\n  }\n\n  return { add, find, closeActive, findAll, reset, stop }\n}\n", "import { Observable } from '../../tools/observable'\nimport type { Context } from '../../tools/serialisation/context'\nimport { createValueHistory } from '../../tools/valueHistory'\nimport type { RelativeTime } from '../../tools/utils/timeUtils'\nimport { relativeNow, clocksOrigin, ONE_MINUTE } from '../../tools/utils/timeUtils'\nimport { DOM_EVENT, addEventListener, addEventListeners } from '../../browser/addEventListener'\nimport { clearInterval, setInterval } from '../../tools/timer'\nimport type { Configuration } from '../configuration'\nimport type { TrackingConsentState } from '../trackingConsent'\nimport { SESSION_TIME_OUT_DELAY } from './sessionConstants'\nimport { startSessionStore } from './sessionStore'\nimport type { SessionState } from './sessionState'\n\nexport interface SessionManager<TrackingType extends string> {\n  findSession: (\n    startTime?: RelativeTime,\n    options?: { returnInactive: boolean }\n  ) => SessionContext<TrackingType> | undefined\n  renewObservable: Observable<void>\n  expireObservable: Observable<void>\n  sessionStateUpdateObservable: Observable<{ previousState: SessionState; newState: SessionState }>\n  expire: () => void\n  updateSessionState: (state: Partial<SessionState>) => void\n}\n\nexport interface SessionContext<TrackingType extends string> extends Context {\n  id: string\n  trackingType: TrackingType\n  isReplayForced: boolean\n  anonymousId: string | undefined\n}\n\nexport const VISIBILITY_CHECK_DELAY = ONE_MINUTE\nconst SESSION_CONTEXT_TIMEOUT_DELAY = SESSION_TIME_OUT_DELAY\nlet stopCallbacks: Array<() => void> = []\n\nexport function startSessionManager<TrackingType extends string>(\n  configuration: Configuration,\n  productKey: string,\n  computeSessionState: (rawTrackingType?: string) => { trackingType: TrackingType; isTracked: boolean },\n  trackingConsentState: TrackingConsentState\n): SessionManager<TrackingType> {\n  const renewObservable = new Observable<void>()\n  const expireObservable = new Observable<void>()\n\n  // TODO - Improve configuration type and remove assertion\n  const sessionStore = startSessionStore(configuration.sessionStoreStrategyType!, productKey, computeSessionState)\n  stopCallbacks.push(() => sessionStore.stop())\n\n  const sessionContextHistory = createValueHistory<SessionContext<TrackingType>>({\n    expireDelay: SESSION_CONTEXT_TIMEOUT_DELAY,\n  })\n  stopCallbacks.push(() => sessionContextHistory.stop())\n\n  sessionStore.renewObservable.subscribe(() => {\n    sessionContextHistory.add(buildSessionContext(), relativeNow())\n    renewObservable.notify()\n  })\n  sessionStore.expireObservable.subscribe(() => {\n    expireObservable.notify()\n    sessionContextHistory.closeActive(relativeNow())\n  })\n\n  // We expand/renew session unconditionally as tracking consent is always granted when the session\n  // manager is started.\n  sessionStore.expandOrRenewSession()\n  sessionContextHistory.add(buildSessionContext(), clocksOrigin().relative)\n\n  trackingConsentState.observable.subscribe(() => {\n    if (trackingConsentState.isGranted()) {\n      sessionStore.expandOrRenewSession()\n    } else {\n      sessionStore.expire()\n    }\n  })\n\n  trackActivity(configuration, () => {\n    if (trackingConsentState.isGranted()) {\n      sessionStore.expandOrRenewSession()\n    }\n  })\n  trackVisibility(configuration, () => sessionStore.expandSession())\n  trackResume(configuration, () => sessionStore.restartSession())\n\n  function buildSessionContext() {\n    return {\n      id: sessionStore.getSession().id!,\n      trackingType: sessionStore.getSession()[productKey] as TrackingType,\n      isReplayForced: !!sessionStore.getSession().forcedReplay,\n      anonymousId: sessionStore.getSession().anonymousId,\n    }\n  }\n\n  return {\n    findSession: (startTime, options) => sessionContextHistory.find(startTime, options),\n    renewObservable,\n    expireObservable,\n    sessionStateUpdateObservable: sessionStore.sessionStateUpdateObservable,\n    expire: sessionStore.expire,\n    updateSessionState: sessionStore.updateSessionState,\n  }\n}\n\nexport function stopSessionManager() {\n  stopCallbacks.forEach((e) => e())\n  stopCallbacks = []\n}\n\nfunction trackActivity(configuration: Configuration, expandOrRenewSession: () => void) {\n  const { stop } = addEventListeners(\n    configuration,\n    window,\n    [DOM_EVENT.CLICK, DOM_EVENT.TOUCH_START, DOM_EVENT.KEY_DOWN, DOM_EVENT.SCROLL],\n    expandOrRenewSession,\n    { capture: true, passive: true }\n  )\n  stopCallbacks.push(stop)\n}\n\nfunction trackVisibility(configuration: Configuration, expandSession: () => void) {\n  const expandSessionWhenVisible = () => {\n    if (document.visibilityState === 'visible') {\n      expandSession()\n    }\n  }\n\n  const { stop } = addEventListener(configuration, document, DOM_EVENT.VISIBILITY_CHANGE, expandSessionWhenVisible)\n  stopCallbacks.push(stop)\n\n  const visibilityCheckInterval = setInterval(expandSessionWhenVisible, VISIBILITY_CHECK_DELAY)\n  stopCallbacks.push(() => {\n    clearInterval(visibilityCheckInterval)\n  })\n}\n\nfunction trackResume(configuration: Configuration, cb: () => void) {\n  const { stop } = addEventListener(configuration, window, DOM_EVENT.RESUME, cb, { capture: true })\n  stopCallbacks.push(stop)\n}\n", "export function isServerError(status: number) {\n  return status >= 500\n}\n\nexport function tryToClone(response: Response): Response | undefined {\n  try {\n    return response.clone()\n  } catch {\n    // clone can throw if the response has already been used by another instrumentation or is disturbed\n    return\n  }\n}\n", "import type { TrackType } from '../domain/configuration'\nimport { setTimeout } from '../tools/timer'\nimport { clocksNow, ONE_MINUTE, ONE_SECOND } from '../tools/utils/timeUtils'\nimport { ONE_MEBI_BYTE, ONE_KIBI_BYTE } from '../tools/utils/byteUtils'\nimport { isServerError } from '../tools/utils/responseUtils'\nimport type { RawError } from '../domain/error/error.types'\nimport { ErrorSource } from '../domain/error/error.types'\nimport type { Payload, HttpResponse } from './httpRequest'\n\nexport const MAX_ONGOING_BYTES_COUNT = 80 * ONE_KIBI_BYTE\nexport const MAX_ONGOING_REQUESTS = 32\nexport const MAX_QUEUE_BYTES_COUNT = 3 * ONE_MEBI_BYTE\nexport const MAX_BACKOFF_TIME = ONE_MINUTE\nexport const INITIAL_BACKOFF_TIME = ONE_SECOND\n\nconst enum TransportStatus {\n  UP,\n  FAILURE_DETECTED,\n  DOWN,\n}\n\nconst enum RetryReason {\n  AFTER_SUCCESS,\n  AFTER_RESUME,\n}\n\nexport interface RetryState {\n  transportStatus: TransportStatus\n  currentBackoffTime: number\n  bandwidthMonitor: ReturnType<typeof newBandwidthMonitor>\n  queuedPayloads: ReturnType<typeof newPayloadQueue>\n  queueFullReported: boolean\n}\n\ntype SendStrategy = (payload: Payload, onResponse: (r: HttpResponse) => void) => void\n\nexport function sendWithRetryStrategy(\n  payload: Payload,\n  state: RetryState,\n  sendStrategy: SendStrategy,\n  trackType: TrackType,\n  reportError: (error: RawError) => void\n) {\n  if (\n    state.transportStatus === TransportStatus.UP &&\n    state.queuedPayloads.size() === 0 &&\n    state.bandwidthMonitor.canHandle(payload)\n  ) {\n    send(payload, state, sendStrategy, {\n      onSuccess: () => retryQueuedPayloads(RetryReason.AFTER_SUCCESS, state, sendStrategy, trackType, reportError),\n      onFailure: () => {\n        state.queuedPayloads.enqueue(payload)\n        scheduleRetry(state, sendStrategy, trackType, reportError)\n      },\n    })\n  } else {\n    state.queuedPayloads.enqueue(payload)\n  }\n}\n\nfunction scheduleRetry(\n  state: RetryState,\n  sendStrategy: SendStrategy,\n  trackType: TrackType,\n  reportError: (error: RawError) => void\n) {\n  if (state.transportStatus !== TransportStatus.DOWN) {\n    return\n  }\n  setTimeout(() => {\n    const payload = state.queuedPayloads.first()\n    send(payload, state, sendStrategy, {\n      onSuccess: () => {\n        state.queuedPayloads.dequeue()\n        state.currentBackoffTime = INITIAL_BACKOFF_TIME\n        retryQueuedPayloads(RetryReason.AFTER_RESUME, state, sendStrategy, trackType, reportError)\n      },\n      onFailure: () => {\n        state.currentBackoffTime = Math.min(MAX_BACKOFF_TIME, state.currentBackoffTime * 2)\n        scheduleRetry(state, sendStrategy, trackType, reportError)\n      },\n    })\n  }, state.currentBackoffTime)\n}\n\nfunction send(\n  payload: Payload,\n  state: RetryState,\n  sendStrategy: SendStrategy,\n  { onSuccess, onFailure }: { onSuccess: () => void; onFailure: () => void }\n) {\n  state.bandwidthMonitor.add(payload)\n  sendStrategy(payload, (response) => {\n    state.bandwidthMonitor.remove(payload)\n    if (!shouldRetryRequest(response)) {\n      state.transportStatus = TransportStatus.UP\n      onSuccess()\n    } else {\n      // do not consider transport down if another ongoing request could succeed\n      state.transportStatus =\n        state.bandwidthMonitor.ongoingRequestCount > 0 ? TransportStatus.FAILURE_DETECTED : TransportStatus.DOWN\n      payload.retry = {\n        count: payload.retry ? payload.retry.count + 1 : 1,\n        lastFailureStatus: response.status,\n      }\n      onFailure()\n    }\n  })\n}\n\nfunction retryQueuedPayloads(\n  reason: RetryReason,\n  state: RetryState,\n  sendStrategy: SendStrategy,\n  trackType: TrackType,\n  reportError: (error: RawError) => void\n) {\n  if (reason === RetryReason.AFTER_SUCCESS && state.queuedPayloads.isFull() && !state.queueFullReported) {\n    reportError({\n      message: `Reached max ${trackType} events size queued for upload: ${MAX_QUEUE_BYTES_COUNT / ONE_MEBI_BYTE}MiB`,\n      source: ErrorSource.AGENT,\n      startClocks: clocksNow(),\n    })\n    state.queueFullReported = true\n  }\n  const previousQueue = state.queuedPayloads\n  state.queuedPayloads = newPayloadQueue()\n  while (previousQueue.size() > 0) {\n    sendWithRetryStrategy(previousQueue.dequeue()!, state, sendStrategy, trackType, reportError)\n  }\n}\n\nfunction shouldRetryRequest(response: HttpResponse) {\n  return (\n    response.type !== 'opaque' &&\n    ((response.status === 0 && !navigator.onLine) ||\n      response.status === 408 ||\n      response.status === 429 ||\n      isServerError(response.status))\n  )\n}\n\nexport function newRetryState(): RetryState {\n  return {\n    transportStatus: TransportStatus.UP,\n    currentBackoffTime: INITIAL_BACKOFF_TIME,\n    bandwidthMonitor: newBandwidthMonitor(),\n    queuedPayloads: newPayloadQueue(),\n    queueFullReported: false,\n  }\n}\n\nfunction newPayloadQueue() {\n  const queue: Payload[] = []\n  return {\n    bytesCount: 0,\n    enqueue(payload: Payload) {\n      if (this.isFull()) {\n        return\n      }\n      queue.push(payload)\n      this.bytesCount += payload.bytesCount\n    },\n    first() {\n      return queue[0]\n    },\n    dequeue() {\n      const payload = queue.shift()\n      if (payload) {\n        this.bytesCount -= payload.bytesCount\n      }\n      return payload\n    },\n    size() {\n      return queue.length\n    },\n    isFull() {\n      return this.bytesCount >= MAX_QUEUE_BYTES_COUNT\n    },\n  }\n}\n\nfunction newBandwidthMonitor() {\n  return {\n    ongoingRequestCount: 0,\n    ongoingByteCount: 0,\n    canHandle(payload: Payload) {\n      return (\n        this.ongoingRequestCount === 0 ||\n        (this.ongoingByteCount + payload.bytesCount <= MAX_ONGOING_BYTES_COUNT &&\n          this.ongoingRequestCount < MAX_ONGOING_REQUESTS)\n      )\n    },\n    add(payload: Payload) {\n      this.ongoingRequestCount += 1\n      this.ongoingByteCount += payload.bytesCount\n    },\n    remove(payload: Payload) {\n      this.ongoingRequestCount -= 1\n      this.ongoingByteCount -= payload.bytesCount\n    },\n  }\n}\n", "import type { EndpointBuilder } from '../domain/configuration'\nimport { addTelemetryError } from '../domain/telemetry'\nimport type { Context } from '../tools/serialisation/context'\nimport { monitor } from '../tools/monitor'\nimport { addEventListener } from '../browser/addEventListener'\nimport type { RawError } from '../domain/error/error.types'\nimport { newRetryState, sendWithRetryStrategy } from './sendWithRetryStrategy'\n\n/**\n * Use POST request without content type to:\n * - avoid CORS preflight requests\n * - allow usage of sendBeacon\n *\n * multiple elements are sent separated by \\n in order\n * to be parsed correctly without content type header\n */\n\nexport type HttpRequest = ReturnType<typeof createHttpRequest>\n\nexport interface HttpResponse extends Context {\n  status: number\n  type?: ResponseType\n}\n\nexport interface Payload {\n  data: string | FormData | Blob\n  bytesCount: number\n  retry?: RetryInfo\n  encoding?: 'deflate'\n}\n\nexport interface RetryInfo {\n  count: number\n  lastFailureStatus: number\n}\n\nexport function createHttpRequest(\n  endpointBuilder: EndpointBuilder,\n  bytesLimit: number,\n  reportError: (error: RawError) => void\n) {\n  const retryState = newRetryState()\n  const sendStrategyForRetry = (payload: Payload, onResponse: (r: HttpResponse) => void) =>\n    fetchKeepAliveStrategy(endpointBuilder, bytesLimit, payload, onResponse)\n\n  return {\n    send: (payload: Payload) => {\n      sendWithRetryStrategy(payload, retryState, sendStrategyForRetry, endpointBuilder.trackType, reportError)\n    },\n    /**\n     * Since fetch keepalive behaves like regular fetch on Firefox,\n     * keep using sendBeaconStrategy on exit\n     */\n    sendOnExit: (payload: Payload) => {\n      sendBeaconStrategy(endpointBuilder, bytesLimit, payload)\n    },\n  }\n}\n\nfunction sendBeaconStrategy(endpointBuilder: EndpointBuilder, bytesLimit: number, payload: Payload) {\n  const canUseBeacon = !!navigator.sendBeacon && payload.bytesCount < bytesLimit\n  if (canUseBeacon) {\n    try {\n      const beaconUrl = endpointBuilder.build('beacon', payload)\n      const isQueued = navigator.sendBeacon(beaconUrl, payload.data)\n\n      if (isQueued) {\n        return\n      }\n    } catch (e) {\n      reportBeaconError(e)\n    }\n  }\n\n  const xhrUrl = endpointBuilder.build('xhr', payload)\n  sendXHR(xhrUrl, payload.data)\n}\n\nlet hasReportedBeaconError = false\n\nfunction reportBeaconError(e: unknown) {\n  if (!hasReportedBeaconError) {\n    hasReportedBeaconError = true\n    addTelemetryError(e)\n  }\n}\n\nexport function fetchKeepAliveStrategy(\n  endpointBuilder: EndpointBuilder,\n  bytesLimit: number,\n  payload: Payload,\n  onResponse?: (r: HttpResponse) => void\n) {\n  const canUseKeepAlive = isKeepAliveSupported() && payload.bytesCount < bytesLimit\n  if (canUseKeepAlive) {\n    const fetchUrl = endpointBuilder.build('fetch', payload)\n    fetch(fetchUrl, { method: 'POST', body: payload.data, keepalive: true, mode: 'cors' }).then(\n      monitor((response: Response) => onResponse?.({ status: response.status, type: response.type })),\n      monitor(() => {\n        const xhrUrl = endpointBuilder.build('xhr', payload)\n        // failed to queue the request\n        sendXHR(xhrUrl, payload.data, onResponse)\n      })\n    )\n  } else {\n    const xhrUrl = endpointBuilder.build('xhr', payload)\n    sendXHR(xhrUrl, payload.data, onResponse)\n  }\n}\n\nfunction isKeepAliveSupported() {\n  // Request can throw, cf https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#errors\n  try {\n    return window.Request && 'keepalive' in new Request('http://a')\n  } catch {\n    return false\n  }\n}\n\nexport function sendXHR(url: string, data: Payload['data'], onResponse?: (r: HttpResponse) => void) {\n  const request = new XMLHttpRequest()\n  request.open('POST', url, true)\n  if (data instanceof Blob) {\n    // When using a Blob instance, IE does not use its 'type' to define the 'Content-Type' header\n    // automatically, so the intake request ends up being rejected with an HTTP status 415\n    // Defining the header manually fixes this issue.\n    request.setRequestHeader('Content-Type', data.type)\n  }\n  addEventListener(\n    // allow untrusted event to acount for synthetic event dispatched by third party xhr wrapper\n    { allowUntrustedEvents: true },\n    request,\n    'loadend',\n    () => {\n      onResponse?.({ status: request.status })\n    },\n    {\n      // prevent multiple onResponse callbacks\n      // if the xhr instance is reused by a third party\n      once: true,\n    }\n  )\n  request.send(data)\n}\n", "import { endsWith, includes } from '../tools/utils/polyfills'\nimport { getGlobalObject } from '../tools/getGlobalObject'\nimport type { DefaultPrivacyLevel } from '../domain/configuration'\n\nexport interface BrowserWindowWithEventBridge extends Window {\n  DatadogEventBridge?: DatadogEventBridge\n}\n\nexport interface DatadogEventBridge {\n  getCapabilities?(): string\n  getPrivacyLevel?(): DefaultPrivacyLevel\n  getAllowedWebViewHosts(): string\n  send(msg: string): void\n}\n\nexport const enum BridgeCapability {\n  RECORDS = 'records',\n}\n\nexport function getEventBridge<T, E>() {\n  const eventBridgeGlobal = getEventBridgeGlobal()\n\n  if (!eventBridgeGlobal) {\n    return\n  }\n\n  return {\n    getCapabilities() {\n      return JSON.parse(eventBridgeGlobal.getCapabilities?.() || '[]') as BridgeCapability[]\n    },\n    getPrivacyLevel() {\n      return eventBridgeGlobal.getPrivacyLevel?.()\n    },\n    getAllowedWebViewHosts() {\n      return JSON.parse(eventBridgeGlobal.getAllowedWebViewHosts()) as string[]\n    },\n    send(eventType: T, event: E, viewId?: string) {\n      const view = viewId ? { id: viewId } : undefined\n      eventBridgeGlobal.send(JSON.stringify({ eventType, event, view }))\n    },\n  }\n}\n\nexport function bridgeSupports(capability: BridgeCapability): boolean {\n  const bridge = getEventBridge()\n  return !!bridge && includes(bridge.getCapabilities(), capability)\n}\n\nexport function canUseEventBridge(currentHost = getGlobalObject<Window>().location?.hostname): boolean {\n  const bridge = getEventBridge()\n  return (\n    !!bridge &&\n    bridge\n      .getAllowedWebViewHosts()\n      .some((allowedHost) => currentHost === allowedHost || endsWith(currentHost, `.${allowedHost}`))\n  )\n}\n\nfunction getEventBridgeGlobal() {\n  return getGlobalObject<BrowserWindowWithEventBridge>().DatadogEventBridge\n}\n", "import { Observable } from '../tools/observable'\nimport { objectValues, includes } from '../tools/utils/polyfills'\nimport type { Configuration } from '../domain/configuration'\nimport { addEventListeners, addEventListener, DOM_EVENT } from './addEventListener'\n\nexport const PageExitReason = {\n  HIDDEN: 'visibility_hidden',\n  UNLOADING: 'before_unload',\n  PAGEHIDE: 'page_hide',\n  FROZEN: 'page_frozen',\n} as const\n\nexport type PageExitReason = (typeof PageExitReason)[keyof typeof PageExitReason]\n\nexport interface PageExitEvent {\n  reason: PageExitReason\n}\n\nexport function createPageExitObservable(configuration: Configuration): Observable<PageExitEvent> {\n  return new Observable<PageExitEvent>((observable) => {\n    const { stop: stopListeners } = addEventListeners(\n      configuration,\n      window,\n      [DOM_EVENT.VISIBILITY_CHANGE, DOM_EVENT.FREEZE],\n      (event) => {\n        if (event.type === DOM_EVENT.VISIBILITY_CHANGE && document.visibilityState === 'hidden') {\n          /**\n           * Only event that guarantee to fire on mobile devices when the page transitions to background state\n           * (e.g. when user switches to a different application, goes to homescreen, etc), or is being unloaded.\n           */\n          observable.notify({ reason: PageExitReason.HIDDEN })\n        } else if (event.type === DOM_EVENT.FREEZE) {\n          /**\n           * After transitioning in background a tab can be freezed to preserve resources. (cf: https://developer.chrome.com/blog/page-lifecycle-api)\n           * Allow to collect events happening between hidden and frozen state.\n           */\n          observable.notify({ reason: PageExitReason.FROZEN })\n        }\n      },\n      { capture: true }\n    )\n\n    const stopBeforeUnloadListener = addEventListener(configuration, window, DOM_EVENT.BEFORE_UNLOAD, () => {\n      observable.notify({ reason: PageExitReason.UNLOADING })\n    }).stop\n\n    return () => {\n      stopListeners()\n      stopBeforeUnloadListener()\n    }\n  })\n}\n\nexport function isPageExitReason(reason: string | undefined): reason is PageExitReason {\n  return includes(objectValues(PageExitReason), reason)\n}\n", "import { DOCS_TROUBLESHOOTING, MORE_DETAILS, display } from '../tools/display'\nimport type { Context } from '../tools/serialisation/context'\nimport { objectValues } from '../tools/utils/polyfills'\nimport { isPageExitReason } from '../browser/pageExitObservable'\nimport { jsonStringify } from '../tools/serialisation/jsonStringify'\nimport type { Encoder, EncoderResult } from '../tools/encoder'\nimport { computeBytesCount } from '../tools/utils/byteUtils'\nimport type { HttpRequest, Payload } from './httpRequest'\nimport type { FlushController, FlushEvent } from './flushController'\n\nexport interface Batch {\n  flushController: FlushController\n  add: (message: Context) => void\n  upsert: (message: Context, key: string) => void\n  stop: () => void\n}\n\nexport function createBatch({\n  encoder,\n  request,\n  flushController,\n  messageBytesLimit,\n}: {\n  encoder: Encoder\n  request: HttpRequest\n  flushController: FlushController\n  messageBytesLimit: number\n}): Batch {\n  let upsertBuffer: { [key: string]: string } = {}\n  const flushSubscription = flushController.flushObservable.subscribe((event) => flush(event))\n\n  function push(serializedMessage: string, estimatedMessageBytesCount: number, key?: string) {\n    flushController.notifyBeforeAddMessage(estimatedMessageBytesCount)\n\n    if (key !== undefined) {\n      upsertBuffer[key] = serializedMessage\n      flushController.notifyAfterAddMessage()\n    } else {\n      encoder.write(encoder.isEmpty ? serializedMessage : `\\n${serializedMessage}`, (realMessageBytesCount) => {\n        flushController.notifyAfterAddMessage(realMessageBytesCount - estimatedMessageBytesCount)\n      })\n    }\n  }\n\n  function hasMessageFor(key?: string): key is string {\n    return key !== undefined && upsertBuffer[key] !== undefined\n  }\n\n  function remove(key: string) {\n    const removedMessage = upsertBuffer[key]\n    delete upsertBuffer[key]\n    const messageBytesCount = encoder.estimateEncodedBytesCount(removedMessage)\n    flushController.notifyAfterRemoveMessage(messageBytesCount)\n  }\n\n  function addOrUpdate(message: Context, key?: string) {\n    const serializedMessage = jsonStringify(message)!\n\n    const estimatedMessageBytesCount = encoder.estimateEncodedBytesCount(serializedMessage)\n\n    if (estimatedMessageBytesCount >= messageBytesLimit) {\n      display.warn(\n        `Discarded a message whose size was bigger than the maximum allowed size ${messageBytesLimit}KB. ${MORE_DETAILS} ${DOCS_TROUBLESHOOTING}/#technical-limitations`\n      )\n      return\n    }\n\n    if (hasMessageFor(key)) {\n      remove(key)\n    }\n\n    push(serializedMessage, estimatedMessageBytesCount, key)\n  }\n\n  function flush(event: FlushEvent) {\n    const upsertMessages = objectValues(upsertBuffer).join('\\n')\n    upsertBuffer = {}\n\n    const isPageExit = isPageExitReason(event.reason)\n    const send = isPageExit ? request.sendOnExit : request.send\n\n    if (\n      isPageExit &&\n      // Note: checking that the encoder is async is not strictly needed, but it's an optimization:\n      // if the encoder is async we need to send two requests in some cases (one for encoded data\n      // and the other for non-encoded data). But if it's not async, we don't have to worry about\n      // it and always send a single request.\n      encoder.isAsync\n    ) {\n      const encoderResult = encoder.finishSync()\n\n      // Send encoded messages\n      if (encoderResult.outputBytesCount) {\n        send(formatPayloadFromEncoder(encoderResult))\n      }\n\n      // Send messages that are not yet encoded at this point\n      const pendingMessages = [encoderResult.pendingData, upsertMessages].filter(Boolean).join('\\n')\n      if (pendingMessages) {\n        send({\n          data: pendingMessages,\n          bytesCount: computeBytesCount(pendingMessages),\n        })\n      }\n    } else {\n      if (upsertMessages) {\n        encoder.write(encoder.isEmpty ? upsertMessages : `\\n${upsertMessages}`)\n      }\n      encoder.finish((encoderResult) => {\n        send(formatPayloadFromEncoder(encoderResult))\n      })\n    }\n  }\n\n  return {\n    flushController,\n    add: addOrUpdate,\n    upsert: addOrUpdate,\n    stop: flushSubscription.unsubscribe,\n  }\n}\n\nfunction formatPayloadFromEncoder(encoderResult: EncoderResult): Payload {\n  let data: string | Blob\n  if (typeof encoderResult.output === 'string') {\n    data = encoderResult.output\n  } else {\n    data = new Blob([encoderResult.output], {\n      // This will set the 'Content-Type: text/plain' header. Reasoning:\n      // * The intake rejects the request if there is no content type.\n      // * The browser will issue CORS preflight requests if we set it to 'application/json', which\n      // could induce higher intake load (and maybe has other impacts).\n      // * Also it's not quite JSON, since we are concatenating multiple JSON objects separated by\n      // new lines.\n      type: 'text/plain',\n    })\n  }\n\n  return {\n    data,\n    bytesCount: encoderResult.outputBytesCount,\n    encoding: encoderResult.encoding,\n  }\n}\n", "import type { PageExitEvent, PageExitReason } from '../browser/pageExitObservable'\nimport { Observable } from '../tools/observable'\nimport type { TimeoutId } from '../tools/timer'\nimport { clearTimeout, setTimeout } from '../tools/timer'\nimport type { Duration } from '../tools/utils/timeUtils'\n\nexport type FlushReason = PageExitReason | 'duration_limit' | 'bytes_limit' | 'messages_limit' | 'session_expire'\n\nexport type FlushController = ReturnType<typeof createFlushController>\nexport interface FlushEvent {\n  reason: FlushReason\n  bytesCount: number\n  messagesCount: number\n}\n\ninterface FlushControllerOptions {\n  messagesLimit: number\n  bytesLimit: number\n  durationLimit: Duration\n  pageExitObservable: Observable<PageExitEvent>\n  sessionExpireObservable: Observable<void>\n}\n\n/**\n * Returns a \"flush controller\", responsible of notifying when flushing a pool of pending data needs\n * to happen. The implementation is designed to support both synchronous and asynchronous usages,\n * but relies on invariants described in each method documentation to keep a coherent state.\n */\nexport function createFlushController({\n  messagesLimit,\n  bytesLimit,\n  durationLimit,\n  pageExitObservable,\n  sessionExpireObservable,\n}: FlushControllerOptions) {\n  const pageExitSubscription = pageExitObservable.subscribe((event) => flush(event.reason))\n  const sessionExpireSubscription = sessionExpireObservable.subscribe(() => flush('session_expire'))\n\n  const flushObservable = new Observable<FlushEvent>(() => () => {\n    pageExitSubscription.unsubscribe()\n    sessionExpireSubscription.unsubscribe()\n  })\n\n  let currentBytesCount = 0\n  let currentMessagesCount = 0\n\n  function flush(flushReason: FlushReason) {\n    if (currentMessagesCount === 0) {\n      return\n    }\n\n    const messagesCount = currentMessagesCount\n    const bytesCount = currentBytesCount\n\n    currentMessagesCount = 0\n    currentBytesCount = 0\n    cancelDurationLimitTimeout()\n\n    flushObservable.notify({\n      reason: flushReason,\n      messagesCount,\n      bytesCount,\n    })\n  }\n\n  let durationLimitTimeoutId: TimeoutId | undefined\n  function scheduleDurationLimitTimeout() {\n    if (durationLimitTimeoutId === undefined) {\n      durationLimitTimeoutId = setTimeout(() => {\n        flush('duration_limit')\n      }, durationLimit)\n    }\n  }\n\n  function cancelDurationLimitTimeout() {\n    clearTimeout(durationLimitTimeoutId)\n    durationLimitTimeoutId = undefined\n  }\n\n  return {\n    flushObservable,\n    get messagesCount() {\n      return currentMessagesCount\n    },\n\n    /**\n     * Notifies that a message will be added to a pool of pending messages waiting to be flushed.\n     *\n     * This function needs to be called synchronously, right before adding the message, so no flush\n     * event can happen after `notifyBeforeAddMessage` and before adding the message.\n     *\n     * @param estimatedMessageBytesCount: an estimation of the message bytes count once it is\n     * actually added.\n     */\n    notifyBeforeAddMessage(estimatedMessageBytesCount: number) {\n      if (currentBytesCount + estimatedMessageBytesCount >= bytesLimit) {\n        flush('bytes_limit')\n      }\n      // Consider the message to be added now rather than in `notifyAfterAddMessage`, because if no\n      // message was added yet and `notifyAfterAddMessage` is called asynchronously, we still want\n      // to notify when a flush is needed (for example on page exit).\n      currentMessagesCount += 1\n      currentBytesCount += estimatedMessageBytesCount\n      scheduleDurationLimitTimeout()\n    },\n\n    /**\n     * Notifies that a message *was* added to a pool of pending messages waiting to be flushed.\n     *\n     * This function can be called asynchronously after the message was added, but in this case it\n     * should not be called if a flush event occurred in between.\n     *\n     * @param messageBytesCountDiff: the difference between the estimated message bytes count and\n     * its actual bytes count once added to the pool.\n     */\n    notifyAfterAddMessage(messageBytesCountDiff = 0) {\n      currentBytesCount += messageBytesCountDiff\n\n      if (currentMessagesCount >= messagesLimit) {\n        flush('messages_limit')\n      } else if (currentBytesCount >= bytesLimit) {\n        flush('bytes_limit')\n      }\n    },\n\n    /**\n     * Notifies that a message was removed from a pool of pending messages waiting to be flushed.\n     *\n     * This function needs to be called synchronously, right after removing the message, so no flush\n     * event can happen after removing the message and before `notifyAfterRemoveMessage`.\n     *\n     * @param messageBytesCount: the message bytes count that was added to the pool. Should\n     * correspond to the sum of bytes counts passed to `notifyBeforeAddMessage` and\n     * `notifyAfterAddMessage`.\n     */\n    notifyAfterRemoveMessage(messageBytesCount: number) {\n      currentBytesCount -= messageBytesCount\n      currentMessagesCount -= 1\n      if (currentMessagesCount === 0) {\n        cancelDurationLimitTimeout()\n      }\n    },\n  }\n}\n", "import type { Configuration, EndpointBuilder } from '../domain/configuration'\nimport type { Context } from '../tools/serialisation/context'\nimport type { Observable } from '../tools/observable'\nimport type { PageExitEvent } from '../browser/pageExitObservable'\nimport type { RawError } from '../domain/error/error.types'\nimport type { Encoder } from '../tools/encoder'\nimport { createBatch } from './batch'\nimport { createHttpRequest } from './httpRequest'\nimport { createFlushController } from './flushController'\n\nexport interface BatchConfiguration {\n  endpoint: EndpointBuilder\n  encoder: Encoder\n}\n\ninterface ReplicaBatchConfiguration<T> extends BatchConfiguration {\n  transformMessage?: (message: T) => T\n}\n\nexport function startBatchWithReplica<T extends Context>(\n  configuration: Configuration,\n  primary: BatchConfiguration,\n  replica: ReplicaBatchConfiguration<T> | undefined,\n  reportError: (error: RawError) => void,\n  pageExitObservable: Observable<PageExitEvent>,\n  sessionExpireObservable: Observable<void>,\n  batchFactoryImp = createBatch\n) {\n  const primaryBatch = createBatchFromConfig(configuration, primary)\n  const replicaBatch = replica && createBatchFromConfig(configuration, replica)\n\n  function createBatchFromConfig(configuration: Configuration, { endpoint, encoder }: BatchConfiguration) {\n    return batchFactoryImp({\n      encoder,\n      request: createHttpRequest(endpoint, configuration.batchBytesLimit, reportError),\n      flushController: createFlushController({\n        messagesLimit: configuration.batchMessagesLimit,\n        bytesLimit: configuration.batchBytesLimit,\n        durationLimit: configuration.flushTimeout,\n        pageExitObservable,\n        sessionExpireObservable,\n      }),\n      messageBytesLimit: configuration.messageBytesLimit,\n    })\n  }\n\n  return {\n    flushObservable: primaryBatch.flushController.flushObservable,\n\n    add(message: T, replicated = true) {\n      primaryBatch.add(message)\n      if (replicaBatch && replicated) {\n        replicaBatch.add(replica.transformMessage ? replica.transformMessage(message) : message)\n      }\n    },\n\n    upsert: (message: T, key: string) => {\n      primaryBatch.upsert(message, key)\n      if (replicaBatch) {\n        replicaBatch.upsert(replica.transformMessage ? replica.transformMessage(message) : message, key)\n      }\n    },\n\n    stop: () => {\n      primaryBatch.stop()\n      if (replicaBatch) {\n        replicaBatch.stop()\n      }\n    },\n  }\n}\n", "import { computeBytesCount } from './utils/byteUtils'\n\nexport interface Encoder<Output extends string | Uint8Array = string | Uint8Array> {\n  /**\n   * Whether this encoder might call the provided callbacks asynchronously\n   */\n  isAsync: boolean\n\n  /**\n   * Whether some data has been written since the last finish() or finishSync() call\n   */\n  isEmpty: boolean\n\n  /**\n   * Write a string to be encoded.\n   *\n   * This operation can be synchronous or asynchronous depending on the encoder implementation.\n   *\n   * If specified, the callback will be invoked when the operation finishes, unless the operation is\n   * asynchronous and finish() or finishSync() is called in the meantime.\n   */\n  write(data: string, callback?: (additionalEncodedBytesCount: number) => void): void\n\n  /**\n   * Waits for pending data to be encoded and resets the encoder state.\n   *\n   * This operation can be synchronous or asynchronous depending on the encoder implementation.\n   *\n   * The callback will be invoked when the operation finishes, unless the operation is asynchronous\n   * and another call to finish() or finishSync() occurs in the meantime.\n   */\n  finish(callback: (result: EncoderResult<Output>) => void): void\n\n  /**\n   * Resets the encoder state then returns the encoded data and any potential pending data directly,\n   * discarding all pending write operations and finish() callbacks.\n   */\n  finishSync(): EncoderResult<Output> & { pendingData: string }\n\n  /**\n   * Returns a rough estimation of the bytes count if the data was encoded.\n   */\n  estimateEncodedBytesCount(data: string): number\n}\n\nexport interface EncoderResult<Output extends string | Uint8Array = string | Uint8Array> {\n  output: Output\n  outputBytesCount: number\n\n  /**\n   * An encoding type supported by HTTP Content-Encoding, if applicable.\n   * See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Encoding#directives\n   */\n  encoding?: 'deflate'\n\n  /**\n   * Total bytes count of the input strings encoded to UTF-8.\n   */\n  rawBytesCount: number\n}\n\nexport function createIdentityEncoder(): Encoder<string> {\n  let output = ''\n  let outputBytesCount = 0\n\n  return {\n    isAsync: false,\n\n    get isEmpty() {\n      return !output\n    },\n\n    write(data, callback) {\n      const additionalEncodedBytesCount = computeBytesCount(data)\n      outputBytesCount += additionalEncodedBytesCount\n      output += data\n      if (callback) {\n        callback(additionalEncodedBytesCount)\n      }\n    },\n\n    finish(callback) {\n      callback(this.finishSync())\n    },\n\n    finishSync() {\n      const result = {\n        output,\n        outputBytesCount,\n        rawBytesCount: outputBytesCount,\n        pendingData: '',\n      }\n      output = ''\n      outputBytesCount = 0\n      return result\n    },\n\n    estimateEncodedBytesCount(data) {\n      return data.length\n    },\n  }\n}\n", "import type { Subscription } from './observable'\n\n/**\n * Type helper to extract event types that have \"void\" data. This allows to call `notify` without a\n * second argument. Ex:\n *\n * ```\n * interface EventMap {\n *   foo: void\n * }\n * const LifeCycle = AbstractLifeCycle<EventMap>\n * new LifeCycle().notify('foo')\n * ```\n */\ntype EventTypesWithoutData<EventMap> = {\n  [K in keyof EventMap]: EventMap[K] extends void ? K : never\n}[keyof EventMap]\n\n// eslint-disable-next-line no-restricted-syntax\nexport class AbstractLifeCycle<EventMap> {\n  private callbacks: { [key in keyof EventMap]?: Array<(data: any) => void> } = {}\n\n  notify<EventType extends EventTypesWithoutData<EventMap>>(eventType: EventType): void\n  notify<EventType extends keyof EventMap>(eventType: EventType, data: EventMap[EventType]): void\n  notify(eventType: keyof EventMap, data?: unknown) {\n    const eventCallbacks = this.callbacks[eventType]\n    if (eventCallbacks) {\n      eventCallbacks.forEach((callback) => callback(data))\n    }\n  }\n\n  subscribe<EventType extends keyof EventMap>(\n    eventType: EventType,\n    callback: (data: EventMap[EventType]) => void\n  ): Subscription {\n    if (!this.callbacks[eventType]) {\n      this.callbacks[eventType] = []\n    }\n    this.callbacks[eventType]!.push(callback)\n    return {\n      unsubscribe: () => {\n        this.callbacks[eventType] = this.callbacks[eventType]!.filter((other) => callback !== other)\n      },\n    }\n  }\n}\n", "import { setTimeout } from '../../tools/timer'\nimport { clocksNow, ONE_MINUTE } from '../../tools/utils/timeUtils'\nimport type { RawError } from '../error/error.types'\nimport { ErrorSource } from '../error/error.types'\n\nexport type EventRateLimiter = ReturnType<typeof createEventRateLimiter>\n\nexport function createEventRateLimiter(\n  eventType: string,\n  limit: number,\n  onLimitReached: (limitError: RawError) => void\n) {\n  let eventCount = 0\n  let allowNextEvent = false\n\n  return {\n    isLimitReached() {\n      if (eventCount === 0) {\n        setTimeout(() => {\n          eventCount = 0\n        }, ONE_MINUTE)\n      }\n\n      eventCount += 1\n      if (eventCount <= limit || allowNextEvent) {\n        allowNextEvent = false\n        return false\n      }\n\n      if (eventCount === limit + 1) {\n        allowNextEvent = true\n        try {\n          onLimitReached({\n            message: `Reached max number of ${eventType}s by minute: ${limit}`,\n            source: ErrorSource.AGENT,\n            startClocks: clocksNow(),\n          })\n        } finally {\n          allowNextEvent = false\n        }\n      }\n\n      return true\n    },\n  }\n}\n", "import type { InstrumentedMethodCall } from '../tools/instrumentMethod'\nimport { instrumentMethod } from '../tools/instrumentMethod'\nimport { Observable } from '../tools/observable'\nimport type { Duration, ClocksState } from '../tools/utils/timeUtils'\nimport { elapsed, clocksNow, timeStampNow } from '../tools/utils/timeUtils'\nimport { normalizeUrl } from '../tools/utils/urlPolyfill'\nimport { shallowClone } from '../tools/utils/objectUtils'\nimport type { Configuration } from '../domain/configuration'\nimport { addEventListener } from './addEventListener'\n\nexport interface XhrOpenContext {\n  state: 'open'\n  method: string\n  url: string\n}\n\nexport interface XhrStartContext extends Omit<XhrOpenContext, 'state'> {\n  state: 'start'\n  startClocks: ClocksState\n  isAborted: boolean\n  xhr: XMLHttpRequest\n  handlingStack?: string\n}\n\nexport interface XhrCompleteContext extends Omit<XhrStartContext, 'state'> {\n  state: 'complete'\n  duration: Duration\n  status: number\n}\n\nexport type XhrContext = XhrOpenContext | XhrStartContext | XhrCompleteContext\n\nlet xhrObservable: Observable<XhrContext> | undefined\nconst xhrContexts = new WeakMap<XMLHttpRequest, XhrContext>()\n\nexport function initXhrObservable(configuration: Configuration) {\n  if (!xhrObservable) {\n    xhrObservable = createXhrObservable(configuration)\n  }\n  return xhrObservable\n}\n\nfunction createXhrObservable(configuration: Configuration) {\n  return new Observable<XhrContext>((observable) => {\n    const { stop: stopInstrumentingStart } = instrumentMethod(XMLHttpRequest.prototype, 'open', openXhr)\n\n    const { stop: stopInstrumentingSend } = instrumentMethod(\n      XMLHttpRequest.prototype,\n      'send',\n      (call) => {\n        sendXhr(call, configuration, observable)\n      },\n      { computeHandlingStack: true }\n    )\n\n    const { stop: stopInstrumentingAbort } = instrumentMethod(XMLHttpRequest.prototype, 'abort', abortXhr)\n\n    return () => {\n      stopInstrumentingStart()\n      stopInstrumentingSend()\n      stopInstrumentingAbort()\n    }\n  })\n}\n\nfunction openXhr({ target: xhr, parameters: [method, url] }: InstrumentedMethodCall<XMLHttpRequest, 'open'>) {\n  xhrContexts.set(xhr, {\n    state: 'open',\n    method: String(method).toUpperCase(),\n    url: normalizeUrl(String(url)),\n  })\n}\n\nfunction sendXhr(\n  { target: xhr, handlingStack }: InstrumentedMethodCall<XMLHttpRequest, 'send'>,\n  configuration: Configuration,\n  observable: Observable<XhrContext>\n) {\n  const context = xhrContexts.get(xhr)\n  if (!context) {\n    return\n  }\n\n  const startContext = context as XhrStartContext\n  startContext.state = 'start'\n  startContext.startClocks = clocksNow()\n  startContext.isAborted = false\n  startContext.xhr = xhr\n  startContext.handlingStack = handlingStack\n\n  let hasBeenReported = false\n\n  const { stop: stopInstrumentingOnReadyStateChange } = instrumentMethod(xhr, 'onreadystatechange', () => {\n    if (xhr.readyState === XMLHttpRequest.DONE) {\n      // Try to report the XHR as soon as possible, because the XHR may be mutated by the\n      // application during a future event. For example, Angular is calling .abort() on\n      // completed requests during an onreadystatechange event, so the status becomes '0'\n      // before the request is collected.\n      onEnd()\n    }\n  })\n\n  const onEnd = () => {\n    unsubscribeLoadEndListener()\n    stopInstrumentingOnReadyStateChange()\n    if (hasBeenReported) {\n      return\n    }\n    hasBeenReported = true\n\n    const completeContext = context as XhrCompleteContext\n    completeContext.state = 'complete'\n    completeContext.duration = elapsed(startContext.startClocks.timeStamp, timeStampNow())\n    completeContext.status = xhr.status\n    observable.notify(shallowClone(completeContext))\n  }\n\n  const { stop: unsubscribeLoadEndListener } = addEventListener(configuration, xhr, 'loadend', onEnd)\n\n  observable.notify(startContext)\n}\n\nfunction abortXhr({ target: xhr }: InstrumentedMethodCall<XMLHttpRequest, 'abort'>) {\n  const context = xhrContexts.get(xhr) as XhrStartContext | undefined\n  if (context) {\n    context.isAborted = true\n  }\n}\n", "import type { InstrumentedMethodCall } from '../tools/instrumentMethod'\nimport { instrumentMethod } from '../tools/instrumentMethod'\nimport { monitor } from '../tools/monitor'\nimport { Observable } from '../tools/observable'\nimport { assign } from '../tools/utils/polyfills'\nimport type { ClocksState } from '../tools/utils/timeUtils'\nimport { clocksNow } from '../tools/utils/timeUtils'\nimport { normalizeUrl } from '../tools/utils/urlPolyfill'\n\ninterface FetchContextBase {\n  method: string\n  startClocks: ClocksState\n  input: unknown\n  init?: RequestInit\n  url: string\n  handlingStack?: string\n}\n\nexport interface FetchStartContext extends FetchContextBase {\n  state: 'start'\n}\n\nexport interface FetchResolveContext extends FetchContextBase {\n  state: 'resolve'\n  status: number\n  response?: Response\n  responseType?: string\n  isAborted: boolean\n  error?: Error\n}\n\nexport type FetchContext = FetchStartContext | FetchResolveContext\n\nlet fetchObservable: Observable<FetchContext> | undefined\n\nexport function initFetchObservable() {\n  if (!fetchObservable) {\n    fetchObservable = createFetchObservable()\n  }\n  return fetchObservable\n}\n\nexport function resetFetchObservable() {\n  fetchObservable = undefined\n}\n\nfunction createFetchObservable() {\n  return new Observable<FetchContext>((observable) => {\n    if (!window.fetch) {\n      return\n    }\n\n    const { stop } = instrumentMethod(window, 'fetch', (call) => beforeSend(call, observable), {\n      computeHandlingStack: true,\n    })\n\n    return stop\n  })\n}\n\nfunction beforeSend(\n  { parameters, onPostCall, handlingStack }: InstrumentedMethodCall<Window, 'fetch'>,\n  observable: Observable<FetchContext>\n) {\n  const [input, init] = parameters\n  let methodFromParams = init && init.method\n\n  if (methodFromParams === undefined && input instanceof Request) {\n    methodFromParams = input.method\n  }\n\n  const method = methodFromParams !== undefined ? String(methodFromParams).toUpperCase() : 'GET'\n  const url = input instanceof Request ? input.url : normalizeUrl(String(input))\n  const startClocks = clocksNow()\n\n  const context: FetchStartContext = {\n    state: 'start',\n    init,\n    input,\n    method,\n    startClocks,\n    url,\n    handlingStack,\n  }\n\n  observable.notify(context)\n\n  // Those properties can be changed by observable subscribers\n  parameters[0] = context.input as RequestInfo | URL\n  parameters[1] = context.init\n\n  onPostCall((responsePromise) => afterSend(observable, responsePromise, context))\n}\n\nfunction afterSend(\n  observable: Observable<FetchContext>,\n  responsePromise: Promise<Response>,\n  startContext: FetchStartContext\n) {\n  const context = startContext as unknown as FetchResolveContext\n\n  function reportFetch(partialContext: Partial<FetchResolveContext>) {\n    context.state = 'resolve'\n    assign(context, partialContext)\n    observable.notify(context)\n  }\n\n  responsePromise.then(\n    monitor((response) => {\n      reportFetch({\n        response,\n        responseType: response.type,\n        status: response.status,\n        isAborted: false,\n      })\n    }),\n    monitor((error: Error) => {\n      reportFetch({\n        status: 0,\n        isAborted:\n          context.init?.signal?.aborted || (error instanceof DOMException && error.code === DOMException.ABORT_ERR),\n        error,\n      })\n    })\n  )\n}\n", "import { flattenErrorCauses, isError, tryToGetFingerprint } from '../error/error'\nimport { mergeObservables, Observable } from '../../tools/observable'\nimport { ConsoleApiName, globalConsole } from '../../tools/display'\nimport { callMonitored } from '../../tools/monitor'\nimport { sanitize } from '../../tools/serialisation/sanitize'\nimport { find } from '../../tools/utils/polyfills'\nimport { jsonStringify } from '../../tools/serialisation/jsonStringify'\nimport type { RawError } from '../error/error.types'\nimport { ErrorHandling, ErrorSource } from '../error/error.types'\nimport { computeStackTrace } from '../../tools/stackTrace/computeStackTrace'\nimport { createHandlingStack, toStackTraceString, formatErrorMessage } from '../../tools/stackTrace/handlingStack'\nimport { clocksNow } from '../../tools/utils/timeUtils'\n\nexport type ConsoleLog = NonErrorConsoleLog | ErrorConsoleLog\n\ninterface NonErrorConsoleLog extends ConsoleLogBase {\n  api: Exclude<ConsoleApiName, typeof ConsoleApiName.error>\n  error: undefined\n}\n\nexport interface ErrorConsoleLog extends ConsoleLogBase {\n  api: typeof ConsoleApiName.error\n  error: RawError\n}\n\ninterface ConsoleLogBase {\n  message: string\n  api: ConsoleApiName\n  handlingStack: string\n}\n\ntype ConsoleLogForApi<T extends ConsoleApiName> = T extends typeof ConsoleApiName.error\n  ? ErrorConsoleLog\n  : NonErrorConsoleLog\n\nlet consoleObservablesByApi: { [K in ConsoleApiName]?: Observable<ConsoleLogForApi<K>> } = {}\n\nexport function initConsoleObservable<T extends ConsoleApiName[]>(apis: T): Observable<ConsoleLogForApi<T[number]>> {\n  const consoleObservables = apis.map((api) => {\n    if (!consoleObservablesByApi[api]) {\n      consoleObservablesByApi[api] = createConsoleObservable(api) as any // we are sure that the observable created for this api will yield the expected ConsoleLog type\n    }\n    return consoleObservablesByApi[api] as unknown as Observable<ConsoleLogForApi<T[number]>>\n  })\n\n  return mergeObservables(...consoleObservables)\n}\n\nexport function resetConsoleObservable() {\n  consoleObservablesByApi = {}\n}\n\nfunction createConsoleObservable(api: ConsoleApiName) {\n  return new Observable<ConsoleLog>((observable) => {\n    const originalConsoleApi = globalConsole[api]\n\n    globalConsole[api] = (...params: unknown[]) => {\n      originalConsoleApi.apply(console, params)\n      const handlingStack = createHandlingStack()\n\n      callMonitored(() => {\n        observable.notify(buildConsoleLog(params, api, handlingStack))\n      })\n    }\n\n    return () => {\n      globalConsole[api] = originalConsoleApi\n    }\n  })\n}\n\nfunction buildConsoleLog(params: unknown[], api: ConsoleApiName, handlingStack: string): ConsoleLog {\n  const message = params.map((param) => formatConsoleParameters(param)).join(' ')\n  let error: RawError | undefined\n\n  if (api === ConsoleApiName.error) {\n    const firstErrorParam = find(params, isError)\n\n    error = {\n      stack: firstErrorParam ? toStackTraceString(computeStackTrace(firstErrorParam)) : undefined,\n      fingerprint: tryToGetFingerprint(firstErrorParam),\n      causes: firstErrorParam ? flattenErrorCauses(firstErrorParam, 'console') : undefined,\n      startClocks: clocksNow(),\n      message,\n      source: ErrorSource.CONSOLE,\n      handling: ErrorHandling.HANDLED,\n      handlingStack,\n    }\n  }\n\n  return {\n    api,\n    message,\n    error,\n    handlingStack,\n  } as ConsoleLog\n}\n\nfunction formatConsoleParameters(param: unknown) {\n  if (typeof param === 'string') {\n    return sanitize(param)\n  }\n  if (isError(param)) {\n    return formatErrorMessage(computeStackTrace(param))\n  }\n  return jsonStringify(sanitize(param), undefined, 2)\n}\n", "import { deepClone } from '../../tools/mergeInto'\nimport { getType } from '../../tools/utils/typeUtils'\nimport { sanitize } from '../../tools/serialisation/sanitize'\nimport type { Context } from '../../tools/serialisation/context'\nimport { Observable } from '../../tools/observable'\nimport type { CustomerDataTracker } from './customerDataTracker'\n\nexport type ContextManager = ReturnType<typeof createContextManager>\n\nexport function createContextManager(customerDataTracker?: CustomerDataTracker) {\n  let context: Context = {}\n  const changeObservable = new Observable<void>()\n\n  const contextManager = {\n    getContext: () => deepClone(context),\n\n    setContext: (newContext: Context) => {\n      if (getType(newContext) === 'object') {\n        context = sanitize(newContext)\n        customerDataTracker?.updateCustomerData(context)\n      } else {\n        contextManager.clearContext()\n      }\n      changeObservable.notify()\n    },\n\n    setContextProperty: (key: string, property: any) => {\n      context[key] = sanitize(property)\n      customerDataTracker?.updateCustomerData(context)\n      changeObservable.notify()\n    },\n\n    removeContextProperty: (key: string) => {\n      delete context[key]\n      customerDataTracker?.updateCustomerData(context)\n      changeObservable.notify()\n    },\n\n    clearContext: () => {\n      context = {}\n      customerDataTracker?.resetCustomerData()\n      changeObservable.notify()\n    },\n\n    changeObservable,\n  }\n  return contextManager\n}\n", "import { addEventListener, DOM_EVENT } from '../../browser/addEventListener'\nimport type { Context } from '../../tools/serialisation/context'\nimport type { Configuration } from '../configuration'\nimport { combine } from '../../tools/mergeInto'\nimport type { ContextManager } from './contextManager'\nimport type { CustomerDataType } from './contextConstants'\n\nconst CONTEXT_STORE_KEY_PREFIX = '_dd_c'\n\nconst storageListeners: Array<{ stop: () => void }> = []\n\nexport function storeContextManager(\n  configuration: Configuration,\n  contextManager: ContextManager,\n  productKey: string,\n  customerDataType: CustomerDataType\n) {\n  const storageKey = buildStorageKey(productKey, customerDataType)\n\n  storageListeners.push(\n    addEventListener(configuration, window, DOM_EVENT.STORAGE, ({ key }) => {\n      if (storageKey === key) {\n        synchronizeWithStorage()\n      }\n    })\n  )\n  contextManager.changeObservable.subscribe(dumpToStorage)\n\n  contextManager.setContext(combine(getFromStorage(), contextManager.getContext()))\n\n  function synchronizeWithStorage() {\n    contextManager.setContext(getFromStorage())\n  }\n\n  function dumpToStorage() {\n    localStorage.setItem(storageKey, JSON.stringify(contextManager.getContext()))\n  }\n\n  function getFromStorage() {\n    const rawContext = localStorage.getItem(storageKey)\n    return rawContext !== null ? (JSON.parse(rawContext) as Context) : {}\n  }\n}\n\nexport function buildStorageKey(productKey: string, customerDataType: CustomerDataType) {\n  return `${CONTEXT_STORE_KEY_PREFIX}_${productKey}_${customerDataType}`\n}\n\nexport function removeStorageListeners() {\n  storageListeners.map((listener) => listener.stop())\n}\n", "import { ONE_KIBI_BYTE, computeBytesCount } from '../../tools/utils/byteUtils'\nimport { throttle } from '../../tools/utils/functionUtils'\nimport type { Context } from '../../tools/serialisation/context'\nimport { jsonStringify } from '../../tools/serialisation/jsonStringify'\nimport { DOCS_TROUBLESHOOTING, MORE_DETAILS, display } from '../../tools/display'\nimport { isEmptyObject } from '../../tools/utils/objectUtils'\nimport type { CustomerDataType } from './contextConstants'\n\n// RUM and logs batch bytes limit is 16KB\n// ensure that we leave room for other event attributes and maintain a decent amount of event per batch\n// (3KB (customer data) + 1KB (other attributes)) * 4 (events per batch) = 16KB\nexport const CUSTOMER_DATA_BYTES_LIMIT = 3 * ONE_KIBI_BYTE\n\n// We observed that the compression ratio is around 8 in general, but we also want to keep a margin\n// because some data might not be compressed (ex: last view update on page exit). We chose 16KiB\n// because it is also the limit of the 'batchBytesCount' that we use for RUM and Logs data, but this\n// is a bit arbitrary.\nexport const CUSTOMER_COMPRESSED_DATA_BYTES_LIMIT = 16 * ONE_KIBI_BYTE\n\nexport const BYTES_COMPUTATION_THROTTLING_DELAY = 200\n\nexport type CustomerDataTracker = ReturnType<typeof createCustomerDataTracker>\nexport type CustomerDataTrackerManager = ReturnType<typeof createCustomerDataTrackerManager>\n\nexport const enum CustomerDataCompressionStatus {\n  Unknown,\n  Enabled,\n  Disabled,\n}\n\nexport function createCustomerDataTrackerManager(\n  compressionStatus: CustomerDataCompressionStatus = CustomerDataCompressionStatus.Disabled\n) {\n  const customerDataTrackers = new Map<CustomerDataType, CustomerDataTracker>()\n\n  let alreadyWarned = false\n  function checkCustomerDataLimit(initialBytesCount = 0) {\n    if (alreadyWarned || compressionStatus === CustomerDataCompressionStatus.Unknown) {\n      return\n    }\n\n    const bytesCountLimit =\n      compressionStatus === CustomerDataCompressionStatus.Disabled\n        ? CUSTOMER_DATA_BYTES_LIMIT\n        : CUSTOMER_COMPRESSED_DATA_BYTES_LIMIT\n\n    let bytesCount = initialBytesCount\n    customerDataTrackers.forEach((tracker) => {\n      bytesCount += tracker.getBytesCount()\n    })\n\n    if (bytesCount > bytesCountLimit) {\n      displayCustomerDataLimitReachedWarning(bytesCountLimit)\n      alreadyWarned = true\n    }\n  }\n\n  return {\n    /**\n     * Creates a detached tracker. The manager will not store a reference to that tracker, and the\n     * bytes count will be counted independently from other detached trackers.\n     *\n     * This is particularly useful when we don't know when the tracker will be unused, so we don't\n     * leak memory (ex: when used in Logger instances).\n     */\n    createDetachedTracker: () => {\n      const tracker = createCustomerDataTracker(() => checkCustomerDataLimit(tracker.getBytesCount()))\n      return tracker\n    },\n\n    /**\n     * Creates a tracker if it doesn't exist, and returns it.\n     */\n    getOrCreateTracker: (type: CustomerDataType) => {\n      if (!customerDataTrackers.has(type)) {\n        customerDataTrackers.set(type, createCustomerDataTracker(checkCustomerDataLimit))\n      }\n      return customerDataTrackers.get(type)!\n    },\n\n    setCompressionStatus: (newCompressionStatus: CustomerDataCompressionStatus) => {\n      if (compressionStatus === CustomerDataCompressionStatus.Unknown) {\n        compressionStatus = newCompressionStatus\n        checkCustomerDataLimit()\n      }\n    },\n\n    getCompressionStatus: () => compressionStatus,\n\n    stop: () => {\n      customerDataTrackers.forEach((tracker) => tracker.stop())\n      customerDataTrackers.clear()\n    },\n  }\n}\n\nexport function createCustomerDataTracker(checkCustomerDataLimit: () => void) {\n  let bytesCountCache = 0\n\n  // Throttle the bytes computation to minimize the impact on performance.\n  // Especially useful if the user call context APIs synchronously multiple times in a row\n  const { throttled: computeBytesCountThrottled, cancel: cancelComputeBytesCount } = throttle((context: Context) => {\n    bytesCountCache = computeBytesCount(jsonStringify(context)!)\n    checkCustomerDataLimit()\n  }, BYTES_COMPUTATION_THROTTLING_DELAY)\n\n  const resetBytesCount = () => {\n    cancelComputeBytesCount()\n    bytesCountCache = 0\n  }\n\n  return {\n    updateCustomerData: (context: Context) => {\n      if (isEmptyObject(context)) {\n        resetBytesCount()\n      } else {\n        computeBytesCountThrottled(context)\n      }\n    },\n    resetCustomerData: resetBytesCount,\n    getBytesCount: () => bytesCountCache,\n    stop: () => {\n      cancelComputeBytesCount()\n    },\n  }\n}\n\nfunction displayCustomerDataLimitReachedWarning(bytesCountLimit: number) {\n  display.warn(\n    `Customer data exceeds the recommended ${\n      bytesCountLimit / ONE_KIBI_BYTE\n    }KiB threshold. ${MORE_DETAILS} ${DOCS_TROUBLESHOOTING}/#customer-data-exceeds-the-recommended-threshold-warning`\n  )\n}\n", "import { monitor } from './monitor'\nimport { noop } from './utils/functionUtils'\n\ntype Options = {\n  bytesLimit: number\n  collectStreamBody?: boolean\n}\n/**\n * Read bytes from a ReadableStream until at least `limit` bytes have been read (or until the end of\n * the stream). The callback is invoked with the at most `limit` bytes, and indicates that the limit\n * has been exceeded if more bytes were available.\n */\nexport function readBytesFromStream(\n  stream: ReadableStream<Uint8Array>,\n  callback: (error?: Error, bytes?: Uint8Array, limitExceeded?: boolean) => void,\n  options: Options\n) {\n  const reader = stream.getReader()\n  const chunks: Uint8Array[] = []\n  let readBytesCount = 0\n\n  readMore()\n\n  function readMore() {\n    reader.read().then(\n      monitor((result: ReadableStreamReadResult<Uint8Array>) => {\n        if (result.done) {\n          onDone()\n          return\n        }\n\n        if (options.collectStreamBody) {\n          chunks.push(result.value)\n        }\n        readBytesCount += result.value.length\n\n        if (readBytesCount > options.bytesLimit) {\n          onDone()\n        } else {\n          readMore()\n        }\n      }),\n      monitor((error) => callback(error))\n    )\n  }\n\n  function onDone() {\n    reader.cancel().catch(\n      // we don't care if cancel fails, but we still need to catch the error to avoid reporting it\n      // as an unhandled rejection\n      noop\n    )\n\n    let bytes: Uint8Array | undefined\n    let limitExceeded: boolean | undefined\n    if (options.collectStreamBody) {\n      let completeBuffer: Uint8Array\n      if (chunks.length === 1) {\n        // optimization: if the response is small enough to fit in a single buffer (provided by the browser), just\n        // use it directly.\n        completeBuffer = chunks[0]\n      } else {\n        // else, we need to copy buffers into a larger buffer to concatenate them.\n        completeBuffer = new Uint8Array(readBytesCount)\n        let offset = 0\n        chunks.forEach((chunk) => {\n          completeBuffer.set(chunk, offset)\n          offset += chunk.length\n        })\n      }\n      bytes = completeBuffer.slice(0, options.bytesLimit)\n      limitExceeded = completeBuffer.length > options.bytesLimit\n    }\n\n    callback(undefined, bytes, limitExceeded)\n  }\n}\n", "import { getInitCookie } from '../../browser/cookie'\n\nexport const SYNTHETICS_TEST_ID_COOKIE_NAME = 'datadog-synthetics-public-id'\nexport const SYNTHETICS_RESULT_ID_COOKIE_NAME = 'datadog-synthetics-result-id'\nexport const SYNTHETICS_INJECTS_RUM_COOKIE_NAME = 'datadog-synthetics-injects-rum'\n\nexport interface BrowserWindow extends Window {\n  _DATADOG_SYNTHETICS_PUBLIC_ID?: unknown\n  _DATADOG_SYNTHETICS_RESULT_ID?: unknown\n  _DATADOG_SYNTHETICS_INJECTS_RUM?: unknown\n}\n\nexport function willSyntheticsInjectRum(): boolean {\n  return Boolean(\n    (window as BrowserWindow)._DATADOG_SYNTHETICS_INJECTS_RUM || getInitCookie(SYNTHETICS_INJECTS_RUM_COOKIE_NAME)\n  )\n}\n\nexport function getSyntheticsTestId(): string | undefined {\n  const value = (window as BrowserWindow)._DATADOG_SYNTHETICS_PUBLIC_ID || getInitCookie(SYNTHETICS_TEST_ID_COOKIE_NAME)\n  return typeof value === 'string' ? value : undefined\n}\n\nexport function getSyntheticsResultId(): string | undefined {\n  const value =\n    (window as BrowserWindow)._DATADOG_SYNTHETICS_RESULT_ID || getInitCookie(SYNTHETICS_RESULT_ID_COOKIE_NAME)\n  return typeof value === 'string' ? value : undefined\n}\n", "import { includes } from '@datadog/browser-core'\nimport type { Logger, HandlerType } from '../logger'\n\nexport function isAuthorized(status: StatusType, handlerType: HandlerType, logger: Logger) {\n  const loggerHandler = logger.getHandler()\n  const sanitizedHandlerType = Array.isArray(loggerHandler) ? loggerHandler : [loggerHandler]\n  return (\n    STATUS_PRIORITIES[status] >= STATUS_PRIORITIES[logger.getLevel()] && includes(sanitizedHandlerType, handlerType)\n  )\n}\n\nexport const StatusType = {\n  ok: 'ok',\n  debug: 'debug',\n  info: 'info',\n  notice: 'notice',\n  warn: 'warn',\n  error: 'error',\n  critical: 'critical',\n  alert: 'alert',\n  emerg: 'emerg',\n} as const\n\nexport const STATUS_PRIORITIES: { [key in StatusType]: number } = {\n  [StatusType.ok]: 0,\n  [StatusType.debug]: 1,\n  [StatusType.info]: 2,\n  [StatusType.notice]: 4,\n  [StatusType.warn]: 5,\n  [StatusType.error]: 6,\n  [StatusType.critical]: 7,\n  [StatusType.alert]: 8,\n  [StatusType.emerg]: 9,\n}\n\nexport type StatusType = (typeof StatusType)[keyof typeof StatusType]\n", "import type { RawError } from '@datadog/browser-core'\nimport type { RawLoggerLogsEvent } from '../rawLogsEvent.types'\n\nexport function createErrorFieldFromRawError(\n  rawError: RawError,\n  {\n    /**\n     * Set this to `true` to include the error message in the error field. In most cases, the error\n     * message is already included in the log message, so we don't need to include it again.\n     */\n    includeMessage = false,\n  } = {}\n): NonNullable<RawLoggerLogsEvent['error']> {\n  return {\n    stack: rawError.stack,\n    kind: rawError.type,\n    message: includeMessage ? rawError.message : undefined,\n    causes: rawError.causes,\n    fingerprint: rawError.fingerprint,\n    handling: rawError.handling,\n  }\n}\n", "import type { Context, ContextManager, CustomerDataTracker } from '@datadog/browser-core'\nimport {\n  clocksNow,\n  computeRawError,\n  ErrorHandling,\n  computeStackTrace,\n  combine,\n  createContextManager,\n  ErrorSource,\n  monitored,\n  sanitize,\n  NonErrorPrefix,\n  createHandlingStack,\n  isError,\n} from '@datadog/browser-core'\n\nimport { isAuthorized, StatusType } from './logger/isAuthorized'\nimport { createErrorFieldFromRawError } from './createErrorFieldFromRawError'\n\nexport interface LogsMessage {\n  message: string\n  status: StatusType\n  context?: Context\n}\n\nexport const HandlerType = {\n  console: 'console',\n  http: 'http',\n  silent: 'silent',\n} as const\n\nexport type HandlerType = (typeof HandlerType)[keyof typeof HandlerType]\nexport const STATUSES = Object.keys(StatusType) as StatusType[]\n\n// note: it is safe to merge declarations as long as the methods are actually defined on the prototype\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging, no-restricted-syntax\nexport class Logger {\n  private contextManager: ContextManager\n\n  constructor(\n    private handleLogStrategy: (logsMessage: LogsMessage, logger: Logger, handlingStack?: string) => void,\n    customerDataTracker: CustomerDataTracker,\n    name?: string,\n    private handlerType: HandlerType | HandlerType[] = HandlerType.http,\n    private level: StatusType = StatusType.debug,\n    loggerContext: object = {}\n  ) {\n    this.contextManager = createContextManager(customerDataTracker)\n    this.contextManager.setContext(loggerContext as Context)\n    if (name) {\n      this.contextManager.setContextProperty('logger', { name })\n    }\n  }\n\n  @monitored\n  logImplementation(\n    message: string,\n    messageContext?: object,\n    status: StatusType = StatusType.info,\n    error?: Error,\n    handlingStack?: string\n  ) {\n    const sanitizedMessageContext = sanitize(messageContext) as Context\n    let context: Context\n\n    if (error !== undefined && error !== null) {\n      const rawError = computeRawError({\n        stackTrace: isError(error) ? computeStackTrace(error) : undefined,\n        originalError: error,\n        nonErrorPrefix: NonErrorPrefix.PROVIDED,\n        source: ErrorSource.LOGGER,\n        handling: ErrorHandling.HANDLED,\n        startClocks: clocksNow(),\n      })\n\n      context = combine(\n        {\n          error: createErrorFieldFromRawError(rawError, { includeMessage: true }),\n        },\n        sanitizedMessageContext\n      )\n    } else {\n      context = sanitizedMessageContext\n    }\n\n    this.handleLogStrategy(\n      {\n        message: sanitize(message)!,\n        context,\n        status,\n      },\n      this,\n      handlingStack\n    )\n  }\n\n  log(message: string, messageContext?: object, status: StatusType = StatusType.info, error?: Error) {\n    let handlingStack: string | undefined\n\n    if (isAuthorized(status, HandlerType.http, this)) {\n      handlingStack = createHandlingStack()\n    }\n\n    this.logImplementation(message, messageContext, status, error, handlingStack)\n  }\n\n  setContext(context: object) {\n    this.contextManager.setContext(context as Context)\n  }\n\n  getContext() {\n    return this.contextManager.getContext()\n  }\n\n  setContextProperty(key: string, value: any) {\n    this.contextManager.setContextProperty(key, value)\n  }\n\n  removeContextProperty(key: string) {\n    this.contextManager.removeContextProperty(key)\n  }\n\n  clearContext() {\n    this.contextManager.clearContext()\n  }\n\n  setHandler(handler: HandlerType | HandlerType[]) {\n    this.handlerType = handler\n  }\n\n  getHandler() {\n    return this.handlerType\n  }\n\n  setLevel(level: StatusType) {\n    this.level = level\n  }\n\n  getLevel() {\n    return this.level\n  }\n}\n\n/* eslint-disable local-rules/disallow-side-effects */\nLogger.prototype.ok = createLoggerMethod(StatusType.ok)\nLogger.prototype.debug = createLoggerMethod(StatusType.debug)\nLogger.prototype.info = createLoggerMethod(StatusType.info)\nLogger.prototype.notice = createLoggerMethod(StatusType.notice)\nLogger.prototype.warn = createLoggerMethod(StatusType.warn)\nLogger.prototype.error = createLoggerMethod(StatusType.error)\nLogger.prototype.critical = createLoggerMethod(StatusType.critical)\nLogger.prototype.alert = createLoggerMethod(StatusType.alert)\nLogger.prototype.emerg = createLoggerMethod(StatusType.emerg)\n/* eslint-enable local-rules/disallow-side-effects */\n\n// note: it is safe to merge declarations as long as the methods are actually defined on the prototype\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport interface Logger {\n  ok(message: string, messageContext?: object, error?: Error): void\n  debug(message: string, messageContext?: object, error?: Error): void\n  info(message: string, messageContext?: object, error?: Error): void\n  notice(message: string, messageContext?: object, error?: Error): void\n  warn(message: string, messageContext?: object, error?: Error): void\n  error(message: string, messageContext?: object, error?: Error): void\n  critical(message: string, messageContext?: object, error?: Error): void\n  alert(message: string, messageContext?: object, error?: Error): void\n  emerg(message: string, messageContext?: object, error?: Error): void\n}\n\nfunction createLoggerMethod(status: StatusType) {\n  return function (this: Logger, message: string, messageContext?: object, error?: Error) {\n    let handlingStack: string | undefined\n\n    if (isAuthorized(status, HandlerType.http, this)) {\n      handlingStack = createHandlingStack()\n    }\n\n    this.logImplementation(message, messageContext, status, error, handlingStack)\n  }\n}\n", "import type { ContextManager } from '@datadog/browser-core'\nimport type { CommonContext } from '../../rawLogsEvent.types'\n\nexport function buildCommonContext(\n  globalContextManager: ContextManager,\n  userContextManager: ContextManager\n): CommonContext {\n  return {\n    view: {\n      referrer: document.referrer,\n      url: window.location.href,\n    },\n    context: globalContextManager.getContext(),\n    user: userContextManager.getContext(),\n  }\n}\n", "import type { Configuration, InitConfiguration, RawTelemetryConfiguration } from '@datadog/browser-core'\nimport {\n  serializeConfiguration,\n  assign,\n  ONE_KIBI_BYTE,\n  validateAndBuildConfiguration,\n  display,\n  removeDuplicates,\n  ConsoleApiName,\n  RawReportType,\n  includes,\n  objectValues,\n} from '@datadog/browser-core'\nimport type { LogsEvent } from '../logsEvent.types'\nimport type { LogsEventDomainContext } from '../domainContext.types'\n\nexport interface LogsInitConfiguration extends InitConfiguration {\n  /**\n   * Access to every logs collected by the Logs SDK before they are sent to Datadog.\n   * It allows:\n   * - Enrich your logs with additional context attributes\n   * - Modify your logs to modify their content, or redact sensitive sequences (see the list of editable properties)\n   * - Discard selected logs\n   */\n  beforeSend?: ((event: LogsEvent, context: LogsEventDomainContext) => boolean) | undefined\n  /**\n   * Forward console.error logs, uncaught exceptions and network errors to Datadog.\n   * @default true\n   */\n  forwardErrorsToLogs?: boolean | undefined\n  /**\n   * Forward logs from console.* to Datadog. Use \"all\" to forward everything or an array of console API names to forward only a subset.\n   */\n  forwardConsoleLogs?: ConsoleApiName[] | 'all' | undefined\n  /**\n   * Forward reports from the [Reporting API](https://developer.mozilla.org/en-US/docs/Web/API/Reporting_API) to Datadog. Use \"all\" to forward everything or an array of report types to forward only a subset.\n   */\n  forwardReports?: RawReportType[] | 'all' | undefined\n  /**\n   * Use PCI-compliant intake. See [PCI DSS Compliance](https://docs.datadoghq.com/data_security/pci_compliance/?tab=logmanagement) for further information.\n   * @default false\n   */\n  usePciIntake?: boolean\n  /**\n   * Keep sending logs after the session expiration.\n   * @default false\n   */\n  sendLogsAfterSessionExpiration?: boolean | undefined // TODO next major: remove this option and make it the default behaviour\n}\n\nexport type HybridInitConfiguration = Omit<LogsInitConfiguration, 'clientToken'>\n\nexport interface LogsConfiguration extends Configuration {\n  forwardErrorsToLogs: boolean\n  forwardConsoleLogs: ConsoleApiName[]\n  forwardReports: RawReportType[]\n  requestErrorResponseLengthLimit: number\n  sendLogsAfterSessionExpiration: boolean\n}\n\n/**\n * arbitrary value, byte precision not needed\n */\nexport const DEFAULT_REQUEST_ERROR_RESPONSE_LENGTH_LIMIT = 32 * ONE_KIBI_BYTE\n\nexport function validateAndBuildLogsConfiguration(\n  initConfiguration: LogsInitConfiguration\n): LogsConfiguration | undefined {\n  if (initConfiguration.usePciIntake === true && initConfiguration.site && initConfiguration.site !== 'datadoghq.com') {\n    display.warn(\n      'PCI compliance for Logs is only available for Datadog organizations in the US1 site. Default intake will be used.'\n    )\n  }\n\n  const baseConfiguration = validateAndBuildConfiguration(initConfiguration)\n\n  const forwardConsoleLogs = validateAndBuildForwardOption<ConsoleApiName>(\n    initConfiguration.forwardConsoleLogs,\n    objectValues(ConsoleApiName),\n    'Forward Console Logs'\n  )\n\n  const forwardReports = validateAndBuildForwardOption<RawReportType>(\n    initConfiguration.forwardReports,\n    objectValues(RawReportType),\n    'Forward Reports'\n  )\n\n  if (!baseConfiguration || !forwardConsoleLogs || !forwardReports) {\n    return\n  }\n\n  if (initConfiguration.forwardErrorsToLogs && !includes(forwardConsoleLogs, ConsoleApiName.error)) {\n    forwardConsoleLogs.push(ConsoleApiName.error)\n  }\n\n  return assign(\n    {\n      forwardErrorsToLogs: initConfiguration.forwardErrorsToLogs !== false,\n      forwardConsoleLogs,\n      forwardReports,\n      requestErrorResponseLengthLimit: DEFAULT_REQUEST_ERROR_RESPONSE_LENGTH_LIMIT,\n      sendLogsAfterSessionExpiration: !!initConfiguration.sendLogsAfterSessionExpiration,\n    },\n    baseConfiguration\n  )\n}\n\nexport function validateAndBuildForwardOption<T>(\n  option: readonly T[] | 'all' | undefined,\n  allowedValues: T[],\n  label: string\n): T[] | undefined {\n  if (option === undefined) {\n    return []\n  }\n\n  if (!(option === 'all' || (Array.isArray(option) && option.every((api) => includes(allowedValues, api))))) {\n    display.error(`${label} should be \"all\" or an array with allowed values \"${allowedValues.join('\", \"')}\"`)\n    return\n  }\n\n  return option === 'all' ? allowedValues : removeDuplicates<T>(option)\n}\n\nexport function serializeLogsConfiguration(configuration: LogsInitConfiguration) {\n  const baseSerializedInitConfiguration = serializeConfiguration(configuration)\n\n  return assign(\n    {\n      forward_errors_to_logs: configuration.forwardErrorsToLogs,\n      forward_console_logs: configuration.forwardConsoleLogs,\n      forward_reports: configuration.forwardReports,\n      use_pci_intake: configuration.usePciIntake,\n      send_logs_after_session_expiration: configuration.sendLogsAfterSessionExpiration,\n    },\n    baseSerializedInitConfiguration\n  ) satisfies RawTelemetryConfiguration\n}\n", "import type { TrackingConsentState } from '@datadog/browser-core'\nimport {\n  createBoundedBuffer,\n  assign,\n  canUseEventBridge,\n  display,\n  displayAlreadyInitializedError,\n  initFeatureFlags,\n  initFetchObservable,\n  noop,\n  timeStampNow,\n} from '@datadog/browser-core'\nimport {\n  validateAndBuildLogsConfiguration,\n  type LogsConfiguration,\n  type LogsInitConfiguration,\n} from '../domain/configuration'\nimport type { CommonContext } from '../rawLogsEvent.types'\nimport type { Strategy } from './logsPublicApi'\nimport type { StartLogsResult } from './startLogs'\n\nexport function createPreStartStrategy(\n  getCommonContext: () => CommonContext,\n  trackingConsentState: TrackingConsentState,\n  doStartLogs: (initConfiguration: LogsInitConfiguration, configuration: LogsConfiguration) => StartLogsResult\n): Strategy {\n  const bufferApiCalls = createBoundedBuffer<StartLogsResult>()\n  let cachedInitConfiguration: LogsInitConfiguration | undefined\n  let cachedConfiguration: LogsConfiguration | undefined\n  const trackingConsentStateSubscription = trackingConsentState.observable.subscribe(tryStartLogs)\n\n  function tryStartLogs() {\n    if (!cachedConfiguration || !cachedInitConfiguration || !trackingConsentState.isGranted()) {\n      return\n    }\n\n    trackingConsentStateSubscription.unsubscribe()\n    const startLogsResult = doStartLogs(cachedInitConfiguration, cachedConfiguration)\n\n    bufferApiCalls.drain(startLogsResult)\n  }\n\n  return {\n    init(initConfiguration) {\n      if (!initConfiguration) {\n        display.error('Missing configuration')\n        return\n      }\n      // Set the experimental feature flags as early as possible, so we can use them in most places\n      initFeatureFlags(initConfiguration.enableExperimentalFeatures)\n\n      if (canUseEventBridge()) {\n        initConfiguration = overrideInitConfigurationForBridge(initConfiguration)\n      }\n\n      // Expose the initial configuration regardless of initialization success.\n      cachedInitConfiguration = initConfiguration\n\n      if (cachedConfiguration) {\n        displayAlreadyInitializedError('DD_LOGS', initConfiguration)\n        return\n      }\n\n      const configuration = validateAndBuildLogsConfiguration(initConfiguration)\n      if (!configuration) {\n        return\n      }\n\n      cachedConfiguration = configuration\n      // Instrumuent fetch to track network requests\n      // This is needed in case the consent is not granted and some cutsomer\n      // library (Apollo Client) is storing uninstrumented fetch to be used later\n      // The subscrption is needed so that the instrumentation process is completed\n      initFetchObservable().subscribe(noop)\n\n      trackingConsentState.tryToInit(configuration.trackingConsent)\n      tryStartLogs()\n    },\n\n    get initConfiguration() {\n      return cachedInitConfiguration\n    },\n\n    getInternalContext: noop as () => undefined,\n\n    handleLog(message, statusType, handlingStack, context = getCommonContext(), date = timeStampNow()) {\n      bufferApiCalls.add((startLogsResult) =>\n        startLogsResult.handleLog(message, statusType, handlingStack, context, date)\n      )\n    },\n  }\n}\n\nfunction overrideInitConfigurationForBridge(initConfiguration: LogsInitConfiguration): LogsInitConfiguration {\n  return assign({}, initConfiguration, { clientToken: 'empty' })\n}\n", "import type { Context, TrackingConsent, User, PublicApi } from '@datadog/browser-core'\nimport {\n  addTelemetryUsage,\n  CustomerDataType,\n  assign,\n  createContextManager,\n  makePublicApi,\n  monitor,\n  checkUser,\n  sanitizeUser,\n  sanitize,\n  createCustomerDataTrackerManager,\n  storeContextManager,\n  displayAlreadyInitializedError,\n  deepClone,\n  createTrackingConsentState,\n} from '@datadog/browser-core'\nimport type { LogsInitConfiguration } from '../domain/configuration'\nimport type { HandlerType } from '../domain/logger'\nimport type { StatusType } from '../domain/logger/isAuthorized'\nimport { Logger } from '../domain/logger'\nimport { buildCommonContext } from '../domain/contexts/commonContext'\nimport type { InternalContext } from '../domain/contexts/internalContext'\nimport type { StartLogs, StartLogsResult } from './startLogs'\nimport { createPreStartStrategy } from './preStartLogs'\n\nexport interface LoggerConfiguration {\n  level?: StatusType\n  handler?: HandlerType | HandlerType[]\n  context?: object\n}\n\nexport interface LogsPublicApi extends PublicApi {\n  logger: Logger\n\n  /**\n   * Init the Logs browser SDK.\n   * @param initConfiguration Configuration options of the SDK\n   *\n   * See [Browser Log Collection](https://docs.datadoghq.com/logs/log_collection/javascript) for further information.\n   */\n  init: (initConfiguration: LogsInitConfiguration) => void\n\n  /**\n   * Set the tracking consent of the current user.\n   *\n   * @param {\"granted\" | \"not-granted\"} trackingConsent The user tracking consent\n   *\n   * Logs will be sent only if it is set to \"granted\". This value won't be stored by the library\n   * across page loads: you will need to call this method or set the appropriate `trackingConsent`\n   * field in the init() method at each page load.\n   *\n   * If this method is called before the init() method, the provided value will take precedence\n   * over the one provided as initialization parameter.\n   */\n  setTrackingConsent: (trackingConsent: TrackingConsent) => void\n\n  /**\n   * Get the global Context\n   *\n   * See [Overwrite context](https://docs.datadoghq.com/logs/log_collection/javascript/#overwrite-context) for further information.\n   */\n  getGlobalContext: () => Context\n\n  /**\n   * Set the global context information to all logs, stored in `@context`\n   *\n   * @param context Global context\n   *\n   * See [Overwrite context](https://docs.datadoghq.com/logs/log_collection/javascript/#overwrite-context) for further information.\n   */\n  setGlobalContext: (context: any) => void\n\n  /**\n   * Set or update a global context property, stored in `@context.<key>`\n   *\n   * @param key Key of the property\n   * @param property Value of the property\n   *\n   * See [Overwrite context](https://docs.datadoghq.com/logs/log_collection/javascript/#overwrite-context) for further information.\n   */\n  setGlobalContextProperty: (key: any, value: any) => void\n\n  /**\n   * Remove a global context property\n   *\n   * See [Overwrite context](https://docs.datadoghq.com/logs/log_collection/javascript/#overwrite-context) for further information.\n   */\n  removeGlobalContextProperty: (key: any) => void\n\n  /**\n   * Clear the global context\n   *\n   * See [Overwrite context](https://docs.datadoghq.com/logs/log_collection/javascript/#overwrite-context) for further information.\n   */\n  clearGlobalContext: () => void\n\n  /**\n   * The Datadog browser logs SDK contains a default logger `DD_LOGS.logger`, but this API allows to create different ones.\n   *\n   * See [Define multiple loggers](https://docs.datadoghq.com/logs/log_collection/javascript/#define-multiple-loggers) for further information.\n   */\n  createLogger: (name: string, conf?: LoggerConfiguration) => Logger\n\n  /**\n   * Get a logger\n   *\n   * See [Define multiple loggers](https://docs.datadoghq.com/logs/log_collection/javascript/#define-multiple-loggers) for further information.\n   */\n  getLogger: (name: string) => Logger | undefined\n\n  /**\n   * Get the init configuration\n   */\n  getInitConfiguration: () => LogsInitConfiguration | undefined\n\n  /**\n   * [Internal API] Get the internal SDK context\n   *\n   * See [Access internal context](https://docs.datadoghq.com/logs/log_collection/javascript/#access-internal-context) for further information.\n   */\n  getInternalContext: (startTime?: number) => InternalContext | undefined\n\n  /**\n   * Set user information to all events, stored in `@usr`\n   *\n   * See [User context](https://docs.datadoghq.com/logs/log_collection/javascript/#user-context) for further information.\n   */\n  setUser: (newUser: User) => void\n\n  /**\n   * Get user information\n   *\n   * See [User context](https://docs.datadoghq.com/logs/log_collection/javascript/#user-context) for further information.\n   */\n  getUser: () => Context\n\n  /**\n   * Set or update the user property, stored in `@usr.<key>`\n   *\n   * @param key Key of the property\n   * @param property Value of the property\n   *\n   * See [User context](https://docs.datadoghq.com/logs/log_collection/javascript/#user-context) for further information.\n   */\n  setUserProperty: (key: any, property: any) => void\n\n  /**\n   * Remove a user property\n   *\n   * See [User context](https://docs.datadoghq.com/logs/log_collection/javascript/#user-context) for further information.\n   */\n  removeUserProperty: (key: any) => void\n\n  /**\n   * Clear all user information\n   *\n   * See [User context](https://docs.datadoghq.com/logs/log_collection/javascript/#user-context) for further information.\n   */\n  clearUser: () => void\n}\n\nconst LOGS_STORAGE_KEY = 'logs'\n\nexport interface Strategy {\n  init: (initConfiguration: LogsInitConfiguration) => void\n  initConfiguration: LogsInitConfiguration | undefined\n  getInternalContext: StartLogsResult['getInternalContext']\n  handleLog: StartLogsResult['handleLog']\n}\n\nexport function makeLogsPublicApi(startLogsImpl: StartLogs): LogsPublicApi {\n  const customerDataTrackerManager = createCustomerDataTrackerManager()\n  const globalContextManager = createContextManager(\n    customerDataTrackerManager.getOrCreateTracker(CustomerDataType.GlobalContext)\n  )\n  const userContextManager = createContextManager(customerDataTrackerManager.getOrCreateTracker(CustomerDataType.User))\n  const trackingConsentState = createTrackingConsentState()\n\n  function getCommonContext() {\n    return buildCommonContext(globalContextManager, userContextManager)\n  }\n\n  let strategy = createPreStartStrategy(getCommonContext, trackingConsentState, (initConfiguration, configuration) => {\n    if (initConfiguration.storeContextsAcrossPages) {\n      storeContextManager(configuration, globalContextManager, LOGS_STORAGE_KEY, CustomerDataType.GlobalContext)\n      storeContextManager(configuration, userContextManager, LOGS_STORAGE_KEY, CustomerDataType.User)\n    }\n\n    const startLogsResult = startLogsImpl(initConfiguration, configuration, getCommonContext, trackingConsentState)\n\n    strategy = createPostStartStrategy(initConfiguration, startLogsResult)\n    return startLogsResult\n  })\n\n  const customLoggers: { [name: string]: Logger | undefined } = {}\n\n  const mainLogger = new Logger(\n    (...params) => strategy.handleLog(...params),\n    customerDataTrackerManager.createDetachedTracker()\n  )\n\n  return makePublicApi<LogsPublicApi>({\n    logger: mainLogger,\n\n    init: monitor((initConfiguration) => strategy.init(initConfiguration)),\n\n    setTrackingConsent: monitor((trackingConsent) => {\n      trackingConsentState.update(trackingConsent)\n      addTelemetryUsage({ feature: 'set-tracking-consent', tracking_consent: trackingConsent })\n    }),\n\n    getGlobalContext: monitor(() => globalContextManager.getContext()),\n\n    setGlobalContext: monitor((context) => globalContextManager.setContext(context)),\n\n    setGlobalContextProperty: monitor((key, value) => globalContextManager.setContextProperty(key, value)),\n\n    removeGlobalContextProperty: monitor((key) => globalContextManager.removeContextProperty(key)),\n\n    clearGlobalContext: monitor(() => globalContextManager.clearContext()),\n\n    createLogger: monitor((name, conf = {}) => {\n      customLoggers[name] = new Logger(\n        (...params) => strategy.handleLog(...params),\n        customerDataTrackerManager.createDetachedTracker(),\n        sanitize(name),\n        conf.handler,\n        conf.level,\n        sanitize(conf.context) as object\n      )\n\n      return customLoggers[name]\n    }),\n\n    getLogger: monitor((name) => customLoggers[name]),\n\n    getInitConfiguration: monitor(() => deepClone(strategy.initConfiguration)),\n\n    getInternalContext: monitor((startTime) => strategy.getInternalContext(startTime)),\n\n    setUser: monitor((newUser) => {\n      if (checkUser(newUser)) {\n        userContextManager.setContext(sanitizeUser(newUser as Context))\n      }\n    }),\n\n    getUser: monitor(() => userContextManager.getContext()),\n\n    setUserProperty: monitor((key, property) => {\n      const sanitizedProperty = sanitizeUser({ [key]: property })[key]\n      userContextManager.setContextProperty(key, sanitizedProperty)\n    }),\n\n    removeUserProperty: monitor((key) => userContextManager.removeContextProperty(key)),\n\n    clearUser: monitor(() => userContextManager.clearContext()),\n  })\n}\n\nfunction createPostStartStrategy(initConfiguration: LogsInitConfiguration, startLogsResult: StartLogsResult): Strategy {\n  return assign(\n    {\n      init: (initConfiguration: LogsInitConfiguration) => {\n        displayAlreadyInitializedError('DD_LOGS', initConfiguration)\n      },\n      initConfiguration,\n    },\n    startLogsResult\n  )\n}\n", "import type { RelativeTime, TrackingConsentState } from '@datadog/browser-core'\nimport { Observable, performDraw, startSessionManager } from '@datadog/browser-core'\nimport type { LogsConfiguration } from './configuration'\n\nexport const LOGS_SESSION_KEY = 'logs'\n\nexport interface LogsSessionManager {\n  findTrackedSession: (startTime?: RelativeTime, options?: { returnInactive: boolean }) => LogsSession | undefined\n  expireObservable: Observable<void>\n}\n\nexport type LogsSession = {\n  id?: string // session can be tracked without id\n}\n\nexport const enum LoggerTrackingType {\n  NOT_TRACKED = '0',\n  TRACKED = '1',\n}\n\nexport function startLogsSessionManager(\n  configuration: LogsConfiguration,\n  trackingConsentState: TrackingConsentState\n): LogsSessionManager {\n  const sessionManager = startSessionManager(\n    configuration,\n    LOGS_SESSION_KEY,\n    (rawTrackingType) => computeSessionState(configuration, rawTrackingType),\n    trackingConsentState\n  )\n  return {\n    findTrackedSession: (startTime?: RelativeTime, options = { returnInactive: false }) => {\n      const session = sessionManager.findSession(startTime, options)\n      return session && session.trackingType === LoggerTrackingType.TRACKED\n        ? {\n            id: session.id,\n          }\n        : undefined\n    },\n    expireObservable: sessionManager.expireObservable,\n  }\n}\n\nexport function startLogsSessionManagerStub(configuration: LogsConfiguration): LogsSessionManager {\n  const isTracked = computeTrackingType(configuration) === LoggerTrackingType.TRACKED\n  const session = isTracked ? {} : undefined\n  return {\n    findTrackedSession: () => session,\n    expireObservable: new Observable(),\n  }\n}\n\nfunction computeTrackingType(configuration: LogsConfiguration) {\n  if (!performDraw(configuration.sessionSampleRate)) {\n    return LoggerTrackingType.NOT_TRACKED\n  }\n  return LoggerTrackingType.TRACKED\n}\n\nfunction computeSessionState(configuration: LogsConfiguration, rawSessionType?: string) {\n  const trackingType = hasValidLoggerSession(rawSessionType) ? rawSessionType : computeTrackingType(configuration)\n  return {\n    trackingType,\n    isTracked: trackingType === LoggerTrackingType.TRACKED,\n  }\n}\n\nfunction hasValidLoggerSession(trackingType?: string): trackingType is LoggerTrackingType {\n  return trackingType === LoggerTrackingType.NOT_TRACKED || trackingType === LoggerTrackingType.TRACKED\n}\n", "import type { RelativeTime, Context } from '@datadog/browser-core'\nimport {\n  willSyntheticsInjectRum,\n  addTelemetryDebug,\n  getSyntheticsTestId,\n  getSyntheticsResultId,\n} from '@datadog/browser-core'\n\ninterface Rum {\n  getInternalContext?: (startTime?: RelativeTime) => Context | undefined\n}\n\ninterface BrowserWindow {\n  DD_RUM?: Rum\n  DD_RUM_SYNTHETICS?: Rum\n}\n\nlet logsSentBeforeRumInjectionTelemetryAdded = false\n\nexport function getRUMInternalContext(startTime?: RelativeTime): Context | undefined {\n  const browserWindow = window as BrowserWindow\n\n  if (willSyntheticsInjectRum()) {\n    const context = getInternalContextFromRumGlobal(browserWindow.DD_RUM_SYNTHETICS)\n    if (!context && !logsSentBeforeRumInjectionTelemetryAdded) {\n      logsSentBeforeRumInjectionTelemetryAdded = true\n      addTelemetryDebug('Logs sent before RUM is injected by the synthetics worker', {\n        testId: getSyntheticsTestId(),\n        resultId: getSyntheticsResultId(),\n      })\n    }\n    return context\n  }\n\n  return getInternalContextFromRumGlobal(browserWindow.DD_RUM)\n\n  function getInternalContextFromRumGlobal(rumGlobal?: Rum): Context | undefined {\n    if (rumGlobal && rumGlobal.getInternalContext) {\n      return rumGlobal.getInternalContext(startTime)\n    }\n  }\n}\n\nexport function resetRUMInternalContext() {\n  logsSentBeforeRumInjectionTelemetryAdded = false\n}\n", "import type { EventRateLimiter, RawError } from '@datadog/browser-core'\nimport { ErrorSource, combine, createEventRateLimiter, getRelativeTime, isEmptyObject } from '@datadog/browser-core'\nimport type { CommonContext } from '../rawLogsEvent.types'\nimport type { LogsConfiguration } from './configuration'\nimport type { LifeCycle } from './lifeCycle'\nimport { LifeCycleEventType } from './lifeCycle'\nimport { STATUSES } from './logger'\nimport type { LogsSessionManager } from './logsSessionManager'\nimport { getRUMInternalContext } from './contexts/rumInternalContext'\n\nexport function startLogsAssembly(\n  sessionManager: LogsSessionManager,\n  configuration: LogsConfiguration,\n  lifeCycle: LifeCycle,\n  getCommonContext: () => CommonContext,\n  reportError: (error: RawError) => void\n) {\n  const statusWithCustom = (STATUSES as string[]).concat(['custom'])\n  const logRateLimiters: { [key: string]: EventRateLimiter } = {}\n  statusWithCustom.forEach((status) => {\n    logRateLimiters[status] = createEventRateLimiter(status, configuration.eventRateLimiterThreshold, reportError)\n  })\n\n  lifeCycle.subscribe(\n    LifeCycleEventType.RAW_LOG_COLLECTED,\n    ({ rawLogsEvent, messageContext = undefined, savedCommonContext = undefined, domainContext }) => {\n      const startTime = getRelativeTime(rawLogsEvent.date)\n      const session = sessionManager.findTrackedSession(startTime)\n\n      if (\n        !session &&\n        (!configuration.sendLogsAfterSessionExpiration ||\n          !sessionManager.findTrackedSession(startTime, { returnInactive: true }))\n      ) {\n        return\n      }\n\n      const commonContext = savedCommonContext || getCommonContext()\n      const log = combine(\n        {\n          service: configuration.service,\n          session_id: session ? session.id : undefined,\n          session: session ? { id: session.id } : undefined,\n          // Insert user first to allow overrides from global context\n          usr: !isEmptyObject(commonContext.user) ? commonContext.user : undefined,\n          view: commonContext.view,\n        },\n        commonContext.context,\n        getRUMInternalContext(startTime),\n        rawLogsEvent,\n        messageContext\n      )\n\n      if (\n        configuration.beforeSend?.(log, domainContext) === false ||\n        (log.origin !== ErrorSource.AGENT &&\n          (logRateLimiters[log.status] ?? logRateLimiters['custom']).isLimitReached())\n      ) {\n        return\n      }\n\n      lifeCycle.notify(LifeCycleEventType.LOG_COLLECTED, log)\n    }\n  )\n}\n", "import type { Context, ClocksState, ConsoleLog } from '@datadog/browser-core'\nimport { timeStampNow, ConsoleApiName, ErrorSource, initConsoleObservable } from '@datadog/browser-core'\nimport type { LogsConfiguration } from '../configuration'\nimport type { LifeCycle, RawLogsEventCollectedData } from '../lifeCycle'\nimport { LifeCycleEventType } from '../lifeCycle'\nimport { StatusType } from '../logger/isAuthorized'\nimport type { RawLogsEvent } from '../../rawLogsEvent.types'\nimport { createErrorFieldFromRawError } from '../createErrorFieldFromRawError'\n\nexport interface ProvidedError {\n  startClocks: ClocksState\n  error: unknown\n  context?: Context\n  handlingStack: string\n}\n\nexport const LogStatusForApi = {\n  [ConsoleApiName.log]: StatusType.info,\n  [ConsoleApiName.debug]: StatusType.debug,\n  [ConsoleApiName.info]: StatusType.info,\n  [ConsoleApiName.warn]: StatusType.warn,\n  [ConsoleApiName.error]: StatusType.error,\n}\nexport function startConsoleCollection(configuration: LogsConfiguration, lifeCycle: LifeCycle) {\n  const consoleSubscription = initConsoleObservable(configuration.forwardConsoleLogs).subscribe((log: ConsoleLog) => {\n    const collectedData: RawLogsEventCollectedData<RawLogsEvent> = {\n      rawLogsEvent: {\n        date: timeStampNow(),\n        message: log.message,\n        origin: ErrorSource.CONSOLE,\n        error: log.error && createErrorFieldFromRawError(log.error),\n        status: LogStatusForApi[log.api],\n      },\n      domainContext: {\n        handlingStack: log.handlingStack,\n      },\n    }\n\n    lifeCycle.notify(LifeCycleEventType.RAW_LOG_COLLECTED, collectedData)\n  })\n\n  return {\n    stop: () => {\n      consoleSubscription.unsubscribe()\n    },\n  }\n}\n", "import type { Context, ClocksState } from '@datadog/browser-core'\nimport { timeStampNow, ErrorSource, getFileFromStackTraceString, initReportObservable } from '@datadog/browser-core'\nimport type { LogsConfiguration } from '../configuration'\nimport type { LifeCycle } from '../lifeCycle'\nimport { LifeCycleEventType } from '../lifeCycle'\nimport { StatusType } from '../logger/isAuthorized'\nimport { createErrorFieldFromRawError } from '../createErrorFieldFromRawError'\n\nexport interface ProvidedError {\n  startClocks: ClocksState\n  error: unknown\n  context?: Context\n  handlingStack: string\n}\n\nexport function startReportCollection(configuration: LogsConfiguration, lifeCycle: LifeCycle) {\n  const reportSubscription = initReportObservable(configuration, configuration.forwardReports).subscribe((rawError) => {\n    let message = rawError.message\n    let error\n    const status = rawError.originalError.type === 'deprecation' ? StatusType.warn : StatusType.error\n\n    if (status === StatusType.error) {\n      error = createErrorFieldFromRawError(rawError)\n    } else if (rawError.stack) {\n      message += ` Found in ${getFileFromStackTraceString(rawError.stack)!}`\n    }\n\n    lifeCycle.notify(LifeCycleEventType.RAW_LOG_COLLECTED, {\n      rawLogsEvent: {\n        date: timeStampNow(),\n        message,\n        origin: ErrorSource.REPORT,\n        error,\n        status,\n      },\n    })\n  })\n\n  return {\n    stop: () => {\n      reportSubscription.unsubscribe()\n    },\n  }\n}\n", "import type { FetchResolveContext, XhrCompleteContext } from '@datadog/browser-core'\nimport {\n  ErrorSource,\n  initXhrObservable,\n  RequestType,\n  initFetchObservable,\n  computeStackTrace,\n  toStackTraceString,\n  monitor,\n  noop,\n  readBytesFromStream,\n  tryToClone,\n  isServerError,\n  isIntakeUrl,\n} from '@datadog/browser-core'\nimport type { LogsConfiguration } from '../configuration'\nimport type { LifeCycle } from '../lifeCycle'\nimport type { LogsEventDomainContext } from '../../domainContext.types'\nimport { LifeCycleEventType } from '../lifeCycle'\nimport { StatusType } from '../logger/isAuthorized'\n\nexport function startNetworkErrorCollection(configuration: LogsConfiguration, lifeCycle: LifeCycle) {\n  if (!configuration.forwardErrorsToLogs) {\n    return { stop: noop }\n  }\n\n  const xhrSubscription = initXhrObservable(configuration).subscribe((context) => {\n    if (context.state === 'complete') {\n      handleResponse(RequestType.XHR, context)\n    }\n  })\n  const fetchSubscription = initFetchObservable().subscribe((context) => {\n    if (context.state === 'resolve') {\n      handleResponse(RequestType.FETCH, context)\n    }\n  })\n\n  function handleResponse(type: RequestType, request: XhrCompleteContext | FetchResolveContext) {\n    if (!isIntakeUrl(request.url) && (isRejected(request) || isServerError(request.status))) {\n      if ('xhr' in request) {\n        computeXhrResponseData(request.xhr, configuration, onResponseDataAvailable)\n      } else if (request.response) {\n        computeFetchResponseText(request.response, configuration, onResponseDataAvailable)\n      } else if (request.error) {\n        computeFetchErrorText(request.error, configuration, onResponseDataAvailable)\n      }\n    }\n\n    function onResponseDataAvailable(responseData: unknown) {\n      const domainContext: LogsEventDomainContext<typeof ErrorSource.NETWORK> = {\n        isAborted: request.isAborted,\n        handlingStack: request.handlingStack,\n      }\n\n      lifeCycle.notify(LifeCycleEventType.RAW_LOG_COLLECTED, {\n        rawLogsEvent: {\n          message: `${format(type)} error ${request.method} ${request.url}`,\n          date: request.startClocks.timeStamp,\n          error: {\n            stack: (responseData as string) || 'Failed to load',\n            // We don't know if the error was handled or not, so we set it to undefined\n            handling: undefined,\n          },\n          http: {\n            method: request.method as any, // Cast resource method because of case mismatch cf issue RUMF-1152\n            status_code: request.status,\n            url: request.url,\n          },\n          status: StatusType.error,\n          origin: ErrorSource.NETWORK,\n        },\n        domainContext,\n      })\n    }\n  }\n\n  return {\n    stop: () => {\n      xhrSubscription.unsubscribe()\n      fetchSubscription.unsubscribe()\n    },\n  }\n}\n\n// TODO: ideally, computeXhrResponseData should always call the callback with a string instead of\n// `unknown`. But to keep backward compatibility, in the case of XHR with a `responseType` different\n// than \"text\", the response data should be whatever `xhr.response` is. This is a bit confusing as\n// Logs event 'stack' is expected to be a string. This should be changed in a future major version\n// as it could be a breaking change.\nexport function computeXhrResponseData(\n  xhr: XMLHttpRequest,\n  configuration: LogsConfiguration,\n  callback: (responseData: unknown) => void\n) {\n  if (typeof xhr.response === 'string') {\n    callback(truncateResponseText(xhr.response, configuration))\n  } else {\n    callback(xhr.response)\n  }\n}\n\nexport function computeFetchErrorText(\n  error: Error,\n  configuration: LogsConfiguration,\n  callback: (errorText: string) => void\n) {\n  callback(truncateResponseText(toStackTraceString(computeStackTrace(error)), configuration))\n}\n\nexport function computeFetchResponseText(\n  response: Response,\n  configuration: LogsConfiguration,\n  callback: (responseText?: string) => void\n) {\n  const clonedResponse = tryToClone(response)\n  if (!clonedResponse || !clonedResponse.body) {\n    // if the clone failed or if the body is null, let's not try to read it.\n    callback()\n  } else if (!window.TextDecoder) {\n    // If the browser doesn't support TextDecoder, let's read the whole response then truncate it.\n    //\n    // This should only be the case on early versions of Edge (before they migrated to Chromium).\n    // Even if it could be possible to implement a workaround for the missing TextDecoder API (using\n    // a Blob and FileReader), we found another issue preventing us from reading only the first\n    // bytes from the response: contrary to other browsers, when reading from the cloned response,\n    // if the original response gets canceled, the cloned response is also canceled and we can't\n    // know about it.  In the following illustration, the promise returned by `reader.read()` may\n    // never be fulfilled:\n    //\n    // fetch('/').then((response) => {\n    //   const reader = response.clone().body.getReader()\n    //   readMore()\n    //   function readMore() {\n    //     reader.read().then(\n    //       (result) => {\n    //         if (result.done) {\n    //           console.log('done')\n    //         } else {\n    //           readMore()\n    //         }\n    //       },\n    //       () => console.log('error')\n    //     )\n    //   }\n    //   response.body.getReader().cancel()\n    // })\n    clonedResponse.text().then(\n      monitor((text) => callback(truncateResponseText(text, configuration))),\n      monitor((error) => callback(`Unable to retrieve response: ${error as string}`))\n    )\n  } else {\n    truncateResponseStream(\n      clonedResponse.body,\n      configuration.requestErrorResponseLengthLimit,\n      (error, responseText) => {\n        if (error) {\n          callback(`Unable to retrieve response: ${error as unknown as string}`)\n        } else {\n          callback(responseText)\n        }\n      }\n    )\n  }\n}\n\nfunction isRejected(request: { status: number; responseType?: string }) {\n  return request.status === 0 && request.responseType !== 'opaque'\n}\n\nfunction truncateResponseText(responseText: string, configuration: LogsConfiguration) {\n  if (responseText.length > configuration.requestErrorResponseLengthLimit) {\n    return `${responseText.substring(0, configuration.requestErrorResponseLengthLimit)}...`\n  }\n  return responseText\n}\n\nfunction format(type: RequestType) {\n  if (RequestType.XHR === type) {\n    return 'XHR'\n  }\n  return 'Fetch'\n}\n\nfunction truncateResponseStream(\n  stream: ReadableStream<Uint8Array>,\n  bytesLimit: number,\n  callback: (error?: Error, responseText?: string) => void\n) {\n  readBytesFromStream(\n    stream,\n    (error, bytes, limitExceeded) => {\n      if (error) {\n        callback(error)\n      } else {\n        let responseText = new TextDecoder().decode(bytes)\n        if (limitExceeded) {\n          responseText += '...'\n        }\n        callback(undefined, responseText)\n      }\n    },\n    {\n      bytesLimit,\n      collectStreamBody: true,\n    }\n  )\n}\n", "import type { Context, RawError, ClocksState } from '@datadog/browser-core'\nimport { noop, ErrorSource, trackRuntimeError, Observable } from '@datadog/browser-core'\nimport type { LogsConfiguration } from '../configuration'\nimport type { LifeCycle } from '../lifeCycle'\nimport { LifeCycleEventType } from '../lifeCycle'\nimport { StatusType } from '../logger/isAuthorized'\nimport { createErrorFieldFromRawError } from '../createErrorFieldFromRawError'\n\nexport interface ProvidedError {\n  startClocks: ClocksState\n  error: unknown\n  context?: Context\n  handlingStack: string\n}\n\nexport function startRuntimeErrorCollection(configuration: LogsConfiguration, lifeCycle: LifeCycle) {\n  if (!configuration.forwardErrorsToLogs) {\n    return { stop: noop }\n  }\n\n  const rawErrorObservable = new Observable<RawError>()\n\n  const { stop: stopRuntimeErrorTracking } = trackRuntimeError(rawErrorObservable)\n\n  const rawErrorSubscription = rawErrorObservable.subscribe((rawError) => {\n    lifeCycle.notify(LifeCycleEventType.RAW_LOG_COLLECTED, {\n      rawLogsEvent: {\n        message: rawError.message,\n        date: rawError.startClocks.timeStamp,\n        error: createErrorFieldFromRawError(rawError),\n        origin: ErrorSource.SOURCE,\n        status: StatusType.error,\n      },\n    })\n  })\n\n  return {\n    stop: () => {\n      stopRuntimeErrorTracking()\n      rawErrorSubscription.unsubscribe()\n    },\n  }\n}\n", "import { AbstractLifeCycle } from '@datadog/browser-core'\nimport type { Context } from '@datadog/browser-core'\nimport type { LogsEvent } from '../logsEvent.types'\nimport type { CommonContext, RawLogsEvent } from '../rawLogsEvent.types'\nimport type { LogsEventDomainContext } from '../domainContext.types'\n\nexport const enum LifeCycleEventType {\n  RAW_LOG_COLLECTED,\n  LOG_COLLECTED,\n}\n\ninterface LifeCycleEventMap {\n  [LifeCycleEventType.RAW_LOG_COLLECTED]: RawLogsEventCollectedData\n  [LifeCycleEventType.LOG_COLLECTED]: LogsEvent & Context\n}\n\nexport const LifeCycle = AbstractLifeCycle<LifeCycleEventMap>\nexport type LifeCycle = AbstractLifeCycle<LifeCycleEventMap>\n\nexport interface RawLogsEventCollectedData<E extends RawLogsEvent = RawLogsEvent> {\n  rawLogsEvent: E\n  messageContext?: object\n  savedCommonContext?: CommonContext\n  domainContext?: LogsEventDomainContext<E['origin']>\n}\n", "import type { Context, TimeStamp } from '@datadog/browser-core'\nimport {\n  combine,\n  ErrorSource,\n  timeStampNow,\n  originalConsoleMethods,\n  globalConsole,\n  ConsoleApiName,\n} from '@datadog/browser-core'\nimport type { CommonContext, RawLogsEvent } from '../../rawLogsEvent.types'\nimport type { LifeCycle, RawLogsEventCollectedData } from '../lifeCycle'\nimport { LifeCycleEventType } from '../lifeCycle'\nimport type { Logger, LogsMessage } from '../logger'\nimport { HandlerType } from '../logger'\nimport { isAuthorized, StatusType } from './isAuthorized'\n\nexport function startLoggerCollection(lifeCycle: LifeCycle) {\n  function handleLog(\n    logsMessage: LogsMessage,\n    logger: Logger,\n    handlingStack?: string,\n    savedCommonContext?: CommonContext,\n    savedDate?: TimeStamp\n  ) {\n    const messageContext = combine(logger.getContext(), logsMessage.context)\n\n    if (isAuthorized(logsMessage.status, HandlerType.console, logger)) {\n      displayInConsole(logsMessage, messageContext)\n    }\n\n    if (isAuthorized(logsMessage.status, HandlerType.http, logger)) {\n      const rawLogEventData: RawLogsEventCollectedData<RawLogsEvent> = {\n        rawLogsEvent: {\n          date: savedDate || timeStampNow(),\n          message: logsMessage.message,\n          status: logsMessage.status,\n          origin: ErrorSource.LOGGER,\n        },\n        messageContext,\n        savedCommonContext,\n      }\n\n      if (handlingStack) {\n        rawLogEventData.domainContext = { handlingStack }\n      }\n\n      lifeCycle.notify(LifeCycleEventType.RAW_LOG_COLLECTED, rawLogEventData)\n    }\n  }\n\n  return {\n    handleLog,\n  }\n}\nconst loggerToConsoleApiName: { [key in StatusType]: ConsoleApiName } = {\n  [StatusType.ok]: ConsoleApiName.debug,\n  [StatusType.debug]: ConsoleApiName.debug,\n  [StatusType.info]: ConsoleApiName.info,\n  [StatusType.notice]: ConsoleApiName.info,\n  [StatusType.warn]: ConsoleApiName.warn,\n  [StatusType.error]: ConsoleApiName.error,\n  [StatusType.critical]: ConsoleApiName.error,\n  [StatusType.alert]: ConsoleApiName.error,\n  [StatusType.emerg]: ConsoleApiName.error,\n}\n\nfunction displayInConsole({ status, message }: LogsMessage, messageContext: Context | undefined) {\n  originalConsoleMethods[loggerToConsoleApiName[status]].call(globalConsole, message, messageContext)\n}\n", "import type { Context, Observable, PageExitEvent, RawError } from '@datadog/browser-core'\nimport { createIdentityEncoder, startBatchWithReplica } from '@datadog/browser-core'\nimport type { LogsConfiguration } from '../domain/configuration'\nimport type { LifeCycle } from '../domain/lifeCycle'\nimport { LifeCycleEventType } from '../domain/lifeCycle'\nimport type { LogsEvent } from '../logsEvent.types'\nimport type { LogsSessionManager } from '../domain/logsSessionManager'\n\nexport function startLogsBatch(\n  configuration: LogsConfiguration,\n  lifeCycle: LifeCycle,\n  reportError: (error: RawError) => void,\n  pageExitObservable: Observable<PageExitEvent>,\n  session: LogsSessionManager\n) {\n  const batch = startBatchWithReplica(\n    configuration,\n    {\n      endpoint: configuration.logsEndpointBuilder,\n      encoder: createIdentityEncoder(),\n    },\n    configuration.replica && {\n      endpoint: configuration.replica.logsEndpointBuilder,\n      encoder: createIdentityEncoder(),\n    },\n    reportError,\n    pageExitObservable,\n    session.expireObservable\n  )\n\n  lifeCycle.subscribe(LifeCycleEventType.LOG_COLLECTED, (serverLogsEvent: LogsEvent & Context) => {\n    batch.add(serverLogsEvent)\n  })\n\n  return batch\n}\n", "import type { Context } from '@datadog/browser-core'\nimport { getEventBridge } from '@datadog/browser-core'\nimport type { LifeCycle } from '../domain/lifeCycle'\nimport { LifeCycleEventType } from '../domain/lifeCycle'\nimport type { LogsEvent } from '../logsEvent.types'\n\nexport function startLogsBridge(lifeCycle: LifeCycle) {\n  const bridge = getEventBridge<'log', LogsEvent>()!\n\n  lifeCycle.subscribe(LifeCycleEventType.LOG_COLLECTED, (serverLogsEvent: LogsEvent & Context) => {\n    bridge.send('log', serverLogsEvent)\n  })\n}\n", "import type { RelativeTime } from '@datadog/browser-core'\nimport type { LogsSessionManager } from '../logsSessionManager'\n\nexport interface InternalContext {\n  session_id: string | undefined\n}\n\nexport function startInternalContext(sessionManager: LogsSessionManager) {\n  return {\n    get: (startTime?: number): InternalContext | undefined => {\n      const trackedSession = sessionManager.findTrackedSession(startTime as RelativeTime)\n      if (trackedSession) {\n        return {\n          session_id: trackedSession.id,\n        }\n      }\n    },\n  }\n}\n", "import type { RawError } from '@datadog/browser-core'\nimport { ErrorSource, addTelemetryDebug } from '@datadog/browser-core'\nimport type { LifeCycle } from './lifeCycle'\nimport { LifeCycleEventType } from './lifeCycle'\nimport { StatusType } from './logger/isAuthorized'\n\nexport function startReportError(lifeCycle: LifeCycle) {\n  return (error: RawError) => {\n    lifeCycle.notify(LifeCycleEventType.RAW_LOG_COLLECTED, {\n      rawLogsEvent: {\n        message: error.message,\n        date: error.startClocks.timeStamp,\n        origin: ErrorSource.AGENT,\n        status: StatusType.error,\n      },\n    })\n    addTelemetryDebug('Error reported to customer', { 'error.message': error.message })\n  }\n}\n", "import type { RawError, Observable, PageExitEvent, TelemetryEvent, Context } from '@datadog/browser-core'\nimport {\n  startTelemetry,\n  TelemetryService,\n  canUseEventBridge,\n  getEventBridge,\n  startBatchWithReplica,\n  createIdentityEncoder,\n  isTelemetryReplicationAllowed,\n  addTelemetryConfiguration,\n  drainPreStartTelemetry,\n} from '@datadog/browser-core'\nimport type { LogsConfiguration, LogsInitConfiguration } from './configuration'\nimport { getRUMInternalContext } from './contexts/rumInternalContext'\nimport type { LogsSessionManager } from './logsSessionManager'\nimport { serializeLogsConfiguration } from './configuration'\n\nexport function startLogsTelemetry(\n  initConfiguration: LogsInitConfiguration,\n  configuration: LogsConfiguration,\n  reportError: (error: RawError) => void,\n  pageExitObservable: Observable<PageExitEvent>,\n  session: LogsSessionManager\n) {\n  const telemetry = startTelemetry(TelemetryService.LOGS, configuration)\n  telemetry.setContextProvider(() => ({\n    application: {\n      id: getRUMInternalContext()?.application_id,\n    },\n    session: {\n      id: session.findTrackedSession()?.id,\n    },\n    view: {\n      id: (getRUMInternalContext()?.view as Context)?.id,\n    },\n    action: {\n      id: (getRUMInternalContext()?.user_action as Context)?.id,\n    },\n  }))\n  const cleanupTasks: Array<() => void> = []\n  if (canUseEventBridge()) {\n    const bridge = getEventBridge<'internal_telemetry', TelemetryEvent>()!\n    const telemetrySubscription = telemetry.observable.subscribe((event) => bridge.send('internal_telemetry', event))\n    cleanupTasks.push(() => telemetrySubscription.unsubscribe())\n  } else {\n    const telemetryBatch = startBatchWithReplica(\n      configuration,\n      {\n        endpoint: configuration.rumEndpointBuilder,\n        encoder: createIdentityEncoder(),\n      },\n      configuration.replica && {\n        endpoint: configuration.replica.rumEndpointBuilder,\n        encoder: createIdentityEncoder(),\n      },\n      reportError,\n      pageExitObservable,\n      session.expireObservable\n    )\n    cleanupTasks.push(() => telemetryBatch.stop())\n    const telemetrySubscription = telemetry.observable.subscribe((event) =>\n      telemetryBatch.add(event, isTelemetryReplicationAllowed(configuration))\n    )\n    cleanupTasks.push(() => telemetrySubscription.unsubscribe())\n  }\n  drainPreStartTelemetry()\n  addTelemetryConfiguration(serializeLogsConfiguration(initConfiguration))\n  return {\n    telemetry,\n    stop: () => {\n      cleanupTasks.forEach((task) => task())\n    },\n  }\n}\n", "import type { TrackingConsentState } from '@datadog/browser-core'\nimport {\n  sendToExtension,\n  createPageExitObservable,\n  willSyntheticsInjectRum,\n  canUseEventBridge,\n} from '@datadog/browser-core'\nimport { startLogsSessionManager, startLogsSessionManagerStub } from '../domain/logsSessionManager'\nimport type { LogsConfiguration, LogsInitConfiguration } from '../domain/configuration'\nimport { startLogsAssembly } from '../domain/assembly'\nimport { startConsoleCollection } from '../domain/console/consoleCollection'\nimport { startReportCollection } from '../domain/report/reportCollection'\nimport { startNetworkErrorCollection } from '../domain/networkError/networkErrorCollection'\nimport { startRuntimeErrorCollection } from '../domain/runtimeError/runtimeErrorCollection'\nimport { LifeCycle, LifeCycleEventType } from '../domain/lifeCycle'\nimport { startLoggerCollection } from '../domain/logger/loggerCollection'\nimport { startLogsBatch } from '../transport/startLogsBatch'\nimport { startLogsBridge } from '../transport/startLogsBridge'\nimport { startInternalContext } from '../domain/contexts/internalContext'\nimport { startReportError } from '../domain/reportError'\nimport { startLogsTelemetry } from '../domain/logsTelemetry'\nimport type { CommonContext } from '../rawLogsEvent.types'\n\nexport type StartLogs = typeof startLogs\nexport type StartLogsResult = ReturnType<StartLogs>\n\nexport function startLogs(\n  initConfiguration: LogsInitConfiguration,\n  configuration: LogsConfiguration,\n  getCommonContext: () => CommonContext,\n\n  // `startLogs` and its subcomponents assume tracking consent is granted initially and starts\n  // collecting logs unconditionally. As such, `startLogs` should be called with a\n  // `trackingConsentState` set to \"granted\".\n  trackingConsentState: TrackingConsentState\n) {\n  const lifeCycle = new LifeCycle()\n  const cleanupTasks: Array<() => void> = []\n\n  lifeCycle.subscribe(LifeCycleEventType.LOG_COLLECTED, (log) => sendToExtension('logs', log))\n\n  const reportError = startReportError(lifeCycle)\n  const pageExitObservable = createPageExitObservable(configuration)\n\n  const session =\n    configuration.sessionStoreStrategyType && !canUseEventBridge() && !willSyntheticsInjectRum()\n      ? startLogsSessionManager(configuration, trackingConsentState)\n      : startLogsSessionManagerStub(configuration)\n\n  const { stop: stopLogsTelemetry } = startLogsTelemetry(\n    initConfiguration,\n    configuration,\n    reportError,\n    pageExitObservable,\n    session\n  )\n  cleanupTasks.push(() => stopLogsTelemetry())\n\n  startNetworkErrorCollection(configuration, lifeCycle)\n  startRuntimeErrorCollection(configuration, lifeCycle)\n  startConsoleCollection(configuration, lifeCycle)\n  startReportCollection(configuration, lifeCycle)\n  const { handleLog } = startLoggerCollection(lifeCycle)\n\n  startLogsAssembly(session, configuration, lifeCycle, getCommonContext, reportError)\n\n  if (!canUseEventBridge()) {\n    const { stop: stopLogsBatch } = startLogsBatch(configuration, lifeCycle, reportError, pageExitObservable, session)\n    cleanupTasks.push(() => stopLogsBatch())\n  } else {\n    startLogsBridge(lifeCycle)\n  }\n\n  const internalContext = startInternalContext(session)\n\n  return {\n    handleLog,\n    getInternalContext: internalContext.get,\n    stop: () => {\n      cleanupTasks.forEach((task) => task())\n    },\n  }\n}\n", "import { defineGlobal, getGlobalObject } from '@datadog/browser-core'\nimport type { LogsPublicApi } from '../boot/logsPublicApi'\nimport { makeLogsPublicApi } from '../boot/logsPublicApi'\nimport { startLogs } from '../boot/startLogs'\n\nexport { Logger, LogsMessage, HandlerType } from '../domain/logger'\nexport { StatusType } from '../domain/logger/isAuthorized'\nexport { LoggerConfiguration, LogsPublicApi as LogsGlobal } from '../boot/logsPublicApi'\nexport { LogsInitConfiguration } from '../domain/configuration'\nexport { LogsEvent } from '../logsEvent.types'\nexport { LogsEventDomainContext } from '../domainContext.types'\n\nexport const datadogLogs = makeLogsPublicApi(startLogs)\n\ninterface BrowserWindow extends Window {\n  DD_LOGS?: LogsPublicApi\n}\ndefineGlobal(getGlobalObject<BrowserWindow>(), 'DD_LOGS', datadogLogs)\n", "import { datadogLogs } from \"@datadog/browser-logs\";\n\nexport const CHAT_REQUEST_FAILED_EVENT =\n  \"shopping_assistant.chat_request_failed\";\n\nconst DATADOG_CLIENT_TOKEN = \"pub1df893ad80c104be40c93829d4270563\";\nconst DATADOG_SITE = \"datadoghq.com\";\nconst SERVICE = \"shopping-assistant\";\n\nlet attemptedInit = false;\n\nfunction datadogEnv(): \"prod\" | \"dev\" {\n  return process.env.NODE_ENV === \"production\" ? \"prod\" : \"dev\";\n}\n\nfunction ensureDatadogLogs(): boolean {\n  if (typeof window === \"undefined\") return false;\n  if (datadogLogs.getInitConfiguration()) return true;\n  if (attemptedInit) return false;\n\n  attemptedInit = true;\n  try {\n    datadogLogs.init({\n      clientToken: DATADOG_CLIENT_TOKEN,\n      site: DATADOG_SITE,\n      service: SERVICE,\n      env: datadogEnv(),\n      sessionSampleRate: 100,\n      // Capture uncaught exceptions, unhandled rejections, and console.error so client-side\n      // failures surface in Datadog, not just the explicit chat-failure event below.\n      forwardErrorsToLogs: true,\n      forwardConsoleLogs: [\"error\"],\n    });\n    datadogLogs.logger.setHandler(datadogEnv() === \"prod\" ? \"http\" : \"console\");\n    return true;\n  } catch {\n    return false;\n  }\n}\n\n/**\n * Initialize client-side error logging at widget startup so uncaught errors are captured from\n * first paint (rather than lazily on the first chat failure). Safe to call more than once.\n */\nexport function initShoppingAssistantLogging(): void {\n  ensureDatadogLogs();\n}\n\nexport interface ShoppingAssistantChatFailureLog {\n  mode: \"funnel\" | \"tile+org\" | \"org-only\";\n  agents_api_origin: string;\n  org_id?: string;\n  product_funnel_id?: string;\n  tile_id?: string;\n  has_hero_product_handle: boolean;\n  has_hero_product_url: boolean;\n  has_conversation_id: boolean;\n  message_type?: \"suggestion\" | \"typed\";\n  // NOT `status`: that is a Datadog reserved attribute (the log's severity). Sending a numeric HTTP\n  // status under it downgrades these logger.error() logs to `status:info`, hiding them from\n  // `status:error` searches. Keep the HTTP status under a non-reserved key.\n  http_status?: number;\n  status_text?: string;\n  error_name?: string;\n  response_time_ms: number;\n}\n\nexport function logShoppingAssistantChatFailure(\n  context: ShoppingAssistantChatFailureLog,\n): void {\n  if (!ensureDatadogLogs()) return;\n  datadogLogs.logger.error(CHAT_REQUEST_FAILED_EVENT, {\n    event_name: CHAT_REQUEST_FAILED_EVENT,\n    ...context,\n  });\n}\n", "import type { SamuelRadii, SamuelTheme } from \"../types\";\n\n/** Surface key -> CSS var. `base` is the shared fallback, so it gets the bare `--sa-radius`. */\nconst RADIUS_VARS: Record<keyof SamuelRadii, string> = {\n  base: \"--sa-radius\",\n  panel: \"--sa-radius-panel\",\n  header: \"--sa-radius-header\",\n  card: \"--sa-radius-card\",\n  pill: \"--sa-radius-pill\",\n  chip: \"--sa-radius-chip\",\n  input: \"--sa-radius-input\",\n  bubble: \"--sa-radius-bubble\",\n  swatch: \"--sa-radius-swatch\",\n  variant: \"--sa-radius-variant\",\n};\n\n/**\n * Brand palette -> --sa-* CSS var map. Only includes vars the brand actually set; every chat.css\n * rule carries the original value as an inline `var(--sa-*, <default>)` fallback, so an omitted\n * field keeps the default and an unset theme renders identically to before.\n */\nexport function buildThemeVarsMap(\n  theme?: SamuelTheme,\n  radius?: SamuelRadii,\n  cardImageRatio?: string,\n): Record<string, string> {\n  const t = theme;\n  return {\n    ...(cardImageRatio && { \"--sa-card-image-ratio\": cardImageRatio }),\n    // Only the surfaces the brand actually set. Each rule resolves\n    // `var(--sa-radius-<surface>, var(--sa-radius, <built-in>))`, so an unset surface falls to\n    // `base` and an unset base falls to the value that surface has always had.\n    ...Object.fromEntries(\n      Object.entries(RADIUS_VARS)\n        .filter(([key]) => radius?.[key as keyof SamuelRadii])\n        .map(([key, cssVar]) => [cssVar, radius![key as keyof SamuelRadii]!]),\n    ),\n    ...(t?.buttonBg && { \"--sa-accent\": t.buttonBg }),\n    ...(t?.buttonFg && { \"--sa-accent-fg\": t.buttonFg }),\n    ...(t?.buttonBorder && { \"--sa-accent-border\": t.buttonBorder }),\n    ...(t?.ink && { \"--sa-ink\": t.ink }),\n    ...(t?.surface && { \"--sa-surface\": t.surface }),\n    ...(t?.surfaceRaised && { \"--sa-surface-raised\": t.surfaceRaised }),\n    ...(t?.surfaceAlt && { \"--sa-surface-alt\": t.surfaceAlt }),\n    ...(t?.border && { \"--sa-border\": t.border }),\n    ...(t?.muted && { \"--sa-muted\": t.muted }),\n    ...(t?.link && { \"--sa-link\": t.link }),\n    ...(t?.secondaryBg && { \"--fermat-color-secondary-bg\": t.secondaryBg }),\n    ...(t?.secondaryText && {\n      \"--fermat-color-secondary-text\": t.secondaryText,\n    }),\n    ...(t?.promoBg && { \"--sa-promo-bg\": t.promoBg }),\n    ...(t?.promoFg && { \"--sa-promo-fg\": t.promoFg }),\n    ...(t?.promoBorder && { \"--sa-promo-border\": t.promoBorder }),\n    ...(t?.oosBg && { \"--sa-oos-bg\": t.oosBg }),\n    ...(t?.oosFg && { \"--sa-oos-fg\": t.oosFg }),\n    ...(t?.oosBorder && { \"--sa-oos-border\": t.oosBorder }),\n  };\n}\n", "/** Public API bases; the build bakes the target env's value via esbuild define (get_env.sh), prod fallback. */\nexport type AssistantEnv = \"local\" | \"dev\" | \"prod\";\n\nexport interface ApiBases {\n  agentsApiBaseUrl: string;\n  productApiBaseUrl: string;\n}\n\nexport const API_BASES: Record<AssistantEnv, ApiBases> = {\n  local: {\n    agentsApiBaseUrl: \"http://localhost:8000\",\n    productApiBaseUrl: \"http://localhost:8080\",\n  },\n  dev: {\n    agentsApiBaseUrl: \"https://agents-api-708090743198.us-central1.run.app\",\n    // Dedicated product-api-assistant release (capacity separation), not shared /product.\n    productApiBaseUrl: \"https://api.dev.fermatcommerce.com/product-assistant\",\n  },\n  prod: {\n    // Origin-locked CloudFront edge -> agents-api-public (AGENT-288), not the Cloud Run host directly.\n    agentsApiBaseUrl: \"https://agents-public.fermatcommerce.com\",\n    productApiBaseUrl: \"https://api.fermatcommerce.com/product-assistant\",\n  },\n};\n\n/** The esbuild-baked API bases; falls back to prod when no define was set. */\nexport function bakedApiBases(): ApiBases {\n  return {\n    agentsApiBaseUrl:\n      process.env.SAMUEL_AGENTS_API_URL || API_BASES.prod.agentsApiBaseUrl,\n    productApiBaseUrl:\n      process.env.SAMUEL_PRODUCT_API_URL || API_BASES.prod.productApiBaseUrl,\n  };\n}\n\n/** True only when the build targets prod. Analytics fire on prod only; dev/local must not pollute it. */\nexport function isProdEnv(): boolean {\n  return bakedApiBases().agentsApiBaseUrl === API_BASES.prod.agentsApiBaseUrl;\n}\n", "import React, { useState } from \"react\";\nimport { AssistantHeader } from \"./AssistantHeader\";\nimport { SendIcon } from \"./icons\";\nimport { SuggestionPillList } from \"./SuggestionPillList\";\nimport { constrainAvatar } from \"../util/constrain-image\";\nimport { useTranslation } from \"react-i18next\";\n\nexport interface SamuelFacadeProps {\n  brandName?: string;\n  brandLogoUrl?: string;\n  /** Persona portrait; preferred over brandLogoUrl when set. */\n  assistantAvatarUrl?: string;\n  /** Persona name; preferred over brandName as the header title, as in the chat panel. */\n  assistantName?: string;\n  /** Persona tagline, rendered beneath the header title only when set. */\n  assistantTagline?: string;\n  /** Product-contextual starter questions; falls back to hero/discovery defaults. */\n  suggestedQuestions?: string[];\n  /** Whether a hero product is in context (picks hero vs discovery default questions). */\n  hasHero?: boolean;\n  /** Server starter questions are still in flight: withhold the chips rather than flashing the\n   *  fallback set and swapping it a moment later. */\n  suggestionsResolving?: boolean;\n  /** Chip click or input submit: hands the intent to the host (Claire opens the seeded drawer). */\n  onSubmit: (prompt: string) => void;\n}\n\n/**\n * Inline facade launcher (STO-606): a reduced, presentational teaser (greeting, a few suggested\n * question chips, a \"Message ...\" input). It is NOT the chat: no message list, no streaming, no\n * conversation state. Its only behavior is handing a chip/input intent to the host, which opens the\n * real floating drawer seeded with that prompt.\n */\nexport const SamuelFacade: React.FC<SamuelFacadeProps> = ({\n  brandName,\n  brandLogoUrl,\n  assistantAvatarUrl,\n  assistantName,\n  assistantTagline,\n  suggestedQuestions,\n  hasHero,\n  suggestionsResolving,\n  onSubmit,\n}) => {\n  const [inputValue, setInputValue] = useState(\"\");\n  const { t } = useTranslation();\n  // Same identity resolution as the chat panel header, so the facade and the drawer it opens\n  // introduce the assistant with one name/portrait rather than two.\n  const headerTitle = assistantName || brandName;\n  const headerAvatarUrl = constrainAvatar(\n    assistantAvatarUrl || brandLogoUrl,\n    40,\n  );\n  // i18next arrays come back typed as string; assert the shape for the pills. Matches the chat\n  // welcome state (ChatMessages) so the facade and welcome show the same per-brand copy.\n  const defaultQuestions = t(\n    hasHero ? \"heroSuggestedQuestions\" : \"discoverySuggestedQuestions\",\n    { returnObjects: true },\n  ) as unknown as string[];\n  const questions = suggestedQuestions ?? defaultQuestions;\n\n  const submit = (value: string) => {\n    const trimmed = value.trim();\n    if (trimmed) onSubmit(trimmed);\n  };\n\n  const handleFormSubmit = (e: React.FormEvent) => {\n    e.preventDefault();\n    submit(inputValue);\n    setInputValue(\"\");\n  };\n\n  return (\n    <div className=\"fermat-facade flex flex-col overflow-hidden border border-sa-border bg-sa-surface font-[family-name:var(--fermat-body-fontFamily,var(--font-brand-primary,var(--neue-montreal-font-stack)))] font-[var(--sa-body-weight,normal)] tracking-[var(--sa-body-letter-spacing,normal)] text-sa-ink\">\n      {/* No onIdentityClick: the about view is drawer-only by design. The facade has no surface to\n          replace with it, so its header stays inert text even when the brand configures about copy. */}\n      {(headerAvatarUrl || headerTitle) && (\n        <AssistantHeader\n          avatarUrl={headerAvatarUrl}\n          title={headerTitle}\n          tagline={assistantTagline}\n        />\n      )}\n\n      <div className=\"fermat-facade-body flex flex-col gap-3.5 p-2\">\n        <p className=\"fermat-facade-greeting m-0 text-sm leading-[var(--sa-body-line-height,1.5)]\">\n          {t(\"greeting\", {\n            context: brandName ? \"brand\" : \"\",\n            brand: brandName,\n          })}\n        </p>\n\n        {!suggestionsResolving && (\n          <SuggestionPillList\n            questions={questions}\n            onSelect={submit}\n            dataSrRole=\"facade-suggestion\"\n          />\n        )}\n\n        <form\n          onSubmit={handleFormSubmit}\n          className=\"fermat-facade-input-form m-0\"\n        >\n          <div className=\"fermat-chat-input-inner relative flex items-center\">\n            <input\n              type=\"text\"\n              value={inputValue}\n              onChange={(e) => setInputValue(e.target.value)}\n              placeholder={\n                brandName ? `Message ${brandName}` : \"Message the assistant\"\n              }\n              className=\"fermat-chat-input flex-1 w-full rounded-lg border border-[var(--sa-border,#e2e2dc)] px-3 py-2.5 pr-10 text-sm/[1.5] font-[inherit] outline-none transition-[border-color,box-shadow] duration-150 placeholder:text-[var(--sa-muted,#a6a59e)] focus:border-sa-accent focus:shadow-[0_0_0_3px_color-mix(in_srgb,var(--sa-accent,#0a0a0a)_8%,transparent)] disabled:cursor-not-allowed disabled:bg-[var(--sa-surface-alt,#f5f5f5)]\"\n              data-sr-role=\"facade-input\"\n              aria-label={\n                brandName ? `Message ${brandName}` : \"Message the assistant\"\n              }\n            />\n            <button\n              type=\"submit\"\n              className=\"fermat-chat-send-button absolute right-2.5 top-1/2 flex h-6 w-6 -translate-y-1/2 cursor-pointer items-center justify-center rounded-full border-0 bg-transparent p-0 text-sa-ink transition-opacity duration-150 hover:enabled:opacity-70 disabled:cursor-not-allowed disabled:opacity-30\"\n              data-sr-role=\"facade-send\"\n              disabled={!inputValue.trim()}\n              aria-label=\"Send message\"\n            >\n              <SendIcon />\n            </button>\n          </div>\n        </form>\n      </div>\n    </div>\n  );\n};\n\nexport default SamuelFacade;\n"],
  "mappings": "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",
  "names": ["require_react_production_min", "__commonJSMin", "exports", "l", "n", "p", "q", "r", "t", "u", "v", "w", "x", "y", "z", "A", "a", "B", "C", "D", "E", "b", "e", "F", "G", "H", "I", "J", "K", "L", "M", "d", "c", "k", "h", "g", "f", "m", "N", "O", "escape", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "require_react", "__commonJSMin", "exports", "module", "require_scheduler_production_min", "__commonJSMin", "exports", "f", "a", "b", "c", "d", "e", "g", "h", "k", "w", "m", "C", "n", "x", "l", "p", "q", "r", "t", "u", "v", "y", "z", "A", "B", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "require_scheduler", "__commonJSMin", "exports", "module", "require_react_dom_production_min", "__commonJSMin", "exports", "aa", "ca", "p", "a", "b", "c", "da", "ea", "fa", "ha", "ia", "ja", "ka", "la", "ma", "oa", "pa", "d", "qa", "v", "e", "f", "g", "z", "ra", "sa", "ta", "ua", "va", "wa", "ya", "za", "Aa", "Ba", "Ca", "Da", "Ea", "Fa", "Ga", "Ha", "Ia", "Ja", "Ka", "A", "La", "Ma", "Na", "Oa", "l", "h", "k", "Pa", "Qa", "Ra", "Sa", "Ta", "Ua", "Va", "Wa", "Xa", "Ya", "Za", "ab", "bb", "cb", "db", "eb", "fb", "gb", "hb", "ib", "jb", "kb", "lb", "mb", "nb", "ob", "pb", "qb", "rb", "sb", "tb", "ub", "vb", "wb", "xb", "yb", "zb", "Ab", "Bb", "Cb", "Db", "Eb", "Fb", "Gb", "Hb", "Ib", "Jb", "Kb", "Lb", "Mb", "Nb", "m", "Ob", "Pb", "Qb", "Rb", "Sb", "Tb", "Ub", "Vb", "Wb", "Xb", "Yb", "Zb", "$b", "ac", "bc", "cc", "dc", "B", "ec", "fc", "gc", "hc", "ic", "jc", "kc", "lc", "mc", "oc", "nc", "pc", "qc", "rc", "sc", "tc", "uc", "vc", "wc", "xc", "yc", "zc", "Ac", "Bc", "Cc", "C", "Dc", "Ec", "Fc", "Gc", "Hc", "Ic", "Jc", "Kc", "Lc", "Mc", "Nc", "Oc", "Pc", "Qc", "Rc", "Sc", "Tc", "Uc", "Vc", "Wc", "Xc", "Yc", "Zc", "$c", "ad", "bd", "cd", "dd", "ed", "fd", "gd", "hd", "id", "jd", "kd", "ld", "md", "nd", "od", "pd", "qd", "rd", "sd", "td", "ud", "vd", "wd", "xd", "yd", "Ad", "zd", "Bd", "Cd", "Dd", "Ed", "Fd", "Gd", "Hd", "Id", "Jd", "Kd", "Ld", "Md", "Nd", "Od", "Pd", "Qd", "Rd", "Sd", "Td", "Ud", "Vd", "Wd", "Xd", "Yd", "Zd", "$d", "ae", "be", "ce", "de", "ee", "fe", "ge", "he", "ie", "je", "ke", "le", "me", "ne", "oe", "pe", "qe", "re", "se", "te", "ue", "ve", "we", "ye", "ze", "xe", "Ae", "Be", "Ce", "De", "Ee", "Fe", "Ge", "He", "Ie", "Je", "Ke", "Le", "Me", "Ne", "Oe", "Pe", "Qe", "Re", "Se", "Te", "Ue", "Ve", "We", "Xe", "Ye", "Ze", "$e", "af", "bf", "cf", "df", "ef", "ff", "gf", "hf", "jf", "kf", "lf", "mf", "nf", "D", "of", "pf", "qf", "rf", "sf", "n", "t", "J", "x", "w", "u", "F", "tf", "uf", "vf", "wf", "na", "xa", "$a", "ba", "xf", "yf", "zf", "Af", "Bf", "Cf", "Df", "Ef", "Ff", "Gf", "Hf", "Jf", "If", "Kf", "Lf", "Mf", "Nf", "Of", "Pf", "Qf", "Rf", "Sf", "Tf", "Uf", "E", "G", "Vf", "H", "Wf", "Xf", "Yf", "Zf", "$f", "ag", "bg", "cg", "dg", "eg", "fg", "gg", "hg", "ig", "jg", "kg", "lg", "mg", "ng", "og", "pg", "qg", "rg", "sg", "tg", "ug", "vg", "wg", "xg", "yg", "I", "zg", "Ag", "Bg", "Cg", "Dg", "Eg", "Fg", "Gg", "Hg", "Ig", "Jg", "Kg", "Lg", "Mg", "Ng", "Og", "Pg", "Qg", "Rg", "Sg", "Tg", "q", "r", "y", "Ug", "Vg", "Wg", "Xg", "Yg", "Zg", "$g", "ah", "bh", "ch", "dh", "eh", "fh", "gh", "hh", "ih", "jh", "kh", "lh", "mh", "nh", "K", "oh", "ph", "qh", "rh", "sh", "th", "uh", "vh", "wh", "xh", "yh", "zh", "Ah", "Bh", "L", "Ch", "Dh", "Eh", "Fh", "Gh", "Hh", "M", "N", "O", "Ih", "Jh", "Kh", "Lh", "P", "Mh", "Nh", "Oh", "Ph", "Qh", "Rh", "Sh", "Th", "Uh", "Vh", "Wh", "Xh", "Yh", "Zh", "$h", "ai", "bi", "ci", "Q", "di", "ei", "fi", "gi", "hi", "ii", "ji", "ki", "li", "mi", "ni", "oi", "pi", "qi", "ri", "si", "ti", "ui", "vi", "wi", "xi", "yi", "zi", "Ai", "R", "Bi", "Ci", "Di", "Ei", "Fi", "Gi", "Hi", "Ii", "Ji", "Ki", "Li", "Mi", "Ni", "Oi", "Pi", "Qi", "Ri", "Si", "Ti", "Ui", "Vi", "Wi", "Xi", "Yi", "Zi", "$i", "aj", "bj", "cj", "dj", "ej", "fj", "gj", "hj", "ij", "jj", "kj", "lj", "mj", "nj", "oj", "pj", "qj", "rj", "sj", "tj", "uj", "vj", "wj", "xj", "yj", "zj", "Aj", "Bj", "Cj", "Dj", "S", "Ej", "Fj", "T", "Gj", "Hj", "Ij", "Jj", "U", "Kj", "V", "Lj", "W", "Mj", "Nj", "Oj", "Pj", "Qj", "Rj", "Sj", "Tj", "Uj", "Vj", "Wj", "X", "Xj", "Yj", "Zj", "ak", "bk", "ck", "dk", "ek", "fk", "gk", "hk", "ik", "jk", "kk", "lk", "mk", "nk", "ok", "Y", "Z", "pk", "qk", "rk", "sk", "tk", "uk", "vk", "wk", "xk", "yk", "zk", "Ak", "Bk", "Ck", "Dk", "Ek", "Fk", "Gk", "Hk", "Ik", "Jk", "Kk", "Lk", "Mk", "Nk", "Ok", "Pk", "Qk", "Rk", "Sk", "Tk", "Uk", "Vk", "Wk", "Xk", "Yk", "Zk", "$k", "al", "bl", "cl", "dl", "el", "fl", "gl", "hl", "il", "jl", "kl", "ll", "ml", "nl", "ol", "pl", "ql", "rl", "sl", "tl", "ul", "vl", "require_react_dom", "__commonJSMin", "exports", "module", "checkDCE", "err", "require_use_sync_external_store_shim_production", "__commonJSMin", "exports", "React", "is", "x", "y", "objectIs", "useState", "useEffect", "useLayoutEffect", "useDebugValue", "useSyncExternalStore$2", "subscribe", "getSnapshot", "value", "_useState", "inst", "forceUpdate", "checkIfSnapshotChanged", "latestGetSnapshot", "nextValue", "useSyncExternalStore$1", "shim", "require_shim", "__commonJSMin", "exports", "module", "require_client", "__commonJSMin", "exports", "m", "i", "require_react_jsx_runtime_production_min", "__commonJSMin", "exports", "f", "k", "l", "m", "n", "p", "q", "c", "a", "g", "b", "d", "e", "h", "require_jsx_runtime", "__commonJSMin", "exports", "module", "require_void_elements", "__commonJSMin", "exports", "module", "require_is_buffer", "__commonJSMin", "exports", "module", "obj", "require_extend", "__commonJSMin", "exports", "module", "hasOwn", "toStr", "defineProperty", "gOPD", "isArray", "arr", "isPlainObject", "obj", "hasOwnConstructor", "hasIsPrototypeOf", "key", "setProperty", "target", "options", "getProperty", "name", "extend", "src", "copy", "copyIsArray", "clone", "i", "length", "deep", "require_ReactPropTypesSecret", "__commonJSMin", "exports", "module", "ReactPropTypesSecret", "require_factoryWithThrowingShims", "__commonJSMin", "exports", "module", "ReactPropTypesSecret", "emptyFunction", "emptyFunctionWithReset", "shim", "props", "propName", "componentName", "location", "propFullName", "secret", "err", "getShim", "ReactPropTypes", "require_prop_types", "__commonJSMin", "exports", "module", "ReactIs", "throwOnDirectAccess", "require_react_is_production_min", "__commonJSMin", "exports", "b", "c", "d", "e", "f", "g", "h", "k", "l", "m", "n", "p", "q", "t", "u", "v", "a", "r", "require_react_is", "__commonJSMin", "exports", "module", "require_inline_style_parser", "__commonJSMin", "exports", "module", "COMMENT_REGEX", "NEWLINE_REGEX", "WHITESPACE_REGEX", "PROPERTY_REGEX", "COLON_REGEX", "VALUE_REGEX", "SEMICOLON_REGEX", "TRIM_REGEX", "NEWLINE", "FORWARD_SLASH", "ASTERISK", "EMPTY_STRING", "TYPE_COMMENT", "TYPE_DECLARATION", "style", "options", "lineno", "column", "updatePosition", "str", "lines", "i", "position", "start", "node", "Position", "whitespace", "errorsList", "error", "msg", "err", "match", "re", "m", "comments", "rules", "c", "comment", "pos", "declaration", "prop", "val", "ret", "trim", "declarations", "decls", "decl", "require_style_to_object", "__commonJSMin", "exports", "module", "parse", "StyleToObject", "style", "iterator", "output", "declaration", "declarations", "hasIterator", "property", "value", "i", "len", "toLineItem", "product", "requestedSkuId", "quantity", "variants", "variant", "v", "image", "parsedPrice", "resolveActions", "raw", "ASSISTANT_EVENT_MAP", "BRIDGE_MESSAGE_TAG", "BRIDGE_PROTOCOL_VERSION", "RESIZE_MESSAGE_TYPE", "NAVIGATE_MESSAGE_TYPE", "ADD_TO_CART_MESSAGE_TYPE", "VIEW_CART_MESSAGE_TYPE", "EXTERNAL_HANDOFF_MESSAGE_TYPE", "OPEN_LINK_MESSAGE_TYPE", "FACADE_OPEN_MESSAGE_TYPE", "CONTENT_HEIGHT_MESSAGE_TYPE", "toBridgeMessage", "event", "now", "type", "hostTargetOrigin", "createResizeSink", "target", "origin", "mode", "message", "createNavSink", "props", "createExternalHandoffSink", "createOpenLinkSink", "url", "messageCount", "createActionSink", "messageType", "action", "createAtcSink", "createViewCartSink", "createFacadeOpenSink", "prompt", "createHeightSink", "height", "createBridgeSink", "current", "listeners", "setHostPageContext", "next", "listener", "getHostPageContext", "subscribeHostPageContext", "onChange", "Subscribable", "constructor", "listeners", "Set", "subscribe", "bind", "listener", "identity", "add", "onSubscribe", "delete", "onUnsubscribe", "hasListeners", "size", "isServer", "window", "noop", "functionalUpdate", "updater", "input", "isValidTimeout", "value", "Infinity", "timeUntilStale", "updatedAt", "staleTime", "Math", "max", "Date", "now", "parseQueryArgs", "arg1", "arg2", "arg3", "isQueryKey", "queryKey", "queryFn", "parseMutationArgs", "mutationKey", "mutationFn", "parseFilterArgs", "matchQuery", "filters", "query", "type", "exact", "fetchStatus", "predicate", "queryKey", "stale", "isQueryKey", "queryHash", "hashQueryKeyByOptions", "options", "partialMatchKey", "isActive", "isStale", "state", "matchMutation", "mutation", "fetching", "mutationKey", "hashQueryKey", "status", "queryKeyHashFn", "JSON", "stringify", "_", "val", "isPlainObject", "Object", "keys", "sort", "reduce", "result", "key", "a", "b", "partialDeepEqual", "some", "replaceEqualDeep", "depth", "array", "isPlainArray", "aSize", "length", "bItems", "bSize", "copy", "equalItems", "i", "shallowEqualObjects", "value", "Array", "isArray", "o", "hasObjectPrototype", "ctor", "constructor", "prot", "prototype", "hasOwnProperty", "toString", "call", "sleep", "timeout", "Promise", "resolve", "setTimeout", "scheduleMicrotask", "callback", "then", "getAbortController", "AbortController", "replaceData", "prevData", "data", "options", "isDataEqual", "structuralSharing", "replaceEqualDeep", "FocusManager", "Subscribable", "constructor", "setup", "onFocus", "isServer", "window", "addEventListener", "listener", "removeEventListener", "onSubscribe", "cleanup", "setEventListener", "onUnsubscribe", "hasListeners", "_this$cleanup", "undefined", "_this$cleanup2", "focused", "setFocused", "listeners", "forEach", "isFocused", "document", "includes", "visibilityState", "focusManager", "onlineEvents", "OnlineManager", "Subscribable", "constructor", "setup", "onOnline", "isServer", "window", "addEventListener", "listener", "forEach", "event", "removeEventListener", "onSubscribe", "cleanup", "setEventListener", "onUnsubscribe", "hasListeners", "_this$cleanup", "undefined", "_this$cleanup2", "online", "setOnline", "listeners", "isOnline", "navigator", "onLine", "onlineManager", "defaultRetryDelay", "failureCount", "Math", "min", "canFetch", "networkMode", "onlineManager", "isOnline", "CancelledError", "constructor", "options", "revert", "silent", "isCancelledError", "value", "createRetryer", "config", "isRetryCancelled", "isResolved", "continueFn", "promiseResolve", "promiseReject", "promise", "Promise", "outerResolve", "outerReject", "cancel", "cancelOptions", "reject", "abort", "cancelRetry", "continueRetry", "shouldPause", "focusManager", "isFocused", "resolve", "onSuccess", "onError", "pause", "continueResolve", "canContinue", "onPause", "then", "undefined", "onContinue", "run", "promiseOrValue", "fn", "error", "catch", "_config$retry", "_config$retryDelay", "retry", "retryDelay", "delay", "shouldRetry", "onFail", "sleep", "continue", "defaultLogger", "console", "createNotifyManager", "queue", "transactions", "notifyFn", "callback", "batchNotifyFn", "batch", "result", "flush", "schedule", "push", "scheduleMicrotask", "batchCalls", "args", "originalQueue", "length", "forEach", "setNotifyFunction", "fn", "setBatchNotifyFunction", "notifyManager", "Removable", "destroy", "clearGcTimeout", "scheduleGc", "isValidTimeout", "cacheTime", "gcTimeout", "setTimeout", "optionalRemove", "updateCacheTime", "newCacheTime", "Math", "max", "isServer", "Infinity", "clearTimeout", "undefined", "Query", "Removable", "constructor", "config", "abortSignalConsumed", "defaultOptions", "setOptions", "options", "observers", "cache", "logger", "defaultLogger", "queryKey", "queryHash", "initialState", "state", "getDefaultState", "scheduleGc", "meta", "updateCacheTime", "cacheTime", "optionalRemove", "length", "fetchStatus", "remove", "setData", "newData", "data", "replaceData", "dispatch", "type", "dataUpdatedAt", "updatedAt", "manual", "setState", "setStateOptions", "cancel", "_this$retryer", "promise", "retryer", "then", "noop", "catch", "Promise", "resolve", "destroy", "silent", "reset", "isActive", "some", "observer", "enabled", "isDisabled", "getObserversCount", "isStale", "isInvalidated", "getCurrentResult", "isStaleByTime", "staleTime", "timeUntilStale", "onFocus", "_this$retryer2", "find", "x", "shouldFetchOnWindowFocus", "refetch", "cancelRefetch", "continue", "onOnline", "_this$retryer3", "shouldFetchOnReconnect", "addObserver", "includes", "push", "clearGcTimeout", "notify", "query", "removeObserver", "filter", "revert", "cancelRetry", "invalidate", "fetch", "fetchOptions", "_this$options$behavio", "_context$fetchOptions", "_this$retryer4", "continueRetry", "queryFn", "abortController", "getAbortController", "queryFnContext", "pageParam", "undefined", "addSignalProperty", "object", "Object", "defineProperty", "enumerable", "get", "signal", "fetchFn", "reject", "context", "behavior", "onFetch", "revertState", "fetchMeta", "_context$fetchOptions2", "onError", "error", "isCancelledError", "_this$cache$config$on", "_this$cache$config", "_this$cache$config$on2", "_this$cache$config2", "onSettled", "isFetchingOptimistic", "createRetryer", "fn", "abort", "bind", "onSuccess", "_this$cache$config$on3", "_this$cache$config3", "_this$cache$config$on4", "_this$cache$config4", "Error", "onFail", "failureCount", "onPause", "onContinue", "retry", "retryDelay", "networkMode", "action", "reducer", "_action$meta", "_action$dataUpdatedAt", "fetchFailureCount", "fetchFailureReason", "canFetch", "status", "dataUpdateCount", "Date", "now", "errorUpdateCount", "errorUpdatedAt", "notifyManager", "batch", "forEach", "onQueryUpdate", "initialData", "hasData", "initialDataUpdatedAt", "QueryCache", "Subscribable", "constructor", "config", "queries", "queriesMap", "build", "client", "options", "state", "_options$queryHash", "queryKey", "queryHash", "hashQueryKeyByOptions", "query", "get", "Query", "cache", "logger", "getLogger", "defaultQueryOptions", "defaultOptions", "getQueryDefaults", "add", "push", "notify", "type", "remove", "queryInMap", "destroy", "filter", "x", "clear", "notifyManager", "batch", "forEach", "getAll", "find", "arg1", "arg2", "filters", "parseFilterArgs", "exact", "matchQuery", "findAll", "Object", "keys", "length", "event", "listeners", "listener", "onFocus", "onOnline", "Mutation", "Removable", "constructor", "config", "defaultOptions", "mutationId", "mutationCache", "logger", "defaultLogger", "observers", "state", "getDefaultState", "setOptions", "options", "scheduleGc", "updateCacheTime", "cacheTime", "meta", "setState", "dispatch", "type", "addObserver", "observer", "includes", "push", "clearGcTimeout", "notify", "mutation", "removeObserver", "filter", "x", "optionalRemove", "length", "status", "remove", "continue", "_this$retryer$continu", "_this$retryer", "retryer", "execute", "executeMutation", "_this$options$retry", "createRetryer", "fn", "mutationFn", "variables", "Promise", "reject", "onFail", "failureCount", "error", "onPause", "onContinue", "retry", "retryDelay", "networkMode", "promise", "restored", "_this$mutationCache$c3", "_this$mutationCache$c4", "_this$options$onSucce", "_this$options2", "_this$mutationCache$c5", "_this$mutationCache$c6", "_this$options$onSettl", "_this$options3", "_this$mutationCache$c", "_this$mutationCache$c2", "_this$options$onMutat", "_this$options", "onMutate", "context", "data", "onSuccess", "onSettled", "_this$mutationCache$c7", "_this$mutationCache$c8", "_this$options$onError", "_this$options4", "_this$mutationCache$c9", "_this$mutationCache$c10", "_this$options$onSettl2", "_this$options5", "onError", "undefined", "action", "reducer", "failureReason", "isPaused", "canFetch", "notifyManager", "batch", "forEach", "onMutationUpdate", "MutationCache", "Subscribable", "constructor", "config", "mutations", "mutationId", "build", "client", "options", "state", "mutation", "Mutation", "mutationCache", "logger", "getLogger", "defaultMutationOptions", "defaultOptions", "mutationKey", "getMutationDefaults", "undefined", "add", "push", "notify", "type", "remove", "filter", "x", "clear", "notifyManager", "batch", "forEach", "getAll", "find", "filters", "exact", "matchMutation", "findAll", "event", "listeners", "listener", "resumePausedMutations", "_this$resuming", "resuming", "Promise", "resolve", "then", "pausedMutations", "isPaused", "reduce", "promise", "continue", "catch", "noop", "infiniteQueryBehavior", "onFetch", "context", "fetchFn", "_context$fetchOptions", "_context$fetchOptions2", "_context$fetchOptions3", "_context$fetchOptions4", "_context$state$data", "_context$state$data2", "refetchPage", "fetchOptions", "meta", "fetchMore", "pageParam", "isFetchingNextPage", "direction", "isFetchingPreviousPage", "oldPages", "state", "data", "pages", "oldPageParams", "pageParams", "newPageParams", "cancelled", "addSignalProperty", "object", "Object", "defineProperty", "enumerable", "get", "_context$signal", "signal", "aborted", "_context$signal2", "addEventListener", "queryFn", "options", "Promise", "reject", "queryHash", "buildNewPages", "param", "page", "previous", "fetchPage", "manual", "length", "resolve", "queryFnContext", "queryKey", "queryFnResult", "then", "promise", "getNextPageParam", "getPreviousPageParam", "i", "QueryClient", "constructor", "config", "queryCache", "QueryCache", "mutationCache", "MutationCache", "logger", "defaultLogger", "defaultOptions", "queryDefaults", "mutationDefaults", "mountCount", "mount", "unsubscribeFocus", "focusManager", "subscribe", "isFocused", "resumePausedMutations", "onFocus", "unsubscribeOnline", "onlineManager", "isOnline", "onOnline", "unmount", "_this$unsubscribeFocu", "_this$unsubscribeOnli", "undefined", "isFetching", "arg1", "arg2", "filters", "parseFilterArgs", "fetchStatus", "findAll", "length", "isMutating", "fetching", "getQueryData", "queryKey", "_this$queryCache$find", "find", "state", "data", "ensureQueryData", "arg3", "parsedOptions", "parseQueryArgs", "cachedData", "Promise", "resolve", "fetchQuery", "getQueriesData", "queryKeyOrFilters", "getQueryCache", "map", "setQueryData", "updater", "options", "query", "prevData", "functionalUpdate", "defaultedOptions", "defaultQueryOptions", "build", "setData", "manual", "setQueriesData", "notifyManager", "batch", "getQueryState", "_this$queryCache$find2", "removeQueries", "forEach", "remove", "resetQueries", "refetchFilters", "type", "reset", "refetchQueries", "cancelQueries", "cancelOptions", "revert", "promises", "cancel", "all", "then", "noop", "catch", "invalidateQueries", "_ref", "_filters$refetchType", "invalidate", "refetchType", "filter", "isDisabled", "_options$cancelRefetc", "fetch", "cancelRefetch", "meta", "refetchPage", "promise", "throwOnError", "retry", "isStaleByTime", "staleTime", "prefetchQuery", "fetchInfiniteQuery", "behavior", "infiniteQueryBehavior", "prefetchInfiniteQuery", "getMutationCache", "getLogger", "getDefaultOptions", "setDefaultOptions", "setQueryDefaults", "result", "x", "hashQueryKey", "push", "getQueryDefaults", "firstMatchingDefaults", "partialMatchKey", "setMutationDefaults", "mutationKey", "getMutationDefaults", "_defaulted", "queries", "queryHash", "hashQueryKeyByOptions", "refetchOnReconnect", "networkMode", "useErrorBoundary", "suspense", "defaultMutationOptions", "mutations", "clear", "QueryObserver", "Subscribable", "constructor", "client", "options", "trackedProps", "Set", "selectError", "bindMethods", "setOptions", "remove", "bind", "refetch", "onSubscribe", "listeners", "size", "currentQuery", "addObserver", "shouldFetchOnMount", "executeFetch", "updateTimers", "onUnsubscribe", "hasListeners", "destroy", "shouldFetchOnReconnect", "shouldFetchOn", "refetchOnReconnect", "shouldFetchOnWindowFocus", "refetchOnWindowFocus", "clearStaleTimeout", "clearRefetchInterval", "removeObserver", "notifyOptions", "prevOptions", "prevQuery", "defaultQueryOptions", "shallowEqualObjects", "getQueryCache", "notify", "type", "query", "observer", "enabled", "Error", "queryKey", "updateQuery", "mounted", "shouldFetchOptionally", "updateResult", "staleTime", "updateStaleTimeout", "nextRefetchInterval", "computeRefetchInterval", "currentRefetchInterval", "updateRefetchInterval", "getOptimisticResult", "build", "result", "createResult", "shouldAssignObserverCurrentProperties", "currentResult", "currentResultOptions", "currentResultState", "state", "getCurrentResult", "trackResult", "trackedResult", "Object", "keys", "forEach", "key", "defineProperty", "configurable", "enumerable", "get", "add", "getCurrentQuery", "refetchPage", "fetch", "meta", "fetchOptimistic", "defaultedOptions", "isFetchingOptimistic", "then", "fetchOptions", "_fetchOptions$cancelR", "cancelRefetch", "promise", "throwOnError", "catch", "noop", "isServer", "isStale", "isValidTimeout", "timeout", "timeUntilStale", "dataUpdatedAt", "staleTimeoutId", "setTimeout", "_this$options$refetch", "refetchInterval", "data", "nextInterval", "refetchIntervalId", "setInterval", "refetchIntervalInBackground", "focusManager", "isFocused", "clearTimeout", "undefined", "clearInterval", "prevResult", "prevResultState", "prevResultOptions", "queryChange", "queryInitialState", "currentQueryInitialState", "prevQueryResult", "previousQueryResult", "error", "errorUpdatedAt", "fetchStatus", "status", "isPreviousData", "isPlaceholderData", "_optimisticResults", "fetchOnMount", "fetchOptionally", "canFetch", "networkMode", "keepPreviousData", "isSuccess", "select", "selectFn", "selectResult", "replaceData", "placeholderData", "Date", "now", "isFetching", "isLoading", "isError", "isInitialLoading", "failureCount", "fetchFailureCount", "failureReason", "fetchFailureReason", "errorUpdateCount", "isFetched", "dataUpdateCount", "isFetchedAfterMount", "isRefetching", "isLoadingError", "isPaused", "isRefetchError", "nextResult", "defaultNotifyOptions", "cache", "shouldNotifyListeners", "notifyOnChangeProps", "notifyOnChangePropsValue", "includedProps", "useErrorBoundary", "some", "typedKey", "has", "onQueryUpdate", "action", "onSuccess", "manual", "isCancelledError", "onError", "notifyManager", "batch", "_this$options$onSucce", "_this$options", "_this$options$onSettl", "_this$options2", "onSettled", "_this$options$onError", "_this$options3", "_this$options$onSettl2", "_this$options4", "listener", "shouldLoadOnMount", "retryOnMount", "refetchOnMount", "field", "value", "suspense", "isStaleByTime", "optimisticResult", "MutationObserver", "Subscribable", "constructor", "client", "options", "setOptions", "bindMethods", "updateResult", "mutate", "bind", "reset", "_this$currentMutation", "prevOptions", "defaultMutationOptions", "shallowEqualObjects", "getMutationCache", "notify", "type", "mutation", "currentMutation", "observer", "onUnsubscribe", "hasListeners", "_this$currentMutation2", "removeObserver", "onMutationUpdate", "action", "notifyOptions", "listeners", "onSuccess", "onError", "getCurrentResult", "currentResult", "undefined", "variables", "mutateOptions", "build", "addObserver", "execute", "state", "getDefaultState", "isLoading", "status", "result", "isPending", "isSuccess", "isError", "isIdle", "notifyManager", "batch", "_this$mutateOptions$o", "_this$mutateOptions", "_this$mutateOptions$o2", "_this$mutateOptions2", "data", "context", "onSettled", "_this$mutateOptions$o3", "_this$mutateOptions3", "_this$mutateOptions$o4", "_this$mutateOptions4", "error", "forEach", "listener", "useSyncExternalStore", "useSyncExternalStore$1", "defaultContext", "QueryClientSharingContext", "getQueryClientContext", "context", "contextSharing", "useQueryClient", "queryClient", "QueryClientProvider", "client", "Context", "IsRestoringContext", "useIsRestoring", "IsRestoringProvider", "createValue", "clearReset", "isReset", "reset", "QueryErrorResetBoundaryContext", "useQueryErrorResetBoundary", "shouldThrowError", "_useErrorBoundary", "params", "options", "errorResetBoundary", "useClearResetErrorBoundary", "getHasError", "query", "ensureStaleTime", "defaultedOptions", "suspense", "staleTime", "cacheTime", "Math", "max", "willFetch", "result", "isRestoring", "isLoading", "isFetching", "shouldSuspend", "fetchOptimistic", "observer", "errorResetBoundary", "then", "data", "onSuccess", "onSettled", "catch", "error", "clearReset", "onError", "undefined", "useBaseQuery", "options", "Observer", "ensurePreventErrorBoundaryRetry", "observer", "queryClient", "defaultedOptions", "result", "useSyncExternalStore", "unsubscribe", "isRestoring", "notifyManager", "onStoreChange", "listeners", "fetchOptimistic", "errorResetBoundary", "getHasError", "useQuery", "arg1", "arg2", "arg3", "useBaseQuery", "parsedOptions", "QueryObserver", "useMutation", "arg1", "arg2", "arg3", "observer", "MutationObserver", "queryClient", "options", "result", "useSyncExternalStore", "onStoreChange", "notifyManager", "shouldThrowError", "noop", "import_react", "import_client", "import_react", "import_react", "SamuelConfigContext", "useSamuelConfig", "config", "isSessionStorageAvailable", "test", "readFromSessionStorage", "key", "writeToSessionStorage", "value", "removeFromSessionStorage", "DEFAULT_PRODUCT_API_BASE_URL", "DEFAULT_AGENTS_API_BASE_URL", "DEFAULT_RECOMMENDATION_STRATEGY", "buildOrgProductUrl", "base", "orgId", "handle", "buildOrgRecsUrl", "strategy", "rootProductId", "buildProductByUrlUrl", "pageUrl", "parseRecsToHandles", "body", "r", "defaultFetchProductsByHandle", "handles", "res", "s", "defaultFetchRecommendations", "defaultFetchProductByUrl", "buildPrePopulatedQuestionsUrl", "defaultFetchPrePopulatedQuestions", "productHandle", "usePrePopulatedQuestions", "config", "useSamuelConfig", "query", "useQuery", "resolveStarterQuestions", "serverQuestions", "orgQuestions", "useProductByUrl", "enabled", "useRecsQuery", "useProductsForHandles", "import_react", "noop", "_event", "ChatAnalyticsContext", "import_jsx_runtime", "SmsIcon", "size", "ChatIcon", "PhoneIcon", "CloseIcon", "MinimizeIcon", "ArrowDownIcon", "SendIcon", "SparkleIcon", "NewChatIcon", "AgentIcon", "ThumbUpIcon", "ThumbDownIcon", "LoadingSpinner", "import_react", "import_react", "attrRE", "stringify", "tag", "res", "type", "name", "voidElement", "attrs", "children", "tagMatch", "match", "lookup", "charAt", "length", "startsWith", "endIndex", "indexOf", "comment", "slice", "reg", "RegExp", "result", "exec", "trim", "attr", "arr", "split", "lastIndex", "substring", "tagRE", "whitespaceRE", "empty", "Object", "create", "buff", "doc", "content", "key", "push", "join", "reduce", "c", "parse", "html", "options", "components", "current", "level", "inComponent", "end", "replace", "index", "parent", "isOpen", "isComment", "start", "nextChar", "parseTag", "test", "token", "rootEl", "html_parse_stringify_module_default", "warn", "_len", "args", "_key", "isString", "alreadyWarned", "warnOnce", "_len2", "_key2", "loadedClb", "i18n", "cb", "initialized", "loadNamespaces", "ns", "loadLanguages", "lng", "n", "oldI18nextHasLoadedNamespace", "options", "fallbackLng", "lastLng", "loadNotPending", "l", "loadState", "hasLoadedNamespace", "i18nInstance", "isString", "obj", "isObject", "matchHtmlEntity", "htmlEntities", "unescapeHtmlEntity", "m", "unescape", "text", "defaultOptions", "unescape", "setDefaults", "options", "getDefaults", "i18nInstance", "setI18n", "instance", "getI18n", "hasChildren", "node", "checkLength", "base", "getChildren", "children", "getAsArray", "hasValidReactChildren", "data", "mergeProps", "source", "target", "newTarget", "nodesToString", "i18nOptions", "stringNode", "childrenArray", "keepArray", "child", "childIndex", "isString", "props", "type", "childPropsCount", "shouldKeepChild", "childChildren", "content", "warn", "isObject", "format", "clone", "keys", "value", "renderNodes", "targetString", "i18n", "combinedTOpts", "shouldUnescape", "emptyChildrenButNeedsHandling", "keep", "getData", "childs", "ast", "html_parse_stringify_module_default", "opts", "renderInner", "rootReactNode", "mappedChildren", "mapAST", "pushTranslatedJSX", "inner", "mem", "i", "isVoid", "c", "reactNode", "astNode", "reactNodes", "translationContent", "tmp", "isElement", "isValidTranslationWithChildren", "isEmptyTransWithHTML", "isKnownComponent", "wrapTextNodes", "result", "Trans", "_ref", "count", "parent", "i18nKey", "context", "tOptions", "values", "defaults", "components", "ns", "i18nFromProps", "tFromProps", "additionalProps", "getI18n", "warnOnce", "t", "k", "reactI18nextOptions", "getDefaults", "namespaces", "nodeAsString", "defaultValue", "hashTransKey", "key", "interpolationOverride", "translation", "comp", "Componentized", "useAsParent", "import_react", "initReactI18next", "instance", "setDefaults", "setI18n", "I18nContext", "ReportNamespaces", "__publicField", "namespaces", "ns", "Trans", "_ref", "children", "count", "parent", "i18nKey", "context", "tOptions", "values", "defaults", "components", "ns", "i18nFromProps", "tFromProps", "shouldUnescape", "additionalProps", "i18nFromContext", "defaultNSFromContext", "I18nContext", "i18n", "getI18n", "t", "import_react", "usePrevious", "value", "ignore", "ref", "alwaysNewT", "i18n", "language", "namespace", "keyPrefix", "useMemoizedT", "useTranslation", "ns", "props", "i18nFromProps", "i18nFromContext", "defaultNSFromContext", "I18nContext", "getI18n", "ReportNamespaces", "warnOnce", "notReadyT", "k", "optsOrDefaultValue", "isString", "isObject", "retNotReady", "i18nOptions", "getDefaults", "useSuspense", "namespaces", "ready", "n", "hasLoadedNamespace", "memoGetT", "getT", "getNewT", "t", "setT", "joinedNS", "previousJoinedNS", "isMounted", "bindI18n", "bindI18nStore", "loadLanguages", "loadNamespaces", "boundReset", "e", "ret", "resolve", "import_react", "import_react", "I18nextProvider", "_ref", "i18n", "defaultNS", "children", "value", "I18nContext", "import_react", "import_react", "import_jsx_runtime", "ChatButton", "onClick", "isOpen", "t", "useTranslation", "CloseIcon", "ChatIcon", "import_jsx_runtime", "IDENTITY_BLOCK_CLASS", "AssistantHeader", "avatarUrl", "title", "tagline", "hasStarted", "actions", "onIdentityClick", "identityExpanded", "inputHidden", "identity", "SparkleIcon", "import_react", "import_jsx_runtime", "MAX_FIELD_HEIGHT", "ChatInput", "onSend", "isLoading", "hasStarted", "onClose", "t", "useTranslation", "inputValue", "setInputValue", "focused", "setFocused", "fieldRef", "el", "submit", "handleSubmit", "e", "handleKeyDown", "hasDraft", "CloseIcon", "SendIcon", "import_jsx_runtime", "AssistantAbout", "name", "avatarUrl", "tagline", "description", "bullets", "onBack", "t", "useTranslation", "SparkleIcon", "bullet", "i", "import_react", "protocols", "uriTransformer", "uri", "url", "first", "colon", "index", "protocol", "import_react", "import_is_buffer", "stringifyPosition", "value", "position", "point", "index", "pos", "VFileMessage", "reason", "place", "origin", "parts", "position", "index", "stringifyPosition", "path", "basename", "dirname", "extname", "join", "ext", "assertPath", "start", "end", "index", "seenNonSlash", "firstNonSlashEnd", "extIndex", "unmatchedSlash", "startPart", "startDot", "preDotState", "code", "segments", "joined", "normalize", "absolute", "value", "normalizeString", "allowAboveRoot", "result", "lastSegmentLength", "lastSlash", "dots", "lastSlashIndex", "proc", "cwd", "isUrl", "fileUrlOrPath", "urlToPath", "path", "isUrl", "error", "getPathFromURLPosix", "url", "pathname", "index", "third", "order", "VFile", "value", "options", "buffer", "isUrl", "proc", "index", "prop", "path", "urlToPath", "assertNonEmpty", "dirname", "assertPath", "basename", "assertPart", "extname", "stem", "encoding", "reason", "place", "origin", "message", "VFileMessage", "part", "name", "bufferLike", "bail", "error", "import_is_buffer", "import_extend", "isPlainObject", "value", "prototype", "trough", "fns", "pipeline", "run", "use", "values", "middlewareIndex", "callback", "next", "error", "output", "fn", "index", "wrap", "middelware", "middleware", "called", "wrapped", "parameters", "fnExpectsCallback", "result", "done", "exception", "then", "value", "unified", "base", "own", "transformers", "trough", "attachers", "namespace", "frozen", "freezeIndex", "processor", "data", "freeze", "use", "parse", "stringify", "run", "runSync", "process", "processSync", "destination", "index", "extend", "key", "value", "assertUnfrozen", "attacher", "options", "transformer", "settings", "addPlugin", "addList", "addPreset", "add", "plugin", "result", "plugins", "thing", "entry", "isPlainObject", "doc", "file", "vfile", "Parser", "assertParser", "newable", "node", "Compiler", "assertCompiler", "assertNode", "callback", "executor", "resolve", "reject", "done", "error", "tree", "complete", "assertDone", "bail", "looksLikeAVFileValue", "name", "keys", "asyncName", "looksLikeAVFile", "VFile", "isBuffer", "emptyOptions", "toString", "value", "options", "settings", "includeImageAlt", "includeHtml", "one", "node", "all", "values", "result", "index", "splice", "list", "start", "remove", "items", "end", "chunkStart", "parameters", "push", "hasOwnProperty", "combineExtensions", "extensions", "all", "index", "syntaxExtension", "extension", "hook", "left", "right", "code", "value", "constructs", "existing", "list", "before", "splice", "unicodePunctuationRegex", "asciiAlpha", "regexCheck", "asciiAlphanumeric", "asciiAtext", "asciiControl", "code", "asciiDigit", "asciiHexDigit", "asciiPunctuation", "markdownLineEnding", "markdownLineEndingOrSpace", "markdownSpace", "unicodePunctuation", "unicodePunctuationRegex", "unicodeWhitespace", "regex", "check", "factorySpace", "effects", "ok", "type", "max", "limit", "size", "start", "code", "markdownSpace", "prefix", "content", "initializeContent", "effects", "contentStart", "afterContentStartConstruct", "paragraphInitial", "previous", "code", "factorySpace", "lineStart", "token", "data", "markdownLineEnding", "document", "initializeDocument", "containerConstruct", "tokenizeContainer", "effects", "self", "stack", "continued", "childFlow", "childToken", "lineStartOffset", "start", "code", "item", "documentContinue", "checkNewContainers", "closeFlow", "indexBeforeExits", "indexBeforeFlow", "point", "exitContainers", "index", "splice", "documentContinued", "flowStart", "thereIsANewContainer", "thereIsNoNewContainer", "containerContinue", "flowContinue", "writeToChild", "markdownLineEnding", "token", "eof", "stream", "seen", "size", "entry", "ok", "nok", "factorySpace", "classifyCharacter", "code", "markdownLineEndingOrSpace", "unicodeWhitespace", "unicodePunctuation", "resolveAll", "constructs", "events", "context", "called", "index", "resolve", "attention", "tokenizeAttention", "resolveAllAttention", "events", "context", "index", "open", "group", "text", "openingSequence", "closingSequence", "use", "nextEvents", "offset", "start", "end", "movePoint", "push", "resolveAll", "splice", "effects", "ok", "attentionMarkers", "previous", "before", "classifyCharacter", "marker", "code", "inside", "token", "after", "close", "point", "autolink", "tokenizeAutolink", "effects", "ok", "nok", "size", "start", "code", "open", "asciiAlpha", "schemeOrEmailAtext", "emailAtext", "asciiAlphanumeric", "schemeInsideOrEmailAtext", "urlInside", "asciiControl", "emailAtSignOrDot", "asciiAtext", "emailLabel", "emailValue", "next", "blankLine", "tokenizeBlankLine", "effects", "ok", "nok", "start", "code", "markdownSpace", "factorySpace", "after", "markdownLineEnding", "blockQuote", "tokenizeBlockQuoteStart", "tokenizeBlockQuoteContinuation", "exit", "effects", "ok", "nok", "self", "start", "code", "state", "after", "markdownSpace", "contStart", "factorySpace", "contBefore", "characterEscape", "tokenizeCharacterEscape", "effects", "ok", "nok", "start", "code", "inside", "asciiPunctuation", "element", "decodeNamedCharacterReference", "value", "characterReference", "character", "characterReference", "tokenizeCharacterReference", "effects", "ok", "nok", "self", "size", "max", "test", "start", "code", "open", "numeric", "asciiAlphanumeric", "value", "asciiHexDigit", "asciiDigit", "token", "decodeNamedCharacterReference", "nonLazyContinuation", "tokenizeNonLazyContinuation", "codeFenced", "tokenizeCodeFenced", "effects", "ok", "nok", "self", "closeStart", "tokenizeCloseStart", "initialPrefix", "sizeOpen", "marker", "start", "code", "beforeSequenceOpen", "tail", "sequenceOpen", "markdownSpace", "factorySpace", "infoBefore", "markdownLineEnding", "atNonLazyBreak", "after", "info", "metaBefore", "meta", "contentBefore", "contentStart", "beforeContentChunk", "contentChunk", "size", "startBefore", "beforeSequenceClose", "sequenceClose", "sequenceCloseAfter", "lineStart", "codeIndented", "tokenizeCodeIndented", "furtherStart", "tokenizeFurtherStart", "effects", "ok", "nok", "self", "start", "code", "factorySpace", "afterPrefix", "tail", "atBreak", "after", "markdownLineEnding", "inside", "codeText", "tokenizeCodeText", "resolveCodeText", "previous", "events", "tailExitIndex", "headEnterIndex", "index", "enter", "code", "effects", "ok", "nok", "self", "sizeOpen", "size", "token", "start", "sequenceOpen", "between", "sequenceClose", "markdownLineEnding", "data", "subtokenize", "events", "jumps", "index", "event", "lineIndex", "otherIndex", "otherEvent", "parameters", "subevents", "more", "subcontent", "splice", "eventIndex", "token", "context", "startPosition", "startPositions", "tokenizer", "childEvents", "gaps", "stream", "previous", "current", "adjust", "start", "breaks", "slice", "content", "tokenizeContent", "resolveContent", "continuationConstruct", "tokenizeContinuation", "events", "subtokenize", "effects", "ok", "previous", "chunkStart", "code", "chunkInside", "contentEnd", "markdownLineEnding", "contentContinue", "nok", "self", "startLookahead", "factorySpace", "prefixed", "tail", "factoryDestination", "effects", "ok", "nok", "type", "literalType", "literalMarkerType", "rawType", "stringType", "max", "limit", "balance", "start", "code", "enclosedBefore", "asciiControl", "raw", "enclosed", "markdownLineEnding", "enclosedEscape", "markdownLineEndingOrSpace", "rawEscape", "factoryLabel", "effects", "ok", "nok", "type", "markerType", "stringType", "self", "size", "seen", "start", "code", "atBreak", "markdownLineEnding", "labelInside", "markdownSpace", "labelEscape", "factoryTitle", "effects", "ok", "nok", "type", "markerType", "stringType", "marker", "start", "code", "begin", "atBreak", "markdownLineEnding", "factorySpace", "inside", "escape", "factoryWhitespace", "effects", "ok", "seen", "start", "code", "markdownLineEnding", "markdownSpace", "factorySpace", "normalizeIdentifier", "value", "definition", "tokenizeDefinition", "titleBefore", "tokenizeTitleBefore", "effects", "ok", "nok", "self", "identifier", "start", "code", "before", "factoryLabel", "labelAfter", "normalizeIdentifier", "markerAfter", "markdownLineEndingOrSpace", "factoryWhitespace", "destinationBefore", "factoryDestination", "destinationAfter", "after", "markdownSpace", "factorySpace", "afterWhitespace", "markdownLineEnding", "beforeMarker", "factoryTitle", "titleAfter", "titleAfterOptionalWhitespace", "hardBreakEscape", "tokenizeHardBreakEscape", "effects", "ok", "nok", "start", "code", "after", "markdownLineEnding", "headingAtx", "tokenizeHeadingAtx", "resolveHeadingAtx", "events", "context", "contentEnd", "contentStart", "content", "text", "splice", "effects", "ok", "nok", "size", "start", "code", "before", "sequenceOpen", "markdownLineEndingOrSpace", "atBreak", "sequenceFurther", "markdownLineEnding", "markdownSpace", "factorySpace", "data", "htmlBlockNames", "htmlRawNames", "htmlFlow", "tokenizeHtmlFlow", "resolveToHtmlFlow", "blankLineBefore", "tokenizeBlankLineBefore", "nonLazyContinuationStart", "tokenizeNonLazyContinuationStart", "events", "index", "effects", "ok", "nok", "self", "marker", "closingTag", "buffer", "markerB", "start", "code", "before", "open", "declarationOpen", "tagCloseStart", "continuationDeclarationInside", "asciiAlpha", "tagName", "commentOpenInside", "cdataOpenInside", "value", "continuation", "markdownLineEndingOrSpace", "slash", "name", "htmlRawNames", "htmlBlockNames", "basicSelfClosing", "completeClosingTagAfter", "completeAttributeNameBefore", "asciiAlphanumeric", "markdownSpace", "completeEnd", "completeAttributeName", "completeAttributeNameAfter", "completeAttributeValueBefore", "completeAttributeValueQuoted", "completeAttributeValueUnquoted", "completeAttributeValueQuotedAfter", "markdownLineEnding", "completeAfter", "continuationCommentInside", "continuationRawTagOpen", "continuationClose", "continuationCdataInside", "continuationAfter", "continuationStart", "continuationStartNonLazy", "continuationBefore", "continuationRawEndTag", "after", "blankLine", "htmlText", "tokenizeHtmlText", "effects", "ok", "nok", "self", "marker", "index", "returnState", "start", "code", "open", "declarationOpen", "tagCloseStart", "instruction", "asciiAlpha", "tagOpen", "commentOpenInside", "cdataOpenInside", "declaration", "commentEnd", "comment", "commentClose", "markdownLineEnding", "lineEndingBefore", "end", "value", "cdata", "cdataClose", "cdataEnd", "instructionClose", "tagClose", "asciiAlphanumeric", "tagCloseBetween", "markdownSpace", "markdownLineEndingOrSpace", "tagOpenBetween", "tagOpenAttributeName", "tagOpenAttributeNameAfter", "tagOpenAttributeValueBefore", "tagOpenAttributeValueQuoted", "tagOpenAttributeValueUnquoted", "tagOpenAttributeValueQuotedAfter", "lineEndingAfter", "factorySpace", "lineEndingAfterPrefix", "labelEnd", "tokenizeLabelEnd", "resolveToLabelEnd", "resolveAllLabelEnd", "resourceConstruct", "tokenizeResource", "referenceFullConstruct", "tokenizeReferenceFull", "referenceCollapsedConstruct", "tokenizeReferenceCollapsed", "events", "index", "token", "context", "offset", "open", "close", "media", "group", "label", "text", "push", "resolveAll", "splice", "effects", "ok", "nok", "self", "labelStart", "defined", "start", "code", "labelEndNok", "normalizeIdentifier", "after", "labelEndOk", "referenceNotFull", "resourceStart", "resourceBefore", "markdownLineEndingOrSpace", "factoryWhitespace", "resourceOpen", "resourceEnd", "factoryDestination", "resourceDestinationAfter", "resourceDestinationMissing", "resourceBetween", "factoryTitle", "resourceTitleAfter", "referenceFull", "factoryLabel", "referenceFullAfter", "referenceFullMissing", "referenceCollapsedStart", "referenceCollapsedOpen", "labelStartImage", "tokenizeLabelStartImage", "labelEnd", "effects", "ok", "nok", "self", "start", "code", "open", "after", "labelStartLink", "tokenizeLabelStartLink", "labelEnd", "effects", "ok", "nok", "self", "start", "code", "after", "lineEnding", "tokenizeLineEnding", "effects", "ok", "start", "code", "factorySpace", "thematicBreak", "tokenizeThematicBreak", "effects", "ok", "nok", "size", "marker", "start", "code", "before", "atBreak", "sequence", "markdownLineEnding", "markdownSpace", "factorySpace", "list", "tokenizeListStart", "tokenizeListContinuation", "tokenizeListEnd", "listItemPrefixWhitespaceConstruct", "tokenizeListItemPrefixWhitespace", "indentConstruct", "tokenizeIndent", "effects", "ok", "nok", "self", "tail", "initialSize", "size", "start", "code", "kind", "asciiDigit", "thematicBreak", "atMarker", "inside", "blankLine", "onBlank", "endOfPrefix", "otherPrefix", "markdownSpace", "notBlank", "factorySpace", "notInCurrentItem", "afterPrefix", "setextUnderline", "tokenizeSetextUnderline", "resolveToSetextUnderline", "events", "context", "index", "content", "text", "definition", "heading", "effects", "ok", "nok", "self", "marker", "start", "code", "paragraph", "before", "inside", "markdownSpace", "factorySpace", "after", "markdownLineEnding", "flow", "initializeFlow", "effects", "self", "initial", "blankLine", "atBlankEnding", "afterConstruct", "factorySpace", "content", "code", "resolver", "createResolver", "string", "initializeFactory", "text", "field", "initializeText", "resolveAllLineSuffixes", "effects", "self", "constructs", "start", "notText", "code", "atBreak", "data", "list", "index", "item", "extraResolver", "resolveAllText", "events", "context", "enter", "eventIndex", "chunks", "bufferIndex", "size", "tabs", "chunk", "token", "createTokenizer", "parser", "initialize", "from", "point", "columnStart", "resolveAllConstructs", "chunks", "stack", "consumed", "effects", "consume", "enter", "exit", "constructFactory", "onsuccessfulconstruct", "onsuccessfulcheck", "context", "sliceStream", "sliceSerialize", "now", "defineSkip", "write", "state", "expectedCode", "slice", "push", "main", "addResult", "resolveAll", "token", "expandTabs", "serializeChunks", "sliceChunks", "line", "column", "offset", "_index", "_bufferIndex", "value", "accountForPotentialSkip", "chunkIndex", "chunk", "go", "code", "markdownLineEnding", "type", "fields", "construct", "info", "_", "onreturn", "hook", "constructs", "returnState", "bogusState", "listOfConstructs", "constructIndex", "currentConstruct", "handleListOfConstructs", "handleMapOfConstructs", "map", "start", "def", "all", "list", "handleConstruct", "store", "nok", "ok", "splice", "startPoint", "startPrevious", "startCurrentConstruct", "startEventsIndex", "startStack", "restore", "startIndex", "startBufferIndex", "endIndex", "endBufferIndex", "view", "head", "index", "result", "atTab", "constructs_exports", "__export", "attentionMarkers", "contentInitial", "disable", "document", "flow", "flowInitial", "insideSpan", "string", "text", "document", "list", "blockQuote", "contentInitial", "definition", "flowInitial", "codeIndented", "flow", "headingAtx", "thematicBreak", "setextUnderline", "htmlFlow", "codeFenced", "string", "characterReference", "characterEscape", "text", "lineEnding", "labelStartImage", "attention", "autolink", "htmlText", "labelStartLink", "hardBreakEscape", "labelEnd", "codeText", "insideSpan", "resolver", "attentionMarkers", "disable", "parse", "options", "constructs", "combineExtensions", "constructs_exports", "parser", "create", "content", "document", "flow", "string", "text", "initial", "creator", "from", "createTokenizer", "search", "preprocess", "column", "buffer", "start", "atCarriageReturn", "preprocessor", "value", "encoding", "end", "chunks", "match", "next", "startPosition", "endPosition", "code", "postprocess", "events", "subtokenize", "decodeNumericCharacterReference", "value", "base", "code", "characterEscapeOrReference", "decodeString", "value", "decode", "$0", "$1", "$2", "head", "hex", "decodeNumericCharacterReference", "decodeNamedCharacterReference", "own", "fromMarkdown", "value", "encoding", "options", "compiler", "postprocess", "parse", "preprocess", "config", "opener", "link", "onenterdata", "heading", "blockQuote", "codeFlow", "buffer", "codeText", "definition", "emphasis", "hardBreak", "html", "image", "listItem", "onenterlistitemvalue", "list", "onenterlistordered", "paragraph", "onenterreference", "strong", "thematicBreak", "closer", "onexitatxheadingsequence", "onexitautolinkemail", "onexitautolinkprotocol", "onexitdata", "onexitcharacterreferencemarker", "onexitcharacterreferencevalue", "onexitcodefenced", "onexitcodefencedfence", "onexitcodefencedfenceinfo", "onexitcodefencedfencemeta", "onexitcodeindented", "onexitcodetext", "onexitdefinitiondestinationstring", "onexitdefinitionlabelstring", "onexitdefinitiontitlestring", "onexithardbreak", "onexithtmlflow", "onexithtmltext", "onexitimage", "onexitlabel", "onexitlabeltext", "onexitlineending", "onexitlink", "onexitreferencestring", "onexitresourcedestinationstring", "onexitresourcetitlestring", "onexitresource", "onexitsetextheading", "onexitsetextheadinglinesequence", "onexitsetextheadingtext", "configure", "data", "compile", "events", "tree", "context", "enter", "exit", "resume", "setData", "getData", "listStack", "index", "tail", "prepareList", "handler", "defaultOnError", "point", "start", "length", "containerBalance", "listSpread", "lineIndex", "firstBlankLineIndex", "atMarker", "event", "tailIndex", "tailEvent", "key", "create", "and", "open", "token", "node", "errorHandler", "close", "onExitError", "stringifyPosition", "toString", "ancestor", "label", "normalizeIdentifier", "depth", "text", "referenceType", "string", "decodeString", "fragment", "children", "type", "decodeNumericCharacterReference", "decodeNamedCharacterReference", "d", "combined", "extensions", "extension", "right", "left", "remarkParse", "options", "doc", "settings", "fromMarkdown", "blockquote", "state", "node", "result", "hardBreak", "state", "node", "result", "code", "state", "node", "value", "lang", "properties", "result", "strikethrough", "state", "node", "result", "emphasis", "state", "node", "result", "normalizeUri", "value", "result", "index", "start", "skip", "code", "replace", "asciiAlphanumeric", "next", "footnoteReference", "state", "node", "id", "safeId", "normalizeUri", "index", "counter", "reuseCounter", "link", "sup", "footnote", "state", "node", "footnoteById", "no", "identifier", "footnoteReference", "heading", "state", "node", "result", "html", "state", "node", "result", "revert", "state", "node", "subtype", "suffix", "contents", "head", "tail", "imageReference", "state", "node", "def", "revert", "properties", "normalizeUri", "result", "image", "state", "node", "properties", "normalizeUri", "result", "inlineCode", "state", "node", "text", "result", "linkReference", "state", "node", "def", "revert", "properties", "normalizeUri", "result", "link", "state", "node", "properties", "normalizeUri", "result", "listItem", "state", "node", "parent", "results", "loose", "listLoose", "listItemLoose", "properties", "children", "head", "paragraph", "index", "child", "tail", "result", "spread", "list", "state", "node", "properties", "results", "index", "child", "result", "paragraph", "state", "node", "result", "root", "state", "node", "result", "strong", "state", "node", "result", "pointStart", "point", "pointEnd", "position", "node", "type", "table", "state", "node", "rows", "firstRow", "tableContent", "head", "body", "start", "pointStart", "end", "pointEnd", "result", "tableRow", "state", "node", "parent", "siblings", "tagName", "align", "length", "cellIndex", "cells", "cell", "properties", "alignValue", "result", "tableCell", "state", "node", "result", "trimLines", "value", "source", "search", "match", "last", "lines", "trimLine", "start", "end", "startIndex", "endIndex", "code", "text", "state", "node", "result", "trimLines", "thematicBreak", "state", "node", "result", "handlers", "blockquote", "hardBreak", "code", "strikethrough", "emphasis", "footnoteReference", "footnote", "heading", "html", "imageReference", "image", "inlineCode", "linkReference", "link", "listItem", "list", "paragraph", "root", "strong", "table", "tableCell", "tableRow", "text", "thematicBreak", "ignore", "convert", "test", "ok", "typeFactory", "anyFactory", "propsFactory", "castFactory", "tests", "checks", "index", "any", "parameters", "check", "all", "node", "key", "type", "assertion", "CONTINUE", "EXIT", "SKIP", "visitParents", "tree", "test", "visitor", "reverse", "is", "convert", "step", "factory", "node", "index", "parents", "value", "name", "visit", "result", "subresult", "offset", "grandparents", "toResult", "visit", "tree", "test", "visitor", "reverse", "visitParents", "overload", "node", "parents", "parent", "generated", "node", "own", "definitions", "tree", "cache", "visit", "definition", "id", "clean", "identifier", "value", "own", "createState", "tree", "options", "settings", "dangerous", "footnoteById", "state", "handlers", "definitions", "patch", "applyData", "oneBound", "allBound", "wrap", "augment", "visit", "definition", "id", "left", "right", "data", "ctx", "generated", "pointStart", "pointEnd", "node", "tagName", "props", "children", "parent", "one", "all", "from", "to", "position", "result", "hName", "hChildren", "hProperties", "type", "defaultUnknownHandler", "values", "nodes", "index", "head", "loose", "footer", "state", "listItems", "index", "def", "content", "id", "safeId", "normalizeUri", "referenceIndex", "backReferences", "backReference", "tail", "tailTail", "listItem", "toHast", "tree", "options", "state", "createState", "node", "foot", "footer", "remarkRehype", "destination", "options", "bridge", "mutate", "lib_default", "node", "file", "next", "toHast", "error", "import_prop_types", "Schema", "property", "normal", "space", "merge", "definitions", "space", "property", "normal", "index", "Schema", "normalize", "value", "Info", "property", "attribute", "types_exports", "__export", "boolean", "booleanish", "commaOrSpaceSeparated", "commaSeparated", "number", "overloadedBoolean", "spaceSeparated", "powers", "increment", "checks", "types_exports", "DefinedInfo", "Info", "property", "attribute", "mask", "space", "index", "mark", "check", "values", "key", "value", "own", "create", "definition", "property", "normal", "prop", "value", "info", "DefinedInfo", "normalize", "Schema", "xlink", "create", "_", "prop", "xml", "create", "_", "prop", "caseSensitiveTransform", "attributes", "attribute", "caseInsensitiveTransform", "attributes", "property", "caseSensitiveTransform", "xmlns", "create", "caseInsensitiveTransform", "aria", "create", "_", "prop", "booleanish", "number", "spaceSeparated", "html", "create", "caseInsensitiveTransform", "commaSeparated", "spaceSeparated", "boolean", "number", "booleanish", "overloadedBoolean", "svg", "create", "caseSensitiveTransform", "commaOrSpaceSeparated", "number", "spaceSeparated", "boolean", "commaSeparated", "valid", "dash", "cap", "find", "schema", "value", "normal", "normalize", "prop", "Type", "Info", "rest", "camelcase", "dashes", "kebab", "DefinedInfo", "$0", "hastToReact", "html", "merge", "xml", "xlink", "xmlns", "aria", "svg", "rehypeFilter", "options", "tree", "visit", "node", "index", "parent_", "parent", "remove", "import_react", "import_react_is", "whitespace", "thing", "value", "stringify", "values", "stringify", "values", "options", "settings", "import_style_to_object", "own", "tableElements", "childrenToReact", "context", "node", "children", "childIndex", "child", "toReact", "whitespace", "index", "parent", "options", "parentSchema", "name", "properties", "schema", "property", "svg", "addProperty", "position", "component", "basic", "React", "ReactIs", "input", "getInputElement", "getElementsBeforeCount", "flattenPosition", "count", "props", "prop", "value", "ctx", "info", "find", "result", "stringify", "parseStyle", "hastToReact", "style", "iterator", "v", "k", "styleReplacer", "_", "$1", "pos", "own", "changelog", "deprecated", "ReactMarkdown", "options", "key", "deprecation", "processor", "unified", "remarkParse", "lib_default", "rehypeFilter", "file", "VFile", "hastNode", "result", "React", "childrenToReact", "html", "uriTransformer", "PropTypes", "COLOR_SWATCHES_KEY", "DEFAULT_COLOR_OPTION_NAME", "colorSwatches", "product", "merged", "config", "parsed", "optionValue", "variant", "optionName", "wanted", "property", "value", "groupVariantsByColor", "variants", "groups", "group", "isAbsoluteUrl", "resolveSwatch", "colors", "configured", "src", "import_react", "toImageKitSrc", "src", "url", "prefix", "rewritten", "constrainImage", "opts", "dpr", "host", "tr", "AVATAR_QUALITY", "constrainAvatar", "size", "import_react_dom", "CURRENCIES_WITH_FULL_SYMBOL", "safeIntlNumberFormat", "numericAmount", "locale", "options", "err", "formatPrice", "amount", "currencyCode", "display", "SAFE_HANDLE", "sanitizeHandle", "handle", "SAFE_DPP_PATH_ID", "sanitizeDppPathId", "id", "swapDppProductSegment", "pathname", "rootProductId", "externalId", "segs", "ptIdx", "pfIdx", "setVariantParam", "url", "variantExternalId", "resolveFermatFunnelUrl", "current", "dppPath", "resolveBrandSiteUrl", "productUrl", "allowedNavOrigins", "dest", "merged", "value", "key", "resolveNavigationUrl", "request", "currentHref", "import_react", "useInView", "ref", "rootMargin", "inView", "setInView", "node", "observer", "entries", "e", "r", "f", "n", "o", "clsx", "concatArrays", "array1", "array2", "combinedArray", "Array", "length", "i", "createClassValidatorObject", "classGroupId", "validator", "createClassPartObject", "nextPart", "Map", "validators", "EMPTY_CONFLICTS", "ARBITRARY_PROPERTY_PREFIX", "createClassGroupUtils", "config", "classMap", "createClassMap", "conflictingClassGroups", "conflictingClassGroupModifiers", "getClassGroupId", "className", "startsWith", "endsWith", "getGroupIdForArbitraryProperty", "classParts", "split", "CLASS_PART_SEPARATOR", "startIndex", "length", "getGroupRecursive", "getConflictingClassGroupIds", "classGroupId", "hasPostfixModifier", "modifierConflicts", "baseConflicts", "concatArrays", "classPartObject", "currentClassPart", "nextClassPartObject", "nextPart", "get", "result", "validators", "classRest", "join", "slice", "validatorsLength", "i", "validatorObj", "validator", "indexOf", "undefined", "content", "colonIndex", "property", "theme", "classGroups", "processClassGroups", "createClassPartObject", "group", "processClassesRecursively", "classGroup", "len", "classDefinition", "processClassDefinition", "processStringDefinition", "processFunctionDefinition", "processObjectDefinition", "classPartObjectToEdit", "getPart", "isThemeGetter", "push", "createClassValidatorObject", "entries", "Object", "key", "value", "path", "current", "parts", "part", "next", "set", "func", "createLruCache", "maxCacheSize", "cacheSize", "cache", "create", "previousCache", "update", "EMPTY_MODIFIERS", "createResultObject", "modifiers", "hasImportantModifier", "baseClassName", "maybePostfixModifierPosition", "isExternal", "createParseClassName", "config", "prefix", "experimentalParseClassName", "parseClassName", "className", "bracketDepth", "parenDepth", "modifierStart", "postfixModifierPosition", "len", "length", "index", "currentCharacter", "MODIFIER_SEPARATOR", "push", "slice", "baseClassNameWithImportantModifier", "endsWith", "IMPORTANT_MODIFIER", "startsWith", "undefined", "fullPrefix", "parseClassNameOriginal", "createSortModifiers", "modifierWeights", "Map", "orderSensitiveModifiers", "forEach", "mod", "set", "result", "currentSegment", "i", "modifier", "isArbitrary", "isOrderSensitive", "has", "sort", "createConfigUtils", "cache", "createLruCache", "cacheSize", "sortModifiers", "postfixLookupClassGroupIds", "createPostfixLookupClassGroupIds", "createClassGroupUtils", "lookup", "Object", "create", "classGroupIds", "postfixLookupClassGroups", "SPLIT_CLASSES_REGEX", "mergeClassList", "classList", "configUtils", "getClassGroupId", "getConflictingClassGroupIds", "classGroupsInConflict", "classNames", "trim", "split", "originalClassName", "hasPostfixModifier", "classGroupId", "baseClassNameWithoutPostfix", "substring", "classGroupIdWithPostfix", "variantModifier", "join", "modifierId", "classId", "indexOf", "conflictGroups", "group", "twJoin", "classLists", "argument", "resolvedValue", "string", "toValue", "mix", "k", "createTailwindMerge", "createConfigFirst", "createConfigRest", "cacheGet", "cacheSet", "functionToCall", "initTailwindMerge", "reduce", "previousConfig", "createConfigCurrent", "get", "tailwindMerge", "cachedResult", "args", "fallbackThemeArr", "fromTheme", "key", "themeGetter", "theme", "isThemeGetter", "arbitraryValueRegex", "arbitraryVariableRegex", "fractionRegex", "tshirtUnitRegex", "lengthUnitRegex", "colorFunctionRegex", "shadowRegex", "imageRegex", "isFraction", "value", "test", "isNumber", "Number", "isNaN", "isInteger", "isPercent", "isTshirtSize", "isAny", "isLengthOnly", "isNever", "isShadow", "isImage", "isAnyNonArbitrary", "isArbitraryValue", "isArbitraryVariable", "isNamedContainerQuery", "isArbitrarySize", "getIsArbitraryValue", "isLabelSize", "isArbitraryLength", "isLabelLength", "isArbitraryNumber", "isLabelNumber", "isArbitraryWeight", "isLabelWeight", "isArbitraryFamilyName", "isLabelFamilyName", "isArbitraryPosition", "isLabelPosition", "isArbitraryImage", "isLabelImage", "isArbitraryShadow", "isLabelShadow", "isArbitraryVariableLength", "getIsArbitraryVariable", "isArbitraryVariableFamilyName", "isArbitraryVariablePosition", "isArbitraryVariableSize", "isArbitraryVariableImage", "isArbitraryVariableShadow", "isArbitraryVariableWeight", "testLabel", "testValue", "exec", "shouldMatchNoLabel", "label", "getDefaultConfig", "themeColor", "fromTheme", "themeFont", "themeText", "themeFontWeight", "themeTracking", "themeLeading", "themeBreakpoint", "themeContainer", "themeSpacing", "themeRadius", "themeShadow", "themeInsetShadow", "themeTextShadow", "themeDropShadow", "themeBlur", "themePerspective", "themeAspect", "themeEase", "themeAnimate", "scaleBreak", "scalePosition", "scalePositionWithArbitrary", "isArbitraryVariable", "isArbitraryValue", "scaleOverflow", "scaleOverscroll", "scaleUnambiguousSpacing", "scaleInset", "isFraction", "scaleGridTemplateColsRows", "isInteger", "scaleGridColRowStartAndEnd", "span", "scaleGridColRowStartOrEnd", "scaleGridAutoColsRows", "scaleAlignPrimaryAxis", "scaleAlignSecondaryAxis", "scaleMargin", "scaleSizing", "scaleSizingInline", "scaleSizingBlock", "scaleColor", "scaleBgPosition", "isArbitraryVariablePosition", "isArbitraryPosition", "position", "scaleBgRepeat", "repeat", "scaleBgSize", "isArbitraryVariableSize", "isArbitrarySize", "size", "scaleGradientStopPosition", "isPercent", "isArbitraryVariableLength", "isArbitraryLength", "scaleRadius", "scaleBorderWidth", "isNumber", "scaleLineStyle", "scaleBlendMode", "scaleMaskImagePosition", "scaleBlur", "scaleRotate", "scaleScale", "scaleSkew", "scaleTranslate", "cacheSize", "theme", "animate", "aspect", "blur", "isTshirtSize", "breakpoint", "color", "isAny", "container", "ease", "font", "isAnyNonArbitrary", "leading", "perspective", "radius", "shadow", "spacing", "text", "tracking", "classGroups", "isNamedContainerQuery", "columns", "box", "display", "sr", "float", "clear", "isolation", "object", "overflow", "overscroll", "inset", "start", "end", "top", "right", "bottom", "left", "visibility", "z", "basis", "flex", "grow", "shrink", "order", "col", "row", "gap", "justify", "content", "items", "baseline", "self", "p", "px", "py", "ps", "pe", "pbs", "pbe", "pt", "pr", "pb", "pl", "m", "mx", "my", "ms", "me", "mbs", "mbe", "mt", "mr", "mb", "ml", "inline", "block", "w", "screen", "h", "isArbitraryVariableWeight", "isArbitraryWeight", "isArbitraryVariableFamilyName", "isArbitraryFamilyName", "isArbitraryNumber", "list", "placeholder", "decoration", "indent", "tab", "align", "whitespace", "break", "wrap", "hyphens", "bg", "linear", "to", "radial", "conic", "isArbitraryVariableImage", "isArbitraryImage", "from", "via", "rounded", "border", "divide", "outline", "isArbitraryVariableShadow", "isArbitraryShadow", "ring", "opacity", "mask", "closest", "farthest", "filter", "brightness", "contrast", "grayscale", "invert", "saturate", "sepia", "table", "caption", "transition", "duration", "delay", "backface", "rotate", "scale", "skew", "transform", "origin", "translate", "zoom", "accent", "appearance", "caret", "scheme", "cursor", "resize", "scroll", "scrollbar", "snap", "touch", "select", "fill", "stroke", "conflictingClassGroups", "conflictingClassGroupModifiers", "postfixLookupClassGroups", "orderSensitiveModifiers", "twMerge", "createTailwindMerge", "getDefaultConfig", "cn", "inputs", "twMerge", "clsx", "import_jsx_runtime", "NO_VARIANTS", "IMAGE_WIDTH", "VIDEO_EXTENSIONS", "isVideoSrc", "src", "path", "photos", "media", "seen", "out", "item", "cardImages", "product", "variant", "hasSelection", "candidates", "candidate", "usable", "requestedImageHeight", "cardImageRatio", "width", "height", "p", "CAROUSEL_HEADING_CLASS", "productQueryUrl", "baseHref", "handle", "variantExternalId", "url", "resolveCardHref", "config", "variantProductUrl", "dest", "resolveNavigationUrl", "base", "href", "variantProperties", "byName", "distinguishingProperties", "variants", "v", "name", "value", "values", "varying", "variantLabel", "include", "variantPropertyLabel", "a", "b", "letterSizeRank", "key", "axis", "prefix", "xCount", "c", "spelled", "sizeSortKey", "label", "letter", "numeric", "compareSizeLabels", "groupA", "rankA", "groupB", "rankB", "OptionTrack", "options", "selectedId", "onSelect", "trackRef", "selectedRef", "failedSwatches", "setFailedSwatches", "track", "selected", "tabbableId", "o", "e", "step", "at", "next", "option", "isSelected", "isSwatch", "cn", "constrainImage", "raw", "spent", "ChatCarouselCard", "onProductClicked", "onProductATCClicked", "onNavigateToProduct", "useSamuelConfig", "t", "useTranslation", "locale", "actions", "resolveActions", "imageHeight", "showAtc", "added", "setAdded", "recommendedVariant", "swatchConfig", "colorSwatches", "colorOptionName", "DEFAULT_COLOR_OPTION_NAME", "colorGroups", "groupVariantsByColor", "selectorOn", "showColorTrack", "seedVariant", "selectedColor", "setSelectedColor", "g", "optionValue", "selectedExternalId", "setSelectedExternalId", "sizeStepOpen", "setSizeStepOpen", "imageNav", "setImageNav", "imageNavRef", "failedSources", "setFailedSources", "markSourceFailed", "colorScope", "selectedVariant", "resolvedVariant", "deepLinkVariant", "colorOwed", "sizeOwed", "atcNeedsSelection", "sizeOptions", "sizeLabelProperties", "priced", "priceVaries", "priceSource", "lowest", "unitPrice", "listPrice", "currency", "images", "imageKey", "i", "imageIndex", "showImage", "index", "stepImage", "arrow", "nav", "productName", "picked", "pickedLabel", "outOfStock", "sizeStepPending", "atcLabel", "brand", "badge", "rating", "reviewCount", "onSale", "discountPercent", "handleAddToCartClick", "handleViewCartClick", "handleProductLinkClick", "image", "formatPrice", "show", "delta", "side", "group", "resolveSwatch", "externalId", "ChatProductCarousel", "productHandles", "variantExternalIds", "heading", "source", "wrapperRef", "inView", "useInView", "products", "isLoading", "useProductsForHandles", "skeletonConfig", "scrollRef", "edges", "setEdges", "el", "update", "overflowing", "observer", "scrollByStep", "dir", "skeletonCount", "_", "bareHandle", "h", "variantByHandle", "import_jsx_runtime", "SuggestedReplies", "replies", "onSelect", "interactive", "selectedReply", "canTap", "reply", "index", "import_jsx_runtime", "SuggestionPillList", "questions", "onSelect", "dataSrRole", "loading", "t", "useTranslation", "_", "index", "question", "ArrowDownIcon", "import_jsx_runtime", "WelcomeRecsCarousel", "strategy", "rootProductId", "productHandle", "onProductClicked", "onProductATCClicked", "onNavigateToProduct", "t", "useTranslation", "recsQuery", "useRecsQuery", "DEFAULT_RECOMMENDATION_STRATEGY", "heroProducts", "useProductsForHandles", "heroName", "recs", "handles", "rec", "Trans", "ChatProductCarousel", "handle", "variantExternalId", "wwwPrefix", "tokenizeWwwPrefix", "domain", "tokenizeDomain", "path", "tokenizePath", "trail", "tokenizeTrail", "emailDomainDotTrail", "tokenizeEmailDomainDotTrail", "wwwAutolink", "tokenizeWwwAutolink", "previousWww", "protocolAutolink", "tokenizeProtocolAutolink", "previousProtocol", "emailAutolink", "tokenizeEmailAutolink", "previousEmail", "text", "gfmAutolinkLiteral", "code", "effects", "ok", "nok", "self", "dot", "data", "start", "gfmAtext", "previousUnbalanced", "atext", "emailDomain", "emailDomainAfter", "emailDomainDot", "asciiAlphanumeric", "asciiAlpha", "wwwStart", "wwwAfter", "buffer", "seen", "protocolStart", "protocolPrefixInside", "protocol", "protocolSlashesInside", "afterProtocol", "asciiControl", "markdownLineEndingOrSpace", "unicodeWhitespace", "unicodePunctuation", "protocolAfter", "size", "wwwPrefixInside", "wwwPrefixAfter", "underscoreInLastSegment", "underscoreInLastLastSegment", "domainInside", "domainAfter", "domainAtPunctuation", "sizeOpen", "sizeClose", "pathInside", "pathAtPunctuation", "trailCharRefStart", "trailBracketAfter", "trailCharRefInside", "after", "events", "index", "result", "token", "indent", "tokenizeIndent", "gfmFootnote", "tokenizeDefinitionStart", "tokenizeDefinitionContinuation", "gfmFootnoteDefinitionEnd", "tokenizeGfmFootnoteCall", "tokenizePotentialGfmFootnoteCall", "resolveToPotentialGfmFootnoteCall", "effects", "ok", "nok", "self", "index", "defined", "labelStart", "token", "start", "code", "id", "normalizeIdentifier", "events", "context", "call", "marker", "string", "chunk", "replacement", "size", "data", "callStart", "callData", "markdownLineEndingOrSpace", "callEscape", "identifier", "labelAtMarker", "labelInside", "labelAfter", "labelEscape", "factorySpace", "whitespaceAfter", "blankLine", "afterPrefix", "tail", "gfmStrikethrough", "options", "single", "tokenizer", "tokenizeStrikethrough", "resolveAllStrikethrough", "events", "context", "index", "open", "strikethrough", "text", "nextEvents", "insideSpan", "splice", "resolveAll", "effects", "ok", "nok", "previous", "size", "start", "code", "more", "before", "classifyCharacter", "token", "after", "EditMap", "index", "remove", "add", "addImpl", "events", "a", "b", "vecs", "slice", "editMap", "at", "gfmTableAlign", "events", "index", "inDelimiterRow", "align", "event", "alignIndex", "gfmTable", "tokenizeTable", "resolveTable", "effects", "ok", "nok", "self", "size", "sizeB", "seen", "start", "code", "index", "type", "tail", "next", "bodyRowStart", "headRowBefore", "headRowStart", "headRowBreak", "markdownLineEnding", "headDelimiterStart", "markdownSpace", "factorySpace", "headRowData", "markdownLineEndingOrSpace", "headRowEscape", "headDelimiterBefore", "headDelimiterValueBefore", "headDelimiterCellBefore", "headDelimiterNok", "headDelimiterLeftAlignmentAfter", "headDelimiterCellAfter", "headDelimiterFiller", "headDelimiterRightAlignmentAfter", "bodyRowBreak", "bodyRowData", "bodyRowEscape", "events", "context", "inFirstCellAwaitingPipe", "rowKind", "lastCell", "cell", "afterHeadAwaitingFirstBodyRow", "lastTableEnd", "currentTable", "currentBody", "currentCell", "map", "EditMap", "event", "token", "flushTableEnd", "flushCell", "gfmTableAlign", "range", "rowEnd", "previousCell", "groupName", "valueName", "getPoint", "now", "relatedStart", "relatedEnd", "valueToken", "end", "a", "b", "table", "tableBody", "exits", "related", "side", "tasklistCheck", "tokenizeTasklistCheck", "gfmTaskListItem", "effects", "ok", "nok", "self", "open", "code", "inside", "markdownLineEndingOrSpace", "close", "after", "markdownLineEnding", "markdownSpace", "spaceThenNonSpace", "factorySpace", "gfm", "options", "combineExtensions", "gfmAutolinkLiteral", "gfmFootnote", "gfmStrikethrough", "gfmTable", "gfmTaskListItem", "ccount", "value", "character", "source", "count", "index", "escapeStringRegexp", "string", "own", "findAndReplace", "tree", "find", "replace", "options", "settings", "schema", "ignored", "convert", "pairs", "toPairs", "pairIndex", "visitParents", "visitor", "node", "parents", "index", "grandparent", "parent", "handler", "start", "change", "nodes", "match", "position", "matchObject", "value", "result", "toExpression", "toFunction", "key", "escapeStringRegexp", "inConstruct", "notInConstruct", "gfmAutolinkLiteralFromMarkdown", "transformGfmAutolinkLiterals", "enterLiteralAutolink", "enterLiteralAutolinkValue", "exitLiteralAutolink", "exitLiteralAutolinkEmail", "exitLiteralAutolinkHttp", "exitLiteralAutolinkWww", "gfmAutolinkLiteralToMarkdown", "token", "node", "tree", "findAndReplace", "findUrl", "findEmail", "_", "protocol", "domain", "path", "match", "prefix", "previous", "isCorrectDomain", "parts", "splitUrl", "result", "atext", "label", "url", "trailExec", "trail", "closingParenIndex", "openingParens", "ccount", "closingParens", "email", "code", "unicodeWhitespace", "unicodePunctuation", "association", "node", "decodeString", "containerFlow", "parent", "state", "info", "indexStack", "children", "tracker", "results", "index", "child", "between", "left", "right", "result", "eol", "indentLines", "value", "map", "result", "start", "line", "match", "one", "patternCompile", "pattern", "before", "patternInScope", "stack", "pattern", "listInScope", "list", "none", "index", "safe", "state", "input", "config", "value", "positions", "result", "infos", "index", "pattern", "patternInScope", "expression", "patternCompile", "match", "before", "after", "position", "numerical", "start", "end", "escapeBackslashes", "a", "b", "results", "whole", "track", "config", "options", "now", "lineShift", "line", "column", "move", "current", "shift", "value", "input", "chunks", "tail", "footnoteReference", "footnoteReferencePeek", "gfmFootnoteFromMarkdown", "enterFootnoteDefinition", "enterFootnoteDefinitionLabelString", "enterFootnoteCall", "enterFootnoteCallString", "exitFootnoteDefinition", "exitFootnoteDefinitionLabelString", "exitFootnoteCall", "exitFootnoteCallString", "gfmFootnoteToMarkdown", "footnoteDefinition", "token", "label", "node", "normalizeIdentifier", "_", "context", "safeOptions", "tracker", "track", "value", "exit", "subexit", "safe", "association", "indentLines", "containerFlow", "map", "line", "index", "blank", "containerPhrasing", "parent", "state", "info", "indexStack", "children", "results", "index", "before", "tracker", "child", "after", "handle", "constructsWithoutStrikethrough", "handleDelete", "peekDelete", "gfmStrikethroughFromMarkdown", "enterStrikethrough", "exitStrikethrough", "gfmStrikethroughToMarkdown", "token", "node", "_", "context", "safeOptions", "tracker", "track", "exit", "value", "containerPhrasing", "inlineCode", "inlineCodePeek", "node", "_", "state", "value", "sequence", "index", "pattern", "expression", "patternCompile", "match", "position", "defaultStringLength", "value", "markdownTable", "table", "options", "settings", "align", "stringLength", "alignments", "cellMatrix", "sizeMatrix", "longestCellByColumn", "mostCellsPerRow", "rowIndex", "row", "sizes", "columnIndex", "cell", "serialize", "size", "toAlignment", "code", "before", "after", "lines", "line", "gfmTableFromMarkdown", "enterTable", "enterCell", "enterRow", "exitCodeText", "exitTable", "exit", "token", "align", "d", "value", "replace", "node", "$0", "$1", "gfmTableToMarkdown", "options", "settings", "padding", "alignDelimiters", "stringLength", "around", "handleTable", "handleTableRow", "handleTableCell", "inlineCodeWithTable", "_", "context", "safeOptions", "serializeData", "handleTableAsData", "row", "handleTableRowAsData", "subexit", "containerPhrasing", "matrix", "markdownTable", "children", "index", "result", "parent", "inlineCode", "checkBullet", "state", "marker", "checkListItemIndent", "state", "style", "listItem", "node", "parent", "state", "info", "listItemIndent", "checkListItemIndent", "bullet", "checkBullet", "size", "tracker", "exit", "value", "map", "line", "index", "blank", "gfmTaskListItemFromMarkdown", "exitCheck", "exitParagraphWithTaskListItem", "gfmTaskListItemToMarkdown", "listItemWithTaskListItem", "token", "node", "parent", "head", "siblings", "index", "firstParaghraph", "sibling", "context", "safeOptions", "checkable", "checkbox", "tracker", "track", "value", "listItem", "check", "$0", "gfmFromMarkdown", "gfmAutolinkLiteralFromMarkdown", "gfmFootnoteFromMarkdown", "gfmStrikethroughFromMarkdown", "gfmTableFromMarkdown", "gfmTaskListItemFromMarkdown", "gfmToMarkdown", "options", "gfmAutolinkLiteralToMarkdown", "gfmFootnoteToMarkdown", "gfmStrikethroughToMarkdown", "gfmTableToMarkdown", "gfmTaskListItemToMarkdown", "remarkGfm", "options", "data", "add", "gfm", "gfmFromMarkdown", "gfmToMarkdown", "field", "value", "import_jsx_runtime", "REJECTED_LINK_URI", "transformAssistantLinkUri", "uri", "trimmed", "uriTransformer", "LOADING_PHRASE_ROTATION_MS", "useRotatingPhrase", "phrases", "active", "index", "setIndex", "count", "id", "i", "ChatMessages", "messages", "isLoading", "brandName", "brandLogoUrl", "assistantName", "assistantAvatarUrl", "onSendSuggestion", "recommendationStrategy", "rootProductId", "productHandle", "suggestedQuestions", "suggestionsResolving", "onProductClicked", "onProductATCClicked", "onNavigateToProduct", "landingProduct", "landingAfterIndex", "onFeedback", "controlledVotes", "onRecordVote", "onOpenLink", "t", "useTranslation", "localVotes", "setLocalVotes", "votes", "pendingDownId", "setPendingDownId", "commentDraft", "setCommentDraft", "votedRef", "messageCount", "markdownComponents", "href", "children", "event", "messagesContainerRef", "messagesEndRef", "defaultQuestions", "loadingPhrases", "loadingPhrase", "avatarUrl", "constrainAvatar", "welcomeName", "minimalWelcome", "React", "SamuelConfigContext", "isWelcome", "landingIsNewest", "renderLandingBlock", "ChatProductCarousel", "handle", "variantExternalId", "SuggestedReplies", "commitVote", "messageId", "vote", "messageIndex", "feedbackText", "prev", "SparkleIcon", "cn", "WelcomeRecsCarousel", "SuggestionPillList", "message", "ReactMarkdown", "remarkGfm", "picked", "pendingDown", "Icon", "ThumbUpIcon", "ThumbDownIcon", "selected", "locked", "e", "LoadingSpinner", "import_react", "import_jsx_runtime", "ChatPanel", "isOpen", "messages", "isLoading", "error", "onSend", "onClose", "showMinimize", "presentation", "onReset", "brandName", "brandLogoUrl", "assistantName", "assistantAvatarUrl", "assistantTagline", "assistantDescription", "assistantInfoBullets", "recommendationStrategy", "rootProductId", "productHandle", "suggestedQuestions", "suggestionsResolving", "supportPhone", "onProductClicked", "onProductATCClicked", "onNavigateToProduct", "landingProduct", "landingAfterIndex", "compact", "onFeedback", "votes", "onRecordVote", "onExternalHandoff", "onExternalHandoffStage", "onOpenLink", "t", "useTranslation", "maintenance", "React", "SamuelConfigContext", "welcomeLayout", "handoffPending", "setHandoffPending", "handoffSent", "setHandoffSent", "resolvedOfferId", "setResolvedOfferId", "showAbout", "setShowAbout", "lastAssistantMessage", "message", "offer", "offerIsRequested", "promptedOfferId", "requestedOfferId", "headerTitle", "headerAvatarUrl", "constrainAvatar", "supportLabel", "isDrawer", "isCompact", "dismissIsClose", "taglineText", "hasStarted", "minimalWelcome", "hasAboutCopy", "closeButton", "CloseIcon", "MinimizeIcon", "cn", "AssistantHeader", "open", "AgentIcon", "NewChatIcon", "PhoneIcon", "AssistantAbout", "ChatMessages", "q", "ChatInput", "EN", "NS", "isString", "obj", "defer", "res", "rej", "promise", "resolve", "reject", "makeString", "object", "copy", "a", "s", "t", "m", "lastOfPathSeparatorRegExp", "cleanKey", "key", "canNotTraverseDeeper", "getLastOfPath", "path", "Empty", "stack", "stackIndex", "setPath", "newValue", "k", "e", "p", "last", "pushPath", "concat", "getPath", "getPathWithDefaults", "data", "defaultData", "value", "deepExtend", "target", "source", "overwrite", "prop", "regexEscape", "str", "_entityMap", "escape", "RegExpCache", "capacity", "pattern", "regExpFromCache", "regExpNew", "chars", "looksLikeObjectPathRegExpCache", "looksLikeObjectPath", "nsSeparator", "keySeparator", "possibleChars", "c", "r", "matched", "ki", "deepFind", "tokens", "current", "i", "next", "nextPath", "j", "getCleanedCode", "code", "consoleLogger", "args", "type", "Logger", "_Logger", "concreteLogger", "options", "_len", "_key", "_len2", "_key2", "_len3", "_key3", "_len4", "_key4", "lvl", "prefix", "debugOnly", "moduleName", "baseLogger", "EventEmitter", "events", "listener", "event", "numListeners", "_ref", "observer", "numTimesAdded", "_ref2", "ResourceStore", "ns", "index", "lng", "ignoreJSONStructure", "result", "resources", "deep", "pack", "v", "postProcessor", "module", "processors", "translator", "processor", "checkedLoadedFor", "Translator", "_Translator", "services", "resolved", "namespaces", "wouldCheckForNsInKey", "seemsNaturalLanguage", "parts", "keys", "lastKey", "returnDetails", "namespace", "appendNamespaceToCIMode", "resUsedKey", "resExactUsedKey", "resType", "noObject", "joinArrays", "handleAsObjectInI18nFormat", "handleAsObject", "resTypeIsArray", "newKeyToUse", "deepKey", "usedDefault", "usedKey", "needsPluralHandling", "hasDefaultValue", "defaultValueSuffix", "defaultValueSuffixOrdinalFallback", "needsZeroSuffixLookup", "defaultValue", "resForMissing", "updateMissing", "fk", "lngs", "fallbackLngs", "send", "l", "specificDefaultValue", "defaultForMissing", "language", "suffixes", "suffix", "_this", "skipOnVariables", "nestBef", "nb", "na", "nestAft", "postProcess", "postProcessorNames", "found", "exactUsedKey", "usedLng", "usedNS", "extracted", "needsContextHandling", "codes", "finalKeys", "pluralSuffix", "zeroSuffix", "ordinalPrefix", "contextKey", "possibleKey", "optionsKeys", "useOptionsReplaceForData", "option", "capitalize", "string", "LanguageUtil", "formattedCode", "specialCases", "part", "cleanedLng", "lngOnly", "supportedLng", "fallbacks", "fallbackCode", "fallbackCodes", "addCode", "fc", "sets", "_rulesPluralsTypes", "n", "nonIntlVersions", "intlVersions", "suffixesOrder", "createRules", "rules", "set", "PluralResolver", "languageUtils", "cleanedCode", "cacheKey", "rule", "lngPart", "pluralCategory1", "pluralCategory2", "pluralCategory", "number", "count", "idx", "returnSuffix", "deepFindWithDefaults", "regexSafe", "val", "Interpolator", "escape$1", "escapeValue", "useRawValueToEscape", "prefixEscaped", "suffixEscaped", "formatSeparator", "unescapeSuffix", "unescapePrefix", "nestingPrefix", "nestingPrefixEscaped", "nestingSuffix", "nestingSuffixEscaped", "nestingOptionsSeparator", "maxReplaces", "alwaysFormat", "getOrResetRegExp", "existingRegExp", "match", "replaces", "handleFormat", "f", "missingInterpolationHandler", "todo", "matchedVar", "temp", "safeValue", "clonedOptions", "handleHasOptions", "inheritedOptions", "sep", "optionsString", "matchedSingleQuotes", "matchedDoubleQuotes", "formatters", "doReduce", "elem", "parseFormatStr", "formatStr", "formatName", "formatOptions", "optStr", "opt", "rest", "trimmedKey", "createCachedFormatter", "fn", "cache", "optForCache", "formatter", "Formatter", "name", "format", "formats", "lastIndex", "mem", "formatted", "valOptions", "error", "removePending", "q", "Connector", "backend", "store", "languages", "callback", "toLoad", "pending", "toLoadLanguages", "toLoadNamespaces", "hasAllNamespaces", "err", "loaded", "loadedKeys", "fcName", "tried", "wait", "resolver", "fallbackValue", "isUpdate", "clb", "opts", "get", "ret", "transformOptions", "noop", "bindMemberFunctions", "inst", "I18n", "_I18n", "defOpts", "createClassOnDemand", "ClassOrObject", "lu", "deferred", "load", "finish", "usedCallback", "append", "li", "lngInLngs", "_this2", "setLngProps", "done", "setLng", "keyPrefix", "_this3", "fixedT", "resultKey", "fallbackLng", "lastLng", "loadNotPending", "loadState", "preResult", "preloaded", "newLngs", "rtlLngs", "forkResourceStore", "mergedOptions", "clone", "instance", "createInstance", "dir", "init", "loadResources", "reloadResources", "use", "changeLanguage", "getFixedT", "exists", "setDefaultNamespace", "hasLoadedNamespace", "loadNamespaces", "loadLanguages", "createSamuelI18n", "config", "lng", "instance", "initReactI18next", "NS", "EN", "overrides", "supportLabel", "import_react", "useChatAnalytics", "ctx", "captureEvent", "ChatAnalyticsContext", "fire", "event", "base", "messageCount", "reason", "source", "sessionDurationMs", "messageType", "params", "conversationId", "productHandle", "variantExternalId", "suggestedReplies", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "BASE_PATH", "Configuration", "configuration", "querystring", "apiKey", "accessToken", "DefaultConfig", "BaseAPI", "_BaseAPI", "url", "init", "fetchParams", "middleware", "response", "FetchError", "middlewares", "next", "preMiddlewares", "pre", "postMiddlewares", "post", "mime", "context", "initOverrides", "ResponseError", "headers", "key", "initOverrideFn", "initParams", "overriddenInit", "body", "isFormData", "isBlob", "constructor", "msg", "actualProto", "cause", "RequiredError", "field", "querystring", "params", "prefix", "key", "querystringSingleKey", "part", "value", "keyPrefix", "fullKey", "multiValue", "singleValue", "valueAsArray", "mapValues", "data", "fn", "result", "key", "JSONApiResponse", "raw", "transformer", "jsonValue", "__awaiter", "TextApiResponse", "raw", "__awaiter", "EntityFromJSON", "json", "EntityFromJSONTyped", "ignoreDiscriminator", "EntityToJSON", "EntityToJSONTyped", "value", "ReplayToolCallFromJSON", "json", "ReplayToolCallFromJSONTyped", "ignoreDiscriminator", "AppApiEndpointsAisOnboardingAgentSchemaReplayMessageFromJSON", "json", "AppApiEndpointsAisOnboardingAgentSchemaReplayMessageFromJSONTyped", "ignoreDiscriminator", "ReplayToolCallFromJSON", "BrandStylingColorPairFromJSON", "json", "BrandStylingColorPairFromJSONTyped", "ignoreDiscriminator", "BrandStylingColorsFromJSON", "json", "BrandStylingColorsFromJSONTyped", "ignoreDiscriminator", "BrandStylingColorPairFromJSON", "BrandTextStyleFromJSON", "json", "BrandTextStyleFromJSONTyped", "ignoreDiscriminator", "BrandStylingButtonFontFromJSON", "json", "BrandStylingButtonFontFromJSONTyped", "ignoreDiscriminator", "BrandStylingButtonFromJSON", "json", "BrandStylingButtonFromJSONTyped", "ignoreDiscriminator", "BrandStylingButtonFontFromJSON", "BrandStylingButtonTextFromJSON", "json", "BrandStylingButtonTextFromJSONTyped", "ignoreDiscriminator", "BrandStylingButtonsFromJSON", "json", "BrandStylingButtonsFromJSONTyped", "ignoreDiscriminator", "BrandStylingButtonFromJSON", "BrandStylingButtonTextFromJSON", "PaletteColorFromJSON", "json", "PaletteColorFromJSONTyped", "ignoreDiscriminator", "BrandStylingFontVariantFromJSON", "json", "BrandStylingFontVariantFromJSONTyped", "ignoreDiscriminator", "BrandStylingFontSlotFromJSON", "json", "BrandStylingFontSlotFromJSONTyped", "ignoreDiscriminator", "BrandStylingFontVariantFromJSON", "BrandStylingFontsFromJSON", "json", "BrandStylingFontsFromJSONTyped", "ignoreDiscriminator", "BrandStylingFontSlotFromJSON", "mapValues", "BrandTextStyleFromJSON", "FontSpecFromJSON", "json", "FontSpecFromJSONTyped", "ignoreDiscriminator", "TypographyFromJSON", "json", "TypographyFromJSONTyped", "ignoreDiscriminator", "FontSpecFromJSON", "BrandStylingArtifactFromJSON", "json", "BrandStylingArtifactFromJSONTyped", "ignoreDiscriminator", "PaletteColorFromJSON", "TypographyFromJSON", "BrandStylingColorsFromJSON", "BrandStylingFontsFromJSON", "mapValues", "BrandTextStyleFromJSON", "BrandStylingButtonsFromJSON", "AisProvisioningCompetitorFromJSON", "json", "AisProvisioningCompetitorFromJSONTyped", "ignoreDiscriminator", "AisProvisioningTotalsFromJSON", "json", "AisProvisioningTotalsFromJSONTyped", "ignoreDiscriminator", "AisProvisioningPromptFromJSON", "json", "AisProvisioningPromptFromJSONTyped", "ignoreDiscriminator", "AisProvisioningPromptCategoryFromJSON", "json", "AisProvisioningPromptCategoryFromJSONTyped", "ignoreDiscriminator", "AisProvisioningArtifactFromJSON", "json", "AisProvisioningArtifactFromJSONTyped", "ignoreDiscriminator", "AisProvisioningPromptFromJSON", "AisProvisioningCompetitorFromJSON", "AisProvisioningPromptCategoryFromJSON", "AisProvisioningTotalsFromJSON", "WebsiteSnapshotCardFromJSON", "json", "WebsiteSnapshotCardFromJSONTyped", "ignoreDiscriminator", "IdentityArtifactFromJSON", "json", "IdentityArtifactFromJSONTyped", "ignoreDiscriminator", "WebsiteSnapshotCardFromJSON", "KnowledgeBaseDocumentFromJSON", "json", "KnowledgeBaseDocumentFromJSONTyped", "ignoreDiscriminator", "KnowledgeBaseArtifactFromJSON", "json", "KnowledgeBaseArtifactFromJSONTyped", "ignoreDiscriminator", "KnowledgeBaseDocumentFromJSON", "VoiceAudienceFromJSON", "json", "VoiceAudienceFromJSONTyped", "ignoreDiscriminator", "VoiceCardFromJSON", "json", "VoiceCardFromJSONTyped", "ignoreDiscriminator", "VoiceAudienceFromJSON", "BrandVoiceArtifactFromJSON", "json", "BrandVoiceArtifactFromJSONTyped", "ignoreDiscriminator", "VoiceCardFromJSON", "ProductCatalogArtifactFromJSON", "json", "ProductCatalogArtifactFromJSONTyped", "ignoreDiscriminator", "ProductSyncArtifactFromJSON", "json", "ProductSyncArtifactFromJSONTyped", "ignoreDiscriminator", "AiscSourceContextArtifactFromJSON", "json", "AiscSourceContextArtifactFromJSONTyped", "ignoreDiscriminator", "AisFunnelGenerationArtifactFromJSON", "json", "AisFunnelGenerationArtifactFromJSONTyped", "ignoreDiscriminator", "EcommerceArtifactFromJSON", "json", "EcommerceArtifactFromJSONTyped", "ignoreDiscriminator", "OnboardingArtifactsFromJSON", "json", "OnboardingArtifactsFromJSONTyped", "ignoreDiscriminator", "IdentityArtifactFromJSON", "BrandVoiceArtifactFromJSON", "BrandStylingArtifactFromJSON", "AisProvisioningArtifactFromJSON", "KnowledgeBaseArtifactFromJSON", "EcommerceArtifactFromJSON", "ProductCatalogArtifactFromJSON", "AiscSourceContextArtifactFromJSON", "ProductSyncArtifactFromJSON", "AisFunnelGenerationArtifactFromJSON", "SuggestedActionFromJSON", "json", "SuggestedActionFromJSONTyped", "ignoreDiscriminator", "MissingRequirementFromJSON", "json", "MissingRequirementFromJSONTyped", "ignoreDiscriminator", "SuggestedPlanStepFromJSON", "json", "SuggestedPlanStepFromJSONTyped", "ignoreDiscriminator", "ToolAvailabilityFromJSON", "json", "ToolAvailabilityFromJSONTyped", "ignoreDiscriminator", "MissingRequirementFromJSON", "SuggestedPlanStepFromJSON", "OnboardingReadModelFromJSON", "json", "OnboardingReadModelFromJSONTyped", "ignoreDiscriminator", "OnboardingArtifactsFromJSON", "SuggestedActionFromJSON", "mapValues", "ToolAvailabilityFromJSON", "AISOnboardingConversationResponseFromJSON", "json", "AISOnboardingConversationResponseFromJSONTyped", "ignoreDiscriminator", "AppApiEndpointsAisOnboardingAgentSchemaReplayMessageFromJSON", "OnboardingReadModelFromJSON", "AISOnboardingRequestToJSON", "json", "AISOnboardingRequestToJSONTyped", "value", "ignoreDiscriminator", "UserSelectedSelectorToJSON", "json", "UserSelectedSelectorToJSONTyped", "value", "ignoreDiscriminator", "UserFeedbackToJSON", "json", "UserFeedbackToJSONTyped", "value", "ignoreDiscriminator", "BatchCustomizationRequestToJSON", "json", "BatchCustomizationRequestToJSONTyped", "value", "ignoreDiscriminator", "UserSelectedSelectorToJSON", "UserFeedbackToJSON", "AnomalyContextToJSON", "json", "AnomalyContextToJSONTyped", "value", "ignoreDiscriminator", "BehavioralAnomalyRequestToJSON", "json", "BehavioralAnomalyRequestToJSONTyped", "value", "ignoreDiscriminator", "AnomalyContextToJSON", "ClickRequestToJSON", "json", "ClickRequestToJSONTyped", "value", "ignoreDiscriminator", "ConsultativeAssistantRequestToJSON", "json", "ConsultativeAssistantRequestToJSONTyped", "value", "ignoreDiscriminator", "ConsultativeAssistantResponseFromJSON", "json", "ConsultativeAssistantResponseFromJSONTyped", "ignoreDiscriminator", "DPPExperimentCreationRequestToJSON", "json", "DPPExperimentCreationRequestToJSONTyped", "value", "ignoreDiscriminator", "ExperimentVariantFromJSON", "json", "ExperimentVariantFromJSONTyped", "ignoreDiscriminator", "ExperimentConfigFromJSON", "json", "ExperimentConfigFromJSONTyped", "ignoreDiscriminator", "ExperimentVariantFromJSON", "DPPExperimentCreationResponse1FromJSON", "json", "DPPExperimentCreationResponse1FromJSONTyped", "ignoreDiscriminator", "ExperimentConfigFromJSON", "DetectorRunRequestToJSON", "json", "DetectorRunRequestToJSONTyped", "value", "ignoreDiscriminator", "DetectorRunResponseFromJSON", "json", "DetectorRunResponseFromJSONTyped", "ignoreDiscriminator", "GenerateBrandVoiceRequestToJSON", "json", "GenerateBrandVoiceRequestToJSONTyped", "value", "ignoreDiscriminator", "GenerateBrandVoiceResponseFromJSON", "json", "GenerateBrandVoiceResponseFromJSONTyped", "ignoreDiscriminator", "GenerateImageRequestToJSON", "json", "GenerateImageRequestToJSONTyped", "value", "ignoreDiscriminator", "GenerateImageResponseFromJSON", "json", "GenerateImageResponseFromJSONTyped", "ignoreDiscriminator", "GenerateTitleRequestToJSON", "json", "GenerateTitleRequestToJSONTyped", "value", "ignoreDiscriminator", "GenerateTitleResponseFromJSON", "json", "GenerateTitleResponseFromJSONTyped", "ignoreDiscriminator", "HealthCheckResponseFromJSON", "json", "HealthCheckResponseFromJSONTyped", "ignoreDiscriminator", "MainSiteSnippetResponseFromJSON", "json", "MainSiteSnippetResponseFromJSONTyped", "ignoreDiscriminator", "ModuleCustomizationPropChangeFromJSON", "json", "ModuleCustomizationPropChangeFromJSONTyped", "ignoreDiscriminator", "ModuleCustomizationCSSDeclarationChangeFromJSON", "json", "ModuleCustomizationCSSDeclarationChangeFromJSONTyped", "ignoreDiscriminator", "ModuleCustomizationSessionChangeFromJSON", "json", "ModuleCustomizationSessionChangeFromJSONTyped", "ignoreDiscriminator", "ModuleCustomizationPropChangeFromJSON", "ModuleCustomizationCSSDeclarationChangeFromJSON", "LiftedSchemaEntryFromJSON", "json", "LiftedSchemaEntryFromJSONTyped", "ignoreDiscriminator", "CSSRuleFromJSON", "json", "CSSRuleFromJSONTyped", "ignoreDiscriminator", "LiftedSchemaEntryFromJSON", "ModuleCustomizationResponseFromJSON", "json", "ModuleCustomizationResponseFromJSONTyped", "ignoreDiscriminator", "CSSRuleFromJSON", "ModuleCustomizationSessionChangeFromJSON", "StyleTransferResult1FromJSON", "json", "StyleTransferResult1FromJSONTyped", "ignoreDiscriminator", "ModuleAgentTypeFromJSON", "json", "ModuleAgentTypeFromJSONTyped", "ignoreDiscriminator", "CustomModuleConfigFieldFromJSON", "json", "CustomModuleConfigFieldFromJSONTyped", "ignoreDiscriminator", "CustomModuleBundleResponseFromJSON", "json", "CustomModuleBundleResponseFromJSONTyped", "ignoreDiscriminator", "CustomModuleConfigFieldFromJSON", "ClarifyingQuestionOptionFromJSON", "json", "ClarifyingQuestionOptionFromJSONTyped", "ignoreDiscriminator", "ClarifyingQuestionFromJSON", "json", "ClarifyingQuestionFromJSONTyped", "ignoreDiscriminator", "ClarifyingQuestionOptionFromJSON", "CalloutBlockFromJSONTyped", "json", "ignoreDiscriminator", "ChartSeriesFromJSON", "json", "ChartSeriesFromJSONTyped", "ignoreDiscriminator", "PieSliceFromJSON", "json", "PieSliceFromJSONTyped", "ignoreDiscriminator", "ChartDatumFromJSON", "json", "ChartDatumFromJSONTyped", "ignoreDiscriminator", "ChartBlockFromJSONTyped", "json", "ignoreDiscriminator", "ChartSeriesFromJSON", "ChartDatumFromJSON", "PieSliceFromJSON", "DividerBlockFromJSONTyped", "json", "ignoreDiscriminator", "HeadingBlockFromJSONTyped", "json", "ignoreDiscriminator", "KpiItemFromJSON", "json", "KpiItemFromJSONTyped", "ignoreDiscriminator", "KpiGridBlockFromJSONTyped", "json", "ignoreDiscriminator", "KpiItemFromJSON", "ListBlockFromJSONTyped", "json", "ignoreDiscriminator", "ParagraphBlockFromJSONTyped", "json", "ignoreDiscriminator", "SessionListBlockFromJSONTyped", "json", "ignoreDiscriminator", "TableColumnFromJSON", "json", "TableColumnFromJSONTyped", "ignoreDiscriminator", "TableBlockFromJSONTyped", "json", "ignoreDiscriminator", "TableColumnFromJSON", "DocumentBlocksInnerFromJSON", "json", "DocumentBlocksInnerFromJSONTyped", "ignoreDiscriminator", "CalloutBlockFromJSONTyped", "ChartBlockFromJSONTyped", "DividerBlockFromJSONTyped", "HeadingBlockFromJSONTyped", "KpiGridBlockFromJSONTyped", "ListBlockFromJSONTyped", "ParagraphBlockFromJSONTyped", "SessionListBlockFromJSONTyped", "TableBlockFromJSONTyped", "DocumentFromJSON", "json", "DocumentFromJSONTyped", "ignoreDiscriminator", "DocumentBlocksInnerFromJSON", "AgentResponseFromJSON", "json", "AgentResponseFromJSONTyped", "ignoreDiscriminator", "DocumentFromJSON", "ClarifyingQuestionFromJSON", "ModuleCustomizationResultFromJSON", "json", "ModuleCustomizationResultFromJSONTyped", "ignoreDiscriminator", "ModuleCustomizationResponseFromJSON", "BatchCustomizationResponseFromJSON", "json", "BatchCustomizationResponseFromJSONTyped", "ignoreDiscriminator", "ModuleCustomizationResultFromJSON", "ModuleAgentOutputFromJSON", "json", "ModuleAgentOutputFromJSONTyped", "ignoreDiscriminator", "ModuleAgentTypeFromJSON", "ModuleCustomizationResponseFromJSON", "BatchCustomizationResponseFromJSON", "CustomModuleBundleResponseFromJSON", "AgentResponseFromJSON", "StyleTransferResult1FromJSON", "ModuleAgentContextRequirementToJSON", "value", "ShopMetadataToJSON", "json", "ShopMetadataToJSONTyped", "value", "ignoreDiscriminator", "EntityToJSON", "ModuleAgentToolToJSON", "value", "ModuleAgentRequestToJSON", "json", "ModuleAgentRequestToJSONTyped", "value", "ignoreDiscriminator", "ShopMetadataToJSON", "ModuleAgentToolToJSON", "UserSelectedSelectorToJSON", "UserFeedbackToJSON", "ModuleAgentContextRequirementToJSON", "ModuleCustomizationSingleRequestToJSON", "json", "ModuleCustomizationSingleRequestToJSONTyped", "value", "ignoreDiscriminator", "UserSelectedSelectorToJSON", "UserFeedbackToJSON", "ModuleGeneratorRequestToJSON", "json", "ModuleGeneratorRequestToJSONTyped", "value", "ignoreDiscriminator", "GeneratedModuleStatusFromJSON", "json", "GeneratedModuleStatusFromJSONTyped", "ignoreDiscriminator", "ModuleJobResponseFromJSON", "json", "ModuleJobResponseFromJSONTyped", "ignoreDiscriminator", "GeneratedModuleStatusFromJSON", "ClarifyingQuestionAnswerToJSON", "json", "ClarifyingQuestionAnswerToJSONTyped", "value", "ignoreDiscriminator", "EditorContextToJSON", "json", "EditorContextToJSONTyped", "value", "ignoreDiscriminator", "UserSelectedSelectorToJSON", "UserFeedbackToJSON", "OmniAgentRequestToJSON", "json", "OmniAgentRequestToJSONTyped", "value", "ignoreDiscriminator", "EntityToJSON", "ShopMetadataToJSON", "AnomalyContextToJSON", "EditorContextToJSON", "ClarifyingQuestionAnswerToJSON", "RateLimitStatusFromJSON", "json", "RateLimitStatusFromJSONTyped", "ignoreDiscriminator", "SamuelCapabilitiesToJSON", "json", "SamuelCapabilitiesToJSONTyped", "value", "ignoreDiscriminator", "SamuelRequestToJSON", "json", "SamuelRequestToJSONTyped", "value", "ignoreDiscriminator", "SamuelCapabilitiesToJSON", "SamuelResponseFromJSON", "json", "SamuelResponseFromJSONTyped", "ignoreDiscriminator", "SearchRequestToJSON", "json", "SearchRequestToJSONTyped", "value", "ignoreDiscriminator", "ShoppingAssistantRequestToJSON", "json", "ShoppingAssistantRequestToJSONTyped", "value", "ignoreDiscriminator", "ShoppingAssistantResponseFromJSON", "json", "ShoppingAssistantResponseFromJSONTyped", "ignoreDiscriminator", "ShoppingAssistantV2RequestToJSON", "json", "ShoppingAssistantV2RequestToJSONTyped", "value", "ignoreDiscriminator", "SimilarRequestToJSON", "json", "SimilarRequestToJSONTyped", "value", "ignoreDiscriminator", "SimilarResultFromJSON", "json", "SimilarResultFromJSONTyped", "ignoreDiscriminator", "SimilarResponseFromJSON", "json", "SimilarResponseFromJSONTyped", "ignoreDiscriminator", "SimilarResultFromJSON", "StartModuleJobRequestToJSON", "json", "StartModuleJobRequestToJSONTyped", "value", "ignoreDiscriminator", "PersistedShopFromJSON", "json", "PersistedShopFromJSONTyped", "ignoreDiscriminator", "SessionRefFromJSON", "json", "SessionRefFromJSONTyped", "ignoreDiscriminator", "BundleInfoFromJSON", "json", "BundleInfoFromJSONTyped", "ignoreDiscriminator", "ButtonWidthFromJSON", "json", "ButtonWidthFromJSONTyped", "ignoreDiscriminator", "CategoryFromJSON", "json", "CategoryFromJSONTyped", "ignoreDiscriminator", "EntityFromJSON", "AspectRatio1FromJSON", "json", "AspectRatio1FromJSONTyped", "ignoreDiscriminator", "ButtonStyleFromJSON", "json", "ButtonStyleFromJSONTyped", "ignoreDiscriminator", "ButtonAttributesFromJSON", "json", "ButtonAttributesFromJSONTyped", "ignoreDiscriminator", "ButtonStyleFromJSON", "ButtonWidthFromJSON", "CtaButton1FromJSON", "json", "CtaButton1FromJSONTyped", "ignoreDiscriminator", "ButtonAttributesFromJSON", "CtaBorderRadFromJSON", "json", "CtaBorderRadFromJSONTyped", "ignoreDiscriminator", "AlignmentFromJSON", "json", "AlignmentFromJSONTyped", "ignoreDiscriminator", "FormatFromJSON", "json", "FormatFromJSONTyped", "ignoreDiscriminator", "Display1FromJSON", "json", "Display1FromJSONTyped", "ignoreDiscriminator", "Placement1FromJSON", "json", "Placement1FromJSONTyped", "ignoreDiscriminator", "NavigationFromJSON", "json", "NavigationFromJSONTyped", "ignoreDiscriminator", "Display1FromJSON", "Placement1FromJSON", "Mobile6FromJSON", "json", "Mobile6FromJSONTyped", "ignoreDiscriminator", "Desktop7FromJSON", "json", "Desktop7FromJSONTyped", "ignoreDiscriminator", "Padding1FromJSON", "json", "Padding1FromJSONTyped", "ignoreDiscriminator", "Desktop7FromJSON", "Mobile6FromJSON", "Mobile5FromJSON", "json", "Mobile5FromJSONTyped", "ignoreDiscriminator", "Desktop6FromJSON", "json", "Desktop6FromJSONTyped", "ignoreDiscriminator", "Size1FromJSON", "json", "Size1FromJSONTyped", "ignoreDiscriminator", "Desktop6FromJSON", "Mobile5FromJSON", "Spacing1FromJSON", "json", "Spacing1FromJSONTyped", "ignoreDiscriminator", "AspectRatio3FromJSON", "json", "AspectRatio3FromJSONTyped", "ignoreDiscriminator", "DisplayFromJSON", "json", "DisplayFromJSONTyped", "ignoreDiscriminator", "Attrs5FromJSON", "json", "Attrs5FromJSONTyped", "ignoreDiscriminator", "DisplayFromJSON", "Size1FromJSON", "AspectRatio3FromJSON", "Spacing1FromJSON", "Padding1FromJSON", "CarouselFromJSON", "json", "CarouselFromJSONTyped", "ignoreDiscriminator", "Attrs5FromJSON", "MediaFromJSON", "json", "MediaFromJSONTyped", "ignoreDiscriminator", "Y1FromJSON", "json", "Y1FromJSONTyped", "ignoreDiscriminator", "X1FromJSON", "json", "X1FromJSONTyped", "ignoreDiscriminator", "HeightFromJSON", "json", "HeightFromJSONTyped", "ignoreDiscriminator", "WidthFromJSON", "json", "WidthFromJSONTyped", "ignoreDiscriminator", "CropFromJSON", "json", "CropFromJSONTyped", "ignoreDiscriminator", "X1FromJSON", "Y1FromJSON", "WidthFromJSON", "HeightFromJSON", "AspectRatioFromJSON", "json", "AspectRatioFromJSONTyped", "ignoreDiscriminator", "ZoomFromJSON", "json", "ZoomFromJSONTyped", "ignoreDiscriminator", "DesktopFromJSON", "json", "DesktopFromJSONTyped", "ignoreDiscriminator", "MobileFromJSON", "json", "MobileFromJSONTyped", "ignoreDiscriminator", "Layout1FromJSON", "json", "Layout1FromJSONTyped", "ignoreDiscriminator", "DesktopFromJSON", "MobileFromJSON", "ImageAttributesFromJSON", "json", "ImageAttributesFromJSONTyped", "ignoreDiscriminator", "AspectRatioFromJSON", "ZoomFromJSON", "Layout1FromJSON", "CropFromJSON", "DesktopItemFromJSON", "json", "DesktopItemFromJSONTyped", "ignoreDiscriminator", "MediaFromJSON", "ImageAttributesFromJSON", "MobileItemFromJSON", "json", "MobileItemFromJSONTyped", "ignoreDiscriminator", "MediaFromJSON", "ImageAttributesFromJSON", "Media3FromJSON", "json", "Media3FromJSONTyped", "ignoreDiscriminator", "MobileItemFromJSON", "DesktopItemFromJSON", "Components3FromJSON", "json", "Components3FromJSONTyped", "ignoreDiscriminator", "Media3FromJSON", "CarouselFromJSON", "NavigationFromJSON", "DeviceTypeFromJSON", "json", "DeviceTypeFromJSONTyped", "ignoreDiscriminator", "LayoutFromJSON", "json", "LayoutFromJSONTyped", "ignoreDiscriminator", "DeliveryCadenceOrderFromJSON", "json", "DeliveryCadenceOrderFromJSONTyped", "ignoreDiscriminator", "ViewTypeFromJSON", "json", "ViewTypeFromJSONTyped", "ignoreDiscriminator", "SubscriptionOptionsFromJSON", "json", "SubscriptionOptionsFromJSONTyped", "ignoreDiscriminator", "DeliveryCadenceOrderFromJSON", "ViewTypeFromJSON", "VariantSelectorModuleFromJSON", "json", "VariantSelectorModuleFromJSONTyped", "ignoreDiscriminator", "LayoutFromJSON", "DeviceTypeFromJSON", "SubscriptionOptionsFromJSON", "HeroProductFromJSON", "json", "HeroProductFromJSONTyped", "ignoreDiscriminator", "EntityFromJSON", "TestimonialReviewFromJSON", "json", "TestimonialReviewFromJSONTyped", "ignoreDiscriminator", "TabStyleFromJSON", "json", "TabStyleFromJSONTyped", "ignoreDiscriminator", "StickyPositionFromJSON", "json", "StickyPositionFromJSONTyped", "ignoreDiscriminator", "ColorFromJSON", "json", "ColorFromJSONTyped", "ignoreDiscriminator", "CtaBtnStyleFromJSON", "json", "CtaBtnStyleFromJSONTyped", "ignoreDiscriminator", "SectionFromJSON", "json", "SectionFromJSONTyped", "ignoreDiscriminator", "AvatarFromJSON", "json", "AvatarFromJSONTyped", "ignoreDiscriminator", "ThemeFromJSON", "json", "ThemeFromJSONTyped", "ignoreDiscriminator", "StyleFromJSON", "json", "StyleFromJSONTyped", "ignoreDiscriminator", "ButtonStyle1FromJSON", "json", "ButtonStyle1FromJSONTyped", "ignoreDiscriminator", "StyleFromJSON", "ButtonWidthFromJSON", "NameFromJSON", "json", "NameFromJSONTyped", "ignoreDiscriminator", "IconFromJSON", "json", "IconFromJSONTyped", "ignoreDiscriminator", "NameFromJSON", "Position2FromJSON", "json", "Position2FromJSONTyped", "ignoreDiscriminator", "ModuleFromJSON", "json", "ModuleFromJSONTyped", "ignoreDiscriminator", "LayoutFromJSON", "DeviceTypeFromJSON", "ThemeFromJSON", "SectionFromJSON", "Position2FromJSON", "AvatarFromJSON", "HeroProductFromJSON", "Components3FromJSON", "IconFromJSON", "CtaBorderRadFromJSON", "ButtonStyleFromJSON", "ButtonWidthFromJSON", "StickyPositionFromJSON", "CtaBtnStyleFromJSON", "EntityFromJSON", "ColorFromJSON", "CategoryFromJSON", "CtaButton1FromJSON", "AspectRatio1FromJSON", "TabStyleFromJSON", "ButtonStyle1FromJSON", "FormatFromJSON", "AlignmentFromJSON", "VariantSelectorModuleFromJSON", "TestimonialReviewFromJSON", "Response1FromJSON", "json", "Response1FromJSONTyped", "ignoreDiscriminator", "DocumentFromJSON", "ClarifyingQuestionFromJSON", "ModuleFromJSON", "PersistedShopFromJSON", "BundleInfoFromJSON", "CSSRuleFromJSON", "ModuleCustomizationSessionChangeFromJSON", "ModuleCustomizationResultFromJSON", "SessionRefFromJSON", "CustomModuleConfigFieldFromJSON", "StrategizeOutputFromJSON", "json", "StrategizeOutputFromJSONTyped", "ignoreDiscriminator", "Response1FromJSON", "StrategizeOutput1FromJSON", "json", "StrategizeOutput1FromJSONTyped", "ignoreDiscriminator", "Response1FromJSON", "VariantComparisonRequestToJSON", "json", "VariantComparisonRequestToJSONTyped", "value", "ignoreDiscriminator", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "DefaultApi", "BaseAPI", "requestParameters", "RequiredError", "queryParameters", "headerParameters", "AISOnboardingRequestToJSON", "initOverrides", "requestOptions", "response", "JSONApiResponse", "TextApiResponse", "jsonValue", "AISOnboardingConversationResponseFromJSON", "BatchCustomizationRequestToJSON", "StrategizeOutput1FromJSON", "BehavioralAnomalyRequestToJSON", "StrategizeOutputFromJSON", "HealthCheckResponseFromJSON", "VariantComparisonRequestToJSON", "ConsultativeAssistantRequestToJSON", "ConsultativeAssistantResponseFromJSON", "DPPExperimentCreationRequestToJSON", "DPPExperimentCreationResponse1FromJSON", "GenerateBrandVoiceRequestToJSON", "GenerateBrandVoiceResponseFromJSON", "GenerateTitleRequestToJSON", "GenerateTitleResponseFromJSON", "urlPath", "GenerateImageRequestToJSON", "GenerateImageResponseFromJSON", "MainSiteSnippetResponseFromJSON", "ModuleJobResponseFromJSON", "RateLimitStatusFromJSON", "ModuleAgentRequestToJSON", "ModuleAgentOutputFromJSON", "ModuleCustomizationSingleRequestToJSON", "ModuleGeneratorRequestToJSON", "OmniAgentRequestToJSON", "DetectorRunRequestToJSON", "DetectorRunResponseFromJSON", "SamuelRequestToJSON", "SamuelResponseFromJSON", "SearchRequestToJSON", "ClickRequestToJSON", "SimilarRequestToJSON", "SimilarResponseFromJSON", "ShoppingAssistantRequestToJSON", "ShoppingAssistantResponseFromJSON", "ShoppingAssistantV2RequestToJSON", "StartModuleJobRequestToJSON", "import_react", "ConsoleApiName", "globalConsole", "originalConsoleMethods", "name", "PREFIX", "display", "DOCS_ORIGIN", "DOCS_TROUBLESHOOTING", "MORE_DETAILS", "catchUserErrors", "fn", "errorMsg", "args", "_i", "err", "display", "performDraw", "threshold", "isPercentage", "value", "isNumber", "ONE_SECOND", "ONE_MINUTE", "ONE_HOUR", "ONE_DAY", "ONE_YEAR", "dateNow", "timeStampNow", "relativeNow", "clocksNow", "clocksOrigin", "getNavigationStart", "elapsed", "start", "end", "addDuration", "a", "b", "getRelativeTime", "timestamp", "navigationStart", "getNavigationStart", "ONE_KIBI_BYTE", "ONE_MEBI_BYTE", "HAS_MULTI_BYTES_CHARACTERS", "computeBytesCount", "candidate", "includes", "candidate", "search", "arrayFrom", "arrayLike", "array", "item", "i", "find", "predicate", "objectValues", "object", "key", "objectEntries", "startsWith", "candidate", "search", "endsWith", "assign", "target", "toAssign", "_i", "source", "shallowClone", "object", "assign", "objectHasValue", "value", "key", "isEmptyObject", "getGlobalObject", "globalObject", "getZoneJsOriginalValue", "target", "name", "browserWindow", "getGlobalObject", "original", "onMonitorErrorCollected", "debugMode", "startMonitorErrorCollection", "newOnMonitorErrorCollected", "setDebugMode", "newDebugMode", "monitored", "_", "__", "descriptor", "originalMethod", "args", "_i", "decorated", "onMonitorErrorCollected", "monitor", "fn", "callMonitored", "context", "e", "displayIfDebugEnabled", "debugMode", "display", "__spreadArray", "setTimeout", "callback", "delay", "getZoneJsOriginalValue", "getGlobalObject", "monitor", "clearTimeout", "timeoutId", "setInterval", "clearInterval", "Observable", "onFirstSubscribe", "f", "_this", "other", "data", "observer", "mergeObservables", "observables", "_i", "Observable", "globalObservable", "subscriptions", "observable", "data", "subscription", "throttle", "fn", "wait", "options", "needLeadingExecution", "needTrailingExecution", "inWaitPeriod", "pendingExecutionWithParameters", "pendingTimeoutId", "parameters", "_i", "setTimeout", "clearTimeout", "noop", "generateUUID", "placeholder", "COMMA_SEPARATED_KEY_VALUE", "findCommaSeparatedValue", "rawString", "name", "match", "findCommaSeparatedValues", "result", "safeTruncate", "candidate", "length", "suffix", "lastChar", "isLastCharSurrogatePair", "correctedLength", "isChromium", "detectBrowserCached", "browserCache", "detectBrowserCached", "detectBrowser", "browserWindow", "userAgent", "_a", "ExperimentalFeature", "enabledExperimentalFeatures", "initFeatureFlags", "enableExperimentalFeatures", "addExperimentalFeatures", "flag", "objectHasValue", "enabledFeatures", "isExperimentalFeatureEnabled", "featureName", "getExperimentalFeatures", "enabledExperimentalFeatures", "setCookie", "name", "value", "expireDelay", "options", "date", "expires", "sameSite", "domain", "secure", "partitioned", "getCookie", "findCommaSeparatedValue", "initCookieParsed", "getInitCookie", "findCommaSeparatedValues", "deleteCookie", "name", "options", "setCookie", "areCookiesAuthorized", "testCookieName", "generateUUID", "testCookieValue", "ONE_MINUTE", "isCookieCorrectlySet", "getCookie", "error", "display", "getCurrentSiteCache", "getCurrentSite", "domainLevels", "candidateDomain", "ONE_SECOND", "SESSION_STORE_KEY", "getType", "value", "sanitizeUser", "newUser", "user", "assign", "keys", "key", "checkUser", "isValid", "getType", "display", "generateAnonymousId", "SESSION_TIME_OUT_DELAY", "ONE_HOUR", "SESSION_EXPIRATION_DELAY", "ONE_MINUTE", "SESSION_COOKIE_EXPIRATION_DELAY", "ONE_YEAR", "SessionPersistence", "SESSION_ENTRY_REGEXP", "SESSION_ENTRY_SEPARATOR", "isValidSessionString", "sessionString", "EXPIRED", "getExpiredSessionState", "previousSessionState", "expiredSessionState", "isExperimentalFeatureEnabled", "ExperimentalFeature", "generateAnonymousId", "isSessionInNotStartedState", "session", "isEmptyObject", "isSessionStarted", "isSessionInExpiredState", "isActiveSession", "sessionState", "dateNow", "SESSION_TIME_OUT_DELAY", "expandSessionState", "SESSION_EXPIRATION_DELAY", "toSessionString", "objectEntries", "_a", "key", "value", "SESSION_ENTRY_SEPARATOR", "toSessionState", "sessionString", "isValidSessionString", "entry", "matches", "SESSION_ENTRY_REGEXP", "OLD_SESSION_COOKIE_NAME", "OLD_RUM_COOKIE_NAME", "OLD_LOGS_COOKIE_NAME", "RUM_SESSION_KEY", "LOGS_SESSION_KEY", "tryOldCookiesMigration", "cookieStoreStrategy", "sessionString", "getInitCookie", "SESSION_STORE_KEY", "oldSessionId", "oldRumType", "oldLogsType", "session", "isSessionStarted", "expandSessionState", "selectCookieStrategy", "initConfiguration", "cookieOptions", "buildCookieOptions", "areCookiesAuthorized", "SessionPersistence", "initCookieStrategy", "cookieStore", "isChromium", "persistSessionCookie", "retrieveSessionCookie", "sessionState", "expireSessionCookie", "tryOldCookiesMigration", "options", "session", "setCookie", "SESSION_STORE_KEY", "toSessionString", "SESSION_EXPIRATION_DELAY", "expiredSessionState", "getExpiredSessionState", "isExperimentalFeatureEnabled", "ExperimentalFeature", "SESSION_COOKIE_EXPIRATION_DELAY", "SESSION_TIME_OUT_DELAY", "sessionString", "getCookie", "toSessionState", "getCurrentSite", "LOCAL_STORAGE_TEST_KEY", "selectLocalStorageStrategy", "id", "generateUUID", "testKey", "retrievedId", "SessionPersistence", "initLocalStorageStrategy", "persistInLocalStorage", "retrieveSessionFromLocalStorage", "expireSessionFromLocalStorage", "sessionState", "SESSION_STORE_KEY", "toSessionString", "sessionString", "toSessionState", "previousSessionState", "getExpiredSessionState", "LOCK_RETRY_DELAY", "LOCK_MAX_TRIES", "bufferedOperations", "ongoingOperations", "processSessionStoreOperations", "operations", "sessionStoreStrategy", "numberOfRetries", "isLockEnabled", "persistSession", "expireSession", "persistWithLock", "session", "assign", "currentLock", "retrieveStore", "lock", "next", "currentStore", "retryLater", "generateUUID", "processedSession", "isSessionInExpiredState", "expandSessionState", "_a", "sessionStore", "currentNumberOfRetries", "setTimeout", "nextOperations", "STORAGE_POLL_DELAY", "ONE_SECOND", "selectSessionStoreStrategyType", "initConfiguration", "SessionPersistence", "selectCookieStrategy", "selectLocalStorageStrategy", "sessionStoreStrategyType", "display", "startSessionStore", "productKey", "computeSessionState", "renewObservable", "Observable", "expireObservable", "sessionStateUpdateObservable", "sessionStoreStrategy", "initCookieStrategy", "initLocalStorageStrategy", "expireSession", "watchSessionTimeoutId", "setInterval", "watchSession", "sessionCache", "startSession", "_a", "throttle", "processSessionStoreOperations", "sessionState", "isSessionInNotStartedState", "synchronizedSession", "synchronizeSession", "expandOrRenewSessionState", "isSessionStarted", "hasSessionInCache", "renewSessionInCache", "throttledExpandOrRenewSession", "cancelExpandOrRenewSession", "expandSession", "isSessionInExpiredState", "getExpiredSessionState", "isSessionInCacheOutdated", "expireSessionInCache", "trackingType", "isTracked", "generateUUID", "dateNow", "updateSessionState", "partialSessionState", "assign", "clearInterval", "TrackingConsent", "createTrackingConsentState", "currentConsent", "observable", "Observable", "trackingConsent", "jsonStringify", "value", "replacer", "space", "restoreObjectPrototypeToJson", "detachToJsonMethod", "restoreArrayPrototypeToJson", "restoreValuePrototypeToJson", "restoreValueToJson", "object", "objectToJson", "noop", "normalizeUrl", "url", "buildUrl", "buildUrl", "url", "base", "supportedURL", "getSupportedUrl", "error", "jsonStringify", "doc", "anchorElement", "baseElement", "originalURL", "isURLSupported", "INTAKE_SITE_STAGING", "INTAKE_SITE_FED_STAGING", "INTAKE_SITE_US1", "INTAKE_SITE_US1_FED", "PCI_INTAKE_HOST_US1", "INTAKE_URL_PARAMETERS", "createEndpointBuilder", "initConfiguration", "trackType", "configurationTags", "buildUrlWithParameters", "createEndpointUrlWithParametersBuilder", "api", "payload", "parameters", "buildEndpointParameters", "path", "proxy", "normalizedProxyUrl_1", "normalizeUrl", "host", "buildEndpointHost", "_a", "site", "INTAKE_SITE_US1", "internalAnalyticsSubdomain", "PCI_INTAKE_HOST_US1", "INTAKE_SITE_FED_STAGING", "domainParts", "extension", "_b", "clientToken", "retry", "encoding", "tags", "generateUUID", "timeStampNow", "TAG_SIZE_LIMIT", "buildTags", "configuration", "env", "service", "version", "datacenter", "tags", "buildTag", "key", "rawValue", "valueSizeLimit", "hasForbiddenCharacters", "display", "MORE_DETAILS", "DOCS_ORIGIN", "sanitizedValue", "supportUnicodePropertyEscapes", "computeTransportConfiguration", "initConfiguration", "site", "INTAKE_SITE_US1", "tags", "buildTags", "endpointBuilders", "computeEndpointBuilders", "replicaConfiguration", "computeReplicaConfiguration", "assign", "createEndpointBuilder", "replicaEndpointBuilders", "isIntakeUrl", "url", "INTAKE_URL_PARAMETERS", "param", "includes", "isString", "tag", "tagName", "display", "isDatadogSite", "site", "MORE_DETAILS", "DOCS_ORIGIN", "isSampleRate", "sampleRate", "name", "isPercentage", "validateAndBuildConfiguration", "initConfiguration", "objectHasValue", "TrackingConsent", "assign", "catchUserErrors", "selectSessionStoreStrategyType", "_a", "_b", "_c", "_d", "_e", "ONE_KIBI_BYTE", "ONE_SECOND", "computeTransportConfiguration", "serializeConfiguration", "UNKNOWN_FUNCTION", "computeStackTrace", "ex", "stack", "stackProperty", "tryToGetString", "exString", "startsWith", "line", "stackFrame", "parseChromeLine", "parseChromeAnonymousLine", "parseWinLine", "parseGeckoLine", "fileUrl", "filePosition", "CHROME_LINE_RE", "CHROME_EVAL_RE", "parts", "isNative", "isEval", "submatch", "CHROME_ANONYMOUS_FUNCTION_RE", "WINJS_LINE_RE", "GECKO_LINE_RE", "GECKO_EVAL_RE", "candidate", "property", "value", "computeStackTraceFromOnErrorMessage", "messageObj", "url", "column", "_a", "tryToParseMessage", "name", "message", "ERROR_TYPES_RE", "createHandlingStack", "internalFramesToSkip", "error", "formattedStack", "callMonitored", "stackTrace", "computeStackTrace", "toStackTraceString", "stack", "result", "formatErrorMessage", "frame", "func", "args", "line", "column", "instrumentMethod", "targetPrototype", "method", "onPreCall", "_a", "_b", "computeHandlingStack", "original", "startsWith", "noop", "stopped", "instrumentation", "parameters", "arrayFrom", "postCallCallback", "callMonitored", "callback", "createHandlingStack", "result", "SANITIZE_DEFAULT_MAX_CHARACTER_COUNT", "ONE_KIBI_BYTE", "JSON_PATH_ROOT_ELEMENT", "KEY_DECORATION_LENGTH", "sanitize", "source", "maxCharacterCount", "restoreObjectPrototypeToJson", "detachToJsonMethod", "restoreArrayPrototypeToJson", "containerQueue", "visitedObjectsWithPath", "sanitizedData", "sanitizeProcessor", "serializedSanitizedData", "accumulatedCharacterCount", "warnOverCharacterLimit", "containerToProcess", "separatorLength", "key", "targetData", "parentPath", "queue", "sourceToSanitize", "tryToApplyToJSON", "sanitizePrimitivesAndFunctions", "sanitizedSource", "sanitizeObjects", "sourceAsObject", "currentPath", "target", "value", "result", "match", "object", "changeType", "display", "NO_ERROR_STACK_PRESENT_MESSAGE", "computeRawError", "_a", "stackTrace", "originalError", "handlingStack", "startClocks", "nonErrorPrefix", "source", "handling", "isErrorInstance", "isError", "message", "computeMessage", "stack", "hasUsableStack", "toStackTraceString", "causes", "flattenErrorCauses", "type", "fingerprint", "tryToGetFingerprint", "jsonStringify", "sanitize", "getFileFromStackTraceString", "error", "parentSource", "currentError", "computeStackTrace", "ErrorSource", "trackRuntimeError", "errorObservable", "handleRuntimeError", "stackTrace", "originalError", "rawError", "computeRawError", "clocksNow", "ErrorSource", "stopInstrumentingOnError", "instrumentOnError", "stopInstrumentingOnUnhandledRejection", "instrumentUnhandledRejection", "callback", "instrumentMethod", "_a", "_b", "messageObj", "url", "line", "column", "errorObj", "isError", "computeStackTrace", "computeStackTraceFromOnErrorMessage", "e", "reason", "stack", "makePublicApi", "stub", "publicApi", "assign", "callback", "setDebugMode", "defineGlobal", "global", "name", "api", "existingGlobalVariable", "display", "fn", "catchUserErrors", "displayAlreadyInitializedError", "sdkName", "initConfiguration", "display", "addEventListener", "configuration", "eventTarget", "eventName", "listener", "options", "addEventListeners", "eventNames", "_a", "_b", "once", "capture", "passive", "listenerWithMonitor", "monitor", "event", "stop", "listenerTarget", "add", "getZoneJsOriginalValue", "remove", "RawReportType", "initReportObservable", "configuration", "apis", "observables", "includes", "createCspViolationReportObservable", "reportTypes", "api", "createReportObservable", "mergeObservables", "Observable", "observable", "handleReports", "monitor", "reports", "_", "report", "buildRawReportErrorFromReport", "observer", "stop", "addEventListener", "event", "buildRawReportErrorFromCspViolation", "type", "body", "buildRawReportError", "buildStack", "message", "safeTruncate", "partial", "assign", "clocksNow", "ErrorSource", "name", "sourceFile", "lineNumber", "columnNumber", "toStackTraceString", "sendToExtension", "type", "payload", "callback", "mergeInto", "destination", "source", "circularReferenceChecker", "createCircularReferenceChecker", "flags", "merged_1", "i", "merged", "getType", "key", "deepClone", "value", "combine", "sources", "_i", "_a", "sources_1", "set_1", "has", "array", "getConnectivity", "navigator", "_a", "removeDuplicates", "array", "set", "item", "arrayFrom", "removeItem", "index", "BUFFER_LIMIT", "createBoundedBuffer", "buffer", "add", "callback", "length", "remove", "removeItem", "drain", "arg", "TelemetryType", "ALLOWED_FRAME_URLS", "TELEMETRY_EXCLUDED_SITES", "INTAKE_SITE_US1_FED", "preStartTelemetryBuffer", "createBoundedBuffer", "onRawTelemetryEventCollected", "event", "startTelemetry", "telemetryService", "configuration", "contextProvider", "observable", "Observable", "alreadySentEvents", "telemetryEnabled", "includes", "performDraw", "telemetryEnabledPerType", "_a", "TelemetryType", "runtimeEnvInfo", "getRuntimeEnvInfo", "rawEvent", "stringifiedEvent", "jsonStringify", "event_1", "toTelemetryEvent", "sendToExtension", "startMonitorErrorCollection", "addTelemetryError", "combine", "timeStampNow", "getConnectivity", "arrayFrom", "getExperimentalFeatures", "provider", "drainPreStartTelemetry", "preStartTelemetryBuffer", "isTelemetryReplicationAllowed", "configuration", "INTAKE_SITE_STAGING", "addTelemetryDebug", "message", "context", "displayIfDebugEnabled", "ConsoleApiName", "onRawTelemetryEventCollected", "assign", "TelemetryType", "addTelemetryError", "formatError", "addTelemetryConfiguration", "addTelemetryUsage", "usage", "isError", "stackTrace", "computeStackTrace", "toStackTraceString", "scrubCustomerFrames", "NO_ERROR_STACK_PRESENT_MESSAGE", "jsonStringify", "frame", "ALLOWED_FRAME_URLS", "allowedFrameUrl", "startsWith", "END_OF_TIMES", "CLEAR_OLD_VALUES_INTERVAL", "ONE_MINUTE", "createValueHistory", "_a", "expireDelay", "maxEntries", "entries", "clearOldValuesInterval", "setInterval", "clearOldValues", "oldTimeThreshold", "relativeNow", "add", "value", "startTime", "entry", "removeItem", "endTime", "find", "options", "_i", "entries_1", "closeActive", "latestEntry", "findAll", "duration", "addDuration", "reset", "stop", "clearInterval", "VISIBILITY_CHECK_DELAY", "ONE_MINUTE", "SESSION_CONTEXT_TIMEOUT_DELAY", "SESSION_TIME_OUT_DELAY", "stopCallbacks", "startSessionManager", "configuration", "productKey", "computeSessionState", "trackingConsentState", "renewObservable", "Observable", "expireObservable", "sessionStore", "startSessionStore", "sessionContextHistory", "createValueHistory", "buildSessionContext", "relativeNow", "clocksOrigin", "trackActivity", "trackVisibility", "trackResume", "startTime", "options", "trackActivity", "configuration", "expandOrRenewSession", "stop", "addEventListeners", "stopCallbacks", "trackVisibility", "expandSession", "expandSessionWhenVisible", "addEventListener", "visibilityCheckInterval", "setInterval", "VISIBILITY_CHECK_DELAY", "clearInterval", "trackResume", "cb", "isServerError", "status", "tryToClone", "response", "MAX_ONGOING_BYTES_COUNT", "ONE_KIBI_BYTE", "MAX_ONGOING_REQUESTS", "MAX_QUEUE_BYTES_COUNT", "ONE_MEBI_BYTE", "MAX_BACKOFF_TIME", "ONE_MINUTE", "INITIAL_BACKOFF_TIME", "ONE_SECOND", "sendWithRetryStrategy", "payload", "state", "sendStrategy", "trackType", "reportError", "send", "retryQueuedPayloads", "scheduleRetry", "setTimeout", "_a", "onSuccess", "onFailure", "response", "shouldRetryRequest", "reason", "ErrorSource", "clocksNow", "previousQueue", "newPayloadQueue", "isServerError", "newRetryState", "newBandwidthMonitor", "queue", "createHttpRequest", "endpointBuilder", "bytesLimit", "reportError", "retryState", "newRetryState", "sendStrategyForRetry", "payload", "onResponse", "fetchKeepAliveStrategy", "sendWithRetryStrategy", "sendBeaconStrategy", "canUseBeacon", "beaconUrl", "isQueued", "e", "reportBeaconError", "xhrUrl", "sendXHR", "hasReportedBeaconError", "addTelemetryError", "canUseKeepAlive", "isKeepAliveSupported", "fetchUrl", "monitor", "response", "url", "data", "request", "addEventListener", "getEventBridge", "eventBridgeGlobal", "getEventBridgeGlobal", "_a", "eventType", "event", "viewId", "view", "canUseEventBridge", "currentHost", "_a", "getGlobalObject", "bridge", "getEventBridge", "allowedHost", "endsWith", "getEventBridgeGlobal", "PageExitReason", "createPageExitObservable", "configuration", "Observable", "observable", "stopListeners", "addEventListeners", "event", "stopBeforeUnloadListener", "addEventListener", "isPageExitReason", "reason", "includes", "objectValues", "createBatch", "_a", "encoder", "request", "flushController", "messageBytesLimit", "upsertBuffer", "flushSubscription", "event", "flush", "push", "serializedMessage", "estimatedMessageBytesCount", "key", "realMessageBytesCount", "hasMessageFor", "remove", "removedMessage", "messageBytesCount", "addOrUpdate", "message", "jsonStringify", "display", "MORE_DETAILS", "DOCS_TROUBLESHOOTING", "upsertMessages", "objectValues", "isPageExit", "isPageExitReason", "send", "encoderResult", "formatPayloadFromEncoder", "pendingMessages", "computeBytesCount", "data", "createFlushController", "_a", "messagesLimit", "bytesLimit", "durationLimit", "pageExitObservable", "sessionExpireObservable", "pageExitSubscription", "event", "flush", "sessionExpireSubscription", "flushObservable", "Observable", "currentBytesCount", "currentMessagesCount", "flushReason", "messagesCount", "bytesCount", "cancelDurationLimitTimeout", "durationLimitTimeoutId", "scheduleDurationLimitTimeout", "setTimeout", "clearTimeout", "estimatedMessageBytesCount", "messageBytesCountDiff", "messageBytesCount", "startBatchWithReplica", "configuration", "primary", "replica", "reportError", "pageExitObservable", "sessionExpireObservable", "batchFactoryImp", "createBatch", "primaryBatch", "createBatchFromConfig", "replicaBatch", "_a", "endpoint", "encoder", "createHttpRequest", "createFlushController", "message", "replicated", "key", "createIdentityEncoder", "output", "outputBytesCount", "data", "callback", "additionalEncodedBytesCount", "computeBytesCount", "result", "AbstractLifeCycle", "eventType", "data", "eventCallbacks", "callback", "_this", "other", "createEventRateLimiter", "eventType", "limit", "onLimitReached", "eventCount", "allowNextEvent", "setTimeout", "ONE_MINUTE", "ErrorSource", "clocksNow", "xhrObservable", "xhrContexts", "initXhrObservable", "configuration", "createXhrObservable", "Observable", "observable", "stopInstrumentingStart", "instrumentMethod", "openXhr", "stopInstrumentingSend", "call", "sendXhr", "stopInstrumentingAbort", "abortXhr", "_a", "xhr", "_b", "method", "url", "normalizeUrl", "handlingStack", "context", "startContext", "clocksNow", "hasBeenReported", "stopInstrumentingOnReadyStateChange", "onEnd", "unsubscribeLoadEndListener", "completeContext", "elapsed", "timeStampNow", "shallowClone", "addEventListener", "fetchObservable", "initFetchObservable", "createFetchObservable", "createFetchObservable", "Observable", "observable", "stop", "instrumentMethod", "call", "beforeSend", "_a", "parameters", "onPostCall", "handlingStack", "input", "init", "methodFromParams", "method", "url", "normalizeUrl", "startClocks", "clocksNow", "context", "responsePromise", "afterSend", "startContext", "reportFetch", "partialContext", "assign", "monitor", "response", "error", "_b", "consoleObservablesByApi", "initConsoleObservable", "apis", "consoleObservables", "api", "createConsoleObservable", "mergeObservables", "createConsoleObservable", "api", "Observable", "observable", "originalConsoleApi", "globalConsole", "params", "_i", "handlingStack", "createHandlingStack", "callMonitored", "buildConsoleLog", "message", "param", "formatConsoleParameters", "error", "ConsoleApiName", "firstErrorParam", "find", "isError", "toStackTraceString", "computeStackTrace", "tryToGetFingerprint", "flattenErrorCauses", "clocksNow", "ErrorSource", "sanitize", "formatErrorMessage", "jsonStringify", "createContextManager", "customerDataTracker", "context", "changeObservable", "Observable", "contextManager", "deepClone", "newContext", "getType", "sanitize", "key", "property", "CONTEXT_STORE_KEY_PREFIX", "storageListeners", "storeContextManager", "configuration", "contextManager", "productKey", "customerDataType", "storageKey", "buildStorageKey", "addEventListener", "_a", "key", "synchronizeWithStorage", "dumpToStorage", "combine", "getFromStorage", "rawContext", "CUSTOMER_DATA_BYTES_LIMIT", "ONE_KIBI_BYTE", "CUSTOMER_COMPRESSED_DATA_BYTES_LIMIT", "BYTES_COMPUTATION_THROTTLING_DELAY", "createCustomerDataTrackerManager", "compressionStatus", "customerDataTrackers", "alreadyWarned", "checkCustomerDataLimit", "initialBytesCount", "bytesCountLimit", "bytesCount", "tracker", "displayCustomerDataLimitReachedWarning", "createCustomerDataTracker", "type", "newCompressionStatus", "bytesCountCache", "_a", "throttle", "context", "computeBytesCount", "jsonStringify", "computeBytesCountThrottled", "cancelComputeBytesCount", "resetBytesCount", "isEmptyObject", "display", "MORE_DETAILS", "DOCS_TROUBLESHOOTING", "readBytesFromStream", "stream", "callback", "options", "reader", "chunks", "readBytesCount", "readMore", "monitor", "result", "onDone", "error", "noop", "bytes", "limitExceeded", "completeBuffer_1", "offset_1", "chunk", "SYNTHETICS_TEST_ID_COOKIE_NAME", "SYNTHETICS_RESULT_ID_COOKIE_NAME", "SYNTHETICS_INJECTS_RUM_COOKIE_NAME", "willSyntheticsInjectRum", "getInitCookie", "getSyntheticsTestId", "value", "getSyntheticsResultId", "isAuthorized", "status", "handlerType", "logger", "loggerHandler", "sanitizedHandlerType", "STATUS_PRIORITIES", "includes", "StatusType", "_a", "createErrorFieldFromRawError", "rawError", "_a", "_b", "_c", "includeMessage", "HandlerType", "STATUSES", "StatusType", "Logger", "handleLogStrategy", "customerDataTracker", "name", "handlerType", "level", "loggerContext", "createContextManager", "message", "messageContext", "status", "error", "handlingStack", "sanitizedMessageContext", "sanitize", "context", "rawError", "computeRawError", "isError", "computeStackTrace", "ErrorSource", "clocksNow", "combine", "createErrorFieldFromRawError", "isAuthorized", "createHandlingStack", "key", "value", "handler", "__decorate", "monitored", "Logger", "createLoggerMethod", "StatusType", "status", "message", "messageContext", "error", "handlingStack", "isAuthorized", "HandlerType", "createHandlingStack", "buildCommonContext", "globalContextManager", "userContextManager", "DEFAULT_REQUEST_ERROR_RESPONSE_LENGTH_LIMIT", "ONE_KIBI_BYTE", "validateAndBuildLogsConfiguration", "initConfiguration", "display", "baseConfiguration", "validateAndBuildConfiguration", "forwardConsoleLogs", "validateAndBuildForwardOption", "objectValues", "ConsoleApiName", "forwardReports", "RawReportType", "includes", "assign", "option", "allowedValues", "label", "api", "removeDuplicates", "serializeLogsConfiguration", "configuration", "baseSerializedInitConfiguration", "serializeConfiguration", "createPreStartStrategy", "getCommonContext", "trackingConsentState", "doStartLogs", "bufferApiCalls", "createBoundedBuffer", "cachedInitConfiguration", "cachedConfiguration", "trackingConsentStateSubscription", "tryStartLogs", "startLogsResult", "initConfiguration", "display", "initFeatureFlags", "canUseEventBridge", "overrideInitConfigurationForBridge", "displayAlreadyInitializedError", "configuration", "validateAndBuildLogsConfiguration", "initFetchObservable", "noop", "message", "statusType", "handlingStack", "context", "date", "timeStampNow", "assign", "LOGS_STORAGE_KEY", "makeLogsPublicApi", "startLogsImpl", "customerDataTrackerManager", "createCustomerDataTrackerManager", "globalContextManager", "createContextManager", "userContextManager", "trackingConsentState", "createTrackingConsentState", "getCommonContext", "buildCommonContext", "strategy", "createPreStartStrategy", "initConfiguration", "configuration", "storeContextManager", "startLogsResult", "createPostStartStrategy", "customLoggers", "mainLogger", "Logger", "params", "_i", "makePublicApi", "monitor", "trackingConsent", "addTelemetryUsage", "context", "key", "value", "name", "conf", "sanitize", "deepClone", "startTime", "newUser", "checkUser", "sanitizeUser", "property", "sanitizedProperty", "_a", "assign", "displayAlreadyInitializedError", "LOGS_SESSION_KEY", "startLogsSessionManager", "configuration", "trackingConsentState", "sessionManager", "startSessionManager", "rawTrackingType", "computeSessionState", "startTime", "options", "session", "startLogsSessionManagerStub", "isTracked", "computeTrackingType", "Observable", "performDraw", "rawSessionType", "trackingType", "hasValidLoggerSession", "logsSentBeforeRumInjectionTelemetryAdded", "getRUMInternalContext", "startTime", "browserWindow", "willSyntheticsInjectRum", "context", "getInternalContextFromRumGlobal", "addTelemetryDebug", "getSyntheticsTestId", "getSyntheticsResultId", "rumGlobal", "startLogsAssembly", "sessionManager", "configuration", "lifeCycle", "getCommonContext", "reportError", "statusWithCustom", "STATUSES", "logRateLimiters", "status", "createEventRateLimiter", "_a", "rawLogsEvent", "_d", "messageContext", "_e", "savedCommonContext", "domainContext", "startTime", "getRelativeTime", "session", "commonContext", "log", "combine", "isEmptyObject", "getRUMInternalContext", "_b", "ErrorSource", "_c", "LogStatusForApi", "_a", "ConsoleApiName", "StatusType", "startConsoleCollection", "configuration", "lifeCycle", "consoleSubscription", "initConsoleObservable", "log", "collectedData", "timeStampNow", "ErrorSource", "createErrorFieldFromRawError", "startReportCollection", "configuration", "lifeCycle", "reportSubscription", "initReportObservable", "rawError", "message", "error", "status", "StatusType", "createErrorFieldFromRawError", "getFileFromStackTraceString", "timeStampNow", "ErrorSource", "startNetworkErrorCollection", "configuration", "lifeCycle", "noop", "xhrSubscription", "initXhrObservable", "context", "handleResponse", "fetchSubscription", "initFetchObservable", "type", "request", "isIntakeUrl", "isRejected", "isServerError", "computeXhrResponseData", "onResponseDataAvailable", "computeFetchResponseText", "computeFetchErrorText", "responseData", "domainContext", "format", "StatusType", "ErrorSource", "xhr", "callback", "truncateResponseText", "error", "toStackTraceString", "computeStackTrace", "response", "clonedResponse", "tryToClone", "truncateResponseStream", "responseText", "monitor", "text", "stream", "bytesLimit", "readBytesFromStream", "bytes", "limitExceeded", "startRuntimeErrorCollection", "configuration", "lifeCycle", "noop", "rawErrorObservable", "Observable", "stopRuntimeErrorTracking", "trackRuntimeError", "rawErrorSubscription", "rawError", "createErrorFieldFromRawError", "ErrorSource", "StatusType", "LifeCycle", "AbstractLifeCycle", "startLoggerCollection", "lifeCycle", "handleLog", "logsMessage", "logger", "handlingStack", "savedCommonContext", "savedDate", "messageContext", "combine", "isAuthorized", "HandlerType", "displayInConsole", "rawLogEventData", "timeStampNow", "ErrorSource", "loggerToConsoleApiName", "_a", "StatusType", "ConsoleApiName", "status", "message", "originalConsoleMethods", "globalConsole", "startLogsBatch", "configuration", "lifeCycle", "reportError", "pageExitObservable", "session", "batch", "startBatchWithReplica", "createIdentityEncoder", "serverLogsEvent", "startLogsBridge", "lifeCycle", "bridge", "getEventBridge", "serverLogsEvent", "startInternalContext", "sessionManager", "startTime", "trackedSession", "startReportError", "lifeCycle", "error", "ErrorSource", "StatusType", "addTelemetryDebug", "startLogsTelemetry", "initConfiguration", "configuration", "reportError", "pageExitObservable", "session", "telemetry", "startTelemetry", "_a", "getRUMInternalContext", "_b", "_d", "_c", "_f", "_e", "cleanupTasks", "canUseEventBridge", "bridge_1", "getEventBridge", "telemetrySubscription_1", "event", "telemetryBatch_1", "startBatchWithReplica", "createIdentityEncoder", "telemetrySubscription_2", "isTelemetryReplicationAllowed", "drainPreStartTelemetry", "addTelemetryConfiguration", "serializeLogsConfiguration", "task", "startLogs", "initConfiguration", "configuration", "getCommonContext", "trackingConsentState", "lifeCycle", "LifeCycle", "cleanupTasks", "log", "sendToExtension", "reportError", "startReportError", "pageExitObservable", "createPageExitObservable", "session", "canUseEventBridge", "willSyntheticsInjectRum", "startLogsSessionManager", "startLogsSessionManagerStub", "stopLogsTelemetry", "startLogsTelemetry", "startNetworkErrorCollection", "startRuntimeErrorCollection", "startConsoleCollection", "startReportCollection", "handleLog", "startLoggerCollection", "startLogsAssembly", "startLogsBridge", "stopLogsBatch_1", "startLogsBatch", "internalContext", "startInternalContext", "task", "datadogLogs", "makeLogsPublicApi", "startLogs", "defineGlobal", "getGlobalObject", "CHAT_REQUEST_FAILED_EVENT", "DATADOG_CLIENT_TOKEN", "DATADOG_SITE", "SERVICE", "attemptedInit", "datadogEnv", "ensureDatadogLogs", "datadogLogs", "initShoppingAssistantLogging", "logShoppingAssistantChatFailure", "context", "DEFAULT_AGENTS_API_BASE_URL", "chatMessagesKey", "ns", "chatConversationIdKey", "loadPersistedMessages", "stored", "readFromSessionStorage", "msg", "loadPersistedConversationId", "getAgentsApiClient", "basePath", "DefaultApi", "Configuration", "agentsApiOrigin", "useChatMutation", "options", "orgId", "heroProductHandle", "heroProductUrl", "productFunnelId", "tileId", "agentsApiBaseUrl", "storageNamespace", "capabilities", "onMessageSent", "onResponseReceived", "onConversationTurnCompleted", "onChatError", "messages", "setMessages", "conversationId", "setConversationId", "writeToSessionStorage", "realProductFunnelId", "mutation", "useMutation", "params", "resolutionMode", "client", "requestStartTime", "request", "data", "err", "e", "logShoppingAssistantChatFailure", "result", "responseTimeMs", "userMessage", "assistantMessage", "prev", "sendMessage", "message", "messageType", "offeredReplies", "m", "resetChat", "removeFromSessionStorage", "RADIUS_VARS", "buildThemeVarsMap", "theme", "radius", "cardImageRatio", "t", "key", "cssVar", "import_jsx_runtime", "chatVotesKey", "ns", "readStoredVotes", "raw", "readFromSessionStorage", "parsed", "out", "id", "vote", "HANDLE_SCHEME", "sameProduct", "a", "b", "al", "bl", "useIsMobile", "query", "isMobile", "setIsMobile", "mql", "onChange", "SamuelInner", "_props", "ref", "config", "useSamuelConfig", "openTimestampRef", "mobileContainerRef", "navStorageKey", "votesStorageNs", "landingProduct", "setLandingProduct", "landingAfterIndex", "setLandingAfterIndex", "votes", "setVotes", "navCheckedRef", "writeToSessionStorage", "themeVars", "buildThemeVarsMap", "pageContext", "setPageContext", "heroProductHandle", "heroProductUrl", "analytics", "useChatAnalytics", "buildProductUrl", "handle", "url", "messages", "sendMessage", "resetChat", "isLoading", "error", "conversationId", "useChatMutation", "messageType", "messageIndex", "convId", "suggestedReplyText", "suggestedReplyIndex", "suggestedRepliesOfferedCount", "userMessage", "assistantMessage", "recommendedProductHandles", "carouselHeading", "suggestedReplies", "clarifyingQuestion", "suggestHandoff", "handoffReason", "recommendedProductFunnelUrls", "status", "errorName", "mode", "responseTimeMs", "hasExistingUserMessages", "m", "startClosed", "isOpen", "setIsOpen", "handleOpen", "source", "track", "handleClose", "duration", "handleSend", "message", "handleReset", "removeFromSessionStorage", "configOnExternalHandoff", "handleExternalHandoff", "handleExternalHandoffStage", "stage", "context", "prev", "handleProductClicked", "variantExternalId", "handleProductATCClicked", "handleFeedback", "assistantMessageIndex", "feedbackText", "handleRecordVote", "messageId", "handleNavigateToProduct", "product", "isOrgOnly", "brandSiteHero", "brandSiteHeroResolving", "useProductByUrl", "resolvedRootProductId", "resolvedProductHandle", "resolvedRecommendationStrategy", "DEFAULT_RECOMMENDATION_STRATEGY", "navigated", "serverQuestions", "questionsResolving", "usePrePopulatedQuestions", "sharedPanelProps", "resolveStarterQuestions", "hl", "showMobileLauncher", "showDesktopLauncher", "canReopen", "bubble", "ChatButton", "ChatPanel", "cn", "Samuel", "queryClient", "QueryClient", "i18n", "createSamuelI18n", "QueryClientProvider", "I18nextProvider", "SamuelConfigContext", "ChatAnalyticsContext", "API_BASES", "bakedApiBases", "isProdEnv", "import_react", "import_jsx_runtime", "SamuelFacade", "brandName", "brandLogoUrl", "assistantAvatarUrl", "assistantName", "assistantTagline", "suggestedQuestions", "hasHero", "suggestionsResolving", "onSubmit", "inputValue", "setInputValue", "t", "useTranslation", "headerTitle", "headerAvatarUrl", "constrainAvatar", "defaultQuestions", "questions", "submit", "value", "trimmed", "handleFormSubmit", "e", "AssistantHeader", "SuggestionPillList", "SendIcon", "ASSET_HOST_ALLOWLIST", "IMAGEKIT_ACCOUNT_PREFIX", "FONT_FORMATS", "SAFE_FONT_FAMILY", "FONT_WEIGHT", "FONT_FALLBACK_STACK", "parseFontFaces", "raw", "parsed", "f", "isAllowedAssetUrl", "value", "url", "allowedAssetUrl", "buildBrandFontCss", "family", "faces", "quotedFamily", "fontFaceCss", "surfaceFromQuery", "p", "presentationFromQuery", "v", "ORG_SAMPLE_QUESTIONS", "SAFE_CSS_COLOR", "sanitizeThemeColors", "out", "key", "SAFE_CSS_LENGTH", "sanitizeRadius", "CARD_IMAGE_RATIOS", "sanitizeAspectRatio", "RADIUS_PARAMS", "radiiFromQuery", "radii", "surface", "param", "stripHandleContext", "handle", "positiveIntParam", "configFromQuery", "search", "org", "navSink", "createNavSink", "atcSink", "createAtcSink", "viewCartSink", "createViewCartSink", "baked", "bakedApiBases", "supportLabel", "supportPhone", "themeParam", "theme", "actionsParam", "actions", "hostPresentation", "assistantName", "assistantAvatarUrl", "assistantTagline", "assistantDescription", "assistantInfoBullets", "line", "assistant", "greetingParam", "disclaimer", "copy", "createBridgeSink", "createResizeSink", "createExternalHandoffSink", "createOpenLinkSink", "product", "variantExternalId", "toLineItem", "variant", "applyBrandFont", "doc", "config", "root", "applyFontVar", "applySectionTypography", "applyThemeVars", "name", "buildThemeVarsMap", "cssVar", "font", "style", "CSS_LENGTH", "CSS_LINE_HEIGHT", "CSS_FONT_WEIGHT", "section", "weight", "letterSpacing", "lineHeight", "seedNavFromQuery", "nav", "seed", "writeToSessionStorage", "conv", "removeFromSessionStorage", "mountIframeApp", "container", "ref", "_sessionId", "onEvent", "Samuel", "event", "isProdEnv", "FacadeApp", "onSubmit", "hostPage", "subscribeHostPageContext", "getHostPageContext", "pageUrl", "productHandle", "serverQuestions", "isResolving", "usePrePopulatedQuestions", "SamuelFacade", "resolveStarterQuestions", "mountFacadeApp", "facadeOpen", "createFacadeOpenSink", "QueryClientProvider", "QueryClient", "SamuelConfigContext", "I18nextProvider", "createSamuelI18n", "measureFacadeHeight", "el", "content", "armFacadeHeightSink", "postHeight", "createHeightSink", "rafId", "measure", "h", "schedule", "ro", "observed", "observeContent", "initShoppingAssistantLogging", "params", "chatRef", "data", "prompt", "next", "setHostPageContext", "warm", "signalReady", "attempts"]
}
